/ Hex Artifact Content
Login

Artifact e9493a767fafd71bb9b10462a39b3af36d029d4e47e8cc4f531f89175dadf7f4:


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 74 68 65 20 74 79 70 65 20 6f 66 20 62  is the type of b
10d0: 72 61 6e 63 68 2e 20 20 49 20 69 73 20 74 68 65  ranch.  I is the
10e0: 20 64 69 72 65 63 74 69 6f 6e 20 74 61 6b 65 6e   direction taken
10f0: 20 66 6f 72 20 74 68 69 73 20 69 6e 73 74 61 6e   for this instan
1100: 63 65 20 6f 66 0a 2a 2a 20 74 68 65 20 62 72 61  ce of.** the bra
1110: 6e 63 68 2e 0a 2a 2a 0a 2a 2a 20 20 20 4d 3a 20  nch..**.**   M: 
1120: 32 20 2d 20 74 77 6f 2d 77 61 79 20 62 72 61 6e  2 - two-way bran
1130: 63 68 20 28 49 3d 30 3a 20 66 61 6c 6c 2d 74 68  ch (I=0: fall-th
1140: 72 75 20 20 20 31 3a 20 6a 75 6d 70 20 20 20 20  ru   1: jump    
1150: 20 20 20 20 20 20 20 20 20 20 20 20 29 0a 2a 2a              ).**
1160: 20 20 20 20 20 20 33 20 2d 20 74 77 6f 2d 77 61        3 - two-wa
1170: 79 20 2b 20 4e 55 4c 4c 20 28 49 3d 30 3a 20 66  y + NULL (I=0: f
1180: 61 6c 6c 2d 74 68 72 75 20 20 20 31 3a 20 6a 75  all-thru   1: ju
1190: 6d 70 20 20 20 20 20 20 32 3a 20 4e 55 4c 4c 20  mp      2: NULL 
11a0: 20 20 29 0a 2a 2a 20 20 20 20 20 20 34 20 2d 20    ).**      4 - 
11b0: 4f 50 5f 4a 75 6d 70 20 20 20 20 20 20 20 20 28  OP_Jump        (
11c0: 49 3d 30 3a 20 6a 75 6d 70 20 70 31 20 20 20 20  I=0: jump p1    
11d0: 20 31 3a 20 6a 75 6d 70 20 70 32 20 20 20 32 3a   1: jump p2   2:
11e0: 20 6a 75 6d 70 20 70 33 29 0a 2a 2a 0a 2a 2a 20   jump p3).**.** 
11f0: 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
1200: 69 66 20 4d 20 69 73 20 32 2c 20 74 68 65 6e 20  if M is 2, then 
1210: 49 20 69 73 20 65 69 74 68 65 72 20 30 20 28 66  I is either 0 (f
1220: 6f 72 20 66 61 6c 6c 2d 74 68 72 6f 75 67 68 29  or fall-through)
1230: 20 6f 72 0a 2a 2a 20 31 20 28 66 6f 72 20 77 68   or.** 1 (for wh
1240: 65 6e 20 74 68 65 20 62 72 61 6e 63 68 20 69 73  en the branch is
1250: 20 74 61 6b 65 6e 29 2e 20 20 49 66 20 4d 20 69   taken).  If M i
1260: 73 20 33 2c 20 74 68 65 20 49 20 69 73 20 30 20  s 3, the I is 0 
1270: 66 6f 72 20 61 6e 0a 2a 2a 20 6f 72 64 69 6e 61  for an.** ordina
1280: 72 79 20 66 61 6c 6c 2d 74 68 72 6f 75 67 68 2c  ry fall-through,
1290: 20 49 20 69 73 20 31 20 69 66 20 74 68 65 20 62   I is 1 if the b
12a0: 72 61 6e 63 68 20 77 61 73 20 74 61 6b 65 6e 2c  ranch was taken,
12b0: 20 61 6e 64 20 49 20 69 73 20 32 20 0a 2a 2a 20   and I is 2 .** 
12c0: 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  if the result of
12d0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 4e   comparison is N
12e0: 55 4c 4c 2e 20 20 46 6f 72 20 4d 3d 33 2c 20 49  ULL.  For M=3, I
12f0: 3d 32 20 74 68 65 20 6a 75 6d 70 20 6d 61 79 20  =2 the jump may 
1300: 6f 72 0a 2a 2a 20 6d 61 79 20 6e 6f 74 20 62 65  or.** may not be
1310: 20 74 61 6b 65 6e 2c 20 64 65 70 65 6e 64 69 6e   taken, dependin
1320: 67 20 6f 6e 20 74 68 65 20 53 51 4c 49 54 45 5f  g on the SQLITE_
1330: 4a 55 4d 50 49 46 4e 55 4c 4c 20 66 6c 61 67 73  JUMPIFNULL flags
1340: 20 69 6e 20 70 35 2e 0a 2a 2a 20 57 68 65 6e 20   in p5..** When 
1350: 4d 20 69 73 20 34 2c 20 74 68 61 74 20 6d 65 61  M is 4, that mea
1360: 6e 73 20 74 68 61 74 20 61 6e 20 4f 50 5f 4a 75  ns that an OP_Ju
1370: 6d 70 20 69 73 20 62 65 69 6e 67 20 72 75 6e 2e  mp is being run.
1380: 20 20 49 20 69 73 20 30 2c 20 31 2c 20 6f 72 20    I is 0, 1, or 
1390: 32 0a 2a 2a 20 64 65 70 65 6e 64 69 6e 67 20 6f  2.** depending o
13a0: 6e 20 69 66 20 74 68 65 20 6f 70 65 72 61 6e 64  n if the operand
13b0: 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 2c  s are less than,
13c0: 20 65 71 75 61 6c 2c 20 6f 72 20 67 72 65 61 74   equal, or great
13d0: 65 72 20 74 68 61 6e 2e 0a 2a 2a 0a 2a 2a 20 69  er than..**.** i
13e0: 53 72 63 4c 69 6e 65 20 69 73 20 74 68 65 20 73  SrcLine is the s
13f0: 6f 75 72 63 65 20 63 6f 64 65 20 6c 69 6e 65 20  ource code line 
1400: 28 66 72 6f 6d 20 74 68 65 20 5f 5f 4c 49 4e 45  (from the __LINE
1410: 5f 5f 20 6d 61 63 72 6f 29 20 74 68 61 74 0a 2a  __ macro) that.*
1420: 2a 20 67 65 6e 65 72 61 74 65 64 20 74 68 65 20  * generated the 
1430: 56 44 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e  VDBE instruction
1440: 20 63 6f 6d 62 69 6e 65 64 20 77 69 74 68 20 66   combined with f
1450: 6c 61 67 20 62 69 74 73 2e 20 20 54 68 65 20 73  lag bits.  The s
1460: 6f 75 72 63 65 0a 2a 2a 20 63 6f 64 65 20 6c 69  ource.** code li
1470: 6e 65 20 6e 75 6d 62 65 72 20 69 73 20 69 6e 20  ne number is in 
1480: 74 68 65 20 6c 6f 77 65 72 20 32 34 20 62 69 74  the lower 24 bit
1490: 73 20 6f 66 20 69 53 72 63 4c 69 6e 65 20 61 6e  s of iSrcLine an
14a0: 64 20 74 68 65 20 75 70 70 65 72 0a 2a 2a 20 38  d the upper.** 8
14b0: 20 62 79 74 65 73 20 61 72 65 20 66 6c 61 67 73   bytes are flags
14c0: 2e 20 20 54 68 65 20 6c 6f 77 65 72 20 74 68 72  .  The lower thr
14d0: 65 65 20 62 69 74 73 20 6f 66 20 74 68 65 20 66  ee bits of the f
14e0: 6c 61 67 73 20 69 6e 64 69 63 61 74 65 0a 2a 2a  lags indicate.**
14f0: 20 76 61 6c 75 65 73 20 66 6f 72 20 49 20 74 68   values for I th
1500: 61 74 20 73 68 6f 75 6c 64 20 6e 65 76 65 72 20  at should never 
1510: 6f 63 63 75 72 2e 20 20 46 6f 72 20 65 78 61 6d  occur.  For exam
1520: 70 6c 65 2c 20 69 66 20 74 68 65 20 62 72 61 6e  ple, if the bran
1530: 63 68 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20  ch is.** always 
1540: 74 61 6b 65 6e 2c 20 74 68 65 20 66 6c 61 67 73  taken, the flags
1550: 20 73 68 6f 75 6c 64 20 62 65 20 30 78 30 35 20   should be 0x05 
1560: 73 69 6e 63 65 20 74 68 65 20 66 61 6c 6c 2d 74  since the fall-t
1570: 68 72 6f 75 67 68 20 61 6e 64 0a 2a 2a 20 61 6c  hrough and.** al
1580: 74 65 72 6e 61 74 65 20 62 72 61 6e 63 68 20 61  ternate branch a
1590: 72 65 20 6e 65 76 65 72 20 74 61 6b 65 6e 2e 20  re never taken. 
15a0: 20 49 66 20 61 20 62 72 61 6e 63 68 20 69 73 20   If a branch is 
15b0: 6e 65 76 65 72 20 74 61 6b 65 6e 20 74 68 65 6e  never taken then
15c0: 0a 2a 2a 20 66 6c 61 67 73 20 73 68 6f 75 6c 64  .** flags should
15d0: 20 62 65 20 30 78 30 36 20 73 69 6e 63 65 20 6f   be 0x06 since o
15e0: 6e 6c 79 20 74 68 65 20 66 61 6c 6c 2d 74 68 72  nly the fall-thr
15f0: 6f 75 67 68 20 61 70 70 72 6f 61 63 68 20 69 73  ough approach is
1600: 20 61 6c 6c 6f 77 65 64 2e 0a 2a 2a 0a 2a 2a 20   allowed..**.** 
1610: 42 69 74 20 30 78 30 38 20 6f 66 20 74 68 65 20  Bit 0x08 of the 
1620: 66 6c 61 67 73 20 69 6e 64 69 63 61 74 65 73 20  flags indicates 
1630: 61 6e 20 4f 50 5f 4a 75 6d 70 20 6f 70 63 6f 64  an OP_Jump opcod
1640: 65 20 74 68 61 74 20 69 73 20 6f 6e 6c 79 0a 2a  e that is only.*
1650: 2a 20 69 6e 74 65 72 65 73 74 65 64 20 69 6e 20  * interested in 
1660: 65 71 75 61 6c 20 6f 72 20 6e 6f 74 2d 65 71 75  equal or not-equ
1670: 61 6c 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  al.  In other wo
1680: 72 64 73 2c 20 49 3d 3d 30 20 61 6e 64 20 49 3d  rds, I==0 and I=
1690: 3d 32 0a 2a 2a 20 73 68 6f 75 6c 64 20 62 65 20  =2.** should be 
16a0: 74 72 65 61 74 65 64 20 61 73 20 65 71 75 69 76  treated as equiv
16b0: 61 6c 65 6e 74 0a 2a 2a 0a 2a 2a 20 53 69 6e 63  alent.**.** Sinc
16c0: 65 20 6f 6e 6c 79 20 61 20 6c 69 6e 65 20 6e 75  e only a line nu
16d0: 6d 62 65 72 20 69 73 20 72 65 74 61 69 6e 65 64  mber is retained
16e0: 2c 20 6e 6f 74 20 74 68 65 20 66 69 6c 65 6e 61  , not the filena
16f0: 6d 65 2c 20 74 68 69 73 20 6d 61 63 72 6f 0a 2a  me, this macro.*
1700: 2a 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72  * only works for
1710: 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 20 62 75   amalgamation bu
1720: 69 6c 64 73 2e 20 20 42 75 74 20 74 68 61 74 20  ilds.  But that 
1730: 69 73 20 6f 6b 2c 20 73 69 6e 63 65 20 74 68 65  is ok, since the
1740: 73 65 20 6d 61 63 72 6f 73 0a 2a 2a 20 73 68 6f  se macros.** sho
1750: 75 6c 64 20 62 65 20 6e 6f 2d 6f 70 73 20 65 78  uld be no-ops ex
1760: 63 65 70 74 20 66 6f 72 20 73 70 65 63 69 61 6c  cept for special
1770: 20 62 75 69 6c 64 73 20 75 73 65 64 20 74 6f 20   builds used to 
1780: 6d 65 61 73 75 72 65 20 74 65 73 74 20 63 6f 76  measure test cov
1790: 65 72 61 67 65 2e 0a 2a 2f 0a 23 69 66 20 21 64  erage..*/.#if !d
17a0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 56 44  efined(SQLITE_VD
17b0: 42 45 5f 43 4f 56 45 52 41 47 45 29 0a 23 20 64  BE_COVERAGE).# d
17c0: 65 66 69 6e 65 20 56 64 62 65 42 72 61 6e 63 68  efine VdbeBranch
17d0: 54 61 6b 65 6e 28 49 2c 4d 29 0a 23 65 6c 73 65  Taken(I,M).#else
17e0: 0a 23 20 64 65 66 69 6e 65 20 56 64 62 65 42 72  .# define VdbeBr
17f0: 61 6e 63 68 54 61 6b 65 6e 28 49 2c 4d 29 20 76  anchTaken(I,M) v
1800: 64 62 65 54 61 6b 65 42 72 61 6e 63 68 28 70 4f  dbeTakeBranch(pO
1810: 70 2d 3e 69 53 72 63 4c 69 6e 65 2c 49 2c 4d 29  p->iSrcLine,I,M)
1820: 0a 20 20 73 74 61 74 69 63 20 76 6f 69 64 20 76  .  static void v
1830: 64 62 65 54 61 6b 65 42 72 61 6e 63 68 28 75 33  dbeTakeBranch(u3
1840: 32 20 69 53 72 63 4c 69 6e 65 2c 20 75 38 20 49  2 iSrcLine, u8 I
1850: 2c 20 75 38 20 4d 29 7b 0a 20 20 20 20 75 38 20  , u8 M){.    u8 
1860: 6d 4e 65 76 65 72 3b 0a 20 20 20 20 61 73 73 65  mNever;.    asse
1870: 72 74 28 20 49 3c 3d 32 20 29 3b 20 20 2f 2a 20  rt( I<=2 );  /* 
1880: 30 3a 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 2c  0: fall through,
1890: 20 20 31 3a 20 74 61 6b 65 6e 2c 20 20 32 3a 20    1: taken,  2: 
18a0: 61 6c 74 65 72 6e 61 74 65 20 74 61 6b 65 6e 20  alternate taken 
18b0: 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 4d  */.    assert( M
18c0: 3c 3d 34 20 29 3b 20 20 2f 2a 20 32 3a 20 74 77  <=4 );  /* 2: tw
18d0: 6f 2d 77 61 79 20 62 72 61 6e 63 68 2c 20 33 3a  o-way branch, 3:
18e0: 20 74 68 72 65 65 2d 77 61 79 20 62 72 61 6e 63   three-way branc
18f0: 68 2c 20 34 3a 20 4f 50 5f 4a 75 6d 70 20 2a 2f  h, 4: OP_Jump */
1900: 0a 20 20 20 20 61 73 73 65 72 74 28 20 49 3c 4d  .    assert( I<M
1910: 20 29 3b 20 20 20 2f 2a 20 49 20 63 61 6e 20 6f   );   /* I can o
1920: 6e 6c 79 20 62 65 20 32 20 69 66 20 4d 20 69 73  nly be 2 if M is
1930: 20 33 20 6f 72 20 34 20 2a 2f 0a 20 20 20 20 2f   3 or 4 */.    /
1940: 2a 20 54 72 61 6e 73 66 6f 72 6d 20 49 20 66 72  * Transform I fr
1950: 6f 6d 20 61 20 69 6e 74 65 67 65 72 20 5b 30 2c  om a integer [0,
1960: 31 2c 32 5d 20 69 6e 74 6f 20 61 20 62 69 74 6d  1,2] into a bitm
1970: 61 73 6b 20 6f 66 20 5b 31 2c 32 2c 34 5d 20 2a  ask of [1,2,4] *
1980: 2f 0a 20 20 20 20 49 20 3d 20 31 3c 3c 49 3b 0a  /.    I = 1<<I;.
1990: 20 20 20 20 2f 2a 20 54 68 65 20 75 70 70 65 72      /* The upper
19a0: 20 38 20 62 69 74 73 20 6f 66 20 69 53 72 63 4c   8 bits of iSrcL
19b0: 69 6e 65 20 61 72 65 20 66 6c 61 67 73 2e 20 20  ine are flags.  
19c0: 54 68 65 20 6c 6f 77 65 72 20 74 68 72 65 65 20  The lower three 
19d0: 62 69 74 73 20 6f 66 0a 20 20 20 20 2a 2a 20 74  bits of.    ** t
19e0: 68 65 20 66 6c 61 67 73 20 69 6e 64 69 63 61 74  he flags indicat
19f0: 65 20 64 69 72 65 63 74 69 6f 6e 73 20 74 68 61  e directions tha
1a00: 74 20 74 68 65 20 62 72 61 6e 63 68 20 63 61 6e  t the branch can
1a10: 20 6e 65 76 65 72 20 67 6f 2e 20 20 49 66 0a 20   never go.  If. 
1a20: 20 20 20 2a 2a 20 61 20 62 72 61 6e 63 68 20 72     ** a branch r
1a30: 65 61 6c 6c 79 20 64 6f 65 73 20 67 6f 20 69 6e  eally does go in
1a40: 20 6f 6e 65 20 6f 66 20 74 68 6f 73 65 20 64 69   one of those di
1a50: 72 65 63 74 69 6f 6e 73 2c 20 61 73 73 65 72 74  rections, assert
1a60: 20 72 69 67 68 74 0a 20 20 20 20 2a 2a 20 61 77   right.    ** aw
1a70: 61 79 2e 20 2a 2f 0a 20 20 20 20 6d 4e 65 76 65  ay. */.    mNeve
1a80: 72 20 3d 20 69 53 72 63 4c 69 6e 65 20 3e 3e 20  r = iSrcLine >> 
1a90: 32 34 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  24;.    assert( 
1aa0: 28 49 20 26 20 6d 4e 65 76 65 72 29 3d 3d 30 20  (I & mNever)==0 
1ab0: 29 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  );.    if( sqlit
1ac0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
1ad0: 56 64 62 65 42 72 61 6e 63 68 3d 3d 30 20 29 20  VdbeBranch==0 ) 
1ae0: 72 65 74 75 72 6e 3b 20 20 2f 2a 4e 4f 5f 54 45  return;  /*NO_TE
1af0: 53 54 2a 2f 0a 20 20 20 20 2f 2a 20 49 6e 76 6f  ST*/.    /* Invo
1b00: 6b 65 20 74 68 65 20 62 72 61 6e 63 68 20 63 6f  ke the branch co
1b10: 76 65 72 61 67 65 20 63 61 6c 6c 62 61 63 6b 20  verage callback 
1b20: 77 69 74 68 20 74 68 72 65 65 20 61 72 67 75 6d  with three argum
1b30: 65 6e 74 73 3a 0a 20 20 20 20 2a 2a 20 20 20 20  ents:.    **    
1b40: 69 53 72 63 4c 69 6e 65 20 2d 20 74 68 65 20 6c  iSrcLine - the l
1b50: 69 6e 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  ine number of th
1b60: 65 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 29  e VdbeCoverage()
1b70: 20 6d 61 63 72 6f 2c 20 77 69 74 68 0a 20 20 20   macro, with.   
1b80: 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20   **             
1b90: 20 20 66 6c 61 67 73 20 72 65 6d 6f 76 65 64 2e    flags removed.
1ba0: 0a 20 20 20 20 2a 2a 20 20 20 20 49 20 20 20 20  .    **    I    
1bb0: 20 20 20 20 2d 20 4d 61 73 6b 20 6f 66 20 62 69      - Mask of bi
1bc0: 74 73 20 30 78 30 37 20 69 6e 64 69 63 61 74 69  ts 0x07 indicati
1bd0: 6e 67 20 77 68 69 63 68 20 63 61 73 65 73 20 61  ng which cases a
1be0: 72 65 20 61 72 65 0a 20 20 20 20 2a 2a 20 20 20  re are.    **   
1bf0: 20 20 20 20 20 20 20 20 20 20 20 20 66 75 6c 66              fulf
1c00: 69 6c 6c 65 64 20 62 79 20 74 68 69 73 20 69 6e  illed by this in
1c10: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 6a 75  stance of the ju
1c20: 6d 70 2e 20 20 30 78 30 31 20 6d 65 61 6e 73 0a  mp.  0x01 means.
1c30: 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20      **          
1c40: 20 20 20 20 20 66 61 6c 6c 2d 74 68 72 75 2c 20       fall-thru, 
1c50: 30 78 30 32 20 6d 65 61 6e 73 20 74 61 6b 65 6e  0x02 means taken
1c60: 2c 20 30 78 30 34 20 6d 65 61 6e 73 20 4e 55 4c  , 0x04 means NUL
1c70: 4c 2e 20 20 41 6e 79 0a 20 20 20 20 2a 2a 20 20  L.  Any.    **  
1c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70               imp
1c90: 6f 73 73 69 62 6c 65 20 63 61 73 65 73 20 28 65  ossible cases (e
1ca0: 78 3a 20 69 66 20 74 68 65 20 63 6f 6d 70 61 72  x: if the compar
1cb0: 69 73 6f 6e 20 69 73 20 6e 65 76 65 72 20 4e 55  ison is never NU
1cc0: 4c 4c 29 0a 20 20 20 20 2a 2a 20 20 20 20 20 20  LL).    **      
1cd0: 20 20 20 20 20 20 20 20 20 61 72 65 20 66 69 6c           are fil
1ce0: 6c 65 64 20 69 6e 20 61 75 74 6f 6d 61 74 69 63  led in automatic
1cf0: 61 6c 6c 79 20 73 6f 20 74 68 61 74 20 74 68 65  ally so that the
1d00: 20 63 6f 76 65 72 61 67 65 0a 20 20 20 20 2a 2a   coverage.    **
1d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d                 m
1d20: 65 61 73 75 72 65 6d 65 6e 74 20 6c 6f 67 69 63  easurement logic
1d30: 20 64 6f 65 73 20 6e 6f 74 20 66 6c 61 67 20 74   does not flag t
1d40: 68 6f 73 65 20 69 6d 70 6f 73 73 69 62 6c 65 20  hose impossible 
1d50: 63 61 73 65 73 0a 20 20 20 20 2a 2a 20 20 20 20  cases.    **    
1d60: 20 20 20 20 20 20 20 20 20 20 20 61 73 20 6d 69             as mi
1d70: 73 73 65 64 20 63 6f 76 65 72 61 67 65 2e 0a 20  ssed coverage.. 
1d80: 20 20 20 2a 2a 20 20 20 20 4d 20 20 20 20 20 20     **    M      
1d90: 20 20 2d 20 54 79 70 65 20 6f 66 20 6a 75 6d 70    - Type of jump
1da0: 2e 20 20 53 61 6d 65 20 61 73 20 4d 20 61 72 67  .  Same as M arg
1db0: 75 6d 65 6e 74 20 61 62 6f 76 65 0a 20 20 20 20  ument above.    
1dc0: 2a 2f 0a 20 20 20 20 49 20 7c 3d 20 6d 4e 65 76  */.    I |= mNev
1dd0: 65 72 3b 0a 20 20 20 20 69 66 28 20 4d 3d 3d 32  er;.    if( M==2
1de0: 20 29 20 49 20 7c 3d 20 30 78 30 34 3b 0a 20 20   ) I |= 0x04;.  
1df0: 20 20 69 66 28 20 4d 3d 3d 34 20 29 7b 0a 20 20    if( M==4 ){.  
1e00: 20 20 20 20 49 20 7c 3d 20 30 78 30 38 3b 0a 20      I |= 0x08;. 
1e10: 20 20 20 20 20 69 66 28 20 28 6d 4e 65 76 65 72       if( (mNever
1e20: 26 30 78 30 38 29 21 3d 30 20 26 26 20 28 49 26  &0x08)!=0 && (I&
1e30: 30 78 30 35 29 21 3d 30 29 20 49 20 7c 3d 20 30  0x05)!=0) I |= 0
1e40: 78 30 35 3b 20 2f 2a 4e 4f 5f 54 45 53 54 2a 2f  x05; /*NO_TEST*/
1e50: 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
1e60: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
1e70: 56 64 62 65 42 72 61 6e 63 68 28 73 71 6c 69 74  VdbeBranch(sqlit
1e80: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70  e3GlobalConfig.p
1e90: 56 64 62 65 42 72 61 6e 63 68 41 72 67 2c 0a 20  VdbeBranchArg,. 
1ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec0: 20 20 20 69 53 72 63 4c 69 6e 65 26 30 78 66 66     iSrcLine&0xff
1ed0: 66 66 66 66 2c 20 49 2c 20 4d 29 3b 0a 20 20 7d  ffff, I, M);.  }
1ee0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
1ef0: 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69  n ephemeral stri
1f00: 6e 67 20 76 61 6c 75 65 20 28 73 69 67 6e 69 66  ng value (signif
1f10: 69 65 64 20 62 79 20 74 68 65 20 4d 45 4d 5f 45  ied by the MEM_E
1f20: 70 68 65 6d 20 66 6c 61 67 29 20 63 6f 6e 74 61  phem flag) conta
1f30: 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72  ins.** a pointer
1f40: 20 74 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c   to a dynamicall
1f50: 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 74 72 69  y allocated stri
1f60: 6e 67 20 77 68 65 72 65 20 73 6f 6d 65 20 6f 74  ng where some ot
1f70: 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a 20 69 73  her entity.** is
1f80: 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72   responsible for
1f90: 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68   deallocating th
1fa0: 61 74 20 73 74 72 69 6e 67 2e 20 20 42 65 63 61  at string.  Beca
1fb0: 75 73 65 20 74 68 65 20 72 65 67 69 73 74 65 72  use the register
1fc0: 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e  .** does not con
1fd0: 74 72 6f 6c 20 74 68 65 20 73 74 72 69 6e 67 2c  trol the string,
1fe0: 20 69 74 20 6d 69 67 68 74 20 62 65 20 64 65 6c   it might be del
1ff0: 65 74 65 64 20 77 69 74 68 6f 75 74 20 74 68 65  eted without the
2000: 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6b 6e 6f   register.** kno
2010: 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54  wing it..**.** T
2020: 68 69 73 20 72 6f 75 74 69 6e 65 20 63 6f 6e 76  his routine conv
2030: 65 72 74 73 20 61 6e 20 65 70 68 65 6d 65 72 61  erts an ephemera
2040: 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20  l string into a 
2050: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
2060: 63 61 74 65 64 0a 2a 2a 20 73 74 72 69 6e 67 20  cated.** string 
2070: 74 68 61 74 20 74 68 65 20 72 65 67 69 73 74 65  that the registe
2080: 72 20 69 74 73 65 6c 66 20 63 6f 6e 74 72 6f 6c  r itself control
2090: 73 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  s.  In other wor
20a0: 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76 65 72  ds, it.** conver
20b0: 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68 65 6d 20  ts an MEM_Ephem 
20c0: 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20 73 74  string into a st
20d0: 72 69 6e 67 20 77 69 74 68 20 50 2e 7a 3d 3d 50  ring with P.z==P
20e0: 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a 23 64 65  .zMalloc..*/.#de
20f0: 66 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61 6c  fine Deephemeral
2100: 69 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28 20  ize(P) \.   if( 
2110: 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  ((P)->flags&MEM_
2120: 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20 20  Ephem)!=0 \.    
2130: 20 20 20 26 26 20 73 71 6c 69 74 65 33 56 64 62     && sqlite3Vdb
2140: 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c  eMemMakeWriteabl
2150: 65 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f 5f  e(P) ){ goto no_
2160: 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74 75 72 6e  mem;}../* Return
2170: 20 74 72 75 65 20 69 66 20 74 68 65 20 63 75 72   true if the cur
2180: 73 6f 72 20 77 61 73 20 6f 70 65 6e 65 64 20 75  sor was opened u
2190: 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f 70 65 6e  sing the OP_Open
21a0: 53 6f 72 74 65 72 20 6f 70 63 6f 64 65 2e 20 2a  Sorter opcode. *
21b0: 2f 0a 23 64 65 66 69 6e 65 20 69 73 53 6f 72 74  /.#define isSort
21c0: 65 72 28 78 29 20 28 28 78 29 2d 3e 65 43 75 72  er(x) ((x)->eCur
21d0: 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 53 4f  Type==CURTYPE_SO
21e0: 52 54 45 52 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  RTER)../*.** All
21f0: 6f 63 61 74 65 20 56 64 62 65 43 75 72 73 6f 72  ocate VdbeCursor
2200: 20 6e 75 6d 62 65 72 20 69 43 75 72 2e 20 20 52   number iCur.  R
2210: 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72 20  eturn a pointer 
2220: 74 6f 20 69 74 2e 20 20 52 65 74 75 72 6e 20 4e  to it.  Return N
2230: 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20 72 75 6e  ULL.** if we run
2240: 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 2e 0a   out of memory..
2250: 2a 2f 0a 73 74 61 74 69 63 20 56 64 62 65 43 75  */.static VdbeCu
2260: 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74 65 43 75  rsor *allocateCu
2270: 72 73 6f 72 28 0a 20 20 56 64 62 65 20 2a 70 2c  rsor(.  Vdbe *p,
2280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2290: 20 54 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   The virtual mac
22a0: 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 69 43  hine */.  int iC
22b0: 75 72 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ur,             
22c0: 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65 20  /* Index of the 
22d0: 6e 65 77 20 56 64 62 65 43 75 72 73 6f 72 20 2a  new VdbeCursor *
22e0: 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 2c 20  /.  int nField, 
22f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
2300: 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e  ber of fields in
2310: 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
2320: 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62  dex */.  int iDb
2330: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
2340: 2a 20 44 61 74 61 62 61 73 65 20 74 68 65 20 63  * Database the c
2350: 75 72 73 6f 72 20 62 65 6c 6f 6e 67 73 20 74 6f  ursor belongs to
2360: 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20 20 75 38 20  , or -1 */.  u8 
2370: 65 43 75 72 54 79 70 65 20 20 20 20 20 20 20 20  eCurType        
2380: 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68     /* Type of th
2390: 65 20 6e 65 77 20 63 75 72 73 6f 72 20 2a 2f 0a  e new cursor */.
23a0: 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65  ){.  /* Find the
23b0: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61   memory cell tha
23c0: 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74  t will be used t
23d0: 6f 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62  o store the blob
23e0: 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20   of memory.  ** 
23f0: 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69  required for thi
2400: 73 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72  s VdbeCursor str
2410: 75 63 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f  ucture. It is co
2420: 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20  nvenient to use 
2430: 61 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d  a .  ** vdbe mem
2440: 6f 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61  ory cell to mana
2450: 67 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c  ge the memory al
2460: 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65  location require
2470: 64 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62  d for a.  ** Vdb
2480: 65 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72  eCursor structur
2490: 65 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77  e for the follow
24a0: 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a  ing reasons:.  *
24b0: 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74  *.  **   * Somet
24c0: 69 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62  imes cursor numb
24d0: 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72  ers are used for
24e0: 20 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66   a couple of dif
24f0: 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20  ferent.  **     
2500: 70 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64  purposes in a vd
2510: 62 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20  be program. The 
2520: 64 69 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d  different uses m
2530: 69 67 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a  ight require.  *
2540: 2a 20 20 20 20 20 64 69 66 66 65 72 65 6e 74 20  *     different 
2550: 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e  sized allocation
2560: 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  s. Memory cells 
2570: 70 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65  provide growable
2580: 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61  .  **     alloca
2590: 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  tions..  **.  **
25a0: 20 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20     * When using 
25b0: 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41  ENABLE_MEMORY_MA
25c0: 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79  NAGEMENT, memory
25d0: 20 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61   cell buffers ca
25e0: 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72  n.  **     be fr
25f0: 65 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74  eed lazily via t
2600: 68 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61  he sqlite3_relea
2610: 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e  se_memory() API.
2620: 20 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d   This.  **     m
2630: 69 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d  inimizes the num
2640: 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61  ber of malloc ca
2650: 6c 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65 20  lls made by the 
2660: 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a  system..  **.  *
2670: 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  * The memory cel
2680: 6c 20 66 6f 72 20 63 75 72 73 6f 72 20 30 20 69  l for cursor 0 i
2690: 73 20 61 4d 65 6d 5b 30 5d 2e 20 54 68 65 20 72  s aMem[0]. The r
26a0: 65 73 74 20 61 72 65 20 61 6c 6c 6f 63 61 74 65  est are allocate
26b0: 64 20 66 72 6f 6d 0a 20 20 2a 2a 20 74 68 65 20  d from.  ** the 
26c0: 74 6f 70 20 6f 66 20 74 68 65 20 72 65 67 69 73  top of the regis
26d0: 74 65 72 20 73 70 61 63 65 2e 20 20 43 75 72 73  ter space.  Curs
26e0: 6f 72 20 31 20 69 73 20 61 74 20 4d 65 6d 5b 70  or 1 is at Mem[p
26f0: 2d 3e 6e 4d 65 6d 2d 31 5d 2e 0a 20 20 2a 2a 20  ->nMem-1]..  ** 
2700: 43 75 72 73 6f 72 20 32 20 69 73 20 61 74 20 4d  Cursor 2 is at M
2710: 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 32 5d 2e 20 41  em[p->nMem-2]. A
2720: 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20 2a  nd so forth..  *
2730: 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20  /.  Mem *pMem = 
2740: 69 43 75 72 3e 30 20 3f 20 26 70 2d 3e 61 4d 65  iCur>0 ? &p->aMe
2750: 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d 20  m[p->nMem-iCur] 
2760: 3a 20 70 2d 3e 61 4d 65 6d 3b 0a 0a 20 20 69 6e  : p->aMem;..  in
2770: 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65 43  t nByte;.  VdbeC
2780: 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b 0a  ursor *pCx = 0;.
2790: 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20 20    nByte = .     
27a0: 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56   ROUND8(sizeof(V
27b0: 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32 2a  dbeCursor)) + 2*
27c0: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
27d0: 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 65 43 75  ld + .      (eCu
27e0: 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
27f0: 54 52 45 45 3f 73 71 6c 69 74 65 33 42 74 72 65  TREE?sqlite3Btre
2800: 65 43 75 72 73 6f 72 53 69 7a 65 28 29 3a 30 29  eCursorSize():0)
2810: 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 43 75  ;..  assert( iCu
2820: 72 3e 3d 30 20 26 26 20 69 43 75 72 3c 70 2d 3e  r>=0 && iCur<p->
2830: 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28  nCursor );.  if(
2840: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20   p->apCsr[iCur] 
2850: 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f  ){ /*OPTIMIZATIO
2860: 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20  N-IF-FALSE*/.   
2870: 20 2f 2a 20 42 65 66 6f 72 65 20 63 61 6c 6c 69   /* Before calli
2880: 6e 67 20 73 71 6c 69 74 65 33 56 64 62 65 46 72  ng sqlite3VdbeFr
2890: 65 65 43 75 72 73 6f 72 28 29 2c 20 65 6e 73 75  eeCursor(), ensu
28a0: 72 65 20 74 68 65 20 69 73 45 70 68 65 6d 65 72  re the isEphemer
28b0: 61 6c 20 66 6c 61 67 0a 20 20 20 20 2a 2a 20 69  al flag.    ** i
28c0: 73 20 63 6c 65 61 72 2e 20 4f 74 68 65 72 77 69  s clear. Otherwi
28d0: 73 65 2c 20 69 66 20 74 68 69 73 20 69 73 20 61  se, if this is a
28e0: 6e 20 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73  n ephemeral curs
28f0: 6f 72 20 63 72 65 61 74 65 64 20 62 79 20 0a 20  or created by . 
2900: 20 20 20 2a 2a 20 4f 50 5f 4f 70 65 6e 44 75 70     ** OP_OpenDup
2910: 2c 20 74 68 65 20 63 75 72 73 6f 72 20 77 69 6c  , the cursor wil
2920: 6c 20 6e 6f 74 20 62 65 20 63 6c 6f 73 65 64 20  l not be closed 
2930: 61 6e 64 20 77 69 6c 6c 20 73 74 69 6c 6c 20 62  and will still b
2940: 65 20 70 61 72 74 0a 20 20 20 20 2a 2a 20 6f 66  e part.    ** of
2950: 20 61 20 42 74 53 68 61 72 65 64 2e 70 43 75 72   a BtShared.pCur
2960: 73 6f 72 20 6c 69 73 74 2e 20 20 2a 2f 0a 20 20  sor list.  */.  
2970: 20 20 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 69    if( p->apCsr[i
2980: 43 75 72 5d 2d 3e 70 42 74 78 3d 3d 30 20 29 20  Cur]->pBtx==0 ) 
2990: 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 2d 3e  p->apCsr[iCur]->
29a0: 69 73 45 70 68 65 6d 65 72 61 6c 20 3d 20 30 3b  isEphemeral = 0;
29b0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
29c0: 46 72 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d  FreeCursor(p, p-
29d0: 3e 61 70 43 73 72 5b 69 43 75 72 5d 29 3b 0a 20  >apCsr[iCur]);. 
29e0: 20 20 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72     p->apCsr[iCur
29f0: 5d 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28  ] = 0;.  }.  if(
2a00: 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69   SQLITE_OK==sqli
2a10: 74 65 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41  te3VdbeMemClearA
2a20: 6e 64 52 65 73 69 7a 65 28 70 4d 65 6d 2c 20 6e  ndResize(pMem, n
2a30: 42 79 74 65 29 20 29 7b 0a 20 20 20 20 70 2d 3e  Byte) ){.    p->
2a40: 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20 70 43  apCsr[iCur] = pC
2a50: 78 20 3d 20 28 56 64 62 65 43 75 72 73 6f 72 2a  x = (VdbeCursor*
2a60: 29 70 4d 65 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65  )pMem->z;.    me
2a70: 6d 73 65 74 28 70 43 78 2c 20 30 2c 20 6f 66 66  mset(pCx, 0, off
2a80: 73 65 74 6f 66 28 56 64 62 65 43 75 72 73 6f 72  setof(VdbeCursor
2a90: 2c 70 41 6c 74 43 75 72 73 6f 72 29 29 3b 0a 20  ,pAltCursor));. 
2aa0: 20 20 20 70 43 78 2d 3e 65 43 75 72 54 79 70 65     pCx->eCurType
2ab0: 20 3d 20 65 43 75 72 54 79 70 65 3b 0a 20 20 20   = eCurType;.   
2ac0: 20 70 43 78 2d 3e 69 44 62 20 3d 20 69 44 62 3b   pCx->iDb = iDb;
2ad0: 0a 20 20 20 20 70 43 78 2d 3e 6e 46 69 65 6c 64  .    pCx->nField
2ae0: 20 3d 20 6e 46 69 65 6c 64 3b 0a 20 20 20 20 70   = nField;.    p
2af0: 43 78 2d 3e 61 4f 66 66 73 65 74 20 3d 20 26 70  Cx->aOffset = &p
2b00: 43 78 2d 3e 61 54 79 70 65 5b 6e 46 69 65 6c 64  Cx->aType[nField
2b10: 5d 3b 0a 20 20 20 20 69 66 28 20 65 43 75 72 54  ];.    if( eCurT
2b20: 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
2b30: 45 45 20 29 7b 0a 20 20 20 20 20 20 70 43 78 2d  EE ){.      pCx-
2b40: 3e 75 63 2e 70 43 75 72 73 6f 72 20 3d 20 28 42  >uc.pCursor = (B
2b50: 74 43 75 72 73 6f 72 2a 29 0a 20 20 20 20 20 20  tCursor*).      
2b60: 20 20 20 20 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55      &pMem->z[ROU
2b70: 4e 44 38 28 73 69 7a 65 6f 66 28 56 64 62 65 43  ND8(sizeof(VdbeC
2b80: 75 72 73 6f 72 29 29 2b 32 2a 73 69 7a 65 6f 66  ursor))+2*sizeof
2b90: 28 75 33 32 29 2a 6e 46 69 65 6c 64 5d 3b 0a 20  (u32)*nField];. 
2ba0: 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65       sqlite3Btre
2bb0: 65 43 75 72 73 6f 72 5a 65 72 6f 28 70 43 78 2d  eCursorZero(pCx-
2bc0: 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20  >uc.pCursor);.  
2bd0: 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e    }.  }.  return
2be0: 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54   pCx;.}../*.** T
2bf0: 68 65 20 73 74 72 69 6e 67 20 69 6e 20 70 52 65  he string in pRe
2c00: 63 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6c 6f  c is known to lo
2c10: 6f 6b 20 6c 69 6b 65 20 61 6e 20 69 6e 74 65 67  ok like an integ
2c20: 65 72 20 61 6e 64 20 74 6f 20 68 61 76 65 20 61  er and to have a
2c30: 0a 2a 2a 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  .** floating poi
2c40: 6e 74 20 76 61 6c 75 65 20 6f 66 20 72 56 61 6c  nt value of rVal
2c50: 75 65 2e 20 20 52 65 74 75 72 6e 20 74 72 75 65  ue.  Return true
2c60: 20 61 6e 64 20 73 65 74 20 2a 70 69 56 61 6c 75   and set *piValu
2c70: 65 20 74 6f 20 74 68 65 0a 2a 2a 20 69 6e 74 65  e to the.** inte
2c80: 67 65 72 20 76 61 6c 75 65 20 69 66 20 74 68 65  ger value if the
2c90: 20 73 74 72 69 6e 67 20 69 73 20 69 6e 20 72 61   string is in ra
2ca0: 6e 67 65 20 74 6f 20 62 65 20 61 6e 20 69 6e 74  nge to be an int
2cb0: 65 67 65 72 2e 20 20 4f 74 68 65 72 77 69 73 65  eger.  Otherwise
2cc0: 2c 0a 2a 2a 20 72 65 74 75 72 6e 20 66 61 6c 73  ,.** return fals
2cd0: 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  e..*/.static int
2ce0: 20 61 6c 73 6f 41 6e 49 6e 74 28 4d 65 6d 20 2a   alsoAnInt(Mem *
2cf0: 70 52 65 63 2c 20 64 6f 75 62 6c 65 20 72 56 61  pRec, double rVa
2d00: 6c 75 65 2c 20 69 36 34 20 2a 70 69 56 61 6c 75  lue, i64 *piValu
2d10: 65 29 7b 0a 20 20 69 36 34 20 69 56 61 6c 75 65  e){.  i64 iValue
2d20: 20 3d 20 28 64 6f 75 62 6c 65 29 72 56 61 6c 75   = (double)rValu
2d30: 65 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  e;.  if( sqlite3
2d40: 52 65 61 6c 53 61 6d 65 41 73 49 6e 74 28 72 56  RealSameAsInt(rV
2d50: 61 6c 75 65 2c 69 56 61 6c 75 65 29 20 29 7b 0a  alue,iValue) ){.
2d60: 20 20 20 20 2a 70 69 56 61 6c 75 65 20 3d 20 69      *piValue = i
2d70: 56 61 6c 75 65 3b 0a 20 20 20 20 72 65 74 75 72  Value;.    retur
2d80: 6e 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  n 1;.  }.  retur
2d90: 6e 20 30 3d 3d 73 71 6c 69 74 65 33 41 74 6f 69  n 0==sqlite3Atoi
2da0: 36 34 28 70 52 65 63 2d 3e 7a 2c 20 70 69 56 61  64(pRec->z, piVa
2db0: 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 70 52  lue, pRec->n, pR
2dc0: 65 63 2d 3e 65 6e 63 29 3b 0a 7d 0a 0a 2f 2a 0a  ec->enc);.}../*.
2dd0: 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72  ** Try to conver
2de0: 74 20 61 20 76 61 6c 75 65 20 69 6e 74 6f 20 61  t a value into a
2df0: 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65   numeric represe
2e00: 6e 74 61 74 69 6f 6e 20 69 66 20 77 65 20 63 61  ntation if we ca
2e10: 6e 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74 68 6f  n.** do so witho
2e20: 75 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72  ut loss of infor
2e30: 6d 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65  mation.  In othe
2e40: 72 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20  r words, if the 
2e50: 73 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20  string.** looks 
2e60: 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 63  like a number, c
2e70: 6f 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20 61  onvert it into a
2e80: 20 6e 75 6d 62 65 72 2e 20 20 49 66 20 69 74 20   number.  If it 
2e90: 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b  does not.** look
2ea0: 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20   like a number, 
2eb0: 6c 65 61 76 65 20 69 74 20 61 6c 6f 6e 65 2e 0a  leave it alone..
2ec0: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 62 54 72  **.** If the bTr
2ed0: 79 46 6f 72 49 6e 74 20 66 6c 61 67 20 69 73 20  yForInt flag is 
2ee0: 74 72 75 65 2c 20 74 68 65 6e 20 65 78 74 72 61  true, then extra
2ef0: 20 65 66 66 6f 72 74 20 69 73 20 6d 61 64 65 20   effort is made 
2f00: 74 6f 20 67 69 76 65 0a 2a 2a 20 61 6e 20 69 6e  to give.** an in
2f10: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
2f20: 74 69 6f 6e 2e 20 20 53 74 72 69 6e 67 73 20 74  tion.  Strings t
2f30: 68 61 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20 66 6c  hat look like fl
2f40: 6f 61 74 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20  oating point.** 
2f50: 76 61 6c 75 65 73 20 62 75 74 20 77 68 69 63 68  values but which
2f60: 20 68 61 76 65 20 6e 6f 20 66 72 61 63 74 69 6f   have no fractio
2f70: 6e 61 6c 20 63 6f 6d 70 6f 6e 65 6e 74 20 28 65  nal component (e
2f80: 78 61 6d 70 6c 65 3a 20 27 34 38 2e 30 30 27 29  xample: '48.00')
2f90: 0a 2a 2a 20 77 69 6c 6c 20 68 61 76 65 20 61 20  .** will have a 
2fa0: 4d 45 4d 5f 49 6e 74 20 72 65 70 72 65 73 65 6e  MEM_Int represen
2fb0: 74 61 74 69 6f 6e 20 77 68 65 6e 20 62 54 72 79  tation when bTry
2fc0: 46 6f 72 49 6e 74 20 69 73 20 74 72 75 65 2e 0a  ForInt is true..
2fd0: 2a 2a 0a 2a 2a 20 49 66 20 62 54 72 79 46 6f 72  **.** If bTryFor
2fe0: 49 6e 74 20 69 73 20 66 61 6c 73 65 2c 20 74 68  Int is false, th
2ff0: 65 6e 20 69 66 20 74 68 65 20 69 6e 70 75 74 20  en if the input 
3000: 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 73 20  string contains 
3010: 61 20 64 65 63 69 6d 61 6c 0a 2a 2a 20 70 6f 69  a decimal.** poi
3020: 6e 74 20 6f 72 20 65 78 70 6f 6e 65 6e 74 69 61  nt or exponentia
3030: 6c 20 6e 6f 74 61 74 69 6f 6e 2c 20 74 68 65 20  l notation, the 
3040: 72 65 73 75 6c 74 20 69 73 20 6f 6e 6c 79 20 4d  result is only M
3050: 45 4d 5f 52 65 61 6c 2c 20 65 76 65 6e 0a 2a 2a  EM_Real, even.**
3060: 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20   if there is an 
3070: 65 78 61 63 74 20 69 6e 74 65 67 65 72 20 72 65  exact integer re
3080: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
3090: 74 68 65 20 71 75 61 6e 74 69 74 79 2e 0a 2a 2f  the quantity..*/
30a0: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61 70 70  .static void app
30b0: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
30c0: 79 28 4d 65 6d 20 2a 70 52 65 63 2c 20 69 6e 74  y(Mem *pRec, int
30d0: 20 62 54 72 79 46 6f 72 49 6e 74 29 7b 0a 20 20   bTryForInt){.  
30e0: 64 6f 75 62 6c 65 20 72 56 61 6c 75 65 3b 0a 20  double rValue;. 
30f0: 20 75 38 20 65 6e 63 20 3d 20 70 52 65 63 2d 3e   u8 enc = pRec->
3100: 65 6e 63 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  enc;.  int rc;. 
3110: 20 61 73 73 65 72 74 28 20 28 70 52 65 63 2d 3e   assert( (pRec->
3120: 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72  flags & (MEM_Str
3130: 7c 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61  |MEM_Int|MEM_Rea
3140: 6c 7c 4d 45 4d 5f 49 6e 74 52 65 61 6c 29 29 3d  l|MEM_IntReal))=
3150: 3d 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 72 63  =MEM_Str );.  rc
3160: 20 3d 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70   = sqlite3AtoF(p
3170: 52 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75 65 2c  Rec->z, &rValue,
3180: 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3b 0a   pRec->n, enc);.
3190: 20 20 69 66 28 20 72 63 3c 3d 30 20 29 20 72 65    if( rc<=0 ) re
31a0: 74 75 72 6e 3b 0a 20 20 69 66 28 20 72 63 3d 3d  turn;.  if( rc==
31b0: 31 20 26 26 20 61 6c 73 6f 41 6e 49 6e 74 28 70  1 && alsoAnInt(p
31c0: 52 65 63 2c 20 72 56 61 6c 75 65 2c 20 26 70 52  Rec, rValue, &pR
31d0: 65 63 2d 3e 75 2e 69 29 20 29 7b 0a 20 20 20 20  ec->u.i) ){.    
31e0: 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d  pRec->flags |= M
31f0: 45 4d 5f 49 6e 74 3b 0a 20 20 7d 65 6c 73 65 7b  EM_Int;.  }else{
3200: 0a 20 20 20 20 70 52 65 63 2d 3e 75 2e 72 20 3d  .    pRec->u.r =
3210: 20 72 56 61 6c 75 65 3b 0a 20 20 20 20 70 52 65   rValue;.    pRe
3220: 63 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f  c->flags |= MEM_
3230: 52 65 61 6c 3b 0a 20 20 20 20 69 66 28 20 62 54  Real;.    if( bT
3240: 72 79 46 6f 72 49 6e 74 20 29 20 73 71 6c 69 74  ryForInt ) sqlit
3250: 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66 66  e3VdbeIntegerAff
3260: 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20 7d  inity(pRec);.  }
3270: 0a 20 20 2f 2a 20 54 45 58 54 2d 3e 4e 55 4d 45  .  /* TEXT->NUME
3280: 52 49 43 20 69 73 20 6d 61 6e 79 2d 3e 6f 6e 65  RIC is many->one
3290: 2e 20 20 48 65 6e 63 65 2c 20 69 74 20 69 73 20  .  Hence, it is 
32a0: 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 69 6e 76  important to inv
32b0: 61 6c 69 64 61 74 65 20 74 68 65 0a 20 20 2a 2a  alidate the.  **
32c0: 20 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e   string represen
32d0: 74 61 74 69 6f 6e 20 61 66 74 65 72 20 63 6f 6d  tation after com
32e0: 70 75 74 69 6e 67 20 61 20 6e 75 6d 65 72 69 63  puting a numeric
32f0: 20 65 71 75 69 76 61 6c 65 6e 74 2c 20 62 65 63   equivalent, bec
3300: 61 75 73 65 20 74 68 65 0a 20 20 2a 2a 20 73 74  ause the.  ** st
3310: 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74  ring representat
3320: 69 6f 6e 20 6d 69 67 68 74 20 6e 6f 74 20 62 65  ion might not be
3330: 20 74 68 65 20 63 61 6e 6f 6e 69 63 61 6c 20 72   the canonical r
3340: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 66 6f  epresentation fo
3350: 72 20 74 68 65 0a 20 20 2a 2a 20 6e 75 6d 65 72  r the.  ** numer
3360: 69 63 20 76 61 6c 75 65 2e 20 20 54 69 63 6b 65  ic value.  Ticke
3370: 74 20 5b 33 34 33 36 33 34 39 34 32 64 64 35 34  t [343634942dd54
3380: 61 62 35 37 62 37 30 32 34 5d 20 32 30 31 38 2d  ab57b7024] 2018-
3390: 30 31 2d 33 31 2e 20 2a 2f 0a 20 20 70 52 65 63  01-31. */.  pRec
33a0: 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f  ->flags &= ~MEM_
33b0: 53 74 72 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72  Str;.}../*.** Pr
33c0: 6f 63 65 73 73 69 6e 67 20 69 73 20 64 65 74 65  ocessing is dete
33d0: 72 6d 69 6e 65 20 62 79 20 74 68 65 20 61 66 66  rmine by the aff
33e0: 69 6e 69 74 79 20 70 61 72 61 6d 65 74 65 72 3a  inity parameter:
33f0: 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46  .**.** SQLITE_AF
3400: 46 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a 20 53 51  F_INTEGER:.** SQ
3410: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 3a 0a 2a  LITE_AFF_REAL:.*
3420: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  * SQLITE_AFF_NUM
3430: 45 52 49 43 3a 0a 2a 2a 20 20 20 20 54 72 79 20  ERIC:.**    Try 
3440: 74 6f 20 63 6f 6e 76 65 72 74 20 70 52 65 63 20  to convert pRec 
3450: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65  to an integer re
3460: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 72 20  presentation or 
3470: 61 20 0a 2a 2a 20 20 20 20 66 6c 6f 61 74 69 6e  a .**    floatin
3480: 67 2d 70 6f 69 6e 74 20 72 65 70 72 65 73 65 6e  g-point represen
3490: 74 61 74 69 6f 6e 20 69 66 20 61 6e 20 69 6e 74  tation if an int
34a0: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
34b0: 69 6f 6e 0a 2a 2a 20 20 20 20 69 73 20 6e 6f 74  ion.**    is not
34c0: 20 70 6f 73 73 69 62 6c 65 2e 20 20 4e 6f 74 65   possible.  Note
34d0: 20 74 68 61 74 20 74 68 65 20 69 6e 74 65 67 65   that the intege
34e0: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
34f0: 20 69 73 0a 2a 2a 20 20 20 20 61 6c 77 61 79 73   is.**    always
3500: 20 70 72 65 66 65 72 72 65 64 2c 20 65 76 65 6e   preferred, even
3510: 20 69 66 20 74 68 65 20 61 66 66 69 6e 69 74 79   if the affinity
3520: 20 69 73 20 52 45 41 4c 2c 20 62 65 63 61 75 73   is REAL, becaus
3530: 65 0a 2a 2a 20 20 20 20 61 6e 20 69 6e 74 65 67  e.**    an integ
3540: 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  er representatio
3550: 6e 20 69 73 20 6d 6f 72 65 20 73 70 61 63 65 20  n is more space 
3560: 65 66 66 69 63 69 65 6e 74 20 6f 6e 20 64 69 73  efficient on dis
3570: 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f  k..**.** SQLITE_
3580: 41 46 46 5f 54 45 58 54 3a 0a 2a 2a 20 20 20 20  AFF_TEXT:.**    
3590: 43 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20  Convert pRec to 
35a0: 61 20 74 65 78 74 20 72 65 70 72 65 73 65 6e 74  a text represent
35b0: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c  ation..**.** SQL
35c0: 49 54 45 5f 41 46 46 5f 42 4c 4f 42 3a 0a 2a 2a  ITE_AFF_BLOB:.**
35d0: 20 20 20 20 4e 6f 2d 6f 70 2e 20 20 70 52 65 63      No-op.  pRec
35e0: 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a   is unchanged..*
35f0: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61 70  /.static void ap
3600: 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20 4d  plyAffinity(.  M
3610: 65 6d 20 2a 70 52 65 63 2c 20 20 20 20 20 20 20  em *pRec,       
3620: 20 20 20 2f 2a 20 54 68 65 20 76 61 6c 75 65 20     /* The value 
3630: 74 6f 20 61 70 70 6c 79 20 61 66 66 69 6e 69 74  to apply affinit
3640: 79 20 74 6f 20 2a 2f 0a 20 20 63 68 61 72 20 61  y to */.  char a
3650: 66 66 69 6e 69 74 79 2c 20 20 20 20 20 20 2f 2a  ffinity,      /*
3660: 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74 6f   The affinity to
3670: 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20   be applied */. 
3680: 20 75 38 20 65 6e 63 20 20 20 20 20 20 20 20 20   u8 enc         
3690: 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73       /* Use this
36a0: 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a   text encoding *
36b0: 2f 0a 29 7b 0a 20 20 69 66 28 20 61 66 66 69 6e  /.){.  if( affin
36c0: 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity>=SQLITE_AFF_
36d0: 4e 55 4d 45 52 49 43 20 29 7b 0a 20 20 20 20 61  NUMERIC ){.    a
36e0: 73 73 65 72 74 28 20 61 66 66 69 6e 69 74 79 3d  ssert( affinity=
36f0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45  =SQLITE_AFF_INTE
3700: 47 45 52 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d  GER || affinity=
3710: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c  =SQLITE_AFF_REAL
3720: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c  .             ||
3730: 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54   affinity==SQLIT
3740: 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b  E_AFF_NUMERIC );
3750: 0a 20 20 20 20 69 66 28 20 28 70 52 65 63 2d 3e  .    if( (pRec->
3760: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
3770: 3d 3d 30 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a  ==0 ){ /*OPTIMIZ
3780: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f  ATION-IF-FALSE*/
3790: 0a 20 20 20 20 20 20 69 66 28 20 28 70 52 65 63  .      if( (pRec
37a0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ->flags & MEM_Re
37b0: 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  al)==0 ){.      
37c0: 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67    if( pRec->flag
37d0: 73 20 26 20 4d 45 4d 5f 53 74 72 20 29 20 61 70  s & MEM_Str ) ap
37e0: 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  plyNumericAffini
37f0: 74 79 28 70 52 65 63 2c 31 29 3b 0a 20 20 20 20  ty(pRec,1);.    
3800: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
3810: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65   sqlite3VdbeInte
3820: 67 65 72 41 66 66 69 6e 69 74 79 28 70 52 65 63  gerAffinity(pRec
3830: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
3840: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 61 66 66  .  }else if( aff
3850: 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46  inity==SQLITE_AF
3860: 46 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 2f 2a  F_TEXT ){.    /*
3870: 20 4f 6e 6c 79 20 61 74 74 65 6d 70 74 20 74 68   Only attempt th
3880: 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 6f 20  e conversion to 
3890: 54 45 58 54 20 69 66 20 74 68 65 72 65 20 69 73  TEXT if there is
38a0: 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 72   an integer or r
38b0: 65 61 6c 0a 20 20 20 20 2a 2a 20 72 65 70 72 65  eal.    ** repre
38c0: 73 65 6e 74 61 74 69 6f 6e 20 28 62 6c 6f 62 20  sentation (blob 
38d0: 61 6e 64 20 4e 55 4c 4c 20 64 6f 20 6e 6f 74 20  and NULL do not 
38e0: 67 65 74 20 63 6f 6e 76 65 72 74 65 64 29 20 62  get converted) b
38f0: 75 74 20 6e 6f 20 73 74 72 69 6e 67 0a 20 20 20  ut no string.   
3900: 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74 69   ** representati
3910: 6f 6e 2e 20 20 49 74 20 77 6f 75 6c 64 20 62 65  on.  It would be
3920: 20 68 61 72 6d 6c 65 73 73 20 74 6f 20 72 65 70   harmless to rep
3930: 65 61 74 20 74 68 65 20 63 6f 6e 76 65 72 73 69  eat the conversi
3940: 6f 6e 20 69 66 20 0a 20 20 20 20 2a 2a 20 74 68  on if .    ** th
3950: 65 72 65 20 69 73 20 61 6c 72 65 61 64 79 20 61  ere is already a
3960: 20 73 74 72 69 6e 67 20 72 65 70 2c 20 62 75 74   string rep, but
3970: 20 69 74 20 69 73 20 70 6f 69 6e 74 6c 65 73 73   it is pointless
3980: 20 74 6f 20 77 61 73 74 65 20 74 68 6f 73 65 0a   to waste those.
3990: 20 20 20 20 2a 2a 20 43 50 55 20 63 79 63 6c 65      ** CPU cycle
39a0: 73 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 30 3d  s. */.    if( 0=
39b0: 3d 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45  =(pRec->flags&ME
39c0: 4d 5f 53 74 72 29 20 29 7b 20 2f 2a 4f 50 54 49  M_Str) ){ /*OPTI
39d0: 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53  MIZATION-IF-FALS
39e0: 45 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28 70  E*/.      if( (p
39f0: 52 65 63 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f  Rec->flags&(MEM_
3a00: 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 7c 4d 45 4d  Real|MEM_Int|MEM
3a10: 5f 49 6e 74 52 65 61 6c 29 29 20 29 7b 0a 20 20  _IntReal)) ){.  
3a20: 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
3a30: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pRec->flags & ME
3a40: 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 20 20 20  M_Int );.       
3a50: 20 74 65 73 74 63 61 73 65 28 20 70 52 65 63 2d   testcase( pRec-
3a60: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61  >flags & MEM_Rea
3a70: 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73  l );.        tes
3a80: 74 63 61 73 65 28 20 70 52 65 63 2d 3e 66 6c 61  tcase( pRec->fla
3a90: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 52 65 61 6c  gs & MEM_IntReal
3aa0: 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   );.        sqli
3ab0: 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67  te3VdbeMemString
3ac0: 69 66 79 28 70 52 65 63 2c 20 65 6e 63 2c 20 31  ify(pRec, enc, 1
3ad0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
3ae0: 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73  .    pRec->flags
3af0: 20 26 3d 20 7e 28 4d 45 4d 5f 52 65 61 6c 7c 4d   &= ~(MEM_Real|M
3b00: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 49 6e 74 52 65  EM_Int|MEM_IntRe
3b10: 61 6c 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a  al);.  }.}../*.*
3b20: 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74  * Try to convert
3b30: 20 74 68 65 20 74 79 70 65 20 6f 66 20 61 20 66   the type of a f
3b40: 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74  unction argument
3b50: 20 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c   or a result col
3b60: 75 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61 20 6e 75  umn.** into a nu
3b70: 6d 65 72 69 63 20 72 65 70 72 65 73 65 6e 74 61  meric representa
3b80: 74 69 6f 6e 2e 20 20 55 73 65 20 65 69 74 68 65  tion.  Use eithe
3b90: 72 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41  r INTEGER or REA
3ba0: 4c 20 77 68 69 63 68 65 76 65 72 0a 2a 2a 20 69  L whichever.** i
3bb0: 73 20 61 70 70 72 6f 70 72 69 61 74 65 2e 20 20  s appropriate.  
3bc0: 42 75 74 20 6f 6e 6c 79 20 64 6f 20 74 68 65 20  But only do the 
3bd0: 63 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20 69 74  conversion if it
3be0: 20 69 73 20 70 6f 73 73 69 62 6c 65 20 77 69 74   is possible wit
3bf0: 68 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20 6f 66 20  hout.** loss of 
3c00: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20  information and 
3c10: 72 65 74 75 72 6e 20 74 68 65 20 72 65 76 69 73  return the revis
3c20: 65 64 20 74 79 70 65 20 6f 66 20 74 68 65 20 61  ed type of the a
3c30: 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69 6e 74 20  rgument..*/.int 
3c40: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 6e 75  sqlite3_value_nu
3c50: 6d 65 72 69 63 5f 74 79 70 65 28 73 71 6c 69 74  meric_type(sqlit
3c60: 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b  e3_value *pVal){
3c70: 0a 20 20 69 6e 74 20 65 54 79 70 65 20 3d 20 73  .  int eType = s
3c80: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70  qlite3_value_typ
3c90: 65 28 70 56 61 6c 29 3b 0a 20 20 69 66 28 20 65  e(pVal);.  if( e
3ca0: 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f 54 45 58  Type==SQLITE_TEX
3cb0: 54 20 29 7b 0a 20 20 20 20 4d 65 6d 20 2a 70 4d  T ){.    Mem *pM
3cc0: 65 6d 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c 3b  em = (Mem*)pVal;
3cd0: 0a 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69  .    applyNumeri
3ce0: 63 41 66 66 69 6e 69 74 79 28 70 4d 65 6d 2c 20  cAffinity(pMem, 
3cf0: 30 29 3b 0a 20 20 20 20 65 54 79 70 65 20 3d 20  0);.    eType = 
3d00: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79  sqlite3_value_ty
3d10: 70 65 28 70 56 61 6c 29 3b 0a 20 20 7d 0a 20 20  pe(pVal);.  }.  
3d20: 72 65 74 75 72 6e 20 65 54 79 70 65 3b 0a 7d 0a  return eType;.}.
3d30: 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74 65 64 20  ./*.** Exported 
3d40: 76 65 72 73 69 6f 6e 20 6f 66 20 61 70 70 6c 79  version of apply
3d50: 41 66 66 69 6e 69 74 79 28 29 2e 20 54 68 69 73  Affinity(). This
3d60: 20 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e 20 73 71   one works on sq
3d70: 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 0a 2a  lite3_value*, .*
3d80: 2a 20 6e 6f 74 20 74 68 65 20 69 6e 74 65 72 6e  * not the intern
3d90: 61 6c 20 4d 65 6d 2a 20 74 79 70 65 2e 0a 2a 2f  al Mem* type..*/
3da0: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
3db0: 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28  ueApplyAffinity(
3dc0: 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
3dd0: 20 2a 70 56 61 6c 2c 20 0a 20 20 75 38 20 61 66   *pVal, .  u8 af
3de0: 66 69 6e 69 74 79 2c 20 0a 20 20 75 38 20 65 6e  finity, .  u8 en
3df0: 63 0a 29 7b 0a 20 20 61 70 70 6c 79 41 66 66 69  c.){.  applyAffi
3e00: 6e 69 74 79 28 28 4d 65 6d 20 2a 29 70 56 61 6c  nity((Mem *)pVal
3e10: 2c 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 29  , affinity, enc)
3e20: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 70 4d 65 6d 20  ;.}../*.** pMem 
3e30: 63 75 72 72 65 6e 74 6c 79 20 6f 6e 6c 79 20 68  currently only h
3e40: 6f 6c 64 73 20 61 20 73 74 72 69 6e 67 20 74 79  olds a string ty
3e50: 70 65 20 28 6f 72 20 6d 61 79 62 65 20 61 20 42  pe (or maybe a B
3e60: 4c 4f 42 20 74 68 61 74 20 77 65 20 63 61 6e 0a  LOB that we can.
3e70: 2a 2a 20 69 6e 74 65 72 70 72 65 74 20 61 73 20  ** interpret as 
3e80: 61 20 73 74 72 69 6e 67 20 69 66 20 77 65 20 77  a string if we w
3e90: 61 6e 74 20 74 6f 29 2e 20 20 43 6f 6d 70 75 74  ant to).  Comput
3ea0: 65 20 69 74 73 20 63 6f 72 72 65 73 70 6f 6e 64  e its correspond
3eb0: 69 6e 67 0a 2a 2a 20 6e 75 6d 65 72 69 63 20 74  ing.** numeric t
3ec0: 79 70 65 2c 20 69 66 20 68 61 73 20 6f 6e 65 2e  ype, if has one.
3ed0: 20 20 53 65 74 20 74 68 65 20 70 4d 65 6d 2d 3e    Set the pMem->
3ee0: 75 2e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e 75 2e  u.r and pMem->u.
3ef0: 69 20 66 69 65 6c 64 73 0a 2a 2a 20 61 63 63 6f  i fields.** acco
3f00: 72 64 69 6e 67 6c 79 2e 0a 2a 2f 0a 73 74 61 74  rdingly..*/.stat
3f10: 69 63 20 75 31 36 20 53 51 4c 49 54 45 5f 4e 4f  ic u16 SQLITE_NO
3f20: 49 4e 4c 49 4e 45 20 63 6f 6d 70 75 74 65 4e 75  INLINE computeNu
3f30: 6d 65 72 69 63 54 79 70 65 28 4d 65 6d 20 2a 70  mericType(Mem *p
3f40: 4d 65 6d 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a  Mem){.  int rc;.
3f50: 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20    sqlite3_int64 
3f60: 69 78 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  ix;.  assert( (p
3f70: 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  Mem->flags & (ME
3f80: 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d  M_Int|MEM_Real|M
3f90: 45 4d 5f 49 6e 74 52 65 61 6c 29 29 3d 3d 30 20  EM_IntReal))==0 
3fa0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d  );.  assert( (pM
3fb0: 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  em->flags & (MEM
3fc0: 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 21  _Str|MEM_Blob))!
3fd0: 3d 30 20 29 3b 0a 20 20 45 78 70 61 6e 64 42 6c  =0 );.  ExpandBl
3fe0: 6f 62 28 70 4d 65 6d 29 3b 0a 20 20 72 63 20 3d  ob(pMem);.  rc =
3ff0: 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 4d 65   sqlite3AtoF(pMe
4000: 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e 72  m->z, &pMem->u.r
4010: 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d  , pMem->n, pMem-
4020: 3e 65 6e 63 29 3b 0a 20 20 69 66 28 20 72 63 3c  >enc);.  if( rc<
4030: 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 72 63  =0 ){.    if( rc
4040: 3d 3d 30 20 26 26 20 73 71 6c 69 74 65 33 41 74  ==0 && sqlite3At
4050: 6f 69 36 34 28 70 4d 65 6d 2d 3e 7a 2c 20 26 69  oi64(pMem->z, &i
4060: 78 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d  x, pMem->n, pMem
4070: 2d 3e 65 6e 63 29 3c 3d 31 20 29 7b 0a 20 20 20  ->enc)<=1 ){.   
4080: 20 20 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d 20 69     pMem->u.i = i
4090: 78 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  x;.      return 
40a0: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 65 6c  MEM_Int;.    }el
40b0: 73 65 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e  se{.      return
40c0: 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 20 20 7d   MEM_Real;.    }
40d0: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 72 63 3d  .  }else if( rc=
40e0: 3d 31 20 26 26 20 73 71 6c 69 74 65 33 41 74 6f  =1 && sqlite3Ato
40f0: 69 36 34 28 70 4d 65 6d 2d 3e 7a 2c 20 26 69 78  i64(pMem->z, &ix
4100: 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d  , pMem->n, pMem-
4110: 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a 20 20 20 20  >enc)==0 ){.    
4120: 70 4d 65 6d 2d 3e 75 2e 69 20 3d 20 69 78 3b 0a  pMem->u.i = ix;.
4130: 20 20 20 20 72 65 74 75 72 6e 20 4d 45 4d 5f 49      return MEM_I
4140: 6e 74 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  nt;.  }.  return
4150: 20 4d 45 4d 5f 52 65 61 6c 3b 0a 7d 0a 0a 2f 2a   MEM_Real;.}../*
4160: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e  .** Return the n
4170: 75 6d 65 72 69 63 20 74 79 70 65 20 66 6f 72 20  umeric type for 
4180: 70 4d 65 6d 2c 20 65 69 74 68 65 72 20 4d 45 4d  pMem, either MEM
4190: 5f 49 6e 74 20 6f 72 20 4d 45 4d 5f 52 65 61 6c  _Int or MEM_Real
41a0: 20 6f 72 20 62 6f 74 68 20 6f 72 0a 2a 2a 20 6e   or both or.** n
41b0: 6f 6e 65 2e 20 20 0a 2a 2a 0a 2a 2a 20 55 6e 6c  one.  .**.** Unl
41c0: 69 6b 65 20 61 70 70 6c 79 4e 75 6d 65 72 69 63  ike applyNumeric
41d0: 41 66 66 69 6e 69 74 79 28 29 2c 20 74 68 69 73  Affinity(), this
41e0: 20 72 6f 75 74 69 6e 65 20 64 6f 65 73 20 6e 6f   routine does no
41f0: 74 20 6d 6f 64 69 66 79 20 70 4d 65 6d 2d 3e 66  t modify pMem->f
4200: 6c 61 67 73 2e 0a 2a 2a 20 42 75 74 20 69 74 20  lags..** But it 
4210: 64 6f 65 73 20 73 65 74 20 70 4d 65 6d 2d 3e 75  does set pMem->u
4220: 2e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e 75 2e 69  .r and pMem->u.i
4230: 20 61 70 70 72 6f 70 72 69 61 74 65 6c 79 2e 0a   appropriately..
4240: 2a 2f 0a 73 74 61 74 69 63 20 75 31 36 20 6e 75  */.static u16 nu
4250: 6d 65 72 69 63 54 79 70 65 28 4d 65 6d 20 2a 70  mericType(Mem *p
4260: 4d 65 6d 29 7b 0a 20 20 69 66 28 20 70 4d 65 6d  Mem){.  if( pMem
4270: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49  ->flags & (MEM_I
4280: 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f  nt|MEM_Real|MEM_
4290: 49 6e 74 52 65 61 6c 29 20 29 7b 0a 20 20 20 20  IntReal) ){.    
42a0: 74 65 73 74 63 61 73 65 28 20 70 4d 65 6d 2d 3e  testcase( pMem->
42b0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
42c0: 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28  );.    testcase(
42d0: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d   pMem->flags & M
42e0: 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20 20 74  EM_Real );.    t
42f0: 65 73 74 63 61 73 65 28 20 70 4d 65 6d 2d 3e 66  estcase( pMem->f
4300: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 52 65  lags & MEM_IntRe
4310: 61 6c 20 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  al );.    return
4320: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28   pMem->flags & (
4330: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
4340: 7c 4d 45 4d 5f 49 6e 74 52 65 61 6c 29 3b 0a 20  |MEM_IntReal);. 
4350: 20 7d 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e 66   }.  if( pMem->f
4360: 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c  lags & (MEM_Str|
4370: 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a 20 20 20  MEM_Blob) ){.   
4380: 20 74 65 73 74 63 61 73 65 28 20 70 4d 65 6d 2d   testcase( pMem-
4390: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72  >flags & MEM_Str
43a0: 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65   );.    testcase
43b0: 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20  ( pMem->flags & 
43c0: 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20  MEM_Blob );.    
43d0: 72 65 74 75 72 6e 20 63 6f 6d 70 75 74 65 4e 75  return computeNu
43e0: 6d 65 72 69 63 54 79 70 65 28 70 4d 65 6d 29 3b  mericType(pMem);
43f0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b  .  }.  return 0;
4400: 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .}..#ifdef SQLIT
4410: 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 57 72  E_DEBUG./*.** Wr
4420: 69 74 65 20 61 20 6e 69 63 65 20 73 74 72 69 6e  ite a nice strin
4430: 67 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  g representation
4440: 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 73   of the contents
4450: 20 6f 66 20 63 65 6c 6c 20 70 4d 65 6d 0a 2a 2a   of cell pMem.**
4460: 20 69 6e 74 6f 20 62 75 66 66 65 72 20 7a 42 75   into buffer zBu
4470: 66 2c 20 6c 65 6e 67 74 68 20 6e 42 75 66 2e 0a  f, length nBuf..
4480: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  */.void sqlite3V
4490: 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e  dbeMemPrettyPrin
44a0: 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 63 68 61  t(Mem *pMem, cha
44b0: 72 20 2a 7a 42 75 66 29 7b 0a 20 20 63 68 61 72  r *zBuf){.  char
44c0: 20 2a 7a 43 73 72 20 3d 20 7a 42 75 66 3b 0a 20   *zCsr = zBuf;. 
44d0: 20 69 6e 74 20 66 20 3d 20 70 4d 65 6d 2d 3e 66   int f = pMem->f
44e0: 6c 61 67 73 3b 0a 0a 20 20 73 74 61 74 69 63 20  lags;..  static 
44f0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73  const char *cons
4500: 74 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b  t encnames[] = {
4510: 22 28 58 29 22 2c 20 22 28 38 29 22 2c 20 22 28  "(X)", "(8)", "(
4520: 31 36 4c 45 29 22 2c 20 22 28 31 36 42 45 29 22  16LE)", "(16BE)"
4530: 7d 3b 0a 0a 20 20 69 66 28 20 66 26 4d 45 4d 5f  };..  if( f&MEM_
4540: 42 6c 6f 62 20 29 7b 0a 20 20 20 20 69 6e 74 20  Blob ){.    int 
4550: 69 3b 0a 20 20 20 20 63 68 61 72 20 63 3b 0a 20  i;.    char c;. 
4560: 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44     if( f & MEM_D
4570: 79 6e 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  yn ){.      c = 
4580: 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'z';.      asser
4590: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
45a0: 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d  tic|MEM_Ephem))=
45b0: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  =0 );.    }else 
45c0: 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74  if( f & MEM_Stat
45d0: 69 63 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  ic ){.      c = 
45e0: 27 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  't';.      asser
45f0: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e  t( (f & (MEM_Dyn
4600: 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20  |MEM_Ephem))==0 
4610: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
4620: 20 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29   f & MEM_Ephem )
4630: 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 65 27 3b  {.      c = 'e';
4640: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
4650: 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c  f & (MEM_Static|
4660: 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a  MEM_Dyn))==0 );.
4670: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
4680: 20 63 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d 0a   c = 's';.    }.
4690: 20 20 20 20 2a 28 7a 43 73 72 2b 2b 29 20 3d 20      *(zCsr++) = 
46a0: 63 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  c;.    sqlite3_s
46b0: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
46c0: 72 2c 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e  r, "%d[", pMem->
46d0: 6e 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20  n);.    zCsr += 
46e0: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
46f0: 7a 43 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69  zCsr);.    for(i
4700: 3d 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d  =0; i<16 && i<pM
4710: 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20  em->n; i++){.   
4720: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
4730: 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22  ntf(100, zCsr, "
4740: 25 30 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65  %02X", ((int)pMe
4750: 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29  m->z[i] & 0xFF))
4760: 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20  ;.      zCsr += 
4770: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
4780: 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20  zCsr);.    }.   
4790: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26   for(i=0; i<16 &
47a0: 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b  & i<pMem->n; i++
47b0: 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20  ){.      char z 
47c0: 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20  = pMem->z[i];.  
47d0: 20 20 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20      if( z<32 || 
47e0: 7a 3e 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20  z>126 ) *zCsr++ 
47f0: 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73  = '.';.      els
4800: 65 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20  e *zCsr++ = z;. 
4810: 20 20 20 7d 0a 20 20 20 20 2a 28 7a 43 73 72 2b     }.    *(zCsr+
4820: 2b 29 20 3d 20 27 5d 27 3b 0a 20 20 20 20 69 66  +) = ']';.    if
4830: 28 20 66 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29  ( f & MEM_Zero )
4840: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
4850: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43  snprintf(100, zC
4860: 73 72 2c 22 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e  sr,"+%dz",pMem->
4870: 75 2e 6e 5a 65 72 6f 29 3b 0a 20 20 20 20 20 20  u.nZero);.      
4880: 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53  zCsr += sqlite3S
4890: 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20  trlen30(zCsr);. 
48a0: 20 20 20 7d 0a 20 20 20 20 2a 7a 43 73 72 20 3d     }.    *zCsr =
48b0: 20 27 5c 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69   '\0';.  }else i
48c0: 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 72 20 29  f( f & MEM_Str )
48d0: 7b 0a 20 20 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a  {.    int j, k;.
48e0: 20 20 20 20 7a 42 75 66 5b 30 5d 20 3d 20 27 20      zBuf[0] = ' 
48f0: 27 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d  ';.    if( f & M
4900: 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20  EM_Dyn ){.      
4910: 7a 42 75 66 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20  zBuf[1] = 'z';. 
4920: 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20       assert( (f 
4930: 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  & (MEM_Static|ME
4940: 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a  M_Ephem))==0 );.
4950: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20      }else if( f 
4960: 26 20 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a  & MEM_Static ){.
4970: 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20        zBuf[1] = 
4980: 27 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  't';.      asser
4990: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e  t( (f & (MEM_Dyn
49a0: 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20  |MEM_Ephem))==0 
49b0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
49c0: 20 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29   f & MEM_Ephem )
49d0: 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20  {.      zBuf[1] 
49e0: 3d 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73  = 'e';.      ass
49f0: 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53  ert( (f & (MEM_S
4a00: 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d  tatic|MEM_Dyn))=
4a10: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  =0 );.    }else{
4a20: 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d  .      zBuf[1] =
4a30: 20 27 73 27 3b 0a 20 20 20 20 7d 0a 20 20 20 20   's';.    }.    
4a40: 6b 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69 74  k = 2;.    sqlit
4a50: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
4a60: 20 26 7a 42 75 66 5b 6b 5d 2c 20 22 25 64 22 2c   &zBuf[k], "%d",
4a70: 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b   pMem->n);.    k
4a80: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
4a90: 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20  n30(&zBuf[k]);. 
4aa0: 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27     zBuf[k++] = '
4ab0: 5b 27 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b  [';.    for(j=0;
4ac0: 20 6a 3c 31 35 20 26 26 20 6a 3c 70 4d 65 6d 2d   j<15 && j<pMem-
4ad0: 3e 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20  >n; j++){.      
4ae0: 75 38 20 63 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a  u8 c = pMem->z[j
4af0: 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3e 3d  ];.      if( c>=
4b00: 30 78 32 30 20 26 26 20 63 3c 30 78 37 66 20 29  0x20 && c<0x7f )
4b10: 7b 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b  {.        zBuf[k
4b20: 2b 2b 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20 7d  ++] = c;.      }
4b30: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 42  else{.        zB
4b40: 75 66 5b 6b 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20  uf[k++] = '.';. 
4b50: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
4b60: 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27   zBuf[k++] = ']'
4b70: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
4b80: 70 72 69 6e 74 66 28 31 30 30 2c 26 7a 42 75 66  printf(100,&zBuf
4b90: 5b 6b 5d 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d  [k], encnames[pM
4ba0: 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 6b  em->enc]);.    k
4bb0: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
4bc0: 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20  n30(&zBuf[k]);. 
4bd0: 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30     zBuf[k++] = 0
4be0: 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a  ;.  }.}.#endif..
4bf0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
4c00: 42 55 47 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20  BUG./*.** Print 
4c10: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20 72  the value of a r
4c20: 65 67 69 73 74 65 72 20 66 6f 72 20 74 72 61 63  egister for trac
4c30: 69 6e 67 20 70 75 72 70 6f 73 65 73 3a 0a 2a 2f  ing purposes:.*/
4c40: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6d 65 6d  .static void mem
4c50: 54 72 61 63 65 50 72 69 6e 74 28 4d 65 6d 20 2a  TracePrint(Mem *
4c60: 70 29 7b 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61  p){.  if( p->fla
4c70: 67 73 20 26 20 4d 45 4d 5f 55 6e 64 65 66 69 6e  gs & MEM_Undefin
4c80: 65 64 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66  ed ){.    printf
4c90: 28 22 20 75 6e 64 65 66 69 6e 65 64 22 29 3b 0a  (" undefined");.
4ca0: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66    }else if( p->f
4cb0: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
4cc0: 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 70 2d  ){.    printf(p-
4cd0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72  >flags & MEM_Zer
4ce0: 6f 20 3f 20 22 20 4e 55 4c 4c 2d 6e 6f 63 68 6e  o ? " NULL-nochn
4cf0: 67 22 20 3a 20 22 20 4e 55 4c 4c 22 29 3b 0a 20  g" : " NULL");. 
4d00: 20 7d 65 6c 73 65 20 69 66 28 20 28 70 2d 3e 66   }else if( (p->f
4d10: 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c  lags & (MEM_Int|
4d20: 4d 45 4d 5f 53 74 72 29 29 3d 3d 28 4d 45 4d 5f  MEM_Str))==(MEM_
4d30: 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 20 29 7b 0a  Int|MEM_Str) ){.
4d40: 20 20 20 20 70 72 69 6e 74 66 28 22 20 73 69 3a      printf(" si:
4d50: 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a  %lld", p->u.i);.
4d60: 20 20 7d 65 6c 73 65 20 69 66 28 20 28 70 2d 3e    }else if( (p->
4d70: 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74  flags & (MEM_Int
4d80: 52 65 61 6c 29 29 21 3d 30 20 29 7b 0a 20 20 20  Real))!=0 ){.   
4d90: 20 70 72 69 6e 74 66 28 22 20 69 72 3a 25 6c 6c   printf(" ir:%ll
4da0: 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a 20 20 7d  d", p->u.i);.  }
4db0: 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67  else if( p->flag
4dc0: 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20  s & MEM_Int ){. 
4dd0: 20 20 20 70 72 69 6e 74 66 28 22 20 69 3a 25 6c     printf(" i:%l
4de0: 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a 23 69  ld", p->u.i);.#i
4df0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
4e00: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
4e10: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e  .  }else if( p->
4e20: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c  flags & MEM_Real
4e30: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   ){.    printf("
4e40: 20 72 3a 25 67 22 2c 20 70 2d 3e 75 2e 72 29 3b   r:%g", p->u.r);
4e50: 0a 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73 65 20  .#endif.  }else 
4e60: 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
4e70: 65 6d 49 73 52 6f 77 53 65 74 28 70 29 20 29 7b  emIsRowSet(p) ){
4e80: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 28 72  .    printf(" (r
4e90: 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d 65 6c 73  owset)");.  }els
4ea0: 65 7b 0a 20 20 20 20 63 68 61 72 20 7a 42 75 66  e{.    char zBuf
4eb0: 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71 6c 69 74  [200];.    sqlit
4ec0: 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79 50  e3VdbeMemPrettyP
4ed0: 72 69 6e 74 28 70 2c 20 7a 42 75 66 29 3b 0a 20  rint(p, zBuf);. 
4ee0: 20 20 20 70 72 69 6e 74 66 28 22 20 25 73 22 2c     printf(" %s",
4ef0: 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 20 20 69 66   zBuf);.  }.  if
4f00: 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ( p->flags & MEM
4f10: 5f 53 75 62 74 79 70 65 20 29 20 70 72 69 6e 74  _Subtype ) print
4f20: 66 28 22 20 73 75 62 74 79 70 65 3d 30 78 25 30  f(" subtype=0x%0
4f30: 32 78 22 2c 20 70 2d 3e 65 53 75 62 74 79 70 65  2x", p->eSubtype
4f40: 29 3b 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64  );.}.static void
4f50: 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28 69   registerTrace(i
4f60: 6e 74 20 69 52 65 67 2c 20 4d 65 6d 20 2a 70 29  nt iReg, Mem *p)
4f70: 7b 0a 20 20 70 72 69 6e 74 66 28 22 52 45 47 5b  {.  printf("REG[
4f80: 25 64 5d 20 3d 20 22 2c 20 69 52 65 67 29 3b 0a  %d] = ", iReg);.
4f90: 20 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28    memTracePrint(
4fa0: 70 29 3b 0a 20 20 70 72 69 6e 74 66 28 22 5c 6e  p);.  printf("\n
4fb0: 22 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  ");.  sqlite3Vdb
4fc0: 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61  eCheckMemInvaria
4fd0: 6e 74 73 28 70 29 3b 0a 7d 0a 23 65 6e 64 69 66  nts(p);.}.#endif
4fe0: 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
4ff0: 44 45 42 55 47 0a 23 20 20 64 65 66 69 6e 65 20  DEBUG.#  define 
5000: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 52  REGISTER_TRACE(R
5010: 2c 4d 29 20 69 66 28 64 62 2d 3e 66 6c 61 67 73  ,M) if(db->flags
5020: 26 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63  &SQLITE_VdbeTrac
5030: 65 29 72 65 67 69 73 74 65 72 54 72 61 63 65 28  e)registerTrace(
5040: 52 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 20 64 65  R,M).#else.#  de
5050: 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52  fine REGISTER_TR
5060: 41 43 45 28 52 2c 4d 29 0a 23 65 6e 64 69 66 0a  ACE(R,M).#endif.
5070: 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52  ..#ifdef VDBE_PR
5080: 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77  OFILE../* .** hw
5090: 74 69 6d 65 2e 68 20 63 6f 6e 74 61 69 6e 73 20  time.h contains 
50a0: 69 6e 6c 69 6e 65 20 61 73 73 65 6d 62 6c 65 72  inline assembler
50b0: 20 63 6f 64 65 20 66 6f 72 20 69 6d 70 6c 65 6d   code for implem
50c0: 65 6e 74 69 6e 67 20 0a 2a 2a 20 68 69 67 68 2d  enting .** high-
50d0: 70 65 72 66 6f 72 6d 61 6e 63 65 20 74 69 6d 69  performance timi
50e0: 6e 67 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a  ng routines..*/.
50f0: 23 69 6e 63 6c 75 64 65 20 22 68 77 74 69 6d 65  #include "hwtime
5100: 2e 68 22 0a 0a 23 65 6e 64 69 66 0a 0a 23 69 66  .h"..#endif..#if
5110: 6e 64 65 66 20 4e 44 45 42 55 47 0a 2f 2a 0a 2a  ndef NDEBUG./*.*
5120: 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  * This function 
5130: 69 73 20 6f 6e 6c 79 20 63 61 6c 6c 65 64 20 66  is only called f
5140: 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20 61 73  rom within an as
5150: 73 65 72 74 28 29 20 65 78 70 72 65 73 73 69 6f  sert() expressio
5160: 6e 2e 20 49 74 0a 2a 2a 20 63 68 65 63 6b 73 20  n. It.** checks 
5170: 74 68 61 74 20 74 68 65 20 73 71 6c 69 74 65 33  that the sqlite3
5180: 2e 6e 54 72 61 6e 73 61 63 74 69 6f 6e 20 76 61  .nTransaction va
5190: 72 69 61 62 6c 65 20 69 73 20 63 6f 72 72 65 63  riable is correc
51a0: 74 6c 79 20 73 65 74 20 74 6f 0a 2a 2a 20 74 68  tly set to.** th
51b0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d  e number of non-
51c0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
51d0: 70 6f 69 6e 74 73 20 63 75 72 72 65 6e 74 6c 79  points currently
51e0: 20 69 6e 20 74 68 65 20 0a 2a 2a 20 6c 69 6e 6b   in the .** link
51f0: 65 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67  ed list starting
5200: 20 61 74 20 73 71 6c 69 74 65 33 2e 70 53 61 76   at sqlite3.pSav
5210: 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20 55  epoint..** .** U
5220: 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  sage:.**.**     
5230: 61 73 73 65 72 74 28 20 63 68 65 63 6b 53 61 76  assert( checkSav
5240: 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20  epointCount(db) 
5250: 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  );.*/.static int
5260: 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43   checkSavepointC
5270: 6f 75 6e 74 28 73 71 6c 69 74 65 33 20 2a 64 62  ount(sqlite3 *db
5280: 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 30 3b 0a  ){.  int n = 0;.
5290: 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 3b 0a    Savepoint *p;.
52a0: 20 20 66 6f 72 28 70 3d 64 62 2d 3e 70 53 61 76    for(p=db->pSav
52b0: 65 70 6f 69 6e 74 3b 20 70 3b 20 70 3d 70 2d 3e  epoint; p; p=p->
52c0: 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20 20 61 73  pNext) n++;.  as
52d0: 73 65 72 74 28 20 6e 3d 3d 28 64 62 2d 3e 6e 53  sert( n==(db->nS
52e0: 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 69  avepoint + db->i
52f0: 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
5300: 70 6f 69 6e 74 29 20 29 3b 0a 20 20 72 65 74 75  point) );.  retu
5310: 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  rn 1;.}.#endif..
5320: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  /*.** Return the
5330: 20 72 65 67 69 73 74 65 72 20 6f 66 20 70 4f 70   register of pOp
5340: 2d 3e 70 32 20 61 66 74 65 72 20 66 69 72 73 74  ->p2 after first
5350: 20 70 72 65 70 61 72 69 6e 67 20 69 74 20 74 6f   preparing it to
5360: 20 62 65 0a 2a 2a 20 6f 76 65 72 77 72 69 74 74   be.** overwritt
5370: 65 6e 20 77 69 74 68 20 61 6e 20 69 6e 74 65 67  en with an integ
5380: 65 72 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61  er value..*/.sta
5390: 74 69 63 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c  tic SQLITE_NOINL
53a0: 49 4e 45 20 4d 65 6d 20 2a 6f 75 74 32 50 72 65  INE Mem *out2Pre
53b0: 72 65 6c 65 61 73 65 57 69 74 68 43 6c 65 61 72  releaseWithClear
53c0: 28 4d 65 6d 20 2a 70 4f 75 74 29 7b 0a 20 20 73  (Mem *pOut){.  s
53d0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
53e0: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 70 4f  Null(pOut);.  pO
53f0: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
5400: 49 6e 74 3b 0a 20 20 72 65 74 75 72 6e 20 70 4f  Int;.  return pO
5410: 75 74 3b 0a 7d 0a 73 74 61 74 69 63 20 4d 65 6d  ut;.}.static Mem
5420: 20 2a 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65   *out2Prerelease
5430: 28 56 64 62 65 20 2a 70 2c 20 56 64 62 65 4f 70  (Vdbe *p, VdbeOp
5440: 20 2a 70 4f 70 29 7b 0a 20 20 4d 65 6d 20 2a 70   *pOp){.  Mem *p
5450: 4f 75 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Out;.  assert( p
5460: 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 61 73  Op->p2>0 );.  as
5470: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28  sert( pOp->p2<=(
5480: 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
5490: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75  Cursor) );.  pOu
54a0: 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  t = &p->aMem[pOp
54b0: 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p2];.  memAbou
54c0: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
54d0: 74 29 3b 0a 20 20 69 66 28 20 56 64 62 65 4d 65  t);.  if( VdbeMe
54e0: 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 20 29  mDynamic(pOut) )
54f0: 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e  { /*OPTIMIZATION
5500: 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20  -IF-FALSE*/.    
5510: 72 65 74 75 72 6e 20 6f 75 74 32 50 72 65 72 65  return out2Prere
5520: 6c 65 61 73 65 57 69 74 68 43 6c 65 61 72 28 70  leaseWithClear(p
5530: 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  Out);.  }else{. 
5540: 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
5550: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 72 65   MEM_Int;.    re
5560: 74 75 72 6e 20 70 4f 75 74 3b 0a 20 20 7d 0a 7d  turn pOut;.  }.}
5570: 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65  .../*.** Execute
5580: 20 61 73 20 6d 75 63 68 20 6f 66 20 61 20 56 44   as much of a VD
5590: 42 45 20 70 72 6f 67 72 61 6d 20 61 73 20 77 65  BE program as we
55a0: 20 63 61 6e 2e 0a 2a 2a 20 54 68 69 73 20 69 73   can..** This is
55b0: 20 74 68 65 20 63 6f 72 65 20 6f 66 20 73 71 6c   the core of sql
55c0: 69 74 65 33 5f 73 74 65 70 28 29 2e 20 20 0a 2a  ite3_step().  .*
55d0: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62  /.int sqlite3Vdb
55e0: 65 45 78 65 63 28 0a 20 20 56 64 62 65 20 2a 70  eExec(.  Vdbe *p
55f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5600: 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20      /* The VDBE 
5610: 2a 2f 0a 29 7b 0a 20 20 4f 70 20 2a 61 4f 70 20  */.){.  Op *aOp 
5620: 3d 20 70 2d 3e 61 4f 70 3b 20 20 20 20 20 20 20  = p->aOp;       
5630: 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d     /* Copy of p-
5640: 3e 61 4f 70 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f  >aOp */.  Op *pO
5650: 70 20 3d 20 61 4f 70 3b 20 20 20 20 20 20 20 20  p = aOp;        
5660: 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20       /* Current 
5670: 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66  operation */.#if
5680: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
5690: 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65  DEBUG) || define
56a0: 64 28 56 44 42 45 5f 50 52 4f 46 49 4c 45 29 0a  d(VDBE_PROFILE).
56b0: 20 20 4f 70 20 2a 70 4f 72 69 67 4f 70 3b 20 20    Op *pOrigOp;  
56c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
56d0: 56 61 6c 75 65 20 6f 66 20 70 4f 70 20 61 74 20  Value of pOp at 
56e0: 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20 6c  the top of the l
56f0: 6f 6f 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  oop */.#endif.#i
5700: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
5710: 47 0a 20 20 69 6e 74 20 6e 45 78 74 72 61 44 65  G.  int nExtraDe
5720: 6c 65 74 65 20 3d 20 30 3b 20 20 20 20 20 20 2f  lete = 0;      /
5730: 2a 20 56 65 72 69 66 69 65 73 20 46 4f 52 44 45  * Verifies FORDE
5740: 4c 45 54 45 20 61 6e 64 20 41 55 58 44 45 4c 45  LETE and AUXDELE
5750: 54 45 20 66 6c 61 67 73 20 2a 2f 0a 23 65 6e 64  TE flags */.#end
5760: 69 66 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51  if.  int rc = SQ
5770: 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20 20 20 20  LITE_OK;        
5780: 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75  /* Value to retu
5790: 72 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  rn */.  sqlite3 
57a0: 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 20 20 20 20  *db = p->db;    
57b0: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
57c0: 73 65 20 2a 2f 0a 20 20 75 38 20 72 65 73 65 74  se */.  u8 reset
57d0: 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20  SchemaOnFault = 
57e0: 30 3b 20 2f 2a 20 52 65 73 65 74 20 73 63 68 65  0; /* Reset sche
57f0: 6d 61 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f  ma after an erro
5800: 72 20 69 66 20 70 6f 73 69 74 69 76 65 20 2a 2f  r if positive */
5810: 0a 20 20 75 38 20 65 6e 63 6f 64 69 6e 67 20 3d  .  u8 encoding =
5820: 20 45 4e 43 28 64 62 29 3b 20 20 20 20 20 2f 2a   ENC(db);     /*
5830: 20 54 68 65 20 64 61 74 61 62 61 73 65 20 65 6e   The database en
5840: 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  coding */.  int 
5850: 69 43 6f 6d 70 61 72 65 20 3d 20 30 3b 20 20 20  iCompare = 0;   
5860: 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74         /* Result
5870: 20 6f 66 20 6c 61 73 74 20 63 6f 6d 70 61 72 69   of last compari
5880: 73 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  son */.  unsigne
5890: 64 20 6e 56 6d 53 74 65 70 20 3d 20 30 3b 20 20  d nVmStep = 0;  
58a0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
58b0: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
58c0: 20 73 74 65 70 73 20 2a 2f 0a 23 69 66 6e 64 65   steps */.#ifnde
58d0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
58e0: 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a  OGRESS_CALLBACK.
58f0: 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67    unsigned nProg
5900: 72 65 73 73 4c 69 6d 69 74 3b 20 20 20 2f 2a 20  ressLimit;   /* 
5910: 49 6e 76 6f 6b 65 20 78 50 72 6f 67 72 65 73 73  Invoke xProgress
5920: 28 29 20 77 68 65 6e 20 6e 56 6d 53 74 65 70 20  () when nVmStep 
5930: 72 65 61 63 68 65 73 20 74 68 69 73 20 2a 2f 0a  reaches this */.
5940: 23 65 6e 64 69 66 0a 20 20 4d 65 6d 20 2a 61 4d  #endif.  Mem *aM
5950: 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20 20 20  em = p->aMem;   
5960: 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70      /* Copy of p
5970: 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65 6d 20  ->aMem */.  Mem 
5980: 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20 20 20 20  *pIn1 = 0;      
5990: 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 69 6e         /* 1st in
59a0: 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  put operand */. 
59b0: 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30 3b 20   Mem *pIn2 = 0; 
59c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32              /* 2
59d0: 6e 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64  nd input operand
59e0: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 33 20   */.  Mem *pIn3 
59f0: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 0;            
5a00: 20 2f 2a 20 33 72 64 20 69 6e 70 75 74 20 6f 70   /* 3rd input op
5a10: 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  erand */.  Mem *
5a20: 70 4f 75 74 20 3d 20 30 3b 20 20 20 20 20 20 20  pOut = 0;       
5a30: 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75 74 20        /* Output 
5a40: 6f 70 65 72 61 6e 64 20 2a 2f 0a 23 69 66 64 65  operand */.#ifde
5a50: 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20  f VDBE_PROFILE. 
5a60: 20 75 36 34 20 73 74 61 72 74 3b 20 20 20 20 20   u64 start;     
5a70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
5a80: 50 55 20 63 6c 6f 63 6b 20 63 6f 75 6e 74 20 61  PU clock count a
5a90: 74 20 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64  t start of opcod
5aa0: 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 2f 2a  e */.#endif.  /*
5ab0: 2a 2a 20 49 4e 53 45 52 54 20 53 54 41 43 4b 20  ** INSERT STACK 
5ac0: 55 4e 49 4f 4e 20 48 45 52 45 20 2a 2a 2a 2f 0a  UNION HERE ***/.
5ad0: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6d 61  .  assert( p->ma
5ae0: 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f  gic==VDBE_MAGIC_
5af0: 52 55 4e 20 29 3b 20 20 2f 2a 20 73 71 6c 69 74  RUN );  /* sqlit
5b00: 65 33 5f 73 74 65 70 28 29 20 76 65 72 69 66 69  e3_step() verifi
5b10: 65 73 20 74 68 69 73 20 2a 2f 0a 20 20 73 71 6c  es this */.  sql
5b20: 69 74 65 33 56 64 62 65 45 6e 74 65 72 28 70 29  ite3VdbeEnter(p)
5b30: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
5b40: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
5b50: 41 4c 4c 42 41 43 4b 0a 20 20 69 66 28 20 64 62  ALLBACK.  if( db
5b60: 2d 3e 78 50 72 6f 67 72 65 73 73 20 29 7b 0a 20  ->xProgress ){. 
5b70: 20 20 20 75 33 32 20 69 50 72 69 6f 72 20 3d 20     u32 iPrior = 
5b80: 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49  p->aCounter[SQLI
5b90: 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 56 4d  TE_STMTSTATUS_VM
5ba0: 5f 53 54 45 50 5d 3b 0a 20 20 20 20 61 73 73 65  _STEP];.    asse
5bb0: 72 74 28 20 30 20 3c 20 64 62 2d 3e 6e 50 72 6f  rt( 0 < db->nPro
5bc0: 67 72 65 73 73 4f 70 73 20 29 3b 0a 20 20 20 20  gressOps );.    
5bd0: 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d  nProgressLimit =
5be0: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
5bf0: 73 20 2d 20 28 69 50 72 69 6f 72 20 25 20 64 62  s - (iPrior % db
5c00: 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 29 3b  ->nProgressOps);
5c10: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 50  .  }else{.    nP
5c20: 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 30  rogressLimit = 0
5c30: 78 66 66 66 66 66 66 66 66 3b 0a 20 20 7d 0a 23  xffffffff;.  }.#
5c40: 65 6e 64 69 66 0a 20 20 69 66 28 20 70 2d 3e 72  endif.  if( p->r
5c50: 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20  c==SQLITE_NOMEM 
5c60: 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68  ){.    /* This h
5c70: 61 70 70 65 6e 73 20 69 66 20 61 20 6d 61 6c 6c  appens if a mall
5c80: 6f 63 28 29 20 69 6e 73 69 64 65 20 61 20 63 61  oc() inside a ca
5c90: 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 6f  ll to sqlite3_co
5ca0: 6c 75 6d 6e 5f 74 65 78 74 28 29 20 6f 72 0a 20  lumn_text() or. 
5cb0: 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f     ** sqlite3_co
5cc0: 6c 75 6d 6e 5f 74 65 78 74 31 36 28 29 20 66 61  lumn_text16() fa
5cd0: 69 6c 65 64 2e 20 20 2a 2f 0a 20 20 20 20 67 6f  iled.  */.    go
5ce0: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20  to no_mem;.  }. 
5cf0: 20 61 73 73 65 72 74 28 20 70 2d 3e 72 63 3d 3d   assert( p->rc==
5d00: 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d  SQLITE_OK || (p-
5d10: 3e 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54  >rc&0xff)==SQLIT
5d20: 45 5f 42 55 53 59 20 29 3b 0a 20 20 61 73 73 65  E_BUSY );.  asse
5d30: 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
5d40: 20 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 21   || p->readOnly!
5d50: 3d 30 20 29 3b 0a 20 20 70 2d 3e 69 43 75 72 72  =0 );.  p->iCurr
5d60: 65 6e 74 54 69 6d 65 20 3d 20 30 3b 0a 20 20 61  entTime = 0;.  a
5d70: 73 73 65 72 74 28 20 70 2d 3e 65 78 70 6c 61 69  ssert( p->explai
5d80: 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d 3e 70 52 65  n==0 );.  p->pRe
5d90: 73 75 6c 74 53 65 74 20 3d 20 30 3b 0a 20 20 64  sultSet = 0;.  d
5da0: 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e 6e  b->busyHandler.n
5db0: 42 75 73 79 20 3d 20 30 3b 0a 20 20 69 66 28 20  Busy = 0;.  if( 
5dc0: 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75  db->u1.isInterru
5dd0: 70 74 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72  pted ) goto abor
5de0: 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75  t_due_to_interru
5df0: 70 74 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  pt;.  sqlite3Vdb
5e00: 65 49 4f 54 72 61 63 65 53 71 6c 28 70 29 3b 0a  eIOTraceSql(p);.
5e10: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
5e20: 42 55 47 0a 20 20 73 71 6c 69 74 65 33 42 65 67  BUG.  sqlite3Beg
5e30: 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29  inBenignMalloc()
5e40: 3b 0a 20 20 69 66 28 20 70 2d 3e 70 63 3d 3d 30  ;.  if( p->pc==0
5e50: 0a 20 20 20 26 26 20 28 70 2d 3e 64 62 2d 3e 66  .   && (p->db->f
5e60: 6c 61 67 73 20 26 20 28 53 51 4c 49 54 45 5f 56  lags & (SQLITE_V
5e70: 64 62 65 4c 69 73 74 69 6e 67 7c 53 51 4c 49 54  dbeListing|SQLIT
5e80: 45 5f 56 64 62 65 45 51 50 7c 53 51 4c 49 54 45  E_VdbeEQP|SQLITE
5e90: 5f 56 64 62 65 54 72 61 63 65 29 29 21 3d 30 0a  _VdbeTrace))!=0.
5ea0: 20 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a    ){.    int i;.
5eb0: 20 20 20 20 69 6e 74 20 6f 6e 63 65 20 3d 20 31      int once = 1
5ec0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
5ed0: 65 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20  ePrintSql(p);.  
5ee0: 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61    if( p->db->fla
5ef0: 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65  gs & SQLITE_Vdbe
5f00: 4c 69 73 74 69 6e 67 20 29 7b 0a 20 20 20 20 20  Listing ){.     
5f10: 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 50 72   printf("VDBE Pr
5f20: 6f 67 72 61 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e  ogram Listing:\n
5f30: 22 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d  ");.      for(i=
5f40: 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b  0; i<p->nOp; i++
5f50: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
5f60: 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74  e3VdbePrintOp(st
5f70: 64 6f 75 74 2c 20 69 2c 20 26 61 4f 70 5b 69 5d  dout, i, &aOp[i]
5f80: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
5f90: 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e  .    if( p->db->
5fa0: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56  flags & SQLITE_V
5fb0: 64 62 65 45 51 50 20 29 7b 0a 20 20 20 20 20 20  dbeEQP ){.      
5fc0: 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f  for(i=0; i<p->nO
5fd0: 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  p; i++){.       
5fe0: 20 69 66 28 20 61 4f 70 5b 69 5d 2e 6f 70 63 6f   if( aOp[i].opco
5ff0: 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29  de==OP_Explain )
6000: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  {.          if( 
6010: 6f 6e 63 65 20 29 20 70 72 69 6e 74 66 28 22 56  once ) printf("V
6020: 44 42 45 20 51 75 65 72 79 20 50 6c 61 6e 3a 5c  DBE Query Plan:\
6030: 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70  n");.          p
6040: 72 69 6e 74 66 28 22 25 73 5c 6e 22 2c 20 61 4f  rintf("%s\n", aO
6050: 70 5b 69 5d 2e 70 34 2e 7a 29 3b 0a 20 20 20 20  p[i].p4.z);.    
6060: 20 20 20 20 20 20 6f 6e 63 65 20 3d 20 30 3b 0a        once = 0;.
6070: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
6080: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  }.    }.    if( 
6090: 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  p->db->flags & S
60a0: 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20  QLITE_VdbeTrace 
60b0: 29 20 20 70 72 69 6e 74 66 28 22 56 44 42 45 20  )  printf("VDBE 
60c0: 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 7d 0a  Trace:\n");.  }.
60d0: 20 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69    sqlite3EndBeni
60e0: 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64  gnMalloc();.#end
60f0: 69 66 0a 20 20 66 6f 72 28 70 4f 70 3d 26 61 4f  if.  for(pOp=&aO
6100: 70 5b 70 2d 3e 70 63 5d 3b 20 31 3b 20 70 4f 70  p[p->pc]; 1; pOp
6110: 2b 2b 29 7b 0a 20 20 20 20 2f 2a 20 45 72 72 6f  ++){.    /* Erro
6120: 72 73 20 61 72 65 20 64 65 74 65 63 74 65 64 20  rs are detected 
6130: 62 79 20 69 6e 64 69 76 69 64 75 61 6c 20 6f 70  by individual op
6140: 63 6f 64 65 73 2c 20 77 69 74 68 20 61 6e 20 69  codes, with an i
6150: 6d 6d 65 64 69 61 74 65 0a 20 20 20 20 2a 2a 20  mmediate.    ** 
6160: 6a 75 6d 70 73 20 74 6f 20 61 62 6f 72 74 5f 64  jumps to abort_d
6170: 75 65 5f 74 6f 5f 65 72 72 6f 72 2e 20 2a 2f 0a  ue_to_error. */.
6180: 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
6190: 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 0a 20 20  SQLITE_OK );..  
61a0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e 3d 61    assert( pOp>=a
61b0: 4f 70 20 26 26 20 70 4f 70 3c 26 61 4f 70 5b 70  Op && pOp<&aOp[p
61c0: 2d 3e 6e 4f 70 5d 29 3b 0a 23 69 66 64 65 66 20  ->nOp]);.#ifdef 
61d0: 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20  VDBE_PROFILE.   
61e0: 20 73 74 61 72 74 20 3d 20 73 71 6c 69 74 65 33   start = sqlite3
61f0: 4e 50 72 6f 66 69 6c 65 43 6e 74 20 3f 20 73 71  NProfileCnt ? sq
6200: 6c 69 74 65 33 4e 50 72 6f 66 69 6c 65 43 6e 74  lite3NProfileCnt
6210: 20 3a 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65   : sqlite3Hwtime
6220: 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 6e  ();.#endif.    n
6230: 56 6d 53 74 65 70 2b 2b 3b 0a 23 69 66 64 65 66  VmStep++;.#ifdef
6240: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
6250: 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 0a 20  TMT_SCANSTATUS. 
6260: 20 20 20 69 66 28 20 70 2d 3e 61 6e 45 78 65 63     if( p->anExec
6270: 20 29 20 70 2d 3e 61 6e 45 78 65 63 5b 28 69 6e   ) p->anExec[(in
6280: 74 29 28 70 4f 70 2d 61 4f 70 29 5d 2b 2b 3b 0a  t)(pOp-aOp)]++;.
6290: 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 4f  #endif..    /* O
62a0: 6e 6c 79 20 61 6c 6c 6f 77 20 74 72 61 63 69 6e  nly allow tracin
62b0: 67 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55  g if SQLITE_DEBU
62c0: 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20  G is defined..  
62d0: 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49    */.#ifdef SQLI
62e0: 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28  TE_DEBUG.    if(
62f0: 20 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c   db->flags & SQL
6300: 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 29 7b  ITE_VdbeTrace ){
6310: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
6320: 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74  bePrintOp(stdout
6330: 2c 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f  , (int)(pOp - aO
6340: 70 29 2c 20 70 4f 70 29 3b 0a 20 20 20 20 7d 0a  p), pOp);.    }.
6350: 23 65 6e 64 69 66 0a 20 20 20 20 20 20 0a 0a 20  #endif.      .. 
6360: 20 20 20 2f 2a 20 43 68 65 63 6b 20 74 6f 20 73     /* Check to s
6370: 65 65 20 69 66 20 77 65 20 6e 65 65 64 20 74 6f  ee if we need to
6380: 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e 74   simulate an int
6390: 65 72 72 75 70 74 2e 20 20 54 68 69 73 20 6f 6e  errupt.  This on
63a0: 6c 79 20 68 61 70 70 65 6e 73 0a 20 20 20 20 2a  ly happens.    *
63b0: 2a 20 69 66 20 77 65 20 68 61 76 65 20 61 20 73  * if we have a s
63c0: 70 65 63 69 61 6c 20 74 65 73 74 20 62 75 69 6c  pecial test buil
63d0: 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66  d..    */.#ifdef
63e0: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20   SQLITE_TEST.   
63f0: 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74   if( sqlite3_int
6400: 65 72 72 75 70 74 5f 63 6f 75 6e 74 3e 30 20 29  errupt_count>0 )
6410: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
6420: 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 2d  interrupt_count-
6430: 2d 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c  -;.      if( sql
6440: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63  ite3_interrupt_c
6450: 6f 75 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ount==0 ){.     
6460: 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72     sqlite3_inter
6470: 72 75 70 74 28 64 62 29 3b 0a 20 20 20 20 20 20  rupt(db);.      
6480: 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  }.    }.#endif..
6490: 20 20 20 20 2f 2a 20 53 61 6e 69 74 79 20 63 68      /* Sanity ch
64a0: 65 63 6b 69 6e 67 20 6f 6e 20 6f 74 68 65 72 20  ecking on other 
64b0: 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 23 69 66 64  operands */.#ifd
64c0: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
64d0: 20 20 20 20 7b 0a 20 20 20 20 20 20 75 38 20 6f      {.      u8 o
64e0: 70 50 72 6f 70 65 72 74 79 20 3d 20 73 71 6c 69  pProperty = sqli
64f0: 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74  te3OpcodePropert
6500: 79 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 5d 3b 0a  y[pOp->opcode];.
6510: 20 20 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f        if( (opPro
6520: 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e  perty & OPFLG_IN
6530: 31 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  1)!=0 ){.       
6540: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
6550: 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  >0 );.        as
6560: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 28  sert( pOp->p1<=(
6570: 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
6580: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20  Cursor) );.     
6590: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
65a0: 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d  Valid(&aMem[pOp-
65b0: 3e 70 31 5d 29 20 29 3b 0a 20 20 20 20 20 20 20  >p1]) );.       
65c0: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
65d0: 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61  VdbeCheckMemInva
65e0: 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70  riants(&aMem[pOp
65f0: 2d 3e 70 31 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p1]) );.      
6600: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
6610: 28 70 4f 70 2d 3e 70 31 2c 20 26 61 4d 65 6d 5b  (pOp->p1, &aMem[
6620: 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 20 20 20  pOp->p1]);.     
6630: 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 6f 70   }.      if( (op
6640: 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47  Property & OPFLG
6650: 5f 49 4e 32 29 21 3d 30 20 29 7b 0a 20 20 20 20  _IN2)!=0 ){.    
6660: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
6670: 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 20  >p2>0 );.       
6680: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
6690: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
66a0: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
66b0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
66c0: 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
66d0: 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20  Op->p2]) );.    
66e0: 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
66f0: 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49  te3VdbeCheckMemI
6700: 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b  nvariants(&aMem[
6710: 70 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20  pOp->p2]) );.   
6720: 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52       REGISTER_TR
6730: 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 26 61 4d  ACE(pOp->p2, &aM
6740: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20  em[pOp->p2]);.  
6750: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
6760: 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50  (opProperty & OP
6770: 46 4c 47 5f 49 4e 33 29 21 3d 30 20 29 7b 0a 20  FLG_IN3)!=0 ){. 
6780: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
6790: 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20  Op->p3>0 );.    
67a0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
67b0: 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p3<=(p->nMem+1 
67c0: 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
67d0: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
67e0: 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65   memIsValid(&aMe
67f0: 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20  m[pOp->p3]) );. 
6800: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73         assert( s
6810: 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d  qlite3VdbeCheckM
6820: 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d  emInvariants(&aM
6830: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a  em[pOp->p3]) );.
6840: 20 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52          REGISTER
6850: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
6860: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b  &aMem[pOp->p3]);
6870: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
6880: 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26  f( (opProperty &
6890: 20 4f 50 46 4c 47 5f 4f 55 54 32 29 21 3d 30 20   OPFLG_OUT2)!=0 
68a0: 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
68b0: 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a  t( pOp->p2>0 );.
68c0: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
68d0: 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p2<=(p->nMe
68e0: 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
68f0: 29 20 29 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d  ) );.        mem
6900: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
6910: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29   &aMem[pOp->p2])
6920: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
6930: 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20  if( (opProperty 
6940: 26 20 4f 50 46 4c 47 5f 4f 55 54 33 29 21 3d 30  & OPFLG_OUT3)!=0
6950: 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
6960: 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b  rt( pOp->p3>0 );
6970: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
6980: 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
6990: 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
69a0: 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 6d 65  r) );.        me
69b0: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
69c0: 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  , &aMem[pOp->p3]
69d0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
69e0: 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
69f0: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
6a00: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 56 44 42  ) || defined(VDB
6a10: 45 5f 50 52 4f 46 49 4c 45 29 0a 20 20 20 20 70  E_PROFILE).    p
6a20: 4f 72 69 67 4f 70 20 3d 20 70 4f 70 3b 0a 23 65  OrigOp = pOp;.#e
6a30: 6e 64 69 66 0a 20 20 0a 20 20 20 20 73 77 69 74  ndif.  .    swit
6a40: 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ch( pOp->opcode 
6a50: 29 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ){../***********
6a60: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6a70: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6a80: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6a90: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6aa0: 2a 2a 0a 2a 2a 20 57 68 61 74 20 66 6f 6c 6c 6f  **.** What follo
6ab0: 77 73 20 69 73 20 61 20 6d 61 73 73 69 76 65 20  ws is a massive 
6ac0: 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74  switch statement
6ad0: 20 77 68 65 72 65 20 65 61 63 68 20 63 61 73 65   where each case
6ae0: 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a   implements a.**
6af0: 20 73 65 70 61 72 61 74 65 20 69 6e 73 74 72 75   separate instru
6b00: 63 74 69 6f 6e 20 69 6e 20 74 68 65 20 76 69 72  ction in the vir
6b10: 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49  tual machine.  I
6b20: 66 20 77 65 20 66 6f 6c 6c 6f 77 20 74 68 65 20  f we follow the 
6b30: 75 73 75 61 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61  usual.** indenta
6b40: 74 69 6f 6e 20 63 6f 6e 76 65 6e 74 69 6f 6e 73  tion conventions
6b50: 2c 20 65 61 63 68 20 63 61 73 65 20 73 68 6f 75  , each case shou
6b60: 6c 64 20 62 65 20 69 6e 64 65 6e 74 65 64 20 62  ld be indented b
6b70: 79 20 36 20 73 70 61 63 65 73 2e 20 20 42 75 74  y 6 spaces.  But
6b80: 0a 2a 2a 20 74 68 61 74 20 69 73 20 61 20 6c 6f  .** that is a lo
6b90: 74 20 6f 66 20 77 61 73 74 65 64 20 73 70 61 63  t of wasted spac
6ba0: 65 20 6f 6e 20 74 68 65 20 6c 65 66 74 20 6d 61  e on the left ma
6bb0: 72 67 69 6e 2e 20 20 53 6f 20 74 68 65 20 63 6f  rgin.  So the co
6bc0: 64 65 20 77 69 74 68 69 6e 0a 2a 2a 20 74 68 65  de within.** the
6bd0: 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e   switch statemen
6be0: 74 20 77 69 6c 6c 20 62 72 65 61 6b 20 77 69 74  t will break wit
6bf0: 68 20 63 6f 6e 76 65 6e 74 69 6f 6e 20 61 6e 64  h convention and
6c00: 20 62 65 20 66 6c 75 73 68 2d 6c 65 66 74 2e 20   be flush-left. 
6c10: 41 6e 6f 74 68 65 72 0a 2a 2a 20 62 69 67 20 63  Another.** big c
6c20: 6f 6d 6d 65 6e 74 20 28 73 69 6d 69 6c 61 72 20  omment (similar 
6c30: 74 6f 20 74 68 69 73 20 6f 6e 65 29 20 77 69 6c  to this one) wil
6c40: 6c 20 6d 61 72 6b 20 74 68 65 20 70 6f 69 6e 74  l mark the point
6c50: 20 69 6e 20 74 68 65 20 63 6f 64 65 20 77 68 65   in the code whe
6c60: 72 65 0a 2a 2a 20 77 65 20 74 72 61 6e 73 69 74  re.** we transit
6c70: 69 6f 6e 20 62 61 63 6b 20 74 6f 20 6e 6f 72 6d  ion back to norm
6c80: 61 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a  al indentation..
6c90: 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 72 6d 61 74  **.** The format
6ca0: 74 69 6e 67 20 6f 66 20 65 61 63 68 20 63 61 73  ting of each cas
6cb0: 65 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 20  e is important. 
6cc0: 20 54 68 65 20 6d 61 6b 65 66 69 6c 65 20 66 6f   The makefile fo
6cd0: 72 20 53 51 4c 69 74 65 0a 2a 2a 20 67 65 6e 65  r SQLite.** gene
6ce0: 72 61 74 65 73 20 74 77 6f 20 43 20 66 69 6c 65  rates two C file
6cf0: 73 20 22 6f 70 63 6f 64 65 73 2e 68 22 20 61 6e  s "opcodes.h" an
6d00: 64 20 22 6f 70 63 6f 64 65 73 2e 63 22 20 62 79  d "opcodes.c" by
6d10: 20 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 0a 2a   scanning this.*
6d20: 2a 20 66 69 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66  * file looking f
6d30: 6f 72 20 6c 69 6e 65 73 20 74 68 61 74 20 62 65  or lines that be
6d40: 67 69 6e 20 77 69 74 68 20 22 63 61 73 65 20 4f  gin with "case O
6d50: 50 5f 22 2e 20 20 54 68 65 20 6f 70 63 6f 64 65  P_".  The opcode
6d60: 73 2e 68 20 66 69 6c 65 73 0a 2a 2a 20 77 69 6c  s.h files.** wil
6d70: 6c 20 62 65 20 66 69 6c 6c 65 64 20 77 69 74 68  l be filled with
6d80: 20 23 64 65 66 69 6e 65 73 20 74 68 61 74 20 67   #defines that g
6d90: 69 76 65 20 75 6e 69 71 75 65 20 69 6e 74 65 67  ive unique integ
6da0: 65 72 20 76 61 6c 75 65 73 20 74 6f 20 65 61 63  er values to eac
6db0: 68 0a 2a 2a 20 6f 70 63 6f 64 65 20 61 6e 64 20  h.** opcode and 
6dc0: 74 68 65 20 6f 70 63 6f 64 65 73 2e 63 20 66 69  the opcodes.c fi
6dd0: 6c 65 20 69 73 20 66 69 6c 6c 65 64 20 77 69 74  le is filled wit
6de0: 68 20 61 6e 20 61 72 72 61 79 20 6f 66 20 73 74  h an array of st
6df0: 72 69 6e 67 73 20 77 68 65 72 65 0a 2a 2a 20 65  rings where.** e
6e00: 61 63 68 20 73 74 72 69 6e 67 20 69 73 20 74 68  ach string is th
6e10: 65 20 73 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20  e symbolic name 
6e20: 66 6f 72 20 74 68 65 20 63 6f 72 72 65 73 70 6f  for the correspo
6e30: 6e 64 69 6e 67 20 6f 70 63 6f 64 65 2e 20 20 49  nding opcode.  I
6e40: 66 20 74 68 65 0a 2a 2a 20 63 61 73 65 20 73 74  f the.** case st
6e50: 61 74 65 6d 65 6e 74 20 69 73 20 66 6f 6c 6c 6f  atement is follo
6e60: 77 65 64 20 62 79 20 61 20 63 6f 6d 6d 65 6e 74  wed by a comment
6e70: 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 2f 23   of the form "/#
6e80: 20 73 61 6d 65 20 61 73 20 2e 2e 2e 20 23 2f 22   same as ... #/"
6e90: 0a 2a 2a 20 74 68 61 74 20 63 6f 6d 6d 65 6e 74  .** that comment
6ea0: 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65   is used to dete
6eb0: 72 6d 69 6e 65 20 74 68 65 20 70 61 72 74 69 63  rmine the partic
6ec0: 75 6c 61 72 20 76 61 6c 75 65 20 6f 66 20 74 68  ular value of th
6ed0: 65 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  e opcode..**.** 
6ee0: 4f 74 68 65 72 20 6b 65 79 77 6f 72 64 73 20 69  Other keywords i
6ef0: 6e 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74 68  n the comment th
6f00: 61 74 20 66 6f 6c 6c 6f 77 73 20 65 61 63 68 20  at follows each 
6f10: 63 61 73 65 20 61 72 65 20 75 73 65 64 20 74 6f  case are used to
6f20: 0a 2a 2a 20 63 6f 6e 73 74 72 75 63 74 20 74 68  .** construct th
6f30: 65 20 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49  e OPFLG_INITIALI
6f40: 5a 45 52 20 76 61 6c 75 65 20 74 68 61 74 20 69  ZER value that i
6f50: 6e 69 74 69 61 6c 69 7a 65 73 20 6f 70 63 6f 64  nitializes opcod
6f60: 65 50 72 6f 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20  eProperty[]..** 
6f70: 4b 65 79 77 6f 72 64 73 20 69 6e 63 6c 75 64 65  Keywords include
6f80: 3a 20 69 6e 31 2c 20 69 6e 32 2c 20 69 6e 33 2c  : in1, in2, in3,
6f90: 20 6f 75 74 32 2c 20 6f 75 74 33 2e 20 20 53 65   out2, out3.  Se
6fa0: 65 0a 2a 2a 20 74 68 65 20 6d 6b 6f 70 63 6f 64  e.** the mkopcod
6fb0: 65 68 2e 61 77 6b 20 73 63 72 69 70 74 20 66 6f  eh.awk script fo
6fc0: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
6fd0: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  ormation..**.** 
6fe0: 44 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 62  Documentation ab
6ff0: 6f 75 74 20 56 44 42 45 20 6f 70 63 6f 64 65 73  out VDBE opcodes
7000: 20 69 73 20 67 65 6e 65 72 61 74 65 64 20 62 79   is generated by
7010: 20 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 20 66   scanning this f
7020: 69 6c 65 0a 2a 2a 20 66 6f 72 20 6c 69 6e 65 73  ile.** for lines
7030: 20 6f 66 20 74 68 61 74 20 63 6f 6e 74 61 69 6e   of that contain
7040: 20 22 4f 70 63 6f 64 65 3a 22 2e 20 20 54 68 61   "Opcode:".  Tha
7050: 74 20 6c 69 6e 65 20 61 6e 64 20 61 6c 6c 20 73  t line and all s
7060: 75 62 73 65 71 75 65 6e 74 0a 2a 2a 20 63 6f 6d  ubsequent.** com
7070: 6d 65 6e 74 20 6c 69 6e 65 73 20 61 72 65 20 75  ment lines are u
7080: 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72  sed in the gener
7090: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70 63  ation of the opc
70a0: 6f 64 65 2e 68 74 6d 6c 20 64 6f 63 75 6d 65 6e  ode.html documen
70b0: 74 61 74 69 6f 6e 0a 2a 2a 20 66 69 6c 65 2e 0a  tation.** file..
70c0: 2a 2a 0a 2a 2a 20 53 55 4d 4d 41 52 59 3a 0a 2a  **.** SUMMARY:.*
70d0: 2a 0a 2a 2a 20 20 20 20 20 46 6f 72 6d 61 74 74  *.**     Formatt
70e0: 69 6e 67 20 69 73 20 69 6d 70 6f 72 74 61 6e 74  ing is important
70f0: 20 74 6f 20 73 63 72 69 70 74 73 20 74 68 61 74   to scripts that
7100: 20 73 63 61 6e 20 74 68 69 73 20 66 69 6c 65 2e   scan this file.
7110: 0a 2a 2a 20 20 20 20 20 44 6f 20 6e 6f 74 20 64  .**     Do not d
7120: 65 76 69 61 74 65 20 66 72 6f 6d 20 74 68 65 20  eviate from the 
7130: 66 6f 72 6d 61 74 74 69 6e 67 20 73 74 79 6c 65  formatting style
7140: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73   currently in us
7150: 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  e..**.**********
7160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
7170: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
7180: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
7190: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
71a0: 2a 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ***/../* Opcode:
71b0: 20 20 47 6f 74 6f 20 2a 20 50 32 20 2a 20 2a 20    Goto * P2 * * 
71c0: 2a 0a 2a 2a 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e  *.**.** An uncon
71d0: 64 69 74 69 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f  ditional jump to
71e0: 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 20   address P2..** 
71f0: 54 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  The next instruc
7200: 74 69 6f 6e 20 65 78 65 63 75 74 65 64 20 77 69  tion executed wi
7210: 6c 6c 20 62 65 20 0a 2a 2a 20 74 68 65 20 6f 6e  ll be .** the on
7220: 65 20 61 74 20 69 6e 64 65 78 20 50 32 20 66 72  e at index P2 fr
7230: 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
7240: 20 6f 66 0a 2a 2a 20 74 68 65 20 70 72 6f 67 72   of.** the progr
7250: 61 6d 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31  am..**.** The P1
7260: 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f   parameter is no
7270: 74 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64 20  t actually used 
7280: 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20  by this opcode. 
7290: 20 48 6f 77 65 76 65 72 2c 20 69 74 0a 2a 2a 20   However, it.** 
72a0: 69 73 20 73 6f 6d 65 74 69 6d 65 73 20 73 65 74  is sometimes set
72b0: 20 74 6f 20 31 20 69 6e 73 74 65 61 64 20 6f 66   to 1 instead of
72c0: 20 30 20 61 73 20 61 20 68 69 6e 74 20 74 6f 20   0 as a hint to 
72d0: 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65  the command-line
72e0: 20 73 68 65 6c 6c 0a 2a 2a 20 74 68 61 74 20 74   shell.** that t
72f0: 68 69 73 20 47 6f 74 6f 20 69 73 20 74 68 65 20  his Goto is the 
7300: 62 6f 74 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70  bottom of a loop
7310: 20 61 6e 64 20 74 68 61 74 20 74 68 65 20 6c 69   and that the li
7320: 6e 65 73 20 66 72 6f 6d 20 50 32 20 64 6f 77 6e  nes from P2 down
7330: 0a 2a 2a 20 74 6f 20 74 68 65 20 63 75 72 72 65  .** to the curre
7340: 6e 74 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 62  nt line should b
7350: 65 20 69 6e 64 65 6e 74 65 64 20 66 6f 72 20 45  e indented for E
7360: 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 2e 0a 2a  XPLAIN output..*
7370: 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20  /.case OP_Goto: 
7380: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {             /*
7390: 20 6a 75 6d 70 20 2a 2f 0a 6a 75 6d 70 5f 74 6f   jump */.jump_to
73a0: 5f 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f  _p2_and_check_fo
73b0: 72 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 70  r_interrupt:.  p
73c0: 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70  Op = &aOp[pOp->p
73d0: 32 20 2d 20 31 5d 3b 0a 0a 20 20 2f 2a 20 4f 70  2 - 1];..  /* Op
73e0: 63 6f 64 65 73 20 74 68 61 74 20 61 72 65 20 75  codes that are u
73f0: 73 65 64 20 61 73 20 74 68 65 20 62 6f 74 74 6f  sed as the botto
7400: 6d 20 6f 66 20 61 20 6c 6f 6f 70 20 28 4f 50 5f  m of a loop (OP_
7410: 4e 65 78 74 2c 20 4f 50 5f 50 72 65 76 2c 0a 20  Next, OP_Prev,. 
7420: 20 2a 2a 20 4f 50 5f 56 4e 65 78 74 2c 20 6f 72   ** OP_VNext, or
7430: 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74 29 20   OP_SorterNext) 
7440: 61 6c 6c 20 6a 75 6d 70 20 68 65 72 65 20 75 70  all jump here up
7450: 6f 6e 0a 20 20 2a 2a 20 63 6f 6d 70 6c 65 74 69  on.  ** completi
7460: 6f 6e 2e 20 20 43 68 65 63 6b 20 74 6f 20 73 65  on.  Check to se
7470: 65 20 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74  e if sqlite3_int
7480: 65 72 72 75 70 74 28 29 20 68 61 73 20 62 65 65  errupt() has bee
7490: 6e 20 63 61 6c 6c 65 64 0a 20 20 2a 2a 20 6f 72  n called.  ** or
74a0: 20 69 66 20 74 68 65 20 70 72 6f 67 72 65 73 73   if the progress
74b0: 20 63 61 6c 6c 62 61 63 6b 20 6e 65 65 64 73 20   callback needs 
74c0: 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64 2e 20 0a  to be invoked. .
74d0: 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20 63    **.  ** This c
74e0: 6f 64 65 20 75 73 65 73 20 75 6e 73 74 72 75 63  ode uses unstruc
74f0: 74 75 72 65 64 20 22 67 6f 74 6f 22 20 73 74 61  tured "goto" sta
7500: 74 65 6d 65 6e 74 73 20 61 6e 64 20 64 6f 65 73  tements and does
7510: 20 6e 6f 74 20 6c 6f 6f 6b 20 63 6c 65 61 6e 2e   not look clean.
7520: 0a 20 20 2a 2a 20 42 75 74 20 74 68 61 74 20 69  .  ** But that i
7530: 73 20 6e 6f 74 20 64 75 65 20 74 6f 20 73 6c 6f  s not due to slo
7540: 70 70 79 20 63 6f 64 69 6e 67 20 68 61 62 69 74  ppy coding habit
7550: 73 2e 20 54 68 65 20 63 6f 64 65 20 69 73 20 77  s. The code is w
7560: 72 69 74 74 65 6e 20 74 68 69 73 0a 20 20 2a 2a  ritten this.  **
7570: 20 77 61 79 20 66 6f 72 20 70 65 72 66 6f 72 6d   way for perform
7580: 61 6e 63 65 2c 20 74 6f 20 61 76 6f 69 64 20 68  ance, to avoid h
7590: 61 76 69 6e 67 20 74 6f 20 72 75 6e 20 74 68 65  aving to run the
75a0: 20 69 6e 74 65 72 72 75 70 74 20 61 6e 64 20 70   interrupt and p
75b0: 72 6f 67 72 65 73 73 0a 20 20 2a 2a 20 63 68 65  rogress.  ** che
75c0: 63 6b 73 20 6f 6e 20 65 76 65 72 79 20 6f 70 63  cks on every opc
75d0: 6f 64 65 2e 20 20 54 68 69 73 20 68 65 6c 70 73  ode.  This helps
75e0: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
75f0: 74 6f 20 72 75 6e 20 61 62 6f 75 74 20 31 2e 35  to run about 1.5
7600: 25 0a 20 20 2a 2a 20 66 61 73 74 65 72 20 61 63  %.  ** faster ac
7610: 63 6f 72 64 69 6e 67 20 74 6f 20 22 76 61 6c 67  cording to "valg
7620: 72 69 6e 64 20 2d 2d 74 6f 6f 6c 3d 63 61 63 68  rind --tool=cach
7630: 65 67 72 69 6e 64 22 20 2a 2f 0a 63 68 65 63 6b  egrind" */.check
7640: 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3a 0a  _for_interrupt:.
7650: 20 20 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49    if( db->u1.isI
7660: 6e 74 65 72 72 75 70 74 65 64 20 29 20 67 6f 74  nterrupted ) got
7670: 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69  o abort_due_to_i
7680: 6e 74 65 72 72 75 70 74 3b 0a 23 69 66 6e 64 65  nterrupt;.#ifnde
7690: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
76a0: 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a  OGRESS_CALLBACK.
76b0: 20 20 2f 2a 20 43 61 6c 6c 20 74 68 65 20 70 72    /* Call the pr
76c0: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
76d0: 69 66 20 69 74 20 69 73 20 63 6f 6e 66 69 67 75  if it is configu
76e0: 72 65 64 20 61 6e 64 20 74 68 65 20 72 65 71 75  red and the requ
76f0: 69 72 65 64 20 6e 75 6d 62 65 72 0a 20 20 2a 2a  ired number.  **
7700: 20 6f 66 20 56 44 42 45 20 6f 70 73 20 68 61 76   of VDBE ops hav
7710: 65 20 62 65 65 6e 20 65 78 65 63 75 74 65 64 20  e been executed 
7720: 28 65 69 74 68 65 72 20 73 69 6e 63 65 20 74 68  (either since th
7730: 69 73 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66  is invocation of
7740: 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62  .  ** sqlite3Vdb
7750: 65 45 78 65 63 28 29 20 6f 72 20 73 69 6e 63 65  eExec() or since
7760: 20 6c 61 73 74 20 74 69 6d 65 20 74 68 65 20 70   last time the p
7770: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
7780: 20 77 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20 20   was called)..  
7790: 2a 2a 20 49 66 20 74 68 65 20 70 72 6f 67 72 65  ** If the progre
77a0: 73 73 20 63 61 6c 6c 62 61 63 6b 20 72 65 74 75  ss callback retu
77b0: 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78  rns non-zero, ex
77c0: 69 74 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d  it the virtual m
77d0: 61 63 68 69 6e 65 20 77 69 74 68 0a 20 20 2a 2a  achine with.  **
77e0: 20 61 20 72 65 74 75 72 6e 20 63 6f 64 65 20 53   a return code S
77f0: 51 4c 49 54 45 5f 41 42 4f 52 54 2e 0a 20 20 2a  QLITE_ABORT..  *
7800: 2f 0a 20 20 77 68 69 6c 65 28 20 6e 56 6d 53 74  /.  while( nVmSt
7810: 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69 6d  ep>=nProgressLim
7820: 69 74 20 26 26 20 64 62 2d 3e 78 50 72 6f 67 72  it && db->xProgr
7830: 65 73 73 21 3d 30 20 29 7b 0a 20 20 20 20 61 73  ess!=0 ){.    as
7840: 73 65 72 74 28 20 64 62 2d 3e 6e 50 72 6f 67 72  sert( db->nProgr
7850: 65 73 73 4f 70 73 21 3d 30 20 29 3b 0a 20 20 20  essOps!=0 );.   
7860: 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20   nProgressLimit 
7870: 2b 3d 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73  += db->nProgress
7880: 4f 70 73 3b 0a 20 20 20 20 69 66 28 20 64 62 2d  Ops;.    if( db-
7890: 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d 3e 70  >xProgress(db->p
78a0: 50 72 6f 67 72 65 73 73 41 72 67 29 20 29 7b 0a  ProgressArg) ){.
78b0: 20 20 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c        nProgressL
78c0: 69 6d 69 74 20 3d 20 30 78 66 66 66 66 66 66 66  imit = 0xfffffff
78d0: 66 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  f;.      rc = SQ
78e0: 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a  LITE_INTERRUPT;.
78f0: 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
7900: 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
7910: 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a     }.  }.#endif.
7920: 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f    .  break;.}../
7930: 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75 62  * Opcode:  Gosub
7940: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
7950: 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 75 72  ** Write the cur
7960: 72 65 6e 74 20 61 64 64 72 65 73 73 20 6f 6e 74  rent address ont
7970: 6f 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a  o register P1.**
7980: 20 61 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20 74   and then jump t
7990: 6f 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f  o address P2..*/
79a0: 0a 63 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20  .case OP_Gosub: 
79b0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
79c0: 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74  jump */.  assert
79d0: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70  ( pOp->p1>0 && p
79e0: 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p1<=(p->nMem
79f0: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
7a00: 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   );.  pIn1 = &aM
7a10: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
7a20: 73 73 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79  ssert( VdbeMemDy
7a30: 6e 61 6d 69 63 28 70 49 6e 31 29 3d 3d 30 20 29  namic(pIn1)==0 )
7a40: 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
7a50: 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20  ange(p, pIn1);. 
7a60: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d   pIn1->flags = M
7a70: 45 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e  EM_Int;.  pIn1->
7a80: 75 2e 69 20 3d 20 28 69 6e 74 29 28 70 4f 70 2d  u.i = (int)(pOp-
7a90: 61 4f 70 29 3b 0a 20 20 52 45 47 49 53 54 45 52  aOp);.  REGISTER
7aa0: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20  _TRACE(pOp->p1, 
7ab0: 70 49 6e 31 29 3b 0a 0a 20 20 2f 2a 20 4d 6f 73  pIn1);..  /* Mos
7ac0: 74 20 6a 75 6d 70 20 6f 70 65 72 61 74 69 6f 6e  t jump operation
7ad0: 73 20 64 6f 20 61 20 67 6f 74 6f 20 74 6f 20 74  s do a goto to t
7ae0: 68 69 73 20 73 70 6f 74 20 69 6e 20 6f 72 64 65  his spot in orde
7af0: 72 20 74 6f 20 75 70 64 61 74 65 0a 20 20 2a 2a  r to update.  **
7b00: 20 74 68 65 20 70 4f 70 20 70 6f 69 6e 74 65 72   the pOp pointer
7b10: 2e 20 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f 70 32 3a  . */.jump_to_p2:
7b20: 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f  .  pOp = &aOp[pO
7b30: 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 62 72  p->p2 - 1];.  br
7b40: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
7b50: 65 3a 20 20 52 65 74 75 72 6e 20 50 31 20 2a 20  e:  Return P1 * 
7b60: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  * * *.**.** Jump
7b70: 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
7b80: 74 72 75 63 74 69 6f 6e 20 61 66 74 65 72 20 74  truction after t
7b90: 68 65 20 61 64 64 72 65 73 73 20 69 6e 20 72 65  he address in re
7ba0: 67 69 73 74 65 72 20 50 31 2e 20 20 41 66 74 65  gister P1.  Afte
7bb0: 72 0a 2a 2a 20 74 68 65 20 6a 75 6d 70 2c 20 72  r.** the jump, r
7bc0: 65 67 69 73 74 65 72 20 50 31 20 62 65 63 6f 6d  egister P1 becom
7bd0: 65 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2f  es undefined..*/
7be0: 0a 63 61 73 65 20 4f 50 5f 52 65 74 75 72 6e 3a  .case OP_Return:
7bf0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
7c00: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
7c10: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
7c20: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
7c30: 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29  flags==MEM_Int )
7c40: 3b 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70  ;.  pOp = &aOp[p
7c50: 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20 20 70 49 6e  In1->u.i];.  pIn
7c60: 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55  1->flags = MEM_U
7c70: 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61  ndefined;.  brea
7c80: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
7c90: 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 20 50   InitCoroutine P
7ca0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
7cb0: 2a 20 53 65 74 20 75 70 20 72 65 67 69 73 74 65  * Set up registe
7cc0: 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20  r P1 so that it 
7cd0: 77 69 6c 6c 20 59 69 65 6c 64 20 74 6f 20 74 68  will Yield to th
7ce0: 65 20 63 6f 72 6f 75 74 69 6e 65 0a 2a 2a 20 6c  e coroutine.** l
7cf0: 6f 63 61 74 65 64 20 61 74 20 61 64 64 72 65 73  ocated at addres
7d00: 73 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  s P3..**.** If P
7d10: 32 21 3d 30 20 74 68 65 6e 20 74 68 65 20 63 6f  2!=0 then the co
7d20: 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e  routine implemen
7d30: 74 61 74 69 6f 6e 20 69 6d 6d 65 64 69 61 74 65  tation immediate
7d40: 6c 79 20 66 6f 6c 6c 6f 77 73 0a 2a 2a 20 74 68  ly follows.** th
7d50: 69 73 20 6f 70 63 6f 64 65 2e 20 20 53 6f 20 6a  is opcode.  So j
7d60: 75 6d 70 20 6f 76 65 72 20 74 68 65 20 63 6f 72  ump over the cor
7d70: 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74  outine implement
7d80: 61 74 69 6f 6e 20 74 6f 0a 2a 2a 20 61 64 64 72  ation to.** addr
7d90: 65 73 73 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65  ess P2..**.** Se
7da0: 65 20 61 6c 73 6f 3a 20 45 6e 64 43 6f 72 6f 75  e also: EndCorou
7db0: 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  tine.*/.case OP_
7dc0: 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 3a 20 7b  InitCoroutine: {
7dd0: 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
7de0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
7df0: 31 3e 30 20 26 26 20 20 70 4f 70 2d 3e 70 31 3c  1>0 &&  pOp->p1<
7e00: 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
7e10: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 61  >nCursor) );.  a
7e20: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d  ssert( pOp->p2>=
7e30: 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e  0 && pOp->p2<p->
7e40: 6e 4f 70 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nOp );.  assert(
7e50: 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 26 26 20 70   pOp->p3>=0 && p
7e60: 4f 70 2d 3e 70 33 3c 70 2d 3e 6e 4f 70 20 29 3b  Op->p3<p->nOp );
7e70: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
7e80: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
7e90: 72 74 28 20 21 56 64 62 65 4d 65 6d 44 79 6e 61  rt( !VdbeMemDyna
7ea0: 6d 69 63 28 70 4f 75 74 29 20 29 3b 0a 20 20 70  mic(pOut) );.  p
7eb0: 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e  Out->u.i = pOp->
7ec0: 70 33 20 2d 20 31 3b 0a 20 20 70 4f 75 74 2d 3e  p3 - 1;.  pOut->
7ed0: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
7ee0: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 29  .  if( pOp->p2 )
7ef0: 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
7f00: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
7f10: 20 4f 70 63 6f 64 65 3a 20 20 45 6e 64 43 6f 72   Opcode:  EndCor
7f20: 6f 75 74 69 6e 65 20 50 31 20 2a 20 2a 20 2a 20  outine P1 * * * 
7f30: 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 73 74  *.**.** The inst
7f40: 72 75 63 74 69 6f 6e 20 61 74 20 74 68 65 20 61  ruction at the a
7f50: 64 64 72 65 73 73 20 69 6e 20 72 65 67 69 73 74  ddress in regist
7f60: 65 72 20 50 31 20 69 73 20 61 20 59 69 65 6c 64  er P1 is a Yield
7f70: 2e 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65  ..** Jump to the
7f80: 20 50 32 20 70 61 72 61 6d 65 74 65 72 20 6f 66   P2 parameter of
7f90: 20 74 68 61 74 20 59 69 65 6c 64 2e 0a 2a 2a 20   that Yield..** 
7fa0: 41 66 74 65 72 20 74 68 65 20 6a 75 6d 70 2c 20  After the jump, 
7fb0: 72 65 67 69 73 74 65 72 20 50 31 20 62 65 63 6f  register P1 beco
7fc0: 6d 65 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a  mes undefined..*
7fd0: 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49  *.** See also: I
7fe0: 6e 69 74 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a  nitCoroutine.*/.
7ff0: 63 61 73 65 20 4f 50 5f 45 6e 64 43 6f 72 6f 75  case OP_EndCorou
8000: 74 69 6e 65 3a 20 7b 20 20 20 20 20 20 20 20 20  tine: {         
8010: 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 56 64    /* in1 */.  Vd
8020: 62 65 4f 70 20 2a 70 43 61 6c 6c 65 72 3b 0a 20  beOp *pCaller;. 
8030: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
8040: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
8050: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d  ( pIn1->flags==M
8060: 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65  EM_Int );.  asse
8070: 72 74 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 3d 30  rt( pIn1->u.i>=0
8080: 20 26 26 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 2d   && pIn1->u.i<p-
8090: 3e 6e 4f 70 20 29 3b 0a 20 20 70 43 61 6c 6c 65  >nOp );.  pCalle
80a0: 72 20 3d 20 26 61 4f 70 5b 70 49 6e 31 2d 3e 75  r = &aOp[pIn1->u
80b0: 2e 69 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  .i];.  assert( p
80c0: 43 61 6c 6c 65 72 2d 3e 6f 70 63 6f 64 65 3d 3d  Caller->opcode==
80d0: 4f 50 5f 59 69 65 6c 64 20 29 3b 0a 20 20 61 73  OP_Yield );.  as
80e0: 73 65 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e 70  sert( pCaller->p
80f0: 32 3e 3d 30 20 26 26 20 70 43 61 6c 6c 65 72 2d  2>=0 && pCaller-
8100: 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20  >p2<p->nOp );.  
8110: 70 4f 70 20 3d 20 26 61 4f 70 5b 70 43 61 6c 6c  pOp = &aOp[pCall
8120: 65 72 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 70  er->p2 - 1];.  p
8130: 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  In1->flags = MEM
8140: 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72  _Undefined;.  br
8150: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
8160: 65 3a 20 20 59 69 65 6c 64 20 50 31 20 50 32 20  e:  Yield P1 P2 
8170: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70  * * *.**.** Swap
8180: 20 74 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75   the program cou
8190: 6e 74 65 72 20 77 69 74 68 20 74 68 65 20 76 61  nter with the va
81a0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
81b0: 50 31 2e 20 20 54 68 69 73 0a 2a 2a 20 68 61 73  P1.  This.** has
81c0: 20 74 68 65 20 65 66 66 65 63 74 20 6f 66 20 79   the effect of y
81d0: 69 65 6c 64 69 6e 67 20 74 6f 20 61 20 63 6f 72  ielding to a cor
81e0: 6f 75 74 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  outine..**.** If
81f0: 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 74   the coroutine t
8200: 68 61 74 20 69 73 20 6c 61 75 6e 63 68 65 64 20  hat is launched 
8210: 62 79 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  by this instruct
8220: 69 6f 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a  ion ends with.**
8230: 20 59 69 65 6c 64 20 6f 72 20 52 65 74 75 72 6e   Yield or Return
8240: 20 74 68 65 6e 20 63 6f 6e 74 69 6e 75 65 20 74   then continue t
8250: 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
8260: 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 0a  uction.  But if.
8270: 2a 2a 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65  ** the coroutine
8280: 20 6c 61 75 6e 63 68 65 64 20 62 79 20 74 68 69   launched by thi
8290: 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e  s instruction en
82a0: 64 73 20 77 69 74 68 0a 2a 2a 20 45 6e 64 43 6f  ds with.** EndCo
82b0: 72 6f 75 74 69 6e 65 2c 20 74 68 65 6e 20 6a 75  routine, then ju
82c0: 6d 70 20 74 6f 20 50 32 20 72 61 74 68 65 72 20  mp to P2 rather 
82d0: 74 68 61 6e 20 63 6f 6e 74 69 6e 75 69 6e 67 20  than continuing 
82e0: 77 69 74 68 20 74 68 65 0a 2a 2a 20 6e 65 78 74  with the.** next
82f0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
8300: 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e  .** See also: In
8310: 69 74 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63  itCoroutine.*/.c
8320: 61 73 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 20  ase OP_Yield: { 
8330: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
8340: 31 2c 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74  1, jump */.  int
8350: 20 70 63 44 65 73 74 3b 0a 20 20 70 49 6e 31 20   pcDest;.  pIn1 
8360: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
8370: 3b 0a 20 20 61 73 73 65 72 74 28 20 56 64 62 65  ;.  assert( Vdbe
8380: 4d 65 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29  MemDynamic(pIn1)
8390: 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66  ==0 );.  pIn1->f
83a0: 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
83b0: 20 20 70 63 44 65 73 74 20 3d 20 28 69 6e 74 29    pcDest = (int)
83c0: 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e  pIn1->u.i;.  pIn
83d0: 31 2d 3e 75 2e 69 20 3d 20 28 69 6e 74 29 28 70  1->u.i = (int)(p
83e0: 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 52 45 47  Op - aOp);.  REG
83f0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
8400: 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 4f  >p1, pIn1);.  pO
8410: 70 20 3d 20 26 61 4f 70 5b 70 63 44 65 73 74 5d  p = &aOp[pcDest]
8420: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
8430: 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74 49 66   Opcode:  HaltIf
8440: 4e 75 6c 6c 20 20 50 31 20 50 32 20 50 33 20 50  Null  P1 P2 P3 P
8450: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
8460: 3a 20 69 66 20 72 5b 50 33 5d 3d 6e 75 6c 6c 20  : if r[P3]=null 
8470: 68 61 6c 74 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b  halt.**.** Check
8480: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
8490: 67 69 73 74 65 72 20 50 33 2e 20 20 49 66 20 69  gister P3.  If i
84a0: 74 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 48  t is NULL then H
84b0: 61 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 70 61 72  alt using.** par
84c0: 61 6d 65 74 65 72 20 50 31 2c 20 50 32 2c 20 61  ameter P1, P2, a
84d0: 6e 64 20 50 34 20 61 73 20 69 66 20 74 68 69 73  nd P4 as if this
84e0: 20 77 65 72 65 20 61 20 48 61 6c 74 20 69 6e 73   were a Halt ins
84f0: 74 72 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68  truction.  If th
8500: 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20 72 65  e.** value in re
8510: 67 69 73 74 65 72 20 50 33 20 69 73 20 6e 6f 74  gister P3 is not
8520: 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 69 73   NULL, then this
8530: 20 72 6f 75 74 69 6e 65 20 69 73 20 61 20 6e 6f   routine is a no
8540: 2d 6f 70 2e 0a 2a 2a 20 54 68 65 20 50 35 20 70  -op..** The P5 p
8550: 61 72 61 6d 65 74 65 72 20 73 68 6f 75 6c 64 20  arameter should 
8560: 62 65 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  be 1..*/.case OP
8570: 5f 48 61 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20 20  _HaltIfNull: {  
8580: 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20      /* in3 */.  
8590: 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
85a0: 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51  ->p3];.#ifdef SQ
85b0: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28  LITE_DEBUG.  if(
85c0: 20 70 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 41 62 6f   pOp->p2==OE_Abo
85d0: 72 74 20 29 7b 20 73 71 6c 69 74 65 33 56 64 62  rt ){ sqlite3Vdb
85e0: 65 41 73 73 65 72 74 41 62 6f 72 74 61 62 6c 65  eAssertAbortable
85f0: 28 70 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20  (p); }.#endif.  
8600: 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  if( (pIn3->flags
8610: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20   & MEM_Null)==0 
8620: 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61  ) break;.  /* Fa
8630: 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20  ll through into 
8640: 4f 50 5f 48 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a  OP_Halt */.}../*
8650: 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74 20 50   Opcode:  Halt P
8660: 31 20 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a 0a  1 P2 * P4 P5.**.
8670: 2a 2a 20 45 78 69 74 20 69 6d 6d 65 64 69 61 74  ** Exit immediat
8680: 65 6c 79 2e 20 20 41 6c 6c 20 6f 70 65 6e 20 63  ely.  All open c
8690: 75 72 73 6f 72 73 2c 20 65 74 63 20 61 72 65 20  ursors, etc are 
86a0: 63 6c 6f 73 65 64 0a 2a 2a 20 61 75 74 6f 6d 61  closed.** automa
86b0: 74 69 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50  tically..**.** P
86c0: 31 20 69 73 20 74 68 65 20 72 65 73 75 6c 74 20  1 is the result 
86d0: 63 6f 64 65 20 72 65 74 75 72 6e 65 64 20 62 79  code returned by
86e0: 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 2c   sqlite3_exec(),
86f0: 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 29   sqlite3_reset()
8700: 2c 0a 2a 2a 20 6f 72 20 73 71 6c 69 74 65 33 5f  ,.** or sqlite3_
8710: 66 69 6e 61 6c 69 7a 65 28 29 2e 20 20 46 6f 72  finalize().  For
8720: 20 61 20 6e 6f 72 6d 61 6c 20 68 61 6c 74 2c 20   a normal halt, 
8730: 74 68 69 73 20 73 68 6f 75 6c 64 20 62 65 20 53  this should be S
8740: 51 4c 49 54 45 5f 4f 4b 20 28 30 29 2e 0a 2a 2a  QLITE_OK (0)..**
8750: 20 46 6f 72 20 65 72 72 6f 72 73 2c 20 69 74 20   For errors, it 
8760: 63 61 6e 20 62 65 20 73 6f 6d 65 20 6f 74 68 65  can be some othe
8770: 72 20 76 61 6c 75 65 2e 20 20 49 66 20 50 31 21  r value.  If P1!
8780: 3d 30 20 74 68 65 6e 20 50 32 20 77 69 6c 6c 20  =0 then P2 will 
8790: 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65  determine.** whe
87a0: 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 6f 20 72  ther or not to r
87b0: 6f 6c 6c 62 61 63 6b 20 74 68 65 20 63 75 72 72  ollback the curr
87c0: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ent transaction.
87d0: 20 20 44 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63    Do not rollbac
87e0: 6b 0a 2a 2a 20 69 66 20 50 32 3d 3d 4f 45 5f 46  k.** if P2==OE_F
87f0: 61 69 6c 2e 20 44 6f 20 74 68 65 20 72 6f 6c 6c  ail. Do the roll
8800: 62 61 63 6b 20 69 66 20 50 32 3d 3d 4f 45 5f 52  back if P2==OE_R
8810: 6f 6c 6c 62 61 63 6b 2e 20 20 49 66 20 50 32 3d  ollback.  If P2=
8820: 3d 4f 45 5f 41 62 6f 72 74 2c 0a 2a 2a 20 74 68  =OE_Abort,.** th
8830: 65 6e 20 62 61 63 6b 20 6f 75 74 20 61 6c 6c 20  en back out all 
8840: 63 68 61 6e 67 65 73 20 74 68 61 74 20 68 61 76  changes that hav
8850: 65 20 6f 63 63 75 72 72 65 64 20 64 75 72 69 6e  e occurred durin
8860: 67 20 74 68 69 73 20 65 78 65 63 75 74 69 6f 6e  g this execution
8870: 20 6f 66 20 74 68 65 0a 2a 2a 20 56 44 42 45 2c   of the.** VDBE,
8880: 20 62 75 74 20 64 6f 20 6e 6f 74 20 72 6f 6c 6c   but do not roll
8890: 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63  back the transac
88a0: 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20  tion. .**.** If 
88b0: 50 34 20 69 73 20 6e 6f 74 20 6e 75 6c 6c 20 74  P4 is not null t
88c0: 68 65 6e 20 69 74 20 69 73 20 61 6e 20 65 72 72  hen it is an err
88d0: 6f 72 20 6d 65 73 73 61 67 65 20 73 74 72 69 6e  or message strin
88e0: 67 2e 0a 2a 2a 0a 2a 2a 20 50 35 20 69 73 20 61  g..**.** P5 is a
88f0: 20 76 61 6c 75 65 20 62 65 74 77 65 65 6e 20 30   value between 0
8900: 20 61 6e 64 20 34 2c 20 69 6e 63 6c 75 73 69 76   and 4, inclusiv
8910: 65 2c 20 74 68 61 74 20 6d 6f 64 69 66 69 65 73  e, that modifies
8920: 20 74 68 65 20 50 34 20 73 74 72 69 6e 67 2e 0a   the P4 string..
8930: 2a 2a 0a 2a 2a 20 20 20 20 30 3a 20 20 28 6e 6f  **.**    0:  (no
8940: 20 63 68 61 6e 67 65 29 0a 2a 2a 20 20 20 20 31   change).**    1
8950: 3a 20 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 74  :  NOT NULL cont
8960: 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34  raint failed: P4
8970: 0a 2a 2a 20 20 20 20 32 3a 20 20 55 4e 49 51 55  .**    2:  UNIQU
8980: 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69  E constraint fai
8990: 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20 33 3a  led: P4.**    3:
89a0: 20 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69    CHECK constrai
89b0: 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a  nt failed: P4.**
89c0: 20 20 20 20 34 3a 20 20 46 4f 52 45 49 47 4e 20      4:  FOREIGN 
89d0: 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  KEY constraint f
89e0: 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 0a 2a 2a 20  ailed: P4.**.** 
89f0: 49 66 20 50 35 20 69 73 20 6e 6f 74 20 7a 65 72  If P5 is not zer
8a00: 6f 20 61 6e 64 20 50 34 20 69 73 20 4e 55 4c 4c  o and P4 is NULL
8a10: 2c 20 74 68 65 6e 20 65 76 65 72 79 74 68 69 6e  , then everythin
8a20: 67 20 61 66 74 65 72 20 74 68 65 20 22 3a 22 20  g after the ":" 
8a30: 69 73 0a 2a 2a 20 6f 6d 69 74 74 65 64 2e 0a 2a  is.** omitted..*
8a40: 2a 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 61 6e  *.** There is an
8a50: 20 69 6d 70 6c 69 65 64 20 22 48 61 6c 74 20 30   implied "Halt 0
8a60: 20 30 20 30 22 20 69 6e 73 74 72 75 63 74 69 6f   0 0" instructio
8a70: 6e 20 69 6e 73 65 72 74 65 64 20 61 74 20 74 68  n inserted at th
8a80: 65 20 76 65 72 79 20 65 6e 64 20 6f 66 0a 2a 2a  e very end of.**
8a90: 20 65 76 65 72 79 20 70 72 6f 67 72 61 6d 2e 20   every program. 
8aa0: 20 53 6f 20 61 20 6a 75 6d 70 20 70 61 73 74 20   So a jump past 
8ab0: 74 68 65 20 6c 61 73 74 20 69 6e 73 74 72 75 63  the last instruc
8ac0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 70 72 6f 67  tion of the prog
8ad0: 72 61 6d 0a 2a 2a 20 69 73 20 74 68 65 20 73 61  ram.** is the sa
8ae0: 6d 65 20 61 73 20 65 78 65 63 75 74 69 6e 67 20  me as executing 
8af0: 48 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  Halt..*/.case OP
8b00: 5f 48 61 6c 74 3a 20 7b 0a 20 20 56 64 62 65 46  _Halt: {.  VdbeF
8b10: 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20  rame *pFrame;.  
8b20: 69 6e 74 20 70 63 78 3b 0a 0a 20 20 70 63 78 20  int pcx;..  pcx 
8b30: 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f  = (int)(pOp - aO
8b40: 70 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  p);.#ifdef SQLIT
8b50: 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70 4f  E_DEBUG.  if( pO
8b60: 70 2d 3e 70 32 3d 3d 4f 45 5f 41 62 6f 72 74 20  p->p2==OE_Abort 
8b70: 29 7b 20 73 71 6c 69 74 65 33 56 64 62 65 41 73  ){ sqlite3VdbeAs
8b80: 73 65 72 74 41 62 6f 72 74 61 62 6c 65 28 70 29  sertAbortable(p)
8b90: 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 69 66 28  ; }.#endif.  if(
8ba0: 20 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c 49 54 45   pOp->p1==SQLITE
8bb0: 5f 4f 4b 20 26 26 20 70 2d 3e 70 46 72 61 6d 65  _OK && p->pFrame
8bc0: 20 29 7b 0a 20 20 20 20 2f 2a 20 48 61 6c 74 20   ){.    /* Halt 
8bd0: 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e  the sub-program.
8be0: 20 52 65 74 75 72 6e 20 63 6f 6e 74 72 6f 6c 20   Return control 
8bf0: 74 6f 20 74 68 65 20 70 61 72 65 6e 74 20 66 72  to the parent fr
8c00: 61 6d 65 2e 20 2a 2f 0a 20 20 20 20 70 46 72 61  ame. */.    pFra
8c10: 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a  me = p->pFrame;.
8c20: 20 20 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20      p->pFrame = 
8c30: 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b  pFrame->pParent;
8c40: 0a 20 20 20 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d  .    p->nFrame--
8c50: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
8c60: 65 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20  eSetChanges(db, 
8c70: 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 20  p->nChange);.   
8c80: 20 70 63 78 20 3d 20 73 71 6c 69 74 65 33 56 64   pcx = sqlite3Vd
8c90: 62 65 46 72 61 6d 65 52 65 73 74 6f 72 65 28 70  beFrameRestore(p
8ca0: 46 72 61 6d 65 29 3b 0a 20 20 20 20 69 66 28 20  Frame);.    if( 
8cb0: 70 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f  pOp->p2==OE_Igno
8cc0: 72 65 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  re ){.      /* I
8cd0: 6e 73 74 72 75 63 74 69 6f 6e 20 70 63 78 20 69  nstruction pcx i
8ce0: 73 20 74 68 65 20 4f 50 5f 50 72 6f 67 72 61 6d  s the OP_Program
8cf0: 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68   that invoked th
8d00: 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 0a 20  e sub-program . 
8d10: 20 20 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 6c       ** currentl
8d20: 79 20 62 65 69 6e 67 20 68 61 6c 74 65 64 2e 20  y being halted. 
8d30: 49 66 20 74 68 65 20 70 32 20 69 6e 73 74 72 75  If the p2 instru
8d40: 63 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 4f 50  ction of this OP
8d50: 5f 48 61 6c 74 0a 20 20 20 20 20 20 2a 2a 20 69  _Halt.      ** i
8d60: 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 73 65  nstruction is se
8d70: 74 20 74 6f 20 4f 45 5f 49 67 6e 6f 72 65 2c 20  t to OE_Ignore, 
8d80: 74 68 65 6e 20 74 68 65 20 73 75 62 2d 70 72 6f  then the sub-pro
8d90: 67 72 61 6d 20 69 73 20 74 68 72 6f 77 69 6e 67  gram is throwing
8da0: 0a 20 20 20 20 20 20 2a 2a 20 61 6e 20 49 47 4e  .      ** an IGN
8db0: 4f 52 45 20 65 78 63 65 70 74 69 6f 6e 2e 20 49  ORE exception. I
8dc0: 6e 20 74 68 69 73 20 63 61 73 65 20 6a 75 6d 70  n this case jump
8dd0: 20 74 6f 20 74 68 65 20 61 64 64 72 65 73 73 20   to the address 
8de0: 73 70 65 63 69 66 69 65 64 0a 20 20 20 20 20 20  specified.      
8df0: 2a 2a 20 61 73 20 74 68 65 20 70 32 20 6f 66 20  ** as the p2 of 
8e00: 74 68 65 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50  the calling OP_P
8e10: 72 6f 67 72 61 6d 2e 20 20 2a 2f 0a 20 20 20 20  rogram.  */.    
8e20: 20 20 70 63 78 20 3d 20 70 2d 3e 61 4f 70 5b 70    pcx = p->aOp[p
8e30: 63 78 5d 2e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a  cx].p2-1;.    }.
8e40: 20 20 20 20 61 4f 70 20 3d 20 70 2d 3e 61 4f 70      aOp = p->aOp
8e50: 3b 0a 20 20 20 20 61 4d 65 6d 20 3d 20 70 2d 3e  ;.    aMem = p->
8e60: 61 4d 65 6d 3b 0a 20 20 20 20 70 4f 70 20 3d 20  aMem;.    pOp = 
8e70: 26 61 4f 70 5b 70 63 78 5d 3b 0a 20 20 20 20 62  &aOp[pcx];.    b
8e80: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 2d 3e 72  reak;.  }.  p->r
8e90: 63 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  c = pOp->p1;.  p
8ea0: 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20  ->errorAction = 
8eb0: 28 75 38 29 70 4f 70 2d 3e 70 32 3b 0a 20 20 70  (u8)pOp->p2;.  p
8ec0: 2d 3e 70 63 20 3d 20 70 63 78 3b 0a 20 20 61 73  ->pc = pcx;.  as
8ed0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 3d 34  sert( pOp->p5<=4
8ee0: 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 20   );.  if( p->rc 
8ef0: 29 7b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  ){.    if( pOp->
8f00: 70 35 20 29 7b 0a 20 20 20 20 20 20 73 74 61 74  p5 ){.      stat
8f10: 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20  ic const char * 
8f20: 63 6f 6e 73 74 20 61 7a 54 79 70 65 5b 5d 20 3d  const azType[] =
8f30: 20 7b 20 22 4e 4f 54 20 4e 55 4c 4c 22 2c 20 22   { "NOT NULL", "
8f40: 55 4e 49 51 55 45 22 2c 20 22 43 48 45 43 4b 22  UNIQUE", "CHECK"
8f50: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
8f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
8f80: 46 4f 52 45 49 47 4e 20 4b 45 59 22 20 7d 3b 0a  FOREIGN KEY" };.
8f90: 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
8fa0: 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20  pOp->p5==1 );.  
8fb0: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f      testcase( pO
8fc0: 70 2d 3e 70 35 3d 3d 32 20 29 3b 0a 20 20 20 20  p->p5==2 );.    
8fd0: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
8fe0: 3e 70 35 3d 3d 33 20 29 3b 0a 20 20 20 20 20 20  >p5==3 );.      
8ff0: 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
9000: 35 3d 3d 34 20 29 3b 0a 20 20 20 20 20 20 73 71  5==4 );.      sq
9010: 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70  lite3VdbeError(p
9020: 2c 20 22 25 73 20 63 6f 6e 73 74 72 61 69 6e 74  , "%s constraint
9030: 20 66 61 69 6c 65 64 22 2c 20 61 7a 54 79 70 65   failed", azType
9040: 5b 70 4f 70 2d 3e 70 35 2d 31 5d 29 3b 0a 20 20  [pOp->p5-1]);.  
9050: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e      if( pOp->p4.
9060: 7a 20 29 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e  z ){.        p->
9070: 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65  zErrMsg = sqlite
9080: 33 4d 50 72 69 6e 74 66 28 64 62 2c 20 22 25 7a  3MPrintf(db, "%z
9090: 3a 20 25 73 22 2c 20 70 2d 3e 7a 45 72 72 4d 73  : %s", p->zErrMs
90a0: 67 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  g, pOp->p4.z);. 
90b0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
90c0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
90d0: 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22  dbeError(p, "%s"
90e0: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
90f0: 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f    }.    sqlite3_
9100: 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c 20 22 61 62  log(pOp->p1, "ab
9110: 6f 72 74 20 61 74 20 25 64 20 69 6e 20 5b 25 73  ort at %d in [%s
9120: 5d 3a 20 25 73 22 2c 20 70 63 78 2c 20 70 2d 3e  ]: %s", pcx, p->
9130: 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67  zSql, p->zErrMsg
9140: 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71  );.  }.  rc = sq
9150: 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29  lite3VdbeHalt(p)
9160: 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d  ;.  assert( rc==
9170: 53 51 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20 72  SQLITE_BUSY || r
9180: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
9190: 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52  rc==SQLITE_ERROR
91a0: 20 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51   );.  if( rc==SQ
91b0: 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
91c0: 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f   p->rc = SQLITE_
91d0: 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  BUSY;.  }else{. 
91e0: 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
91f0: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e  QLITE_OK || (p->
9200: 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45  rc&0xff)==SQLITE
9210: 5f 43 4f 4e 53 54 52 41 49 4e 54 20 29 3b 0a 20  _CONSTRAINT );. 
9220: 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
9230: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e  QLITE_OK || db->
9240: 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3e 30 20  nDeferredCons>0 
9250: 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  || db->nDeferred
9260: 49 6d 6d 43 6f 6e 73 3e 30 20 29 3b 0a 20 20 20  ImmCons>0 );.   
9270: 20 72 63 20 3d 20 70 2d 3e 72 63 20 3f 20 53 51   rc = p->rc ? SQ
9280: 4c 49 54 45 5f 45 52 52 4f 52 20 3a 20 53 51 4c  LITE_ERROR : SQL
9290: 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20  ITE_DONE;.  }.  
92a0: 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
92b0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
92c0: 49 6e 74 65 67 65 72 20 50 31 20 50 32 20 2a 20  Integer P1 P2 * 
92d0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
92e0: 20 72 5b 50 32 5d 3d 50 31 0a 2a 2a 0a 2a 2a 20   r[P2]=P1.**.** 
92f0: 54 68 65 20 33 32 2d 62 69 74 20 69 6e 74 65 67  The 32-bit integ
9300: 65 72 20 76 61 6c 75 65 20 50 31 20 69 73 20 77  er value P1 is w
9310: 72 69 74 74 65 6e 20 69 6e 74 6f 20 72 65 67 69  ritten into regi
9320: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
9330: 20 4f 50 5f 49 6e 74 65 67 65 72 3a 20 7b 20 20   OP_Integer: {  
9340: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
9350: 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  /.  pOut = out2P
9360: 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
9370: 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
9380: 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61   pOp->p1;.  brea
9390: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
93a0: 20 49 6e 74 36 34 20 2a 20 50 32 20 2a 20 50 34   Int64 * P2 * P4
93b0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
93c0: 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50  r[P2]=P4.**.** P
93d0: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
93e0: 6f 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67  o a 64-bit integ
93f0: 65 72 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69  er value..** Wri
9400: 74 65 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e  te that value in
9410: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
9420: 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 36 34  */.case OP_Int64
9430: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
9440: 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20   out2 */.  pOut 
9450: 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
9460: 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65  (p, pOp);.  asse
9470: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 70 49 36 34  rt( pOp->p4.pI64
9480: 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75  !=0 );.  pOut->u
9490: 2e 69 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 49  .i = *pOp->p4.pI
94a0: 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  64;.  break;.}..
94b0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
94c0: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
94d0: 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  NT./* Opcode: Re
94e0: 61 6c 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a  al * P2 * P4 *.*
94f0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
9500: 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  ]=P4.**.** P4 is
9510: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
9520: 36 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67 20  64-bit floating 
9530: 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a 20  point value..** 
9540: 57 72 69 74 65 20 74 68 61 74 20 76 61 6c 75 65  Write that value
9550: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
9560: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  2..*/.case OP_Re
9570: 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  al: {           
9580: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 46   /* same as TK_F
9590: 4c 4f 41 54 2c 20 6f 75 74 32 20 2a 2f 0a 20 20  LOAT, out2 */.  
95a0: 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
95b0: 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
95c0: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
95d0: 45 4d 5f 52 65 61 6c 3b 0a 20 20 61 73 73 65 72  EM_Real;.  asser
95e0: 74 28 20 21 73 71 6c 69 74 65 33 49 73 4e 61 4e  t( !sqlite3IsNaN
95f0: 28 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 29  (*pOp->p4.pReal)
9600: 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 72 20   );.  pOut->u.r 
9610: 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c  = *pOp->p4.pReal
9620: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
9630: 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  dif../* Opcode: 
9640: 53 74 72 69 6e 67 38 20 2a 20 50 32 20 2a 20 50  String8 * P2 * P
9650: 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
9660: 20 72 5b 50 32 5d 3d 27 50 34 27 0a 2a 2a 0a 2a   r[P2]='P4'.**.*
9670: 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61  * P4 points to a
9680: 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74 65 64 20   nul terminated 
9690: 55 54 46 2d 38 20 73 74 72 69 6e 67 2e 20 54 68  UTF-8 string. Th
96a0: 69 73 20 6f 70 63 6f 64 65 20 69 73 20 74 72 61  is opcode is tra
96b0: 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e 74  nsformed .** int
96c0: 6f 20 61 20 53 74 72 69 6e 67 20 6f 70 63 6f 64  o a String opcod
96d0: 65 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 65  e before it is e
96e0: 78 65 63 75 74 65 64 20 66 6f 72 20 74 68 65 20  xecuted for the 
96f0: 66 69 72 73 74 20 74 69 6d 65 2e 20 20 44 75 72  first time.  Dur
9700: 69 6e 67 0a 2a 2a 20 74 68 69 73 20 74 72 61 6e  ing.** this tran
9710: 73 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20  sformation, the 
9720: 6c 65 6e 67 74 68 20 6f 66 20 73 74 72 69 6e 67  length of string
9730: 20 50 34 20 69 73 20 63 6f 6d 70 75 74 65 64 20   P4 is computed 
9740: 61 6e 64 20 73 74 6f 72 65 64 0a 2a 2a 20 61 73  and stored.** as
9750: 20 74 68 65 20 50 31 20 70 61 72 61 6d 65 74 65   the P1 paramete
9760: 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74  r..*/.case OP_St
9770: 72 69 6e 67 38 3a 20 7b 20 20 20 20 20 20 20 20  ring8: {        
9780: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53   /* same as TK_S
9790: 54 52 49 4e 47 2c 20 6f 75 74 32 20 2a 2f 0a 20  TRING, out2 */. 
97a0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
97b0: 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20  .z!=0 );.  pOut 
97c0: 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
97d0: 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 70 2d  (p, pOp);.  pOp-
97e0: 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72  >opcode = OP_Str
97f0: 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d  ing;.  pOp->p1 =
9800: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
9810: 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69  (pOp->p4.z);..#i
9820: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
9830: 54 5f 55 54 46 31 36 0a 20 20 69 66 28 20 65 6e  T_UTF16.  if( en
9840: 63 6f 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55  coding!=SQLITE_U
9850: 54 46 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  TF8 ){.    rc = 
9860: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
9870: 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e  tStr(pOut, pOp->
9880: 70 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45  p4.z, -1, SQLITE
9890: 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54  _UTF8, SQLITE_ST
98a0: 41 54 49 43 29 3b 0a 20 20 20 20 61 73 73 65 72  ATIC);.    asser
98b0: 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
98c0: 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 54   || rc==SQLITE_T
98d0: 4f 4f 42 49 47 20 29 3b 0a 20 20 20 20 69 66 28  OOBIG );.    if(
98e0: 20 72 63 20 29 20 67 6f 74 6f 20 74 6f 6f 5f 62   rc ) goto too_b
98f0: 69 67 3b 0a 20 20 20 20 69 66 28 20 53 51 4c 49  ig;.    if( SQLI
9900: 54 45 5f 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64  TE_OK!=sqlite3Vd
9910: 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
9920: 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29  (pOut, encoding)
9930: 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
9940: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 75 74      assert( pOut
9950: 2d 3e 73 7a 4d 61 6c 6c 6f 63 3e 30 20 26 26 20  ->szMalloc>0 && 
9960: 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70  pOut->zMalloc==p
9970: 4f 75 74 2d 3e 7a 20 29 3b 0a 20 20 20 20 61 73  Out->z );.    as
9980: 73 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e  sert( VdbeMemDyn
9990: 61 6d 69 63 28 70 4f 75 74 29 3d 3d 30 20 29 3b  amic(pOut)==0 );
99a0: 0a 20 20 20 20 70 4f 75 74 2d 3e 73 7a 4d 61 6c  .    pOut->szMal
99b0: 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 70 4f 75  loc = 0;.    pOu
99c0: 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f  t->flags |= MEM_
99d0: 53 74 61 74 69 63 3b 0a 20 20 20 20 69 66 28 20  Static;.    if( 
99e0: 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
99f0: 44 59 4e 41 4d 49 43 20 29 7b 0a 20 20 20 20 20  DYNAMIC ){.     
9a00: 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
9a10: 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  b, pOp->p4.z);. 
9a20: 20 20 20 7d 0a 20 20 20 20 70 4f 70 2d 3e 70 34     }.    pOp->p4
9a30: 74 79 70 65 20 3d 20 50 34 5f 44 59 4e 41 4d 49  type = P4_DYNAMI
9a40: 43 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34 2e 7a  C;.    pOp->p4.z
9a50: 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20 20 20 20   = pOut->z;.    
9a60: 70 4f 70 2d 3e 70 31 20 3d 20 70 4f 75 74 2d 3e  pOp->p1 = pOut->
9a70: 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  n;.  }.#endif.  
9a80: 69 66 28 20 70 4f 70 2d 3e 70 31 3e 64 62 2d 3e  if( pOp->p1>db->
9a90: 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
9aa0: 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
9ab0: 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
9ac0: 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 72  .  }.  assert( r
9ad0: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a  c==SQLITE_OK );.
9ae0: 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
9af0: 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61  h to the next ca
9b00: 73 65 2c 20 4f 50 5f 53 74 72 69 6e 67 20 2a 2f  se, OP_String */
9b10: 0a 7d 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a  .}.  ./* Opcode:
9b20: 20 53 74 72 69 6e 67 20 50 31 20 50 32 20 50 33   String P1 P2 P3
9b30: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
9b40: 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27 20 28  is: r[P2]='P4' (
9b50: 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 54 68  len=P1).**.** Th
9b60: 65 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20 50  e string value P
9b70: 34 20 6f 66 20 6c 65 6e 67 74 68 20 50 31 20 28  4 of length P1 (
9b80: 62 79 74 65 73 29 20 69 73 20 73 74 6f 72 65 64  bytes) is stored
9b90: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
9ba0: 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 20 69 73 20  .**.** If P3 is 
9bb0: 6e 6f 74 20 7a 65 72 6f 20 61 6e 64 20 74 68 65  not zero and the
9bc0: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
9bd0: 73 74 65 72 20 50 33 20 69 73 20 65 71 75 61 6c  ster P3 is equal
9be0: 20 74 6f 20 50 35 2c 20 74 68 65 6e 0a 2a 2a 20   to P5, then.** 
9bf0: 74 68 65 20 64 61 74 61 74 79 70 65 20 6f 66 20  the datatype of 
9c00: 74 68 65 20 72 65 67 69 73 74 65 72 20 50 32 20  the register P2 
9c10: 69 73 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20  is converted to 
9c20: 42 4c 4f 42 2e 20 20 54 68 65 20 63 6f 6e 74 65  BLOB.  The conte
9c30: 6e 74 20 69 73 0a 2a 2a 20 74 68 65 20 73 61 6d  nt is.** the sam
9c40: 65 20 73 65 71 75 65 6e 63 65 20 6f 66 20 62 79  e sequence of by
9c50: 74 65 73 2c 20 69 74 20 69 73 20 6d 65 72 65 6c  tes, it is merel
9c60: 79 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73  y interpreted as
9c70: 20 61 20 42 4c 4f 42 20 69 6e 73 74 65 61 64 0a   a BLOB instead.
9c80: 2a 2a 20 6f 66 20 61 20 73 74 72 69 6e 67 2c 20  ** of a string, 
9c90: 61 73 20 69 66 20 69 74 20 68 61 64 20 62 65 65  as if it had bee
9ca0: 6e 20 43 41 53 54 2e 20 20 49 6e 20 6f 74 68 65  n CAST.  In othe
9cb0: 72 20 77 6f 72 64 73 3a 0a 2a 2a 0a 2a 2a 20 69  r words:.**.** i
9cc0: 66 28 20 50 33 21 3d 30 20 61 6e 64 20 72 65 67  f( P3!=0 and reg
9cd0: 5b 50 33 5d 3d 3d 50 35 20 29 20 72 65 67 5b 50  [P3]==P5 ) reg[P
9ce0: 32 5d 20 3a 3d 20 43 41 53 54 28 72 65 67 5b 50  2] := CAST(reg[P
9cf0: 32 5d 20 61 73 20 42 4c 4f 42 29 0a 2a 2f 0a 63  2] as BLOB).*/.c
9d00: 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 3a 20 7b  ase OP_String: {
9d10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
9d20: 32 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  2 */.  assert( p
9d30: 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20  Op->p4.z!=0 );. 
9d40: 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
9d50: 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
9d60: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
9d70: 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74  MEM_Str|MEM_Stat
9d80: 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70  ic|MEM_Term;.  p
9d90: 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70 2d 3e 70 34  Out->z = pOp->p4
9da0: 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20  .z;.  pOut->n = 
9db0: 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 4f 75 74 2d  pOp->p1;.  pOut-
9dc0: 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b  >enc = encoding;
9dd0: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
9de0: 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 23 69  OBSIZE(pOut);.#i
9df0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4c 49 4b  fndef SQLITE_LIK
9e00: 45 5f 44 4f 45 53 4e 54 5f 4d 41 54 43 48 5f 42  E_DOESNT_MATCH_B
9e10: 4c 4f 42 53 0a 20 20 69 66 28 20 70 4f 70 2d 3e  LOBS.  if( pOp->
9e20: 70 33 3e 30 20 29 7b 0a 20 20 20 20 61 73 73 65  p3>0 ){.    asse
9e30: 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d  rt( pOp->p3<=(p-
9e40: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
9e50: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 70 49 6e  rsor) );.    pIn
9e60: 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
9e70: 33 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  3];.    assert( 
9e80: 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
9e90: 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 69 66 28  M_Int );.    if(
9ea0: 20 70 49 6e 33 2d 3e 75 2e 69 3d 3d 70 4f 70 2d   pIn3->u.i==pOp-
9eb0: 3e 70 35 20 29 20 70 4f 75 74 2d 3e 66 6c 61 67  >p5 ) pOut->flag
9ec0: 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d  s = MEM_Blob|MEM
9ed0: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d  _Static|MEM_Term
9ee0: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 62  ;.  }.#endif.  b
9ef0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
9f00: 64 65 3a 20 4e 75 6c 6c 20 50 31 20 50 32 20 50  de: Null P1 P2 P
9f10: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
9f20: 73 3a 20 72 5b 50 32 2e 2e 50 33 5d 3d 4e 55 4c  s: r[P2..P3]=NUL
9f30: 4c 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20  L.**.** Write a 
9f40: 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74  NULL into regist
9f50: 65 72 73 20 50 32 2e 20 20 49 66 20 50 33 20 67  ers P2.  If P3 g
9f60: 72 65 61 74 65 72 20 74 68 61 6e 20 50 32 2c 20  reater than P2, 
9f70: 74 68 65 6e 20 61 6c 73 6f 20 77 72 69 74 65 0a  then also write.
9f80: 2a 2a 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67  ** NULL into reg
9f90: 69 73 74 65 72 20 50 33 20 61 6e 64 20 65 76 65  ister P3 and eve
9fa0: 72 79 20 72 65 67 69 73 74 65 72 20 69 6e 20 62  ry register in b
9fb0: 65 74 77 65 65 6e 20 50 32 20 61 6e 64 20 50 33  etween P2 and P3
9fc0: 2e 20 20 49 66 20 50 33 0a 2a 2a 20 69 73 20 6c  .  If P3.** is l
9fd0: 65 73 73 20 74 68 61 6e 20 50 32 20 28 74 79 70  ess than P2 (typ
9fe0: 69 63 61 6c 6c 79 20 50 33 20 69 73 20 7a 65 72  ically P3 is zer
9ff0: 6f 29 20 74 68 65 6e 20 6f 6e 6c 79 20 72 65 67  o) then only reg
a000: 69 73 74 65 72 20 50 32 20 69 73 0a 2a 2a 20 73  ister P2 is.** s
a010: 65 74 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  et to NULL..**.*
a020: 2a 20 49 66 20 74 68 65 20 50 31 20 76 61 6c 75  * If the P1 valu
a030: 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  e is non-zero, t
a040: 68 65 6e 20 61 6c 73 6f 20 73 65 74 20 74 68 65  hen also set the
a050: 20 4d 45 4d 5f 43 6c 65 61 72 65 64 20 66 6c 61   MEM_Cleared fla
a060: 67 20 73 6f 20 74 68 61 74 0a 2a 2a 20 4e 55 4c  g so that.** NUL
a070: 4c 20 76 61 6c 75 65 73 20 77 69 6c 6c 20 6e 6f  L values will no
a080: 74 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20  t compare equal 
a090: 65 76 65 6e 20 69 66 20 53 51 4c 49 54 45 5f 4e  even if SQLITE_N
a0a0: 55 4c 4c 45 51 20 69 73 20 73 65 74 20 6f 6e 0a  ULLEQ is set on.
a0b0: 2a 2a 20 4f 50 5f 4e 65 20 6f 72 20 4f 50 5f 45  ** OP_Ne or OP_E
a0c0: 71 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75  q..*/.case OP_Nu
a0d0: 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ll: {           
a0e0: 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74  /* out2 */.  int
a0f0: 20 63 6e 74 3b 0a 20 20 75 31 36 20 6e 75 6c 6c   cnt;.  u16 null
a100: 46 6c 61 67 3b 0a 20 20 70 4f 75 74 20 3d 20 6f  Flag;.  pOut = o
a110: 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
a120: 20 70 4f 70 29 3b 0a 20 20 63 6e 74 20 3d 20 70   pOp);.  cnt = p
a130: 4f 70 2d 3e 70 33 2d 70 4f 70 2d 3e 70 32 3b 0a  Op->p3-pOp->p2;.
a140: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
a150: 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  3<=(p->nMem+1 - 
a160: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
a170: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e   pOut->flags = n
a180: 75 6c 6c 46 6c 61 67 20 3d 20 70 4f 70 2d 3e 70  ullFlag = pOp->p
a190: 31 20 3f 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45  1 ? (MEM_Null|ME
a1a0: 4d 5f 43 6c 65 61 72 65 64 29 20 3a 20 4d 45 4d  M_Cleared) : MEM
a1b0: 5f 4e 75 6c 6c 3b 0a 20 20 70 4f 75 74 2d 3e 6e  _Null;.  pOut->n
a1c0: 20 3d 20 30 3b 0a 23 69 66 64 65 66 20 53 51 4c   = 0;.#ifdef SQL
a1d0: 49 54 45 5f 44 45 42 55 47 0a 20 20 70 4f 75 74  ITE_DEBUG.  pOut
a1e0: 2d 3e 75 54 65 6d 70 20 3d 20 30 3b 0a 23 65 6e  ->uTemp = 0;.#en
a1f0: 64 69 66 0a 20 20 77 68 69 6c 65 28 20 63 6e 74  dif.  while( cnt
a200: 3e 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 2b 2b  >0 ){.    pOut++
a210: 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f  ;.    memAboutTo
a220: 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
a230: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
a240: 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29  MemSetNull(pOut)
a250: 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  ;.    pOut->flag
a260: 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20  s = nullFlag;.  
a270: 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 30 3b 0a 20    pOut->n = 0;. 
a280: 20 20 20 63 6e 74 2d 2d 3b 0a 20 20 7d 0a 20 20     cnt--;.  }.  
a290: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
a2a0: 6f 64 65 3a 20 53 6f 66 74 4e 75 6c 6c 20 50 31  ode: SoftNull P1
a2b0: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f   * * * *.** Syno
a2c0: 70 73 69 73 3a 20 72 5b 50 31 5d 3d 4e 55 4c 4c  psis: r[P1]=NULL
a2d0: 0a 2a 2a 0a 2a 2a 20 53 65 74 20 72 65 67 69 73  .**.** Set regis
a2e0: 74 65 72 20 50 31 20 74 6f 20 68 61 76 65 20 74  ter P1 to have t
a2f0: 68 65 20 76 61 6c 75 65 20 4e 55 4c 4c 20 61 73  he value NULL as
a300: 20 73 65 65 6e 20 62 79 20 74 68 65 20 4f 50 5f   seen by the OP_
a310: 4d 61 6b 65 52 65 63 6f 72 64 0a 2a 2a 20 69 6e  MakeRecord.** in
a320: 73 74 72 75 63 74 69 6f 6e 2c 20 62 75 74 20 64  struction, but d
a330: 6f 20 6e 6f 74 20 66 72 65 65 20 61 6e 79 20 73  o not free any s
a340: 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d 65  tring or blob me
a350: 6d 6f 72 79 20 61 73 73 6f 63 69 61 74 65 64 20  mory associated 
a360: 77 69 74 68 0a 2a 2a 20 74 68 65 20 72 65 67 69  with.** the regi
a370: 73 74 65 72 2c 20 73 6f 20 74 68 61 74 20 69 66  ster, so that if
a380: 20 74 68 65 20 76 61 6c 75 65 20 77 61 73 20 61   the value was a
a390: 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20   string or blob 
a3a0: 74 68 61 74 20 77 61 73 0a 2a 2a 20 70 72 65 76  that was.** prev
a3b0: 69 6f 75 73 6c 79 20 63 6f 70 69 65 64 20 75 73  iously copied us
a3c0: 69 6e 67 20 4f 50 5f 53 43 6f 70 79 2c 20 74 68  ing OP_SCopy, th
a3d0: 65 20 63 6f 70 69 65 73 20 77 69 6c 6c 20 63 6f  e copies will co
a3e0: 6e 74 69 6e 75 65 20 74 6f 20 62 65 20 76 61 6c  ntinue to be val
a3f0: 69 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  id..*/.case OP_S
a400: 6f 66 74 4e 75 6c 6c 3a 20 7b 0a 20 20 61 73 73  oftNull: {.  ass
a410: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26  ert( pOp->p1>0 &
a420: 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e  & pOp->p1<=(p->n
a430: 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
a440: 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  or) );.  pOut = 
a450: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
a460: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
a470: 28 70 4f 75 74 2d 3e 66 6c 61 67 73 26 7e 28 4d  (pOut->flags&~(M
a480: 45 4d 5f 55 6e 64 65 66 69 6e 65 64 7c 4d 45 4d  EM_Undefined|MEM
a490: 5f 41 66 66 4d 61 73 6b 29 29 7c 4d 45 4d 5f 4e  _AffMask))|MEM_N
a4a0: 75 6c 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ull;.  break;.}.
a4b0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 6c 6f 62  ./* Opcode: Blob
a4c0: 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
a4d0: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
a4e0: 3d 50 34 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a  =P4 (len=P1).**.
a4f0: 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20  ** P4 points to 
a500: 61 20 62 6c 6f 62 20 6f 66 20 64 61 74 61 20 50  a blob of data P
a510: 31 20 62 79 74 65 73 20 6c 6f 6e 67 2e 20 20 53  1 bytes long.  S
a520: 74 6f 72 65 20 74 68 69 73 0a 2a 2a 20 62 6c 6f  tore this.** blo
a530: 62 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  b in register P2
a540: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 6c 6f  ..*/.case OP_Blo
a550: 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  b: {            
a560: 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
a570: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
a580: 20 3c 3d 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c   <= SQLITE_MAX_L
a590: 45 4e 47 54 48 20 29 3b 0a 20 20 70 4f 75 74 20  ENGTH );.  pOut 
a5a0: 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
a5b0: 28 70 2c 20 70 4f 70 29 3b 0a 20 20 73 71 6c 69  (p, pOp);.  sqli
a5c0: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72  te3VdbeMemSetStr
a5d0: 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a  (pOut, pOp->p4.z
a5e0: 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30 29  , pOp->p1, 0, 0)
a5f0: 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  ;.  pOut->enc = 
a600: 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41  encoding;.  UPDA
a610: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
a620: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
a630: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61  }../* Opcode: Va
a640: 72 69 61 62 6c 65 20 50 31 20 50 32 20 2a 20 50  riable P1 P2 * P
a650: 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
a660: 20 72 5b 50 32 5d 3d 70 61 72 61 6d 65 74 65 72   r[P2]=parameter
a670: 28 50 31 2c 50 34 29 0a 2a 2a 0a 2a 2a 20 54 72  (P1,P4).**.** Tr
a680: 61 6e 73 66 65 72 20 74 68 65 20 76 61 6c 75 65  ansfer the value
a690: 73 20 6f 66 20 62 6f 75 6e 64 20 70 61 72 61 6d  s of bound param
a6a0: 65 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67  eter P1 into reg
a6b0: 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 49  ister P2.**.** I
a6c0: 66 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 20  f the parameter 
a6d0: 69 73 20 6e 61 6d 65 64 2c 20 74 68 65 6e 20 69  is named, then i
a6e0: 74 73 20 6e 61 6d 65 20 61 70 70 65 61 72 73 20  ts name appears 
a6f0: 69 6e 20 50 34 2e 0a 2a 2a 20 54 68 65 20 50 34  in P4..** The P4
a700: 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20 62   value is used b
a710: 79 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70  y sqlite3_bind_p
a720: 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 29 2e  arameter_name().
a730: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 72 69  .*/.case OP_Vari
a740: 61 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20  able: {         
a750: 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
a760: 4d 65 6d 20 2a 70 56 61 72 3b 20 20 20 20 20 20  Mem *pVar;      
a770: 20 2f 2a 20 56 61 6c 75 65 20 62 65 69 6e 67 20   /* Value being 
a780: 74 72 61 6e 73 66 65 72 72 65 64 20 2a 2f 0a 0a  transferred */..
a790: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
a7a0: 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d  1>0 && pOp->p1<=
a7b0: 70 2d 3e 6e 56 61 72 20 29 3b 0a 20 20 61 73 73  p->nVar );.  ass
a7c0: 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d  ert( pOp->p4.z==
a7d0: 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d  0 || pOp->p4.z==
a7e0: 73 71 6c 69 74 65 33 56 4c 69 73 74 4e 75 6d 54  sqlite3VListNumT
a7f0: 6f 4e 61 6d 65 28 70 2d 3e 70 56 4c 69 73 74 2c  oName(p->pVList,
a800: 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 70 56  pOp->p1) );.  pV
a810: 61 72 20 3d 20 26 70 2d 3e 61 56 61 72 5b 70 4f  ar = &p->aVar[pO
a820: 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20 20 69 66  p->p1 - 1];.  if
a830: 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
a840: 54 6f 6f 42 69 67 28 70 56 61 72 29 20 29 7b 0a  TooBig(pVar) ){.
a850: 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
a860: 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26  ;.  }.  pOut = &
a870: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
a880: 20 69 66 28 20 56 64 62 65 4d 65 6d 44 79 6e 61   if( VdbeMemDyna
a890: 6d 69 63 28 70 4f 75 74 29 20 29 20 73 71 6c 69  mic(pOut) ) sqli
a8a0: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
a8b0: 6c 28 70 4f 75 74 29 3b 0a 20 20 6d 65 6d 63 70  l(pOut);.  memcp
a8c0: 79 28 70 4f 75 74 2c 20 70 56 61 72 2c 20 4d 45  y(pOut, pVar, ME
a8d0: 4d 43 45 4c 4c 53 49 5a 45 29 3b 0a 20 20 70 4f  MCELLSIZE);.  pO
a8e0: 75 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d  ut->flags &= ~(M
a8f0: 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d  EM_Dyn|MEM_Ephem
a900: 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  );.  pOut->flags
a910: 20 7c 3d 20 4d 45 4d 5f 53 74 61 74 69 63 7c 4d   |= MEM_Static|M
a920: 45 4d 5f 46 72 6f 6d 42 69 6e 64 3b 0a 20 20 55  EM_FromBind;.  U
a930: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
a940: 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
a950: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
a960: 20 4d 6f 76 65 20 50 31 20 50 32 20 50 33 20 2a   Move P1 P2 P3 *
a970: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
a980: 72 5b 50 32 40 50 33 5d 3d 72 5b 50 31 40 50 33  r[P2@P3]=r[P1@P3
a990: 5d 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65  ].**.** Move the
a9a0: 20 50 33 20 76 61 6c 75 65 73 20 69 6e 20 72 65   P3 values in re
a9b0: 67 69 73 74 65 72 20 50 31 2e 2e 50 31 2b 50 33  gister P1..P1+P3
a9c0: 2d 31 20 6f 76 65 72 20 69 6e 74 6f 0a 2a 2a 20  -1 over into.** 
a9d0: 72 65 67 69 73 74 65 72 73 20 50 32 2e 2e 50 32  registers P2..P2
a9e0: 2b 50 33 2d 31 2e 20 20 52 65 67 69 73 74 65 72  +P3-1.  Register
a9f0: 73 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 61 72  s P1..P1+P3-1 ar
aa00: 65 0a 2a 2a 20 6c 65 66 74 20 68 6f 6c 64 69 6e  e.** left holdin
aa10: 67 20 61 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73  g a NULL.  It is
aa20: 20 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 72 65   an error for re
aa30: 67 69 73 74 65 72 20 72 61 6e 67 65 73 0a 2a 2a  gister ranges.**
aa40: 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 61 6e 64   P1..P1+P3-1 and
aa50: 20 50 32 2e 2e 50 32 2b 50 33 2d 31 20 74 6f 20   P2..P2+P3-1 to 
aa60: 6f 76 65 72 6c 61 70 2e 20 20 49 74 20 69 73 20  overlap.  It is 
aa70: 61 6e 20 65 72 72 6f 72 0a 2a 2a 20 66 6f 72 20  an error.** for 
aa80: 50 33 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68  P3 to be less th
aa90: 61 6e 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  an 1..*/.case OP
aaa0: 5f 4d 6f 76 65 3a 20 7b 0a 20 20 69 6e 74 20 6e  _Move: {.  int n
aab0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
aac0: 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74 65  umber of registe
aad0: 72 73 20 6c 65 66 74 20 74 6f 20 63 6f 70 79 20  rs left to copy 
aae0: 2a 2f 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20  */.  int p1;    
aaf0: 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
ab00: 72 20 74 6f 20 63 6f 70 79 20 66 72 6f 6d 20 2a  r to copy from *
ab10: 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20  /.  int p2;     
ab20: 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
ab30: 20 74 6f 20 63 6f 70 79 20 74 6f 20 2a 2f 0a 0a   to copy to */..
ab40: 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20    n = pOp->p3;. 
ab50: 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20   p1 = pOp->p1;. 
ab60: 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20   p2 = pOp->p2;. 
ab70: 20 61 73 73 65 72 74 28 20 6e 3e 30 20 26 26 20   assert( n>0 && 
ab80: 70 31 3e 30 20 26 26 20 70 32 3e 30 20 29 3b 0a  p1>0 && p2>0 );.
ab90: 20 20 61 73 73 65 72 74 28 20 70 31 2b 6e 3c 3d    assert( p1+n<=
aba0: 70 32 20 7c 7c 20 70 32 2b 6e 3c 3d 70 31 20 29  p2 || p2+n<=p1 )
abb0: 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  ;..  pIn1 = &aMe
abc0: 6d 5b 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  m[p1];.  pOut = 
abd0: 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 64 6f 7b  &aMem[p2];.  do{
abe0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 75  .    assert( pOu
abf0: 74 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65  t<=&aMem[(p->nMe
ac00: 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
ac10: 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  )] );.    assert
ac20: 28 20 70 49 6e 31 3c 3d 26 61 4d 65 6d 5b 28 70  ( pIn1<=&aMem[(p
ac30: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
ac40: 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61  ursor)] );.    a
ac50: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
ac60: 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 6d  d(pIn1) );.    m
ac70: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
ac80: 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 73 71  p, pOut);.    sq
ac90: 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65  lite3VdbeMemMove
aca0: 28 70 4f 75 74 2c 20 70 49 6e 31 29 3b 0a 23 69  (pOut, pIn1);.#i
acb0: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
acc0: 47 0a 20 20 20 20 69 66 28 20 70 4f 75 74 2d 3e  G.    if( pOut->
acd0: 70 53 63 6f 70 79 46 72 6f 6d 3e 3d 26 61 4d 65  pScopyFrom>=&aMe
ace0: 6d 5b 70 31 5d 20 26 26 20 70 4f 75 74 2d 3e 70  m[p1] && pOut->p
acf0: 53 63 6f 70 79 46 72 6f 6d 3c 70 4f 75 74 20 29  ScopyFrom<pOut )
ad00: 7b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 70 53  {.      pOut->pS
ad10: 63 6f 70 79 46 72 6f 6d 20 2b 3d 20 70 4f 70 2d  copyFrom += pOp-
ad20: 3e 70 32 20 2d 20 70 31 3b 0a 20 20 20 20 7d 0a  >p2 - p1;.    }.
ad30: 23 65 6e 64 69 66 0a 20 20 20 20 44 65 65 70 68  #endif.    Deeph
ad40: 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b  emeralize(pOut);
ad50: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
ad60: 41 43 45 28 70 32 2b 2b 2c 20 70 4f 75 74 29 3b  ACE(p2++, pOut);
ad70: 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 20  .    pIn1++;.   
ad80: 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d 77 68 69 6c   pOut++;.  }whil
ad90: 65 28 20 2d 2d 6e 20 29 3b 0a 20 20 62 72 65 61  e( --n );.  brea
ada0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
adb0: 20 43 6f 70 79 20 50 31 20 50 32 20 50 33 20 2a   Copy P1 P2 P3 *
adc0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
add0: 72 5b 50 32 40 50 33 2b 31 5d 3d 72 5b 50 31 40  r[P2@P3+1]=r[P1@
ade0: 50 33 2b 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65  P3+1].**.** Make
adf0: 20 61 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73   a copy of regis
ae00: 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33 20 69  ters P1..P1+P3 i
ae10: 6e 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 32  nto registers P2
ae20: 2e 2e 50 32 2b 50 33 2e 0a 2a 2a 0a 2a 2a 20 54  ..P2+P3..**.** T
ae30: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
ae40: 6d 61 6b 65 73 20 61 20 64 65 65 70 20 63 6f 70  makes a deep cop
ae50: 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20  y of the value. 
ae60: 20 41 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20   A duplicate.** 
ae70: 69 73 20 6d 61 64 65 20 6f 66 20 61 6e 79 20 73  is made of any s
ae80: 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 63 6f  tring or blob co
ae90: 6e 73 74 61 6e 74 2e 20 20 53 65 65 20 61 6c 73  nstant.  See als
aea0: 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63  o OP_SCopy..*/.c
aeb0: 61 73 65 20 4f 50 5f 43 6f 70 79 3a 20 7b 0a 20  ase OP_Copy: {. 
aec0: 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70   int n;..  n = p
aed0: 4f 70 2d 3e 70 33 3b 0a 20 20 70 49 6e 31 20 3d  Op->p3;.  pIn1 =
aee0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
aef0: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
af00: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
af10: 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29  rt( pOut!=pIn1 )
af20: 3b 0a 20 20 77 68 69 6c 65 28 20 31 20 29 7b 0a  ;.  while( 1 ){.
af30: 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
af40: 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20  ange(p, pOut);. 
af50: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
af60: 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75  mShallowCopy(pOu
af70: 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68  t, pIn1, MEM_Eph
af80: 65 6d 29 3b 0a 20 20 20 20 44 65 65 70 68 65 6d  em);.    Deephem
af90: 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 23  eralize(pOut);.#
afa0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
afb0: 55 47 0a 20 20 20 20 70 4f 75 74 2d 3e 70 53 63  UG.    pOut->pSc
afc0: 6f 70 79 46 72 6f 6d 20 3d 20 30 3b 0a 23 65 6e  opyFrom = 0;.#en
afd0: 64 69 66 0a 20 20 20 20 52 45 47 49 53 54 45 52  dif.    REGISTER
afe0: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 70  _TRACE(pOp->p2+p
aff0: 4f 70 2d 3e 70 33 2d 6e 2c 20 70 4f 75 74 29 3b  Op->p3-n, pOut);
b000: 0a 20 20 20 20 69 66 28 20 28 6e 2d 2d 29 3d 3d  .    if( (n--)==
b010: 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 70  0 ) break;.    p
b020: 4f 75 74 2b 2b 3b 0a 20 20 20 20 70 49 6e 31 2b  Out++;.    pIn1+
b030: 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  +;.  }.  break;.
b040: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 43  }../* Opcode: SC
b050: 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  opy P1 P2 * * *.
b060: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
b070: 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 4d  2]=r[P1].**.** M
b080: 61 6b 65 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f  ake a shallow co
b090: 70 79 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  py of register P
b0a0: 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  1 into register 
b0b0: 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  P2..**.** This i
b0c0: 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73  nstruction makes
b0d0: 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20   a shallow copy 
b0e0: 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20 49  of the value.  I
b0f0: 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  f the value.** i
b100: 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c  s a string or bl
b110: 6f 62 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 70  ob, then the cop
b120: 79 20 69 73 20 6f 6e 6c 79 20 61 20 70 6f 69 6e  y is only a poin
b130: 74 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6f 72  ter to the.** or
b140: 69 67 69 6e 61 6c 20 61 6e 64 20 68 65 6e 63 65  iginal and hence
b150: 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   if the original
b160: 20 63 68 61 6e 67 65 73 20 73 6f 20 77 69 6c 6c   changes so will
b170: 20 74 68 65 20 63 6f 70 79 2e 0a 2a 2a 20 57 6f   the copy..** Wo
b180: 72 73 65 2c 20 69 66 20 74 68 65 20 6f 72 69 67  rse, if the orig
b190: 69 6e 61 6c 20 69 73 20 64 65 61 6c 6c 6f 63 61  inal is dealloca
b1a0: 74 65 64 2c 20 74 68 65 20 63 6f 70 79 20 62 65  ted, the copy be
b1b0: 63 6f 6d 65 73 20 69 6e 76 61 6c 69 64 2e 0a 2a  comes invalid..*
b1c0: 2a 20 54 68 75 73 20 74 68 65 20 70 72 6f 67 72  * Thus the progr
b1d0: 61 6d 20 6d 75 73 74 20 67 75 61 72 61 6e 74 65  am must guarante
b1e0: 65 20 74 68 61 74 20 74 68 65 20 6f 72 69 67 69  e that the origi
b1f0: 6e 61 6c 20 77 69 6c 6c 20 6e 6f 74 20 63 68 61  nal will not cha
b200: 6e 67 65 0a 2a 2a 20 64 75 72 69 6e 67 20 74 68  nge.** during th
b210: 65 20 6c 69 66 65 74 69 6d 65 20 6f 66 20 74 68  e lifetime of th
b220: 65 20 63 6f 70 79 2e 20 20 55 73 65 20 4f 50 5f  e copy.  Use OP_
b230: 43 6f 70 79 20 74 6f 20 6d 61 6b 65 20 61 20 63  Copy to make a c
b240: 6f 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f 70 79 2e  omplete.** copy.
b250: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 43 6f 70  .*/.case OP_SCop
b260: 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  y: {            
b270: 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e  /* out2 */.  pIn
b280: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
b290: 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  1];.  pOut = &aM
b2a0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
b2b0: 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e  ssert( pOut!=pIn
b2c0: 31 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  1 );.  sqlite3Vd
b2d0: 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79  beMemShallowCopy
b2e0: 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d  (pOut, pIn1, MEM
b2f0: 5f 45 70 68 65 6d 29 3b 0a 23 69 66 64 65 66 20  _Ephem);.#ifdef 
b300: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70  SQLITE_DEBUG.  p
b310: 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20  Out->pScopyFrom 
b320: 3d 20 70 49 6e 31 3b 0a 20 20 70 4f 75 74 2d 3e  = pIn1;.  pOut->
b330: 6d 53 63 6f 70 79 46 6c 61 67 73 20 3d 20 70 49  mScopyFlags = pI
b340: 6e 31 2d 3e 66 6c 61 67 73 3b 0a 23 65 6e 64 69  n1->flags;.#endi
b350: 66 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  f.  break;.}../*
b360: 20 4f 70 63 6f 64 65 3a 20 49 6e 74 43 6f 70 79   Opcode: IntCopy
b370: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
b380: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
b390: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 72 61 6e  r[P1].**.** Tran
b3a0: 73 66 65 72 20 74 68 65 20 69 6e 74 65 67 65 72  sfer the integer
b3b0: 20 76 61 6c 75 65 20 68 65 6c 64 20 69 6e 20 72   value held in r
b3c0: 65 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20  egister P1 into 
b3d0: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
b3e0: 2a 2a 20 54 68 69 73 20 69 73 20 61 6e 20 6f 70  ** This is an op
b3f0: 74 69 6d 69 7a 65 64 20 76 65 72 73 69 6f 6e 20  timized version 
b400: 6f 66 20 53 43 6f 70 79 20 74 68 61 74 20 77 6f  of SCopy that wo
b410: 72 6b 73 20 6f 6e 6c 79 20 66 6f 72 20 69 6e 74  rks only for int
b420: 65 67 65 72 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a  eger.** values..
b430: 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 43 6f  */.case OP_IntCo
b440: 70 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  py: {           
b450: 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49   /* out2 */.  pI
b460: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
b470: 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28  p1];.  assert( (
b480: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
b490: 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 70  M_Int)!=0 );.  p
b4a0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
b4b0: 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56  >p2];.  sqlite3V
b4c0: 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70  dbeMemSetInt64(p
b4d0: 4f 75 74 2c 20 70 49 6e 31 2d 3e 75 2e 69 29 3b  Out, pIn1->u.i);
b4e0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
b4f0: 4f 70 63 6f 64 65 3a 20 52 65 73 75 6c 74 52 6f  Opcode: ResultRo
b500: 77 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  w P1 P2 * * *.**
b510: 20 53 79 6e 6f 70 73 69 73 3a 20 6f 75 74 70 75   Synopsis: outpu
b520: 74 3d 72 5b 50 31 40 50 32 5d 0a 2a 2a 0a 2a 2a  t=r[P1@P2].**.**
b530: 20 54 68 65 20 72 65 67 69 73 74 65 72 73 20 50   The registers P
b540: 31 20 74 68 72 6f 75 67 68 20 50 31 2b 50 32 2d  1 through P1+P2-
b550: 31 20 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e 67  1 contain a sing
b560: 6c 65 20 72 6f 77 20 6f 66 0a 2a 2a 20 72 65 73  le row of.** res
b570: 75 6c 74 73 2e 20 54 68 69 73 20 6f 70 63 6f 64  ults. This opcod
b580: 65 20 63 61 75 73 65 73 20 74 68 65 20 73 71 6c  e causes the sql
b590: 69 74 65 33 5f 73 74 65 70 28 29 20 63 61 6c 6c  ite3_step() call
b5a0: 20 74 6f 20 74 65 72 6d 69 6e 61 74 65 0a 2a 2a   to terminate.**
b5b0: 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f   with an SQLITE_
b5c0: 52 4f 57 20 72 65 74 75 72 6e 20 63 6f 64 65 20  ROW return code 
b5d0: 61 6e 64 20 69 74 20 73 65 74 73 20 75 70 20 74  and it sets up t
b5e0: 68 65 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 0a  he sqlite3_stmt.
b5f0: 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74 6f 20  ** structure to 
b600: 70 72 6f 76 69 64 65 20 61 63 63 65 73 73 20 74  provide access t
b610: 6f 20 74 68 65 20 72 28 50 31 29 2e 2e 72 28 50  o the r(P1)..r(P
b620: 31 2b 50 32 2d 31 29 20 76 61 6c 75 65 73 20 61  1+P2-1) values a
b630: 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20  s.** the result 
b640: 72 6f 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  row..*/.case OP_
b650: 52 65 73 75 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d  ResultRow: {.  M
b660: 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74 20  em *pMem;.  int 
b670: 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  i;.  assert( p->
b680: 6e 52 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d  nResColumn==pOp-
b690: 3e 70 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28  >p2 );.  assert(
b6a0: 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20   pOp->p1>0 );.  
b6b0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 2b  assert( pOp->p1+
b6c0: 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p2<=(p->nMe
b6d0: 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
b6e0: 29 2b 31 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20  )+1 );..  /* If 
b6f0: 74 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20 68  this statement h
b700: 61 73 20 76 69 6f 6c 61 74 65 64 20 69 6d 6d 65  as violated imme
b710: 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65  diate foreign ke
b720: 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20 64  y constraints, d
b730: 6f 0a 20 20 2a 2a 20 6e 6f 74 20 72 65 74 75 72  o.  ** not retur
b740: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
b750: 72 6f 77 73 20 6d 6f 64 69 66 69 65 64 2e 20 41  rows modified. A
b760: 6e 64 20 64 6f 20 6e 6f 74 20 52 45 4c 45 41 53  nd do not RELEAS
b770: 45 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a  E the statement.
b780: 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e    ** transaction
b790: 2e 20 49 74 20 6e 65 65 64 73 20 74 6f 20 62 65  . It needs to be
b7a0: 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 2a   rolled back.  *
b7b0: 2f 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f  /.  if( SQLITE_O
b7c0: 4b 21 3d 28 72 63 20 3d 20 73 71 6c 69 74 65 33  K!=(rc = sqlite3
b7d0: 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 30  VdbeCheckFk(p, 0
b7e0: 29 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  )) ){.    assert
b7f0: 28 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49  ( db->flags&SQLI
b800: 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a  TE_CountRows );.
b810: 20 20 20 20 61 73 73 65 72 74 28 20 70 2d 3e 75      assert( p->u
b820: 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 29  sesStmtJournal )
b830: 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74  ;.    goto abort
b840: 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
b850: 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20   }..  /* If the 
b860: 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73  SQLITE_CountRows
b870: 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20   flag is set in 
b880: 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 20 6d 61  sqlite3.flags ma
b890: 73 6b 2c 20 74 68 65 6e 20 0a 20 20 2a 2a 20 44  sk, then .  ** D
b8a0: 4d 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  ML statements in
b8b0: 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65  voke this opcode
b8c0: 20 74 6f 20 72 65 74 75 72 6e 20 74 68 65 20 6e   to return the n
b8d0: 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 0a 20  umber of rows . 
b8e0: 20 2a 2a 20 6d 6f 64 69 66 69 65 64 20 74 6f 20   ** modified to 
b8f0: 74 68 65 20 75 73 65 72 2e 20 54 68 69 73 20 69  the user. This i
b900: 73 20 74 68 65 20 6f 6e 6c 79 20 77 61 79 20 74  s the only way t
b910: 68 61 74 20 61 20 56 4d 20 74 68 61 74 0a 20 20  hat a VM that.  
b920: 2a 2a 20 6f 70 65 6e 73 20 61 20 73 74 61 74 65  ** opens a state
b930: 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
b940: 20 6d 61 79 20 69 6e 76 6f 6b 65 20 74 68 69 73   may invoke this
b950: 20 6f 70 63 6f 64 65 2e 0a 20 20 2a 2a 0a 20 20   opcode..  **.  
b960: 2a 2a 20 49 6e 20 63 61 73 65 20 74 68 69 73 20  ** In case this 
b970: 69 73 20 73 75 63 68 20 61 20 73 74 61 74 65 6d  is such a statem
b980: 65 6e 74 2c 20 63 6c 6f 73 65 20 61 6e 79 20 73  ent, close any s
b990: 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
b9a0: 74 69 6f 6e 0a 20 20 2a 2a 20 6f 70 65 6e 65 64  tion.  ** opened
b9b0: 20 62 79 20 74 68 69 73 20 56 4d 20 62 65 66 6f   by this VM befo
b9c0: 72 65 20 72 65 74 75 72 6e 69 6e 67 20 63 6f 6e  re returning con
b9d0: 74 72 6f 6c 20 74 6f 20 74 68 65 20 75 73 65 72  trol to the user
b9e0: 2e 20 54 68 69 73 20 69 73 20 74 6f 0a 20 20 2a  . This is to.  *
b9f0: 2a 20 65 6e 73 75 72 65 20 74 68 61 74 20 73 74  * ensure that st
ba00: 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74  atement-transact
ba10: 69 6f 6e 73 20 61 72 65 20 61 6c 77 61 79 73 20  ions are always 
ba20: 6e 65 73 74 65 64 2c 20 6e 6f 74 20 6f 76 65 72  nested, not over
ba30: 6c 61 70 70 69 6e 67 2e 0a 20 20 2a 2a 20 49 66  lapping..  ** If
ba40: 20 74 68 65 20 6f 70 65 6e 20 73 74 61 74 65 6d   the open statem
ba50: 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent-transaction 
ba60: 69 73 20 6e 6f 74 20 63 6c 6f 73 65 64 20 68 65  is not closed he
ba70: 72 65 2c 20 74 68 65 6e 20 74 68 65 20 75 73 65  re, then the use
ba80: 72 0a 20 20 2a 2a 20 6d 61 79 20 73 74 65 70 20  r.  ** may step 
ba90: 61 6e 6f 74 68 65 72 20 56 4d 20 74 68 61 74 20  another VM that 
baa0: 6f 70 65 6e 73 20 69 74 73 20 6f 77 6e 20 73 74  opens its own st
bab0: 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
bac0: 69 6f 6e 2e 20 54 68 69 73 0a 20 20 2a 2a 20 6d  ion. This.  ** m
bad0: 61 79 20 6c 65 61 64 20 74 6f 20 6f 76 65 72 6c  ay lead to overl
bae0: 61 70 70 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  apping statement
baf0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 0a 20   transactions.. 
bb00: 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73 74 61   **.  ** The sta
bb10: 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
bb20: 6f 6e 20 69 73 20 6e 65 76 65 72 20 61 20 74 6f  on is never a to
bb30: 70 2d 6c 65 76 65 6c 20 74 72 61 6e 73 61 63 74  p-level transact
bb40: 69 6f 6e 2e 20 20 48 65 6e 63 65 0a 20 20 2a 2a  ion.  Hence.  **
bb50: 20 74 68 65 20 52 45 4c 45 41 53 45 20 63 61 6c   the RELEASE cal
bb60: 6c 20 62 65 6c 6f 77 20 63 61 6e 20 6e 65 76 65  l below can neve
bb70: 72 20 66 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 61  r fail..  */.  a
bb80: 73 73 65 72 74 28 20 70 2d 3e 69 53 74 61 74 65  ssert( p->iState
bb90: 6d 65 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 66  ment==0 || db->f
bba0: 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e  lags&SQLITE_Coun
bbb0: 74 52 6f 77 73 20 29 3b 0a 20 20 72 63 20 3d 20  tRows );.  rc = 
bbc0: 73 71 6c 69 74 65 33 56 64 62 65 43 6c 6f 73 65  sqlite3VdbeClose
bbd0: 53 74 61 74 65 6d 65 6e 74 28 70 2c 20 53 41 56  Statement(p, SAV
bbe0: 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 29 3b  EPOINT_RELEASE);
bbf0: 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53  .  assert( rc==S
bc00: 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 0a 20 20 2f  QLITE_OK );..  /
bc10: 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c  * Invalidate all
bc20: 20 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73 6f   ephemeral curso
bc30: 72 20 72 6f 77 20 63 61 63 68 65 73 20 2a 2f 0a  r row caches */.
bc40: 20 20 70 2d 3e 63 61 63 68 65 43 74 72 20 3d 20    p->cacheCtr = 
bc50: 28 70 2d 3e 63 61 63 68 65 43 74 72 20 2b 20 32  (p->cacheCtr + 2
bc60: 29 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20  )|1;..  /* Make 
bc70: 73 75 72 65 20 74 68 65 20 72 65 73 75 6c 74 73  sure the results
bc80: 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current 
bc90: 72 6f 77 20 61 72 65 20 5c 30 30 30 20 74 65 72  row are \000 ter
bca0: 6d 69 6e 61 74 65 64 0a 20 20 2a 2a 20 61 6e 64  minated.  ** and
bcb0: 20 68 61 76 65 20 61 6e 20 61 73 73 69 67 6e 65   have an assigne
bcc0: 64 20 74 79 70 65 2e 20 20 54 68 65 20 72 65 73  d type.  The res
bcd0: 75 6c 74 73 20 61 72 65 20 64 65 2d 65 70 68 65  ults are de-ephe
bce0: 6d 65 72 61 6c 69 7a 65 64 20 61 73 0a 20 20 2a  meralized as.  *
bcf0: 2a 20 61 20 73 69 64 65 20 65 66 66 65 63 74 2e  * a side effect.
bd00: 0a 20 20 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20 70  .  */.  pMem = p
bd10: 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 26  ->pResultSet = &
bd20: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
bd30: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 4f 70 2d   for(i=0; i<pOp-
bd40: 3e 70 32 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61  >p2; i++){.    a
bd50: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
bd60: 64 28 26 70 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20  d(&pMem[i]) );. 
bd70: 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a     Deephemeraliz
bd80: 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20  e(&pMem[i]);.   
bd90: 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 5b 69   assert( (pMem[i
bda0: 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 45 70  ].flags & MEM_Ep
bdb0: 68 65 6d 29 3d 3d 30 0a 20 20 20 20 20 20 20 20  hem)==0.        
bdc0: 20 20 20 20 7c 7c 20 28 70 4d 65 6d 5b 69 5d 2e      || (pMem[i].
bdd0: 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72  flags & (MEM_Str
bde0: 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29  |MEM_Blob))==0 )
bdf0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
be00: 65 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65  eMemNulTerminate
be10: 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20  (&pMem[i]);.    
be20: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
be30: 4f 70 2d 3e 70 31 2b 69 2c 20 26 70 4d 65 6d 5b  Op->p1+i, &pMem[
be40: 69 5d 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64  i]);.  }.  if( d
be50: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
be60: 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a  ) goto no_mem;..
be70: 20 20 69 66 28 20 64 62 2d 3e 6d 54 72 61 63 65    if( db->mTrace
be80: 20 26 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f   & SQLITE_TRACE_
be90: 52 4f 57 20 29 7b 0a 20 20 20 20 64 62 2d 3e 78  ROW ){.    db->x
bea0: 54 72 61 63 65 28 53 51 4c 49 54 45 5f 54 52 41  Trace(SQLITE_TRA
beb0: 43 45 5f 52 4f 57 2c 20 64 62 2d 3e 70 54 72 61  CE_ROW, db->pTra
bec0: 63 65 41 72 67 2c 20 70 2c 20 30 29 3b 0a 20 20  ceArg, p, 0);.  
bed0: 7d 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e 20 53  }..  /* Return S
bee0: 51 4c 49 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20  QLITE_ROW.  */. 
bef0: 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70   p->pc = (int)(p
bf00: 4f 70 20 2d 20 61 4f 70 29 20 2b 20 31 3b 0a 20  Op - aOp) + 1;. 
bf10: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 4f 57   rc = SQLITE_ROW
bf20: 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65  ;.  goto vdbe_re
bf30: 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  turn;.}../* Opco
bf40: 64 65 3a 20 43 6f 6e 63 61 74 20 50 31 20 50 32  de: Concat P1 P2
bf50: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
bf60: 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d  sis: r[P3]=r[P2]
bf70: 2b 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 41 64 64  +r[P1].**.** Add
bf80: 20 74 68 65 20 74 65 78 74 20 69 6e 20 72 65 67   the text in reg
bf90: 69 73 74 65 72 20 50 31 20 6f 6e 74 6f 20 74 68  ister P1 onto th
bfa0: 65 20 65 6e 64 20 6f 66 20 74 68 65 20 74 65 78  e end of the tex
bfb0: 74 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72  t in.** register
bfc0: 20 50 32 20 61 6e 64 20 73 74 6f 72 65 20 74 68   P2 and store th
bfd0: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
bfe0: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
bff0: 69 74 68 65 72 20 74 68 65 20 50 31 20 6f 72 20  ither the P1 or 
c000: 50 32 20 74 65 78 74 20 61 72 65 20 4e 55 4c 4c  P2 text are NULL
c010: 20 74 68 65 6e 20 73 74 6f 72 65 20 4e 55 4c 4c   then store NULL
c020: 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 20 20   in P3..**.**   
c030: 50 33 20 3d 20 50 32 20 7c 7c 20 50 31 0a 2a 2a  P3 = P2 || P1.**
c040: 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61  .** It is illega
c050: 6c 20 66 6f 72 20 50 31 20 61 6e 64 20 50 33 20  l for P1 and P3 
c060: 74 6f 20 62 65 20 74 68 65 20 73 61 6d 65 20 72  to be the same r
c070: 65 67 69 73 74 65 72 2e 20 53 6f 6d 65 74 69 6d  egister. Sometim
c080: 65 73 2c 0a 2a 2a 20 69 66 20 50 33 20 69 73 20  es,.** if P3 is 
c090: 74 68 65 20 73 61 6d 65 20 72 65 67 69 73 74 65  the same registe
c0a0: 72 20 61 73 20 50 32 2c 20 74 68 65 20 69 6d 70  r as P2, the imp
c0b0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73 20 61  lementation is a
c0c0: 62 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20  ble.** to avoid 
c0d0: 61 20 6d 65 6d 63 70 79 28 29 2e 0a 2a 2f 0a 63  a memcpy()..*/.c
c0e0: 61 73 65 20 4f 50 5f 43 6f 6e 63 61 74 3a 20 7b  ase OP_Concat: {
c0f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
c100: 6d 65 20 61 73 20 54 4b 5f 43 4f 4e 43 41 54 2c  me as TK_CONCAT,
c110: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
c120: 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b 20  */.  i64 nByte; 
c130: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 74 61           /* Tota
c140: 6c 20 73 69 7a 65 20 6f 66 20 74 68 65 20 6f 75  l size of the ou
c150: 74 70 75 74 20 73 74 72 69 6e 67 20 6f 72 20 62  tput string or b
c160: 6c 6f 62 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61  lob */.  u16 fla
c170: 67 73 31 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  gs1;         /* 
c180: 49 6e 69 74 69 61 6c 20 66 6c 61 67 73 20 66 6f  Initial flags fo
c190: 72 20 50 31 20 2a 2f 0a 20 20 75 31 36 20 66 6c  r P1 */.  u16 fl
c1a0: 61 67 73 32 3b 20 20 20 20 20 20 20 20 20 2f 2a  ags2;         /*
c1b0: 20 49 6e 69 74 69 61 6c 20 66 6c 61 67 73 20 66   Initial flags f
c1c0: 6f 72 20 50 32 20 2a 2f 0a 0a 20 20 70 49 6e 31  or P2 */..  pIn1
c1d0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
c1e0: 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  ];.  pIn2 = &aMe
c1f0: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f  m[pOp->p2];.  pO
c200: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
c210: 70 33 5d 3b 0a 20 20 74 65 73 74 63 61 73 65 28  p3];.  testcase(
c220: 20 70 49 6e 31 3d 3d 70 49 6e 32 20 29 3b 0a 20   pIn1==pIn2 );. 
c230: 20 74 65 73 74 63 61 73 65 28 20 70 4f 75 74 3d   testcase( pOut=
c240: 3d 70 49 6e 32 20 29 3b 0a 20 20 61 73 73 65 72  =pIn2 );.  asser
c250: 74 28 20 70 49 6e 31 21 3d 70 4f 75 74 20 29 3b  t( pIn1!=pOut );
c260: 0a 20 20 66 6c 61 67 73 31 20 3d 20 70 49 6e 31  .  flags1 = pIn1
c270: 2d 3e 66 6c 61 67 73 3b 0a 20 20 74 65 73 74 63  ->flags;.  testc
c280: 61 73 65 28 20 66 6c 61 67 73 31 20 26 20 4d 45  ase( flags1 & ME
c290: 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 74 65 73 74  M_Null );.  test
c2a0: 63 61 73 65 28 20 70 49 6e 32 2d 3e 66 6c 61 67  case( pIn2->flag
c2b0: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a  s & MEM_Null );.
c2c0: 20 20 69 66 28 20 28 66 6c 61 67 73 31 20 7c 20    if( (flags1 | 
c2d0: 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d  pIn2->flags) & M
c2e0: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73  EM_Null ){.    s
c2f0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
c300: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20  Null(pOut);.    
c310: 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 66 28  break;.  }.  if(
c320: 20 28 66 6c 61 67 73 31 20 26 20 28 4d 45 4d 5f   (flags1 & (MEM_
c330: 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d  Str|MEM_Blob))==
c340: 30 20 29 7b 0a 20 20 20 20 69 66 28 20 73 71 6c  0 ){.    if( sql
c350: 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e  ite3VdbeMemStrin
c360: 67 69 66 79 28 70 49 6e 31 2c 65 6e 63 6f 64 69  gify(pIn1,encodi
c370: 6e 67 2c 30 29 20 29 20 67 6f 74 6f 20 6e 6f 5f  ng,0) ) goto no_
c380: 6d 65 6d 3b 0a 20 20 20 20 66 6c 61 67 73 31 20  mem;.    flags1 
c390: 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  = pIn1->flags & 
c3a0: 7e 4d 45 4d 5f 53 74 72 3b 0a 20 20 7d 65 6c 73  ~MEM_Str;.  }els
c3b0: 65 20 69 66 28 20 28 66 6c 61 67 73 31 20 26 20  e if( (flags1 & 
c3c0: 4d 45 4d 5f 5a 65 72 6f 29 21 3d 30 20 29 7b 0a  MEM_Zero)!=0 ){.
c3d0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56      if( sqlite3V
c3e0: 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62  dbeMemExpandBlob
c3f0: 28 70 49 6e 31 29 20 29 20 67 6f 74 6f 20 6e 6f  (pIn1) ) goto no
c400: 5f 6d 65 6d 3b 0a 20 20 20 20 66 6c 61 67 73 31  _mem;.    flags1
c410: 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26   = pIn1->flags &
c420: 20 7e 4d 45 4d 5f 53 74 72 3b 0a 20 20 7d 0a 20   ~MEM_Str;.  }. 
c430: 20 66 6c 61 67 73 32 20 3d 20 70 49 6e 32 2d 3e   flags2 = pIn2->
c440: 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66 6c  flags;.  if( (fl
c450: 61 67 73 32 20 26 20 28 4d 45 4d 5f 53 74 72 7c  ags2 & (MEM_Str|
c460: 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 7b  MEM_Blob))==0 ){
c470: 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
c480: 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79  VdbeMemStringify
c490: 28 70 49 6e 32 2c 65 6e 63 6f 64 69 6e 67 2c 30  (pIn2,encoding,0
c4a0: 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  ) ) goto no_mem;
c4b0: 0a 20 20 20 20 66 6c 61 67 73 32 20 3d 20 70 49  .    flags2 = pI
c4c0: 6e 32 2d 3e 66 6c 61 67 73 20 26 20 7e 4d 45 4d  n2->flags & ~MEM
c4d0: 5f 53 74 72 3b 0a 20 20 7d 65 6c 73 65 20 69 66  _Str;.  }else if
c4e0: 28 20 28 66 6c 61 67 73 32 20 26 20 4d 45 4d 5f  ( (flags2 & MEM_
c4f0: 5a 65 72 6f 29 21 3d 30 20 29 7b 0a 20 20 20 20  Zero)!=0 ){.    
c500: 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
c510: 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e  emExpandBlob(pIn
c520: 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  2) ) goto no_mem
c530: 3b 0a 20 20 20 20 66 6c 61 67 73 32 20 3d 20 70  ;.    flags2 = p
c540: 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 7e 4d 45  In2->flags & ~ME
c550: 4d 5f 53 74 72 3b 0a 20 20 7d 0a 20 20 6e 42 79  M_Str;.  }.  nBy
c560: 74 65 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20 70  te = pIn1->n + p
c570: 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e 42  In2->n;.  if( nB
c580: 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  yte>db->aLimit[S
c590: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
c5a0: 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  TH] ){.    goto 
c5b0: 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 69  too_big;.  }.  i
c5c0: 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
c5d0: 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74  mGrow(pOut, (int
c5e0: 29 6e 42 79 74 65 2b 33 2c 20 70 4f 75 74 3d 3d  )nByte+3, pOut==
c5f0: 70 49 6e 32 29 20 29 7b 0a 20 20 20 20 67 6f 74  pIn2) ){.    got
c600: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
c610: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
c620: 4f 75 74 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a 20  Out, MEM_Str);. 
c630: 20 69 66 28 20 70 4f 75 74 21 3d 70 49 6e 32 20   if( pOut!=pIn2 
c640: 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 4f  ){.    memcpy(pO
c650: 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20  ut->z, pIn2->z, 
c660: 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20 20 20 61 73  pIn2->n);.    as
c670: 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61  sert( (pIn2->fla
c680: 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d  gs & MEM_Dyn) ==
c690: 20 28 66 6c 61 67 73 32 20 26 20 4d 45 4d 5f 44   (flags2 & MEM_D
c6a0: 79 6e 29 20 29 3b 0a 20 20 20 20 70 49 6e 32 2d  yn) );.    pIn2-
c6b0: 3e 66 6c 61 67 73 20 3d 20 66 6c 61 67 73 32 3b  >flags = flags2;
c6c0: 0a 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70  .  }.  memcpy(&p
c6d0: 4f 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c  Out->z[pIn2->n],
c6e0: 20 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e   pIn1->z, pIn1->
c6f0: 6e 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  n);.  assert( (p
c700: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
c710: 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61 67 73 31  _Dyn) == (flags1
c720: 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20   & MEM_Dyn) );. 
c730: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 66   pIn1->flags = f
c740: 6c 61 67 73 31 3b 0a 20 20 70 4f 75 74 2d 3e 7a  lags1;.  pOut->z
c750: 5b 6e 42 79 74 65 5d 3d 30 3b 0a 20 20 70 4f 75  [nByte]=0;.  pOu
c760: 74 2d 3e 7a 5b 6e 42 79 74 65 2b 31 5d 20 3d 20  t->z[nByte+1] = 
c770: 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79  0;.  pOut->z[nBy
c780: 74 65 2b 32 5d 20 3d 20 30 3b 0a 20 20 70 4f 75  te+2] = 0;.  pOu
c790: 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f  t->flags |= MEM_
c7a0: 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20  Term;.  pOut->n 
c7b0: 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20  = (int)nByte;.  
c7c0: 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f  pOut->enc = enco
c7d0: 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d  ding;.  UPDATE_M
c7e0: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
c7f0: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
c800: 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 20 50 31  * Opcode: Add P1
c810: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
c820: 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b  nopsis: r[P3]=r[
c830: 50 31 5d 2b 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  P1]+r[P2].**.** 
c840: 41 64 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e  Add the value in
c850: 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20   register P1 to 
c860: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
c870: 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20  ister P2.** and 
c880: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
c890: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
c8a0: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
c8b0: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
c8c0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
c8d0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  .*/./* Opcode: M
c8e0: 75 6c 74 69 70 6c 79 20 50 31 20 50 32 20 50 33  ultiply P1 P2 P3
c8f0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
c900: 3a 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2a 72 5b  : r[P3]=r[P1]*r[
c910: 50 32 5d 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c  P2].**.**.** Mul
c920: 74 69 70 6c 79 20 74 68 65 20 76 61 6c 75 65 20  tiply the value 
c930: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 62  in register P1 b
c940: 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  y the value in r
c950: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e  egister P2.** an
c960: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
c970: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
c980: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
c990: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
c9a0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
c9b0: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
c9c0: 20 53 75 62 74 72 61 63 74 20 50 31 20 50 32 20   Subtract P1 P2 
c9d0: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
c9e0: 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2d  is: r[P3]=r[P2]-
c9f0: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 75 62 74  r[P1].**.** Subt
ca00: 72 61 63 74 20 74 68 65 20 76 61 6c 75 65 20 69  ract the value i
ca10: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 66 72  n register P1 fr
ca20: 6f 6d 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  om the value in 
ca30: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61  register P2.** a
ca40: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
ca50: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
ca60: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
ca70: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
ca80: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
ca90: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
caa0: 3a 20 44 69 76 69 64 65 20 50 31 20 50 32 20 50  : Divide P1 P2 P
cab0: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
cac0: 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2f 72  s: r[P3]=r[P2]/r
cad0: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 44 69 76 69 64  [P1].**.** Divid
cae0: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
caf0: 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74 68  egister P1 by th
cb00: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
cb10: 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74  ter P2.** and st
cb20: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
cb30: 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 28 50  n register P3 (P
cb40: 33 3d 50 32 2f 50 31 29 2e 20 49 66 20 74 68 65  3=P2/P1). If the
cb50: 20 76 61 6c 75 65 20 69 6e 20 0a 2a 2a 20 72 65   value in .** re
cb60: 67 69 73 74 65 72 20 50 31 20 69 73 20 7a 65 72  gister P1 is zer
cb70: 6f 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  o, then the resu
cb80: 6c 74 20 69 73 20 4e 55 4c 4c 2e 20 49 66 20 65  lt is NULL. If e
cb90: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 0a  ither input is .
cba0: 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  ** NULL, the res
cbb0: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
cbc0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6d 61 69  /* Opcode: Remai
cbd0: 6e 64 65 72 20 50 31 20 50 32 20 50 33 20 2a 20  nder P1 P2 P3 * 
cbe0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
cbf0: 5b 50 33 5d 3d 72 5b 50 32 5d 25 72 5b 50 31 5d  [P3]=r[P2]%r[P1]
cc00: 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65 20 74  .**.** Compute t
cc10: 68 65 20 72 65 6d 61 69 6e 64 65 72 20 61 66 74  he remainder aft
cc20: 65 72 20 69 6e 74 65 67 65 72 20 72 65 67 69 73  er integer regis
cc30: 74 65 72 20 50 32 20 69 73 20 64 69 76 69 64 65  ter P2 is divide
cc40: 64 20 62 79 20 0a 2a 2a 20 72 65 67 69 73 74 65  d by .** registe
cc50: 72 20 50 31 20 61 6e 64 20 73 74 6f 72 65 20 74  r P1 and store t
cc60: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
cc70: 69 73 74 65 72 20 50 33 2e 20 0a 2a 2a 20 49 66  ister P3. .** If
cc80: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
cc90: 67 69 73 74 65 72 20 50 31 20 69 73 20 7a 65 72  gister P1 is zer
cca0: 6f 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  o the result is 
ccb0: 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69 74 68  NULL..** If eith
ccc0: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
ccd0: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
cce0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
ccf0: 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20  OP_Add:         
cd00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
cd10: 65 20 61 73 20 54 4b 5f 50 4c 55 53 2c 20 69 6e  e as TK_PLUS, in
cd20: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
cd30: 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74  case OP_Subtract
cd40: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  :              /
cd50: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4d 49 4e  * same as TK_MIN
cd60: 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  US, in1, in2, ou
cd70: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75  t3 */.case OP_Mu
cd80: 6c 74 69 70 6c 79 3a 20 20 20 20 20 20 20 20 20  ltiply:         
cd90: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
cda0: 54 4b 5f 53 54 41 52 2c 20 69 6e 31 2c 20 69 6e  TK_STAR, in1, in
cdb0: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
cdc0: 4f 50 5f 44 69 76 69 64 65 3a 20 20 20 20 20 20  OP_Divide:      
cdd0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
cde0: 65 20 61 73 20 54 4b 5f 53 4c 41 53 48 2c 20 69  e as TK_SLASH, i
cdf0: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
ce00: 0a 63 61 73 65 20 4f 50 5f 52 65 6d 61 69 6e 64  .case OP_Remaind
ce10: 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  er: {           
ce20: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 45  /* same as TK_RE
ce30: 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  M, in1, in2, out
ce40: 33 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73  3 */.  u16 flags
ce50: 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d 62 69 6e  ;      /* Combin
ce60: 65 64 20 4d 45 4d 5f 2a 20 66 6c 61 67 73 20 66  ed MEM_* flags f
ce70: 72 6f 6d 20 62 6f 74 68 20 69 6e 70 75 74 73 20  rom both inputs 
ce80: 2a 2f 0a 20 20 75 31 36 20 74 79 70 65 31 3b 20  */.  u16 type1; 
ce90: 20 20 20 20 20 2f 2a 20 4e 75 6d 65 72 69 63 20       /* Numeric 
cea0: 74 79 70 65 20 6f 66 20 6c 65 66 74 20 6f 70 65  type of left ope
ceb0: 72 61 6e 64 20 2a 2f 0a 20 20 75 31 36 20 74 79  rand */.  u16 ty
cec0: 70 65 32 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  pe2;      /* Num
ced0: 65 72 69 63 20 74 79 70 65 20 6f 66 20 72 69 67  eric type of rig
cee0: 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ht operand */.  
cef0: 69 36 34 20 69 41 3b 20 20 20 20 20 20 20 20 20  i64 iA;         
cf00: 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65  /* Integer value
cf10: 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64   of left operand
cf20: 20 2a 2f 0a 20 20 69 36 34 20 69 42 3b 20 20 20   */.  i64 iB;   
cf30: 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72        /* Integer
cf40: 20 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20   value of right 
cf50: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75  operand */.  dou
cf60: 62 6c 65 20 72 41 3b 20 20 20 20 20 20 2f 2a 20  ble rA;      /* 
cf70: 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 6c 65  Real value of le
cf80: 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ft operand */.  
cf90: 64 6f 75 62 6c 65 20 72 42 3b 20 20 20 20 20 20  double rB;      
cfa0: 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66  /* Real value of
cfb0: 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a   right operand *
cfc0: 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  /..  pIn1 = &aMe
cfd0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 74 79  m[pOp->p1];.  ty
cfe0: 70 65 31 20 3d 20 6e 75 6d 65 72 69 63 54 79 70  pe1 = numericTyp
cff0: 65 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20  e(pIn1);.  pIn2 
d000: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
d010: 3b 0a 20 20 74 79 70 65 32 20 3d 20 6e 75 6d 65  ;.  type2 = nume
d020: 72 69 63 54 79 70 65 28 70 49 6e 32 29 3b 0a 20  ricType(pIn2);. 
d030: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
d040: 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 20  p->p3];.  flags 
d050: 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20  = pIn1->flags | 
d060: 70 49 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69  pIn2->flags;.  i
d070: 66 28 20 28 74 79 70 65 31 20 26 20 74 79 70 65  f( (type1 & type
d080: 32 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  2 & MEM_Int)!=0 
d090: 29 7b 0a 20 20 20 20 69 41 20 3d 20 70 49 6e 31  ){.    iA = pIn1
d0a0: 2d 3e 75 2e 69 3b 0a 20 20 20 20 69 42 20 3d 20  ->u.i;.    iB = 
d0b0: 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 73  pIn2->u.i;.    s
d0c0: 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
d0d0: 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65  de ){.      case
d0e0: 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 69   OP_Add:       i
d0f0: 66 28 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74  f( sqlite3AddInt
d100: 36 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74  64(&iB,iA) ) got
d110: 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61  o fp_math;  brea
d120: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  k;.      case OP
d130: 5f 53 75 62 74 72 61 63 74 3a 20 20 69 66 28 20  _Subtract:  if( 
d140: 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28  sqlite3SubInt64(
d150: 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66  &iB,iA) ) goto f
d160: 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a  p_math;  break;.
d170: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75        case OP_Mu
d180: 6c 74 69 70 6c 79 3a 20 20 69 66 28 20 73 71 6c  ltiply:  if( sql
d190: 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 26 69 42  ite3MulInt64(&iB
d1a0: 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d  ,iA) ) goto fp_m
d1b0: 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20  ath;  break;.   
d1c0: 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64     case OP_Divid
d1d0: 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28  e: {.        if(
d1e0: 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72   iA==0 ) goto ar
d1f0: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
d200: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20  is_null;.       
d210: 20 69 66 28 20 69 41 3d 3d 2d 31 20 26 26 20 69   if( iA==-1 && i
d220: 42 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36  B==SMALLEST_INT6
d230: 34 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68  4 ) goto fp_math
d240: 3b 0a 20 20 20 20 20 20 20 20 69 42 20 2f 3d 20  ;.        iB /= 
d250: 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  iA;.        brea
d260: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  k;.      }.     
d270: 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20   default: {.    
d280: 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20      if( iA==0 ) 
d290: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
d2a0: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
d2b0: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
d2c0: 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20  -1 ) iA = 1;.   
d2d0: 20 20 20 20 20 69 42 20 25 3d 20 69 41 3b 0a 20       iB %= iA;. 
d2e0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
d2f0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
d300: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a  pOut->u.i = iB;.
d310: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
d320: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
d330: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28  );.  }else if( (
d340: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
d350: 29 21 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f  )!=0 ){.    goto
d360: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
d370: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 7d 65  lt_is_null;.  }e
d380: 6c 73 65 7b 0a 66 70 5f 6d 61 74 68 3a 0a 20 20  lse{.fp_math:.  
d390: 20 20 72 41 20 3d 20 73 71 6c 69 74 65 33 56 64    rA = sqlite3Vd
d3a0: 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31  beRealValue(pIn1
d3b0: 29 3b 0a 20 20 20 20 72 42 20 3d 20 73 71 6c 69  );.    rB = sqli
d3c0: 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65  te3VdbeRealValue
d3d0: 28 70 49 6e 32 29 3b 0a 20 20 20 20 73 77 69 74  (pIn2);.    swit
d3e0: 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ch( pOp->opcode 
d3f0: 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  ){.      case OP
d400: 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20 72 42  _Add:         rB
d410: 20 2b 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72   += rA;       br
d420: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
d430: 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20  OP_Subtract:    
d440: 72 42 20 2d 3d 20 72 41 3b 20 20 20 20 20 20 20  rB -= rA;       
d450: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
d460: 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20  e OP_Multiply:  
d470: 20 20 72 42 20 2a 3d 20 72 41 3b 20 20 20 20 20    rB *= rA;     
d480: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
d490: 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b  ase OP_Divide: {
d4a0: 0a 20 20 20 20 20 20 20 20 2f 2a 20 28 64 6f 75  .        /* (dou
d4b0: 62 6c 65 29 30 20 49 6e 20 63 61 73 65 20 6f 66  ble)0 In case of
d4c0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
d4d0: 41 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a  ATING_POINT... *
d4e0: 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 41  /.        if( rA
d4f0: 3d 3d 28 64 6f 75 62 6c 65 29 30 20 29 20 67 6f  ==(double)0 ) go
d500: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
d510: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
d520: 20 20 20 20 20 20 72 42 20 2f 3d 20 72 41 3b 0a        rB /= rA;.
d530: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
d540: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66       }.      def
d550: 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20  ault: {.        
d560: 69 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  iA = sqlite3Vdbe
d570: 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a  IntValue(pIn1);.
d580: 20 20 20 20 20 20 20 20 69 42 20 3d 20 73 71 6c          iB = sql
d590: 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
d5a0: 28 70 49 6e 32 29 3b 0a 20 20 20 20 20 20 20 20  (pIn2);.        
d5b0: 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f  if( iA==0 ) goto
d5c0: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
d5d0: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20  lt_is_null;.    
d5e0: 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29      if( iA==-1 )
d5f0: 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20   iA = 1;.       
d600: 20 72 42 20 3d 20 28 64 6f 75 62 6c 65 29 28 69   rB = (double)(i
d610: 42 20 25 20 69 41 29 3b 0a 20 20 20 20 20 20 20  B % iA);.       
d620: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
d630: 20 20 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c      }.#ifdef SQL
d640: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
d650: 47 5f 50 4f 49 4e 54 0a 20 20 20 20 70 4f 75 74  G_POINT.    pOut
d660: 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a 20 20 20 20  ->u.i = rB;.    
d670: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
d680: 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 23  Out, MEM_Int);.#
d690: 65 6c 73 65 0a 20 20 20 20 69 66 28 20 73 71 6c  else.    if( sql
d6a0: 69 74 65 33 49 73 4e 61 4e 28 72 42 29 20 29 7b  ite3IsNaN(rB) ){
d6b0: 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 72 69 74  .      goto arit
d6c0: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
d6d0: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20 20  _null;.    }.   
d6e0: 20 70 4f 75 74 2d 3e 75 2e 72 20 3d 20 72 42 3b   pOut->u.r = rB;
d6f0: 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
d700: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 52 65  lag(pOut, MEM_Re
d710: 61 6c 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 0a  al);.#endif.  }.
d720: 20 20 62 72 65 61 6b 3b 0a 0a 61 72 69 74 68 6d    break;..arithm
d730: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
d740: 75 6c 6c 3a 0a 20 20 73 71 6c 69 74 65 33 56 64  ull:.  sqlite3Vd
d750: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
d760: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
d770: 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 6c 53  /* Opcode: CollS
d780: 65 71 20 50 31 20 2a 20 2a 20 50 34 0a 2a 2a 0a  eq P1 * * P4.**.
d790: 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
d7a0: 65 72 20 74 6f 20 61 20 43 6f 6c 6c 53 65 71 20  er to a CollSeq 
d7b0: 6f 62 6a 65 63 74 2e 20 49 66 20 74 68 65 20 6e  object. If the n
d7c0: 65 78 74 20 63 61 6c 6c 20 74 6f 20 61 20 75 73  ext call to a us
d7d0: 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6f  er function.** o
d7e0: 72 20 61 67 67 72 65 67 61 74 65 20 63 61 6c 6c  r aggregate call
d7f0: 73 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63  s sqlite3GetFunc
d800: 43 6f 6c 6c 53 65 71 28 29 2c 20 74 68 69 73 20  CollSeq(), this 
d810: 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
d820: 63 65 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 72 65  ce will.** be re
d830: 74 75 72 6e 65 64 2e 20 54 68 69 73 20 69 73 20  turned. This is 
d840: 75 73 65 64 20 62 79 20 74 68 65 20 62 75 69 6c  used by the buil
d850: 74 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d 61 78 28  t-in min(), max(
d860: 29 20 61 6e 64 20 6e 75 6c 6c 69 66 28 29 0a 2a  ) and nullif().*
d870: 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a  * functions..**.
d880: 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 74 20  ** If P1 is not 
d890: 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74 20 69 73  zero, then it is
d8a0: 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74   a register that
d8b0: 20 61 20 73 75 62 73 65 71 75 65 6e 74 20 6d 69   a subsequent mi
d8c0: 6e 28 29 20 6f 72 0a 2a 2a 20 6d 61 78 28 29 20  n() or.** max() 
d8d0: 61 67 67 72 65 67 61 74 65 20 77 69 6c 6c 20 73  aggregate will s
d8e0: 65 74 20 74 6f 20 31 20 69 66 20 74 68 65 20 63  et to 1 if the c
d8f0: 75 72 72 65 6e 74 20 72 6f 77 20 69 73 20 6e 6f  urrent row is no
d900: 74 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20 6f 72  t the minimum or
d910: 0a 2a 2a 20 6d 61 78 69 6d 75 6d 2e 20 20 54 68  .** maximum.  Th
d920: 65 20 50 31 20 72 65 67 69 73 74 65 72 20 69 73  e P1 register is
d930: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20   initialized to 
d940: 30 20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75  0 by this instru
d950: 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ction..**.** The
d960: 20 69 6e 74 65 72 66 61 63 65 20 75 73 65 64 20   interface used 
d970: 62 79 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  by the implement
d980: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 61 66 6f  ation of the afo
d990: 72 65 6d 65 6e 74 69 6f 6e 65 64 20 66 75 6e 63  rementioned func
d9a0: 74 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65 74 72  tions.** to retr
d9b0: 69 65 76 65 20 74 68 65 20 63 6f 6c 6c 61 74 69  ieve the collati
d9c0: 6f 6e 20 73 65 71 75 65 6e 63 65 20 73 65 74 20  on sequence set 
d9d0: 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69  by this opcode i
d9e0: 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 0a  s not available.
d9f0: 2a 2a 20 70 75 62 6c 69 63 6c 79 2e 20 20 4f 6e  ** publicly.  On
da00: 6c 79 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63  ly built-in func
da10: 74 69 6f 6e 73 20 68 61 76 65 20 61 63 63 65 73  tions have acces
da20: 73 20 74 6f 20 74 68 69 73 20 66 65 61 74 75 72  s to this featur
da30: 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  e..*/.case OP_Co
da40: 6c 6c 53 65 71 3a 20 7b 0a 20 20 61 73 73 65 72  llSeq: {.  asser
da50: 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
da60: 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20  P4_COLLSEQ );.  
da70: 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20  if( pOp->p1 ){. 
da80: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
da90: 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b  mSetInt64(&aMem[
daa0: 70 4f 70 2d 3e 70 31 5d 2c 20 30 29 3b 0a 20 20  pOp->p1], 0);.  
dab0: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
dac0: 20 4f 70 63 6f 64 65 3a 20 42 69 74 41 6e 64 20   Opcode: BitAnd 
dad0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
dae0: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
daf0: 72 5b 50 31 5d 26 72 5b 50 32 5d 0a 2a 2a 0a 2a  r[P1]&r[P2].**.*
db00: 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77  * Take the bit-w
db10: 69 73 65 20 41 4e 44 20 6f 66 20 74 68 65 20 76  ise AND of the v
db20: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
db30: 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a  r P1 and P2 and.
db40: 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  ** store the res
db50: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
db60: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
db70: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
db80: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
db90: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
dba0: 3a 20 42 69 74 4f 72 20 50 31 20 50 32 20 50 33  : BitOr P1 P2 P3
dbb0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
dbc0: 3a 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 7c 72 5b  : r[P3]=r[P1]|r[
dbd0: 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74  P2].**.** Take t
dbe0: 68 65 20 62 69 74 2d 77 69 73 65 20 4f 52 20 6f  he bit-wise OR o
dbf0: 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  f the values in 
dc00: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
dc10: 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20  P2 and.** store 
dc20: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
dc30: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
dc40: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
dc50: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
dc60: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
dc70: 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 4c 65   Opcode: ShiftLe
dc80: 66 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ft P1 P2 P3 * *.
dc90: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
dca0: 33 5d 3d 72 5b 50 32 5d 3c 3c 72 5b 50 31 5d 0a  3]=r[P2]<<r[P1].
dcb0: 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20  **.** Shift the 
dcc0: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e  integer value in
dcd0: 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20   register P2 to 
dce0: 74 68 65 20 6c 65 66 74 20 62 79 20 74 68 65 0a  the left by the.
dcf0: 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74  ** number of bit
dd00: 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74  s specified by t
dd10: 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65  he integer in re
dd20: 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74  gister P1..** St
dd30: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
dd40: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
dd50: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
dd60: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
dd70: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
dd80: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69  /./* Opcode: Shi
dd90: 66 74 52 69 67 68 74 20 50 31 20 50 32 20 50 33  ftRight P1 P2 P3
dda0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
ddb0: 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3e 3e 72  : r[P3]=r[P2]>>r
ddc0: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74  [P1].**.** Shift
ddd0: 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c   the integer val
dde0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
ddf0: 32 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 62  2 to the right b
de00: 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20  y the.** number 
de10: 6f 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65  of bits specifie
de20: 64 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72  d by the integer
de30: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
de40: 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65  .** Store the re
de50: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
de60: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
de70: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
de80: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
de90: 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
dea0: 42 69 74 41 6e 64 3a 20 20 20 20 20 20 20 20 20  BitAnd:         
deb0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
dec0: 61 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20 69 6e  as TK_BITAND, in
ded0: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
dee0: 63 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20  case OP_BitOr:  
def0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df00: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49  /* same as TK_BI
df10: 54 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  TOR, in1, in2, o
df20: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ut3 */.case OP_S
df30: 68 69 66 74 4c 65 66 74 3a 20 20 20 20 20 20 20  hiftLeft:       
df40: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
df50: 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69 6e 31  s TK_LSHIFT, in1
df60: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
df70: 61 73 65 20 4f 50 5f 53 68 69 66 74 52 69 67 68  ase OP_ShiftRigh
df80: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  t: {           /
df90: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 53 48  * same as TK_RSH
dfa0: 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  IFT, in1, in2, o
dfb0: 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b  ut3 */.  i64 iA;
dfc0: 0a 20 20 75 36 34 20 75 41 3b 0a 20 20 69 36 34  .  u64 uA;.  i64
dfd0: 20 69 42 3b 0a 20 20 75 38 20 6f 70 3b 0a 0a 20   iB;.  u8 op;.. 
dfe0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
dff0: 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d  p->p1];.  pIn2 =
e000: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
e010: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
e020: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20  pOp->p3];.  if( 
e030: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70  (pIn1->flags | p
e040: 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45  In2->flags) & ME
e050: 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71  M_Null ){.    sq
e060: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
e070: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62  ull(pOut);.    b
e080: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 41 20 3d  reak;.  }.  iA =
e090: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
e0a0: 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 69 42  alue(pIn2);.  iB
e0b0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
e0c0: 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20  tValue(pIn1);.  
e0d0: 6f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  op = pOp->opcode
e0e0: 3b 0a 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42  ;.  if( op==OP_B
e0f0: 69 74 41 6e 64 20 29 7b 0a 20 20 20 20 69 41 20  itAnd ){.    iA 
e100: 26 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69  &= iB;.  }else i
e110: 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 4f 72 20  f( op==OP_BitOr 
e120: 29 7b 0a 20 20 20 20 69 41 20 7c 3d 20 69 42 3b  ){.    iA |= iB;
e130: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69 42 21  .  }else if( iB!
e140: 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  =0 ){.    assert
e150: 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 52 69  ( op==OP_ShiftRi
e160: 67 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68  ght || op==OP_Sh
e170: 69 66 74 4c 65 66 74 20 29 3b 0a 0a 20 20 20 20  iftLeft );..    
e180: 2f 2a 20 49 66 20 73 68 69 66 74 69 6e 67 20 62  /* If shifting b
e190: 79 20 61 20 6e 65 67 61 74 69 76 65 20 61 6d 6f  y a negative amo
e1a0: 75 6e 74 2c 20 73 68 69 66 74 20 69 6e 20 74 68  unt, shift in th
e1b0: 65 20 6f 74 68 65 72 20 64 69 72 65 63 74 69 6f  e other directio
e1c0: 6e 20 2a 2f 0a 20 20 20 20 69 66 28 20 69 42 3c  n */.    if( iB<
e1d0: 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
e1e0: 74 28 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74  t( OP_ShiftRight
e1f0: 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 2b 31  ==OP_ShiftLeft+1
e200: 20 29 3b 0a 20 20 20 20 20 20 6f 70 20 3d 20 32   );.      op = 2
e210: 2a 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 2b 20  *OP_ShiftLeft + 
e220: 31 20 2d 20 6f 70 3b 0a 20 20 20 20 20 20 69 42  1 - op;.      iB
e230: 20 3d 20 69 42 3e 28 2d 36 34 29 20 3f 20 2d 69   = iB>(-64) ? -i
e240: 42 20 3a 20 36 34 3b 0a 20 20 20 20 7d 0a 0a 20  B : 64;.    }.. 
e250: 20 20 20 69 66 28 20 69 42 3e 3d 36 34 20 29 7b     if( iB>=64 ){
e260: 0a 20 20 20 20 20 20 69 41 20 3d 20 28 69 41 3e  .      iA = (iA>
e270: 3d 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69  =0 || op==OP_Shi
e280: 66 74 4c 65 66 74 29 20 3f 20 30 20 3a 20 2d 31  ftLeft) ? 0 : -1
e290: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
e2a0: 20 20 20 6d 65 6d 63 70 79 28 26 75 41 2c 20 26     memcpy(&uA, &
e2b0: 69 41 2c 20 73 69 7a 65 6f 66 28 75 41 29 29 3b  iA, sizeof(uA));
e2c0: 0a 20 20 20 20 20 20 69 66 28 20 6f 70 3d 3d 4f  .      if( op==O
e2d0: 50 5f 53 68 69 66 74 4c 65 66 74 20 29 7b 0a 20  P_ShiftLeft ){. 
e2e0: 20 20 20 20 20 20 20 75 41 20 3c 3c 3d 20 69 42         uA <<= iB
e2f0: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
e300: 20 20 20 20 20 20 20 75 41 20 3e 3e 3d 20 69 42         uA >>= iB
e310: 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 69 67  ;.        /* Sig
e320: 6e 2d 65 78 74 65 6e 64 20 6f 6e 20 61 20 72 69  n-extend on a ri
e330: 67 68 74 20 73 68 69 66 74 20 6f 66 20 61 20 6e  ght shift of a n
e340: 65 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20 2a  egative number *
e350: 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  /.        if( iA
e360: 3c 30 20 29 20 75 41 20 7c 3d 20 28 28 28 28 75  <0 ) uA |= ((((u
e370: 36 34 29 30 78 66 66 66 66 66 66 66 66 29 3c 3c  64)0xffffffff)<<
e380: 33 32 29 7c 30 78 66 66 66 66 66 66 66 66 29 20  32)|0xffffffff) 
e390: 3c 3c 20 28 36 34 2d 69 42 29 3b 0a 20 20 20 20  << (64-iB);.    
e3a0: 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63 70 79    }.      memcpy
e3b0: 28 26 69 41 2c 20 26 75 41 2c 20 73 69 7a 65 6f  (&iA, &uA, sizeo
e3c0: 66 28 69 41 29 29 3b 0a 20 20 20 20 7d 0a 20 20  f(iA));.    }.  
e3d0: 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  }.  pOut->u.i = 
e3e0: 69 41 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65  iA;.  MemSetType
e3f0: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49  Flag(pOut, MEM_I
e400: 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  nt);.  break;.}.
e410: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 49  ./* Opcode: AddI
e420: 6d 6d 20 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  mm  P1 P2 * * *.
e430: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
e440: 31 5d 3d 72 5b 50 31 5d 2b 50 32 0a 2a 2a 20 0a  1]=r[P1]+P2.** .
e450: 2a 2a 20 41 64 64 20 74 68 65 20 63 6f 6e 73 74  ** Add the const
e460: 61 6e 74 20 50 32 20 74 6f 20 74 68 65 20 76 61  ant P2 to the va
e470: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
e480: 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c  P1..** The resul
e490: 74 20 69 73 20 61 6c 77 61 79 73 20 61 6e 20 69  t is always an i
e4a0: 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f  nteger..**.** To
e4b0: 20 66 6f 72 63 65 20 61 6e 79 20 72 65 67 69 73   force any regis
e4c0: 74 65 72 20 74 6f 20 62 65 20 61 6e 20 69 6e 74  ter to be an int
e4d0: 65 67 65 72 2c 20 6a 75 73 74 20 61 64 64 20 30  eger, just add 0
e4e0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64  ..*/.case OP_Add
e4f0: 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Imm: {          
e500: 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49    /* in1 */.  pI
e510: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
e520: 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p1];.  memAboutT
e530: 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29  oChange(p, pIn1)
e540: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
e550: 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
e560: 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20  1);.  pIn1->u.i 
e570: 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72  += pOp->p2;.  br
e580: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
e590: 65 3a 20 4d 75 73 74 42 65 49 6e 74 20 50 31 20  e: MustBeInt P1 
e5a0: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20  P2 * * *.** .** 
e5b0: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
e5c0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
e5d0: 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2e  o be an integer.
e5e0: 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
e5f0: 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f 74 20 61  * in P1 is not a
e600: 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20 63 61  n integer and ca
e610: 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65  nnot be converte
e620: 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65  d into an intege
e630: 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20 64 61 74  r.** without dat
e640: 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20 6a 75 6d  a loss, then jum
e650: 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
e660: 20 50 32 2c 20 6f 72 20 69 66 20 50 32 3d 3d 30   P2, or if P2==0
e670: 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20 53 51 4c  .** raise an SQL
e680: 49 54 45 5f 4d 49 53 4d 41 54 43 48 20 65 78 63  ITE_MISMATCH exc
e690: 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  eption..*/.case 
e6a0: 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a 20 7b 20  OP_MustBeInt: { 
e6b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
e6c0: 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
e6d0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
e6e0: 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  1];.  if( (pIn1-
e6f0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
e700: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70 70 6c  )==0 ){.    appl
e710: 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20  yAffinity(pIn1, 
e720: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
e730: 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  IC, encoding);. 
e740: 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c     if( (pIn1->fl
e750: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d  ags & MEM_Int)==
e760: 30 20 29 7b 0a 20 20 20 20 20 20 56 64 62 65 42  0 ){.      VdbeB
e770: 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 20 32 29  ranchTaken(1, 2)
e780: 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d  ;.      if( pOp-
e790: 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  >p2==0 ){.      
e7a0: 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49    rc = SQLITE_MI
e7b0: 53 4d 41 54 43 48 3b 0a 20 20 20 20 20 20 20 20  SMATCH;.        
e7c0: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
e7d0: 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
e7e0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 67 6f  else{.        go
e7f0: 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
e800: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
e810: 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
e820: 65 6e 28 30 2c 20 32 29 3b 0a 20 20 4d 65 6d 53  en(0, 2);.  MemS
e830: 65 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31 2c  etTypeFlag(pIn1,
e840: 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65   MEM_Int);.  bre
e850: 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53  ak;.}..#ifndef S
e860: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
e870: 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63  ING_POINT./* Opc
e880: 6f 64 65 3a 20 52 65 61 6c 41 66 66 69 6e 69 74  ode: RealAffinit
e890: 79 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  y P1 * * * *.**.
e8a0: 2a 2a 20 49 66 20 72 65 67 69 73 74 65 72 20 50  ** If register P
e8b0: 31 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67  1 holds an integ
e8c0: 65 72 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f  er convert it to
e8d0: 20 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a   a real value..*
e8e0: 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
e8f0: 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 65 78   is used when ex
e900: 74 72 61 63 74 69 6e 67 20 69 6e 66 6f 72 6d 61  tracting informa
e910: 74 69 6f 6e 20 66 72 6f 6d 20 61 20 63 6f 6c 75  tion from a colu
e920: 6d 6e 20 74 68 61 74 0a 2a 2a 20 68 61 73 20 52  mn that.** has R
e930: 45 41 4c 20 61 66 66 69 6e 69 74 79 2e 20 20 53  EAL affinity.  S
e940: 75 63 68 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65  uch column value
e950: 73 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 73  s may still be s
e960: 74 6f 72 65 64 20 61 73 0a 2a 2a 20 69 6e 74 65  tored as.** inte
e970: 67 65 72 73 2c 20 66 6f 72 20 73 70 61 63 65 20  gers, for space 
e980: 65 66 66 69 63 69 65 6e 63 79 2c 20 62 75 74 20  efficiency, but 
e990: 61 66 74 65 72 20 65 78 74 72 61 63 74 69 6f 6e  after extraction
e9a0: 20 77 65 20 77 61 6e 74 20 74 68 65 6d 0a 2a 2a   we want them.**
e9b0: 20 74 6f 20 68 61 76 65 20 6f 6e 6c 79 20 61 20   to have only a 
e9c0: 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63  real value..*/.c
e9d0: 61 73 65 20 4f 50 5f 52 65 61 6c 41 66 66 69 6e  ase OP_RealAffin
e9e0: 69 74 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ity: {          
e9f0: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a          /* in1 *
ea00: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
ea10: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
ea20: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 28   pIn1->flags & (
ea30: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 49 6e 74 52  MEM_Int|MEM_IntR
ea40: 65 61 6c 29 20 29 7b 0a 20 20 20 20 74 65 73 74  eal) ){.    test
ea50: 63 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61 67  case( pIn1->flag
ea60: 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  s & MEM_Int );. 
ea70: 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e     testcase( pIn
ea80: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
ea90: 6e 74 52 65 61 6c 20 29 3b 0a 20 20 20 20 73 71  ntReal );.    sq
eaa0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c  lite3VdbeMemReal
eab0: 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20  ify(pIn1);.  }. 
eac0: 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
ead0: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
eae0: 5f 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70  _OMIT_CAST./* Op
eaf0: 63 6f 64 65 3a 20 43 61 73 74 20 50 31 20 50 32  code: Cast P1 P2
eb00: 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
eb10: 69 73 3a 20 61 66 66 69 6e 69 74 79 28 72 5b 50  is: affinity(r[P
eb20: 31 5d 29 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20  1]).**.** Force 
eb30: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
eb40: 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 74  ister P1 to be t
eb50: 68 65 20 74 79 70 65 20 64 65 66 69 6e 65 64 20  he type defined 
eb60: 62 79 20 50 32 2e 0a 2a 2a 20 0a 2a 2a 20 3c 75  by P2..** .** <u
eb70: 6c 3e 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27  l>.** <li> P2=='
eb80: 41 27 20 26 72 61 72 72 3b 20 42 4c 4f 42 0a 2a  A' &rarr; BLOB.*
eb90: 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27 42 27 20 26  * <li> P2=='B' &
eba0: 72 61 72 72 3b 20 54 45 58 54 0a 2a 2a 20 3c 6c  rarr; TEXT.** <l
ebb0: 69 3e 20 50 32 3d 3d 27 43 27 20 26 72 61 72 72  i> P2=='C' &rarr
ebc0: 3b 20 4e 55 4d 45 52 49 43 0a 2a 2a 20 3c 6c 69  ; NUMERIC.** <li
ebd0: 3e 20 50 32 3d 3d 27 44 27 20 26 72 61 72 72 3b  > P2=='D' &rarr;
ebe0: 20 49 4e 54 45 47 45 52 0a 2a 2a 20 3c 6c 69 3e   INTEGER.** <li>
ebf0: 20 50 32 3d 3d 27 45 27 20 26 72 61 72 72 3b 20   P2=='E' &rarr; 
ec00: 52 45 41 4c 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a  REAL.** </ul>.**
ec10: 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65  .** A NULL value
ec20: 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20   is not changed 
ec30: 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e  by this routine.
ec40: 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c    It remains NUL
ec50: 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 61  L..*/.case OP_Ca
ec60: 73 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  st: {           
ec70: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
ec80: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
ec90: 70 32 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 42  p2>=SQLITE_AFF_B
eca0: 4c 4f 42 20 26 26 20 70 4f 70 2d 3e 70 32 3c 3d  LOB && pOp->p2<=
ecb0: 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20  SQLITE_AFF_REAL 
ecc0: 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
ecd0: 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41  Op->p2==SQLITE_A
ece0: 46 46 5f 54 45 58 54 20 29 3b 0a 20 20 74 65 73  FF_TEXT );.  tes
ecf0: 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d  tcase( pOp->p2==
ed00: 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20  SQLITE_AFF_BLOB 
ed10: 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
ed20: 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41  Op->p2==SQLITE_A
ed30: 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20  FF_NUMERIC );.  
ed40: 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
ed50: 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  2==SQLITE_AFF_IN
ed60: 54 45 47 45 52 20 29 3b 0a 20 20 74 65 73 74 63  TEGER );.  testc
ed70: 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51  ase( pOp->p2==SQ
ed80: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 29 3b  LITE_AFF_REAL );
ed90: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
eda0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41  pOp->p1];.  memA
edb0: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
edc0: 70 49 6e 31 29 3b 0a 20 20 72 63 20 3d 20 45 78  pIn1);.  rc = Ex
edd0: 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a  pandBlob(pIn1);.
ede0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
edf0: 43 61 73 74 28 70 49 6e 31 2c 20 70 4f 70 2d 3e  Cast(pIn1, pOp->
ee00: 70 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  p2, encoding);. 
ee10: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
ee20: 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 69 66  SIZE(pIn1);.  if
ee30: 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
ee40: 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
ee50: 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
ee60: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
ee70: 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  _CAST */../* Opc
ee80: 6f 64 65 3a 20 45 71 20 50 31 20 50 32 20 50 33  ode: Eq P1 P2 P3
ee90: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
eea0: 69 73 3a 20 49 46 20 72 5b 50 33 5d 3d 3d 72 5b  is: IF r[P3]==r[
eeb0: 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72  P1].**.** Compar
eec0: 65 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  e the values in 
eed0: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
eee0: 50 33 2e 20 20 49 66 20 72 65 67 28 50 33 29 3d  P3.  If reg(P3)=
eef0: 3d 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a  =reg(P1) then.**
ef00: 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73   jump to address
ef10: 20 50 32 2e 20 20 4f 72 20 69 66 20 74 68 65 20   P2.  Or if the 
ef20: 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 66  SQLITE_STOREP2 f
ef30: 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 50 35  lag is set in P5
ef40: 2c 20 74 68 65 6e 0a 2a 2a 20 73 74 6f 72 65 20  , then.** store 
ef50: 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f  the result of co
ef60: 6d 70 61 72 69 73 6f 6e 20 69 6e 20 72 65 67 69  mparison in regi
ef70: 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  ster P2..**.** T
ef80: 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41  he SQLITE_AFF_MA
ef90: 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66 20 50 35  SK portion of P5
efa0: 20 6d 75 73 74 20 62 65 20 61 6e 20 61 66 66 69   must be an affi
efb0: 6e 69 74 79 20 63 68 61 72 61 63 74 65 72 20 2d  nity character -
efc0: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  .** SQLITE_AFF_T
efd0: 45 58 54 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f  EXT, SQLITE_AFF_
efe0: 49 4e 54 45 47 45 52 2c 20 61 6e 64 20 73 6f 20  INTEGER, and so 
eff0: 66 6f 72 74 68 2e 20 41 6e 20 61 74 74 65 6d 70  forth. An attemp
f000: 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a 20 74 6f  t is made .** to
f010: 20 63 6f 65 72 63 65 20 62 6f 74 68 20 69 6e 70   coerce both inp
f020: 75 74 73 20 61 63 63 6f 72 64 69 6e 67 20 74 6f  uts according to
f030: 20 74 68 69 73 20 61 66 66 69 6e 69 74 79 20 62   this affinity b
f040: 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20 63 6f 6d  efore the.** com
f050: 70 61 72 69 73 6f 6e 20 69 73 20 6d 61 64 65 2e  parison is made.
f060: 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41   If the SQLITE_A
f070: 46 46 5f 4d 41 53 4b 20 69 73 20 30 78 30 30 2c  FF_MASK is 0x00,
f080: 20 74 68 65 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a   then numeric.**
f090: 20 61 66 66 69 6e 69 74 79 20 69 73 20 75 73 65   affinity is use
f0a0: 64 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  d. Note that the
f0b0: 20 61 66 66 69 6e 69 74 79 20 63 6f 6e 76 65 72   affinity conver
f0c0: 73 69 6f 6e 73 20 61 72 65 20 73 74 6f 72 65 64  sions are stored
f0d0: 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f 20 74 68  .** back into th
f0e0: 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72  e input register
f0f0: 73 20 50 31 20 61 6e 64 20 50 33 2e 20 20 53 6f  s P1 and P3.  So
f100: 20 74 68 69 73 20 6f 70 63 6f 64 65 20 63 61 6e   this opcode can
f110: 20 63 61 75 73 65 0a 2a 2a 20 70 65 72 73 69 73   cause.** persis
f120: 74 65 6e 74 20 63 68 61 6e 67 65 73 20 74 6f 20  tent changes to 
f130: 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64  registers P1 and
f140: 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20   P3..**.** Once 
f150: 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20  any conversions 
f160: 68 61 76 65 20 74 61 6b 65 6e 20 70 6c 61 63 65  have taken place
f170: 2c 20 61 6e 64 20 6e 65 69 74 68 65 72 20 76 61  , and neither va
f180: 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a  lue is NULL, .**
f190: 20 74 68 65 20 76 61 6c 75 65 73 20 61 72 65 20   the values are 
f1a0: 63 6f 6d 70 61 72 65 64 2e 20 49 66 20 62 6f 74  compared. If bot
f1b0: 68 20 76 61 6c 75 65 73 20 61 72 65 20 62 6c 6f  h values are blo
f1c0: 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d 70 28 29  bs then memcmp()
f1d0: 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 64   is.** used to d
f1e0: 65 74 65 72 6d 69 6e 65 20 74 68 65 20 72 65 73  etermine the res
f1f0: 75 6c 74 73 20 6f 66 20 74 68 65 20 63 6f 6d 70  ults of the comp
f200: 61 72 69 73 6f 6e 2e 20 20 49 66 20 62 6f 74 68  arison.  If both
f210: 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 74   values.** are t
f220: 65 78 74 2c 20 74 68 65 6e 20 74 68 65 20 61 70  ext, then the ap
f230: 70 72 6f 70 72 69 61 74 65 20 63 6f 6c 6c 61 74  propriate collat
f240: 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73 70 65  ing function spe
f250: 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20 50 34 20  cified in.** P4 
f260: 69 73 20 75 73 65 64 20 74 6f 20 64 6f 20 74 68  is used to do th
f270: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49  e comparison.  I
f280: 66 20 50 34 20 69 73 20 6e 6f 74 20 73 70 65 63  f P4 is not spec
f290: 69 66 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65  ified then.** me
f2a0: 6d 63 6d 70 28 29 20 69 73 20 75 73 65 64 20 74  mcmp() is used t
f2b0: 6f 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20 73  o compare text s
f2c0: 74 72 69 6e 67 2e 20 20 49 66 20 62 6f 74 68 20  tring.  If both 
f2d0: 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75  values are.** nu
f2e0: 6d 65 72 69 63 2c 20 74 68 65 6e 20 61 20 6e 75  meric, then a nu
f2f0: 6d 65 72 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e  meric comparison
f300: 20 69 73 20 75 73 65 64 2e 20 49 66 20 74 68 65   is used. If the
f310: 20 74 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61   two values.** a
f320: 72 65 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20  re of different 
f330: 74 79 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62  types, then numb
f340: 65 72 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72  ers are consider
f350: 65 64 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20  ed less than.** 
f360: 73 74 72 69 6e 67 73 20 61 6e 64 20 73 74 72 69  strings and stri
f370: 6e 67 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72  ngs are consider
f380: 65 64 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f  ed less than blo
f390: 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c  bs..**.** If SQL
f3a0: 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65  ITE_NULLEQ is se
f3b0: 74 20 69 6e 20 50 35 20 74 68 65 6e 20 74 68 65  t in P5 then the
f3c0: 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61   result of compa
f3d0: 72 69 73 6f 6e 20 69 73 20 61 6c 77 61 79 73 20  rison is always 
f3e0: 65 69 74 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f  either.** true o
f3f0: 72 20 66 61 6c 73 65 20 61 6e 64 20 69 73 20 6e  r false and is n
f400: 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62  ever NULL.  If b
f410: 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65  oth operands are
f420: 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72   NULL then the r
f430: 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70  esult.** of comp
f440: 61 72 69 73 6f 6e 20 69 73 20 74 72 75 65 2e 20  arison is true. 
f450: 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   If either opera
f460: 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  nd is NULL then 
f470: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 66 61  the result is fa
f480: 6c 73 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68  lse..** If neith
f490: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
f4a0: 4c 4c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  LL the result is
f4b0: 20 74 68 65 20 73 61 6d 65 20 61 73 20 69 74 20   the same as it 
f4c0: 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74  would be if.** t
f4d0: 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  he SQLITE_NULLEQ
f4e0: 20 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74 74   flag were omitt
f4f0: 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2a 0a 2a  ed from P5..**.*
f500: 2a 20 49 66 20 62 6f 74 68 20 53 51 4c 49 54 45  * If both SQLITE
f510: 5f 53 54 4f 52 45 50 32 20 61 6e 64 20 53 51 4c  _STOREP2 and SQL
f520: 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 20 66 6c 61  ITE_KEEPNULL fla
f530: 67 73 20 61 72 65 20 73 65 74 20 74 68 65 6e 20  gs are set then 
f540: 74 68 65 0a 2a 2a 20 63 6f 6e 74 65 6e 74 20 6f  the.** content o
f550: 66 20 72 5b 50 32 5d 20 69 73 20 6f 6e 6c 79 20  f r[P2] is only 
f560: 63 68 61 6e 67 65 64 20 69 66 20 74 68 65 20 6e  changed if the n
f570: 65 77 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c  ew value is NULL
f580: 20 6f 72 20 30 20 28 66 61 6c 73 65 29 2e 0a 2a   or 0 (false)..*
f590: 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
f5a0: 2c 20 61 20 70 72 69 6f 72 20 72 5b 50 32 5d 20  , a prior r[P2] 
f5b0: 76 61 6c 75 65 20 77 69 6c 6c 20 6e 6f 74 20 62  value will not b
f5c0: 65 20 6f 76 65 72 77 72 69 74 74 65 6e 20 62 79  e overwritten by
f5d0: 20 31 20 28 74 72 75 65 29 2e 0a 2a 2f 0a 2f 2a   1 (true)..*/./*
f5e0: 20 4f 70 63 6f 64 65 3a 20 4e 65 20 50 31 20 50   Opcode: Ne P1 P
f5f0: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
f600: 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d  nopsis: IF r[P3]
f610: 21 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68  !=r[P1].**.** Th
f620: 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  is works just li
f630: 6b 65 20 74 68 65 20 45 71 20 6f 70 63 6f 64 65  ke the Eq opcode
f640: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
f650: 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
f660: 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e 64  f.** the operand
f670: 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50  s in registers P
f680: 31 20 61 6e 64 20 50 33 20 61 72 65 20 6e 6f 74  1 and P3 are not
f690: 20 65 71 75 61 6c 2e 20 20 53 65 65 20 74 68 65   equal.  See the
f6a0: 20 45 71 20 6f 70 63 6f 64 65 20 66 6f 72 0a 2a   Eq opcode for.*
f6b0: 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  * additional inf
f6c0: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  ormation..**.** 
f6d0: 49 66 20 62 6f 74 68 20 53 51 4c 49 54 45 5f 53  If both SQLITE_S
f6e0: 54 4f 52 45 50 32 20 61 6e 64 20 53 51 4c 49 54  TOREP2 and SQLIT
f6f0: 45 5f 4b 45 45 50 4e 55 4c 4c 20 66 6c 61 67 73  E_KEEPNULL flags
f700: 20 61 72 65 20 73 65 74 20 74 68 65 6e 20 74 68   are set then th
f710: 65 0a 2a 2a 20 63 6f 6e 74 65 6e 74 20 6f 66 20  e.** content of 
f720: 72 5b 50 32 5d 20 69 73 20 6f 6e 6c 79 20 63 68  r[P2] is only ch
f730: 61 6e 67 65 64 20 69 66 20 74 68 65 20 6e 65 77  anged if the new
f740: 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 20 6f   value is NULL o
f750: 72 20 31 20 28 74 72 75 65 29 2e 0a 2a 2a 20 49  r 1 (true)..** I
f760: 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 61  n other words, a
f770: 20 70 72 69 6f 72 20 72 5b 50 32 5d 20 76 61 6c   prior r[P2] val
f780: 75 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 6f  ue will not be o
f790: 76 65 72 77 72 69 74 74 65 6e 20 62 79 20 30 20  verwritten by 0 
f7a0: 28 66 61 6c 73 65 29 2e 0a 2a 2f 0a 2f 2a 20 4f  (false)..*/./* O
f7b0: 70 63 6f 64 65 3a 20 4c 74 20 50 31 20 50 32 20  pcode: Lt P1 P2 
f7c0: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
f7d0: 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3c 72  psis: IF r[P3]<r
f7e0: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61  [P1].**.** Compa
f7f0: 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  re the values in
f800: 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64   register P1 and
f810: 20 50 33 2e 20 20 49 66 20 72 65 67 28 50 33 29   P3.  If reg(P3)
f820: 3c 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a  <reg(P1) then.**
f830: 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73   jump to address
f840: 20 50 32 2e 20 20 4f 72 20 69 66 20 74 68 65 20   P2.  Or if the 
f850: 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 66  SQLITE_STOREP2 f
f860: 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 50 35  lag is set in P5
f870: 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20 72 65   store.** the re
f880: 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73  sult of comparis
f890: 6f 6e 20 28 30 20 6f 72 20 31 20 6f 72 20 4e 55  on (0 or 1 or NU
f8a0: 4c 4c 29 20 69 6e 74 6f 20 72 65 67 69 73 74 65  LL) into registe
f8b0: 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  r P2..**.** If t
f8c0: 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46  he SQLITE_JUMPIF
f8d0: 4e 55 4c 4c 20 62 69 74 20 6f 66 20 50 35 20 69  NULL bit of P5 i
f8e0: 73 20 73 65 74 20 61 6e 64 20 65 69 74 68 65 72  s set and either
f8f0: 20 72 65 67 28 50 31 29 20 6f 72 0a 2a 2a 20 72   reg(P1) or.** r
f900: 65 67 28 50 33 29 20 69 73 20 4e 55 4c 4c 20 74  eg(P3) is NULL t
f910: 68 65 6e 20 74 68 65 20 74 61 6b 65 20 74 68 65  hen the take the
f920: 20 6a 75 6d 70 2e 20 20 49 66 20 74 68 65 20 53   jump.  If the S
f930: 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
f940: 20 0a 2a 2a 20 62 69 74 20 69 73 20 63 6c 65 61   .** bit is clea
f950: 72 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f  r then fall thro
f960: 75 67 68 20 69 66 20 65 69 74 68 65 72 20 6f 70  ugh if either op
f970: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a  erand is NULL..*
f980: 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f  *.** The SQLITE_
f990: 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e  AFF_MASK portion
f9a0: 20 6f 66 20 50 35 20 6d 75 73 74 20 62 65 20 61   of P5 must be a
f9b0: 6e 20 61 66 66 69 6e 69 74 79 20 63 68 61 72 61  n affinity chara
f9c0: 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45  cter -.** SQLITE
f9d0: 5f 41 46 46 5f 54 45 58 54 2c 20 53 51 4c 49 54  _AFF_TEXT, SQLIT
f9e0: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c 20 61  E_AFF_INTEGER, a
f9f0: 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20  nd so forth. An 
fa00: 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20  attempt is made 
fa10: 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20 62 6f  .** to coerce bo
fa20: 74 68 20 69 6e 70 75 74 73 20 61 63 63 6f 72 64  th inputs accord
fa30: 69 6e 67 20 74 6f 20 74 68 69 73 20 61 66 66 69  ing to this affi
fa40: 6e 69 74 79 20 62 65 66 6f 72 65 20 74 68 65 0a  nity before the.
fa50: 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  ** comparison is
fa60: 20 6d 61 64 65 2e 20 49 66 20 74 68 65 20 53 51   made. If the SQ
fa70: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73  LITE_AFF_MASK is
fa80: 20 30 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65   0x00, then nume
fa90: 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20  ric.** affinity 
faa0: 69 73 20 75 73 65 64 2e 20 4e 6f 74 65 20 74 68  is used. Note th
fab0: 61 74 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  at the affinity 
fac0: 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72 65 20  conversions are 
fad0: 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69  stored.** back i
fae0: 6e 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65  nto the input re
faf0: 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
fb00: 33 2e 20 20 53 6f 20 74 68 69 73 20 6f 70 63 6f  3.  So this opco
fb10: 64 65 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20  de can cause.** 
fb20: 70 65 72 73 69 73 74 65 6e 74 20 63 68 61 6e 67  persistent chang
fb30: 65 73 20 74 6f 20 72 65 67 69 73 74 65 72 73 20  es to registers 
fb40: 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a  P1 and P3..**.**
fb50: 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65 72   Once any conver
fb60: 73 69 6f 6e 73 20 68 61 76 65 20 74 61 6b 65 6e  sions have taken
fb70: 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69 74   place, and neit
fb80: 68 65 72 20 76 61 6c 75 65 20 69 73 20 4e 55 4c  her value is NUL
fb90: 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  L, .** the value
fba0: 73 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 20  s are compared. 
fbb0: 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61  If both values a
fbc0: 72 65 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65  re blobs then me
fbd0: 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73 65  mcmp() is.** use
fbe0: 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74  d to determine t
fbf0: 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68  he results of th
fc00: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49  e comparison.  I
fc10: 66 20 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a  f both values.**
fc20: 20 61 72 65 20 74 65 78 74 2c 20 74 68 65 6e 20   are text, then 
fc30: 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20  the appropriate 
fc40: 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69  collating functi
fc50: 6f 6e 20 73 70 65 63 69 66 69 65 64 20 69 6e 0a  on specified in.
fc60: 2a 2a 20 50 34 20 69 73 20 20 75 73 65 64 20 74  ** P4 is  used t
fc70: 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70 61 72 69  o do the compari
fc80: 73 6f 6e 2e 20 20 49 66 20 50 34 20 69 73 20 6e  son.  If P4 is n
fc90: 6f 74 20 73 70 65 63 69 66 69 65 64 20 74 68 65  ot specified the
fca0: 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73  n.** memcmp() is
fcb0: 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65   used to compare
fcc0: 20 74 65 78 74 20 73 74 72 69 6e 67 2e 20 20 49   text string.  I
fcd0: 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72  f both values ar
fce0: 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68  e.** numeric, th
fcf0: 65 6e 20 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d  en a numeric com
fd00: 70 61 72 69 73 6f 6e 20 69 73 20 75 73 65 64 2e  parison is used.
fd10: 20 49 66 20 74 68 65 20 74 77 6f 20 76 61 6c 75   If the two valu
fd20: 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69 66  es.** are of dif
fd30: 66 65 72 65 6e 74 20 74 79 70 65 73 2c 20 74 68  ferent types, th
fd40: 65 6e 20 6e 75 6d 62 65 72 73 20 61 72 65 20 63  en numbers are c
fd50: 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74  onsidered less t
fd60: 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61  han.** strings a
fd70: 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65 20 63  nd strings are c
fd80: 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74  onsidered less t
fd90: 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 2f 2a  han blobs..*/./*
fda0: 20 4f 70 63 6f 64 65 3a 20 4c 65 20 50 31 20 50   Opcode: Le P1 P
fdb0: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
fdc0: 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d  nopsis: IF r[P3]
fdd0: 3c 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68  <=r[P1].**.** Th
fde0: 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  is works just li
fdf0: 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ke the Lt opcode
fe00: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
fe10: 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
fe20: 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74  f.** the content
fe30: 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20   of register P3 
fe40: 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20  is less than or 
fe50: 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e  equal to the con
fe60: 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73  tent of.** regis
fe70: 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65  ter P1.  See the
fe80: 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61   Lt opcode for a
fe90: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
fea0: 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  ation..*/./* Opc
feb0: 6f 64 65 3a 20 47 74 20 50 31 20 50 32 20 50 33  ode: Gt P1 P2 P3
fec0: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
fed0: 69 73 3a 20 49 46 20 72 5b 50 33 5d 3e 72 5b 50  is: IF r[P3]>r[P
fee0: 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  1].**.** This wo
fef0: 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68  rks just like th
ff00: 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65  e Lt opcode exce
ff10: 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70  pt that the jump
ff20: 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20   is taken if.** 
ff30: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
ff40: 65 67 69 73 74 65 72 20 50 33 20 69 73 20 67 72  egister P3 is gr
ff50: 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 63  eater than the c
ff60: 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67  ontent of.** reg
ff70: 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74  ister P1.  See t
ff80: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
ff90: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
ffa0: 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f  rmation..*/./* O
ffb0: 70 63 6f 64 65 3a 20 47 65 20 50 31 20 50 32 20  pcode: Ge P1 P2 
ffc0: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
ffd0: 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3e 3d  psis: IF r[P3]>=
ffe0: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r[P1].**.** This
fff0: 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
10000 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65   the Lt opcode e
10010 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a  xcept that the j
10020 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a  ump is taken if.
10030 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ** the content o
10040 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  f register P3 is
10050 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72   greater than or
10060 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f   equal to the co
10070 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69  ntent of.** regi
10080 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68  ster P1.  See th
10090 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20  e Lt opcode for 
100a0 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
100b0 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  mation..*/.case 
100c0 4f 50 5f 45 71 3a 20 20 20 20 20 20 20 20 20 20  OP_Eq:          
100d0 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
100e0 54 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_EQ, jump, in1
100f0 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
10100 5f 4e 65 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Ne:            
10110 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
10120 5f 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _NE, jump, in1, 
10130 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c  in3 */.case OP_L
10140 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t:              
10150 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c   /* same as TK_L
10160 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  T, jump, in1, in
10170 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a  3 */.case OP_Le:
10180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
10190 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c  * same as TK_LE,
101a0 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
101b0 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20 20  */.case OP_Gt:  
101c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
101d0 73 61 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a  same as TK_GT, j
101e0 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
101f0 0a 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20  .case OP_Ge: {  
10200 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
10210 6d 65 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d  me as TK_GE, jum
10220 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20  p, in1, in3 */. 
10230 20 69 6e 74 20 72 65 73 2c 20 72 65 73 32 3b 20   int res, res2; 
10240 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f       /* Result o
10250 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  f the comparison
10260 20 6f 66 20 70 49 6e 31 20 61 67 61 69 6e 73 74   of pIn1 against
10270 20 70 49 6e 33 20 2a 2f 0a 20 20 63 68 61 72 20   pIn3 */.  char 
10280 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 2f  affinity;      /
10290 2a 20 41 66 66 69 6e 69 74 79 20 74 6f 20 75 73  * Affinity to us
102a0 65 20 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e  e for comparison
102b0 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 31   */.  u16 flags1
102c0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70  ;         /* Cop
102d0 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c  y of initial val
102e0 75 65 20 6f 66 20 70 49 6e 31 2d 3e 66 6c 61 67  ue of pIn1->flag
102f0 73 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73  s */.  u16 flags
10300 33 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  3;         /* Co
10310 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61  py of initial va
10320 6c 75 65 20 6f 66 20 70 49 6e 33 2d 3e 66 6c 61  lue of pIn3->fla
10330 67 73 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20  gs */..  pIn1 = 
10340 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
10350 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
10360 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73  Op->p3];.  flags
10370 31 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b  1 = pIn1->flags;
10380 0a 20 20 66 6c 61 67 73 33 20 3d 20 70 49 6e 33  .  flags3 = pIn3
10390 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28  ->flags;.  if( (
103a0 66 6c 61 67 73 31 20 7c 20 66 6c 61 67 73 33 29  flags1 | flags3)
103b0 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20  &MEM_Null ){.   
103c0 20 2f 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68 20   /* One or both 
103d0 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c  operands are NUL
103e0 4c 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70  L */.    if( pOp
103f0 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55  ->p5 & SQLITE_NU
10400 4c 4c 45 51 20 29 7b 0a 20 20 20 20 20 20 2f 2a  LLEQ ){.      /*
10410 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45   If SQLITE_NULLE
10420 51 20 69 73 20 73 65 74 20 28 77 68 69 63 68 20  Q is set (which 
10430 77 69 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65 6e  will only happen
10440 20 69 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72   if the operator
10450 20 69 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50 5f   is.      ** OP_
10460 45 71 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68 65  Eq or OP_Ne) the
10470 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20  n take the jump 
10480 6f 72 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67  or not depending
10490 20 6f 6e 20 77 68 65 74 68 65 72 0a 20 20 20 20   on whether.    
104a0 20 20 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74 68    ** or not both
104b0 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 75   operands are nu
104c0 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  ll..      */.   
104d0 20 20 20 61 73 73 65 72 74 28 20 28 66 6c 61 67     assert( (flag
104e0 73 31 20 26 20 4d 45 4d 5f 43 6c 65 61 72 65 64  s1 & MEM_Cleared
104f0 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73  )==0 );.      as
10500 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 20 26  sert( (pOp->p5 &
10510 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55   SQLITE_JUMPIFNU
10520 4c 4c 29 3d 3d 30 20 7c 7c 20 43 4f 52 52 55 50  LL)==0 || CORRUP
10530 54 5f 44 42 20 29 3b 0a 20 20 20 20 20 20 74 65  T_DB );.      te
10540 73 74 63 61 73 65 28 20 28 70 4f 70 2d 3e 70 35  stcase( (pOp->p5
10550 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46   & SQLITE_JUMPIF
10560 4e 55 4c 4c 29 21 3d 30 20 29 3b 0a 20 20 20 20  NULL)!=0 );.    
10570 20 20 69 66 28 20 28 66 6c 61 67 73 31 26 66 6c    if( (flags1&fl
10580 61 67 73 33 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d  ags3&MEM_Null)!=
10590 30 0a 20 20 20 20 20 20 20 26 26 20 28 66 6c 61  0.       && (fla
105a0 67 73 33 26 4d 45 4d 5f 43 6c 65 61 72 65 64 29  gs3&MEM_Cleared)
105b0 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20 20 20  ==0.      ){.   
105c0 20 20 20 20 20 72 65 73 20 3d 20 30 3b 20 20 2f       res = 0;  /
105d0 2a 20 4f 70 65 72 61 6e 64 73 20 61 72 65 20 65  * Operands are e
105e0 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 65  qual */.      }e
105f0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72 65 73  lse{.        res
10600 20 3d 20 28 28 66 6c 61 67 73 33 20 26 20 4d 45   = ((flags3 & ME
10610 4d 5f 4e 75 6c 6c 29 20 3f 20 2d 31 20 3a 20 2b  M_Null) ? -1 : +
10620 31 29 3b 20 20 2f 2a 20 4f 70 65 72 61 6e 64 73  1);  /* Operands
10630 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 20 2a   are not equal *
10640 2f 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  /.      }.    }e
10650 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 53 51  lse{.      /* SQ
10660 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 63  LITE_NULLEQ is c
10670 6c 65 61 72 20 61 6e 64 20 61 74 20 6c 65 61 73  lear and at leas
10680 74 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20 69 73  t one operand is
10690 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 2a 2a 20   NULL,.      ** 
106a0 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
106b0 69 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a  is always NULL..
106c0 20 20 20 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d        ** The jum
106d0 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68  p is taken if th
106e0 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  e SQLITE_JUMPIFN
106f0 55 4c 4c 20 62 69 74 20 69 73 20 73 65 74 2e 0a  ULL bit is set..
10700 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
10710 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c  f( pOp->p5 & SQL
10720 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20  ITE_STOREP2 ){. 
10730 20 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26 61         pOut = &a
10740 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
10750 20 20 20 20 20 20 69 43 6f 6d 70 61 72 65 20 3d        iCompare =
10760 20 31 3b 20 20 20 20 2f 2a 20 4f 70 65 72 61 6e   1;    /* Operan
10770 64 73 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c  ds are not equal
10780 20 2a 2f 0a 20 20 20 20 20 20 20 20 6d 65 6d 41   */.        memA
10790 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
107a0 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 20 20 4d  pOut);.        M
107b0 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
107c0 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  ut, MEM_Null);. 
107d0 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f         REGISTER_
107e0 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70  TRACE(pOp->p2, p
107f0 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  Out);.      }els
10800 65 7b 0a 20 20 20 20 20 20 20 20 56 64 62 65 42  e{.        VdbeB
10810 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33 29 3b  ranchTaken(2,3);
10820 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 4f 70  .        if( pOp
10830 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55  ->p5 & SQLITE_JU
10840 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a 20 20 20 20  MPIFNULL ){.    
10850 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f        goto jump_
10860 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 20 20 7d  to_p2;.        }
10870 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62  .      }.      b
10880 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  reak;.    }.  }e
10890 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 4e 65 69 74  lse{.    /* Neit
108a0 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
108b0 55 4c 4c 2e 20 20 44 6f 20 61 20 63 6f 6d 70 61  ULL.  Do a compa
108c0 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 66  rison. */.    af
108d0 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 35  finity = pOp->p5
108e0 20 26 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41   & SQLITE_AFF_MA
108f0 53 4b 3b 0a 20 20 20 20 69 66 28 20 61 66 66 69  SK;.    if( affi
10900 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41 46 46  nity>=SQLITE_AFF
10910 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20 20 20 20  _NUMERIC ){.    
10920 20 20 69 66 28 20 28 66 6c 61 67 73 31 20 7c 20    if( (flags1 | 
10930 66 6c 61 67 73 33 29 26 4d 45 4d 5f 53 74 72 20  flags3)&MEM_Str 
10940 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28  ){.        if( (
10950 66 6c 61 67 73 31 20 26 20 28 4d 45 4d 5f 49 6e  flags1 & (MEM_In
10960 74 7c 4d 45 4d 5f 49 6e 74 52 65 61 6c 7c 4d 45  t|MEM_IntReal|ME
10970 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29  M_Real|MEM_Str))
10980 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20  ==MEM_Str ){.   
10990 20 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65         applyNume
109a0 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 31  ricAffinity(pIn1
109b0 2c 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61  ,0);.          a
109c0 73 73 65 72 74 28 20 66 6c 61 67 73 33 3d 3d 70  ssert( flags3==p
109d0 49 6e 33 2d 3e 66 6c 61 67 73 20 29 3b 0a 20 20  In3->flags );.  
109e0 20 20 20 20 20 20 20 20 2f 2a 20 74 65 73 74 63          /* testc
109f0 61 73 65 28 20 66 6c 61 67 73 33 21 3d 70 49 6e  ase( flags3!=pIn
10a00 33 2d 3e 66 6c 61 67 73 20 29 3b 0a 20 20 20 20  3->flags );.    
10a10 20 20 20 20 20 20 2a 2a 20 74 68 69 73 20 75 73        ** this us
10a20 65 64 20 74 6f 20 62 65 20 70 6f 73 73 69 62 6c  ed to be possibl
10a30 65 20 77 69 74 68 20 70 49 6e 31 3d 3d 70 49 6e  e with pIn1==pIn
10a40 33 2c 20 62 75 74 20 6e 6f 74 20 73 69 6e 63 65  3, but not since
10a50 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68  .          ** th
10a60 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 77  e column cache w
10a70 61 73 20 72 65 6d 6f 76 65 64 2e 20 20 54 68 65  as removed.  The
10a80 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 73 73 69 67   following assig
10a90 6e 6d 65 6e 74 0a 20 20 20 20 20 20 20 20 20 20  nment.          
10aa0 2a 2a 20 69 73 20 65 73 73 65 6e 74 69 61 6c 6c  ** is essentiall
10ab0 79 20 61 20 6e 6f 2d 6f 70 2e 20 20 42 75 74 2c  y a no-op.  But,
10ac0 20 69 74 20 70 72 6f 76 69 64 65 73 20 64 65 66   it provides def
10ad0 65 6e 73 65 2d 69 6e 2d 64 65 70 74 68 0a 20 20  ense-in-depth.  
10ae0 20 20 20 20 20 20 20 20 2a 2a 20 69 6e 20 63 61          ** in ca
10af0 73 65 20 6f 75 72 20 61 6e 61 6c 79 73 69 73 20  se our analysis 
10b00 69 73 20 69 6e 63 6f 72 72 65 63 74 2c 20 73 6f  is incorrect, so
10b10 20 69 74 20 69 73 20 6c 65 66 74 20 69 6e 2e 20   it is left in. 
10b20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 66 6c 61  */.          fla
10b30 67 73 33 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67  gs3 = pIn3->flag
10b40 73 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  s;.        }.   
10b50 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 33       if( (flags3
10b60 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
10b70 49 6e 74 52 65 61 6c 7c 4d 45 4d 5f 52 65 61 6c  IntReal|MEM_Real
10b80 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f  |MEM_Str))==MEM_
10b90 53 74 72 20 29 7b 0a 20 20 20 20 20 20 20 20 20  Str ){.         
10ba0 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66   applyNumericAff
10bb0 69 6e 69 74 79 28 70 49 6e 33 2c 30 29 3b 0a 20  inity(pIn3,0);. 
10bc0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
10bd0 0a 20 20 20 20 20 20 2f 2a 20 48 61 6e 64 6c 65  .      /* Handle
10be0 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65   the common case
10bf0 20 6f 66 20 69 6e 74 65 67 65 72 20 63 6f 6d 70   of integer comp
10c00 61 72 69 73 6f 6e 20 68 65 72 65 2c 20 61 73 20  arison here, as 
10c10 61 6e 0a 20 20 20 20 20 20 2a 2a 20 6f 70 74 69  an.      ** opti
10c20 6d 69 7a 61 74 69 6f 6e 2c 20 74 6f 20 61 76 6f  mization, to avo
10c30 69 64 20 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c  id a call to sql
10c40 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 29  ite3MemCompare()
10c50 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28 70   */.      if( (p
10c60 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 70 49 6e  In1->flags & pIn
10c70 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  3->flags & MEM_I
10c80 6e 74 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  nt)!=0 ){.      
10c90 20 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 69 20    if( pIn3->u.i 
10ca0 3e 20 70 49 6e 31 2d 3e 75 2e 69 20 29 7b 20 72  > pIn1->u.i ){ r
10cb0 65 73 20 3d 20 2b 31 3b 20 67 6f 74 6f 20 63 6f  es = +1; goto co
10cc0 6d 70 61 72 65 5f 6f 70 3b 20 7d 0a 20 20 20 20  mpare_op; }.    
10cd0 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e      if( pIn3->u.
10ce0 69 20 3c 20 70 49 6e 31 2d 3e 75 2e 69 20 29 7b  i < pIn1->u.i ){
10cf0 20 72 65 73 20 3d 20 2d 31 3b 20 67 6f 74 6f 20   res = -1; goto 
10d00 63 6f 6d 70 61 72 65 5f 6f 70 3b 20 7d 0a 20 20  compare_op; }.  
10d10 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20        res = 0;. 
10d20 20 20 20 20 20 20 20 67 6f 74 6f 20 63 6f 6d 70         goto comp
10d30 61 72 65 5f 6f 70 3b 0a 20 20 20 20 20 20 7d 0a  are_op;.      }.
10d40 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 61 66      }else if( af
10d50 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
10d60 46 46 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 20  FF_TEXT ){.     
10d70 20 69 66 28 20 28 66 6c 61 67 73 31 20 26 20 4d   if( (flags1 & M
10d80 45 4d 5f 53 74 72 29 3d 3d 30 20 26 26 20 28 66  EM_Str)==0 && (f
10d90 6c 61 67 73 31 26 28 4d 45 4d 5f 49 6e 74 7c 4d  lags1&(MEM_Int|M
10da0 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 52  EM_Real|MEM_IntR
10db0 65 61 6c 29 29 21 3d 30 20 29 7b 0a 20 20 20 20  eal))!=0 ){.    
10dc0 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49      testcase( pI
10dd0 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
10de0 49 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20 74  Int );.        t
10df0 65 73 74 63 61 73 65 28 20 70 49 6e 31 2d 3e 66  estcase( pIn1->f
10e00 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20  lags & MEM_Real 
10e10 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63  );.        testc
10e20 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ase( pIn1->flags
10e30 20 26 20 4d 45 4d 5f 49 6e 74 52 65 61 6c 20 29   & MEM_IntReal )
10e40 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
10e50 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66  3VdbeMemStringif
10e60 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67  y(pIn1, encoding
10e70 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 74 65  , 1);.        te
10e80 73 74 63 61 73 65 28 20 28 66 6c 61 67 73 31 26  stcase( (flags1&
10e90 4d 45 4d 5f 44 79 6e 29 20 21 3d 20 28 70 49 6e  MEM_Dyn) != (pIn
10ea0 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 44 79 6e  1->flags&MEM_Dyn
10eb0 29 20 29 3b 0a 20 20 20 20 20 20 20 20 66 6c 61  ) );.        fla
10ec0 67 73 31 20 3d 20 28 70 49 6e 31 2d 3e 66 6c 61  gs1 = (pIn1->fla
10ed0 67 73 20 26 20 7e 4d 45 4d 5f 54 79 70 65 4d 61  gs & ~MEM_TypeMa
10ee0 73 6b 29 20 7c 20 28 66 6c 61 67 73 31 20 26 20  sk) | (flags1 & 
10ef0 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20  MEM_TypeMask);. 
10f00 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
10f10 49 6e 31 21 3d 70 49 6e 33 20 29 3b 0a 20 20 20  In1!=pIn3 );.   
10f20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28     }.      if( (
10f30 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f 53 74 72  flags3 & MEM_Str
10f40 29 3d 3d 30 20 26 26 20 28 66 6c 61 67 73 33 26  )==0 && (flags3&
10f50 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61  (MEM_Int|MEM_Rea
10f60 6c 7c 4d 45 4d 5f 49 6e 74 52 65 61 6c 29 29 21  l|MEM_IntReal))!
10f70 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 74 65  =0 ){.        te
10f80 73 74 63 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c  stcase( pIn3->fl
10f90 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
10fa0 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73  .        testcas
10fb0 65 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  e( pIn3->flags &
10fc0 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20   MEM_Real );.   
10fd0 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70       testcase( p
10fe0 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
10ff0 5f 49 6e 74 52 65 61 6c 20 29 3b 0a 20 20 20 20  _IntReal );.    
11000 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
11010 65 6d 53 74 72 69 6e 67 69 66 79 28 70 49 6e 33  emStringify(pIn3
11020 2c 20 65 6e 63 6f 64 69 6e 67 2c 20 31 29 3b 0a  , encoding, 1);.
11030 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65          testcase
11040 28 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 44 79  ( (flags3&MEM_Dy
11050 6e 29 20 21 3d 20 28 70 49 6e 33 2d 3e 66 6c 61  n) != (pIn3->fla
11060 67 73 26 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20  gs&MEM_Dyn) );. 
11070 20 20 20 20 20 20 20 66 6c 61 67 73 33 20 3d 20         flags3 = 
11080 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 7e  (pIn3->flags & ~
11090 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20  MEM_TypeMask) | 
110a0 28 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f 54 79  (flags3 & MEM_Ty
110b0 70 65 4d 61 73 6b 29 3b 0a 20 20 20 20 20 20 7d  peMask);.      }
110c0 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72  .    }.    asser
110d0 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
110e0 50 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f  P4_COLLSEQ || pO
110f0 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29  p->p4.pColl==0 )
11100 3b 0a 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69  ;.    res = sqli
11110 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 70 49  te3MemCompare(pI
11120 6e 33 2c 20 70 49 6e 31 2c 20 70 4f 70 2d 3e 70  n3, pIn1, pOp->p
11130 34 2e 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 63 6f  4.pColl);.  }.co
11140 6d 70 61 72 65 5f 6f 70 3a 0a 20 20 2f 2a 20 41  mpare_op:.  /* A
11150 74 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 72 65  t this point, re
11160 73 20 69 73 20 6e 65 67 61 74 69 76 65 2c 20 7a  s is negative, z
11170 65 72 6f 2c 20 6f 72 20 70 6f 73 69 74 69 76 65  ero, or positive
11180 20 69 66 20 72 65 67 5b 50 31 5d 20 69 73 0a 20   if reg[P1] is. 
11190 20 2a 2a 20 6c 65 73 73 20 74 68 61 6e 2c 20 65   ** less than, e
111a0 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61  qual to, or grea
111b0 74 65 72 20 74 68 61 6e 20 72 65 67 5b 50 33 5d  ter than reg[P3]
111c0 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
111d0 20 43 6f 6d 70 75 74 65 0a 20 20 2a 2a 20 74 68   Compute.  ** th
111e0 65 20 61 6e 73 77 65 72 20 74 6f 20 74 68 69 73  e answer to this
111f0 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 72 65 73   operator in res
11200 32 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  2, depending on 
11210 77 68 61 74 20 74 68 65 20 63 6f 6d 70 61 72 69  what the compari
11220 73 6f 6e 0a 20 20 2a 2a 20 6f 70 65 72 61 74 6f  son.  ** operato
11230 72 20 61 63 74 75 61 6c 6c 79 20 69 73 2e 20 20  r actually is.  
11240 54 68 65 20 6e 65 78 74 20 62 6c 6f 63 6b 20 6f  The next block o
11250 66 20 63 6f 64 65 20 64 65 70 65 6e 64 73 20 6f  f code depends o
11260 6e 20 74 68 65 20 66 61 63 74 0a 20 20 2a 2a 20  n the fact.  ** 
11270 74 68 61 74 20 74 68 65 20 36 20 63 6f 6d 70 61  that the 6 compa
11280 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73 20  rison operators 
11290 61 72 65 20 63 6f 6e 73 65 63 75 74 69 76 65 20  are consecutive 
112a0 69 6e 74 65 67 65 72 73 20 69 6e 20 74 68 69 73  integers in this
112b0 0a 20 20 2a 2a 20 6f 72 64 65 72 3a 20 20 4e 45  .  ** order:  NE
112c0 2c 20 45 51 2c 20 47 54 2c 20 4c 45 2c 20 4c 54  , EQ, GT, LE, LT
112d0 2c 20 47 45 20 2a 2f 0a 20 20 61 73 73 65 72 74  , GE */.  assert
112e0 28 20 4f 50 5f 45 71 3d 3d 4f 50 5f 4e 65 2b 31  ( OP_Eq==OP_Ne+1
112f0 20 29 3b 20 61 73 73 65 72 74 28 20 4f 50 5f 47   ); assert( OP_G
11300 74 3d 3d 4f 50 5f 4e 65 2b 32 20 29 3b 20 61 73  t==OP_Ne+2 ); as
11310 73 65 72 74 28 20 4f 50 5f 4c 65 3d 3d 4f 50 5f  sert( OP_Le==OP_
11320 4e 65 2b 33 20 29 3b 0a 20 20 61 73 73 65 72 74  Ne+3 );.  assert
11330 28 20 4f 50 5f 4c 74 3d 3d 4f 50 5f 4e 65 2b 34  ( OP_Lt==OP_Ne+4
11340 20 29 3b 20 61 73 73 65 72 74 28 20 4f 50 5f 47   ); assert( OP_G
11350 65 3d 3d 4f 50 5f 4e 65 2b 35 20 29 3b 0a 20 20  e==OP_Ne+5 );.  
11360 69 66 28 20 72 65 73 3c 30 20 29 7b 20 20 20 20  if( res<0 ){    
11370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11380 20 20 20 20 2f 2a 20 6e 65 2c 20 65 71 2c 20 67      /* ne, eq, g
11390 74 2c 20 6c 65 2c 20 6c 74 2c 20 67 65 20 2a 2f  t, le, lt, ge */
113a0 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
113b0 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
113c0 61 4c 54 62 5b 5d 20 3d 20 7b 20 31 2c 20 20 30  aLTb[] = { 1,  0
113d0 2c 20 20 30 2c 20 20 31 2c 20 20 31 2c 20 20 30  ,  0,  1,  1,  0
113e0 20 7d 3b 0a 20 20 20 20 72 65 73 32 20 3d 20 61   };.    res2 = a
113f0 4c 54 62 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  LTb[pOp->opcode 
11400 2d 20 4f 50 5f 4e 65 5d 3b 0a 20 20 7d 65 6c 73  - OP_Ne];.  }els
11410 65 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a  e if( res==0 ){.
11420 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
11430 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61   unsigned char a
11440 45 51 62 5b 5d 20 3d 20 7b 20 30 2c 20 20 31 2c  EQb[] = { 0,  1,
11450 20 20 30 2c 20 20 31 2c 20 20 30 2c 20 20 31 20    0,  1,  0,  1 
11460 7d 3b 0a 20 20 20 20 72 65 73 32 20 3d 20 61 45  };.    res2 = aE
11470 51 62 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 2d  Qb[pOp->opcode -
11480 20 4f 50 5f 4e 65 5d 3b 0a 20 20 7d 65 6c 73 65   OP_Ne];.  }else
11490 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  {.    static con
114a0 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
114b0 20 61 47 54 62 5b 5d 20 3d 20 7b 20 31 2c 20 20   aGTb[] = { 1,  
114c0 30 2c 20 20 31 2c 20 20 30 2c 20 20 30 2c 20 20  0,  1,  0,  0,  
114d0 31 20 7d 3b 0a 20 20 20 20 72 65 73 32 20 3d 20  1 };.    res2 = 
114e0 61 47 54 62 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65  aGTb[pOp->opcode
114f0 20 2d 20 4f 50 5f 4e 65 5d 3b 0a 20 20 7d 0a 0a   - OP_Ne];.  }..
11500 20 20 2f 2a 20 55 6e 64 6f 20 61 6e 79 20 63 68    /* Undo any ch
11510 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20 61 70  anges made by ap
11520 70 6c 79 41 66 66 69 6e 69 74 79 28 29 20 74 6f  plyAffinity() to
11530 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73   the input regis
11540 74 65 72 73 2e 20 2a 2f 0a 20 20 61 73 73 65 72  ters. */.  asser
11550 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  t( (pIn1->flags 
11560 26 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66  & MEM_Dyn) == (f
11570 6c 61 67 73 31 20 26 20 4d 45 4d 5f 44 79 6e 29  lags1 & MEM_Dyn)
11580 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67   );.  pIn1->flag
11590 73 20 3d 20 66 6c 61 67 73 31 3b 0a 20 20 61 73  s = flags1;.  as
115a0 73 65 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c 61  sert( (pIn3->fla
115b0 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d  gs & MEM_Dyn) ==
115c0 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f 44   (flags3 & MEM_D
115d0 79 6e 29 20 29 3b 0a 20 20 70 49 6e 33 2d 3e 66  yn) );.  pIn3->f
115e0 6c 61 67 73 20 3d 20 66 6c 61 67 73 33 3b 0a 0a  lags = flags3;..
115f0 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
11600 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29  SQLITE_STOREP2 )
11610 7b 0a 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d  {.    pOut = &aM
11620 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20  em[pOp->p2];.   
11630 20 69 43 6f 6d 70 61 72 65 20 3d 20 72 65 73 3b   iCompare = res;
11640 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 70  .    if( (pOp->p
11650 35 20 26 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e  5 & SQLITE_KEEPN
11660 55 4c 4c 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  ULL)!=0 ){.     
11670 20 2f 2a 20 54 68 65 20 4b 45 45 50 4e 55 4c 4c   /* The KEEPNULL
11680 20 66 6c 61 67 20 70 72 65 76 65 6e 74 73 20 4f   flag prevents O
11690 50 5f 45 71 20 66 72 6f 6d 20 6f 76 65 72 77 72  P_Eq from overwr
116a0 69 74 69 6e 67 20 61 20 4e 55 4c 4c 20 77 69 74  iting a NULL wit
116b0 68 20 31 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64  h 1.      ** and
116c0 20 70 72 65 76 65 6e 74 73 20 4f 50 5f 4e 65 20   prevents OP_Ne 
116d0 66 72 6f 6d 20 6f 76 65 72 77 72 69 74 69 6e 67  from overwriting
116e0 20 4e 55 4c 4c 20 77 69 74 68 20 30 2e 20 20 54   NULL with 0.  T
116f0 68 69 73 20 66 6c 61 67 0a 20 20 20 20 20 20 2a  his flag.      *
11700 2a 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 69  * is only used i
11710 6e 20 63 6f 6e 74 65 78 74 73 20 77 68 65 72 65  n contexts where
11720 20 65 69 74 68 65 72 3a 0a 20 20 20 20 20 20 2a   either:.      *
11730 2a 20 20 20 28 31 29 20 6f 70 3d 3d 4f 50 5f 45  *   (1) op==OP_E
11740 71 20 26 26 20 28 72 5b 50 32 5d 3d 3d 4e 55 4c  q && (r[P2]==NUL
11750 4c 20 7c 7c 20 72 5b 50 32 5d 3d 3d 30 29 0a 20  L || r[P2]==0). 
11760 20 20 20 20 20 2a 2a 20 20 20 28 32 29 20 6f 70       **   (2) op
11770 3d 3d 4f 50 5f 4e 65 20 26 26 20 28 72 5b 50 32  ==OP_Ne && (r[P2
11780 5d 3d 3d 4e 55 4c 4c 20 7c 7c 20 72 5b 50 32 5d  ]==NULL || r[P2]
11790 3d 3d 31 29 0a 20 20 20 20 20 20 2a 2a 20 54 68  ==1).      ** Th
117a0 65 72 65 66 6f 72 65 20 69 74 20 69 73 20 6e 6f  erefore it is no
117b0 74 20 6e 65 63 65 73 73 61 72 79 20 74 6f 20 63  t necessary to c
117c0 68 65 63 6b 20 74 68 65 20 63 6f 6e 74 65 6e 74  heck the content
117d0 20 6f 66 20 72 5b 50 32 5d 20 66 6f 72 0a 20 20   of r[P2] for.  
117e0 20 20 20 20 2a 2a 20 4e 55 4c 4c 2e 20 2a 2f 0a      ** NULL. */.
117f0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
11800 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65  p->opcode==OP_Ne
11810 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
11820 3d 4f 50 5f 45 71 20 29 3b 0a 20 20 20 20 20 20  =OP_Eq );.      
11830 61 73 73 65 72 74 28 20 72 65 73 32 3d 3d 30 20  assert( res2==0 
11840 7c 7c 20 72 65 73 32 3d 3d 31 20 29 3b 0a 20 20  || res2==1 );.  
11850 20 20 20 20 74 65 73 74 63 61 73 65 28 20 72 65      testcase( re
11860 73 32 3d 3d 30 20 26 26 20 70 4f 70 2d 3e 6f 70  s2==0 && pOp->op
11870 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 29 3b 0a 20  code==OP_Eq );. 
11880 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 72       testcase( r
11890 65 73 32 3d 3d 31 20 26 26 20 70 4f 70 2d 3e 6f  es2==1 && pOp->o
118a0 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 29 3b 0a  pcode==OP_Eq );.
118b0 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
118c0 72 65 73 32 3d 3d 30 20 26 26 20 70 4f 70 2d 3e  res2==0 && pOp->
118d0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b  opcode==OP_Ne );
118e0 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
118f0 20 72 65 73 32 3d 3d 31 20 26 26 20 70 4f 70 2d   res2==1 && pOp-
11900 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29  >opcode==OP_Ne )
11910 3b 0a 20 20 20 20 20 20 69 66 28 20 28 70 4f 70  ;.      if( (pOp
11920 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 29  ->opcode==OP_Eq)
11930 3d 3d 72 65 73 32 20 29 20 62 72 65 61 6b 3b 0a  ==res2 ) break;.
11940 20 20 20 20 7d 0a 20 20 20 20 6d 65 6d 41 62 6f      }.    memAbo
11950 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f  utToChange(p, pO
11960 75 74 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54  ut);.    MemSetT
11970 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
11980 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75 74  M_Int);.    pOut
11990 2d 3e 75 2e 69 20 3d 20 72 65 73 32 3b 0a 20 20  ->u.i = res2;.  
119a0 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
119b0 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b  (pOp->p2, pOut);
119c0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64  .  }else{.    Vd
119d0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
119e0 73 32 21 3d 30 2c 20 28 70 4f 70 2d 3e 70 35 20  s2!=0, (pOp->p5 
119f0 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 29  & SQLITE_NULLEQ)
11a00 3f 32 3a 33 29 3b 0a 20 20 20 20 69 66 28 20 72  ?2:3);.    if( r
11a10 65 73 32 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  es2 ){.      got
11a20 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
11a30 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
11a40 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45  .}../* Opcode: E
11a50 6c 73 65 4e 6f 74 45 71 20 2a 20 50 32 20 2a 20  lseNotEq * P2 * 
11a60 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  * *.**.** This o
11a70 70 63 6f 64 65 20 6d 75 73 74 20 69 6d 6d 65 64  pcode must immed
11a80 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 20 61 6e  iately follow an
11a90 20 4f 50 5f 4c 74 20 6f 72 20 4f 50 5f 47 74 20   OP_Lt or OP_Gt 
11aa0 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61  comparison opera
11ab0 74 6f 72 2e 0a 2a 2a 20 49 66 20 72 65 73 75 6c  tor..** If resul
11ac0 74 20 6f 66 20 61 6e 20 4f 50 5f 45 71 20 63 6f  t of an OP_Eq co
11ad0 6d 70 61 72 69 73 6f 6e 20 6f 6e 20 74 68 65 20  mparison on the 
11ae0 73 61 6d 65 20 74 77 6f 20 6f 70 65 72 61 6e 64  same two operand
11af0 73 0a 2a 2a 20 77 6f 75 6c 64 20 68 61 76 65 20  s.** would have 
11b00 62 65 20 4e 55 4c 4c 20 6f 72 20 66 61 6c 73 65  be NULL or false
11b10 20 28 30 29 2c 20 74 68 65 6e 20 74 68 65 6e 20   (0), then then 
11b20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 20  jump to P2. .** 
11b30 49 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  If the result of
11b40 20 61 6e 20 4f 50 5f 45 71 20 63 6f 6d 70 61 72   an OP_Eq compar
11b50 69 73 6f 6e 20 6f 6e 20 74 68 65 20 74 77 6f 20  ison on the two 
11b60 70 72 65 76 69 6f 75 73 20 6f 70 65 72 61 6e 64  previous operand
11b70 73 0a 2a 2a 20 77 6f 75 6c 64 20 68 61 76 65 20  s.** would have 
11b80 62 65 65 6e 20 74 72 75 65 20 28 31 29 2c 20 74  been true (1), t
11b90 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  hen fall through
11ba0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6c 73  ..*/.case OP_Els
11bb0 65 4e 6f 74 45 71 3a 20 7b 20 20 20 20 20 20 20  eNotEq: {       
11bc0 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 45 53  /* same as TK_ES
11bd0 43 41 50 45 2c 20 6a 75 6d 70 20 2a 2f 0a 20 20  CAPE, jump */.  
11be0 61 73 73 65 72 74 28 20 70 4f 70 3e 61 4f 70 20  assert( pOp>aOp 
11bf0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
11c00 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  [-1].opcode==OP_
11c10 4c 74 20 7c 7c 20 70 4f 70 5b 2d 31 5d 2e 6f 70  Lt || pOp[-1].op
11c20 63 6f 64 65 3d 3d 4f 50 5f 47 74 20 29 3b 0a 20  code==OP_Gt );. 
11c30 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d   assert( pOp[-1]
11c40 2e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f  .p5 & SQLITE_STO
11c50 52 45 50 32 20 29 3b 0a 20 20 56 64 62 65 42 72  REP2 );.  VdbeBr
11c60 61 6e 63 68 54 61 6b 65 6e 28 69 43 6f 6d 70 61  anchTaken(iCompa
11c70 72 65 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28  re!=0, 2);.  if(
11c80 20 69 43 6f 6d 70 61 72 65 21 3d 30 20 29 20 67   iCompare!=0 ) g
11c90 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
11ca0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20    break;.}.../* 
11cb0 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75 74 61 74  Opcode: Permutat
11cc0 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a  ion * * * P4 *.*
11cd0 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 70 65 72  *.** Set the per
11ce0 6d 75 74 61 74 69 6f 6e 20 75 73 65 64 20 62 79  mutation used by
11cf0 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 20   the OP_Compare 
11d00 6f 70 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20  operator in the 
11d10 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75 63 74  next.** instruct
11d20 69 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d 75 74  ion.  The permut
11d30 61 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20  ation is stored 
11d40 69 6e 20 74 68 65 20 50 34 20 6f 70 65 72 61 6e  in the P4 operan
11d50 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65 72  d..**.** The per
11d60 6d 75 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79  mutation is only
11d70 20 76 61 6c 69 64 20 75 6e 74 69 6c 20 74 68 65   valid until the
11d80 20 6e 65 78 74 20 4f 50 5f 43 6f 6d 70 61 72 65   next OP_Compare
11d90 20 74 68 61 74 20 68 61 73 0a 2a 2a 20 74 68 65   that has.** the
11da0 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20   OPFLAG_PERMUTE 
11db0 62 69 74 20 73 65 74 20 69 6e 20 50 35 2e 20 54  bit set in P5. T
11dc0 79 70 69 63 61 6c 6c 79 20 74 68 65 20 4f 50 5f  ypically the OP_
11dd0 50 65 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f 75  Permutation shou
11de0 6c 64 20 0a 2a 2a 20 6f 63 63 75 72 20 69 6d 6d  ld .** occur imm
11df0 65 64 69 61 74 65 6c 79 20 70 72 69 6f 72 20 74  ediately prior t
11e00 6f 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65  o the OP_Compare
11e10 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 69 72 73  ..**.** The firs
11e20 74 20 69 6e 74 65 67 65 72 20 69 6e 20 74 68 65  t integer in the
11e30 20 50 34 20 69 6e 74 65 67 65 72 20 61 72 72 61   P4 integer arra
11e40 79 20 69 73 20 74 68 65 20 6c 65 6e 67 74 68 20  y is the length 
11e50 6f 66 20 74 68 65 20 61 72 72 61 79 0a 2a 2a 20  of the array.** 
11e60 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 62 65 63  and does not bec
11e70 6f 6d 65 20 70 61 72 74 20 6f 66 20 74 68 65 20  ome part of the 
11e80 70 65 72 6d 75 74 61 74 69 6f 6e 2e 0a 2a 2f 0a  permutation..*/.
11e90 63 61 73 65 20 4f 50 5f 50 65 72 6d 75 74 61 74  case OP_Permutat
11ea0 69 6f 6e 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  ion: {.  assert(
11eb0 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
11ec0 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a 20 20 61  _INTARRAY );.  a
11ed0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 61  ssert( pOp->p4.a
11ee0 69 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  i );.  assert( p
11ef0 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50  Op[1].opcode==OP
11f00 5f 43 6f 6d 70 61 72 65 20 29 3b 0a 20 20 61 73  _Compare );.  as
11f10 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 35 20  sert( pOp[1].p5 
11f20 26 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  & OPFLAG_PERMUTE
11f30 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   );.  break;.}..
11f40 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d 70 61  /* Opcode: Compa
11f50 72 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  re P1 P2 P3 P4 P
11f60 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  5.** Synopsis: r
11f70 5b 50 31 40 50 33 5d 20 3c 2d 3e 20 72 5b 50 32  [P1@P3] <-> r[P2
11f80 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61  @P3].**.** Compa
11f90 72 65 20 74 77 6f 20 76 65 63 74 6f 72 73 20 6f  re two vectors o
11fa0 66 20 72 65 67 69 73 74 65 72 73 20 69 6e 20 72  f registers in r
11fb0 65 67 28 50 31 29 2e 2e 72 65 67 28 50 31 2b 50  eg(P1)..reg(P1+P
11fc0 33 2d 31 29 20 28 63 61 6c 6c 20 74 68 69 73 0a  3-1) (call this.
11fd0 2a 2a 20 76 65 63 74 6f 72 20 22 41 22 29 20 61  ** vector "A") a
11fe0 6e 64 20 69 6e 20 72 65 67 28 50 32 29 2e 2e 72  nd in reg(P2)..r
11ff0 65 67 28 50 32 2b 50 33 2d 31 29 20 28 22 42 22  eg(P2+P3-1) ("B"
12000 29 2e 20 20 53 61 76 65 20 74 68 65 20 72 65 73  ).  Save the res
12010 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f  ult of.** the co
12020 6d 70 61 72 69 73 6f 6e 20 66 6f 72 20 75 73 65  mparison for use
12030 20 62 79 20 74 68 65 20 6e 65 78 74 20 4f 50 5f   by the next OP_
12040 4a 75 6d 70 20 69 6e 73 74 72 75 63 74 2e 0a 2a  Jump instruct..*
12050 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74  *.** If P5 has t
12060 68 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54  he OPFLAG_PERMUT
12070 45 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20  E bit set, then 
12080 74 68 65 20 6f 72 64 65 72 20 6f 66 20 63 6f 6d  the order of com
12090 70 61 72 69 73 6f 6e 20 69 73 0a 2a 2a 20 64 65  parison is.** de
120a0 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20  termined by the 
120b0 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 50  most recent OP_P
120c0 65 72 6d 75 74 61 74 69 6f 6e 20 6f 70 65 72 61  ermutation opera
120d0 74 6f 72 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20  tor.  If the.** 
120e0 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62  OPFLAG_PERMUTE b
120f0 69 74 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65  it is clear, the
12100 6e 20 72 65 67 69 73 74 65 72 20 61 72 65 20 63  n register are c
12110 6f 6d 70 61 72 65 64 20 69 6e 20 73 65 71 75 65  ompared in seque
12120 6e 74 69 61 6c 0a 2a 2a 20 6f 72 64 65 72 2e 0a  ntial.** order..
12130 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 4b 65  **.** P4 is a Ke
12140 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20  yInfo structure 
12150 74 68 61 74 20 64 65 66 69 6e 65 73 20 63 6f 6c  that defines col
12160 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
12170 20 61 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f 72 64   and sort.** ord
12180 65 72 73 20 66 6f 72 20 74 68 65 20 63 6f 6d 70  ers for the comp
12190 61 72 69 73 6f 6e 2e 20 20 54 68 65 20 70 65 72  arison.  The per
121a0 6d 75 74 61 74 69 6f 6e 20 61 70 70 6c 69 65 73  mutation applies
121b0 20 74 6f 20 72 65 67 69 73 74 65 72 73 0a 2a 2a   to registers.**
121c0 20 6f 6e 6c 79 2e 20 20 54 68 65 20 4b 65 79 49   only.  The KeyI
121d0 6e 66 6f 20 65 6c 65 6d 65 6e 74 73 20 61 72 65  nfo elements are
121e0 20 75 73 65 64 20 73 65 71 75 65 6e 74 69 61 6c   used sequential
121f0 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ly..**.** The co
12200 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 20 73 6f  mparison is a so
12210 72 74 20 63 6f 6d 70 61 72 69 73 6f 6e 2c 20 73  rt comparison, s
12220 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70 61 72 65 20  o NULLs compare 
12230 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20  equal,.** NULLs 
12240 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 6e 75  are less than nu
12250 6d 62 65 72 73 2c 20 6e 75 6d 62 65 72 73 20 61  mbers, numbers a
12260 72 65 20 6c 65 73 73 20 74 68 61 6e 20 73 74 72  re less than str
12270 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20 73 74 72  ings,.** and str
12280 69 6e 67 73 20 61 72 65 20 6c 65 73 73 20 74 68  ings are less th
12290 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73  an blobs..*/.cas
122a0 65 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a  e OP_Compare: {.
122b0 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69    int n;.  int i
122c0 3b 0a 20 20 69 6e 74 20 70 31 3b 0a 20 20 69 6e  ;.  int p1;.  in
122d0 74 20 70 32 3b 0a 20 20 63 6f 6e 73 74 20 4b 65  t p2;.  const Ke
122e0 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b  yInfo *pKeyInfo;
122f0 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 43 6f  .  int idx;.  Co
12300 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20 20 20  llSeq *pColl;   
12310 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65   /* Collating se
12320 71 75 65 6e 63 65 20 74 6f 20 75 73 65 20 6f 6e  quence to use on
12330 20 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a 20 20   this term */.  
12340 69 6e 74 20 62 52 65 76 3b 20 20 20 20 20 20 20  int bRev;       
12350 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 44     /* True for D
12360 45 53 43 45 4e 44 49 4e 47 20 73 6f 72 74 20 6f  ESCENDING sort o
12370 72 64 65 72 20 2a 2f 0a 20 20 69 6e 74 20 2a 61  rder */.  int *a
12380 50 65 72 6d 75 74 65 3b 20 20 20 20 20 2f 2a 20  Permute;     /* 
12390 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20  The permutation 
123a0 2a 2f 0a 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e  */..  if( (pOp->
123b0 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 45 52 4d  p5 & OPFLAG_PERM
123c0 55 54 45 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61  UTE)==0 ){.    a
123d0 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 7d  Permute = 0;.  }
123e0 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
123f0 28 20 70 4f 70 3e 61 4f 70 20 29 3b 0a 20 20 20  ( pOp>aOp );.   
12400 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d   assert( pOp[-1]
12410 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 50 65 72 6d  .opcode==OP_Perm
12420 75 74 61 74 69 6f 6e 20 29 3b 0a 20 20 20 20 61  utation );.    a
12430 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70  ssert( pOp[-1].p
12440 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52  4type==P4_INTARR
12450 41 59 20 29 3b 0a 20 20 20 20 61 50 65 72 6d 75  AY );.    aPermu
12460 74 65 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e  te = pOp[-1].p4.
12470 61 69 20 2b 20 31 3b 0a 20 20 20 20 61 73 73 65  ai + 1;.    asse
12480 72 74 28 20 61 50 65 72 6d 75 74 65 21 3d 30 20  rt( aPermute!=0 
12490 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d 20 70 4f 70  );.  }.  n = pOp
124a0 2d 3e 70 33 3b 0a 20 20 70 4b 65 79 49 6e 66 6f  ->p3;.  pKeyInfo
124b0 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49   = pOp->p4.pKeyI
124c0 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  nfo;.  assert( n
124d0 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
124e0 70 4b 65 79 49 6e 66 6f 21 3d 30 20 29 3b 0a 20  pKeyInfo!=0 );. 
124f0 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20   p1 = pOp->p1;. 
12500 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 23   p2 = pOp->p2;.#
12510 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
12520 55 47 0a 20 20 69 66 28 20 61 50 65 72 6d 75 74  UG.  if( aPermut
12530 65 20 29 7b 0a 20 20 20 20 69 6e 74 20 6b 2c 20  e ){.    int k, 
12540 6d 78 20 3d 20 30 3b 0a 20 20 20 20 66 6f 72 28  mx = 0;.    for(
12550 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20 69  k=0; k<n; k++) i
12560 66 28 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3e 6d  f( aPermute[k]>m
12570 78 20 29 20 6d 78 20 3d 20 61 50 65 72 6d 75 74  x ) mx = aPermut
12580 65 5b 6b 5d 3b 0a 20 20 20 20 61 73 73 65 72 74  e[k];.    assert
12590 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6d 78 3c  ( p1>0 && p1+mx<
125a0 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
125b0 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20  >nCursor)+1 );. 
125c0 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20     assert( p2>0 
125d0 26 26 20 70 32 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d  && p2+mx<=(p->nM
125e0 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
125f0 72 29 2b 31 20 29 3b 0a 20 20 7d 65 6c 73 65 7b  r)+1 );.  }else{
12600 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e  .    assert( p1>
12610 30 20 26 26 20 70 31 2b 6e 3c 3d 28 70 2d 3e 6e  0 && p1+n<=(p->n
12620 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
12630 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20 61 73 73  or)+1 );.    ass
12640 65 72 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b  ert( p2>0 && p2+
12650 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  n<=(p->nMem+1 - 
12660 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
12670 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  .  }.#endif /* S
12680 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20  QLITE_DEBUG */. 
12690 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69   for(i=0; i<n; i
126a0 2b 2b 29 7b 0a 20 20 20 20 69 64 78 20 3d 20 61  ++){.    idx = a
126b0 50 65 72 6d 75 74 65 20 3f 20 61 50 65 72 6d 75  Permute ? aPermu
126c0 74 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20 61  te[i] : i;.    a
126d0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
126e0 64 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29  d(&aMem[p1+idx])
126f0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
12700 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
12710 5b 70 32 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20  [p2+idx]) );.   
12720 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
12730 70 31 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70 31  p1+idx, &aMem[p1
12740 2b 69 64 78 5d 29 3b 0a 20 20 20 20 52 45 47 49  +idx]);.    REGI
12750 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b 69 64  STER_TRACE(p2+id
12760 78 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d  x, &aMem[p2+idx]
12770 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69  );.    assert( i
12780 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e 4b 65 79 46  <pKeyInfo->nKeyF
12790 69 65 6c 64 20 29 3b 0a 20 20 20 20 70 43 6f 6c  ield );.    pCol
127a0 6c 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 43  l = pKeyInfo->aC
127b0 6f 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52 65 76  oll[i];.    bRev
127c0 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f   = pKeyInfo->aSo
127d0 72 74 4f 72 64 65 72 5b 69 5d 3b 0a 20 20 20 20  rtOrder[i];.    
127e0 69 43 6f 6d 70 61 72 65 20 3d 20 73 71 6c 69 74  iCompare = sqlit
127f0 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 26 61 4d  e3MemCompare(&aM
12800 65 6d 5b 70 31 2b 69 64 78 5d 2c 20 26 61 4d 65  em[p1+idx], &aMe
12810 6d 5b 70 32 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c  m[p2+idx], pColl
12820 29 3b 0a 20 20 20 20 69 66 28 20 69 43 6f 6d 70  );.    if( iComp
12830 61 72 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28  are ){.      if(
12840 20 62 52 65 76 20 29 20 69 43 6f 6d 70 61 72 65   bRev ) iCompare
12850 20 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20 20   = -iCompare;.  
12860 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
12870 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
12880 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d 70  ./* Opcode: Jump
12890 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
128a0 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20  .** Jump to the 
128b0 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20 61  instruction at a
128c0 64 64 72 65 73 73 20 50 31 2c 20 50 32 2c 20 6f  ddress P1, P2, o
128d0 72 20 50 33 20 64 65 70 65 6e 64 69 6e 67 20 6f  r P3 depending o
128e0 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e 20  n whether.** in 
128f0 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  the most recent 
12900 4f 50 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74 72  OP_Compare instr
12910 75 63 74 69 6f 6e 20 74 68 65 20 50 31 20 76 65  uction the P1 ve
12920 63 74 6f 72 20 77 61 73 20 6c 65 73 73 20 74 68  ctor was less th
12930 61 6e 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c 20  an.** equal to, 
12940 6f 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  or greater than 
12950 74 68 65 20 50 32 20 76 65 63 74 6f 72 2c 20 72  the P2 vector, r
12960 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a  espectively..*/.
12970 63 61 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20  case OP_Jump: { 
12980 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
12990 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 69 43 6f  ump */.  if( iCo
129a0 6d 70 61 72 65 3c 30 20 29 7b 0a 20 20 20 20 56  mpare<0 ){.    V
129b0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30  dbeBranchTaken(0
129c0 2c 34 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b  ,4); pOp = &aOp[
129d0 70 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20 20  pOp->p1 - 1];.  
129e0 7d 65 6c 73 65 20 69 66 28 20 69 43 6f 6d 70 61  }else if( iCompa
129f0 72 65 3d 3d 30 20 29 7b 0a 20 20 20 20 56 64 62  re==0 ){.    Vdb
12a00 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 34  eBranchTaken(1,4
12a10 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f  ); pOp = &aOp[pO
12a20 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 7d 65  p->p2 - 1];.  }e
12a30 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61  lse{.    VdbeBra
12a40 6e 63 68 54 61 6b 65 6e 28 32 2c 34 29 3b 20 70  nchTaken(2,4); p
12a50 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70  Op = &aOp[pOp->p
12a60 33 20 2d 20 31 5d 3b 0a 20 20 7d 0a 20 20 62 72  3 - 1];.  }.  br
12a70 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
12a80 65 3a 20 41 6e 64 20 50 31 20 50 32 20 50 33 20  e: And P1 P2 P3 
12a90 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
12aa0 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 26 26   r[P3]=(r[P1] &&
12ab0 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61   r[P2]).**.** Ta
12ac0 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 41  ke the logical A
12ad0 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73  ND of the values
12ae0 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31   in registers P1
12af0 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 77   and P2 and.** w
12b00 72 69 74 65 20 74 68 65 20 72 65 73 75 6c 74 20  rite the result 
12b10 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33  into register P3
12b20 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65  ..**.** If eithe
12b30 72 20 50 31 20 6f 72 20 50 32 20 69 73 20 30 20  r P1 or P2 is 0 
12b40 28 66 61 6c 73 65 29 20 74 68 65 6e 20 74 68 65  (false) then the
12b50 20 72 65 73 75 6c 74 20 69 73 20 30 20 65 76 65   result is 0 eve
12b60 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 74 68 65  n if.** the othe
12b70 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e  r input is NULL.
12b80 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 74 72 75    A NULL and tru
12b90 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 20 67  e or two NULLs g
12ba0 69 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75  ive.** a NULL ou
12bb0 74 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tput..*/./* Opco
12bc0 64 65 3a 20 4f 72 20 50 31 20 50 32 20 50 33 20  de: Or P1 P2 P3 
12bd0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
12be0 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 7c 7c   r[P3]=(r[P1] ||
12bf0 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61   r[P2]).**.** Ta
12c00 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 4f  ke the logical O
12c10 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  R of the values 
12c20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
12c30 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f  nd P2 and.** sto
12c40 72 65 20 74 68 65 20 61 6e 73 77 65 72 20 69 6e  re the answer in
12c50 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
12c60 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50 31  .** If either P1
12c70 20 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a 65 72   or P2 is nonzer
12c80 6f 20 28 74 72 75 65 29 20 74 68 65 6e 20 74 68  o (true) then th
12c90 65 20 72 65 73 75 6c 74 20 69 73 20 31 20 28 74  e result is 1 (t
12ca0 72 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69 66 20  rue).** even if 
12cb0 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20  the other input 
12cc0 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c  is NULL.  A NULL
12cd0 20 61 6e 64 20 66 61 6c 73 65 20 6f 72 20 74 77   and false or tw
12ce0 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76 65 20  o NULLs.** give 
12cf0 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a  a NULL output..*
12d00 2f 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a 20 20  /.case OP_And:  
12d10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
12d20 61 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c 20 69  ame as TK_AND, i
12d30 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
12d40 0a 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b 20 20  .case OP_Or: {  
12d50 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
12d60 6d 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69 6e 31  me as TK_OR, in1
12d70 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in2, out3 */. 
12d80 20 69 6e 74 20 76 31 3b 20 20 20 20 2f 2a 20 4c   int v1;    /* L
12d90 65 66 74 20 6f 70 65 72 61 6e 64 3a 20 20 30 3d  eft operand:  0=
12da0 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c  =FALSE, 1==TRUE,
12db0 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e   2==UNKNOWN or N
12dc0 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 76 32 3b  ULL */.  int v2;
12dd0 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 70 65      /* Right ope
12de0 72 61 6e 64 3a 20 30 3d 3d 46 41 4c 53 45 2c 20  rand: 0==FALSE, 
12df0 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e  1==TRUE, 2==UNKN
12e00 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a  OWN or NULL */..
12e10 20 20 76 31 20 3d 20 73 71 6c 69 74 65 33 56 64    v1 = sqlite3Vd
12e20 62 65 42 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 26  beBooleanValue(&
12e30 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 32  aMem[pOp->p1], 2
12e40 29 3b 0a 20 20 76 32 20 3d 20 73 71 6c 69 74 65  );.  v2 = sqlite
12e50 33 56 64 62 65 42 6f 6f 6c 65 61 6e 56 61 6c 75  3VdbeBooleanValu
12e60 65 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  e(&aMem[pOp->p2]
12e70 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  , 2);.  if( pOp-
12e80 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20  >opcode==OP_And 
12e90 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  ){.    static co
12ea0 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
12eb0 72 20 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20  r and_logic[] = 
12ec0 7b 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c  { 0, 0, 0, 0, 1,
12ed0 20 32 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20   2, 0, 2, 2 };. 
12ee0 20 20 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69     v1 = and_logi
12ef0 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65  c[v1*3+v2];.  }e
12f00 6c 73 65 7b 0a 20 20 20 20 73 74 61 74 69 63 20  lse{.    static 
12f10 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
12f20 68 61 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d  har or_logic[] =
12f30 20 7b 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31   { 0, 1, 2, 1, 1
12f40 2c 20 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a  , 1, 2, 1, 2 };.
12f50 20 20 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69      v1 = or_logi
12f60 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a  c[v1*3+v2];.  }.
12f70 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
12f80 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 76  Op->p3];.  if( v
12f90 31 3d 3d 32 20 29 7b 0a 20 20 20 20 4d 65 6d 53  1==2 ){.    MemS
12fa0 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
12fb0 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65   MEM_Null);.  }e
12fc0 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  lse{.    pOut->u
12fd0 2e 69 20 3d 20 76 31 3b 0a 20 20 20 20 4d 65 6d  .i = v1;.    Mem
12fe0 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
12ff0 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a  , MEM_Int);.  }.
13000 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
13010 70 63 6f 64 65 3a 20 49 73 54 72 75 65 20 50 31  pcode: IsTrue P1
13020 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
13030 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 20 3d  ynopsis: r[P2] =
13040 20 63 6f 61 6c 65 73 63 65 28 72 5b 50 31 5d 3d   coalesce(r[P1]=
13050 3d 54 52 55 45 2c 50 33 29 20 5e 20 50 34 0a 2a  =TRUE,P3) ^ P4.*
13060 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
13070 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20   implements the 
13080 49 53 20 54 52 55 45 2c 20 49 53 20 46 41 4c 53  IS TRUE, IS FALS
13090 45 2c 20 49 53 20 4e 4f 54 20 54 52 55 45 2c 20  E, IS NOT TRUE, 
130a0 61 6e 64 0a 2a 2a 20 49 53 20 4e 4f 54 20 46 41  and.** IS NOT FA
130b0 4c 53 45 20 6f 70 65 72 61 74 6f 72 73 2e 0a 2a  LSE operators..*
130c0 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
130d0 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
130e0 73 74 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f  ster P1 as a boo
130f0 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f  lean value.  Sto
13100 72 65 20 74 68 61 74 0a 2a 2a 20 62 6f 6f 6c 65  re that.** boole
13110 61 6e 20 28 61 20 30 20 6f 72 20 31 29 20 69 6e  an (a 0 or 1) in
13120 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 4f   register P2.  O
13130 72 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  r if the value i
13140 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
13150 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   .** NULL, then 
13160 74 68 65 20 50 33 20 69 73 20 73 74 6f 72 65 64  the P3 is stored
13170 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
13180 20 20 49 6e 76 65 72 74 20 74 68 65 20 61 6e 73    Invert the ans
13190 77 65 72 20 69 66 20 50 34 0a 2a 2a 20 69 73 20  wer if P4.** is 
131a0 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c 6f 67  1..**.** The log
131b0 69 63 20 69 73 20 73 75 6d 6d 61 72 69 7a 65 64  ic is summarized
131c0 20 6c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a   like this:.**.*
131d0 2a 20 3c 75 6c 3e 20 0a 2a 2a 20 3c 6c 69 3e 20  * <ul> .** <li> 
131e0 49 66 20 50 33 3d 3d 30 20 61 6e 64 20 50 34 3d  If P3==0 and P4=
131f0 3d 30 20 20 74 68 65 6e 20 20 72 5b 50 32 5d 20  =0  then  r[P2] 
13200 3a 3d 20 72 5b 50 31 5d 20 49 53 20 54 52 55 45  := r[P1] IS TRUE
13210 0a 2a 2a 20 3c 6c 69 3e 20 49 66 20 50 33 3d 3d  .** <li> If P3==
13220 31 20 61 6e 64 20 50 34 3d 3d 31 20 20 74 68 65  1 and P4==1  the
13230 6e 20 20 72 5b 50 32 5d 20 3a 3d 20 72 5b 50 31  n  r[P2] := r[P1
13240 5d 20 49 53 20 46 41 4c 53 45 0a 2a 2a 20 3c 6c  ] IS FALSE.** <l
13250 69 3e 20 49 66 20 50 33 3d 3d 30 20 61 6e 64 20  i> If P3==0 and 
13260 50 34 3d 3d 31 20 20 74 68 65 6e 20 20 72 5b 50  P4==1  then  r[P
13270 32 5d 20 3a 3d 20 72 5b 50 31 5d 20 49 53 20 4e  2] := r[P1] IS N
13280 4f 54 20 54 52 55 45 0a 2a 2a 20 3c 6c 69 3e 20  OT TRUE.** <li> 
13290 49 66 20 50 33 3d 3d 31 20 61 6e 64 20 50 34 3d  If P3==1 and P4=
132a0 3d 30 20 20 74 68 65 6e 20 20 72 5b 50 32 5d 20  =0  then  r[P2] 
132b0 3a 3d 20 72 5b 50 31 5d 20 49 53 20 4e 4f 54 20  := r[P1] IS NOT 
132c0 46 41 4c 53 45 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a  FALSE.** </ul>.*
132d0 2f 0a 63 61 73 65 20 4f 50 5f 49 73 54 72 75 65  /.case OP_IsTrue
132e0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
132f0 20 20 2f 2a 20 69 6e 31 2c 20 6f 75 74 32 20 2a    /* in1, out2 *
13300 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
13310 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
13320 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  2 );.  assert( p
13330 4f 70 2d 3e 70 34 2e 69 3d 3d 30 20 7c 7c 20 70  Op->p4.i==0 || p
13340 4f 70 2d 3e 70 34 2e 69 3d 3d 31 20 29 3b 0a 20  Op->p4.i==1 );. 
13350 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
13360 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 33 3d 3d  ==0 || pOp->p3==
13370 31 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  1 );.  sqlite3Vd
13380 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61  beMemSetInt64(&a
13390 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 2c 0a 20 20  Mem[pOp->p2],.  
133a0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 42      sqlite3VdbeB
133b0 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 26 61 4d 65  ooleanValue(&aMe
133c0 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 70 4f 70 2d  m[pOp->p1], pOp-
133d0 3e 70 33 29 20 5e 20 70 4f 70 2d 3e 70 34 2e 69  >p3) ^ pOp->p4.i
133e0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
133f0 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 20 50 31  * Opcode: Not P1
13400 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
13410 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 20 21 72  opsis: r[P2]= !r
13420 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72  [P1].**.** Inter
13430 70 72 65 74 20 74 68 65 20 76 61 6c 75 65 20 69  pret the value i
13440 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 73  n register P1 as
13450 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65   a boolean value
13460 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20  .  Store the.** 
13470 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d 65  boolean compleme
13480 6e 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  nt in register P
13490 32 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  2.  If the value
134a0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
134b0 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65  is .** NULL, the
134c0 6e 20 61 20 4e 55 4c 4c 20 69 73 20 73 74 6f 72  n a NULL is stor
134d0 65 64 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73  ed in P2..*/.cas
134e0 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20 20 20  e OP_Not: {     
134f0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
13500 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e  me as TK_NOT, in
13510 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e  1, out2 */.  pIn
13520 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
13530 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  1];.  pOut = &aM
13540 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69  em[pOp->p2];.  i
13550 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
13560 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
13570 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
13580 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75  eMemSetInt64(pOu
13590 74 2c 20 21 73 71 6c 69 74 65 33 56 64 62 65 42  t, !sqlite3VdbeB
135a0 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 70 49 6e 31  ooleanValue(pIn1
135b0 2c 30 29 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ,0));.  }else{. 
135c0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
135d0 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
135e0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
135f0 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4e 6f  /* Opcode: BitNo
13600 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
13610 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
13620 3d 20 7e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49  = ~r[P1].**.** I
13630 6e 74 65 72 70 72 65 74 20 74 68 65 20 63 6f 6e  nterpret the con
13640 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
13650 20 50 31 20 61 73 20 61 6e 20 69 6e 74 65 67 65   P1 as an intege
13660 72 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a  r.  Store the.**
13670 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74   ones-complement
13680 20 6f 66 20 74 68 65 20 50 31 20 76 61 6c 75 65   of the P1 value
13690 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
136a0 32 2e 20 20 49 66 20 50 31 20 68 6f 6c 64 73 0a  2.  If P1 holds.
136b0 2a 2a 20 61 20 4e 55 4c 4c 20 74 68 65 6e 20 73  ** a NULL then s
136c0 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 50  tore a NULL in P
136d0 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69  2..*/.case OP_Bi
136e0 74 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20  tNot: {         
136f0 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
13700 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e 31 2c 20 6f  K_BITNOT, in1, o
13710 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  ut2 */.  pIn1 = 
13720 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
13730 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
13740 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74  Op->p2];.  sqlit
13750 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
13760 28 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 28 70  (pOut);.  if( (p
13770 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
13780 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Null)==0 ){.   
13790 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
137a0 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74  EM_Int;.    pOut
137b0 2d 3e 75 2e 69 20 3d 20 7e 73 71 6c 69 74 65 33  ->u.i = ~sqlite3
137c0 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
137d0 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  1);.  }.  break;
137e0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
137f0 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  nce P1 P2 * * *.
13800 2a 2a 0a 2a 2a 20 46 61 6c 6c 20 74 68 72 6f 75  **.** Fall throu
13810 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
13820 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 65 20 66  nstruction the f
13830 69 72 73 74 20 74 69 6d 65 20 74 68 69 73 20 6f  irst time this o
13840 70 63 6f 64 65 20 69 73 0a 2a 2a 20 65 6e 63 6f  pcode is.** enco
13850 75 6e 74 65 72 65 64 20 6f 6e 20 65 61 63 68 20  untered on each 
13860 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68  invocation of th
13870 65 20 62 79 74 65 2d 63 6f 64 65 20 70 72 6f 67  e byte-code prog
13880 72 61 6d 2e 20 20 4a 75 6d 70 20 74 6f 20 50 32  ram.  Jump to P2
13890 0a 2a 2a 20 6f 6e 20 74 68 65 20 73 65 63 6f 6e  .** on the secon
138a0 64 20 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71  d and all subseq
138b0 75 65 6e 74 20 65 6e 63 6f 75 6e 74 65 72 73 20  uent encounters 
138c0 64 75 72 69 6e 67 20 74 68 65 20 73 61 6d 65 20  during the same 
138d0 69 6e 76 6f 63 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  invocation..**.*
138e0 2a 20 54 6f 70 2d 6c 65 76 65 6c 20 70 72 6f 67  * Top-level prog
138f0 72 61 6d 73 20 64 65 74 65 72 6d 69 6e 65 20 66  rams determine f
13900 69 72 73 74 20 69 6e 76 6f 63 61 74 69 6f 6e 20  irst invocation 
13910 62 79 20 63 6f 6d 70 61 72 69 6e 67 20 74 68 65  by comparing the
13920 20 50 31 0a 2a 2a 20 6f 70 65 72 61 6e 64 20 61   P1.** operand a
13930 67 61 69 6e 73 74 20 74 68 65 20 50 31 20 6f 70  gainst the P1 op
13940 65 72 61 6e 64 20 6f 6e 20 74 68 65 20 4f 50 5f  erand on the OP_
13950 49 6e 69 74 20 6f 70 63 6f 64 65 20 61 74 20 74  Init opcode at t
13960 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 2a 2a 20  he beginning.** 
13970 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20  of the program. 
13980 20 49 66 20 74 68 65 20 50 31 20 76 61 6c 75 65   If the P1 value
13990 73 20 64 69 66 66 65 72 2c 20 74 68 65 6e 20 66  s differ, then f
139a0 61 6c 6c 20 74 68 72 6f 75 67 68 20 61 6e 64 20  all through and 
139b0 6d 61 6b 65 0a 2a 2a 20 74 68 65 20 50 31 20 6f  make.** the P1 o
139c0 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20 65 71  f this opcode eq
139d0 75 61 6c 20 74 6f 20 74 68 65 20 50 31 20 6f 66  ual to the P1 of
139e0 20 4f 50 5f 49 6e 69 74 2e 20 20 49 66 20 50 31   OP_Init.  If P1
139f0 20 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20 74   values are.** t
13a00 68 65 20 73 61 6d 65 20 74 68 65 6e 20 74 61 6b  he same then tak
13a10 65 20 74 68 65 20 6a 75 6d 70 2e 0a 2a 2a 0a 2a  e the jump..**.*
13a20 2a 20 46 6f 72 20 73 75 62 70 72 6f 67 72 61 6d  * For subprogram
13a30 73 2c 20 74 68 65 72 65 20 69 73 20 61 20 62 69  s, there is a bi
13a40 74 6d 61 73 6b 20 69 6e 20 74 68 65 20 56 64 62  tmask in the Vdb
13a50 65 46 72 61 6d 65 20 74 68 61 74 20 64 65 74 65  eFrame that dete
13a60 72 6d 69 6e 65 73 0a 2a 2a 20 77 68 65 74 68 65  rmines.** whethe
13a70 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 6a 75 6d  r or not the jum
13a80 70 20 73 68 6f 75 6c 64 20 62 65 20 74 61 6b 65  p should be take
13a90 6e 2e 20 20 54 68 65 20 62 69 74 6d 61 73 6b 20  n.  The bitmask 
13aa0 69 73 20 6e 65 63 65 73 73 61 72 79 0a 2a 2a 20  is necessary.** 
13ab0 62 65 63 61 75 73 65 20 74 68 65 20 73 65 6c 66  because the self
13ac0 2d 61 6c 74 65 72 69 6e 67 20 63 6f 64 65 20 74  -altering code t
13ad0 72 69 63 6b 20 64 6f 65 73 20 6e 6f 74 20 77 6f  rick does not wo
13ae0 72 6b 20 66 6f 72 20 72 65 63 75 72 73 69 76 65  rk for recursive
13af0 0a 2a 2a 20 74 72 69 67 67 65 72 73 2e 0a 2a 2f  .** triggers..*/
13b00 0a 63 61 73 65 20 4f 50 5f 4f 6e 63 65 3a 20 7b  .case OP_Once: {
13b10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
13b20 6a 75 6d 70 20 2a 2f 0a 20 20 75 33 32 20 69 41  jump */.  u32 iA
13b30 64 64 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  ddr;            
13b40 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f      /* Address o
13b50 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  f this instructi
13b60 6f 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  on */.  assert( 
13b70 70 2d 3e 61 4f 70 5b 30 5d 2e 6f 70 63 6f 64 65  p->aOp[0].opcode
13b80 3d 3d 4f 50 5f 49 6e 69 74 20 29 3b 0a 20 20 69  ==OP_Init );.  i
13b90 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a  f( p->pFrame ){.
13ba0 20 20 20 20 69 41 64 64 72 20 3d 20 28 69 6e 74      iAddr = (int
13bb0 29 28 70 4f 70 20 2d 20 70 2d 3e 61 4f 70 29 3b  )(pOp - p->aOp);
13bc0 0a 20 20 20 20 69 66 28 20 28 70 2d 3e 70 46 72  .    if( (p->pFr
13bd0 61 6d 65 2d 3e 61 4f 6e 63 65 5b 69 41 64 64 72  ame->aOnce[iAddr
13be0 2f 38 5d 20 26 20 28 31 3c 3c 28 69 41 64 64 72  /8] & (1<<(iAddr
13bf0 20 26 20 37 29 29 29 21 3d 30 20 29 7b 0a 20 20   & 7)))!=0 ){.  
13c00 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
13c10 6b 65 6e 28 31 2c 20 32 29 3b 0a 20 20 20 20 20  ken(1, 2);.     
13c20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
13c30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e 70  ;.    }.    p->p
13c40 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 5b 69 41 64  Frame->aOnce[iAd
13c50 64 72 2f 38 5d 20 7c 3d 20 31 3c 3c 28 69 41 64  dr/8] |= 1<<(iAd
13c60 64 72 20 26 20 37 29 3b 0a 20 20 7d 65 6c 73 65  dr & 7);.  }else
13c70 7b 0a 20 20 20 20 69 66 28 20 70 2d 3e 61 4f 70  {.    if( p->aOp
13c80 5b 30 5d 2e 70 31 3d 3d 70 4f 70 2d 3e 70 31 20  [0].p1==pOp->p1 
13c90 29 7b 0a 20 20 20 20 20 20 56 64 62 65 42 72 61  ){.      VdbeBra
13ca0 6e 63 68 54 61 6b 65 6e 28 31 2c 20 32 29 3b 0a  nchTaken(1, 2);.
13cb0 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f        goto jump_
13cc0 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20 7d  to_p2;.    }.  }
13cd0 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
13ce0 65 6e 28 30 2c 20 32 29 3b 0a 20 20 70 4f 70 2d  en(0, 2);.  pOp-
13cf0 3e 70 31 20 3d 20 70 2d 3e 61 4f 70 5b 30 5d 2e  >p1 = p->aOp[0].
13d00 70 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  p1;.  break;.}..
13d10 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 20 50 31  /* Opcode: If P1
13d20 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
13d30 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
13d40 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
13d50 73 74 65 72 20 50 31 20 69 73 20 74 72 75 65 2e  ster P1 is true.
13d60 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69    The value.** i
13d70 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74 72 75  s considered tru
13d80 65 20 69 66 20 69 74 20 69 73 20 6e 75 6d 65 72  e if it is numer
13d90 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e  ic and non-zero.
13da0 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
13db0 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20  * in P1 is NULL 
13dc0 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75  then take the ju
13dd0 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69  mp if and only i
13de0 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P3 is non-zero
13df0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 3a  ..*/.case OP_If:
13e00 20 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20    {             
13e10 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
13e20 2f 0a 20 20 69 6e 74 20 63 3b 0a 20 20 63 20 3d  /.  int c;.  c =
13e30 20 73 71 6c 69 74 65 33 56 64 62 65 42 6f 6f 6c   sqlite3VdbeBool
13e40 65 61 6e 56 61 6c 75 65 28 26 61 4d 65 6d 5b 70  eanValue(&aMem[p
13e50 4f 70 2d 3e 70 31 5d 2c 20 70 4f 70 2d 3e 70 33  Op->p1], pOp->p3
13e60 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  );.  VdbeBranchT
13e70 61 6b 65 6e 28 63 21 3d 30 2c 20 32 29 3b 0a 20  aken(c!=0, 2);. 
13e80 20 69 66 28 20 63 20 29 20 67 6f 74 6f 20 6a 75   if( c ) goto ju
13e90 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61  mp_to_p2;.  brea
13ea0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
13eb0 20 49 66 4e 6f 74 20 50 31 20 50 32 20 50 33 20   IfNot P1 P2 P3 
13ec0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74  * *.**.** Jump t
13ed0 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75  o P2 if the valu
13ee0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
13ef0 20 69 73 20 46 61 6c 73 65 2e 20 20 54 68 65 20   is False.  The 
13f00 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73  value.** is cons
13f10 69 64 65 72 65 64 20 66 61 6c 73 65 20 69 66 20  idered false if 
13f20 69 74 20 68 61 73 20 61 20 6e 75 6d 65 72 69 63  it has a numeric
13f30 20 76 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e 20   value of zero. 
13f40 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a   If the value.**
13f50 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74   in P1 is NULL t
13f60 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  hen take the jum
13f70 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66  p if and only if
13f80 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e   P3 is non-zero.
13f90 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f  .*/.case OP_IfNo
13fa0 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
13fb0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
13fc0 20 20 69 6e 74 20 63 3b 0a 20 20 63 20 3d 20 21    int c;.  c = !
13fd0 73 71 6c 69 74 65 33 56 64 62 65 42 6f 6f 6c 65  sqlite3VdbeBoole
13fe0 61 6e 56 61 6c 75 65 28 26 61 4d 65 6d 5b 70 4f  anValue(&aMem[pO
13ff0 70 2d 3e 70 31 5d 2c 20 21 70 4f 70 2d 3e 70 33  p->p1], !pOp->p3
14000 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  );.  VdbeBranchT
14010 61 6b 65 6e 28 63 21 3d 30 2c 20 32 29 3b 0a 20  aken(c!=0, 2);. 
14020 20 69 66 28 20 63 20 29 20 67 6f 74 6f 20 6a 75   if( c ) goto ju
14030 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61  mp_to_p2;.  brea
14040 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
14050 20 49 73 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20   IsNull P1 P2 * 
14060 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
14070 20 69 66 20 72 5b 50 31 5d 3d 3d 4e 55 4c 4c 20   if r[P1]==NULL 
14080 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75  goto P2.**.** Ju
14090 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  mp to P2 if the 
140a0 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
140b0 72 20 50 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  r P1 is NULL..*/
140c0 0a 63 61 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a  .case OP_IsNull:
140d0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
140e0 20 73 61 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55   same as TK_ISNU
140f0 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f  LL, jump, in1 */
14100 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
14110 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56 64 62 65  pOp->p1];.  Vdbe
14120 42 72 61 6e 63 68 54 61 6b 65 6e 28 20 28 70 49  BranchTaken( (pI
14130 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
14140 4e 75 6c 6c 29 21 3d 30 2c 20 32 29 3b 0a 20 20  Null)!=0, 2);.  
14150 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
14160 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20   & MEM_Null)!=0 
14170 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  ){.    goto jump
14180 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
14190 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
141a0 65 3a 20 4e 6f 74 4e 75 6c 6c 20 50 31 20 50 32  e: NotNull P1 P2
141b0 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
141c0 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d 4e 55  is: if r[P1]!=NU
141d0 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  LL goto P2.**.**
141e0 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
141f0 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
14200 73 74 65 72 20 50 31 20 69 73 20 6e 6f 74 20 4e  ster P1 is not N
14210 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f  ULL.  .*/.case O
14220 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20 20  P_NotNull: {    
14230 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
14240 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a  as TK_NOTNULL, j
14250 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
14260 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
14270 70 31 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  p1];.  VdbeBranc
14280 68 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66  hTaken( (pIn1->f
14290 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
142a0 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28  ==0, 2);.  if( (
142b0 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
142c0 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20  M_Null)==0 ){.  
142d0 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
142e0 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
142f0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  }../* Opcode: If
14300 4e 75 6c 6c 52 6f 77 20 50 31 20 50 32 20 50 33  NullRow P1 P2 P3
14310 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
14320 3a 20 69 66 20 50 31 2e 6e 75 6c 6c 52 6f 77 20  : if P1.nullRow 
14330 74 68 65 6e 20 72 5b 50 33 5d 3d 4e 55 4c 4c 2c  then r[P3]=NULL,
14340 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 43   goto P2.**.** C
14350 68 65 63 6b 20 74 68 65 20 63 75 72 73 6f 72 20  heck the cursor 
14360 50 31 20 74 6f 20 73 65 65 20 69 66 20 69 74 20  P1 to see if it 
14370 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
14380 6e 74 69 6e 67 20 61 74 20 61 20 4e 55 4c 4c 20  nting at a NULL 
14390 72 6f 77 2e 0a 2a 2a 20 49 66 20 69 74 20 69 73  row..** If it is
143a0 2c 20 74 68 65 6e 20 73 65 74 20 72 65 67 69 73  , then set regis
143b0 74 65 72 20 50 33 20 74 6f 20 4e 55 4c 4c 20 61  ter P3 to NULL a
143c0 6e 64 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  nd jump immediat
143d0 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66  ely to P2..** If
143e0 20 50 31 20 69 73 20 6e 6f 74 20 6f 6e 20 61 20   P1 is not on a 
143f0 4e 55 4c 4c 20 72 6f 77 2c 20 74 68 65 6e 20 66  NULL row, then f
14400 61 6c 6c 20 74 68 72 6f 75 67 68 20 77 69 74 68  all through with
14410 6f 75 74 20 6d 61 6b 69 6e 67 20 61 6e 79 0a 2a  out making any.*
14420 2a 20 63 68 61 6e 67 65 73 2e 0a 2a 2f 0a 63 61  * changes..*/.ca
14430 73 65 20 4f 50 5f 49 66 4e 75 6c 6c 52 6f 77 3a  se OP_IfNullRow:
14440 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75   {         /* ju
14450 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  mp */.  assert( 
14460 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
14470 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
14480 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
14490 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 21  >apCsr[pOp->p1]!
144a0 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61  =0 );.  if( p->a
144b0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 6e  pCsr[pOp->p1]->n
144c0 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73 71  ullRow ){.    sq
144d0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
144e0 75 6c 6c 28 61 4d 65 6d 20 2b 20 70 4f 70 2d 3e  ull(aMem + pOp->
144f0 70 33 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75  p3);.    goto ju
14500 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
14510 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 64 65 66  break;.}..#ifdef
14520 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4f   SQLITE_ENABLE_O
14530 46 46 53 45 54 5f 53 51 4c 5f 46 55 4e 43 0a 2f  FFSET_SQL_FUNC./
14540 2a 20 4f 70 63 6f 64 65 3a 20 4f 66 66 73 65 74  * Opcode: Offset
14550 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
14560 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
14570 20 3d 20 73 71 6c 69 74 65 5f 6f 66 66 73 65 74   = sqlite_offset
14580 28 50 31 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65  (P1).**.** Store
14590 20 69 6e 20 72 65 67 69 73 74 65 72 20 72 5b 50   in register r[P
145a0 33 5d 20 74 68 65 20 62 79 74 65 20 6f 66 66 73  3] the byte offs
145b0 65 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61  et into the data
145c0 62 61 73 65 20 66 69 6c 65 20 74 68 61 74 20 69  base file that i
145d0 73 20 74 68 65 0a 2a 2a 20 73 74 61 72 74 20 6f  s the.** start o
145e0 66 20 74 68 65 20 70 61 79 6c 6f 61 64 20 66 6f  f the payload fo
145f0 72 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 20  r the record at 
14600 77 68 69 63 68 20 74 68 61 74 20 63 75 72 73 6f  which that curso
14610 72 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c  r P1 is currentl
14620 79 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a  y.** pointing..*
14630 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20 63  *.** P2 is the c
14640 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72  olumn number for
14650 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f   the argument to
14660 20 74 68 65 20 73 71 6c 69 74 65 5f 6f 66 66 73   the sqlite_offs
14670 65 74 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a  et() function..*
14680 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f  * This opcode do
14690 65 73 20 6e 6f 74 20 75 73 65 20 50 32 20 69 74  es not use P2 it
146a0 73 65 6c 66 2c 20 62 75 74 20 74 68 65 20 50 32  self, but the P2
146b0 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20 62   value is used b
146c0 79 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20 67 65  y the.** code ge
146d0 6e 65 72 61 74 6f 72 2e 20 20 54 68 65 20 50 31  nerator.  The P1
146e0 2c 20 50 32 2c 20 61 6e 64 20 50 33 20 6f 70 65  , P2, and P3 ope
146f0 72 61 6e 64 73 20 74 6f 20 74 68 69 73 20 6f 70  rands to this op
14700 63 6f 64 65 20 61 72 65 20 74 68 65 0a 2a 2a 20  code are the.** 
14710 73 61 6d 65 20 61 73 20 66 6f 72 20 4f 50 5f 43  same as for OP_C
14720 6f 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  olumn..**.** Thi
14730 73 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79  s opcode is only
14740 20 61 76 61 69 6c 61 62 6c 65 20 69 66 20 53 51   available if SQ
14750 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64  Lite is compiled
14760 20 77 69 74 68 20 74 68 65 0a 2a 2a 20 2d 44 53   with the.** -DS
14770 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4f 46 46  QLITE_ENABLE_OFF
14780 53 45 54 5f 53 51 4c 5f 46 55 4e 43 20 6f 70 74  SET_SQL_FUNC opt
14790 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
147a0 4f 66 66 73 65 74 3a 20 7b 20 20 20 20 20 20 20  Offset: {       
147b0 20 20 20 2f 2a 20 6f 75 74 33 20 2a 2f 0a 20 20     /* out3 */.  
147c0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20  VdbeCursor *pC; 
147d0 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63     /* The VDBE c
147e0 75 72 73 6f 72 20 2a 2f 0a 20 20 61 73 73 65 72  ursor */.  asser
147f0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
14800 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
14810 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
14820 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
14830 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d  .  pOut = &p->aM
14840 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
14850 66 28 20 4e 45 56 45 52 28 70 43 3d 3d 30 29 20  f( NEVER(pC==0) 
14860 7c 7c 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21  || pC->eCurType!
14870 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
14880 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
14890 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
148a0 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
148b0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
148c0 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 73 71 6c  tInt64(pOut, sql
148d0 69 74 65 33 42 74 72 65 65 4f 66 66 73 65 74 28  ite3BtreeOffset(
148e0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 29  pC->uc.pCursor))
148f0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
14900 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
14910 45 5f 45 4e 41 42 4c 45 5f 4f 46 46 53 45 54 5f  E_ENABLE_OFFSET_
14920 53 51 4c 5f 46 55 4e 43 20 2a 2f 0a 0a 2f 2a 20  SQL_FUNC */../* 
14930 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 20 50  Opcode: Column P
14940 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
14950 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
14960 3d 50 58 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70  =PX.**.** Interp
14970 72 65 74 20 74 68 65 20 64 61 74 61 20 74 68 61  ret the data tha
14980 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e  t cursor P1 poin
14990 74 73 20 74 6f 20 61 73 20 61 20 73 74 72 75 63  ts to as a struc
149a0 74 75 72 65 20 62 75 69 6c 74 20 75 73 69 6e 67  ture built using
149b0 0a 2a 2a 20 74 68 65 20 4d 61 6b 65 52 65 63 6f  .** the MakeReco
149c0 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  rd instruction. 
149d0 20 28 53 65 65 20 74 68 65 20 4d 61 6b 65 52 65   (See the MakeRe
149e0 63 6f 72 64 20 6f 70 63 6f 64 65 20 66 6f 72 20  cord opcode for 
149f0 61 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e  additional.** in
14a00 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
14a10 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68  the format of th
14a20 65 20 64 61 74 61 2e 29 20 20 45 78 74 72 61 63  e data.)  Extrac
14a30 74 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75  t the P2-th colu
14a40 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68 69 73 20  mn.** from this 
14a50 72 65 63 6f 72 64 2e 20 20 49 66 20 74 68 65 72  record.  If ther
14a60 65 20 61 72 65 20 6c 65 73 73 20 74 68 61 74 20  e are less that 
14a70 28 50 32 2b 31 29 20 0a 2a 2a 20 76 61 6c 75 65  (P2+1) .** value
14a80 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c  s in the record,
14a90 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e   extract a NULL.
14aa0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65  .**.** The value
14ab0 20 65 78 74 72 61 63 74 65 64 20 69 73 20 73 74   extracted is st
14ac0 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
14ad0 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   P3..**.** If th
14ae0 65 20 72 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e  e record contain
14af0 73 20 66 65 77 65 72 20 74 68 61 6e 20 50 32 20  s fewer than P2 
14b00 66 69 65 6c 64 73 2c 20 74 68 65 6e 20 65 78 74  fields, then ext
14b10 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20 20 4f 72  ract a NULL.  Or
14b20 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50 34 20 61  ,.** if the P4 a
14b30 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50 34 5f  rgument is a P4_
14b40 4d 45 4d 20 75 73 65 20 74 68 65 20 76 61 6c 75  MEM use the valu
14b50 65 20 6f 66 20 74 68 65 20 50 34 20 61 72 67 75  e of the P4 argu
14b60 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68 65 20 72  ment as.** the r
14b70 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  esult..**.** If 
14b80 74 68 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41 52  the OPFLAG_CLEAR
14b90 43 41 43 48 45 20 62 69 74 20 69 73 20 73 65 74  CACHE bit is set
14ba0 20 6f 6e 20 50 35 20 61 6e 64 20 50 31 20 69 73   on P5 and P1 is
14bb0 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20   a pseudo-table 
14bc0 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 6e 20  cursor,.** then 
14bd0 74 68 65 20 63 61 63 68 65 20 6f 66 20 74 68 65  the cache of the
14be0 20 63 75 72 73 6f 72 20 69 73 20 72 65 73 65 74   cursor is reset
14bf0 20 70 72 69 6f 72 20 74 6f 20 65 78 74 72 61 63   prior to extrac
14c00 74 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  ting the column.
14c10 0a 2a 2a 20 54 68 65 20 66 69 72 73 74 20 4f 50  .** The first OP
14c20 5f 43 6f 6c 75 6d 6e 20 61 67 61 69 6e 73 74 20  _Column against 
14c30 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 61  a pseudo-table a
14c40 66 74 65 72 20 74 68 65 20 76 61 6c 75 65 20 6f  fter the value o
14c50 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a  f the content.**
14c60 20 72 65 67 69 73 74 65 72 20 68 61 73 20 63 68   register has ch
14c70 61 6e 67 65 64 20 73 68 6f 75 6c 64 20 68 61 76  anged should hav
14c80 65 20 74 68 69 73 20 62 69 74 20 73 65 74 2e 0a  e this bit set..
14c90 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
14ca0 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e  LAG_LENGTHARG an
14cb0 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41  d OPFLAG_TYPEOFA
14cc0 52 47 20 62 69 74 73 20 61 72 65 20 73 65 74 20  RG bits are set 
14cd0 6f 6e 20 50 35 20 74 68 65 6e 0a 2a 2a 20 74 68  on P5 then.** th
14ce0 65 20 72 65 73 75 6c 74 20 69 73 20 67 75 61 72  e result is guar
14cf0 61 6e 74 65 65 64 20 74 6f 20 6f 6e 6c 79 20 62  anteed to only b
14d00 65 20 75 73 65 64 20 61 73 20 74 68 65 20 61 72  e used as the ar
14d10 67 75 6d 65 6e 74 20 6f 66 20 61 20 6c 65 6e 67  gument of a leng
14d20 74 68 28 29 0a 2a 2a 20 6f 72 20 74 79 70 65 6f  th().** or typeo
14d30 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20 72 65  f() function, re
14d40 73 70 65 63 74 69 76 65 6c 79 2e 20 20 54 68 65  spectively.  The
14d50 20 6c 6f 61 64 69 6e 67 20 6f 66 20 6c 61 72 67   loading of larg
14d60 65 20 62 6c 6f 62 73 20 63 61 6e 20 62 65 0a 2a  e blobs can be.*
14d70 2a 20 73 6b 69 70 70 65 64 20 66 6f 72 20 6c 65  * skipped for le
14d80 6e 67 74 68 28 29 20 61 6e 64 20 61 6c 6c 20 63  ngth() and all c
14d90 6f 6e 74 65 6e 74 20 6c 6f 61 64 69 6e 67 20 63  ontent loading c
14da0 61 6e 20 62 65 20 73 6b 69 70 70 65 64 20 66 6f  an be skipped fo
14db0 72 20 74 79 70 65 6f 66 28 29 2e 0a 2a 2f 0a 63  r typeof()..*/.c
14dc0 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b  ase OP_Column: {
14dd0 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20  .  int p2;      
14de0 20 20 20 20 20 20 2f 2a 20 63 6f 6c 75 6d 6e 20        /* column 
14df0 6e 75 6d 62 65 72 20 74 6f 20 72 65 74 72 69 65  number to retrie
14e00 76 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  ve */.  VdbeCurs
14e10 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68  or *pC;    /* Th
14e20 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 2a 2f  e VDBE cursor */
14e30 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
14e40 73 72 3b 20 20 20 2f 2a 20 54 68 65 20 42 54 72  sr;   /* The BTr
14e50 65 65 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 75  ee cursor */.  u
14e60 33 32 20 2a 61 4f 66 66 73 65 74 3b 20 20 20 20  32 *aOffset;    
14e70 20 20 2f 2a 20 61 4f 66 66 73 65 74 5b 69 5d 20    /* aOffset[i] 
14e80 69 73 20 6f 66 66 73 65 74 20 74 6f 20 73 74 61  is offset to sta
14e90 72 74 20 6f 66 20 64 61 74 61 20 66 6f 72 20 69  rt of data for i
14ea0 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  -th column */.  
14eb0 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20  int len;        
14ec0 20 20 20 2f 2a 20 54 68 65 20 6c 65 6e 67 74 68     /* The length
14ed0 20 6f 66 20 74 68 65 20 73 65 72 69 61 6c 69 7a   of the serializ
14ee0 65 64 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  ed data for the 
14ef0 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20  column */.  int 
14f00 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  i;             /
14f10 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a  * Loop counter *
14f20 2f 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 20  /.  Mem *pDest; 
14f30 20 20 20 20 20 20 20 2f 2a 20 57 68 65 72 65 20         /* Where 
14f40 74 6f 20 77 72 69 74 65 20 74 68 65 20 65 78 74  to write the ext
14f50 72 61 63 74 65 64 20 76 61 6c 75 65 20 2a 2f 0a  racted value */.
14f60 20 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20    Mem sMem;     
14f70 20 20 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72       /* For stor
14f80 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20 62  ing the record b
14f90 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a  eing decoded */.
14fa0 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 44 61 74    const u8 *zDat
14fb0 61 3b 20 20 20 2f 2a 20 50 61 72 74 20 6f 66 20  a;   /* Part of 
14fc0 74 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67  the record being
14fd0 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f   decoded */.  co
14fe0 6e 73 74 20 75 38 20 2a 7a 48 64 72 3b 20 20 20  nst u8 *zHdr;   
14ff0 20 2f 2a 20 4e 65 78 74 20 75 6e 70 61 72 73 65   /* Next unparse
15000 64 20 62 79 74 65 20 6f 66 20 74 68 65 20 68 65  d byte of the he
15010 61 64 65 72 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  ader */.  const 
15020 75 38 20 2a 7a 45 6e 64 48 64 72 3b 20 2f 2a 20  u8 *zEndHdr; /* 
15030 50 6f 69 6e 74 65 72 20 74 6f 20 66 69 72 73 74  Pointer to first
15040 20 62 79 74 65 20 61 66 74 65 72 20 74 68 65 20   byte after the 
15050 68 65 61 64 65 72 20 2a 2f 0a 20 20 75 36 34 20  header */.  u64 
15060 6f 66 66 73 65 74 36 34 3b 20 20 20 20 20 20 2f  offset64;      /
15070 2a 20 36 34 2d 62 69 74 20 6f 66 66 73 65 74 20  * 64-bit offset 
15080 2a 2f 0a 20 20 75 33 32 20 74 3b 20 20 20 20 20  */.  u32 t;     
15090 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74 79 70          /* A typ
150a0 65 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20  e code from the 
150b0 72 65 63 6f 72 64 20 68 65 61 64 65 72 20 2a 2f  record header */
150c0 0a 20 20 4d 65 6d 20 2a 70 52 65 67 3b 20 20 20  .  Mem *pReg;   
150d0 20 20 20 20 20 20 2f 2a 20 50 73 65 75 64 6f 54        /* PseudoT
150e0 61 62 6c 65 20 69 6e 70 75 74 20 72 65 67 69 73  able input regis
150f0 74 65 72 20 2a 2f 0a 0a 20 20 70 43 20 3d 20 70  ter */..  pC = p
15100 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
15110 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32  ;.  p2 = pOp->p2
15120 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 63  ;..  /* If the c
15130 75 72 73 6f 72 20 63 61 63 68 65 20 69 73 20 73  ursor cache is s
15140 74 61 6c 65 20 28 6d 65 61 6e 69 6e 67 20 69 74  tale (meaning it
15150 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c   is not currentl
15160 79 20 70 6f 69 6e 74 20 61 74 0a 20 20 2a 2a 20  y point at.  ** 
15170 74 68 65 20 63 6f 72 72 65 63 74 20 72 6f 77 29  the correct row)
15180 20 74 68 65 6e 20 62 72 69 6e 67 20 69 74 20 75   then bring it u
15190 70 2d 74 6f 2d 64 61 74 65 20 62 79 20 64 6f 69  p-to-date by doi
151a0 6e 67 20 74 68 65 20 6e 65 63 65 73 73 61 72 79  ng the necessary
151b0 20 0a 20 20 2a 2a 20 42 2d 54 72 65 65 20 73 65   .  ** B-Tree se
151c0 65 6b 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  ek. */.  rc = sq
151d0 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
151e0 6f 76 65 74 6f 28 26 70 43 2c 20 26 70 32 29 3b  oveto(&pC, &p2);
151f0 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
15200 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
15210 72 6f 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  ror;..  assert( 
15220 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
15230 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p3<=(p->nMem+1
15240 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
15250 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65  ;.  pDest = &aMe
15260 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65  m[pOp->p3];.  me
15270 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
15280 2c 20 70 44 65 73 74 29 3b 0a 20 20 61 73 73 65  , pDest);.  asse
15290 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
152a0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
152b0 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
152c0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
152d0 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e 46 69 65  ert( p2<pC->nFie
152e0 6c 64 20 29 3b 0a 20 20 61 4f 66 66 73 65 74 20  ld );.  aOffset 
152f0 3d 20 70 43 2d 3e 61 4f 66 66 73 65 74 3b 0a 20  = pC->aOffset;. 
15300 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
15310 72 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f 56  rType!=CURTYPE_V
15320 54 41 42 20 29 3b 0a 20 20 61 73 73 65 72 74 28  TAB );.  assert(
15330 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21 3d 43   pC->eCurType!=C
15340 55 52 54 59 50 45 5f 50 53 45 55 44 4f 20 7c 7c  URTYPE_PSEUDO ||
15350 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a   pC->nullRow );.
15360 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
15370 75 72 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f  urType!=CURTYPE_
15380 53 4f 52 54 45 52 20 29 3b 0a 0a 20 20 69 66 28  SORTER );..  if(
15390 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
153a0 21 3d 70 2d 3e 63 61 63 68 65 43 74 72 20 29 7b  !=p->cacheCtr ){
153b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153c0 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49  /*OPTIMIZATION-I
153d0 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20 69 66  F-FALSE*/.    if
153e0 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b  ( pC->nullRow ){
153f0 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 65  .      if( pC->e
15400 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
15410 5f 50 53 45 55 44 4f 20 29 7b 0a 20 20 20 20 20  _PSEUDO ){.     
15420 20 20 20 2f 2a 20 46 6f 72 20 74 68 65 20 73 70     /* For the sp
15430 65 63 69 61 6c 20 63 61 73 65 20 6f 66 20 61 73  ecial case of as
15440 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 2c 20   pseudo-cursor, 
15450 74 68 65 20 73 65 65 6b 52 65 73 75 6c 74 20 66  the seekResult f
15460 69 65 6c 64 0a 20 20 20 20 20 20 20 20 2a 2a 20  ield.        ** 
15470 69 64 65 6e 74 69 66 69 65 73 20 74 68 65 20 72  identifies the r
15480 65 67 69 73 74 65 72 20 74 68 61 74 20 68 6f 6c  egister that hol
15490 64 73 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  ds the record */
154a0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
154b0 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 3e   pC->seekResult>
154c0 30 20 29 3b 0a 20 20 20 20 20 20 20 20 70 52 65  0 );.        pRe
154d0 67 20 3d 20 26 61 4d 65 6d 5b 70 43 2d 3e 73 65  g = &aMem[pC->se
154e0 65 6b 52 65 73 75 6c 74 5d 3b 0a 20 20 20 20 20  ekResult];.     
154f0 20 20 20 61 73 73 65 72 74 28 20 70 52 65 67 2d     assert( pReg-
15500 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f  >flags & MEM_Blo
15510 62 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  b );.        ass
15520 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
15530 70 52 65 67 29 20 29 3b 0a 20 20 20 20 20 20 20  pReg) );.       
15540 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
15550 20 3d 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 70   = pC->szRow = p
15560 52 65 67 2d 3e 6e 3b 0a 20 20 20 20 20 20 20 20  Reg->n;.        
15570 70 43 2d 3e 61 52 6f 77 20 3d 20 28 75 38 2a 29  pC->aRow = (u8*)
15580 70 52 65 67 2d 3e 7a 3b 0a 20 20 20 20 20 20 7d  pReg->z;.      }
15590 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71  else{.        sq
155a0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
155b0 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20  ull(pDest);.    
155c0 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
155d0 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a  mn_out;.      }.
155e0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
155f0 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e   pCrsr = pC->uc.
15600 70 43 75 72 73 6f 72 3b 0a 20 20 20 20 20 20 61  pCursor;.      a
15610 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
15620 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
15630 45 45 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  EE );.      asse
15640 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 20  rt( pCrsr );.   
15650 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
15660 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56  e3BtreeCursorIsV
15670 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a 20  alid(pCrsr) );. 
15680 20 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64       pC->payload
15690 53 69 7a 65 20 3d 20 73 71 6c 69 74 65 33 42 74  Size = sqlite3Bt
156a0 72 65 65 50 61 79 6c 6f 61 64 53 69 7a 65 28 70  reePayloadSize(p
156b0 43 72 73 72 29 3b 0a 20 20 20 20 20 20 70 43 2d  Crsr);.      pC-
156c0 3e 61 52 6f 77 20 3d 20 73 71 6c 69 74 65 33 42  >aRow = sqlite3B
156d0 74 72 65 65 50 61 79 6c 6f 61 64 46 65 74 63 68  treePayloadFetch
156e0 28 70 43 72 73 72 2c 20 26 70 43 2d 3e 73 7a 52  (pCrsr, &pC->szR
156f0 6f 77 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  ow);.      asser
15700 74 28 20 70 43 2d 3e 73 7a 52 6f 77 3c 3d 70 43  t( pC->szRow<=pC
15710 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 29 3b  ->payloadSize );
15720 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
15730 43 2d 3e 73 7a 52 6f 77 3c 3d 36 35 35 33 36 20  C->szRow<=65536 
15740 29 3b 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 70  );  /* Maximum p
15750 61 67 65 20 73 69 7a 65 20 69 73 20 36 34 4b 69  age size is 64Ki
15760 42 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70  B */.      if( p
15770 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3e  C->payloadSize >
15780 20 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74   (u32)db->aLimit
15790 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
157a0 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 20  NGTH] ){.       
157b0 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
157c0 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
157d0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
157e0 20 3d 20 70 2d 3e 63 61 63 68 65 43 74 72 3b 0a   = p->cacheCtr;.
157f0 20 20 20 20 70 43 2d 3e 69 48 64 72 4f 66 66 73      pC->iHdrOffs
15800 65 74 20 3d 20 67 65 74 56 61 72 69 6e 74 33 32  et = getVarint32
15810 28 70 43 2d 3e 61 52 6f 77 2c 20 61 4f 66 66 73  (pC->aRow, aOffs
15820 65 74 5b 30 5d 29 3b 0a 20 20 20 20 70 43 2d 3e  et[0]);.    pC->
15830 6e 48 64 72 50 61 72 73 65 64 20 3d 20 30 3b 0a  nHdrParsed = 0;.
15840 0a 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 73 7a  ..    if( pC->sz
15850 52 6f 77 3c 61 4f 66 66 73 65 74 5b 30 5d 20 29  Row<aOffset[0] )
15860 7b 20 20 20 20 20 20 2f 2a 4f 50 54 49 4d 49 5a  {      /*OPTIMIZ
15870 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f  ATION-IF-FALSE*/
15880 0a 20 20 20 20 20 20 2f 2a 20 70 43 2d 3e 61 52  .      /* pC->aR
15890 6f 77 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65  ow does not have
158a0 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 65 6e 74   to hold the ent
158b0 69 72 65 20 72 6f 77 2c 20 62 75 74 20 69 74 20  ire row, but it 
158c0 64 6f 65 73 20 61 74 20 6c 65 61 73 74 0a 20 20  does at least.  
158d0 20 20 20 20 2a 2a 20 6e 65 65 64 20 74 6f 20 63      ** need to c
158e0 6f 76 65 72 20 74 68 65 20 68 65 61 64 65 72 20  over the header 
158f0 6f 66 20 74 68 65 20 72 65 63 6f 72 64 2e 20 20  of the record.  
15900 49 66 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73  If pC->aRow does
15910 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 0a 20 20 20   not contain.   
15920 20 20 20 2a 2a 20 74 68 65 20 63 6f 6d 70 6c 65     ** the comple
15930 74 65 20 68 65 61 64 65 72 2c 20 74 68 65 6e 20  te header, then 
15940 73 65 74 20 69 74 20 74 6f 20 7a 65 72 6f 2c 20  set it to zero, 
15950 66 6f 72 63 69 6e 67 20 74 68 65 20 68 65 61 64  forcing the head
15960 65 72 20 74 6f 20 62 65 0a 20 20 20 20 20 20 2a  er to be.      *
15970 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c  * dynamically al
15980 6c 6f 63 61 74 65 64 2e 20 2a 2f 0a 20 20 20 20  located. */.    
15990 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a    pC->aRow = 0;.
159a0 20 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20        pC->szRow 
159b0 3d 20 30 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 4d  = 0;..      /* M
159c0 61 6b 65 20 73 75 72 65 20 61 20 63 6f 72 72 75  ake sure a corru
159d0 70 74 20 64 61 74 61 62 61 73 65 20 68 61 73 20  pt database has 
159e0 6e 6f 74 20 67 69 76 65 6e 20 75 73 20 61 6e 20  not given us an 
159f0 6f 76 65 72 73 69 7a 65 20 68 65 61 64 65 72 2e  oversize header.
15a00 0a 20 20 20 20 20 20 2a 2a 20 44 6f 20 74 68 69  .      ** Do thi
15a10 73 20 6e 6f 77 20 74 6f 20 61 76 6f 69 64 20 61  s now to avoid a
15a20 6e 20 6f 76 65 72 73 69 7a 65 20 6d 65 6d 6f 72  n oversize memor
15a30 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20 20  y allocation..  
15a40 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20      **.      ** 
15a50 54 79 70 65 20 65 6e 74 72 69 65 73 20 63 61 6e  Type entries can
15a60 20 62 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e   be between 1 an
15a70 64 20 35 20 62 79 74 65 73 20 65 61 63 68 2e 20  d 5 bytes each. 
15a80 20 42 75 74 20 34 20 61 6e 64 20 35 20 62 79 74   But 4 and 5 byt
15a90 65 0a 20 20 20 20 20 20 2a 2a 20 74 79 70 65 73  e.      ** types
15aa0 20 75 73 65 20 73 6f 20 6d 75 63 68 20 64 61 74   use so much dat
15ab0 61 20 73 70 61 63 65 20 74 68 61 74 20 74 68 65  a space that the
15ac0 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 34  re can only be 4
15ad0 30 39 36 20 61 6e 64 20 33 32 20 6f 66 0a 20 20  096 and 32 of.  
15ae0 20 20 20 20 2a 2a 20 74 68 65 6d 2c 20 72 65 73      ** them, res
15af0 70 65 63 74 69 76 65 6c 79 2e 20 20 53 6f 20 74  pectively.  So t
15b00 68 65 20 6d 61 78 69 6d 75 6d 20 68 65 61 64 65  he maximum heade
15b10 72 20 6c 65 6e 67 74 68 20 72 65 73 75 6c 74 73  r length results
15b20 20 66 72 6f 6d 20 61 0a 20 20 20 20 20 20 2a 2a   from a.      **
15b30 20 33 2d 62 79 74 65 20 74 79 70 65 20 66 6f 72   3-byte type for
15b40 20 65 61 63 68 20 6f 66 20 74 68 65 20 6d 61 78   each of the max
15b50 69 6d 75 6d 20 6f 66 20 33 32 37 36 38 20 63 6f  imum of 32768 co
15b60 6c 75 6d 6e 73 20 70 6c 75 73 20 74 68 72 65 65  lumns plus three
15b70 0a 20 20 20 20 20 20 2a 2a 20 65 78 74 72 61 20  .      ** extra 
15b80 62 79 74 65 73 20 66 6f 72 20 74 68 65 20 68 65  bytes for the he
15b90 61 64 65 72 20 6c 65 6e 67 74 68 20 69 74 73 65  ader length itse
15ba0 6c 66 2e 20 20 33 32 37 36 38 2a 33 20 2b 20 33  lf.  32768*3 + 3
15bb0 20 3d 20 39 38 33 30 37 2e 0a 20 20 20 20 20 20   = 98307..      
15bc0 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 61 4f 66  */.      if( aOf
15bd0 66 73 65 74 5b 30 5d 20 3e 20 39 38 33 30 37 20  fset[0] > 98307 
15be0 7c 7c 20 61 4f 66 66 73 65 74 5b 30 5d 20 3e 20  || aOffset[0] > 
15bf0 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20  pC->payloadSize 
15c00 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  ){.        goto 
15c10 6f 70 5f 63 6f 6c 75 6d 6e 5f 63 6f 72 72 75 70  op_column_corrup
15c20 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  t;.      }.    }
15c30 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 54  else{.      /* T
15c40 68 69 73 20 69 73 20 61 6e 20 6f 70 74 69 6d 69  his is an optimi
15c50 7a 61 74 69 6f 6e 2e 20 20 42 79 20 73 6b 69 70  zation.  By skip
15c60 70 69 6e 67 20 6f 76 65 72 20 74 68 65 20 66 69  ping over the fi
15c70 72 73 74 20 66 65 77 20 74 65 73 74 73 0a 20 20  rst few tests.  
15c80 20 20 20 20 2a 2a 20 28 65 78 3a 20 70 43 2d 3e      ** (ex: pC->
15c90 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32 29 20  nHdrParsed<=p2) 
15ca0 69 6e 20 74 68 65 20 6e 65 78 74 20 73 65 63 74  in the next sect
15cb0 69 6f 6e 2c 20 77 65 20 61 63 68 69 65 76 65 20  ion, we achieve 
15cc0 61 0a 20 20 20 20 20 20 2a 2a 20 6d 65 61 73 75  a.      ** measu
15cd0 72 61 62 6c 65 20 70 65 72 66 6f 72 6d 61 6e 63  rable performanc
15ce0 65 20 67 61 69 6e 2e 0a 20 20 20 20 20 20 2a 2a  e gain..      **
15cf0 0a 20 20 20 20 20 20 2a 2a 20 54 68 69 73 20 62  .      ** This b
15d00 72 61 6e 63 68 20 69 73 20 74 61 6b 65 6e 20 65  ranch is taken e
15d10 76 65 6e 20 69 66 20 61 4f 66 66 73 65 74 5b 30  ven if aOffset[0
15d20 5d 3d 3d 30 2e 20 20 53 75 63 68 20 61 20 72 65  ]==0.  Such a re
15d30 63 6f 72 64 20 69 73 20 6e 65 76 65 72 0a 20 20  cord is never.  
15d40 20 20 20 20 2a 2a 20 67 65 6e 65 72 61 74 65 64      ** generated
15d50 20 62 79 20 53 51 4c 69 74 65 2c 20 61 6e 64 20   by SQLite, and 
15d60 63 6f 75 6c 64 20 62 65 20 63 6f 6e 73 69 64 65  could be conside
15d70 72 65 64 20 63 6f 72 72 75 70 74 69 6f 6e 2c 20  red corruption, 
15d80 62 75 74 20 77 65 0a 20 20 20 20 20 20 2a 2a 20  but we.      ** 
15d90 61 63 63 65 70 74 20 69 74 20 66 6f 72 20 68 69  accept it for hi
15da0 73 74 6f 72 69 63 61 6c 20 72 65 61 73 6f 6e 73  storical reasons
15db0 2e 20 20 57 68 65 6e 20 61 4f 66 66 73 65 74 5b  .  When aOffset[
15dc0 30 5d 3d 3d 30 2c 20 74 68 65 20 63 6f 64 65 20  0]==0, the code 
15dd0 74 68 69 73 0a 20 20 20 20 20 20 2a 2a 20 62 72  this.      ** br
15de0 61 6e 63 68 20 6a 75 6d 70 73 20 74 6f 20 72 65  anch jumps to re
15df0 61 64 73 20 70 61 73 74 20 74 68 65 20 65 6e 64  ads past the end
15e00 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 2c 20   of the record, 
15e10 62 75 74 20 6e 65 76 65 72 20 6d 6f 72 65 0a 20  but never more. 
15e20 20 20 20 20 20 2a 2a 20 74 68 61 6e 20 61 20 66       ** than a f
15e30 65 77 20 62 79 74 65 73 2e 20 20 45 76 65 6e 20  ew bytes.  Even 
15e40 69 66 20 74 68 65 20 72 65 63 6f 72 64 20 6f 63  if the record oc
15e50 63 75 72 73 20 61 74 20 74 68 65 20 65 6e 64 20  curs at the end 
15e60 6f 66 20 74 68 65 20 70 61 67 65 0a 20 20 20 20  of the page.    
15e70 20 20 2a 2a 20 63 6f 6e 74 65 6e 74 20 61 72 65    ** content are
15e80 61 2c 20 74 68 65 20 22 70 61 67 65 20 68 65 61  a, the "page hea
15e90 64 65 72 22 20 63 6f 6d 65 73 20 61 66 74 65 72  der" comes after
15ea0 20 74 68 65 20 70 61 67 65 20 63 6f 6e 74 65 6e   the page conten
15eb0 74 20 61 6e 64 20 73 6f 0a 20 20 20 20 20 20 2a  t and so.      *
15ec0 2a 20 74 68 69 73 20 6f 76 65 72 72 65 61 64 20  * this overread 
15ed0 69 73 20 68 61 72 6d 6c 65 73 73 2e 20 20 53 69  is harmless.  Si
15ee0 6d 69 6c 61 72 20 6f 76 65 72 72 65 61 64 73 20  milar overreads 
15ef0 63 61 6e 20 6f 63 63 75 72 20 66 6f 72 20 61 20  can occur for a 
15f00 63 6f 72 72 75 70 74 0a 20 20 20 20 20 20 2a 2a  corrupt.      **
15f10 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
15f20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 7a        */.      z
15f30 44 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77 3b  Data = pC->aRow;
15f40 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
15f50 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70  C->nHdrParsed<=p
15f60 32 20 29 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  2 );         /* 
15f70 43 6f 6e 64 69 74 69 6f 6e 61 6c 20 73 6b 69 70  Conditional skip
15f80 70 65 64 20 2a 2f 0a 20 20 20 20 20 20 74 65 73  ped */.      tes
15f90 74 63 61 73 65 28 20 61 4f 66 66 73 65 74 5b 30  tcase( aOffset[0
15fa0 5d 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 67 6f  ]==0 );.      go
15fb0 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72 65 61  to op_column_rea
15fc0 64 5f 68 65 61 64 65 72 3b 0a 20 20 20 20 7d 0a  d_header;.    }.
15fd0 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73    }..  /* Make s
15fe0 75 72 65 20 61 74 20 6c 65 61 73 74 20 74 68 65  ure at least the
15ff0 20 66 69 72 73 74 20 70 32 2b 31 20 65 6e 74 72   first p2+1 entr
16000 69 65 73 20 6f 66 20 74 68 65 20 68 65 61 64 65  ies of the heade
16010 72 20 68 61 76 65 20 62 65 65 6e 0a 20 20 2a 2a  r have been.  **
16020 20 70 61 72 73 65 64 20 61 6e 64 20 76 61 6c 69   parsed and vali
16030 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73  d information is
16040 20 69 6e 20 61 4f 66 66 73 65 74 5b 5d 20 61 6e   in aOffset[] an
16050 64 20 70 43 2d 3e 61 54 79 70 65 5b 5d 2e 0a 20  d pC->aType[].. 
16060 20 2a 2f 0a 20 20 69 66 28 20 70 43 2d 3e 6e 48   */.  if( pC->nH
16070 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a  drParsed<=p2 ){.
16080 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20      /* If there 
16090 69 73 20 6d 6f 72 65 20 68 65 61 64 65 72 20 61  is more header a
160a0 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 70 61 72  vailable for par
160b0 73 69 6e 67 20 69 6e 20 74 68 65 20 72 65 63 6f  sing in the reco
160c0 72 64 2c 20 74 72 79 0a 20 20 20 20 2a 2a 20 74  rd, try.    ** t
160d0 6f 20 65 78 74 72 61 63 74 20 61 64 64 69 74 69  o extract additi
160e0 6f 6e 61 6c 20 66 69 65 6c 64 73 20 75 70 20 74  onal fields up t
160f0 68 72 6f 75 67 68 20 74 68 65 20 70 32 2b 31 2d  hrough the p2+1-
16100 74 68 20 66 69 65 6c 64 20 0a 20 20 20 20 2a 2f  th field .    */
16110 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 69 48 64  .    if( pC->iHd
16120 72 4f 66 66 73 65 74 3c 61 4f 66 66 73 65 74 5b  rOffset<aOffset[
16130 30 5d 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4d  0] ){.      /* M
16140 61 6b 65 20 73 75 72 65 20 7a 44 61 74 61 20 70  ake sure zData p
16150 6f 69 6e 74 73 20 74 6f 20 65 6e 6f 75 67 68 20  oints to enough 
16160 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  of the record to
16170 20 63 6f 76 65 72 20 74 68 65 20 68 65 61 64 65   cover the heade
16180 72 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  r. */.      if( 
16190 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 7b 0a 20  pC->aRow==0 ){. 
161a0 20 20 20 20 20 20 20 6d 65 6d 73 65 74 28 26 73         memset(&s
161b0 4d 65 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73  Mem, 0, sizeof(s
161c0 4d 65 6d 29 29 3b 0a 20 20 20 20 20 20 20 20 72  Mem));.        r
161d0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
161e0 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 2d 3e  emFromBtree(pC->
161f0 75 63 2e 70 43 75 72 73 6f 72 2c 20 30 2c 20 61  uc.pCursor, 0, a
16200 4f 66 66 73 65 74 5b 30 5d 2c 20 26 73 4d 65 6d  Offset[0], &sMem
16210 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
16220 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
16230 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
16240 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
16250 7a 44 61 74 61 20 3d 20 28 75 38 2a 29 73 4d 65  zData = (u8*)sMe
16260 6d 2e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  m.z;.      }else
16270 7b 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20  {.        zData 
16280 3d 20 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20  = pC->aRow;.    
16290 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20    }.  .      /* 
162a0 46 69 6c 6c 20 69 6e 20 70 43 2d 3e 61 54 79 70  Fill in pC->aTyp
162b0 65 5b 69 5d 20 61 6e 64 20 61 4f 66 66 73 65 74  e[i] and aOffset
162c0 5b 69 5d 20 76 61 6c 75 65 73 20 74 68 72 6f 75  [i] values throu
162d0 67 68 20 74 68 65 20 70 32 2d 74 68 20 66 69 65  gh the p2-th fie
162e0 6c 64 2e 20 2a 2f 0a 20 20 20 20 6f 70 5f 63 6f  ld. */.    op_co
162f0 6c 75 6d 6e 5f 72 65 61 64 5f 68 65 61 64 65 72  lumn_read_header
16300 3a 0a 20 20 20 20 20 20 69 20 3d 20 70 43 2d 3e  :.      i = pC->
16310 6e 48 64 72 50 61 72 73 65 64 3b 0a 20 20 20 20  nHdrParsed;.    
16320 20 20 6f 66 66 73 65 74 36 34 20 3d 20 61 4f 66    offset64 = aOf
16330 66 73 65 74 5b 69 5d 3b 0a 20 20 20 20 20 20 7a  fset[i];.      z
16340 48 64 72 20 3d 20 7a 44 61 74 61 20 2b 20 70 43  Hdr = zData + pC
16350 2d 3e 69 48 64 72 4f 66 66 73 65 74 3b 0a 20 20  ->iHdrOffset;.  
16360 20 20 20 20 7a 45 6e 64 48 64 72 20 3d 20 7a 44      zEndHdr = zD
16370 61 74 61 20 2b 20 61 4f 66 66 73 65 74 5b 30 5d  ata + aOffset[0]
16380 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65  ;.      testcase
16390 28 20 7a 48 64 72 3e 3d 7a 45 6e 64 48 64 72 20  ( zHdr>=zEndHdr 
163a0 29 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20 20  );.      do{.   
163b0 20 20 20 20 20 69 66 28 20 28 70 43 2d 3e 61 54       if( (pC->aT
163c0 79 70 65 5b 69 5d 20 3d 20 74 20 3d 20 7a 48 64  ype[i] = t = zHd
163d0 72 5b 30 5d 29 3c 30 78 38 30 20 29 7b 0a 20 20  r[0])<0x80 ){.  
163e0 20 20 20 20 20 20 20 20 7a 48 64 72 2b 2b 3b 0a          zHdr++;.
163f0 20 20 20 20 20 20 20 20 20 20 6f 66 66 73 65 74            offset
16400 36 34 20 2b 3d 20 73 71 6c 69 74 65 33 56 64 62  64 += sqlite3Vdb
16410 65 4f 6e 65 42 79 74 65 53 65 72 69 61 6c 54 79  eOneByteSerialTy
16420 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20 20  peLen(t);.      
16430 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
16440 20 20 20 7a 48 64 72 20 2b 3d 20 73 71 6c 69 74     zHdr += sqlit
16450 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 7a 48  e3GetVarint32(zH
16460 64 72 2c 20 26 74 29 3b 0a 20 20 20 20 20 20 20  dr, &t);.       
16470 20 20 20 70 43 2d 3e 61 54 79 70 65 5b 69 5d 20     pC->aType[i] 
16480 3d 20 74 3b 0a 20 20 20 20 20 20 20 20 20 20 6f  = t;.          o
16490 66 66 73 65 74 36 34 20 2b 3d 20 73 71 6c 69 74  ffset64 += sqlit
164a0 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
164b0 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20 20 20 20  Len(t);.        
164c0 7d 0a 20 20 20 20 20 20 20 20 61 4f 66 66 73 65  }.        aOffse
164d0 74 5b 2b 2b 69 5d 20 3d 20 28 75 33 32 29 28 6f  t[++i] = (u32)(o
164e0 66 66 73 65 74 36 34 20 26 20 30 78 66 66 66 66  ffset64 & 0xffff
164f0 66 66 66 66 29 3b 0a 20 20 20 20 20 20 7d 77 68  ffff);.      }wh
16500 69 6c 65 28 20 69 3c 3d 70 32 20 26 26 20 7a 48  ile( i<=p2 && zH
16510 64 72 3c 7a 45 6e 64 48 64 72 20 29 3b 0a 0a 20  dr<zEndHdr );.. 
16520 20 20 20 20 20 2f 2a 20 54 68 65 20 72 65 63 6f       /* The reco
16530 72 64 20 69 73 20 63 6f 72 72 75 70 74 20 69 66  rd is corrupt if
16540 20 61 6e 79 20 6f 66 20 74 68 65 20 66 6f 6c 6c   any of the foll
16550 6f 77 69 6e 67 20 61 72 65 20 74 72 75 65 3a 0a  owing are true:.
16560 20 20 20 20 20 20 2a 2a 20 28 31 29 20 74 68 65        ** (1) the
16570 20 62 79 74 65 73 20 6f 66 20 74 68 65 20 68 65   bytes of the he
16580 61 64 65 72 20 65 78 74 65 6e 64 20 70 61 73 74  ader extend past
16590 20 74 68 65 20 64 65 63 6c 61 72 65 64 20 68 65   the declared he
165a0 61 64 65 72 20 73 69 7a 65 0a 20 20 20 20 20 20  ader size.      
165b0 2a 2a 20 28 32 29 20 74 68 65 20 65 6e 74 69 72  ** (2) the entir
165c0 65 20 68 65 61 64 65 72 20 77 61 73 20 75 73 65  e header was use
165d0 64 20 62 75 74 20 6e 6f 74 20 61 6c 6c 20 64 61  d but not all da
165e0 74 61 20 77 61 73 20 75 73 65 64 0a 20 20 20 20  ta was used.    
165f0 20 20 2a 2a 20 28 33 29 20 74 68 65 20 65 6e 64    ** (3) the end
16600 20 6f 66 20 74 68 65 20 64 61 74 61 20 65 78 74   of the data ext
16610 65 6e 64 73 20 62 65 79 6f 6e 64 20 74 68 65 20  ends beyond the 
16620 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72  end of the recor
16630 64 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  d..      */.    
16640 20 20 69 66 28 20 28 7a 48 64 72 3e 3d 7a 45 6e    if( (zHdr>=zEn
16650 64 48 64 72 20 26 26 20 28 7a 48 64 72 3e 7a 45  dHdr && (zHdr>zE
16660 6e 64 48 64 72 20 7c 7c 20 6f 66 66 73 65 74 36  ndHdr || offset6
16670 34 21 3d 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69  4!=pC->payloadSi
16680 7a 65 29 29 0a 20 20 20 20 20 20 20 7c 7c 20 28  ze)).       || (
16690 6f 66 66 73 65 74 36 34 20 3e 20 70 43 2d 3e 70  offset64 > pC->p
166a0 61 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20 20 20  ayloadSize).    
166b0 20 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28    ){.        if(
166c0 20 61 4f 66 66 73 65 74 5b 30 5d 3d 3d 30 20 29   aOffset[0]==0 )
166d0 7b 0a 20 20 20 20 20 20 20 20 20 20 69 20 3d 20  {.          i = 
166e0 30 3b 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64  0;.          zHd
166f0 72 20 3d 20 7a 45 6e 64 48 64 72 3b 0a 20 20 20  r = zEndHdr;.   
16700 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
16710 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52        if( pC->aR
16720 6f 77 3d 3d 30 20 29 20 73 71 6c 69 74 65 33 56  ow==0 ) sqlite3V
16730 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73  dbeMemRelease(&s
16740 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 20 20  Mem);.          
16750 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 63  goto op_column_c
16760 6f 72 72 75 70 74 3b 0a 20 20 20 20 20 20 20 20  orrupt;.        
16770 7d 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  }.      }..     
16780 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20   pC->nHdrParsed 
16790 3d 20 69 3b 0a 20 20 20 20 20 20 70 43 2d 3e 69  = i;.      pC->i
167a0 48 64 72 4f 66 66 73 65 74 20 3d 20 28 75 33 32  HdrOffset = (u32
167b0 29 28 7a 48 64 72 20 2d 20 7a 44 61 74 61 29 3b  )(zHdr - zData);
167c0 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61  .      if( pC->a
167d0 52 6f 77 3d 3d 30 20 29 20 73 71 6c 69 74 65 33  Row==0 ) sqlite3
167e0 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26  VdbeMemRelease(&
167f0 73 4d 65 6d 29 3b 0a 20 20 20 20 7d 65 6c 73 65  sMem);.    }else
16800 7b 0a 20 20 20 20 20 20 74 20 3d 20 30 3b 0a 20  {.      t = 0;. 
16810 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 49 66 20     }..    /* If 
16820 61 66 74 65 72 20 74 72 79 69 6e 67 20 74 6f 20  after trying to 
16830 65 78 74 72 61 63 74 20 6e 65 77 20 65 6e 74 72  extract new entr
16840 69 65 73 20 66 72 6f 6d 20 74 68 65 20 68 65 61  ies from the hea
16850 64 65 72 2c 20 6e 48 64 72 50 61 72 73 65 64 20  der, nHdrParsed 
16860 69 73 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20  is.    ** still 
16870 6e 6f 74 20 75 70 20 74 6f 20 70 32 2c 20 74 68  not up to p2, th
16880 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  at means that th
16890 65 20 72 65 63 6f 72 64 20 68 61 73 20 66 65 77  e record has few
168a0 65 72 20 74 68 61 6e 20 70 32 0a 20 20 20 20 2a  er than p2.    *
168b0 2a 20 63 6f 6c 75 6d 6e 73 2e 20 20 53 6f 20 74  * columns.  So t
168c0 68 65 20 72 65 73 75 6c 74 20 77 69 6c 6c 20 62  he result will b
168d0 65 20 65 69 74 68 65 72 20 74 68 65 20 64 65 66  e either the def
168e0 61 75 6c 74 20 76 61 6c 75 65 20 6f 72 20 61 20  ault value or a 
168f0 4e 55 4c 4c 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  NULL..    */.   
16900 20 69 66 28 20 70 43 2d 3e 6e 48 64 72 50 61 72   if( pC->nHdrPar
16910 73 65 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20 20  sed<=p2 ){.     
16920 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
16930 3d 3d 50 34 5f 4d 45 4d 20 29 7b 0a 20 20 20 20  ==P4_MEM ){.    
16940 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
16950 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 44  emShallowCopy(pD
16960 65 73 74 2c 20 70 4f 70 2d 3e 70 34 2e 70 4d 65  est, pOp->p4.pMe
16970 6d 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a  m, MEM_Static);.
16980 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
16990 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
169a0 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74  MemSetNull(pDest
169b0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
169c0 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
169d0 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  out;.    }.  }el
169e0 73 65 7b 0a 20 20 20 20 74 20 3d 20 70 43 2d 3e  se{.    t = pC->
169f0 61 54 79 70 65 5b 70 32 5d 3b 0a 20 20 7d 0a 0a  aType[p2];.  }..
16a00 20 20 2f 2a 20 45 78 74 72 61 63 74 20 74 68 65    /* Extract the
16a10 20 63 6f 6e 74 65 6e 74 20 66 6f 72 20 74 68 65   content for the
16a20 20 70 32 2b 31 2d 74 68 20 63 6f 6c 75 6d 6e 2e   p2+1-th column.
16a30 20 20 43 6f 6e 74 72 6f 6c 20 63 61 6e 20 6f 6e    Control can on
16a40 6c 79 0a 20 20 2a 2a 20 72 65 61 63 68 20 74 68  ly.  ** reach th
16a50 69 73 20 70 6f 69 6e 74 20 69 66 20 61 4f 66 66  is point if aOff
16a60 73 65 74 5b 70 32 5d 2c 20 61 4f 66 66 73 65 74  set[p2], aOffset
16a70 5b 70 32 2b 31 5d 2c 20 61 6e 64 20 70 43 2d 3e  [p2+1], and pC->
16a80 61 54 79 70 65 5b 70 32 5d 20 61 72 65 0a 20 20  aType[p2] are.  
16a90 2a 2a 20 61 6c 6c 20 76 61 6c 69 64 2e 0a 20 20  ** all valid..  
16aa0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 32 3c  */.  assert( p2<
16ab0 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 29  pC->nHdrParsed )
16ac0 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d  ;.  assert( rc==
16ad0 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 61  SQLITE_OK );.  a
16ae0 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64  ssert( sqlite3Vd
16af0 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69  beCheckMemInvari
16b00 61 6e 74 73 28 70 44 65 73 74 29 20 29 3b 0a 20  ants(pDest) );. 
16b10 20 69 66 28 20 56 64 62 65 4d 65 6d 44 79 6e 61   if( VdbeMemDyna
16b20 6d 69 63 28 70 44 65 73 74 29 20 29 7b 0a 20 20  mic(pDest) ){.  
16b30 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
16b40 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a  SetNull(pDest);.
16b50 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 74 3d    }.  assert( t=
16b60 3d 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 20 29  =pC->aType[p2] )
16b70 3b 0a 20 20 69 66 28 20 70 43 2d 3e 73 7a 52 6f  ;.  if( pC->szRo
16b80 77 3e 3d 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d  w>=aOffset[p2+1]
16b90 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20   ){.    /* This 
16ba0 69 73 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61  is the common ca
16bb0 73 65 20 77 68 65 72 65 20 74 68 65 20 64 65 73  se where the des
16bc0 69 72 65 64 20 63 6f 6e 74 65 6e 74 20 66 69 74  ired content fit
16bd0 73 20 6f 6e 20 74 68 65 20 6f 72 69 67 69 6e 61  s on the origina
16be0 6c 0a 20 20 20 20 2a 2a 20 70 61 67 65 20 2d 20  l.    ** page - 
16bf0 77 68 65 72 65 20 74 68 65 20 63 6f 6e 74 65 6e  where the conten
16c00 74 20 69 73 20 6e 6f 74 20 6f 6e 20 61 6e 20 6f  t is not on an o
16c10 76 65 72 66 6c 6f 77 20 70 61 67 65 20 2a 2f 0a  verflow page */.
16c20 20 20 20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e      zData = pC->
16c30 61 52 6f 77 20 2b 20 61 4f 66 66 73 65 74 5b 70  aRow + aOffset[p
16c40 32 5d 3b 0a 20 20 20 20 69 66 28 20 74 3c 31 32  2];.    if( t<12
16c50 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
16c60 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 7a  3VdbeSerialGet(z
16c70 44 61 74 61 2c 20 74 2c 20 70 44 65 73 74 29 3b  Data, t, pDest);
16c80 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
16c90 20 20 2f 2a 20 49 66 20 74 68 65 20 63 6f 6c 75    /* If the colu
16ca0 6d 6e 20 76 61 6c 75 65 20 69 73 20 61 20 73 74  mn value is a st
16cb0 72 69 6e 67 2c 20 77 65 20 6e 65 65 64 20 61 20  ring, we need a 
16cc0 70 65 72 73 69 73 74 65 6e 74 20 76 61 6c 75 65  persistent value
16cd0 2c 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a 20 61  , not.      ** a
16ce0 20 4d 45 4d 5f 45 70 68 65 6d 20 76 61 6c 75 65   MEM_Ephem value
16cf0 2e 20 20 54 68 69 73 20 62 72 61 6e 63 68 20 69  .  This branch i
16d00 73 20 61 20 66 61 73 74 20 73 68 6f 72 74 2d 63  s a fast short-c
16d10 75 74 20 74 68 61 74 20 69 73 20 65 71 75 69 76  ut that is equiv
16d20 61 6c 65 6e 74 0a 20 20 20 20 20 20 2a 2a 20 74  alent.      ** t
16d30 6f 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65  o calling sqlite
16d40 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 29  3VdbeSerialGet()
16d50 20 61 6e 64 20 73 71 6c 69 74 65 33 56 64 62 65   and sqlite3Vdbe
16d60 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 29  Deephemeralize()
16d70 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
16d80 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 31   static const u1
16d90 36 20 61 46 6c 61 67 5b 5d 20 3d 20 7b 20 4d 45  6 aFlag[] = { ME
16da0 4d 5f 42 6c 6f 62 2c 20 4d 45 4d 5f 53 74 72 7c  M_Blob, MEM_Str|
16db0 4d 45 4d 5f 54 65 72 6d 20 7d 3b 0a 20 20 20 20  MEM_Term };.    
16dc0 20 20 70 44 65 73 74 2d 3e 6e 20 3d 20 6c 65 6e    pDest->n = len
16dd0 20 3d 20 28 74 2d 31 32 29 2f 32 3b 0a 20 20 20   = (t-12)/2;.   
16de0 20 20 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20     pDest->enc = 
16df0 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 20 20 20 20  encoding;.      
16e00 69 66 28 20 70 44 65 73 74 2d 3e 73 7a 4d 61 6c  if( pDest->szMal
16e10 6c 6f 63 20 3c 20 6c 65 6e 2b 32 20 29 7b 0a 20  loc < len+2 ){. 
16e20 20 20 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c         pDest->fl
16e30 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
16e40 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69          if( sqli
16e50 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70  te3VdbeMemGrow(p
16e60 44 65 73 74 2c 20 6c 65 6e 2b 32 2c 20 30 29 20  Dest, len+2, 0) 
16e70 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
16e80 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
16e90 20 20 20 20 70 44 65 73 74 2d 3e 7a 20 3d 20 70      pDest->z = p
16ea0 44 65 73 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20  Dest->zMalloc;. 
16eb0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d       }.      mem
16ec0 63 70 79 28 70 44 65 73 74 2d 3e 7a 2c 20 7a 44  cpy(pDest->z, zD
16ed0 61 74 61 2c 20 6c 65 6e 29 3b 0a 20 20 20 20 20  ata, len);.     
16ee0 20 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 5d 20 3d   pDest->z[len] =
16ef0 20 30 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d   0;.      pDest-
16f00 3e 7a 5b 6c 65 6e 2b 31 5d 20 3d 20 30 3b 0a 20  >z[len+1] = 0;. 
16f10 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67       pDest->flag
16f20 73 20 3d 20 61 46 6c 61 67 5b 74 26 31 5d 3b 0a  s = aFlag[t&1];.
16f30 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
16f40 20 20 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20     pDest->enc = 
16f50 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 20 20 2f 2a  encoding;.    /*
16f60 20 54 68 69 73 20 62 72 61 6e 63 68 20 68 61 70   This branch hap
16f70 70 65 6e 73 20 6f 6e 6c 79 20 77 68 65 6e 20 63  pens only when c
16f80 6f 6e 74 65 6e 74 20 69 73 20 6f 6e 20 6f 76 65  ontent is on ove
16f90 72 66 6c 6f 77 20 70 61 67 65 73 20 2a 2f 0a 20  rflow pages */. 
16fa0 20 20 20 69 66 28 20 28 28 70 4f 70 2d 3e 70 35     if( ((pOp->p5
16fb0 20 26 20 28 4f 50 46 4c 41 47 5f 4c 45 4e 47 54   & (OPFLAG_LENGT
16fc0 48 41 52 47 7c 4f 50 46 4c 41 47 5f 54 59 50 45  HARG|OPFLAG_TYPE
16fd0 4f 46 41 52 47 29 29 21 3d 30 0a 20 20 20 20 20  OFARG))!=0.     
16fe0 20 20 20 20 20 26 26 20 28 28 74 3e 3d 31 32 20       && ((t>=12 
16ff0 26 26 20 28 74 26 31 29 3d 3d 30 29 20 7c 7c 20  && (t&1)==0) || 
17000 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
17010 47 5f 54 59 50 45 4f 46 41 52 47 29 21 3d 30 29  G_TYPEOFARG)!=0)
17020 29 0a 20 20 20 20 20 7c 7c 20 28 6c 65 6e 20 3d  ).     || (len =
17030 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
17040 61 6c 54 79 70 65 4c 65 6e 28 74 29 29 3d 3d 30  alTypeLen(t))==0
17050 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 2f 2a  .    ){.      /*
17060 20 43 6f 6e 74 65 6e 74 20 69 73 20 69 72 72 65   Content is irre
17070 6c 65 76 61 6e 74 20 66 6f 72 0a 20 20 20 20 20  levant for.     
17080 20 2a 2a 20 20 20 20 31 2e 20 74 68 65 20 74 79   **    1. the ty
17090 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c  peof() function,
170a0 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 32 2e 20  .      **    2. 
170b0 74 68 65 20 6c 65 6e 67 74 68 28 58 29 20 66 75  the length(X) fu
170c0 6e 63 74 69 6f 6e 20 69 66 20 58 20 69 73 20 61  nction if X is a
170d0 20 62 6c 6f 62 2c 20 61 6e 64 0a 20 20 20 20 20   blob, and.     
170e0 20 2a 2a 20 20 20 20 33 2e 20 69 66 20 74 68 65   **    3. if the
170f0 20 63 6f 6e 74 65 6e 74 20 6c 65 6e 67 74 68 20   content length 
17100 69 73 20 7a 65 72 6f 2e 0a 20 20 20 20 20 20 2a  is zero..      *
17110 2a 20 53 6f 20 77 65 20 6d 69 67 68 74 20 61 73  * So we might as
17120 20 77 65 6c 6c 20 75 73 65 20 62 6f 67 75 73 20   well use bogus 
17130 63 6f 6e 74 65 6e 74 20 72 61 74 68 65 72 20 74  content rather t
17140 68 61 6e 20 72 65 61 64 69 6e 67 0a 20 20 20 20  han reading.    
17150 20 20 2a 2a 20 63 6f 6e 74 65 6e 74 20 66 72 6f    ** content fro
17160 6d 20 64 69 73 6b 2e 20 0a 20 20 20 20 20 20 2a  m disk. .      *
17170 2a 0a 20 20 20 20 20 20 2a 2a 20 41 6c 74 68 6f  *.      ** Altho
17180 75 67 68 20 73 71 6c 69 74 65 33 56 64 62 65 53  ugh sqlite3VdbeS
17190 65 72 69 61 6c 47 65 74 28 29 20 6d 61 79 20 72  erialGet() may r
171a0 65 61 64 20 61 74 20 6d 6f 73 74 20 38 20 62 79  ead at most 8 by
171b0 74 65 73 20 66 72 6f 6d 20 74 68 65 0a 20 20 20  tes from the.   
171c0 20 20 20 2a 2a 20 62 75 66 66 65 72 20 70 61 73     ** buffer pas
171d0 73 65 64 20 74 6f 20 69 74 2c 20 64 65 62 75 67  sed to it, debug
171e0 67 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 56 64  ging function Vd
171f0 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e 74  beMemPrettyPrint
17200 28 29 20 6d 61 79 0a 20 20 20 20 20 20 2a 2a 20  () may.      ** 
17210 72 65 61 64 20 75 70 20 74 6f 20 31 36 2e 20 53  read up to 16. S
17220 6f 20 31 36 20 62 79 74 65 73 20 6f 66 20 62 6f  o 16 bytes of bo
17230 67 75 73 20 63 6f 6e 74 65 6e 74 20 69 73 20 73  gus content is s
17240 75 70 70 6c 69 65 64 2e 0a 20 20 20 20 20 20 2a  upplied..      *
17250 2f 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 75  /.      static u
17260 38 20 61 5a 65 72 6f 5b 31 36 5d 3b 20 20 2f 2a  8 aZero[16];  /*
17270 20 54 68 69 73 20 69 73 20 74 68 65 20 62 6f 67   This is the bog
17280 75 73 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20  us content */.  
17290 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
172a0 65 72 69 61 6c 47 65 74 28 61 5a 65 72 6f 2c 20  erialGet(aZero, 
172b0 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d  t, pDest);.    }
172c0 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d  else{.      rc =
172d0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46   sqlite3VdbeMemF
172e0 72 6f 6d 42 74 72 65 65 28 70 43 2d 3e 75 63 2e  romBtree(pC->uc.
172f0 70 43 75 72 73 6f 72 2c 20 61 4f 66 66 73 65 74  pCursor, aOffset
17300 5b 70 32 5d 2c 20 6c 65 6e 2c 20 70 44 65 73 74  [p2], len, pDest
17310 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
17320 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
17330 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
17340 72 72 6f 72 3b 0a 20 20 20 20 20 20 73 71 6c 69  rror;.      sqli
17350 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74  te3VdbeSerialGet
17360 28 28 63 6f 6e 73 74 20 75 38 2a 29 70 44 65 73  ((const u8*)pDes
17370 74 2d 3e 7a 2c 20 74 2c 20 70 44 65 73 74 29 3b  t->z, t, pDest);
17380 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c  .      pDest->fl
17390 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 45 70 68 65  ags &= ~MEM_Ephe
173a0 6d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 6f 70  m;.    }.  }..op
173b0 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20 55  _column_out:.  U
173c0 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
173d0 5a 45 28 70 44 65 73 74 29 3b 0a 20 20 52 45 47  ZE(pDest);.  REG
173e0 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
173f0 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 62  >p3, pDest);.  b
17400 72 65 61 6b 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e  reak;..op_column
17410 5f 63 6f 72 72 75 70 74 3a 0a 20 20 69 66 28 20  _corrupt:.  if( 
17420 61 4f 70 5b 30 5d 2e 70 33 3e 30 20 29 7b 0a 20  aOp[0].p3>0 ){. 
17430 20 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 61 4f     pOp = &aOp[aO
17440 70 5b 30 5d 2e 70 33 2d 31 5d 3b 0a 20 20 20 20  p[0].p3-1];.    
17450 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 7b 0a  break;.  }else{.
17460 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
17470 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20  CORRUPT_BKPT;.  
17480 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
17490 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 7d  _to_error;.  }.}
174a0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 66 66  ../* Opcode: Aff
174b0 69 6e 69 74 79 20 50 31 20 50 32 20 2a 20 50 34  inity P1 P2 * P4
174c0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
174d0 61 66 66 69 6e 69 74 79 28 72 5b 50 31 40 50 32  affinity(r[P1@P2
174e0 5d 29 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20 61  ]).**.** Apply a
174f0 66 66 69 6e 69 74 69 65 73 20 74 6f 20 61 20 72  ffinities to a r
17500 61 6e 67 65 20 6f 66 20 50 32 20 72 65 67 69 73  ange of P2 regis
17510 74 65 72 73 20 73 74 61 72 74 69 6e 67 20 77 69  ters starting wi
17520 74 68 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  th P1..**.** P4 
17530 69 73 20 61 20 73 74 72 69 6e 67 20 74 68 61 74  is a string that
17540 20 69 73 20 50 32 20 63 68 61 72 61 63 74 65 72   is P2 character
17550 73 20 6c 6f 6e 67 2e 20 54 68 65 20 4e 2d 74 68  s long. The N-th
17560 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 74 68   character of th
17570 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69  e.** string indi
17580 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  cates the column
17590 20 61 66 66 69 6e 69 74 79 20 74 68 61 74 20 73   affinity that s
175a0 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f  hould be used fo
175b0 72 20 74 68 65 20 4e 2d 74 68 0a 2a 2a 20 6d 65  r the N-th.** me
175c0 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68 65  mory cell in the
175d0 20 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65 20   range..*/.case 
175e0 4f 50 5f 41 66 66 69 6e 69 74 79 3a 20 7b 0a 20  OP_Affinity: {. 
175f0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 66   const char *zAf
17600 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 54 68 65  finity;   /* The
17610 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65 20   affinity to be 
17620 61 70 70 6c 69 65 64 20 2a 2f 0a 0a 20 20 7a 41  applied */..  zA
17630 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70  ffinity = pOp->p
17640 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 7a  4.z;.  assert( z
17650 41 66 66 69 6e 69 74 79 21 3d 30 20 29 3b 0a 20  Affinity!=0 );. 
17660 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
17670 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
17680 7a 41 66 66 69 6e 69 74 79 5b 70 4f 70 2d 3e 70  zAffinity[pOp->p
17690 32 5d 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20  2]==0 );.  pIn1 
176a0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
176b0 3b 0a 20 20 77 68 69 6c 65 28 20 31 20 2f 2a 65  ;.  while( 1 /*e
176c0 64 69 74 2d 62 79 2d 62 72 65 61 6b 2a 2f 20 29  dit-by-break*/ )
176d0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49  {.    assert( pI
176e0 6e 31 20 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b 28  n1 <= &p->aMem[(
176f0 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
17700 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20  Cursor)] );.    
17710 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
17720 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20  id(pIn1) );.    
17730 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49  applyAffinity(pI
17740 6e 31 2c 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d  n1, zAffinity[0]
17750 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
17760 20 69 66 28 20 7a 41 66 66 69 6e 69 74 79 5b 30   if( zAffinity[0
17770 5d 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45  ]==SQLITE_AFF_RE
17780 41 4c 20 26 26 20 28 70 49 6e 31 2d 3e 66 6c 61  AL && (pIn1->fla
17790 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
177a0 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 57 68 65   ){.      /* Whe
177b0 6e 20 61 70 70 6c 79 69 6e 67 20 52 45 41 4c 20  n applying REAL 
177c0 61 66 66 69 6e 69 74 79 2c 20 69 66 20 74 68 65  affinity, if the
177d0 20 72 65 73 75 6c 74 20 69 73 20 73 74 69 6c 6c   result is still
177e0 20 4d 45 4d 5f 49 6e 74 2c 20 0a 20 20 20 20 20   MEM_Int, .     
177f0 20 2a 2a 20 69 6e 64 69 63 61 74 65 20 74 68 61   ** indicate tha
17800 74 20 52 45 41 4c 20 69 73 20 61 63 74 75 61 6c  t REAL is actual
17810 6c 79 20 64 65 73 69 72 65 64 20 2a 2f 0a 20 20  ly desired */.  
17820 20 20 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20      pIn1->flags 
17830 7c 3d 20 4d 45 4d 5f 49 6e 74 52 65 61 6c 3b 0a  |= MEM_IntReal;.
17840 20 20 20 20 20 20 70 49 6e 31 2d 3e 66 6c 61 67        pIn1->flag
17850 73 20 26 3d 20 7e 4d 45 4d 5f 49 6e 74 3b 0a 20  s &= ~MEM_Int;. 
17860 20 20 20 7d 0a 20 20 20 20 52 45 47 49 53 54 45     }.    REGISTE
17870 52 5f 54 52 41 43 45 28 28 69 6e 74 29 28 70 49  R_TRACE((int)(pI
17880 6e 31 2d 61 4d 65 6d 29 2c 20 70 49 6e 31 29 3b  n1-aMem), pIn1);
17890 0a 20 20 20 20 7a 41 66 66 69 6e 69 74 79 2b 2b  .    zAffinity++
178a0 3b 0a 20 20 20 20 69 66 28 20 7a 41 66 66 69 6e  ;.    if( zAffin
178b0 69 74 79 5b 30 5d 3d 3d 30 20 29 20 62 72 65 61  ity[0]==0 ) brea
178c0 6b 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20  k;.    pIn1++;. 
178d0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
178e0 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 6b 65 52 65  * Opcode: MakeRe
178f0 63 6f 72 64 20 50 31 20 50 32 20 50 33 20 50 34  cord P1 P2 P3 P4
17900 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
17910 72 5b 50 33 5d 3d 6d 6b 72 65 63 28 72 5b 50 31  r[P3]=mkrec(r[P1
17920 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76  @P2]).**.** Conv
17930 65 72 74 20 50 32 20 72 65 67 69 73 74 65 72 73  ert P2 registers
17940 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
17950 50 31 20 69 6e 74 6f 20 74 68 65 20 5b 72 65 63  P1 into the [rec
17960 6f 72 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20 75  ord format].** u
17970 73 65 20 61 73 20 61 20 64 61 74 61 20 72 65 63  se as a data rec
17980 6f 72 64 20 69 6e 20 61 20 64 61 74 61 62 61 73  ord in a databas
17990 65 20 74 61 62 6c 65 20 6f 72 20 61 73 20 61 20  e table or as a 
179a0 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e 64  key.** in an ind
179b0 65 78 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75  ex.  The OP_Colu
179c0 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20 64 65  mn opcode can de
179d0 63 6f 64 65 20 74 68 65 20 72 65 63 6f 72 64 20  code the record 
179e0 6c 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  later..**.** P4 
179f0 6d 61 79 20 62 65 20 61 20 73 74 72 69 6e 67 20  may be a string 
17a00 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61  that is P2 chara
17a10 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65  cters long.  The
17a20 20 4e 2d 74 68 20 63 68 61 72 61 63 74 65 72 20   N-th character 
17a30 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67  of the.** string
17a40 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 63   indicates the c
17a50 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74  olumn affinity t
17a60 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73  hat should be us
17a70 65 64 20 66 6f 72 20 74 68 65 20 4e 2d 74 68 0a  ed for the N-th.
17a80 2a 2a 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20  ** field of the 
17a90 69 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a  index key..**.**
17aa0 20 54 68 65 20 6d 61 70 70 69 6e 67 20 66 72 6f   The mapping fro
17ab0 6d 20 63 68 61 72 61 63 74 65 72 20 74 6f 20 61  m character to a
17ac0 66 66 69 6e 69 74 79 20 69 73 20 67 69 76 65 6e  ffinity is given
17ad0 20 62 79 20 74 68 65 20 53 51 4c 49 54 45 5f 41   by the SQLITE_A
17ae0 46 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64 65  FF_.** macros de
17af0 66 69 6e 65 64 20 69 6e 20 73 71 6c 69 74 65 49  fined in sqliteI
17b00 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  nt.h..**.** If P
17b10 34 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 61  4 is NULL then a
17b20 6c 6c 20 69 6e 64 65 78 20 66 69 65 6c 64 73 20  ll index fields 
17b30 68 61 76 65 20 74 68 65 20 61 66 66 69 6e 69 74  have the affinit
17b40 79 20 42 4c 4f 42 2e 0a 2a 2f 0a 63 61 73 65 20  y BLOB..*/.case 
17b50 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20 7b  OP_MakeRecord: {
17b60 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20 20 20  .  Mem *pRec;   
17b70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
17b80 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20   new record */. 
17b90 20 75 36 34 20 6e 44 61 74 61 3b 20 20 20 20 20   u64 nData;     
17ba0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
17bb0 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61  r of bytes of da
17bc0 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e  ta space */.  in
17bd0 74 20 6e 48 64 72 3b 20 20 20 20 20 20 20 20 20  t nHdr;         
17be0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
17bf0 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64 65  f bytes of heade
17c00 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 36 34  r space */.  i64
17c10 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20 20   nByte;         
17c20 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70 61 63      /* Data spac
17c30 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74  e required for t
17c40 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  his record */.  
17c50 69 36 34 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20  i64 nZero;      
17c60 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
17c70 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20 61   of zero bytes a
17c80 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
17c90 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
17ca0 20 6e 56 61 72 69 6e 74 3b 20 20 20 20 20 20 20   nVarint;       
17cb0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
17cc0 20 62 79 74 65 73 20 69 6e 20 61 20 76 61 72 69   bytes in a vari
17cd0 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73 65 72 69  nt */.  u32 seri
17ce0 61 6c 5f 74 79 70 65 3b 20 20 20 20 20 20 20 2f  al_type;       /
17cf0 2a 20 54 79 70 65 20 66 69 65 6c 64 20 2a 2f 0a  * Type field */.
17d00 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20 20    Mem *pData0;  
17d10 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
17d20 74 20 66 69 65 6c 64 20 74 6f 20 62 65 20 63 6f  t field to be co
17d30 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74 68 65 20  mbined into the 
17d40 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20  record */.  Mem 
17d50 2a 70 4c 61 73 74 3b 20 20 20 20 20 20 20 20 20  *pLast;         
17d60 20 20 20 2f 2a 20 4c 61 73 74 20 66 69 65 6c 64     /* Last field
17d70 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a   of the record *
17d80 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20  /.  int nField; 
17d90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
17da0 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69  mber of fields i
17db0 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  n the record */.
17dc0 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74    char *zAffinit
17dd0 79 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  y;       /* The 
17de0 61 66 66 69 6e 69 74 79 20 73 74 72 69 6e 67 20  affinity string 
17df0 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 2a  for the record *
17e00 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66 6f 72  /.  int file_for
17e10 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a 20 46 69  mat;       /* Fi
17e20 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20 75 73 65  le format to use
17e30 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20 2a 2f   for encoding */
17e40 0a 20 20 75 33 32 20 6c 65 6e 3b 20 20 20 20 20  .  u32 len;     
17e50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e            /* Len
17e60 67 74 68 20 6f 66 20 61 20 66 69 65 6c 64 20 2a  gth of a field *
17e70 2f 0a 20 20 75 38 20 2a 7a 48 64 72 3b 20 20 20  /.  u8 *zHdr;   
17e80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68             /* Wh
17e90 65 72 65 20 74 6f 20 77 72 69 74 65 20 6e 65 78  ere to write nex
17ea0 74 20 62 79 74 65 20 6f 66 20 74 68 65 20 68 65  t byte of the he
17eb0 61 64 65 72 20 2a 2f 0a 20 20 75 38 20 2a 7a 50  ader */.  u8 *zP
17ec0 61 79 6c 6f 61 64 3b 20 20 20 20 20 20 20 20 20  ayload;         
17ed0 20 2f 2a 20 57 68 65 72 65 20 74 6f 20 77 72 69   /* Where to wri
17ee0 74 65 20 6e 65 78 74 20 62 79 74 65 20 6f 66 20  te next byte of 
17ef0 74 68 65 20 70 61 79 6c 6f 61 64 20 2a 2f 0a 0a  the payload */..
17f00 20 20 2f 2a 20 41 73 73 75 6d 69 6e 67 20 74 68    /* Assuming th
17f10 65 20 72 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e  e record contain
17f20 73 20 4e 20 66 69 65 6c 64 73 2c 20 74 68 65 20  s N fields, the 
17f30 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 20 6c 6f  record format lo
17f40 6f 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65 20 74 68  oks.  ** like th
17f50 69 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 2d 2d  is:.  **.  ** --
17f60 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17f70 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17f80 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17f90 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17fa0 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c 20 68 64  ------.  ** | hd
17fb0 72 2d 73 69 7a 65 20 7c 20 74 79 70 65 20 30 20  r-size | type 0 
17fc0 7c 20 74 79 70 65 20 31 20 7c 20 2e 2e 2e 20 7c  | type 1 | ... |
17fd0 20 74 79 70 65 20 4e 2d 31 20 7c 20 64 61 74 61   type N-1 | data
17fe0 30 20 7c 20 2e 2e 2e 20 7c 20 64 61 74 61 20 4e  0 | ... | data N
17ff0 2d 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d  -1 | .  ** -----
18000 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
18010 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
18020 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
18030 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
18040 2d 2d 2d 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 61  ---.  **.  ** Da
18050 74 61 28 30 29 20 69 73 20 74 61 6b 65 6e 20 66  ta(0) is taken f
18060 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31 2e  rom register P1.
18070 20 20 44 61 74 61 28 31 29 20 63 6f 6d 65 73 20    Data(1) comes 
18080 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31  from register P1
18090 2b 31 0a 20 20 2a 2a 20 61 6e 64 20 73 6f 20 66  +1.  ** and so f
180a0 6f 72 74 68 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  orth..  **.  ** 
180b0 45 61 63 68 20 74 79 70 65 20 66 69 65 6c 64 20  Each type field 
180c0 69 73 20 61 20 76 61 72 69 6e 74 20 72 65 70 72  is a varint repr
180d0 65 73 65 6e 74 69 6e 67 20 74 68 65 20 73 65 72  esenting the ser
180e0 69 61 6c 20 74 79 70 65 20 6f 66 20 74 68 65 20  ial type of the 
180f0 0a 20 20 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64  .  ** correspond
18100 69 6e 67 20 64 61 74 61 20 65 6c 65 6d 65 6e 74  ing data element
18110 20 28 73 65 65 20 73 71 6c 69 74 65 33 56 64 62   (see sqlite3Vdb
18120 65 53 65 72 69 61 6c 54 79 70 65 28 29 29 2e 20  eSerialType()). 
18130 54 68 65 0a 20 20 2a 2a 20 68 64 72 2d 73 69 7a  The.  ** hdr-siz
18140 65 20 66 69 65 6c 64 20 69 73 20 61 6c 73 6f 20  e field is also 
18150 61 20 76 61 72 69 6e 74 20 77 68 69 63 68 20 69  a varint which i
18160 73 20 74 68 65 20 6f 66 66 73 65 74 20 66 72 6f  s the offset fro
18170 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a  m the beginning.
18180 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f    ** of the reco
18190 72 64 20 74 6f 20 64 61 74 61 30 2e 0a 20 20 2a  rd to data0..  *
181a0 2f 0a 20 20 6e 44 61 74 61 20 3d 20 30 3b 20 20  /.  nData = 0;  
181b0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
181c0 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61 74   of bytes of dat
181d0 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 48 64  a space */.  nHd
181e0 72 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  r = 0;          
181f0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
18200 65 73 20 6f 66 20 68 65 61 64 65 72 20 73 70 61  es of header spa
18210 63 65 20 2a 2f 0a 20 20 6e 5a 65 72 6f 20 3d 20  ce */.  nZero = 
18220 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  0;         /* Nu
18230 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74  mber of zero byt
18240 65 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  es at the end of
18250 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
18260 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70   nField = pOp->p
18270 31 3b 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d  1;.  zAffinity =
18280 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73   pOp->p4.z;.  as
18290 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 26  sert( nField>0 &
182a0 26 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70  & pOp->p2>0 && p
182b0 4f 70 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d 28  Op->p2+nField<=(
182c0 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
182d0 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 70  Cursor)+1 );.  p
182e0 44 61 74 61 30 20 3d 20 26 61 4d 65 6d 5b 6e 46  Data0 = &aMem[nF
182f0 69 65 6c 64 5d 3b 0a 20 20 6e 46 69 65 6c 64 20  ield];.  nField 
18300 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 4c 61  = pOp->p2;.  pLa
18310 73 74 20 3d 20 26 70 44 61 74 61 30 5b 6e 46 69  st = &pData0[nFi
18320 65 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c 65 5f 66  eld-1];.  file_f
18330 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d 69 6e 57 72  ormat = p->minWr
18340 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 3b 0a 0a  iteFileFormat;..
18350 20 20 2f 2a 20 49 64 65 6e 74 69 66 79 20 74 68    /* Identify th
18360 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65  e output registe
18370 72 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  r */.  assert( p
18380 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 31 20 7c  Op->p3<pOp->p1 |
18390 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e  | pOp->p3>=pOp->
183a0 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20  p1+pOp->p2 );.  
183b0 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
183c0 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p3];.  memAbou
183d0 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
183e0 74 29 3b 0a 0a 20 20 2f 2a 20 41 70 70 6c 79 20  t);..  /* Apply 
183f0 74 68 65 20 72 65 71 75 65 73 74 65 64 20 61 66  the requested af
18400 66 69 6e 69 74 79 20 74 6f 20 61 6c 6c 20 69 6e  finity to all in
18410 70 75 74 73 0a 20 20 2a 2f 0a 20 20 61 73 73 65  puts.  */.  asse
18420 72 74 28 20 70 44 61 74 61 30 3c 3d 70 4c 61 73  rt( pData0<=pLas
18430 74 20 29 3b 0a 20 20 69 66 28 20 7a 41 66 66 69  t );.  if( zAffi
18440 6e 69 74 79 20 29 7b 0a 20 20 20 20 70 52 65 63  nity ){.    pRec
18450 20 3d 20 70 44 61 74 61 30 3b 0a 20 20 20 20 64   = pData0;.    d
18460 6f 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66  o{.      applyAf
18470 66 69 6e 69 74 79 28 70 52 65 63 2c 20 7a 41 66  finity(pRec, zAf
18480 66 69 6e 69 74 79 5b 30 5d 2c 20 65 6e 63 6f 64  finity[0], encod
18490 69 6e 67 29 3b 0a 20 20 20 20 20 20 69 66 28 20  ing);.      if( 
184a0 7a 41 66 66 69 6e 69 74 79 5b 30 5d 3d 3d 53 51  zAffinity[0]==SQ
184b0 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 26 26  LITE_AFF_REAL &&
184c0 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20   (pRec->flags & 
184d0 4d 45 4d 5f 49 6e 74 29 20 29 7b 0a 20 20 20 20  MEM_Int) ){.    
184e0 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20      pRec->flags 
184f0 7c 3d 20 4d 45 4d 5f 49 6e 74 52 65 61 6c 3b 0a  |= MEM_IntReal;.
18500 20 20 20 20 20 20 20 20 70 52 65 63 2d 3e 66 6c          pRec->fl
18510 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 49 6e 74  ags &= ~(MEM_Int
18520 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
18530 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
18540 28 69 6e 74 29 28 70 52 65 63 2d 61 4d 65 6d 29  (int)(pRec-aMem)
18550 2c 20 70 52 65 63 29 3b 0a 20 20 20 20 20 20 7a  , pRec);.      z
18560 41 66 66 69 6e 69 74 79 2b 2b 3b 0a 20 20 20 20  Affinity++;.    
18570 20 20 70 52 65 63 2b 2b 3b 0a 20 20 20 20 20 20    pRec++;.      
18580 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74  assert( zAffinit
18590 79 5b 30 5d 3d 3d 30 20 7c 7c 20 70 52 65 63 3c  y[0]==0 || pRec<
185a0 3d 70 4c 61 73 74 20 29 3b 0a 20 20 20 20 7d 77  =pLast );.    }w
185b0 68 69 6c 65 28 20 7a 41 66 66 69 6e 69 74 79 5b  hile( zAffinity[
185c0 30 5d 20 29 3b 0a 20 20 7d 0a 0a 23 69 66 64 65  0] );.  }..#ifde
185d0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
185e0 4e 55 4c 4c 5f 54 52 49 4d 0a 20 20 2f 2a 20 4e  NULL_TRIM.  /* N
185f0 55 4c 4c 73 20 63 61 6e 20 62 65 20 73 61 66 65  ULLs can be safe
18600 6c 79 20 74 72 69 6d 6d 65 64 20 66 72 6f 6d 20  ly trimmed from 
18610 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72  the end of the r
18620 65 63 6f 72 64 2c 20 61 73 20 6c 6f 6e 67 20 61  ecord, as long a
18630 73 0a 20 20 2a 2a 20 61 73 20 74 68 65 20 73 63  s.  ** as the sc
18640 68 65 6d 61 20 66 6f 72 6d 61 74 20 69 73 20 32  hema format is 2
18650 20 6f 72 20 6d 6f 72 65 20 61 6e 64 20 6e 6f 6e   or more and non
18660 65 20 6f 66 20 74 68 65 20 6f 6d 69 74 74 65 64  e of the omitted
18670 20 63 6f 6c 75 6d 6e 73 0a 20 20 2a 2a 20 68 61   columns.  ** ha
18680 76 65 20 61 20 6e 6f 6e 2d 4e 55 4c 4c 20 64 65  ve a non-NULL de
18690 66 61 75 6c 74 20 76 61 6c 75 65 2e 20 20 41 6c  fault value.  Al
186a0 73 6f 2c 20 74 68 65 20 72 65 63 6f 72 64 20 6d  so, the record m
186b0 75 73 74 20 62 65 20 6c 65 66 74 20 77 69 74 68  ust be left with
186c0 0a 20 20 2a 2a 20 61 74 20 6c 65 61 73 74 20 6f  .  ** at least o
186d0 6e 65 20 66 69 65 6c 64 2e 20 20 49 66 20 50 35  ne field.  If P5
186e0 3e 30 20 74 68 65 6e 20 69 74 20 77 69 6c 6c 20  >0 then it will 
186f0 62 65 20 6f 6e 65 20 6d 6f 72 65 20 74 68 61 6e  be one more than
18700 20 74 68 65 0a 20 20 2a 2a 20 69 6e 64 65 78 20   the.  ** index 
18710 6f 66 20 74 68 65 20 72 69 67 68 74 2d 6d 6f 73  of the right-mos
18720 74 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20 61 20  t column with a 
18730 6e 6f 6e 2d 4e 55 4c 4c 20 64 65 66 61 75 6c 74  non-NULL default
18740 20 76 61 6c 75 65 20 2a 2f 0a 20 20 69 66 28 20   value */.  if( 
18750 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 77  pOp->p5 ){.    w
18760 68 69 6c 65 28 20 28 70 4c 61 73 74 2d 3e 66 6c  hile( (pLast->fl
18770 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21  ags & MEM_Null)!
18780 3d 30 20 26 26 20 6e 46 69 65 6c 64 3e 70 4f 70  =0 && nField>pOp
18790 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20 20 70 4c  ->p5 ){.      pL
187a0 61 73 74 2d 2d 3b 0a 20 20 20 20 20 20 6e 46 69  ast--;.      nFi
187b0 65 6c 64 2d 2d 3b 0a 20 20 20 20 7d 0a 20 20 7d  eld--;.    }.  }
187c0 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 4c 6f  .#endif..  /* Lo
187d0 6f 70 20 74 68 72 6f 75 67 68 20 74 68 65 20 65  op through the e
187e0 6c 65 6d 65 6e 74 73 20 74 68 61 74 20 77 69 6c  lements that wil
187f0 6c 20 6d 61 6b 65 20 75 70 20 74 68 65 20 72 65  l make up the re
18800 63 6f 72 64 20 74 6f 20 66 69 67 75 72 65 0a 20  cord to figure. 
18810 20 2a 2a 20 6f 75 74 20 68 6f 77 20 6d 75 63 68   ** out how much
18820 20 73 70 61 63 65 20 69 73 20 72 65 71 75 69 72   space is requir
18830 65 64 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72  ed for the new r
18840 65 63 6f 72 64 2e 20 20 41 66 74 65 72 20 74 68  ecord.  After th
18850 69 73 20 6c 6f 6f 70 2c 0a 20 20 2a 2a 20 74 68  is loop,.  ** th
18860 65 20 4d 65 6d 2e 75 54 65 6d 70 20 66 69 65 6c  e Mem.uTemp fiel
18870 64 20 6f 66 20 65 61 63 68 20 74 65 72 6d 20 73  d of each term s
18880 68 6f 75 6c 64 20 68 6f 6c 64 20 74 68 65 20 73  hould hold the s
18890 65 72 69 61 6c 2d 74 79 70 65 20 74 68 61 74 20  erial-type that 
188a0 77 69 6c 6c 0a 20 20 2a 2a 20 62 65 20 75 73 65  will.  ** be use
188b0 64 20 66 6f 72 20 74 68 61 74 20 74 65 72 6d 20  d for that term 
188c0 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74 65 64  in the generated
188d0 20 72 65 63 6f 72 64 3a 0a 20 20 2a 2a 0a 20 20   record:.  **.  
188e0 2a 2a 20 20 20 4d 65 6d 2e 75 54 65 6d 70 20 76  **   Mem.uTemp v
188f0 61 6c 75 65 20 20 20 20 74 79 70 65 0a 20 20 2a  alue    type.  *
18900 2a 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *   ------------
18910 2d 2d 2d 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d  ---    ---------
18920 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 20 20 20 20  ------.  **     
18930 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20   0              
18940 20 4e 55 4c 4c 0a 20 20 2a 2a 20 20 20 20 20 20   NULL.  **      
18950 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  1               
18960 31 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e  1-byte signed in
18970 74 65 67 65 72 0a 20 20 2a 2a 20 20 20 20 20 20  teger.  **      
18980 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  2               
18990 32 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e  2-byte signed in
189a0 74 65 67 65 72 0a 20 20 2a 2a 20 20 20 20 20 20  teger.  **      
189b0 33 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  3               
189c0 33 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e  3-byte signed in
189d0 74 65 67 65 72 0a 20 20 2a 2a 20 20 20 20 20 20  teger.  **      
189e0 34 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  4               
189f0 34 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e  4-byte signed in
18a00 74 65 67 65 72 0a 20 20 2a 2a 20 20 20 20 20 20  teger.  **      
18a10 35 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  5               
18a20 36 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e  6-byte signed in
18a30 74 65 67 65 72 0a 20 20 2a 2a 20 20 20 20 20 20  teger.  **      
18a40 36 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  6               
18a50 38 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e  8-byte signed in
18a60 74 65 67 65 72 0a 20 20 2a 2a 20 20 20 20 20 20  teger.  **      
18a70 37 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  7               
18a80 49 45 45 45 20 66 6c 6f 61 74 0a 20 20 2a 2a 20  IEEE float.  ** 
18a90 20 20 20 20 20 38 20 20 20 20 20 20 20 20 20 20       8          
18aa0 20 20 20 20 20 49 6e 74 65 67 65 72 20 63 6f 6e       Integer con
18ab0 73 74 61 6e 74 20 30 0a 20 20 2a 2a 20 20 20 20  stant 0.  **    
18ac0 20 20 39 20 20 20 20 20 20 20 20 20 20 20 20 20    9             
18ad0 20 20 49 6e 74 65 67 65 72 20 63 6f 6e 73 74 61    Integer consta
18ae0 6e 74 20 31 0a 20 20 2a 2a 20 20 20 20 20 31 30  nt 1.  **     10
18af0 2c 31 31 20 20 20 20 20 20 20 20 20 20 20 20 72  ,11            r
18b00 65 73 65 72 76 65 64 20 66 6f 72 20 65 78 70 61  eserved for expa
18b10 6e 73 69 6f 6e 0a 20 20 2a 2a 20 20 20 20 4e 3e  nsion.  **    N>
18b20 3d 31 32 20 61 6e 64 20 65 76 65 6e 20 20 20 20  =12 and even    
18b30 42 4c 4f 42 0a 20 20 2a 2a 20 20 20 20 4e 3e 3d  BLOB.  **    N>=
18b40 31 33 20 61 6e 64 20 6f 64 64 20 20 20 20 20 74  13 and odd     t
18b50 65 78 74 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  ext.  **.  ** Th
18b60 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 64 64 69  e following addi
18b70 74 69 6f 6e 61 6c 20 76 61 6c 75 65 73 20 61 72  tional values ar
18b80 65 20 63 6f 6d 70 75 74 65 64 3a 0a 20 20 2a 2a  e computed:.  **
18b90 20 20 20 20 20 6e 48 64 72 20 20 20 20 20 20 20       nHdr       
18ba0 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
18bb0 20 6e 65 65 64 65 64 20 66 6f 72 20 74 68 65 20   needed for the 
18bc0 72 65 63 6f 72 64 20 68 65 61 64 65 72 0a 20 20  record header.  
18bd0 2a 2a 20 20 20 20 20 6e 44 61 74 61 20 20 20 20  **     nData    
18be0 20 20 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74     Number of byt
18bf0 65 73 20 6f 66 20 64 61 74 61 20 73 70 61 63 65  es of data space
18c00 20 6e 65 65 64 65 64 20 66 6f 72 20 74 68 65 20   needed for the 
18c10 72 65 63 6f 72 64 0a 20 20 2a 2a 20 20 20 20 20  record.  **     
18c20 6e 5a 65 72 6f 20 20 20 20 20 20 20 5a 65 72 6f  nZero       Zero
18c30 20 62 79 74 65 73 20 61 74 20 74 68 65 20 65 6e   bytes at the en
18c40 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 0a  d of the record.
18c50 20 20 2a 2f 0a 20 20 70 52 65 63 20 3d 20 70 4c    */.  pRec = pL
18c60 61 73 74 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61  ast;.  do{.    a
18c70 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
18c80 64 28 70 52 65 63 29 20 29 3b 0a 20 20 20 20 69  d(pRec) );.    i
18c90 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26  f( pRec->flags &
18ca0 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
18cb0 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61     if( pRec->fla
18cc0 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b  gs & MEM_Zero ){
18cd0 0a 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75  .        /* Valu
18ce0 65 73 20 77 69 74 68 20 4d 45 4d 5f 4e 75 6c 6c  es with MEM_Null
18cf0 20 61 6e 64 20 4d 45 4d 5f 5a 65 72 6f 20 61 72   and MEM_Zero ar
18d00 65 20 63 72 65 61 74 65 64 20 62 79 20 78 43 6f  e created by xCo
18d10 6c 75 6d 6e 20 76 69 72 74 75 61 6c 0a 20 20 20  lumn virtual.   
18d20 20 20 20 20 20 2a 2a 20 74 61 62 6c 65 20 6d 65       ** table me
18d30 74 68 6f 64 73 20 74 68 61 74 20 6e 65 76 65 72  thods that never
18d40 20 69 6e 76 6f 6b 65 20 73 71 6c 69 74 65 33 5f   invoke sqlite3_
18d50 72 65 73 75 6c 74 5f 78 78 78 78 78 28 29 20 77  result_xxxxx() w
18d60 68 69 6c 65 0a 20 20 20 20 20 20 20 20 2a 2a 20  hile.        ** 
18d70 63 6f 6d 70 75 74 69 6e 67 20 61 6e 20 75 6e 63  computing an unc
18d80 68 61 6e 67 69 6e 67 20 63 6f 6c 75 6d 6e 20 76  hanging column v
18d90 61 6c 75 65 20 69 6e 20 61 6e 20 55 50 44 41 54  alue in an UPDAT
18da0 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a 20 20 20  E statement..   
18db0 20 20 20 20 20 2a 2a 20 47 69 76 65 20 73 75 63       ** Give suc
18dc0 68 20 76 61 6c 75 65 73 20 61 20 73 70 65 63 69  h values a speci
18dd0 61 6c 20 69 6e 74 65 72 6e 61 6c 2d 75 73 65 2d  al internal-use-
18de0 6f 6e 6c 79 20 73 65 72 69 61 6c 2d 74 79 70 65  only serial-type
18df0 20 6f 66 20 31 30 0a 20 20 20 20 20 20 20 20 2a   of 10.        *
18e00 2a 20 73 6f 20 74 68 61 74 20 74 68 65 79 20 63  * so that they c
18e10 61 6e 20 62 65 20 70 61 73 73 65 64 20 74 68 72  an be passed thr
18e20 6f 75 67 68 20 74 6f 20 78 55 70 64 61 74 65 20  ough to xUpdate 
18e30 61 6e 64 20 68 61 76 65 0a 20 20 20 20 20 20 20  and have.       
18e40 20 2a 2a 20 61 20 74 72 75 65 20 73 71 6c 69 74   ** a true sqlit
18e50 65 33 5f 76 61 6c 75 65 5f 6e 6f 63 68 61 6e 67  e3_value_nochang
18e60 65 28 29 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  e(). */.        
18e70 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d  assert( pOp->p5=
18e80 3d 4f 50 46 4c 41 47 5f 4e 4f 43 48 4e 47 5f 4d  =OPFLAG_NOCHNG_M
18e90 41 47 49 43 20 7c 7c 20 43 4f 52 52 55 50 54 5f  AGIC || CORRUPT_
18ea0 44 42 20 29 3b 0a 20 20 20 20 20 20 20 20 70 52  DB );.        pR
18eb0 65 63 2d 3e 75 54 65 6d 70 20 3d 20 31 30 3b 0a  ec->uTemp = 10;.
18ec0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
18ed0 20 20 20 20 20 70 52 65 63 2d 3e 75 54 65 6d 70       pRec->uTemp
18ee0 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20   = 0;.      }.  
18ef0 20 20 20 20 6e 48 64 72 2b 2b 3b 0a 20 20 20 20      nHdr++;.    
18f00 7d 65 6c 73 65 20 69 66 28 20 70 52 65 63 2d 3e  }else if( pRec->
18f10 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74  flags & (MEM_Int
18f20 7c 4d 45 4d 5f 49 6e 74 52 65 61 6c 29 20 29 7b  |MEM_IntReal) ){
18f30 0a 20 20 20 20 20 20 2f 2a 20 46 69 67 75 72 65  .      /* Figure
18f40 20 6f 75 74 20 77 68 65 74 68 65 72 20 74 6f 20   out whether to 
18f50 75 73 65 20 31 2c 20 32 2c 20 34 2c 20 36 20 6f  use 1, 2, 4, 6 o
18f60 72 20 38 20 62 79 74 65 73 2e 20 2a 2f 0a 20 20  r 8 bytes. */.  
18f70 20 20 20 20 69 36 34 20 69 20 3d 20 70 52 65 63      i64 i = pRec
18f80 2d 3e 75 2e 69 3b 0a 20 20 20 20 20 20 75 36 34  ->u.i;.      u64
18f90 20 75 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61   u;.      testca
18fa0 73 65 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20  se( pRec->flags 
18fb0 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20  & MEM_Int );.   
18fc0 20 20 20 74 65 73 74 63 61 73 65 28 20 70 52 65     testcase( pRe
18fd0 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  c->flags & MEM_I
18fe0 6e 74 52 65 61 6c 20 29 3b 0a 20 20 20 20 20 20  ntReal );.      
18ff0 69 66 28 20 69 3c 30 20 29 7b 0a 20 20 20 20 20  if( i<0 ){.     
19000 20 20 20 75 20 3d 20 7e 69 3b 0a 20 20 20 20 20     u = ~i;.     
19010 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
19020 75 20 3d 20 69 3b 0a 20 20 20 20 20 20 7d 0a 20  u = i;.      }. 
19030 20 20 20 20 20 6e 48 64 72 2b 2b 3b 0a 20 20 20       nHdr++;.   
19040 20 20 20 74 65 73 74 63 61 73 65 28 20 75 3d 3d     testcase( u==
19050 31 32 37 20 29 3b 20 20 20 20 20 20 20 20 20 20  127 );          
19060 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 75       testcase( u
19070 3d 3d 31 32 38 20 29 3b 0a 20 20 20 20 20 20 74  ==128 );.      t
19080 65 73 74 63 61 73 65 28 20 75 3d 3d 33 32 37 36  estcase( u==3276
19090 37 20 29 3b 20 20 20 20 20 20 20 20 20 20 20 20  7 );            
190a0 20 74 65 73 74 63 61 73 65 28 20 75 3d 3d 33 32   testcase( u==32
190b0 37 36 38 20 29 3b 0a 20 20 20 20 20 20 74 65 73  768 );.      tes
190c0 74 63 61 73 65 28 20 75 3d 3d 38 33 38 38 36 30  tcase( u==838860
190d0 37 20 29 3b 20 20 20 20 20 20 20 20 20 20 20 74  7 );           t
190e0 65 73 74 63 61 73 65 28 20 75 3d 3d 38 33 38 38  estcase( u==8388
190f0 36 30 38 20 29 3b 0a 20 20 20 20 20 20 74 65 73  608 );.      tes
19100 74 63 61 73 65 28 20 75 3d 3d 32 31 34 37 34 38  tcase( u==214748
19110 33 36 34 37 20 29 3b 20 20 20 20 20 20 20 20 74  3647 );        t
19120 65 73 74 63 61 73 65 28 20 75 3d 3d 32 31 34 37  estcase( u==2147
19130 34 38 33 36 34 38 20 29 3b 0a 20 20 20 20 20 20  483648 );.      
19140 74 65 73 74 63 61 73 65 28 20 75 3d 3d 31 34 30  testcase( u==140
19150 37 33 37 34 38 38 33 35 35 33 32 37 4c 4c 20 29  737488355327LL )
19160 3b 20 74 65 73 74 63 61 73 65 28 20 75 3d 3d 31  ; testcase( u==1
19170 34 30 37 33 37 34 38 38 33 35 35 33 32 38 4c 4c  40737488355328LL
19180 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 75 3c   );.      if( u<
19190 3d 31 32 37 20 29 7b 0a 20 20 20 20 20 20 20 20  =127 ){.        
191a0 69 66 28 20 28 69 26 31 29 3d 3d 69 20 26 26 20  if( (i&1)==i && 
191b0 66 69 6c 65 5f 66 6f 72 6d 61 74 3e 3d 34 20 29  file_format>=4 )
191c0 7b 0a 20 20 20 20 20 20 20 20 20 20 70 52 65 63  {.          pRec
191d0 2d 3e 75 54 65 6d 70 20 3d 20 38 2b 28 75 33 32  ->uTemp = 8+(u32
191e0 29 75 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  )u;.        }els
191f0 65 7b 0a 20 20 20 20 20 20 20 20 20 20 6e 44 61  e{.          nDa
19200 74 61 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20  ta++;.          
19210 70 52 65 63 2d 3e 75 54 65 6d 70 20 3d 20 31 3b  pRec->uTemp = 1;
19220 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
19230 20 7d 65 6c 73 65 20 69 66 28 20 75 3c 3d 33 32   }else if( u<=32
19240 37 36 37 20 29 7b 0a 20 20 20 20 20 20 20 20 6e  767 ){.        n
19250 44 61 74 61 20 2b 3d 20 32 3b 0a 20 20 20 20 20  Data += 2;.     
19260 20 20 20 70 52 65 63 2d 3e 75 54 65 6d 70 20 3d     pRec->uTemp =
19270 20 32 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20   2;.      }else 
19280 69 66 28 20 75 3c 3d 38 33 38 38 36 30 37 20 29  if( u<=8388607 )
19290 7b 0a 20 20 20 20 20 20 20 20 6e 44 61 74 61 20  {.        nData 
192a0 2b 3d 20 33 3b 0a 20 20 20 20 20 20 20 20 70 52  += 3;.        pR
192b0 65 63 2d 3e 75 54 65 6d 70 20 3d 20 33 3b 0a 20  ec->uTemp = 3;. 
192c0 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 75       }else if( u
192d0 3c 3d 32 31 34 37 34 38 33 36 34 37 20 29 7b 0a  <=2147483647 ){.
192e0 20 20 20 20 20 20 20 20 6e 44 61 74 61 20 2b 3d          nData +=
192f0 20 34 3b 0a 20 20 20 20 20 20 20 20 70 52 65 63   4;.        pRec
19300 2d 3e 75 54 65 6d 70 20 3d 20 34 3b 0a 20 20 20  ->uTemp = 4;.   
19310 20 20 20 7d 65 6c 73 65 20 69 66 28 20 75 3c 3d     }else if( u<=
19320 31 34 30 37 33 37 34 38 38 33 35 35 33 32 37 4c  140737488355327L
19330 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 6e 44 61  L ){.        nDa
19340 74 61 20 2b 3d 20 36 3b 0a 20 20 20 20 20 20 20  ta += 6;.       
19350 20 70 52 65 63 2d 3e 75 54 65 6d 70 20 3d 20 35   pRec->uTemp = 5
19360 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
19370 20 20 20 20 20 20 20 6e 44 61 74 61 20 2b 3d 20         nData += 
19380 38 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  8;.        if( p
19390 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Rec->flags & MEM
193a0 5f 49 6e 74 52 65 61 6c 20 29 7b 0a 20 20 20 20  _IntReal ){.    
193b0 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20        /* If the 
193c0 76 61 6c 75 65 20 69 73 20 49 6e 74 52 65 61 6c  value is IntReal
193d0 20 61 6e 64 20 69 73 20 67 6f 69 6e 67 20 74 6f   and is going to
193e0 20 74 61 6b 65 20 75 70 20 38 20 62 79 74 65 73   take up 8 bytes
193f0 20 74 6f 20 73 74 6f 72 65 0a 20 20 20 20 20 20   to store.      
19400 20 20 20 20 2a 2a 20 61 73 20 61 6e 20 69 6e 74      ** as an int
19410 65 67 65 72 2c 20 74 68 65 6e 20 77 65 20 6d 69  eger, then we mi
19420 67 68 74 20 61 73 20 77 65 6c 6c 20 6d 61 6b 65  ght as well make
19430 20 69 74 20 61 6e 20 38 2d 62 79 74 65 20 66 6c   it an 8-byte fl
19440 6f 61 74 69 6e 67 0a 20 20 20 20 20 20 20 20 20  oating.         
19450 20 2a 2a 20 70 6f 69 6e 74 20 76 61 6c 75 65 20   ** point value 
19460 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 70 52 65  */.          pRe
19470 63 2d 3e 75 2e 72 20 3d 20 28 64 6f 75 62 6c 65  c->u.r = (double
19480 29 70 52 65 63 2d 3e 75 2e 69 3b 0a 20 20 20 20  )pRec->u.i;.    
19490 20 20 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67        pRec->flag
194a0 73 20 26 3d 20 7e 4d 45 4d 5f 49 6e 74 52 65 61  s &= ~MEM_IntRea
194b0 6c 3b 0a 20 20 20 20 20 20 20 20 20 20 70 52 65  l;.          pRe
194c0 63 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f  c->flags |= MEM_
194d0 52 65 61 6c 3b 0a 20 20 20 20 20 20 20 20 20 20  Real;.          
194e0 70 52 65 63 2d 3e 75 54 65 6d 70 20 3d 20 37 3b  pRec->uTemp = 7;
194f0 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
19500 20 20 20 20 20 20 20 20 20 20 70 52 65 63 2d 3e            pRec->
19510 75 54 65 6d 70 20 3d 20 36 3b 0a 20 20 20 20 20  uTemp = 6;.     
19520 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
19530 20 7d 65 6c 73 65 20 69 66 28 20 70 52 65 63 2d   }else if( pRec-
19540 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61  >flags & MEM_Rea
19550 6c 20 29 7b 0a 20 20 20 20 20 20 6e 48 64 72 2b  l ){.      nHdr+
19560 2b 3b 0a 20 20 20 20 20 20 6e 44 61 74 61 20 2b  +;.      nData +
19570 3d 20 38 3b 0a 20 20 20 20 20 20 70 52 65 63 2d  = 8;.      pRec-
19580 3e 75 54 65 6d 70 20 3d 20 37 3b 0a 20 20 20 20  >uTemp = 7;.    
19590 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73  }else{.      ass
195a0 65 72 74 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46  ert( db->mallocF
195b0 61 69 6c 65 64 20 7c 7c 20 70 52 65 63 2d 3e 66  ailed || pRec->f
195c0 6c 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c 4d 45  lags&(MEM_Str|ME
195d0 4d 5f 42 6c 6f 62 29 20 29 3b 0a 20 20 20 20 20  M_Blob) );.     
195e0 20 61 73 73 65 72 74 28 20 70 52 65 63 2d 3e 6e   assert( pRec->n
195f0 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 6c 65 6e  >=0 );.      len
19600 20 3d 20 28 75 33 32 29 70 52 65 63 2d 3e 6e 3b   = (u32)pRec->n;
19610 0a 20 20 20 20 20 20 73 65 72 69 61 6c 5f 74 79  .      serial_ty
19620 70 65 20 3d 20 28 6c 65 6e 2a 32 29 20 2b 20 31  pe = (len*2) + 1
19630 32 20 2b 20 28 28 70 52 65 63 2d 3e 66 6c 61 67  2 + ((pRec->flag
19640 73 20 26 20 4d 45 4d 5f 53 74 72 29 21 3d 30 29  s & MEM_Str)!=0)
19650 3b 0a 20 20 20 20 20 20 69 66 28 20 70 52 65 63  ;.      if( pRec
19660 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65  ->flags & MEM_Ze
19670 72 6f 20 29 7b 0a 20 20 20 20 20 20 20 20 73 65  ro ){.        se
19680 72 69 61 6c 5f 74 79 70 65 20 2b 3d 20 70 52 65  rial_type += pRe
19690 63 2d 3e 75 2e 6e 5a 65 72 6f 2a 32 3b 0a 20 20  c->u.nZero*2;.  
196a0 20 20 20 20 20 20 69 66 28 20 6e 44 61 74 61 20        if( nData 
196b0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  ){.          if(
196c0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45   sqlite3VdbeMemE
196d0 78 70 61 6e 64 42 6c 6f 62 28 70 52 65 63 29 20  xpandBlob(pRec) 
196e0 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
196f0 20 20 20 20 20 20 20 20 20 6c 65 6e 20 2b 3d 20           len += 
19700 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20  pRec->u.nZero;. 
19710 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
19720 20 20 20 20 20 20 20 20 6e 5a 65 72 6f 20 2b 3d          nZero +=
19730 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a   pRec->u.nZero;.
19740 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
19750 7d 0a 20 20 20 20 20 20 6e 44 61 74 61 20 2b 3d  }.      nData +=
19760 20 6c 65 6e 3b 0a 20 20 20 20 20 20 6e 48 64 72   len;.      nHdr
19770 20 2b 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e   += sqlite3Varin
19780 74 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65  tLen(serial_type
19790 29 3b 0a 20 20 20 20 20 20 70 52 65 63 2d 3e 75  );.      pRec->u
197a0 54 65 6d 70 20 3d 20 73 65 72 69 61 6c 5f 74 79  Temp = serial_ty
197b0 70 65 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  pe;.    }.    if
197c0 28 20 70 52 65 63 3d 3d 70 44 61 74 61 30 20 29  ( pRec==pData0 )
197d0 20 62 72 65 61 6b 3b 0a 20 20 20 20 70 52 65 63   break;.    pRec
197e0 2d 2d 3b 0a 20 20 7d 77 68 69 6c 65 28 31 29 3b  --;.  }while(1);
197f0 0a 0a 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d  ..  /* EVIDENCE-
19800 4f 46 3a 20 52 2d 32 32 35 36 34 2d 31 31 36 34  OF: R-22564-1164
19810 37 20 54 68 65 20 68 65 61 64 65 72 20 62 65 67  7 The header beg
19820 69 6e 73 20 77 69 74 68 20 61 20 73 69 6e 67 6c  ins with a singl
19830 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 77 68  e varint.  ** wh
19840 69 63 68 20 64 65 74 65 72 6d 69 6e 65 73 20 74  ich determines t
19850 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
19860 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20  of bytes in the 
19870 68 65 61 64 65 72 2e 20 54 68 65 20 76 61 72 69  header. The vari
19880 6e 74 0a 20 20 2a 2a 20 76 61 6c 75 65 20 69 73  nt.  ** value is
19890 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65   the size of the
198a0 20 68 65 61 64 65 72 20 69 6e 20 62 79 74 65 73   header in bytes
198b0 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 73   including the s
198c0 69 7a 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20  ize varint.  ** 
198d0 69 74 73 65 6c 66 2e 20 2a 2f 0a 20 20 74 65 73  itself. */.  tes
198e0 74 63 61 73 65 28 20 6e 48 64 72 3d 3d 31 32 36  tcase( nHdr==126
198f0 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
19900 6e 48 64 72 3d 3d 31 32 37 20 29 3b 0a 20 20 69  nHdr==127 );.  i
19910 66 28 20 6e 48 64 72 3c 3d 31 32 36 20 29 7b 0a  f( nHdr<=126 ){.
19920 20 20 20 20 2f 2a 20 54 68 65 20 63 6f 6d 6d 6f      /* The commo
19930 6e 20 63 61 73 65 20 2a 2f 0a 20 20 20 20 6e 48  n case */.    nH
19940 64 72 20 2b 3d 20 31 3b 0a 20 20 7d 65 6c 73 65  dr += 1;.  }else
19950 7b 0a 20 20 20 20 2f 2a 20 52 61 72 65 20 63 61  {.    /* Rare ca
19960 73 65 20 6f 66 20 61 20 72 65 61 6c 6c 79 20 6c  se of a really l
19970 61 72 67 65 20 68 65 61 64 65 72 20 2a 2f 0a 20  arge header */. 
19980 20 20 20 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c     nVarint = sql
19990 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48  ite3VarintLen(nH
199a0 64 72 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d  dr);.    nHdr +=
199b0 20 6e 56 61 72 69 6e 74 3b 0a 20 20 20 20 69 66   nVarint;.    if
199c0 28 20 6e 56 61 72 69 6e 74 3c 73 71 6c 69 74 65  ( nVarint<sqlite
199d0 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29  3VarintLen(nHdr)
199e0 20 29 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20   ) nHdr++;.  }. 
199f0 20 6e 42 79 74 65 20 3d 20 6e 48 64 72 2b 6e 44   nByte = nHdr+nD
19a00 61 74 61 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20  ata;..  /* Make 
19a10 73 75 72 65 20 74 68 65 20 6f 75 74 70 75 74 20  sure the output 
19a20 72 65 67 69 73 74 65 72 20 68 61 73 20 61 20 62  register has a b
19a30 75 66 66 65 72 20 6c 61 72 67 65 20 65 6e 6f 75  uffer large enou
19a40 67 68 20 74 6f 20 73 74 6f 72 65 20 0a 20 20 2a  gh to store .  *
19a50 2a 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64  * the new record
19a60 2e 20 54 68 65 20 6f 75 74 70 75 74 20 72 65 67  . The output reg
19a70 69 73 74 65 72 20 28 70 4f 70 2d 3e 70 33 29 20  ister (pOp->p3) 
19a80 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 74  is not allowed t
19a90 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e 65 20 6f 66  o.  ** be one of
19aa0 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73   the input regis
19ab0 74 65 72 73 20 28 62 65 63 61 75 73 65 20 74 68  ters (because th
19ac0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c  e following call
19ad0 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33   to.  ** sqlite3
19ae0 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52  VdbeMemClearAndR
19af0 65 73 69 7a 65 28 29 20 63 6f 75 6c 64 20 63 6c  esize() could cl
19b00 6f 62 62 65 72 20 74 68 65 20 76 61 6c 75 65 20  obber the value 
19b10 62 65 66 6f 72 65 20 69 74 20 69 73 20 75 73 65  before it is use
19b20 64 29 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 6e  d)..  */.  if( n
19b30 42 79 74 65 2b 6e 5a 65 72 6f 3c 3d 70 4f 75 74  Byte+nZero<=pOut
19b40 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 29 7b 0a 20 20  ->szMalloc ){.  
19b50 20 20 2f 2a 20 54 68 65 20 6f 75 74 70 75 74 20    /* The output 
19b60 72 65 67 69 73 74 65 72 20 69 73 20 61 6c 72 65  register is alre
19b70 61 64 79 20 6c 61 72 67 65 20 65 6e 6f 75 67 68  ady large enough
19b80 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 72 65 63   to hold the rec
19b90 6f 72 64 2e 0a 20 20 20 20 2a 2a 20 4e 6f 20 65  ord..    ** No e
19ba0 72 72 6f 72 20 63 68 65 63 6b 73 20 6f 72 20 62  rror checks or b
19bb0 75 66 66 65 72 20 65 6e 6c 61 72 67 65 6d 65 6e  uffer enlargemen
19bc0 74 20 69 73 20 72 65 71 75 69 72 65 64 20 2a 2f  t is required */
19bd0 0a 20 20 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70  .    pOut->z = p
19be0 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20  Out->zMalloc;.  
19bf0 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 4e 65  }else{.    /* Ne
19c00 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  ed to make sure 
19c10 74 68 61 74 20 74 68 65 20 6f 75 74 70 75 74 20  that the output 
19c20 69 73 20 6e 6f 74 20 74 6f 6f 20 62 69 67 20 61  is not too big a
19c30 6e 64 20 74 68 65 6e 20 65 6e 6c 61 72 67 65 0a  nd then enlarge.
19c40 20 20 20 20 2a 2a 20 74 68 65 20 6f 75 74 70 75      ** the outpu
19c50 74 20 72 65 67 69 73 74 65 72 20 74 6f 20 68 6f  t register to ho
19c60 6c 64 20 74 68 65 20 66 75 6c 6c 20 72 65 73 75  ld the full resu
19c70 6c 74 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e 42  lt */.    if( nB
19c80 79 74 65 2b 6e 5a 65 72 6f 3e 64 62 2d 3e 61 4c  yte+nZero>db->aL
19c90 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
19ca0 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
19cb0 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
19cc0 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73  .    }.    if( s
19cd0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65  qlite3VdbeMemCle
19ce0 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4f 75 74  arAndResize(pOut
19cf0 2c 20 28 69 6e 74 29 6e 42 79 74 65 29 20 29 7b  , (int)nByte) ){
19d00 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  .      goto no_m
19d10 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  em;.    }.  }.  
19d20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e  pOut->n = (int)n
19d30 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  Byte;.  pOut->fl
19d40 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 3b 0a  ags = MEM_Blob;.
19d50 20 20 69 66 28 20 6e 5a 65 72 6f 20 29 7b 0a 20    if( nZero ){. 
19d60 20 20 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f     pOut->u.nZero
19d70 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 70 4f   = nZero;.    pO
19d80 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ut->flags |= MEM
19d90 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20 55 50 44  _Zero;.  }.  UPD
19da0 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
19db0 28 70 4f 75 74 29 3b 0a 20 20 7a 48 64 72 20 3d  (pOut);.  zHdr =
19dc0 20 28 75 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a   (u8 *)pOut->z;.
19dd0 20 20 7a 50 61 79 6c 6f 61 64 20 3d 20 7a 48 64    zPayload = zHd
19de0 72 20 2b 20 6e 48 64 72 3b 0a 0a 20 20 2f 2a 20  r + nHdr;..  /* 
19df0 57 72 69 74 65 20 74 68 65 20 72 65 63 6f 72 64  Write the record
19e00 20 2a 2f 0a 20 20 7a 48 64 72 20 2b 3d 20 70 75   */.  zHdr += pu
19e10 74 56 61 72 69 6e 74 33 32 28 7a 48 64 72 2c 20  tVarint32(zHdr, 
19e20 6e 48 64 72 29 3b 0a 20 20 61 73 73 65 72 74 28  nHdr);.  assert(
19e30 20 70 44 61 74 61 30 3c 3d 70 4c 61 73 74 20 29   pData0<=pLast )
19e40 3b 0a 20 20 70 52 65 63 20 3d 20 70 44 61 74 61  ;.  pRec = pData
19e50 30 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 73 65 72  0;.  do{.    ser
19e60 69 61 6c 5f 74 79 70 65 20 3d 20 70 52 65 63 2d  ial_type = pRec-
19e70 3e 75 54 65 6d 70 3b 0a 20 20 20 20 2f 2a 20 45  >uTemp;.    /* E
19e80 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 30 36  VIDENCE-OF: R-06
19e90 35 32 39 2d 34 37 33 36 32 20 46 6f 6c 6c 6f 77  529-47362 Follow
19ea0 69 6e 67 20 74 68 65 20 73 69 7a 65 20 76 61 72  ing the size var
19eb0 69 6e 74 20 61 72 65 20 6f 6e 65 20 6f 72 20 6d  int are one or m
19ec0 6f 72 65 0a 20 20 20 20 2a 2a 20 61 64 64 69 74  ore.    ** addit
19ed0 69 6f 6e 61 6c 20 76 61 72 69 6e 74 73 2c 20 6f  ional varints, o
19ee0 6e 65 20 70 65 72 20 63 6f 6c 75 6d 6e 2e 20 2a  ne per column. *
19ef0 2f 0a 20 20 20 20 7a 48 64 72 20 2b 3d 20 70 75  /.    zHdr += pu
19f00 74 56 61 72 69 6e 74 33 32 28 7a 48 64 72 2c 20  tVarint32(zHdr, 
19f10 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 20 20 20  serial_type);   
19f20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 65 72 69           /* seri
19f30 61 6c 20 74 79 70 65 20 2a 2f 0a 20 20 20 20 2f  al type */.    /
19f40 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  * EVIDENCE-OF: R
19f50 2d 36 34 35 33 36 2d 35 31 37 32 38 20 54 68 65  -64536-51728 The
19f60 20 76 61 6c 75 65 73 20 66 6f 72 20 65 61 63 68   values for each
19f70 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 72   column in the r
19f80 65 63 6f 72 64 0a 20 20 20 20 2a 2a 20 69 6d 6d  ecord.    ** imm
19f90 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 20  ediately follow 
19fa0 74 68 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a 20  the header. */. 
19fb0 20 20 20 7a 50 61 79 6c 6f 61 64 20 2b 3d 20 73     zPayload += s
19fc0 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
19fd0 50 75 74 28 7a 50 61 79 6c 6f 61 64 2c 20 70 52  Put(zPayload, pR
19fe0 65 63 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29  ec, serial_type)
19ff0 3b 20 2f 2a 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a  ; /* content */.
1a000 20 20 7d 77 68 69 6c 65 28 20 28 2b 2b 70 52 65    }while( (++pRe
1a010 63 29 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 61  c)<=pLast );.  a
1a020 73 73 65 72 74 28 20 6e 48 64 72 3d 3d 28 69 6e  ssert( nHdr==(in
1a030 74 29 28 7a 48 64 72 20 2d 20 28 75 38 2a 29 70  t)(zHdr - (u8*)p
1a040 4f 75 74 2d 3e 7a 29 20 29 3b 0a 20 20 61 73 73  Out->z) );.  ass
1a050 65 72 74 28 20 6e 42 79 74 65 3d 3d 28 69 6e 74  ert( nByte==(int
1a060 29 28 7a 50 61 79 6c 6f 61 64 20 2d 20 28 75 38  )(zPayload - (u8
1a070 2a 29 70 4f 75 74 2d 3e 7a 29 20 29 3b 0a 0a 20  *)pOut->z) );.. 
1a080 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
1a090 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28  >0 && pOp->p3<=(
1a0a0 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
1a0b0 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 52 45 47  Cursor) );.  REG
1a0c0 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
1a0d0 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 62 72  >p3, pOut);.  br
1a0e0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1a0f0 65 3a 20 43 6f 75 6e 74 20 50 31 20 50 32 20 2a  e: Count P1 P2 *
1a100 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
1a110 3a 20 72 5b 50 32 5d 3d 63 6f 75 6e 74 28 29 0a  : r[P2]=count().
1a120 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20  **.** Store the 
1a130 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  number of entrie
1a140 73 20 28 61 6e 20 69 6e 74 65 67 65 72 20 76 61  s (an integer va
1a150 6c 75 65 29 20 69 6e 20 74 68 65 20 74 61 62 6c  lue) in the tabl
1a160 65 20 6f 72 20 69 6e 64 65 78 20 0a 2a 2a 20 6f  e or index .** o
1a170 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f 72 20  pened by cursor 
1a180 50 31 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  P1 in register P
1a190 32 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  2.*/.#ifndef SQL
1a1a0 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f  ITE_OMIT_BTREECO
1a1b0 55 4e 54 0a 63 61 73 65 20 4f 50 5f 43 6f 75 6e  UNT.case OP_Coun
1a1c0 74 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20  t: {         /* 
1a1d0 6f 75 74 32 20 2a 2f 0a 20 20 69 36 34 20 6e 45  out2 */.  i64 nE
1a1e0 6e 74 72 79 3b 0a 20 20 42 74 43 75 72 73 6f 72  ntry;.  BtCursor
1a1f0 20 2a 70 43 72 73 72 3b 0a 0a 20 20 61 73 73 65   *pCrsr;..  asse
1a200 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  rt( p->apCsr[pOp
1a210 2d 3e 70 31 5d 2d 3e 65 43 75 72 54 79 70 65 3d  ->p1]->eCurType=
1a220 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
1a230 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 2d 3e 61  ;.  pCrsr = p->a
1a240 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 75  pCsr[pOp->p1]->u
1a250 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73  c.pCursor;.  ass
1a260 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20  ert( pCrsr );.  
1a270 6e 45 6e 74 72 79 20 3d 20 30 3b 20 20 2f 2a 20  nEntry = 0;  /* 
1a280 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c  Not needed.  Onl
1a290 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63  y used to silenc
1a2a0 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a  e a warning. */.
1a2b0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1a2c0 72 65 65 43 6f 75 6e 74 28 70 43 72 73 72 2c 20  reeCount(pCrsr, 
1a2d0 26 6e 45 6e 74 72 79 29 3b 0a 20 20 69 66 28 20  &nEntry);.  if( 
1a2e0 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
1a2f0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1a300 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
1a310 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
1a320 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e   pOut->u.i = nEn
1a330 74 72 79 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  try;.  break;.}.
1a340 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64  #endif../* Opcod
1a350 65 3a 20 53 61 76 65 70 6f 69 6e 74 20 50 31 20  e: Savepoint P1 
1a360 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f  * * P4 *.**.** O
1a370 70 65 6e 2c 20 72 65 6c 65 61 73 65 20 6f 72 20  pen, release or 
1a380 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 73 61 76  rollback the sav
1a390 65 70 6f 69 6e 74 20 6e 61 6d 65 64 20 62 79 20  epoint named by 
1a3a0 70 61 72 61 6d 65 74 65 72 20 50 34 2c 20 64 65  parameter P4, de
1a3b0 70 65 6e 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68  pending.** on th
1a3c0 65 20 76 61 6c 75 65 20 6f 66 20 50 31 2e 20 54  e value of P1. T
1a3d0 6f 20 6f 70 65 6e 20 61 20 6e 65 77 20 73 61 76  o open a new sav
1a3e0 65 70 6f 69 6e 74 20 73 65 74 20 50 31 3d 3d 30  epoint set P1==0
1a3f0 20 28 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49   (SAVEPOINT_BEGI
1a400 4e 29 2e 0a 2a 2a 20 54 6f 20 72 65 6c 65 61 73  N)..** To releas
1a410 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e 20 65 78  e (commit) an ex
1a420 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e 74  isting savepoint
1a430 20 73 65 74 20 50 31 3d 3d 31 20 28 53 41 56 45   set P1==1 (SAVE
1a440 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 29 2e 0a  POINT_RELEASE)..
1a450 2a 2a 20 54 6f 20 72 6f 6c 6c 62 61 63 6b 20 61  ** To rollback a
1a460 6e 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70  n existing savep
1a470 6f 69 6e 74 20 73 65 74 20 50 31 3d 3d 32 20 28  oint set P1==2 (
1a480 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
1a490 43 4b 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  CK)..*/.case OP_
1a4a0 53 61 76 65 70 6f 69 6e 74 3a 20 7b 0a 20 20 69  Savepoint: {.  i
1a4b0 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20 20 20  nt p1;          
1a4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1a4d0 2a 20 56 61 6c 75 65 20 6f 66 20 50 31 20 6f 70  * Value of P1 op
1a4e0 65 72 61 6e 64 20 2a 2f 0a 20 20 63 68 61 72 20  erand */.  char 
1a4f0 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
1a500 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
1a510 6d 65 20 6f 66 20 73 61 76 65 70 6f 69 6e 74 20  me of savepoint 
1a520 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61 6d 65 3b 0a  */.  int nName;.
1a530 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65    Savepoint *pNe
1a540 77 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  w;.  Savepoint *
1a550 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 53 61  pSavepoint;.  Sa
1a560 76 65 70 6f 69 6e 74 20 2a 70 54 6d 70 3b 0a 20  vepoint *pTmp;. 
1a570 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b   int iSavepoint;
1a580 0a 20 20 69 6e 74 20 69 69 3b 0a 0a 20 20 70 31  .  int ii;..  p1
1a590 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 4e   = pOp->p1;.  zN
1a5a0 61 6d 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  ame = pOp->p4.z;
1a5b0 0a 0a 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68  ..  /* Assert th
1a5c0 61 74 20 74 68 65 20 70 31 20 70 61 72 61 6d 65  at the p1 parame
1a5d0 74 65 72 20 69 73 20 76 61 6c 69 64 2e 20 41 6c  ter is valid. Al
1a5e0 73 6f 20 74 68 61 74 20 69 66 20 74 68 65 72 65  so that if there
1a5f0 20 69 73 20 6e 6f 20 6f 70 65 6e 0a 20 20 2a 2a   is no open.  **
1a600 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68   transaction, th
1a610 65 6e 20 74 68 65 72 65 20 63 61 6e 6e 6f 74 20  en there cannot 
1a620 62 65 20 61 6e 79 20 73 61 76 65 70 6f 69 6e 74  be any savepoint
1a630 73 2e 20 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72  s. .  */.  asser
1a640 74 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e  t( db->pSavepoin
1a650 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 75 74 6f  t==0 || db->auto
1a660 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61  Commit==0 );.  a
1a670 73 73 65 72 74 28 20 70 31 3d 3d 53 41 56 45 50  ssert( p1==SAVEP
1a680 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c 70 31 3d 3d  OINT_BEGIN||p1==
1a690 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
1a6a0 45 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  E||p1==SAVEPOINT
1a6b0 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a 20 20 61  _ROLLBACK );.  a
1a6c0 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65  ssert( db->pSave
1a6d0 70 6f 69 6e 74 20 7c 7c 20 64 62 2d 3e 69 73 54  point || db->isT
1a6e0 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
1a6f0 69 6e 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  int==0 );.  asse
1a700 72 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f 69  rt( checkSavepoi
1a710 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a 20  ntCount(db) );. 
1a720 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52   assert( p->bIsR
1a730 65 61 64 65 72 20 29 3b 0a 0a 20 20 69 66 28 20  eader );..  if( 
1a740 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45  p1==SAVEPOINT_BE
1a750 47 49 4e 20 29 7b 0a 20 20 20 20 69 66 28 20 64  GIN ){.    if( d
1a760 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20  b->nVdbeWrite>0 
1a770 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 20 6e 65  ){.      /* A ne
1a780 77 20 73 61 76 65 70 6f 69 6e 74 20 63 61 6e 6e  w savepoint cann
1a790 6f 74 20 62 65 20 63 72 65 61 74 65 64 20 69 66  ot be created if
1a7a0 20 74 68 65 72 65 20 61 72 65 20 61 63 74 69 76   there are activ
1a7b0 65 20 77 72 69 74 65 20 0a 20 20 20 20 20 20 2a  e write .      *
1a7c0 2a 20 73 74 61 74 65 6d 65 6e 74 73 20 28 69 2e  * statements (i.
1a7d0 65 2e 20 6f 70 65 6e 20 72 65 61 64 2f 77 72 69  e. open read/wri
1a7e0 74 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 62  te incremental b
1a7f0 6c 6f 62 20 68 61 6e 64 6c 65 73 29 2e 0a 20 20  lob handles)..  
1a800 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c      */.      sql
1a810 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
1a820 20 22 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 73 61   "cannot open sa
1a830 76 65 70 6f 69 6e 74 20 2d 20 53 51 4c 20 73 74  vepoint - SQL st
1a840 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67  atements in prog
1a850 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20 72 63  ress");.      rc
1a860 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
1a870 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1a880 20 6e 4e 61 6d 65 20 3d 20 73 71 6c 69 74 65 33   nName = sqlite3
1a890 53 74 72 6c 65 6e 33 30 28 7a 4e 61 6d 65 29 3b  Strlen30(zName);
1a8a0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
1a8b0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
1a8c0 4c 45 0a 20 20 20 20 20 20 2f 2a 20 54 68 69 73  LE.      /* This
1a8d0 20 63 61 6c 6c 20 69 73 20 4f 6b 20 65 76 65 6e   call is Ok even
1a8e0 20 69 66 20 74 68 69 73 20 73 61 76 65 70 6f 69   if this savepoi
1a8f0 6e 74 20 69 73 20 61 63 74 75 61 6c 6c 79 20 61  nt is actually a
1a900 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20 20   transaction.   
1a910 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74 20     ** savepoint 
1a920 28 61 6e 64 20 74 68 65 72 65 66 6f 72 65 20 73  (and therefore s
1a930 68 6f 75 6c 64 20 6e 6f 74 20 70 72 6f 6d 70 74  hould not prompt
1a940 20 78 53 61 76 65 70 6f 69 6e 74 28 29 29 20 63   xSavepoint()) c
1a950 61 6c 6c 62 61 63 6b 73 2e 0a 20 20 20 20 20 20  allbacks..      
1a960 2a 2a 20 49 66 20 74 68 69 73 20 69 73 20 61 20  ** If this is a 
1a970 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
1a980 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 6e  point being open
1a990 65 64 2c 20 69 74 20 69 73 20 67 75 61 72 61 6e  ed, it is guaran
1a9a0 74 65 65 64 0a 20 20 20 20 20 20 2a 2a 20 74 68  teed.      ** th
1a9b0 61 74 20 74 68 65 20 64 62 2d 3e 61 56 54 72 61  at the db->aVTra
1a9c0 6e 73 5b 5d 20 61 72 72 61 79 20 69 73 20 65 6d  ns[] array is em
1a9d0 70 74 79 2e 20 20 2a 2f 0a 20 20 20 20 20 20 61  pty.  */.      a
1a9e0 73 73 65 72 74 28 20 64 62 2d 3e 61 75 74 6f 43  ssert( db->autoC
1a9f0 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e  ommit==0 || db->
1aa00 6e 56 54 72 61 6e 73 3d 3d 30 20 29 3b 0a 20 20  nVTrans==0 );.  
1aa10 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1aa20 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62  VtabSavepoint(db
1aa30 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49  , SAVEPOINT_BEGI
1aa40 4e 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  N,.             
1aa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa60 20 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e     db->nStatemen
1aa70 74 2b 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  t+db->nSavepoint
1aa80 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
1aa90 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
1aaa0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1aab0 72 72 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  rror;.#endif..  
1aac0 20 20 20 20 2f 2a 20 43 72 65 61 74 65 20 61 20      /* Create a 
1aad0 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 73 74  new savepoint st
1aae0 72 75 63 74 75 72 65 2e 20 2a 2f 0a 20 20 20 20  ructure. */.    
1aaf0 20 20 70 4e 65 77 20 3d 20 73 71 6c 69 74 65 33    pNew = sqlite3
1ab00 44 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 64 62  DbMallocRawNN(db
1ab10 2c 20 73 69 7a 65 6f 66 28 53 61 76 65 70 6f 69  , sizeof(Savepoi
1ab20 6e 74 29 2b 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20  nt)+nName+1);.  
1ab30 20 20 20 20 69 66 28 20 70 4e 65 77 20 29 7b 0a      if( pNew ){.
1ab40 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 7a 4e          pNew->zN
1ab50 61 6d 65 20 3d 20 28 63 68 61 72 20 2a 29 26 70  ame = (char *)&p
1ab60 4e 65 77 5b 31 5d 3b 0a 20 20 20 20 20 20 20 20  New[1];.        
1ab70 6d 65 6d 63 70 79 28 70 4e 65 77 2d 3e 7a 4e 61  memcpy(pNew->zNa
1ab80 6d 65 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65  me, zName, nName
1ab90 2b 31 29 3b 0a 20 20 20 20 0a 20 20 20 20 20 20  +1);.    .      
1aba0 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73    /* If there is
1abb0 20 6e 6f 20 6f 70 65 6e 20 74 72 61 6e 73 61 63   no open transac
1abc0 74 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 72 6b 20  tion, then mark 
1abd0 74 68 69 73 20 61 73 20 61 20 73 70 65 63 69 61  this as a specia
1abe0 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 22 74 72  l.        ** "tr
1abf0 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f  ansaction savepo
1ac00 69 6e 74 22 2e 20 2a 2f 0a 20 20 20 20 20 20 20  int". */.       
1ac10 20 69 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d   if( db->autoCom
1ac20 6d 69 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20  mit ){.         
1ac30 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
1ac40 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 64  = 0;.          d
1ac50 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
1ac60 53 61 76 65 70 6f 69 6e 74 20 3d 20 31 3b 0a 20  Savepoint = 1;. 
1ac70 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
1ac80 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76          db->nSav
1ac90 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 20 20  epoint++;.      
1aca0 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 2f 2a 20    }..        /* 
1acb0 4c 69 6e 6b 20 74 68 65 20 6e 65 77 20 73 61 76  Link the new sav
1acc0 65 70 6f 69 6e 74 20 69 6e 74 6f 20 74 68 65 20  epoint into the 
1acd0 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 27  database handle'
1ace0 73 20 6c 69 73 74 2e 20 2a 2f 0a 20 20 20 20 20  s list. */.     
1acf0 20 20 20 70 4e 65 77 2d 3e 70 4e 65 78 74 20 3d     pNew->pNext =
1ad00 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b   db->pSavepoint;
1ad10 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61  .        db->pSa
1ad20 76 65 70 6f 69 6e 74 20 3d 20 70 4e 65 77 3b 0a  vepoint = pNew;.
1ad30 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44          pNew->nD
1ad40 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 64 62  eferredCons = db
1ad50 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b  ->nDeferredCons;
1ad60 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e  .        pNew->n
1ad70 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20  DeferredImmCons 
1ad80 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  = db->nDeferredI
1ad90 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a  mmCons;.      }.
1ada0 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
1adb0 20 20 20 61 73 73 65 72 74 28 20 70 31 3d 3d 53     assert( p1==S
1adc0 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
1add0 20 7c 7c 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e   || p1==SAVEPOIN
1ade0 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a 20 20  T_ROLLBACK );.  
1adf0 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 30    iSavepoint = 0
1ae00 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 6e 64 20 74  ;..    /* Find t
1ae10 68 65 20 6e 61 6d 65 64 20 73 61 76 65 70 6f 69  he named savepoi
1ae20 6e 74 2e 20 49 66 20 74 68 65 72 65 20 69 73 20  nt. If there is 
1ae30 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e  no such savepoin
1ae40 74 2c 20 74 68 65 6e 20 61 6e 0a 20 20 20 20 2a  t, then an.    *
1ae50 2a 20 61 6e 20 65 72 72 6f 72 20 69 73 20 72 65  * an error is re
1ae60 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20 75 73  turned to the us
1ae70 65 72 2e 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28  er.  */.    for(
1ae80 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e  .      pSavepoin
1ae90 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  t = db->pSavepoi
1aea0 6e 74 3b 20 0a 20 20 20 20 20 20 70 53 61 76 65  nt; .      pSave
1aeb0 70 6f 69 6e 74 20 26 26 20 73 71 6c 69 74 65 33  point && sqlite3
1aec0 53 74 72 49 43 6d 70 28 70 53 61 76 65 70 6f 69  StrICmp(pSavepoi
1aed0 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65  nt->zName, zName
1aee0 29 3b 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f  );.      pSavepo
1aef0 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69 6e 74  int = pSavepoint
1af00 2d 3e 70 4e 65 78 74 0a 20 20 20 20 29 7b 0a 20  ->pNext.    ){. 
1af10 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 2b       iSavepoint+
1af20 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  +;.    }.    if(
1af30 20 21 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a   !pSavepoint ){.
1af40 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
1af50 65 45 72 72 6f 72 28 70 2c 20 22 6e 6f 20 73 75  eError(p, "no su
1af60 63 68 20 73 61 76 65 70 6f 69 6e 74 3a 20 25 73  ch savepoint: %s
1af70 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20  ", zName);.     
1af80 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
1af90 4f 52 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  OR;.    }else if
1afa0 28 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65  ( db->nVdbeWrite
1afb0 3e 30 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f  >0 && p1==SAVEPO
1afc0 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20  INT_RELEASE ){. 
1afd0 20 20 20 20 20 2f 2a 20 49 74 20 69 73 20 6e 6f       /* It is no
1afe0 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 72 65  t possible to re
1aff0 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61  lease (commit) a
1b000 20 73 61 76 65 70 6f 69 6e 74 20 69 66 20 74 68   savepoint if th
1b010 65 72 65 20 61 72 65 20 0a 20 20 20 20 20 20 2a  ere are .      *
1b020 2a 20 61 63 74 69 76 65 20 77 72 69 74 65 20 73  * active write s
1b030 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20 20 20 20  tatements..     
1b040 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65   */.      sqlite
1b050 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 63  3VdbeError(p, "c
1b060 61 6e 6e 6f 74 20 72 65 6c 65 61 73 65 20 73 61  annot release sa
1b070 76 65 70 6f 69 6e 74 20 2d 20 22 0a 20 20 20 20  vepoint - ".    
1b080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b090 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74 65        "SQL state
1b0a0 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73  ments in progres
1b0b0 73 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  s");.      rc = 
1b0c0 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20  SQLITE_BUSY;.   
1b0d0 20 7d 65 6c 73 65 7b 0a 0a 20 20 20 20 20 20 2f   }else{..      /
1b0e0 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74  * Determine whet
1b0f0 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 69 73 20  her or not this 
1b100 69 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  is a transaction
1b110 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 73   savepoint. If s
1b120 6f 2c 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64 20  o,.      ** and 
1b130 74 68 69 73 20 69 73 20 61 20 52 45 4c 45 41 53  this is a RELEAS
1b140 45 20 63 6f 6d 6d 61 6e 64 2c 20 74 68 65 6e 20  E command, then 
1b150 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e  the current tran
1b160 73 61 63 74 69 6f 6e 20 0a 20 20 20 20 20 20 2a  saction .      *
1b170 2a 20 69 73 20 63 6f 6d 6d 69 74 74 65 64 2e 20  * is committed. 
1b180 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
1b190 69 6e 74 20 69 73 54 72 61 6e 73 61 63 74 69 6f  int isTransactio
1b1a0 6e 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e  n = pSavepoint->
1b1b0 70 4e 65 78 74 3d 3d 30 20 26 26 20 64 62 2d 3e  pNext==0 && db->
1b1c0 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
1b1d0 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 69 66  epoint;.      if
1b1e0 28 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20  ( isTransaction 
1b1f0 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  && p1==SAVEPOINT
1b200 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20  _RELEASE ){.    
1b210 20 20 20 20 69 66 28 20 28 72 63 20 3d 20 73 71      if( (rc = sq
1b220 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b  lite3VdbeCheckFk
1b230 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f  (p, 1))!=SQLITE_
1b240 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  OK ){.          
1b250 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
1b260 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
1b270 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d      db->autoComm
1b280 69 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  it = 1;.        
1b290 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 48  if( sqlite3VdbeH
1b2a0 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42  alt(p)==SQLITE_B
1b2b0 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20 20  USY ){.         
1b2c0 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70   p->pc = (int)(p
1b2d0 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20  Op - aOp);.     
1b2e0 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d       db->autoCom
1b2f0 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  mit = 0;.       
1b300 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20     p->rc = rc = 
1b310 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20  SQLITE_BUSY;.   
1b320 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65         goto vdbe
1b330 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20  _return;.       
1b340 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 69   }.        db->i
1b350 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
1b360 70 6f 69 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20  point = 0;.     
1b370 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 3b 0a 20     rc = p->rc;. 
1b380 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
1b390 20 20 20 20 69 6e 74 20 69 73 53 63 68 65 6d 61      int isSchema
1b3a0 43 68 61 6e 67 65 3b 0a 20 20 20 20 20 20 20 20  Change;.        
1b3b0 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d  iSavepoint = db-
1b3c0 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2d 20 69 53  >nSavepoint - iS
1b3d0 61 76 65 70 6f 69 6e 74 20 2d 20 31 3b 0a 20 20  avepoint - 1;.  
1b3e0 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41        if( p1==SA
1b3f0 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b  VEPOINT_ROLLBACK
1b400 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 73   ){.          is
1b410 53 63 68 65 6d 61 43 68 61 6e 67 65 20 3d 20 28  SchemaChange = (
1b420 64 62 2d 3e 6d 44 62 46 6c 61 67 73 20 26 20 44  db->mDbFlags & D
1b430 42 46 4c 41 47 5f 53 63 68 65 6d 61 43 68 61 6e  BFLAG_SchemaChan
1b440 67 65 29 21 3d 30 3b 0a 20 20 20 20 20 20 20 20  ge)!=0;.        
1b450 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64    for(ii=0; ii<d
1b460 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20  b->nDb; ii++){. 
1b470 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20             rc = 
1b480 73 71 6c 69 74 65 33 42 74 72 65 65 54 72 69 70  sqlite3BtreeTrip
1b490 41 6c 6c 43 75 72 73 6f 72 73 28 64 62 2d 3e 61  AllCursors(db->a
1b4a0 44 62 5b 69 69 5d 2e 70 42 74 2c 0a 20 20 20 20  Db[ii].pBt,.    
1b4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4d0 20 20 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f     SQLITE_ABORT_
1b4e0 52 4f 4c 4c 42 41 43 4b 2c 0a 20 20 20 20 20 20  ROLLBACK,.      
1b4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b510 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65 3d   isSchemaChange=
1b520 3d 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  =0);.           
1b530 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1b540 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
1b550 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1b560 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1b570 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
1b580 20 20 20 61 73 73 65 72 74 28 20 70 31 3d 3d 53     assert( p1==S
1b590 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
1b5a0 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 73   );.          is
1b5b0 53 63 68 65 6d 61 43 68 61 6e 67 65 20 3d 20 30  SchemaChange = 0
1b5c0 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
1b5d0 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69      for(ii=0; ii
1b5e0 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b  <db->nDb; ii++){
1b5f0 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20  .          rc = 
1b600 73 71 6c 69 74 65 33 42 74 72 65 65 53 61 76 65  sqlite3BtreeSave
1b610 70 6f 69 6e 74 28 64 62 2d 3e 61 44 62 5b 69 69  point(db->aDb[ii
1b620 5d 2e 70 42 74 2c 20 70 31 2c 20 69 53 61 76 65  ].pBt, p1, iSave
1b630 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  point);.        
1b640 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1b650 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20  _OK ){.         
1b660 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
1b670 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1b680 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
1b690 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 73  }.        if( is
1b6a0 53 63 68 65 6d 61 43 68 61 6e 67 65 20 29 7b 0a  SchemaChange ){.
1b6b0 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
1b6c0 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53  3ExpirePreparedS
1b6d0 74 61 74 65 6d 65 6e 74 73 28 64 62 2c 20 30 29  tatements(db, 0)
1b6e0 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
1b6f0 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d  te3ResetAllSchem
1b700 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64  asOfConnection(d
1b710 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62  b);.          db
1b720 2d 3e 6d 44 62 46 6c 61 67 73 20 7c 3d 20 44 42  ->mDbFlags |= DB
1b730 46 4c 41 47 5f 53 63 68 65 6d 61 43 68 61 6e 67  FLAG_SchemaChang
1b740 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  e;.        }.   
1b750 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a     }.  .      /*
1b760 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77   Regardless of w
1b770 68 65 74 68 65 72 20 74 68 69 73 20 69 73 20 61  hether this is a
1b780 20 52 45 4c 45 41 53 45 20 6f 72 20 52 4f 4c 4c   RELEASE or ROLL
1b790 42 41 43 4b 2c 20 64 65 73 74 72 6f 79 20 61 6c  BACK, destroy al
1b7a0 6c 20 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65  l .      ** save
1b7b0 70 6f 69 6e 74 73 20 6e 65 73 74 65 64 20 69 6e  points nested in
1b7c0 73 69 64 65 20 6f 66 20 74 68 65 20 73 61 76 65  side of the save
1b7d0 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72  point being oper
1b7e0 61 74 65 64 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20  ated on. */.    
1b7f0 20 20 77 68 69 6c 65 28 20 64 62 2d 3e 70 53 61    while( db->pSa
1b800 76 65 70 6f 69 6e 74 21 3d 70 53 61 76 65 70 6f  vepoint!=pSavepo
1b810 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 20 20 70  int ){.        p
1b820 54 6d 70 20 3d 20 64 62 2d 3e 70 53 61 76 65 70  Tmp = db->pSavep
1b830 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62  oint;.        db
1b840 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70  ->pSavepoint = p
1b850 54 6d 70 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20  Tmp->pNext;.    
1b860 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
1b870 65 28 64 62 2c 20 70 54 6d 70 29 3b 0a 20 20 20  e(db, pTmp);.   
1b880 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f       db->nSavepo
1b890 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a  int--;.      }..
1b8a0 20 20 20 20 20 20 2f 2a 20 49 66 20 69 74 20 69        /* If it i
1b8b0 73 20 61 20 52 45 4c 45 41 53 45 2c 20 74 68 65  s a RELEASE, the
1b8c0 6e 20 64 65 73 74 72 6f 79 20 74 68 65 20 73 61  n destroy the sa
1b8d0 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70  vepoint being op
1b8e0 65 72 61 74 65 64 20 6f 6e 20 0a 20 20 20 20 20  erated on .     
1b8f0 20 2a 2a 20 74 6f 6f 2e 20 49 66 20 69 74 20 69   ** too. If it i
1b900 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 2c  s a ROLLBACK TO,
1b910 20 74 68 65 6e 20 73 65 74 20 74 68 65 20 6e 75   then set the nu
1b920 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64  mber of deferred
1b930 20 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e 73 74   .      ** const
1b940 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73  raint violations
1b950 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20   present in the 
1b960 64 61 74 61 62 61 73 65 20 74 6f 20 74 68 65 20  database to the 
1b970 76 61 6c 75 65 20 73 74 6f 72 65 64 0a 20 20 20  value stored.   
1b980 20 20 20 2a 2a 20 77 68 65 6e 20 74 68 65 20 73     ** when the s
1b990 61 76 65 70 6f 69 6e 74 20 77 61 73 20 63 72 65  avepoint was cre
1b9a0 61 74 65 64 2e 20 20 2a 2f 0a 20 20 20 20 20 20  ated.  */.      
1b9b0 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e  if( p1==SAVEPOIN
1b9c0 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20  T_RELEASE ){.   
1b9d0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 53 61       assert( pSa
1b9e0 76 65 70 6f 69 6e 74 3d 3d 64 62 2d 3e 70 53 61  vepoint==db->pSa
1b9f0 76 65 70 6f 69 6e 74 20 29 3b 0a 20 20 20 20 20  vepoint );.     
1ba00 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e     db->pSavepoin
1ba10 74 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e  t = pSavepoint->
1ba20 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73  pNext;.        s
1ba30 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
1ba40 20 70 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20   pSavepoint);.  
1ba50 20 20 20 20 20 20 69 66 28 20 21 69 73 54 72 61        if( !isTra
1ba60 6e 73 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20  nsaction ){.    
1ba70 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70        db->nSavep
1ba80 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 20 20  oint--;.        
1ba90 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  }.      }else{. 
1baa0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
1bab0 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c  1==SAVEPOINT_ROL
1bac0 4c 42 41 43 4b 20 29 3b 0a 20 20 20 20 20 20 20  LBACK );.       
1bad0 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
1bae0 6e 73 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d  ns = pSavepoint-
1baf0 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a  >nDeferredCons;.
1bb00 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 44 65 66          db->nDef
1bb10 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 70  erredImmCons = p
1bb20 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65  Savepoint->nDefe
1bb30 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20  rredImmCons;.   
1bb40 20 20 20 7d 0a 0a 20 20 20 20 20 20 69 66 28 20     }..      if( 
1bb50 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 7c  !isTransaction |
1bb60 7c 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  | p1==SAVEPOINT_
1bb70 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20  ROLLBACK ){.    
1bb80 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1bb90 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62  VtabSavepoint(db
1bba0 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74  , p1, iSavepoint
1bbb0 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
1bbc0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
1bbd0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1bbe0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
1bbf0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20      }.  }.  if( 
1bc00 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
1bc10 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20  due_to_error;.. 
1bc20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1bc30 63 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74  code: AutoCommit
1bc40 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
1bc50 2a 2a 20 53 65 74 20 74 68 65 20 64 61 74 61 62  ** Set the datab
1bc60 61 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20  ase auto-commit 
1bc70 66 6c 61 67 20 74 6f 20 50 31 20 28 31 20 6f 72  flag to P1 (1 or
1bc80 20 30 29 2e 20 49 66 20 50 32 20 69 73 20 74 72   0). If P2 is tr
1bc90 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b  ue, roll.** back
1bca0 20 61 6e 79 20 63 75 72 72 65 6e 74 6c 79 20 61   any currently a
1bcb0 63 74 69 76 65 20 62 74 72 65 65 20 74 72 61 6e  ctive btree tran
1bcc0 73 61 63 74 69 6f 6e 73 2e 20 49 66 20 74 68 65  sactions. If the
1bcd0 72 65 20 61 72 65 20 61 6e 79 20 61 63 74 69 76  re are any activ
1bce0 65 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72 74 20  e.** VMs (apart 
1bcf0 66 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20  from this one), 
1bd00 74 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20  then a ROLLBACK 
1bd10 66 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54  fails.  A COMMIT
1bd20 20 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65   fails if.** the
1bd30 72 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72  re are active wr
1bd40 69 74 69 6e 67 20 56 4d 73 20 6f 72 20 61 63 74  iting VMs or act
1bd50 69 76 65 20 56 4d 73 20 74 68 61 74 20 75 73 65  ive VMs that use
1bd60 20 73 68 61 72 65 64 20 63 61 63 68 65 2e 0a 2a   shared cache..*
1bd70 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
1bd80 63 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65  ction causes the
1bd90 20 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a   VM to halt..*/.
1bda0 63 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d  case OP_AutoComm
1bdb0 69 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65 73 69  it: {.  int desi
1bdc0 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20  redAutoCommit;. 
1bdd0 20 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a   int iRollback;.
1bde0 0a 20 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  .  desiredAutoCo
1bdf0 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  mmit = pOp->p1;.
1be00 20 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f    iRollback = pO
1be10 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28  p->p2;.  assert(
1be20 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
1be30 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72 65 64  it==1 || desired
1be40 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b  AutoCommit==0 );
1be50 0a 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72  .  assert( desir
1be60 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20  edAutoCommit==1 
1be70 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d 30 20  || iRollback==0 
1be80 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  );.  assert( db-
1be90 3e 6e 56 64 62 65 41 63 74 69 76 65 3e 30 20 29  >nVdbeActive>0 )
1bea0 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73 74 20 74  ;  /* At least t
1beb0 68 69 73 20 6f 6e 65 20 56 4d 20 69 73 20 61 63  his one VM is ac
1bec0 74 69 76 65 20 2a 2f 0a 20 20 61 73 73 65 72 74  tive */.  assert
1bed0 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
1bee0 3b 0a 0a 20 20 69 66 28 20 64 65 73 69 72 65 64  ;..  if( desired
1bef0 41 75 74 6f 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e  AutoCommit!=db->
1bf00 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20  autoCommit ){.  
1bf10 20 20 69 66 28 20 69 52 6f 6c 6c 62 61 63 6b 20    if( iRollback 
1bf20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
1bf30 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
1bf40 69 74 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 73  it==1 );.      s
1bf50 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c  qlite3RollbackAl
1bf60 6c 28 64 62 2c 20 53 51 4c 49 54 45 5f 41 42 4f  l(db, SQLITE_ABO
1bf70 52 54 5f 52 4f 4c 4c 42 41 43 4b 29 3b 0a 20 20  RT_ROLLBACK);.  
1bf80 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d      db->autoComm
1bf90 69 74 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73  it = 1;.    }els
1bfa0 65 20 69 66 28 20 64 65 73 69 72 65 64 41 75 74  e if( desiredAut
1bfb0 6f 43 6f 6d 6d 69 74 20 26 26 20 64 62 2d 3e 6e  oCommit && db->n
1bfc0 56 64 62 65 57 72 69 74 65 3e 30 20 29 7b 0a 20  VdbeWrite>0 ){. 
1bfd0 20 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20       /* If this 
1bfe0 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c  instruction impl
1bff0 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d 49 54 20  ements a COMMIT 
1c000 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72  and other VMs ar
1c010 65 20 77 72 69 74 69 6e 67 0a 20 20 20 20 20 20  e writing.      
1c020 2a 2a 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72  ** return an err
1c030 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68  or indicating th
1c040 61 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73  at the other VMs
1c050 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66   must complete f
1c060 69 72 73 74 2e 20 0a 20 20 20 20 20 20 2a 2f 0a  irst. .      */.
1c070 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
1c080 65 45 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f  eError(p, "canno
1c090 74 20 63 6f 6d 6d 69 74 20 74 72 61 6e 73 61 63  t commit transac
1c0a0 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20 20  tion - ".       
1c0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0c0 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e     "SQL statemen
1c0d0 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29  ts in progress")
1c0e0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  ;.      rc = SQL
1c0f0 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20  ITE_BUSY;.      
1c100 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1c110 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c  o_error;.    }el
1c120 73 65 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c  se if( (rc = sql
1c130 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28  ite3VdbeCheckFk(
1c140 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f  p, 1))!=SQLITE_O
1c150 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  K ){.      goto 
1c160 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20  vdbe_return;.   
1c170 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62   }else{.      db
1c180 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28  ->autoCommit = (
1c190 75 38 29 64 65 73 69 72 65 64 41 75 74 6f 43 6f  u8)desiredAutoCo
1c1a0 6d 6d 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20  mmit;.    }.    
1c1b0 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 48  if( sqlite3VdbeH
1c1c0 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42  alt(p)==SQLITE_B
1c1d0 55 53 59 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e  USY ){.      p->
1c1e0 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d  pc = (int)(pOp -
1c1f0 20 61 4f 70 29 3b 0a 20 20 20 20 20 20 64 62 2d   aOp);.      db-
1c200 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75  >autoCommit = (u
1c210 38 29 28 31 2d 64 65 73 69 72 65 64 41 75 74 6f  8)(1-desiredAuto
1c220 43 6f 6d 6d 69 74 29 3b 0a 20 20 20 20 20 20 70  Commit);.      p
1c230 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49  ->rc = rc = SQLI
1c240 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67  TE_BUSY;.      g
1c250 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
1c260 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72  .    }.    asser
1c270 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e  t( db->nStatemen
1c280 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69  t==0 );.    sqli
1c290 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e  te3CloseSavepoin
1c2a0 74 73 28 64 62 29 3b 0a 20 20 20 20 69 66 28 20  ts(db);.    if( 
1c2b0 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  p->rc==SQLITE_OK
1c2c0 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   ){.      rc = S
1c2d0 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 20 20  QLITE_DONE;.    
1c2e0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20  }else{.      rc 
1c2f0 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
1c300 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20 76      }.    goto v
1c310 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 7d 65  dbe_return;.  }e
1c320 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
1c330 56 64 62 65 45 72 72 6f 72 28 70 2c 0a 20 20 20  VdbeError(p,.   
1c340 20 20 20 20 20 28 21 64 65 73 69 72 65 64 41 75       (!desiredAu
1c350 74 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f  toCommit)?"canno
1c360 74 20 73 74 61 72 74 20 61 20 74 72 61 6e 73 61  t start a transa
1c370 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 61 20 74  ction within a t
1c380 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20  ransaction":(.  
1c390 20 20 20 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b        (iRollback
1c3a0 29 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61  )?"cannot rollba
1c3b0 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74  ck - no transact
1c3c0 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 3a 0a  ion is active":.
1c3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3e0 20 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69     "cannot commi
1c3f0 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69  t - no transacti
1c400 6f 6e 20 69 73 20 61 63 74 69 76 65 22 29 29 3b  on is active"));
1c410 0a 20 20 20 20 20 20 20 20 20 0a 20 20 20 20 72  .         .    r
1c420 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
1c430 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74  ;.    goto abort
1c440 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1c450 20 7d 0a 20 20 2f 2a 4e 4f 54 52 45 41 43 48 45   }.  /*NOTREACHE
1c460 44 2a 2f 20 61 73 73 65 72 74 28 30 29 3b 0a 7d  D*/ assert(0);.}
1c470 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61  ../* Opcode: Tra
1c480 6e 73 61 63 74 69 6f 6e 20 50 31 20 50 32 20 50  nsaction P1 P2 P
1c490 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 65  3 P4 P5.**.** Be
1c4a0 67 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  gin a transactio
1c4b0 6e 20 6f 6e 20 64 61 74 61 62 61 73 65 20 50 31  n on database P1
1c4c0 20 69 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f   if a transactio
1c4d0 6e 20 69 73 20 6e 6f 74 20 61 6c 72 65 61 64 79  n is not already
1c4e0 0a 2a 2a 20 61 63 74 69 76 65 2e 0a 2a 2a 20 49  .** active..** I
1c4f0 66 20 50 32 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P2 is non-zero
1c500 2c 20 74 68 65 6e 20 61 20 77 72 69 74 65 2d 74  , then a write-t
1c510 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74  ransaction is st
1c520 61 72 74 65 64 2c 20 6f 72 20 69 66 20 61 20 0a  arted, or if a .
1c530 2a 2a 20 72 65 61 64 2d 74 72 61 6e 73 61 63 74  ** read-transact
1c540 69 6f 6e 20 69 73 20 61 6c 72 65 61 64 79 20 61  ion is already a
1c550 63 74 69 76 65 2c 20 69 74 20 69 73 20 75 70 67  ctive, it is upg
1c560 72 61 64 65 64 20 74 6f 20 61 20 77 72 69 74 65  raded to a write
1c570 2d 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2a  -transaction..**
1c580 20 49 66 20 50 32 20 69 73 20 7a 65 72 6f 2c 20   If P2 is zero, 
1c590 74 68 65 6e 20 61 20 72 65 61 64 2d 74 72 61 6e  then a read-tran
1c5a0 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74  saction is start
1c5b0 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  ed..**.** P1 is 
1c5c0 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  the index of the
1c5d0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6f   database file o
1c5e0 6e 20 77 68 69 63 68 20 74 68 65 20 74 72 61 6e  n which the tran
1c5f0 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 73 74  saction is.** st
1c600 61 72 74 65 64 2e 20 20 49 6e 64 65 78 20 30 20  arted.  Index 0 
1c610 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  is the main data
1c620 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 69 6e  base file and in
1c630 64 65 78 20 31 20 69 73 20 74 68 65 0a 2a 2a 20  dex 1 is the.** 
1c640 66 69 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65  file used for te
1c650 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20  mporary tables. 
1c660 20 49 6e 64 69 63 65 73 20 6f 66 20 32 20 6f 72   Indices of 2 or
1c670 20 6d 6f 72 65 20 61 72 65 20 75 73 65 64 20 66   more are used f
1c680 6f 72 0a 2a 2a 20 61 74 74 61 63 68 65 64 20 64  or.** attached d
1c690 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20  atabases..**.** 
1c6a0 49 66 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73  If a write-trans
1c6b0 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65  action is starte
1c6c0 64 20 61 6e 64 20 74 68 65 20 56 64 62 65 2e 75  d and the Vdbe.u
1c6d0 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 66  sesStmtJournal f
1c6e0 6c 61 67 20 69 73 0a 2a 2a 20 74 72 75 65 20 28  lag is.** true (
1c6f0 74 68 69 73 20 66 6c 61 67 20 69 73 20 73 65 74  this flag is set
1c700 20 69 66 20 74 68 65 20 56 64 62 65 20 6d 61 79   if the Vdbe may
1c710 20 6d 6f 64 69 66 79 20 6d 6f 72 65 20 74 68 61   modify more tha
1c720 6e 20 6f 6e 65 20 72 6f 77 20 61 6e 64 20 6d 61  n one row and ma
1c730 79 0a 2a 2a 20 74 68 72 6f 77 20 61 6e 20 41 42  y.** throw an AB
1c740 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 29 2c 20  ORT exception), 
1c750 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  a statement tran
1c760 73 61 63 74 69 6f 6e 20 6d 61 79 20 61 6c 73 6f  saction may also
1c770 20 62 65 20 6f 70 65 6e 65 64 2e 0a 2a 2a 20 4d   be opened..** M
1c780 6f 72 65 20 73 70 65 63 69 66 69 63 61 6c 6c 79  ore specifically
1c790 2c 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72  , a statement tr
1c7a0 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6f 70 65  ansaction is ope
1c7b0 6e 65 64 20 69 66 66 20 74 68 65 20 64 61 74 61  ned iff the data
1c7c0 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69  base.** connecti
1c7d0 6f 6e 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  on is currently 
1c7e0 6e 6f 74 20 69 6e 20 61 75 74 6f 63 6f 6d 6d 69  not in autocommi
1c7f0 74 20 6d 6f 64 65 2c 20 6f 72 20 69 66 20 74 68  t mode, or if th
1c800 65 72 65 20 61 72 65 20 6f 74 68 65 72 0a 2a 2a  ere are other.**
1c810 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e   active statemen
1c820 74 73 2e 20 41 20 73 74 61 74 65 6d 65 6e 74 20  ts. A statement 
1c830 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 6c 6f  transaction allo
1c840 77 73 20 74 68 65 20 63 68 61 6e 67 65 73 20 6d  ws the changes m
1c850 61 64 65 20 62 79 20 74 68 69 73 0a 2a 2a 20 56  ade by this.** V
1c860 44 42 45 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64  DBE to be rolled
1c870 20 62 61 63 6b 20 61 66 74 65 72 20 61 6e 20 65   back after an e
1c880 72 72 6f 72 20 77 69 74 68 6f 75 74 20 68 61 76  rror without hav
1c890 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62 61 63 6b  ing to roll back
1c8a0 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20 74   the.** entire t
1c8b0 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 66 20 6e  ransaction. If n
1c8c0 6f 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f 75  o error is encou
1c8d0 6e 74 65 72 65 64 2c 20 74 68 65 20 73 74 61 74  ntered, the stat
1c8e0 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
1c8f0 6e 0a 2a 2a 20 77 69 6c 6c 20 61 75 74 6f 6d 61  n.** will automa
1c900 74 69 63 61 6c 6c 79 20 63 6f 6d 6d 69 74 20 77  tically commit w
1c910 68 65 6e 20 74 68 65 20 56 44 42 45 20 68 61 6c  hen the VDBE hal
1c920 74 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21  ts..**.** If P5!
1c930 3d 30 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63  =0 then this opc
1c940 6f 64 65 20 61 6c 73 6f 20 63 68 65 63 6b 73 20  ode also checks 
1c950 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  the schema cooki
1c960 65 20 61 67 61 69 6e 73 74 20 50 33 0a 2a 2a 20  e against P3.** 
1c970 61 6e 64 20 74 68 65 20 73 63 68 65 6d 61 20 67  and the schema g
1c980 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65  eneration counte
1c990 72 20 61 67 61 69 6e 73 74 20 50 34 2e 0a 2a 2a  r against P4..**
1c9a0 20 54 68 65 20 63 6f 6f 6b 69 65 20 63 68 61 6e   The cookie chan
1c9b0 67 65 73 20 69 74 73 20 76 61 6c 75 65 20 77 68  ges its value wh
1c9c0 65 6e 65 76 65 72 20 74 68 65 20 64 61 74 61 62  enever the datab
1c9d0 61 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67  ase schema chang
1c9e0 65 73 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72  es..** This oper
1c9f0 61 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f  ation is used to
1ca00 20 64 65 74 65 63 74 20 77 68 65 6e 20 74 68 61   detect when tha
1ca10 74 20 74 68 65 20 63 6f 6f 6b 69 65 20 68 61 73  t the cookie has
1ca20 20 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20   changed.** and 
1ca30 74 68 61 74 20 74 68 65 20 63 75 72 72 65 6e 74  that the current
1ca40 20 70 72 6f 63 65 73 73 20 6e 65 65 64 73 20 74   process needs t
1ca50 6f 20 72 65 72 65 61 64 20 74 68 65 20 73 63 68  o reread the sch
1ca60 65 6d 61 2e 20 20 49 66 20 74 68 65 20 73 63 68  ema.  If the sch
1ca70 65 6d 61 0a 2a 2a 20 63 6f 6f 6b 69 65 20 69 6e  ema.** cookie in
1ca80 20 50 33 20 64 69 66 66 65 72 73 20 66 72 6f 6d   P3 differs from
1ca90 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b   the schema cook
1caa0 69 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ie in the databa
1cab0 73 65 20 68 65 61 64 65 72 20 6f 72 0a 2a 2a 20  se header or.** 
1cac0 69 66 20 74 68 65 20 73 63 68 65 6d 61 20 67 65  if the schema ge
1cad0 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72  neration counter
1cae0 20 69 6e 20 50 34 20 64 69 66 66 65 72 73 20 66   in P4 differs f
1caf0 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74 0a  rom the current.
1cb00 2a 2a 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f  ** generation co
1cb10 75 6e 74 65 72 2c 20 74 68 65 6e 20 61 6e 20 53  unter, then an S
1cb20 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 65 72 72  QLITE_SCHEMA err
1cb30 6f 72 20 69 73 20 72 61 69 73 65 64 20 61 6e 64  or is raised and
1cb40 20 65 78 65 63 75 74 69 6f 6e 0a 2a 2a 20 68 61   execution.** ha
1cb50 6c 74 73 2e 20 20 54 68 65 20 73 71 6c 69 74 65  lts.  The sqlite
1cb60 33 5f 73 74 65 70 28 29 20 77 72 61 70 70 65 72  3_step() wrapper
1cb70 20 66 75 6e 63 74 69 6f 6e 20 6d 69 67 68 74 20   function might 
1cb80 74 68 65 6e 20 72 65 70 72 65 70 61 72 65 20 74  then reprepare t
1cb90 68 65 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20  he.** statement 
1cba0 61 6e 64 20 72 65 72 75 6e 20 69 74 20 66 72 6f  and rerun it fro
1cbb0 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e  m the beginning.
1cbc0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61 6e  .*/.case OP_Tran
1cbd0 73 61 63 74 69 6f 6e 3a 20 7b 0a 20 20 42 74 72  saction: {.  Btr
1cbe0 65 65 20 2a 70 42 74 3b 0a 20 20 69 6e 74 20 69  ee *pBt;.  int i
1cbf0 4d 65 74 61 20 3d 20 30 3b 0a 0a 20 20 61 73 73  Meta = 0;..  ass
1cc00 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65  ert( p->bIsReade
1cc10 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
1cc20 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 7c 7c  ->readOnly==0 ||
1cc30 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20   pOp->p2==0 );. 
1cc40 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1cc50 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
1cc60 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
1cc70 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
1cc80 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70  ->btreeMask, pOp
1cc90 2d 3e 70 31 29 20 29 3b 0a 20 20 69 66 28 20 70  ->p1) );.  if( p
1cca0 4f 70 2d 3e 70 32 20 26 26 20 28 64 62 2d 3e 66  Op->p2 && (db->f
1ccb0 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 51 75  lags & SQLITE_Qu
1ccc0 65 72 79 4f 6e 6c 79 29 21 3d 30 20 29 7b 0a 20  eryOnly)!=0 ){. 
1ccd0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52     rc = SQLITE_R
1cce0 45 41 44 4f 4e 4c 59 3b 0a 20 20 20 20 67 6f 74  EADONLY;.    got
1ccf0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1cd00 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 42 74 20  rror;.  }.  pBt 
1cd10 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  = db->aDb[pOp->p
1cd20 31 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28 20 70  1].pBt;..  if( p
1cd30 42 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  Bt ){.    rc = s
1cd40 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e  qlite3BtreeBegin
1cd50 54 72 61 6e 73 28 70 42 74 2c 20 70 4f 70 2d 3e  Trans(pBt, pOp->
1cd60 70 32 2c 20 26 69 4d 65 74 61 29 3b 0a 20 20 20  p2, &iMeta);.   
1cd70 20 74 65 73 74 63 61 73 65 28 20 72 63 3d 3d 53   testcase( rc==S
1cd80 51 4c 49 54 45 5f 42 55 53 59 5f 53 4e 41 50 53  QLITE_BUSY_SNAPS
1cd90 48 4f 54 20 29 3b 0a 20 20 20 20 74 65 73 74 63  HOT );.    testc
1cda0 61 73 65 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ase( rc==SQLITE_
1cdb0 42 55 53 59 5f 52 45 43 4f 56 45 52 59 20 29 3b  BUSY_RECOVERY );
1cdc0 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c  .    if( rc!=SQL
1cdd0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
1cde0 69 66 28 20 28 72 63 26 30 78 66 66 29 3d 3d 53  if( (rc&0xff)==S
1cdf0 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
1ce00 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 28 69        p->pc = (i
1ce10 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a  nt)(pOp - aOp);.
1ce20 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20          p->rc = 
1ce30 72 63 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f  rc;.        goto
1ce40 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
1ce50 20 20 20 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f      }.      goto
1ce60 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1ce70 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  ror;.    }..    
1ce80 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20 70  if( pOp->p2 && p
1ce90 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61  ->usesStmtJourna
1cea0 6c 20 0a 20 20 20 20 20 26 26 20 28 64 62 2d 3e  l .     && (db->
1ceb0 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c  autoCommit==0 ||
1cec0 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31   db->nVdbeRead>1
1ced0 29 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20  ) .    ){.      
1cee0 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
1cef0 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42  treeIsInTrans(pB
1cf00 74 29 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  t) );.      if( 
1cf10 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30  p->iStatement==0
1cf20 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
1cf30 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65  rt( db->nStateme
1cf40 6e 74 3e 3d 30 20 26 26 20 64 62 2d 3e 6e 53 61  nt>=0 && db->nSa
1cf50 76 65 70 6f 69 6e 74 3e 3d 30 20 29 3b 0a 20 20  vepoint>=0 );.  
1cf60 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65        db->nState
1cf70 6d 65 6e 74 2b 2b 3b 20 0a 20 20 20 20 20 20 20  ment++; .       
1cf80 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 20 3d   p->iStatement =
1cf90 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20   db->nSavepoint 
1cfa0 2b 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74  + db->nStatement
1cfb0 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
1cfc0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
1cfd0 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 53  bSavepoint(db, S
1cfe0 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 20  AVEPOINT_BEGIN, 
1cff0 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 2d 31 29  p->iStatement-1)
1d000 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d  ;.      if( rc==
1d010 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1d020 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1d030 33 42 74 72 65 65 42 65 67 69 6e 53 74 6d 74 28  3BtreeBeginStmt(
1d040 70 42 74 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65  pBt, p->iStateme
1d050 6e 74 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  nt);.      }..  
1d060 20 20 20 20 2f 2a 20 53 74 6f 72 65 20 74 68 65      /* Store the
1d070 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 6f   current value o
1d080 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  f the database h
1d090 61 6e 64 6c 65 73 20 64 65 66 65 72 72 65 64 20  andles deferred 
1d0a0 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20 20 20 20  constraint.     
1d0b0 20 2a 2a 20 63 6f 75 6e 74 65 72 2e 20 49 66 20   ** counter. If 
1d0c0 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72  the statement tr
1d0d0 61 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64 73 20  ansaction needs 
1d0e0 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63  to be rolled bac
1d0f0 6b 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20  k,.      ** the 
1d100 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f  value of this co
1d110 75 6e 74 65 72 20 6e 65 65 64 73 20 74 6f 20 62  unter needs to b
1d120 65 20 72 65 73 74 6f 72 65 64 20 74 6f 6f 2e 20  e restored too. 
1d130 20 2a 2f 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74   */.      p->nSt
1d140 6d 74 44 65 66 43 6f 6e 73 20 3d 20 64 62 2d 3e  mtDefCons = db->
1d150 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20  nDeferredCons;. 
1d160 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66       p->nStmtDef
1d170 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44  ImmCons = db->nD
1d180 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a  eferredImmCons;.
1d190 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61 73 73 65      }.  }.  asse
1d1a0 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c  rt( pOp->p5==0 |
1d1b0 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  | pOp->p4type==P
1d1c0 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 69 66 28  4_INT32 );.  if(
1d1d0 20 70 4f 70 2d 3e 70 35 0a 20 20 20 26 26 20 28   pOp->p5.   && (
1d1e0 69 4d 65 74 61 21 3d 70 4f 70 2d 3e 70 33 0a 20  iMeta!=pOp->p3. 
1d1f0 20 20 20 20 20 7c 7c 20 64 62 2d 3e 61 44 62 5b       || db->aDb[
1d200 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61  pOp->p1].pSchema
1d210 2d 3e 69 47 65 6e 65 72 61 74 69 6f 6e 21 3d 70  ->iGeneration!=p
1d220 4f 70 2d 3e 70 34 2e 69 29 0a 20 20 29 7b 0a 20  Op->p4.i).  ){. 
1d230 20 20 20 2f 2a 0a 20 20 20 20 2a 2a 20 49 4d 50     /*.    ** IMP
1d240 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20  LEMENTATION-OF: 
1d250 52 2d 30 33 31 38 39 2d 35 31 31 33 35 20 41 73  R-03189-51135 As
1d260 20 65 61 63 68 20 53 51 4c 20 73 74 61 74 65 6d   each SQL statem
1d270 65 6e 74 20 72 75 6e 73 2c 20 74 68 65 20 73 63  ent runs, the sc
1d280 68 65 6d 61 0a 20 20 20 20 2a 2a 20 76 65 72 73  hema.    ** vers
1d290 69 6f 6e 20 69 73 20 63 68 65 63 6b 65 64 20 74  ion is checked t
1d2a0 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20 74 68  o ensure that th
1d2b0 65 20 73 63 68 65 6d 61 20 68 61 73 20 6e 6f 74  e schema has not
1d2c0 20 63 68 61 6e 67 65 64 20 73 69 6e 63 65 20 74   changed since t
1d2d0 68 65 0a 20 20 20 20 2a 2a 20 53 51 4c 20 73 74  he.    ** SQL st
1d2e0 61 74 65 6d 65 6e 74 20 77 61 73 20 70 72 65 70  atement was prep
1d2f0 61 72 65 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  ared..    */.   
1d300 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
1d310 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a  b, p->zErrMsg);.
1d320 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d      p->zErrMsg =
1d330 20 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70   sqlite3DbStrDup
1d340 28 64 62 2c 20 22 64 61 74 61 62 61 73 65 20 73  (db, "database s
1d350 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65  chema has change
1d360 64 22 29 3b 0a 20 20 20 20 2f 2a 20 49 66 20 74  d");.    /* If t
1d370 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65  he schema-cookie
1d380 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
1d390 73 65 20 66 69 6c 65 20 6d 61 74 63 68 65 73 20  se file matches 
1d3a0 74 68 65 20 63 6f 6f 6b 69 65 20 0a 20 20 20 20  the cookie .    
1d3b0 2a 2a 20 73 74 6f 72 65 64 20 77 69 74 68 20 74  ** stored with t
1d3c0 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 72 65 70  he in-memory rep
1d3d0 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
1d3e0 68 65 20 73 63 68 65 6d 61 2c 20 64 6f 0a 20 20  he schema, do.  
1d3f0 20 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61 64 20    ** not reload 
1d400 74 68 65 20 73 63 68 65 6d 61 20 66 72 6f 6d 20  the schema from 
1d410 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
1d420 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a  e..    **.    **
1d430 20 49 66 20 76 69 72 74 75 61 6c 2d 74 61 62 6c   If virtual-tabl
1d440 65 73 20 61 72 65 20 69 6e 20 75 73 65 2c 20 74  es are in use, t
1d450 68 69 73 20 69 73 20 6e 6f 74 20 6a 75 73 74 20  his is not just 
1d460 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e  an optimization.
1d470 0a 20 20 20 20 2a 2a 20 4f 66 74 65 6e 2c 20 76  .    ** Often, v
1d480 2d 74 61 62 6c 65 73 20 73 74 6f 72 65 20 74 68  -tables store th
1d490 65 69 72 20 64 61 74 61 20 69 6e 20 6f 74 68 65  eir data in othe
1d4a0 72 20 53 51 4c 69 74 65 20 74 61 62 6c 65 73 2c  r SQLite tables,
1d4b0 20 77 68 69 63 68 0a 20 20 20 20 2a 2a 20 61 72   which.    ** ar
1d4c0 65 20 71 75 65 72 69 65 64 20 66 72 6f 6d 20 77  e queried from w
1d4d0 69 74 68 69 6e 20 78 4e 65 78 74 28 29 20 61 6e  ithin xNext() an
1d4e0 64 20 6f 74 68 65 72 20 76 2d 74 61 62 6c 65 20  d other v-table 
1d4f0 6d 65 74 68 6f 64 73 20 75 73 69 6e 67 0a 20 20  methods using.  
1d500 20 20 2a 2a 20 70 72 65 70 61 72 65 64 20 71 75    ** prepared qu
1d510 65 72 69 65 73 2e 20 49 66 20 73 75 63 68 20 61  eries. If such a
1d520 20 71 75 65 72 79 20 69 73 20 6f 75 74 2d 6f 66   query is out-of
1d530 2d 64 61 74 65 2c 20 77 65 20 64 6f 20 6e 6f 74  -date, we do not
1d540 20 77 61 6e 74 20 74 6f 0a 20 20 20 20 2a 2a 20   want to.    ** 
1d550 64 69 73 63 61 72 64 20 74 68 65 20 64 61 74 61  discard the data
1d560 62 61 73 65 20 73 63 68 65 6d 61 2c 20 61 73 20  base schema, as 
1d570 74 68 65 20 75 73 65 72 20 63 6f 64 65 20 69 6d  the user code im
1d580 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 0a 20  plementing the. 
1d590 20 20 20 2a 2a 20 76 2d 74 61 62 6c 65 20 77 6f     ** v-table wo
1d5a0 75 6c 64 20 68 61 76 65 20 74 6f 20 62 65 20 72  uld have to be r
1d5b0 65 61 64 79 20 66 6f 72 20 74 68 65 20 73 71 6c  eady for the sql
1d5c0 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74  ite3_vtab struct
1d5d0 75 72 65 20 69 74 73 65 6c 66 0a 20 20 20 20 2a  ure itself.    *
1d5e0 2a 20 74 6f 20 62 65 20 69 6e 76 61 6c 69 64 61  * to be invalida
1d5f0 74 65 64 20 77 68 65 6e 65 76 65 72 20 73 71 6c  ted whenever sql
1d600 69 74 65 33 5f 73 74 65 70 28 29 20 69 73 20 63  ite3_step() is c
1d610 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69  alled from withi
1d620 6e 20 0a 20 20 20 20 2a 2a 20 61 20 76 2d 74 61  n .    ** a v-ta
1d630 62 6c 65 20 6d 65 74 68 6f 64 2e 0a 20 20 20 20  ble method..    
1d640 2a 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 61  */.    if( db->a
1d650 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68  Db[pOp->p1].pSch
1d660 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b  ema->schema_cook
1d670 69 65 21 3d 69 4d 65 74 61 20 29 7b 0a 20 20 20  ie!=iMeta ){.   
1d680 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f     sqlite3ResetO
1d690 6e 65 53 63 68 65 6d 61 28 64 62 2c 20 70 4f 70  neSchema(db, pOp
1d6a0 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 20 20 20  ->p1);.    }.   
1d6b0 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b   p->expired = 1;
1d6c0 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
1d6d0 5f 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20 20 69  _SCHEMA;.  }.  i
1d6e0 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
1d6f0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1d700 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1d710 4f 70 63 6f 64 65 3a 20 52 65 61 64 43 6f 6f 6b  Opcode: ReadCook
1d720 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ie P1 P2 P3 * *.
1d730 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f 6f 6b 69  **.** Read cooki
1d740 65 20 6e 75 6d 62 65 72 20 50 33 20 66 72 6f 6d  e number P3 from
1d750 20 64 61 74 61 62 61 73 65 20 50 31 20 61 6e 64   database P1 and
1d760 20 77 72 69 74 65 20 69 74 20 69 6e 74 6f 20 72   write it into r
1d770 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 50  egister P2..** P
1d780 33 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68 65  3==1 is the sche
1d790 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 33 3d  ma version.  P3=
1d7a0 3d 32 20 69 73 20 74 68 65 20 64 61 74 61 62 61  =2 is the databa
1d7b0 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 33  se format..** P3
1d7c0 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d  ==3 is the recom
1d7d0 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63 61 63  mended pager cac
1d7e0 68 65 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20  he size, and so 
1d7f0 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73  forth.  P1==0 is
1d800 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74  .** the main dat
1d810 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50  abase file and P
1d820 31 3d 3d 31 20 69 73 20 74 68 65 20 64 61 74 61  1==1 is the data
1d830 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74  base file used t
1d840 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f  o store.** tempo
1d850 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a  rary tables..**.
1d860 2a 2a 20 54 68 65 72 65 20 6d 75 73 74 20 62 65  ** There must be
1d870 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e 20   a read-lock on 
1d880 74 68 65 20 64 61 74 61 62 61 73 65 20 28 65 69  the database (ei
1d890 74 68 65 72 20 61 20 74 72 61 6e 73 61 63 74 69  ther a transacti
1d8a0 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62 65 20 73 74  on.** must be st
1d8b0 61 72 74 65 64 20 6f 72 20 74 68 65 72 65 20 6d  arted or there m
1d8c0 75 73 74 20 62 65 20 61 6e 20 6f 70 65 6e 20 63  ust be an open c
1d8d0 75 72 73 6f 72 29 20 62 65 66 6f 72 65 0a 2a 2a  ursor) before.**
1d8e0 20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73 20   executing this 
1d8f0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
1d900 63 61 73 65 20 4f 50 5f 52 65 61 64 43 6f 6f 6b  case OP_ReadCook
1d910 69 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ie: {           
1d920 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
1d930 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e   int iMeta;.  in
1d940 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 69 43 6f  t iDb;.  int iCo
1d950 6f 6b 69 65 3b 0a 0a 20 20 61 73 73 65 72 74 28  okie;..  assert(
1d960 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b   p->bIsReader );
1d970 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31  .  iDb = pOp->p1
1d980 3b 0a 20 20 69 43 6f 6f 6b 69 65 20 3d 20 70 4f  ;.  iCookie = pO
1d990 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28  p->p3;.  assert(
1d9a0 20 70 4f 70 2d 3e 70 33 3c 53 51 4c 49 54 45 5f   pOp->p3<SQLITE_
1d9b0 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a  N_BTREE_META );.
1d9c0 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30    assert( iDb>=0
1d9d0 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20   && iDb<db->nDb 
1d9e0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  );.  assert( db-
1d9f0 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 21 3d 30  >aDb[iDb].pBt!=0
1da00 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
1da10 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
1da20 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 0a  eMask, iDb) );..
1da30 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65    sqlite3BtreeGe
1da40 74 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b 69 44  tMeta(db->aDb[iD
1da50 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b 69 65 2c  b].pBt, iCookie,
1da60 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b   (u32 *)&iMeta);
1da70 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
1da80 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
1da90 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
1daa0 69 4d 65 74 61 3b 0a 20 20 62 72 65 61 6b 3b 0a  iMeta;.  break;.
1dab0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
1dac0 74 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33  tCookie P1 P2 P3
1dad0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
1dae0 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c   the integer val
1daf0 75 65 20 50 33 20 69 6e 74 6f 20 63 6f 6f 6b 69  ue P3 into cooki
1db00 65 20 6e 75 6d 62 65 72 20 50 32 20 6f 66 20 64  e number P2 of d
1db10 61 74 61 62 61 73 65 20 50 31 2e 0a 2a 2a 20 50  atabase P1..** P
1db20 32 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68 65  2==1 is the sche
1db30 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 32 3d  ma version.  P2=
1db40 3d 32 20 69 73 20 74 68 65 20 64 61 74 61 62 61  =2 is the databa
1db50 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 32  se format..** P2
1db60 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d  ==3 is the recom
1db70 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63 61 63  mended pager cac
1db80 68 65 20 0a 2a 2a 20 73 69 7a 65 2c 20 61 6e 64  he .** size, and
1db90 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d   so forth.  P1==
1dba0 30 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61  0 is the main da
1dbb0 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20  tabase file and 
1dbc0 50 31 3d 3d 31 20 69 73 20 74 68 65 20 0a 2a 2a  P1==1 is the .**
1dbd0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75   database file u
1dbe0 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 65 6d  sed to store tem
1dbf0 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a  porary tables..*
1dc00 2a 0a 2a 2a 20 41 20 74 72 61 6e 73 61 63 74 69  *.** A transacti
1dc10 6f 6e 20 6d 75 73 74 20 62 65 20 73 74 61 72 74  on must be start
1dc20 65 64 20 62 65 66 6f 72 65 20 65 78 65 63 75 74  ed before execut
1dc30 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e  ing this opcode.
1dc40 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 74 43  .*/.case OP_SetC
1dc50 6f 6f 6b 69 65 3a 20 7b 0a 20 20 44 62 20 2a 70  ookie: {.  Db *p
1dc60 44 62 3b 0a 0a 20 20 73 71 6c 69 74 65 33 56 64  Db;..  sqlite3Vd
1dc70 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e 74  beIncrWriteCount
1dc80 65 72 28 70 2c 20 30 29 3b 0a 20 20 61 73 73 65  er(p, 0);.  asse
1dc90 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c 49  rt( pOp->p2<SQLI
1dca0 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20  TE_N_BTREE_META 
1dcb0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1dcc0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1dcd0 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
1dce0 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
1dcf0 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
1dd00 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61   pOp->p1) );.  a
1dd10 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
1dd20 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d  ly==0 );.  pDb =
1dd30 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70   &db->aDb[pOp->p
1dd40 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44  1];.  assert( pD
1dd50 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61  b->pBt!=0 );.  a
1dd60 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63  ssert( sqlite3Sc
1dd70 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62  hemaMutexHeld(db
1dd80 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29 3b  , pOp->p1, 0) );
1dd90 0a 20 20 2f 2a 20 53 65 65 20 6e 6f 74 65 20 61  .  /* See note a
1dda0 62 6f 75 74 20 69 6e 64 65 78 20 73 68 69 66 74  bout index shift
1ddb0 69 6e 67 20 6f 6e 20 4f 50 5f 52 65 61 64 43 6f  ing on OP_ReadCo
1ddc0 6f 6b 69 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73  okie */.  rc = s
1ddd0 71 6c 69 74 65 33 42 74 72 65 65 55 70 64 61 74  qlite3BtreeUpdat
1dde0 65 4d 65 74 61 28 70 44 62 2d 3e 70 42 74 2c 20  eMeta(pDb->pBt, 
1ddf0 70 4f 70 2d 3e 70 32 2c 20 70 4f 70 2d 3e 70 33  pOp->p2, pOp->p3
1de00 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  );.  if( pOp->p2
1de10 3d 3d 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56  ==BTREE_SCHEMA_V
1de20 45 52 53 49 4f 4e 20 29 7b 0a 20 20 20 20 2f 2a  ERSION ){.    /*
1de30 20 57 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61   When the schema
1de40 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 2c   cookie changes,
1de50 20 72 65 63 6f 72 64 20 74 68 65 20 6e 65 77 20   record the new 
1de60 63 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c 6c  cookie internall
1de70 79 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53  y */.    pDb->pS
1de80 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f  chema->schema_co
1de90 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  okie = pOp->p3;.
1dea0 20 20 20 20 64 62 2d 3e 6d 44 62 46 6c 61 67 73      db->mDbFlags
1deb0 20 7c 3d 20 44 42 46 4c 41 47 5f 53 63 68 65 6d   |= DBFLAG_Schem
1dec0 61 43 68 61 6e 67 65 3b 0a 20 20 7d 65 6c 73 65  aChange;.  }else
1ded0 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54   if( pOp->p2==BT
1dee0 52 45 45 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20  REE_FILE_FORMAT 
1def0 29 7b 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72 64  ){.    /* Record
1df00 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20   changes in the 
1df10 66 69 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a 20  file format */. 
1df20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d     pDb->pSchema-
1df30 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70  >file_format = p
1df40 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 69 66  Op->p3;.  }.  if
1df50 28 20 70 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a  ( pOp->p1==1 ){.
1df60 20 20 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74      /* Invalidat
1df70 65 20 61 6c 6c 20 70 72 65 70 61 72 65 64 20 73  e all prepared s
1df80 74 61 74 65 6d 65 6e 74 73 20 77 68 65 6e 65 76  tatements whenev
1df90 65 72 20 74 68 65 20 54 45 4d 50 20 64 61 74 61  er the TEMP data
1dfa0 62 61 73 65 0a 20 20 20 20 2a 2a 20 73 63 68 65  base.    ** sche
1dfb0 6d 61 20 69 73 20 63 68 61 6e 67 65 64 2e 20 20  ma is changed.  
1dfc0 54 69 63 6b 65 74 20 23 31 36 34 34 20 2a 2f 0a  Ticket #1644 */.
1dfd0 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72      sqlite3Expir
1dfe0 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
1dff0 6e 74 73 28 64 62 2c 20 30 29 3b 0a 20 20 20 20  nts(db, 0);.    
1e000 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30 3b 0a  p->expired = 0;.
1e010 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67    }.  if( rc ) g
1e020 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1e030 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
1e040 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
1e050 70 65 6e 52 65 61 64 20 50 31 20 50 32 20 50 33  penRead P1 P2 P3
1e060 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
1e070 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d  is: root=P2 iDb=
1e080 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20  P3.**.** Open a 
1e090 72 65 61 64 2d 6f 6e 6c 79 20 63 75 72 73 6f 72  read-only cursor
1e0a0 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73   for the databas
1e0b0 65 20 74 61 62 6c 65 20 77 68 6f 73 65 20 72 6f  e table whose ro
1e0c0 6f 74 20 70 61 67 65 20 69 73 0a 2a 2a 20 50 32  ot page is.** P2
1e0d0 20 69 6e 20 61 20 64 61 74 61 62 61 73 65 20 66   in a database f
1e0e0 69 6c 65 2e 20 20 54 68 65 20 64 61 74 61 62 61  ile.  The databa
1e0f0 73 65 20 66 69 6c 65 20 69 73 20 64 65 74 65 72  se file is deter
1e100 6d 69 6e 65 64 20 62 79 20 50 33 2e 20 0a 2a 2a  mined by P3. .**
1e110 20 50 33 3d 3d 30 20 6d 65 61 6e 73 20 74 68 65   P3==0 means the
1e120 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20   main database, 
1e130 50 33 3d 3d 31 20 6d 65 61 6e 73 20 74 68 65 20  P3==1 means the 
1e140 64 61 74 61 62 61 73 65 20 75 73 65 64 20 66 6f  database used fo
1e150 72 20 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20  r .** temporary 
1e160 74 61 62 6c 65 73 2c 20 61 6e 64 20 50 33 3e 31  tables, and P3>1
1e170 20 6d 65 61 6e 73 20 75 73 65 64 20 74 68 65 20   means used the 
1e180 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 61 74  corresponding at
1e190 74 61 63 68 65 64 0a 2a 2a 20 64 61 74 61 62 61  tached.** databa
1e1a0 73 65 2e 20 20 47 69 76 65 20 74 68 65 20 6e 65  se.  Give the ne
1e1b0 77 20 63 75 72 73 6f 72 20 61 6e 20 69 64 65 6e  w cursor an iden
1e1c0 74 69 66 69 65 72 20 6f 66 20 50 31 2e 20 20 54  tifier of P1.  T
1e1d0 68 65 20 50 31 0a 2a 2a 20 76 61 6c 75 65 73 20  he P1.** values 
1e1e0 6e 65 65 64 20 6e 6f 74 20 62 65 20 63 6f 6e 74  need not be cont
1e1f0 69 67 75 6f 75 73 20 62 75 74 20 61 6c 6c 20 50  iguous but all P
1e200 31 20 76 61 6c 75 65 73 20 73 68 6f 75 6c 64 20  1 values should 
1e210 62 65 20 73 6d 61 6c 6c 20 69 6e 74 65 67 65 72  be small integer
1e220 73 2e 0a 2a 2a 20 49 74 20 69 73 20 61 6e 20 65  s..** It is an e
1e230 72 72 6f 72 20 66 6f 72 20 50 31 20 74 6f 20 62  rror for P1 to b
1e240 65 20 6e 65 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a  e negative..**.*
1e250 2a 20 41 6c 6c 6f 77 65 64 20 50 35 20 62 69 74  * Allowed P5 bit
1e260 73 3a 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c  s:.** <ul>.** <l
1e270 69 3e 20 20 3c 62 3e 30 78 30 32 20 4f 50 46 4c  i>  <b>0x02 OPFL
1e280 41 47 5f 53 45 45 4b 45 51 3c 2f 62 3e 3a 20 54  AG_SEEKEQ</b>: T
1e290 68 69 73 20 63 75 72 73 6f 72 20 77 69 6c 6c 20  his cursor will 
1e2a0 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 66 6f 72  only be used for
1e2b0 0a 2a 2a 20 20 20 20 20 20 20 65 71 75 61 6c 69  .**       equali
1e2c0 74 79 20 6c 6f 6f 6b 75 70 73 20 28 69 6d 70 6c  ty lookups (impl
1e2d0 65 6d 65 6e 74 65 64 20 61 73 20 61 20 70 61 69  emented as a pai
1e2e0 72 20 6f 66 20 6f 70 63 6f 64 65 73 20 4f 50 5f  r of opcodes OP_
1e2f0 53 65 65 6b 47 45 2f 4f 50 5f 49 64 78 47 54 0a  SeekGE/OP_IdxGT.
1e300 2a 2a 20 20 20 20 20 20 20 6f 66 20 4f 50 5f 53  **       of OP_S
1e310 65 65 6b 4c 45 2f 4f 50 5f 49 64 78 47 54 29 0a  eekLE/OP_IdxGT).
1e320 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20 54  ** </ul>.**.** T
1e330 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20  he P4 value may 
1e340 62 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74  be either an int
1e350 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20  eger (P4_INT32) 
1e360 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a  or a pointer to.
1e370 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72  ** a KeyInfo str
1e380 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e  ucture (P4_KEYIN
1e390 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61 20  FO). If it is a 
1e3a0 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79  pointer to a Key
1e3b0 49 6e 66 6f 20 0a 2a 2a 20 6f 62 6a 65 63 74 2c  Info .** object,
1e3c0 20 74 68 65 6e 20 74 61 62 6c 65 20 62 65 69 6e   then table bein
1e3d0 67 20 6f 70 65 6e 65 64 20 6d 75 73 74 20 62 65  g opened must be
1e3e0 20 61 6e 20 5b 69 6e 64 65 78 20 62 2d 74 72 65   an [index b-tre
1e3f0 65 5d 20 77 68 65 72 65 20 74 68 65 0a 2a 2a 20  e] where the.** 
1e400 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20 64  KeyInfo object d
1e410 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65  efines the conte
1e420 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67  nt and collating
1e430 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66   .** sequence of
1e440 20 74 68 61 74 20 69 6e 64 65 78 20 62 2d 74 72   that index b-tr
1e450 65 65 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69  ee. Otherwise, i
1e460 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67  f P4 is an integ
1e470 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 74 68  er .** value, th
1e480 65 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  en the table bei
1e490 6e 67 20 6f 70 65 6e 65 64 20 6d 75 73 74 20 62  ng opened must b
1e4a0 65 20 61 20 5b 74 61 62 6c 65 20 62 2d 74 72 65  e a [table b-tre
1e4b0 65 5d 20 77 69 74 68 20 61 0a 2a 2a 20 6e 75 6d  e] with a.** num
1e4c0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 6e  ber of columns n
1e4d0 6f 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20  o less than the 
1e4e0 76 61 6c 75 65 20 6f 66 20 50 34 2e 0a 2a 2a 0a  value of P4..**.
1e4f0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4f 70 65  ** See also: Ope
1e500 6e 57 72 69 74 65 2c 20 52 65 6f 70 65 6e 49 64  nWrite, ReopenId
1e510 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  x.*/./* Opcode: 
1e520 52 65 6f 70 65 6e 49 64 78 20 50 31 20 50 32 20  ReopenIdx P1 P2 
1e530 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
1e540 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44  psis: root=P2 iD
1e550 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52  b=P3.**.** The R
1e560 65 6f 70 65 6e 49 64 78 20 6f 70 63 6f 64 65 20  eopenIdx opcode 
1e570 77 6f 72 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f 70  works like OP_Op
1e580 65 6e 52 65 61 64 20 65 78 63 65 70 74 20 74 68  enRead except th
1e590 61 74 20 69 74 20 66 69 72 73 74 0a 2a 2a 20 63  at it first.** c
1e5a0 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20  hecks to see if 
1e5b0 74 68 65 20 63 75 72 73 6f 72 20 6f 6e 20 50 31  the cursor on P1
1e5c0 20 69 73 20 61 6c 72 65 61 64 79 20 6f 70 65 6e   is already open
1e5d0 20 6f 6e 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20   on the same.** 
1e5e0 62 2d 74 72 65 65 20 61 6e 64 20 69 66 20 69 74  b-tree and if it
1e5f0 20 69 73 20 74 68 69 73 20 6f 70 63 6f 64 65 20   is this opcode 
1e600 62 65 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e  becomes a no-op.
1e610 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
1e620 2c 0a 2a 2a 20 69 66 20 74 68 65 20 63 75 72 73  ,.** if the curs
1e630 6f 72 20 69 73 20 61 6c 72 65 61 64 79 20 6f 70  or is already op
1e640 65 6e 2c 20 64 6f 20 6e 6f 74 20 72 65 6f 70 65  en, do not reope
1e650 6e 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  n it..**.** The 
1e660 52 65 6f 70 65 6e 49 64 78 20 6f 70 63 6f 64 65  ReopenIdx opcode
1e670 20 6d 61 79 20 6f 6e 6c 79 20 62 65 20 75 73 65   may only be use
1e680 64 20 77 69 74 68 20 50 35 3d 3d 30 20 6f 72 20  d with P5==0 or 
1e690 50 35 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45  P5==OPFLAG_SEEKE
1e6a0 51 0a 2a 2a 20 61 6e 64 20 77 69 74 68 20 50 34  Q.** and with P4
1e6b0 20 62 65 69 6e 67 20 61 20 50 34 5f 4b 45 59 49   being a P4_KEYI
1e6c0 4e 46 4f 20 6f 62 6a 65 63 74 2e 20 20 46 75 72  NFO object.  Fur
1e6d0 74 68 65 72 6d 6f 72 65 2c 20 74 68 65 20 50 33  thermore, the P3
1e6e0 20 76 61 6c 75 65 20 6d 75 73 74 0a 2a 2a 20 62   value must.** b
1e6f0 65 20 74 68 65 20 73 61 6d 65 20 61 73 20 65 76  e the same as ev
1e700 65 72 79 20 6f 74 68 65 72 20 52 65 6f 70 65 6e  ery other Reopen
1e710 49 64 78 20 6f 72 20 4f 70 65 6e 52 65 61 64 20  Idx or OpenRead 
1e720 66 6f 72 20 74 68 65 20 73 61 6d 65 20 63 75 72  for the same cur
1e730 73 6f 72 0a 2a 2a 20 6e 75 6d 62 65 72 2e 0a 2a  sor.** number..*
1e740 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 50 35 20  *.** Allowed P5 
1e750 62 69 74 73 3a 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a  bits:.** <ul>.**
1e760 20 3c 6c 69 3e 20 20 3c 62 3e 30 78 30 32 20 4f   <li>  <b>0x02 O
1e770 50 46 4c 41 47 5f 53 45 45 4b 45 51 3c 2f 62 3e  PFLAG_SEEKEQ</b>
1e780 3a 20 54 68 69 73 20 63 75 72 73 6f 72 20 77 69  : This cursor wi
1e790 6c 6c 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20  ll only be used 
1e7a0 66 6f 72 0a 2a 2a 20 20 20 20 20 20 20 65 71 75  for.**       equ
1e7b0 61 6c 69 74 79 20 6c 6f 6f 6b 75 70 73 20 28 69  ality lookups (i
1e7c0 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20  mplemented as a 
1e7d0 70 61 69 72 20 6f 66 20 6f 70 63 6f 64 65 73 20  pair of opcodes 
1e7e0 4f 50 5f 53 65 65 6b 47 45 2f 4f 50 5f 49 64 78  OP_SeekGE/OP_Idx
1e7f0 47 54 0a 2a 2a 20 20 20 20 20 20 20 6f 66 20 4f  GT.**       of O
1e800 50 5f 53 65 65 6b 4c 45 2f 4f 50 5f 49 64 78 47  P_SeekLE/OP_IdxG
1e810 54 29 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a  T).** </ul>.**.*
1e820 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4f 50 5f 4f  * See also: OP_O
1e830 70 65 6e 52 65 61 64 2c 20 4f 50 5f 4f 70 65 6e  penRead, OP_Open
1e840 57 72 69 74 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  Write.*/./* Opco
1e850 64 65 3a 20 4f 70 65 6e 57 72 69 74 65 20 50 31  de: OpenWrite P1
1e860 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
1e870 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50  Synopsis: root=P
1e880 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f  2 iDb=P3.**.** O
1e890 70 65 6e 20 61 20 72 65 61 64 2f 77 72 69 74 65  pen a read/write
1e8a0 20 63 75 72 73 6f 72 20 6e 61 6d 65 64 20 50 31   cursor named P1
1e8b0 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   on the table or
1e8c0 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f   index whose roo
1e8d0 74 0a 2a 2a 20 70 61 67 65 20 69 73 20 50 32 20  t.** page is P2 
1e8e0 28 6f 72 20 77 68 6f 73 65 20 72 6f 6f 74 20 70  (or whose root p
1e8f0 61 67 65 20 69 73 20 68 65 6c 64 20 69 6e 20 72  age is held in r
1e900 65 67 69 73 74 65 72 20 50 32 20 69 66 20 74 68  egister P2 if th
1e910 65 0a 2a 2a 20 4f 50 46 4c 41 47 5f 50 32 49 53  e.** OPFLAG_P2IS
1e920 52 45 47 20 62 69 74 20 69 73 20 73 65 74 20 69  REG bit is set i
1e930 6e 20 50 35 20 2d 20 73 65 65 20 62 65 6c 6f 77  n P5 - see below
1e940 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  )..**.** The P4 
1e950 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74  value may be eit
1e960 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28  her an integer (
1e970 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70  P4_INT32) or a p
1e980 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b  ointer to.** a K
1e990 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  eyInfo structure
1e9a0 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49   (P4_KEYINFO). I
1e9b0 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65  f it is a pointe
1e9c0 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a  r to a KeyInfo .
1e9d0 2a 2a 20 6f 62 6a 65 63 74 2c 20 74 68 65 6e 20  ** object, then 
1e9e0 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 6e  table being open
1e9f0 65 64 20 6d 75 73 74 20 62 65 20 61 6e 20 5b 69  ed must be an [i
1ea00 6e 64 65 78 20 62 2d 74 72 65 65 5d 20 77 68 65  ndex b-tree] whe
1ea10 72 65 20 74 68 65 0a 2a 2a 20 4b 65 79 49 6e 66  re the.** KeyInf
1ea20 6f 20 6f 62 6a 65 63 74 20 64 65 66 69 6e 65 73  o object defines
1ea30 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64   the content and
1ea40 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73   collating .** s
1ea50 65 71 75 65 6e 63 65 20 6f 66 20 74 68 61 74 20  equence of that 
1ea60 69 6e 64 65 78 20 62 2d 74 72 65 65 2e 20 4f 74  index b-tree. Ot
1ea70 68 65 72 77 69 73 65 2c 20 69 66 20 50 34 20 69  herwise, if P4 i
1ea80 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a  s an integer .**
1ea90 20 76 61 6c 75 65 2c 20 74 68 65 6e 20 74 68 65   value, then the
1eaa0 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65   table being ope
1eab0 6e 65 64 20 6d 75 73 74 20 62 65 20 61 20 5b 74  ned must be a [t
1eac0 61 62 6c 65 20 62 2d 74 72 65 65 5d 20 77 69 74  able b-tree] wit
1ead0 68 20 61 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66  h a.** number of
1eae0 20 63 6f 6c 75 6d 6e 73 20 6e 6f 20 6c 65 73 73   columns no less
1eaf0 20 74 68 61 6e 20 74 68 65 20 76 61 6c 75 65 20   than the value 
1eb00 6f 66 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c  of P4..**.** All
1eb10 6f 77 65 64 20 50 35 20 62 69 74 73 3a 0a 2a 2a  owed P5 bits:.**
1eb20 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69 3e 20 20 3c   <ul>.** <li>  <
1eb30 62 3e 30 78 30 32 20 4f 50 46 4c 41 47 5f 53 45  b>0x02 OPFLAG_SE
1eb40 45 4b 45 51 3c 2f 62 3e 3a 20 54 68 69 73 20 63  EKEQ</b>: This c
1eb50 75 72 73 6f 72 20 77 69 6c 6c 20 6f 6e 6c 79 20  ursor will only 
1eb60 62 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 20  be used for.**  
1eb70 20 20 20 20 20 65 71 75 61 6c 69 74 79 20 6c 6f       equality lo
1eb80 6f 6b 75 70 73 20 28 69 6d 70 6c 65 6d 65 6e 74  okups (implement
1eb90 65 64 20 61 73 20 61 20 70 61 69 72 20 6f 66 20  ed as a pair of 
1eba0 6f 70 63 6f 64 65 73 20 4f 50 5f 53 65 65 6b 47  opcodes OP_SeekG
1ebb0 45 2f 4f 50 5f 49 64 78 47 54 0a 2a 2a 20 20 20  E/OP_IdxGT.**   
1ebc0 20 20 20 20 6f 66 20 4f 50 5f 53 65 65 6b 4c 45      of OP_SeekLE
1ebd0 2f 4f 50 5f 49 64 78 47 54 29 0a 2a 2a 20 3c 6c  /OP_IdxGT).** <l
1ebe0 69 3e 20 20 3c 62 3e 30 78 30 38 20 4f 50 46 4c  i>  <b>0x08 OPFL
1ebf0 41 47 5f 46 4f 52 44 45 4c 45 54 45 3c 2f 62 3e  AG_FORDELETE</b>
1ec00 3a 20 54 68 69 73 20 63 75 72 73 6f 72 20 69 73  : This cursor is
1ec10 20 75 73 65 64 20 6f 6e 6c 79 20 74 6f 20 73 65   used only to se
1ec20 65 6b 0a 2a 2a 20 20 20 20 20 20 20 61 6e 64 20  ek.**       and 
1ec30 73 75 62 73 65 71 75 65 6e 74 6c 79 20 64 65 6c  subsequently del
1ec40 65 74 65 20 65 6e 74 72 69 65 73 20 69 6e 20 61  ete entries in a
1ec50 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20  n index btree.  
1ec60 54 68 69 73 20 69 73 20 61 0a 2a 2a 20 20 20 20  This is a.**    
1ec70 20 20 20 68 69 6e 74 20 74 6f 20 74 68 65 20 73     hint to the s
1ec80 74 6f 72 61 67 65 20 65 6e 67 69 6e 65 20 74 68  torage engine th
1ec90 61 74 20 74 68 65 20 73 74 6f 72 61 67 65 20 65  at the storage e
1eca0 6e 67 69 6e 65 20 69 73 20 61 6c 6c 6f 77 65 64  ngine is allowed
1ecb0 20 74 6f 0a 2a 2a 20 20 20 20 20 20 20 69 67 6e   to.**       ign
1ecc0 6f 72 65 2e 20 20 54 68 65 20 68 69 6e 74 20 69  ore.  The hint i
1ecd0 73 20 6e 6f 74 20 75 73 65 64 20 62 79 20 74 68  s not used by th
1ece0 65 20 6f 66 66 69 63 69 61 6c 20 53 51 4c 69 74  e official SQLit
1ecf0 65 20 62 2a 74 72 65 65 20 73 74 6f 72 61 67 65  e b*tree storage
1ed00 0a 2a 2a 20 20 20 20 20 20 20 65 6e 67 69 6e 65  .**       engine
1ed10 2c 20 62 75 74 20 69 73 20 75 73 65 64 20 62 79  , but is used by
1ed20 20 43 4f 4d 44 42 32 2e 0a 2a 2a 20 3c 6c 69 3e   COMDB2..** <li>
1ed30 20 20 3c 62 3e 30 78 31 30 20 4f 50 46 4c 41 47    <b>0x10 OPFLAG
1ed40 5f 50 32 49 53 52 45 47 3c 2f 62 3e 3a 20 55 73  _P2ISREG</b>: Us
1ed50 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
1ed60 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20   register P2.** 
1ed70 20 20 20 20 20 20 61 73 20 74 68 65 20 72 6f 6f        as the roo
1ed80 74 20 70 61 67 65 2c 20 6e 6f 74 20 74 68 65 20  t page, not the 
1ed90 76 61 6c 75 65 20 6f 66 20 50 32 20 69 74 73 65  value of P2 itse
1eda0 6c 66 2e 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a  lf..** </ul>.**.
1edb0 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
1edc0 69 6f 6e 20 77 6f 72 6b 73 20 6c 69 6b 65 20 4f  ion works like O
1edd0 70 65 6e 52 65 61 64 20 65 78 63 65 70 74 20 74  penRead except t
1ede0 68 61 74 20 69 74 20 6f 70 65 6e 73 20 74 68 65  hat it opens the
1edf0 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20 72 65   cursor.** in re
1ee00 61 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e 0a 2a  ad/write mode..*
1ee10 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4f  *.** See also: O
1ee20 50 5f 4f 70 65 6e 52 65 61 64 2c 20 4f 50 5f 52  P_OpenRead, OP_R
1ee30 65 6f 70 65 6e 49 64 78 0a 2a 2f 0a 63 61 73 65  eopenIdx.*/.case
1ee40 20 4f 50 5f 52 65 6f 70 65 6e 49 64 78 3a 20 7b   OP_ReopenIdx: {
1ee50 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20  .  int nField;. 
1ee60 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e   KeyInfo *pKeyIn
1ee70 66 6f 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20  fo;.  int p2;.  
1ee80 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 77  int iDb;.  int w
1ee90 72 46 6c 61 67 3b 0a 20 20 42 74 72 65 65 20 2a  rFlag;.  Btree *
1eea0 70 58 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  pX;.  VdbeCursor
1eeb0 20 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a 70 44   *pCur;.  Db *pD
1eec0 62 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  b;..  assert( pO
1eed0 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d  p->p5==0 || pOp-
1eee0 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b  >p5==OPFLAG_SEEK
1eef0 45 51 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  EQ );.  assert( 
1ef00 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
1ef10 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 70 43 75  KEYINFO );.  pCu
1ef20 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
1ef30 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 43 75  ->p1];.  if( pCu
1ef40 72 20 26 26 20 70 43 75 72 2d 3e 70 67 6e 6f 52  r && pCur->pgnoR
1ef50 6f 6f 74 3d 3d 28 75 33 32 29 70 4f 70 2d 3e 70  oot==(u32)pOp->p
1ef60 32 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  2 ){.    assert(
1ef70 20 70 43 75 72 2d 3e 69 44 62 3d 3d 70 4f 70 2d   pCur->iDb==pOp-
1ef80 3e 70 33 20 29 3b 20 20 20 20 20 20 2f 2a 20 47  >p3 );      /* G
1ef90 75 61 72 61 6e 74 65 65 64 20 62 79 20 74 68 65  uaranteed by the
1efa0 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20   code generator 
1efb0 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6f 70 65 6e  */.    goto open
1efc0 5f 63 75 72 73 6f 72 5f 73 65 74 5f 68 69 6e 74  _cursor_set_hint
1efd0 73 3b 0a 20 20 7d 0a 20 20 2f 2a 20 49 66 20 74  s;.  }.  /* If t
1efe0 68 65 20 63 75 72 73 6f 72 20 69 73 20 6e 6f 74  he cursor is not
1eff0 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20   currently open 
1f000 6f 72 20 69 73 20 6f 70 65 6e 20 6f 6e 20 61 20  or is open on a 
1f010 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20 69  different.  ** i
1f020 6e 64 65 78 2c 20 74 68 65 6e 20 66 61 6c 6c 20  ndex, then fall 
1f030 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f  through into OP_
1f040 4f 70 65 6e 52 65 61 64 20 74 6f 20 66 6f 72 63  OpenRead to forc
1f050 65 20 61 20 72 65 6f 70 65 6e 20 2a 2f 0a 63 61  e a reopen */.ca
1f060 73 65 20 4f 50 5f 4f 70 65 6e 52 65 61 64 3a 0a  se OP_OpenRead:.
1f070 63 61 73 65 20 4f 50 5f 4f 70 65 6e 57 72 69 74  case OP_OpenWrit
1f080 65 3a 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  e:..  assert( pO
1f090 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70  p->opcode==OP_Op
1f0a0 65 6e 57 72 69 74 65 20 7c 7c 20 70 4f 70 2d 3e  enWrite || pOp->
1f0b0 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35  p5==0 || pOp->p5
1f0c0 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20  ==OPFLAG_SEEKEQ 
1f0d0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
1f0e0 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 61  bIsReader );.  a
1f0f0 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
1f100 64 65 3d 3d 4f 50 5f 4f 70 65 6e 52 65 61 64 20  de==OP_OpenRead 
1f110 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
1f120 4f 50 5f 52 65 6f 70 65 6e 49 64 78 0a 20 20 20  OP_ReopenIdx.   
1f130 20 20 20 20 20 20 20 7c 7c 20 70 2d 3e 72 65 61         || p->rea
1f140 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 69  dOnly==0 );..  i
1f150 66 28 20 70 2d 3e 65 78 70 69 72 65 64 3d 3d 31  f( p->expired==1
1f160 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
1f170 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41  ITE_ABORT_ROLLBA
1f180 43 4b 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f  CK;.    goto abo
1f190 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1f1a0 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20 3d  .  }..  nField =
1f1b0 20 30 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d   0;.  pKeyInfo =
1f1c0 20 30 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e   0;.  p2 = pOp->
1f1d0 70 32 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d  p2;.  iDb = pOp-
1f1e0 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 69  >p3;.  assert( i
1f1f0 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d  Db>=0 && iDb<db-
1f200 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
1f210 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
1f220 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20  btreeMask, iDb) 
1f230 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e  );.  pDb = &db->
1f240 61 44 62 5b 69 44 62 5d 3b 0a 20 20 70 58 20 3d  aDb[iDb];.  pX =
1f250 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 61 73 73   pDb->pBt;.  ass
1f260 65 72 74 28 20 70 58 21 3d 30 20 29 3b 0a 20 20  ert( pX!=0 );.  
1f270 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
1f280 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 29 7b  =OP_OpenWrite ){
1f290 0a 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 46  .    assert( OPF
1f2a0 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 3d 3d 42  LAG_FORDELETE==B
1f2b0 54 52 45 45 5f 46 4f 52 44 45 4c 45 54 45 20 29  TREE_FORDELETE )
1f2c0 3b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 42  ;.    wrFlag = B
1f2d0 54 52 45 45 5f 57 52 43 53 52 20 7c 20 28 70 4f  TREE_WRCSR | (pO
1f2e0 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 46  p->p5 & OPFLAG_F
1f2f0 4f 52 44 45 4c 45 54 45 29 3b 0a 20 20 20 20 61  ORDELETE);.    a
1f300 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63  ssert( sqlite3Sc
1f310 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62  hemaMutexHeld(db
1f320 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20  , iDb, 0) );.   
1f330 20 69 66 28 20 70 44 62 2d 3e 70 53 63 68 65 6d   if( pDb->pSchem
1f340 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3c  a->file_format <
1f350 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65   p->minWriteFile
1f360 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20 20 20  Format ){.      
1f370 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46  p->minWriteFileF
1f380 6f 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53 63  ormat = pDb->pSc
1f390 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61  hema->file_forma
1f3a0 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  t;.    }.  }else
1f3b0 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 30  {.    wrFlag = 0
1f3c0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
1f3d0 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 32 49  >p5 & OPFLAG_P2I
1f3e0 53 52 45 47 20 29 7b 0a 20 20 20 20 61 73 73 65  SREG ){.    asse
1f3f0 72 74 28 20 70 32 3e 30 20 29 3b 0a 20 20 20 20  rt( p2>0 );.    
1f400 61 73 73 65 72 74 28 20 70 32 3c 3d 28 70 2d 3e  assert( p2<=(p->
1f410 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
1f420 73 6f 72 29 20 29 3b 0a 20 20 20 20 61 73 73 65  sor) );.    asse
1f430 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
1f440 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 29 3b  =OP_OpenWrite );
1f450 0a 20 20 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  .    pIn2 = &aMe
1f460 6d 5b 70 32 5d 3b 0a 20 20 20 20 61 73 73 65 72  m[p2];.    asser
1f470 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49  t( memIsValid(pI
1f480 6e 32 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72  n2) );.    asser
1f490 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20  t( (pIn2->flags 
1f4a0 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
1f4b0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
1f4c0 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
1f4d0 6e 32 29 3b 0a 20 20 20 20 70 32 20 3d 20 28 69  n2);.    p2 = (i
1f4e0 6e 74 29 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20  nt)pIn2->u.i;.  
1f4f0 20 20 2f 2a 20 54 68 65 20 70 32 20 76 61 6c 75    /* The p2 valu
1f500 65 20 61 6c 77 61 79 73 20 63 6f 6d 65 73 20 66  e always comes f
1f510 72 6f 6d 20 61 20 70 72 69 6f 72 20 4f 50 5f 43  rom a prior OP_C
1f520 72 65 61 74 65 42 74 72 65 65 20 6f 70 63 6f 64  reateBtree opcod
1f530 65 20 61 6e 64 0a 20 20 20 20 2a 2a 20 74 68 61  e and.    ** tha
1f540 74 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c  t opcode will al
1f550 77 61 79 73 20 73 65 74 20 74 68 65 20 70 32 20  ways set the p2 
1f560 76 61 6c 75 65 20 74 6f 20 32 20 6f 72 20 6d 6f  value to 2 or mo
1f570 72 65 20 6f 72 20 65 6c 73 65 20 66 61 69 6c 2e  re or else fail.
1f580 0a 20 20 20 20 2a 2a 20 49 66 20 74 68 65 72 65  .    ** If there
1f590 20 77 65 72 65 20 61 20 66 61 69 6c 75 72 65 2c   were a failure,
1f5a0 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74   the prepared st
1f5b0 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68 61  atement would ha
1f5c0 76 65 20 68 61 6c 74 65 64 0a 20 20 20 20 2a 2a  ve halted.    **
1f5d0 20 62 65 66 6f 72 65 20 72 65 61 63 68 69 6e 67   before reaching
1f5e0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
1f5f0 6e 2e 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74  n. */.    assert
1f600 28 20 70 32 3e 3d 32 20 29 3b 0a 20 20 7d 0a 20  ( p2>=2 );.  }. 
1f610 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
1f620 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 7b 0a  ==P4_KEYINFO ){.
1f630 20 20 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70      pKeyInfo = p
1f640 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b  Op->p4.pKeyInfo;
1f650 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65  .    assert( pKe
1f660 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28  yInfo->enc==ENC(
1f670 64 62 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72  db) );.    asser
1f680 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d  t( pKeyInfo->db=
1f690 3d 64 62 20 29 3b 0a 20 20 20 20 6e 46 69 65 6c  =db );.    nFiel
1f6a0 64 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 41  d = pKeyInfo->nA
1f6b0 6c 6c 46 69 65 6c 64 3b 0a 20 20 7d 65 6c 73 65  llField;.  }else
1f6c0 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
1f6d0 3d 3d 50 34 5f 49 4e 54 33 32 20 29 7b 0a 20 20  ==P4_INT32 ){.  
1f6e0 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e    nField = pOp->
1f6f0 70 34 2e 69 3b 0a 20 20 7d 0a 20 20 61 73 73 65  p4.i;.  }.  asse
1f700 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29  rt( pOp->p1>=0 )
1f710 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69 65  ;.  assert( nFie
1f720 6c 64 3e 3d 30 20 29 3b 0a 20 20 74 65 73 74 63  ld>=0 );.  testc
1f730 61 73 65 28 20 6e 46 69 65 6c 64 3d 3d 30 20 29  ase( nField==0 )
1f740 3b 20 20 2f 2a 20 54 61 62 6c 65 20 77 69 74 68  ;  /* Table with
1f750 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
1f760 20 4b 45 59 20 61 6e 64 20 6e 6f 74 68 69 6e 67   KEY and nothing
1f770 20 65 6c 73 65 20 2a 2f 0a 20 20 70 43 75 72 20   else */.  pCur 
1f780 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
1f790 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 6e 46 69  (p, pOp->p1, nFi
1f7a0 65 6c 64 2c 20 69 44 62 2c 20 43 55 52 54 59 50  eld, iDb, CURTYP
1f7b0 45 5f 42 54 52 45 45 29 3b 0a 20 20 69 66 28 20  E_BTREE);.  if( 
1f7c0 70 43 75 72 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  pCur==0 ) goto n
1f7d0 6f 5f 6d 65 6d 3b 0a 20 20 70 43 75 72 2d 3e 6e  o_mem;.  pCur->n
1f7e0 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43  ullRow = 1;.  pC
1f7f0 75 72 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20  ur->isOrdered = 
1f800 31 3b 0a 20 20 70 43 75 72 2d 3e 70 67 6e 6f 52  1;.  pCur->pgnoR
1f810 6f 6f 74 20 3d 20 70 32 3b 0a 23 69 66 64 65 66  oot = p2;.#ifdef
1f820 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
1f830 70 43 75 72 2d 3e 77 72 46 6c 61 67 20 3d 20 77  pCur->wrFlag = w
1f840 72 46 6c 61 67 3b 0a 23 65 6e 64 69 66 0a 20 20  rFlag;.#endif.  
1f850 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1f860 65 43 75 72 73 6f 72 28 70 58 2c 20 70 32 2c 20  eCursor(pX, p2, 
1f870 77 72 46 6c 61 67 2c 20 70 4b 65 79 49 6e 66 6f  wrFlag, pKeyInfo
1f880 2c 20 70 43 75 72 2d 3e 75 63 2e 70 43 75 72 73  , pCur->uc.pCurs
1f890 6f 72 29 3b 0a 20 20 70 43 75 72 2d 3e 70 4b 65  or);.  pCur->pKe
1f8a0 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f  yInfo = pKeyInfo
1f8b0 3b 0a 20 20 2f 2a 20 53 65 74 20 74 68 65 20 56  ;.  /* Set the V
1f8c0 64 62 65 43 75 72 73 6f 72 2e 69 73 54 61 62 6c  dbeCursor.isTabl
1f8d0 65 20 76 61 72 69 61 62 6c 65 2e 20 50 72 65 76  e variable. Prev
1f8e0 69 6f 75 73 20 76 65 72 73 69 6f 6e 73 20 6f 66  ious versions of
1f8f0 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20 75 73 65  .  ** SQLite use
1f900 64 20 74 6f 20 63 68 65 63 6b 20 69 66 20 74 68  d to check if th
1f910 65 20 72 6f 6f 74 2d 70 61 67 65 20 66 6c 61 67  e root-page flag
1f920 73 20 77 65 72 65 20 73 61 6e 65 20 61 74 20 74  s were sane at t
1f930 68 69 73 20 70 6f 69 6e 74 0a 20 20 2a 2a 20 61  his point.  ** a
1f940 6e 64 20 72 65 70 6f 72 74 20 64 61 74 61 62 61  nd report databa
1f950 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 20 69 66  se corruption if
1f960 20 74 68 65 79 20 77 65 72 65 20 6e 6f 74 2c 20   they were not, 
1f970 62 75 74 20 74 68 69 73 20 63 68 65 63 6b 20 68  but this check h
1f980 61 73 0a 20 20 2a 2a 20 73 69 6e 63 65 20 6d 6f  as.  ** since mo
1f990 76 65 64 20 69 6e 74 6f 20 74 68 65 20 62 74 72  ved into the btr
1f9a0 65 65 20 6c 61 79 65 72 2e 20 20 2a 2f 20 20 0a  ee layer.  */  .
1f9b0 20 20 70 43 75 72 2d 3e 69 73 54 61 62 6c 65 20    pCur->isTable 
1f9c0 3d 20 70 4f 70 2d 3e 70 34 74 79 70 65 21 3d 50  = pOp->p4type!=P
1f9d0 34 5f 4b 45 59 49 4e 46 4f 3b 0a 0a 6f 70 65 6e  4_KEYINFO;..open
1f9e0 5f 63 75 72 73 6f 72 5f 73 65 74 5f 68 69 6e 74  _cursor_set_hint
1f9f0 73 3a 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46  s:.  assert( OPF
1fa00 4c 41 47 5f 42 55 4c 4b 43 53 52 3d 3d 42 54 52  LAG_BULKCSR==BTR
1fa10 45 45 5f 42 55 4c 4b 4c 4f 41 44 20 29 3b 0a 20  EE_BULKLOAD );. 
1fa20 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f   assert( OPFLAG_
1fa30 53 45 45 4b 45 51 3d 3d 42 54 52 45 45 5f 53 45  SEEKEQ==BTREE_SE
1fa40 45 4b 5f 45 51 20 29 3b 0a 20 20 74 65 73 74 63  EK_EQ );.  testc
1fa50 61 73 65 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f  ase( pOp->p5 & O
1fa60 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 29 3b  PFLAG_BULKCSR );
1fa70 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
1fa80 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48 49 4e  NABLE_CURSOR_HIN
1fa90 54 53 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  TS.  testcase( p
1faa0 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f  Op->p2 & OPFLAG_
1fab0 53 45 45 4b 45 51 20 29 3b 0a 23 65 6e 64 69 66  SEEKEQ );.#endif
1fac0 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  .  sqlite3BtreeC
1fad0 75 72 73 6f 72 48 69 6e 74 46 6c 61 67 73 28 70  ursorHintFlags(p
1fae0 43 75 72 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  Cur->uc.pCursor,
1faf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb10 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c  (pOp->p5 & (OPFL
1fb20 41 47 5f 42 55 4c 4b 43 53 52 7c 4f 50 46 4c 41  AG_BULKCSR|OPFLA
1fb30 47 5f 53 45 45 4b 45 51 29 29 29 3b 0a 20 20 69  G_SEEKEQ)));.  i
1fb40 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
1fb50 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1fb60 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1fb70 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 44 75 70 20  Opcode: OpenDup 
1fb80 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
1fb90 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72  * Open a new cur
1fba0 73 6f 72 20 50 31 20 74 68 61 74 20 70 6f 69 6e  sor P1 that poin
1fbb0 74 73 20 74 6f 20 74 68 65 20 73 61 6d 65 20 65  ts to the same e
1fbc0 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 61  phemeral table a
1fbd0 73 0a 2a 2a 20 63 75 72 73 6f 72 20 50 32 2e 20  s.** cursor P2. 
1fbe0 20 54 68 65 20 50 32 20 63 75 72 73 6f 72 20 6d   The P2 cursor m
1fbf0 75 73 74 20 68 61 76 65 20 62 65 65 6e 20 6f 70  ust have been op
1fc00 65 6e 65 64 20 62 79 20 61 20 70 72 69 6f 72 20  ened by a prior 
1fc10 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
1fc20 0a 2a 2a 20 6f 70 63 6f 64 65 2e 20 20 4f 6e 6c  .** opcode.  Onl
1fc30 79 20 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73  y ephemeral curs
1fc40 6f 72 73 20 6d 61 79 20 62 65 20 64 75 70 6c 69  ors may be dupli
1fc50 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 44 75 70  cated..**.** Dup
1fc60 6c 69 63 61 74 65 20 65 70 68 65 6d 65 72 61 6c  licate ephemeral
1fc70 20 63 75 72 73 6f 72 73 20 61 72 65 20 75 73 65   cursors are use
1fc80 64 20 66 6f 72 20 73 65 6c 66 2d 6a 6f 69 6e 73  d for self-joins
1fc90 20 6f 66 20 6d 61 74 65 72 69 61 6c 69 7a 65 64   of materialized
1fca0 20 76 69 65 77 73 2e 0a 2a 2f 0a 63 61 73 65 20   views..*/.case 
1fcb0 4f 50 5f 4f 70 65 6e 44 75 70 3a 20 7b 0a 20 20  OP_OpenDup: {.  
1fcc0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 4f 72 69  VdbeCursor *pOri
1fcd0 67 3b 20 20 20 20 2f 2a 20 54 68 65 20 6f 72 69  g;    /* The ori
1fce0 67 69 6e 61 6c 20 63 75 72 73 6f 72 20 74 6f 20  ginal cursor to 
1fcf0 62 65 20 64 75 70 6c 69 63 61 74 65 64 20 2a 2f  be duplicated */
1fd00 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1fd10 43 78 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  Cx;      /* The 
1fd20 6e 65 77 20 63 75 72 73 6f 72 20 2a 2f 0a 0a 20  new cursor */.. 
1fd30 20 70 4f 72 69 67 20 3d 20 70 2d 3e 61 70 43 73   pOrig = p->apCs
1fd40 72 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  r[pOp->p2];.  as
1fd50 73 65 72 74 28 20 70 4f 72 69 67 2d 3e 70 42 74  sert( pOrig->pBt
1fd60 78 21 3d 30 20 29 3b 20 20 2f 2a 20 4f 6e 6c 79  x!=0 );  /* Only
1fd70 20 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73 6f   ephemeral curso
1fd80 72 73 20 63 61 6e 20 62 65 20 64 75 70 6c 69 63  rs can be duplic
1fd90 61 74 65 64 20 2a 2f 0a 0a 20 20 70 43 78 20 3d  ated */..  pCx =
1fda0 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28   allocateCursor(
1fdb0 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 72 69  p, pOp->p1, pOri
1fdc0 67 2d 3e 6e 46 69 65 6c 64 2c 20 2d 31 2c 20 43  g->nField, -1, C
1fdd0 55 52 54 59 50 45 5f 42 54 52 45 45 29 3b 0a 20  URTYPE_BTREE);. 
1fde0 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f   if( pCx==0 ) go
1fdf0 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78  to no_mem;.  pCx
1fe00 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20  ->nullRow = 1;. 
1fe10 20 70 43 78 2d 3e 69 73 45 70 68 65 6d 65 72 61   pCx->isEphemera
1fe20 6c 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 70 4b  l = 1;.  pCx->pK
1fe30 65 79 49 6e 66 6f 20 3d 20 70 4f 72 69 67 2d 3e  eyInfo = pOrig->
1fe40 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 70 43 78 2d  pKeyInfo;.  pCx-
1fe50 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f 72 69 67  >isTable = pOrig
1fe60 2d 3e 69 73 54 61 62 6c 65 3b 0a 20 20 70 43 78  ->isTable;.  pCx
1fe70 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d 20 70 4f 72  ->pgnoRoot = pOr
1fe80 69 67 2d 3e 70 67 6e 6f 52 6f 6f 74 3b 0a 20 20  ig->pgnoRoot;.  
1fe90 70 43 78 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d  pCx->isOrdered =
1fea0 20 70 4f 72 69 67 2d 3e 69 73 4f 72 64 65 72 65   pOrig->isOrdere
1feb0 64 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  d;.  rc = sqlite
1fec0 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 4f 72  3BtreeCursor(pOr
1fed0 69 67 2d 3e 70 42 74 78 2c 20 70 43 78 2d 3e 70  ig->pBtx, pCx->p
1fee0 67 6e 6f 52 6f 6f 74 2c 20 42 54 52 45 45 5f 57  gnoRoot, BTREE_W
1fef0 52 43 53 52 2c 0a 20 20 20 20 20 20 20 20 20 20  RCSR,.          
1ff00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff10 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 70  pCx->pKeyInfo, p
1ff20 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b  Cx->uc.pCursor);
1ff30 0a 20 20 2f 2a 20 54 68 65 20 73 71 6c 69 74 65  .  /* The sqlite
1ff40 33 42 74 72 65 65 43 75 72 73 6f 72 28 29 20 72  3BtreeCursor() r
1ff50 6f 75 74 69 6e 65 20 63 61 6e 20 6f 6e 6c 79 20  outine can only 
1ff60 66 61 69 6c 20 66 6f 72 20 74 68 65 20 66 69 72  fail for the fir
1ff70 73 74 20 63 75 72 73 6f 72 0a 20 20 2a 2a 20 6f  st cursor.  ** o
1ff80 70 65 6e 65 64 20 66 6f 72 20 61 20 64 61 74 61  pened for a data
1ff90 62 61 73 65 2e 20 20 53 69 6e 63 65 20 74 68 65  base.  Since the
1ffa0 72 65 20 69 73 20 61 6c 72 65 61 64 79 20 61 6e  re is already an
1ffb0 20 6f 70 65 6e 20 63 75 72 73 6f 72 20 77 68 65   open cursor whe
1ffc0 6e 20 74 68 69 73 0a 20 20 2a 2a 20 6f 70 63 6f  n this.  ** opco
1ffd0 64 65 20 69 73 20 72 75 6e 2c 20 74 68 65 20 73  de is run, the s
1ffe0 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
1fff0 72 28 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20  r() cannot fail 
20000 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d  */.  assert( rc=
20010 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20  =SQLITE_OK );.  
20020 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
20030 63 6f 64 65 3a 20 4f 70 65 6e 45 70 68 65 6d 65  code: OpenEpheme
20040 72 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20 50  ral P1 P2 * P4 P
20050 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e  5.** Synopsis: n
20060 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20  Column=P2.**.** 
20070 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f  Open a new curso
20080 72 20 50 31 20 74 6f 20 61 20 74 72 61 6e 73 69  r P1 to a transi
20090 65 6e 74 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68  ent table..** Th
200a0 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c 77 61  e cursor is alwa
200b0 79 73 20 6f 70 65 6e 65 64 20 72 65 61 64 2f 77  ys opened read/w
200c0 72 69 74 65 20 65 76 65 6e 20 69 66 20 0a 2a 2a  rite even if .**
200d0 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
200e0 73 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79 2e  se is read-only.
200f0 20 20 54 68 65 20 65 70 68 65 6d 65 72 61 6c 0a    The ephemeral.
20100 2a 2a 20 74 61 62 6c 65 20 69 73 20 64 65 6c 65  ** table is dele
20110 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ted automaticall
20120 79 20 77 68 65 6e 20 74 68 65 20 63 75 72 73 6f  y when the curso
20130 72 20 69 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a  r is closed..**.
20140 2a 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f 72  ** If the cursor
20150 20 50 31 20 69 73 20 61 6c 72 65 61 64 79 20 6f   P1 is already o
20160 70 65 6e 65 64 20 6f 6e 20 61 6e 20 65 70 68 65  pened on an ephe
20170 6d 65 72 61 6c 20 74 61 62 6c 65 2c 20 74 68 65  meral table, the
20180 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 63 6c 65   table.** is cle
20190 61 72 65 64 20 28 61 6c 6c 20 63 6f 6e 74 65 6e  ared (all conten
201a0 74 20 69 73 20 65 72 61 73 65 64 29 2e 0a 2a 2a  t is erased)..**
201b0 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75  .** P2 is the nu
201c0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
201d0 69 6e 20 74 68 65 20 65 70 68 65 6d 65 72 61 6c  in the ephemeral
201e0 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63   table..** The c
201f0 75 72 73 6f 72 20 70 6f 69 6e 74 73 20 74 6f 20  ursor points to 
20200 61 20 42 54 72 65 65 20 74 61 62 6c 65 20 69 66  a BTree table if
20210 20 50 34 3d 3d 30 20 61 6e 64 20 74 6f 20 61 20   P4==0 and to a 
20220 42 54 72 65 65 20 69 6e 64 65 78 0a 2a 2a 20 69  BTree index.** i
20230 66 20 50 34 20 69 73 20 6e 6f 74 20 30 2e 20 20  f P4 is not 0.  
20240 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c  If P4 is not NUL
20250 4c 2c 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  L, it points to 
20260 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74  a KeyInfo struct
20270 75 72 65 0a 2a 2a 20 74 68 61 74 20 64 65 66 69  ure.** that defi
20280 6e 65 73 20 74 68 65 20 66 6f 72 6d 61 74 20 6f  nes the format o
20290 66 20 6b 65 79 73 20 69 6e 20 74 68 65 20 69 6e  f keys in the in
202a0 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  dex..**.** The P
202b0 35 20 70 61 72 61 6d 65 74 65 72 20 63 61 6e 20  5 parameter can 
202c0 62 65 20 61 20 6d 61 73 6b 20 6f 66 20 74 68 65  be a mask of the
202d0 20 42 54 52 45 45 5f 2a 20 66 6c 61 67 73 20 64   BTREE_* flags d
202e0 65 66 69 6e 65 64 0a 2a 2a 20 69 6e 20 62 74 72  efined.** in btr
202f0 65 65 2e 68 2e 20 20 54 68 65 73 65 20 66 6c 61  ee.h.  These fla
20300 67 73 20 63 6f 6e 74 72 6f 6c 20 61 73 70 65 63  gs control aspec
20310 74 73 20 6f 66 20 74 68 65 20 6f 70 65 72 61 74  ts of the operat
20320 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 62 74  ion of.** the bt
20330 72 65 65 2e 20 20 54 68 65 20 42 54 52 45 45 5f  ree.  The BTREE_
20340 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 61 6e 64  OMIT_JOURNAL and
20350 20 42 54 52 45 45 5f 53 49 4e 47 4c 45 20 66 6c   BTREE_SINGLE fl
20360 61 67 73 20 61 72 65 0a 2a 2a 20 61 64 64 65 64  ags are.** added
20370 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a   automatically..
20380 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  */./* Opcode: Op
20390 65 6e 41 75 74 6f 69 6e 64 65 78 20 50 31 20 50  enAutoindex P1 P
203a0 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
203b0 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32  psis: nColumn=P2
203c0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
203d0 64 65 20 77 6f 72 6b 73 20 74 68 65 20 73 61 6d  de works the sam
203e0 65 20 61 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65  e as OP_OpenEphe
203f0 6d 65 72 61 6c 2e 20 20 49 74 20 68 61 73 20 61  meral.  It has a
20400 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 6e 61  .** different na
20410 6d 65 20 74 6f 20 64 69 73 74 69 6e 67 75 69 73  me to distinguis
20420 68 20 69 74 73 20 75 73 65 2e 20 20 54 61 62 6c  h its use.  Tabl
20430 65 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  es created using
20440 0a 2a 2a 20 62 79 20 74 68 69 73 20 6f 70 63 6f  .** by this opco
20450 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20  de will be used 
20460 66 6f 72 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  for automaticall
20470 79 20 63 72 65 61 74 65 64 20 74 72 61 6e 73 69  y created transi
20480 65 6e 74 0a 2a 2a 20 69 6e 64 69 63 65 73 20 69  ent.** indices i
20490 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f 0a 63 61 73 65  n joins..*/.case
204a0 20 4f 50 5f 4f 70 65 6e 41 75 74 6f 69 6e 64 65   OP_OpenAutoinde
204b0 78 3a 20 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e  x: .case OP_Open
204c0 45 70 68 65 6d 65 72 61 6c 3a 20 7b 0a 20 20 56  Ephemeral: {.  V
204d0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a  dbeCursor *pCx;.
204e0 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49    KeyInfo *pKeyI
204f0 6e 66 6f 3b 0a 0a 20 20 73 74 61 74 69 63 20 63  nfo;..  static c
20500 6f 6e 73 74 20 69 6e 74 20 76 66 73 46 6c 61 67  onst int vfsFlag
20510 73 20 3d 20 0a 20 20 20 20 20 20 53 51 4c 49 54  s = .      SQLIT
20520 45 5f 4f 50 45 4e 5f 52 45 41 44 57 52 49 54 45  E_OPEN_READWRITE
20530 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f   |.      SQLITE_
20540 4f 50 45 4e 5f 43 52 45 41 54 45 20 7c 0a 20 20  OPEN_CREATE |.  
20550 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
20560 45 58 43 4c 55 53 49 56 45 20 7c 0a 20 20 20 20  EXCLUSIVE |.    
20570 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 44 45    SQLITE_OPEN_DE
20580 4c 45 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a 20 20  LETEONCLOSE |.  
20590 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
205a0 54 52 41 4e 53 49 45 4e 54 5f 44 42 3b 0a 20 20  TRANSIENT_DB;.  
205b0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
205c0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
205d0 70 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20 20  pOp->p2>=0 );.  
205e0 70 43 78 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  pCx = p->apCsr[p
205f0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70  Op->p1];.  if( p
20600 43 78 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  Cx ){.    /* If 
20610 74 68 65 20 65 70 68 65 72 6d 65 72 61 6c 20 74  the ephermeral t
20620 61 62 6c 65 20 69 73 20 61 6c 72 65 61 64 79 20  able is already 
20630 6f 70 65 6e 2c 20 65 72 61 73 65 20 61 6c 6c 20  open, erase all 
20640 65 78 69 73 74 69 6e 67 20 63 6f 6e 74 65 6e 74  existing content
20650 0a 20 20 20 20 2a 2a 20 73 6f 20 74 68 61 74 20  .    ** so that 
20660 74 68 65 20 74 61 62 6c 65 20 69 73 20 65 6d 70  the table is emp
20670 74 79 20 61 67 61 69 6e 2c 20 72 61 74 68 65 72  ty again, rather
20680 20 74 68 61 6e 20 63 72 65 61 74 69 6e 67 20 61   than creating a
20690 20 6e 65 77 20 74 61 62 6c 65 2e 20 2a 2f 0a 20   new table. */. 
206a0 20 20 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e     assert( pCx->
206b0 69 73 45 70 68 65 6d 65 72 61 6c 20 29 3b 0a 20  isEphemeral );. 
206c0 20 20 20 70 43 78 2d 3e 73 65 71 43 6f 75 6e 74     pCx->seqCount
206d0 20 3d 20 30 3b 0a 20 20 20 20 70 43 78 2d 3e 63   = 0;.    pCx->c
206e0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
206f0 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20 69 66  HE_STALE;.    if
20700 28 20 70 43 78 2d 3e 70 42 74 78 20 29 7b 0a 20  ( pCx->pBtx ){. 
20710 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
20720 33 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65  3BtreeClearTable
20730 28 70 43 78 2d 3e 70 42 74 78 2c 20 70 43 78 2d  (pCx->pBtx, pCx-
20740 3e 70 67 6e 6f 52 6f 6f 74 2c 20 30 29 3b 0a 20  >pgnoRoot, 0);. 
20750 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
20760 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65    pCx = allocate
20770 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
20780 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20  1, pOp->p2, -1, 
20790 43 55 52 54 59 50 45 5f 42 54 52 45 45 29 3b 0a  CURTYPE_BTREE);.
207a0 20 20 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29      if( pCx==0 )
207b0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
207c0 20 20 70 43 78 2d 3e 69 73 45 70 68 65 6d 65 72    pCx->isEphemer
207d0 61 6c 20 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d  al = 1;.    rc =
207e0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4f 70 65   sqlite3BtreeOpe
207f0 6e 28 64 62 2d 3e 70 56 66 73 2c 20 30 2c 20 64  n(db->pVfs, 0, d
20800 62 2c 20 26 70 43 78 2d 3e 70 42 74 78 2c 20 0a  b, &pCx->pBtx, .
20810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20820 20 20 20 20 20 20 20 20 20 20 42 54 52 45 45 5f            BTREE_
20830 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 7c 20 42  OMIT_JOURNAL | B
20840 54 52 45 45 5f 53 49 4e 47 4c 45 20 7c 20 70 4f  TREE_SINGLE | pO
20850 70 2d 3e 70 35 2c 0a 20 20 20 20 20 20 20 20 20  p->p5,.         
20860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20870 20 76 66 73 46 6c 61 67 73 29 3b 0a 20 20 20 20   vfsFlags);.    
20880 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
20890 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  K ){.      rc = 
208a0 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69  sqlite3BtreeBegi
208b0 6e 54 72 61 6e 73 28 70 43 78 2d 3e 70 42 74 78  nTrans(pCx->pBtx
208c0 2c 20 31 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20  , 1, 0);.    }. 
208d0 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
208e0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 2f 2a  E_OK ){.      /*
208f0 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20   If a transient 
20900 69 6e 64 65 78 20 69 73 20 72 65 71 75 69 72 65  index is require
20910 64 2c 20 63 72 65 61 74 65 20 69 74 20 62 79 20  d, create it by 
20920 63 61 6c 6c 69 6e 67 0a 20 20 20 20 20 20 2a 2a  calling.      **
20930 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65   sqlite3BtreeCre
20940 61 74 65 54 61 62 6c 65 28 29 20 77 69 74 68 20  ateTable() with 
20950 74 68 65 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45  the BTREE_BLOBKE
20960 59 20 66 6c 61 67 20 62 65 66 6f 72 65 0a 20 20  Y flag before.  
20970 20 20 20 20 2a 2a 20 6f 70 65 6e 69 6e 67 20 69      ** opening i
20980 74 2e 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e  t. If a transien
20990 74 20 74 61 62 6c 65 20 69 73 20 72 65 71 75 69  t table is requi
209a0 72 65 64 2c 20 6a 75 73 74 20 75 73 65 20 74 68  red, just use th
209b0 65 0a 20 20 20 20 20 20 2a 2a 20 61 75 74 6f 6d  e.      ** autom
209c0 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64  atically created
209d0 20 74 61 62 6c 65 20 77 69 74 68 20 72 6f 6f 74   table with root
209e0 2d 70 61 67 65 20 31 20 28 61 6e 20 42 4c 4f 42  -page 1 (an BLOB
209f0 5f 49 4e 54 4b 45 59 20 74 61 62 6c 65 29 2e 0a  _INTKEY table)..
20a00 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
20a10 66 28 20 28 70 43 78 2d 3e 70 4b 65 79 49 6e 66  f( (pCx->pKeyInf
20a20 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70  o = pKeyInfo = p
20a30 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 29  Op->p4.pKeyInfo)
20a40 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61  !=0 ){.        a
20a50 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
20a60 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29  pe==P4_KEYINFO )
20a70 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  ;.        rc = s
20a80 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74  qlite3BtreeCreat
20a90 65 54 61 62 6c 65 28 70 43 78 2d 3e 70 42 74 78  eTable(pCx->pBtx
20aa0 2c 20 28 69 6e 74 2a 29 26 70 43 78 2d 3e 70 67  , (int*)&pCx->pg
20ab0 6e 6f 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20 20  noRoot,.        
20ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 42 54 52               BTR
20ae0 45 45 5f 42 4c 4f 42 4b 45 59 20 7c 20 70 4f 70  EE_BLOBKEY | pOp
20af0 2d 3e 70 35 29 3b 20 0a 20 20 20 20 20 20 20 20  ->p5); .        
20b00 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
20b10 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61  K ){.          a
20b20 73 73 65 72 74 28 20 70 43 78 2d 3e 70 67 6e 6f  ssert( pCx->pgno
20b30 52 6f 6f 74 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f  Root==MASTER_ROO
20b40 54 2b 31 20 29 3b 0a 20 20 20 20 20 20 20 20 20  T+1 );.         
20b50 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66   assert( pKeyInf
20b60 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20  o->db==db );.   
20b70 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
20b80 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e  KeyInfo->enc==EN
20b90 43 28 64 62 29 20 29 3b 0a 20 20 20 20 20 20 20  C(db) );.       
20ba0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
20bb0 74 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e  treeCursor(pCx->
20bc0 70 42 74 78 2c 20 70 43 78 2d 3e 70 67 6e 6f 52  pBtx, pCx->pgnoR
20bd0 6f 6f 74 2c 20 42 54 52 45 45 5f 57 52 43 53 52  oot, BTREE_WRCSR
20be0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
20bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c00 20 20 20 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43      pKeyInfo, pC
20c10 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a  x->uc.pCursor);.
20c20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
20c30 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d    pCx->isTable =
20c40 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   0;.      }else{
20c50 0a 20 20 20 20 20 20 20 20 70 43 78 2d 3e 70 67  .        pCx->pg
20c60 6e 6f 52 6f 6f 74 20 3d 20 4d 41 53 54 45 52 5f  noRoot = MASTER_
20c70 52 4f 4f 54 3b 0a 20 20 20 20 20 20 20 20 72 63  ROOT;.        rc
20c80 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
20c90 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 78 2c  ursor(pCx->pBtx,
20ca0 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20 42 54   MASTER_ROOT, BT
20cb0 52 45 45 5f 57 52 43 53 52 2c 0a 20 20 20 20 20  REE_WRCSR,.     
20cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20cd0 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 70 43             0, pC
20ce0 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a  x->uc.pCursor);.
20cf0 20 20 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54          pCx->isT
20d00 61 62 6c 65 20 3d 20 31 3b 0a 20 20 20 20 20 20  able = 1;.      
20d10 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 78 2d  }.    }.    pCx-
20d20 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 28 70 4f  >isOrdered = (pO
20d30 70 2d 3e 70 35 21 3d 42 54 52 45 45 5f 55 4e 4f  p->p5!=BTREE_UNO
20d40 52 44 45 52 45 44 29 3b 0a 20 20 7d 0a 20 20 69  RDERED);.  }.  i
20d50 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
20d60 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
20d70 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20  .  pCx->nullRow 
20d80 3d 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 1;.  break;.}.
20d90 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74  ./* Opcode: Sort
20da0 65 72 4f 70 65 6e 20 50 31 20 50 32 20 50 33 20  erOpen P1 P2 P3 
20db0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  P4 *.**.** This 
20dc0 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6c 69 6b  opcode works lik
20dd0 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  e OP_OpenEphemer
20de0 61 6c 20 65 78 63 65 70 74 20 74 68 61 74 20 69  al except that i
20df0 74 20 6f 70 65 6e 73 0a 2a 2a 20 61 20 74 72 61  t opens.** a tra
20e00 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 74 68 61  nsient index tha
20e10 74 20 69 73 20 73 70 65 63 69 66 69 63 61 6c 6c  t is specificall
20e20 79 20 64 65 73 69 67 6e 65 64 20 74 6f 20 73 6f  y designed to so
20e30 72 74 20 6c 61 72 67 65 0a 2a 2a 20 74 61 62 6c  rt large.** tabl
20e40 65 73 20 75 73 69 6e 67 20 61 6e 20 65 78 74 65  es using an exte
20e50 72 6e 61 6c 20 6d 65 72 67 65 2d 73 6f 72 74 20  rnal merge-sort 
20e60 61 6c 67 6f 72 69 74 68 6d 2e 0a 2a 2a 0a 2a 2a  algorithm..**.**
20e70 20 49 66 20 61 72 67 75 6d 65 6e 74 20 50 33 20   If argument P3 
20e80 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
20e90 6e 20 69 74 20 69 6e 64 69 63 61 74 65 73 20 74  n it indicates t
20ea0 68 61 74 20 74 68 65 20 73 6f 72 74 65 72 20 6d  hat the sorter m
20eb0 61 79 0a 2a 2a 20 61 73 73 75 6d 65 20 74 68 61  ay.** assume tha
20ec0 74 20 61 20 73 74 61 62 6c 65 20 73 6f 72 74 20  t a stable sort 
20ed0 63 6f 6e 73 69 64 65 72 69 6e 67 20 74 68 65 20  considering the 
20ee0 66 69 72 73 74 20 50 33 20 66 69 65 6c 64 73 20  first P3 fields 
20ef0 6f 66 20 65 61 63 68 0a 2a 2a 20 6b 65 79 20 69  of each.** key i
20f00 73 20 73 75 66 66 69 63 69 65 6e 74 20 74 6f 20  s sufficient to 
20f10 70 72 6f 64 75 63 65 20 74 68 65 20 72 65 71 75  produce the requ
20f20 69 72 65 64 20 72 65 73 75 6c 74 73 2e 0a 2a 2f  ired results..*/
20f30 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 4f  .case OP_SorterO
20f40 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  pen: {.  VdbeCur
20f50 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73  sor *pCx;..  ass
20f60 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
20f70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
20f80 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78  ->p2>=0 );.  pCx
20f90 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f   = allocateCurso
20fa0 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  r(p, pOp->p1, pO
20fb0 70 2d 3e 70 32 2c 20 2d 31 2c 20 43 55 52 54 59  p->p2, -1, CURTY
20fc0 50 45 5f 53 4f 52 54 45 52 29 3b 0a 20 20 69 66  PE_SORTER);.  if
20fd0 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20  ( pCx==0 ) goto 
20fe0 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 70  no_mem;.  pCx->p
20ff0 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70  KeyInfo = pOp->p
21000 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73  4.pKeyInfo;.  as
21010 73 65 72 74 28 20 70 43 78 2d 3e 70 4b 65 79 49  sert( pCx->pKeyI
21020 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20  nfo->db==db );. 
21030 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e 70 4b   assert( pCx->pK
21040 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43  eyInfo->enc==ENC
21050 28 64 62 29 20 29 3b 0a 20 20 72 63 20 3d 20 73  (db) );.  rc = s
21060 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
21070 49 6e 69 74 28 64 62 2c 20 70 4f 70 2d 3e 70 33  Init(db, pOp->p3
21080 2c 20 70 43 78 29 3b 0a 20 20 69 66 28 20 72 63  , pCx);.  if( rc
21090 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
210a0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
210b0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
210c0 65 3a 20 53 65 71 75 65 6e 63 65 54 65 73 74 20  e: SequenceTest 
210d0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
210e0 79 6e 6f 70 73 69 73 3a 20 69 66 28 20 63 75 72  ynopsis: if( cur
210f0 73 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b 20 29 20  sor[P1].ctr++ ) 
21100 70 63 20 3d 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31  pc = P2.**.** P1
21110 20 69 73 20 61 20 73 6f 72 74 65 72 20 63 75 72   is a sorter cur
21120 73 6f 72 2e 20 49 66 20 74 68 65 20 73 65 71 75  sor. If the sequ
21130 65 6e 63 65 20 63 6f 75 6e 74 65 72 20 69 73 20  ence counter is 
21140 63 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2c 20  currently zero, 
21150 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 52  jump.** to P2. R
21160 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65  egardless of whe
21170 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
21180 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 69  jump is taken, i
21190 6e 63 72 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20  ncrement the.** 
211a0 74 68 65 20 73 65 71 75 65 6e 63 65 20 76 61 6c  the sequence val
211b0 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ue..*/.case OP_S
211c0 65 71 75 65 6e 63 65 54 65 73 74 3a 20 7b 0a 20  equenceTest: {. 
211d0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
211e0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
211f0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
21200 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
21210 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
21220 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
21230 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  t( isSorter(pC) 
21240 29 3b 0a 20 20 69 66 28 20 28 70 43 2d 3e 73 65  );.  if( (pC->se
21250 71 43 6f 75 6e 74 2b 2b 29 3d 3d 30 20 29 7b 0a  qCount++)==0 ){.
21260 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
21270 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  _p2;.  }.  break
21280 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
21290 4f 70 65 6e 50 73 65 75 64 6f 20 50 31 20 50 32  OpenPseudo P1 P2
212a0 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
212b0 73 69 73 3a 20 50 33 20 63 6f 6c 75 6d 6e 73 20  sis: P3 columns 
212c0 69 6e 20 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 4f  in r[P2].**.** O
212d0 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72  pen a new cursor
212e0 20 74 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20   that points to 
212f0 61 20 66 61 6b 65 20 74 61 62 6c 65 20 74 68 61  a fake table tha
21300 74 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e  t contains a sin
21310 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61  gle.** row of da
21320 74 61 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e 74  ta.  The content
21330 20 6f 66 20 74 68 61 74 20 6f 6e 65 20 72 6f 77   of that one row
21340 20 69 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   is the content 
21350 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65 67  of memory.** reg
21360 69 73 74 65 72 20 50 32 2e 20 20 49 6e 20 6f 74  ister P2.  In ot
21370 68 65 72 20 77 6f 72 64 73 2c 20 63 75 72 73 6f  her words, curso
21380 72 20 50 31 20 62 65 63 6f 6d 65 73 20 61 6e 20  r P1 becomes an 
21390 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 0a 2a  alias for the .*
213a0 2a 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65  * MEM_Blob conte
213b0 6e 74 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  nt contained in 
213c0 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
213d0 2a 2a 20 41 20 70 73 65 75 64 6f 2d 74 61 62 6c  ** A pseudo-tabl
213e0 65 20 63 72 65 61 74 65 64 20 62 79 20 74 68 69  e created by thi
213f0 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64  s opcode is used
21400 20 74 6f 20 68 6f 6c 64 20 61 20 73 69 6e 67 6c   to hold a singl
21410 65 0a 2a 2a 20 72 6f 77 20 6f 75 74 70 75 74 20  e.** row output 
21420 66 72 6f 6d 20 74 68 65 20 73 6f 72 74 65 72 20  from the sorter 
21430 73 6f 20 74 68 61 74 20 74 68 65 20 72 6f 77 20  so that the row 
21440 63 61 6e 20 62 65 20 64 65 63 6f 6d 70 6f 73 65  can be decompose
21450 64 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69  d into.** indivi
21460 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69  dual columns usi
21470 6e 67 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e  ng the OP_Column
21480 20 6f 70 63 6f 64 65 2e 20 20 54 68 65 20 4f 50   opcode.  The OP
21490 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a  _Column opcode.*
214a0 2a 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 63 75  * is the only cu
214b0 72 73 6f 72 20 6f 70 63 6f 64 65 20 74 68 61 74  rsor opcode that
214c0 20 77 6f 72 6b 73 20 77 69 74 68 20 61 20 70 73   works with a ps
214d0 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  eudo-table..**.*
214e0 2a 20 50 33 20 69 73 20 74 68 65 20 6e 75 6d 62  * P3 is the numb
214f0 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20  er of fields in 
21500 74 68 65 20 72 65 63 6f 72 64 73 20 74 68 61 74  the records that
21510 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20   will be stored 
21520 62 79 0a 2a 2a 20 74 68 65 20 70 73 65 75 64 6f  by.** the pseudo
21530 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20  -table..*/.case 
21540 4f 50 5f 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b  OP_OpenPseudo: {
21550 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
21560 43 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  Cx;..  assert( p
21570 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61  Op->p1>=0 );.  a
21580 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d  ssert( pOp->p3>=
21590 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c  0 );.  pCx = all
215a0 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70  ocateCursor(p, p
215b0 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 33 2c  Op->p1, pOp->p3,
215c0 20 2d 31 2c 20 43 55 52 54 59 50 45 5f 50 53 45   -1, CURTYPE_PSE
215d0 55 44 4f 29 3b 0a 20 20 69 66 28 20 70 43 78 3d  UDO);.  if( pCx=
215e0 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
215f0 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77  ;.  pCx->nullRow
21600 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 73 65 65   = 1;.  pCx->see
21610 6b 52 65 73 75 6c 74 20 3d 20 70 4f 70 2d 3e 70  kResult = pOp->p
21620 32 3b 0a 20 20 70 43 78 2d 3e 69 73 54 61 62 6c  2;.  pCx->isTabl
21630 65 20 3d 20 31 3b 0a 20 20 2f 2a 20 47 69 76 65  e = 1;.  /* Give
21640 20 74 68 69 73 20 70 73 65 75 64 6f 2d 63 75 72   this pseudo-cur
21650 73 6f 72 20 61 20 66 61 6b 65 20 42 74 43 75 72  sor a fake BtCur
21660 73 6f 72 20 70 6f 69 6e 74 65 72 20 73 6f 20 74  sor pointer so t
21670 68 61 74 20 70 43 78 0a 20 20 2a 2a 20 63 61 6e  hat pCx.  ** can
21680 20 62 65 20 73 61 66 65 6c 79 20 70 61 73 73 65   be safely passe
21690 64 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62 65  d to sqlite3Vdbe
216a0 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 2e 20  CursorMoveto(). 
216b0 20 54 68 69 73 20 61 76 6f 69 64 73 20 61 20 74   This avoids a t
216c0 65 73 74 0a 20 20 2a 2a 20 66 6f 72 20 70 43 78  est.  ** for pCx
216d0 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
216e0 59 50 45 5f 42 54 52 45 45 20 69 6e 73 69 64 65  YPE_BTREE inside
216f0 20 6f 66 20 73 71 6c 69 74 65 33 56 64 62 65 43   of sqlite3VdbeC
21700 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 0a 20 20  ursorMoveto().  
21710 2a 2a 20 77 68 69 63 68 20 69 73 20 61 20 70 65  ** which is a pe
21720 72 66 6f 72 6d 61 6e 63 65 20 6f 70 74 69 6d 69  rformance optimi
21730 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 70 43 78 2d  zation */.  pCx-
21740 3e 75 63 2e 70 43 75 72 73 6f 72 20 3d 20 73 71  >uc.pCursor = sq
21750 6c 69 74 65 33 42 74 72 65 65 46 61 6b 65 56 61  lite3BtreeFakeVa
21760 6c 69 64 43 75 72 73 6f 72 28 29 3b 0a 20 20 61  lidCursor();.  a
21770 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d  ssert( pOp->p5==
21780 30 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  0 );.  break;.}.
21790 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73  ./* Opcode: Clos
217a0 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  e P1 * * * *.**.
217b0 2a 2a 20 43 6c 6f 73 65 20 61 20 63 75 72 73 6f  ** Close a curso
217c0 72 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65  r previously ope
217d0 6e 65 64 20 61 73 20 50 31 2e 20 20 49 66 20 50  ned as P1.  If P
217e0 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72  1 is not.** curr
217f0 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73  ently open, this
21800 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
21810 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65  a no-op..*/.case
21820 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 61   OP_Close: {.  a
21830 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
21840 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
21850 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c  nCursor );.  sql
21860 69 74 65 33 56 64 62 65 46 72 65 65 43 75 72 73  ite3VdbeFreeCurs
21870 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 70  or(p, p->apCsr[p
21880 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e 61  Op->p1]);.  p->a
21890 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20  pCsr[pOp->p1] = 
218a0 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23  0;.  break;.}..#
218b0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
218c0 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 55 53 45 44 5f  BLE_COLUMN_USED_
218d0 4d 41 53 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  MASK./* Opcode: 
218e0 43 6f 6c 75 6d 6e 73 55 73 65 64 20 50 31 20 2a  ColumnsUsed P1 *
218f0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68   * P4 *.**.** Th
21900 69 73 20 6f 70 63 6f 64 65 20 28 77 68 69 63 68  is opcode (which
21910 20 6f 6e 6c 79 20 65 78 69 73 74 73 20 69 66 20   only exists if 
21920 53 51 4c 69 74 65 20 77 61 73 20 63 6f 6d 70 69  SQLite was compi
21930 6c 65 64 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49  led with.** SQLI
21940 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e  TE_ENABLE_COLUMN
21950 5f 55 53 45 44 5f 4d 41 53 4b 29 20 69 64 65 6e  _USED_MASK) iden
21960 74 69 66 69 65 73 20 77 68 69 63 68 20 63 6f 6c  tifies which col
21970 75 6d 6e 73 20 6f 66 20 74 68 65 0a 2a 2a 20 74  umns of the.** t
21980 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 6f  able or index fo
21990 72 20 63 75 72 73 6f 72 20 50 31 20 61 72 65 20  r cursor P1 are 
219a0 75 73 65 64 2e 20 20 50 34 20 69 73 20 61 20 36  used.  P4 is a 6
219b0 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a  4-bit integer.**
219c0 20 28 50 34 5f 49 4e 54 36 34 29 20 69 6e 20 77   (P4_INT64) in w
219d0 68 69 63 68 20 74 68 65 20 66 69 72 73 74 20 36  hich the first 6
219e0 33 20 62 69 74 73 20 61 72 65 20 6f 6e 65 20 66  3 bits are one f
219f0 6f 72 20 65 61 63 68 20 6f 66 20 74 68 65 0a 2a  or each of the.*
21a00 2a 20 66 69 72 73 74 20 36 33 20 63 6f 6c 75 6d  * first 63 colum
21a10 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  ns of the table 
21a20 6f 72 20 69 6e 64 65 78 20 74 68 61 74 20 61 72  or index that ar
21a30 65 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64 0a  e actually used.
21a40 2a 2a 20 62 79 20 74 68 65 20 63 75 72 73 6f 72  ** by the cursor
21a50 2e 20 20 54 68 65 20 68 69 67 68 2d 6f 72 64 65  .  The high-orde
21a60 72 20 62 69 74 20 69 73 20 73 65 74 20 69 66 20  r bit is set if 
21a70 61 6e 79 20 63 6f 6c 75 6d 6e 20 61 66 74 65 72  any column after
21a80 0a 2a 2a 20 74 68 65 20 36 34 74 68 20 69 73 20  .** the 64th is 
21a90 75 73 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  used..*/.case OP
21aa0 5f 43 6f 6c 75 6d 6e 73 55 73 65 64 3a 20 7b 0a  _ColumnsUsed: {.
21ab0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
21ac0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
21ad0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
21ae0 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
21af0 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
21b00 45 20 29 3b 0a 20 20 70 43 2d 3e 6d 61 73 6b 55  E );.  pC->maskU
21b10 73 65 64 20 3d 20 2a 28 75 36 34 2a 29 70 4f 70  sed = *(u64*)pOp
21b20 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62 72 65  ->p4.pI64;.  bre
21b30 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ak;.}.#endif../*
21b40 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 45 20   Opcode: SeekGE 
21b50 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
21b60 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
21b70 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66  [P3@P4].**.** If
21b80 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
21b90 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c  s to an SQL tabl
21ba0 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75  e (B-Tree that u
21bb0 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73  ses integer keys
21bc0 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76  ), .** use the v
21bd0 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
21be0 20 50 33 20 61 73 20 74 68 65 20 6b 65 79 2e 20   P3 as the key. 
21bf0 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
21c00 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53  fers .** to an S
21c10 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50  QL index, then P
21c20 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  3 is the first i
21c30 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34  n an array of P4
21c40 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74   registers .** t
21c50 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
21c60 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
21c70 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65  x key. .**.** Re
21c80 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20  position cursor 
21c90 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70  P1 so that  it p
21ca0 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61  oints to the sma
21cb0 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61 74  llest entry that
21cc0 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20   .** is greater 
21cd0 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
21ce0 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
21cf0 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
21d00 72 65 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61  records .** grea
21d10 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ter than or equa
21d20 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64  l to the key and
21d30 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
21d40 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
21d50 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63  ..**.** If the c
21d60 75 72 73 6f 72 20 50 31 20 77 61 73 20 6f 70 65  ursor P1 was ope
21d70 6e 65 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50  ned using the OP
21d80 46 4c 41 47 5f 53 45 45 4b 45 51 20 66 6c 61 67  FLAG_SEEKEQ flag
21d90 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f  , then this.** o
21da0 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79  pcode will alway
21db0 73 20 6c 61 6e 64 20 6f 6e 20 61 20 72 65 63 6f  s land on a reco
21dc0 72 64 20 74 68 61 74 20 65 71 75 61 6c 6c 79 20  rd that equally 
21dd0 65 71 75 61 6c 73 20 74 68 65 20 6b 65 79 2c 20  equals the key, 
21de0 6f 72 0a 2a 2a 20 65 6c 73 65 20 6a 75 6d 70 20  or.** else jump 
21df0 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
21e00 32 2e 20 20 57 68 65 6e 20 74 68 65 20 63 75 72  2.  When the cur
21e10 73 6f 72 20 69 73 20 4f 50 46 4c 41 47 5f 53 45  sor is OPFLAG_SE
21e20 45 4b 45 51 2c 20 74 68 69 73 0a 2a 2a 20 6f 70  EKEQ, this.** op
21e30 63 6f 64 65 20 6d 75 73 74 20 62 65 20 66 6f 6c  code must be fol
21e40 6c 6f 77 65 64 20 62 79 20 61 6e 20 49 64 78 4c  lowed by an IdxL
21e50 45 20 6f 70 63 6f 64 65 20 77 69 74 68 20 74 68  E opcode with th
21e60 65 20 73 61 6d 65 20 61 72 67 75 6d 65 6e 74 73  e same arguments
21e70 2e 0a 2a 2a 20 54 68 65 20 49 64 78 4c 45 20 6f  ..** The IdxLE o
21e80 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 6b  pcode will be sk
21e90 69 70 70 65 64 20 69 66 20 74 68 69 73 20 6f 70  ipped if this op
21ea0 63 6f 64 65 20 73 75 63 63 65 65 64 73 2c 20 62  code succeeds, b
21eb0 75 74 20 74 68 65 0a 2a 2a 20 49 64 78 4c 45 20  ut the.** IdxLE 
21ec0 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75  opcode will be u
21ed0 73 65 64 20 6f 6e 20 73 75 62 73 65 71 75 65 6e  sed on subsequen
21ee0 74 20 6c 6f 6f 70 20 69 74 65 72 61 74 69 6f 6e  t loop iteration
21ef0 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  s..**.** This op
21f00 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20  code leaves the 
21f10 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65  cursor configure
21f20 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72  d to move in for
21f30 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66  ward order,.** f
21f40 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  rom the beginnin
21f50 67 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64  g toward the end
21f60 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
21f70 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  s, the cursor is
21f80 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74  .** configured t
21f90 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20  o use Next, not 
21fa0 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  Prev..**.** See 
21fb0 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
21fc0 46 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53  Found, SeekLt, S
21fd0 65 65 6b 47 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f  eekGt, SeekLe.*/
21fe0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
21ff0 47 54 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  GT P1 P2 P3 P4 *
22000 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
22010 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
22020 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
22030 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74  fers to an SQL t
22040 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61  able (B-Tree tha
22050 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b  t uses integer k
22060 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68  eys), .** use th
22070 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
22080 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e  ter P3 as a key.
22090 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
220a0 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53  fers .** to an S
220b0 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50  QL index, then P
220c0 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  3 is the first i
220d0 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34  n an array of P4
220e0 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74   registers .** t
220f0 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
22100 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
22110 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65  x key. .**.** Re
22120 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20  position cursor 
22130 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70  P1 so that  it p
22140 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61  oints to the sma
22150 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61 74  llest entry that
22160 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20   .** is greater 
22170 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c  than the key val
22180 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65  ue. If there are
22190 20 6e 6f 20 72 65 63 6f 72 64 73 20 67 72 65 61   no records grea
221a0 74 65 72 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65  ter than .** the
221b0 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e   key and P2 is n
221c0 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75  ot zero, then ju
221d0 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
221e0 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76  This opcode leav
221f0 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f  es the cursor co
22200 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65  nfigured to move
22210 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65   in forward orde
22220 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62  r,.** from the b
22230 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20  eginning toward 
22240 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68  the end.  In oth
22250 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75  er words, the cu
22260 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69  rsor is.** confi
22270 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78  gured to use Nex
22280 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a  t, not Prev..**.
22290 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
222a0 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65  nd, NotFound, Se
222b0 65 6b 4c 74 2c 20 53 65 65 6b 47 65 2c 20 53 65  ekLt, SeekGe, Se
222c0 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ekLe.*/./* Opcod
222d0 65 3a 20 53 65 65 6b 4c 54 20 50 31 20 50 32 20  e: SeekLT P1 P2 
222e0 50 33 20 50 34 20 2a 20 0a 2a 2a 20 53 79 6e 6f  P3 P4 * .** Syno
222f0 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
22300 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73  4].**.** If curs
22310 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
22320 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
22330 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
22340 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
22350 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  * use the value 
22360 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
22370 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73  s a key. If curs
22380 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
22390 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
223a0 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
223b0 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
223c0 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
223d0 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
223e0 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
223f0 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
22400 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
22410 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
22420 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  at  it points to
22430 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74   the largest ent
22440 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c  ry that .** is l
22450 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79  ess than the key
22460 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65   value. If there
22470 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
22480 6c 65 73 73 20 74 68 61 6e 20 0a 2a 2a 20 74 68  less than .** th
22490 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20  e key and P2 is 
224a0 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a  not zero, then j
224b0 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
224c0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
224d0 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63  ves the cursor c
224e0 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76  onfigured to mov
224f0 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64  e in reverse ord
22500 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  er,.** from the 
22510 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20 62  end toward the b
22520 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74  eginning.  In ot
22530 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63  her words, the c
22540 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66  ursor is.** conf
22550 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 50 72  igured to use Pr
22560 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a  ev, not Next..**
22570 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
22580 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53  und, NotFound, S
22590 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53  eekGt, SeekGe, S
225a0 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  eekLe.*/./* Opco
225b0 64 65 3a 20 53 65 65 6b 4c 45 20 50 31 20 50 32  de: SeekLE P1 P2
225c0 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
225d0 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
225e0 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73  4].**.** If curs
225f0 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
22600 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
22610 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
22620 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
22630 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  * use the value 
22640 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
22650 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73  s a key. If curs
22660 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
22670 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
22680 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
22690 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
226a0 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
226b0 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
226c0 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
226d0 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
226e0 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
226f0 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
22700 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  at it points to 
22710 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72  the largest entr
22720 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65  y that .** is le
22730 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
22740 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75   to the key valu
22750 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
22760 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c  no records .** l
22770 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ess than or equa
22780 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64  l to the key and
22790 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
227a0 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
227b0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
227c0 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
227d0 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64  ursor configured
227e0 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65   to move in reve
227f0 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72  rse order,.** fr
22800 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72  om the end towar
22810 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e  d the beginning.
22820 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
22830 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a  , the cursor is.
22840 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  ** configured to
22850 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e   use Prev, not N
22860 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ext..**.** If th
22870 65 20 63 75 72 73 6f 72 20 50 31 20 77 61 73 20  e cursor P1 was 
22880 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 74 68 65  opened using the
22890 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 66   OPFLAG_SEEKEQ f
228a0 6c 61 67 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a  lag, then this.*
228b0 2a 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c  * opcode will al
228c0 77 61 79 73 20 6c 61 6e 64 20 6f 6e 20 61 20 72  ways land on a r
228d0 65 63 6f 72 64 20 74 68 61 74 20 65 71 75 61 6c  ecord that equal
228e0 6c 79 20 65 71 75 61 6c 73 20 74 68 65 20 6b 65  ly equals the ke
228f0 79 2c 20 6f 72 0a 2a 2a 20 65 6c 73 65 20 6a 75  y, or.** else ju
22900 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
22910 6f 20 50 32 2e 20 20 57 68 65 6e 20 74 68 65 20  o P2.  When the 
22920 63 75 72 73 6f 72 20 69 73 20 4f 50 46 4c 41 47  cursor is OPFLAG
22930 5f 53 45 45 4b 45 51 2c 20 74 68 69 73 0a 2a 2a  _SEEKEQ, this.**
22940 20 6f 70 63 6f 64 65 20 6d 75 73 74 20 62 65 20   opcode must be 
22950 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 49  followed by an I
22960 64 78 47 45 20 6f 70 63 6f 64 65 20 77 69 74 68  dxGE opcode with
22970 20 74 68 65 20 73 61 6d 65 20 61 72 67 75 6d 65   the same argume
22980 6e 74 73 2e 0a 2a 2a 20 54 68 65 20 49 64 78 47  nts..** The IdxG
22990 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65  E opcode will be
229a0 20 73 6b 69 70 70 65 64 20 69 66 20 74 68 69 73   skipped if this
229b0 20 6f 70 63 6f 64 65 20 73 75 63 63 65 65 64 73   opcode succeeds
229c0 2c 20 62 75 74 20 74 68 65 0a 2a 2a 20 49 64 78  , but the.** Idx
229d0 47 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62  GE opcode will b
229e0 65 20 75 73 65 64 20 6f 6e 20 73 75 62 73 65 71  e used on subseq
229f0 75 65 6e 74 20 6c 6f 6f 70 20 69 74 65 72 61 74  uent loop iterat
22a00 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  ions..**.** See 
22a10 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
22a20 46 6f 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20 53  Found, SeekGt, S
22a30 65 65 6b 47 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f  eekGe, SeekLt.*/
22a40 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 54 3a  .case OP_SeekLT:
22a50 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
22a60 2c 20 69 6e 33 2c 20 67 72 6f 75 70 20 2a 2f 0a  , in3, group */.
22a70 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 45 3a 20  case OP_SeekLE: 
22a80 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
22a90 20 69 6e 33 2c 20 67 72 6f 75 70 20 2a 2f 0a 63   in3, group */.c
22aa0 61 73 65 20 4f 50 5f 53 65 65 6b 47 45 3a 20 20  ase OP_SeekGE:  
22ab0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
22ac0 69 6e 33 2c 20 67 72 6f 75 70 20 2a 2f 0a 63 61  in3, group */.ca
22ad0 73 65 20 4f 50 5f 53 65 65 6b 47 54 3a 20 7b 20  se OP_SeekGT: { 
22ae0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
22af0 6e 33 2c 20 67 72 6f 75 70 20 2a 2f 0a 20 20 69  n3, group */.  i
22b00 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20 20 20  nt res;         
22b10 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20    /* Comparison 
22b20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 69 6e 74 20  result */.  int 
22b30 6f 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  oc;            /
22b40 2a 20 4f 70 63 6f 64 65 20 2a 2f 0a 20 20 56 64  * Opcode */.  Vd
22b50 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20  beCursor *pC;   
22b60 20 2f 2a 20 54 68 65 20 63 75 72 73 6f 72 20 74   /* The cursor t
22b70 6f 20 73 65 65 6b 20 2a 2f 0a 20 20 55 6e 70 61  o seek */.  Unpa
22b80 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 20 20 2f  ckedRecord r;  /
22b90 2a 20 54 68 65 20 6b 65 79 20 74 6f 20 73 65 65  * The key to see
22ba0 6b 20 66 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  k for */.  int n
22bb0 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a  Field;        /*
22bc0 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
22bd0 6e 73 20 6f 72 20 66 69 65 6c 64 73 20 69 6e 20  ns or fields in 
22be0 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20 69 36 34  the key */.  i64
22bf0 20 69 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20   iKey;          
22c00 2f 2a 20 54 68 65 20 72 6f 77 69 64 20 77 65 20  /* The rowid we 
22c10 61 72 65 20 74 6f 20 73 65 65 6b 20 74 6f 20 2a  are to seek to *
22c20 2f 0a 20 20 69 6e 74 20 65 71 4f 6e 6c 79 3b 20  /.  int eqOnly; 
22c30 20 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 69         /* Only i
22c40 6e 74 65 72 65 73 74 65 64 20 69 6e 20 3d 3d 20  nterested in == 
22c50 72 65 73 75 6c 74 73 20 2a 2f 0a 0a 20 20 61 73  results */..  as
22c60 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
22c70 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
22c80 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
22c90 72 74 28 20 70 4f 70 2d 3e 70 32 21 3d 30 20 29  rt( pOp->p2!=0 )
22ca0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
22cb0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
22cc0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
22cd0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
22ce0 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
22cf0 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74  TREE );.  assert
22d00 28 20 4f 50 5f 53 65 65 6b 4c 45 20 3d 3d 20 4f  ( OP_SeekLE == O
22d10 50 5f 53 65 65 6b 4c 54 2b 31 20 29 3b 0a 20 20  P_SeekLT+1 );.  
22d20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47  assert( OP_SeekG
22d30 45 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 32  E == OP_SeekLT+2
22d40 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50   );.  assert( OP
22d50 5f 53 65 65 6b 47 54 20 3d 3d 20 4f 50 5f 53 65  _SeekGT == OP_Se
22d60 65 6b 4c 54 2b 33 20 29 3b 0a 20 20 61 73 73 65  ekLT+3 );.  asse
22d70 72 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72 65  rt( pC->isOrdere
22d80 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  d );.  assert( p
22d90 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30  C->uc.pCursor!=0
22da0 20 29 3b 0a 20 20 6f 63 20 3d 20 70 4f 70 2d 3e   );.  oc = pOp->
22db0 6f 70 63 6f 64 65 3b 0a 20 20 65 71 4f 6e 6c 79  opcode;.  eqOnly
22dc0 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c   = 0;.  pC->null
22dd0 52 6f 77 20 3d 20 30 3b 0a 23 69 66 64 65 66 20  Row = 0;.#ifdef 
22de0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70  SQLITE_DEBUG.  p
22df0 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d  C->seekOp = pOp-
22e00 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a  >opcode;.#endif.
22e10 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  .  pC->deferredM
22e20 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d  oveto = 0;.  pC-
22e30 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
22e40 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66  ACHE_STALE;.  if
22e50 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b  ( pC->isTable ){
22e60 0a 20 20 20 20 2f 2a 20 54 68 65 20 42 54 52 45  .    /* The BTRE
22e70 45 5f 53 45 45 4b 5f 45 51 20 66 6c 61 67 20 69  E_SEEK_EQ flag i
22e80 73 20 6f 6e 6c 79 20 73 65 74 20 6f 6e 20 69 6e  s only set on in
22e90 64 65 78 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20  dex cursors */. 
22ea0 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
22eb0 65 33 42 74 72 65 65 43 75 72 73 6f 72 48 61 73  e3BtreeCursorHas
22ec0 48 69 6e 74 28 70 43 2d 3e 75 63 2e 70 43 75 72  Hint(pC->uc.pCur
22ed0 73 6f 72 2c 20 42 54 52 45 45 5f 53 45 45 4b 5f  sor, BTREE_SEEK_
22ee0 45 51 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 20  EQ)==0.         
22ef0 20 20 20 20 20 7c 7c 20 43 4f 52 52 55 50 54 5f       || CORRUPT_
22f00 44 42 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 54 68  DB );..    /* Th
22f10 65 20 69 6e 70 75 74 20 76 61 6c 75 65 20 69 6e  e input value in
22f20 20 50 33 20 6d 69 67 68 74 20 62 65 20 6f 66 20   P3 might be of 
22f30 61 6e 79 20 74 79 70 65 3a 20 69 6e 74 65 67 65  any type: intege
22f40 72 2c 20 72 65 61 6c 2c 20 73 74 72 69 6e 67 2c  r, real, string,
22f50 0a 20 20 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f 72  .    ** blob, or
22f60 20 4e 55 4c 4c 2e 20 20 42 75 74 20 69 74 20 6e   NULL.  But it n
22f70 65 65 64 73 20 74 6f 20 62 65 20 61 6e 20 69 6e  eeds to be an in
22f80 74 65 67 65 72 20 62 65 66 6f 72 65 20 77 65 20  teger before we 
22f90 63 61 6e 20 64 6f 0a 20 20 20 20 2a 2a 20 74 68  can do.    ** th
22fa0 65 20 73 65 65 6b 2c 20 73 6f 20 63 6f 6e 76 65  e seek, so conve
22fb0 72 74 20 69 74 2e 20 2a 2f 0a 20 20 20 20 70 49  rt it. */.    pI
22fc0 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
22fd0 70 33 5d 3b 0a 20 20 20 20 69 66 28 20 28 70 49  p3];.    if( (pI
22fe0 6e 33 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  n3->flags & (MEM
22ff0 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45  _Int|MEM_Real|ME
23000 4d 5f 49 6e 74 52 65 61 6c 7c 4d 45 4d 5f 53 74  M_IntReal|MEM_St
23010 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a  r))==MEM_Str ){.
23020 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72        applyNumer
23030 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c  icAffinity(pIn3,
23040 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69   0);.    }.    i
23050 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62  Key = sqlite3Vdb
23060 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 33 29 3b  eIntValue(pIn3);
23070 0a 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20  ..    /* If the 
23080 50 33 20 76 61 6c 75 65 20 63 6f 75 6c 64 20 6e  P3 value could n
23090 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20  ot be converted 
230a0 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  into an integer 
230b0 77 69 74 68 6f 75 74 0a 20 20 20 20 2a 2a 20 6c  without.    ** l
230c0 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69  oss of informati
230d0 6f 6e 2c 20 74 68 65 6e 20 73 70 65 63 69 61 6c  on, then special
230e0 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20 72   processing is r
230f0 65 71 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20  equired... */.  
23100 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61    if( (pIn3->fla
23110 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  gs & (MEM_Int|ME
23120 4d 5f 49 6e 74 52 65 61 6c 29 29 3d 3d 30 20 29  M_IntReal))==0 )
23130 7b 0a 20 20 20 20 20 20 69 66 28 20 28 70 49 6e  {.      if( (pIn
23140 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  3->flags & MEM_R
23150 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  eal)==0 ){.     
23160 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c     if( (pIn3->fl
23170 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 20  ags & MEM_Null) 
23180 7c 7c 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47 45  || oc>=OP_SeekGE
23190 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 56 64   ){.          Vd
231a0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c  beBranchTaken(1,
231b0 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f  2);.          go
231c0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
231d0 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
231e0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
231f0 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43  ite3BtreeLast(pC
23200 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 72  ->uc.pCursor, &r
23210 65 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69  es);.          i
23220 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
23230 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
23240 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
23250 20 20 20 20 20 20 67 6f 74 6f 20 73 65 65 6b 5f        goto seek_
23260 6e 6f 74 5f 66 6f 75 6e 64 3b 0a 20 20 20 20 20  not_found;.     
23270 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65     }.      }else
23280 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68  ..      /* If th
23290 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20  e approximation 
232a0 69 4b 65 79 20 69 73 20 6c 61 72 67 65 72 20 74  iKey is larger t
232b0 68 61 6e 20 74 68 65 20 61 63 74 75 61 6c 20 72  han the actual r
232c0 65 61 6c 20 73 65 61 72 63 68 0a 20 20 20 20 20  eal search.     
232d0 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73 74 69   ** term, substi
232e0 74 75 74 65 20 3e 3d 20 66 6f 72 20 3e 20 61 6e  tute >= for > an
232f0 64 20 3c 20 66 6f 72 20 3c 3d 2e 20 65 2e 67 2e  d < for <=. e.g.
23300 20 69 66 20 74 68 65 20 73 65 61 72 63 68 20 74   if the search t
23310 65 72 6d 0a 20 20 20 20 20 20 2a 2a 20 69 73 20  erm.      ** is 
23320 34 2e 39 20 61 6e 64 20 74 68 65 20 69 6e 74 65  4.9 and the inte
23330 67 65 72 20 61 70 70 72 6f 78 69 6d 61 74 69 6f  ger approximatio
23340 6e 20 35 3a 0a 20 20 20 20 20 20 2a 2a 0a 20 20  n 5:.      **.  
23350 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 28 78      **        (x
23360 20 3e 20 20 34 2e 39 29 20 20 20 20 2d 3e 20 20   >  4.9)    ->  
23370 20 20 20 28 78 20 3e 3d 20 35 29 0a 20 20 20 20     (x >= 5).    
23380 20 20 2a 2a 20 20 20 20 20 20 20 20 28 78 20 3c    **        (x <
23390 3d 20 34 2e 39 29 20 20 20 20 2d 3e 20 20 20 20  = 4.9)    ->    
233a0 20 28 78 20 3c 20 20 35 29 0a 20 20 20 20 20 20   (x <  5).      
233b0 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 49 6e  */.      if( pIn
233c0 33 2d 3e 75 2e 72 3c 28 64 6f 75 62 6c 65 29 69  3->u.r<(double)i
233d0 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20 61  Key ){.        a
233e0 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 45  ssert( OP_SeekGE
233f0 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 2d 31 29 20  ==(OP_SeekGT-1) 
23400 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
23410 74 28 20 4f 50 5f 53 65 65 6b 4c 54 3d 3d 28 4f  t( OP_SeekLT==(O
23420 50 5f 53 65 65 6b 4c 45 2d 31 29 20 29 3b 0a 20  P_SeekLE-1) );. 
23430 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28         assert( (
23440 4f 50 5f 53 65 65 6b 4c 45 20 26 20 30 78 30 30  OP_SeekLE & 0x00
23450 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 20  01)==(OP_SeekGT 
23460 26 20 30 78 30 30 30 31 29 20 29 3b 0a 20 20 20  & 0x0001) );.   
23470 20 20 20 20 20 69 66 28 20 28 6f 63 20 26 20 30       if( (oc & 0
23480 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b  x0001)==(OP_Seek
23490 47 54 20 26 20 30 78 30 30 30 31 29 20 29 20 6f  GT & 0x0001) ) o
234a0 63 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  c--;.      }..  
234b0 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 61 70      /* If the ap
234c0 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b 65 79  proximation iKey
234d0 20 69 73 20 73 6d 61 6c 6c 65 72 20 74 68 61 6e   is smaller than
234e0 20 74 68 65 20 61 63 74 75 61 6c 20 72 65 61 6c   the actual real
234f0 20 73 65 61 72 63 68 0a 20 20 20 20 20 20 2a 2a   search.      **
23500 20 74 65 72 6d 2c 20 73 75 62 73 74 69 74 75 74   term, substitut
23510 65 20 3c 3d 20 66 6f 72 20 3c 20 61 6e 64 20 3e  e <= for < and >
23520 20 66 6f 72 20 3e 3d 2e 20 20 2a 2f 0a 20 20 20   for >=.  */.   
23530 20 20 20 65 6c 73 65 20 69 66 28 20 70 49 6e 33     else if( pIn3
23540 2d 3e 75 2e 72 3e 28 64 6f 75 62 6c 65 29 69 4b  ->u.r>(double)iK
23550 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  ey ){.        as
23560 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45 3d  sert( OP_SeekLE=
23570 3d 28 4f 50 5f 53 65 65 6b 4c 54 2b 31 29 20 29  =(OP_SeekLT+1) )
23580 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
23590 28 20 4f 50 5f 53 65 65 6b 47 54 3d 3d 28 4f 50  ( OP_SeekGT==(OP
235a0 5f 53 65 65 6b 47 45 2b 31 29 20 29 3b 0a 20 20  _SeekGE+1) );.  
235b0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 4f        assert( (O
235c0 50 5f 53 65 65 6b 4c 54 20 26 20 30 78 30 30 30  P_SeekLT & 0x000
235d0 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 20 26  1)==(OP_SeekGE &
235e0 20 30 78 30 30 30 31 29 20 29 3b 0a 20 20 20 20   0x0001) );.    
235f0 20 20 20 20 69 66 28 20 28 6f 63 20 26 20 30 78      if( (oc & 0x
23600 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 4c  0001)==(OP_SeekL
23610 54 20 26 20 30 78 30 30 30 31 29 20 29 20 6f 63  T & 0x0001) ) oc
23620 2b 2b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ++;.      }.    
23630 7d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  }.    rc = sqlit
23640 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
23650 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75  acked(pC->uc.pCu
23660 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 69 4b  rsor, 0, (u64)iK
23670 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20  ey, 0, &res);.  
23680 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67    pC->movetoTarg
23690 65 74 20 3d 20 69 4b 65 79 3b 20 20 2f 2a 20 55  et = iKey;  /* U
236a0 73 65 64 20 62 79 20 4f 50 5f 44 65 6c 65 74 65  sed by OP_Delete
236b0 20 2a 2f 0a 20 20 20 20 69 66 28 20 72 63 21 3d   */.    if( rc!=
236c0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
236d0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
236e0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
236f0 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  }.  }else{.    /
23700 2a 20 46 6f 72 20 61 20 63 75 72 73 6f 72 20 77  * For a cursor w
23710 69 74 68 20 74 68 65 20 42 54 52 45 45 5f 53 45  ith the BTREE_SE
23720 45 4b 5f 45 51 20 68 69 6e 74 2c 20 6f 6e 6c 79  EK_EQ hint, only
23730 20 74 68 65 20 4f 50 5f 53 65 65 6b 47 45 20 61   the OP_SeekGE a
23740 6e 64 0a 20 20 20 20 2a 2a 20 4f 50 5f 53 65 65  nd.    ** OP_See
23750 6b 4c 45 20 6f 70 63 6f 64 65 73 20 61 72 65 20  kLE opcodes are 
23760 61 6c 6c 6f 77 65 64 2c 20 61 6e 64 20 74 68 65  allowed, and the
23770 73 65 20 6d 75 73 74 20 62 65 20 69 6d 6d 65 64  se must be immed
23780 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 65 64 0a  iately followed.
23790 20 20 20 20 2a 2a 20 62 79 20 61 6e 20 4f 50 5f      ** by an OP_
237a0 49 64 78 47 54 20 6f 72 20 4f 50 5f 49 64 78 4c  IdxGT or OP_IdxL
237b0 54 20 6f 70 63 6f 64 65 2c 20 72 65 73 70 65 63  T opcode, respec
237c0 74 69 76 65 6c 79 2c 20 77 69 74 68 20 74 68 65  tively, with the
237d0 20 73 61 6d 65 20 6b 65 79 2e 0a 20 20 20 20 2a   same key..    *
237e0 2f 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  /.    if( sqlite
237f0 33 42 74 72 65 65 43 75 72 73 6f 72 48 61 73 48  3BtreeCursorHasH
23800 69 6e 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  int(pC->uc.pCurs
23810 6f 72 2c 20 42 54 52 45 45 5f 53 45 45 4b 5f 45  or, BTREE_SEEK_E
23820 51 29 20 29 7b 0a 20 20 20 20 20 20 65 71 4f 6e  Q) ){.      eqOn
23830 6c 79 20 3d 20 31 3b 0a 20 20 20 20 20 20 61 73  ly = 1;.      as
23840 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
23850 65 3d 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20  e==OP_SeekGE || 
23860 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
23870 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20 20 20  SeekLE );.      
23880 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 6f  assert( pOp[1].o
23890 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20  pcode==OP_IdxLT 
238a0 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65  || pOp[1].opcode
238b0 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20  ==OP_IdxGT );.  
238c0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
238d0 31 5d 2e 70 31 3d 3d 70 4f 70 5b 30 5d 2e 70 31  1].p1==pOp[0].p1
238e0 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
238f0 28 20 70 4f 70 5b 31 5d 2e 70 32 3d 3d 70 4f 70  ( pOp[1].p2==pOp
23900 5b 30 5d 2e 70 32 20 29 3b 0a 20 20 20 20 20 20  [0].p2 );.      
23910 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70  assert( pOp[1].p
23920 33 3d 3d 70 4f 70 5b 30 5d 2e 70 33 20 29 3b 0a  3==pOp[0].p3 );.
23930 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
23940 70 5b 31 5d 2e 70 34 2e 69 3d 3d 70 4f 70 5b 30  p[1].p4.i==pOp[0
23950 5d 2e 70 34 2e 69 20 29 3b 0a 20 20 20 20 7d 0a  ].p4.i );.    }.
23960 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f  .    nField = pO
23970 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 61 73 73  p->p4.i;.    ass
23980 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
23990 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
239a0 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64    assert( nField
239b0 3e 30 20 29 3b 0a 20 20 20 20 72 2e 70 4b 65 79  >0 );.    r.pKey
239c0 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49  Info = pC->pKeyI
239d0 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c  nfo;.    r.nFiel
239e0 64 20 3d 20 28 75 31 36 29 6e 46 69 65 6c 64 3b  d = (u16)nField;
239f0 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78  ..    /* The nex
23a00 74 20 6c 69 6e 65 20 6f 66 20 63 6f 64 65 20 63  t line of code c
23a10 6f 6d 70 75 74 65 73 20 61 73 20 66 6f 6c 6c 6f  omputes as follo
23a20 77 73 2c 20 6f 6e 6c 79 20 66 61 73 74 65 72 3a  ws, only faster:
23a30 0a 20 20 20 20 2a 2a 20 20 20 69 66 28 20 6f 63  .    **   if( oc
23a40 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20 6f  ==OP_SeekGT || o
23a50 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 7b 0a  c==OP_SeekLE ){.
23a60 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 64 65 66      **     r.def
23a70 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20  ault_rc = -1;.  
23a80 20 20 2a 2a 20 20 20 7d 65 6c 73 65 7b 0a 20 20    **   }else{.  
23a90 20 20 2a 2a 20 20 20 20 20 72 2e 64 65 66 61 75    **     r.defau
23aa0 6c 74 5f 72 63 20 3d 20 2b 31 3b 0a 20 20 20 20  lt_rc = +1;.    
23ab0 2a 2a 20 20 20 7d 0a 20 20 20 20 2a 2f 0a 20 20  **   }.    */.  
23ac0 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d    r.default_rc =
23ad0 20 28 28 31 20 26 20 28 6f 63 20 2d 20 4f 50 5f   ((1 & (oc - OP_
23ae0 53 65 65 6b 4c 54 29 29 20 3f 20 2d 31 20 3a 20  SeekLT)) ? -1 : 
23af0 2b 31 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  +1);.    assert(
23b00 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 54 20 7c   oc!=OP_SeekGT |
23b10 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d  | r.default_rc==
23b20 2d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  -1 );.    assert
23b30 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 45 20  ( oc!=OP_SeekLE 
23b40 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d  || r.default_rc=
23b50 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  =-1 );.    asser
23b60 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 45  t( oc!=OP_SeekGE
23b70 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63   || r.default_rc
23b80 3d 3d 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65  ==+1 );.    asse
23b90 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c  rt( oc!=OP_SeekL
23ba0 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72  T || r.default_r
23bb0 63 3d 3d 2b 31 20 29 3b 0a 0a 20 20 20 20 72 2e  c==+1 );..    r.
23bc0 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  aMem = &aMem[pOp
23bd0 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51  ->p3];.#ifdef SQ
23be0 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 7b  LITE_DEBUG.    {
23bf0 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b   int i; for(i=0;
23c00 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b   i<r.nField; i++
23c10 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56  ) assert( memIsV
23c20 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29  alid(&r.aMem[i])
23c30 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20   ); }.#endif.   
23c40 20 72 2e 65 71 53 65 65 6e 20 3d 20 30 3b 0a 20   r.eqSeen = 0;. 
23c50 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
23c60 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
23c70 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  ed(pC->uc.pCurso
23c80 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65  r, &r, 0, 0, &re
23c90 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d  s);.    if( rc!=
23ca0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
23cb0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
23cc0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
23cd0 7d 0a 20 20 20 20 69 66 28 20 65 71 4f 6e 6c 79  }.    if( eqOnly
23ce0 20 26 26 20 72 2e 65 71 53 65 65 6e 3d 3d 30 20   && r.eqSeen==0 
23cf0 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
23d00 20 72 65 73 21 3d 30 20 29 3b 0a 20 20 20 20 20   res!=0 );.     
23d10 20 67 6f 74 6f 20 73 65 65 6b 5f 6e 6f 74 5f 66   goto seek_not_f
23d20 6f 75 6e 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  ound;.    }.  }.
23d30 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
23d40 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 61  ST.  sqlite3_sea
23d50 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e  rch_count++;.#en
23d60 64 69 66 0a 20 20 69 66 28 20 6f 63 3e 3d 4f 50  dif.  if( oc>=OP
23d70 5f 53 65 65 6b 47 45 20 29 7b 20 20 61 73 73 65  _SeekGE ){  asse
23d80 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47  rt( oc==OP_SeekG
23d90 45 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  E || oc==OP_Seek
23da0 47 54 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65  GT );.    if( re
23db0 73 3c 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26  s<0 || (res==0 &
23dc0 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 29  & oc==OP_SeekGT)
23dd0 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20   ){.      res = 
23de0 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  0;.      rc = sq
23df0 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 28 70  lite3BtreeNext(p
23e00 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 30  C->uc.pCursor, 0
23e10 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
23e20 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
23e30 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
23e40 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20  LITE_DONE ){.   
23e50 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
23e60 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 20 20 20  TE_OK;.         
23e70 20 72 65 73 20 3d 20 31 3b 0a 20 20 20 20 20 20   res = 1;.      
23e80 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
23e90 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
23ea0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
23eb0 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
23ec0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
23ed0 65 73 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20  es = 0;.    }.  
23ee0 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
23ef0 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54  t( oc==OP_SeekLT
23f00 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c   || oc==OP_SeekL
23f10 45 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73  E );.    if( res
23f20 3e 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26  >0 || (res==0 &&
23f30 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54 29 20   oc==OP_SeekLT) 
23f40 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30  ){.      res = 0
23f50 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
23f60 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75  ite3BtreePreviou
23f70 73 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  s(pC->uc.pCursor
23f80 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20  , 0);.      if( 
23f90 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
23fa0 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63 3d  .        if( rc=
23fb0 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a  =SQLITE_DONE ){.
23fc0 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 53            rc = S
23fd0 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20  QLITE_OK;.      
23fe0 20 20 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 20      res = 1;.   
23ff0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
24000 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
24010 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
24020 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
24030 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
24040 20 20 2f 2a 20 72 65 73 20 6d 69 67 68 74 20 62    /* res might b
24050 65 20 6e 65 67 61 74 69 76 65 20 62 65 63 61 75  e negative becau
24060 73 65 20 74 68 65 20 74 61 62 6c 65 20 69 73 20  se the table is 
24070 65 6d 70 74 79 2e 20 20 43 68 65 63 6b 20 74 6f  empty.  Check to
24080 0a 20 20 20 20 20 20 2a 2a 20 73 65 65 20 69 66  .      ** see if
24090 20 74 68 69 73 20 69 73 20 74 68 65 20 63 61 73   this is the cas
240a0 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  e..      */.    
240b0 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 42    res = sqlite3B
240c0 74 72 65 65 45 6f 66 28 70 43 2d 3e 75 63 2e 70  treeEof(pC->uc.p
240d0 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20  Cursor);.    }. 
240e0 20 7d 0a 73 65 65 6b 5f 6e 6f 74 5f 66 6f 75 6e   }.seek_not_foun
240f0 64 3a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  d:.  assert( pOp
24100 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 56 64 62 65  ->p2>0 );.  Vdbe
24110 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21  BranchTaken(res!
24120 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73  =0,2);.  if( res
24130 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d   ){.    goto jum
24140 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65  p_to_p2;.  }else
24150 20 69 66 28 20 65 71 4f 6e 6c 79 20 29 7b 0a 20   if( eqOnly ){. 
24160 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31     assert( pOp[1
24170 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ].opcode==OP_Idx
24180 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70 63  LT || pOp[1].opc
24190 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b  ode==OP_IdxGT );
241a0 0a 20 20 20 20 70 4f 70 2b 2b 3b 20 2f 2a 20 53  .    pOp++; /* S
241b0 6b 69 70 20 74 68 65 20 4f 50 5f 49 64 78 4c 74  kip the OP_IdxLt
241c0 20 6f 72 20 4f 50 5f 49 64 78 47 54 20 74 68 61   or OP_IdxGT tha
241d0 74 20 66 6f 6c 6c 6f 77 73 20 2a 2f 0a 20 20 7d  t follows */.  }
241e0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
241f0 4f 70 63 6f 64 65 3a 20 53 65 65 6b 48 69 74 20  Opcode: SeekHit 
24200 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
24210 79 6e 6f 70 73 69 73 3a 20 73 65 65 6b 48 69 74  ynopsis: seekHit
24220 3d 50 32 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68  =P2.**.** Set th
24230 65 20 73 65 65 6b 48 69 74 20 66 6c 61 67 20 6f  e seekHit flag o
24240 6e 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20 74  n cursor P1 to t
24250 68 65 20 76 61 6c 75 65 20 69 6e 20 50 32 2e 0a  he value in P2..
24260 2a 2a 20 54 68 65 20 73 65 65 6b 48 69 74 20 66  ** The seekHit f
24270 6c 61 67 20 69 73 20 75 73 65 64 20 62 79 20 74  lag is used by t
24280 68 65 20 49 66 4e 6f 48 6f 70 65 20 6f 70 63 6f  he IfNoHope opco
24290 64 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73  de..**.** P1 mus
242a0 74 20 62 65 20 61 20 76 61 6c 69 64 20 62 2d 74  t be a valid b-t
242b0 72 65 65 20 63 75 72 73 6f 72 2e 20 20 50 32 20  ree cursor.  P2 
242c0 6d 75 73 74 20 62 65 20 61 20 62 6f 6f 6c 65 61  must be a boolea
242d0 6e 20 76 61 6c 75 65 2c 0a 2a 2a 20 65 69 74 68  n value,.** eith
242e0 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2f 0a 63 61  er 0 or 1..*/.ca
242f0 73 65 20 4f 50 5f 53 65 65 6b 48 69 74 3a 20 7b  se OP_SeekHit: {
24300 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
24310 43 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  C;.  assert( pOp
24320 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
24330 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
24340 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
24350 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
24360 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
24370 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d  assert( pOp->p2=
24380 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 31  =0 || pOp->p2==1
24390 20 29 3b 0a 20 20 70 43 2d 3e 73 65 65 6b 48 69   );.  pC->seekHi
243a0 74 20 3d 20 70 4f 70 2d 3e 70 32 20 26 20 31 3b  t = pOp->p2 & 1;
243b0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
243c0 4f 70 63 6f 64 65 3a 20 46 6f 75 6e 64 20 50 31  Opcode: Found P1
243d0 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
243e0 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
243f0 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50  3@P4].**.** If P
24400 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74  4==0 then regist
24410 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c  er P3 holds a bl
24420 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ob constructed b
24430 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49  y MakeRecord.  I
24440 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72  f.** P4>0 then r
24450 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68  egister P3 is th
24460 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65  e first of P4 re
24470 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72  gisters that for
24480 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a  m an unpacked.**
24490 20 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43   record..**.** C
244a0 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61  ursor P1 is on a
244b0 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20  n index btree.  
244c0 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64  If the record id
244d0 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61  entified by P3 a
244e0 6e 64 20 50 34 0a 2a 2a 20 69 73 20 61 20 70 72  nd P4.** is a pr
244f0 65 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72  efix of any entr
24500 79 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a  y in P1 then a j
24510 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50  ump is made to P
24520 32 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20 6c  2 and.** P1 is l
24530 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  eft pointing at 
24540 74 68 65 20 6d 61 74 63 68 69 6e 67 20 65 6e 74  the matching ent
24550 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  ry..**.** This o
24560 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73 20  peration leaves 
24570 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20  the cursor in a 
24580 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63  state where it c
24590 61 6e 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65  an be.** advance
245a0 64 20 69 6e 20 74 68 65 20 66 6f 72 77 61 72 64  d in the forward
245b0 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 54 68 65   direction.  The
245c0 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   Next instructio
245d0 6e 20 77 69 6c 6c 20 77 6f 72 6b 2c 0a 2a 2a 20  n will work,.** 
245e0 62 75 74 20 6e 6f 74 20 74 68 65 20 50 72 65 76  but not the Prev
245f0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
24600 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f  .** See also: No
24610 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69  tFound, NoConfli
24620 63 74 2c 20 4e 6f 74 45 78 69 73 74 73 2e 20 53  ct, NotExists. S
24630 65 65 6b 47 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  eekGe.*/./* Opco
24640 64 65 3a 20 4e 6f 74 46 6f 75 6e 64 20 50 31 20  de: NotFound P1 
24650 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
24660 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
24670 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  @P4].**.** If P4
24680 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  ==0 then registe
24690 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f  r P3 holds a blo
246a0 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  b constructed by
246b0 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66   MakeRecord.  If
246c0 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65  .** P4>0 then re
246d0 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65  gister P3 is the
246e0 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67   first of P4 reg
246f0 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d  isters that form
24700 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20   an unpacked.** 
24710 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43  record..** .** C
24720 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61  ursor P1 is on a
24730 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20  n index btree.  
24740 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64  If the record id
24750 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61  entified by P3 a
24760 6e 64 20 50 34 0a 2a 2a 20 69 73 20 6e 6f 74 20  nd P4.** is not 
24770 74 68 65 20 70 72 65 66 69 78 20 6f 66 20 61 6e  the prefix of an
24780 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68  y entry in P1 th
24790 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64  en a jump is mad
247a0 65 20 74 6f 20 50 32 2e 20 20 49 66 20 50 31 20  e to P2.  If P1 
247b0 0a 2a 2a 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e  .** does contain
247c0 20 61 6e 20 65 6e 74 72 79 20 77 68 6f 73 65 20   an entry whose 
247d0 70 72 65 66 69 78 20 6d 61 74 63 68 65 73 20 74  prefix matches t
247e0 68 65 20 50 33 2f 50 34 20 72 65 63 6f 72 64 20  he P3/P4 record 
247f0 74 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20  then control.** 
24800 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 20 74 6f  falls through to
24810 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
24820 63 74 69 6f 6e 20 61 6e 64 20 50 31 20 69 73 20  ction and P1 is 
24830 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74  left pointing at
24840 20 74 68 65 0a 2a 2a 20 6d 61 74 63 68 69 6e 67   the.** matching
24850 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68   entry..**.** Th
24860 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61  is operation lea
24870 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 69  ves the cursor i
24880 6e 20 61 20 73 74 61 74 65 20 77 68 65 72 65 20  n a state where 
24890 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20  it cannot be.** 
248a0 61 64 76 61 6e 63 65 64 20 69 6e 20 65 69 74 68  advanced in eith
248b0 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49  er direction.  I
248c0 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
248d0 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76  he Next and Prev
248e0 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f 20 6e  .** opcodes do n
248f0 6f 74 20 77 6f 72 6b 20 61 66 74 65 72 20 74 68  ot work after th
24900 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a  is operation..**
24910 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
24920 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20  und, NotExists, 
24930 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 49 66 4e 6f  NoConflict, IfNo
24940 48 6f 70 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  Hope.*/./* Opcod
24950 65 3a 20 49 66 4e 6f 48 6f 70 65 20 50 31 20 50  e: IfNoHope P1 P
24960 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
24970 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
24980 50 34 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74  P4].**.** Regist
24990 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72  er P3 is the fir
249a0 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  st of P4 registe
249b0 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20  rs that form an 
249c0 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f  unpacked.** reco
249d0 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72  rd..**.** Cursor
249e0 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64   P1 is on an ind
249f0 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74 68  ex btree.  If th
24a00 65 20 73 65 65 6b 48 69 74 20 66 6c 61 67 20 69  e seekHit flag i
24a10 73 20 73 65 74 20 6f 6e 20 50 31 2c 20 74 68 65  s set on P1, the
24a20 6e 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f 64 65  n.** this opcode
24a30 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 42 75   is a no-op.  Bu
24a40 74 20 69 66 20 74 68 65 20 73 65 65 6b 48 69 74  t if the seekHit
24a50 20 66 6c 61 67 20 6f 66 20 50 31 20 69 73 20 63   flag of P1 is c
24a60 6c 65 61 72 2c 20 74 68 65 6e 0a 2a 2a 20 63 68  lear, then.** ch
24a70 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74 68  eck to see if th
24a80 65 72 65 20 69 73 20 61 6e 79 20 65 6e 74 72 79  ere is any entry
24a90 20 69 6e 20 50 31 20 74 68 61 74 20 6d 61 74 63   in P1 that matc
24aa0 68 65 73 20 74 68 65 0a 2a 2a 20 70 72 65 66 69  hes the.** prefi
24ab0 78 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  x identified by 
24ac0 50 33 20 61 6e 64 20 50 34 2e 20 20 49 66 20 6e  P3 and P4.  If n
24ad0 6f 20 65 6e 74 72 79 20 6d 61 74 63 68 65 73 20  o entry matches 
24ae0 74 68 65 20 70 72 65 66 69 78 2c 0a 2a 2a 20 6a  the prefix,.** j
24af0 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65  ump to P2.  Othe
24b00 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75  rwise fall throu
24b10 67 68 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  gh..**.** This o
24b20 70 63 6f 64 65 20 62 65 68 61 76 65 73 20 6c 69  pcode behaves li
24b30 6b 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 69  ke OP_NotFound i
24b40 66 20 74 68 65 20 73 65 65 6b 48 69 74 0a 2a 2a  f the seekHit.**
24b50 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 20 61   flag is clear a
24b60 6e 64 20 69 74 20 62 65 68 61 76 65 73 20 6c 69  nd it behaves li
24b70 6b 65 20 4f 50 5f 4e 6f 6f 70 20 69 66 20 74 68  ke OP_Noop if th
24b80 65 20 73 65 65 6b 48 69 74 20 66 6c 61 67 20 69  e seekHit flag i
24b90 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  s set..**.** Thi
24ba0 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64  s opcode is used
24bb0 20 69 6e 20 49 4e 20 63 6c 61 75 73 65 20 70 72   in IN clause pr
24bc0 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 61 20 6d  ocessing for a m
24bd0 75 6c 74 69 2d 63 6f 6c 75 6d 6e 20 6b 65 79 2e  ulti-column key.
24be0 0a 2a 2a 20 49 66 20 61 6e 20 49 4e 20 63 6c 61  .** If an IN cla
24bf0 75 73 65 20 69 73 20 61 74 74 61 63 68 65 64 20  use is attached 
24c00 74 6f 20 61 6e 20 65 6c 65 6d 65 6e 74 20 6f 66  to an element of
24c10 20 74 68 65 20 6b 65 79 20 6f 74 68 65 72 20 74   the key other t
24c20 68 61 6e 20 74 68 65 0a 2a 2a 20 6c 65 66 74 2d  han the.** left-
24c30 6d 6f 73 74 20 65 6c 65 6d 65 6e 74 2c 20 61 6e  most element, an
24c40 64 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e  d if there are n
24c50 6f 20 6d 61 74 63 68 65 73 20 6f 6e 20 74 68 65  o matches on the
24c60 20 6d 6f 73 74 20 72 65 63 65 6e 74 0a 2a 2a 20   most recent.** 
24c70 73 65 65 6b 20 6f 76 65 72 20 74 68 65 20 77 68  seek over the wh
24c80 6f 6c 65 20 6b 65 79 2c 20 74 68 65 6e 20 69 74  ole key, then it
24c90 20 6d 69 67 68 74 20 62 65 20 74 68 61 74 20 6f   might be that o
24ca0 6e 65 20 6f 66 20 74 68 65 20 6b 65 79 20 65 6c  ne of the key el
24cb0 65 6d 65 6e 74 0a 2a 2a 20 74 6f 20 74 68 65 20  ement.** to the 
24cc0 6c 65 66 74 20 69 73 20 70 72 6f 68 69 62 69 74  left is prohibit
24cd0 69 6e 67 20 61 20 6d 61 74 63 68 2c 20 61 6e 64  ing a match, and
24ce0 20 68 65 6e 63 65 20 74 68 65 72 65 20 69 73 20   hence there is 
24cf0 22 6e 6f 20 68 6f 70 65 22 20 6f 66 0a 2a 2a 20  "no hope" of.** 
24d00 61 6e 79 20 6d 61 74 63 68 20 72 65 67 61 72 64  any match regard
24d10 6c 65 73 73 20 6f 66 20 68 6f 77 20 6d 61 6e 79  less of how many
24d20 20 49 4e 20 63 6c 61 75 73 65 20 65 6c 65 6d 65   IN clause eleme
24d30 6e 74 73 20 61 72 65 20 63 68 65 63 6b 65 64 2e  nts are checked.
24d40 0a 2a 2a 20 49 6e 20 73 75 63 68 20 61 20 63 61  .** In such a ca
24d50 73 65 2c 20 77 65 20 61 62 61 6e 64 6f 6e 20 74  se, we abandon t
24d60 68 65 20 49 4e 20 63 6c 61 75 73 65 20 73 65 61  he IN clause sea
24d70 72 63 68 20 65 61 72 6c 79 2c 20 75 73 69 6e 67  rch early, using
24d80 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 2e   this.** opcode.
24d90 20 20 54 68 65 20 6f 70 63 6f 64 65 20 6e 61 6d    The opcode nam
24da0 65 20 63 6f 6d 65 73 20 66 72 6f 6d 20 74 68 65  e comes from the
24db0 20 66 61 63 74 20 74 68 61 74 20 74 68 65 0a 2a   fact that the.*
24dc0 2a 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  * jump is taken 
24dd0 69 66 20 74 68 65 72 65 20 69 73 20 22 6e 6f 20  if there is "no 
24de0 68 6f 70 65 22 20 6f 66 20 61 63 68 69 65 76 69  hope" of achievi
24df0 6e 67 20 61 20 6d 61 74 63 68 2e 0a 2a 2a 0a 2a  ng a match..**.*
24e00 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46  * See also: NotF
24e10 6f 75 6e 64 2c 20 53 65 65 6b 48 69 74 0a 2a 2f  ound, SeekHit.*/
24e20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 43 6f  ./* Opcode: NoCo
24e30 6e 66 6c 69 63 74 20 50 31 20 50 32 20 50 33 20  nflict P1 P2 P3 
24e40 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
24e50 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
24e60 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68  *.** If P4==0 th
24e70 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 68  en register P3 h
24e80 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73  olds a blob cons
24e90 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52  tructed by MakeR
24ea0 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34  ecord.  If.** P4
24eb0 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72  >0 then register
24ec0 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
24ed0 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
24ee0 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e   that form an un
24ef0 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64  packed.** record
24f00 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20  ..** .** Cursor 
24f10 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65  P1 is on an inde
24f20 78 20 62 74 72 65 65 2e 20 20 49 66 20 74 68 65  x btree.  If the
24f30 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69   record identifi
24f40 65 64 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a  ed by P3 and P4.
24f50 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 6e 79 20  ** contains any 
24f60 4e 55 4c 4c 20 76 61 6c 75 65 2c 20 6a 75 6d 70  NULL value, jump
24f70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
24f80 50 32 2e 20 20 49 66 20 61 6c 6c 20 74 65 72 6d  P2.  If all term
24f90 73 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f  s of the.** reco
24fa0 72 64 20 61 72 65 20 6e 6f 74 2d 4e 55 4c 4c 20  rd are not-NULL 
24fb0 74 68 65 6e 20 61 20 63 68 65 63 6b 20 69 73 20  then a check is 
24fc0 64 6f 6e 65 20 74 6f 20 64 65 74 65 72 6d 69 6e  done to determin
24fd0 65 20 69 66 20 61 6e 79 20 72 6f 77 20 69 6e 20  e if any row in 
24fe0 74 68 65 0a 2a 2a 20 50 31 20 69 6e 64 65 78 20  the.** P1 index 
24ff0 62 74 72 65 65 20 68 61 73 20 61 20 6d 61 74 63  btree has a matc
25000 68 69 6e 67 20 6b 65 79 20 70 72 65 66 69 78 2e  hing key prefix.
25010 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e    If there are n
25020 6f 20 6d 61 74 63 68 65 73 2c 20 6a 75 6d 70 0a  o matches, jump.
25030 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  ** immediately t
25040 6f 20 50 32 2e 20 20 49 66 20 74 68 65 72 65 20  o P2.  If there 
25050 69 73 20 61 20 6d 61 74 63 68 2c 20 66 61 6c 6c  is a match, fall
25060 20 74 68 72 6f 75 67 68 20 61 6e 64 20 6c 65 61   through and lea
25070 76 65 20 74 68 65 20 50 31 0a 2a 2a 20 63 75 72  ve the P1.** cur
25080 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20  sor pointing to 
25090 74 68 65 20 6d 61 74 63 68 69 6e 67 20 72 6f 77  the matching row
250a0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
250b0 6f 64 65 20 69 73 20 73 69 6d 69 6c 61 72 20 74  ode is similar t
250c0 6f 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 77 69  o OP_NotFound wi
250d0 74 68 20 74 68 65 20 65 78 63 65 70 74 69 6f 6e  th the exception
250e0 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 62 72  s that the.** br
250f0 61 6e 63 68 20 69 73 20 61 6c 77 61 79 73 20 74  anch is always t
25100 61 6b 65 6e 20 69 66 20 61 6e 79 20 70 61 72 74  aken if any part
25110 20 6f 66 20 74 68 65 20 73 65 61 72 63 68 20 6b   of the search k
25120 65 79 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  ey input is NULL
25130 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65  ..**.** This ope
25140 72 61 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68  ration leaves th
25150 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74  e cursor in a st
25160 61 74 65 20 77 68 65 72 65 20 69 74 20 63 61 6e  ate where it can
25170 6e 6f 74 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63  not be.** advanc
25180 65 64 20 69 6e 20 65 69 74 68 65 72 20 64 69 72  ed in either dir
25190 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65  ection.  In othe
251a0 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78  r words, the Nex
251b0 74 20 61 6e 64 20 50 72 65 76 0a 2a 2a 20 6f 70  t and Prev.** op
251c0 63 6f 64 65 73 20 64 6f 20 6e 6f 74 20 77 6f 72  codes do not wor
251d0 6b 20 61 66 74 65 72 20 74 68 69 73 20 6f 70 65  k after this ope
251e0 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65  ration..**.** Se
251f0 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64  e also: NotFound
25200 2c 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73  , Found, NotExis
25210 74 73 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  ts.*/.case OP_If
25220 4e 6f 48 6f 70 65 3a 20 7b 20 20 20 20 20 2f 2a  NoHope: {     /*
25230 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
25240 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
25250 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
25260 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
25270 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
25280 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
25290 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
252a0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28  ( pC!=0 );.  if(
252b0 20 70 43 2d 3e 73 65 65 6b 48 69 74 20 29 20 62   pC->seekHit ) b
252c0 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20  reak;.  /* Fall 
252d0 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f  through into OP_
252e0 4e 6f 74 46 6f 75 6e 64 20 2a 2f 0a 7d 0a 63 61  NotFound */.}.ca
252f0 73 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74  se OP_NoConflict
25300 3a 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69  :     /* jump, i
25310 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f  n3 */.case OP_No
25320 74 46 6f 75 6e 64 3a 20 20 20 20 20 20 20 2f 2a  tFound:       /*
25330 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61   jump, in3 */.ca
25340 73 65 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20 20  se OP_Found: {  
25350 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
25360 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 61 6c 72 65  n3 */.  int alre
25370 61 64 79 45 78 69 73 74 73 3b 0a 20 20 69 6e 74  adyExists;.  int
25380 20 74 61 6b 65 4a 75 6d 70 3b 0a 20 20 69 6e 74   takeJump;.  int
25390 20 69 69 3b 0a 20 20 56 64 62 65 43 75 72 73 6f   ii;.  VdbeCurso
253a0 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73  r *pC;.  int res
253b0 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
253c0 72 64 20 2a 70 46 72 65 65 3b 0a 20 20 55 6e 70  rd *pFree;.  Unp
253d0 61 63 6b 65 64 52 65 63 6f 72 64 20 2a 70 49 64  ackedRecord *pId
253e0 78 4b 65 79 3b 0a 20 20 55 6e 70 61 63 6b 65 64  xKey;.  Unpacked
253f0 52 65 63 6f 72 64 20 72 3b 0a 0a 23 69 66 64 65  Record r;..#ifde
25400 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
25410 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21  if( pOp->opcode!
25420 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 29  =OP_NoConflict )
25430 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63   sqlite3_found_c
25440 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a  ount++;.#endif..
25450 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
25460 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
25470 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
25480 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
25490 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
254a0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
254b0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
254c0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23 69  ert( pC!=0 );.#i
254d0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
254e0 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d  G.  pC->seekOp =
254f0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65   pOp->opcode;.#e
25500 6e 64 69 66 0a 20 20 70 49 6e 33 20 3d 20 26 61  ndif.  pIn3 = &a
25510 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
25520 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
25530 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
25540 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28  REE );.  assert(
25550 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21   pC->uc.pCursor!
25560 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
25570 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29  pC->isTable==0 )
25580 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e  ;.  if( pOp->p4.
25590 69 3e 30 20 29 7b 0a 20 20 20 20 72 2e 70 4b 65  i>0 ){.    r.pKe
255a0 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79  yInfo = pC->pKey
255b0 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65  Info;.    r.nFie
255c0 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70  ld = (u16)pOp->p
255d0 34 2e 69 3b 0a 20 20 20 20 72 2e 61 4d 65 6d 20  4.i;.    r.aMem 
255e0 3d 20 70 49 6e 33 3b 0a 23 69 66 64 65 66 20 53  = pIn3;.#ifdef S
255f0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
25600 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 72 2e 6e  for(ii=0; ii<r.n
25610 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20  Field; ii++){.  
25620 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
25630 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69  sValid(&r.aMem[i
25640 69 5d 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73  i]) );.      ass
25650 65 72 74 28 20 28 72 2e 61 4d 65 6d 5b 69 69 5d  ert( (r.aMem[ii]
25660 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72  .flags & MEM_Zer
25670 6f 29 3d 3d 30 20 7c 7c 20 72 2e 61 4d 65 6d 5b  o)==0 || r.aMem[
25680 69 69 5d 2e 6e 3d 3d 30 20 29 3b 0a 20 20 20 20  ii].n==0 );.    
25690 20 20 69 66 28 20 69 69 20 29 20 52 45 47 49 53    if( ii ) REGIS
256a0 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
256b0 33 2b 69 69 2c 20 26 72 2e 61 4d 65 6d 5b 69 69  3+ii, &r.aMem[ii
256c0 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  ]);.    }.#endif
256d0 0a 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20 26  .    pIdxKey = &
256e0 72 3b 0a 20 20 20 20 70 46 72 65 65 20 3d 20 30  r;.    pFree = 0
256f0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
25700 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61  ssert( pIn3->fla
25710 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b  gs & MEM_Blob );
25720 0a 20 20 20 20 72 63 20 3d 20 45 78 70 61 6e 64  .    rc = Expand
25730 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20 20 20  Blob(pIn3);.    
25740 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
25750 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c  TE_OK || rc==SQL
25760 49 54 45 5f 4e 4f 4d 45 4d 20 29 3b 0a 20 20 20  ITE_NOMEM );.   
25770 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 6e   if( rc ) goto n
25780 6f 5f 6d 65 6d 3b 0a 20 20 20 20 70 46 72 65 65  o_mem;.    pFree
25790 20 3d 20 70 49 64 78 4b 65 79 20 3d 20 73 71 6c   = pIdxKey = sql
257a0 69 74 65 33 56 64 62 65 41 6c 6c 6f 63 55 6e 70  ite3VdbeAllocUnp
257b0 61 63 6b 65 64 52 65 63 6f 72 64 28 70 43 2d 3e  ackedRecord(pC->
257c0 70 4b 65 79 49 6e 66 6f 29 3b 0a 20 20 20 20 69  pKeyInfo);.    i
257d0 66 28 20 70 49 64 78 4b 65 79 3d 3d 30 20 29 20  f( pIdxKey==0 ) 
257e0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
257f0 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 63 6f   sqlite3VdbeReco
25800 72 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b 65  rdUnpack(pC->pKe
25810 79 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20  yInfo, pIn3->n, 
25820 70 49 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b 65 79  pIn3->z, pIdxKey
25830 29 3b 0a 20 20 7d 0a 20 20 70 49 64 78 4b 65 79  );.  }.  pIdxKey
25840 2d 3e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30  ->default_rc = 0
25850 3b 0a 20 20 74 61 6b 65 4a 75 6d 70 20 3d 20 30  ;.  takeJump = 0
25860 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ;.  if( pOp->opc
25870 6f 64 65 3d 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69  ode==OP_NoConfli
25880 63 74 20 29 7b 0a 20 20 20 20 2f 2a 20 46 6f 72  ct ){.    /* For
25890 20 74 68 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69   the OP_NoConfli
258a0 63 74 20 6f 70 63 6f 64 65 2c 20 74 61 6b 65 20  ct opcode, take 
258b0 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e 79 20  the jump if any 
258c0 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 69 6e  of the.    ** in
258d0 70 75 74 20 66 69 65 6c 64 73 20 61 72 65 20 4e  put fields are N
258e0 55 4c 4c 2c 20 73 69 6e 63 65 20 61 6e 79 20 6b  ULL, since any k
258f0 65 79 20 77 69 74 68 20 61 20 4e 55 4c 4c 20 77  ey with a NULL w
25900 69 6c 6c 20 6e 6f 74 0a 20 20 20 20 2a 2a 20 63  ill not.    ** c
25910 6f 6e 66 6c 69 63 74 20 2a 2f 0a 20 20 20 20 66  onflict */.    f
25920 6f 72 28 69 69 3d 30 3b 20 69 69 3c 70 49 64 78  or(ii=0; ii<pIdx
25930 4b 65 79 2d 3e 6e 46 69 65 6c 64 3b 20 69 69 2b  Key->nField; ii+
25940 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 49  +){.      if( pI
25950 64 78 4b 65 79 2d 3e 61 4d 65 6d 5b 69 69 5d 2e  dxKey->aMem[ii].
25960 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
25970 20 29 7b 0a 20 20 20 20 20 20 20 20 74 61 6b 65   ){.        take
25980 4a 75 6d 70 20 3d 20 31 3b 0a 20 20 20 20 20 20  Jump = 1;.      
25990 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
259a0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 63 20  .    }.  }.  rc 
259b0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
259c0 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d  vetoUnpacked(pC-
259d0 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 70 49 64  >uc.pCursor, pId
259e0 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72 65 73  xKey, 0, 0, &res
259f0 29 3b 0a 20 20 69 66 28 20 70 46 72 65 65 20 29  );.  if( pFree )
25a00 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 4e 4e   sqlite3DbFreeNN
25a10 28 64 62 2c 20 70 46 72 65 65 29 3b 0a 20 20 69  (db, pFree);.  i
25a20 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
25a30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f   ){.    goto abo
25a40 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
25a50 0a 20 20 7d 0a 20 20 70 43 2d 3e 73 65 65 6b 52  .  }.  pC->seekR
25a60 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 61  esult = res;.  a
25a70 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d 20 28  lreadyExists = (
25a80 72 65 73 3d 3d 30 29 3b 0a 20 20 70 43 2d 3e 6e  res==0);.  pC->n
25a90 75 6c 6c 52 6f 77 20 3d 20 31 2d 61 6c 72 65 61  ullRow = 1-alrea
25aa0 64 79 45 78 69 73 74 73 3b 0a 20 20 70 43 2d 3e  dyExists;.  pC->
25ab0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
25ac0 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   0;.  pC->cacheS
25ad0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
25ae0 41 4c 45 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  ALE;.  if( pOp->
25af0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64  opcode==OP_Found
25b00 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e   ){.    VdbeBran
25b10 63 68 54 61 6b 65 6e 28 61 6c 72 65 61 64 79 45  chTaken(alreadyE
25b20 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20  xists!=0,2);.   
25b30 20 69 66 28 20 61 6c 72 65 61 64 79 45 78 69 73   if( alreadyExis
25b40 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  ts ) goto jump_t
25b50 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  o_p2;.  }else{. 
25b60 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
25b70 65 6e 28 74 61 6b 65 4a 75 6d 70 7c 7c 61 6c 72  en(takeJump||alr
25b80 65 61 64 79 45 78 69 73 74 73 3d 3d 30 2c 32 29  eadyExists==0,2)
25b90 3b 0a 20 20 20 20 69 66 28 20 74 61 6b 65 4a 75  ;.    if( takeJu
25ba0 6d 70 20 7c 7c 20 21 61 6c 72 65 61 64 79 45 78  mp || !alreadyEx
25bb0 69 73 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70  ists ) goto jump
25bc0 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
25bd0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
25be0 65 3a 20 53 65 65 6b 52 6f 77 69 64 20 50 31 20  e: SeekRowid P1 
25bf0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
25c00 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b  opsis: intkey=r[
25c10 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  P3].**.** P1 is 
25c20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20 63  the index of a c
25c30 75 72 73 6f 72 20 6f 70 65 6e 20 6f 6e 20 61 6e  ursor open on an
25c40 20 53 51 4c 20 74 61 62 6c 65 20 62 74 72 65 65   SQL table btree
25c50 20 28 77 69 74 68 20 69 6e 74 65 67 65 72 0a 2a   (with integer.*
25c60 2a 20 6b 65 79 73 29 2e 20 20 49 66 20 72 65 67  * keys).  If reg
25c70 69 73 74 65 72 20 50 33 20 64 6f 65 73 20 6e 6f  ister P3 does no
25c80 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  t contain an int
25c90 65 67 65 72 20 6f 72 20 69 66 20 50 31 20 64 6f  eger or if P1 do
25ca0 65 73 20 6e 6f 74 0a 2a 2a 20 63 6f 6e 74 61 69  es not.** contai
25cb0 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74 68 20  n a record with 
25cc0 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20 6a 75  rowid P3 then ju
25cd0 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
25ce0 6f 20 50 32 2e 20 20 0a 2a 2a 20 4f 72 2c 20 69  o P2.  .** Or, i
25cf0 66 20 50 32 20 69 73 20 30 2c 20 72 61 69 73 65  f P2 is 0, raise
25d00 20 61 6e 20 53 51 4c 49 54 45 5f 43 4f 52 52 55   an SQLITE_CORRU
25d10 50 54 20 65 72 72 6f 72 2e 20 49 66 20 50 31 20  PT error. If P1 
25d20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 0a 2a 2a 20  does contain.** 
25d30 61 20 72 65 63 6f 72 64 20 77 69 74 68 20 72 6f  a record with ro
25d40 77 69 64 20 50 33 20 74 68 65 6e 20 0a 2a 2a 20  wid P3 then .** 
25d50 6c 65 61 76 65 20 74 68 65 20 63 75 72 73 6f 72  leave the cursor
25d60 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 61   pointing at tha
25d70 74 20 72 65 63 6f 72 64 20 61 6e 64 20 66 61 6c  t record and fal
25d80 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
25d90 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75 63   next.** instruc
25da0 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  tion..**.** The 
25db0 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 70 63  OP_NotExists opc
25dc0 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65  ode performs the
25dd0 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 2c   same operation,
25de0 20 62 75 74 20 77 69 74 68 20 4f 50 5f 4e 6f 74   but with OP_Not
25df0 45 78 69 73 74 73 0a 2a 2a 20 74 68 65 20 50 33  Exists.** the P3
25e00 20 72 65 67 69 73 74 65 72 20 6d 75 73 74 20 62   register must b
25e10 65 20 67 75 61 72 61 6e 74 65 65 64 20 74 6f 20  e guaranteed to 
25e20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67  contain an integ
25e30 65 72 20 76 61 6c 75 65 2e 20 20 57 69 74 68 20  er value.  With 
25e40 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 2c 20  this.** opcode, 
25e50 72 65 67 69 73 74 65 72 20 50 33 20 6d 69 67 68  register P3 migh
25e60 74 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e  t not contain an
25e70 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20   integer..**.** 
25e80 54 68 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20  The OP_NotFound 
25e90 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20  opcode performs 
25ea0 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69  the same operati
25eb0 6f 6e 20 6f 6e 20 69 6e 64 65 78 20 62 74 72 65  on on index btre
25ec0 65 73 0a 2a 2a 20 28 77 69 74 68 20 61 72 62 69  es.** (with arbi
25ed0 74 72 61 72 79 20 6d 75 6c 74 69 2d 76 61 6c 75  trary multi-valu
25ee0 65 20 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a 20 54  e keys)..**.** T
25ef0 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65  his opcode leave
25f00 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20  s the cursor in 
25f10 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74  a state where it
25f20 20 63 61 6e 6e 6f 74 20 62 65 20 61 64 76 61 6e   cannot be advan
25f30 63 65 64 0a 2a 2a 20 69 6e 20 65 69 74 68 65 72  ced.** in either
25f40 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20   direction.  In 
25f50 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
25f60 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76 20 6f   Next and Prev o
25f70 70 63 6f 64 65 73 20 77 69 6c 6c 0a 2a 2a 20 6e  pcodes will.** n
25f80 6f 74 20 77 6f 72 6b 20 66 6f 6c 6c 6f 77 69 6e  ot work followin
25f90 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a  g this opcode..*
25fa0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
25fb0 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
25fc0 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 53 65 65 6b  NoConflict, Seek
25fd0 52 6f 77 69 64 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  Rowid.*/./* Opco
25fe0 64 65 3a 20 4e 6f 74 45 78 69 73 74 73 20 50 31  de: NotExists P1
25ff0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
26000 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72  nopsis: intkey=r
26010 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  [P3].**.** P1 is
26020 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20   the index of a 
26030 63 75 72 73 6f 72 20 6f 70 65 6e 20 6f 6e 20 61  cursor open on a
26040 6e 20 53 51 4c 20 74 61 62 6c 65 20 62 74 72 65  n SQL table btre
26050 65 20 28 77 69 74 68 20 69 6e 74 65 67 65 72 0a  e (with integer.
26060 2a 2a 20 6b 65 79 73 29 2e 20 20 50 33 20 69 73  ** keys).  P3 is
26070 20 61 6e 20 69 6e 74 65 67 65 72 20 72 6f 77 69   an integer rowi
26080 64 2e 20 20 49 66 20 50 31 20 64 6f 65 73 20 6e  d.  If P1 does n
26090 6f 74 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63  ot contain a rec
260a0 6f 72 64 20 77 69 74 68 0a 2a 2a 20 72 6f 77 69  ord with.** rowi
260b0 64 20 50 33 20 74 68 65 6e 20 6a 75 6d 70 20 69  d P3 then jump i
260c0 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
260d0 2e 20 20 4f 72 2c 20 69 66 20 50 32 20 69 73 20  .  Or, if P2 is 
260e0 30 2c 20 72 61 69 73 65 20 61 6e 0a 2a 2a 20 53  0, raise an.** S
260f0 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 65 72  QLITE_CORRUPT er
26100 72 6f 72 2e 20 49 66 20 50 31 20 64 6f 65 73 20  ror. If P1 does 
26110 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f 72 64  contain a record
26120 20 77 69 74 68 20 72 6f 77 69 64 20 50 33 20 74   with rowid P3 t
26130 68 65 6e 20 0a 2a 2a 20 6c 65 61 76 65 20 74 68  hen .** leave th
26140 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e  e cursor pointin
26150 67 20 61 74 20 74 68 61 74 20 72 65 63 6f 72 64  g at that record
26160 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67   and fall throug
26170 68 20 74 6f 20 74 68 65 20 6e 65 78 74 0a 2a 2a  h to the next.**
26180 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
26190 0a 2a 2a 20 54 68 65 20 4f 50 5f 53 65 65 6b 52  .** The OP_SeekR
261a0 6f 77 69 64 20 6f 70 63 6f 64 65 20 70 65 72 66  owid opcode perf
261b0 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70  orms the same op
261c0 65 72 61 74 69 6f 6e 20 62 75 74 20 61 6c 73 6f  eration but also
261d0 20 61 6c 6c 6f 77 73 20 74 68 65 0a 2a 2a 20 50   allows the.** P
261e0 33 20 72 65 67 69 73 74 65 72 20 74 6f 20 63 6f  3 register to co
261f0 6e 74 61 69 6e 20 61 20 6e 6f 6e 2d 69 6e 74 65  ntain a non-inte
26200 67 65 72 20 76 61 6c 75 65 2c 20 69 6e 20 77 68  ger value, in wh
26210 69 63 68 20 63 61 73 65 20 74 68 65 20 6a 75 6d  ich case the jum
26220 70 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 74  p is.** always t
26230 61 6b 65 6e 2e 20 20 54 68 69 73 20 6f 70 63 6f  aken.  This opco
26240 64 65 20 72 65 71 75 69 72 65 73 20 74 68 61 74  de requires that
26250 20 50 33 20 61 6c 77 61 79 73 20 63 6f 6e 74 61   P3 always conta
26260 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  in an integer..*
26270 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 46  *.** The OP_NotF
26280 6f 75 6e 64 20 6f 70 63 6f 64 65 20 70 65 72 66  ound opcode perf
26290 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70  orms the same op
262a0 65 72 61 74 69 6f 6e 20 6f 6e 20 69 6e 64 65 78  eration on index
262b0 20 62 74 72 65 65 73 0a 2a 2a 20 28 77 69 74 68   btrees.** (with
262c0 20 61 72 62 69 74 72 61 72 79 20 6d 75 6c 74 69   arbitrary multi
262d0 2d 76 61 6c 75 65 20 6b 65 79 73 29 2e 0a 2a 2a  -value keys)..**
262e0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
262f0 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
26300 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65  r in a state whe
26310 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 20  re it cannot be 
26320 61 64 76 61 6e 63 65 64 0a 2a 2a 20 69 6e 20 65  advanced.** in e
26330 69 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e  ither direction.
26340 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
26350 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50  , the Next and P
26360 72 65 76 20 6f 70 63 6f 64 65 73 20 77 69 6c 6c  rev opcodes will
26370 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 6c  .** not work fol
26380 6c 6f 77 69 6e 67 20 74 68 69 73 20 6f 70 63 6f  lowing this opco
26390 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  de..**.** See al
263a0 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
263b0 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c  und, NoConflict,
263c0 20 53 65 65 6b 52 6f 77 69 64 0a 2a 2f 0a 63 61   SeekRowid.*/.ca
263d0 73 65 20 4f 50 5f 53 65 65 6b 52 6f 77 69 64 3a  se OP_SeekRowid:
263e0 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
263f0 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64 62 65  p, in3 */.  Vdbe
26400 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
26410 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
26420 20 69 6e 74 20 72 65 73 3b 0a 20 20 75 36 34 20   int res;.  u64 
26430 69 4b 65 79 3b 0a 0a 20 20 70 49 6e 33 20 3d 20  iKey;..  pIn3 = 
26440 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
26450 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 33    testcase( pIn3
26460 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
26470 74 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  t );.  testcase(
26480 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn3->flags & M
26490 45 4d 5f 49 6e 74 52 65 61 6c 20 29 3b 0a 20 20  EM_IntReal );.  
264a0 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  if( (pIn3->flags
264b0 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
264c0 49 6e 74 52 65 61 6c 29 29 3d 3d 30 20 29 7b 0a  IntReal))==0 ){.
264d0 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65      /* Make sure
264e0 20 70 49 6e 33 2d 3e 75 2e 69 20 63 6f 6e 74 61   pIn3->u.i conta
264f0 69 6e 73 20 61 20 76 61 6c 69 64 20 69 6e 74 65  ins a valid inte
26500 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69  ger representati
26510 6f 6e 20 6f 66 0a 20 20 20 20 2a 2a 20 74 68 65  on of.    ** the
26520 20 6b 65 79 20 76 61 6c 75 65 2c 20 62 75 74 20   key value, but 
26530 64 6f 20 6e 6f 74 20 63 68 61 6e 67 65 20 74 68  do not change th
26540 65 20 64 61 74 61 74 79 70 65 20 6f 66 20 74 68  e datatype of th
26550 65 20 72 65 67 69 73 74 65 72 2c 20 61 73 0a 20  e register, as. 
26560 20 20 20 2a 2a 20 6f 74 68 65 72 20 70 61 72 74     ** other part
26570 73 20 6f 66 20 74 68 65 20 70 65 72 70 61 72 65  s of the perpare
26580 64 20 73 74 61 74 65 6d 65 6e 74 20 6d 69 67 68  d statement migh
26590 74 20 62 65 20 64 65 70 65 6e 64 69 6e 67 20 6f  t be depending o
265a0 6e 20 74 68 65 0a 20 20 20 20 2a 2a 20 63 75 72  n the.    ** cur
265b0 72 65 6e 74 20 64 61 74 61 74 79 70 65 2e 20 2a  rent datatype. *
265c0 2f 0a 20 20 20 20 75 31 36 20 6f 72 69 67 46 6c  /.    u16 origFl
265d0 61 67 73 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67  ags = pIn3->flag
265e0 73 3b 0a 20 20 20 20 69 6e 74 20 69 73 4e 6f 74  s;.    int isNot
265f0 49 6e 74 3b 0a 20 20 20 20 61 70 70 6c 79 41 66  Int;.    applyAf
26600 66 69 6e 69 74 79 28 70 49 6e 33 2c 20 53 51 4c  finity(pIn3, SQL
26610 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c  ITE_AFF_NUMERIC,
26620 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
26630 69 73 4e 6f 74 49 6e 74 20 3d 20 28 70 49 6e 33  isNotInt = (pIn3
26640 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
26650 74 29 3d 3d 30 3b 0a 20 20 20 20 70 49 6e 33 2d  t)==0;.    pIn3-
26660 3e 66 6c 61 67 73 20 3d 20 6f 72 69 67 46 6c 61  >flags = origFla
26670 67 73 3b 0a 20 20 20 20 69 66 28 20 69 73 4e 6f  gs;.    if( isNo
26680 74 49 6e 74 20 29 20 67 6f 74 6f 20 6a 75 6d 70  tInt ) goto jump
26690 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 2f 2a  _to_p2;.  }.  /*
266a0 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e   Fall through in
266b0 74 6f 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20  to OP_NotExists 
266c0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78  */.case OP_NotEx
266d0 69 73 74 73 3a 20 20 20 20 20 20 20 20 20 20 2f  ists:          /
266e0 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20  * jump, in3 */. 
266f0 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
26700 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74  p->p3];.  assert
26710 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
26720 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 7c 7c 20   MEM_Int)!=0 || 
26730 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
26740 53 65 65 6b 52 6f 77 69 64 20 29 3b 0a 20 20 61  SeekRowid );.  a
26750 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
26760 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
26770 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
26780 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
26790 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
267a0 43 21 3d 30 20 29 3b 0a 23 69 66 64 65 66 20 53  C!=0 );.#ifdef S
267b0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66  QLITE_DEBUG.  if
267c0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
267d0 50 5f 53 65 65 6b 52 6f 77 69 64 20 29 20 70 43  P_SeekRowid ) pC
267e0 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 53 65  ->seekOp = OP_Se
267f0 65 6b 52 6f 77 69 64 3b 0a 23 65 6e 64 69 66 0a  ekRowid;.#endif.
26800 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
26810 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73 65 72  Table );.  asser
26820 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
26830 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
26840 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  ;.  pCrsr = pC->
26850 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73  uc.pCursor;.  as
26860 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29  sert( pCrsr!=0 )
26870 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 69  ;.  res = 0;.  i
26880 4b 65 79 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b  Key = pIn3->u.i;
26890 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
268a0 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
268b0 65 64 28 70 43 72 73 72 2c 20 30 2c 20 69 4b 65  ed(pCrsr, 0, iKe
268c0 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 61  y, 0, &res);.  a
268d0 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
268e0 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29  E_OK || res==0 )
268f0 3b 0a 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61  ;.  pC->movetoTa
26900 72 67 65 74 20 3d 20 69 4b 65 79 3b 20 20 2f 2a  rget = iKey;  /*
26910 20 55 73 65 64 20 62 79 20 4f 50 5f 44 65 6c 65   Used by OP_Dele
26920 74 65 20 2a 2f 0a 20 20 70 43 2d 3e 6e 75 6c 6c  te */.  pC->null
26930 52 6f 77 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63  Row = 0;.  pC->c
26940 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
26950 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e  HE_STALE;.  pC->
26960 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
26970 20 30 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68   0;.  VdbeBranch
26980 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b  Taken(res!=0,2);
26990 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c  .  pC->seekResul
269a0 74 20 3d 20 72 65 73 3b 0a 20 20 69 66 28 20 72  t = res;.  if( r
269b0 65 73 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73  es!=0 ){.    ass
269c0 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
269d0 4f 4b 20 29 3b 0a 20 20 20 20 69 66 28 20 70 4f  OK );.    if( pO
269e0 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20  p->p2==0 ){.    
269f0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f    rc = SQLITE_CO
26a00 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20  RRUPT_BKPT;.    
26a10 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 67 6f 74  }else{.      got
26a20 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
26a30 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63    }.  }.  if( rc
26a40 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
26a50 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
26a60 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
26a70 65 3a 20 53 65 71 75 65 6e 63 65 20 50 31 20 50  e: Sequence P1 P
26a80 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
26a90 73 69 73 3a 20 72 5b 50 32 5d 3d 63 75 72 73 6f  sis: r[P2]=curso
26aa0 72 5b 50 31 5d 2e 63 74 72 2b 2b 0a 2a 2a 0a 2a  r[P1].ctr++.**.*
26ab0 2a 20 46 69 6e 64 20 74 68 65 20 6e 65 78 74 20  * Find the next 
26ac0 61 76 61 69 6c 61 62 6c 65 20 73 65 71 75 65 6e  available sequen
26ad0 63 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 75  ce number for cu
26ae0 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72 69 74  rsor P1..** Writ
26af0 65 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 6e  e the sequence n
26b00 75 6d 62 65 72 20 69 6e 74 6f 20 72 65 67 69 73  umber into regis
26b10 74 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73  ter P2..** The s
26b20 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 6f  equence number o
26b30 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  n the cursor is 
26b40 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 66 74 65  incremented afte
26b50 72 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74 72 75  r this.** instru
26b60 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65  ction.  .*/.case
26b70 20 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20 7b 20   OP_Sequence: { 
26b80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
26b90 32 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  2 */.  assert( p
26ba0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
26bb0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
26bc0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
26bd0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d  apCsr[pOp->p1]!=
26be0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
26bf0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
26c00 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52 54  ->eCurType!=CURT
26c10 59 50 45 5f 56 54 41 42 20 29 3b 0a 20 20 70 4f  YPE_VTAB );.  pO
26c20 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
26c30 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70  ase(p, pOp);.  p
26c40 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e 61 70  Out->u.i = p->ap
26c50 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 73 65  Csr[pOp->p1]->se
26c60 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20 62 72 65 61  qCount++;.  brea
26c70 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.}.../* Opcode
26c80 3a 20 4e 65 77 52 6f 77 69 64 20 50 31 20 50 32  : NewRowid P1 P2
26c90 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
26ca0 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64  sis: r[P2]=rowid
26cb0 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61 20 6e 65 77  .**.** Get a new
26cc0 20 69 6e 74 65 67 65 72 20 72 65 63 6f 72 64 20   integer record 
26cd0 6e 75 6d 62 65 72 20 28 61 2e 6b 2e 61 20 22 72  number (a.k.a "r
26ce0 6f 77 69 64 22 29 20 75 73 65 64 20 61 73 20 74  owid") used as t
26cf0 68 65 20 6b 65 79 20 74 6f 20 61 20 74 61 62 6c  he key to a tabl
26d00 65 2e 0a 2a 2a 20 54 68 65 20 72 65 63 6f 72 64  e..** The record
26d10 20 6e 75 6d 62 65 72 20 69 73 20 6e 6f 74 20 70   number is not p
26d20 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64 20 61  reviously used a
26d30 73 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20 64  s a key in the d
26d40 61 74 61 62 61 73 65 0a 2a 2a 20 74 61 62 6c 65  atabase.** table
26d50 20 74 68 61 74 20 63 75 72 73 6f 72 20 50 31 20   that cursor P1 
26d60 70 6f 69 6e 74 73 20 74 6f 2e 20 20 54 68 65 20  points to.  The 
26d70 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  new record numbe
26d80 72 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20  r is written.** 
26d90 77 72 69 74 74 65 6e 20 74 6f 20 72 65 67 69 73  written to regis
26da0 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P2..**.** If
26db0 20 50 33 3e 30 20 74 68 65 6e 20 50 33 20 69 73   P3>0 then P3 is
26dc0 20 61 20 72 65 67 69 73 74 65 72 20 69 6e 20 74   a register in t
26dd0 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66  he root frame of
26de0 20 74 68 69 73 20 56 44 42 45 20 74 68 61 74 20   this VDBE that 
26df0 68 6f 6c 64 73 20 0a 2a 2a 20 74 68 65 20 6c 61  holds .** the la
26e00 72 67 65 73 74 20 70 72 65 76 69 6f 75 73 6c 79  rgest previously
26e10 20 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72   generated recor
26e20 64 20 6e 75 6d 62 65 72 2e 20 4e 6f 20 6e 65 77  d number. No new
26e30 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 73 20   record numbers 
26e40 61 72 65 0a 2a 2a 20 61 6c 6c 6f 77 65 64 20 74  are.** allowed t
26e50 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20 74  o be less than t
26e60 68 69 73 20 76 61 6c 75 65 2e 20 57 68 65 6e 20  his value. When 
26e70 74 68 69 73 20 76 61 6c 75 65 20 72 65 61 63 68  this value reach
26e80 65 73 20 69 74 73 20 6d 61 78 69 6d 75 6d 2c 20  es its maximum, 
26e90 0a 2a 2a 20 61 6e 20 53 51 4c 49 54 45 5f 46 55  .** an SQLITE_FU
26ea0 4c 4c 20 65 72 72 6f 72 20 69 73 20 67 65 6e 65  LL error is gene
26eb0 72 61 74 65 64 2e 20 54 68 65 20 50 33 20 72 65  rated. The P3 re
26ec0 67 69 73 74 65 72 20 69 73 20 75 70 64 61 74 65  gister is update
26ed0 64 20 77 69 74 68 20 74 68 65 20 27 0a 2a 2a 20  d with the '.** 
26ee0 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64  generated record
26ef0 20 6e 75 6d 62 65 72 2e 20 54 68 69 73 20 50 33   number. This P3
26f00 20 6d 65 63 68 61 6e 69 73 6d 20 69 73 20 75 73   mechanism is us
26f10 65 64 20 74 6f 20 68 65 6c 70 20 69 6d 70 6c 65  ed to help imple
26f20 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 41 55 54 4f  ment the.** AUTO
26f30 49 4e 43 52 45 4d 45 4e 54 20 66 65 61 74 75 72  INCREMENT featur
26f40 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65  e..*/.case OP_Ne
26f50 77 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20  wRowid: {       
26f60 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
26f70 20 69 36 34 20 76 3b 20 20 20 20 20 20 20 20 20   i64 v;         
26f80 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e          /* The n
26f90 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 56 64  ew rowid */.  Vd
26fa0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20  beCursor *pC;   
26fb0 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6f       /* Cursor o
26fc0 66 20 74 61 62 6c 65 20 74 6f 20 67 65 74 20 74  f table to get t
26fd0 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a  he new rowid */.
26fe0 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20    int res;      
26ff0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
27000 6c 74 20 6f 66 20 61 6e 20 73 71 6c 69 74 65 33  lt of an sqlite3
27010 42 74 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20  BtreeLast() */. 
27020 20 69 6e 74 20 63 6e 74 3b 20 20 20 20 20 20 20   int cnt;       
27030 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74          /* Count
27040 65 72 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20  er to limit the 
27050 6e 75 6d 62 65 72 20 6f 66 20 73 65 61 72 63 68  number of search
27060 65 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  es */.  Mem *pMe
27070 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  m;             /
27080 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69  * Register holdi
27090 6e 67 20 6c 61 72 67 65 73 74 20 72 6f 77 69 64  ng largest rowid
270a0 20 66 6f 72 20 41 55 54 4f 49 4e 43 52 45 4d 45   for AUTOINCREME
270b0 4e 54 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d  NT */.  VdbeFram
270c0 65 20 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 2f  e *pFrame;     /
270d0 2a 20 52 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20  * Root frame of 
270e0 56 44 42 45 20 2a 2f 0a 0a 20 20 76 20 3d 20 30  VDBE */..  v = 0
270f0 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 70  ;.  res = 0;.  p
27100 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
27110 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
27120 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
27130 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
27140 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
27150 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
27160 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
27170 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
27180 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
27190 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
271a0 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
271b0 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
271c0 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72  ert( pC->uc.pCur
271d0 73 6f 72 21 3d 30 20 29 3b 0a 20 20 7b 0a 20 20  sor!=0 );.  {.  
271e0 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 72 6f    /* The next ro
271f0 77 69 64 20 6f 72 20 72 65 63 6f 72 64 20 6e 75  wid or record nu
27200 6d 62 65 72 20 28 64 69 66 66 65 72 65 6e 74 20  mber (different 
27210 74 65 72 6d 73 20 66 6f 72 20 74 68 65 20 73 61  terms for the sa
27220 6d 65 0a 20 20 20 20 2a 2a 20 74 68 69 6e 67 29  me.    ** thing)
27230 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69 6e 20   is obtained in 
27240 61 20 74 77 6f 2d 73 74 65 70 20 61 6c 67 6f 72  a two-step algor
27250 69 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20  ithm..    **.   
27260 20 2a 2a 20 46 69 72 73 74 20 77 65 20 61 74 74   ** First we att
27270 65 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65  empt to find the
27280 20 6c 61 72 67 65 73 74 20 65 78 69 73 74 69 6e   largest existin
27290 67 20 72 6f 77 69 64 20 61 6e 64 20 61 64 64 20  g rowid and add 
272a0 6f 6e 65 0a 20 20 20 20 2a 2a 20 74 6f 20 74 68  one.    ** to th
272b0 61 74 2e 20 20 42 75 74 20 69 66 20 74 68 65 20  at.  But if the 
272c0 6c 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67  largest existing
272d0 20 72 6f 77 69 64 20 69 73 20 61 6c 72 65 61 64   rowid is alread
272e0 79 20 74 68 65 20 6d 61 78 69 6d 75 6d 0a 20 20  y the maximum.  
272f0 20 20 2a 2a 20 70 6f 73 69 74 69 76 65 20 69 6e    ** positive in
27300 74 65 67 65 72 2c 20 77 65 20 68 61 76 65 20 74  teger, we have t
27310 6f 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  o fall through t
27320 6f 20 74 68 65 20 73 65 63 6f 6e 64 0a 20 20 20  o the second.   
27330 20 2a 2a 20 70 72 6f 62 61 62 69 6c 69 73 74 69   ** probabilisti
27340 63 20 61 6c 67 6f 72 69 74 68 6d 0a 20 20 20 20  c algorithm.    
27350 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65 20 73 65  **.    ** The se
27360 63 6f 6e 64 20 61 6c 67 6f 72 69 74 68 6d 20 69  cond algorithm i
27370 73 20 74 6f 20 73 65 6c 65 63 74 20 61 20 72 6f  s to select a ro
27380 77 69 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e  wid at random an
27390 64 20 73 65 65 20 69 66 0a 20 20 20 20 2a 2a 20  d see if.    ** 
273a0 69 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74  it already exist
273b0 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20  s in the table. 
273c0 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20   If it does not 
273d0 65 78 69 73 74 2c 20 77 65 20 68 61 76 65 0a 20  exist, we have. 
273e0 20 20 20 2a 2a 20 73 75 63 63 65 65 64 65 64 2e     ** succeeded.
273f0 20 20 49 66 20 74 68 65 20 72 61 6e 64 6f 6d 20    If the random 
27400 72 6f 77 69 64 20 64 6f 65 73 20 65 78 69 73 74  rowid does exist
27410 2c 20 77 65 20 73 65 6c 65 63 74 20 61 20 6e 65  , we select a ne
27420 77 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 61 6e 64  w one.    ** and
27430 20 74 72 79 20 61 67 61 69 6e 2c 20 75 70 20 74   try again, up t
27440 6f 20 31 30 30 20 74 69 6d 65 73 2e 0a 20 20 20  o 100 times..   
27450 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20   */.    assert( 
27460 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 0a  pC->isTable );..
27470 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 33 32  #ifdef SQLITE_32
27480 42 49 54 5f 52 4f 57 49 44 0a 23 20 20 20 64 65  BIT_ROWID.#   de
27490 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 30  fine MAX_ROWID 0
274a0 78 37 66 66 66 66 66 66 66 0a 23 65 6c 73 65 0a  x7fffffff.#else.
274b0 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70      /* Some comp
274c0 69 6c 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61  ilers complain a
274d0 62 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 6f  bout constants o
274e0 66 20 74 68 65 20 66 6f 72 6d 20 30 78 37 66 66  f the form 0x7ff
274f0 66 66 66 66 66 66 66 66 66 66 66 66 66 2e 0a 20  fffffffffffff.. 
27500 20 20 20 2a 2a 20 4f 74 68 65 72 73 20 63 6f 6d     ** Others com
27510 70 6c 61 69 6e 20 61 62 6f 75 74 20 30 78 37 66  plain about 0x7f
27520 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 4c  fffffffffffffffL
27530 4c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  L.  The followin
27540 67 20 6d 61 63 72 6f 20 73 65 65 6d 73 0a 20 20  g macro seems.  
27550 20 20 2a 2a 20 74 6f 20 70 72 6f 76 69 64 65 20    ** to provide 
27560 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 77 68 69  the constant whi
27570 6c 65 20 6d 61 6b 69 6e 67 20 61 6c 6c 20 63 6f  le making all co
27580 6d 70 69 6c 65 72 73 20 68 61 70 70 79 2e 0a 20  mpilers happy.. 
27590 20 20 20 2a 2f 0a 23 20 20 20 64 65 66 69 6e 65     */.#   define
275a0 20 4d 41 58 5f 52 4f 57 49 44 20 20 28 69 36 34   MAX_ROWID  (i64
275b0 29 28 20 28 28 28 75 36 34 29 30 78 37 66 66 66  )( (((u64)0x7fff
275c0 66 66 66 66 29 3c 3c 33 32 29 20 7c 20 28 75 36  ffff)<<32) | (u6
275d0 34 29 30 78 66 66 66 66 66 66 66 66 20 29 0a 23  4)0xffffffff ).#
275e0 65 6e 64 69 66 0a 0a 20 20 20 20 69 66 28 20 21  endif..    if( !
275f0 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
27600 69 64 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  id ){.      rc =
27610 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
27620 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  t(pC->uc.pCursor
27630 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69  , &res);.      i
27640 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
27650 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   ){.        goto
27660 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
27670 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ror;.      }.   
27680 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20     if( res ){.  
27690 20 20 20 20 20 20 76 20 3d 20 31 3b 20 20 20 2f        v = 1;   /
276a0 2a 20 49 4d 50 3a 20 52 2d 36 31 39 31 34 2d 34  * IMP: R-61914-4
276b0 38 30 37 34 20 2a 2f 0a 20 20 20 20 20 20 7d 65  8074 */.      }e
276c0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 61 73 73  lse{.        ass
276d0 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
276e0 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70  eCursorIsValid(p
276f0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 20 29  C->uc.pCursor) )
27700 3b 0a 20 20 20 20 20 20 20 20 76 20 3d 20 73 71  ;.        v = sq
27710 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65 67 65  lite3BtreeIntege
27720 72 4b 65 79 28 70 43 2d 3e 75 63 2e 70 43 75 72  rKey(pC->uc.pCur
27730 73 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 69 66  sor);.        if
27740 28 20 76 3e 3d 4d 41 58 5f 52 4f 57 49 44 20 29  ( v>=MAX_ROWID )
27750 7b 0a 20 20 20 20 20 20 20 20 20 20 70 43 2d 3e  {.          pC->
27760 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 3d  useRandomRowid =
27770 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73   1;.        }els
27780 65 7b 0a 20 20 20 20 20 20 20 20 20 20 76 2b 2b  e{.          v++
27790 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 39  ;   /* IMP: R-29
277a0 35 33 38 2d 33 34 39 38 37 20 2a 2f 0a 20 20 20  538-34987 */.   
277b0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
277c0 20 20 20 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51     }..#ifndef SQ
277d0 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
277e0 43 52 45 4d 45 4e 54 0a 20 20 20 20 69 66 28 20  CREMENT.    if( 
277f0 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 20  pOp->p3 ){.     
27800 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20   /* Assert that 
27810 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65  P3 is a valid me
27820 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20  mory cell. */.  
27830 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
27840 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 69  >p3>0 );.      i
27850 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a  f( p->pFrame ){.
27860 20 20 20 20 20 20 20 20 66 6f 72 28 70 46 72 61          for(pFra
27870 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46  me=p->pFrame; pF
27880 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70  rame->pParent; p
27890 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50  Frame=pFrame->pP
278a0 61 72 65 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  arent);.        
278b0 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50  /* Assert that P
278c0 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d  3 is a valid mem
278d0 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20  ory cell. */.   
278e0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
278f0 2d 3e 70 33 3c 3d 70 46 72 61 6d 65 2d 3e 6e 4d  ->p3<=pFrame->nM
27900 65 6d 20 29 3b 0a 20 20 20 20 20 20 20 20 70 4d  em );.        pM
27910 65 6d 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d  em = &pFrame->aM
27920 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
27930 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
27940 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74    /* Assert that
27950 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d   P3 is a valid m
27960 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20  emory cell. */. 
27970 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
27980 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
27990 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
279a0 20 29 3b 0a 20 20 20 20 20 20 20 20 70 4d 65 6d   );.        pMem
279b0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
279c0 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 41 62  ];.        memAb
279d0 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
279e0 4d 65 6d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  Mem);.      }.  
279f0 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
27a00 73 56 61 6c 69 64 28 70 4d 65 6d 29 20 29 3b 0a  sValid(pMem) );.
27a10 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f  .      REGISTER_
27a20 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
27a30 4d 65 6d 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  Mem);.      sqli
27a40 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
27a50 72 69 66 79 28 70 4d 65 6d 29 3b 0a 20 20 20 20  rify(pMem);.    
27a60 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d    assert( (pMem-
27a70 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
27a80 29 21 3d 30 20 29 3b 20 20 2f 2a 20 6d 65 6d 28  )!=0 );  /* mem(
27a90 50 33 29 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74  P3) holds an int
27aa0 65 67 65 72 20 2a 2f 0a 20 20 20 20 20 20 69 66  eger */.      if
27ab0 28 20 70 4d 65 6d 2d 3e 75 2e 69 3d 3d 4d 41 58  ( pMem->u.i==MAX
27ac0 5f 52 4f 57 49 44 20 7c 7c 20 70 43 2d 3e 75 73  _ROWID || pC->us
27ad0 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a  eRandomRowid ){.
27ae0 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
27af0 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49  ITE_FULL;   /* I
27b00 4d 50 3a 20 52 2d 31 37 38 31 37 2d 30 30 36 33  MP: R-17817-0063
27b10 30 20 2a 2f 0a 20 20 20 20 20 20 20 20 67 6f 74  0 */.        got
27b20 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
27b30 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
27b40 20 20 20 20 69 66 28 20 76 3c 70 4d 65 6d 2d 3e      if( v<pMem->
27b50 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20 20 20 20  u.i+1 ){.       
27b60 20 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e 69 20 2b   v = pMem->u.i +
27b70 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   1;.      }.    
27b80 20 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d 20 76 3b    pMem->u.i = v;
27b90 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  .    }.#endif.  
27ba0 20 20 69 66 28 20 70 43 2d 3e 75 73 65 52 61 6e    if( pC->useRan
27bb0 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20  domRowid ){.    
27bc0 20 20 2f 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54    /* IMPLEMENTAT
27bd0 49 4f 4e 2d 4f 46 3a 20 52 2d 30 37 36 37 37 2d  ION-OF: R-07677-
27be0 34 31 38 38 31 20 49 66 20 74 68 65 20 6c 61 72  41881 If the lar
27bf0 67 65 73 74 20 52 4f 57 49 44 20 69 73 20 65 71  gest ROWID is eq
27c00 75 61 6c 20 74 6f 20 74 68 65 0a 20 20 20 20 20  ual to the.     
27c10 20 2a 2a 20 6c 61 72 67 65 73 74 20 70 6f 73 73   ** largest poss
27c20 69 62 6c 65 20 69 6e 74 65 67 65 72 20 28 39 32  ible integer (92
27c30 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30  2337203685477580
27c40 37 29 20 74 68 65 6e 20 74 68 65 20 64 61 74 61  7) then the data
27c50 62 61 73 65 0a 20 20 20 20 20 20 2a 2a 20 65 6e  base.      ** en
27c60 67 69 6e 65 20 73 74 61 72 74 73 20 70 69 63 6b  gine starts pick
27c70 69 6e 67 20 70 6f 73 69 74 69 76 65 20 63 61 6e  ing positive can
27c80 64 69 64 61 74 65 20 52 4f 57 49 44 73 20 61 74  didate ROWIDs at
27c90 20 72 61 6e 64 6f 6d 20 75 6e 74 69 6c 0a 20 20   random until.  
27ca0 20 20 20 20 2a 2a 20 69 74 20 66 69 6e 64 73 20      ** it finds 
27cb0 6f 6e 65 20 74 68 61 74 20 69 73 20 6e 6f 74 20  one that is not 
27cc0 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64 2e  previously used.
27cd0 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
27ce0 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 29 3b 20  ( pOp->p3==0 ); 
27cf0 20 2f 2a 20 57 65 20 63 61 6e 6e 6f 74 20 62 65   /* We cannot be
27d00 20 69 6e 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64   in random rowid
27d10 20 6d 6f 64 65 20 69 66 20 74 68 69 73 20 69 73   mode if this is
27d20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
27d40 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e   an AUTOINCREMEN
27d50 54 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 20 20  T table. */.    
27d60 20 20 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20    cnt = 0;.     
27d70 20 64 6f 7b 0a 20 20 20 20 20 20 20 20 73 71 6c   do{.        sql
27d80 69 74 65 33 5f 72 61 6e 64 6f 6d 6e 65 73 73 28  ite3_randomness(
27d90 73 69 7a 65 6f 66 28 76 29 2c 20 26 76 29 3b 0a  sizeof(v), &v);.
27da0 20 20 20 20 20 20 20 20 76 20 26 3d 20 28 4d 41          v &= (MA
27db0 58 5f 52 4f 57 49 44 3e 3e 31 29 3b 20 76 2b 2b  X_ROWID>>1); v++
27dc0 3b 20 20 2f 2a 20 45 6e 73 75 72 65 20 74 68 61  ;  /* Ensure tha
27dd0 74 20 76 20 69 73 20 67 72 65 61 74 65 72 20 74  t v is greater t
27de0 68 61 6e 20 7a 65 72 6f 20 2a 2f 0a 20 20 20 20  han zero */.    
27df0 20 20 7d 77 68 69 6c 65 28 20 20 28 28 72 63 20    }while(  ((rc 
27e00 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
27e10 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d  vetoUnpacked(pC-
27e20 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 30 2c 20  >uc.pCursor, 0, 
27e30 28 75 36 34 29 76 2c 0a 20 20 20 20 20 20 20 20  (u64)v,.        
27e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e60 20 20 20 20 20 20 20 20 20 30 2c 20 26 72 65 73           0, &res
27e70 29 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 29 0a 20  ))==SQLITE_OK). 
27e80 20 20 20 20 20 20 20 20 20 20 20 26 26 20 28 72             && (r
27e90 65 73 3d 3d 30 29 0a 20 20 20 20 20 20 20 20 20  es==0).         
27ea0 20 20 20 26 26 20 28 2b 2b 63 6e 74 3c 31 30 30     && (++cnt<100
27eb0 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  ));.      if( rc
27ec0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
27ed0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
27ee0 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a    if( res==0 ){.
27ef0 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
27f00 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49  ITE_FULL;   /* I
27f10 4d 50 3a 20 52 2d 33 38 32 31 39 2d 35 33 30 30  MP: R-38219-5300
27f20 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 67 6f 74  2 */.        got
27f30 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
27f40 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
27f50 20 20 20 20 61 73 73 65 72 74 28 20 76 3e 30 20      assert( v>0 
27f60 29 3b 20 20 2f 2a 20 45 56 3a 20 52 2d 34 30 38  );  /* EV: R-408
27f70 31 32 2d 30 33 35 37 30 20 2a 2f 0a 20 20 20 20  12-03570 */.    
27f80 7d 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  }.    pC->deferr
27f90 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
27fa0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
27fb0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
27fc0 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  .  }.  pOut->u.i
27fd0 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = v;.  break;.}
27fe0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73  ../* Opcode: Ins
27ff0 65 72 74 20 50 31 20 50 32 20 50 33 20 50 34 20  ert P1 P2 P3 P4 
28000 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
28010 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 20 64 61 74  intkey=r[P3] dat
28020 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 57 72  a=r[P2].**.** Wr
28030 69 74 65 20 61 6e 20 65 6e 74 72 79 20 69 6e 74  ite an entry int
28040 6f 20 74 68 65 20 74 61 62 6c 65 20 6f 66 20 63  o the table of c
28050 75 72 73 6f 72 20 50 31 2e 20 20 41 20 6e 65 77  ursor P1.  A new
28060 20 65 6e 74 72 79 20 69 73 0a 2a 2a 20 63 72 65   entry is.** cre
28070 61 74 65 64 20 69 66 20 69 74 20 64 6f 65 73 6e  ated if it doesn
28080 27 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74  't already exist
28090 20 6f 72 20 74 68 65 20 64 61 74 61 20 66 6f 72   or the data for
280a0 20 61 6e 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20   an existing.** 
280b0 65 6e 74 72 79 20 69 73 20 6f 76 65 72 77 72 69  entry is overwri
280c0 74 74 65 6e 2e 20 20 54 68 65 20 64 61 74 61 20  tten.  The data 
280d0 69 73 20 74 68 65 20 76 61 6c 75 65 20 4d 45 4d  is the value MEM
280e0 5f 42 6c 6f 62 20 73 74 6f 72 65 64 20 69 6e 20  _Blob stored in 
280f0 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62  register.** numb
28100 65 72 20 50 32 2e 20 54 68 65 20 6b 65 79 20 69  er P2. The key i
28110 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
28120 73 74 65 72 20 50 33 2e 20 54 68 65 20 6b 65 79  ster P3. The key
28130 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61 20 4d 45   must.** be a ME
28140 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  M_Int..**.** If 
28150 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  the OPFLAG_NCHAN
28160 47 45 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73  GE flag of P5 is
28170 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72   set, then the r
28180 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20  ow change count 
28190 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65  is.** incremente
281a0 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74  d (otherwise not
281b0 29 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41  ).  If the OPFLA
281c0 47 5f 4c 41 53 54 52 4f 57 49 44 20 66 6c 61 67  G_LASTROWID flag
281d0 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 0a 2a   of P5 is set,.*
281e0 2a 20 74 68 65 6e 20 72 6f 77 69 64 20 69 73 20  * then rowid is 
281f0 73 74 6f 72 65 64 20 66 6f 72 20 73 75 62 73 65  stored for subse
28200 71 75 65 6e 74 20 72 65 74 75 72 6e 20 62 79 20  quent return by 
28210 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c  the.** sqlite3_l
28220 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
28230 28 29 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68  () function (oth
28240 65 72 77 69 73 65 20 69 74 20 69 73 20 75 6e 6d  erwise it is unm
28250 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20  odified)..**.** 
28260 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53  If the OPFLAG_US
28270 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67  ESEEKRESULT flag
28280 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20 74   of P5 is set, t
28290 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
282a0 6e 20 6d 69 67 68 74 0a 2a 2a 20 72 75 6e 20 66  n might.** run f
282b0 61 73 74 65 72 20 62 79 20 61 76 6f 69 64 69 6e  aster by avoidin
282c0 67 20 61 6e 20 75 6e 6e 65 63 65 73 73 61 72 79  g an unnecessary
282d0 20 73 65 65 6b 20 6f 6e 20 63 75 72 73 6f 72 20   seek on cursor 
282e0 50 31 2e 20 20 48 6f 77 65 76 65 72 2c 0a 2a 2a  P1.  However,.**
282f0 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53   the OPFLAG_USES
28300 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 6d  EEKRESULT flag m
28310 75 73 74 20 6f 6e 6c 79 20 62 65 20 73 65 74 20  ust only be set 
28320 69 66 20 74 68 65 72 65 20 68 61 76 65 20 62 65  if there have be
28330 65 6e 20 6e 6f 20 70 72 69 6f 72 0a 2a 2a 20 73  en no prior.** s
28340 65 65 6b 73 20 6f 6e 20 74 68 65 20 63 75 72 73  eeks on the curs
28350 6f 72 20 6f 72 20 69 66 20 74 68 65 20 6d 6f 73  or or if the mos
28360 74 20 72 65 63 65 6e 74 20 73 65 65 6b 20 75 73  t recent seek us
28370 65 64 20 61 20 6b 65 79 20 65 71 75 61 6c 20 74  ed a key equal t
28380 6f 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  o P3..**.** If t
28390 68 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41  he OPFLAG_ISUPDA
283a0 54 45 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20  TE flag is set, 
283b0 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65  then this opcode
283c0 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e 0a 2a   is part of an.*
283d0 2a 20 55 50 44 41 54 45 20 6f 70 65 72 61 74 69  * UPDATE operati
283e0 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73 65 20 28  on.  Otherwise (
283f0 69 66 20 74 68 65 20 66 6c 61 67 20 69 73 20 63  if the flag is c
28400 6c 65 61 72 29 20 74 68 65 6e 20 74 68 69 73 20  lear) then this 
28410 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 70 61 72  opcode.** is par
28420 74 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 6f  t of an INSERT o
28430 70 65 72 61 74 69 6f 6e 2e 20 20 54 68 65 20 64  peration.  The d
28440 69 66 66 65 72 65 6e 63 65 20 69 73 20 6f 6e 6c  ifference is onl
28450 79 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 2a  y important to.*
28460 2a 20 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f  * the update hoo
28470 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65 74  k..**.** Paramet
28480 65 72 20 50 34 20 6d 61 79 20 70 6f 69 6e 74 20  er P4 may point 
28490 74 6f 20 61 20 54 61 62 6c 65 20 73 74 72 75 63  to a Table struc
284a0 74 75 72 65 2c 20 6f 72 20 6d 61 79 20 62 65 20  ture, or may be 
284b0 4e 55 4c 4c 2e 20 49 66 20 69 74 20 69 73 20 0a  NULL. If it is .
284c0 2a 2a 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65  ** not NULL, the
284d0 6e 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  n the update-hoo
284e0 6b 20 28 73 71 6c 69 74 65 33 2e 78 55 70 64 61  k (sqlite3.xUpda
284f0 74 65 43 61 6c 6c 62 61 63 6b 29 20 69 73 20 69  teCallback) is i
28500 6e 76 6f 6b 65 64 20 0a 2a 2a 20 66 6f 6c 6c 6f  nvoked .** follo
28510 77 69 6e 67 20 61 20 73 75 63 63 65 73 73 66 75  wing a successfu
28520 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20  l insert..**.** 
28530 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49  (WARNING/TODO: I
28540 66 20 50 31 20 69 73 20 61 20 70 73 65 75 64 6f  f P1 is a pseudo
28550 2d 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69  -cursor and P2 i
28560 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a  s dynamically.**
28570 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 6e   allocated, then
28580 20 6f 77 6e 65 72 73 68 69 70 20 6f 66 20 50 32   ownership of P2
28590 20 69 73 20 74 72 61 6e 73 66 65 72 72 65 64 20   is transferred 
285a0 74 6f 20 74 68 65 20 70 73 65 75 64 6f 2d 63 75  to the pseudo-cu
285b0 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65 67 69  rsor.** and regi
285c0 73 74 65 72 20 50 32 20 62 65 63 6f 6d 65 73 20  ster P2 becomes 
285d0 65 70 68 65 6d 65 72 61 6c 2e 20 20 49 66 20 74  ephemeral.  If t
285e0 68 65 20 63 75 72 73 6f 72 20 69 73 20 63 68 61  he cursor is cha
285f0 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76 61 6c  nged, the.** val
28600 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
28610 32 20 77 69 6c 6c 20 74 68 65 6e 20 63 68 61 6e  2 will then chan
28620 67 65 2e 20 20 4d 61 6b 65 20 73 75 72 65 20 74  ge.  Make sure t
28630 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20  his does not.** 
28640 63 61 75 73 65 20 61 6e 79 20 70 72 6f 62 6c 65  cause any proble
28650 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ms.).**.** This 
28660 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79  instruction only
28670 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c 65 73   works on tables
28680 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e  .  The equivalen
28690 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a  t instruction.**
286a0 20 66 6f 72 20 69 6e 64 69 63 65 73 20 69 73 20   for indices is 
286b0 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a 2a 2f  OP_IdxInsert..*/
286c0 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 3a  .case OP_Insert:
286d0 20 7b 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 3b   {.  Mem *pData;
286e0 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65         /* MEM ce
286f0 6c 6c 20 68 6f 6c 64 69 6e 67 20 64 61 74 61 20  ll holding data 
28700 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 74  for the record t
28710 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f  o be inserted */
28720 0a 20 20 4d 65 6d 20 2a 70 4b 65 79 3b 20 20 20  .  Mem *pKey;   
28730 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c       /* MEM cell
28740 20 68 6f 6c 64 69 6e 67 20 6b 65 79 20 20 66 6f   holding key  fo
28750 72 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  r the record */.
28760 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
28770 3b 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 74 6f  ;   /* Cursor to
28780 20 74 61 62 6c 65 20 69 6e 74 6f 20 77 68 69 63   table into whic
28790 68 20 69 6e 73 65 72 74 20 69 73 20 77 72 69 74  h insert is writ
287a0 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 73 65 65  ten */.  int see
287b0 6b 52 65 73 75 6c 74 3b 20 20 20 2f 2a 20 52 65  kResult;   /* Re
287c0 73 75 6c 74 20 6f 66 20 70 72 69 6f 72 20 73 65  sult of prior se
287d0 65 6b 20 6f 72 20 30 20 69 66 20 6e 6f 20 55 53  ek or 0 if no US
287e0 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67  ESEEKRESULT flag
287f0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
28800 20 2a 7a 44 62 3b 20 20 2f 2a 20 64 61 74 61 62   *zDb;  /* datab
28810 61 73 65 20 6e 61 6d 65 20 2d 20 75 73 65 64 20  ase name - used 
28820 62 79 20 74 68 65 20 75 70 64 61 74 65 20 68 6f  by the update ho
28830 6f 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  ok */.  Table *p
28840 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54 61 62  Tab;      /* Tab
28850 6c 65 20 73 74 72 75 63 74 75 72 65 20 2d 20 75  le structure - u
28860 73 65 64 20 62 79 20 75 70 64 61 74 65 20 61 6e  sed by update an
28870 64 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f  d pre-update hoo
28880 6b 73 20 2a 2f 0a 20 20 42 74 72 65 65 50 61 79  ks */.  BtreePay
28890 6c 6f 61 64 20 78 3b 20 20 20 2f 2a 20 50 61 79  load x;   /* Pay
288a0 6c 6f 61 64 20 74 6f 20 62 65 20 69 6e 73 65 72  load to be inser
288b0 74 65 64 20 2a 2f 0a 0a 20 20 70 44 61 74 61 20  ted */..  pData 
288c0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
288d0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
288e0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
288f0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
28900 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
28910 61 6c 69 64 28 70 44 61 74 61 29 20 29 3b 0a 20  alid(pData) );. 
28920 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
28930 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
28940 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
28950 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
28960 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
28970 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  E );.  assert( p
28980 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30  C->uc.pCursor!=0
28990 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
289a0 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
289b0 49 53 4e 4f 4f 50 29 20 7c 7c 20 70 43 2d 3e 69  ISNOOP) || pC->i
289c0 73 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73 65  sTable );.  asse
289d0 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
289e0 3d 50 34 5f 54 41 42 4c 45 20 7c 7c 20 70 4f 70  =P4_TABLE || pOp
289f0 2d 3e 70 34 74 79 70 65 3e 3d 50 34 5f 53 54 41  ->p4type>=P4_STA
28a00 54 49 43 20 29 3b 0a 20 20 52 45 47 49 53 54 45  TIC );.  REGISTE
28a10 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
28a20 20 70 44 61 74 61 29 3b 0a 20 20 73 71 6c 69 74   pData);.  sqlit
28a30 65 33 56 64 62 65 49 6e 63 72 57 72 69 74 65 43  e3VdbeIncrWriteC
28a40 6f 75 6e 74 65 72 28 70 2c 20 70 43 29 3b 0a 0a  ounter(p, pC);..
28a50 20 20 70 4b 65 79 20 3d 20 26 61 4d 65 6d 5b 70    pKey = &aMem[p
28a60 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
28a70 74 28 20 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26  t( pKey->flags &
28a80 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73   MEM_Int );.  as
28a90 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
28aa0 28 70 4b 65 79 29 20 29 3b 0a 20 20 52 45 47 49  (pKey) );.  REGI
28ab0 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
28ac0 70 33 2c 20 70 4b 65 79 29 3b 0a 20 20 78 2e 6e  p3, pKey);.  x.n
28ad0 4b 65 79 20 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b  Key = pKey->u.i;
28ae0 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74  ..  if( pOp->p4t
28af0 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20 26 26  ype==P4_TABLE &&
28b00 20 48 41 53 5f 55 50 44 41 54 45 5f 48 4f 4f 4b   HAS_UPDATE_HOOK
28b10 28 64 62 29 20 29 7b 0a 20 20 20 20 61 73 73 65  (db) ){.    asse
28b20 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29  rt( pC->iDb>=0 )
28b30 3b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e  ;.    zDb = db->
28b40 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 44 62  aDb[pC->iDb].zDb
28b50 53 4e 61 6d 65 3b 0a 20 20 20 20 70 54 61 62 20  SName;.    pTab 
28b60 3d 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 3b 0a  = pOp->p4.pTab;.
28b70 20 20 20 20 61 73 73 65 72 74 28 20 28 70 4f 70      assert( (pOp
28b80 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53  ->p5 & OPFLAG_IS
28b90 4e 4f 4f 50 29 20 7c 7c 20 48 61 73 52 6f 77 69  NOOP) || HasRowi
28ba0 64 28 70 54 61 62 29 20 29 3b 0a 20 20 7d 65 6c  d(pTab) );.  }el
28bb0 73 65 7b 0a 20 20 20 20 70 54 61 62 20 3d 20 30  se{.    pTab = 0
28bc0 3b 0a 20 20 20 20 7a 44 62 20 3d 20 30 3b 20 20  ;.    zDb = 0;  
28bd0 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20  /* Not needed.  
28be0 53 69 6c 65 6e 63 65 20 61 20 63 6f 6d 70 69 6c  Silence a compil
28bf0 65 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20  er warning. */. 
28c00 20 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54   }..#ifdef SQLIT
28c10 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41  E_ENABLE_PREUPDA
28c20 54 45 5f 48 4f 4f 4b 0a 20 20 2f 2a 20 49 6e 76  TE_HOOK.  /* Inv
28c30 6f 6b 65 20 74 68 65 20 70 72 65 2d 75 70 64 61  oke the pre-upda
28c40 74 65 20 68 6f 6f 6b 2c 20 69 66 20 61 6e 79 20  te hook, if any 
28c50 2a 2f 0a 20 20 69 66 28 20 70 54 61 62 20 29 7b  */.  if( pTab ){
28c60 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78 50 72  .    if( db->xPr
28c70 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  eUpdateCallback 
28c80 26 26 20 21 28 70 4f 70 2d 3e 70 35 20 26 20 4f  && !(pOp->p5 & O
28c90 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20  PFLAG_ISUPDATE) 
28ca0 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
28cb0 56 64 62 65 50 72 65 55 70 64 61 74 65 48 6f 6f  VdbePreUpdateHoo
28cc0 6b 28 70 2c 20 70 43 2c 20 53 51 4c 49 54 45 5f  k(p, pC, SQLITE_
28cd0 49 4e 53 45 52 54 2c 20 7a 44 62 2c 20 70 54 61  INSERT, zDb, pTa
28ce0 62 2c 20 78 2e 6e 4b 65 79 2c 70 4f 70 2d 3e 70  b, x.nKey,pOp->p
28cf0 32 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  2);.    }.    if
28d00 28 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c  ( db->xUpdateCal
28d10 6c 62 61 63 6b 3d 3d 30 20 7c 7c 20 70 54 61 62  lback==0 || pTab
28d20 2d 3e 61 43 6f 6c 3d 3d 30 20 29 7b 0a 20 20 20  ->aCol==0 ){.   
28d30 20 20 20 2f 2a 20 50 72 65 76 65 6e 74 20 70 6f     /* Prevent po
28d40 73 74 2d 75 70 64 61 74 65 20 68 6f 6f 6b 20 66  st-update hook f
28d50 72 6f 6d 20 72 75 6e 6e 69 6e 67 20 69 6e 20 63  rom running in c
28d60 61 73 65 73 20 77 68 65 6e 20 69 74 20 73 68 6f  ases when it sho
28d70 75 6c 64 20 6e 6f 74 20 2a 2f 0a 20 20 20 20 20  uld not */.     
28d80 20 70 54 61 62 20 3d 20 30 3b 0a 20 20 20 20 7d   pTab = 0;.    }
28d90 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
28da0 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 4e 4f  p5 & OPFLAG_ISNO
28db0 4f 50 20 29 20 62 72 65 61 6b 3b 0a 23 65 6e 64  OP ) break;.#end
28dc0 69 66 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  if..  if( pOp->p
28dd0 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  5 & OPFLAG_NCHAN
28de0 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b  GE ) p->nChange+
28df0 2b 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  +;.  if( pOp->p5
28e00 20 26 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f   & OPFLAG_LASTRO
28e10 57 49 44 20 29 20 64 62 2d 3e 6c 61 73 74 52 6f  WID ) db->lastRo
28e20 77 69 64 20 3d 20 78 2e 6e 4b 65 79 3b 0a 20 20  wid = x.nKey;.  
28e30 61 73 73 65 72 74 28 20 70 44 61 74 61 2d 3e 66  assert( pData->f
28e40 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62  lags & (MEM_Blob
28e50 7c 4d 45 4d 5f 53 74 72 29 20 29 3b 0a 20 20 78  |MEM_Str) );.  x
28e60 2e 70 44 61 74 61 20 3d 20 70 44 61 74 61 2d 3e  .pData = pData->
28e70 7a 3b 0a 20 20 78 2e 6e 44 61 74 61 20 3d 20 70  z;.  x.nData = p
28e80 44 61 74 61 2d 3e 6e 3b 0a 20 20 73 65 65 6b 52  Data->n;.  seekR
28e90 65 73 75 6c 74 20 3d 20 28 28 70 4f 70 2d 3e 70  esult = ((pOp->p
28ea0 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45  5 & OPFLAG_USESE
28eb0 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e  EKRESULT) ? pC->
28ec0 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 3b  seekResult : 0);
28ed0 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c  .  if( pData->fl
28ee0 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29  ags & MEM_Zero )
28ef0 7b 0a 20 20 20 20 78 2e 6e 5a 65 72 6f 20 3d 20  {.    x.nZero = 
28f00 70 44 61 74 61 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a  pData->u.nZero;.
28f10 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 78 2e 6e    }else{.    x.n
28f20 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  Zero = 0;.  }.  
28f30 78 2e 70 4b 65 79 20 3d 20 30 3b 0a 20 20 72 63  x.pKey = 0;.  rc
28f40 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
28f50 6e 73 65 72 74 28 70 43 2d 3e 75 63 2e 70 43 75  nsert(pC->uc.pCu
28f60 72 73 6f 72 2c 20 26 78 2c 0a 20 20 20 20 20 20  rsor, &x,.      
28f70 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c  (pOp->p5 & (OPFL
28f80 41 47 5f 41 50 50 45 4e 44 7c 4f 50 46 4c 41 47  AG_APPEND|OPFLAG
28f90 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 29 29 2c  _SAVEPOSITION)),
28fa0 20 73 65 65 6b 52 65 73 75 6c 74 0a 20 20 29 3b   seekResult.  );
28fb0 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  .  pC->deferredM
28fc0 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d  oveto = 0;.  pC-
28fd0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
28fe0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f  ACHE_STALE;..  /
28ff0 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64  * Invoke the upd
29000 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75  ate-hook if requ
29010 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72  ired. */.  if( r
29020 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
29030 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69  ue_to_error;.  i
29040 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20 20 61  f( pTab ){.    a
29050 73 73 65 72 74 28 20 64 62 2d 3e 78 55 70 64 61  ssert( db->xUpda
29060 74 65 43 61 6c 6c 62 61 63 6b 21 3d 30 20 29 3b  teCallback!=0 );
29070 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 54 61  .    assert( pTa
29080 62 2d 3e 61 43 6f 6c 21 3d 30 20 29 3b 0a 20 20  b->aCol!=0 );.  
29090 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c    db->xUpdateCal
290a0 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74  lback(db->pUpdat
290b0 65 41 72 67 2c 0a 20 20 20 20 20 20 20 20 20 20  eArg,.          
290c0 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c   (pOp->p5 & OPFL
290d0 41 47 5f 49 53 55 50 44 41 54 45 29 20 3f 20 53  AG_ISUPDATE) ? S
290e0 51 4c 49 54 45 5f 55 50 44 41 54 45 20 3a 20 53  QLITE_UPDATE : S
290f0 51 4c 49 54 45 5f 49 4e 53 45 52 54 2c 0a 20 20  QLITE_INSERT,.  
29100 20 20 20 20 20 20 20 20 20 7a 44 62 2c 20 70 54           zDb, pT
29110 61 62 2d 3e 7a 4e 61 6d 65 2c 20 78 2e 6e 4b 65  ab->zName, x.nKe
29120 79 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  y);.  }.  break;
29130 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
29140 65 6c 65 74 65 20 50 31 20 50 32 20 50 33 20 50  elete P1 P2 P3 P
29150 34 20 50 35 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74  4 P5.**.** Delet
29160 65 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 20  e the record at 
29170 77 68 69 63 68 20 74 68 65 20 50 31 20 63 75 72  which the P1 cur
29180 73 6f 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79  sor is currently
29190 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a   pointing..**.**
291a0 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 53   If the OPFLAG_S
291b0 41 56 45 50 4f 53 49 54 49 4f 4e 20 62 69 74 20  AVEPOSITION bit 
291c0 6f 66 20 74 68 65 20 50 35 20 70 61 72 61 6d 65  of the P5 parame
291d0 74 65 72 20 69 73 20 73 65 74 2c 20 74 68 65 6e  ter is set, then
291e0 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 20 77  .** the cursor w
291f0 69 6c 6c 20 62 65 20 6c 65 66 74 20 70 6f 69 6e  ill be left poin
29200 74 69 6e 67 20 61 74 20 20 65 69 74 68 65 72 20  ting at  either 
29210 74 68 65 20 6e 65 78 74 20 6f 72 20 74 68 65 20  the next or the 
29220 70 72 65 76 69 6f 75 73 0a 2a 2a 20 72 65 63 6f  previous.** reco
29230 72 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  rd in the table.
29240 20 49 66 20 69 74 20 69 73 20 6c 65 66 74 20 70   If it is left p
29250 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6e  ointing at the n
29260 65 78 74 20 72 65 63 6f 72 64 2c 20 74 68 65 6e  ext record, then
29270 0a 2a 2a 20 74 68 65 20 6e 65 78 74 20 4e 65 78  .** the next Nex
29280 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69  t instruction wi
29290 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f 70 2e 20 41  ll be a no-op. A
292a0 73 20 61 20 72 65 73 75 6c 74 2c 20 69 6e 20 74  s a result, in t
292b0 68 69 73 20 63 61 73 65 0a 2a 2a 20 69 74 20 69  his case.** it i
292c0 73 20 6f 6b 20 74 6f 20 64 65 6c 65 74 65 20 61  s ok to delete a
292d0 20 72 65 63 6f 72 64 20 66 72 6f 6d 20 77 69 74   record from wit
292e0 68 69 6e 20 61 20 4e 65 78 74 20 6c 6f 6f 70 2e  hin a Next loop.
292f0 20 49 66 20 0a 2a 2a 20 4f 50 46 4c 41 47 5f 53   If .** OPFLAG_S
29300 41 56 45 50 4f 53 49 54 49 4f 4e 20 62 69 74 20  AVEPOSITION bit 
29310 6f 66 20 50 35 20 69 73 20 63 6c 65 61 72 2c 20  of P5 is clear, 
29320 74 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20  then the cursor 
29330 77 69 6c 6c 20 62 65 0a 2a 2a 20 6c 65 66 74 20  will be.** left 
29340 69 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 20  in an undefined 
29350 73 74 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  state..**.** If 
29360 74 68 65 20 4f 50 46 4c 41 47 5f 41 55 58 44 45  the OPFLAG_AUXDE
29370 4c 45 54 45 20 62 69 74 20 69 73 20 73 65 74 20  LETE bit is set 
29380 6f 6e 20 50 35 2c 20 74 68 61 74 20 69 6e 64 69  on P5, that indi
29390 63 61 74 65 73 20 74 68 61 74 20 74 68 69 73 0a  cates that this.
293a0 2a 2a 20 64 65 6c 65 74 65 20 6f 6e 65 20 6f 66  ** delete one of
293b0 20 73 65 76 65 72 61 6c 20 61 73 73 6f 63 69 61   several associa
293c0 74 65 64 20 77 69 74 68 20 64 65 6c 65 74 69 6e  ted with deletin
293d0 67 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e  g a table row an
293e0 64 20 61 6c 6c 20 69 74 73 0a 2a 2a 20 61 73 73  d all its.** ass
293f0 6f 63 69 61 74 65 64 20 69 6e 64 65 78 20 65 6e  ociated index en
29400 74 72 69 65 73 2e 20 20 45 78 61 63 74 6c 79 20  tries.  Exactly 
29410 6f 6e 65 20 6f 66 20 74 68 6f 73 65 20 64 65 6c  one of those del
29420 65 74 65 73 20 69 73 20 74 68 65 20 22 70 72 69  etes is the "pri
29430 6d 61 72 79 22 0a 2a 2a 20 64 65 6c 65 74 65 2e  mary".** delete.
29440 20 20 54 68 65 20 6f 74 68 65 72 73 20 61 72 65    The others are
29450 20 61 6c 6c 20 6f 6e 20 4f 50 46 4c 41 47 5f 46   all on OPFLAG_F
29460 4f 52 44 45 4c 45 54 45 20 63 75 72 73 6f 72 73  ORDELETE cursors
29470 20 6f 72 20 65 6c 73 65 20 61 72 65 0a 2a 2a 20   or else are.** 
29480 6d 61 72 6b 65 64 20 77 69 74 68 20 74 68 65 20  marked with the 
29490 41 55 58 44 45 4c 45 54 45 20 66 6c 61 67 2e 0a  AUXDELETE flag..
294a0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
294b0 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67  LAG_NCHANGE flag
294c0 20 6f 66 20 50 32 20 28 4e 42 3a 20 50 32 20 6e   of P2 (NB: P2 n
294d0 6f 74 20 50 35 29 20 69 73 20 73 65 74 2c 20 74  ot P5) is set, t
294e0 68 65 6e 20 74 68 65 20 72 6f 77 0a 2a 2a 20 63  hen the row.** c
294f0 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 20 69  hange count is i
29500 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65  ncremented (othe
29510 72 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a  rwise not)..**.*
29520 2a 20 50 31 20 6d 75 73 74 20 6e 6f 74 20 62 65  * P1 must not be
29530 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20   pseudo-table.  
29540 49 74 20 68 61 73 20 74 6f 20 62 65 20 61 20 72  It has to be a r
29550 65 61 6c 20 74 61 62 6c 65 20 77 69 74 68 0a 2a  eal table with.*
29560 2a 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 2e  * multiple rows.
29570 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20  .**.** If P4 is 
29580 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20 69 74  not NULL then it
29590 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 54 61 62   points to a Tab
295a0 6c 65 20 6f 62 6a 65 63 74 2e 20 49 6e 20 74 68  le object. In th
295b0 69 73 20 63 61 73 65 20 65 69 74 68 65 72 20 0a  is case either .
295c0 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20 6f 72  ** the update or
295d0 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b   pre-update hook
295e0 2c 20 6f 72 20 62 6f 74 68 2c 20 6d 61 79 20 62  , or both, may b
295f0 65 20 69 6e 76 6f 6b 65 64 2e 20 54 68 65 20 50  e invoked. The P
29600 31 20 63 75 72 73 6f 72 20 6d 75 73 74 0a 2a 2a  1 cursor must.**
29610 20 68 61 76 65 20 62 65 65 6e 20 70 6f 73 69 74   have been posit
29620 69 6f 6e 65 64 20 75 73 69 6e 67 20 4f 50 5f 4e  ioned using OP_N
29630 6f 74 46 6f 75 6e 64 20 70 72 69 6f 72 20 74 6f  otFound prior to
29640 20 69 6e 76 6f 6b 69 6e 67 20 74 68 69 73 20 6f   invoking this o
29650 70 63 6f 64 65 20 69 6e 20 0a 2a 2a 20 74 68 69  pcode in .** thi
29660 73 20 63 61 73 65 2e 20 53 70 65 63 69 66 69 63  s case. Specific
29670 61 6c 6c 79 2c 20 69 66 20 6f 6e 65 20 69 73 20  ally, if one is 
29680 63 6f 6e 66 69 67 75 72 65 64 2c 20 74 68 65 20  configured, the 
29690 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 20  pre-update hook 
296a0 69 73 20 0a 2a 2a 20 69 6e 76 6f 6b 65 64 20 69  is .** invoked i
296b0 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  f P4 is not NULL
296c0 2e 20 54 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  . The update-hoo
296d0 6b 20 69 73 20 69 6e 76 6f 6b 65 64 20 69 66 20  k is invoked if 
296e0 6f 6e 65 20 69 73 20 63 6f 6e 66 69 67 75 72 65  one is configure
296f0 64 2c 20 0a 2a 2a 20 50 34 20 69 73 20 6e 6f 74  d, .** P4 is not
29700 20 4e 55 4c 4c 2c 20 61 6e 64 20 74 68 65 20 4f   NULL, and the O
29710 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c  PFLAG_NCHANGE fl
29720 61 67 20 69 73 20 73 65 74 20 69 6e 20 50 32 2e  ag is set in P2.
29730 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
29740 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 66 6c  FLAG_ISUPDATE fl
29750 61 67 20 69 73 20 73 65 74 20 69 6e 20 50 32 2c  ag is set in P2,
29760 20 74 68 65 6e 20 50 33 20 63 6f 6e 74 61 69 6e   then P3 contain
29770 73 20 74 68 65 20 61 64 64 72 65 73 73 0a 2a 2a  s the address.**
29780 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63   of the memory c
29790 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ell that contain
297a0 73 20 74 68 65 20 76 61 6c 75 65 20 74 68 61 74  s the value that
297b0 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
297c0 65 20 72 6f 77 20 77 69 6c 6c 0a 2a 2a 20 62 65  e row will.** be
297d0 20 73 65 74 20 74 6f 20 62 79 20 74 68 65 20 75   set to by the u
297e0 70 64 61 74 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  pdate..*/.case O
297f0 50 5f 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56 64  P_Delete: {.  Vd
29800 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
29810 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b  const char *zDb;
29820 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a  .  Table *pTab;.
29830 20 20 69 6e 74 20 6f 70 66 6c 61 67 73 3b 0a 0a    int opflags;..
29840 20 20 6f 70 66 6c 61 67 73 20 3d 20 70 4f 70 2d    opflags = pOp-
29850 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70  >p2;.  assert( p
29860 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
29870 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
29880 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
29890 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
298a0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
298b0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
298c0 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
298d0 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72  BTREE );.  asser
298e0 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  t( pC->uc.pCurso
298f0 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r!=0 );.  assert
29900 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
29910 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 73 71 6c  veto==0 );.  sql
29920 69 74 65 33 56 64 62 65 49 6e 63 72 57 72 69 74  ite3VdbeIncrWrit
29930 65 43 6f 75 6e 74 65 72 28 70 2c 20 70 43 29 3b  eCounter(p, pC);
29940 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
29950 44 45 42 55 47 0a 20 20 69 66 28 20 70 4f 70 2d  DEBUG.  if( pOp-
29960 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c  >p4type==P4_TABL
29970 45 20 26 26 20 48 61 73 52 6f 77 69 64 28 70 4f  E && HasRowid(pO
29980 70 2d 3e 70 34 2e 70 54 61 62 29 20 26 26 20 70  p->p4.pTab) && p
29990 4f 70 2d 3e 70 35 3d 3d 30 20 29 7b 0a 20 20 20  Op->p5==0 ){.   
299a0 20 2f 2a 20 49 66 20 70 35 20 69 73 20 7a 65 72   /* If p5 is zer
299b0 6f 2c 20 74 68 65 20 73 65 65 6b 20 6f 70 65 72  o, the seek oper
299c0 61 74 69 6f 6e 20 74 68 61 74 20 70 6f 73 69 74  ation that posit
299d0 69 6f 6e 65 64 20 74 68 65 20 63 75 72 73 6f 72  ioned the cursor
299e0 20 70 72 69 6f 72 20 74 6f 0a 20 20 20 20 2a 2a   prior to.    **
299f0 20 4f 50 5f 44 65 6c 65 74 65 20 77 69 6c 6c 20   OP_Delete will 
29a00 68 61 76 65 20 61 6c 73 6f 20 73 65 74 20 74 68  have also set th
29a10 65 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67  e pC->movetoTarg
29a20 65 74 20 66 69 65 6c 64 20 74 6f 20 74 68 65 20  et field to the 
29a30 72 6f 77 69 64 20 6f 66 0a 20 20 20 20 2a 2a 20  rowid of.    ** 
29a40 74 68 65 20 72 6f 77 20 74 68 61 74 20 69 73 20  the row that is 
29a50 62 65 69 6e 67 20 64 65 6c 65 74 65 64 20 2a 2f  being deleted */
29a60 0a 20 20 20 20 69 36 34 20 69 4b 65 79 20 3d 20  .    i64 iKey = 
29a70 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65  sqlite3BtreeInte
29a80 67 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e 70 43  gerKey(pC->uc.pC
29a90 75 72 73 6f 72 29 3b 0a 20 20 20 20 61 73 73 65  ursor);.    asse
29aa0 72 74 28 20 43 4f 52 52 55 50 54 5f 44 42 20 7c  rt( CORRUPT_DB |
29ab0 7c 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67  | pC->movetoTarg
29ac0 65 74 3d 3d 69 4b 65 79 20 29 3b 0a 20 20 7d 0a  et==iKey );.  }.
29ad0 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 49 66 20  #endif..  /* If 
29ae0 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20  the update-hook 
29af0 6f 72 20 70 72 65 2d 75 70 64 61 74 65 2d 68 6f  or pre-update-ho
29b00 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b  ok will be invok
29b10 65 64 2c 20 73 65 74 20 7a 44 62 20 74 6f 0a 20  ed, set zDb to. 
29b20 20 2a 2a 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   ** the name of 
29b30 74 68 65 20 64 62 20 74 6f 20 70 61 73 73 20 61  the db to pass a
29b40 73 20 74 6f 20 69 74 2e 20 41 6c 73 6f 20 73 65  s to it. Also se
29b50 74 20 6c 6f 63 61 6c 20 70 54 61 62 20 74 6f 20  t local pTab to 
29b60 61 20 63 6f 70 79 0a 20 20 2a 2a 20 6f 66 20 70  a copy.  ** of p
29b70 34 2e 70 54 61 62 2e 20 46 69 6e 61 6c 6c 79 2c  4.pTab. Finally,
29b80 20 69 66 20 70 35 20 69 73 20 74 72 75 65 2c 20   if p5 is true, 
29b90 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74 20  indicating that 
29ba0 74 68 69 73 20 63 75 72 73 6f 72 20 77 61 73 0a  this cursor was.
29bb0 20 20 2a 2a 20 6c 61 73 74 20 6d 6f 76 65 64 20    ** last moved 
29bc0 77 69 74 68 20 4f 50 5f 4e 65 78 74 20 6f 72 20  with OP_Next or 
29bd0 4f 50 5f 50 72 65 76 2c 20 6e 6f 74 20 53 65 65  OP_Prev, not See
29be0 6b 20 6f 72 20 4e 6f 74 46 6f 75 6e 64 2c 20 73  k or NotFound, s
29bf0 65 74 20 0a 20 20 2a 2a 20 56 64 62 65 43 75 72  et .  ** VdbeCur
29c00 73 6f 72 2e 6d 6f 76 65 74 6f 54 61 72 67 65 74  sor.movetoTarget
29c10 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20   to the current 
29c20 72 6f 77 69 64 2e 20 20 2a 2f 0a 20 20 69 66 28  rowid.  */.  if(
29c30 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
29c40 5f 54 41 42 4c 45 20 26 26 20 48 41 53 5f 55 50  _TABLE && HAS_UP
29c50 44 41 54 45 5f 48 4f 4f 4b 28 64 62 29 20 29 7b  DATE_HOOK(db) ){
29c60 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
29c70 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20 61  >iDb>=0 );.    a
29c80 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 70  ssert( pOp->p4.p
29c90 54 61 62 21 3d 30 20 29 3b 0a 20 20 20 20 7a 44  Tab!=0 );.    zD
29ca0 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e  b = db->aDb[pC->
29cb0 69 44 62 5d 2e 7a 44 62 53 4e 61 6d 65 3b 0a 20  iDb].zDbSName;. 
29cc0 20 20 20 70 54 61 62 20 3d 20 70 4f 70 2d 3e 70     pTab = pOp->p
29cd0 34 2e 70 54 61 62 3b 0a 20 20 20 20 69 66 28 20  4.pTab;.    if( 
29ce0 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
29cf0 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 29 21  G_SAVEPOSITION)!
29d00 3d 30 20 26 26 20 70 43 2d 3e 69 73 54 61 62 6c  =0 && pC->isTabl
29d10 65 20 29 7b 0a 20 20 20 20 20 20 70 43 2d 3e 6d  e ){.      pC->m
29d20 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20 73 71  ovetoTarget = sq
29d30 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65 67 65  lite3BtreeIntege
29d40 72 4b 65 79 28 70 43 2d 3e 75 63 2e 70 43 75 72  rKey(pC->uc.pCur
29d50 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  sor);.    }.  }e
29d60 6c 73 65 7b 0a 20 20 20 20 7a 44 62 20 3d 20 30  lse{.    zDb = 0
29d70 3b 20 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65  ;   /* Not neede
29d80 64 2e 20 20 53 69 6c 65 6e 63 65 20 61 20 63 6f  d.  Silence a co
29d90 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 2e 20  mpiler warning. 
29da0 2a 2f 0a 20 20 20 20 70 54 61 62 20 3d 20 30 3b  */.    pTab = 0;
29db0 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e    /* Not needed.
29dc0 20 20 53 69 6c 65 6e 63 65 20 61 20 63 6f 6d 70    Silence a comp
29dd0 69 6c 65 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f  iler warning. */
29de0 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c  .  }..#ifdef SQL
29df0 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50  ITE_ENABLE_PREUP
29e00 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 2f 2a 20 49  DATE_HOOK.  /* I
29e10 6e 76 6f 6b 65 20 74 68 65 20 70 72 65 2d 75 70  nvoke the pre-up
29e20 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71  date-hook if req
29e30 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20  uired. */.  if( 
29e40 64 62 2d 3e 78 50 72 65 55 70 64 61 74 65 43 61  db->xPreUpdateCa
29e50 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70  llback && pOp->p
29e60 34 2e 70 54 61 62 20 29 7b 0a 20 20 20 20 61 73  4.pTab ){.    as
29e70 73 65 72 74 28 20 21 28 6f 70 66 6c 61 67 73 20  sert( !(opflags 
29e80 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54  & OPFLAG_ISUPDAT
29e90 45 29 20 0a 20 20 20 20 20 20 20 20 20 7c 7c 20  E) .         || 
29ea0 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 3d 3d  HasRowid(pTab)==
29eb0 30 20 0a 20 20 20 20 20 20 20 20 20 7c 7c 20 28  0 .         || (
29ec0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 66 6c  aMem[pOp->p3].fl
29ed0 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 20 0a  ags & MEM_Int) .
29ee0 20 20 20 20 29 3b 0a 20 20 20 20 73 71 6c 69 74      );.    sqlit
29ef0 65 33 56 64 62 65 50 72 65 55 70 64 61 74 65 48  e3VdbePreUpdateH
29f00 6f 6f 6b 28 70 2c 20 70 43 2c 0a 20 20 20 20 20  ook(p, pC,.     
29f10 20 20 20 28 6f 70 66 6c 61 67 73 20 26 20 4f 50     (opflags & OP
29f20 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20 3f  FLAG_ISUPDATE) ?
29f30 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 3a   SQLITE_UPDATE :
29f40 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 20   SQLITE_DELETE, 
29f50 0a 20 20 20 20 20 20 20 20 7a 44 62 2c 20 70 54  .        zDb, pT
29f60 61 62 2c 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61  ab, pC->movetoTa
29f70 72 67 65 74 2c 0a 20 20 20 20 20 20 20 20 70 4f  rget,.        pO
29f80 70 2d 3e 70 33 0a 20 20 20 20 29 3b 0a 20 20 7d  p->p3.    );.  }
29f90 0a 20 20 69 66 28 20 6f 70 66 6c 61 67 73 20 26  .  if( opflags &
29fa0 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 29   OPFLAG_ISNOOP )
29fb0 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 20   break;.#endif. 
29fc0 0a 20 20 2f 2a 20 4f 6e 6c 79 20 66 6c 61 67 73  .  /* Only flags
29fd0 20 74 68 61 74 20 63 61 6e 20 62 65 20 73 65 74   that can be set
29fe0 20 61 72 65 20 53 41 56 45 50 4f 49 53 54 49 4f   are SAVEPOISTIO
29ff0 4e 20 61 6e 64 20 41 55 58 44 45 4c 45 54 45 20  N and AUXDELETE 
2a000 2a 2f 20 0a 20 20 61 73 73 65 72 74 28 20 28 70  */ .  assert( (p
2a010 4f 70 2d 3e 70 35 20 26 20 7e 28 4f 50 46 4c 41  Op->p5 & ~(OPFLA
2a020 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 7c 4f  G_SAVEPOSITION|O
2a030 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 29  PFLAG_AUXDELETE)
2a040 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )==0 );.  assert
2a050 28 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53  ( OPFLAG_SAVEPOS
2a060 49 54 49 4f 4e 3d 3d 42 54 52 45 45 5f 53 41 56  ITION==BTREE_SAV
2a070 45 50 4f 53 49 54 49 4f 4e 20 29 3b 0a 20 20 61  EPOSITION );.  a
2a080 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 41 55  ssert( OPFLAG_AU
2a090 58 44 45 4c 45 54 45 3d 3d 42 54 52 45 45 5f 41  XDELETE==BTREE_A
2a0a0 55 58 44 45 4c 45 54 45 20 29 3b 0a 0a 23 69 66  UXDELETE );..#if
2a0b0 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
2a0c0 0a 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65  .  if( p->pFrame
2a0d0 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 70  ==0 ){.    if( p
2a0e0 43 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 3d 3d  C->isEphemeral==
2a0f0 30 0a 20 20 20 20 20 20 20 20 26 26 20 28 70 4f  0.        && (pO
2a100 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 41  p->p5 & OPFLAG_A
2a110 55 58 44 45 4c 45 54 45 29 3d 3d 30 0a 20 20 20  UXDELETE)==0.   
2a120 20 20 20 20 20 26 26 20 28 70 43 2d 3e 77 72 46       && (pC->wrF
2a130 6c 61 67 20 26 20 4f 50 46 4c 41 47 5f 46 4f 52  lag & OPFLAG_FOR
2a140 44 45 4c 45 54 45 29 3d 3d 30 0a 20 20 20 20 20  DELETE)==0.     
2a150 20 29 7b 0a 20 20 20 20 20 20 6e 45 78 74 72 61   ){.      nExtra
2a160 44 65 6c 65 74 65 2b 2b 3b 0a 20 20 20 20 7d 0a  Delete++;.    }.
2a170 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20      if( pOp->p2 
2a180 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  & OPFLAG_NCHANGE
2a190 20 29 7b 0a 20 20 20 20 20 20 6e 45 78 74 72 61   ){.      nExtra
2a1a0 44 65 6c 65 74 65 2d 2d 3b 0a 20 20 20 20 7d 0a  Delete--;.    }.
2a1b0 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 72 63    }.#endif..  rc
2a1c0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
2a1d0 65 6c 65 74 65 28 70 43 2d 3e 75 63 2e 70 43 75  elete(pC->uc.pCu
2a1e0 72 73 6f 72 2c 20 70 4f 70 2d 3e 70 35 29 3b 0a  rsor, pOp->p5);.
2a1f0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
2a200 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
2a210 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c  .  pC->seekResul
2a220 74 20 3d 20 30 3b 0a 20 20 69 66 28 20 72 63 20  t = 0;.  if( rc 
2a230 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
2a240 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 2f 2a  _to_error;..  /*
2a250 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61   Invoke the upda
2a260 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69  te-hook if requi
2a270 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 6f 70  red. */.  if( op
2a280 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f 4e  flags & OPFLAG_N
2a290 43 48 41 4e 47 45 20 29 7b 0a 20 20 20 20 70 2d  CHANGE ){.    p-
2a2a0 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 20 20  >nChange++;.    
2a2b0 69 66 28 20 64 62 2d 3e 78 55 70 64 61 74 65 43  if( db->xUpdateC
2a2c0 61 6c 6c 62 61 63 6b 20 26 26 20 48 61 73 52 6f  allback && HasRo
2a2d0 77 69 64 28 70 54 61 62 29 20 29 7b 0a 20 20 20  wid(pTab) ){.   
2a2e0 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61     db->xUpdateCa
2a2f0 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61  llback(db->pUpda
2a300 74 65 41 72 67 2c 20 53 51 4c 49 54 45 5f 44 45  teArg, SQLITE_DE
2a310 4c 45 54 45 2c 20 7a 44 62 2c 20 70 54 61 62 2d  LETE, zDb, pTab-
2a320 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20  >zName,.        
2a330 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67    pC->movetoTarg
2a340 65 74 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  et);.      asser
2a350 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b  t( pC->iDb>=0 );
2a360 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 62 72  .    }.  }..  br
2a370 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65  eak;.}./* Opcode
2a380 3a 20 52 65 73 65 74 43 6f 75 6e 74 20 2a 20 2a  : ResetCount * *
2a390 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
2a3a0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 68   value of the ch
2a3b0 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20  ange counter is 
2a3c0 63 6f 70 69 65 64 20 74 6f 20 74 68 65 20 64 61  copied to the da
2a3d0 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a 2a  tabase handle.**
2a3e0 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20   change counter 
2a3f0 28 72 65 74 75 72 6e 65 64 20 62 79 20 73 75 62  (returned by sub
2a400 73 65 71 75 65 6e 74 20 63 61 6c 6c 73 20 74 6f  sequent calls to
2a410 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73   sqlite3_changes
2a420 28 29 29 2e 0a 2a 2a 20 54 68 65 6e 20 74 68 65  ())..** Then the
2a430 20 56 4d 73 20 69 6e 74 65 72 6e 61 6c 20 63 68   VMs internal ch
2a440 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 72 65 73  ange counter res
2a450 65 74 73 20 74 6f 20 30 2e 0a 2a 2a 20 54 68 69  ets to 0..** Thi
2a460 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72 69  s is used by tri
2a470 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 0a 2a  gger programs..*
2a480 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74 43  /.case OP_ResetC
2a490 6f 75 6e 74 3a 20 7b 0a 20 20 73 71 6c 69 74 65  ount: {.  sqlite
2a4a0 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73 28  3VdbeSetChanges(
2a4b0 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b  db, p->nChange);
2a4c0 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20  .  p->nChange = 
2a4d0 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  0;.  break;.}../
2a4e0 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72  * Opcode: Sorter
2a4f0 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50 33  Compare P1 P2 P3
2a500 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P4.** Synopsis:
2a510 20 69 66 20 6b 65 79 28 50 31 29 21 3d 74 72 69   if key(P1)!=tri
2a520 6d 28 72 5b 50 33 5d 2c 50 34 29 20 67 6f 74 6f  m(r[P3],P4) goto
2a530 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20   P2.**.** P1 is 
2a540 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 2e  a sorter cursor.
2a550 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
2a560 6e 20 63 6f 6d 70 61 72 65 73 20 61 20 70 72 65  n compares a pre
2a570 66 69 78 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65  fix of the.** re
2a580 63 6f 72 64 20 62 6c 6f 62 20 69 6e 20 72 65 67  cord blob in reg
2a590 69 73 74 65 72 20 50 33 20 61 67 61 69 6e 73 74  ister P3 against
2a5a0 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68 65   a prefix of the
2a5b0 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20   entry that .** 
2a5c0 74 68 65 20 73 6f 72 74 65 72 20 63 75 72 73 6f  the sorter curso
2a5d0 72 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  r currently poin
2a5e0 74 73 20 74 6f 2e 20 20 4f 6e 6c 79 20 74 68 65  ts to.  Only the
2a5f0 20 66 69 72 73 74 20 50 34 20 66 69 65 6c 64 73   first P4 fields
2a600 0a 2a 2a 20 6f 66 20 72 5b 50 33 5d 20 61 6e 64  .** of r[P3] and
2a610 20 74 68 65 20 73 6f 72 74 65 72 20 72 65 63 6f   the sorter reco
2a620 72 64 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e  rd are compared.
2a630 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  .**.** If either
2a640 20 50 33 20 6f 72 20 74 68 65 20 73 6f 72 74 65   P3 or the sorte
2a650 72 20 63 6f 6e 74 61 69 6e 73 20 61 20 4e 55 4c  r contains a NUL
2a660 4c 20 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65 69  L in one of thei
2a670 72 20 73 69 67 6e 69 66 69 63 61 6e 74 0a 2a 2a  r significant.**
2a680 20 66 69 65 6c 64 73 20 28 6e 6f 74 20 63 6f 75   fields (not cou
2a690 6e 74 69 6e 67 20 74 68 65 20 50 34 20 66 69 65  nting the P4 fie
2a6a0 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64 20 77  lds at the end w
2a6b0 68 69 63 68 20 61 72 65 20 69 67 6e 6f 72 65 64  hich are ignored
2a6c0 29 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f  ) then.** the co
2a6d0 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 73 73 75  mparison is assu
2a6e0 6d 65 64 20 74 6f 20 62 65 20 65 71 75 61 6c 2e  med to be equal.
2a6f0 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c 20 74 68 72 6f  .**.** Fall thro
2a700 75 67 68 20 74 6f 20 6e 65 78 74 20 69 6e 73 74  ugh to next inst
2a710 72 75 63 74 69 6f 6e 20 69 66 20 74 68 65 20 74  ruction if the t
2a720 77 6f 20 72 65 63 6f 72 64 73 20 63 6f 6d 70 61  wo records compa
2a730 72 65 20 65 71 75 61 6c 20 74 6f 0a 2a 2a 20 65  re equal to.** e
2a740 61 63 68 20 6f 74 68 65 72 2e 20 20 4a 75 6d 70  ach other.  Jump
2a750 20 74 6f 20 50 32 20 69 66 20 74 68 65 79 20 61   to P2 if they a
2a760 72 65 20 64 69 66 66 65 72 65 6e 74 2e 0a 2a 2f  re different..*/
2a770 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 43  .case OP_SorterC
2a780 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 56 64 62 65  ompare: {.  Vdbe
2a790 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e  Cursor *pC;.  in
2a7a0 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 6e 4b 65  t res;.  int nKe
2a7b0 79 43 6f 6c 3b 0a 0a 20 20 70 43 20 3d 20 70 2d  yCol;..  pC = p-
2a7c0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
2a7d0 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72  .  assert( isSor
2a7e0 74 65 72 28 70 43 29 20 29 3b 0a 20 20 61 73 73  ter(pC) );.  ass
2a7f0 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
2a800 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
2a810 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
2a820 2d 3e 70 33 5d 3b 0a 20 20 6e 4b 65 79 43 6f 6c  ->p3];.  nKeyCol
2a830 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20   = pOp->p4.i;.  
2a840 72 65 73 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20  res = 0;.  rc = 
2a850 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
2a860 72 43 6f 6d 70 61 72 65 28 70 43 2c 20 70 49 6e  rCompare(pC, pIn
2a870 33 2c 20 6e 4b 65 79 43 6f 6c 2c 20 26 72 65 73  3, nKeyCol, &res
2a880 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  );.  VdbeBranchT
2a890 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a  aken(res!=0,2);.
2a8a0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
2a8b0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2a8c0 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 20 29 20  or;.  if( res ) 
2a8d0 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
2a8e0 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 0a 2f 2a  .  break;.};../*
2a8f0 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 44   Opcode: SorterD
2a900 61 74 61 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ata P1 P2 P3 * *
2a910 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
2a920 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57  P2]=data.**.** W
2a930 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74  rite into regist
2a940 65 72 20 50 32 20 74 68 65 20 63 75 72 72 65 6e  er P2 the curren
2a950 74 20 73 6f 72 74 65 72 20 64 61 74 61 20 66 6f  t sorter data fo
2a960 72 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 20  r sorter cursor 
2a970 50 31 2e 0a 2a 2a 20 54 68 65 6e 20 63 6c 65 61  P1..** Then clea
2a980 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 68 65 61  r the column hea
2a990 64 65 72 20 63 61 63 68 65 20 6f 6e 20 63 75 72  der cache on cur
2a9a0 73 6f 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68  sor P3..**.** Th
2a9b0 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f 72  is opcode is nor
2a9c0 6d 61 6c 6c 79 20 75 73 65 20 74 6f 20 6d 6f 76  mally use to mov
2a9d0 65 20 61 20 72 65 63 6f 72 64 20 6f 75 74 20 6f  e a record out o
2a9e0 66 20 74 68 65 20 73 6f 72 74 65 72 20 61 6e 64  f the sorter and
2a9f0 20 69 6e 74 6f 0a 2a 2a 20 61 20 72 65 67 69 73   into.** a regis
2aa00 74 65 72 20 74 68 61 74 20 69 73 20 74 68 65 20  ter that is the 
2aa10 73 6f 75 72 63 65 20 66 6f 72 20 61 20 70 73 65  source for a pse
2aa20 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72  udo-table cursor
2aa30 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 0a 2a   created using.*
2aa40 2a 20 4f 70 65 6e 50 73 65 75 64 6f 2e 20 20 54  * OpenPseudo.  T
2aa50 68 61 74 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  hat pseudo-table
2aa60 20 63 75 72 73 6f 72 20 69 73 20 74 68 65 20 6f   cursor is the o
2aa70 6e 65 20 74 68 61 74 20 69 73 20 69 64 65 6e 74  ne that is ident
2aa80 69 66 69 65 64 20 62 79 0a 2a 2a 20 70 61 72 61  ified by.** para
2aa90 6d 65 74 65 72 20 50 33 2e 20 20 43 6c 65 61 72  meter P3.  Clear
2aaa0 69 6e 67 20 74 68 65 20 50 33 20 63 6f 6c 75 6d  ing the P3 colum
2aab0 6e 20 63 61 63 68 65 20 61 73 20 70 61 72 74 20  n cache as part 
2aac0 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20 73  of this opcode s
2aad0 61 76 65 73 0a 2a 2a 20 75 73 20 66 72 6f 6d 20  aves.** us from 
2aae0 68 61 76 69 6e 67 20 74 6f 20 69 73 73 75 65 20  having to issue 
2aaf0 61 20 73 65 70 61 72 61 74 65 20 4e 75 6c 6c 52  a separate NullR
2ab00 6f 77 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  ow instruction t
2ab10 6f 20 63 6c 65 61 72 20 74 68 61 74 20 63 61 63  o clear that cac
2ab20 68 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  he..*/.case OP_S
2ab30 6f 72 74 65 72 44 61 74 61 3a 20 7b 0a 20 20 56  orterData: {.  V
2ab40 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a  dbeCursor *pC;..
2ab50 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
2ab60 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 43 20 3d 20  Op->p2];.  pC = 
2ab70 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
2ab80 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  ];.  assert( isS
2ab90 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 72  orter(pC) );.  r
2aba0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  c = sqlite3VdbeS
2abb0 6f 72 74 65 72 52 6f 77 6b 65 79 28 70 43 2c 20  orterRowkey(pC, 
2abc0 70 4f 75 74 29 3b 0a 20 20 61 73 73 65 72 74 28  pOut);.  assert(
2abd0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc!=SQLITE_OK |
2abe0 7c 20 28 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26  | (pOut->flags &
2abf0 20 4d 45 4d 5f 42 6c 6f 62 29 20 29 3b 0a 20 20   MEM_Blob) );.  
2ac00 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2ac10 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
2ac20 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66  >nCursor );.  if
2ac30 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
2ac40 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2ac50 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e    p->apCsr[pOp->
2ac60 70 33 5d 2d 3e 63 61 63 68 65 53 74 61 74 75 73  p3]->cacheStatus
2ac70 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
2ac80 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2ac90 70 63 6f 64 65 3a 20 52 6f 77 44 61 74 61 20 50  pcode: RowData P
2aca0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
2acb0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64  ynopsis: r[P2]=d
2acc0 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  ata.**.** Write 
2acd0 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
2ace0 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f   the complete ro
2acf0 77 20 63 6f 6e 74 65 6e 74 20 66 6f 72 20 74 68  w content for th
2ad00 65 20 72 6f 77 20 61 74 20 0a 2a 2a 20 77 68 69  e row at .** whi
2ad10 63 68 20 63 75 72 73 6f 72 20 50 31 20 69 73 20  ch cursor P1 is 
2ad20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
2ad30 6e 67 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73 20  ng..** There is 
2ad40 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f  no interpretatio
2ad50 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20 20  n of the data.  
2ad60 0a 2a 2a 20 49 74 20 69 73 20 6a 75 73 74 20 63  .** It is just c
2ad70 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20 50  opied onto the P
2ad80 32 20 72 65 67 69 73 74 65 72 20 65 78 61 63 74  2 register exact
2ad90 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73 20  ly as .** it is 
2ada0 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61 74  found in the dat
2adb0 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a  abase file..**.*
2adc0 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 69  * If cursor P1 i
2add0 73 20 61 6e 20 69 6e 64 65 78 2c 20 74 68 65 6e  s an index, then
2ade0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 20   the content is 
2adf0 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65 20 72  the key of the r
2ae00 6f 77 2e 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72  ow..** If cursor
2ae10 20 50 32 20 69 73 20 61 20 74 61 62 6c 65 2c 20   P2 is a table, 
2ae20 74 68 65 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74  then the content
2ae30 20 65 78 74 72 61 63 74 65 64 20 69 73 20 74 68   extracted is th
2ae40 65 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 49 66  e data..**.** If
2ae50 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   the P1 cursor m
2ae60 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20  ust be pointing 
2ae70 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28  to a valid row (
2ae80 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a  not a NULL row).
2ae90 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62  ** of a real tab
2aea0 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f  le, not a pseudo
2aeb0 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  -table..**.** If
2aec0 20 50 33 21 3d 30 20 74 68 65 6e 20 74 68 69 73   P3!=0 then this
2aed0 20 6f 70 63 6f 64 65 20 69 73 20 61 6c 6c 6f 77   opcode is allow
2aee0 65 64 20 74 6f 20 6d 61 6b 65 20 61 6e 20 65 70  ed to make an ep
2aef0 68 65 6d 65 72 61 6c 20 70 6f 69 6e 74 65 72 0a  hemeral pointer.
2af00 2a 2a 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61  ** into the data
2af10 62 61 73 65 20 70 61 67 65 2e 20 20 54 68 61 74  base page.  That
2af20 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20   means that the 
2af30 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 6f  content of the o
2af40 75 74 70 75 74 0a 2a 2a 20 72 65 67 69 73 74 65  utput.** registe
2af50 72 20 77 69 6c 6c 20 62 65 20 69 6e 76 61 6c 69  r will be invali
2af60 64 61 74 65 64 20 61 73 20 73 6f 6f 6e 20 61 73  dated as soon as
2af70 20 74 68 65 20 63 75 72 73 6f 72 20 6d 6f 76 65   the cursor move
2af80 73 20 2d 20 69 6e 63 6c 75 64 69 6e 67 0a 2a 2a  s - including.**
2af90 20 6d 6f 76 65 73 20 63 61 75 73 65 64 20 62 79   moves caused by
2afa0 20 6f 74 68 65 72 20 63 75 72 73 6f 72 73 20 74   other cursors t
2afb0 68 61 74 20 22 73 61 76 65 22 20 74 68 65 20 63  hat "save" the c
2afc0 75 72 72 65 6e 74 20 63 75 72 73 6f 72 73 0a 2a  urrent cursors.*
2afd0 2a 20 70 6f 73 69 74 69 6f 6e 20 69 6e 20 6f 72  * position in or
2afe0 64 65 72 20 74 68 61 74 20 74 68 65 79 20 63 61  der that they ca
2aff0 6e 20 77 72 69 74 65 20 74 6f 20 74 68 65 20 73  n write to the s
2b000 61 6d 65 20 74 61 62 6c 65 2e 20 20 49 66 20 50  ame table.  If P
2b010 33 3d 3d 30 0a 2a 2a 20 74 68 65 6e 20 61 20 63  3==0.** then a c
2b020 6f 70 79 20 6f 66 20 74 68 65 20 64 61 74 61 20  opy of the data 
2b030 69 73 20 6d 61 64 65 20 69 6e 74 6f 20 6d 65 6d  is made into mem
2b040 6f 72 79 2e 20 20 50 33 21 3d 30 20 69 73 20 66  ory.  P3!=0 is f
2b050 61 73 74 65 72 2c 20 62 75 74 0a 2a 2a 20 50 33  aster, but.** P3
2b060 3d 3d 30 20 69 73 20 73 61 66 65 72 2e 0a 2a 2a  ==0 is safer..**
2b070 0a 2a 2a 20 49 66 20 50 33 21 3d 30 20 74 68 65  .** If P3!=0 the
2b080 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  n the content of
2b090 20 74 68 65 20 50 32 20 72 65 67 69 73 74 65 72   the P2 register
2b0a0 20 69 73 20 75 6e 73 75 69 74 61 62 6c 65 20 66   is unsuitable f
2b0b0 6f 72 20 75 73 65 0a 2a 2a 20 69 6e 20 4f 50 5f  or use.** in OP_
2b0c0 52 65 73 75 6c 74 20 61 6e 64 20 61 6e 79 20 4f  Result and any O
2b0d0 50 5f 52 65 73 75 6c 74 20 77 69 6c 6c 20 69 6e  P_Result will in
2b0e0 76 61 6c 69 64 61 74 65 20 74 68 65 20 50 32 20  validate the P2 
2b0f0 72 65 67 69 73 74 65 72 20 63 6f 6e 74 65 6e 74  register content
2b100 2e 0a 2a 2a 20 54 68 65 20 50 32 20 72 65 67 69  ..** The P2 regi
2b110 73 74 65 72 20 63 6f 6e 74 65 6e 74 20 69 73 20  ster content is 
2b120 69 6e 76 61 6c 69 64 61 74 65 64 20 62 79 20 6f  invalidated by o
2b130 70 63 6f 64 65 73 20 6c 69 6b 65 20 4f 50 5f 46  pcodes like OP_F
2b140 75 6e 63 74 69 6f 6e 20 6f 72 0a 2a 2a 20 62 79  unction or.** by
2b150 20 61 6e 79 20 75 73 65 20 6f 66 20 61 6e 6f 74   any use of anot
2b160 68 65 72 20 63 75 72 73 6f 72 20 70 6f 69 6e 74  her cursor point
2b170 69 6e 67 20 74 6f 20 74 68 65 20 73 61 6d 65 20  ing to the same 
2b180 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  table..*/.case O
2b190 50 5f 52 6f 77 44 61 74 61 3a 20 7b 0a 20 20 56  P_RowData: {.  V
2b1a0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
2b1b0 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
2b1c0 3b 0a 20 20 75 33 32 20 6e 3b 0a 0a 20 20 70 4f  ;.  u32 n;..  pO
2b1d0 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
2b1e0 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 0a 20 20  ase(p, pOp);..  
2b1f0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2b200 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
2b210 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
2b220 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
2b230 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2b240 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
2b250 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
2b260 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
2b270 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f  ;.  assert( isSo
2b280 72 74 65 72 28 70 43 29 3d 3d 30 20 29 3b 0a 20  rter(pC)==0 );. 
2b290 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 75 6c   assert( pC->nul
2b2a0 6c 52 6f 77 3d 3d 30 20 29 3b 0a 20 20 61 73 73  lRow==0 );.  ass
2b2b0 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72  ert( pC->uc.pCur
2b2c0 73 6f 72 21 3d 30 20 29 3b 0a 20 20 70 43 72 73  sor!=0 );.  pCrs
2b2d0 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  r = pC->uc.pCurs
2b2e0 6f 72 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50  or;..  /* The OP
2b2f0 5f 52 6f 77 44 61 74 61 20 6f 70 63 6f 64 65 73  _RowData opcodes
2b300 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 20 4f   always follow O
2b310 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 0a 20  P_NotExists or. 
2b320 20 2a 2a 20 4f 50 5f 53 65 65 6b 52 6f 77 69 64   ** OP_SeekRowid
2b330 20 6f 72 20 4f 50 5f 52 65 77 69 6e 64 2f 4f 70   or OP_Rewind/Op
2b340 5f 4e 65 78 74 20 77 69 74 68 20 6e 6f 20 69 6e  _Next with no in
2b350 74 65 72 76 65 6e 69 6e 67 20 69 6e 73 74 72 75  tervening instru
2b360 63 74 69 6f 6e 73 0a 20 20 2a 2a 20 74 68 61 74  ctions.  ** that
2b370 20 6d 69 67 68 74 20 69 6e 76 61 6c 69 64 61 74   might invalidat
2b380 65 20 74 68 65 20 63 75 72 73 6f 72 2e 0a 20 20  e the cursor..  
2b390 2a 2a 20 49 66 20 74 68 69 73 20 77 68 65 72 65  ** If this where
2b3a0 20 6e 6f 74 20 74 68 65 20 63 61 73 65 2c 20 6f   not the case, o
2b3b0 6e 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  n of the followi
2b3c0 6e 67 20 61 73 73 65 72 74 28 29 73 0a 20 20 2a  ng assert()s.  *
2b3d0 2a 20 77 6f 75 6c 64 20 66 61 69 6c 2e 20 20 53  * would fail.  S
2b3e0 68 6f 75 6c 64 20 74 68 69 73 20 65 76 65 72 20  hould this ever 
2b3f0 63 68 61 6e 67 65 20 28 62 65 63 61 75 73 65 20  change (because 
2b400 6f 66 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68  of changes in th
2b410 65 20 63 6f 64 65 0a 20 20 2a 2a 20 67 65 6e 65  e code.  ** gene
2b420 72 61 74 6f 72 29 20 74 68 65 6e 20 74 68 65 20  rator) then the 
2b430 66 69 78 20 77 6f 75 6c 64 20 62 65 20 74 6f 20  fix would be to 
2b440 69 6e 73 65 72 74 20 61 20 63 61 6c 6c 20 74 6f  insert a call to
2b450 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62  .  ** sqlite3Vdb
2b460 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 2e  eCursorMoveto().
2b470 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
2b480 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
2b490 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  to==0 );.  asser
2b4a0 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  t( sqlite3BtreeC
2b4b0 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72  ursorIsValid(pCr
2b4c0 73 72 29 20 29 3b 0a 23 69 66 20 30 20 20 2f 2a  sr) );.#if 0  /*
2b4d0 20 4e 6f 74 20 72 65 71 75 69 72 65 64 20 64 75   Not required du
2b4e0 65 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75  e to the previou
2b4f0 73 20 74 6f 20 61 73 73 65 72 74 28 29 20 73 74  s to assert() st
2b500 61 74 65 6d 65 6e 74 73 20 2a 2f 0a 20 20 72 63  atements */.  rc
2b510 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
2b520 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a  rsorMoveto(pC);.
2b530 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
2b540 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
2b550 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23  _due_to_error;.#
2b560 65 6e 64 69 66 0a 0a 20 20 6e 20 3d 20 73 71 6c  endif..  n = sql
2b570 69 74 65 33 42 74 72 65 65 50 61 79 6c 6f 61 64  ite3BtreePayload
2b580 53 69 7a 65 28 70 43 72 73 72 29 3b 0a 20 20 69  Size(pCrsr);.  i
2b590 66 28 20 6e 3e 28 75 33 32 29 64 62 2d 3e 61 4c  f( n>(u32)db->aL
2b5a0 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
2b5b0 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
2b5c0 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
2b5d0 20 7d 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e   }.  testcase( n
2b5e0 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  ==0 );.  rc = sq
2b5f0 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d  lite3VdbeMemFrom
2b600 42 74 72 65 65 28 70 43 72 73 72 2c 20 30 2c 20  Btree(pCrsr, 0, 
2b610 6e 2c 20 70 4f 75 74 29 3b 0a 20 20 69 66 28 20  n, pOut);.  if( 
2b620 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
2b630 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
2b640 69 66 28 20 21 70 4f 70 2d 3e 70 33 20 29 20 44  if( !pOp->p3 ) D
2b650 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f  eephemeralize(pO
2b660 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ut);.  UPDATE_MA
2b670 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
2b680 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
2b690 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74  CE(pOp->p2, pOut
2b6a0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
2b6b0 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 69 64 20  * Opcode: Rowid 
2b6c0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
2b6d0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
2b6e0 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65  owid.**.** Store
2b6f0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20   in register P2 
2b700 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68  an integer which
2b710 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20 74   is the key of t
2b720 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74  he table entry t
2b730 68 61 74 0a 2a 2a 20 50 31 20 69 73 20 63 75 72  hat.** P1 is cur
2b740 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e  rently point to.
2b750 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62 65  .**.** P1 can be
2b760 20 65 69 74 68 65 72 20 61 6e 20 6f 72 64 69 6e   either an ordin
2b770 61 72 79 20 74 61 62 6c 65 20 6f 72 20 61 20 76  ary table or a v
2b780 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54  irtual table.  T
2b790 68 65 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20  here used to.** 
2b7a0 62 65 20 61 20 73 65 70 61 72 61 74 65 20 4f 50  be a separate OP
2b7b0 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64 65 20 66  _VRowid opcode f
2b7c0 6f 72 20 75 73 65 20 77 69 74 68 20 76 69 72 74  or use with virt
2b7d0 75 61 6c 20 74 61 62 6c 65 73 2c 20 62 75 74 20  ual tables, but 
2b7e0 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f  this.** one opco
2b7f0 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f 72  de now works for
2b800 20 62 6f 74 68 20 74 61 62 6c 65 20 74 79 70 65   both table type
2b810 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  s..*/.case OP_Ro
2b820 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20  wid: {          
2b830 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
2b840 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
2b850 70 43 3b 0a 20 20 69 36 34 20 76 3b 0a 20 20 73  pC;.  i64 v;.  s
2b860 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
2b870 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  ab;.  const sqli
2b880 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
2b890 75 6c 65 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 6f  ule;..  pOut = o
2b8a0 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
2b8b0 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28   pOp);.  assert(
2b8c0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
2b8d0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
2b8e0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
2b8f0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
2b900 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
2b910 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
2b920 65 43 75 72 54 79 70 65 21 3d 43 55 52 54 59 50  eCurType!=CURTYP
2b930 45 5f 50 53 45 55 44 4f 20 7c 7c 20 70 43 2d 3e  E_PSEUDO || pC->
2b940 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 69 66 28  nullRow );.  if(
2b950 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a   pC->nullRow ){.
2b960 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
2b970 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20  = MEM_Null;.    
2b980 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 20 69  break;.  }else i
2b990 66 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  f( pC->deferredM
2b9a0 6f 76 65 74 6f 20 29 7b 0a 20 20 20 20 76 20 3d  oveto ){.    v =
2b9b0 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65   pC->movetoTarge
2b9c0 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  t;.#ifndef SQLIT
2b9d0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2b9e0 42 4c 45 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  BLE.  }else if( 
2b9f0 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
2ba00 52 54 59 50 45 5f 56 54 41 42 20 29 7b 0a 20 20  RTYPE_VTAB ){.  
2ba10 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63    assert( pC->uc
2ba20 2e 70 56 43 75 72 21 3d 30 20 29 3b 0a 20 20 20  .pVCur!=0 );.   
2ba30 20 70 56 74 61 62 20 3d 20 70 43 2d 3e 75 63 2e   pVtab = pC->uc.
2ba40 70 56 43 75 72 2d 3e 70 56 74 61 62 3b 0a 20 20  pVCur->pVtab;.  
2ba50 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
2ba60 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20  b->pModule;.    
2ba70 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d  assert( pModule-
2ba80 3e 78 52 6f 77 69 64 20 29 3b 0a 20 20 20 20 72  >xRowid );.    r
2ba90 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f  c = pModule->xRo
2baa0 77 69 64 28 70 43 2d 3e 75 63 2e 70 56 43 75 72  wid(pC->uc.pVCur
2bab0 2c 20 26 76 29 3b 0a 20 20 20 20 73 71 6c 69 74  , &v);.    sqlit
2bac0 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
2bad0 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20  sg(p, pVtab);.  
2bae0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
2baf0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2bb00 6f 72 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  or;.#endif /* SQ
2bb10 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2bb20 4c 54 41 42 4c 45 20 2a 2f 0a 20 20 7d 65 6c 73  LTABLE */.  }els
2bb30 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
2bb40 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
2bb50 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
2bb60 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63    assert( pC->uc
2bb70 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  .pCursor!=0 );. 
2bb80 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
2bb90 64 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65  dbeCursorRestore
2bba0 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63  (pC);.    if( rc
2bbb0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
2bbc0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
2bbd0 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  if( pC->nullRow 
2bbe0 29 7b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 66  ){.      pOut->f
2bbf0 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
2bc00 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
2bc10 20 20 7d 0a 20 20 20 20 76 20 3d 20 73 71 6c 69    }.    v = sqli
2bc20 74 65 33 42 74 72 65 65 49 6e 74 65 67 65 72 4b  te3BtreeIntegerK
2bc30 65 79 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  ey(pC->uc.pCurso
2bc40 72 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  r);.  }.  pOut->
2bc50 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b  u.i = v;.  break
2bc60 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2bc70 4e 75 6c 6c 52 6f 77 20 50 31 20 2a 20 2a 20 2a  NullRow P1 * * *
2bc80 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68   *.**.** Move th
2bc90 65 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61  e cursor P1 to a
2bca0 20 6e 75 6c 6c 20 72 6f 77 2e 20 20 41 6e 79 20   null row.  Any 
2bcb0 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 65 72 61 74  OP_Column operat
2bcc0 69 6f 6e 73 0a 2a 2a 20 74 68 61 74 20 6f 63 63  ions.** that occ
2bcd0 75 72 20 77 68 69 6c 65 20 74 68 65 20 63 75 72  ur while the cur
2bce0 73 6f 72 20 69 73 20 6f 6e 20 74 68 65 20 6e 75  sor is on the nu
2bcf0 6c 6c 20 72 6f 77 20 77 69 6c 6c 20 61 6c 77 61  ll row will alwa
2bd00 79 73 0a 2a 2a 20 77 72 69 74 65 20 61 20 4e 55  ys.** write a NU
2bd10 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  LL..*/.case OP_N
2bd20 75 6c 6c 52 6f 77 3a 20 7b 0a 20 20 56 64 62 65  ullRow: {.  Vdbe
2bd30 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61  Cursor *pC;..  a
2bd40 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
2bd50 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
2bd60 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
2bd70 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
2bd80 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2bd90 43 21 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 6e 75  C!=0 );.  pC->nu
2bda0 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 2d  llRow = 1;.  pC-
2bdb0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
2bdc0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66  ACHE_STALE;.  if
2bdd0 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
2bde0 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 7b  CURTYPE_BTREE ){
2bdf0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
2be00 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29  >uc.pCursor!=0 )
2be10 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72  ;.    sqlite3Btr
2be20 65 65 43 6c 65 61 72 43 75 72 73 6f 72 28 70 43  eeClearCursor(pC
2be30 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20  ->uc.pCursor);. 
2be40 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45   }.#ifdef SQLITE
2be50 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70 43 2d  _DEBUG.  if( pC-
2be60 3e 73 65 65 6b 4f 70 3d 3d 30 20 29 20 70 43 2d  >seekOp==0 ) pC-
2be70 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 4e 75 6c  >seekOp = OP_Nul
2be80 6c 52 6f 77 3b 0a 23 65 6e 64 69 66 0a 20 20 62  lRow;.#endif.  b
2be90 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2bea0 64 65 3a 20 53 65 65 6b 45 6e 64 20 50 31 20 2a  de: SeekEnd P1 *
2beb0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 6f 73   * * *.**.** Pos
2bec0 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20  ition cursor P1 
2bed0 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
2bee0 65 20 62 74 72 65 65 20 66 6f 72 20 74 68 65 20  e btree for the 
2bef0 70 75 72 70 6f 73 65 20 6f 66 0a 2a 2a 20 61 70  purpose of.** ap
2bf00 70 65 6e 64 69 6e 67 20 61 20 6e 65 77 20 65 6e  pending a new en
2bf10 74 72 79 20 6f 6e 74 6f 20 74 68 65 20 62 74 72  try onto the btr
2bf20 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20  ee..**.** It is 
2bf30 61 73 73 75 6d 65 64 20 74 68 61 74 20 74 68 65  assumed that the
2bf40 20 63 75 72 73 6f 72 20 69 73 20 75 73 65 64 20   cursor is used 
2bf50 6f 6e 6c 79 20 66 6f 72 20 61 70 70 65 6e 64 69  only for appendi
2bf60 6e 67 20 61 6e 64 20 73 6f 0a 2a 2a 20 69 66 20  ng and so.** if 
2bf70 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 76 61  the cursor is va
2bf80 6c 69 64 2c 20 74 68 65 6e 20 74 68 65 20 63 75  lid, then the cu
2bf90 72 73 6f 72 20 6d 75 73 74 20 61 6c 72 65 61 64  rsor must alread
2bfa0 79 20 62 65 20 70 6f 69 6e 74 69 6e 67 0a 2a 2a  y be pointing.**
2bfb0 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
2bfc0 68 65 20 62 74 72 65 65 20 61 6e 64 20 73 6f 20  he btree and so 
2bfd0 6e 6f 20 63 68 61 6e 67 65 73 20 61 72 65 20 6d  no changes are m
2bfe0 61 64 65 20 74 6f 0a 2a 2a 20 74 68 65 20 63 75  ade to.** the cu
2bff0 72 73 6f 72 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  rsor..*/./* Opco
2c000 64 65 3a 20 4c 61 73 74 20 50 31 20 50 32 20 2a  de: Last P1 P2 *
2c010 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e   * *.**.** The n
2c020 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52  ext use of the R
2c030 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f  owid or Column o
2c040 72 20 50 72 65 76 20 69 6e 73 74 72 75 63 74 69  r Prev instructi
2c050 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69  on for P1 .** wi
2c060 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20  ll refer to the 
2c070 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68  last entry in th
2c080 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
2c090 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66   or index..** If
2c0a0 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
2c0b0 64 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64  dex is empty and
2c0c0 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70   P2>0, then jump
2c0d0 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
2c0e0 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  P2..** If P2 is 
2c0f0 30 20 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c  0 or if the tabl
2c100 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f  e or index is no
2c110 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68  t empty, fall th
2c120 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
2c130 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
2c140 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ction..**.** Thi
2c150 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20  s opcode leaves 
2c160 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69  the cursor confi
2c170 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e  gured to move in
2c180 20 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c 0a   reverse order,.
2c190 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20  ** from the end 
2c1a0 74 6f 77 61 72 64 20 74 68 65 20 62 65 67 69 6e  toward the begin
2c1b0 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72 20  ning.  In other 
2c1c0 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f  words, the curso
2c1d0 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72  r is.** configur
2c1e0 65 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c 20  ed to use Prev, 
2c1f0 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2f 0a 63 61 73  not Next..*/.cas
2c200 65 20 4f 50 5f 53 65 65 6b 45 6e 64 3a 0a 63 61  e OP_SeekEnd:.ca
2c210 73 65 20 4f 50 5f 4c 61 73 74 3a 20 7b 20 20 20  se OP_Last: {   
2c220 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
2c230 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
2c240 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
2c250 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
2c260 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2c270 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
2c280 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
2c290 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
2c2a0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2c2b0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
2c2c0 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
2c2d0 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
2c2e0 45 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  E );.  pCrsr = p
2c2f0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20  C->uc.pCursor;. 
2c300 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 73 73 65   res = 0;.  asse
2c310 72 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a  rt( pCrsr!=0 );.
2c320 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
2c330 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70  BUG.  pC->seekOp
2c340 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a   = pOp->opcode;.
2c350 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70 4f 70  #endif.  if( pOp
2c360 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65  ->opcode==OP_See
2c370 6b 45 6e 64 20 29 7b 0a 20 20 20 20 61 73 73 65  kEnd ){.    asse
2c380 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29  rt( pOp->p2==0 )
2c390 3b 0a 20 20 20 20 70 43 2d 3e 73 65 65 6b 52 65  ;.    pC->seekRe
2c3a0 73 75 6c 74 20 3d 20 2d 31 3b 0a 20 20 20 20 69  sult = -1;.    i
2c3b0 66 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  f( sqlite3BtreeC
2c3c0 75 72 73 6f 72 49 73 56 61 6c 69 64 4e 4e 28 70  ursorIsValidNN(p
2c3d0 43 72 73 72 29 20 29 7b 0a 20 20 20 20 20 20 62  Crsr) ){.      b
2c3e0 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  reak;.    }.  }.
2c3f0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
2c400 72 65 65 4c 61 73 74 28 70 43 72 73 72 2c 20 26  reeLast(pCrsr, &
2c410 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c  res);.  pC->null
2c420 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20  Row = (u8)res;. 
2c430 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
2c440 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63  eto = 0;.  pC->c
2c450 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
2c460 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20  HE_STALE;.  if( 
2c470 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
2c480 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
2c490 69 66 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 7b  if( pOp->p2>0 ){
2c4a0 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
2c4b0 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a  aken(res!=0,2);.
2c4c0 20 20 20 20 69 66 28 20 72 65 73 20 29 20 67 6f      if( res ) go
2c4d0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
2c4e0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
2c4f0 2a 20 4f 70 63 6f 64 65 3a 20 49 66 53 6d 61 6c  * Opcode: IfSmal
2c500 6c 65 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ler P1 P2 P3 * *
2c510 0a 2a 2a 0a 2a 2a 20 45 73 74 69 6d 61 74 65 20  .**.** Estimate 
2c520 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
2c530 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ws in the table 
2c540 50 31 2e 20 20 4a 75 6d 70 20 74 6f 20 50 32 20  P1.  Jump to P2 
2c550 69 66 20 74 68 61 74 0a 2a 2a 20 65 73 74 69 6d  if that.** estim
2c560 61 74 65 20 69 73 20 6c 65 73 73 20 74 68 61 6e  ate is less than
2c570 20 61 70 70 72 6f 78 69 6d 61 74 65 6c 79 20 32   approximately 2
2c580 2a 2a 28 30 2e 31 2a 50 33 29 2e 0a 2a 2f 0a 63  **(0.1*P3)..*/.c
2c590 61 73 65 20 4f 50 5f 49 66 53 6d 61 6c 6c 65 72  ase OP_IfSmaller
2c5a0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
2c5b0 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  mp */.  VdbeCurs
2c5c0 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
2c5d0 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
2c5e0 20 72 65 73 3b 0a 20 20 69 36 34 20 73 7a 3b 0a   res;.  i64 sz;.
2c5f0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2c600 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
2c610 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
2c620 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
2c630 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2c640 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43  t( pC!=0 );.  pC
2c650 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75  rsr = pC->uc.pCu
2c660 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20  rsor;.  assert( 
2c670 70 43 72 73 72 20 29 3b 0a 20 20 72 63 20 3d 20  pCrsr );.  rc = 
2c680 73 71 6c 69 74 65 33 42 74 72 65 65 46 69 72 73  sqlite3BtreeFirs
2c690 74 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a  t(pCrsr, &res);.
2c6a0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
2c6b0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2c6c0 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 3d 3d 30  or;.  if( res==0
2c6d0 20 29 7b 0a 20 20 20 20 73 7a 20 3d 20 73 71 6c   ){.    sz = sql
2c6e0 69 74 65 33 42 74 72 65 65 52 6f 77 43 6f 75 6e  ite3BtreeRowCoun
2c6f0 74 45 73 74 28 70 43 72 73 72 29 3b 0a 20 20 20  tEst(pCrsr);.   
2c700 20 69 66 28 20 41 4c 57 41 59 53 28 73 7a 3e 3d   if( ALWAYS(sz>=
2c710 30 29 20 26 26 20 73 71 6c 69 74 65 33 4c 6f 67  0) && sqlite3Log
2c720 45 73 74 28 28 75 36 34 29 73 7a 29 3c 70 4f 70  Est((u64)sz)<pOp
2c730 2d 3e 70 33 20 29 20 72 65 73 20 3d 20 31 3b 0a  ->p3 ) res = 1;.
2c740 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68    }.  VdbeBranch
2c750 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b  Taken(res!=0,2);
2c760 0a 20 20 69 66 28 20 72 65 73 20 29 20 67 6f 74  .  if( res ) got
2c770 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
2c780 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
2c790 63 6f 64 65 3a 20 53 6f 72 74 65 72 53 6f 72 74  code: SorterSort
2c7a0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
2c7b0 2a 2a 20 41 66 74 65 72 20 61 6c 6c 20 72 65 63  ** After all rec
2c7c0 6f 72 64 73 20 68 61 76 65 20 62 65 65 6e 20 69  ords have been i
2c7d0 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65  nserted into the
2c7e0 20 53 6f 72 74 65 72 20 6f 62 6a 65 63 74 0a 2a   Sorter object.*
2c7f0 2a 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  * identified by 
2c800 50 31 2c 20 69 6e 76 6f 6b 65 20 74 68 69 73 20  P1, invoke this 
2c810 6f 70 63 6f 64 65 20 74 6f 20 61 63 74 75 61 6c  opcode to actual
2c820 6c 79 20 64 6f 20 74 68 65 20 73 6f 72 74 69 6e  ly do the sortin
2c830 67 2e 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32  g..** Jump to P2
2c840 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   if there are no
2c850 20 72 65 63 6f 72 64 73 20 74 6f 20 62 65 20 73   records to be s
2c860 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  orted..**.** Thi
2c870 73 20 6f 70 63 6f 64 65 20 69 73 20 61 6e 20 61  s opcode is an a
2c880 6c 69 61 73 20 66 6f 72 20 4f 50 5f 53 6f 72 74  lias for OP_Sort
2c890 20 61 6e 64 20 4f 50 5f 52 65 77 69 6e 64 20 74   and OP_Rewind t
2c8a0 68 61 74 20 69 73 20 75 73 65 64 0a 2a 2a 20 66  hat is used.** f
2c8b0 6f 72 20 53 6f 72 74 65 72 20 6f 62 6a 65 63 74  or Sorter object
2c8c0 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  s..*/./* Opcode:
2c8d0 20 53 6f 72 74 20 50 31 20 50 32 20 2a 20 2a 20   Sort P1 P2 * * 
2c8e0 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  *.**.** This opc
2c8f0 6f 64 65 20 64 6f 65 73 20 65 78 61 63 74 6c 79  ode does exactly
2c900 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67 20   the same thing 
2c910 61 73 20 4f 50 5f 52 65 77 69 6e 64 20 65 78 63  as OP_Rewind exc
2c920 65 70 74 20 74 68 61 74 0a 2a 2a 20 69 74 20 69  ept that.** it i
2c930 6e 63 72 65 6d 65 6e 74 73 20 61 6e 20 75 6e 64  ncrements an und
2c940 6f 63 75 6d 65 6e 74 65 64 20 67 6c 6f 62 61 6c  ocumented global
2c950 20 76 61 72 69 61 62 6c 65 20 75 73 65 64 20 66   variable used f
2c960 6f 72 20 74 65 73 74 69 6e 67 2e 0a 2a 2a 0a 2a  or testing..**.*
2c970 2a 20 53 6f 72 74 69 6e 67 20 69 73 20 61 63 63  * Sorting is acc
2c980 6f 6d 70 6c 69 73 68 65 64 20 62 79 20 77 72 69  omplished by wri
2c990 74 69 6e 67 20 72 65 63 6f 72 64 73 20 69 6e 74  ting records int
2c9a0 6f 20 61 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  o a sorting inde
2c9b0 78 2c 0a 2a 2a 20 74 68 65 6e 20 72 65 77 69 6e  x,.** then rewin
2c9c0 64 69 6e 67 20 74 68 61 74 20 69 6e 64 65 78 20  ding that index 
2c9d0 61 6e 64 20 70 6c 61 79 69 6e 67 20 69 74 20 62  and playing it b
2c9e0 61 63 6b 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69  ack from beginni
2c9f0 6e 67 20 74 6f 0a 2a 2a 20 65 6e 64 2e 20 20 57  ng to.** end.  W
2ca00 65 20 75 73 65 20 74 68 65 20 4f 50 5f 53 6f 72  e use the OP_Sor
2ca10 74 20 6f 70 63 6f 64 65 20 69 6e 73 74 65 61 64  t opcode instead
2ca20 20 6f 66 20 4f 50 5f 52 65 77 69 6e 64 20 74 6f   of OP_Rewind to
2ca30 20 64 6f 20 74 68 65 0a 2a 2a 20 72 65 77 69 6e   do the.** rewin
2ca40 64 69 6e 67 20 73 6f 20 74 68 61 74 20 74 68 65  ding so that the
2ca50 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
2ca60 20 77 69 6c 6c 20 62 65 20 69 6e 63 72 65 6d 65   will be increme
2ca70 6e 74 65 64 20 61 6e 64 0a 2a 2a 20 72 65 67 72  nted and.** regr
2ca80 65 73 73 69 6f 6e 20 74 65 73 74 73 20 63 61 6e  ession tests can
2ca90 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68   determine wheth
2caa0 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 6f 70  er or not the op
2cab0 74 69 6d 69 7a 65 72 20 69 73 0a 2a 2a 20 63 6f  timizer is.** co
2cac0 72 72 65 63 74 6c 79 20 6f 70 74 69 6d 69 7a 69  rrectly optimizi
2cad0 6e 67 20 6f 75 74 20 73 6f 72 74 73 2e 0a 2a 2f  ng out sorts..*/
2cae0 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 53  .case OP_SorterS
2caf0 6f 72 74 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20  ort:    /* jump 
2cb00 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 3a  */.case OP_Sort:
2cb10 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
2cb20 70 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  p */.#ifdef SQLI
2cb30 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74 65  TE_TEST.  sqlite
2cb40 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 2b 2b 3b 0a  3_sort_count++;.
2cb50 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68    sqlite3_search
2cb60 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65 6e 64 69 66  _count--;.#endif
2cb70 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53  .  p->aCounter[S
2cb80 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53  QLITE_STMTSTATUS
2cb90 5f 53 4f 52 54 5d 2b 2b 3b 0a 20 20 2f 2a 20 46  _SORT]++;.  /* F
2cba0 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f  all through into
2cbb0 20 4f 50 5f 52 65 77 69 6e 64 20 2a 2f 0a 7d 0a   OP_Rewind */.}.
2cbc0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 77 69 6e  /* Opcode: Rewin
2cbd0 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  d P1 P2 * * *.**
2cbe0 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65  .** The next use
2cbf0 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72   of the Rowid or
2cc00 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20   Column or Next 
2cc10 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20  instruction for 
2cc20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65  P1 .** will refe
2cc30 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65  r to the first e
2cc40 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61 74 61  ntry in the data
2cc50 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e  base table or in
2cc60 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74  dex..** If the t
2cc70 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73  able or index is
2cc80 20 65 6d 70 74 79 2c 20 6a 75 6d 70 20 69 6d 6d   empty, jump imm
2cc90 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a  ediately to P2..
2cca0 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65 20  ** If the table 
2ccb0 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20  or index is not 
2ccc0 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f  empty, fall thro
2ccd0 75 67 68 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  ugh to the follo
2cce0 77 69 6e 67 20 0a 2a 2a 20 69 6e 73 74 72 75 63  wing .** instruc
2ccf0 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  tion..**.** This
2cd00 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74   opcode leaves t
2cd10 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67  he cursor config
2cd20 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20  ured to move in 
2cd30 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a  forward order,.*
2cd40 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  * from the begin
2cd50 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65 20  ning toward the 
2cd60 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  end.  In other w
2cd70 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72  ords, the cursor
2cd80 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65   is.** configure
2cd90 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e  d to use Next, n
2cda0 6f 74 20 50 72 65 76 2e 0a 2a 2f 0a 63 61 73 65  ot Prev..*/.case
2cdb0 20 4f 50 5f 52 65 77 69 6e 64 3a 20 7b 20 20 20   OP_Rewind: {   
2cdc0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
2cdd0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
2cde0 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
2cdf0 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
2ce00 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2ce10 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
2ce20 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
2ce30 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
2ce40 3d 3d 30 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  ==0 );.  pC = p-
2ce50 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
2ce60 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
2ce70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73   );.  assert( is
2ce80 53 6f 72 74 65 72 28 70 43 29 3d 3d 28 70 4f 70  Sorter(pC)==(pOp
2ce90 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72  ->opcode==OP_Sor
2cea0 74 65 72 53 6f 72 74 29 20 29 3b 0a 20 20 72 65  terSort) );.  re
2ceb0 73 20 3d 20 31 3b 0a 23 69 66 64 65 66 20 53 51  s = 1;.#ifdef SQ
2cec0 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d  LITE_DEBUG.  pC-
2ced0 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 52 65 77  >seekOp = OP_Rew
2cee0 69 6e 64 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66  ind;.#endif.  if
2cef0 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29  ( isSorter(pC) )
2cf00 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
2cf10 65 33 56 64 62 65 53 6f 72 74 65 72 52 65 77 69  e3VdbeSorterRewi
2cf20 6e 64 28 70 43 2c 20 26 72 65 73 29 3b 0a 20 20  nd(pC, &res);.  
2cf30 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
2cf40 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
2cf50 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
2cf60 3b 0a 20 20 20 20 70 43 72 73 72 20 3d 20 70 43  ;.    pCrsr = pC
2cf70 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20  ->uc.pCursor;.  
2cf80 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 20    assert( pCrsr 
2cf90 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
2cfa0 74 65 33 42 74 72 65 65 46 69 72 73 74 28 70 43  te3BtreeFirst(pC
2cfb0 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  rsr, &res);.    
2cfc0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
2cfd0 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e  to = 0;.    pC->
2cfe0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
2cff0 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20  CHE_STALE;.  }. 
2d000 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
2d010 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
2d020 72 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  r;.  pC->nullRow
2d030 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 61 73   = (u8)res;.  as
2d040 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
2d050 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f  && pOp->p2<p->nO
2d060 70 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  p );.  VdbeBranc
2d070 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29  hTaken(res!=0,2)
2d080 3b 0a 20 20 69 66 28 20 72 65 73 20 29 20 67 6f  ;.  if( res ) go
2d090 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
2d0a0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2d0b0 63 6f 64 65 3a 20 4e 65 78 74 20 50 31 20 50 32  code: Next P1 P2
2d0c0 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
2d0d0 41 64 76 61 6e 63 65 20 63 75 72 73 6f 72 20 50  Advance cursor P
2d0e0 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69  1 so that it poi
2d0f0 6e 74 73 20 74 6f 20 74 68 65 20 6e 65 78 74 20  nts to the next 
2d100 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e  key/data pair in
2d110 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72   its.** table or
2d120 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72   index.  If ther
2d130 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20 6b 65  e are no more ke
2d140 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74 68  y/value pairs th
2d150 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a  en fall through.
2d160 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77  ** to the follow
2d170 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ing instruction.
2d180 20 20 42 75 74 20 69 66 20 74 68 65 20 63 75 72    But if the cur
2d190 73 6f 72 20 61 64 76 61 6e 63 65 20 77 61 73 20  sor advance was 
2d1a0 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a  successful,.** j
2d1b0 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
2d1c0 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  to P2..**.** The
2d1d0 20 4e 65 78 74 20 6f 70 63 6f 64 65 20 69 73 20   Next opcode is 
2d1e0 6f 6e 6c 79 20 76 61 6c 69 64 20 66 6f 6c 6c 6f  only valid follo
2d1f0 77 69 6e 67 20 61 6e 20 53 65 65 6b 47 54 2c 20  wing an SeekGT, 
2d200 53 65 65 6b 47 45 2c 20 6f 72 0a 2a 2a 20 4f 50  SeekGE, or.** OP
2d210 5f 52 65 77 69 6e 64 20 6f 70 63 6f 64 65 20 75  _Rewind opcode u
2d220 73 65 64 20 74 6f 20 70 6f 73 69 74 69 6f 6e 20  sed to position 
2d230 74 68 65 20 63 75 72 73 6f 72 2e 20 20 4e 65 78  the cursor.  Nex
2d240 74 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64  t is not allowed
2d250 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77 20 53 65  .** to follow Se
2d260 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 6f 72  ekLT, SeekLE, or
2d270 20 4f 50 5f 4c 61 73 74 2e 0a 2a 2a 0a 2a 2a 20   OP_Last..**.** 
2d280 54 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75  The P1 cursor mu
2d290 73 74 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c  st be for a real
2d2a0 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73   table, not a ps
2d2b0 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 50 31 20  eudo-table.  P1 
2d2c0 6d 75 73 74 20 68 61 76 65 0a 2a 2a 20 62 65 65  must have.** bee
2d2d0 6e 20 6f 70 65 6e 65 64 20 70 72 69 6f 72 20 74  n opened prior t
2d2e0 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20 6f 72  o this opcode or
2d2f0 20 74 68 65 20 70 72 6f 67 72 61 6d 20 77 69 6c   the program wil
2d300 6c 20 73 65 67 66 61 75 6c 74 2e 0a 2a 2a 0a 2a  l segfault..**.*
2d310 2a 20 54 68 65 20 50 33 20 76 61 6c 75 65 20 69  * The P3 value i
2d320 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20  s a hint to the 
2d330 62 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61  btree implementa
2d340 74 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20  tion. If P3==1, 
2d350 74 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31  that.** means P1
2d360 20 69 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   is an SQL index
2d370 20 61 6e 64 20 74 68 61 74 20 74 68 69 73 20 69   and that this i
2d380 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64  nstruction could
2d390 20 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d   have been.** om
2d3a0 69 74 74 65 64 20 69 66 20 74 68 61 74 20 69 6e  itted if that in
2d3b0 64 65 78 20 68 61 64 20 62 65 65 6e 20 75 6e 69  dex had been uni
2d3c0 71 75 65 2e 20 20 50 33 20 69 73 20 75 73 75 61  que.  P3 is usua
2d3d0 6c 6c 79 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a  lly 0.  P3 is.**
2d3e0 20 61 6c 77 61 79 73 20 65 69 74 68 65 72 20 30   always either 0
2d3f0 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20   or 1..**.** P4 
2d400 69 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70  is always of typ
2d410 65 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68  e P4_ADVANCE. Th
2d420 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74  e function point
2d430 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20  er points to.** 
2d440 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74  sqlite3BtreeNext
2d450 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  ()..**.** If P5 
2d460 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20  is positive and 
2d470 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
2d480 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f  n, then event co
2d490 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20  unter.** number 
2d4a0 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70  P5-1 in the prep
2d4b0 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69  ared statement i
2d4c0 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a  s incremented..*
2d4d0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 50  *.** See also: P
2d4e0 72 65 76 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  rev.*/./* Opcode
2d4f0 3a 20 50 72 65 76 20 50 31 20 50 32 20 50 33 20  : Prev P1 P2 P3 
2d500 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 61 63 6b  P4 P5.**.** Back
2d510 20 75 70 20 63 75 72 73 6f 72 20 50 31 20 73 6f   up cursor P1 so
2d520 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20   that it points 
2d530 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  to the previous 
2d540 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e  key/data pair in
2d550 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72   its.** table or
2d560 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72   index.  If ther
2d570 65 20 69 73 20 6e 6f 20 70 72 65 76 69 6f 75 73  e is no previous
2d580 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73   key/value pairs
2d590 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75   then fall throu
2d5a0 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c  gh.** to the fol
2d5b0 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69  lowing instructi
2d5c0 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65 20  on.  But if the 
2d5d0 63 75 72 73 6f 72 20 62 61 63 6b 75 70 20 77 61  cursor backup wa
2d5e0 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a  s successful,.**
2d5f0 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
2d600 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 0a 2a  y to P2..**.**.*
2d610 2a 20 54 68 65 20 50 72 65 76 20 6f 70 63 6f 64  * The Prev opcod
2d620 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20  e is only valid 
2d630 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20 53 65 65  following an See
2d640 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 6f 72 0a  kLT, SeekLE, or.
2d650 2a 2a 20 4f 50 5f 4c 61 73 74 20 6f 70 63 6f 64  ** OP_Last opcod
2d660 65 20 75 73 65 64 20 74 6f 20 70 6f 73 69 74 69  e used to positi
2d670 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20  on the cursor.  
2d680 50 72 65 76 20 69 73 20 6e 6f 74 20 61 6c 6c 6f  Prev is not allo
2d690 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77  wed.** to follow
2d6a0 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c   SeekGT, SeekGE,
2d6b0 20 6f 72 20 4f 50 5f 52 65 77 69 6e 64 2e 0a 2a   or OP_Rewind..*
2d6c0 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73  *.** The P1 curs
2d6d0 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61  or must be for a
2d6e0 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74   real table, not
2d6f0 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
2d700 20 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 6e 6f    If P1 is.** no
2d710 74 20 6f 70 65 6e 20 74 68 65 6e 20 74 68 65 20  t open then the 
2d720 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64 65  behavior is unde
2d730 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  fined..**.** The
2d740 20 50 33 20 76 61 6c 75 65 20 69 73 20 61 20 68   P3 value is a h
2d750 69 6e 74 20 74 6f 20 74 68 65 20 62 74 72 65 65  int to the btree
2d760 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
2d770 20 49 66 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a   If P3==1, that.
2d780 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69 73 20 61  ** means P1 is a
2d790 6e 20 53 51 4c 20 69 6e 64 65 78 20 61 6e 64 20  n SQL index and 
2d7a0 74 68 61 74 20 74 68 69 73 20 69 6e 73 74 72 75  that this instru
2d7b0 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65  ction could have
2d7c0 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64   been.** omitted
2d7d0 20 69 66 20 74 68 61 74 20 69 6e 64 65 78 20 68   if that index h
2d7e0 61 64 20 62 65 65 6e 20 75 6e 69 71 75 65 2e 20  ad been unique. 
2d7f0 20 50 33 20 69 73 20 75 73 75 61 6c 6c 79 20 30   P3 is usually 0
2d800 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61  .  P3 is.** alwa
2d810 79 73 20 65 69 74 68 65 72 20 30 20 6f 72 20 31  ys either 0 or 1
2d820 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c  ..**.** P4 is al
2d830 77 61 79 73 20 6f 66 20 74 79 70 65 20 50 34 5f  ways of type P4_
2d840 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75 6e  ADVANCE. The fun
2d850 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f  ction pointer po
2d860 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74  ints to.** sqlit
2d870 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 28  e3BtreePrevious(
2d880 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  )..**.** If P5 i
2d890 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20 74  s positive and t
2d8a0 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
2d8b0 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f 75  , then event cou
2d8c0 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50  nter.** number P
2d8d0 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70 61  5-1 in the prepa
2d8e0 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73  red statement is
2d8f0 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2f   incremented..*/
2d900 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74  ./* Opcode: Sort
2d910 65 72 4e 65 78 74 20 50 31 20 50 32 20 2a 20 2a  erNext P1 P2 * *
2d920 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f   P5.**.** This o
2d930 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73 74  pcode works just
2d940 20 6c 69 6b 65 20 4f 50 5f 4e 65 78 74 20 65 78   like OP_Next ex
2d950 63 65 70 74 20 74 68 61 74 20 50 31 20 6d 75 73  cept that P1 mus
2d960 74 20 62 65 20 61 0a 2a 2a 20 73 6f 72 74 65 72  t be a.** sorter
2d970 20 6f 62 6a 65 63 74 20 66 6f 72 20 77 68 69 63   object for whic
2d980 68 20 74 68 65 20 4f 50 5f 53 6f 72 74 65 72 53  h the OP_SorterS
2d990 6f 72 74 20 6f 70 63 6f 64 65 20 68 61 73 20 62  ort opcode has b
2d9a0 65 65 6e 0a 2a 2a 20 69 6e 76 6f 6b 65 64 2e 20  een.** invoked. 
2d9b0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 61 64 76   This opcode adv
2d9c0 61 6e 63 65 73 20 74 68 65 20 63 75 72 73 6f 72  ances the cursor
2d9d0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 73 6f 72   to the next sor
2d9e0 74 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2c 20 6f  ted.** record, o
2d9f0 72 20 6a 75 6d 70 73 20 74 6f 20 50 32 20 69 66  r jumps to P2 if
2da00 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f   there are no mo
2da10 72 65 20 73 6f 72 74 65 64 20 72 65 63 6f 72 64  re sorted record
2da20 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  s..*/.case OP_So
2da30 72 74 65 72 4e 65 78 74 3a 20 7b 20 20 2f 2a 20  rterNext: {  /* 
2da40 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75  jump */.  VdbeCu
2da50 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 70 43 20  rsor *pC;..  pC 
2da60 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
2da70 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69  p1];.  assert( i
2da80 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20  sSorter(pC) );. 
2da90 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
2daa0 65 53 6f 72 74 65 72 4e 65 78 74 28 64 62 2c 20  eSorterNext(db, 
2dab0 70 43 29 3b 0a 20 20 67 6f 74 6f 20 6e 65 78 74  pC);.  goto next
2dac0 5f 74 61 69 6c 3b 0a 63 61 73 65 20 4f 50 5f 50  _tail;.case OP_P
2dad0 72 65 76 3a 20 20 20 20 20 20 20 20 20 20 2f 2a  rev:          /*
2dae0 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50   jump */.case OP
2daf0 5f 4e 65 78 74 3a 20 20 20 20 20 20 20 20 20 20  _Next:          
2db00 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73  /* jump */.  ass
2db10 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
2db20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
2db30 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
2db40 74 28 20 70 4f 70 2d 3e 70 35 3c 41 72 72 61 79  t( pOp->p5<Array
2db50 53 69 7a 65 28 70 2d 3e 61 43 6f 75 6e 74 65 72  Size(p->aCounter
2db60 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  ) );.  pC = p->a
2db70 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
2db80 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
2db90 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
2dba0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
2dbb0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
2dbc0 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
2dbd0 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
2dbe0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
2dbf0 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20  ode!=OP_Next || 
2dc00 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65  pOp->p4.xAdvance
2dc10 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65  ==sqlite3BtreeNe
2dc20 78 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  xt );.  assert( 
2dc30 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
2dc40 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  Prev || pOp->p4.
2dc50 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65  xAdvance==sqlite
2dc60 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 20 29  3BtreePrevious )
2dc70 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4e 65 78 74  ;..  /* The Next
2dc80 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20   opcode is only 
2dc90 75 73 65 64 20 61 66 74 65 72 20 53 65 65 6b 47  used after SeekG
2dca0 54 2c 20 53 65 65 6b 47 45 2c 20 52 65 77 69 6e  T, SeekGE, Rewin
2dcb0 64 2c 20 61 6e 64 20 46 6f 75 6e 64 2e 0a 20 20  d, and Found..  
2dcc0 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70 63 6f  ** The Prev opco
2dcd0 64 65 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20  de is only used 
2dce0 61 66 74 65 72 20 53 65 65 6b 4c 54 2c 20 53 65  after SeekLT, Se
2dcf0 65 6b 4c 45 2c 20 61 6e 64 20 4c 61 73 74 2e 20  ekLE, and Last. 
2dd00 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
2dd10 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78  ->opcode!=OP_Nex
2dd20 74 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e  t.       || pC->
2dd30 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47  seekOp==OP_SeekG
2dd40 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d  T || pC->seekOp=
2dd50 3d 4f 50 5f 53 65 65 6b 47 45 0a 20 20 20 20 20  =OP_SeekGE.     
2dd60 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d    || pC->seekOp=
2dd70 3d 4f 50 5f 52 65 77 69 6e 64 20 7c 7c 20 70 43  =OP_Rewind || pC
2dd80 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 46 6f 75  ->seekOp==OP_Fou
2dd90 6e 64 20 0a 20 20 20 20 20 20 20 7c 7c 20 70 43  nd .       || pC
2dda0 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 4e 75 6c  ->seekOp==OP_Nul
2ddb0 6c 52 6f 77 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f  lRow|| pC->seekO
2ddc0 70 3d 3d 4f 50 5f 53 65 65 6b 52 6f 77 69 64 29  p==OP_SeekRowid)
2ddd0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2dde0 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76  >opcode!=OP_Prev
2ddf0 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73  .       || pC->s
2de00 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c 54  eekOp==OP_SeekLT
2de10 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d   || pC->seekOp==
2de20 4f 50 5f 53 65 65 6b 4c 45 0a 20 20 20 20 20 20  OP_SeekLE.      
2de30 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d   || pC->seekOp==
2de40 4f 50 5f 4c 61 73 74 20 0a 20 20 20 20 20 20 20  OP_Last .       
2de50 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f  || pC->seekOp==O
2de60 50 5f 4e 75 6c 6c 52 6f 77 29 3b 0a 0a 20 20 72  P_NullRow);..  r
2de70 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76  c = pOp->p4.xAdv
2de80 61 6e 63 65 28 70 43 2d 3e 75 63 2e 70 43 75 72  ance(pC->uc.pCur
2de90 73 6f 72 2c 20 70 4f 70 2d 3e 70 33 29 3b 0a 6e  sor, pOp->p3);.n
2dea0 65 78 74 5f 74 61 69 6c 3a 0a 20 20 70 43 2d 3e  ext_tail:.  pC->
2deb0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
2dec0 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 56 64 62  CHE_STALE;.  Vdb
2ded0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 63 3d  eBranchTaken(rc=
2dee0 3d 53 51 4c 49 54 45 5f 4f 4b 2c 32 29 3b 0a 20  =SQLITE_OK,2);. 
2def0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
2df00 4f 4b 20 29 7b 0a 20 20 20 20 70 43 2d 3e 6e 75  OK ){.    pC->nu
2df10 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70  llRow = 0;.    p
2df20 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e  ->aCounter[pOp->
2df30 70 35 5d 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51  p5]++;.#ifdef SQ
2df40 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20 73 71  LITE_TEST.    sq
2df50 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75  lite3_search_cou
2df60 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 20  nt++;.#endif.   
2df70 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
2df80 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69  _and_check_for_i
2df90 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d 0a 20 20  nterrupt;.  }.  
2dfa0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 44  if( rc!=SQLITE_D
2dfb0 4f 4e 45 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  ONE ) goto abort
2dfc0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
2dfd0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
2dfe0 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
2dff0 20 31 3b 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b   1;.  goto check
2e000 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a  _for_interrupt;.
2e010 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  }../* Opcode: Id
2e020 78 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33  xInsert P1 P2 P3
2e030 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
2e040 69 73 3a 20 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a  is: key=r[P2].**
2e050 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 32 20  .** Register P2 
2e060 68 6f 6c 64 73 20 61 6e 20 53 51 4c 20 69 6e 64  holds an SQL ind
2e070 65 78 20 6b 65 79 20 6d 61 64 65 20 75 73 69 6e  ex key made usin
2e080 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52 65 63  g the.** MakeRec
2e090 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 73  ord instructions
2e0a0 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  .  This opcode w
2e0b0 72 69 74 65 73 20 74 68 61 74 20 6b 65 79 0a 2a  rites that key.*
2e0c0 2a 20 69 6e 74 6f 20 74 68 65 20 69 6e 64 65 78  * into the index
2e0d0 20 50 31 2e 20 20 44 61 74 61 20 66 6f 72 20 74   P1.  Data for t
2e0e0 68 65 20 65 6e 74 72 79 20 69 73 20 6e 69 6c 2e  he entry is nil.
2e0f0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20  .**.** If P4 is 
2e100 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 69  not zero, then i
2e110 74 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20  t is the number 
2e120 6f 66 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  of values in the
2e130 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 6b 65 79   unpacked.** key
2e140 20 6f 66 20 72 65 67 28 50 32 29 2e 20 20 49 6e   of reg(P2).  In
2e150 20 74 68 61 74 20 63 61 73 65 2c 20 50 33 20 69   that case, P3 i
2e160 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74  s the index of t
2e170 68 65 20 66 69 72 73 74 20 72 65 67 69 73 74 65  he first registe
2e180 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20 75 6e 70  r.** for the unp
2e190 61 63 6b 65 64 20 6b 65 79 2e 20 20 54 68 65 20  acked key.  The 
2e1a0 61 76 61 69 6c 61 62 69 6c 69 74 79 20 6f 66 20  availability of 
2e1b0 74 68 65 20 75 6e 70 61 63 6b 65 64 20 6b 65 79  the unpacked key
2e1c0 20 63 61 6e 20 73 6f 6d 65 74 69 6d 65 73 0a 2a   can sometimes.*
2e1d0 2a 20 62 65 20 61 6e 20 6f 70 74 69 6d 69 7a 61  * be an optimiza
2e1e0 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  tion..**.** If P
2e1f0 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47  5 has the OPFLAG
2e200 5f 41 50 50 45 4e 44 20 62 69 74 20 73 65 74 2c  _APPEND bit set,
2e210 20 74 68 61 74 20 69 73 20 61 20 68 69 6e 74 20   that is a hint 
2e220 74 6f 20 74 68 65 20 62 2d 74 72 65 65 20 6c 61  to the b-tree la
2e230 79 65 72 0a 2a 2a 20 74 68 61 74 20 74 68 69 73  yer.** that this
2e240 20 69 6e 73 65 72 74 20 69 73 20 6c 69 6b 65 6c   insert is likel
2e250 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e  y to be an appen
2e260 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68  d..**.** If P5 h
2e270 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  as the OPFLAG_NC
2e280 48 41 4e 47 45 20 62 69 74 20 73 65 74 2c 20 74  HANGE bit set, t
2e290 68 65 6e 20 74 68 65 20 63 68 61 6e 67 65 20 63  hen the change c
2e2a0 6f 75 6e 74 65 72 20 69 73 0a 2a 2a 20 69 6e 63  ounter is.** inc
2e2b0 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 69 73  remented by this
2e2c0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49   instruction.  I
2e2d0 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48  f the OPFLAG_NCH
2e2e0 41 4e 47 45 20 62 69 74 20 69 73 20 63 6c 65 61  ANGE bit is clea
2e2f0 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63  r,.** then the c
2e300 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73  hange counter is
2e310 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2a 0a 2a   unchanged..**.*
2e320 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
2e330 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c  USESEEKRESULT fl
2e340 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c  ag of P5 is set,
2e350 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
2e360 69 6f 6e 20 6d 69 67 68 74 0a 2a 2a 20 72 75 6e  ion might.** run
2e370 20 66 61 73 74 65 72 20 62 79 20 61 76 6f 69 64   faster by avoid
2e380 69 6e 67 20 61 6e 20 75 6e 6e 65 63 65 73 73 61  ing an unnecessa
2e390 72 79 20 73 65 65 6b 20 6f 6e 20 63 75 72 73 6f  ry seek on curso
2e3a0 72 20 50 31 2e 20 20 48 6f 77 65 76 65 72 2c 0a  r P1.  However,.
2e3b0 2a 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53  ** the OPFLAG_US
2e3c0 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67  ESEEKRESULT flag
2e3d0 20 6d 75 73 74 20 6f 6e 6c 79 20 62 65 20 73 65   must only be se
2e3e0 74 20 69 66 20 74 68 65 72 65 20 68 61 76 65 20  t if there have 
2e3f0 62 65 65 6e 20 6e 6f 20 70 72 69 6f 72 0a 2a 2a  been no prior.**
2e400 20 73 65 65 6b 73 20 6f 6e 20 74 68 65 20 63 75   seeks on the cu
2e410 72 73 6f 72 20 6f 72 20 69 66 20 74 68 65 20 6d  rsor or if the m
2e420 6f 73 74 20 72 65 63 65 6e 74 20 73 65 65 6b 20  ost recent seek 
2e430 75 73 65 64 20 61 20 6b 65 79 20 65 71 75 69 76  used a key equiv
2e440 61 6c 65 6e 74 0a 2a 2a 20 74 6f 20 50 32 2e 20  alent.** to P2. 
2e450 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
2e460 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72  ruction only wor
2e470 6b 73 20 66 6f 72 20 69 6e 64 69 63 65 73 2e 20  ks for indices. 
2e480 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20   The equivalent 
2e490 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66  instruction.** f
2e4a0 6f 72 20 74 61 62 6c 65 73 20 69 73 20 4f 50 5f  or tables is OP_
2e4b0 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70  Insert..*/./* Op
2e4c0 63 6f 64 65 3a 20 53 6f 72 74 65 72 49 6e 73 65  code: SorterInse
2e4d0 72 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  rt P1 P2 * * *.*
2e4e0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
2e4f0 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69  r[P2].**.** Regi
2e500 73 74 65 72 20 50 32 20 68 6f 6c 64 73 20 61 6e  ster P2 holds an
2e510 20 53 51 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d   SQL index key m
2e520 61 64 65 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  ade using the.**
2e530 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74   MakeRecord inst
2e540 72 75 63 74 69 6f 6e 73 2e 20 20 54 68 69 73 20  ructions.  This 
2e550 6f 70 63 6f 64 65 20 77 72 69 74 65 73 20 74 68  opcode writes th
2e560 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74  at key.** into t
2e570 68 65 20 73 6f 72 74 65 72 20 50 31 2e 20 20 44  he sorter P1.  D
2e580 61 74 61 20 66 6f 72 20 74 68 65 20 65 6e 74 72  ata for the entr
2e590 79 20 69 73 20 6e 69 6c 2e 0a 2a 2f 0a 63 61 73  y is nil..*/.cas
2e5a0 65 20 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72  e OP_SorterInser
2e5b0 74 3a 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20  t:       /* in2 
2e5c0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 49 6e  */.case OP_IdxIn
2e5d0 73 65 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f  sert: {        /
2e5e0 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43  * in2 */.  VdbeC
2e5f0 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 72  ursor *pC;.  Btr
2e600 65 65 50 61 79 6c 6f 61 64 20 78 3b 0a 0a 20 20  eePayload x;..  
2e610 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2e620 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
2e630 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
2e640 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
2e650 3e 70 31 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56  >p1];.  sqlite3V
2e660 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e  dbeIncrWriteCoun
2e670 74 65 72 28 70 2c 20 70 43 29 3b 0a 20 20 61 73  ter(p, pC);.  as
2e680 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
2e690 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65   assert( isSorte
2e6a0 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63  r(pC)==(pOp->opc
2e6b0 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e  ode==OP_SorterIn
2e6c0 73 65 72 74 29 20 29 3b 0a 20 20 70 49 6e 32 20  sert) );.  pIn2 
2e6d0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
2e6e0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 32  ;.  assert( pIn2
2e6f0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c  ->flags & MEM_Bl
2e700 6f 62 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  ob );.  if( pOp-
2e710 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48  >p5 & OPFLAG_NCH
2e720 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67  ANGE ) p->nChang
2e730 65 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 70  e++;.  assert( p
2e740 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
2e750 54 59 50 45 5f 42 54 52 45 45 20 7c 7c 20 70 4f  TYPE_BTREE || pO
2e760 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f  p->opcode==OP_So
2e770 72 74 65 72 49 6e 73 65 72 74 20 29 3b 0a 20 20  rterInsert );.  
2e780 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
2e790 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d  ble==0 );.  rc =
2e7a0 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32   ExpandBlob(pIn2
2e7b0 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
2e7c0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2e7d0 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 70 4f 70  error;.  if( pOp
2e7e0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72  ->opcode==OP_Sor
2e7f0 74 65 72 49 6e 73 65 72 74 20 29 7b 0a 20 20 20  terInsert ){.   
2e800 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
2e810 65 53 6f 72 74 65 72 57 72 69 74 65 28 70 43 2c  eSorterWrite(pC,
2e820 20 70 49 6e 32 29 3b 0a 20 20 7d 65 6c 73 65 7b   pIn2);.  }else{
2e830 0a 20 20 20 20 78 2e 6e 4b 65 79 20 3d 20 70 49  .    x.nKey = pI
2e840 6e 32 2d 3e 6e 3b 0a 20 20 20 20 78 2e 70 4b 65  n2->n;.    x.pKe
2e850 79 20 3d 20 70 49 6e 32 2d 3e 7a 3b 0a 20 20 20  y = pIn2->z;.   
2e860 20 78 2e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 2b   x.aMem = aMem +
2e870 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 78 2e   pOp->p3;.    x.
2e880 6e 4d 65 6d 20 3d 20 28 75 31 36 29 70 4f 70 2d  nMem = (u16)pOp-
2e890 3e 70 34 2e 69 3b 0a 20 20 20 20 72 63 20 3d 20  >p4.i;.    rc = 
2e8a0 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65  sqlite3BtreeInse
2e8b0 72 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  rt(pC->uc.pCurso
2e8c0 72 2c 20 26 78 2c 0a 20 20 20 20 20 20 20 20 20  r, &x,.         
2e8d0 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c  (pOp->p5 & (OPFL
2e8e0 41 47 5f 41 50 50 45 4e 44 7c 4f 50 46 4c 41 47  AG_APPEND|OPFLAG
2e8f0 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 29 29 2c  _SAVEPOSITION)),
2e900 20 0a 20 20 20 20 20 20 20 20 28 28 70 4f 70 2d   .        ((pOp-
2e910 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45  >p5 & OPFLAG_USE
2e920 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43  SEEKRESULT) ? pC
2e930 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30  ->seekResult : 0
2e940 29 0a 20 20 20 20 20 20 20 20 29 3b 0a 20 20 20  ).        );.   
2e950 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
2e960 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
2e970 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  ;.    pC->cacheS
2e980 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
2e990 41 4c 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72  ALE;.  }.  if( r
2e9a0 63 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75  c) goto abort_du
2e9b0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
2e9c0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2e9d0 65 3a 20 49 64 78 44 65 6c 65 74 65 20 50 31 20  e: IdxDelete P1 
2e9e0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
2e9f0 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32 40  opsis: key=r[P2@
2ea00 50 33 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  P3].**.** The co
2ea10 6e 74 65 6e 74 20 6f 66 20 50 33 20 72 65 67 69  ntent of P3 regi
2ea20 73 74 65 72 73 20 73 74 61 72 74 69 6e 67 20 61  sters starting a
2ea30 74 20 72 65 67 69 73 74 65 72 20 50 32 20 66 6f  t register P2 fo
2ea40 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70 61 63 6b 65  rm.** an unpacke
2ea50 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 54 68 69  d index key. Thi
2ea60 73 20 6f 70 63 6f 64 65 20 72 65 6d 6f 76 65 73  s opcode removes
2ea70 20 74 68 61 74 20 65 6e 74 72 79 20 66 72 6f 6d   that entry from
2ea80 20 74 68 65 20 0a 2a 2a 20 69 6e 64 65 78 20 6f   the .** index o
2ea90 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f 72 20  pened by cursor 
2eaa0 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  P1..*/.case OP_I
2eab0 64 78 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56 64  dxDelete: {.  Vd
2eac0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
2ead0 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
2eae0 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e  .  int res;.  Un
2eaf0 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a  packedRecord r;.
2eb00 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2eb10 70 33 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74  p3>0 );.  assert
2eb20 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70  ( pOp->p2>0 && p
2eb30 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 3c 3d  Op->p2+pOp->p3<=
2eb40 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
2eb50 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20  nCursor)+1 );.  
2eb60 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2eb70 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
2eb80 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
2eb90 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
2eba0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2ebb0 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
2ebc0 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
2ebd0 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
2ebe0 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 49  ;.  sqlite3VdbeI
2ebf0 6e 63 72 57 72 69 74 65 43 6f 75 6e 74 65 72 28  ncrWriteCounter(
2ec00 70 2c 20 70 43 29 3b 0a 20 20 70 43 72 73 72 20  p, pC);.  pCrsr 
2ec10 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  = pC->uc.pCursor
2ec20 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73  ;.  assert( pCrs
2ec30 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r!=0 );.  assert
2ec40 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a  ( pOp->p5==0 );.
2ec50 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
2ec60 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72  C->pKeyInfo;.  r
2ec70 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70  .nField = (u16)p
2ec80 4f 70 2d 3e 70 33 3b 0a 20 20 72 2e 64 65 66 61  Op->p3;.  r.defa
2ec90 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 72 2e  ult_rc = 0;.  r.
2eca0 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  aMem = &aMem[pOp
2ecb0 2d 3e 70 32 5d 3b 0a 20 20 72 63 20 3d 20 73 71  ->p2];.  rc = sq
2ecc0 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
2ecd0 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20  Unpacked(pCrsr, 
2ece0 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b  &r, 0, 0, &res);
2ecf0 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
2ed00 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2ed10 72 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 3d 3d  ror;.  if( res==
2ed20 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  0 ){.    rc = sq
2ed30 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65  lite3BtreeDelete
2ed40 28 70 43 72 73 72 2c 20 42 54 52 45 45 5f 41 55  (pCrsr, BTREE_AU
2ed50 58 44 45 4c 45 54 45 29 3b 0a 20 20 20 20 69 66  XDELETE);.    if
2ed60 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
2ed70 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2ed80 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 43    }.  assert( pC
2ed90 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
2eda0 3d 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 63 61 63  ==0 );.  pC->cac
2edb0 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
2edc0 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 73 65  _STALE;.  pC->se
2edd0 65 6b 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20  ekResult = 0;.  
2ede0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2edf0 6f 64 65 3a 20 44 65 66 65 72 72 65 64 53 65 65  ode: DeferredSee
2ee00 6b 20 50 31 20 2a 20 50 33 20 50 34 20 2a 0a 2a  k P1 * P3 P4 *.*
2ee10 2a 20 53 79 6e 6f 70 73 69 73 3a 20 4d 6f 76 65  * Synopsis: Move
2ee20 20 50 33 20 74 6f 20 50 31 2e 72 6f 77 69 64 20   P3 to P1.rowid 
2ee30 69 66 20 6e 65 65 64 65 64 0a 2a 2a 0a 2a 2a 20  if needed.**.** 
2ee40 50 31 20 69 73 20 61 6e 20 6f 70 65 6e 20 69 6e  P1 is an open in
2ee50 64 65 78 20 63 75 72 73 6f 72 20 61 6e 64 20 50  dex cursor and P
2ee60 33 20 69 73 20 61 20 63 75 72 73 6f 72 20 6f 6e  3 is a cursor on
2ee70 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
2ee80 6e 67 0a 2a 2a 20 74 61 62 6c 65 2e 20 20 54 68  ng.** table.  Th
2ee90 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 61  is opcode does a
2eea0 20 64 65 66 65 72 72 65 64 20 73 65 65 6b 20 6f   deferred seek o
2eeb0 66 20 74 68 65 20 50 33 20 74 61 62 6c 65 20 63  f the P3 table c
2eec0 75 72 73 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20  ursor.** to the 
2eed0 72 6f 77 20 74 68 61 74 20 63 6f 72 72 65 73 70  row that corresp
2eee0 6f 6e 64 73 20 74 6f 20 74 68 65 20 63 75 72 72  onds to the curr
2eef0 65 6e 74 20 72 6f 77 20 6f 66 20 50 31 2e 0a 2a  ent row of P1..*
2ef00 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 20 64  *.** This is a d
2ef10 65 66 65 72 72 65 64 20 73 65 65 6b 2e 20 20 4e  eferred seek.  N
2ef20 6f 74 68 69 6e 67 20 61 63 74 75 61 6c 6c 79 20  othing actually 
2ef30 68 61 70 70 65 6e 73 20 75 6e 74 69 6c 0a 2a 2a  happens until.**
2ef40 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 75   the cursor is u
2ef50 73 65 64 20 74 6f 20 72 65 61 64 20 61 20 72 65  sed to read a re
2ef60 63 6f 72 64 2e 20 20 54 68 61 74 20 77 61 79 2c  cord.  That way,
2ef70 20 69 66 20 6e 6f 20 72 65 61 64 73 0a 2a 2a 20   if no reads.** 
2ef80 6f 63 63 75 72 2c 20 6e 6f 20 75 6e 6e 65 63 65  occur, no unnece
2ef90 73 73 61 72 79 20 49 2f 4f 20 68 61 70 70 65 6e  ssary I/O happen
2efa0 73 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20  s..**.** P4 may 
2efb0 62 65 20 61 6e 20 61 72 72 61 79 20 6f 66 20 69  be an array of i
2efc0 6e 74 65 67 65 72 73 20 28 74 79 70 65 20 50 34  ntegers (type P4
2efd0 5f 49 4e 54 41 52 52 41 59 29 20 63 6f 6e 74 61  _INTARRAY) conta
2efe0 69 6e 69 6e 67 0a 2a 2a 20 6f 6e 65 20 65 6e 74  ining.** one ent
2eff0 72 79 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  ry for each colu
2f000 6d 6e 20 69 6e 20 74 68 65 20 50 33 20 74 61 62  mn in the P3 tab
2f010 6c 65 2e 20 20 49 66 20 61 72 72 61 79 20 65 6e  le.  If array en
2f020 74 72 79 20 61 28 69 29 0a 2a 2a 20 69 73 20 6e  try a(i).** is n
2f030 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 72 65  on-zero, then re
2f040 61 64 69 6e 67 20 63 6f 6c 75 6d 6e 20 61 28 69  ading column a(i
2f050 29 2d 31 20 66 72 6f 6d 20 63 75 72 73 6f 72 20  )-1 from cursor 
2f060 50 33 20 69 73 20 0a 2a 2a 20 65 71 75 69 76 61  P3 is .** equiva
2f070 6c 65 6e 74 20 74 6f 20 70 65 72 66 6f 72 6d 69  lent to performi
2f080 6e 67 20 74 68 65 20 64 65 66 65 72 72 65 64 20  ng the deferred 
2f090 73 65 65 6b 20 61 6e 64 20 74 68 65 6e 20 72 65  seek and then re
2f0a0 61 64 69 6e 67 20 63 6f 6c 75 6d 6e 20 69 20 0a  ading column i .
2f0b0 2a 2a 20 66 72 6f 6d 20 50 31 2e 20 20 54 68 69  ** from P1.  Thi
2f0c0 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73  s information is
2f0d0 20 73 74 6f 72 65 64 20 69 6e 20 50 33 20 61 6e   stored in P3 an
2f0e0 64 20 75 73 65 64 20 74 6f 20 72 65 64 69 72 65  d used to redire
2f0f0 63 74 0a 2a 2a 20 72 65 61 64 73 20 61 67 61 69  ct.** reads agai
2f100 6e 73 74 20 50 33 20 6f 76 65 72 20 74 6f 20 50  nst P3 over to P
2f110 31 2c 20 74 68 75 73 20 70 6f 73 73 69 62 6c 79  1, thus possibly
2f120 20 61 76 6f 69 64 69 6e 67 20 74 68 65 20 6e 65   avoiding the ne
2f130 65 64 20 74 6f 0a 2a 2a 20 73 65 65 6b 20 61 6e  ed to.** seek an
2f140 64 20 72 65 61 64 20 63 75 72 73 6f 72 20 50 33  d read cursor P3
2f150 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
2f160 49 64 78 52 6f 77 69 64 20 50 31 20 50 32 20 2a  IdxRowid P1 P2 *
2f170 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2f180 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a  : r[P2]=rowid.**
2f190 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72  .** Write into r
2f1a0 65 67 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e  egister P2 an in
2f1b0 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20 74  teger which is t
2f1c0 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e  he last entry in
2f1d0 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 0a 2a   the record at.*
2f1e0 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  * the end of the
2f1f0 20 69 6e 64 65 78 20 6b 65 79 20 70 6f 69 6e 74   index key point
2f200 65 64 20 74 6f 20 62 79 20 63 75 72 73 6f 72 20  ed to by cursor 
2f210 50 31 2e 20 20 54 68 69 73 20 69 6e 74 65 67 65  P1.  This intege
2f220 72 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 74  r should be.** t
2f230 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20  he rowid of the 
2f240 74 61 62 6c 65 20 65 6e 74 72 79 20 74 6f 20 77  table entry to w
2f250 68 69 63 68 20 74 68 69 73 20 69 6e 64 65 78 20  hich this index 
2f260 65 6e 74 72 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a  entry points..**
2f270 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 52 6f  .** See also: Ro
2f280 77 69 64 2c 20 4d 61 6b 65 52 65 63 6f 72 64 2e  wid, MakeRecord.
2f290 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 66 65  .*/.case OP_Defe
2f2a0 72 72 65 64 53 65 65 6b 3a 0a 63 61 73 65 20 4f  rredSeek:.case O
2f2b0 50 5f 49 64 78 52 6f 77 69 64 3a 20 7b 20 20 20  P_IdxRowid: {   
2f2c0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
2f2d0 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
2f2e0 2a 70 43 3b 20 20 20 20 20 20 20 20 20 20 20 20  *pC;            
2f2f0 20 2f 2a 20 54 68 65 20 50 31 20 69 6e 64 65 78   /* The P1 index
2f300 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 56 64 62   cursor */.  Vdb
2f310 65 43 75 72 73 6f 72 20 2a 70 54 61 62 43 75 72  eCursor *pTabCur
2f320 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;        /* The 
2f330 50 32 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20  P2 table cursor 
2f340 28 4f 50 5f 44 65 66 65 72 72 65 64 53 65 65 6b  (OP_DeferredSeek
2f350 20 6f 6e 6c 79 29 20 2a 2f 0a 20 20 69 36 34 20   only) */.  i64 
2f360 72 6f 77 69 64 3b 20 20 20 20 20 20 20 20 20 20  rowid;          
2f370 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 77 69 64          /* Rowid
2f380 20 74 68 61 74 20 50 31 20 63 75 72 72 65 6e 74   that P1 current
2f390 20 70 6f 69 6e 74 73 20 74 6f 20 2a 2f 0a 0a 20   points to */.. 
2f3a0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
2f3b0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
2f3c0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
2f3d0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
2f3e0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2f3f0 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
2f400 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
2f410 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
2f420 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
2f430 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29  >uc.pCursor!=0 )
2f440 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
2f450 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20  isTable==0 );.  
2f460 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
2f470 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
2f480 0a 20 20 61 73 73 65 72 74 28 20 21 70 43 2d 3e  .  assert( !pC->
2f490 6e 75 6c 6c 52 6f 77 20 7c 7c 20 70 4f 70 2d 3e  nullRow || pOp->
2f4a0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 52 6f  opcode==OP_IdxRo
2f4b0 77 69 64 20 29 3b 0a 0a 20 20 2f 2a 20 54 68 65  wid );..  /* The
2f4c0 20 49 64 78 52 6f 77 69 64 20 61 6e 64 20 53 65   IdxRowid and Se
2f4d0 65 6b 20 6f 70 63 6f 64 65 73 20 61 72 65 20 63  ek opcodes are c
2f4e0 6f 6d 62 69 6e 65 64 20 62 65 63 61 75 73 65 20  ombined because 
2f4f0 6f 66 20 74 68 65 20 63 6f 6d 6d 6f 6e 61 6c 69  of the commonali
2f500 74 79 0a 20 20 2a 2a 20 6f 66 20 73 71 6c 69 74  ty.  ** of sqlit
2f510 65 33 56 64 62 65 43 75 72 73 6f 72 52 65 73 74  e3VdbeCursorRest
2f520 6f 72 65 28 29 20 61 6e 64 20 73 71 6c 69 74 65  ore() and sqlite
2f530 33 56 64 62 65 49 64 78 52 6f 77 69 64 28 29 2e  3VdbeIdxRowid().
2f540 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   */.  rc = sqlit
2f550 65 33 56 64 62 65 43 75 72 73 6f 72 52 65 73 74  e3VdbeCursorRest
2f560 6f 72 65 28 70 43 29 3b 0a 0a 20 20 2f 2a 20 73  ore(pC);..  /* s
2f570 71 6c 69 74 65 33 56 62 65 43 75 72 73 6f 72 52  qlite3VbeCursorR
2f580 65 73 74 6f 72 65 28 29 20 63 61 6e 20 6f 6e 6c  estore() can onl
2f590 79 20 66 61 69 6c 20 69 66 20 74 68 65 20 72 65  y fail if the re
2f5a0 63 6f 72 64 20 68 61 73 20 62 65 65 6e 20 64 65  cord has been de
2f5b0 6c 65 74 65 64 0a 20 20 2a 2a 20 6f 75 74 20 66  leted.  ** out f
2f5c0 72 6f 6d 20 75 6e 64 65 72 20 74 68 65 20 63 75  rom under the cu
2f5d0 72 73 6f 72 2e 20 20 54 68 61 74 20 77 69 6c 6c  rsor.  That will
2f5e0 20 6e 65 76 65 72 20 68 61 70 70 65 6e 73 20 66   never happens f
2f5f0 6f 72 20 61 6e 20 49 64 78 52 6f 77 69 64 0a 20  or an IdxRowid. 
2f600 20 2a 2a 20 6f 72 20 53 65 65 6b 20 6f 70 63 6f   ** or Seek opco
2f610 64 65 20 2a 2f 0a 20 20 69 66 28 20 4e 45 56 45  de */.  if( NEVE
2f620 52 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29  R(rc!=SQLITE_OK)
2f630 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
2f640 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 69  e_to_error;..  i
2f650 66 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  f( !pC->nullRow 
2f660 29 7b 0a 20 20 20 20 72 6f 77 69 64 20 3d 20 30  ){.    rowid = 0
2f670 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64  ;  /* Not needed
2f680 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20  .  Only used to 
2f690 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e  silence a warnin
2f6a0 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73  g. */.    rc = s
2f6b0 71 6c 69 74 65 33 56 64 62 65 49 64 78 52 6f 77  qlite3VdbeIdxRow
2f6c0 69 64 28 64 62 2c 20 70 43 2d 3e 75 63 2e 70 43  id(db, pC->uc.pC
2f6d0 75 72 73 6f 72 2c 20 26 72 6f 77 69 64 29 3b 0a  ursor, &rowid);.
2f6e0 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
2f6f0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67  TE_OK ){.      g
2f700 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2f710 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  _error;.    }.  
2f720 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
2f730 65 3d 3d 4f 50 5f 44 65 66 65 72 72 65 64 53 65  e==OP_DeferredSe
2f740 65 6b 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  ek ){.      asse
2f750 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 26  rt( pOp->p3>=0 &
2f760 26 20 70 4f 70 2d 3e 70 33 3c 70 2d 3e 6e 43 75  & pOp->p3<p->nCu
2f770 72 73 6f 72 20 29 3b 0a 20 20 20 20 20 20 70 54  rsor );.      pT
2f780 61 62 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72  abCur = p->apCsr
2f790 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20  [pOp->p3];.     
2f7a0 20 61 73 73 65 72 74 28 20 70 54 61 62 43 75 72   assert( pTabCur
2f7b0 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73  !=0 );.      ass
2f7c0 65 72 74 28 20 70 54 61 62 43 75 72 2d 3e 65 43  ert( pTabCur->eC
2f7d0 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
2f7e0 42 54 52 45 45 20 29 3b 0a 20 20 20 20 20 20 61  BTREE );.      a
2f7f0 73 73 65 72 74 28 20 70 54 61 62 43 75 72 2d 3e  ssert( pTabCur->
2f800 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  uc.pCursor!=0 );
2f810 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
2f820 54 61 62 43 75 72 2d 3e 69 73 54 61 62 6c 65 20  TabCur->isTable 
2f830 29 3b 0a 20 20 20 20 20 20 70 54 61 62 43 75 72  );.      pTabCur
2f840 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20  ->nullRow = 0;. 
2f850 20 20 20 20 20 70 54 61 62 43 75 72 2d 3e 6d 6f       pTabCur->mo
2f860 76 65 74 6f 54 61 72 67 65 74 20 3d 20 72 6f 77  vetoTarget = row
2f870 69 64 3b 0a 20 20 20 20 20 20 70 54 61 62 43 75  id;.      pTabCu
2f880 72 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  r->deferredMovet
2f890 6f 20 3d 20 31 3b 0a 20 20 20 20 20 20 61 73 73  o = 1;.      ass
2f8a0 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
2f8b0 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 7c 7c  ==P4_INTARRAY ||
2f8c0 20 70 4f 70 2d 3e 70 34 2e 61 69 3d 3d 30 20 29   pOp->p4.ai==0 )
2f8d0 3b 0a 20 20 20 20 20 20 70 54 61 62 43 75 72 2d  ;.      pTabCur-
2f8e0 3e 61 41 6c 74 4d 61 70 20 3d 20 70 4f 70 2d 3e  >aAltMap = pOp->
2f8f0 70 34 2e 61 69 3b 0a 20 20 20 20 20 20 70 54 61  p4.ai;.      pTa
2f900 62 43 75 72 2d 3e 70 41 6c 74 43 75 72 73 6f 72  bCur->pAltCursor
2f910 20 3d 20 70 43 3b 0a 20 20 20 20 7d 65 6c 73 65   = pC;.    }else
2f920 7b 0a 20 20 20 20 20 20 70 4f 75 74 20 3d 20 6f  {.      pOut = o
2f930 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
2f940 20 70 4f 70 29 3b 0a 20 20 20 20 20 20 70 4f 75   pOp);.      pOu
2f950 74 2d 3e 75 2e 69 20 3d 20 72 6f 77 69 64 3b 0a  t->u.i = rowid;.
2f960 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
2f970 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
2f980 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 52 6f  opcode==OP_IdxRo
2f990 77 69 64 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  wid );.    sqlit
2f9a0 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
2f9b0 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29  (&aMem[pOp->p2])
2f9c0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
2f9d0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  ../* Opcode: Idx
2f9e0 47 45 20 50 31 20 50 32 20 50 33 20 50 34 20 50  GE P1 P2 P3 P4 P
2f9f0 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  5.** Synopsis: k
2fa00 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
2fa10 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65  * The P4 registe
2fa20 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69  r values beginni
2fa30 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20  ng with P3 form 
2fa40 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
2fa50 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f  x .** key that o
2fa60 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59  mits the PRIMARY
2fa70 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65 20 74   KEY.  Compare t
2fa80 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67  his key value ag
2fa90 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20  ainst the index 
2faa0 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20 63  .** that P1 is c
2fab0 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e  urrently pointin
2fac0 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74  g to, ignoring t
2fad0 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f  he PRIMARY KEY o
2fae0 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c  r ROWID .** fiel
2faf0 64 73 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a  ds at the end..*
2fb00 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69  *.** If the P1 i
2fb10 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 67 72  ndex entry is gr
2fb20 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
2fb30 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76  ual to the key v
2fb40 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d  alue.** then jum
2fb50 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72 77  p to P2.  Otherw
2fb60 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ise fall through
2fb70 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
2fb80 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  truction..*/./* 
2fb90 4f 70 63 6f 64 65 3a 20 49 64 78 47 54 20 50 31  Opcode: IdxGT P1
2fba0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
2fbb0 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
2fbc0 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65  P3@P4].**.** The
2fbd0 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c   P4 register val
2fbe0 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ues beginning wi
2fbf0 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e  th P3 form an un
2fc00 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a  packed index .**
2fc10 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20   key that omits 
2fc20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 2e  the PRIMARY KEY.
2fc30 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b    Compare this k
2fc40 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74  ey value against
2fc50 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74   the index .** t
2fc60 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e  hat P1 is curren
2fc70 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c  tly pointing to,
2fc80 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52   ignoring the PR
2fc90 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57  IMARY KEY or ROW
2fca0 49 44 20 0a 2a 2a 20 66 69 65 6c 64 73 20 61 74  ID .** fields at
2fcb0 20 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20   the end..**.** 
2fcc0 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78 20  If the P1 index 
2fcd0 65 6e 74 72 79 20 69 73 20 67 72 65 61 74 65 72  entry is greater
2fce0 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61   than the key va
2fcf0 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70  lue.** then jump
2fd00 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72 77 69   to P2.  Otherwi
2fd10 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  se fall through 
2fd20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
2fd30 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f  ruction..*/./* O
2fd40 70 63 6f 64 65 3a 20 49 64 78 4c 54 20 50 31 20  pcode: IdxLT P1 
2fd50 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
2fd60 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
2fd70 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20  3@P4].**.** The 
2fd80 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75  P4 register valu
2fd90 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  es beginning wit
2fda0 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70  h P3 form an unp
2fdb0 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20  acked index .** 
2fdc0 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74  key that omits t
2fdd0 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f  he PRIMARY KEY o
2fde0 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72  r ROWID.  Compar
2fdf0 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65  e this key value
2fe00 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68 65 20   against.** the 
2fe10 69 6e 64 65 78 20 74 68 61 74 20 50 31 20 69 73  index that P1 is
2fe20 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
2fe30 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67  ing to, ignoring
2fe40 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
2fe50 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e 20   or.** ROWID on 
2fe60 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a  the P1 index..**
2fe70 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e  .** If the P1 in
2fe80 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c 65 73  dex entry is les
2fe90 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76  s than the key v
2fea0 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70 20 74  alue then jump t
2feb0 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68 65 72 77 69  o P2..** Otherwi
2fec0 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  se fall through 
2fed0 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
2fee0 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f  ruction..*/./* O
2fef0 70 63 6f 64 65 3a 20 49 64 78 4c 45 20 50 31 20  pcode: IdxLE P1 
2ff00 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
2ff10 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
2ff20 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20  3@P4].**.** The 
2ff30 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75  P4 register valu
2ff40 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  es beginning wit
2ff50 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70  h P3 form an unp
2ff60 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20  acked index .** 
2ff70 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74  key that omits t
2ff80 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f  he PRIMARY KEY o
2ff90 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72  r ROWID.  Compar
2ffa0 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65  e this key value
2ffb0 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68 65 20   against.** the 
2ffc0 69 6e 64 65 78 20 74 68 61 74 20 50 31 20 69 73  index that P1 is
2ffd0 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
2ffe0 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67  ing to, ignoring
2fff0 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
30000 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e 20   or.** ROWID on 
30010 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a  the P1 index..**
30020 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e  .** If the P1 in
30030 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c 65 73  dex entry is les
30040 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  s than or equal 
30050 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  to the key value
30060 20 74 68 65 6e 20 6a 75 6d 70 0a 2a 2a 20 74 6f   then jump.** to
30070 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 20 66   P2. Otherwise f
30080 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
30090 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
300a0 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
300b0 49 64 78 4c 45 3a 20 20 20 20 20 20 20 20 20 20  IdxLE:          
300c0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
300d0 4f 50 5f 49 64 78 47 54 3a 20 20 20 20 20 20 20  OP_IdxGT:       
300e0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61     /* jump */.ca
300f0 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20 20 20 20  se OP_IdxLT:    
30100 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
30110 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 45 3a 20  .case OP_IdxGE: 
30120 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70   {       /* jump
30130 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
30140 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b   *pC;.  int res;
30150 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
30160 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  d r;..  assert( 
30170 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
30180 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
30190 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
301a0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
301b0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
301c0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
301d0 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20 61 73  sOrdered );.  as
301e0 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
301f0 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
30200 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  E );.  assert( p
30210 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30  C->uc.pCursor!=0
30220 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
30230 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
30240 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
30250 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f  pOp->p5==0 || pO
30260 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 61 73  p->p5==1 );.  as
30270 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
30280 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
30290 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
302a0 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72 2e  ->pKeyInfo;.  r.
302b0 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f  nField = (u16)pO
302c0 70 2d 3e 70 34 2e 69 3b 0a 20 20 69 66 28 20 70  p->p4.i;.  if( p
302d0 4f 70 2d 3e 6f 70 63 6f 64 65 3c 4f 50 5f 49 64  Op->opcode<OP_Id
302e0 78 4c 54 20 29 7b 0a 20 20 20 20 61 73 73 65 72  xLT ){.    asser
302f0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
30300 4f 50 5f 49 64 78 4c 45 20 7c 7c 20 70 4f 70 2d  OP_IdxLE || pOp-
30310 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47  >opcode==OP_IdxG
30320 54 20 29 3b 0a 20 20 20 20 72 2e 64 65 66 61 75  T );.    r.defau
30330 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20 7d 65  lt_rc = -1;.  }e
30340 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
30350 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
30360 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f  _IdxGE || pOp->o
30370 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20  pcode==OP_IdxLT 
30380 29 3b 0a 20 20 20 20 72 2e 64 65 66 61 75 6c 74  );.    r.default
30390 5f 72 63 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 72  _rc = 0;.  }.  r
303a0 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f  .aMem = &aMem[pO
303b0 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53  p->p3];.#ifdef S
303c0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 7b 0a  QLITE_DEBUG.  {.
303d0 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 66      int i;.    f
303e0 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65  or(i=0; i<r.nFie
303f0 6c 64 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  ld; i++){.      
30400 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
30410 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29  id(&r.aMem[i]) )
30420 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52  ;.      REGISTER
30430 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2b 69  _TRACE(pOp->p3+i
30440 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 2b  , &aMem[pOp->p3+
30450 69 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23  i]);.    }.  }.#
30460 65 6e 64 69 66 0a 20 20 72 65 73 20 3d 20 30 3b  endif.  res = 0;
30470 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e    /* Not needed.
30480 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73    Only used to s
30490 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67  ilence a warning
304a0 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69  . */.  rc = sqli
304b0 74 65 33 56 64 62 65 49 64 78 4b 65 79 43 6f 6d  te3VdbeIdxKeyCom
304c0 70 61 72 65 28 64 62 2c 20 70 43 2c 20 26 72 2c  pare(db, pC, &r,
304d0 20 26 72 65 73 29 3b 0a 20 20 61 73 73 65 72 74   &res);.  assert
304e0 28 20 28 4f 50 5f 49 64 78 4c 45 26 31 29 3d 3d  ( (OP_IdxLE&1)==
304f0 28 4f 50 5f 49 64 78 4c 54 26 31 29 20 26 26 20  (OP_IdxLT&1) && 
30500 28 4f 50 5f 49 64 78 47 45 26 31 29 3d 3d 28 4f  (OP_IdxGE&1)==(O
30510 50 5f 49 64 78 47 54 26 31 29 20 29 3b 0a 20 20  P_IdxGT&1) );.  
30520 69 66 28 20 28 70 4f 70 2d 3e 6f 70 63 6f 64 65  if( (pOp->opcode
30530 26 31 29 3d 3d 28 4f 50 5f 49 64 78 4c 54 26 31  &1)==(OP_IdxLT&1
30540 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ) ){.    assert(
30550 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
30560 5f 49 64 78 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f  _IdxLE || pOp->o
30570 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20  pcode==OP_IdxLT 
30580 29 3b 0a 20 20 20 20 72 65 73 20 3d 20 2d 72 65  );.    res = -re
30590 73 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  s;.  }else{.    
305a0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
305b0 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c  ode==OP_IdxGE ||
305c0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
305d0 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20 72 65  _IdxGT );.    re
305e0 73 2b 2b 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42  s++;.  }.  VdbeB
305f0 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 3e 30  ranchTaken(res>0
30600 2c 32 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  ,2);.  if( rc ) 
30610 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
30620 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 72  o_error;.  if( r
30630 65 73 3e 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70  es>0 ) goto jump
30640 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b  _to_p2;.  break;
30650 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
30660 65 73 74 72 6f 79 20 50 31 20 50 32 20 50 33 20  estroy P1 P2 P3 
30670 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65  * *.**.** Delete
30680 20 61 6e 20 65 6e 74 69 72 65 20 64 61 74 61 62   an entire datab
30690 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  ase table or ind
306a0 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61  ex whose root pa
306b0 67 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ge in the databa
306c0 73 65 0a 2a 2a 20 66 69 6c 65 20 69 73 20 67 69  se.** file is gi
306d0 76 65 6e 20 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a  ven by P1..**.**
306e0 20 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   The table being
306f0 20 64 65 73 74 72 6f 79 65 64 20 69 73 20 69 6e   destroyed is in
30700 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
30710 73 65 20 66 69 6c 65 20 69 66 20 50 33 3d 3d 30  se file if P3==0
30720 2e 20 20 49 66 0a 2a 2a 20 50 33 3d 3d 31 20 74  .  If.** P3==1 t
30730 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f  hen the table to
30740 20 62 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20   be clear is in 
30750 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64 61  the auxiliary da
30760 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74  tabase file.** t
30770 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 73  hat is used to s
30780 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72 65 61  tore tables crea
30790 74 65 20 75 73 69 6e 67 20 43 52 45 41 54 45 20  te using CREATE 
307a0 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e  TEMPORARY TABLE.
307b0 0a 2a 2a 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41  .**.** If AUTOVA
307c0 43 55 55 4d 20 69 73 20 65 6e 61 62 6c 65 64 20  CUUM is enabled 
307d0 74 68 65 6e 20 69 74 20 69 73 20 70 6f 73 73 69  then it is possi
307e0 62 6c 65 20 74 68 61 74 20 61 6e 6f 74 68 65 72  ble that another
307f0 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6d 69   root page.** mi
30800 67 68 74 20 62 65 20 6d 6f 76 65 64 20 69 6e 74  ght be moved int
30810 6f 20 74 68 65 20 6e 65 77 6c 79 20 64 65 6c 65  o the newly dele
30820 74 65 64 20 72 6f 6f 74 20 70 61 67 65 20 69 6e  ted root page in
30830 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 61   order to keep a
30840 6c 6c 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 73  ll.** root pages
30850 20 63 6f 6e 74 69 67 75 6f 75 73 20 61 74 20 74   contiguous at t
30860 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20  he beginning of 
30870 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 54  the database.  T
30880 68 65 20 66 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c  he former.** val
30890 75 65 20 6f 66 20 74 68 65 20 72 6f 6f 74 20 70  ue of the root p
308a0 61 67 65 20 74 68 61 74 20 6d 6f 76 65 64 20 2d  age that moved -
308b0 20 69 74 73 20 76 61 6c 75 65 20 62 65 66 6f 72   its value befor
308c0 65 20 74 68 65 20 6d 6f 76 65 20 6f 63 63 75 72  e the move occur
308d0 72 65 64 20 2d 0a 2a 2a 20 69 73 20 73 74 6f 72  red -.** is stor
308e0 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
308f0 32 2e 20 49 66 20 6e 6f 20 70 61 67 65 20 6d 6f  2. If no page mo
30900 76 65 6d 65 6e 74 20 77 61 73 20 72 65 71 75 69  vement was requi
30910 72 65 64 20 28 62 65 63 61 75 73 65 20 74 68 65  red (because the
30920 0a 2a 2a 20 74 61 62 6c 65 20 62 65 69 6e 67 20  .** table being 
30930 64 72 6f 70 70 65 64 20 77 61 73 20 61 6c 72 65  dropped was alre
30940 61 64 79 20 74 68 65 20 6c 61 73 74 20 6f 6e 65  ady the last one
30950 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
30960 29 20 74 68 65 6e 20 61 20 0a 2a 2a 20 7a 65 72  ) then a .** zer
30970 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  o is stored in r
30980 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20  egister P2.  If 
30990 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20 64 69  AUTOVACUUM is di
309a0 73 61 62 6c 65 64 20 74 68 65 6e 20 61 20 7a 65  sabled then a ze
309b0 72 6f 20 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64  ro .** is stored
309c0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
309d0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
309e0 64 65 20 74 68 72 6f 77 73 20 61 6e 20 65 72 72  de throws an err
309f0 6f 72 20 69 66 20 74 68 65 72 65 20 61 72 65 20  or if there are 
30a00 61 6e 79 20 61 63 74 69 76 65 20 72 65 61 64 65  any active reade
30a10 72 20 56 4d 73 20 77 68 65 6e 0a 2a 2a 20 69 74  r VMs when.** it
30a20 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20 54 68 69   is invoked. Thi
30a30 73 20 69 73 20 64 6f 6e 65 20 74 6f 20 61 76 6f  s is done to avo
30a40 69 64 20 74 68 65 20 64 69 66 66 69 63 75 6c 74  id the difficult
30a50 79 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  y associated wit
30a60 68 20 0a 2a 2a 20 75 70 64 61 74 69 6e 67 20 65  h .** updating e
30a70 78 69 73 74 69 6e 67 20 63 75 72 73 6f 72 73 20  xisting cursors 
30a80 77 68 65 6e 20 61 20 72 6f 6f 74 20 70 61 67 65  when a root page
30a90 20 69 73 20 6d 6f 76 65 64 20 69 6e 20 61 6e 20   is moved in an 
30aa0 41 55 54 4f 56 41 43 55 55 4d 20 0a 2a 2a 20 64  AUTOVACUUM .** d
30ab0 61 74 61 62 61 73 65 2e 20 54 68 69 73 20 65 72  atabase. This er
30ac0 72 6f 72 20 69 73 20 74 68 72 6f 77 6e 20 65 76  ror is thrown ev
30ad0 65 6e 20 69 66 20 74 68 65 20 64 61 74 61 62 61  en if the databa
30ae0 73 65 20 69 73 20 6e 6f 74 20 61 6e 20 41 55 54  se is not an AUT
30af0 4f 56 41 43 55 55 4d 20 0a 2a 2a 20 64 62 20 69  OVACUUM .** db i
30b00 6e 20 6f 72 64 65 72 20 74 6f 20 61 76 6f 69 64  n order to avoid
30b10 20 69 6e 74 72 6f 64 75 63 69 6e 67 20 61 6e 20   introducing an 
30b20 69 6e 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  incompatibility 
30b30 62 65 74 77 65 65 6e 20 61 75 74 6f 76 61 63 75  between autovacu
30b40 75 6d 20 0a 2a 2a 20 61 6e 64 20 6e 6f 6e 2d 61  um .** and non-a
30b50 75 74 6f 76 61 63 75 75 6d 20 6d 6f 64 65 73 2e  utovacuum modes.
30b60 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
30b70 20 43 6c 65 61 72 0a 2a 2f 0a 63 61 73 65 20 4f   Clear.*/.case O
30b80 50 5f 44 65 73 74 72 6f 79 3a 20 7b 20 20 20 20  P_Destroy: {    
30b90 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e   /* out2 */.  in
30ba0 74 20 69 4d 6f 76 65 64 3b 0a 20 20 69 6e 74 20  t iMoved;.  int 
30bb0 69 44 62 3b 0a 0a 20 20 73 71 6c 69 74 65 33 56  iDb;..  sqlite3V
30bc0 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e  dbeIncrWriteCoun
30bd0 74 65 72 28 70 2c 20 30 29 3b 0a 20 20 61 73 73  ter(p, 0);.  ass
30be0 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
30bf0 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
30c00 20 70 4f 70 2d 3e 70 31 3e 31 20 29 3b 0a 20 20   pOp->p1>1 );.  
30c10 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
30c20 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
30c30 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
30c40 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28 20 64  EM_Null;.  if( d
30c50 62 2d 3e 6e 56 64 62 65 52 65 61 64 20 3e 20 64  b->nVdbeRead > d
30c60 62 2d 3e 6e 56 44 65 73 74 72 6f 79 2b 31 20 29  b->nVDestroy+1 )
30c70 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
30c80 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 70 2d  E_LOCKED;.    p-
30c90 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 4f  >errorAction = O
30ca0 45 5f 41 62 6f 72 74 3b 0a 20 20 20 20 67 6f 74  E_Abort;.    got
30cb0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
30cc0 72 72 6f 72 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  rror;.  }else{. 
30cd0 20 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33     iDb = pOp->p3
30ce0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 44 62  ;.    assert( Db
30cf0 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
30d00 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 20  eMask, iDb) );. 
30d10 20 20 20 69 4d 6f 76 65 64 20 3d 20 30 3b 20 20     iMoved = 0;  
30d20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20  /* Not needed.  
30d30 4f 6e 6c 79 20 74 6f 20 73 69 6c 65 6e 63 65 20  Only to silence 
30d40 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20  a warning. */.  
30d50 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
30d60 72 65 65 44 72 6f 70 54 61 62 6c 65 28 64 62 2d  reeDropTable(db-
30d70 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 70  >aDb[iDb].pBt, p
30d80 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f 76 65 64 29  Op->p1, &iMoved)
30d90 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  ;.    pOut->flag
30da0 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20  s = MEM_Int;.   
30db0 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 6f   pOut->u.i = iMo
30dc0 76 65 64 3b 0a 20 20 20 20 69 66 28 20 72 63 20  ved;.    if( rc 
30dd0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
30de0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 69 66 6e 64  _to_error;.#ifnd
30df0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
30e00 55 54 4f 56 41 43 55 55 4d 0a 20 20 20 20 69 66  UTOVACUUM.    if
30e10 28 20 69 4d 6f 76 65 64 21 3d 30 20 29 7b 0a 20  ( iMoved!=0 ){. 
30e20 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6f 74       sqlite3Root
30e30 50 61 67 65 4d 6f 76 65 64 28 64 62 2c 20 69 44  PageMoved(db, iD
30e40 62 2c 20 69 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e  b, iMoved, pOp->
30e50 70 31 29 3b 0a 20 20 20 20 20 20 2f 2a 20 41 6c  p1);.      /* Al
30e60 6c 20 4f 50 5f 44 65 73 74 72 6f 79 20 6f 70 65  l OP_Destroy ope
30e70 72 61 74 69 6f 6e 73 20 6f 63 63 75 72 20 6f 6e  rations occur on
30e80 20 74 68 65 20 73 61 6d 65 20 62 74 72 65 65 20   the same btree 
30e90 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
30ea0 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61   resetSchemaOnFa
30eb0 75 6c 74 3d 3d 30 20 7c 7c 20 72 65 73 65 74 53  ult==0 || resetS
30ec0 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 69 44  chemaOnFault==iD
30ed0 62 2b 31 20 29 3b 0a 20 20 20 20 20 20 72 65 73  b+1 );.      res
30ee0 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20  etSchemaOnFault 
30ef0 3d 20 69 44 62 2b 31 3b 0a 20 20 20 20 7d 0a 23  = iDb+1;.    }.#
30f00 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61  endif.  }.  brea
30f10 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
30f20 20 43 6c 65 61 72 20 50 31 20 50 32 20 50 33 0a   Clear P1 P2 P3.
30f30 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c  **.** Delete all
30f40 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65   contents of the
30f50 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
30f60 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72  or index whose r
30f70 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 69 6e 20 74  oot page.** in t
30f80 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
30f90 20 69 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e   is given by P1.
30fa0 20 20 42 75 74 2c 20 75 6e 6c 69 6b 65 20 44 65    But, unlike De
30fb0 73 74 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a  stroy, do not.**
30fc0 20 72 65 6d 6f 76 65 20 74 68 65 20 74 61 62 6c   remove the tabl
30fd0 65 20 6f 72 20 69 6e 64 65 78 20 66 72 6f 6d 20  e or index from 
30fe0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
30ff0 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62  e..**.** The tab
31000 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 20 69  le being clear i
31010 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  s in the main da
31020 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
31030 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 32 3d  2==0.  If.** P2=
31040 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  =1 then the tabl
31050 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73  e to be clear is
31060 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72   in the auxiliar
31070 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a  y database file.
31080 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65 64 20  ** that is used 
31090 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20  to store tables 
310a0 63 72 65 61 74 65 20 75 73 69 6e 67 20 43 52 45  create using CRE
310b0 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41  ATE TEMPORARY TA
310c0 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  BLE..**.** If th
310d0 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 6e 6f  e P3 value is no
310e0 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65  n-zero, then the
310f0 20 74 61 62 6c 65 20 72 65 66 65 72 72 65 64 20   table referred 
31100 74 6f 20 6d 75 73 74 20 62 65 20 61 6e 0a 2a 2a  to must be an.**
31110 20 69 6e 74 6b 65 79 20 74 61 62 6c 65 20 28 61   intkey table (a
31120 6e 20 53 51 4c 20 74 61 62 6c 65 2c 20 6e 6f 74  n SQL table, not
31130 20 61 6e 20 69 6e 64 65 78 29 2e 20 49 6e 20 74   an index). In t
31140 68 69 73 20 63 61 73 65 20 74 68 65 20 72 6f 77  his case the row
31150 20 63 68 61 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e   change .** coun
31160 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
31170 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   by the number o
31180 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61  f rows in the ta
31190 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65  ble being cleare
311a0 64 2e 20 0a 2a 2a 20 49 66 20 50 33 20 69 73 20  d. .** If P3 is 
311b0 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72  greater than zer
311c0 6f 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75  o, then the valu
311d0 65 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  e stored in regi
311e0 73 74 65 72 20 50 33 20 69 73 0a 2a 2a 20 61 6c  ster P3 is.** al
311f0 73 6f 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62  so incremented b
31200 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  y the number of 
31210 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c  rows in the tabl
31220 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e  e being cleared.
31230 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
31240 20 44 65 73 74 72 6f 79 0a 2a 2f 0a 63 61 73 65   Destroy.*/.case
31250 20 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a 20 20 69   OP_Clear: {.  i
31260 6e 74 20 6e 43 68 61 6e 67 65 3b 0a 20 0a 20 20  nt nChange;. .  
31270 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57  sqlite3VdbeIncrW
31280 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 30  riteCounter(p, 0
31290 29 3b 0a 20 20 6e 43 68 61 6e 67 65 20 3d 20 30  );.  nChange = 0
312a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ;.  assert( p->r
312b0 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
312c0 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
312d0 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
312e0 20 70 4f 70 2d 3e 70 32 29 20 29 3b 0a 20 20 72   pOp->p2) );.  r
312f0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
31300 43 6c 65 61 72 54 61 62 6c 65 28 0a 20 20 20 20  ClearTable(.    
31310 20 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70    db->aDb[pOp->p
31320 32 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c  2].pBt, pOp->p1,
31330 20 28 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68   (pOp->p3 ? &nCh
31340 61 6e 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20  ange : 0).  );. 
31350 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a   if( pOp->p3 ){.
31360 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b      p->nChange +
31370 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 69  = nChange;.    i
31380 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a  f( pOp->p3>0 ){.
31390 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
313a0 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
313b0 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20  Op->p3]) );.    
313c0 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
313d0 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ge(p, &aMem[pOp-
313e0 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 61 4d 65  >p3]);.      aMe
313f0 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b  m[pOp->p3].u.i +
31400 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 7d  = nChange;.    }
31410 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20  .  }.  if( rc ) 
31420 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
31430 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b  o_error;.  break
31440 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
31450 52 65 73 65 74 53 6f 72 74 65 72 20 50 31 20 2a  ResetSorter P1 *
31460 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c   * * *.**.** Del
31470 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73  ete all contents
31480 20 66 72 6f 6d 20 74 68 65 20 65 70 68 65 6d 65   from the epheme
31490 72 61 6c 20 74 61 62 6c 65 20 6f 72 20 73 6f 72  ral table or sor
314a0 74 65 72 0a 2a 2a 20 74 68 61 74 20 69 73 20 6f  ter.** that is o
314b0 70 65 6e 20 6f 6e 20 63 75 72 73 6f 72 20 50 31  pen on cursor P1
314c0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
314d0 6f 64 65 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66  ode only works f
314e0 6f 72 20 63 75 72 73 6f 72 73 20 75 73 65 64 20  or cursors used 
314f0 66 6f 72 20 73 6f 72 74 69 6e 67 20 61 6e 64 0a  for sorting and.
31500 2a 2a 20 6f 70 65 6e 65 64 20 77 69 74 68 20 4f  ** opened with O
31510 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  P_OpenEphemeral 
31520 6f 72 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e  or OP_SorterOpen
31530 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73  ..*/.case OP_Res
31540 65 74 53 6f 72 74 65 72 3a 20 7b 0a 20 20 56 64  etSorter: {.  Vd
31550 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 0a  beCursor *pC;. .
31560 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
31570 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
31580 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
31590 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
315a0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
315b0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28  ( pC!=0 );.  if(
315c0 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 7b   isSorter(pC) ){
315d0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
315e0 53 6f 72 74 65 72 52 65 73 65 74 28 64 62 2c 20  SorterReset(db, 
315f0 70 43 2d 3e 75 63 2e 70 53 6f 72 74 65 72 29 3b  pC->uc.pSorter);
31600 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
31610 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
31620 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
31630 45 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  E );.    assert(
31640 20 70 43 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c   pC->isEphemeral
31650 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   );.    rc = sql
31660 69 74 65 33 42 74 72 65 65 43 6c 65 61 72 54 61  ite3BtreeClearTa
31670 62 6c 65 4f 66 43 75 72 73 6f 72 28 70 43 2d 3e  bleOfCursor(pC->
31680 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  uc.pCursor);.   
31690 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
316a0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
316b0 72 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  r;.  }.  break;.
316c0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72  }../* Opcode: Cr
316d0 65 61 74 65 42 74 72 65 65 20 50 31 20 50 32 20  eateBtree P1 P2 
316e0 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
316f0 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74 20 69  is: r[P2]=root i
31700 44 62 3d 50 31 20 66 6c 61 67 73 3d 50 33 0a 2a  Db=P1 flags=P3.*
31710 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20  *.** Allocate a 
31720 6e 65 77 20 62 2d 74 72 65 65 20 69 6e 20 74 68  new b-tree in th
31730 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
31740 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72  file if P1==0 or
31750 20 69 6e 20 74 68 65 0a 2a 2a 20 54 45 4d 50 20   in the.** TEMP 
31760 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
31770 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20   P1==1 or in an 
31780 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
31790 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 54  e if.** P1>1.  T
317a0 68 65 20 50 33 20 61 72 67 75 6d 65 6e 74 20 6d  he P3 argument m
317b0 75 73 74 20 62 65 20 31 20 28 42 54 52 45 45 5f  ust be 1 (BTREE_
317c0 49 4e 54 4b 45 59 29 20 66 6f 72 20 61 20 72 6f  INTKEY) for a ro
317d0 77 69 64 20 74 61 62 6c 65 0a 2a 2a 20 69 74 20  wid table.** it 
317e0 6d 75 73 74 20 62 65 20 32 20 28 42 54 52 45 45  must be 2 (BTREE
317f0 5f 42 4c 4f 42 4b 45 59 29 20 66 6f 72 20 61 6e  _BLOBKEY) for an
31800 20 69 6e 64 65 78 20 6f 72 20 57 49 54 48 4f 55   index or WITHOU
31810 54 20 52 4f 57 49 44 20 74 61 62 6c 65 2e 0a 2a  T ROWID table..*
31820 2a 20 54 68 65 20 72 6f 6f 74 20 70 61 67 65 20  * The root page 
31830 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65  number of the ne
31840 77 20 62 2d 74 72 65 65 20 69 73 20 73 74 6f 72  w b-tree is stor
31850 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
31860 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72  2..*/.case OP_Cr
31870 65 61 74 65 42 74 72 65 65 3a 20 7b 20 20 20 20  eateBtree: {    
31880 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
31890 0a 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 44  .  int pgno;.  D
318a0 62 20 2a 70 44 62 3b 0a 0a 20 20 73 71 6c 69 74  b *pDb;..  sqlit
318b0 65 33 56 64 62 65 49 6e 63 72 57 72 69 74 65 43  e3VdbeIncrWriteC
318c0 6f 75 6e 74 65 72 28 70 2c 20 30 29 3b 0a 20 20  ounter(p, 0);.  
318d0 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
318e0 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
318f0 20 70 67 6e 6f 20 3d 20 30 3b 0a 20 20 61 73 73   pgno = 0;.  ass
31900 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d 42 54  ert( pOp->p3==BT
31910 52 45 45 5f 49 4e 54 4b 45 59 20 7c 7c 20 70 4f  REE_INTKEY || pO
31920 70 2d 3e 70 33 3d 3d 42 54 52 45 45 5f 42 4c 4f  p->p3==BTREE_BLO
31930 42 4b 45 59 20 29 3b 0a 20 20 61 73 73 65 72 74  BKEY );.  assert
31940 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
31950 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
31960 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d  );.  assert( DbM
31970 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
31980 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29  Mask, pOp->p1) )
31990 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ;.  assert( p->r
319a0 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
319b0 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70  pDb = &db->aDb[p
319c0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
319d0 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29  t( pDb->pBt!=0 )
319e0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
319f0 42 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65  BtreeCreateTable
31a00 28 70 44 62 2d 3e 70 42 74 2c 20 26 70 67 6e 6f  (pDb->pBt, &pgno
31a10 2c 20 70 4f 70 2d 3e 70 33 29 3b 0a 20 20 69 66  , pOp->p3);.  if
31a20 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
31a30 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
31a40 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 67    pOut->u.i = pg
31a50 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  no;.  break;.}..
31a60 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 71 6c 45 78  /* Opcode: SqlEx
31a70 65 63 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  ec * * * P4 *.**
31a80 0a 2a 2a 20 52 75 6e 20 74 68 65 20 53 51 4c 20  .** Run the SQL 
31a90 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 73 74 61  statement or sta
31aa0 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65  tements specifie
31ab0 64 20 69 6e 20 74 68 65 20 50 34 20 73 74 72 69  d in the P4 stri
31ac0 6e 67 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ng..*/.case OP_S
31ad0 71 6c 45 78 65 63 3a 20 7b 0a 20 20 73 71 6c 69  qlExec: {.  sqli
31ae0 74 65 33 56 64 62 65 49 6e 63 72 57 72 69 74 65  te3VdbeIncrWrite
31af0 43 6f 75 6e 74 65 72 28 70 2c 20 30 29 3b 0a 20  Counter(p, 0);. 
31b00 20 64 62 2d 3e 6e 53 71 6c 45 78 65 63 2b 2b 3b   db->nSqlExec++;
31b10 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
31b20 65 78 65 63 28 64 62 2c 20 70 4f 70 2d 3e 70 34  exec(db, pOp->p4
31b30 2e 7a 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20  .z, 0, 0, 0);.  
31b40 64 62 2d 3e 6e 53 71 6c 45 78 65 63 2d 2d 3b 0a  db->nSqlExec--;.
31b50 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
31b60 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
31b70 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  or;.  break;.}..
31b80 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 73 65  /* Opcode: Parse
31b90 53 63 68 65 6d 61 20 50 31 20 2a 20 2a 20 50 34  Schema P1 * * P4
31ba0 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 61 6e   *.**.** Read an
31bb0 64 20 70 61 72 73 65 20 61 6c 6c 20 65 6e 74 72  d parse all entr
31bc0 69 65 73 20 66 72 6f 6d 20 74 68 65 20 53 51 4c  ies from the SQL
31bd0 49 54 45 5f 4d 41 53 54 45 52 20 74 61 62 6c 65  ITE_MASTER table
31be0 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 0a   of database P1.
31bf0 2a 2a 20 74 68 61 74 20 6d 61 74 63 68 20 74 68  ** that match th
31c00 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 50  e WHERE clause P
31c10 34 2e 20 20 49 66 20 50 34 20 69 73 20 61 20 4e  4.  If P4 is a N
31c20 55 4c 4c 20 70 6f 69 6e 74 65 72 2c 20 74 68 65  ULL pointer, the
31c30 6e 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20  n the.** entire 
31c40 73 63 68 65 6d 61 20 66 6f 72 20 50 31 20 69 73  schema for P1 is
31c50 20 72 65 70 61 72 73 65 64 2e 0a 2a 2a 0a 2a 2a   reparsed..**.**
31c60 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76   This opcode inv
31c70 6f 6b 65 73 20 74 68 65 20 70 61 72 73 65 72 20  okes the parser 
31c80 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77 20  to create a new 
31c90 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2c  virtual machine,
31ca0 0a 2a 2a 20 74 68 65 6e 20 72 75 6e 73 20 74 68  .** then runs th
31cb0 65 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61  e new virtual ma
31cc0 63 68 69 6e 65 2e 20 20 49 74 20 69 73 20 74 68  chine.  It is th
31cd0 75 73 20 61 20 72 65 2d 65 6e 74 72 61 6e 74 20  us a re-entrant 
31ce0 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20  opcode..*/.case 
31cf0 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61 3a 20  OP_ParseSchema: 
31d00 7b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 63  {.  int iDb;.  c
31d10 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d 61 73 74  onst char *zMast
31d20 65 72 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c  er;.  char *zSql
31d30 3b 0a 20 20 49 6e 69 74 44 61 74 61 20 69 6e 69  ;.  InitData ini
31d40 74 44 61 74 61 3b 0a 0a 20 20 2f 2a 20 41 6e 79  tData;..  /* Any
31d50 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
31d60 65 6e 74 20 74 68 61 74 20 69 6e 76 6f 6b 65 73  ent that invokes
31d70 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c   this opcode wil
31d80 6c 20 68 6f 6c 64 20 6d 75 74 65 78 65 73 0a 20  l hold mutexes. 
31d90 20 2a 2a 20 6f 6e 20 65 76 65 72 79 20 62 74 72   ** on every btr
31da0 65 65 2e 20 20 54 68 69 73 20 69 73 20 61 20 70  ee.  This is a p
31db0 72 65 72 65 71 75 69 73 69 74 65 20 66 6f 72 20  rerequisite for 
31dc0 69 6e 76 6f 6b 69 6e 67 20 0a 20 20 2a 2a 20 73  invoking .  ** s
31dd0 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
31de0 63 6b 28 29 2e 0a 20 20 2a 2f 0a 23 69 66 64 65  ck()..  */.#ifde
31df0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
31e00 20 66 6f 72 28 69 44 62 3d 30 3b 20 69 44 62 3c   for(iDb=0; iDb<
31e10 64 62 2d 3e 6e 44 62 3b 20 69 44 62 2b 2b 29 7b  db->nDb; iDb++){
31e20 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 44 62  .    assert( iDb
31e30 3d 3d 31 20 7c 7c 20 73 71 6c 69 74 65 33 42 74  ==1 || sqlite3Bt
31e40 72 65 65 48 6f 6c 64 73 4d 75 74 65 78 28 64 62  reeHoldsMutex(db
31e50 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 29 20  ->aDb[iDb].pBt) 
31e60 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  );.  }.#endif.. 
31e70 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a   iDb = pOp->p1;.
31e80 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30    assert( iDb>=0
31e90 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20   && iDb<db->nDb 
31ea0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 48  );.  assert( DbH
31eb0 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20 69  asProperty(db, i
31ec0 44 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61  Db, DB_SchemaLoa
31ed0 64 65 64 29 20 29 3b 0a 0a 23 69 66 6e 64 65 66  ded) );..#ifndef
31ee0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54   SQLITE_OMIT_ALT
31ef0 45 52 54 41 42 4c 45 0a 20 20 69 66 28 20 70 4f  ERTABLE.  if( pO
31f00 70 2d 3e 70 34 2e 7a 3d 3d 30 20 29 7b 0a 20 20  p->p4.z==0 ){.  
31f10 20 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 43    sqlite3SchemaC
31f20 6c 65 61 72 28 64 62 2d 3e 61 44 62 5b 69 44 62  lear(db->aDb[iDb
31f30 5d 2e 70 53 63 68 65 6d 61 29 3b 0a 20 20 20 20  ].pSchema);.    
31f40 64 62 2d 3e 6d 44 62 46 6c 61 67 73 20 26 3d 20  db->mDbFlags &= 
31f50 7e 44 42 46 4c 41 47 5f 53 63 68 65 6d 61 4b 6e  ~DBFLAG_SchemaKn
31f60 6f 77 6e 4f 6b 3b 0a 20 20 20 20 72 63 20 3d 20  ownOk;.    rc = 
31f70 73 71 6c 69 74 65 33 49 6e 69 74 4f 6e 65 28 64  sqlite3InitOne(d
31f80 62 2c 20 69 44 62 2c 20 26 70 2d 3e 7a 45 72 72  b, iDb, &p->zErr
31f90 4d 73 67 2c 20 49 4e 49 54 46 4c 41 47 5f 41 6c  Msg, INITFLAG_Al
31fa0 74 65 72 54 61 62 6c 65 29 3b 0a 20 20 20 20 64  terTable);.    d
31fb0 62 2d 3e 6d 44 62 46 6c 61 67 73 20 7c 3d 20 44  b->mDbFlags |= D
31fc0 42 46 4c 41 47 5f 53 63 68 65 6d 61 43 68 61 6e  BFLAG_SchemaChan
31fd0 67 65 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72  ge;.    p->expir
31fe0 65 64 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 0a  ed = 0;.  }else.
31ff0 23 65 6e 64 69 66 0a 20 20 7b 0a 20 20 20 20 7a  #endif.  {.    z
32000 4d 61 73 74 65 72 20 3d 20 4d 41 53 54 45 52 5f  Master = MASTER_
32010 4e 41 4d 45 3b 0a 20 20 20 20 69 6e 69 74 44 61  NAME;.    initDa
32020 74 61 2e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20  ta.db = db;.    
32030 69 6e 69 74 44 61 74 61 2e 69 44 62 20 3d 20 69  initData.iDb = i
32040 44 62 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61  Db;.    initData
32050 2e 70 7a 45 72 72 4d 73 67 20 3d 20 26 70 2d 3e  .pzErrMsg = &p->
32060 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 69 6e 69  zErrMsg;.    ini
32070 74 44 61 74 61 2e 6d 49 6e 69 74 46 6c 61 67 73  tData.mInitFlags
32080 20 3d 20 30 3b 0a 20 20 20 20 7a 53 71 6c 20 3d   = 0;.    zSql =
32090 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28   sqlite3MPrintf(
320a0 64 62 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45  db,.       "SELE
320b0 43 54 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67  CT name, rootpag
320c0 65 2c 20 73 71 6c 20 46 52 4f 4d 20 27 25 71 27  e, sql FROM '%q'
320d0 2e 25 73 20 57 48 45 52 45 20 25 73 20 4f 52 44  .%s WHERE %s ORD
320e0 45 52 20 42 59 20 72 6f 77 69 64 22 2c 0a 20 20  ER BY rowid",.  
320f0 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 69 44 62       db->aDb[iDb
32100 5d 2e 7a 44 62 53 4e 61 6d 65 2c 20 7a 4d 61 73  ].zDbSName, zMas
32110 74 65 72 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  ter, pOp->p4.z);
32120 0a 20 20 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30  .    if( zSql==0
32130 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   ){.      rc = S
32140 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54  QLITE_NOMEM_BKPT
32150 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
32160 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 69     assert( db->i
32170 6e 69 74 2e 62 75 73 79 3d 3d 30 20 29 3b 0a 20  nit.busy==0 );. 
32180 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75       db->init.bu
32190 73 79 20 3d 20 31 3b 0a 20 20 20 20 20 20 69 6e  sy = 1;.      in
321a0 69 74 44 61 74 61 2e 72 63 20 3d 20 53 51 4c 49  itData.rc = SQLI
321b0 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 69 6e 69  TE_OK;.      ini
321c0 74 44 61 74 61 2e 6e 49 6e 69 74 52 6f 77 20 3d  tData.nInitRow =
321d0 20 30 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   0;.      assert
321e0 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  ( !db->mallocFai
321f0 6c 65 64 20 29 3b 0a 20 20 20 20 20 20 72 63 20  led );.      rc 
32200 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64  = sqlite3_exec(d
32210 62 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33  b, zSql, sqlite3
32220 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69  InitCallback, &i
32230 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a 20 20 20  nitData, 0);.   
32240 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
32250 45 5f 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69 74  E_OK ) rc = init
32260 44 61 74 61 2e 72 63 3b 0a 20 20 20 20 20 20 69  Data.rc;.      i
32270 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
32280 20 26 26 20 69 6e 69 74 44 61 74 61 2e 6e 49 6e   && initData.nIn
32290 69 74 52 6f 77 3d 3d 30 20 29 7b 0a 20 20 20 20  itRow==0 ){.    
322a0 20 20 20 20 2f 2a 20 54 68 65 20 4f 50 5f 50 61      /* The OP_Pa
322b0 72 73 65 53 63 68 65 6d 61 20 6f 70 63 6f 64 65  rseSchema opcode
322c0 20 77 69 74 68 20 61 20 6e 6f 6e 2d 4e 55 4c 4c   with a non-NULL
322d0 20 50 34 20 61 72 67 75 6d 65 6e 74 20 73 68 6f   P4 argument sho
322e0 75 6c 64 20 70 61 72 73 65 0a 20 20 20 20 20 20  uld parse.      
322f0 20 20 2a 2a 20 61 74 20 6c 65 61 73 74 20 6f 6e    ** at least on
32300 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e  e SQL statement.
32310 20 41 6e 79 20 6c 65 73 73 20 74 68 61 6e 20 74   Any less than t
32320 68 61 74 20 69 6e 64 69 63 61 74 65 73 20 74 68  hat indicates th
32330 61 74 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68  at.        ** th
32340 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  e sqlite_master 
32350 74 61 62 6c 65 20 69 73 20 63 6f 72 72 75 70 74  table is corrupt
32360 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 63 20  . */.        rc 
32370 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  = SQLITE_CORRUPT
32380 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 7d 0a 20  _BKPT;.      }. 
32390 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
323a0 65 65 4e 4e 28 64 62 2c 20 7a 53 71 6c 29 3b 0a  eeNN(db, zSql);.
323b0 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62        db->init.b
323c0 75 73 79 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20  usy = 0;.    }. 
323d0 20 7d 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20   }.  if( rc ){. 
323e0 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 41     sqlite3ResetA
323f0 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65  llSchemasOfConne
32400 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 20 20 69  ction(db);.    i
32410 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f  f( rc==SQLITE_NO
32420 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  MEM ){.      got
32430 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a  o no_mem;.    }.
32440 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
32450 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
32460 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23  .  break;  .}..#
32470 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
32480 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29  TE_OMIT_ANALYZE)
32490 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f 61 64  ./* Opcode: Load
324a0 41 6e 61 6c 79 73 69 73 20 50 31 20 2a 20 2a 20  Analysis P1 * * 
324b0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 74  * *.**.** Read t
324c0 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20  he sqlite_stat1 
324d0 74 61 62 6c 65 20 66 6f 72 20 64 61 74 61 62 61  table for databa
324e0 73 65 20 50 31 20 61 6e 64 20 6c 6f 61 64 20 74  se P1 and load t
324f0 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66  he content.** of
32500 20 74 68 61 74 20 74 61 62 6c 65 20 69 6e 74 6f   that table into
32510 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 69 6e   the internal in
32520 64 65 78 20 68 61 73 68 20 74 61 62 6c 65 2e 20  dex hash table. 
32530 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65   This will cause
32540 0a 2a 2a 20 74 68 65 20 61 6e 61 6c 79 73 69 73  .** the analysis
32550 20 74 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e   to be used when
32560 20 70 72 65 70 61 72 69 6e 67 20 61 6c 6c 20 73   preparing all s
32570 75 62 73 65 71 75 65 6e 74 20 71 75 65 72 69 65  ubsequent querie
32580 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f  s..*/.case OP_Lo
32590 61 64 41 6e 61 6c 79 73 69 73 3a 20 7b 0a 20 20  adAnalysis: {.  
325a0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
325b0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
325c0 2d 3e 6e 44 62 20 29 3b 0a 20 20 72 63 20 3d 20  ->nDb );.  rc = 
325d0 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c  sqlite3AnalysisL
325e0 6f 61 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29  oad(db, pOp->p1)
325f0 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
32600 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
32610 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 20 20  rror;.  break;  
32620 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65  .}.#endif /* !de
32630 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
32640 54 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f 0a 0a 2f  T_ANALYZE) */../
32650 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 61  * Opcode: DropTa
32660 62 6c 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ble P1 * * P4 *.
32670 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65  **.** Remove the
32680 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65   internal (in-me
32690 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63  mory) data struc
326a0 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72  tures that descr
326b0 69 62 65 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65  ibe.** the table
326c0 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74   named P4 in dat
326d0 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20  abase P1.  This 
326e0 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20  is called after 
326f0 61 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 64 72  a table.** is dr
32700 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73 6b 20  opped from disk 
32710 28 75 73 69 6e 67 20 74 68 65 20 44 65 73 74 72  (using the Destr
32720 6f 79 20 6f 70 63 6f 64 65 29 20 69 6e 20 6f 72  oy opcode) in or
32730 64 65 72 20 74 6f 20 6b 65 65 70 20 0a 2a 2a 20  der to keep .** 
32740 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70  the internal rep
32750 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
32760 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e  he.** schema con
32770 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61  sistent with wha
32780 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f  t is on disk..*/
32790 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 61 62  .case OP_DropTab
327a0 6c 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 56  le: {.  sqlite3V
327b0 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e  dbeIncrWriteCoun
327c0 74 65 72 28 70 2c 20 30 29 3b 0a 20 20 73 71 6c  ter(p, 0);.  sql
327d0 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
327e0 65 74 65 54 61 62 6c 65 28 64 62 2c 20 70 4f 70  eteTable(db, pOp
327f0 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ->p1, pOp->p4.z)
32800 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
32810 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 49 6e 64   Opcode: DropInd
32820 65 78 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  ex P1 * * P4 *.*
32830 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20  *.** Remove the 
32840 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d  internal (in-mem
32850 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74  ory) data struct
32860 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69  ures that descri
32870 62 65 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20  be.** the index 
32880 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61  named P4 in data
32890 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69  base P1.  This i
328a0 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61  s called after a
328b0 6e 20 69 6e 64 65 78 0a 2a 2a 20 69 73 20 64 72  n index.** is dr
328c0 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73 6b 20  opped from disk 
328d0 28 75 73 69 6e 67 20 74 68 65 20 44 65 73 74 72  (using the Destr
328e0 6f 79 20 6f 70 63 6f 64 65 29 0a 2a 2a 20 69 6e  oy opcode).** in
328f0 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 74   order to keep t
32900 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72  he internal repr
32910 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
32920 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73  e.** schema cons
32930 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74  istent with what
32940 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a   is on disk..*/.
32950 63 61 73 65 20 4f 50 5f 44 72 6f 70 49 6e 64 65  case OP_DropInde
32960 78 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 56 64  x: {.  sqlite3Vd
32970 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e 74  beIncrWriteCount
32980 65 72 28 70 2c 20 30 29 3b 0a 20 20 73 71 6c 69  er(p, 0);.  sqli
32990 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
329a0 74 65 49 6e 64 65 78 28 64 62 2c 20 70 4f 70 2d  teIndex(db, pOp-
329b0 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  >p1, pOp->p4.z);
329c0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
329d0 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 72 69 67  Opcode: DropTrig
329e0 67 65 72 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ger P1 * * P4 *.
329f0 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65  **.** Remove the
32a00 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65   internal (in-me
32a10 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63  mory) data struc
32a20 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72  tures that descr
32a30 69 62 65 0a 2a 2a 20 74 68 65 20 74 72 69 67 67  ibe.** the trigg
32a40 65 72 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64  er named P4 in d
32a50 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69  atabase P1.  Thi
32a60 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65  s is called afte
32a70 72 20 61 20 74 72 69 67 67 65 72 0a 2a 2a 20 69  r a trigger.** i
32a80 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 64  s dropped from d
32a90 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65 20 44  isk (using the D
32aa0 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29 20 69  estroy opcode) i
32ab0 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20  n order to keep 
32ac0 0a 2a 2a 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  .** the internal
32ad0 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
32ae0 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61  of the.** schema
32af0 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68   consistent with
32b00 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b   what is on disk
32b10 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f  ..*/.case OP_Dro
32b20 70 54 72 69 67 67 65 72 3a 20 7b 0a 20 20 73 71  pTrigger: {.  sq
32b30 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57 72 69  lite3VdbeIncrWri
32b40 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 30 29 3b  teCounter(p, 0);
32b50 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  .  sqlite3Unlink
32b60 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72  AndDeleteTrigger
32b70 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
32b80 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61  p->p4.z);.  brea
32b90 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53  k;.}...#ifndef S
32ba0 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47  QLITE_OMIT_INTEG
32bb0 52 49 54 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70  RITY_CHECK./* Op
32bc0 63 6f 64 65 3a 20 49 6e 74 65 67 72 69 74 79 43  code: IntegrityC
32bd0 6b 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  k P1 P2 P3 P4 P5
32be0 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e 61  .**.** Do an ana
32bf0 6c 79 73 69 73 20 6f 66 20 74 68 65 20 63 75 72  lysis of the cur
32c00 72 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61 74 61  rently open data
32c10 62 61 73 65 2e 20 20 53 74 6f 72 65 20 69 6e 0a  base.  Store in.
32c20 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 74  ** register P1 t
32c30 68 65 20 74 65 78 74 20 6f 66 20 61 6e 20 65 72  he text of an er
32c40 72 6f 72 20 6d 65 73 73 61 67 65 20 64 65 73 63  ror message desc
32c50 72 69 62 69 6e 67 20 61 6e 79 20 70 72 6f 62 6c  ribing any probl
32c60 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70 72  ems..** If no pr
32c70 6f 62 6c 65 6d 73 20 61 72 65 20 66 6f 75 6e 64  oblems are found
32c80 2c 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69  , store a NULL i
32c90 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
32ca0 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65  *.** The registe
32cb0 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 6f 6e  r P3 contains on
32cc0 65 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20  e less than the 
32cd0 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f  maximum number o
32ce0 66 20 61 6c 6c 6f 77 65 64 20 65 72 72 6f 72 73  f allowed errors
32cf0 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74 20 72 65 67  ..** At most reg
32d00 28 50 33 29 20 65 72 72 6f 72 73 20 77 69 6c 6c  (P3) errors will
32d10 20 62 65 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a   be reported..**
32d20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
32d30 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20 73 74   the analysis st
32d40 6f 70 73 20 61 73 20 73 6f 6f 6e 20 61 73 20 72  ops as soon as r
32d50 65 67 28 50 31 29 20 65 72 72 6f 72 73 20 61 72  eg(P1) errors ar
32d60 65 20 0a 2a 2a 20 73 65 65 6e 2e 20 20 52 65 67  e .** seen.  Reg
32d70 28 50 31 29 20 69 73 20 75 70 64 61 74 65 64 20  (P1) is updated 
32d80 77 69 74 68 20 74 68 65 20 6e 75 6d 62 65 72 20  with the number 
32d90 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e  of errors remain
32da0 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72  ing..**.** The r
32db0 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 73  oot page numbers
32dc0 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73 20 69   of all tables i
32dd0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  n the database a
32de0 72 65 20 69 6e 74 65 67 65 72 73 0a 2a 2a 20 73  re integers.** s
32df0 74 6f 72 65 64 20 69 6e 20 50 34 5f 49 4e 54 41  tored in P4_INTA
32e00 52 52 41 59 20 61 72 67 75 6d 65 6e 74 2e 0a 2a  RRAY argument..*
32e10 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f  *.** If P5 is no
32e20 74 20 7a 65 72 6f 2c 20 74 68 65 20 63 68 65 63  t zero, the chec
32e30 6b 20 69 73 20 64 6f 6e 65 20 6f 6e 20 74 68 65  k is done on the
32e40 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
32e50 61 73 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74  ase.** file, not
32e60 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
32e70 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54  se file..**.** T
32e80 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73  his opcode is us
32e90 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20  ed to implement 
32ea0 74 68 65 20 69 6e 74 65 67 72 69 74 79 5f 63 68  the integrity_ch
32eb0 65 63 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63  eck pragma..*/.c
32ec0 61 73 65 20 4f 50 5f 49 6e 74 65 67 72 69 74 79  ase OP_Integrity
32ed0 43 6b 3a 20 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f  Ck: {.  int nRoo
32ee0 74 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  t;      /* Numbe
32ef0 72 20 6f 66 20 74 61 62 6c 65 73 20 74 6f 20 63  r of tables to c
32f00 68 65 63 6b 2e 20 20 28 4e 75 6d 62 65 72 20 6f  heck.  (Number o
32f10 66 20 72 6f 6f 74 20 70 61 67 65 73 2e 29 20 2a  f root pages.) *
32f20 2f 0a 20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b 20  /.  int *aRoot; 
32f30 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20      /* Array of 
32f40 72 6f 6f 74 70 61 67 65 20 6e 75 6d 62 65 72 73  rootpage numbers
32f50 20 66 6f 72 20 74 61 62 6c 65 73 20 74 6f 20 62   for tables to b
32f60 65 20 63 68 65 63 6b 65 64 20 2a 2f 0a 20 20 69  e checked */.  i
32f70 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 2f  nt nErr;       /
32f80 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  * Number of erro
32f90 72 73 20 72 65 70 6f 72 74 65 64 20 2a 2f 0a 20  rs reported */. 
32fa0 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 20 20   char *z;       
32fb0 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20   /* Text of the 
32fc0 65 72 72 6f 72 20 72 65 70 6f 72 74 20 2a 2f 0a  error report */.
32fd0 20 20 4d 65 6d 20 2a 70 6e 45 72 72 3b 20 20 20    Mem *pnErr;   
32fe0 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 6b 65    /* Register ke
32ff0 65 70 69 6e 67 20 74 72 61 63 6b 20 6f 66 20 65  eping track of e
33000 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 20  rrors remaining 
33010 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  */..  assert( p-
33020 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20  >bIsReader );.  
33030 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 32 3b  nRoot = pOp->p2;
33040 0a 20 20 61 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e  .  aRoot = pOp->
33050 70 34 2e 61 69 3b 0a 20 20 61 73 73 65 72 74 28  p4.ai;.  assert(
33060 20 6e 52 6f 6f 74 3e 30 20 29 3b 0a 20 20 61 73   nRoot>0 );.  as
33070 73 65 72 74 28 20 61 52 6f 6f 74 5b 30 5d 3d 3d  sert( aRoot[0]==
33080 6e 52 6f 6f 74 20 29 3b 0a 20 20 61 73 73 65 72  nRoot );.  asser
33090 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
330a0 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
330b0 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
330c0 29 20 29 3b 0a 20 20 70 6e 45 72 72 20 3d 20 26  ) );.  pnErr = &
330d0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
330e0 20 61 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d   assert( (pnErr-
330f0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
33100 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )!=0 );.  assert
33110 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20  ( (pnErr->flags 
33120 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
33130 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 70 49  lob))==0 );.  pI
33140 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
33150 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
33160 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62 20 29  Op->p5<db->nDb )
33170 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61  ;.  assert( DbMa
33180 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
33190 61 73 6b 2c 20 70 4f 70 2d 3e 70 35 29 20 29 3b  ask, pOp->p5) );
331a0 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 42 74  .  z = sqlite3Bt
331b0 72 65 65 49 6e 74 65 67 72 69 74 79 43 68 65 63  reeIntegrityChec
331c0 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  k(db->aDb[pOp->p
331d0 35 5d 2e 70 42 74 2c 20 26 61 52 6f 6f 74 5b 31  5].pBt, &aRoot[1
331e0 5d 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20 20 20 20  ], nRoot,.      
331f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33200 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29             (int)
33210 70 6e 45 72 72 2d 3e 75 2e 69 2b 31 2c 20 26 6e  pnErr->u.i+1, &n
33220 45 72 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  Err);.  sqlite3V
33230 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49  dbeMemSetNull(pI
33240 6e 31 29 3b 0a 20 20 69 66 28 20 6e 45 72 72 3d  n1);.  if( nErr=
33250 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  =0 ){.    assert
33260 28 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c 73  ( z==0 );.  }els
33270 65 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20  e if( z==0 ){.  
33280 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
33290 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 6e 45 72   }else{.    pnEr
332a0 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72 2d 31  r->u.i -= nErr-1
332b0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
332c0 65 4d 65 6d 53 65 74 53 74 72 28 70 49 6e 31 2c  eMemSetStr(pIn1,
332d0 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55   z, -1, SQLITE_U
332e0 54 46 38 2c 20 73 71 6c 69 74 65 33 5f 66 72 65  TF8, sqlite3_fre
332f0 65 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54 45  e);.  }.  UPDATE
33300 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49  _MAX_BLOBSIZE(pI
33310 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n1);.  sqlite3Vd
33320 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
33330 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29  (pIn1, encoding)
33340 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
33350 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
33360 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  IT_INTEGRITY_CHE
33370 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  CK */../* Opcode
33380 3a 20 52 6f 77 53 65 74 41 64 64 20 50 31 20 50  : RowSetAdd P1 P
33390 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
333a0 73 69 73 3a 20 72 6f 77 73 65 74 28 50 31 29 3d  sis: rowset(P1)=
333b0 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 49 6e 73 65  r[P2].**.** Inse
333c0 72 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  rt the integer v
333d0 61 6c 75 65 20 68 65 6c 64 20 62 79 20 72 65 67  alue held by reg
333e0 69 73 74 65 72 20 50 32 20 69 6e 74 6f 20 61 20  ister P2 into a 
333f0 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 0a 2a 2a  RowSet object.**
33400 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73 74 65   held in registe
33410 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 61  r P1..**.** An a
33420 73 73 65 72 74 69 6f 6e 20 66 61 69 6c 73 20 69  ssertion fails i
33430 66 20 50 32 20 69 73 20 6e 6f 74 20 61 6e 20 69  f P2 is not an i
33440 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20  nteger..*/.case 
33450 4f 50 5f 52 6f 77 53 65 74 41 64 64 3a 20 7b 20  OP_RowSetAdd: { 
33460 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 69 6e        /* in1, in
33470 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  2 */.  pIn1 = &a
33480 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
33490 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
334a0 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
334b0 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20   (pIn2->flags & 
334c0 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20  MEM_Int)!=0 );. 
334d0 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
334e0 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30  s & MEM_Blob)==0
334f0 20 29 7b 0a 20 20 20 20 69 66 28 20 73 71 6c 69   ){.    if( sqli
33500 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77  te3VdbeMemSetRow
33510 53 65 74 28 70 49 6e 31 29 20 29 20 67 6f 74 6f  Set(pIn1) ) goto
33520 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61   no_mem;.  }.  a
33530 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64  ssert( sqlite3Vd
33540 62 65 4d 65 6d 49 73 52 6f 77 53 65 74 28 70 49  beMemIsRowSet(pI
33550 6e 31 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  n1) );.  sqlite3
33560 52 6f 77 53 65 74 49 6e 73 65 72 74 28 28 52 6f  RowSetInsert((Ro
33570 77 53 65 74 2a 29 70 49 6e 31 2d 3e 7a 2c 20 70  wSet*)pIn1->z, p
33580 49 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65  In2->u.i);.  bre
33590 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
335a0 3a 20 52 6f 77 53 65 74 52 65 61 64 20 50 31 20  : RowSetRead P1 
335b0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
335c0 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 6f 77  opsis: r[P3]=row
335d0 73 65 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20 45 78  set(P1).**.** Ex
335e0 74 72 61 63 74 20 74 68 65 20 73 6d 61 6c 6c 65  tract the smalle
335f0 73 74 20 76 61 6c 75 65 20 66 72 6f 6d 20 74 68  st value from th
33600 65 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20  e RowSet object 
33610 69 6e 20 50 31 0a 2a 2a 20 61 6e 64 20 70 75 74  in P1.** and put
33620 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f   that value into
33630 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
33640 20 4f 72 2c 20 69 66 20 52 6f 77 53 65 74 20 6f   Or, if RowSet o
33650 62 6a 65 63 74 20 50 31 20 69 73 20 69 6e 69 74  bject P1 is init
33660 69 61 6c 6c 79 20 65 6d 70 74 79 2c 20 6c 65 61  ially empty, lea
33670 76 65 20 50 33 0a 2a 2a 20 75 6e 63 68 61 6e 67  ve P3.** unchang
33680 65 64 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 69  ed and jump to i
33690 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a  nstruction P2..*
336a0 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74  /.case OP_RowSet
336b0 52 65 61 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a  Read: {       /*
336c0 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 6f 75 74 33   jump, in1, out3
336d0 20 2a 2f 0a 20 20 69 36 34 20 76 61 6c 3b 0a 0a   */.  i64 val;..
336e0 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
336f0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
33700 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  t( (pIn1->flags 
33710 26 20 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 7c  & MEM_Blob)==0 |
33720 7c 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  | sqlite3VdbeMem
33730 49 73 52 6f 77 53 65 74 28 70 49 6e 31 29 20 29  IsRowSet(pIn1) )
33740 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
33750 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29  lags & MEM_Blob)
33760 3d 3d 30 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74  ==0 .   || sqlit
33770 65 33 52 6f 77 53 65 74 4e 65 78 74 28 28 52 6f  e3RowSetNext((Ro
33780 77 53 65 74 2a 29 70 49 6e 31 2d 3e 7a 2c 20 26  wSet*)pIn1->z, &
33790 76 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20 20 20  val)==0.  ){.   
337a0 20 2f 2a 20 54 68 65 20 62 6f 6f 6c 65 61 6e 20   /* The boolean 
337b0 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 2a  index is empty *
337c0 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  /.    sqlite3Vdb
337d0 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31  eMemSetNull(pIn1
337e0 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  );.    VdbeBranc
337f0 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a 20 20 20  hTaken(1,2);.   
33800 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
33810 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69  _and_check_for_i
33820 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d 65 6c 73  nterrupt;.  }els
33830 65 7b 0a 20 20 20 20 2f 2a 20 41 20 76 61 6c 75  e{.    /* A valu
33840 65 20 77 61 73 20 70 75 6c 6c 65 64 20 66 72 6f  e was pulled fro
33850 6d 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20  m the index */. 
33860 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
33870 65 6e 28 30 2c 32 29 3b 0a 20 20 20 20 73 71 6c  en(0,2);.    sql
33880 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
33890 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t64(&aMem[pOp->p
338a0 33 5d 2c 20 76 61 6c 29 3b 0a 20 20 7d 0a 20 20  3], val);.  }.  
338b0 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69  goto check_for_i
338c0 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20  nterrupt;.}../* 
338d0 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 54 65  Opcode: RowSetTe
338e0 73 74 20 50 31 20 50 32 20 50 33 20 50 34 0a 2a  st P1 P2 P3 P4.*
338f0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
33900 5b 50 33 5d 20 69 6e 20 72 6f 77 73 65 74 28 50  [P3] in rowset(P
33910 31 29 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  1) goto P2.**.**
33920 20 52 65 67 69 73 74 65 72 20 50 33 20 69 73 20   Register P3 is 
33930 61 73 73 75 6d 65 64 20 74 6f 20 68 6f 6c 64 20  assumed to hold 
33940 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72  a 64-bit integer
33950 20 76 61 6c 75 65 2e 20 49 66 20 72 65 67 69 73   value. If regis
33960 74 65 72 20 50 31 0a 2a 2a 20 63 6f 6e 74 61 69  ter P1.** contai
33970 6e 73 20 61 20 52 6f 77 53 65 74 20 6f 62 6a 65  ns a RowSet obje
33980 63 74 20 61 6e 64 20 74 68 61 74 20 52 6f 77 53  ct and that RowS
33990 65 74 20 6f 62 6a 65 63 74 20 63 6f 6e 74 61 69  et object contai
339a0 6e 73 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20  ns.** the value 
339b0 68 65 6c 64 20 69 6e 20 50 33 2c 20 6a 75 6d 70  held in P3, jump
339c0 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e   to register P2.
339d0 20 4f 74 68 65 72 77 69 73 65 2c 20 69 6e 73 65   Otherwise, inse
339e0 72 74 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65  rt the.** intege
339f0 72 20 69 6e 20 50 33 20 69 6e 74 6f 20 74 68 65  r in P3 into the
33a00 20 52 6f 77 53 65 74 20 61 6e 64 20 63 6f 6e 74   RowSet and cont
33a10 69 6e 75 65 20 6f 6e 20 74 6f 20 74 68 65 0a 2a  inue on to the.*
33a20 2a 20 6e 65 78 74 20 6f 70 63 6f 64 65 2e 0a 2a  * next opcode..*
33a30 2a 0a 2a 2a 20 54 68 65 20 52 6f 77 53 65 74 20  *.** The RowSet 
33a40 6f 62 6a 65 63 74 20 69 73 20 6f 70 74 69 6d 69  object is optimi
33a50 7a 65 64 20 66 6f 72 20 74 68 65 20 63 61 73 65  zed for the case
33a60 20 77 68 65 72 65 20 73 65 74 73 20 6f 66 20 69   where sets of i
33a70 6e 74 65 67 65 72 73 0a 2a 2a 20 61 72 65 20 69  ntegers.** are i
33a80 6e 73 65 72 74 65 64 20 69 6e 20 64 69 73 74 69  nserted in disti
33a90 6e 63 74 20 70 68 61 73 65 73 2c 20 77 68 69 63  nct phases, whic
33aa0 68 20 65 61 63 68 20 73 65 74 20 63 6f 6e 74 61  h each set conta
33ab0 69 6e 73 20 6e 6f 20 64 75 70 6c 69 63 61 74 65  ins no duplicate
33ac0 73 2e 0a 2a 2a 20 45 61 63 68 20 73 65 74 20 69  s..** Each set i
33ad0 73 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  s identified by 
33ae0 61 20 75 6e 69 71 75 65 20 50 34 20 76 61 6c 75  a unique P4 valu
33af0 65 2e 20 54 68 65 20 66 69 72 73 74 20 73 65 74  e. The first set
33b00 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65 20 50 34  .** must have P4
33b10 3d 3d 30 2c 20 74 68 65 20 66 69 6e 61 6c 20 73  ==0, the final s
33b20 65 74 20 6d 75 73 74 20 68 61 76 65 20 50 34 3d  et must have P4=
33b30 3d 2d 31 2c 20 61 6e 64 20 66 6f 72 20 61 6c 6c  =-1, and for all
33b40 20 6f 74 68 65 72 20 73 65 74 73 0a 2a 2a 20 6d   other sets.** m
33b50 75 73 74 20 68 61 76 65 20 50 34 3e 30 2e 0a 2a  ust have P4>0..*
33b60 2a 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77 73  *.** This allows
33b70 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 3a 20   optimizations: 
33b80 28 61 29 20 77 68 65 6e 20 50 34 3d 3d 30 20 74  (a) when P4==0 t
33b90 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20  here is no need 
33ba0 74 6f 20 74 65 73 74 0a 2a 2a 20 74 68 65 20 52  to test.** the R
33bb0 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 66 6f 72  owSet object for
33bc0 20 50 33 2c 20 61 73 20 69 74 20 69 73 20 67 75   P3, as it is gu
33bd0 61 72 61 6e 74 65 65 64 20 6e 6f 74 20 74 6f 20  aranteed not to 
33be0 63 6f 6e 74 61 69 6e 20 69 74 2c 0a 2a 2a 20 28  contain it,.** (
33bf0 62 29 20 77 68 65 6e 20 50 34 3d 3d 2d 31 20 74  b) when P4==-1 t
33c00 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20  here is no need 
33c10 74 6f 20 69 6e 73 65 72 74 20 74 68 65 20 76 61  to insert the va
33c20 6c 75 65 2c 20 61 73 20 69 74 20 77 69 6c 6c 0a  lue, as it will.
33c30 2a 2a 20 6e 65 76 65 72 20 62 65 20 74 65 73 74  ** never be test
33c40 65 64 20 66 6f 72 2c 20 61 6e 64 20 28 63 29 20  ed for, and (c) 
33c50 77 68 65 6e 20 61 20 76 61 6c 75 65 20 74 68 61  when a value tha
33c60 74 20 69 73 20 70 61 72 74 20 6f 66 20 73 65 74  t is part of set
33c70 20 58 20 69 73 0a 2a 2a 20 69 6e 73 65 72 74 65   X is.** inserte
33c80 64 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e  d, there is no n
33c90 65 65 64 20 74 6f 20 73 65 61 72 63 68 20 74 6f  eed to search to
33ca0 20 73 65 65 20 69 66 20 74 68 65 20 73 61 6d 65   see if the same
33cb0 20 76 61 6c 75 65 20 77 61 73 0a 2a 2a 20 70 72   value was.** pr
33cc0 65 76 69 6f 75 73 6c 79 20 69 6e 73 65 72 74 65  eviously inserte
33cd0 64 20 61 73 20 70 61 72 74 20 6f 66 20 73 65 74  d as part of set
33ce0 20 58 20 28 6f 6e 6c 79 20 69 66 20 69 74 20 77   X (only if it w
33cf0 61 73 20 70 72 65 76 69 6f 75 73 6c 79 0a 2a 2a  as previously.**
33d00 20 69 6e 73 65 72 74 65 64 20 61 73 20 70 61 72   inserted as par
33d10 74 20 6f 66 20 73 6f 6d 65 20 6f 74 68 65 72 20  t of some other 
33d20 73 65 74 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  set)..*/.case OP
33d30 5f 52 6f 77 53 65 74 54 65 73 74 3a 20 7b 20 20  _RowSetTest: {  
33d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33d50 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c     /* jump, in1,
33d60 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 53   in3 */.  int iS
33d70 65 74 3b 0a 20 20 69 6e 74 20 65 78 69 73 74 73  et;.  int exists
33d80 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  ;..  pIn1 = &aMe
33d90 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49  m[pOp->p1];.  pI
33da0 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
33db0 70 33 5d 3b 0a 20 20 69 53 65 74 20 3d 20 70 4f  p3];.  iSet = pO
33dc0 70 2d 3e 70 34 2e 69 3b 0a 20 20 61 73 73 65 72  p->p4.i;.  asser
33dd0 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d  t( pIn3->flags&M
33de0 45 4d 5f 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20  EM_Int );..  /* 
33df0 49 66 20 74 68 65 72 65 20 69 73 20 61 6e 79 74  If there is anyt
33e00 68 69 6e 67 20 6f 74 68 65 72 20 74 68 61 6e 20  hing other than 
33e10 61 20 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20  a rowset object 
33e20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50  in memory cell P
33e30 31 2c 0a 20 20 2a 2a 20 64 65 6c 65 74 65 20 69  1,.  ** delete i
33e40 74 20 6e 6f 77 20 61 6e 64 20 69 6e 69 74 69 61  t now and initia
33e50 6c 69 7a 65 20 50 31 20 77 69 74 68 20 61 6e 20  lize P1 with an 
33e60 65 6d 70 74 79 20 72 6f 77 73 65 74 0a 20 20 2a  empty rowset.  *
33e70 2f 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  /.  if( (pIn1->f
33e80 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29  lags & MEM_Blob)
33e90 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 73  ==0 ){.    if( s
33ea0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
33eb0 52 6f 77 53 65 74 28 70 49 6e 31 29 20 29 20 67  RowSet(pIn1) ) g
33ec0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
33ed0 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
33ee0 33 56 64 62 65 4d 65 6d 49 73 52 6f 77 53 65 74  3VdbeMemIsRowSet
33ef0 28 70 49 6e 31 29 20 29 3b 0a 20 20 61 73 73 65  (pIn1) );.  asse
33f00 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
33f10 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 61  =P4_INT32 );.  a
33f20 73 73 65 72 74 28 20 69 53 65 74 3d 3d 2d 31 20  ssert( iSet==-1 
33f30 7c 7c 20 69 53 65 74 3e 3d 30 20 29 3b 0a 20 20  || iSet>=0 );.  
33f40 69 66 28 20 69 53 65 74 20 29 7b 0a 20 20 20 20  if( iSet ){.    
33f50 65 78 69 73 74 73 20 3d 20 73 71 6c 69 74 65 33  exists = sqlite3
33f60 52 6f 77 53 65 74 54 65 73 74 28 28 52 6f 77 53  RowSetTest((RowS
33f70 65 74 2a 29 70 49 6e 31 2d 3e 7a 2c 20 69 53 65  et*)pIn1->z, iSe
33f80 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20  t, pIn3->u.i);. 
33f90 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
33fa0 65 6e 28 65 78 69 73 74 73 21 3d 30 2c 32 29 3b  en(exists!=0,2);
33fb0 0a 20 20 20 20 69 66 28 20 65 78 69 73 74 73 20  .    if( exists 
33fc0 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
33fd0 32 3b 0a 20 20 7d 0a 20 20 69 66 28 20 69 53 65  2;.  }.  if( iSe
33fe0 74 3e 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  t>=0 ){.    sqli
33ff0 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28  te3RowSetInsert(
34000 28 52 6f 77 53 65 74 2a 29 70 49 6e 31 2d 3e 7a  (RowSet*)pIn1->z
34010 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20  , pIn3->u.i);.  
34020 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23  }.  break;.}...#
34030 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
34040 49 54 5f 54 52 49 47 47 45 52 0a 0a 2f 2a 20 4f  IT_TRIGGER../* O
34050 70 63 6f 64 65 3a 20 50 72 6f 67 72 61 6d 20 50  pcode: Program P
34060 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
34070 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20  .** Execute the 
34080 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20  trigger program 
34090 70 61 73 73 65 64 20 61 73 20 50 34 20 28 74 79  passed as P4 (ty
340a0 70 65 20 50 34 5f 53 55 42 50 52 4f 47 52 41 4d  pe P4_SUBPROGRAM
340b0 29 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e  ). .**.** P1 con
340c0 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73  tains the addres
340d0 73 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 20  s of the memory 
340e0 63 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61 69  cell that contai
340f0 6e 73 20 74 68 65 20 66 69 72 73 74 20 6d 65 6d  ns the first mem
34100 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20  ory .** cell in 
34110 61 6e 20 61 72 72 61 79 20 6f 66 20 76 61 6c 75  an array of valu
34120 65 73 20 75 73 65 64 20 61 73 20 61 72 67 75 6d  es used as argum
34130 65 6e 74 73 20 74 6f 20 74 68 65 20 73 75 62 2d  ents to the sub-
34140 70 72 6f 67 72 61 6d 2e 20 50 32 20 0a 2a 2a 20  program. P2 .** 
34150 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64  contains the add
34160 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20  ress to jump to 
34170 69 66 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  if the sub-progr
34180 61 6d 20 74 68 72 6f 77 73 20 61 6e 20 49 47 4e  am throws an IGN
34190 4f 52 45 20 0a 2a 2a 20 65 78 63 65 70 74 69 6f  ORE .** exceptio
341a0 6e 20 75 73 69 6e 67 20 74 68 65 20 52 41 49 53  n using the RAIS
341b0 45 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 52 65  E() function. Re
341c0 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69  gister P3 contai
341d0 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20 0a  ns the address .
341e0 2a 2a 20 6f 66 20 61 20 6d 65 6d 6f 72 79 20 63  ** of a memory c
341f0 65 6c 6c 20 69 6e 20 74 68 69 73 20 28 74 68 65  ell in this (the
34200 20 70 61 72 65 6e 74 29 20 56 4d 20 74 68 61 74   parent) VM that
34210 20 69 73 20 75 73 65 64 20 74 6f 20 61 6c 6c 6f   is used to allo
34220 63 61 74 65 20 74 68 65 20 0a 2a 2a 20 6d 65 6d  cate the .** mem
34230 6f 72 79 20 72 65 71 75 69 72 65 64 20 62 79 20  ory required by 
34240 74 68 65 20 73 75 62 2d 76 64 62 65 20 61 74 20  the sub-vdbe at 
34250 72 75 6e 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50  runtime..**.** P
34260 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
34270 6f 20 74 68 65 20 56 4d 20 63 6f 6e 74 61 69 6e  o the VM contain
34280 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20  ing the trigger 
34290 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49  program..**.** I
342a0 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P5 is non-zero
342b0 2c 20 74 68 65 6e 20 72 65 63 75 72 73 69 76 65  , then recursive
342c0 20 70 72 6f 67 72 61 6d 20 69 6e 76 6f 63 61 74   program invocat
342d0 69 6f 6e 20 69 73 20 65 6e 61 62 6c 65 64 2e 0a  ion is enabled..
342e0 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 6f 67 72  */.case OP_Progr
342f0 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  am: {        /* 
34300 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  jump */.  int nM
34310 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
34320 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d    /* Number of m
34330 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73 20  emory registers 
34340 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  for sub-program 
34350 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 20  */.  int nByte; 
34360 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
34370 42 79 74 65 73 20 6f 66 20 72 75 6e 74 69 6d 65  Bytes of runtime
34380 20 73 70 61 63 65 20 72 65 71 75 69 72 65 64 20   space required 
34390 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  for sub-program 
343a0 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 74 3b 20 20  */.  Mem *pRt;  
343b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
343c0 52 65 67 69 73 74 65 72 20 74 6f 20 61 6c 6c 6f  Register to allo
343d0 63 61 74 65 20 72 75 6e 74 69 6d 65 20 73 70 61  cate runtime spa
343e0 63 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  ce */.  Mem *pMe
343f0 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
34400 2f 2a 20 55 73 65 64 20 74 6f 20 69 74 65 72 61  /* Used to itera
34410 74 65 20 74 68 72 6f 75 67 68 20 6d 65 6d 6f 72  te through memor
34420 79 20 63 65 6c 6c 73 20 2a 2f 0a 20 20 4d 65 6d  y cells */.  Mem
34430 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20   *pEnd;         
34440 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 6d 65 6d       /* Last mem
34450 6f 72 79 20 63 65 6c 6c 20 69 6e 20 6e 65 77 20  ory cell in new 
34460 61 72 72 61 79 20 2a 2f 0a 20 20 56 64 62 65 46  array */.  VdbeF
34470 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20  rame *pFrame;   
34480 20 20 20 2f 2a 20 4e 65 77 20 76 64 62 65 20 66     /* New vdbe f
34490 72 61 6d 65 20 74 6f 20 65 78 65 63 75 74 65 20  rame to execute 
344a0 69 6e 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72  in */.  SubProgr
344b0 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20  am *pProgram;   
344c0 2f 2a 20 53 75 62 2d 70 72 6f 67 72 61 6d 20 74  /* Sub-program t
344d0 6f 20 65 78 65 63 75 74 65 20 2a 2f 0a 20 20 76  o execute */.  v
344e0 6f 69 64 20 2a 74 3b 20 20 20 20 20 20 20 20 20  oid *t;         
344f0 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20         /* Token 
34500 69 64 65 6e 74 69 66 79 69 6e 67 20 74 72 69 67  identifying trig
34510 67 65 72 20 2a 2f 0a 0a 20 20 70 50 72 6f 67 72  ger */..  pProgr
34520 61 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 50 72  am = pOp->p4.pPr
34530 6f 67 72 61 6d 3b 0a 20 20 70 52 74 20 3d 20 26  ogram;.  pRt = &
34540 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
34550 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61   assert( pProgra
34560 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20 0a 20  m->nOp>0 );.  . 
34570 20 2f 2a 20 49 66 20 74 68 65 20 70 35 20 66 6c   /* If the p5 fl
34580 61 67 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65  ag is clear, the
34590 6e 20 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f  n recursive invo
345a0 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65  cation of trigge
345b0 72 73 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61  rs is .  ** disa
345c0 62 6c 65 64 20 66 6f 72 20 62 61 63 6b 77 61 72  bled for backwar
345d0 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  ds compatibility
345e0 20 28 70 35 20 69 73 20 73 65 74 20 69 66 20 74   (p5 is set if t
345f0 68 69 73 20 73 75 62 2d 70 72 6f 67 72 61 6d 0a  his sub-program.
34600 20 20 2a 2a 20 69 73 20 72 65 61 6c 6c 79 20 61    ** is really a
34610 20 74 72 69 67 67 65 72 2c 20 6e 6f 74 20 61 20   trigger, not a 
34620 66 6f 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69  foreign key acti
34630 6f 6e 2c 20 61 6e 64 20 74 68 65 20 66 6c 61 67  on, and the flag
34640 20 73 65 74 0a 20 20 2a 2a 20 61 6e 64 20 63 6c   set.  ** and cl
34650 65 61 72 65 64 20 62 79 20 74 68 65 20 22 50 52  eared by the "PR
34660 41 47 4d 41 20 72 65 63 75 72 73 69 76 65 5f 74  AGMA recursive_t
34670 72 69 67 67 65 72 73 22 20 63 6f 6d 6d 61 6e 64  riggers" command
34680 20 69 73 20 63 6c 65 61 72 29 2e 0a 20 20 2a 2a   is clear)..  **
34690 20 0a 20 20 2a 2a 20 49 74 20 69 73 20 72 65 63   .  ** It is rec
346a0 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f  ursive invocatio
346b0 6e 20 6f 66 20 74 72 69 67 67 65 72 73 2c 20 61  n of triggers, a
346c0 74 20 74 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c  t the SQL level,
346d0 20 74 68 61 74 20 69 73 20 0a 20 20 2a 2a 20 64   that is .  ** d
346e0 69 73 61 62 6c 65 64 2e 20 49 6e 20 73 6f 6d 65  isabled. In some
346f0 20 63 61 73 65 73 20 61 20 73 69 6e 67 6c 65 20   cases a single 
34700 74 72 69 67 67 65 72 20 6d 61 79 20 67 65 6e 65  trigger may gene
34710 72 61 74 65 20 6d 6f 72 65 20 74 68 61 6e 20 6f  rate more than o
34720 6e 65 20 0a 20 20 2a 2a 20 53 75 62 50 72 6f 67  ne .  ** SubProg
34730 72 61 6d 20 28 69 66 20 74 68 65 20 74 72 69 67  ram (if the trig
34740 67 65 72 20 6d 61 79 20 62 65 20 65 78 65 63 75  ger may be execu
34750 74 65 64 20 77 69 74 68 20 6d 6f 72 65 20 74 68  ted with more th
34760 61 6e 20 6f 6e 65 20 64 69 66 66 65 72 65 6e 74  an one different
34770 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46 4c 49   .  ** ON CONFLI
34780 43 54 20 61 6c 67 6f 72 69 74 68 6d 29 2e 20 53  CT algorithm). S
34790 75 62 50 72 6f 67 72 61 6d 20 73 74 72 75 63 74  ubProgram struct
347a0 75 72 65 73 20 61 73 73 6f 63 69 61 74 65 64 20  ures associated 
347b0 77 69 74 68 20 61 0a 20 20 2a 2a 20 73 69 6e 67  with a.  ** sing
347c0 6c 65 20 74 72 69 67 67 65 72 20 61 6c 6c 20 68  le trigger all h
347d0 61 76 65 20 74 68 65 20 73 61 6d 65 20 76 61 6c  ave the same val
347e0 75 65 20 66 6f 72 20 74 68 65 20 53 75 62 50 72  ue for the SubPr
347f0 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20 20 2a  ogram.token .  *
34800 2a 20 76 61 72 69 61 62 6c 65 2e 20 20 2a 2f 0a  * variable.  */.
34810 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b    if( pOp->p5 ){
34820 0a 20 20 20 20 74 20 3d 20 70 50 72 6f 67 72 61  .    t = pProgra
34830 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 66 6f  m->token;.    fo
34840 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61  r(pFrame=p->pFra
34850 6d 65 3b 20 70 46 72 61 6d 65 20 26 26 20 70 46  me; pFrame && pF
34860 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74 3b 20  rame->token!=t; 
34870 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70  pFrame=pFrame->p
34880 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 69 66 28  Parent);.    if(
34890 20 70 46 72 61 6d 65 20 29 20 62 72 65 61 6b 3b   pFrame ) break;
348a0 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 2d 3e 6e  .  }..  if( p->n
348b0 46 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69 6d 69  Frame>=db->aLimi
348c0 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54  t[SQLITE_LIMIT_T
348d0 52 49 47 47 45 52 5f 44 45 50 54 48 5d 20 29 7b  RIGGER_DEPTH] ){
348e0 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
348f0 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69  _ERROR;.    sqli
34900 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
34910 22 74 6f 6f 20 6d 61 6e 79 20 6c 65 76 65 6c 73  "too many levels
34920 20 6f 66 20 74 72 69 67 67 65 72 20 72 65 63 75   of trigger recu
34930 72 73 69 6f 6e 22 29 3b 0a 20 20 20 20 67 6f 74  rsion");.    got
34940 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
34950 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  rror;.  }..  /* 
34960 52 65 67 69 73 74 65 72 20 70 52 74 20 69 73 20  Register pRt is 
34970 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68  used to store th
34980 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65  e memory require
34990 64 20 74 6f 20 73 61 76 65 20 74 68 65 20 73 74  d to save the st
349a0 61 74 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20  ate.  ** of the 
349b0 63 75 72 72 65 6e 74 20 70 72 6f 67 72 61 6d 2c  current program,
349c0 20 61 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20   and the memory 
349d0 72 65 71 75 69 72 65 64 20 61 74 20 72 75 6e 74  required at runt
349e0 69 6d 65 20 74 6f 20 65 78 65 63 75 74 65 0a 20  ime to execute. 
349f0 20 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72 20   ** the trigger 
34a00 70 72 6f 67 72 61 6d 2e 20 49 66 20 74 68 69 73  program. If this
34a10 20 74 72 69 67 67 65 72 20 68 61 73 20 62 65 65   trigger has bee
34a20 6e 20 66 69 72 65 64 20 62 65 66 6f 72 65 2c 20  n fired before, 
34a30 74 68 65 6e 20 70 52 74 20 0a 20 20 2a 2a 20 69  then pRt .  ** i
34a40 73 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61  s already alloca
34a50 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  ted. Otherwise, 
34a60 69 74 20 6d 75 73 74 20 62 65 20 69 6e 69 74 69  it must be initi
34a70 61 6c 69 7a 65 64 2e 20 20 2a 2f 0a 20 20 69 66  alized.  */.  if
34a80 28 20 28 70 52 74 2d 3e 66 6c 61 67 73 26 4d 45  ( (pRt->flags&ME
34a90 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29 7b 0a 20 20  M_Blob)==0 ){.  
34aa0 20 20 2f 2a 20 53 75 62 50 72 6f 67 72 61 6d 2e    /* SubProgram.
34ab0 6e 4d 65 6d 20 69 73 20 73 65 74 20 74 6f 20 74  nMem is set to t
34ac0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d  he number of mem
34ad0 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 62  ory cells used b
34ae0 79 20 74 68 65 20 0a 20 20 20 20 2a 2a 20 70 72  y the .    ** pr
34af0 6f 67 72 61 6d 20 73 74 6f 72 65 64 20 69 6e 20  ogram stored in 
34b00 53 75 62 50 72 6f 67 72 61 6d 2e 61 4f 70 2e 20  SubProgram.aOp. 
34b10 41 73 20 77 65 6c 6c 20 61 73 20 74 68 65 73 65  As well as these
34b20 2c 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20 20 20  , one memory.   
34b30 20 2a 2a 20 63 65 6c 6c 20 69 73 20 72 65 71 75   ** cell is requ
34b40 69 72 65 64 20 66 6f 72 20 65 61 63 68 20 63 75  ired for each cu
34b50 72 73 6f 72 20 75 73 65 64 20 62 79 20 74 68 65  rsor used by the
34b60 20 70 72 6f 67 72 61 6d 2e 20 53 65 74 20 6c 6f   program. Set lo
34b70 63 61 6c 0a 20 20 20 20 2a 2a 20 76 61 72 69 61  cal.    ** varia
34b80 62 6c 65 20 6e 4d 65 6d 20 28 61 6e 64 20 6c 61  ble nMem (and la
34b90 74 65 72 2c 20 56 64 62 65 46 72 61 6d 65 2e 6e  ter, VdbeFrame.n
34ba0 43 68 69 6c 64 4d 65 6d 29 20 74 6f 20 74 68 69  ChildMem) to thi
34bb0 73 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a  s value..    */.
34bc0 20 20 20 20 6e 4d 65 6d 20 3d 20 70 50 72 6f 67      nMem = pProg
34bd0 72 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72 6f  ram->nMem + pPro
34be0 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20  gram->nCsr;.    
34bf0 61 73 73 65 72 74 28 20 6e 4d 65 6d 3e 30 20 29  assert( nMem>0 )
34c00 3b 0a 20 20 20 20 69 66 28 20 70 50 72 6f 67 72  ;.    if( pProgr
34c10 61 6d 2d 3e 6e 43 73 72 3d 3d 30 20 29 20 6e 4d  am->nCsr==0 ) nM
34c20 65 6d 2b 2b 3b 0a 20 20 20 20 6e 42 79 74 65 20  em++;.    nByte 
34c30 3d 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28  = ROUND8(sizeof(
34c40 56 64 62 65 46 72 61 6d 65 29 29 0a 20 20 20 20  VdbeFrame)).    
34c50 20 20 20 20 20 20 20 20 20 20 2b 20 6e 4d 65 6d            + nMem
34c60 20 2a 20 73 69 7a 65 6f 66 28 4d 65 6d 29 0a 20   * sizeof(Mem). 
34c70 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 70               + p
34c80 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 20 2a 20  Program->nCsr * 
34c90 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
34ca0 72 2a 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  r*).            
34cb0 20 20 2b 20 28 70 50 72 6f 67 72 61 6d 2d 3e 6e    + (pProgram->n
34cc0 4f 70 20 2b 20 37 29 2f 38 3b 0a 20 20 20 20 70  Op + 7)/8;.    p
34cd0 46 72 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 44  Frame = sqlite3D
34ce0 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c 20  bMallocZero(db, 
34cf0 6e 42 79 74 65 29 3b 0a 20 20 20 20 69 66 28 20  nByte);.    if( 
34d00 21 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20  !pFrame ){.     
34d10 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
34d20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56    }.    sqlite3V
34d30 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70 52  dbeMemRelease(pR
34d40 74 29 3b 0a 20 20 20 20 70 52 74 2d 3e 66 6c 61  t);.    pRt->fla
34d50 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 7c 4d 45  gs = MEM_Blob|ME
34d60 4d 5f 44 79 6e 3b 0a 20 20 20 20 70 52 74 2d 3e  M_Dyn;.    pRt->
34d70 7a 20 3d 20 28 63 68 61 72 2a 29 70 46 72 61 6d  z = (char*)pFram
34d80 65 3b 0a 20 20 20 20 70 52 74 2d 3e 6e 20 3d 20  e;.    pRt->n = 
34d90 6e 42 79 74 65 3b 0a 20 20 20 20 70 52 74 2d 3e  nByte;.    pRt->
34da0 78 44 65 6c 20 3d 20 73 71 6c 69 74 65 33 56 64  xDel = sqlite3Vd
34db0 62 65 46 72 61 6d 65 4d 65 6d 44 65 6c 3b 0a 0a  beFrameMemDel;..
34dc0 20 20 20 20 70 46 72 61 6d 65 2d 3e 76 20 3d 20      pFrame->v = 
34dd0 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e  p;.    pFrame->n
34de0 43 68 69 6c 64 4d 65 6d 20 3d 20 6e 4d 65 6d 3b  ChildMem = nMem;
34df0 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68  .    pFrame->nCh
34e00 69 6c 64 43 73 72 20 3d 20 70 50 72 6f 67 72 61  ildCsr = pProgra
34e10 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 70 46 72  m->nCsr;.    pFr
34e20 61 6d 65 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28  ame->pc = (int)(
34e30 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20  pOp - aOp);.    
34e40 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d 20 70  pFrame->aMem = p
34e50 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61  ->aMem;.    pFra
34e60 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e 6e 4d  me->nMem = p->nM
34e70 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  em;.    pFrame->
34e80 61 70 43 73 72 20 3d 20 70 2d 3e 61 70 43 73 72  apCsr = p->apCsr
34e90 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43  ;.    pFrame->nC
34ea0 75 72 73 6f 72 20 3d 20 70 2d 3e 6e 43 75 72 73  ursor = p->nCurs
34eb0 6f 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  or;.    pFrame->
34ec0 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20  aOp = p->aOp;.  
34ed0 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 70 20 3d 20    pFrame->nOp = 
34ee0 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70 46 72 61  p->nOp;.    pFra
34ef0 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50 72 6f  me->token = pPro
34f00 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 23 69 66  gram->token;.#if
34f10 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
34f20 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55  E_STMT_SCANSTATU
34f30 53 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 6e  S.    pFrame->an
34f40 45 78 65 63 20 3d 20 70 2d 3e 61 6e 45 78 65 63  Exec = p->anExec
34f50 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  ;.#endif.#ifdef 
34f60 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
34f70 20 70 46 72 61 6d 65 2d 3e 69 46 72 61 6d 65 4d   pFrame->iFrameM
34f80 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 46 52  agic = SQLITE_FR
34f90 41 4d 45 5f 4d 41 47 49 43 3b 0a 23 65 6e 64 69  AME_MAGIC;.#endi
34fa0 66 0a 0a 20 20 20 20 70 45 6e 64 20 3d 20 26 56  f..    pEnd = &V
34fb0 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61  dbeFrameMem(pFra
34fc0 6d 65 29 5b 70 46 72 61 6d 65 2d 3e 6e 43 68 69  me)[pFrame->nChi
34fd0 6c 64 4d 65 6d 5d 3b 0a 20 20 20 20 66 6f 72 28  ldMem];.    for(
34fe0 70 4d 65 6d 3d 56 64 62 65 46 72 61 6d 65 4d 65  pMem=VdbeFrameMe
34ff0 6d 28 70 46 72 61 6d 65 29 3b 20 70 4d 65 6d 21  m(pFrame); pMem!
35000 3d 70 45 6e 64 3b 20 70 4d 65 6d 2b 2b 29 7b 0a  =pEnd; pMem++){.
35010 20 20 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61 67        pMem->flag
35020 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65  s = MEM_Undefine
35030 64 3b 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 64  d;.      pMem->d
35040 62 20 3d 20 64 62 3b 0a 20 20 20 20 7d 0a 20 20  b = db;.    }.  
35050 7d 65 6c 73 65 7b 0a 20 20 20 20 70 46 72 61 6d  }else{.    pFram
35060 65 20 3d 20 28 56 64 62 65 46 72 61 6d 65 2a 29  e = (VdbeFrame*)
35070 70 52 74 2d 3e 7a 3b 0a 20 20 20 20 61 73 73 65  pRt->z;.    asse
35080 72 74 28 20 70 52 74 2d 3e 78 44 65 6c 3d 3d 73  rt( pRt->xDel==s
35090 71 6c 69 74 65 33 56 64 62 65 46 72 61 6d 65 4d  qlite3VdbeFrameM
350a0 65 6d 44 65 6c 20 29 3b 0a 20 20 20 20 61 73 73  emDel );.    ass
350b0 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  ert( pProgram->n
350c0 4d 65 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e 43  Mem+pProgram->nC
350d0 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69  sr==pFrame->nChi
350e0 6c 64 4d 65 6d 20 0a 20 20 20 20 20 20 20 20 7c  ldMem .        |
350f0 7c 20 28 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73  | (pProgram->nCs
35100 72 3d 3d 30 20 26 26 20 70 50 72 6f 67 72 61 6d  r==0 && pProgram
35110 2d 3e 6e 4d 65 6d 2b 31 3d 3d 70 46 72 61 6d 65  ->nMem+1==pFrame
35120 2d 3e 6e 43 68 69 6c 64 4d 65 6d 29 20 29 3b 0a  ->nChildMem) );.
35130 20 20 20 20 61 73 73 65 72 74 28 20 70 50 72 6f      assert( pPro
35140 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61  gram->nCsr==pFra
35150 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 29 3b  me->nChildCsr );
35160 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 69 6e  .    assert( (in
35170 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3d 3d 70  t)(pOp - aOp)==p
35180 46 72 61 6d 65 2d 3e 70 63 20 29 3b 0a 20 20 7d  Frame->pc );.  }
35190 0a 0a 20 20 70 2d 3e 6e 46 72 61 6d 65 2b 2b 3b  ..  p->nFrame++;
351a0 0a 20 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  .  pFrame->pPare
351b0 6e 74 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a  nt = p->pFrame;.
351c0 20 20 70 46 72 61 6d 65 2d 3e 6c 61 73 74 52 6f    pFrame->lastRo
351d0 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f  wid = db->lastRo
351e0 77 69 64 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e  wid;.  pFrame->n
351f0 43 68 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68 61  Change = p->nCha
35200 6e 67 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e  nge;.  pFrame->n
35210 44 62 43 68 61 6e 67 65 20 3d 20 70 2d 3e 64 62  DbChange = p->db
35220 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 61 73 73  ->nChange;.  ass
35230 65 72 74 28 20 70 46 72 61 6d 65 2d 3e 70 41 75  ert( pFrame->pAu
35240 78 44 61 74 61 3d 3d 30 20 29 3b 0a 20 20 70 46  xData==0 );.  pF
35250 72 61 6d 65 2d 3e 70 41 75 78 44 61 74 61 20 3d  rame->pAuxData =
35260 20 70 2d 3e 70 41 75 78 44 61 74 61 3b 0a 20 20   p->pAuxData;.  
35270 70 2d 3e 70 41 75 78 44 61 74 61 20 3d 20 30 3b  p->pAuxData = 0;
35280 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20  .  p->nChange = 
35290 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d  0;.  p->pFrame =
352a0 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d 3e 61 4d   pFrame;.  p->aM
352b0 65 6d 20 3d 20 61 4d 65 6d 20 3d 20 56 64 62 65  em = aMem = Vdbe
352c0 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29  FrameMem(pFrame)
352d0 3b 0a 20 20 70 2d 3e 6e 4d 65 6d 20 3d 20 70 46  ;.  p->nMem = pF
352e0 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 3b  rame->nChildMem;
352f0 0a 20 20 70 2d 3e 6e 43 75 72 73 6f 72 20 3d 20  .  p->nCursor = 
35300 28 75 31 36 29 70 46 72 61 6d 65 2d 3e 6e 43 68  (u16)pFrame->nCh
35310 69 6c 64 43 73 72 3b 0a 20 20 70 2d 3e 61 70 43  ildCsr;.  p->apC
35320 73 72 20 3d 20 28 56 64 62 65 43 75 72 73 6f 72  sr = (VdbeCursor
35330 20 2a 2a 29 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65   **)&aMem[p->nMe
35340 6d 5d 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 61 4f  m];.  pFrame->aO
35350 6e 63 65 20 3d 20 28 75 38 2a 29 26 70 2d 3e 61  nce = (u8*)&p->a
35360 70 43 73 72 5b 70 50 72 6f 67 72 61 6d 2d 3e 6e  pCsr[pProgram->n
35370 43 73 72 5d 3b 0a 20 20 6d 65 6d 73 65 74 28 70  Csr];.  memset(p
35380 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 2c 20 30 2c  Frame->aOnce, 0,
35390 20 28 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 20   (pProgram->nOp 
353a0 2b 20 37 29 2f 38 29 3b 0a 20 20 70 2d 3e 61 4f  + 7)/8);.  p->aO
353b0 70 20 3d 20 61 4f 70 20 3d 20 70 50 72 6f 67 72  p = aOp = pProgr
353c0 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d 3e 6e 4f  am->aOp;.  p->nO
353d0 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f  p = pProgram->nO
353e0 70 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  p;.#ifdef SQLITE
353f0 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41  _ENABLE_STMT_SCA
35400 4e 53 54 41 54 55 53 0a 20 20 70 2d 3e 61 6e 45  NSTATUS.  p->anE
35410 78 65 63 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a  xec = 0;.#endif.
35420 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
35430 42 55 47 0a 20 20 2f 2a 20 56 65 72 69 66 79 20  BUG.  /* Verify 
35440 74 68 61 74 20 73 65 63 6f 6e 64 20 61 6e 64 20  that second and 
35450 73 75 62 73 65 71 75 65 6e 74 20 65 78 65 63 75  subsequent execu
35460 74 69 6f 6e 73 20 6f 66 20 74 68 65 20 73 61 6d  tions of the sam
35470 65 20 74 72 69 67 67 65 72 20 64 6f 20 6e 6f 74  e trigger do not
35480 0a 20 20 2a 2a 20 74 72 79 20 74 6f 20 72 65 75  .  ** try to reu
35490 73 65 20 72 65 67 69 73 74 65 72 20 76 61 6c 75  se register valu
354a0 65 73 20 66 72 6f 6d 20 74 68 65 20 66 69 72 73  es from the firs
354b0 74 20 75 73 65 2e 20 2a 2f 0a 20 20 7b 0a 20 20  t use. */.  {.  
354c0 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 66 6f 72    int i;.    for
354d0 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4d 65 6d 3b  (i=0; i<p->nMem;
354e0 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 4d 65   i++){.      aMe
354f0 6d 5b 69 5d 2e 70 53 63 6f 70 79 46 72 6f 6d 20  m[i].pScopyFrom 
35500 3d 20 30 3b 20 20 2f 2a 20 50 72 65 76 65 6e 74  = 0;  /* Prevent
35510 20 66 61 6c 73 65 2d 70 6f 73 69 74 69 76 65 20   false-positive 
35520 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 29 20  AboutToChange() 
35530 65 72 72 73 20 2a 2f 0a 20 20 20 20 20 20 61 4d  errs */.      aM
35540 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 7c 3d 20 4d  em[i].flags |= M
35550 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 20 2f 2a  EM_Undefined; /*
35560 20 43 61 75 73 65 20 61 20 66 61 75 6c 74 20 69   Cause a fault i
35570 66 20 74 68 69 73 20 72 65 67 20 69 73 20 72 65  f this reg is re
35580 75 73 65 64 20 2a 2f 0a 20 20 20 20 7d 0a 20 20  used */.    }.  
35590 7d 0a 23 65 6e 64 69 66 0a 20 20 70 4f 70 20 3d  }.#endif.  pOp =
355a0 20 26 61 4f 70 5b 2d 31 5d 3b 0a 20 20 67 6f 74   &aOp[-1];.  got
355b0 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  o check_for_inte
355c0 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  rrupt;.}../* Opc
355d0 6f 64 65 3a 20 50 61 72 61 6d 20 50 31 20 50 32  ode: Param P1 P2
355e0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69   * * *.**.** Thi
355f0 73 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79  s opcode is only
35600 20 65 76 65 72 20 70 72 65 73 65 6e 74 20 69 6e   ever present in
35610 20 73 75 62 2d 70 72 6f 67 72 61 6d 73 20 63 61   sub-programs ca
35620 6c 6c 65 64 20 76 69 61 20 74 68 65 20 0a 2a 2a  lled via the .**
35630 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74   OP_Program inst
35640 72 75 63 74 69 6f 6e 2e 20 43 6f 70 79 20 61 20  ruction. Copy a 
35650 76 61 6c 75 65 20 63 75 72 72 65 6e 74 6c 79 20  value currently 
35660 73 74 6f 72 65 64 20 69 6e 20 61 20 6d 65 6d 6f  stored in a memo
35670 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66 20 74  ry .** cell of t
35680 68 65 20 63 61 6c 6c 69 6e 67 20 28 70 61 72 65  he calling (pare
35690 6e 74 29 20 66 72 61 6d 65 20 74 6f 20 63 65 6c  nt) frame to cel
356a0 6c 20 50 32 20 69 6e 20 74 68 65 20 63 75 72 72  l P2 in the curr
356b0 65 6e 74 20 66 72 61 6d 65 73 20 0a 2a 2a 20 61  ent frames .** a
356c0 64 64 72 65 73 73 20 73 70 61 63 65 2e 20 54 68  ddress space. Th
356d0 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72  is is used by tr
356e0 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 20 74  igger programs t
356f0 6f 20 61 63 63 65 73 73 20 74 68 65 20 6e 65 77  o access the new
35700 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64 2e 2a  .* .** and old.*
35710 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 54   values..**.** T
35720 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74 68  he address of th
35730 65 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 70 61  e cell in the pa
35740 72 65 6e 74 20 66 72 61 6d 65 20 69 73 20 64 65  rent frame is de
35750 74 65 72 6d 69 6e 65 64 20 62 79 20 61 64 64 69  termined by addi
35760 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20  ng.** the value 
35770 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d 65  of the P1 argume
35780 6e 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  nt to the value 
35790 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d 65  of the P1 argume
357a0 6e 74 20 74 6f 20 74 68 65 0a 2a 2a 20 63 61 6c  nt to the.** cal
357b0 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 20  ling OP_Program 
357c0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
357d0 63 61 73 65 20 4f 50 5f 50 61 72 61 6d 3a 20 7b  case OP_Param: {
357e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
357f0 74 32 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d  t2 */.  VdbeFram
35800 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 4d 65 6d  e *pFrame;.  Mem
35810 20 2a 70 49 6e 3b 0a 20 20 70 4f 75 74 20 3d 20   *pIn;.  pOut = 
35820 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
35830 2c 20 70 4f 70 29 3b 0a 20 20 70 46 72 61 6d 65  , pOp);.  pFrame
35840 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20   = p->pFrame;.  
35850 70 49 6e 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61  pIn = &pFrame->a
35860 4d 65 6d 5b 70 4f 70 2d 3e 70 31 20 2b 20 70 46  Mem[pOp->p1 + pF
35870 72 61 6d 65 2d 3e 61 4f 70 5b 70 46 72 61 6d 65  rame->aOp[pFrame
35880 2d 3e 70 63 5d 2e 70 31 5d 3b 20 20 20 0a 20 20  ->pc].p1];   .  
35890 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
358a0 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20  allowCopy(pOut, 
358b0 70 49 6e 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b  pIn, MEM_Ephem);
358c0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 65 6e  .  break;.}..#en
358d0 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53  dif /* #ifndef S
358e0 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
358f0 45 52 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  ER */..#ifndef S
35900 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
35910 47 4e 5f 4b 45 59 0a 2f 2a 20 4f 70 63 6f 64 65  GN_KEY./* Opcode
35920 3a 20 46 6b 43 6f 75 6e 74 65 72 20 50 31 20 50  : FkCounter P1 P
35930 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
35940 73 69 73 3a 20 66 6b 63 74 72 5b 50 31 5d 2b 3d  sis: fkctr[P1]+=
35950 50 32 0a 2a 2a 0a 2a 2a 20 49 6e 63 72 65 6d 65  P2.**.** Increme
35960 6e 74 20 61 20 22 63 6f 6e 73 74 72 61 69 6e 74  nt a "constraint
35970 20 63 6f 75 6e 74 65 72 22 20 62 79 20 50 32 20   counter" by P2 
35980 28 50 32 20 6d 61 79 20 62 65 20 6e 65 67 61 74  (P2 may be negat
35990 69 76 65 20 6f 72 20 70 6f 73 69 74 69 76 65 29  ive or positive)
359a0 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f  ..** If P1 is no
359b0 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 64 61 74 61  n-zero, the data
359c0 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 20  base constraint 
359d0 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65  counter is incre
359e0 6d 65 6e 74 65 64 20 0a 2a 2a 20 28 64 65 66 65  mented .** (defe
359f0 72 72 65 64 20 66 6f 72 65 69 67 6e 20 6b 65 79  rred foreign key
35a00 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 20 4f   constraints). O
35a10 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 31 20  therwise, if P1 
35a20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 0a 2a 2a  is zero, the .**
35a30 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 75 6e 74   statement count
35a40 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  er is incremente
35a50 64 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72  d (immediate for
35a60 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
35a70 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ints)..*/.case O
35a80 50 5f 46 6b 43 6f 75 6e 74 65 72 3a 20 7b 0a 20  P_FkCounter: {. 
35a90 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26   if( db->flags &
35aa0 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73   SQLITE_DeferFKs
35ab0 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66   ){.    db->nDef
35ac0 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 2b 3d 20  erredImmCons += 
35ad0 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65  pOp->p2;.  }else
35ae0 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a   if( pOp->p1 ){.
35af0 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65      db->nDeferre
35b00 64 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32  dCons += pOp->p2
35b10 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
35b20 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 20  ->nFkConstraint 
35b30 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 0a  += pOp->p2;.  }.
35b40 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
35b50 70 63 6f 64 65 3a 20 46 6b 49 66 5a 65 72 6f 20  pcode: FkIfZero 
35b60 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
35b70 79 6e 6f 70 73 69 73 3a 20 69 66 20 66 6b 63 74  ynopsis: if fkct
35b80 72 5b 50 31 5d 3d 3d 30 20 67 6f 74 6f 20 50 32  r[P1]==0 goto P2
35b90 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
35ba0 64 65 20 74 65 73 74 73 20 69 66 20 61 20 66 6f  de tests if a fo
35bb0 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
35bc0 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20  aint-counter is 
35bd0 63 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2e 0a  currently zero..
35be0 2a 2a 20 49 66 20 73 6f 2c 20 6a 75 6d 70 20 74  ** If so, jump t
35bf0 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32  o instruction P2
35c00 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c  . Otherwise, fal
35c10 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
35c20 20 6e 65 78 74 20 0a 2a 2a 20 69 6e 73 74 72 75   next .** instru
35c30 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ction..**.** If 
35c40 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  P1 is non-zero, 
35c50 74 68 65 6e 20 74 68 65 20 6a 75 6d 70 20 69 73  then the jump is
35c60 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 64 61   taken if the da
35c70 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e  tabase constrain
35c80 74 2d 63 6f 75 6e 74 65 72 0a 2a 2a 20 69 73 20  t-counter.** is 
35c90 7a 65 72 6f 20 28 74 68 65 20 6f 6e 65 20 74 68  zero (the one th
35ca0 61 74 20 63 6f 75 6e 74 73 20 64 65 66 65 72 72  at counts deferr
35cb0 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  ed constraint vi
35cc0 6f 6c 61 74 69 6f 6e 73 29 2e 20 49 66 20 50 31  olations). If P1
35cd0 20 69 73 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68 65   is.** zero, the
35ce0 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
35cf0 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  f the statement 
35d00 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74  constraint-count
35d10 65 72 20 69 73 20 7a 65 72 6f 0a 2a 2a 20 28 69  er is zero.** (i
35d20 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e  mmediate foreign
35d30 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20   key constraint 
35d40 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 0a 2a 2f 0a  violations)..*/.
35d50 63 61 73 65 20 4f 50 5f 46 6b 49 66 5a 65 72 6f  case OP_FkIfZero
35d60 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  : {         /* j
35d70 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70  ump */.  if( pOp
35d80 2d 3e 70 31 20 29 7b 0a 20 20 20 20 56 64 62 65  ->p1 ){.    Vdbe
35d90 42 72 61 6e 63 68 54 61 6b 65 6e 28 64 62 2d 3e  BranchTaken(db->
35da0 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30  nDeferredCons==0
35db0 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65   && db->nDeferre
35dc0 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b  dImmCons==0, 2);
35dd0 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 44 65  .    if( db->nDe
35de0 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26  ferredCons==0 &&
35df0 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
35e00 6d 43 6f 6e 73 3d 3d 30 20 29 20 67 6f 74 6f 20  mCons==0 ) goto 
35e10 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65  jump_to_p2;.  }e
35e20 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61  lse{.    VdbeBra
35e30 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 6e 46 6b 43  nchTaken(p->nFkC
35e40 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26 26 20  onstraint==0 && 
35e50 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
35e60 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20 20 20  Cons==0, 2);.   
35e70 20 69 66 28 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74   if( p->nFkConst
35e80 72 61 69 6e 74 3d 3d 30 20 26 26 20 64 62 2d 3e  raint==0 && db->
35e90 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
35ea0 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  ==0 ) goto jump_
35eb0 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  to_p2;.  }.  bre
35ec0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
35ed0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
35ee0 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20  MIT_FOREIGN_KEY 
35ef0 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
35f00 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52  TE_OMIT_AUTOINCR
35f10 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  EMENT./* Opcode:
35f20 20 4d 65 6d 4d 61 78 20 50 31 20 50 32 20 2a 20   MemMax P1 P2 * 
35f30 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
35f40 20 72 5b 50 31 5d 3d 6d 61 78 28 72 5b 50 31 5d   r[P1]=max(r[P1]
35f50 2c 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 50 31  ,r[P2]).**.** P1
35f60 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20 69   is a register i
35f70 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65  n the root frame
35f80 20 6f 66 20 74 68 69 73 20 56 4d 20 28 74 68 65   of this VM (the
35f90 20 72 6f 6f 74 20 66 72 61 6d 65 20 69 73 0a 2a   root frame is.*
35fa0 2a 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d  * different from
35fb0 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 72 61   the current fra
35fc0 6d 65 20 69 66 20 74 68 69 73 20 69 6e 73 74 72  me if this instr
35fd0 75 63 74 69 6f 6e 20 69 73 20 62 65 69 6e 67 20  uction is being 
35fe0 65 78 65 63 75 74 65 64 0a 2a 2a 20 77 69 74 68  executed.** with
35ff0 69 6e 20 61 20 73 75 62 2d 70 72 6f 67 72 61 6d  in a sub-program
36000 29 2e 20 53 65 74 20 74 68 65 20 76 61 6c 75 65  ). Set the value
36010 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
36020 74 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f  to the maximum o
36030 66 20 0a 2a 2a 20 69 74 73 20 63 75 72 72 65 6e  f .** its curren
36040 74 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20  t value and the 
36050 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
36060 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r P2..**.** This
36070 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 72   instruction thr
36080 6f 77 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20  ows an error if 
36090 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  the memory cell 
360a0 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79  is not initially
360b0 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a  .** an integer..
360c0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d 4d 61  */.case OP_MemMa
360d0 78 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69  x: {        /* i
360e0 6e 32 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d  n2 */.  VdbeFram
360f0 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69 66 28  e *pFrame;.  if(
36100 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20   p->pFrame ){.  
36110 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e    for(pFrame=p->
36120 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e  pFrame; pFrame->
36130 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d  pParent; pFrame=
36140 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29  pFrame->pParent)
36150 3b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 70 46  ;.    pIn1 = &pF
36160 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  rame->aMem[pOp->
36170 70 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  p1];.  }else{.  
36180 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
36190 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a 20 20 61  Op->p1];.  }.  a
361a0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
361b0 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 73 71 6c  d(pIn1) );.  sql
361c0 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
361d0 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70  erify(pIn1);.  p
361e0 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
361f0 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56  >p2];.  sqlite3V
36200 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
36210 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 70 49  (pIn2);.  if( pI
36220 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e  n1->u.i<pIn2->u.
36230 69 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e  i){.    pIn1->u.
36240 69 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20  i = pIn2->u.i;. 
36250 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
36260 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
36270 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
36280 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  T */../* Opcode:
36290 20 49 66 50 6f 73 20 50 31 20 50 32 20 50 33 20   IfPos P1 P2 P3 
362a0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
362b0 20 69 66 20 72 5b 50 31 5d 3e 30 20 74 68 65 6e   if r[P1]>0 then
362c0 20 72 5b 50 31 5d 2d 3d 50 33 2c 20 67 6f 74 6f   r[P1]-=P3, goto
362d0 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74   P2.**.** Regist
362e0 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74 61  er P1 must conta
362f0 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  in an integer..*
36300 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f  * If the value o
36310 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  f register P1 is
36320 20 31 20 6f 72 20 67 72 65 61 74 65 72 2c 20 73   1 or greater, s
36330 75 62 74 72 61 63 74 20 50 33 20 66 72 6f 6d 20  ubtract P3 from 
36340 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20  the.** value in 
36350 50 31 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 50  P1 and jump to P
36360 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  2..**.** If the 
36370 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66  initial value of
36380 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
36390 6c 65 73 73 20 74 68 61 6e 20 31 2c 20 74 68 65  less than 1, the
363a0 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69  n the.** value i
363b0 73 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20  s unchanged and 
363c0 63 6f 6e 74 72 6f 6c 20 70 61 73 73 65 73 20 74  control passes t
363d0 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
363e0 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
363f0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 50 6f 73  */.case OP_IfPos
36400 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
36410 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
36420 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
36430 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1];.  assert( pI
36440 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n1->flags&MEM_In
36450 74 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  t );.  VdbeBranc
36460 68 54 61 6b 65 6e 28 20 70 49 6e 31 2d 3e 75 2e  hTaken( pIn1->u.
36470 69 3e 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70  i>0, 2);.  if( p
36480 49 6e 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20 20  In1->u.i>0 ){.  
36490 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2d 3d 20 70    pIn1->u.i -= p
364a0 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 67 6f 74 6f  Op->p3;.    goto
364b0 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
364c0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
364d0 4f 70 63 6f 64 65 3a 20 4f 66 66 73 65 74 4c 69  Opcode: OffsetLi
364e0 6d 69 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  mit P1 P2 P3 * *
364f0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
36500 20 72 5b 50 31 5d 3e 30 20 74 68 65 6e 20 72 5b   r[P1]>0 then r[
36510 50 32 5d 3d 72 5b 50 31 5d 2b 6d 61 78 28 30 2c  P2]=r[P1]+max(0,
36520 72 5b 50 33 5d 29 20 65 6c 73 65 20 72 5b 50 32  r[P3]) else r[P2
36530 5d 3d 28 2d 31 29 0a 2a 2a 0a 2a 2a 20 54 68 69  ]=(-1).**.** Thi
36540 73 20 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d  s opcode perform
36550 73 20 61 20 63 6f 6d 6d 6f 6e 6c 79 20 75 73 65  s a commonly use
36560 64 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 61 73  d computation as
36570 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a 2a 2a  sociated with.**
36580 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46 53 45   LIMIT and OFFSE
36590 54 20 70 72 6f 63 65 73 73 2e 20 20 72 5b 50 31  T process.  r[P1
365a0 5d 20 68 6f 6c 64 73 20 74 68 65 20 6c 69 6d 69  ] holds the limi
365b0 74 20 63 6f 75 6e 74 65 72 2e 20 20 72 5b 50 33  t counter.  r[P3
365c0 5d 0a 2a 2a 20 68 6f 6c 64 73 20 74 68 65 20 6f  ].** holds the o
365d0 66 66 73 65 74 20 63 6f 75 6e 74 65 72 2e 20 20  ffset counter.  
365e0 54 68 65 20 6f 70 63 6f 64 65 20 63 6f 6d 70 75  The opcode compu
365f0 74 65 73 20 74 68 65 20 63 6f 6d 62 69 6e 65 64  tes the combined
36600 20 76 61 6c 75 65 0a 2a 2a 20 6f 66 20 74 68 65   value.** of the
36610 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46 53 45   LIMIT and OFFSE
36620 54 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68 61  T and stores tha
36630 74 20 76 61 6c 75 65 20 69 6e 20 72 5b 50 32 5d  t value in r[P2]
36640 2e 20 20 54 68 65 20 72 5b 50 32 5d 0a 2a 2a 20  .  The r[P2].** 
36650 76 61 6c 75 65 20 63 6f 6d 70 75 74 65 64 20 69  value computed i
36660 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  s the total numb
36670 65 72 20 6f 66 20 72 6f 77 73 20 74 68 61 74 20  er of rows that 
36680 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65 0a  will need to be.
36690 2a 2a 20 76 69 73 69 74 65 64 20 69 6e 20 6f 72  ** visited in or
366a0 64 65 72 20 74 6f 20 63 6f 6d 70 6c 65 74 65 20  der to complete 
366b0 74 68 65 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a  the query..**.**
366c0 20 49 66 20 72 5b 50 33 5d 20 69 73 20 7a 65 72   If r[P3] is zer
366d0 6f 20 6f 72 20 6e 65 67 61 74 69 76 65 2c 20 74  o or negative, t
366e0 68 61 74 20 6d 65 61 6e 73 20 74 68 65 72 65 20  hat means there 
366f0 69 73 20 6e 6f 20 4f 46 46 53 45 54 0a 2a 2a 20  is no OFFSET.** 
36700 61 6e 64 20 72 5b 50 32 5d 20 69 73 20 73 65 74  and r[P2] is set
36710 20 74 6f 20 62 65 20 74 68 65 20 76 61 6c 75 65   to be the value
36720 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 2c 20 72   of the LIMIT, r
36730 5b 50 31 5d 2e 0a 2a 2a 0a 2a 2a 20 69 66 20 72  [P1]..**.** if r
36740 5b 50 31 5d 20 69 73 20 7a 65 72 6f 20 6f 72 20  [P1] is zero or 
36750 6e 65 67 61 74 69 76 65 2c 20 74 68 61 74 20 6d  negative, that m
36760 65 61 6e 73 20 74 68 65 72 65 20 69 73 20 6e 6f  eans there is no
36770 20 4c 49 4d 49 54 0a 2a 2a 20 61 6e 64 20 72 5b   LIMIT.** and r[
36780 50 32 5d 20 69 73 20 73 65 74 20 74 6f 20 2d 31  P2] is set to -1
36790 2e 20 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 77 69  . .**.** Otherwi
367a0 73 65 2c 20 72 5b 50 32 5d 20 69 73 20 73 65 74  se, r[P2] is set
367b0 20 74 6f 20 74 68 65 20 73 75 6d 20 6f 66 20 72   to the sum of r
367c0 5b 50 31 5d 20 61 6e 64 20 72 5b 50 33 5d 2e 0a  [P1] and r[P3]..
367d0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 66 66 73 65  */.case OP_Offse
367e0 74 4c 69 6d 69 74 3a 20 7b 20 20 20 20 2f 2a 20  tLimit: {    /* 
367f0 69 6e 31 2c 20 6f 75 74 32 2c 20 69 6e 33 20 2a  in1, out2, in3 *
36800 2f 0a 20 20 69 36 34 20 78 3b 0a 20 20 70 49 6e  /.  i64 x;.  pIn
36810 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
36820 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d  1];.  pIn3 = &aM
36830 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70  em[pOp->p3];.  p
36840 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
36850 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
36860 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
36870 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
36880 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d  .  assert( pIn3-
36890 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
368a0 20 29 3b 0a 20 20 78 20 3d 20 70 49 6e 31 2d 3e   );.  x = pIn1->
368b0 75 2e 69 3b 0a 20 20 69 66 28 20 78 3c 3d 30 20  u.i;.  if( x<=0 
368c0 7c 7c 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74  || sqlite3AddInt
368d0 36 34 28 26 78 2c 20 70 49 6e 33 2d 3e 75 2e 69  64(&x, pIn3->u.i
368e0 3e 30 3f 70 49 6e 33 2d 3e 75 2e 69 3a 30 29 20  >0?pIn3->u.i:0) 
368f0 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65  ){.    /* If the
36900 20 4c 49 4d 49 54 20 69 73 20 6c 65 73 73 20 74   LIMIT is less t
36910 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
36920 7a 65 72 6f 2c 20 6c 6f 6f 70 20 66 6f 72 65 76  zero, loop forev
36930 65 72 2e 20 20 54 68 69 73 0a 20 20 20 20 2a 2a  er.  This.    **
36940 20 69 73 20 64 6f 63 75 6d 65 6e 74 65 64 2e 20   is documented. 
36950 20 42 75 74 20 61 6c 73 6f 2c 20 69 66 20 74 68   But also, if th
36960 65 20 4c 49 4d 49 54 2b 4f 46 46 53 45 54 20 65  e LIMIT+OFFSET e
36970 78 63 65 65 64 73 20 32 5e 36 33 20 74 68 65 6e  xceeds 2^63 then
36980 0a 20 20 20 20 2a 2a 20 61 6c 73 6f 20 6c 6f 6f  .    ** also loo
36990 70 20 66 6f 72 65 76 65 72 2e 20 20 54 68 69 73  p forever.  This
369a0 20 69 73 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64   is undocumented
369b0 2e 20 20 49 6e 20 66 61 63 74 2c 20 6f 6e 65 20  .  In fact, one 
369c0 63 6f 75 6c 64 20 61 72 67 75 65 0a 20 20 20 20  could argue.    
369d0 2a 2a 20 74 68 61 74 20 74 68 65 20 6c 6f 6f 70  ** that the loop
369e0 20 73 68 6f 75 6c 64 20 74 65 72 6d 69 6e 61 74   should terminat
369f0 65 2e 20 20 42 75 74 20 61 73 73 75 6d 69 6e 67  e.  But assuming
36a00 20 31 20 62 69 6c 6c 69 6f 6e 20 69 74 65 72 61   1 billion itera
36a10 74 69 6f 6e 73 0a 20 20 20 20 2a 2a 20 70 65 72  tions.    ** per
36a20 20 73 65 63 6f 6e 64 20 28 66 61 72 20 65 78 63   second (far exc
36a30 65 65 64 69 6e 67 20 74 68 65 20 63 61 70 61 62  eeding the capab
36a40 69 6c 69 74 69 65 73 20 6f 66 20 61 6e 79 20 63  ilities of any c
36a50 75 72 72 65 6e 74 20 68 61 72 64 77 61 72 65 29  urrent hardware)
36a60 0a 20 20 20 20 2a 2a 20 69 74 20 77 6f 75 6c 64  .    ** it would
36a70 20 74 61 6b 65 20 6e 65 61 72 6c 79 20 33 30 30   take nearly 300
36a80 20 79 65 61 72 73 20 74 6f 20 61 63 74 75 61 6c   years to actual
36a90 6c 79 20 72 65 61 63 68 20 74 68 65 20 6c 69 6d  ly reach the lim
36aa0 69 74 2e 20 20 53 6f 0a 20 20 20 20 2a 2a 20 6c  it.  So.    ** l
36ab0 6f 6f 70 69 6e 67 20 66 6f 72 65 76 65 72 20 69  ooping forever i
36ac0 73 20 61 20 72 65 61 73 6f 6e 61 62 6c 65 20 61  s a reasonable a
36ad0 70 70 72 6f 78 69 6d 61 74 69 6f 6e 2e 20 2a 2f  pproximation. */
36ae0 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
36af0 20 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20   -1;.  }else{.  
36b00 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 78 3b    pOut->u.i = x;
36b10 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
36b20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f  ./* Opcode: IfNo
36b30 74 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20  tZero P1 P2 * * 
36b40 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
36b50 66 20 72 5b 50 31 5d 21 3d 30 20 74 68 65 6e 20  f r[P1]!=0 then 
36b60 72 5b 50 31 5d 2d 2d 2c 20 67 6f 74 6f 20 50 32  r[P1]--, goto P2
36b70 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
36b80 50 31 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20  P1 must contain 
36b90 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20  an integer.  If 
36ba0 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
36bb0 65 67 69 73 74 65 72 20 50 31 20 69 73 0a 2a 2a  egister P1 is.**
36bc0 20 69 6e 69 74 69 61 6c 6c 79 20 67 72 65 61 74   initially great
36bd0 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68  er than zero, th
36be0 65 6e 20 64 65 63 72 65 6d 65 6e 74 20 74 68 65  en decrement the
36bf0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
36c00 65 72 20 50 31 2e 0a 2a 2a 20 49 66 20 69 74 20  er P1..** If it 
36c10 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 28 6e 65 67  is non-zero (neg
36c20 61 74 69 76 65 20 6f 72 20 70 6f 73 69 74 69 76  ative or positiv
36c30 65 29 20 61 6e 64 20 74 68 65 6e 20 61 6c 73 6f  e) and then also
36c40 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 0a 2a   jump to P2.  .*
36c50 2a 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31  * If register P1
36c60 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 7a 65   is initially ze
36c70 72 6f 2c 20 6c 65 61 76 65 20 69 74 20 75 6e 63  ro, leave it unc
36c80 68 61 6e 67 65 64 20 61 6e 64 20 66 61 6c 6c 20  hanged and fall 
36c90 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a 63 61 73 65  through..*/.case
36ca0 20 4f 50 5f 49 66 4e 6f 74 5a 65 72 6f 3a 20 7b   OP_IfNotZero: {
36cb0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
36cc0 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
36cd0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
36ce0 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
36cf0 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
36d00 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
36d10 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3c 30 2c  ken(pIn1->u.i<0,
36d20 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d   2);.  if( pIn1-
36d30 3e 75 2e 69 20 29 7b 0a 20 20 20 20 20 69 66 28  >u.i ){.     if(
36d40 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20 29 20 70   pIn1->u.i>0 ) p
36d50 49 6e 31 2d 3e 75 2e 69 2d 2d 3b 0a 20 20 20 20  In1->u.i--;.    
36d60 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
36d70 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
36d80 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 63  ../* Opcode: Dec
36d90 72 4a 75 6d 70 5a 65 72 6f 20 50 31 20 50 32 20  rJumpZero P1 P2 
36da0 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
36db0 73 3a 20 69 66 20 28 2d 2d 72 5b 50 31 5d 29 3d  s: if (--r[P1])=
36dc0 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  =0 goto P2.**.**
36dd0 20 52 65 67 69 73 74 65 72 20 50 31 20 6d 75 73   Register P1 mus
36de0 74 20 68 6f 6c 64 20 61 6e 20 69 6e 74 65 67 65  t hold an intege
36df0 72 2e 20 20 44 65 63 72 65 6d 65 6e 74 20 74 68  r.  Decrement th
36e00 65 20 76 61 6c 75 65 20 69 6e 20 50 31 0a 2a 2a  e value in P1.**
36e10 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 50 32 20   and jump to P2 
36e20 69 66 20 74 68 65 20 6e 65 77 20 76 61 6c 75 65  if the new value
36e30 20 69 73 20 65 78 61 63 74 6c 79 20 7a 65 72 6f   is exactly zero
36e40 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 63  ..*/.case OP_Dec
36e50 72 4a 75 6d 70 5a 65 72 6f 3a 20 7b 20 20 20 20  rJumpZero: {    
36e60 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
36e70 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
36e80 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
36e90 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
36ea0 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66  &MEM_Int );.  if
36eb0 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 53 4d 41 4c  ( pIn1->u.i>SMAL
36ec0 4c 45 53 54 5f 49 4e 54 36 34 20 29 20 70 49 6e  LEST_INT64 ) pIn
36ed0 31 2d 3e 75 2e 69 2d 2d 3b 0a 20 20 56 64 62 65  1->u.i--;.  Vdbe
36ee0 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49 6e 31  BranchTaken(pIn1
36ef0 2d 3e 75 2e 69 3d 3d 30 2c 20 32 29 3b 0a 20 20  ->u.i==0, 2);.  
36f00 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30  if( pIn1->u.i==0
36f10 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
36f20 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  p2;.  break;.}..
36f30 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 53  ./* Opcode: AggS
36f40 74 65 70 20 2a 20 50 32 20 50 33 20 50 34 20 50  tep * P2 P3 P4 P
36f50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61  5.** Synopsis: a
36f60 63 63 75 6d 3d 72 5b 50 33 5d 20 73 74 65 70 28  ccum=r[P3] step(
36f70 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20  r[P2@P5]).**.** 
36f80 45 78 65 63 75 74 65 20 74 68 65 20 78 53 74 65  Execute the xSte
36f90 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61  p function for a
36fa0 6e 20 61 67 67 72 65 67 61 74 65 2e 0a 2a 2a 20  n aggregate..** 
36fb0 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 68 61 73  The function has
36fc0 20 50 35 20 61 72 67 75 6d 65 6e 74 73 2e 20 20   P5 arguments.  
36fd0 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
36fe0 74 6f 20 74 68 65 20 0a 2a 2a 20 46 75 6e 63 44  to the .** FuncD
36ff0 65 66 20 73 74 72 75 63 74 75 72 65 20 74 68 61  ef structure tha
37000 74 20 73 70 65 63 69 66 69 65 73 20 74 68 65 20  t specifies the 
37010 66 75 6e 63 74 69 6f 6e 2e 20 20 52 65 67 69 73  function.  Regis
37020 74 65 72 20 50 33 20 69 73 20 74 68 65 0a 2a 2a  ter P3 is the.**
37030 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a   accumulator..**
37040 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75 6d  .** The P5 argum
37050 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66  ents are taken f
37060 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20  rom register P2 
37070 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63 65  and its.** succe
37080 73 73 6f 72 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  ssors..*/./* Opc
37090 6f 64 65 3a 20 41 67 67 49 6e 76 65 72 73 65 20  ode: AggInverse 
370a0 2a 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  * P2 P3 P4 P5.**
370b0 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d   Synopsis: accum
370c0 3d 72 5b 50 33 5d 20 69 6e 76 65 72 73 65 28 72  =r[P3] inverse(r
370d0 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45  [P2@P5]).**.** E
370e0 78 65 63 75 74 65 20 74 68 65 20 78 49 6e 76 65  xecute the xInve
370f0 72 73 65 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72  rse function for
37100 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 0a 2a   an aggregate..*
37110 2a 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 68  * The function h
37120 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73 2e  as P5 arguments.
37130 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65    P4 is a pointe
37140 72 20 74 6f 20 74 68 65 20 0a 2a 2a 20 46 75 6e  r to the .** Fun
37150 63 44 65 66 20 73 74 72 75 63 74 75 72 65 20 74  cDef structure t
37160 68 61 74 20 73 70 65 63 69 66 69 65 73 20 74 68  hat specifies th
37170 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 52 65 67  e function.  Reg
37180 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65 0a  ister P3 is the.
37190 2a 2a 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a  ** accumulator..
371a0 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67  **.** The P5 arg
371b0 75 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e  uments are taken
371c0 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
371d0 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63  2 and its.** suc
371e0 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a 2f 2a 20 4f  cessors..*/./* O
371f0 70 63 6f 64 65 3a 20 41 67 67 53 74 65 70 31 20  pcode: AggStep1 
37200 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
37210 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75  * Synopsis: accu
37220 6d 3d 72 5b 50 33 5d 20 73 74 65 70 28 72 5b 50  m=r[P3] step(r[P
37230 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65  2@P5]).**.** Exe
37240 63 75 74 65 20 74 68 65 20 78 53 74 65 70 20 28  cute the xStep (
37250 69 66 20 50 31 3d 3d 30 29 20 6f 72 20 78 49 6e  if P1==0) or xIn
37260 76 65 72 73 65 20 28 69 66 20 50 31 21 3d 30 29  verse (if P1!=0)
37270 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e   function for an
37280 0a 2a 2a 20 61 67 67 72 65 67 61 74 65 2e 20 20  .** aggregate.  
37290 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 68 61 73  The function has
372a0 20 50 35 20 61 72 67 75 6d 65 6e 74 73 2e 20 20   P5 arguments.  
372b0 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
372c0 74 6f 20 74 68 65 20 0a 2a 2a 20 46 75 6e 63 44  to the .** FuncD
372d0 65 66 20 73 74 72 75 63 74 75 72 65 20 74 68 61  ef structure tha
372e0 74 20 73 70 65 63 69 66 69 65 73 20 74 68 65 20  t specifies the 
372f0 66 75 6e 63 74 69 6f 6e 2e 20 20 52 65 67 69 73  function.  Regis
37300 74 65 72 20 50 33 20 69 73 20 74 68 65 0a 2a 2a  ter P3 is the.**
37310 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a   accumulator..**
37320 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75 6d  .** The P5 argum
37330 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66  ents are taken f
37340 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20  rom register P2 
37350 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63 65  and its.** succe
37360 73 73 6f 72 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ssors..**.** Thi
37370 73 20 6f 70 63 6f 64 65 20 69 73 20 69 6e 69 74  s opcode is init
37380 69 61 6c 6c 79 20 63 6f 64 65 64 20 61 73 20 4f  ially coded as O
37390 50 5f 41 67 67 53 74 65 70 30 2e 20 20 4f 6e 20  P_AggStep0.  On 
373a0 66 69 72 73 74 20 65 76 61 6c 75 61 74 69 6f 6e  first evaluation
373b0 2c 0a 2a 2a 20 74 68 65 20 46 75 6e 63 44 65 66  ,.** the FuncDef
373c0 20 73 74 6f 72 65 64 20 69 6e 20 50 34 20 69 73   stored in P4 is
373d0 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20   converted into 
373e0 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  an sqlite3_conte
373f0 78 74 20 61 6e 64 0a 2a 2a 20 74 68 65 20 6f 70  xt and.** the op
37400 63 6f 64 65 20 69 73 20 63 68 61 6e 67 65 64 2e  code is changed.
37410 20 20 49 6e 20 74 68 69 73 20 77 61 79 2c 20 74    In this way, t
37420 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  he initializatio
37430 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 71 6c 69  n of the.** sqli
37440 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 6e 6c 79  te3_context only
37450 20 68 61 70 70 65 6e 73 20 6f 6e 63 65 2c 20 69   happens once, i
37460 6e 73 74 65 61 64 20 6f 66 20 6f 6e 20 65 61 63  nstead of on eac
37470 68 20 63 61 6c 6c 20 74 6f 20 74 68 65 0a 2a 2a  h call to the.**
37480 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 2e 0a   step function..
37490 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 49 6e  */.case OP_AggIn
374a0 76 65 72 73 65 3a 0a 63 61 73 65 20 4f 50 5f 41  verse:.case OP_A
374b0 67 67 53 74 65 70 3a 20 7b 0a 20 20 69 6e 74 20  ggStep: {.  int 
374c0 6e 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  n;.  sqlite3_con
374d0 74 65 78 74 20 2a 70 43 74 78 3b 0a 0a 20 20 61  text *pCtx;..  a
374e0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
374f0 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20 29  pe==P4_FUNCDEF )
37500 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b  ;.  n = pOp->p5;
37510 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
37520 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
37530 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
37540 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 61  >nCursor) );.  a
37550 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c 7c 20 28  ssert( n==0 || (
37560 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70  pOp->p2>0 && pOp
37570 2d 3e 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d  ->p2+n<=(p->nMem
37580 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
37590 2b 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  +1) );.  assert(
375a0 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32   pOp->p3<pOp->p2
375b0 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70   || pOp->p3>=pOp
375c0 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 43 74 78  ->p2+n );.  pCtx
375d0 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c   = sqlite3DbMall
375e0 6f 63 52 61 77 4e 4e 28 64 62 2c 20 6e 2a 73 69  ocRawNN(db, n*si
375f0 7a 65 6f 66 28 73 71 6c 69 74 65 33 5f 76 61 6c  zeof(sqlite3_val
37600 75 65 2a 29 20 2b 0a 20 20 20 20 20 20 20 20 20  ue*) +.         
37610 20 20 20 20 20 20 28 73 69 7a 65 6f 66 28 70 43        (sizeof(pC
37620 74 78 5b 30 5d 29 20 2b 20 73 69 7a 65 6f 66 28  tx[0]) + sizeof(
37630 4d 65 6d 29 20 2d 20 73 69 7a 65 6f 66 28 73 71  Mem) - sizeof(sq
37640 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 29 29 3b  lite3_value*)));
37650 0a 20 20 69 66 28 20 70 43 74 78 3d 3d 30 20 29  .  if( pCtx==0 )
37660 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
37670 70 43 74 78 2d 3e 70 4d 65 6d 20 3d 20 30 3b 0a  pCtx->pMem = 0;.
37680 20 20 70 43 74 78 2d 3e 70 4f 75 74 20 3d 20 28    pCtx->pOut = (
37690 4d 65 6d 2a 29 26 28 70 43 74 78 2d 3e 61 72 67  Mem*)&(pCtx->arg
376a0 76 5b 6e 5d 29 3b 0a 20 20 73 71 6c 69 74 65 33  v[n]);.  sqlite3
376b0 56 64 62 65 4d 65 6d 49 6e 69 74 28 70 43 74 78  VdbeMemInit(pCtx
376c0 2d 3e 70 4f 75 74 2c 20 64 62 2c 20 4d 45 4d 5f  ->pOut, db, MEM_
376d0 4e 75 6c 6c 29 3b 0a 20 20 70 43 74 78 2d 3e 70  Null);.  pCtx->p
376e0 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Func = pOp->p4.p
376f0 46 75 6e 63 3b 0a 20 20 70 43 74 78 2d 3e 69 4f  Func;.  pCtx->iO
37700 70 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20  p = (int)(pOp - 
37710 61 4f 70 29 3b 0a 20 20 70 43 74 78 2d 3e 70 56  aOp);.  pCtx->pV
37720 64 62 65 20 3d 20 70 3b 0a 20 20 70 43 74 78 2d  dbe = p;.  pCtx-
37730 3e 73 6b 69 70 46 6c 61 67 20 3d 20 30 3b 0a 20  >skipFlag = 0;. 
37740 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 20 3d   pCtx->isError =
37750 20 30 3b 0a 20 20 70 43 74 78 2d 3e 61 72 67 63   0;.  pCtx->argc
37760 20 3d 20 6e 3b 0a 20 20 70 4f 70 2d 3e 70 34 74   = n;.  pOp->p4t
37770 79 70 65 20 3d 20 50 34 5f 46 55 4e 43 43 54 58  ype = P4_FUNCCTX
37780 3b 0a 20 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78  ;.  pOp->p4.pCtx
37790 20 3d 20 70 43 74 78 3b 0a 0a 20 20 2f 2a 20 4f   = pCtx;..  /* O
377a0 50 5f 41 67 67 49 6e 76 65 72 73 65 20 6d 75 73  P_AggInverse mus
377b0 74 20 68 61 76 65 20 50 31 3d 3d 31 20 61 6e 64  t have P1==1 and
377c0 20 4f 50 5f 41 67 67 53 74 65 70 20 6d 75 73 74   OP_AggStep must
377d0 20 68 61 76 65 20 50 31 3d 3d 30 20 2a 2f 0a 20   have P1==0 */. 
377e0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
377f0 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  ==(pOp->opcode==
37800 4f 50 5f 41 67 67 49 6e 76 65 72 73 65 29 20 29  OP_AggInverse) )
37810 3b 0a 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ;..  pOp->opcode
37820 20 3d 20 4f 50 5f 41 67 67 53 74 65 70 31 3b 0a   = OP_AggStep1;.
37830 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
37840 68 20 69 6e 74 6f 20 4f 50 5f 41 67 67 53 74 65  h into OP_AggSte
37850 70 20 2a 2f 0a 7d 0a 63 61 73 65 20 4f 50 5f 41  p */.}.case OP_A
37860 67 67 53 74 65 70 31 3a 20 7b 0a 20 20 69 6e 74  ggStep1: {.  int
37870 20 69 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f   i;.  sqlite3_co
37880 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a 20 20 4d  ntext *pCtx;.  M
37890 65 6d 20 2a 70 4d 65 6d 3b 0a 0a 20 20 61 73 73  em *pMem;..  ass
378a0 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
378b0 3d 3d 50 34 5f 46 55 4e 43 43 54 58 20 29 3b 0a  ==P4_FUNCCTX );.
378c0 20 20 70 43 74 78 20 3d 20 70 4f 70 2d 3e 70 34    pCtx = pOp->p4
378d0 2e 70 43 74 78 3b 0a 20 20 70 4d 65 6d 20 3d 20  .pCtx;.  pMem = 
378e0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
378f0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
37900 45 42 55 47 0a 20 20 69 66 28 20 70 4f 70 2d 3e  EBUG.  if( pOp->
37910 70 31 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69  p1 ){.    /* Thi
37920 73 20 69 73 20 61 6e 20 4f 50 5f 41 67 67 49 6e  s is an OP_AggIn
37930 76 65 72 73 65 20 63 61 6c 6c 2e 20 20 56 65 72  verse call.  Ver
37940 69 66 79 20 74 68 61 74 20 78 53 74 65 70 20 68  ify that xStep h
37950 61 73 20 61 6c 77 61 79 73 0a 20 20 20 20 2a 2a  as always.    **
37960 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 61 74 20   been called at 
37970 6c 65 61 73 74 20 6f 6e 63 65 20 70 72 69 6f 72  least once prior
37980 20 74 6f 20 61 6e 79 20 78 49 6e 76 65 72 73 65   to any xInverse
37990 20 63 61 6c 6c 2e 20 2a 2f 0a 20 20 20 20 61 73   call. */.    as
379a0 73 65 72 74 28 20 70 4d 65 6d 2d 3e 75 54 65 6d  sert( pMem->uTem
379b0 70 3d 3d 30 78 31 31 32 32 65 30 65 33 20 29 3b  p==0x1122e0e3 );
379c0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
379d0 20 54 68 69 73 20 69 73 20 61 6e 20 4f 50 5f 41   This is an OP_A
379e0 67 67 53 74 65 70 20 63 61 6c 6c 2e 20 20 4d 61  ggStep call.  Ma
379f0 72 6b 20 69 74 20 61 73 20 73 75 63 68 2e 20 2a  rk it as such. *
37a00 2f 0a 20 20 20 20 70 4d 65 6d 2d 3e 75 54 65 6d  /.    pMem->uTem
37a10 70 20 3d 20 30 78 31 31 32 32 65 30 65 33 3b 0a  p = 0x1122e0e3;.
37a20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a    }.#endif..  /*
37a30 20 49 66 20 74 68 69 73 20 66 75 6e 63 74 69 6f   If this functio
37a40 6e 20 69 73 20 69 6e 73 69 64 65 20 6f 66 20 61  n is inside of a
37a50 20 74 72 69 67 67 65 72 2c 20 74 68 65 20 72 65   trigger, the re
37a60 67 69 73 74 65 72 20 61 72 72 61 79 20 69 6e 20  gister array in 
37a70 61 4d 65 6d 5b 5d 0a 20 20 2a 2a 20 6d 69 67 68  aMem[].  ** migh
37a80 74 20 63 68 61 6e 67 65 20 66 72 6f 6d 20 6f 6e  t change from on
37a90 65 20 65 76 61 6c 75 61 74 69 6f 6e 20 74 6f 20  e evaluation to 
37aa0 74 68 65 20 6e 65 78 74 2e 20 20 54 68 65 20 6e  the next.  The n
37ab0 65 78 74 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64  ext block of cod
37ac0 65 0a 20 20 2a 2a 20 63 68 65 63 6b 73 20 74 6f  e.  ** checks to
37ad0 20 73 65 65 20 69 66 20 74 68 65 20 72 65 67 69   see if the regi
37ae0 73 74 65 72 20 61 72 72 61 79 20 68 61 73 20 63  ster array has c
37af0 68 61 6e 67 65 64 2c 20 61 6e 64 20 69 66 20 73  hanged, and if s
37b00 6f 20 69 74 0a 20 20 2a 2a 20 72 65 69 6e 69 74  o it.  ** reinit
37b10 69 61 6c 69 7a 65 73 20 74 68 65 20 72 65 6c 61  ializes the rela
37b20 76 61 6e 74 20 70 61 72 74 73 20 6f 66 20 74 68  vant parts of th
37b30 65 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  e sqlite3_contex
37b40 74 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 69 66  t object */.  if
37b50 28 20 70 43 74 78 2d 3e 70 4d 65 6d 20 21 3d 20  ( pCtx->pMem != 
37b60 70 4d 65 6d 20 29 7b 0a 20 20 20 20 70 43 74 78  pMem ){.    pCtx
37b70 2d 3e 70 4d 65 6d 20 3d 20 70 4d 65 6d 3b 0a 20  ->pMem = pMem;. 
37b80 20 20 20 66 6f 72 28 69 3d 70 43 74 78 2d 3e 61     for(i=pCtx->a
37b90 72 67 63 2d 31 3b 20 69 3e 3d 30 3b 20 69 2d 2d  rgc-1; i>=0; i--
37ba0 29 20 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 20  ) pCtx->argv[i] 
37bb0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 2b  = &aMem[pOp->p2+
37bc0 69 5d 3b 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20  i];.  }..#ifdef 
37bd0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 66  SQLITE_DEBUG.  f
37be0 6f 72 28 69 3d 30 3b 20 69 3c 70 43 74 78 2d 3e  or(i=0; i<pCtx->
37bf0 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  argc; i++){.    
37c00 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
37c10 69 64 28 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d  id(pCtx->argv[i]
37c20 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  ) );.    REGISTE
37c30 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b  R_TRACE(pOp->p2+
37c40 69 2c 20 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d  i, pCtx->argv[i]
37c50 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  );.  }.#endif.. 
37c60 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 61 73   pMem->n++;.  as
37c70 73 65 72 74 28 20 70 43 74 78 2d 3e 70 4f 75 74  sert( pCtx->pOut
37c80 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 4e 75 6c  ->flags==MEM_Nul
37c90 6c 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  l );.  assert( p
37ca0 43 74 78 2d 3e 69 73 45 72 72 6f 72 3d 3d 30 20  Ctx->isError==0 
37cb0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 74  );.  assert( pCt
37cc0 78 2d 3e 73 6b 69 70 46 6c 61 67 3d 3d 30 20 29  x->skipFlag==0 )
37cd0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
37ce0 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55 4e 43  _OMIT_WINDOWFUNC
37cf0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29  .  if( pOp->p1 )
37d00 7b 0a 20 20 20 20 28 70 43 74 78 2d 3e 70 46 75  {.    (pCtx->pFu
37d10 6e 63 2d 3e 78 49 6e 76 65 72 73 65 29 28 70 43  nc->xInverse)(pC
37d20 74 78 2c 70 43 74 78 2d 3e 61 72 67 63 2c 70 43  tx,pCtx->argc,pC
37d30 74 78 2d 3e 61 72 67 76 29 3b 0a 20 20 7d 65 6c  tx->argv);.  }el
37d40 73 65 0a 23 65 6e 64 69 66 0a 20 20 28 70 43 74  se.#endif.  (pCt
37d50 78 2d 3e 70 46 75 6e 63 2d 3e 78 53 46 75 6e 63  x->pFunc->xSFunc
37d60 29 28 70 43 74 78 2c 70 43 74 78 2d 3e 61 72 67  )(pCtx,pCtx->arg
37d70 63 2c 70 43 74 78 2d 3e 61 72 67 76 29 3b 20 2f  c,pCtx->argv); /
37d80 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32  * IMP: R-24505-2
37d90 33 32 33 30 20 2a 2f 0a 0a 20 20 69 66 28 20 70  3230 */..  if( p
37da0 43 74 78 2d 3e 69 73 45 72 72 6f 72 20 29 7b 0a  Ctx->isError ){.
37db0 20 20 20 20 69 66 28 20 70 43 74 78 2d 3e 69 73      if( pCtx->is
37dc0 45 72 72 6f 72 3e 30 20 29 7b 0a 20 20 20 20 20  Error>0 ){.     
37dd0 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
37de0 72 28 70 2c 20 22 25 73 22 2c 20 73 71 6c 69 74  r(p, "%s", sqlit
37df0 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 43  e3_value_text(pC
37e00 74 78 2d 3e 70 4f 75 74 29 29 3b 0a 20 20 20 20  tx->pOut));.    
37e10 20 20 72 63 20 3d 20 70 43 74 78 2d 3e 69 73 45    rc = pCtx->isE
37e20 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20  rror;.    }.    
37e30 69 66 28 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c  if( pCtx->skipFl
37e40 61 67 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  ag ){.      asse
37e50 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f  rt( pOp[-1].opco
37e60 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29  de==OP_CollSeq )
37e70 3b 0a 20 20 20 20 20 20 69 20 3d 20 70 4f 70 5b  ;.      i = pOp[
37e80 2d 31 5d 2e 70 31 3b 0a 20 20 20 20 20 20 69 66  -1].p1;.      if
37e90 28 20 69 20 29 20 73 71 6c 69 74 65 33 56 64 62  ( i ) sqlite3Vdb
37ea0 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d  eMemSetInt64(&aM
37eb0 65 6d 5b 69 5d 2c 20 31 29 3b 0a 20 20 20 20 20  em[i], 1);.     
37ec0 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67 20   pCtx->skipFlag 
37ed0 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  = 0;.    }.    s
37ee0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
37ef0 65 61 73 65 28 70 43 74 78 2d 3e 70 4f 75 74 29  ease(pCtx->pOut)
37f00 3b 0a 20 20 20 20 70 43 74 78 2d 3e 70 4f 75 74  ;.    pCtx->pOut
37f10 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  ->flags = MEM_Nu
37f20 6c 6c 3b 0a 20 20 20 20 70 43 74 78 2d 3e 69 73  ll;.    pCtx->is
37f30 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20 20 20 69  Error = 0;.    i
37f40 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
37f50 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
37f60 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70  .  }.  assert( p
37f70 43 74 78 2d 3e 70 4f 75 74 2d 3e 66 6c 61 67 73  Ctx->pOut->flags
37f80 3d 3d 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20  ==MEM_Null );.  
37f90 61 73 73 65 72 74 28 20 70 43 74 78 2d 3e 73 6b  assert( pCtx->sk
37fa0 69 70 46 6c 61 67 3d 3d 30 20 29 3b 0a 20 20 62  ipFlag==0 );.  b
37fb0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
37fc0 64 65 3a 20 41 67 67 46 69 6e 61 6c 20 50 31 20  de: AggFinal P1 
37fd0 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
37fe0 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50  opsis: accum=r[P
37ff0 31 5d 20 4e 3d 50 32 0a 2a 2a 0a 2a 2a 20 50 31  1] N=P2.**.** P1
38000 20 69 73 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c   is the memory l
38010 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20  ocation that is 
38020 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 20  the accumulator 
38030 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74 65  for an aggregate
38040 0a 2a 2a 20 6f 72 20 77 69 6e 64 6f 77 20 66 75  .** or window fu
38050 6e 63 74 69 6f 6e 2e 20 20 45 78 65 63 75 74 65  nction.  Execute
38060 20 74 68 65 20 66 69 6e 61 6c 69 7a 65 72 20 66   the finalizer f
38070 75 6e 63 74 69 6f 6e 20 0a 2a 2a 20 66 6f 72 20  unction .** for 
38080 61 6e 20 61 67 67 72 65 67 61 74 65 20 61 6e 64  an aggregate and
38090 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
380a0 74 20 69 6e 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50  t in P1..**.** P
380b0 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20  2 is the number 
380c0 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61  of arguments tha
380d0 74 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74  t the step funct
380e0 69 6f 6e 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a  ion takes and.**
380f0 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
38100 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66 20   to the FuncDef 
38110 66 6f 72 20 74 68 69 73 20 66 75 6e 63 74 69 6f  for this functio
38120 6e 2e 20 20 54 68 65 20 50 32 0a 2a 2a 20 61 72  n.  The P2.** ar
38130 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74 20 75 73  gument is not us
38140 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  ed by this opcod
38150 65 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 74  e.  It is only t
38160 68 65 72 65 20 74 6f 20 64 69 73 61 6d 62 69 67  here to disambig
38170 75 61 74 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e  uate.** function
38180 73 20 74 68 61 74 20 63 61 6e 20 74 61 6b 65 20  s that can take 
38190 76 61 72 79 69 6e 67 20 6e 75 6d 62 65 72 73 20  varying numbers 
381a0 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 54  of arguments.  T
381b0 68 65 0a 2a 2a 20 50 34 20 61 72 67 75 6d 65 6e  he.** P4 argumen
381c0 74 20 69 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64  t is only needed
381d0 20 66 6f 72 20 74 68 65 20 63 61 73 65 20 77 68   for the case wh
381e0 65 72 65 0a 2a 2a 20 74 68 65 20 73 74 65 70 20  ere.** the step 
381f0 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 6e 6f 74  function was not
38200 20 70 72 65 76 69 6f 75 73 6c 79 20 63 61 6c 6c   previously call
38210 65 64 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ed..*/./* Opcode
38220 3a 20 41 67 67 56 61 6c 75 65 20 2a 20 50 32 20  : AggValue * P2 
38230 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
38240 73 69 73 3a 20 72 5b 50 33 5d 3d 76 61 6c 75 65  sis: r[P3]=value
38250 20 4e 3d 50 32 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f   N=P2.**.** Invo
38260 6b 65 20 74 68 65 20 78 56 61 6c 75 65 28 29 20  ke the xValue() 
38270 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 73 74 6f  function and sto
38280 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
38290 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
382a0 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75  .** P2 is the nu
382b0 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
382c0 73 20 74 68 61 74 20 74 68 65 20 73 74 65 70 20  s that the step 
382d0 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65 73 20 61  function takes a
382e0 6e 64 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  nd.** P4 is a po
382f0 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e  inter to the Fun
38300 63