/ Hex Artifact Content
Login

Artifact d0c302d9f58adfbb1f5fd3542cb49ac02a8cc1375808d2a4dcacdc2a8f1fd64b:


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 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45   SQLITE_AFF_NONE
35e0: 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20 20  :.**    No-op.  
35f0: 70 52 65 63 20 69 73 20 75 6e 63 68 61 6e 67 65  pRec is unchange
3600: 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  d..*/.static voi
3610: 64 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28  d applyAffinity(
3620: 0a 20 20 4d 65 6d 20 2a 70 52 65 63 2c 20 20 20  .  Mem *pRec,   
3630: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76 61         /* The va
3640: 6c 75 65 20 74 6f 20 61 70 70 6c 79 20 61 66 66  lue to apply aff
3650: 69 6e 69 74 79 20 74 6f 20 2a 2f 0a 20 20 63 68  inity to */.  ch
3660: 61 72 20 61 66 66 69 6e 69 74 79 2c 20 20 20 20  ar affinity,    
3670: 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
3680: 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20  y to be applied 
3690: 2a 2f 0a 20 20 75 38 20 65 6e 63 20 20 20 20 20  */.  u8 enc     
36a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20           /* Use 
36b0: 74 68 69 73 20 74 65 78 74 20 65 6e 63 6f 64 69  this text encodi
36c0: 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61  ng */.){.  if( a
36d0: 66 66 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f  ffinity>=SQLITE_
36e0: 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20  AFF_NUMERIC ){. 
36f0: 20 20 20 61 73 73 65 72 74 28 20 61 66 66 69 6e     assert( affin
3700: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
3710: 49 4e 54 45 47 45 52 20 7c 7c 20 61 66 66 69 6e  INTEGER || affin
3720: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
3730: 52 45 41 4c 0a 20 20 20 20 20 20 20 20 20 20 20  REAL.           
3740: 20 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53    || affinity==S
3750: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
3760: 43 20 29 3b 0a 20 20 20 20 69 66 28 20 28 70 52  C );.    if( (pR
3770: 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ec->flags & MEM_
3780: 49 6e 74 29 3d 3d 30 20 29 7b 20 2f 2a 4f 50 54  Int)==0 ){ /*OPT
3790: 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c  IMIZATION-IF-FAL
37a0: 53 45 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28  SE*/.      if( (
37b0: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pRec->flags & ME
37c0: 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20  M_Real)==0 ){.  
37d0: 20 20 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e        if( pRec->
37e0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20  flags & MEM_Str 
37f0: 29 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66  ) applyNumericAf
3800: 66 69 6e 69 74 79 28 70 52 65 63 2c 31 29 3b 0a  finity(pRec,1);.
3810: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
3820: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
3830: 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79 28  IntegerAffinity(
3840: 70 52 65 63 29 3b 0a 20 20 20 20 20 20 7d 0a 20  pRec);.      }. 
3850: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28     }.  }else if(
3860: 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54   affinity==SQLIT
3870: 45 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a 20 20  E_AFF_TEXT ){.  
3880: 20 20 2f 2a 20 4f 6e 6c 79 20 61 74 74 65 6d 70    /* Only attemp
3890: 74 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e  t the conversion
38a0: 20 74 6f 20 54 45 58 54 20 69 66 20 74 68 65 72   to TEXT if ther
38b0: 65 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  e is an integer 
38c0: 6f 72 20 72 65 61 6c 0a 20 20 20 20 2a 2a 20 72  or real.    ** r
38d0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 28 62  epresentation (b
38e0: 6c 6f 62 20 61 6e 64 20 4e 55 4c 4c 20 64 6f 20  lob and NULL do 
38f0: 6e 6f 74 20 67 65 74 20 63 6f 6e 76 65 72 74 65  not get converte
3900: 64 29 20 62 75 74 20 6e 6f 20 73 74 72 69 6e 67  d) but no string
3910: 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73 65 6e  .    ** represen
3920: 74 61 74 69 6f 6e 2e 20 20 49 74 20 77 6f 75 6c  tation.  It woul
3930: 64 20 62 65 20 68 61 72 6d 6c 65 73 73 20 74 6f  d be harmless to
3940: 20 72 65 70 65 61 74 20 74 68 65 20 63 6f 6e 76   repeat the conv
3950: 65 72 73 69 6f 6e 20 69 66 20 0a 20 20 20 20 2a  ersion if .    *
3960: 2a 20 74 68 65 72 65 20 69 73 20 61 6c 72 65 61  * there is alrea
3970: 64 79 20 61 20 73 74 72 69 6e 67 20 72 65 70 2c  dy a string rep,
3980: 20 62 75 74 20 69 74 20 69 73 20 70 6f 69 6e 74   but it is point
3990: 6c 65 73 73 20 74 6f 20 77 61 73 74 65 20 74 68  less to waste th
39a0: 6f 73 65 0a 20 20 20 20 2a 2a 20 43 50 55 20 63  ose.    ** CPU c
39b0: 79 63 6c 65 73 2e 20 2a 2f 0a 20 20 20 20 69 66  ycles. */.    if
39c0: 28 20 30 3d 3d 28 70 52 65 63 2d 3e 66 6c 61 67  ( 0==(pRec->flag
39d0: 73 26 4d 45 4d 5f 53 74 72 29 20 29 7b 20 2f 2a  s&MEM_Str) ){ /*
39e0: 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d  OPTIMIZATION-IF-
39f0: 46 41 4c 53 45 2a 2f 0a 20 20 20 20 20 20 69 66  FALSE*/.      if
3a00: 28 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 28  ( (pRec->flags&(
3a10: 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74  MEM_Real|MEM_Int
3a20: 7c 4d 45 4d 5f 49 6e 74 52 65 61 6c 29 29 20 29  |MEM_IntReal)) )
3a30: 7b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61  {.        testca
3a40: 73 65 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20  se( pRec->flags 
3a50: 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20  & MEM_Int );.   
3a60: 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70       testcase( p
3a70: 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Rec->flags & MEM
3a80: 5f 52 65 61 6c 20 29 3b 0a 20 20 20 20 20 20 20  _Real );.       
3a90: 20 74 65 73 74 63 61 73 65 28 20 70 52 65 63 2d   testcase( pRec-
3aa0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
3ab0: 52 65 61 6c 20 29 3b 0a 20 20 20 20 20 20 20 20  Real );.        
3ac0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74  sqlite3VdbeMemSt
3ad0: 72 69 6e 67 69 66 79 28 70 52 65 63 2c 20 65 6e  ringify(pRec, en
3ae0: 63 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20  c, 1);.      }. 
3af0: 20 20 20 7d 0a 20 20 20 20 70 52 65 63 2d 3e 66     }.    pRec->f
3b00: 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 52 65  lags &= ~(MEM_Re
3b10: 61 6c 7c 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 49  al|MEM_Int|MEM_I
3b20: 6e 74 52 65 61 6c 29 3b 0a 20 20 7d 0a 7d 0a 0a  ntReal);.  }.}..
3b30: 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e  /*.** Try to con
3b40: 76 65 72 74 20 74 68 65 20 74 79 70 65 20 6f 66  vert the type of
3b50: 20 61 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75   a function argu
3b60: 6d 65 6e 74 20 6f 72 20 61 20 72 65 73 75 6c 74  ment or a result
3b70: 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 69 6e 74 6f 20   column.** into 
3b80: 61 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73  a numeric repres
3b90: 65 6e 74 61 74 69 6f 6e 2e 20 20 55 73 65 20 65  entation.  Use e
3ba0: 69 74 68 65 72 20 49 4e 54 45 47 45 52 20 6f 72  ither INTEGER or
3bb0: 20 52 45 41 4c 20 77 68 69 63 68 65 76 65 72 0a   REAL whichever.
3bc0: 2a 2a 20 69 73 20 61 70 70 72 6f 70 72 69 61 74  ** is appropriat
3bd0: 65 2e 20 20 42 75 74 20 6f 6e 6c 79 20 64 6f 20  e.  But only do 
3be0: 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  the conversion i
3bf0: 66 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65  f it is possible
3c00: 20 77 69 74 68 6f 75 74 0a 2a 2a 20 6c 6f 73 73   without.** loss
3c10: 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20   of information 
3c20: 61 6e 64 20 72 65 74 75 72 6e 20 74 68 65 20 72  and return the r
3c30: 65 76 69 73 65 64 20 74 79 70 65 20 6f 66 20 74  evised type of t
3c40: 68 65 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a  he argument..*/.
3c50: 69 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  int sqlite3_valu
3c60: 65 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65 28 73  e_numeric_type(s
3c70: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56  qlite3_value *pV
3c80: 61 6c 29 7b 0a 20 20 69 6e 74 20 65 54 79 70 65  al){.  int eType
3c90: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
3ca0: 5f 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20 69  _type(pVal);.  i
3cb0: 66 28 20 65 54 79 70 65 3d 3d 53 51 4c 49 54 45  f( eType==SQLITE
3cc0: 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 4d 65 6d  _TEXT ){.    Mem
3cd0: 20 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70   *pMem = (Mem*)p
3ce0: 56 61 6c 3b 0a 20 20 20 20 61 70 70 6c 79 4e 75  Val;.    applyNu
3cf0: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 4d  mericAffinity(pM
3d00: 65 6d 2c 20 30 29 3b 0a 20 20 20 20 65 54 79 70  em, 0);.    eTyp
3d10: 65 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  e = sqlite3_valu
3d20: 65 5f 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20  e_type(pVal);.  
3d30: 7d 0a 20 20 72 65 74 75 72 6e 20 65 54 79 70 65  }.  return eType
3d40: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72  ;.}../*.** Expor
3d50: 74 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61  ted version of a
3d60: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20  pplyAffinity(). 
3d70: 54 68 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f  This one works o
3d80: 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  n sqlite3_value*
3d90: 2c 20 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e  , .** not the in
3da0: 74 65 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65  ternal Mem* type
3db0: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
3dc0: 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e  3ValueApplyAffin
3dd0: 69 74 79 28 0a 20 20 73 71 6c 69 74 65 33 5f 76  ity(.  sqlite3_v
3de0: 61 6c 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75  alue *pVal, .  u
3df0: 38 20 61 66 66 69 6e 69 74 79 2c 20 0a 20 20 75  8 affinity, .  u
3e00: 38 20 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79  8 enc.){.  apply
3e10: 41 66 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29  Affinity((Mem *)
3e20: 70 56 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20  pVal, affinity, 
3e30: 65 6e 63 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 70  enc);.}../*.** p
3e40: 4d 65 6d 20 63 75 72 72 65 6e 74 6c 79 20 6f 6e  Mem currently on
3e50: 6c 79 20 68 6f 6c 64 73 20 61 20 73 74 72 69 6e  ly holds a strin
3e60: 67 20 74 79 70 65 20 28 6f 72 20 6d 61 79 62 65  g type (or maybe
3e70: 20 61 20 42 4c 4f 42 20 74 68 61 74 20 77 65 20   a BLOB that we 
3e80: 63 61 6e 0a 2a 2a 20 69 6e 74 65 72 70 72 65 74  can.** interpret
3e90: 20 61 73 20 61 20 73 74 72 69 6e 67 20 69 66 20   as a string if 
3ea0: 77 65 20 77 61 6e 74 20 74 6f 29 2e 20 20 43 6f  we want to).  Co
3eb0: 6d 70 75 74 65 20 69 74 73 20 63 6f 72 72 65 73  mpute its corres
3ec0: 70 6f 6e 64 69 6e 67 0a 2a 2a 20 6e 75 6d 65 72  ponding.** numer
3ed0: 69 63 20 74 79 70 65 2c 20 69 66 20 68 61 73 20  ic type, if has 
3ee0: 6f 6e 65 2e 20 20 53 65 74 20 74 68 65 20 70 4d  one.  Set the pM
3ef0: 65 6d 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d  em->u.r and pMem
3f00: 2d 3e 75 2e 69 20 66 69 65 6c 64 73 0a 2a 2a 20  ->u.i fields.** 
3f10: 61 63 63 6f 72 64 69 6e 67 6c 79 2e 0a 2a 2f 0a  accordingly..*/.
3f20: 73 74 61 74 69 63 20 75 31 36 20 53 51 4c 49 54  static u16 SQLIT
3f30: 45 5f 4e 4f 49 4e 4c 49 4e 45 20 63 6f 6d 70 75  E_NOINLINE compu
3f40: 74 65 4e 75 6d 65 72 69 63 54 79 70 65 28 4d 65  teNumericType(Me
3f50: 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 6e 74 20  m *pMem){.  int 
3f60: 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e  rc;.  sqlite3_in
3f70: 74 36 34 20 69 78 3b 0a 20 20 61 73 73 65 72 74  t64 ix;.  assert
3f80: 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
3f90: 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65   (MEM_Int|MEM_Re
3fa0: 61 6c 7c 4d 45 4d 5f 49 6e 74 52 65 61 6c 29 29  al|MEM_IntReal))
3fb0: 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
3fc0: 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20   (pMem->flags & 
3fd0: 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f  (MEM_Str|MEM_Blo
3fe0: 62 29 29 21 3d 30 20 29 3b 0a 20 20 45 78 70 61  b))!=0 );.  Expa
3ff0: 6e 64 42 6c 6f 62 28 70 4d 65 6d 29 3b 0a 20 20  ndBlob(pMem);.  
4000: 72 63 20 3d 20 73 71 6c 69 74 65 33 41 74 6f 46  rc = sqlite3AtoF
4010: 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d  (pMem->z, &pMem-
4020: 3e 75 2e 72 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70  >u.r, pMem->n, p
4030: 4d 65 6d 2d 3e 65 6e 63 29 3b 0a 20 20 69 66 28  Mem->enc);.  if(
4040: 20 72 63 3c 3d 30 20 29 7b 0a 20 20 20 20 69 66   rc<=0 ){.    if
4050: 28 20 72 63 3d 3d 30 20 26 26 20 73 71 6c 69 74  ( rc==0 && sqlit
4060: 65 33 41 74 6f 69 36 34 28 70 4d 65 6d 2d 3e 7a  e3Atoi64(pMem->z
4070: 2c 20 26 69 78 2c 20 70 4d 65 6d 2d 3e 6e 2c 20  , &ix, pMem->n, 
4080: 70 4d 65 6d 2d 3e 65 6e 63 29 3c 3d 31 20 29 7b  pMem->enc)<=1 ){
4090: 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 69  .      pMem->u.i
40a0: 20 3d 20 69 78 3b 0a 20 20 20 20 20 20 72 65 74   = ix;.      ret
40b0: 75 72 6e 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20  urn MEM_Int;.   
40c0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 65   }else{.      re
40d0: 74 75 72 6e 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20  turn MEM_Real;. 
40e0: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28     }.  }else if(
40f0: 20 72 63 3d 3d 31 20 26 26 20 73 71 6c 69 74 65   rc==1 && sqlite
4100: 33 41 74 6f 69 36 34 28 70 4d 65 6d 2d 3e 7a 2c  3Atoi64(pMem->z,
4110: 20 26 69 78 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70   &ix, pMem->n, p
4120: 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a  Mem->enc)==0 ){.
4130: 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d 20      pMem->u.i = 
4140: 69 78 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 4d  ix;.    return M
4150: 45 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20 72 65  EM_Int;.  }.  re
4160: 74 75 72 6e 20 4d 45 4d 5f 52 65 61 6c 3b 0a 7d  turn MEM_Real;.}
4170: 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
4180: 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20  he numeric type 
4190: 66 6f 72 20 70 4d 65 6d 2c 20 65 69 74 68 65 72  for pMem, either
41a0: 20 4d 45 4d 5f 49 6e 74 20 6f 72 20 4d 45 4d 5f   MEM_Int or MEM_
41b0: 52 65 61 6c 20 6f 72 20 62 6f 74 68 20 6f 72 0a  Real or both or.
41c0: 2a 2a 20 6e 6f 6e 65 2e 20 20 0a 2a 2a 0a 2a 2a  ** none.  .**.**
41d0: 20 55 6e 6c 69 6b 65 20 61 70 70 6c 79 4e 75 6d   Unlike applyNum
41e0: 65 72 69 63 41 66 66 69 6e 69 74 79 28 29 2c 20  ericAffinity(), 
41f0: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 64 6f 65  this routine doe
4200: 73 20 6e 6f 74 20 6d 6f 64 69 66 79 20 70 4d 65  s not modify pMe
4210: 6d 2d 3e 66 6c 61 67 73 2e 0a 2a 2a 20 42 75 74  m->flags..** But
4220: 20 69 74 20 64 6f 65 73 20 73 65 74 20 70 4d 65   it does set pMe
4230: 6d 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d 2d  m->u.r and pMem-
4240: 3e 75 2e 69 20 61 70 70 72 6f 70 72 69 61 74 65  >u.i appropriate
4250: 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75 31  ly..*/.static u1
4260: 36 20 6e 75 6d 65 72 69 63 54 79 70 65 28 4d 65  6 numericType(Me
4270: 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 66 28 20  m *pMem){.  if( 
4280: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
4290: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c  EM_Int|MEM_Real|
42a0: 4d 45 4d 5f 49 6e 74 52 65 61 6c 29 20 29 7b 0a  MEM_IntReal) ){.
42b0: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4d      testcase( pM
42c0: 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  em->flags & MEM_
42d0: 49 6e 74 20 29 3b 0a 20 20 20 20 74 65 73 74 63  Int );.    testc
42e0: 61 73 65 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73  ase( pMem->flags
42f0: 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20   & MEM_Real );. 
4300: 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4d 65     testcase( pMe
4310: 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  m->flags & MEM_I
4320: 6e 74 52 65 61 6c 20 29 3b 0a 20 20 20 20 72 65  ntReal );.    re
4330: 74 75 72 6e 20 70 4d 65 6d 2d 3e 66 6c 61 67 73  turn pMem->flags
4340: 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
4350: 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 52 65 61 6c  Real|MEM_IntReal
4360: 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4d 65  );.  }.  if( pMe
4370: 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  m->flags & (MEM_
4380: 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b  Str|MEM_Blob) ){
4390: 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70  .    testcase( p
43a0: 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Mem->flags & MEM
43b0: 5f 53 74 72 20 29 3b 0a 20 20 20 20 74 65 73 74  _Str );.    test
43c0: 63 61 73 65 28 20 70 4d 65 6d 2d 3e 66 6c 61 67  case( pMem->flag
43d0: 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a  s & MEM_Blob );.
43e0: 20 20 20 20 72 65 74 75 72 6e 20 63 6f 6d 70 75      return compu
43f0: 74 65 4e 75 6d 65 72 69 63 54 79 70 65 28 70 4d  teNumericType(pM
4400: 65 6d 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  em);.  }.  retur
4410: 6e 20 30 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53  n 0;.}..#ifdef S
4420: 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a  QLITE_DEBUG./*.*
4430: 2a 20 57 72 69 74 65 20 61 20 6e 69 63 65 20 73  * Write a nice s
4440: 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61  tring representa
4450: 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 74  tion of the cont
4460: 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d 65  ents of cell pMe
4470: 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65 72  m.** into buffer
4480: 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e 42   zBuf, length nB
4490: 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  uf..*/.void sqli
44a0: 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79  te3VdbeMemPretty
44b0: 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c  Print(Mem *pMem,
44c0: 20 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20 20   char *zBuf){.  
44d0: 63 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42 75  char *zCsr = zBu
44e0: 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d 65  f;.  int f = pMe
44f0: 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74 61  m->flags;..  sta
4500: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
4510: 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b 5d  const encnames[]
4520: 20 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29 22   = {"(X)", "(8)"
4530: 2c 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31 36  , "(16LE)", "(16
4540: 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66 26  BE)"};..  if( f&
4550: 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20 20  MEM_Blob ){.    
4560: 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20  int i;.    char 
4570: 63 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d  c;.    if( f & M
4580: 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20  EM_Dyn ){.      
4590: 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61  c = 'z';.      a
45a0: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
45b0: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65  _Static|MEM_Ephe
45c0: 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  m))==0 );.    }e
45d0: 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f  lse if( f & MEM_
45e0: 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20  Static ){.      
45f0: 63 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61  c = 't';.      a
4600: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
4610: 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29  _Dyn|MEM_Ephem))
4620: 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==0 );.    }else
4630: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68   if( f & MEM_Eph
4640: 65 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  em ){.      c = 
4650: 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'e';.      asser
4660: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
4670: 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30  tic|MEM_Dyn))==0
4680: 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   );.    }else{. 
4690: 20 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20 20       c = 's';.  
46a0: 20 20 7d 0a 20 20 20 20 2a 28 7a 43 73 72 2b 2b    }.    *(zCsr++
46b0: 29 20 3d 20 63 3b 0a 20 20 20 20 73 71 6c 69 74  ) = c;.    sqlit
46c0: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
46d0: 20 7a 43 73 72 2c 20 22 25 64 5b 22 2c 20 70 4d   zCsr, "%d[", pM
46e0: 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a 43 73 72  em->n);.    zCsr
46f0: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
4700: 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 66  n30(zCsr);.    f
4710: 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20  or(i=0; i<16 && 
4720: 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b  i<pMem->n; i++){
4730: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
4740: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
4750: 72 2c 20 22 25 30 32 58 22 2c 20 28 28 69 6e 74  r, "%02X", ((int
4760: 29 70 4d 65 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78  )pMem->z[i] & 0x
4770: 46 46 29 29 3b 0a 20 20 20 20 20 20 7a 43 73 72  FF));.      zCsr
4780: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
4790: 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d  n30(zCsr);.    }
47a0: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
47b0: 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b  16 && i<pMem->n;
47c0: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 68 61   i++){.      cha
47d0: 72 20 7a 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d  r z = pMem->z[i]
47e0: 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 3c 33 32  ;.      if( z<32
47f0: 20 7c 7c 20 7a 3e 31 32 36 20 29 20 2a 7a 43 73   || z>126 ) *zCs
4800: 72 2b 2b 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20  r++ = '.';.     
4810: 20 65 6c 73 65 20 2a 7a 43 73 72 2b 2b 20 3d 20   else *zCsr++ = 
4820: 7a 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a 28 7a  z;.    }.    *(z
4830: 43 73 72 2b 2b 29 20 3d 20 27 5d 27 3b 0a 20 20  Csr++) = ']';.  
4840: 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 5a 65    if( f & MEM_Ze
4850: 72 6f 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ro ){.      sqli
4860: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30  te3_snprintf(100
4870: 2c 20 7a 43 73 72 2c 22 2b 25 64 7a 22 2c 70 4d  , zCsr,"+%dz",pM
4880: 65 6d 2d 3e 75 2e 6e 5a 65 72 6f 29 3b 0a 20 20  em->u.nZero);.  
4890: 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69      zCsr += sqli
48a0: 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72  te3Strlen30(zCsr
48b0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a 7a 43  );.    }.    *zC
48c0: 73 72 20 3d 20 27 5c 30 27 3b 0a 20 20 7d 65 6c  sr = '\0';.  }el
48d0: 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53  se if( f & MEM_S
48e0: 74 72 20 29 7b 0a 20 20 20 20 69 6e 74 20 6a 2c  tr ){.    int j,
48f0: 20 6b 3b 0a 20 20 20 20 7a 42 75 66 5b 30 5d 20   k;.    zBuf[0] 
4900: 3d 20 27 20 27 3b 0a 20 20 20 20 69 66 28 20 66  = ' ';.    if( f
4910: 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20   & MEM_Dyn ){.  
4920: 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 7a      zBuf[1] = 'z
4930: 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ';.      assert(
4940: 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69   (f & (MEM_Stati
4950: 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30  c|MEM_Ephem))==0
4960: 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66   );.    }else if
4970: 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74 69 63  ( f & MEM_Static
4980: 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31   ){.      zBuf[1
4990: 5d 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61  ] = 't';.      a
49a0: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
49b0: 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29  _Dyn|MEM_Ephem))
49c0: 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==0 );.    }else
49d0: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68   if( f & MEM_Eph
49e0: 65 6d 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66  em ){.      zBuf
49f0: 5b 31 5d 20 3d 20 27 65 27 3b 0a 20 20 20 20 20  [1] = 'e';.     
4a00: 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d   assert( (f & (M
4a10: 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79  EM_Static|MEM_Dy
4a20: 6e 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  n))==0 );.    }e
4a30: 6c 73 65 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b  lse{.      zBuf[
4a40: 31 5d 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d 0a  1] = 's';.    }.
4a50: 20 20 20 20 6b 20 3d 20 32 3b 0a 20 20 20 20 73      k = 2;.    s
4a60: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
4a70: 31 30 30 2c 20 26 7a 42 75 66 5b 6b 5d 2c 20 22  100, &zBuf[k], "
4a80: 25 64 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20  %d", pMem->n);. 
4a90: 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65 33 53     k += sqlite3S
4aa0: 74 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b 6b 5d  trlen30(&zBuf[k]
4ab0: 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d  );.    zBuf[k++]
4ac0: 20 3d 20 27 5b 27 3b 0a 20 20 20 20 66 6f 72 28   = '[';.    for(
4ad0: 6a 3d 30 3b 20 6a 3c 31 35 20 26 26 20 6a 3c 70  j=0; j<15 && j<p
4ae0: 4d 65 6d 2d 3e 6e 3b 20 6a 2b 2b 29 7b 0a 20 20  Mem->n; j++){.  
4af0: 20 20 20 20 75 38 20 63 20 3d 20 70 4d 65 6d 2d      u8 c = pMem-
4b00: 3e 7a 5b 6a 5d 3b 0a 20 20 20 20 20 20 69 66 28  >z[j];.      if(
4b10: 20 63 3e 3d 30 78 32 30 20 26 26 20 63 3c 30 78   c>=0x20 && c<0x
4b20: 37 66 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 42  7f ){.        zB
4b30: 75 66 5b 6b 2b 2b 5d 20 3d 20 63 3b 0a 20 20 20  uf[k++] = c;.   
4b40: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
4b50: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 2e    zBuf[k++] = '.
4b60: 27 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  ';.      }.    }
4b70: 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d  .    zBuf[k++] =
4b80: 20 27 5d 27 3b 0a 20 20 20 20 73 71 6c 69 74 65   ']';.    sqlite
4b90: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 26  3_snprintf(100,&
4ba0: 7a 42 75 66 5b 6b 5d 2c 20 65 6e 63 6e 61 6d 65  zBuf[k], encname
4bb0: 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20  s[pMem->enc]);. 
4bc0: 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65 33 53     k += sqlite3S
4bd0: 74 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b 6b 5d  trlen30(&zBuf[k]
4be0: 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d  );.    zBuf[k++]
4bf0: 20 3d 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64   = 0;.  }.}.#end
4c00: 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
4c10: 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 50 72  E_DEBUG./*.** Pr
4c20: 69 6e 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66  int the value of
4c30: 20 61 20 72 65 67 69 73 74 65 72 20 66 6f 72 20   a register for 
4c40: 74 72 61 63 69 6e 67 20 70 75 72 70 6f 73 65 73  tracing purposes
4c50: 3a 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  :.*/.static void
4c60: 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28 4d   memTracePrint(M
4c70: 65 6d 20 2a 70 29 7b 0a 20 20 69 66 28 20 70 2d  em *p){.  if( p-
4c80: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 55 6e 64  >flags & MEM_Und
4c90: 65 66 69 6e 65 64 20 29 7b 0a 20 20 20 20 70 72  efined ){.    pr
4ca0: 69 6e 74 66 28 22 20 75 6e 64 65 66 69 6e 65 64  intf(" undefined
4cb0: 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  ");.  }else if( 
4cc0: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  p->flags & MEM_N
4cd0: 75 6c 6c 20 29 7b 0a 20 20 20 20 70 72 69 6e 74  ull ){.    print
4ce0: 66 28 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  f(p->flags & MEM
4cf0: 5f 5a 65 72 6f 20 3f 20 22 20 4e 55 4c 4c 2d 6e  _Zero ? " NULL-n
4d00: 6f 63 68 6e 67 22 20 3a 20 22 20 4e 55 4c 4c 22  ochng" : " NULL"
4d10: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28  );.  }else if( (
4d20: 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  p->flags & (MEM_
4d30: 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28  Int|MEM_Str))==(
4d40: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29  MEM_Int|MEM_Str)
4d50: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   ){.    printf("
4d60: 20 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e   si:%lld", p->u.
4d70: 69 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  i);.  }else if( 
4d80: 28 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  (p->flags & (MEM
4d90: 5f 49 6e 74 52 65 61 6c 29 29 21 3d 30 20 29 7b  _IntReal))!=0 ){
4da0: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 69 72  .    printf(" ir
4db0: 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b  :%lld", p->u.i);
4dc0: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e  .  }else if( p->
4dd0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
4de0: 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20  ){.    printf(" 
4df0: 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29  i:%lld", p->u.i)
4e00: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
4e10: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
4e20: 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20 69 66 28  OINT.  }else if(
4e30: 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f   p->flags & MEM_
4e40: 52 65 61 6c 20 29 7b 0a 20 20 20 20 70 72 69 6e  Real ){.    prin
4e50: 74 66 28 22 20 72 3a 25 67 22 2c 20 70 2d 3e 75  tf(" r:%g", p->u
4e60: 2e 72 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65  .r);.#endif.  }e
4e70: 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 56  lse if( sqlite3V
4e80: 64 62 65 4d 65 6d 49 73 52 6f 77 53 65 74 28 70  dbeMemIsRowSet(p
4e90: 29 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28  ) ){.    printf(
4ea0: 22 20 28 72 6f 77 73 65 74 29 22 29 3b 0a 20 20  " (rowset)");.  
4eb0: 7d 65 6c 73 65 7b 0a 20 20 20 20 63 68 61 72 20  }else{.    char 
4ec0: 7a 42 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73  zBuf[200];.    s
4ed0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65  qlite3VdbeMemPre
4ee0: 74 74 79 50 72 69 6e 74 28 70 2c 20 7a 42 75 66  ttyPrint(p, zBuf
4ef0: 29 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20  );.    printf(" 
4f00: 25 73 22 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a  %s", zBuf);.  }.
4f10: 20 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26    if( p->flags &
4f20: 20 4d 45 4d 5f 53 75 62 74 79 70 65 20 29 20 70   MEM_Subtype ) p
4f30: 72 69 6e 74 66 28 22 20 73 75 62 74 79 70 65 3d  rintf(" subtype=
4f40: 30 78 25 30 32 78 22 2c 20 70 2d 3e 65 53 75 62  0x%02x", p->eSub
4f50: 74 79 70 65 29 3b 0a 7d 0a 73 74 61 74 69 63 20  type);.}.static 
4f60: 76 6f 69 64 20 72 65 67 69 73 74 65 72 54 72 61  void registerTra
4f70: 63 65 28 69 6e 74 20 69 52 65 67 2c 20 4d 65 6d  ce(int iReg, Mem
4f80: 20 2a 70 29 7b 0a 20 20 70 72 69 6e 74 66 28 22   *p){.  printf("
4f90: 52 45 47 5b 25 64 5d 20 3d 20 22 2c 20 69 52 65  REG[%d] = ", iRe
4fa0: 67 29 3b 0a 20 20 6d 65 6d 54 72 61 63 65 50 72  g);.  memTracePr
4fb0: 69 6e 74 28 70 29 3b 0a 20 20 70 72 69 6e 74 66  int(p);.  printf
4fc0: 28 22 5c 6e 22 29 3b 0a 20 20 73 71 6c 69 74 65  ("\n");.  sqlite
4fd0: 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76  3VdbeCheckMemInv
4fe0: 61 72 69 61 6e 74 73 28 70 29 3b 0a 7d 0a 23 65  ariants(p);.}.#e
4ff0: 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
5000: 49 54 45 5f 44 45 42 55 47 0a 23 20 20 64 65 66  ITE_DEBUG.#  def
5010: 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52 41  ine REGISTER_TRA
5020: 43 45 28 52 2c 4d 29 20 69 66 28 64 62 2d 3e 66  CE(R,M) if(db->f
5030: 6c 61 67 73 26 53 51 4c 49 54 45 5f 56 64 62 65  lags&SQLITE_Vdbe
5040: 54 72 61 63 65 29 72 65 67 69 73 74 65 72 54 72  Trace)registerTr
5050: 61 63 65 28 52 2c 4d 29 0a 23 65 6c 73 65 0a 23  ace(R,M).#else.#
5060: 20 20 64 65 66 69 6e 65 20 52 45 47 49 53 54 45    define REGISTE
5070: 52 5f 54 52 41 43 45 28 52 2c 4d 29 0a 23 65 6e  R_TRACE(R,M).#en
5080: 64 69 66 0a 0a 0a 23 69 66 64 65 66 20 56 44 42  dif...#ifdef VDB
5090: 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a  E_PROFILE../* .*
50a0: 2a 20 68 77 74 69 6d 65 2e 68 20 63 6f 6e 74 61  * hwtime.h conta
50b0: 69 6e 73 20 69 6e 6c 69 6e 65 20 61 73 73 65 6d  ins inline assem
50c0: 62 6c 65 72 20 63 6f 64 65 20 66 6f 72 20 69 6d  bler code for im
50d0: 70 6c 65 6d 65 6e 74 69 6e 67 20 0a 2a 2a 20 68  plementing .** h
50e0: 69 67 68 2d 70 65 72 66 6f 72 6d 61 6e 63 65 20  igh-performance 
50f0: 74 69 6d 69 6e 67 20 72 6f 75 74 69 6e 65 73 2e  timing routines.
5100: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 68 77  .*/.#include "hw
5110: 74 69 6d 65 2e 68 22 0a 0a 23 65 6e 64 69 66 0a  time.h"..#endif.
5120: 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a  .#ifndef NDEBUG.
5130: 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74  /*.** This funct
5140: 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 63 61 6c 6c  ion is only call
5150: 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61  ed from within a
5160: 6e 20 61 73 73 65 72 74 28 29 20 65 78 70 72 65  n assert() expre
5170: 73 73 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63 68 65  ssion. It.** che
5180: 63 6b 73 20 74 68 61 74 20 74 68 65 20 73 71 6c  cks that the sql
5190: 69 74 65 33 2e 6e 54 72 61 6e 73 61 63 74 69 6f  ite3.nTransactio
51a0: 6e 20 76 61 72 69 61 62 6c 65 20 69 73 20 63 6f  n variable is co
51b0: 72 72 65 63 74 6c 79 20 73 65 74 20 74 6f 0a 2a  rrectly set to.*
51c0: 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * the number of 
51d0: 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  non-transaction 
51e0: 73 61 76 65 70 6f 69 6e 74 73 20 63 75 72 72 65  savepoints curre
51f0: 6e 74 6c 79 20 69 6e 20 74 68 65 20 0a 2a 2a 20  ntly in the .** 
5200: 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72  linked list star
5210: 74 69 6e 67 20 61 74 20 73 71 6c 69 74 65 33 2e  ting at sqlite3.
5220: 70 53 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a  pSavepoint..** .
5230: 2a 2a 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20  ** Usage:.**.** 
5240: 20 20 20 20 61 73 73 65 72 74 28 20 63 68 65 63      assert( chec
5250: 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28  kSavepointCount(
5260: 64 62 29 20 29 3b 0a 2a 2f 0a 73 74 61 74 69 63  db) );.*/.static
5270: 20 69 6e 74 20 63 68 65 63 6b 53 61 76 65 70 6f   int checkSavepo
5280: 69 6e 74 43 6f 75 6e 74 28 73 71 6c 69 74 65 33  intCount(sqlite3
5290: 20 2a 64 62 29 7b 0a 20 20 69 6e 74 20 6e 20 3d   *db){.  int n =
52a0: 20 30 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20   0;.  Savepoint 
52b0: 2a 70 3b 0a 20 20 66 6f 72 28 70 3d 64 62 2d 3e  *p;.  for(p=db->
52c0: 70 53 61 76 65 70 6f 69 6e 74 3b 20 70 3b 20 70  pSavepoint; p; p
52d0: 3d 70 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a  =p->pNext) n++;.
52e0: 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 28 64 62    assert( n==(db
52f0: 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64  ->nSavepoint + d
5300: 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
5310: 53 61 76 65 70 6f 69 6e 74 29 20 29 3b 0a 20 20  Savepoint) );.  
5320: 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64  return 1;.}.#end
5330: 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  if../*.** Return
5340: 20 74 68 65 20 72 65 67 69 73 74 65 72 20 6f 66   the register of
5350: 20 70 4f 70 2d 3e 70 32 20 61 66 74 65 72 20 66   pOp->p2 after f
5360: 69 72 73 74 20 70 72 65 70 61 72 69 6e 67 20 69  irst preparing i
5370: 74 20 74 6f 20 62 65 0a 2a 2a 20 6f 76 65 72 77  t to be.** overw
5380: 72 69 74 74 65 6e 20 77 69 74 68 20 61 6e 20 69  ritten with an i
5390: 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2f  nteger value..*/
53a0: 0a 73 74 61 74 69 63 20 53 51 4c 49 54 45 5f 4e  .static SQLITE_N
53b0: 4f 49 4e 4c 49 4e 45 20 4d 65 6d 20 2a 6f 75 74  OINLINE Mem *out
53c0: 32 50 72 65 72 65 6c 65 61 73 65 57 69 74 68 43  2PrereleaseWithC
53d0: 6c 65 61 72 28 4d 65 6d 20 2a 70 4f 75 74 29 7b  lear(Mem *pOut){
53e0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
53f0: 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
5400: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
5410: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 72 65 74 75 72  MEM_Int;.  retur
5420: 6e 20 70 4f 75 74 3b 0a 7d 0a 73 74 61 74 69 63  n pOut;.}.static
5430: 20 4d 65 6d 20 2a 6f 75 74 32 50 72 65 72 65 6c   Mem *out2Prerel
5440: 65 61 73 65 28 56 64 62 65 20 2a 70 2c 20 56 64  ease(Vdbe *p, Vd
5450: 62 65 4f 70 20 2a 70 4f 70 29 7b 0a 20 20 4d 65  beOp *pOp){.  Me
5460: 6d 20 2a 70 4f 75 74 3b 0a 20 20 61 73 73 65 72  m *pOut;.  asser
5470: 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a  t( pOp->p2>0 );.
5480: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5490: 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  2<=(p->nMem+1 - 
54a0: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
54b0: 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d   pOut = &p->aMem
54c0: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d  [pOp->p2];.  mem
54d0: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
54e0: 20 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 56 64   pOut);.  if( Vd
54f0: 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75  beMemDynamic(pOu
5500: 74 29 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41  t) ){ /*OPTIMIZA
5510: 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a  TION-IF-FALSE*/.
5520: 20 20 20 20 72 65 74 75 72 6e 20 6f 75 74 32 50      return out2P
5530: 72 65 72 65 6c 65 61 73 65 57 69 74 68 43 6c 65  rereleaseWithCle
5540: 61 72 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73  ar(pOut);.  }els
5550: 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  e{.    pOut->fla
5560: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
5570: 20 20 72 65 74 75 72 6e 20 70 4f 75 74 3b 0a 20    return pOut;. 
5580: 20 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65   }.}.../*.** Exe
5590: 63 75 74 65 20 61 73 20 6d 75 63 68 20 6f 66 20  cute as much of 
55a0: 61 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20 61  a VDBE program a
55b0: 73 20 77 65 20 63 61 6e 2e 0a 2a 2a 20 54 68 69  s we can..** Thi
55c0: 73 20 69 73 20 74 68 65 20 63 6f 72 65 20 6f 66  s is the core of
55d0: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 2e   sqlite3_step().
55e0: 20 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65    .*/.int sqlite
55f0: 33 56 64 62 65 45 78 65 63 28 0a 20 20 56 64 62  3VdbeExec(.  Vdb
5600: 65 20 2a 70 20 20 20 20 20 20 20 20 20 20 20 20  e *p            
5610: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56          /* The V
5620: 44 42 45 20 2a 2f 0a 29 7b 0a 20 20 4f 70 20 2a  DBE */.){.  Op *
5630: 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 20 20 20  aOp = p->aOp;   
5640: 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f         /* Copy o
5650: 66 20 70 2d 3e 61 4f 70 20 2a 2f 0a 20 20 4f 70  f p->aOp */.  Op
5660: 20 2a 70 4f 70 20 3d 20 61 4f 70 3b 20 20 20 20   *pOp = aOp;    
5670: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72           /* Curr
5680: 65 6e 74 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f  ent operation */
5690: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
56a0: 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65  ITE_DEBUG) || de
56b0: 66 69 6e 65 64 28 56 44 42 45 5f 50 52 4f 46 49  fined(VDBE_PROFI
56c0: 4c 45 29 0a 20 20 4f 70 20 2a 70 4f 72 69 67 4f  LE).  Op *pOrigO
56d0: 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
56e0: 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20 70 4f 70   /* Value of pOp
56f0: 20 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74   at the top of t
5700: 68 65 20 6c 6f 6f 70 20 2a 2f 0a 23 65 6e 64 69  he loop */.#endi
5710: 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
5720: 44 45 42 55 47 0a 20 20 69 6e 74 20 6e 45 78 74  DEBUG.  int nExt
5730: 72 61 44 65 6c 65 74 65 20 3d 20 30 3b 20 20 20  raDelete = 0;   
5740: 20 20 20 2f 2a 20 56 65 72 69 66 69 65 73 20 46     /* Verifies F
5750: 4f 52 44 45 4c 45 54 45 20 61 6e 64 20 41 55 58  ORDELETE and AUX
5760: 44 45 4c 45 54 45 20 66 6c 61 67 73 20 2a 2f 0a  DELETE flags */.
5770: 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 72 63 20  #endif.  int rc 
5780: 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20 20  = SQLITE_OK;    
5790: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20      /* Value to 
57a0: 72 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c 69  return */.  sqli
57b0: 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62 3b  te3 *db = p->db;
57c0: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61         /* The da
57d0: 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 38 20 72  tabase */.  u8 r
57e0: 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c  esetSchemaOnFaul
57f0: 74 20 3d 20 30 3b 20 2f 2a 20 52 65 73 65 74 20  t = 0; /* Reset 
5800: 73 63 68 65 6d 61 20 61 66 74 65 72 20 61 6e 20  schema after an 
5810: 65 72 72 6f 72 20 69 66 20 70 6f 73 69 74 69 76  error if positiv
5820: 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 6f 64 69  e */.  u8 encodi
5830: 6e 67 20 3d 20 45 4e 43 28 64 62 29 3b 20 20 20  ng = ENC(db);   
5840: 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
5850: 65 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20  e encoding */.  
5860: 69 6e 74 20 69 43 6f 6d 70 61 72 65 20 3d 20 30  int iCompare = 0
5870: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65  ;          /* Re
5880: 73 75 6c 74 20 6f 66 20 6c 61 73 74 20 63 6f 6d  sult of last com
5890: 70 61 72 69 73 6f 6e 20 2a 2f 0a 20 20 75 6e 73  parison */.  uns
58a0: 69 67 6e 65 64 20 6e 56 6d 53 74 65 70 20 3d 20  igned nVmStep = 
58b0: 30 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  0;      /* Numbe
58c0: 72 20 6f 66 20 76 69 72 74 75 61 6c 20 6d 61 63  r of virtual mac
58d0: 68 69 6e 65 20 73 74 65 70 73 20 2a 2f 0a 23 69  hine steps */.#i
58e0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
58f0: 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42  T_PROGRESS_CALLB
5900: 41 43 4b 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e  ACK.  unsigned n
5910: 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 3b 20 20  ProgressLimit;  
5920: 20 2f 2a 20 49 6e 76 6f 6b 65 20 78 50 72 6f 67   /* Invoke xProg
5930: 72 65 73 73 28 29 20 77 68 65 6e 20 6e 56 6d 53  ress() when nVmS
5940: 74 65 70 20 72 65 61 63 68 65 73 20 74 68 69 73  tep reaches this
5950: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d   */.#endif.  Mem
5960: 20 2a 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d   *aMem = p->aMem
5970: 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20  ;       /* Copy 
5980: 6f 66 20 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20  of p->aMem */.  
5990: 4d 65 6d 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20  Mem *pIn1 = 0;  
59a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73             /* 1s
59b0: 74 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20  t input operand 
59c0: 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d  */.  Mem *pIn2 =
59d0: 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   0;             
59e0: 2f 2a 20 32 6e 64 20 69 6e 70 75 74 20 6f 70 65  /* 2nd input ope
59f0: 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  rand */.  Mem *p
5a00: 49 6e 33 20 3d 20 30 3b 20 20 20 20 20 20 20 20  In3 = 0;        
5a10: 20 20 20 20 20 2f 2a 20 33 72 64 20 69 6e 70 75       /* 3rd inpu
5a20: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d  t operand */.  M
5a30: 65 6d 20 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20  em *pOut = 0;   
5a40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 75 74            /* Out
5a50: 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 23  put operand */.#
5a60: 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49  ifdef VDBE_PROFI
5a70: 4c 45 0a 20 20 75 36 34 20 73 74 61 72 74 3b 20  LE.  u64 start; 
5a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5a90: 2f 2a 20 43 50 55 20 63 6c 6f 63 6b 20 63 6f 75  /* CPU clock cou
5aa0: 6e 74 20 61 74 20 73 74 61 72 74 20 6f 66 20 6f  nt at start of o
5ab0: 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a  pcode */.#endif.
5ac0: 20 20 2f 2a 2a 2a 20 49 4e 53 45 52 54 20 53 54    /*** INSERT ST
5ad0: 41 43 4b 20 55 4e 49 4f 4e 20 48 45 52 45 20 2a  ACK UNION HERE *
5ae0: 2a 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70  **/..  assert( p
5af0: 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41  ->magic==VDBE_MA
5b00: 47 49 43 5f 52 55 4e 20 29 3b 20 20 2f 2a 20 73  GIC_RUN );  /* s
5b10: 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 76 65  qlite3_step() ve
5b20: 72 69 66 69 65 73 20 74 68 69 73 20 2a 2f 0a 20  rifies this */. 
5b30: 20 73 71 6c 69 74 65 33 56 64 62 65 45 6e 74 65   sqlite3VdbeEnte
5b40: 72 28 70 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  r(p);.#ifndef SQ
5b50: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45  LITE_OMIT_PROGRE
5b60: 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 66  SS_CALLBACK.  if
5b70: 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 20  ( db->xProgress 
5b80: 29 7b 0a 20 20 20 20 75 33 32 20 69 50 72 69 6f  ){.    u32 iPrio
5b90: 72 20 3d 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b  r = p->aCounter[
5ba0: 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55  SQLITE_STMTSTATU
5bb0: 53 5f 56 4d 5f 53 54 45 50 5d 3b 0a 20 20 20 20  S_VM_STEP];.    
5bc0: 61 73 73 65 72 74 28 20 30 20 3c 20 64 62 2d 3e  assert( 0 < db->
5bd0: 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 29 3b 0a  nProgressOps );.
5be0: 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d      nProgressLim
5bf0: 69 74 20 3d 20 64 62 2d 3e 6e 50 72 6f 67 72 65  it = db->nProgre
5c00: 73 73 4f 70 73 20 2d 20 28 69 50 72 69 6f 72 20  ssOps - (iPrior 
5c10: 25 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f  % db->nProgressO
5c20: 70 73 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ps);.  }else{.  
5c30: 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74    nProgressLimit
5c40: 20 3d 20 30 78 66 66 66 66 66 66 66 66 3b 0a 20   = 0xffffffff;. 
5c50: 20 7d 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20   }.#endif.  if( 
5c60: 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f  p->rc==SQLITE_NO
5c70: 4d 45 4d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  MEM ){.    /* Th
5c80: 69 73 20 68 61 70 70 65 6e 73 20 69 66 20 61 20  is happens if a 
5c90: 6d 61 6c 6c 6f 63 28 29 20 69 6e 73 69 64 65 20  malloc() inside 
5ca0: 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65  a call to sqlite
5cb0: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20  3_column_text() 
5cc0: 6f 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65  or.    ** sqlite
5cd0: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28  3_column_text16(
5ce0: 29 20 66 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20  ) failed.  */.  
5cf0: 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
5d00: 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e   }.  assert( p->
5d10: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
5d20: 20 28 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d 53   (p->rc&0xff)==S
5d30: 51 4c 49 54 45 5f 42 55 53 59 20 29 3b 0a 20 20  QLITE_BUSY );.  
5d40: 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
5d50: 61 64 65 72 20 7c 7c 20 70 2d 3e 72 65 61 64 4f  ader || p->readO
5d60: 6e 6c 79 21 3d 30 20 29 3b 0a 20 20 70 2d 3e 69  nly!=0 );.  p->i
5d70: 43 75 72 72 65 6e 74 54 69 6d 65 20 3d 20 30 3b  CurrentTime = 0;
5d80: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 65 78  .  assert( p->ex
5d90: 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d  plain==0 );.  p-
5da0: 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 30 3b  >pResultSet = 0;
5db0: 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c  .  db->busyHandl
5dc0: 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20  er.nBusy = 0;.  
5dd0: 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74  if( db->u1.isInt
5de0: 65 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20  errupted ) goto 
5df0: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74  abort_due_to_int
5e00: 65 72 72 75 70 74 3b 0a 20 20 73 71 6c 69 74 65  errupt;.  sqlite
5e10: 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28  3VdbeIOTraceSql(
5e20: 70 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  p);.#ifdef SQLIT
5e30: 45 5f 44 45 42 55 47 0a 20 20 73 71 6c 69 74 65  E_DEBUG.  sqlite
5e40: 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c  3BeginBenignMall
5e50: 6f 63 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70  oc();.  if( p->p
5e60: 63 3d 3d 30 0a 20 20 20 26 26 20 28 70 2d 3e 64  c==0.   && (p->d
5e70: 62 2d 3e 66 6c 61 67 73 20 26 20 28 53 51 4c 49  b->flags & (SQLI
5e80: 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 7c 53  TE_VdbeListing|S
5e90: 51 4c 49 54 45 5f 56 64 62 65 45 51 50 7c 53 51  QLITE_VdbeEQP|SQ
5ea0: 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 29 29  LITE_VdbeTrace))
5eb0: 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 69 6e 74  !=0.  ){.    int
5ec0: 20 69 3b 0a 20 20 20 20 69 6e 74 20 6f 6e 63 65   i;.    int once
5ed0: 20 3d 20 31 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 1;.    sqlite
5ee0: 33 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29  3VdbePrintSql(p)
5ef0: 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d  ;.    if( p->db-
5f00: 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
5f10: 56 64 62 65 4c 69 73 74 69 6e 67 20 29 7b 0a 20  VdbeListing ){. 
5f20: 20 20 20 20 20 70 72 69 6e 74 66 28 22 56 44 42       printf("VDB
5f30: 45 20 50 72 6f 67 72 61 6d 20 4c 69 73 74 69 6e  E Program Listin
5f40: 67 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 66 6f  g:\n");.      fo
5f50: 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b  r(i=0; i<p->nOp;
5f60: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 73   i++){.        s
5f70: 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f  qlite3VdbePrintO
5f80: 70 28 73 74 64 6f 75 74 2c 20 69 2c 20 26 61 4f  p(stdout, i, &aO
5f90: 70 5b 69 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20  p[i]);.      }. 
5fa0: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e     }.    if( p->
5fb0: 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
5fc0: 54 45 5f 56 64 62 65 45 51 50 20 29 7b 0a 20 20  TE_VdbeEQP ){.  
5fd0: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70      for(i=0; i<p
5fe0: 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20  ->nOp; i++){.   
5ff0: 20 20 20 20 20 69 66 28 20 61 4f 70 5b 69 5d 2e       if( aOp[i].
6000: 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61  opcode==OP_Expla
6010: 69 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  in ){.          
6020: 69 66 28 20 6f 6e 63 65 20 29 20 70 72 69 6e 74  if( once ) print
6030: 66 28 22 56 44 42 45 20 51 75 65 72 79 20 50 6c  f("VDBE Query Pl
6040: 61 6e 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20  an:\n");.       
6050: 20 20 20 70 72 69 6e 74 66 28 22 25 73 5c 6e 22     printf("%s\n"
6060: 2c 20 61 4f 70 5b 69 5d 2e 70 34 2e 7a 29 3b 0a  , aOp[i].p4.z);.
6070: 20 20 20 20 20 20 20 20 20 20 6f 6e 63 65 20 3d            once =
6080: 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20   0;.        }.  
6090: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
60a0: 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73  if( p->db->flags
60b0: 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72   & SQLITE_VdbeTr
60c0: 61 63 65 20 29 20 20 70 72 69 6e 74 66 28 22 56  ace )  printf("V
60d0: 44 42 45 20 54 72 61 63 65 3a 5c 6e 22 29 3b 0a  DBE Trace:\n");.
60e0: 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 45 6e 64    }.  sqlite3End
60f0: 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a  BenignMalloc();.
6100: 23 65 6e 64 69 66 0a 20 20 66 6f 72 28 70 4f 70  #endif.  for(pOp
6110: 3d 26 61 4f 70 5b 70 2d 3e 70 63 5d 3b 20 31 3b  =&aOp[p->pc]; 1;
6120: 20 70 4f 70 2b 2b 29 7b 0a 20 20 20 20 2f 2a 20   pOp++){.    /* 
6130: 45 72 72 6f 72 73 20 61 72 65 20 64 65 74 65 63  Errors are detec
6140: 74 65 64 20 62 79 20 69 6e 64 69 76 69 64 75 61  ted by individua
6150: 6c 20 6f 70 63 6f 64 65 73 2c 20 77 69 74 68 20  l opcodes, with 
6160: 61 6e 20 69 6d 6d 65 64 69 61 74 65 0a 20 20 20  an immediate.   
6170: 20 2a 2a 20 6a 75 6d 70 73 20 74 6f 20 61 62 6f   ** jumps to abo
6180: 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 2e  rt_due_to_error.
6190: 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20   */.    assert( 
61a0: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
61b0: 0a 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ..    assert( pO
61c0: 70 3e 3d 61 4f 70 20 26 26 20 70 4f 70 3c 26 61  p>=aOp && pOp<&a
61d0: 4f 70 5b 70 2d 3e 6e 4f 70 5d 29 3b 0a 23 69 66  Op[p->nOp]);.#if
61e0: 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45  def VDBE_PROFILE
61f0: 0a 20 20 20 20 73 74 61 72 74 20 3d 20 73 71 6c  .    start = sql
6200: 69 74 65 33 4e 50 72 6f 66 69 6c 65 43 6e 74 20  ite3NProfileCnt 
6210: 3f 20 73 71 6c 69 74 65 33 4e 50 72 6f 66 69 6c  ? sqlite3NProfil
6220: 65 43 6e 74 20 3a 20 73 71 6c 69 74 65 33 48 77  eCnt : sqlite3Hw
6230: 74 69 6d 65 28 29 3b 0a 23 65 6e 64 69 66 0a 20  time();.#endif. 
6240: 20 20 20 6e 56 6d 53 74 65 70 2b 2b 3b 0a 23 69     nVmStep++;.#i
6250: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
6260: 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54  LE_STMT_SCANSTAT
6270: 55 53 0a 20 20 20 20 69 66 28 20 70 2d 3e 61 6e  US.    if( p->an
6280: 45 78 65 63 20 29 20 70 2d 3e 61 6e 45 78 65 63  Exec ) p->anExec
6290: 5b 28 69 6e 74 29 28 70 4f 70 2d 61 4f 70 29 5d  [(int)(pOp-aOp)]
62a0: 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20  ++;.#endif..    
62b0: 2f 2a 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20 74 72  /* Only allow tr
62c0: 61 63 69 6e 67 20 69 66 20 53 51 4c 49 54 45 5f  acing if SQLITE_
62d0: 44 45 42 55 47 20 69 73 20 64 65 66 69 6e 65 64  DEBUG is defined
62e0: 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20  ..    */.#ifdef 
62f0: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
6300: 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26   if( db->flags &
6310: 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63   SQLITE_VdbeTrac
6320: 65 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  e ){.      sqlit
6330: 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74  e3VdbePrintOp(st
6340: 64 6f 75 74 2c 20 28 69 6e 74 29 28 70 4f 70 20  dout, (int)(pOp 
6350: 2d 20 61 4f 70 29 2c 20 70 4f 70 29 3b 0a 20 20  - aOp), pOp);.  
6360: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20    }.#endif.     
6370: 20 0a 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b 20   ..    /* Check 
6380: 74 6f 20 73 65 65 20 69 66 20 77 65 20 6e 65 65  to see if we nee
6390: 64 20 74 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e  d to simulate an
63a0: 20 69 6e 74 65 72 72 75 70 74 2e 20 20 54 68 69   interrupt.  Thi
63b0: 73 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73 0a 20  s only happens. 
63c0: 20 20 20 2a 2a 20 69 66 20 77 65 20 68 61 76 65     ** if we have
63d0: 20 61 20 73 70 65 63 69 61 6c 20 74 65 73 74 20   a special test 
63e0: 62 75 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a 23 69  build..    */.#i
63f0: 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
6400: 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
6410: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
6420: 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  >0 ){.      sqli
6430: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f  te3_interrupt_co
6440: 75 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 69 66 28  unt--;.      if(
6450: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
6460: 70 74 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b 0a 20  pt_count==0 ){. 
6470: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69         sqlite3_i
6480: 6e 74 65 72 72 75 70 74 28 64 62 29 3b 0a 20 20  nterrupt(db);.  
6490: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64      }.    }.#end
64a0: 69 66 0a 0a 20 20 20 20 2f 2a 20 53 61 6e 69 74  if..    /* Sanit
64b0: 79 20 63 68 65 63 6b 69 6e 67 20 6f 6e 20 6f 74  y checking on ot
64c0: 68 65 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a  her operands */.
64d0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
64e0: 42 55 47 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  BUG.    {.      
64f0: 75 38 20 6f 70 50 72 6f 70 65 72 74 79 20 3d 20  u8 opProperty = 
6500: 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f  sqlite3OpcodePro
6510: 70 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63 6f 64  perty[pOp->opcod
6520: 65 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 28 6f  e];.      if( (o
6530: 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c  pProperty & OPFL
6540: 47 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20 20  G_IN1)!=0 ){.   
6550: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
6560: 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p1>0 );.      
6570: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
6580: 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  1<=(p->nMem+1 - 
6590: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
65a0: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d         assert( m
65b0: 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b  emIsValid(&aMem[
65c0: 70 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a 20 20 20  pOp->p1]) );.   
65d0: 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
65e0: 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d  ite3VdbeCheckMem
65f0: 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d  Invariants(&aMem
6600: 5b 70 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a 20 20  [pOp->p1]) );.  
6610: 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54        REGISTER_T
6620: 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 26 61  RACE(pOp->p1, &a
6630: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20  Mem[pOp->p1]);. 
6640: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
6650: 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f   (opProperty & O
6660: 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b 0a  PFLG_IN2)!=0 ){.
6670: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
6680: 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20  pOp->p2>0 );.   
6690: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
66a0: 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p2<=(p->nMem+1
66b0: 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
66c0: 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
66d0: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
66e0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a  em[pOp->p2]) );.
66f0: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
6700: 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
6710: 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 26 61  MemInvariants(&a
6720: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20 29 3b  Mem[pOp->p2]) );
6730: 0a 20 20 20 20 20 20 20 20 52 45 47 49 53 54 45  .        REGISTE
6740: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
6750: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29   &aMem[pOp->p2])
6760: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
6770: 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20  if( (opProperty 
6780: 26 20 4f 50 46 4c 47 5f 49 4e 33 29 21 3d 30 20  & OPFLG_IN3)!=0 
6790: 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
67a0: 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
67b0: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
67c0: 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
67d0: 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
67e0: 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  ) );.        ass
67f0: 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
6800: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20  &aMem[pOp->p3]) 
6810: 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
6820: 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  t( sqlite3VdbeCh
6830: 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73  eckMemInvariants
6840: 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29  (&aMem[pOp->p3])
6850: 20 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49   );.        REGI
6860: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
6870: 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  p3, &aMem[pOp->p
6880: 33 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  3]);.      }.   
6890: 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72     if( (opProper
68a0: 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 29  ty & OPFLG_OUT2)
68b0: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61  !=0 ){.        a
68c0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
68d0: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
68e0: 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d  rt( pOp->p2<=(p-
68f0: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
6900: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20  rsor) );.       
6910: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
6920: 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  e(p, &aMem[pOp->
6930: 70 32 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  p2]);.      }.  
6940: 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65      if( (opPrope
6950: 72 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33  rty & OPFLG_OUT3
6960: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
6970: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
6980: 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  0 );.        ass
6990: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  ert( pOp->p3<=(p
69a0: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
69b0: 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20  ursor) );.      
69c0: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
69d0: 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ge(p, &aMem[pOp-
69e0: 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20  >p3]);.      }. 
69f0: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66 20     }.#endif.#if 
6a00: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
6a10: 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
6a20: 28 56 44 42 45 5f 50 52 4f 46 49 4c 45 29 0a 20  (VDBE_PROFILE). 
6a30: 20 20 20 70 4f 72 69 67 4f 70 20 3d 20 70 4f 70     pOrigOp = pOp
6a40: 3b 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 20 20  ;.#endif.  .    
6a50: 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63  switch( pOp->opc
6a60: 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a  ode ){../*******
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 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6ab0: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68 61 74 20 66  ******.** What f
6ac0: 6f 6c 6c 6f 77 73 20 69 73 20 61 20 6d 61 73 73  ollows is a mass
6ad0: 69 76 65 20 73 77 69 74 63 68 20 73 74 61 74 65  ive switch state
6ae0: 6d 65 6e 74 20 77 68 65 72 65 20 65 61 63 68 20  ment where each 
6af0: 63 61 73 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20  case implements 
6b00: 61 0a 2a 2a 20 73 65 70 61 72 61 74 65 20 69 6e  a.** separate in
6b10: 73 74 72 75 63 74 69 6f 6e 20 69 6e 20 74 68 65  struction in the
6b20: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
6b30: 2e 20 20 49 66 20 77 65 20 66 6f 6c 6c 6f 77 20  .  If we follow 
6b40: 74 68 65 20 75 73 75 61 6c 0a 2a 2a 20 69 6e 64  the usual.** ind
6b50: 65 6e 74 61 74 69 6f 6e 20 63 6f 6e 76 65 6e 74  entation convent
6b60: 69 6f 6e 73 2c 20 65 61 63 68 20 63 61 73 65 20  ions, each case 
6b70: 73 68 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e 74  should be indent
6b80: 65 64 20 62 79 20 36 20 73 70 61 63 65 73 2e 20  ed by 6 spaces. 
6b90: 20 42 75 74 0a 2a 2a 20 74 68 61 74 20 69 73 20   But.** that is 
6ba0: 61 20 6c 6f 74 20 6f 66 20 77 61 73 74 65 64 20  a lot of wasted 
6bb0: 73 70 61 63 65 20 6f 6e 20 74 68 65 20 6c 65 66  space on the lef
6bc0: 74 20 6d 61 72 67 69 6e 2e 20 20 53 6f 20 74 68  t margin.  So th
6bd0: 65 20 63 6f 64 65 20 77 69 74 68 69 6e 0a 2a 2a  e code within.**
6be0: 20 74 68 65 20 73 77 69 74 63 68 20 73 74 61 74   the switch stat
6bf0: 65 6d 65 6e 74 20 77 69 6c 6c 20 62 72 65 61 6b  ement will break
6c00: 20 77 69 74 68 20 63 6f 6e 76 65 6e 74 69 6f 6e   with convention
6c10: 20 61 6e 64 20 62 65 20 66 6c 75 73 68 2d 6c 65   and be flush-le
6c20: 66 74 2e 20 41 6e 6f 74 68 65 72 0a 2a 2a 20 62  ft. Another.** b
6c30: 69 67 20 63 6f 6d 6d 65 6e 74 20 28 73 69 6d 69  ig comment (simi
6c40: 6c 61 72 20 74 6f 20 74 68 69 73 20 6f 6e 65 29  lar to this one)
6c50: 20 77 69 6c 6c 20 6d 61 72 6b 20 74 68 65 20 70   will mark the p
6c60: 6f 69 6e 74 20 69 6e 20 74 68 65 20 63 6f 64 65  oint in the code
6c70: 20 77 68 65 72 65 0a 2a 2a 20 77 65 20 74 72 61   where.** we tra
6c80: 6e 73 69 74 69 6f 6e 20 62 61 63 6b 20 74 6f 20  nsition back to 
6c90: 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74 69  normal indentati
6ca0: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f  on..**.** The fo
6cb0: 72 6d 61 74 74 69 6e 67 20 6f 66 20 65 61 63 68  rmatting of each
6cc0: 20 63 61 73 65 20 69 73 20 69 6d 70 6f 72 74 61   case is importa
6cd0: 6e 74 2e 20 20 54 68 65 20 6d 61 6b 65 66 69 6c  nt.  The makefil
6ce0: 65 20 66 6f 72 20 53 51 4c 69 74 65 0a 2a 2a 20  e for SQLite.** 
6cf0: 67 65 6e 65 72 61 74 65 73 20 74 77 6f 20 43 20  generates two C 
6d00: 66 69 6c 65 73 20 22 6f 70 63 6f 64 65 73 2e 68  files "opcodes.h
6d10: 22 20 61 6e 64 20 22 6f 70 63 6f 64 65 73 2e 63  " and "opcodes.c
6d20: 22 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74 68  " by scanning th
6d30: 69 73 0a 2a 2a 20 66 69 6c 65 20 6c 6f 6f 6b 69  is.** file looki
6d40: 6e 67 20 66 6f 72 20 6c 69 6e 65 73 20 74 68 61  ng for lines tha
6d50: 74 20 62 65 67 69 6e 20 77 69 74 68 20 22 63 61  t begin with "ca
6d60: 73 65 20 4f 50 5f 22 2e 20 20 54 68 65 20 6f 70  se OP_".  The op
6d70: 63 6f 64 65 73 2e 68 20 66 69 6c 65 73 0a 2a 2a  codes.h files.**
6d80: 20 77 69 6c 6c 20 62 65 20 66 69 6c 6c 65 64 20   will be filled 
6d90: 77 69 74 68 20 23 64 65 66 69 6e 65 73 20 74 68  with #defines th
6da0: 61 74 20 67 69 76 65 20 75 6e 69 71 75 65 20 69  at give unique i
6db0: 6e 74 65 67 65 72 20 76 61 6c 75 65 73 20 74 6f  nteger values to
6dc0: 20 65 61 63 68 0a 2a 2a 20 6f 70 63 6f 64 65 20   each.** opcode 
6dd0: 61 6e 64 20 74 68 65 20 6f 70 63 6f 64 65 73 2e  and the opcodes.
6de0: 63 20 66 69 6c 65 20 69 73 20 66 69 6c 6c 65 64  c file is filled
6df0: 20 77 69 74 68 20 61 6e 20 61 72 72 61 79 20 6f   with an array o
6e00: 66 20 73 74 72 69 6e 67 73 20 77 68 65 72 65 0a  f strings where.
6e10: 2a 2a 20 65 61 63 68 20 73 74 72 69 6e 67 20 69  ** each string i
6e20: 73 20 74 68 65 20 73 79 6d 62 6f 6c 69 63 20 6e  s the symbolic n
6e30: 61 6d 65 20 66 6f 72 20 74 68 65 20 63 6f 72 72  ame for the corr
6e40: 65 73 70 6f 6e 64 69 6e 67 20 6f 70 63 6f 64 65  esponding opcode
6e50: 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 63 61 73  .  If the.** cas
6e60: 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 66  e statement is f
6e70: 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6d  ollowed by a com
6e80: 6d 65 6e 74 20 6f 66 20 74 68 65 20 66 6f 72 6d  ment of the form
6e90: 20 22 2f 23 20 73 61 6d 65 20 61 73 20 2e 2e 2e   "/# same as ...
6ea0: 20 23 2f 22 0a 2a 2a 20 74 68 61 74 20 63 6f 6d   #/".** that com
6eb0: 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20  ment is used to 
6ec0: 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 70 61  determine the pa
6ed0: 72 74 69 63 75 6c 61 72 20 76 61 6c 75 65 20 6f  rticular value o
6ee0: 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 0a 2a 2a  f the opcode..**
6ef0: 0a 2a 2a 20 4f 74 68 65 72 20 6b 65 79 77 6f 72  .** Other keywor
6f00: 64 73 20 69 6e 20 74 68 65 20 63 6f 6d 6d 65 6e  ds in the commen
6f10: 74 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20 65  t that follows e
6f20: 61 63 68 20 63 61 73 65 20 61 72 65 20 75 73 65  ach case are use
6f30: 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73 74 72 75 63  d to.** construc
6f40: 74 20 74 68 65 20 4f 50 46 4c 47 5f 49 4e 49 54  t the OPFLG_INIT
6f50: 49 41 4c 49 5a 45 52 20 76 61 6c 75 65 20 74 68  IALIZER value th
6f60: 61 74 20 69 6e 69 74 69 61 6c 69 7a 65 73 20 6f  at initializes o
6f70: 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 2e  pcodeProperty[].
6f80: 0a 2a 2a 20 4b 65 79 77 6f 72 64 73 20 69 6e 63  .** Keywords inc
6f90: 6c 75 64 65 3a 20 69 6e 31 2c 20 69 6e 32 2c 20  lude: in1, in2, 
6fa0: 69 6e 33 2c 20 6f 75 74 32 2c 20 6f 75 74 33 2e  in3, out2, out3.
6fb0: 20 20 53 65 65 0a 2a 2a 20 74 68 65 20 6d 6b 6f    See.** the mko
6fc0: 70 63 6f 64 65 68 2e 61 77 6b 20 73 63 72 69 70  pcodeh.awk scrip
6fd0: 74 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  t for additional
6fe0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a   information..**
6ff0: 0a 2a 2a 20 44 6f 63 75 6d 65 6e 74 61 74 69 6f  .** Documentatio
7000: 6e 20 61 62 6f 75 74 20 56 44 42 45 20 6f 70 63  n about VDBE opc
7010: 6f 64 65 73 20 69 73 20 67 65 6e 65 72 61 74 65  odes is generate
7020: 64 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74 68  d by scanning th
7030: 69 73 20 66 69 6c 65 0a 2a 2a 20 66 6f 72 20 6c  is file.** for l
7040: 69 6e 65 73 20 6f 66 20 74 68 61 74 20 63 6f 6e  ines of that con
7050: 74 61 69 6e 20 22 4f 70 63 6f 64 65 3a 22 2e 20  tain "Opcode:". 
7060: 20 54 68 61 74 20 6c 69 6e 65 20 61 6e 64 20 61   That line and a
7070: 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 0a 2a 2a  ll subsequent.**
7080: 20 63 6f 6d 6d 65 6e 74 20 6c 69 6e 65 73 20 61   comment lines a
7090: 72 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 67  re used in the g
70a0: 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65  eneration of the
70b0: 20 6f 70 63 6f 64 65 2e 68 74 6d 6c 20 64 6f 63   opcode.html doc
70c0: 75 6d 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 66 69  umentation.** fi
70d0: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 55 4d 4d 41 52  le..**.** SUMMAR
70e0: 59 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 46 6f 72  Y:.**.**     For
70f0: 6d 61 74 74 69 6e 67 20 69 73 20 69 6d 70 6f 72  matting is impor
7100: 74 61 6e 74 20 74 6f 20 73 63 72 69 70 74 73 20  tant to scripts 
7110: 74 68 61 74 20 73 63 61 6e 20 74 68 69 73 20 66  that scan this f
7120: 69 6c 65 2e 0a 2a 2a 20 20 20 20 20 44 6f 20 6e  ile..**     Do n
7130: 6f 74 20 64 65 76 69 61 74 65 20 66 72 6f 6d 20  ot deviate from 
7140: 74 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 73  the formatting s
7150: 74 79 6c 65 20 63 75 72 72 65 6e 74 6c 79 20 69  tyle currently i
7160: 6e 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a  n use..**.******
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 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
71b0: 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63  *******/../* Opc
71c0: 6f 64 65 3a 20 20 47 6f 74 6f 20 2a 20 50 32 20  ode:  Goto * P2 
71d0: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6e 20 75  * * *.**.** An u
71e0: 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 6a 75 6d  nconditional jum
71f0: 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e  p to address P2.
7200: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 73  .** The next ins
7210: 74 72 75 63 74 69 6f 6e 20 65 78 65 63 75 74 65  truction execute
7220: 64 20 77 69 6c 6c 20 62 65 20 0a 2a 2a 20 74 68  d will be .** th
7230: 65 20 6f 6e 65 20 61 74 20 69 6e 64 65 78 20 50  e one at index P
7240: 32 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  2 from the begin
7250: 6e 69 6e 67 20 6f 66 0a 2a 2a 20 74 68 65 20 70  ning of.** the p
7260: 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 54 68  rogram..**.** Th
7270: 65 20 50 31 20 70 61 72 61 6d 65 74 65 72 20 69  e P1 parameter i
7280: 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 75  s not actually u
7290: 73 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f  sed by this opco
72a0: 64 65 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 74  de.  However, it
72b0: 0a 2a 2a 20 69 73 20 73 6f 6d 65 74 69 6d 65 73  .** is sometimes
72c0: 20 73 65 74 20 74 6f 20 31 20 69 6e 73 74 65 61   set to 1 instea
72d0: 64 20 6f 66 20 30 20 61 73 20 61 20 68 69 6e 74  d of 0 as a hint
72e0: 20 74 6f 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d   to the command-
72f0: 6c 69 6e 65 20 73 68 65 6c 6c 0a 2a 2a 20 74 68  line shell.** th
7300: 61 74 20 74 68 69 73 20 47 6f 74 6f 20 69 73 20  at this Goto is 
7310: 74 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20 61 20  the bottom of a 
7320: 6c 6f 6f 70 20 61 6e 64 20 74 68 61 74 20 74 68  loop and that th
7330: 65 20 6c 69 6e 65 73 20 66 72 6f 6d 20 50 32 20  e lines from P2 
7340: 64 6f 77 6e 0a 2a 2a 20 74 6f 20 74 68 65 20 63  down.** to the c
7350: 75 72 72 65 6e 74 20 6c 69 6e 65 20 73 68 6f 75  urrent line shou
7360: 6c 64 20 62 65 20 69 6e 64 65 6e 74 65 64 20 66  ld be indented f
7370: 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75  or EXPLAIN outpu
7380: 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f  t..*/.case OP_Go
7390: 74 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  to: {           
73a0: 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 6a 75 6d    /* jump */.jum
73b0: 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63  p_to_p2_and_chec
73c0: 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3a  k_for_interrupt:
73d0: 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f  .  pOp = &aOp[pO
73e0: 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a 0a 20 20 2f  p->p2 - 1];..  /
73f0: 2a 20 4f 70 63 6f 64 65 73 20 74 68 61 74 20 61  * Opcodes that a
7400: 72 65 20 75 73 65 64 20 61 73 20 74 68 65 20 62  re used as the b
7410: 6f 74 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70 20  ottom of a loop 
7420: 28 4f 50 5f 4e 65 78 74 2c 20 4f 50 5f 50 72 65  (OP_Next, OP_Pre
7430: 76 2c 0a 20 20 2a 2a 20 4f 50 5f 56 4e 65 78 74  v,.  ** OP_VNext
7440: 2c 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72 4e 65  , or OP_SorterNe
7450: 78 74 29 20 61 6c 6c 20 6a 75 6d 70 20 68 65 72  xt) all jump her
7460: 65 20 75 70 6f 6e 0a 20 20 2a 2a 20 63 6f 6d 70  e upon.  ** comp
7470: 6c 65 74 69 6f 6e 2e 20 20 43 68 65 63 6b 20 74  letion.  Check t
7480: 6f 20 73 65 65 20 69 66 20 73 71 6c 69 74 65 33  o see if sqlite3
7490: 5f 69 6e 74 65 72 72 75 70 74 28 29 20 68 61 73  _interrupt() has
74a0: 20 62 65 65 6e 20 63 61 6c 6c 65 64 0a 20 20 2a   been called.  *
74b0: 2a 20 6f 72 20 69 66 20 74 68 65 20 70 72 6f 67  * or if the prog
74c0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 6e 65  ress callback ne
74d0: 65 64 73 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65  eds to be invoke
74e0: 64 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  d. .  **.  ** Th
74f0: 69 73 20 63 6f 64 65 20 75 73 65 73 20 75 6e 73  is code uses uns
7500: 74 72 75 63 74 75 72 65 64 20 22 67 6f 74 6f 22  tructured "goto"
7510: 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e 64 20   statements and 
7520: 64 6f 65 73 20 6e 6f 74 20 6c 6f 6f 6b 20 63 6c  does not look cl
7530: 65 61 6e 2e 0a 20 20 2a 2a 20 42 75 74 20 74 68  ean..  ** But th
7540: 61 74 20 69 73 20 6e 6f 74 20 64 75 65 20 74 6f  at is not due to
7550: 20 73 6c 6f 70 70 79 20 63 6f 64 69 6e 67 20 68   sloppy coding h
7560: 61 62 69 74 73 2e 20 54 68 65 20 63 6f 64 65 20  abits. The code 
7570: 69 73 20 77 72 69 74 74 65 6e 20 74 68 69 73 0a  is written this.
7580: 20 20 2a 2a 20 77 61 79 20 66 6f 72 20 70 65 72    ** way for per
7590: 66 6f 72 6d 61 6e 63 65 2c 20 74 6f 20 61 76 6f  formance, to avo
75a0: 69 64 20 68 61 76 69 6e 67 20 74 6f 20 72 75 6e  id having to run
75b0: 20 74 68 65 20 69 6e 74 65 72 72 75 70 74 20 61   the interrupt a
75c0: 6e 64 20 70 72 6f 67 72 65 73 73 0a 20 20 2a 2a  nd progress.  **
75d0: 20 63 68 65 63 6b 73 20 6f 6e 20 65 76 65 72 79   checks on every
75e0: 20 6f 70 63 6f 64 65 2e 20 20 54 68 69 73 20 68   opcode.  This h
75f0: 65 6c 70 73 20 73 71 6c 69 74 65 33 5f 73 74 65  elps sqlite3_ste
7600: 70 28 29 20 74 6f 20 72 75 6e 20 61 62 6f 75 74  p() to run about
7610: 20 31 2e 35 25 0a 20 20 2a 2a 20 66 61 73 74 65   1.5%.  ** faste
7620: 72 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 22  r according to "
7630: 76 61 6c 67 72 69 6e 64 20 2d 2d 74 6f 6f 6c 3d  valgrind --tool=
7640: 63 61 63 68 65 67 72 69 6e 64 22 20 2a 2f 0a 63  cachegrind" */.c
7650: 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
7660: 70 74 3a 0a 20 20 69 66 28 20 64 62 2d 3e 75 31  pt:.  if( db->u1
7670: 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29  .isInterrupted )
7680: 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
7690: 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 23 69  to_interrupt;.#i
76a0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
76b0: 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42  T_PROGRESS_CALLB
76c0: 41 43 4b 0a 20 20 2f 2a 20 43 61 6c 6c 20 74 68  ACK.  /* Call th
76d0: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
76e0: 61 63 6b 20 69 66 20 69 74 20 69 73 20 63 6f 6e  ack if it is con
76f0: 66 69 67 75 72 65 64 20 61 6e 64 20 74 68 65 20  figured and the 
7700: 72 65 71 75 69 72 65 64 20 6e 75 6d 62 65 72 0a  required number.
7710: 20 20 2a 2a 20 6f 66 20 56 44 42 45 20 6f 70 73    ** of VDBE ops
7720: 20 68 61 76 65 20 62 65 65 6e 20 65 78 65 63 75   have been execu
7730: 74 65 64 20 28 65 69 74 68 65 72 20 73 69 6e 63  ted (either sinc
7740: 65 20 74 68 69 73 20 69 6e 76 6f 63 61 74 69 6f  e this invocatio
7750: 6e 20 6f 66 0a 20 20 2a 2a 20 73 71 6c 69 74 65  n of.  ** sqlite
7760: 33 56 64 62 65 45 78 65 63 28 29 20 6f 72 20 73  3VdbeExec() or s
7770: 69 6e 63 65 20 6c 61 73 74 20 74 69 6d 65 20 74  ince last time t
7780: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
7790: 62 61 63 6b 20 77 61 73 20 63 61 6c 6c 65 64 29  back was called)
77a0: 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 70 72  ..  ** If the pr
77b0: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
77c0: 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f  returns non-zero
77d0: 2c 20 65 78 69 74 20 74 68 65 20 76 69 72 74 75  , exit the virtu
77e0: 61 6c 20 6d 61 63 68 69 6e 65 20 77 69 74 68 0a  al machine with.
77f0: 20 20 2a 2a 20 61 20 72 65 74 75 72 6e 20 63 6f    ** a return co
7800: 64 65 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 2e  de SQLITE_ABORT.
7810: 0a 20 20 2a 2f 0a 20 20 77 68 69 6c 65 28 20 6e  .  */.  while( n
7820: 56 6d 53 74 65 70 3e 3d 6e 50 72 6f 67 72 65 73  VmStep>=nProgres
7830: 73 4c 69 6d 69 74 20 26 26 20 64 62 2d 3e 78 50  sLimit && db->xP
7840: 72 6f 67 72 65 73 73 21 3d 30 20 29 7b 0a 20 20  rogress!=0 ){.  
7850: 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 50    assert( db->nP
7860: 72 6f 67 72 65 73 73 4f 70 73 21 3d 30 20 29 3b  rogressOps!=0 );
7870: 0a 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69  .    nProgressLi
7880: 6d 69 74 20 2b 3d 20 64 62 2d 3e 6e 50 72 6f 67  mit += db->nProg
7890: 72 65 73 73 4f 70 73 3b 0a 20 20 20 20 69 66 28  ressOps;.    if(
78a0: 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64   db->xProgress(d
78b0: 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29  b->pProgressArg)
78c0: 20 29 7b 0a 20 20 20 20 20 20 6e 50 72 6f 67 72   ){.      nProgr
78d0: 65 73 73 4c 69 6d 69 74 20 3d 20 30 78 66 66 66  essLimit = 0xfff
78e0: 66 66 66 66 66 3b 0a 20 20 20 20 20 20 72 63 20  fffff;.      rc 
78f0: 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55  = SQLITE_INTERRU
7900: 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61  PT;.      goto a
7910: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
7920: 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e  r;.    }.  }.#en
7930: 64 69 66 0a 20 20 0a 20 20 62 72 65 61 6b 3b 0a  dif.  .  break;.
7940: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47  }../* Opcode:  G
7950: 6f 73 75 62 20 50 31 20 50 32 20 2a 20 2a 20 2a  osub P1 P2 * * *
7960: 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65  .**.** Write the
7970: 20 63 75 72 72 65 6e 74 20 61 64 64 72 65 73 73   current address
7980: 20 6f 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   onto register P
7990: 31 0a 2a 2a 20 61 6e 64 20 74 68 65 6e 20 6a 75  1.** and then ju
79a0: 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32  mp to address P2
79b0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 73  ..*/.case OP_Gos
79c0: 75 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ub: {           
79d0: 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73   /* jump */.  as
79e0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
79f0: 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e  && pOp->p1<=(p->
7a00: 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
7a10: 73 6f 72 29 20 29 3b 0a 20 20 70 49 6e 31 20 3d  sor) );.  pIn1 =
7a20: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
7a30: 0a 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d  .  assert( VdbeM
7a40: 65 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d  emDynamic(pIn1)=
7a50: 3d 30 20 29 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  =0 );.  memAbout
7a60: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31  ToChange(p, pIn1
7a70: 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  );.  pIn1->flags
7a80: 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 49   = MEM_Int;.  pI
7a90: 6e 31 2d 3e 75 2e 69 20 3d 20 28 69 6e 74 29 28  n1->u.i = (int)(
7aa0: 70 4f 70 2d 61 4f 70 29 3b 0a 20 20 52 45 47 49  pOp-aOp);.  REGI
7ab0: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
7ac0: 70 31 2c 20 70 49 6e 31 29 3b 0a 0a 20 20 2f 2a  p1, pIn1);..  /*
7ad0: 20 4d 6f 73 74 20 6a 75 6d 70 20 6f 70 65 72 61   Most jump opera
7ae0: 74 69 6f 6e 73 20 64 6f 20 61 20 67 6f 74 6f 20  tions do a goto 
7af0: 74 6f 20 74 68 69 73 20 73 70 6f 74 20 69 6e 20  to this spot in 
7b00: 6f 72 64 65 72 20 74 6f 20 75 70 64 61 74 65 0a  order to update.
7b10: 20 20 2a 2a 20 74 68 65 20 70 4f 70 20 70 6f 69    ** the pOp poi
7b20: 6e 74 65 72 2e 20 2a 2f 0a 6a 75 6d 70 5f 74 6f  nter. */.jump_to
7b30: 5f 70 32 3a 0a 20 20 70 4f 70 20 3d 20 26 61 4f  _p2:.  pOp = &aO
7b40: 70 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a  p[pOp->p2 - 1];.
7b50: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
7b60: 70 63 6f 64 65 3a 20 20 52 65 74 75 72 6e 20 50  pcode:  Return P
7b70: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
7b80: 4a 75 6d 70 20 74 6f 20 74 68 65 20 6e 65 78 74  Jump to the next
7b90: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 66 74   instruction aft
7ba0: 65 72 20 74 68 65 20 61 64 64 72 65 73 73 20 69  er the address i
7bb0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20  n register P1.  
7bc0: 41 66 74 65 72 0a 2a 2a 20 74 68 65 20 6a 75 6d  After.** the jum
7bd0: 70 2c 20 72 65 67 69 73 74 65 72 20 50 31 20 62  p, register P1 b
7be0: 65 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65 64  ecomes undefined
7bf0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 74  ..*/.case OP_Ret
7c00: 75 72 6e 3a 20 7b 20 20 20 20 20 20 20 20 20 20  urn: {          
7c10: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e   /* in1 */.  pIn
7c20: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
7c30: 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1];.  assert( pI
7c40: 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49  n1->flags==MEM_I
7c50: 6e 74 20 29 3b 0a 20 20 70 4f 70 20 3d 20 26 61  nt );.  pOp = &a
7c60: 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20  Op[pIn1->u.i];. 
7c70: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d   pIn1->flags = M
7c80: 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20  EM_Undefined;.  
7c90: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
7ca0: 6f 64 65 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69  ode: InitCorouti
7cb0: 6e 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ne P1 P2 P3 * *.
7cc0: 2a 2a 0a 2a 2a 20 53 65 74 20 75 70 20 72 65 67  **.** Set up reg
7cd0: 69 73 74 65 72 20 50 31 20 73 6f 20 74 68 61 74  ister P1 so that
7ce0: 20 69 74 20 77 69 6c 6c 20 59 69 65 6c 64 20 74   it will Yield t
7cf0: 6f 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 0a  o the coroutine.
7d00: 2a 2a 20 6c 6f 63 61 74 65 64 20 61 74 20 61 64  ** located at ad
7d10: 64 72 65 73 73 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  dress P3..**.** 
7d20: 49 66 20 50 32 21 3d 30 20 74 68 65 6e 20 74 68  If P2!=0 then th
7d30: 65 20 63 6f 72 6f 75 74 69 6e 65 20 69 6d 70 6c  e coroutine impl
7d40: 65 6d 65 6e 74 61 74 69 6f 6e 20 69 6d 6d 65 64  ementation immed
7d50: 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 73 0a 2a  iately follows.*
7d60: 2a 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20  * this opcode.  
7d70: 53 6f 20 6a 75 6d 70 20 6f 76 65 72 20 74 68 65  So jump over the
7d80: 20 63 6f 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65   coroutine imple
7d90: 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 0a 2a 2a 20  mentation to.** 
7da0: 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 0a 2a  address P2..**.*
7db0: 2a 20 53 65 65 20 61 6c 73 6f 3a 20 45 6e 64 43  * See also: EndC
7dc0: 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65  oroutine.*/.case
7dd0: 20 4f 50 5f 49 6e 69 74 43 6f 72 6f 75 74 69 6e   OP_InitCoroutin
7de0: 65 3a 20 7b 20 20 20 20 20 2f 2a 20 6a 75 6d 70  e: {     /* jump
7df0: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
7e00: 70 2d 3e 70 31 3e 30 20 26 26 20 20 70 4f 70 2d  p->p1>0 &&  pOp-
7e10: 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p1<=(p->nMem+1 
7e20: 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
7e30: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
7e40: 70 32 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 32  p2>=0 && pOp->p2
7e50: 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 61 73 73  <p->nOp );.  ass
7e60: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20  ert( pOp->p3>=0 
7e70: 26 26 20 70 4f 70 2d 3e 70 33 3c 70 2d 3e 6e 4f  && pOp->p3<p->nO
7e80: 70 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p );.  pOut = &a
7e90: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
7ea0: 61 73 73 65 72 74 28 20 21 56 64 62 65 4d 65 6d  assert( !VdbeMem
7eb0: 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 20 29 3b  Dynamic(pOut) );
7ec0: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70  .  pOut->u.i = p
7ed0: 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a 20 20 70 4f  Op->p3 - 1;.  pO
7ee0: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
7ef0: 49 6e 74 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  Int;.  if( pOp->
7f00: 70 32 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  p2 ) goto jump_t
7f10: 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  o_p2;.  break;.}
7f20: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 45 6e  ../* Opcode:  En
7f30: 64 43 6f 72 6f 75 74 69 6e 65 20 50 31 20 2a 20  dCoroutine P1 * 
7f40: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  * * *.**.** The 
7f50: 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20 74  instruction at t
7f60: 68 65 20 61 64 64 72 65 73 73 20 69 6e 20 72 65  he address in re
7f70: 67 69 73 74 65 72 20 50 31 20 69 73 20 61 20 59  gister P1 is a Y
7f80: 69 65 6c 64 2e 0a 2a 2a 20 4a 75 6d 70 20 74 6f  ield..** Jump to
7f90: 20 74 68 65 20 50 32 20 70 61 72 61 6d 65 74 65   the P2 paramete
7fa0: 72 20 6f 66 20 74 68 61 74 20 59 69 65 6c 64 2e  r of that Yield.
7fb0: 0a 2a 2a 20 41 66 74 65 72 20 74 68 65 20 6a 75  .** After the ju
7fc0: 6d 70 2c 20 72 65 67 69 73 74 65 72 20 50 31 20  mp, register P1 
7fd0: 62 65 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65  becomes undefine
7fe0: 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  d..**.** See als
7ff0: 6f 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65  o: InitCoroutine
8000: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6e 64 43  .*/.case OP_EndC
8010: 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20 20 20  oroutine: {     
8020: 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a        /* in1 */.
8030: 20 20 56 64 62 65 4f 70 20 2a 70 43 61 6c 6c 65    VdbeOp *pCalle
8040: 72 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  r;.  pIn1 = &aMe
8050: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
8060: 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
8070: 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  s==MEM_Int );.  
8080: 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 75 2e  assert( pIn1->u.
8090: 69 3e 3d 30 20 26 26 20 70 49 6e 31 2d 3e 75 2e  i>=0 && pIn1->u.
80a0: 69 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 43  i<p->nOp );.  pC
80b0: 61 6c 6c 65 72 20 3d 20 26 61 4f 70 5b 70 49 6e  aller = &aOp[pIn
80c0: 31 2d 3e 75 2e 69 5d 3b 0a 20 20 61 73 73 65 72  1->u.i];.  asser
80d0: 74 28 20 70 43 61 6c 6c 65 72 2d 3e 6f 70 63 6f  t( pCaller->opco
80e0: 64 65 3d 3d 4f 50 5f 59 69 65 6c 64 20 29 3b 0a  de==OP_Yield );.
80f0: 20 20 61 73 73 65 72 74 28 20 70 43 61 6c 6c 65    assert( pCalle
8100: 72 2d 3e 70 32 3e 3d 30 20 26 26 20 70 43 61 6c  r->p2>=0 && pCal
8110: 6c 65 72 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29  ler->p2<p->nOp )
8120: 3b 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70  ;.  pOp = &aOp[p
8130: 43 61 6c 6c 65 72 2d 3e 70 32 20 2d 20 31 5d 3b  Caller->p2 - 1];
8140: 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d  .  pIn1->flags =
8150: 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a   MEM_Undefined;.
8160: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
8170: 70 63 6f 64 65 3a 20 20 59 69 65 6c 64 20 50 31  pcode:  Yield P1
8180: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
8190: 53 77 61 70 20 74 68 65 20 70 72 6f 67 72 61 6d  Swap the program
81a0: 20 63 6f 75 6e 74 65 72 20 77 69 74 68 20 74 68   counter with th
81b0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
81c0: 74 65 72 20 50 31 2e 20 20 54 68 69 73 0a 2a 2a  ter P1.  This.**
81d0: 20 68 61 73 20 74 68 65 20 65 66 66 65 63 74 20   has the effect 
81e0: 6f 66 20 79 69 65 6c 64 69 6e 67 20 74 6f 20 61  of yielding to a
81f0: 20 63 6f 72 6f 75 74 69 6e 65 2e 0a 2a 2a 0a 2a   coroutine..**.*
8200: 2a 20 49 66 20 74 68 65 20 63 6f 72 6f 75 74 69  * If the corouti
8210: 6e 65 20 74 68 61 74 20 69 73 20 6c 61 75 6e 63  ne that is launc
8220: 68 65 64 20 62 79 20 74 68 69 73 20 69 6e 73 74  hed by this inst
8230: 72 75 63 74 69 6f 6e 20 65 6e 64 73 20 77 69 74  ruction ends wit
8240: 68 0a 2a 2a 20 59 69 65 6c 64 20 6f 72 20 52 65  h.** Yield or Re
8250: 74 75 72 6e 20 74 68 65 6e 20 63 6f 6e 74 69 6e  turn then contin
8260: 75 65 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  ue to the next i
8270: 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74  nstruction.  But
8280: 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 72 6f 75   if.** the corou
8290: 74 69 6e 65 20 6c 61 75 6e 63 68 65 64 20 62 79  tine launched by
82a0: 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
82b0: 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20 45  n ends with.** E
82c0: 6e 64 43 6f 72 6f 75 74 69 6e 65 2c 20 74 68 65  ndCoroutine, the
82d0: 6e 20 6a 75 6d 70 20 74 6f 20 50 32 20 72 61 74  n jump to P2 rat
82e0: 68 65 72 20 74 68 61 6e 20 63 6f 6e 74 69 6e 75  her than continu
82f0: 69 6e 67 20 77 69 74 68 20 74 68 65 0a 2a 2a 20  ing with the.** 
8300: 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
8310: 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
8320: 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 0a  : InitCoroutine.
8330: 2a 2f 0a 63 61 73 65 20 4f 50 5f 59 69 65 6c 64  */.case OP_Yield
8340: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
8350: 2a 20 69 6e 31 2c 20 6a 75 6d 70 20 2a 2f 0a 20  * in1, jump */. 
8360: 20 69 6e 74 20 70 63 44 65 73 74 3b 0a 20 20 70   int pcDest;.  p
8370: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
8380: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
8390: 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70  VdbeMemDynamic(p
83a0: 49 6e 31 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e  In1)==0 );.  pIn
83b0: 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  1->flags = MEM_I
83c0: 6e 74 3b 0a 20 20 70 63 44 65 73 74 20 3d 20 28  nt;.  pcDest = (
83d0: 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20  int)pIn1->u.i;. 
83e0: 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 28 69 6e   pIn1->u.i = (in
83f0: 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20  t)(pOp - aOp);. 
8400: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
8410: 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a  pOp->p1, pIn1);.
8420: 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 63 44    pOp = &aOp[pcD
8430: 65 73 74 5d 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  est];.  break;.}
8440: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61  ../* Opcode:  Ha
8450: 6c 74 49 66 4e 75 6c 6c 20 20 50 31 20 50 32 20  ltIfNull  P1 P2 
8460: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
8470: 70 73 69 73 3a 20 69 66 20 72 5b 50 33 5d 3d 6e  psis: if r[P3]=n
8480: 75 6c 6c 20 68 61 6c 74 0a 2a 2a 0a 2a 2a 20 43  ull halt.**.** C
8490: 68 65 63 6b 20 74 68 65 20 76 61 6c 75 65 20 69  heck the value i
84a0: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 20  n register P3.  
84b0: 49 66 20 69 74 20 69 73 20 4e 55 4c 4c 20 74 68  If it is NULL th
84c0: 65 6e 20 48 61 6c 74 20 75 73 69 6e 67 0a 2a 2a  en Halt using.**
84d0: 20 70 61 72 61 6d 65 74 65 72 20 50 31 2c 20 50   parameter P1, P
84e0: 32 2c 20 61 6e 64 20 50 34 20 61 73 20 69 66 20  2, and P4 as if 
84f0: 74 68 69 73 20 77 65 72 65 20 61 20 48 61 6c 74  this were a Halt
8500: 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49   instruction.  I
8510: 66 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69  f the.** value i
8520: 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  n register P3 is
8530: 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   not NULL, then 
8540: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20  this routine is 
8550: 61 20 6e 6f 2d 6f 70 2e 0a 2a 2a 20 54 68 65 20  a no-op..** The 
8560: 50 35 20 70 61 72 61 6d 65 74 65 72 20 73 68 6f  P5 parameter sho
8570: 75 6c 64 20 62 65 20 31 2e 0a 2a 2f 0a 63 61 73  uld be 1..*/.cas
8580: 65 20 4f 50 5f 48 61 6c 74 49 66 4e 75 6c 6c 3a  e OP_HaltIfNull:
8590: 20 7b 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a   {      /* in3 *
85a0: 2f 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  /.  pIn3 = &aMem
85b0: 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65  [pOp->p3];.#ifde
85c0: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
85d0: 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 4f 45   if( pOp->p2==OE
85e0: 5f 41 62 6f 72 74 20 29 7b 20 73 71 6c 69 74 65  _Abort ){ sqlite
85f0: 33 56 64 62 65 41 73 73 65 72 74 41 62 6f 72 74  3VdbeAssertAbort
8600: 61 62 6c 65 28 70 29 3b 20 7d 0a 23 65 6e 64 69  able(p); }.#endi
8610: 66 0a 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66  f.  if( (pIn3->f
8620: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
8630: 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f  ==0 ) break;.  /
8640: 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69  * Fall through i
8650: 6e 74 6f 20 4f 50 5f 48 61 6c 74 20 2a 2f 0a 7d  nto OP_Halt */.}
8660: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61  ../* Opcode:  Ha
8670: 6c 74 20 50 31 20 50 32 20 2a 20 50 34 20 50 35  lt P1 P2 * P4 P5
8680: 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20 69 6d 6d 65  .**.** Exit imme
8690: 64 69 61 74 65 6c 79 2e 20 20 41 6c 6c 20 6f 70  diately.  All op
86a0: 65 6e 20 63 75 72 73 6f 72 73 2c 20 65 74 63 20  en cursors, etc 
86b0: 61 72 65 20 63 6c 6f 73 65 64 0a 2a 2a 20 61 75  are closed.** au
86c0: 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2a 0a  tomatically..**.
86d0: 2a 2a 20 50 31 20 69 73 20 74 68 65 20 72 65 73  ** P1 is the res
86e0: 75 6c 74 20 63 6f 64 65 20 72 65 74 75 72 6e 65  ult code returne
86f0: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 65 78 65  d by sqlite3_exe
8700: 63 28 29 2c 20 73 71 6c 69 74 65 33 5f 72 65 73  c(), sqlite3_res
8710: 65 74 28 29 2c 0a 2a 2a 20 6f 72 20 73 71 6c 69  et(),.** or sqli
8720: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29 2e 20  te3_finalize(). 
8730: 20 46 6f 72 20 61 20 6e 6f 72 6d 61 6c 20 68 61   For a normal ha
8740: 6c 74 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20  lt, this should 
8750: 62 65 20 53 51 4c 49 54 45 5f 4f 4b 20 28 30 29  be SQLITE_OK (0)
8760: 2e 0a 2a 2a 20 46 6f 72 20 65 72 72 6f 72 73 2c  ..** For errors,
8770: 20 69 74 20 63 61 6e 20 62 65 20 73 6f 6d 65 20   it can be some 
8780: 6f 74 68 65 72 20 76 61 6c 75 65 2e 20 20 49 66  other value.  If
8790: 20 50 31 21 3d 30 20 74 68 65 6e 20 50 32 20 77   P1!=0 then P2 w
87a0: 69 6c 6c 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a  ill determine.**
87b0: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
87c0: 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20  to rollback the 
87d0: 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74  current transact
87e0: 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20 72 6f 6c  ion.  Do not rol
87f0: 6c 62 61 63 6b 0a 2a 2a 20 69 66 20 50 32 3d 3d  lback.** if P2==
8800: 4f 45 5f 46 61 69 6c 2e 20 44 6f 20 74 68 65 20  OE_Fail. Do the 
8810: 72 6f 6c 6c 62 61 63 6b 20 69 66 20 50 32 3d 3d  rollback if P2==
8820: 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20 20 49 66  OE_Rollback.  If
8830: 20 50 32 3d 3d 4f 45 5f 41 62 6f 72 74 2c 0a 2a   P2==OE_Abort,.*
8840: 2a 20 74 68 65 6e 20 62 61 63 6b 20 6f 75 74 20  * then back out 
8850: 61 6c 6c 20 63 68 61 6e 67 65 73 20 74 68 61 74  all changes that
8860: 20 68 61 76 65 20 6f 63 63 75 72 72 65 64 20 64   have occurred d
8870: 75 72 69 6e 67 20 74 68 69 73 20 65 78 65 63 75  uring this execu
8880: 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 56  tion of the.** V
8890: 44 42 45 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20  DBE, but do not 
88a0: 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61  rollback the tra
88b0: 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a  nsaction. .**.**
88c0: 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 6e 75   If P4 is not nu
88d0: 6c 6c 20 74 68 65 6e 20 69 74 20 69 73 20 61 6e  ll then it is an
88e0: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73   error message s
88f0: 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 50 35 20  tring..**.** P5 
8900: 69 73 20 61 20 76 61 6c 75 65 20 62 65 74 77 65  is a value betwe
8910: 65 6e 20 30 20 61 6e 64 20 34 2c 20 69 6e 63 6c  en 0 and 4, incl
8920: 75 73 69 76 65 2c 20 74 68 61 74 20 6d 6f 64 69  usive, that modi
8930: 66 69 65 73 20 74 68 65 20 50 34 20 73 74 72 69  fies the P4 stri
8940: 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 30 3a 20  ng..**.**    0: 
8950: 20 28 6e 6f 20 63 68 61 6e 67 65 29 0a 2a 2a 20   (no change).** 
8960: 20 20 20 31 3a 20 20 4e 4f 54 20 4e 55 4c 4c 20     1:  NOT NULL 
8970: 63 6f 6e 74 72 61 69 6e 74 20 66 61 69 6c 65 64  contraint failed
8980: 3a 20 50 34 0a 2a 2a 20 20 20 20 32 3a 20 20 55  : P4.**    2:  U
8990: 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74  NIQUE constraint
89a0: 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20   failed: P4.**  
89b0: 20 20 33 3a 20 20 43 48 45 43 4b 20 63 6f 6e 73    3:  CHECK cons
89c0: 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50  traint failed: P
89d0: 34 0a 2a 2a 20 20 20 20 34 3a 20 20 46 4f 52 45  4.**    4:  FORE
89e0: 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69  IGN KEY constrai
89f0: 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a  nt failed: P4.**
8a00: 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74  .** If P5 is not
8a10: 20 7a 65 72 6f 20 61 6e 64 20 50 34 20 69 73 20   zero and P4 is 
8a20: 4e 55 4c 4c 2c 20 74 68 65 6e 20 65 76 65 72 79  NULL, then every
8a30: 74 68 69 6e 67 20 61 66 74 65 72 20 74 68 65 20  thing after the 
8a40: 22 3a 22 20 69 73 0a 2a 2a 20 6f 6d 69 74 74 65  ":" is.** omitte
8a50: 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 69  d..**.** There i
8a60: 73 20 61 6e 20 69 6d 70 6c 69 65 64 20 22 48 61  s an implied "Ha
8a70: 6c 74 20 30 20 30 20 30 22 20 69 6e 73 74 72 75  lt 0 0 0" instru
8a80: 63 74 69 6f 6e 20 69 6e 73 65 72 74 65 64 20 61  ction inserted a
8a90: 74 20 74 68 65 20 76 65 72 79 20 65 6e 64 20 6f  t the very end o
8aa0: 66 0a 2a 2a 20 65 76 65 72 79 20 70 72 6f 67 72  f.** every progr
8ab0: 61 6d 2e 20 20 53 6f 20 61 20 6a 75 6d 70 20 70  am.  So a jump p
8ac0: 61 73 74 20 74 68 65 20 6c 61 73 74 20 69 6e 73  ast the last ins
8ad0: 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68 65 20  truction of the 
8ae0: 70 72 6f 67 72 61 6d 0a 2a 2a 20 69 73 20 74 68  program.** is th
8af0: 65 20 73 61 6d 65 20 61 73 20 65 78 65 63 75 74  e same as execut
8b00: 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63 61 73  ing Halt..*/.cas
8b10: 65 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20 20 56  e OP_Halt: {.  V
8b20: 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
8b30: 3b 0a 20 20 69 6e 74 20 70 63 78 3b 0a 0a 20 20  ;.  int pcx;..  
8b40: 70 63 78 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  pcx = (int)(pOp 
8b50: 2d 20 61 4f 70 29 3b 0a 23 69 66 64 65 66 20 53  - aOp);.#ifdef S
8b60: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66  QLITE_DEBUG.  if
8b70: 28 20 70 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 41 62  ( pOp->p2==OE_Ab
8b80: 6f 72 74 20 29 7b 20 73 71 6c 69 74 65 33 56 64  ort ){ sqlite3Vd
8b90: 62 65 41 73 73 65 72 74 41 62 6f 72 74 61 62 6c  beAssertAbortabl
8ba0: 65 28 70 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20  e(p); }.#endif. 
8bb0: 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 53 51   if( pOp->p1==SQ
8bc0: 4c 49 54 45 5f 4f 4b 20 26 26 20 70 2d 3e 70 46  LITE_OK && p->pF
8bd0: 72 61 6d 65 20 29 7b 0a 20 20 20 20 2f 2a 20 48  rame ){.    /* H
8be0: 61 6c 74 20 74 68 65 20 73 75 62 2d 70 72 6f 67  alt the sub-prog
8bf0: 72 61 6d 2e 20 52 65 74 75 72 6e 20 63 6f 6e 74  ram. Return cont
8c00: 72 6f 6c 20 74 6f 20 74 68 65 20 70 61 72 65 6e  rol to the paren
8c10: 74 20 66 72 61 6d 65 2e 20 2a 2f 0a 20 20 20 20  t frame. */.    
8c20: 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61  pFrame = p->pFra
8c30: 6d 65 3b 0a 20 20 20 20 70 2d 3e 70 46 72 61 6d  me;.    p->pFram
8c40: 65 20 3d 20 70 46 72 61 6d 65 2d 3e 70 50 61 72  e = pFrame->pPar
8c50: 65 6e 74 3b 0a 20 20 20 20 70 2d 3e 6e 46 72 61  ent;.    p->nFra
8c60: 6d 65 2d 2d 3b 0a 20 20 20 20 73 71 6c 69 74 65  me--;.    sqlite
8c70: 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73 28  3VdbeSetChanges(
8c80: 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b  db, p->nChange);
8c90: 0a 20 20 20 20 70 63 78 20 3d 20 73 71 6c 69 74  .    pcx = sqlit
8ca0: 65 33 56 64 62 65 46 72 61 6d 65 52 65 73 74 6f  e3VdbeFrameResto
8cb0: 72 65 28 70 46 72 61 6d 65 29 3b 0a 20 20 20 20  re(pFrame);.    
8cc0: 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 4f 45 5f  if( pOp->p2==OE_
8cd0: 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20 20 20  Ignore ){.      
8ce0: 2f 2a 20 49 6e 73 74 72 75 63 74 69 6f 6e 20 70  /* Instruction p
8cf0: 63 78 20 69 73 20 74 68 65 20 4f 50 5f 50 72 6f  cx is the OP_Pro
8d00: 67 72 61 6d 20 74 68 61 74 20 69 6e 76 6f 6b 65  gram that invoke
8d10: 64 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61  d the sub-progra
8d20: 6d 20 0a 20 20 20 20 20 20 2a 2a 20 63 75 72 72  m .      ** curr
8d30: 65 6e 74 6c 79 20 62 65 69 6e 67 20 68 61 6c 74  ently being halt
8d40: 65 64 2e 20 49 66 20 74 68 65 20 70 32 20 69 6e  ed. If the p2 in
8d50: 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68 69  struction of thi
8d60: 73 20 4f 50 5f 48 61 6c 74 0a 20 20 20 20 20 20  s OP_Halt.      
8d70: 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  ** instruction i
8d80: 73 20 73 65 74 20 74 6f 20 4f 45 5f 49 67 6e 6f  s set to OE_Igno
8d90: 72 65 2c 20 74 68 65 6e 20 74 68 65 20 73 75 62  re, then the sub
8da0: 2d 70 72 6f 67 72 61 6d 20 69 73 20 74 68 72 6f  -program is thro
8db0: 77 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 61 6e  wing.      ** an
8dc0: 20 49 47 4e 4f 52 45 20 65 78 63 65 70 74 69 6f   IGNORE exceptio
8dd0: 6e 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  n. In this case 
8de0: 6a 75 6d 70 20 74 6f 20 74 68 65 20 61 64 64 72  jump to the addr
8df0: 65 73 73 20 73 70 65 63 69 66 69 65 64 0a 20 20  ess specified.  
8e00: 20 20 20 20 2a 2a 20 61 73 20 74 68 65 20 70 32      ** as the p2
8e10: 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e 67 20   of the calling 
8e20: 4f 50 5f 50 72 6f 67 72 61 6d 2e 20 20 2a 2f 0a  OP_Program.  */.
8e30: 20 20 20 20 20 20 70 63 78 20 3d 20 70 2d 3e 61        pcx = p->a
8e40: 4f 70 5b 70 63 78 5d 2e 70 32 2d 31 3b 0a 20 20  Op[pcx].p2-1;.  
8e50: 20 20 7d 0a 20 20 20 20 61 4f 70 20 3d 20 70 2d    }.    aOp = p-
8e60: 3e 61 4f 70 3b 0a 20 20 20 20 61 4d 65 6d 20 3d  >aOp;.    aMem =
8e70: 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 4f   p->aMem;.    pO
8e80: 70 20 3d 20 26 61 4f 70 5b 70 63 78 5d 3b 0a 20  p = &aOp[pcx];. 
8e90: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
8ea0: 70 2d 3e 72 63 20 3d 20 70 4f 70 2d 3e 70 31 3b  p->rc = pOp->p1;
8eb0: 0a 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f  .  p->errorActio
8ec0: 6e 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 32 3b  n = (u8)pOp->p2;
8ed0: 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 78 3b 0a  .  p->pc = pcx;.
8ee0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
8ef0: 35 3c 3d 34 20 29 3b 0a 20 20 69 66 28 20 70 2d  5<=4 );.  if( p-
8f00: 3e 72 63 20 29 7b 0a 20 20 20 20 69 66 28 20 70  >rc ){.    if( p
8f10: 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20 20  Op->p5 ){.      
8f20: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61  static const cha
8f30: 72 20 2a 20 63 6f 6e 73 74 20 61 7a 54 79 70 65  r * const azType
8f40: 5b 5d 20 3d 20 7b 20 22 4e 4f 54 20 4e 55 4c 4c  [] = { "NOT NULL
8f50: 22 2c 20 22 55 4e 49 51 55 45 22 2c 20 22 43 48  ", "UNIQUE", "CH
8f60: 45 43 4b 22 2c 0a 20 20 20 20 20 20 20 20 20 20  ECK",.          
8f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f90: 20 20 20 22 46 4f 52 45 49 47 4e 20 4b 45 59 22     "FOREIGN KEY"
8fa0: 20 7d 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61   };.      testca
8fb0: 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29  se( pOp->p5==1 )
8fc0: 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65  ;.      testcase
8fd0: 28 20 70 4f 70 2d 3e 70 35 3d 3d 32 20 29 3b 0a  ( pOp->p5==2 );.
8fe0: 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
8ff0: 70 4f 70 2d 3e 70 35 3d 3d 33 20 29 3b 0a 20 20  pOp->p5==3 );.  
9000: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f      testcase( pO
9010: 70 2d 3e 70 35 3d 3d 34 20 29 3b 0a 20 20 20 20  p->p5==4 );.    
9020: 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
9030: 6f 72 28 70 2c 20 22 25 73 20 63 6f 6e 73 74 72  or(p, "%s constr
9040: 61 69 6e 74 20 66 61 69 6c 65 64 22 2c 20 61 7a  aint failed", az
9050: 54 79 70 65 5b 70 4f 70 2d 3e 70 35 2d 31 5d 29  Type[pOp->p5-1])
9060: 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d  ;.      if( pOp-
9070: 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 20 20 20  >p4.z ){.       
9080: 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71   p->zErrMsg = sq
9090: 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c  lite3MPrintf(db,
90a0: 20 22 25 7a 3a 20 25 73 22 2c 20 70 2d 3e 7a 45   "%z: %s", p->zE
90b0: 72 72 4d 73 67 2c 20 70 4f 70 2d 3e 70 34 2e 7a  rrMsg, pOp->p4.z
90c0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
90d0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69  else{.      sqli
90e0: 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
90f0: 22 25 73 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  "%s", pOp->p4.z)
9100: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
9110: 74 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c  te3_log(pOp->p1,
9120: 20 22 61 62 6f 72 74 20 61 74 20 25 64 20 69 6e   "abort at %d in
9130: 20 5b 25 73 5d 3a 20 25 73 22 2c 20 70 63 78 2c   [%s]: %s", pcx,
9140: 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72   p->zSql, p->zEr
9150: 72 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 72 63 20  rMsg);.  }.  rc 
9160: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c  = sqlite3VdbeHal
9170: 74 28 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20  t(p);.  assert( 
9180: 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  rc==SQLITE_BUSY 
9190: 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  || rc==SQLITE_OK
91a0: 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45   || rc==SQLITE_E
91b0: 52 52 4f 52 20 29 3b 0a 20 20 69 66 28 20 72 63  RROR );.  if( rc
91c0: 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b  ==SQLITE_BUSY ){
91d0: 0a 20 20 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c  .    p->rc = SQL
91e0: 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73  ITE_BUSY;.  }els
91f0: 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  e{.    assert( r
9200: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
9210: 28 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d 53 51  (p->rc&0xff)==SQ
9220: 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20  LITE_CONSTRAINT 
9230: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  );.    assert( r
9240: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
9250: 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
9260: 73 3e 30 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65  s>0 || db->nDefe
9270: 72 72 65 64 49 6d 6d 43 6f 6e 73 3e 30 20 29 3b  rredImmCons>0 );
9280: 0a 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 20  .    rc = p->rc 
9290: 3f 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 3a  ? SQLITE_ERROR :
92a0: 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20   SQLITE_DONE;.  
92b0: 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65  }.  goto vdbe_re
92c0: 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  turn;.}../* Opco
92d0: 64 65 3a 20 49 6e 74 65 67 65 72 20 50 31 20 50  de: Integer P1 P
92e0: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
92f0: 73 69 73 3a 20 72 5b 50 32 5d 3d 50 31 0a 2a 2a  sis: r[P2]=P1.**
9300: 0a 2a 2a 20 54 68 65 20 33 32 2d 62 69 74 20 69  .** The 32-bit i
9310: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 31 20  nteger value P1 
9320: 69 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20  is written into 
9330: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
9340: 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 65 72 3a  case OP_Integer:
9350: 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75   {         /* ou
9360: 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f  t2 */.  pOut = o
9370: 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
9380: 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75   pOp);.  pOut->u
9390: 2e 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  .i = pOp->p1;.  
93a0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
93b0: 6f 64 65 3a 20 49 6e 74 36 34 20 2a 20 50 32 20  ode: Int64 * P2 
93c0: 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
93d0: 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a  is: r[P2]=P4.**.
93e0: 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
93f0: 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20 69  er to a 64-bit i
9400: 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2a  nteger value..**
9410: 20 57 72 69 74 65 20 74 68 61 74 20 76 61 6c 75   Write that valu
9420: 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
9430: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  P2..*/.case OP_I
9440: 6e 74 36 34 3a 20 7b 20 20 20 20 20 20 20 20 20  nt64: {         
9450: 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70    /* out2 */.  p
9460: 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
9470: 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
9480: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
9490: 70 49 36 34 21 3d 30 20 29 3b 0a 20 20 70 4f 75  pI64!=0 );.  pOu
94a0: 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e 70  t->u.i = *pOp->p
94b0: 34 2e 70 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b  4.pI64;.  break;
94c0: 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
94d0: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
94e0: 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65  _POINT./* Opcode
94f0: 3a 20 52 65 61 6c 20 2a 20 50 32 20 2a 20 50 34  : Real * P2 * P4
9500: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
9510: 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50  r[P2]=P4.**.** P
9520: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
9530: 6f 20 61 20 36 34 2d 62 69 74 20 66 6c 6f 61 74  o a 64-bit float
9540: 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e  ing point value.
9550: 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20 76  .** Write that v
9560: 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74  alue into regist
9570: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
9580: 50 5f 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20  P_Real: {       
9590: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
95a0: 54 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74 32 20 2a  TK_FLOAT, out2 *
95b0: 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  /.  pOut = out2P
95c0: 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
95d0: 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  );.  pOut->flags
95e0: 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 61   = MEM_Real;.  a
95f0: 73 73 65 72 74 28 20 21 73 71 6c 69 74 65 33 49  ssert( !sqlite3I
9600: 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e 70 52  sNaN(*pOp->p4.pR
9610: 65 61 6c 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  eal) );.  pOut->
9620: 75 2e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70  u.r = *pOp->p4.p
9630: 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Real;.  break;.}
9640: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f  .#endif../* Opco
9650: 64 65 3a 20 53 74 72 69 6e 67 38 20 2a 20 50 32  de: String8 * P2
9660: 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
9670: 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27 0a  sis: r[P2]='P4'.
9680: 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20  **.** P4 points 
9690: 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69 6e 61  to a nul termina
96a0: 74 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67  ted UTF-8 string
96b0: 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  . This opcode is
96c0: 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a   transformed .**
96d0: 20 69 6e 74 6f 20 61 20 53 74 72 69 6e 67 20 6f   into a String o
96e0: 70 63 6f 64 65 20 62 65 66 6f 72 65 20 69 74 20  pcode before it 
96f0: 69 73 20 65 78 65 63 75 74 65 64 20 66 6f 72 20  is executed for 
9700: 74 68 65 20 66 69 72 73 74 20 74 69 6d 65 2e 20  the first time. 
9710: 20 44 75 72 69 6e 67 0a 2a 2a 20 74 68 69 73 20   During.** this 
9720: 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 2c 20  transformation, 
9730: 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 73 74  the length of st
9740: 72 69 6e 67 20 50 34 20 69 73 20 63 6f 6d 70 75  ring P4 is compu
9750: 74 65 64 20 61 6e 64 20 73 74 6f 72 65 64 0a 2a  ted and stored.*
9760: 2a 20 61 73 20 74 68 65 20 50 31 20 70 61 72 61  * as the P1 para
9770: 6d 65 74 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f  meter..*/.case O
9780: 50 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20 20 20  P_String8: {    
9790: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
97a0: 54 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74 32 20  TK_STRING, out2 
97b0: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
97c0: 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70  ->p4.z!=0 );.  p
97d0: 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
97e0: 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
97f0: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50  pOp->opcode = OP
9800: 5f 53 74 72 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e  _String;.  pOp->
9810: 70 31 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  p1 = sqlite3Strl
9820: 65 6e 33 30 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b  en30(pOp->p4.z);
9830: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
9840: 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 69 66  _OMIT_UTF16.  if
9850: 28 20 65 6e 63 6f 64 69 6e 67 21 3d 53 51 4c 49  ( encoding!=SQLI
9860: 54 45 5f 55 54 46 38 20 29 7b 0a 20 20 20 20 72  TE_UTF8 ){.    r
9870: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
9880: 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70  emSetStr(pOut, p
9890: 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53 51  Op->p4.z, -1, SQ
98a0: 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54  LITE_UTF8, SQLIT
98b0: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 61  E_STATIC);.    a
98c0: 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
98d0: 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49  E_OK || rc==SQLI
98e0: 54 45 5f 54 4f 4f 42 49 47 20 29 3b 0a 20 20 20  TE_TOOBIG );.   
98f0: 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 74   if( rc ) goto t
9900: 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 69 66 28 20  oo_big;.    if( 
9910: 53 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74  SQLITE_OK!=sqlit
9920: 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
9930: 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64  ding(pOut, encod
9940: 69 6e 67 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  ing) ) goto no_m
9950: 65 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  em;.    assert( 
9960: 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 3e 30  pOut->szMalloc>0
9970: 20 26 26 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f   && pOut->zMallo
9980: 63 3d 3d 70 4f 75 74 2d 3e 7a 20 29 3b 0a 20 20  c==pOut->z );.  
9990: 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65    assert( VdbeMe
99a0: 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 3d 3d  mDynamic(pOut)==
99b0: 30 20 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 73  0 );.    pOut->s
99c0: 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20  zMalloc = 0;.   
99d0: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20   pOut->flags |= 
99e0: 4d 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20 20  MEM_Static;.    
99f0: 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  if( pOp->p4type=
9a00: 3d 50 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20  =P4_DYNAMIC ){. 
9a10: 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
9a20: 65 65 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a  ee(db, pOp->p4.z
9a30: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 70  );.    }.    pOp
9a40: 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 44 59  ->p4type = P4_DY
9a50: 4e 41 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e  NAMIC;.    pOp->
9a60: 70 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a  p4.z = pOut->z;.
9a70: 20 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f      pOp->p1 = pO
9a80: 75 74 2d 3e 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69  ut->n;.  }.#endi
9a90: 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e  f.  if( pOp->p1>
9aa0: 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
9ab0: 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
9ac0: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
9ad0: 62 69 67 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  big;.  }.  asser
9ae0: 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
9af0: 20 29 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68   );.  /* Fall th
9b00: 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
9b10: 74 20 63 61 73 65 2c 20 4f 50 5f 53 74 72 69 6e  t case, OP_Strin
9b20: 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f 70 63  g */.}.  ./* Opc
9b30: 6f 64 65 3a 20 53 74 72 69 6e 67 20 50 31 20 50  ode: String P1 P
9b40: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
9b50: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50  nopsis: r[P2]='P
9b60: 34 27 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a  4' (len=P1).**.*
9b70: 2a 20 54 68 65 20 73 74 72 69 6e 67 20 76 61 6c  * The string val
9b80: 75 65 20 50 34 20 6f 66 20 6c 65 6e 67 74 68 20  ue P4 of length 
9b90: 50 31 20 28 62 79 74 65 73 29 20 69 73 20 73 74  P1 (bytes) is st
9ba0: 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
9bb0: 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33   P2..**.** If P3
9bc0: 20 69 73 20 6e 6f 74 20 7a 65 72 6f 20 61 6e 64   is not zero and
9bd0: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
9be0: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 65  register P3 is e
9bf0: 71 75 61 6c 20 74 6f 20 50 35 2c 20 74 68 65 6e  qual to P5, then
9c00: 0a 2a 2a 20 74 68 65 20 64 61 74 61 74 79 70 65  .** the datatype
9c10: 20 6f 66 20 74 68 65 20 72 65 67 69 73 74 65 72   of the register
9c20: 20 50 32 20 69 73 20 63 6f 6e 76 65 72 74 65 64   P2 is converted
9c30: 20 74 6f 20 42 4c 4f 42 2e 20 20 54 68 65 20 63   to BLOB.  The c
9c40: 6f 6e 74 65 6e 74 20 69 73 0a 2a 2a 20 74 68 65  ontent is.** the
9c50: 20 73 61 6d 65 20 73 65 71 75 65 6e 63 65 20 6f   same sequence o
9c60: 66 20 62 79 74 65 73 2c 20 69 74 20 69 73 20 6d  f bytes, it is m
9c70: 65 72 65 6c 79 20 69 6e 74 65 72 70 72 65 74 65  erely interprete
9c80: 64 20 61 73 20 61 20 42 4c 4f 42 20 69 6e 73 74  d as a BLOB inst
9c90: 65 61 64 0a 2a 2a 20 6f 66 20 61 20 73 74 72 69  ead.** of a stri
9ca0: 6e 67 2c 20 61 73 20 69 66 20 69 74 20 68 61 64  ng, as if it had
9cb0: 20 62 65 65 6e 20 43 41 53 54 2e 20 20 49 6e 20   been CAST.  In 
9cc0: 6f 74 68 65 72 20 77 6f 72 64 73 3a 0a 2a 2a 0a  other words:.**.
9cd0: 2a 2a 20 69 66 28 20 50 33 21 3d 30 20 61 6e 64  ** if( P3!=0 and
9ce0: 20 72 65 67 5b 50 33 5d 3d 3d 50 35 20 29 20 72   reg[P3]==P5 ) r
9cf0: 65 67 5b 50 32 5d 20 3a 3d 20 43 41 53 54 28 72  eg[P2] := CAST(r
9d00: 65 67 5b 50 32 5d 20 61 73 20 42 4c 4f 42 29 0a  eg[P2] as BLOB).
9d10: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e  */.case OP_Strin
9d20: 67 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a  g: {          /*
9d30: 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73 65 72   out2 */.  asser
9d40: 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20  t( pOp->p4.z!=0 
9d50: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  );.  pOut = out2
9d60: 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
9d70: 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  p);.  pOut->flag
9d80: 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f  s = MEM_Str|MEM_
9d90: 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b  Static|MEM_Term;
9da0: 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70  .  pOut->z = pOp
9db0: 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e  ->p4.z;.  pOut->
9dc0: 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  n = pOp->p1;.  p
9dd0: 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  Out->enc = encod
9de0: 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ing;.  UPDATE_MA
9df0: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
9e00: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
9e10: 5f 4c 49 4b 45 5f 44 4f 45 53 4e 54 5f 4d 41 54  _LIKE_DOESNT_MAT
9e20: 43 48 5f 42 4c 4f 42 53 0a 20 20 69 66 28 20 70  CH_BLOBS.  if( p
9e30: 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20 20 20  Op->p3>0 ){.    
9e40: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
9e50: 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
9e60: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
9e70: 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
9e80: 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73 73 65  p->p3];.    asse
9e90: 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  rt( pIn3->flags 
9ea0: 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20  & MEM_Int );.   
9eb0: 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 69 3d 3d   if( pIn3->u.i==
9ec0: 70 4f 70 2d 3e 70 35 20 29 20 70 4f 75 74 2d 3e  pOp->p5 ) pOut->
9ed0: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62  flags = MEM_Blob
9ee0: 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  |MEM_Static|MEM_
9ef0: 54 65 72 6d 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  Term;.  }.#endif
9f00: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
9f10: 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 20 50 31 20  Opcode: Null P1 
9f20: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
9f30: 6f 70 73 69 73 3a 20 72 5b 50 32 2e 2e 50 33 5d  opsis: r[P2..P3]
9f40: 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 57 72 69 74  =NULL.**.** Writ
9f50: 65 20 61 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65  e a NULL into re
9f60: 67 69 73 74 65 72 73 20 50 32 2e 20 20 49 66 20  gisters P2.  If 
9f70: 50 33 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  P3 greater than 
9f80: 50 32 2c 20 74 68 65 6e 20 61 6c 73 6f 20 77 72  P2, then also wr
9f90: 69 74 65 0a 2a 2a 20 4e 55 4c 4c 20 69 6e 74 6f  ite.** NULL into
9fa0: 20 72 65 67 69 73 74 65 72 20 50 33 20 61 6e 64   register P3 and
9fb0: 20 65 76 65 72 79 20 72 65 67 69 73 74 65 72 20   every register 
9fc0: 69 6e 20 62 65 74 77 65 65 6e 20 50 32 20 61 6e  in between P2 an
9fd0: 64 20 50 33 2e 20 20 49 66 20 50 33 0a 2a 2a 20  d P3.  If P3.** 
9fe0: 69 73 20 6c 65 73 73 20 74 68 61 6e 20 50 32 20  is less than P2 
9ff0: 28 74 79 70 69 63 61 6c 6c 79 20 50 33 20 69 73  (typically P3 is
a000: 20 7a 65 72 6f 29 20 74 68 65 6e 20 6f 6e 6c 79   zero) then only
a010: 20 72 65 67 69 73 74 65 72 20 50 32 20 69 73 0a   register P2 is.
a020: 2a 2a 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 0a  ** set to NULL..
a030: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
a040: 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72  value is non-zer
a050: 6f 2c 20 74 68 65 6e 20 61 6c 73 6f 20 73 65 74  o, then also set
a060: 20 74 68 65 20 4d 45 4d 5f 43 6c 65 61 72 65 64   the MEM_Cleared
a070: 20 66 6c 61 67 20 73 6f 20 74 68 61 74 0a 2a 2a   flag so that.**
a080: 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 77 69 6c   NULL values wil
a090: 6c 20 6e 6f 74 20 63 6f 6d 70 61 72 65 20 65 71  l not compare eq
a0a0: 75 61 6c 20 65 76 65 6e 20 69 66 20 53 51 4c 49  ual even if SQLI
a0b0: 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74  TE_NULLEQ is set
a0c0: 20 6f 6e 0a 2a 2a 20 4f 50 5f 4e 65 20 6f 72 20   on.** OP_Ne or 
a0d0: 4f 50 5f 45 71 2e 0a 2a 2f 0a 63 61 73 65 20 4f  OP_Eq..*/.case O
a0e0: 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20  P_Null: {       
a0f0: 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
a100: 20 69 6e 74 20 63 6e 74 3b 0a 20 20 75 31 36 20   int cnt;.  u16 
a110: 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 70 4f 75 74  nullFlag;.  pOut
a120: 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
a130: 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 63 6e 74  e(p, pOp);.  cnt
a140: 20 3d 20 70 4f 70 2d 3e 70 33 2d 70 4f 70 2d 3e   = pOp->p3-pOp->
a150: 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  p2;.  assert( pO
a160: 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p3<=(p->nMem+
a170: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
a180: 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  );.  pOut->flags
a190: 20 3d 20 6e 75 6c 6c 46 6c 61 67 20 3d 20 70 4f   = nullFlag = pO
a1a0: 70 2d 3e 70 31 20 3f 20 28 4d 45 4d 5f 4e 75 6c  p->p1 ? (MEM_Nul
a1b0: 6c 7c 4d 45 4d 5f 43 6c 65 61 72 65 64 29 20 3a  l|MEM_Cleared) :
a1c0: 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 70 4f 75   MEM_Null;.  pOu
a1d0: 74 2d 3e 6e 20 3d 20 30 3b 0a 23 69 66 64 65 66  t->n = 0;.#ifdef
a1e0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
a1f0: 70 4f 75 74 2d 3e 75 54 65 6d 70 20 3d 20 30 3b  pOut->uTemp = 0;
a200: 0a 23 65 6e 64 69 66 0a 20 20 77 68 69 6c 65 28  .#endif.  while(
a210: 20 63 6e 74 3e 30 20 29 7b 0a 20 20 20 20 70 4f   cnt>0 ){.    pO
a220: 75 74 2b 2b 3b 0a 20 20 20 20 6d 65 6d 41 62 6f  ut++;.    memAbo
a230: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f  utToChange(p, pO
a240: 75 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ut);.    sqlite3
a250: 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
a260: 4f 75 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  Out);.    pOut->
a270: 66 6c 61 67 73 20 3d 20 6e 75 6c 6c 46 6c 61 67  flags = nullFlag
a280: 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 6e 20 3d 20  ;.    pOut->n = 
a290: 30 3b 0a 20 20 20 20 63 6e 74 2d 2d 3b 0a 20 20  0;.    cnt--;.  
a2a0: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
a2b0: 20 4f 70 63 6f 64 65 3a 20 53 6f 66 74 4e 75 6c   Opcode: SoftNul
a2c0: 6c 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 20  l P1 * * * *.** 
a2d0: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d  Synopsis: r[P1]=
a2e0: 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 53 65 74 20 72  NULL.**.** Set r
a2f0: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 68 61  egister P1 to ha
a300: 76 65 20 74 68 65 20 76 61 6c 75 65 20 4e 55 4c  ve the value NUL
a310: 4c 20 61 73 20 73 65 65 6e 20 62 79 20 74 68 65  L as seen by the
a320: 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 0a 2a   OP_MakeRecord.*
a330: 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c 20 62  * instruction, b
a340: 75 74 20 64 6f 20 6e 6f 74 20 66 72 65 65 20 61  ut do not free a
a350: 6e 79 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f  ny string or blo
a360: 62 20 6d 65 6d 6f 72 79 20 61 73 73 6f 63 69 61  b memory associa
a370: 74 65 64 20 77 69 74 68 0a 2a 2a 20 74 68 65 20  ted with.** the 
a380: 72 65 67 69 73 74 65 72 2c 20 73 6f 20 74 68 61  register, so tha
a390: 74 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 77  t if the value w
a3a0: 61 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62  as a string or b
a3b0: 6c 6f 62 20 74 68 61 74 20 77 61 73 0a 2a 2a 20  lob that was.** 
a3c0: 70 72 65 76 69 6f 75 73 6c 79 20 63 6f 70 69 65  previously copie
a3d0: 64 20 75 73 69 6e 67 20 4f 50 5f 53 43 6f 70 79  d using OP_SCopy
a3e0: 2c 20 74 68 65 20 63 6f 70 69 65 73 20 77 69 6c  , the copies wil
a3f0: 6c 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 62 65  l continue to be
a400: 20 76 61 6c 69 64 2e 0a 2a 2f 0a 63 61 73 65 20   valid..*/.case 
a410: 4f 50 5f 53 6f 66 74 4e 75 6c 6c 3a 20 7b 0a 20  OP_SoftNull: {. 
a420: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
a430: 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28  >0 && pOp->p1<=(
a440: 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
a450: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75  Cursor) );.  pOu
a460: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
a470: 31 5d 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  1];.  pOut->flag
a480: 73 20 3d 20 28 70 4f 75 74 2d 3e 66 6c 61 67 73  s = (pOut->flags
a490: 26 7e 28 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64  &~(MEM_Undefined
a4a0: 7c 4d 45 4d 5f 41 66 66 4d 61 73 6b 29 29 7c 4d  |MEM_AffMask))|M
a4b0: 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 62 72 65 61 6b  EM_Null;.  break
a4c0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
a4d0: 42 6c 6f 62 20 50 31 20 50 32 20 2a 20 50 34 20  Blob P1 P2 * P4 
a4e0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
a4f0: 5b 50 32 5d 3d 50 34 20 28 6c 65 6e 3d 50 31 29  [P2]=P4 (len=P1)
a500: 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73  .**.** P4 points
a510: 20 74 6f 20 61 20 62 6c 6f 62 20 6f 66 20 64 61   to a blob of da
a520: 74 61 20 50 31 20 62 79 74 65 73 20 6c 6f 6e 67  ta P1 bytes long
a530: 2e 20 20 53 74 6f 72 65 20 74 68 69 73 0a 2a 2a  .  Store this.**
a540: 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65   blob in registe
a550: 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
a560: 5f 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20 20  _Blob: {        
a570: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
a580: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
a590: 2d 3e 70 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d  ->p1 <= SQLITE_M
a5a0: 41 58 5f 4c 45 4e 47 54 48 20 29 3b 0a 20 20 70  AX_LENGTH );.  p
a5b0: 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
a5c0: 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
a5d0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
a5e0: 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e  tStr(pOut, pOp->
a5f0: 70 34 2e 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20 30  p4.z, pOp->p1, 0
a600: 2c 20 30 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e  , 0);.  pOut->en
a610: 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20  c = encoding;.  
a620: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
a630: 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  IZE(pOut);.  bre
a640: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
a650: 3a 20 56 61 72 69 61 62 6c 65 20 50 31 20 50 32  : Variable P1 P2
a660: 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
a670: 73 69 73 3a 20 72 5b 50 32 5d 3d 70 61 72 61 6d  sis: r[P2]=param
a680: 65 74 65 72 28 50 31 2c 50 34 29 0a 2a 2a 0a 2a  eter(P1,P4).**.*
a690: 2a 20 54 72 61 6e 73 66 65 72 20 74 68 65 20 76  * Transfer the v
a6a0: 61 6c 75 65 73 20 6f 66 20 62 6f 75 6e 64 20 70  alues of bound p
a6b0: 61 72 61 6d 65 74 65 72 20 50 31 20 69 6e 74 6f  arameter P1 into
a6c0: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a   register P2.**.
a6d0: 2a 2a 20 49 66 20 74 68 65 20 70 61 72 61 6d 65  ** If the parame
a6e0: 74 65 72 20 69 73 20 6e 61 6d 65 64 2c 20 74 68  ter is named, th
a6f0: 65 6e 20 69 74 73 20 6e 61 6d 65 20 61 70 70 65  en its name appe
a700: 61 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 20 54 68  ars in P4..** Th
a710: 65 20 50 34 20 76 61 6c 75 65 20 69 73 20 75 73  e P4 value is us
a720: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 62 69  ed by sqlite3_bi
a730: 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d  nd_parameter_nam
a740: 65 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  e()..*/.case OP_
a750: 56 61 72 69 61 62 6c 65 3a 20 7b 20 20 20 20 20  Variable: {     
a760: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
a770: 2f 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b 20 20  /.  Mem *pVar;  
a780: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 62 65       /* Value be
a790: 69 6e 67 20 74 72 61 6e 73 66 65 72 72 65 64 20  ing transferred 
a7a0: 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  */..  assert( pO
a7b0: 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p1>0 && pOp->
a7c0: 70 31 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20  p1<=p->nVar );. 
a7d0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
a7e0: 2e 7a 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34  .z==0 || pOp->p4
a7f0: 2e 7a 3d 3d 73 71 6c 69 74 65 33 56 4c 69 73 74  .z==sqlite3VList
a800: 4e 75 6d 54 6f 4e 61 6d 65 28 70 2d 3e 70 56 4c  NumToName(p->pVL
a810: 69 73 74 2c 70 4f 70 2d 3e 70 31 29 20 29 3b 0a  ist,pOp->p1) );.
a820: 20 20 70 56 61 72 20 3d 20 26 70 2d 3e 61 56 61    pVar = &p->aVa
a830: 72 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a  r[pOp->p1 - 1];.
a840: 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
a850: 65 4d 65 6d 54 6f 6f 42 69 67 28 70 56 61 72 29  eMemTooBig(pVar)
a860: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
a870: 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  _big;.  }.  pOut
a880: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
a890: 5d 3b 0a 20 20 69 66 28 20 56 64 62 65 4d 65 6d  ];.  if( VdbeMem
a8a0: 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 20 29 20  Dynamic(pOut) ) 
a8b0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
a8c0: 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 6d  tNull(pOut);.  m
a8d0: 65 6d 63 70 79 28 70 4f 75 74 2c 20 70 56 61 72  emcpy(pOut, pVar
a8e0: 2c 20 4d 45 4d 43 45 4c 4c 53 49 5a 45 29 3b 0a  , MEMCELLSIZE);.
a8f0: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26 3d    pOut->flags &=
a900: 20 7e 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45   ~(MEM_Dyn|MEM_E
a910: 70 68 65 6d 29 3b 0a 20 20 70 4f 75 74 2d 3e 66  phem);.  pOut->f
a920: 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61 74  lags |= MEM_Stat
a930: 69 63 7c 4d 45 4d 5f 46 72 6f 6d 42 69 6e 64 3b  ic|MEM_FromBind;
a940: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
a950: 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
a960: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
a970: 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20 50 32 20  ode: Move P1 P2 
a980: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
a990: 69 73 3a 20 72 5b 50 32 40 50 33 5d 3d 72 5b 50  is: r[P2@P3]=r[P
a9a0: 31 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65  1@P3].**.** Move
a9b0: 20 74 68 65 20 50 33 20 76 61 6c 75 65 73 20 69   the P3 values i
a9c0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 2e 50  n register P1..P
a9d0: 31 2b 50 33 2d 31 20 6f 76 65 72 20 69 6e 74 6f  1+P3-1 over into
a9e0: 0a 2a 2a 20 72 65 67 69 73 74 65 72 73 20 50 32  .** registers P2
a9f0: 2e 2e 50 32 2b 50 33 2d 31 2e 20 20 52 65 67 69  ..P2+P3-1.  Regi
aa00: 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33 2d  sters P1..P1+P3-
aa10: 31 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20 68 6f  1 are.** left ho
aa20: 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20 20 49  lding a NULL.  I
aa30: 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f  t is an error fo
aa40: 72 20 72 65 67 69 73 74 65 72 20 72 61 6e 67 65  r register range
aa50: 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33 2d 31  s.** P1..P1+P3-1
aa60: 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33 2d 31   and P2..P2+P3-1
aa70: 20 74 6f 20 6f 76 65 72 6c 61 70 2e 20 20 49 74   to overlap.  It
aa80: 20 69 73 20 61 6e 20 65 72 72 6f 72 0a 2a 2a 20   is an error.** 
aa90: 66 6f 72 20 50 33 20 74 6f 20 62 65 20 6c 65 73  for P3 to be les
aaa0: 73 20 74 68 61 6e 20 31 2e 0a 2a 2f 0a 63 61 73  s than 1..*/.cas
aab0: 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20 20 69  e OP_Move: {.  i
aac0: 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20  nt n;           
aad0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67  /* Number of reg
aae0: 69 73 74 65 72 73 20 6c 65 66 74 20 74 6f 20 63  isters left to c
aaf0: 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20 70 31 3b  opy */.  int p1;
ab00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
ab10: 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20 66 72  ister to copy fr
ab20: 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20  om */.  int p2; 
ab30: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
ab40: 73 74 65 72 20 74 6f 20 63 6f 70 79 20 74 6f 20  ster to copy to 
ab50: 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70  */..  n = pOp->p
ab60: 33 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70  3;.  p1 = pOp->p
ab70: 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70  1;.  p2 = pOp->p
ab80: 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30  2;.  assert( n>0
ab90: 20 26 26 20 70 31 3e 30 20 26 26 20 70 32 3e 30   && p1>0 && p2>0
aba0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31   );.  assert( p1
abb0: 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c 3d  +n<=p2 || p2+n<=
abc0: 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31 20 3d 20  p1 );..  pIn1 = 
abd0: 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20 70 4f 75  &aMem[p1];.  pOu
abe0: 74 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20  t = &aMem[p2];. 
abf0: 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72 74 28   do{.    assert(
ac00: 20 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b 28 70 2d   pOut<=&aMem[(p-
ac10: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
ac20: 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73  rsor)] );.    as
ac30: 73 65 72 74 28 20 70 49 6e 31 3c 3d 26 61 4d 65  sert( pIn1<=&aMe
ac40: 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  m[(p->nMem+1 - p
ac50: 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20  ->nCursor)] );. 
ac60: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
ac70: 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20  Valid(pIn1) );. 
ac80: 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
ac90: 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20  nge(p, pOut);.  
aca0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
acb0: 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49 6e 31 29  Move(pOut, pIn1)
acc0: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
acd0: 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 70 4f  DEBUG.    if( pO
ace0: 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3e 3d  ut->pScopyFrom>=
acf0: 26 61 4d 65 6d 5b 70 31 5d 20 26 26 20 70 4f 75  &aMem[p1] && pOu
ad00: 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3c 70 4f  t->pScopyFrom<pO
ad10: 75 74 20 29 7b 0a 20 20 20 20 20 20 70 4f 75 74  ut ){.      pOut
ad20: 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 2b 3d 20  ->pScopyFrom += 
ad30: 70 4f 70 2d 3e 70 32 20 2d 20 70 31 3b 0a 20 20  pOp->p2 - p1;.  
ad40: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 44    }.#endif.    D
ad50: 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f  eephemeralize(pO
ad60: 75 74 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  ut);.    REGISTE
ad70: 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c 20 70 4f  R_TRACE(p2++, pO
ad80: 75 74 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b  ut);.    pIn1++;
ad90: 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d  .    pOut++;.  }
ada0: 77 68 69 6c 65 28 20 2d 2d 6e 20 29 3b 0a 20 20  while( --n );.  
adb0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
adc0: 6f 64 65 3a 20 43 6f 70 79 20 50 31 20 50 32 20  ode: Copy P1 P2 
add0: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
ade0: 69 73 3a 20 72 5b 50 32 40 50 33 2b 31 5d 3d 72  is: r[P2@P3+1]=r
adf0: 5b 50 31 40 50 33 2b 31 5d 0a 2a 2a 0a 2a 2a 20  [P1@P3+1].**.** 
ae00: 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66 20 72  Make a copy of r
ae10: 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b  egisters P1..P1+
ae20: 50 33 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  P3 into register
ae30: 73 20 50 32 2e 2e 50 32 2b 50 33 2e 0a 2a 2a 0a  s P2..P2+P3..**.
ae40: 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
ae50: 69 6f 6e 20 6d 61 6b 65 73 20 61 20 64 65 65 70  ion makes a deep
ae60: 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c   copy of the val
ae70: 75 65 2e 20 20 41 20 64 75 70 6c 69 63 61 74 65  ue.  A duplicate
ae80: 0a 2a 2a 20 69 73 20 6d 61 64 65 20 6f 66 20 61  .** is made of a
ae90: 6e 79 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f  ny string or blo
aea0: 62 20 63 6f 6e 73 74 61 6e 74 2e 20 20 53 65 65  b constant.  See
aeb0: 20 61 6c 73 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a   also OP_SCopy..
aec0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 70 79 3a  */.case OP_Copy:
aed0: 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e   {.  int n;..  n
aee0: 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 49   = pOp->p3;.  pI
aef0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
af00: 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p1];.  pOut = &a
af10: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
af20: 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49  assert( pOut!=pI
af30: 6e 31 20 29 3b 0a 20 20 77 68 69 6c 65 28 20 31  n1 );.  while( 1
af40: 20 29 7b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74   ){.    memAbout
af50: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
af60: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
af70: 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79  beMemShallowCopy
af80: 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d  (pOut, pIn1, MEM
af90: 5f 45 70 68 65 6d 29 3b 0a 20 20 20 20 44 65 65  _Ephem);.    Dee
afa0: 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74  phemeralize(pOut
afb0: 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
afc0: 5f 44 45 42 55 47 0a 20 20 20 20 70 4f 75 74 2d  _DEBUG.    pOut-
afd0: 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20 30 3b  >pScopyFrom = 0;
afe0: 0a 23 65 6e 64 69 66 0a 20 20 20 20 52 45 47 49  .#endif.    REGI
aff0: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
b000: 70 32 2b 70 4f 70 2d 3e 70 33 2d 6e 2c 20 70 4f  p2+pOp->p3-n, pO
b010: 75 74 29 3b 0a 20 20 20 20 69 66 28 20 28 6e 2d  ut);.    if( (n-
b020: 2d 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20  -)==0 ) break;. 
b030: 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 70     pOut++;.    p
b040: 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65  In1++;.  }.  bre
b050: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
b060: 3a 20 53 43 6f 70 79 20 50 31 20 50 32 20 2a 20  : SCopy P1 P2 * 
b070: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
b080: 20 72 5b 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a   r[P2]=r[P1].**.
b090: 2a 2a 20 4d 61 6b 65 20 61 20 73 68 61 6c 6c 6f  ** Make a shallo
b0a0: 77 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74  w copy of regist
b0b0: 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73  er P1 into regis
b0c0: 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68  ter P2..**.** Th
b0d0: 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d  is instruction m
b0e0: 61 6b 65 73 20 61 20 73 68 61 6c 6c 6f 77 20 63  akes a shallow c
b0f0: 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65  opy of the value
b100: 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a  .  If the value.
b110: 2a 2a 20 69 73 20 61 20 73 74 72 69 6e 67 20 6f  ** is a string o
b120: 72 20 62 6c 6f 62 2c 20 74 68 65 6e 20 74 68 65  r blob, then the
b130: 20 63 6f 70 79 20 69 73 20 6f 6e 6c 79 20 61 20   copy is only a 
b140: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 0a 2a  pointer to the.*
b150: 2a 20 6f 72 69 67 69 6e 61 6c 20 61 6e 64 20 68  * original and h
b160: 65 6e 63 65 20 69 66 20 74 68 65 20 6f 72 69 67  ence if the orig
b170: 69 6e 61 6c 20 63 68 61 6e 67 65 73 20 73 6f 20  inal changes so 
b180: 77 69 6c 6c 20 74 68 65 20 63 6f 70 79 2e 0a 2a  will the copy..*
b190: 2a 20 57 6f 72 73 65 2c 20 69 66 20 74 68 65 20  * Worse, if the 
b1a0: 6f 72 69 67 69 6e 61 6c 20 69 73 20 64 65 61 6c  original is deal
b1b0: 6c 6f 63 61 74 65 64 2c 20 74 68 65 20 63 6f 70  located, the cop
b1c0: 79 20 62 65 63 6f 6d 65 73 20 69 6e 76 61 6c 69  y becomes invali
b1d0: 64 2e 0a 2a 2a 20 54 68 75 73 20 74 68 65 20 70  d..** Thus the p
b1e0: 72 6f 67 72 61 6d 20 6d 75 73 74 20 67 75 61 72  rogram must guar
b1f0: 61 6e 74 65 65 20 74 68 61 74 20 74 68 65 20 6f  antee that the o
b200: 72 69 67 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f 74  riginal will not
b210: 20 63 68 61 6e 67 65 0a 2a 2a 20 64 75 72 69 6e   change.** durin
b220: 67 20 74 68 65 20 6c 69 66 65 74 69 6d 65 20 6f  g the lifetime o
b230: 66 20 74 68 65 20 63 6f 70 79 2e 20 20 55 73 65  f the copy.  Use
b240: 20 4f 50 5f 43 6f 70 79 20 74 6f 20 6d 61 6b 65   OP_Copy to make
b250: 20 61 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20 63   a complete.** c
b260: 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  opy..*/.case OP_
b270: 53 43 6f 70 79 3a 20 7b 20 20 20 20 20 20 20 20  SCopy: {        
b280: 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
b290: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
b2a0: 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p1];.  pOut =
b2b0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
b2c0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 21  .  assert( pOut!
b2d0: 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69 74  =pIn1 );.  sqlit
b2e0: 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
b2f0: 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c  Copy(pOut, pIn1,
b300: 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 23 69 66   MEM_Ephem);.#if
b310: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
b320: 0a 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46  .  pOut->pScopyF
b330: 72 6f 6d 20 3d 20 70 49 6e 31 3b 0a 20 20 70 4f  rom = pIn1;.  pO
b340: 75 74 2d 3e 6d 53 63 6f 70 79 46 6c 61 67 73 20  ut->mScopyFlags 
b350: 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a 23  = pIn1->flags;.#
b360: 65 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b 0a 7d  endif.  break;.}
b370: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74  ../* Opcode: Int
b380: 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a  Copy P1 P2 * * *
b390: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
b3a0: 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  P2]=r[P1].**.** 
b3b0: 54 72 61 6e 73 66 65 72 20 74 68 65 20 69 6e 74  Transfer the int
b3c0: 65 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20  eger value held 
b3d0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
b3e0: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
b3f0: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61  .**.** This is a
b400: 6e 20 6f 70 74 69 6d 69 7a 65 64 20 76 65 72 73  n optimized vers
b410: 69 6f 6e 20 6f 66 20 53 43 6f 70 79 20 74 68 61  ion of SCopy tha
b420: 74 20 77 6f 72 6b 73 20 6f 6e 6c 79 20 66 6f 72  t works only for
b430: 20 69 6e 74 65 67 65 72 0a 2a 2a 20 76 61 6c 75   integer.** valu
b440: 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  es..*/.case OP_I
b450: 6e 74 43 6f 70 79 3a 20 7b 20 20 20 20 20 20 20  ntCopy: {       
b460: 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
b470: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
b480: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
b490: 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  t( (pIn1->flags 
b4a0: 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
b4b0: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
b4c0: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69  pOp->p2];.  sqli
b4d0: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74  te3VdbeMemSetInt
b4e0: 36 34 28 70 4f 75 74 2c 20 70 49 6e 31 2d 3e 75  64(pOut, pIn1->u
b4f0: 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .i);.  break;.}.
b500: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 75  ./* Opcode: Resu
b510: 6c 74 52 6f 77 20 50 31 20 50 32 20 2a 20 2a 20  ltRow P1 P2 * * 
b520: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6f  *.** Synopsis: o
b530: 75 74 70 75 74 3d 72 5b 50 31 40 50 32 5d 0a 2a  utput=r[P1@P2].*
b540: 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65  *.** The registe
b550: 72 73 20 50 31 20 74 68 72 6f 75 67 68 20 50 31  rs P1 through P1
b560: 2b 50 32 2d 31 20 63 6f 6e 74 61 69 6e 20 61 20  +P2-1 contain a 
b570: 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 0a 2a 2a  single row of.**
b580: 20 72 65 73 75 6c 74 73 2e 20 54 68 69 73 20 6f   results. This o
b590: 70 63 6f 64 65 20 63 61 75 73 65 73 20 74 68 65  pcode causes the
b5a0: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
b5b0: 63 61 6c 6c 20 74 6f 20 74 65 72 6d 69 6e 61 74  call to terminat
b5c0: 65 0a 2a 2a 20 77 69 74 68 20 61 6e 20 53 51 4c  e.** with an SQL
b5d0: 49 54 45 5f 52 4f 57 20 72 65 74 75 72 6e 20 63  ITE_ROW return c
b5e0: 6f 64 65 20 61 6e 64 20 69 74 20 73 65 74 73 20  ode and it sets 
b5f0: 75 70 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73  up the sqlite3_s
b600: 74 6d 74 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  tmt.** structure
b610: 20 74 6f 20 70 72 6f 76 69 64 65 20 61 63 63 65   to provide acce
b620: 73 73 20 74 6f 20 74 68 65 20 72 28 50 31 29 2e  ss to the r(P1).
b630: 2e 72 28 50 31 2b 50 32 2d 31 29 20 76 61 6c 75  .r(P1+P2-1) valu
b640: 65 73 20 61 73 0a 2a 2a 20 74 68 65 20 72 65 73  es as.** the res
b650: 75 6c 74 20 72 6f 77 2e 0a 2a 2f 0a 63 61 73 65  ult row..*/.case
b660: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 3a 20 7b   OP_ResultRow: {
b670: 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20  .  Mem *pMem;.  
b680: 69 6e 74 20 69 3b 0a 20 20 61 73 73 65 72 74 28  int i;.  assert(
b690: 20 70 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3d 3d   p->nResColumn==
b6a0: 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 61 73 73  pOp->p2 );.  ass
b6b0: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29  ert( pOp->p1>0 )
b6c0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
b6d0: 3e 70 31 2b 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d  >p1+pOp->p2<=(p-
b6e0: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
b6f0: 72 73 6f 72 29 2b 31 20 29 3b 0a 0a 20 20 2f 2a  rsor)+1 );..  /*
b700: 20 49 66 20 74 68 69 73 20 73 74 61 74 65 6d 65   If this stateme
b710: 6e 74 20 68 61 73 20 76 69 6f 6c 61 74 65 64 20  nt has violated 
b720: 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67  immediate foreig
b730: 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
b740: 73 2c 20 64 6f 0a 20 20 2a 2a 20 6e 6f 74 20 72  s, do.  ** not r
b750: 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72  eturn the number
b760: 20 6f 66 20 72 6f 77 73 20 6d 6f 64 69 66 69 65   of rows modifie
b770: 64 2e 20 41 6e 64 20 64 6f 20 6e 6f 74 20 52 45  d. And do not RE
b780: 4c 45 41 53 45 20 74 68 65 20 73 74 61 74 65 6d  LEASE the statem
b790: 65 6e 74 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63  ent.  ** transac
b7a0: 74 69 6f 6e 2e 20 49 74 20 6e 65 65 64 73 20 74  tion. It needs t
b7b0: 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  o be rolled back
b7c0: 2e 20 20 2a 2f 0a 20 20 69 66 28 20 53 51 4c 49  .  */.  if( SQLI
b7d0: 54 45 5f 4f 4b 21 3d 28 72 63 20 3d 20 73 71 6c  TE_OK!=(rc = sql
b7e0: 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28  ite3VdbeCheckFk(
b7f0: 70 2c 20 30 29 29 20 29 7b 0a 20 20 20 20 61 73  p, 0)) ){.    as
b800: 73 65 72 74 28 20 64 62 2d 3e 66 6c 61 67 73 26  sert( db->flags&
b810: 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73  SQLITE_CountRows
b820: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
b830: 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e  p->usesStmtJourn
b840: 61 6c 20 29 3b 0a 20 20 20 20 67 6f 74 6f 20 61  al );.    goto a
b850: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
b860: 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20  r;.  }..  /* If 
b870: 74 68 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74  the SQLITE_Count
b880: 52 6f 77 73 20 66 6c 61 67 20 69 73 20 73 65 74  Rows flag is set
b890: 20 69 6e 20 73 71 6c 69 74 65 33 2e 66 6c 61 67   in sqlite3.flag
b8a0: 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 0a 20 20  s mask, then .  
b8b0: 2a 2a 20 44 4d 4c 20 73 74 61 74 65 6d 65 6e 74  ** DML statement
b8c0: 73 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70  s invoke this op
b8d0: 63 6f 64 65 20 74 6f 20 72 65 74 75 72 6e 20 74  code to return t
b8e0: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
b8f0: 73 20 0a 20 20 2a 2a 20 6d 6f 64 69 66 69 65 64  s .  ** modified
b900: 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68   to the user. Th
b910: 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77  is is the only w
b920: 61 79 20 74 68 61 74 20 61 20 56 4d 20 74 68 61  ay that a VM tha
b930: 74 0a 20 20 2a 2a 20 6f 70 65 6e 73 20 61 20 73  t.  ** opens a s
b940: 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
b950: 74 69 6f 6e 20 6d 61 79 20 69 6e 76 6f 6b 65 20  tion may invoke 
b960: 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 20 20 2a  this opcode..  *
b970: 2a 0a 20 20 2a 2a 20 49 6e 20 63 61 73 65 20 74  *.  ** In case t
b980: 68 69 73 20 69 73 20 73 75 63 68 20 61 20 73 74  his is such a st
b990: 61 74 65 6d 65 6e 74 2c 20 63 6c 6f 73 65 20 61  atement, close a
b9a0: 6e 79 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  ny statement tra
b9b0: 6e 73 61 63 74 69 6f 6e 0a 20 20 2a 2a 20 6f 70  nsaction.  ** op
b9c0: 65 6e 65 64 20 62 79 20 74 68 69 73 20 56 4d 20  ened by this VM 
b9d0: 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67  before returning
b9e0: 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20   control to the 
b9f0: 75 73 65 72 2e 20 54 68 69 73 20 69 73 20 74 6f  user. This is to
ba00: 0a 20 20 2a 2a 20 65 6e 73 75 72 65 20 74 68 61  .  ** ensure tha
ba10: 74 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e  t statement-tran
ba20: 73 61 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 77  sactions are alw
ba30: 61 79 73 20 6e 65 73 74 65 64 2c 20 6e 6f 74 20  ays nested, not 
ba40: 6f 76 65 72 6c 61 70 70 69 6e 67 2e 0a 20 20 2a  overlapping..  *
ba50: 2a 20 49 66 20 74 68 65 20 6f 70 65 6e 20 73 74  * If the open st
ba60: 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74  atement-transact
ba70: 69 6f 6e 20 69 73 20 6e 6f 74 20 63 6c 6f 73 65  ion is not close
ba80: 64 20 68 65 72 65 2c 20 74 68 65 6e 20 74 68 65  d here, then the
ba90: 20 75 73 65 72 0a 20 20 2a 2a 20 6d 61 79 20 73   user.  ** may s
baa0: 74 65 70 20 61 6e 6f 74 68 65 72 20 56 4d 20 74  tep another VM t
bab0: 68 61 74 20 6f 70 65 6e 73 20 69 74 73 20 6f 77  hat opens its ow
bac0: 6e 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  n statement tran
bad0: 73 61 63 74 69 6f 6e 2e 20 54 68 69 73 0a 20 20  saction. This.  
bae0: 2a 2a 20 6d 61 79 20 6c 65 61 64 20 74 6f 20 6f  ** may lead to o
baf0: 76 65 72 6c 61 70 70 69 6e 67 20 73 74 61 74 65  verlapping state
bb00: 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
bb10: 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65  s..  **.  ** The
bb20: 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
bb30: 61 63 74 69 6f 6e 20 69 73 20 6e 65 76 65 72 20  action is never 
bb40: 61 20 74 6f 70 2d 6c 65 76 65 6c 20 74 72 61 6e  a top-level tran
bb50: 73 61 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 0a  saction.  Hence.
bb60: 20 20 2a 2a 20 74 68 65 20 52 45 4c 45 41 53 45    ** the RELEASE
bb70: 20 63 61 6c 6c 20 62 65 6c 6f 77 20 63 61 6e 20   call below can 
bb80: 6e 65 76 65 72 20 66 61 69 6c 2e 0a 20 20 2a 2f  never fail..  */
bb90: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 69 53  .  assert( p->iS
bba0: 74 61 74 65 6d 65 6e 74 3d 3d 30 20 7c 7c 20 64  tatement==0 || d
bbb0: 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
bbc0: 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 72  CountRows );.  r
bbd0: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
bbe0: 6c 6f 73 65 53 74 61 74 65 6d 65 6e 74 28 70 2c  loseStatement(p,
bbf0: 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41   SAVEPOINT_RELEA
bc00: 53 45 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72  SE);.  assert( r
bc10: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a  c==SQLITE_OK );.
bc20: 0a 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65  .  /* Invalidate
bc30: 20 61 6c 6c 20 65 70 68 65 6d 65 72 61 6c 20 63   all ephemeral c
bc40: 75 72 73 6f 72 20 72 6f 77 20 63 61 63 68 65 73  ursor row caches
bc50: 20 2a 2f 0a 20 20 70 2d 3e 63 61 63 68 65 43 74   */.  p->cacheCt
bc60: 72 20 3d 20 28 70 2d 3e 63 61 63 68 65 43 74 72  r = (p->cacheCtr
bc70: 20 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a 20 4d   + 2)|1;..  /* M
bc80: 61 6b 65 20 73 75 72 65 20 74 68 65 20 72 65 73  ake sure the res
bc90: 75 6c 74 73 20 6f 66 20 74 68 65 20 63 75 72 72  ults of the curr
bca0: 65 6e 74 20 72 6f 77 20 61 72 65 20 5c 30 30 30  ent row are \000
bcb0: 20 74 65 72 6d 69 6e 61 74 65 64 0a 20 20 2a 2a   terminated.  **
bcc0: 20 61 6e 64 20 68 61 76 65 20 61 6e 20 61 73 73   and have an ass
bcd0: 69 67 6e 65 64 20 74 79 70 65 2e 20 20 54 68 65  igned type.  The
bce0: 20 72 65 73 75 6c 74 73 20 61 72 65 20 64 65 2d   results are de-
bcf0: 65 70 68 65 6d 65 72 61 6c 69 7a 65 64 20 61 73  ephemeralized as
bd00: 0a 20 20 2a 2a 20 61 20 73 69 64 65 20 65 66 66  .  ** a side eff
bd10: 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 70 4d 65 6d  ect..  */.  pMem
bd20: 20 3d 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74   = p->pResultSet
bd30: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
bd40: 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  ];.  for(i=0; i<
bd50: 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b 0a 20  pOp->p2; i++){. 
bd60: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
bd70: 56 61 6c 69 64 28 26 70 4d 65 6d 5b 69 5d 29 20  Valid(&pMem[i]) 
bd80: 29 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72  );.    Deephemer
bd90: 61 6c 69 7a 65 28 26 70 4d 65 6d 5b 69 5d 29 3b  alize(&pMem[i]);
bda0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70 4d  .    assert( (pM
bdb0: 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45  em[i].flags & ME
bdc0: 4d 5f 45 70 68 65 6d 29 3d 3d 30 0a 20 20 20 20  M_Ephem)==0.    
bdd0: 20 20 20 20 20 20 20 20 7c 7c 20 28 70 4d 65 6d          || (pMem
bde0: 5b 69 5d 2e 66 6c 61 67 73 20 26 20 28 4d 45 4d  [i].flags & (MEM
bdf0: 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d  _Str|MEM_Blob))=
be00: 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  =0 );.    sqlite
be10: 33 56 64 62 65 4d 65 6d 4e 75 6c 54 65 72 6d 69  3VdbeMemNulTermi
be20: 6e 61 74 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a  nate(&pMem[i]);.
be30: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
be40: 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c 20 26 70  CE(pOp->p1+i, &p
be50: 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 69  Mem[i]);.  }.  i
be60: 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  f( db->mallocFai
be70: 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  led ) goto no_me
be80: 6d 3b 0a 0a 20 20 69 66 28 20 64 62 2d 3e 6d 54  m;..  if( db->mT
be90: 72 61 63 65 20 26 20 53 51 4c 49 54 45 5f 54 52  race & SQLITE_TR
bea0: 41 43 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 64  ACE_ROW ){.    d
beb0: 62 2d 3e 78 54 72 61 63 65 28 53 51 4c 49 54 45  b->xTrace(SQLITE
bec0: 5f 54 52 41 43 45 5f 52 4f 57 2c 20 64 62 2d 3e  _TRACE_ROW, db->
bed0: 70 54 72 61 63 65 41 72 67 2c 20 70 2c 20 30 29  pTraceArg, p, 0)
bee0: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 74 75  ;.  }..  /* Retu
bef0: 72 6e 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20  rn SQLITE_ROW.  
bf00: 2a 2f 0a 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e  */.  p->pc = (in
bf10: 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 20 2b 20  t)(pOp - aOp) + 
bf20: 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45  1;.  rc = SQLITE
bf30: 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64 62  _ROW;.  goto vdb
bf40: 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20  e_return;.}../* 
bf50: 4f 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20 50  Opcode: Concat P
bf60: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
bf70: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72  ynopsis: r[P3]=r
bf80: 5b 50 32 5d 2b 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P2]+r[P1].**.**
bf90: 20 41 64 64 20 74 68 65 20 74 65 78 74 20 69 6e   Add the text in
bfa0: 20 72 65 67 69 73 74 65 72 20 50 31 20 6f 6e 74   register P1 ont
bfb0: 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  o the end of the
bfc0: 20 74 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67 69   text in.** regi
bfd0: 73 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72  ster P2 and stor
bfe0: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
bff0: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
c000: 49 66 20 65 69 74 68 65 72 20 74 68 65 20 50 31  If either the P1
c010: 20 6f 72 20 50 32 20 74 65 78 74 20 61 72 65 20   or P2 text are 
c020: 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20  NULL then store 
c030: 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a  NULL in P3..**.*
c040: 2a 20 20 20 50 33 20 3d 20 50 32 20 7c 7c 20 50  *   P3 = P2 || P
c050: 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c  1.**.** It is il
c060: 6c 65 67 61 6c 20 66 6f 72 20 50 31 20 61 6e 64  legal for P1 and
c070: 20 50 33 20 74 6f 20 62 65 20 74 68 65 20 73 61   P3 to be the sa
c080: 6d 65 20 72 65 67 69 73 74 65 72 2e 20 53 6f 6d  me register. Som
c090: 65 74 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50 33  etimes,.** if P3
c0a0: 20 69 73 20 74 68 65 20 73 61 6d 65 20 72 65 67   is the same reg
c0b0: 69 73 74 65 72 20 61 73 20 50 32 2c 20 74 68 65  ister as P2, the
c0c0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
c0d0: 69 73 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61 76  is able.** to av
c0e0: 6f 69 64 20 61 20 6d 65 6d 63 70 79 28 29 2e 0a  oid a memcpy()..
c0f0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63 61  */.case OP_Conca
c100: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  t: {           /
c110: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f 4e  * same as TK_CON
c120: 43 41 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  CAT, in1, in2, o
c130: 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79  ut3 */.  i64 nBy
c140: 74 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  te;          /* 
c150: 54 6f 74 61 6c 20 73 69 7a 65 20 6f 66 20 74 68  Total size of th
c160: 65 20 6f 75 74 70 75 74 20 73 74 72 69 6e 67 20  e output string 
c170: 6f 72 20 62 6c 6f 62 20 2a 2f 0a 20 20 75 31 36  or blob */.  u16
c180: 20 66 6c 61 67 73 31 3b 20 20 20 20 20 20 20 20   flags1;        
c190: 20 2f 2a 20 49 6e 69 74 69 61 6c 20 66 6c 61 67   /* Initial flag
c1a0: 73 20 66 6f 72 20 50 31 20 2a 2f 0a 20 20 75 31  s for P1 */.  u1
c1b0: 36 20 66 6c 61 67 73 32 3b 20 20 20 20 20 20 20  6 flags2;       
c1c0: 20 20 2f 2a 20 49 6e 69 74 69 61 6c 20 66 6c 61    /* Initial fla
c1d0: 67 73 20 66 6f 72 20 50 32 20 2a 2f 0a 0a 20 20  gs for P2 */..  
c1e0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
c1f0: 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20  ->p1];.  pIn2 = 
c200: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
c210: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
c220: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 74 65 73 74 63  Op->p3];.  testc
c230: 61 73 65 28 20 70 49 6e 31 3d 3d 70 49 6e 32 20  ase( pIn1==pIn2 
c240: 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
c250: 4f 75 74 3d 3d 70 49 6e 32 20 29 3b 0a 20 20 61  Out==pIn2 );.  a
c260: 73 73 65 72 74 28 20 70 49 6e 31 21 3d 70 4f 75  ssert( pIn1!=pOu
c270: 74 20 29 3b 0a 20 20 66 6c 61 67 73 31 20 3d 20  t );.  flags1 = 
c280: 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a 20 20 74  pIn1->flags;.  t
c290: 65 73 74 63 61 73 65 28 20 66 6c 61 67 73 31 20  estcase( flags1 
c2a0: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20  & MEM_Null );.  
c2b0: 74 65 73 74 63 61 73 65 28 20 70 49 6e 32 2d 3e  testcase( pIn2->
c2c0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
c2d0: 20 29 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73   );.  if( (flags
c2e0: 31 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29  1 | pIn2->flags)
c2f0: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
c300: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
c310: 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
c320: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
c330: 20 69 66 28 20 28 66 6c 61 67 73 31 20 26 20 28   if( (flags1 & (
c340: 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62  MEM_Str|MEM_Blob
c350: 29 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28  ))==0 ){.    if(
c360: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
c370: 74 72 69 6e 67 69 66 79 28 70 49 6e 31 2c 65 6e  tringify(pIn1,en
c380: 63 6f 64 69 6e 67 2c 30 29 20 29 20 67 6f 74 6f  coding,0) ) goto
c390: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 66 6c 61   no_mem;.    fla
c3a0: 67 73 31 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67  gs1 = pIn1->flag
c3b0: 73 20 26 20 7e 4d 45 4d 5f 53 74 72 3b 0a 20 20  s & ~MEM_Str;.  
c3c0: 7d 65 6c 73 65 20 69 66 28 20 28 66 6c 61 67 73  }else if( (flags
c3d0: 31 20 26 20 4d 45 4d 5f 5a 65 72 6f 29 21 3d 30  1 & MEM_Zero)!=0
c3e0: 20 29 7b 0a 20 20 20 20 69 66 28 20 73 71 6c 69   ){.    if( sqli
c3f0: 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64  te3VdbeMemExpand
c400: 42 6c 6f 62 28 70 49 6e 31 29 20 29 20 67 6f 74  Blob(pIn1) ) got
c410: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 66 6c  o no_mem;.    fl
c420: 61 67 73 31 20 3d 20 70 49 6e 31 2d 3e 66 6c 61  ags1 = pIn1->fla
c430: 67 73 20 26 20 7e 4d 45 4d 5f 53 74 72 3b 0a 20  gs & ~MEM_Str;. 
c440: 20 7d 0a 20 20 66 6c 61 67 73 32 20 3d 20 70 49   }.  flags2 = pI
c450: 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28  n2->flags;.  if(
c460: 20 28 66 6c 61 67 73 32 20 26 20 28 4d 45 4d 5f   (flags2 & (MEM_
c470: 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d  Str|MEM_Blob))==
c480: 30 20 29 7b 0a 20 20 20 20 69 66 28 20 73 71 6c  0 ){.    if( sql
c490: 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e  ite3VdbeMemStrin
c4a0: 67 69 66 79 28 70 49 6e 32 2c 65 6e 63 6f 64 69  gify(pIn2,encodi
c4b0: 6e 67 2c 30 29 20 29 20 67 6f 74 6f 20 6e 6f 5f  ng,0) ) goto no_
c4c0: 6d 65 6d 3b 0a 20 20 20 20 66 6c 61 67 73 32 20  mem;.    flags2 
c4d0: 3d 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20  = pIn2->flags & 
c4e0: 7e 4d 45 4d 5f 53 74 72 3b 0a 20 20 7d 65 6c 73  ~MEM_Str;.  }els
c4f0: 65 20 69 66 28 20 28 66 6c 61 67 73 32 20 26 20  e if( (flags2 & 
c500: 4d 45 4d 5f 5a 65 72 6f 29 21 3d 30 20 29 7b 0a  MEM_Zero)!=0 ){.
c510: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56      if( sqlite3V
c520: 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62  dbeMemExpandBlob
c530: 28 70 49 6e 32 29 20 29 20 67 6f 74 6f 20 6e 6f  (pIn2) ) goto no
c540: 5f 6d 65 6d 3b 0a 20 20 20 20 66 6c 61 67 73 32  _mem;.    flags2
c550: 20 3d 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26   = pIn2->flags &
c560: 20 7e 4d 45 4d 5f 53 74 72 3b 0a 20 20 7d 0a 20   ~MEM_Str;.  }. 
c570: 20 6e 42 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e   nByte = pIn1->n
c580: 20 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66   + pIn2->n;.  if
c590: 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d  ( nByte>db->aLim
c5a0: 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
c5b0: 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67  LENGTH] ){.    g
c5c0: 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
c5d0: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
c5e0: 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20  beMemGrow(pOut, 
c5f0: 28 69 6e 74 29 6e 42 79 74 65 2b 33 2c 20 70 4f  (int)nByte+3, pO
c600: 75 74 3d 3d 70 49 6e 32 29 20 29 7b 0a 20 20 20  ut==pIn2) ){.   
c610: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
c620: 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  }.  MemSetTypeFl
c630: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 53 74 72  ag(pOut, MEM_Str
c640: 29 3b 0a 20 20 69 66 28 20 70 4f 75 74 21 3d 70  );.  if( pOut!=p
c650: 49 6e 32 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70  In2 ){.    memcp
c660: 79 28 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d  y(pOut->z, pIn2-
c670: 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20  >z, pIn2->n);.  
c680: 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d    assert( (pIn2-
c690: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e  >flags & MEM_Dyn
c6a0: 29 20 3d 3d 20 28 66 6c 61 67 73 32 20 26 20 4d  ) == (flags2 & M
c6b0: 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20 70  EM_Dyn) );.    p
c6c0: 49 6e 32 2d 3e 66 6c 61 67 73 20 3d 20 66 6c 61  In2->flags = fla
c6d0: 67 73 32 3b 0a 20 20 7d 0a 20 20 6d 65 6d 63 70  gs2;.  }.  memcp
c6e0: 79 28 26 70 4f 75 74 2d 3e 7a 5b 70 49 6e 32 2d  y(&pOut->z[pIn2-
c6f0: 3e 6e 5d 2c 20 70 49 6e 31 2d 3e 7a 2c 20 70 49  >n], pIn1->z, pI
c700: 6e 31 2d 3e 6e 29 3b 0a 20 20 61 73 73 65 72 74  n1->n);.  assert
c710: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
c720: 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66 6c   MEM_Dyn) == (fl
c730: 61 67 73 31 20 26 20 4d 45 4d 5f 44 79 6e 29 20  ags1 & MEM_Dyn) 
c740: 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  );.  pIn1->flags
c750: 20 3d 20 66 6c 61 67 73 31 3b 0a 20 20 70 4f 75   = flags1;.  pOu
c760: 74 2d 3e 7a 5b 6e 42 79 74 65 5d 3d 30 3b 0a 20  t->z[nByte]=0;. 
c770: 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 2b 31   pOut->z[nByte+1
c780: 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a  ] = 0;.  pOut->z
c790: 5b 6e 42 79 74 65 2b 32 5d 20 3d 20 30 3b 0a 20  [nByte+2] = 0;. 
c7a0: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20   pOut->flags |= 
c7b0: 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74  MEM_Term;.  pOut
c7c0: 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65  ->n = (int)nByte
c7d0: 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  ;.  pOut->enc = 
c7e0: 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41  encoding;.  UPDA
c7f0: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
c800: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
c810: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64  }../* Opcode: Ad
c820: 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
c830: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
c840: 5d 3d 72 5b 50 31 5d 2b 72 5b 50 32 5d 0a 2a 2a  ]=r[P1]+r[P2].**
c850: 0a 2a 2a 20 41 64 64 20 74 68 65 20 76 61 6c 75  .** Add the valu
c860: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
c870: 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e   to the value in
c880: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20   register P2.** 
c890: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
c8a0: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
c8b0: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
c8c0: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
c8d0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
c8e0: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
c8f0: 65 3a 20 4d 75 6c 74 69 70 6c 79 20 50 31 20 50  e: Multiply P1 P
c900: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
c910: 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 31  psis: r[P3]=r[P1
c920: 5d 2a 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 0a 2a 2a  ]*r[P2].**.**.**
c930: 20 4d 75 6c 74 69 70 6c 79 20 74 68 65 20 76 61   Multiply the va
c940: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
c950: 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65 20  P1 by the value 
c960: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
c970: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
c980: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
c990: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
c9a0: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
c9b0: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
c9c0: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
c9d0: 6f 64 65 3a 20 53 75 62 74 72 61 63 74 20 50 31  ode: Subtract P1
c9e0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
c9f0: 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b  nopsis: r[P3]=r[
ca00: 50 32 5d 2d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  P2]-r[P1].**.** 
ca10: 53 75 62 74 72 61 63 74 20 74 68 65 20 76 61 6c  Subtract the val
ca20: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
ca30: 31 20 66 72 6f 6d 20 74 68 65 20 76 61 6c 75 65  1 from the value
ca40: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a   in register P2.
ca50: 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  ** and store the
ca60: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
ca70: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
ca80: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
ca90: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
caa0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
cab0: 63 6f 64 65 3a 20 44 69 76 69 64 65 20 50 31 20  code: Divide P1 
cac0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
cad0: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50  opsis: r[P3]=r[P
cae0: 32 5d 2f 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 44  2]/r[P1].**.** D
caf0: 69 76 69 64 65 20 74 68 65 20 76 61 6c 75 65 20  ivide the value 
cb00: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 62  in register P1 b
cb10: 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  y the value in r
cb20: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e  egister P2.** an
cb30: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
cb40: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
cb50: 33 20 28 50 33 3d 50 32 2f 50 31 29 2e 20 49 66  3 (P3=P2/P1). If
cb60: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 0a 2a   the value in .*
cb70: 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  * register P1 is
cb80: 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20   zero, then the 
cb90: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20  result is NULL. 
cba0: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
cbb0: 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65  is .** NULL, the
cbc0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
cbd0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .*/./* Opcode: R
cbe0: 65 6d 61 69 6e 64 65 72 20 50 31 20 50 32 20 50  emainder P1 P2 P
cbf0: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
cc00: 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 25 72  s: r[P3]=r[P2]%r
cc10: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75  [P1].**.** Compu
cc20: 74 65 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72  te the remainder
cc30: 20 61 66 74 65 72 20 69 6e 74 65 67 65 72 20 72   after integer r
cc40: 65 67 69 73 74 65 72 20 50 32 20 69 73 20 64 69  egister P2 is di
cc50: 76 69 64 65 64 20 62 79 20 0a 2a 2a 20 72 65 67  vided by .** reg
cc60: 69 73 74 65 72 20 50 31 20 61 6e 64 20 73 74 6f  ister P1 and sto
cc70: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
cc80: 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 0a 2a   register P3. .*
cc90: 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  * If the value i
cca0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
ccb0: 20 7a 65 72 6f 20 74 68 65 20 72 65 73 75 6c 74   zero the result
ccc0: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20   is NULL..** If 
ccd0: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
cce0: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
ccf0: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  lt is NULL..*/.c
cd00: 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20  ase OP_Add:     
cd10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
cd20: 20 73 61 6d 65 20 61 73 20 54 4b 5f 50 4c 55 53   same as TK_PLUS
cd30: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
cd40: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 75 62 74   */.case OP_Subt
cd50: 72 61 63 74 3a 20 20 20 20 20 20 20 20 20 20 20  ract:           
cd60: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
cd70: 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c 20 69 6e 32  _MINUS, in1, in2
cd80: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
cd90: 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 20  P_Multiply:     
cda0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
cdb0: 20 61 73 20 54 4b 5f 53 54 41 52 2c 20 69 6e 31   as TK_STAR, in1
cdc0: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
cdd0: 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 20  ase OP_Divide:  
cde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
cdf0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 4c 41 53   same as TK_SLAS
ce00: 48 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  H, in1, in2, out
ce10: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6d  3 */.case OP_Rem
ce20: 61 69 6e 64 65 72 3a 20 7b 20 20 20 20 20 20 20  ainder: {       
ce30: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
ce40: 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c  K_REM, in1, in2,
ce50: 20 6f 75 74 33 20 2a 2f 0a 20 20 75 31 36 20 66   out3 */.  u16 f
ce60: 6c 61 67 73 3b 20 20 20 20 20 20 2f 2a 20 43 6f  lags;      /* Co
ce70: 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a 20 66 6c 61  mbined MEM_* fla
ce80: 67 73 20 66 72 6f 6d 20 62 6f 74 68 20 69 6e 70  gs from both inp
ce90: 75 74 73 20 2a 2f 0a 20 20 75 31 36 20 74 79 70  uts */.  u16 typ
cea0: 65 31 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 65  e1;      /* Nume
ceb0: 72 69 63 20 74 79 70 65 20 6f 66 20 6c 65 66 74  ric type of left
cec0: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 75 31   operand */.  u1
ced0: 36 20 74 79 70 65 32 3b 20 20 20 20 20 20 2f 2a  6 type2;      /*
cee0: 20 4e 75 6d 65 72 69 63 20 74 79 70 65 20 6f 66   Numeric type of
cef0: 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a   right operand *
cf00: 2f 0a 20 20 69 36 34 20 69 41 3b 20 20 20 20 20  /.  i64 iA;     
cf10: 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76      /* Integer v
cf20: 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f 70 65  alue of left ope
cf30: 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20 69 42  rand */.  i64 iB
cf40: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74  ;         /* Int
cf50: 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20 72 69  eger value of ri
cf60: 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  ght operand */. 
cf70: 20 64 6f 75 62 6c 65 20 72 41 3b 20 20 20 20 20   double rA;     
cf80: 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65 20 6f   /* Real value o
cf90: 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a  f left operand *
cfa0: 2f 0a 20 20 64 6f 75 62 6c 65 20 72 42 3b 20 20  /.  double rB;  
cfb0: 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75      /* Real valu
cfc0: 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61  e of right opera
cfd0: 6e 64 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20  nd */..  pIn1 = 
cfe0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
cff0: 20 20 74 79 70 65 31 20 3d 20 6e 75 6d 65 72 69    type1 = numeri
d000: 63 54 79 70 65 28 70 49 6e 31 29 3b 0a 20 20 70  cType(pIn1);.  p
d010: 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
d020: 3e 70 32 5d 3b 0a 20 20 74 79 70 65 32 20 3d 20  >p2];.  type2 = 
d030: 6e 75 6d 65 72 69 63 54 79 70 65 28 70 49 6e 32  numericType(pIn2
d040: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  );.  pOut = &aMe
d050: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c  m[pOp->p3];.  fl
d060: 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67  ags = pIn1->flag
d070: 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 3b  s | pIn2->flags;
d080: 0a 20 20 69 66 28 20 28 74 79 70 65 31 20 26 20  .  if( (type1 & 
d090: 74 79 70 65 32 20 26 20 4d 45 4d 5f 49 6e 74 29  type2 & MEM_Int)
d0a0: 21 3d 30 20 29 7b 0a 20 20 20 20 69 41 20 3d 20  !=0 ){.    iA = 
d0b0: 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20 20 69  pIn1->u.i;.    i
d0c0: 42 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20  B = pIn2->u.i;. 
d0d0: 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e     switch( pOp->
d0e0: 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20  opcode ){.      
d0f0: 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20  case OP_Add:    
d100: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 41 64     if( sqlite3Ad
d110: 64 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29  dInt64(&iB,iA) )
d120: 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20   goto fp_math;  
d130: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
d140: 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20  e OP_Subtract:  
d150: 69 66 28 20 73 71 6c 69 74 65 33 53 75 62 49 6e  if( sqlite3SubIn
d160: 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f  t64(&iB,iA) ) go
d170: 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65  to fp_math;  bre
d180: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
d190: 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 69 66 28  P_Multiply:  if(
d1a0: 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34   sqlite3MulInt64
d1b0: 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20  (&iB,iA) ) goto 
d1c0: 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b  fp_math;  break;
d1d0: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44  .      case OP_D
d1e0: 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20  ivide: {.       
d1f0: 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74   if( iA==0 ) got
d200: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
d210: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
d220: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20       if( iA==-1 
d230: 26 26 20 69 42 3d 3d 53 4d 41 4c 4c 45 53 54 5f  && iB==SMALLEST_
d240: 49 4e 54 36 34 20 29 20 67 6f 74 6f 20 66 70 5f  INT64 ) goto fp_
d250: 6d 61 74 68 3b 0a 20 20 20 20 20 20 20 20 69 42  math;.        iB
d260: 20 2f 3d 20 69 41 3b 0a 20 20 20 20 20 20 20 20   /= iA;.        
d270: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
d280: 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a       default: {.
d290: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
d2a0: 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65  0 ) goto arithme
d2b0: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
d2c0: 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ll;.        if( 
d2d0: 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31 3b  iA==-1 ) iA = 1;
d2e0: 0a 20 20 20 20 20 20 20 20 69 42 20 25 3d 20 69  .        iB %= i
d2f0: 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  A;.        break
d300: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
d310: 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
d320: 69 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79  iB;.    MemSetTy
d330: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
d340: 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 20 69  _Int);.  }else i
d350: 66 28 20 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f  f( (flags & MEM_
d360: 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20  Null)!=0 ){.    
d370: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
d380: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
d390: 20 20 7d 65 6c 73 65 7b 0a 66 70 5f 6d 61 74 68    }else{.fp_math
d3a0: 3a 0a 20 20 20 20 72 41 20 3d 20 73 71 6c 69 74  :.    rA = sqlit
d3b0: 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28  e3VdbeRealValue(
d3c0: 70 49 6e 31 29 3b 0a 20 20 20 20 72 42 20 3d 20  pIn1);.    rB = 
d3d0: 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56  sqlite3VdbeRealV
d3e0: 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 20 20  alue(pIn2);.    
d3f0: 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63  switch( pOp->opc
d400: 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73  ode ){.      cas
d410: 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20  e OP_Add:       
d420: 20 20 72 42 20 2b 3d 20 72 41 3b 20 20 20 20 20    rB += rA;     
d430: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
d440: 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a  ase OP_Subtract:
d450: 20 20 20 20 72 42 20 2d 3d 20 72 41 3b 20 20 20      rB -= rA;   
d460: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
d470: 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c   case OP_Multipl
d480: 79 3a 20 20 20 20 72 42 20 2a 3d 20 72 41 3b 20  y:    rB *= rA; 
d490: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
d4a0: 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64     case OP_Divid
d4b0: 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  e: {.        /* 
d4c0: 28 64 6f 75 62 6c 65 29 30 20 49 6e 20 63 61 73  (double)0 In cas
d4d0: 65 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  e of SQLITE_OMIT
d4e0: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 2e  _FLOATING_POINT.
d4f0: 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66  .. */.        if
d500: 28 20 72 41 3d 3d 28 64 6f 75 62 6c 65 29 30 20  ( rA==(double)0 
d510: 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69  ) goto arithmeti
d520: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
d530: 3b 0a 20 20 20 20 20 20 20 20 72 42 20 2f 3d 20  ;.        rB /= 
d540: 72 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  rA;.        brea
d550: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  k;.      }.     
d560: 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20   default: {.    
d570: 20 20 20 20 69 41 20 3d 20 73 71 6c 69 74 65 33      iA = sqlite3
d580: 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
d590: 31 29 3b 0a 20 20 20 20 20 20 20 20 69 42 20 3d  1);.        iB =
d5a0: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
d5b0: 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 20 20  alue(pIn2);.    
d5c0: 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20      if( iA==0 ) 
d5d0: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
d5e0: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
d5f0: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
d600: 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20  -1 ) iA = 1;.   
d610: 20 20 20 20 20 72 42 20 3d 20 28 64 6f 75 62 6c       rB = (doubl
d620: 65 29 28 69 42 20 25 20 69 41 29 3b 0a 20 20 20  e)(iB % iA);.   
d630: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
d640: 20 20 7d 0a 20 20 20 20 7d 0a 23 69 66 64 65 66    }.    }.#ifdef
d650: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
d660: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20  ATING_POINT.    
d670: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a  pOut->u.i = rB;.
d680: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
d690: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
d6a0: 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20 69 66 28  );.#else.    if(
d6b0: 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 72 42   sqlite3IsNaN(rB
d6c0: 29 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  ) ){.      goto 
d6d0: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
d6e0: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d  t_is_null;.    }
d6f0: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 72 20 3d  .    pOut->u.r =
d700: 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   rB;.    MemSetT
d710: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
d720: 4d 5f 52 65 61 6c 29 3b 0a 23 65 6e 64 69 66 0a  M_Real);.#endif.
d730: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 61 72    }.  break;..ar
d740: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
d750: 69 73 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69 74  is_null:.  sqlit
d760: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
d770: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
d780: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
d790: 6f 6c 6c 53 65 71 20 50 31 20 2a 20 2a 20 50 34  ollSeq P1 * * P4
d7a0: 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
d7b0: 6f 69 6e 74 65 72 20 74 6f 20 61 20 43 6f 6c 6c  ointer to a Coll
d7c0: 53 65 71 20 6f 62 6a 65 63 74 2e 20 49 66 20 74  Seq object. If t
d7d0: 68 65 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f 20  he next call to 
d7e0: 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 0a  a user function.
d7f0: 2a 2a 20 6f 72 20 61 67 67 72 65 67 61 74 65 20  ** or aggregate 
d800: 63 61 6c 6c 73 20 73 71 6c 69 74 65 33 47 65 74  calls sqlite3Get
d810: 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 2c 20 74  FuncCollSeq(), t
d820: 68 69 73 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  his collation se
d830: 71 75 65 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20 62  quence will.** b
d840: 65 20 72 65 74 75 72 6e 65 64 2e 20 54 68 69 73  e returned. This
d850: 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20   is used by the 
d860: 62 75 69 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c 20  built-in min(), 
d870: 6d 61 78 28 29 20 61 6e 64 20 6e 75 6c 6c 69 66  max() and nullif
d880: 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 2e  ().** functions.
d890: 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20  .**.** If P1 is 
d8a0: 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 69  not zero, then i
d8b0: 74 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20  t is a register 
d8c0: 74 68 61 74 20 61 20 73 75 62 73 65 71 75 65 6e  that a subsequen
d8d0: 74 20 6d 69 6e 28 29 20 6f 72 0a 2a 2a 20 6d 61  t min() or.** ma
d8e0: 78 28 29 20 61 67 67 72 65 67 61 74 65 20 77 69  x() aggregate wi
d8f0: 6c 6c 20 73 65 74 20 74 6f 20 31 20 69 66 20 74  ll set to 1 if t
d900: 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 69  he current row i
d910: 73 20 6e 6f 74 20 74 68 65 20 6d 69 6e 69 6d 75  s not the minimu
d920: 6d 20 6f 72 0a 2a 2a 20 6d 61 78 69 6d 75 6d 2e  m or.** maximum.
d930: 20 20 54 68 65 20 50 31 20 72 65 67 69 73 74 65    The P1 registe
d940: 72 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64  r is initialized
d950: 20 74 6f 20 30 20 62 79 20 74 68 69 73 20 69 6e   to 0 by this in
d960: 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
d970: 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 75   The interface u
d980: 73 65 64 20 62 79 20 74 68 65 20 69 6d 70 6c 65  sed by the imple
d990: 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  mentation of the
d9a0: 20 61 66 6f 72 65 6d 65 6e 74 69 6f 6e 65 64 20   aforementioned 
d9b0: 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f 20  functions.** to 
d9c0: 72 65 74 72 69 65 76 65 20 74 68 65 20 63 6f 6c  retrieve the col
d9d0: 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
d9e0: 73 65 74 20 62 79 20 74 68 69 73 20 6f 70 63 6f  set by this opco
d9f0: 64 65 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61  de is not availa
da00: 62 6c 65 0a 2a 2a 20 70 75 62 6c 69 63 6c 79 2e  ble.** publicly.
da10: 20 20 4f 6e 6c 79 20 62 75 69 6c 74 2d 69 6e 20    Only built-in 
da20: 66 75 6e 63 74 69 6f 6e 73 20 68 61 76 65 20 61  functions have a
da30: 63 63 65 73 73 20 74 6f 20 74 68 69 73 20 66 65  ccess to this fe
da40: 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ature..*/.case O
da50: 50 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20 61  P_CollSeq: {.  a
da60: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
da70: 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29  pe==P4_COLLSEQ )
da80: 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20  ;.  if( pOp->p1 
da90: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
daa0: 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61  beMemSetInt64(&a
dab0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 30 29  Mem[pOp->p1], 0)
dac0: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
dad0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74  ../* Opcode: Bit
dae0: 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a  And P1 P2 P3 * *
daf0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
db00: 50 33 5d 3d 72 5b 50 31 5d 26 72 5b 50 32 5d 0a  P3]=r[P1]&r[P2].
db10: 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62  **.** Take the b
db20: 69 74 2d 77 69 73 65 20 41 4e 44 20 6f 66 20 74  it-wise AND of t
db30: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
db40: 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20  ister P1 and P2 
db50: 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65  and.** store the
db60: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
db70: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
db80: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
db90: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
dba0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
dbb0: 63 6f 64 65 3a 20 42 69 74 4f 72 20 50 31 20 50  code: BitOr P1 P
dbc0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
dbd0: 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 31  psis: r[P3]=r[P1
dbe0: 5d 7c 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61  ]|r[P2].**.** Ta
dbf0: 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73 65 20  ke the bit-wise 
dc00: 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73  OR of the values
dc10: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
dc20: 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74  and P2 and.** st
dc30: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
dc40: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
dc50: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
dc60: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
dc70: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
dc80: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69  /./* Opcode: Shi
dc90: 66 74 4c 65 66 74 20 50 31 20 50 32 20 50 33 20  ftLeft P1 P2 P3 
dca0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
dcb0: 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3c 3c 72 5b   r[P3]=r[P2]<<r[
dcc0: 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20  P1].**.** Shift 
dcd0: 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  the integer valu
dce0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
dcf0: 20 74 6f 20 74 68 65 20 6c 65 66 74 20 62 79 20   to the left by 
dd00: 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66  the.** number of
dd10: 20 62 69 74 73 20 73 70 65 63 69 66 69 65 64 20   bits specified 
dd20: 62 79 20 74 68 65 20 69 6e 74 65 67 65 72 20 69  by the integer i
dd30: 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
dd40: 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65 73 75  * Store the resu
dd50: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
dd60: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
dd70: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
dd80: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
dd90: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
dda0: 20 53 68 69 66 74 52 69 67 68 74 20 50 31 20 50   ShiftRight P1 P
ddb0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
ddc0: 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32  psis: r[P3]=r[P2
ddd0: 5d 3e 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53  ]>>r[P1].**.** S
dde0: 68 69 66 74 20 74 68 65 20 69 6e 74 65 67 65 72  hift the integer
ddf0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
de00: 65 72 20 50 32 20 74 6f 20 74 68 65 20 72 69 67  er P2 to the rig
de10: 68 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d  ht by the.** num
de20: 62 65 72 20 6f 66 20 62 69 74 73 20 73 70 65 63  ber of bits spec
de30: 69 66 69 65 64 20 62 79 20 74 68 65 20 69 6e 74  ified by the int
de40: 65 67 65 72 20 69 6e 20 72 65 67 69 73 74 65 72  eger in register
de50: 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68   P1..** Store th
de60: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
de70: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
de80: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
de90: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
dea0: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  is NULL..*/.case
deb0: 20 4f 50 5f 42 69 74 41 6e 64 3a 20 20 20 20 20   OP_BitAnd:     
dec0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
ded0: 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 41 4e 44  ame as TK_BITAND
dee0: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
def0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4f   */.case OP_BitO
df00: 72 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r:              
df10: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
df20: 4b 5f 42 49 54 4f 52 2c 20 69 6e 31 2c 20 69 6e  K_BITOR, in1, in
df30: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
df40: 4f 50 5f 53 68 69 66 74 4c 65 66 74 3a 20 20 20  OP_ShiftLeft:   
df50: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
df60: 6d 65 20 61 73 20 54 4b 5f 4c 53 48 49 46 54 2c  me as TK_LSHIFT,
df70: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
df80: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74  */.case OP_Shift
df90: 52 69 67 68 74 3a 20 7b 20 20 20 20 20 20 20 20  Right: {        
dfa0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
dfb0: 5f 52 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e  _RSHIFT, in1, in
dfc0: 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34  2, out3 */.  i64
dfd0: 20 69 41 3b 0a 20 20 75 36 34 20 75 41 3b 0a 20   iA;.  u64 uA;. 
dfe0: 20 69 36 34 20 69 42 3b 0a 20 20 75 38 20 6f 70   i64 iB;.  u8 op
dff0: 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  ;..  pIn1 = &aMe
e000: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49  m[pOp->p1];.  pI
e010: 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
e020: 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p2];.  pOut = &a
e030: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
e040: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
e050: 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20   | pIn2->flags) 
e060: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
e070: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
e080: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
e090: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
e0a0: 69 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  iA = sqlite3Vdbe
e0b0: 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a  IntValue(pIn2);.
e0c0: 20 20 69 42 20 3d 20 73 71 6c 69 74 65 33 56 64    iB = sqlite3Vd
e0d0: 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
e0e0: 3b 0a 20 20 6f 70 20 3d 20 70 4f 70 2d 3e 6f 70  ;.  op = pOp->op
e0f0: 63 6f 64 65 3b 0a 20 20 69 66 28 20 6f 70 3d 3d  code;.  if( op==
e100: 4f 50 5f 42 69 74 41 6e 64 20 29 7b 0a 20 20 20  OP_BitAnd ){.   
e110: 20 69 41 20 26 3d 20 69 42 3b 0a 20 20 7d 65 6c   iA &= iB;.  }el
e120: 73 65 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69  se if( op==OP_Bi
e130: 74 4f 72 20 29 7b 0a 20 20 20 20 69 41 20 7c 3d  tOr ){.    iA |=
e140: 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28   iB;.  }else if(
e150: 20 69 42 21 3d 30 20 29 7b 0a 20 20 20 20 61 73   iB!=0 ){.    as
e160: 73 65 72 74 28 20 6f 70 3d 3d 4f 50 5f 53 68 69  sert( op==OP_Shi
e170: 66 74 52 69 67 68 74 20 7c 7c 20 6f 70 3d 3d 4f  ftRight || op==O
e180: 50 5f 53 68 69 66 74 4c 65 66 74 20 29 3b 0a 0a  P_ShiftLeft );..
e190: 20 20 20 20 2f 2a 20 49 66 20 73 68 69 66 74 69      /* If shifti
e1a0: 6e 67 20 62 79 20 61 20 6e 65 67 61 74 69 76 65  ng by a negative
e1b0: 20 61 6d 6f 75 6e 74 2c 20 73 68 69 66 74 20 69   amount, shift i
e1c0: 6e 20 74 68 65 20 6f 74 68 65 72 20 64 69 72 65  n the other dire
e1d0: 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 66 28  ction */.    if(
e1e0: 20 69 42 3c 30 20 29 7b 0a 20 20 20 20 20 20 61   iB<0 ){.      a
e1f0: 73 73 65 72 74 28 20 4f 50 5f 53 68 69 66 74 52  ssert( OP_ShiftR
e200: 69 67 68 74 3d 3d 4f 50 5f 53 68 69 66 74 4c 65  ight==OP_ShiftLe
e210: 66 74 2b 31 20 29 3b 0a 20 20 20 20 20 20 6f 70  ft+1 );.      op
e220: 20 3d 20 32 2a 4f 50 5f 53 68 69 66 74 4c 65 66   = 2*OP_ShiftLef
e230: 74 20 2b 20 31 20 2d 20 6f 70 3b 0a 20 20 20 20  t + 1 - op;.    
e240: 20 20 69 42 20 3d 20 69 42 3e 28 2d 36 34 29 20    iB = iB>(-64) 
e250: 3f 20 2d 69 42 20 3a 20 36 34 3b 0a 20 20 20 20  ? -iB : 64;.    
e260: 7d 0a 0a 20 20 20 20 69 66 28 20 69 42 3e 3d 36  }..    if( iB>=6
e270: 34 20 29 7b 0a 20 20 20 20 20 20 69 41 20 3d 20  4 ){.      iA = 
e280: 28 69 41 3e 3d 30 20 7c 7c 20 6f 70 3d 3d 4f 50  (iA>=0 || op==OP
e290: 5f 53 68 69 66 74 4c 65 66 74 29 20 3f 20 30 20  _ShiftLeft) ? 0 
e2a0: 3a 20 2d 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  : -1;.    }else{
e2b0: 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26 75  .      memcpy(&u
e2c0: 41 2c 20 26 69 41 2c 20 73 69 7a 65 6f 66 28 75  A, &iA, sizeof(u
e2d0: 41 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6f  A));.      if( o
e2e0: 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 20  p==OP_ShiftLeft 
e2f0: 29 7b 0a 20 20 20 20 20 20 20 20 75 41 20 3c 3c  ){.        uA <<
e300: 3d 20 69 42 3b 0a 20 20 20 20 20 20 7d 65 6c 73  = iB;.      }els
e310: 65 7b 0a 20 20 20 20 20 20 20 20 75 41 20 3e 3e  e{.        uA >>
e320: 3d 20 69 42 3b 0a 20 20 20 20 20 20 20 20 2f 2a  = iB;.        /*
e330: 20 53 69 67 6e 2d 65 78 74 65 6e 64 20 6f 6e 20   Sign-extend on 
e340: 61 20 72 69 67 68 74 20 73 68 69 66 74 20 6f 66  a right shift of
e350: 20 61 20 6e 65 67 61 74 69 76 65 20 6e 75 6d 62   a negative numb
e360: 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66  er */.        if
e370: 28 20 69 41 3c 30 20 29 20 75 41 20 7c 3d 20 28  ( iA<0 ) uA |= (
e380: 28 28 28 75 36 34 29 30 78 66 66 66 66 66 66 66  (((u64)0xfffffff
e390: 66 29 3c 3c 33 32 29 7c 30 78 66 66 66 66 66 66  f)<<32)|0xffffff
e3a0: 66 66 29 20 3c 3c 20 28 36 34 2d 69 42 29 3b 0a  ff) << (64-iB);.
e3b0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6d 65        }.      me
e3c0: 6d 63 70 79 28 26 69 41 2c 20 26 75 41 2c 20 73  mcpy(&iA, &uA, s
e3d0: 69 7a 65 6f 66 28 69 41 29 29 3b 0a 20 20 20 20  izeof(iA));.    
e3e0: 7d 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e  }.  }.  pOut->u.
e3f0: 69 20 3d 20 69 41 3b 0a 20 20 4d 65 6d 53 65 74  i = iA;.  MemSet
e400: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
e410: 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b  EM_Int);.  break
e420: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
e430: 41 64 64 49 6d 6d 20 20 50 31 20 50 32 20 2a 20  AddImm  P1 P2 * 
e440: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
e450: 20 72 5b 50 31 5d 3d 72 5b 50 31 5d 2b 50 32 0a   r[P1]=r[P1]+P2.
e460: 2a 2a 20 0a 2a 2a 20 41 64 64 20 74 68 65 20 63  ** .** Add the c
e470: 6f 6e 73 74 61 6e 74 20 50 32 20 74 6f 20 74 68  onstant P2 to th
e480: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
e490: 74 65 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20 72  ter P1..** The r
e4a0: 65 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20  esult is always 
e4b0: 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a  an integer..**.*
e4c0: 2a 20 54 6f 20 66 6f 72 63 65 20 61 6e 79 20 72  * To force any r
e4d0: 65 67 69 73 74 65 72 20 74 6f 20 62 65 20 61 6e  egister to be an
e4e0: 20 69 6e 74 65 67 65 72 2c 20 6a 75 73 74 20 61   integer, just a
e4f0: 64 64 20 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  dd 0..*/.case OP
e500: 5f 41 64 64 49 6d 6d 3a 20 7b 20 20 20 20 20 20  _AddImm: {      
e510: 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a        /* in1 */.
e520: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
e530: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p1];.  memAb
e540: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
e550: 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  In1);.  sqlite3V
e560: 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
e570: 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e  (pIn1);.  pIn1->
e580: 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a  u.i += pOp->p2;.
e590: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
e5a0: 70 63 6f 64 65 3a 20 4d 75 73 74 42 65 49 6e 74  pcode: MustBeInt
e5b0: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
e5c0: 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61  .** Force the va
e5d0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
e5e0: 50 31 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65  P1 to be an inte
e5f0: 67 65 72 2e 20 20 49 66 20 74 68 65 20 76 61 6c  ger.  If the val
e600: 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 6e  ue.** in P1 is n
e610: 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e  ot an integer an
e620: 64 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76  d cannot be conv
e630: 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e  erted into an in
e640: 74 65 67 65 72 0a 2a 2a 20 77 69 74 68 6f 75 74  teger.** without
e650: 20 64 61 74 61 20 6c 6f 73 73 2c 20 74 68 65 6e   data loss, then
e660: 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
e670: 79 20 74 6f 20 50 32 2c 20 6f 72 20 69 66 20 50  y to P2, or if P
e680: 32 3d 3d 30 0a 2a 2a 20 72 61 69 73 65 20 61 6e  2==0.** raise an
e690: 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48   SQLITE_MISMATCH
e6a0: 20 65 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63   exception..*/.c
e6b0: 61 73 65 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74  ase OP_MustBeInt
e6c0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
e6d0: 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  * jump, in1 */. 
e6e0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
e6f0: 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70  p->p1];.  if( (p
e700: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
e710: 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20  _Int)==0 ){.    
e720: 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49  applyAffinity(pI
e730: 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e  n1, SQLITE_AFF_N
e740: 55 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67  UMERIC, encoding
e750: 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31  );.    if( (pIn1
e760: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
e770: 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 56  t)==0 ){.      V
e780: 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31  dbeBranchTaken(1
e790: 2c 20 32 29 3b 0a 20 20 20 20 20 20 69 66 28 20  , 2);.      if( 
e7a0: 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20  pOp->p2==0 ){.  
e7b0: 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
e7c0: 45 5f 4d 49 53 4d 41 54 43 48 3b 0a 20 20 20 20  E_MISMATCH;.    
e7d0: 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
e7e0: 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
e7f0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
e800: 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
e810: 32 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  2;.      }.    }
e820: 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63  .  }.  VdbeBranc
e830: 68 54 61 6b 65 6e 28 30 2c 20 32 29 3b 0a 20 20  hTaken(0, 2);.  
e840: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
e850: 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  In1, MEM_Int);. 
e860: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64   break;.}..#ifnd
e870: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
e880: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a  LOATING_POINT./*
e890: 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 41 66 66   Opcode: RealAff
e8a0: 69 6e 69 74 79 20 50 31 20 2a 20 2a 20 2a 20 2a  inity P1 * * * *
e8b0: 0a 2a 2a 0a 2a 2a 20 49 66 20 72 65 67 69 73 74  .**.** If regist
e8c0: 65 72 20 50 31 20 68 6f 6c 64 73 20 61 6e 20 69  er P1 holds an i
e8d0: 6e 74 65 67 65 72 20 63 6f 6e 76 65 72 74 20 69  nteger convert i
e8e0: 74 20 74 6f 20 61 20 72 65 61 6c 20 76 61 6c 75  t to a real valu
e8f0: 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  e..**.** This op
e900: 63 6f 64 65 20 69 73 20 75 73 65 64 20 77 68 65  code is used whe
e910: 6e 20 65 78 74 72 61 63 74 69 6e 67 20 69 6e 66  n extracting inf
e920: 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 61 20  ormation from a 
e930: 63 6f 6c 75 6d 6e 20 74 68 61 74 0a 2a 2a 20 68  column that.** h
e940: 61 73 20 52 45 41 4c 20 61 66 66 69 6e 69 74 79  as REAL affinity
e950: 2e 20 20 53 75 63 68 20 63 6f 6c 75 6d 6e 20 76  .  Such column v
e960: 61 6c 75 65 73 20 6d 61 79 20 73 74 69 6c 6c 20  alues may still 
e970: 62 65 20 73 74 6f 72 65 64 20 61 73 0a 2a 2a 20  be stored as.** 
e980: 69 6e 74 65 67 65 72 73 2c 20 66 6f 72 20 73 70  integers, for sp
e990: 61 63 65 20 65 66 66 69 63 69 65 6e 63 79 2c 20  ace efficiency, 
e9a0: 62 75 74 20 61 66 74 65 72 20 65 78 74 72 61 63  but after extrac
e9b0: 74 69 6f 6e 20 77 65 20 77 61 6e 74 20 74 68 65  tion we want the
e9c0: 6d 0a 2a 2a 20 74 6f 20 68 61 76 65 20 6f 6e 6c  m.** to have onl
e9d0: 79 20 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a  y a real value..
e9e0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c 41  */.case OP_RealA
e9f0: 66 66 69 6e 69 74 79 3a 20 7b 20 20 20 20 20 20  ffinity: {      
ea00: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
ea10: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
ea20: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
ea30: 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73   if( pIn1->flags
ea40: 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
ea50: 49 6e 74 52 65 61 6c 29 20 29 7b 0a 20 20 20 20  IntReal) ){.    
ea60: 74 65 73 74 63 61 73 65 28 20 70 49 6e 31 2d 3e  testcase( pIn1->
ea70: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
ea80: 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28  );.    testcase(
ea90: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
eaa0: 45 4d 5f 49 6e 74 52 65 61 6c 20 29 3b 0a 20 20  EM_IntReal );.  
eab0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
eac0: 52 65 61 6c 69 66 79 28 70 49 6e 31 29 3b 0a 20  Realify(pIn1);. 
ead0: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
eae0: 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
eaf0: 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 0a 2f  LITE_OMIT_CAST./
eb00: 2a 20 4f 70 63 6f 64 65 3a 20 43 61 73 74 20 50  * Opcode: Cast P
eb10: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
eb20: 6e 6f 70 73 69 73 3a 20 61 66 66 69 6e 69 74 79  nopsis: affinity
eb30: 28 72 5b 50 31 5d 29 0a 2a 2a 0a 2a 2a 20 46 6f  (r[P1]).**.** Fo
eb40: 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  rce the value in
eb50: 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20   register P1 to 
eb60: 62 65 20 74 68 65 20 74 79 70 65 20 64 65 66 69  be the type defi
eb70: 6e 65 64 20 62 79 20 50 32 2e 0a 2a 2a 20 0a 2a  ned by P2..** .*
eb80: 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69 3e 20 50  * <ul>.** <li> P
eb90: 32 3d 3d 27 41 27 20 26 72 61 72 72 3b 20 42 4c  2=='A' &rarr; BL
eba0: 4f 42 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27  OB.** <li> P2=='
ebb0: 42 27 20 26 72 61 72 72 3b 20 54 45 58 54 0a 2a  B' &rarr; TEXT.*
ebc0: 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27 43 27 20 26  * <li> P2=='C' &
ebd0: 72 61 72 72 3b 20 4e 55 4d 45 52 49 43 0a 2a 2a  rarr; NUMERIC.**
ebe0: 20 3c 6c 69 3e 20 50 32 3d 3d 27 44 27 20 26 72   <li> P2=='D' &r
ebf0: 61 72 72 3b 20 49 4e 54 45 47 45 52 0a 2a 2a 20  arr; INTEGER.** 
ec00: 3c 6c 69 3e 20 50 32 3d 3d 27 45 27 20 26 72 61  <li> P2=='E' &ra
ec10: 72 72 3b 20 52 45 41 4c 0a 2a 2a 20 3c 2f 75 6c  rr; REAL.** </ul
ec20: 3e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76  >.**.** A NULL v
ec30: 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e  alue is not chan
ec40: 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74  ged by this rout
ec50: 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73  ine.  It remains
ec60: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
ec70: 50 5f 43 61 73 74 3a 20 7b 20 20 20 20 20 20 20  P_Cast: {       
ec80: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
ec90: 31 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  1 */.  assert( p
eca0: 4f 70 2d 3e 70 32 3e 3d 53 51 4c 49 54 45 5f 41  Op->p2>=SQLITE_A
ecb0: 46 46 5f 42 4c 4f 42 20 26 26 20 70 4f 70 2d 3e  FF_BLOB && pOp->
ecc0: 70 32 3c 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52  p2<=SQLITE_AFF_R
ecd0: 45 41 4c 20 29 3b 0a 20 20 74 65 73 74 63 61 73  EAL );.  testcas
ece0: 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  e( pOp->p2==SQLI
ecf0: 54 45 5f 41 46 46 5f 54 45 58 54 20 29 3b 0a 20  TE_AFF_TEXT );. 
ed00: 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
ed10: 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 42  p2==SQLITE_AFF_B
ed20: 4c 4f 42 20 29 3b 0a 20 20 74 65 73 74 63 61 73  LOB );.  testcas
ed30: 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  e( pOp->p2==SQLI
ed40: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29  TE_AFF_NUMERIC )
ed50: 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f  ;.  testcase( pO
ed60: 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46  p->p2==SQLITE_AF
ed70: 46 5f 49 4e 54 45 47 45 52 20 29 3b 0a 20 20 74  F_INTEGER );.  t
ed80: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32  estcase( pOp->p2
ed90: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41  ==SQLITE_AFF_REA
eda0: 4c 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  L );.  pIn1 = &a
edb0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
edc0: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
edd0: 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 72 63 20  (p, pIn1);.  rc 
ede0: 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e  = ExpandBlob(pIn
edf0: 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  1);.  sqlite3Vdb
ee00: 65 4d 65 6d 43 61 73 74 28 70 49 6e 31 2c 20 70  eMemCast(pIn1, p
ee10: 4f 70 2d 3e 70 32 2c 20 65 6e 63 6f 64 69 6e 67  Op->p2, encoding
ee20: 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
ee30: 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a  BLOBSIZE(pIn1);.
ee40: 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
ee50: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
ee60: 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  or;.  break;.}.#
ee70: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
ee80: 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a  OMIT_CAST */../*
ee90: 20 4f 70 63 6f 64 65 3a 20 45 71 20 50 31 20 50   Opcode: Eq P1 P
eea0: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
eeb0: 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d  nopsis: IF r[P3]
eec0: 3d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f  ==r[P1].**.** Co
eed0: 6d 70 61 72 65 20 74 68 65 20 76 61 6c 75 65 73  mpare the values
eee0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
eef0: 61 6e 64 20 50 33 2e 20 20 49 66 20 72 65 67 28  and P3.  If reg(
ef00: 50 33 29 3d 3d 72 65 67 28 50 31 29 20 74 68 65  P3)==reg(P1) the
ef10: 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64  n.** jump to add
ef20: 72 65 73 73 20 50 32 2e 20 20 4f 72 20 69 66 20  ress P2.  Or if 
ef30: 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  the SQLITE_STORE
ef40: 50 32 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  P2 flag is set i
ef50: 6e 20 50 35 2c 20 74 68 65 6e 0a 2a 2a 20 73 74  n P5, then.** st
ef60: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 6f  ore the result o
ef70: 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 6e 20  f comparison in 
ef80: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
ef90: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46  ** The SQLITE_AF
efa0: 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f  F_MASK portion o
efb0: 66 20 50 35 20 6d 75 73 74 20 62 65 20 61 6e 20  f P5 must be an 
efc0: 61 66 66 69 6e 69 74 79 20 63 68 61 72 61 63 74  affinity charact
efd0: 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41  er -.** SQLITE_A
efe0: 46 46 5f 54 45 58 54 2c 20 53 51 4c 49 54 45 5f  FF_TEXT, SQLITE_
eff0: 41 46 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64  AFF_INTEGER, and
f000: 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61 74   so forth. An at
f010: 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 0a 2a  tempt is made .*
f020: 2a 20 74 6f 20 63 6f 65 72 63 65 20 62 6f 74 68  * to coerce both
f030: 20 69 6e 70 75 74 73 20 61 63 63 6f 72 64 69 6e   inputs accordin
f040: 67 20 74 6f 20 74 68 69 73 20 61 66 66 69 6e 69  g to this affini
f050: 74 79 20 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a  ty before the.**
f060: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d   comparison is m
f070: 61 64 65 2e 20 49 66 20 74 68 65 20 53 51 4c 49  ade. If the SQLI
f080: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20 30  TE_AFF_MASK is 0
f090: 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69  x00, then numeri
f0a0: 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 69 73  c.** affinity is
f0b0: 20 75 73 65 64 2e 20 4e 6f 74 65 20 74 68 61 74   used. Note that
f0c0: 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 63 6f   the affinity co
f0d0: 6e 76 65 72 73 69 6f 6e 73 20 61 72 65 20 73 74  nversions are st
f0e0: 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74  ored.** back int
f0f0: 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69  o the input regi
f100: 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e  sters P1 and P3.
f110: 20 20 53 6f 20 74 68 69 73 20 6f 70 63 6f 64 65    So this opcode
f120: 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65   can cause.** pe
f130: 72 73 69 73 74 65 6e 74 20 63 68 61 6e 67 65 73  rsistent changes
f140: 20 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 31   to registers P1
f150: 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f   and P3..**.** O
f160: 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65 72 73 69  nce any conversi
f170: 6f 6e 73 20 68 61 76 65 20 74 61 6b 65 6e 20 70  ons have taken p
f180: 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69 74 68 65  lace, and neithe
f190: 72 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c  r value is NULL,
f1a0: 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20   .** the values 
f1b0: 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 20 49 66  are compared. If
f1c0: 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65   both values are
f1d0: 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63   blobs then memc
f1e0: 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73 65 64 20  mp() is.** used 
f1f0: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
f200: 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20   results of the 
f210: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20  comparison.  If 
f220: 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61  both values.** a
f230: 72 65 20 74 65 78 74 2c 20 74 68 65 6e 20 74 68  re text, then th
f240: 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 63 6f  e appropriate co
f250: 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
f260: 20 73 70 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a   specified in.**
f270: 20 50 34 20 69 73 20 75 73 65 64 20 74 6f 20 64   P4 is used to d
f280: 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  o the comparison
f290: 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  .  If P4 is not 
f2a0: 73 70 65 63 69 66 69 65 64 20 74 68 65 6e 0a 2a  specified then.*
f2b0: 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73 20 75 73  * memcmp() is us
f2c0: 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65  ed to compare te
f2d0: 78 74 20 73 74 72 69 6e 67 2e 20 20 49 66 20 62  xt string.  If b
f2e0: 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 0a 2a  oth values are.*
f2f0: 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e 20  * numeric, then 
f300: 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61 72  a numeric compar
f310: 69 73 6f 6e 20 69 73 20 75 73 65 64 2e 20 49 66  ison is used. If
f320: 20 74 68 65 20 74 77 6f 20 76 61 6c 75 65 73 0a   the two values.
f330: 2a 2a 20 61 72 65 20 6f 66 20 64 69 66 66 65 72  ** are of differ
f340: 65 6e 74 20 74 79 70 65 73 2c 20 74 68 65 6e 20  ent types, then 
f350: 6e 75 6d 62 65 72 73 20 61 72 65 20 63 6f 6e 73  numbers are cons
f360: 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e  idered less than
f370: 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e 64 20  .** strings and 
f380: 73 74 72 69 6e 67 73 20 61 72 65 20 63 6f 6e 73  strings are cons
f390: 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e  idered less than
f3a0: 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66   blobs..**.** If
f3b0: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69   SQLITE_NULLEQ i
f3c0: 73 20 73 65 74 20 69 6e 20 50 35 20 74 68 65 6e  s set in P5 then
f3d0: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63   the result of c
f3e0: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c 77  omparison is alw
f3f0: 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74 72  ays either.** tr
f400: 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64 20  ue or false and 
f410: 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20  is never NULL.  
f420: 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73  If both operands
f430: 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74   are NULL then t
f440: 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20  he result.** of 
f450: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 74 72  comparison is tr
f460: 75 65 2e 20 20 49 66 20 65 69 74 68 65 72 20 6f  ue.  If either o
f470: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74  perand is NULL t
f480: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
f490: 73 20 66 61 6c 73 65 2e 0a 2a 2a 20 49 66 20 6e  s false..** If n
f4a0: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
f4b0: 73 20 4e 55 4c 4c 20 74 68 65 20 72 65 73 75 6c  s NULL the resul
f4c0: 74 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  t is the same as
f4d0: 20 69 74 20 77 6f 75 6c 64 20 62 65 20 69 66 0a   it would be if.
f4e0: 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55  ** the SQLITE_NU
f4f0: 4c 4c 45 51 20 66 6c 61 67 20 77 65 72 65 20 6f  LLEQ flag were o
f500: 6d 69 74 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a  mitted from P5..
f510: 2a 2a 0a 2a 2a 20 49 66 20 62 6f 74 68 20 53 51  **.** If both SQ
f520: 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 61 6e 64  LITE_STOREP2 and
f530: 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e 55 4c 4c   SQLITE_KEEPNULL
f540: 20 66 6c 61 67 73 20 61 72 65 20 73 65 74 20 74   flags are set t
f550: 68 65 6e 20 74 68 65 0a 2a 2a 20 63 6f 6e 74 65  hen the.** conte
f560: 6e 74 20 6f 66 20 72 5b 50 32 5d 20 69 73 20 6f  nt of r[P2] is o
f570: 6e 6c 79 20 63 68 61 6e 67 65 64 20 69 66 20 74  nly changed if t
f580: 68 65 20 6e 65 77 20 76 61 6c 75 65 20 69 73 20  he new value is 
f590: 4e 55 4c 4c 20 6f 72 20 30 20 28 66 61 6c 73 65  NULL or 0 (false
f5a0: 29 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77  )..** In other w
f5b0: 6f 72 64 73 2c 20 61 20 70 72 69 6f 72 20 72 5b  ords, a prior r[
f5c0: 50 32 5d 20 76 61 6c 75 65 20 77 69 6c 6c 20 6e  P2] value will n
f5d0: 6f 74 20 62 65 20 6f 76 65 72 77 72 69 74 74 65  ot be overwritte
f5e0: 6e 20 62 79 20 31 20 28 74 72 75 65 29 2e 0a 2a  n by 1 (true)..*
f5f0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 20  /./* Opcode: Ne 
f600: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
f610: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72  * Synopsis: IF r
f620: 5b 50 33 5d 21 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a  [P3]!=r[P1].**.*
f630: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
f640: 74 20 6c 69 6b 65 20 74 68 65 20 45 71 20 6f 70  t like the Eq op
f650: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
f660: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
f670: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65  en if.** the ope
f680: 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65  rands in registe
f690: 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72 65  rs P1 and P3 are
f6a0: 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20 53 65 65   not equal.  See
f6b0: 20 74 68 65 20 45 71 20 6f 70 63 6f 64 65 20 66   the Eq opcode f
f6c0: 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c  or.** additional
f6d0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a   information..**
f6e0: 0a 2a 2a 20 49 66 20 62 6f 74 68 20 53 51 4c 49  .** If both SQLI
f6f0: 54 45 5f 53 54 4f 52 45 50 32 20 61 6e 64 20 53  TE_STOREP2 and S
f700: 51 4c 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 20 66  QLITE_KEEPNULL f
f710: 6c 61 67 73 20 61 72 65 20 73 65 74 20 74 68 65  lags are set the
f720: 6e 20 74 68 65 0a 2a 2a 20 63 6f 6e 74 65 6e 74  n the.** content
f730: 20 6f 66 20 72 5b 50 32 5d 20 69 73 20 6f 6e 6c   of r[P2] is onl
f740: 79 20 63 68 61 6e 67 65 64 20 69 66 20 74 68 65  y changed if the
f750: 20 6e 65 77 20 76 61 6c 75 65 20 69 73 20 4e 55   new value is NU
f760: 4c 4c 20 6f 72 20 31 20 28 74 72 75 65 29 2e 0a  LL or 1 (true)..
f770: 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  ** In other word
f780: 73 2c 20 61 20 70 72 69 6f 72 20 72 5b 50 32 5d  s, a prior r[P2]
f790: 20 76 61 6c 75 65 20 77 69 6c 6c 20 6e 6f 74 20   value will not 
f7a0: 62 65 20 6f 76 65 72 77 72 69 74 74 65 6e 20 62  be overwritten b
f7b0: 79 20 30 20 28 66 61 6c 73 65 29 2e 0a 2a 2f 0a  y 0 (false)..*/.
f7c0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74 20 50 31  /* Opcode: Lt P1
f7d0: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
f7e0: 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50  Synopsis: IF r[P
f7f0: 33 5d 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43  3]<r[P1].**.** C
f800: 6f 6d 70 61 72 65 20 74 68 65 20 76 61 6c 75 65  ompare the value
f810: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
f820: 20 61 6e 64 20 50 33 2e 20 20 49 66 20 72 65 67   and P3.  If reg
f830: 28 50 33 29 3c 72 65 67 28 50 31 29 20 74 68 65  (P3)<reg(P1) the
f840: 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64  n.** jump to add
f850: 72 65 73 73 20 50 32 2e 20 20 4f 72 20 69 66 20  ress P2.  Or if 
f860: 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  the SQLITE_STORE
f870: 50 32 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  P2 flag is set i
f880: 6e 20 50 35 20 73 74 6f 72 65 0a 2a 2a 20 74 68  n P5 store.** th
f890: 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70  e result of comp
f8a0: 61 72 69 73 6f 6e 20 28 30 20 6f 72 20 31 20 6f  arison (0 or 1 o
f8b0: 72 20 4e 55 4c 4c 29 20 69 6e 74 6f 20 72 65 67  r NULL) into reg
f8c0: 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
f8d0: 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55  If the SQLITE_JU
f8e0: 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 6f 66 20  MPIFNULL bit of 
f8f0: 50 35 20 69 73 20 73 65 74 20 61 6e 64 20 65 69  P5 is set and ei
f900: 74 68 65 72 20 72 65 67 28 50 31 29 20 6f 72 0a  ther reg(P1) or.
f910: 2a 2a 20 72 65 67 28 50 33 29 20 69 73 20 4e 55  ** reg(P3) is NU
f920: 4c 4c 20 74 68 65 6e 20 74 68 65 20 74 61 6b 65  LL then the take
f930: 20 74 68 65 20 6a 75 6d 70 2e 20 20 49 66 20 74   the jump.  If t
f940: 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46  he SQLITE_JUMPIF
f950: 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74 20 69 73 20  NULL .** bit is 
f960: 63 6c 65 61 72 20 74 68 65 6e 20 66 61 6c 6c 20  clear then fall 
f970: 74 68 72 6f 75 67 68 20 69 66 20 65 69 74 68 65  through if eithe
f980: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
f990: 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  L..**.** The SQL
f9a0: 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72  ITE_AFF_MASK por
f9b0: 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74 20  tion of P5 must 
f9c0: 62 65 20 61 6e 20 61 66 66 69 6e 69 74 79 20 63  be an affinity c
f9d0: 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51  haracter -.** SQ
f9e0: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 53  LITE_AFF_TEXT, S
f9f0: 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45  QLITE_AFF_INTEGE
fa00: 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e  R, and so forth.
fa10: 20 41 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d   An attempt is m
fa20: 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63  ade .** to coerc
fa30: 65 20 62 6f 74 68 20 69 6e 70 75 74 73 20 61 63  e both inputs ac
fa40: 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 69 73 20  cording to this 
fa50: 61 66 66 69 6e 69 74 79 20 62 65 66 6f 72 65 20  affinity before 
fa60: 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f  the.** compariso
fa70: 6e 20 69 73 20 6d 61 64 65 2e 20 49 66 20 74 68  n is made. If th
fa80: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  e SQLITE_AFF_MAS
fa90: 4b 20 69 73 20 30 78 30 30 2c 20 74 68 65 6e 20  K is 0x00, then 
faa0: 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e  numeric.** affin
fab0: 69 74 79 20 69 73 20 75 73 65 64 2e 20 4e 6f 74  ity is used. Not
fac0: 65 20 74 68 61 74 20 74 68 65 20 61 66 66 69 6e  e that the affin
fad0: 69 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20  ity conversions 
fae0: 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61  are stored.** ba
faf0: 63 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e 70 75  ck into the inpu
fb00: 74 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  t registers P1 a
fb10: 6e 64 20 50 33 2e 20 20 53 6f 20 74 68 69 73 20  nd P3.  So this 
fb20: 6f 70 63 6f 64 65 20 63 61 6e 20 63 61 75 73 65  opcode can cause
fb30: 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e 74 20 63  .** persistent c
fb40: 68 61 6e 67 65 73 20 74 6f 20 72 65 67 69 73 74  hanges to regist
fb50: 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a  ers P1 and P3..*
fb60: 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f  *.** Once any co
fb70: 6e 76 65 72 73 69 6f 6e 73 20 68 61 76 65 20 74  nversions have t
fb80: 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20  aken place, and 
fb90: 6e 65 69 74 68 65 72 20 76 61 6c 75 65 20 69 73  neither value is
fba0: 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76   NULL, .** the v
fbb0: 61 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61 72  alues are compar
fbc0: 65 64 2e 20 49 66 20 62 6f 74 68 20 76 61 6c 75  ed. If both valu
fbd0: 65 73 20 61 72 65 20 62 6c 6f 62 73 20 74 68 65  es are blobs the
fbe0: 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a  n memcmp() is.**
fbf0: 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69   used to determi
fc00: 6e 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  ne the results o
fc10: 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  f the comparison
fc20: 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65  .  If both value
fc30: 73 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c 20 74  s.** are text, t
fc40: 68 65 6e 20 74 68 65 20 61 70 70 72 6f 70 72 69  hen the appropri
fc50: 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  ate collating fu
fc60: 6e 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65 64  nction specified
fc70: 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20 20 75 73   in.** P4 is  us
fc80: 65 64 20 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d  ed to do the com
fc90: 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 50 34 20  parison.  If P4 
fca0: 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64  is not specified
fcb0: 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28   then.** memcmp(
fcc0: 29 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d  ) is used to com
fcd0: 70 61 72 65 20 74 65 78 74 20 73 74 72 69 6e 67  pare text string
fce0: 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65  .  If both value
fcf0: 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63  s are.** numeric
fd00: 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65 72 69 63  , then a numeric
fd10: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 75   comparison is u
fd20: 73 65 64 2e 20 49 66 20 74 68 65 20 74 77 6f 20  sed. If the two 
fd30: 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66  values.** are of
fd40: 20 64 69 66 66 65 72 65 6e 74 20 74 79 70 65 73   different types
fd50: 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72 73 20 61  , then numbers a
fd60: 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65  re considered le
fd70: 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e  ss than.** strin
fd80: 67 73 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61  gs and strings a
fd90: 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65  re considered le
fda0: 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a  ss than blobs..*
fdb0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 65 20  /./* Opcode: Le 
fdc0: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
fdd0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72  * Synopsis: IF r
fde0: 5b 50 33 5d 3c 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a  [P3]<=r[P1].**.*
fdf0: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
fe00: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
fe10: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
fe20: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
fe30: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e  en if.** the con
fe40: 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
fe50: 20 50 33 20 69 73 20 6c 65 73 73 20 74 68 61 6e   P3 is less than
fe60: 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
fe70: 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72   content of.** r
fe80: 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65  egister P1.  See
fe90: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66   the Lt opcode f
fea0: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
feb0: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  formation..*/./*
fec0: 20 4f 70 63 6f 64 65 3a 20 47 74 20 50 31 20 50   Opcode: Gt P1 P
fed0: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
fee0: 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d  nopsis: IF r[P3]
fef0: 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69  >r[P1].**.** Thi
ff00: 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  s works just lik
ff10: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
ff20: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
ff30: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
ff40: 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  .** the content 
ff50: 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69  of register P3 i
ff60: 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74  s greater than t
ff70: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a  he content of.**
ff80: 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53   register P1.  S
ff90: 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ee the Lt opcode
ffa0: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
ffb0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
ffc0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 65 20 50 31  /* Opcode: Ge P1
ffd0: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
ffe0: 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50  Synopsis: IF r[P
fff0: 33 5d 3e 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  3]>=r[P1].**.** 
10000 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
10010 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
10020 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
10030 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
10040 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   if.** the conte
10050 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
10060 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  3 is greater tha
10070 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
10080 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20  e content of.** 
10090 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65  register P1.  Se
100a0 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
100b0 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
100c0 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63  nformation..*/.c
100d0 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20 20 20  ase OP_Eq:      
100e0 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
100f0 20 61 73 20 54 4b 5f 45 51 2c 20 6a 75 6d 70 2c   as TK_EQ, jump,
10100 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73   in1, in3 */.cas
10110 65 20 4f 50 5f 4e 65 3a 20 20 20 20 20 20 20 20  e OP_Ne:        
10120 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
10130 73 20 54 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20 69  s TK_NE, jump, i
10140 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
10150 4f 50 5f 4c 74 3a 20 20 20 20 20 20 20 20 20 20  OP_Lt:          
10160 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
10170 54 4b 5f 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_LT, jump, in1
10180 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
10190 5f 4c 65 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Le:            
101a0 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
101b0 5f 4c 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _LE, jump, in1, 
101c0 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47  in3 */.case OP_G
101d0 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t:              
101e0 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47   /* same as TK_G
101f0 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  T, jump, in1, in
10200 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 65 3a  3 */.case OP_Ge:
10210 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
10220 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 45 2c  * same as TK_GE,
10230 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
10240 2a 2f 0a 20 20 69 6e 74 20 72 65 73 2c 20 72 65  */.  int res, re
10250 73 32 3b 20 20 20 20 20 20 2f 2a 20 52 65 73 75  s2;      /* Resu
10260 6c 74 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72  lt of the compar
10270 69 73 6f 6e 20 6f 66 20 70 49 6e 31 20 61 67 61  ison of pIn1 aga
10280 69 6e 73 74 20 70 49 6e 33 20 2a 2f 0a 20 20 63  inst pIn3 */.  c
10290 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20  har affinity;   
102a0 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 74     /* Affinity t
102b0 6f 20 75 73 65 20 66 6f 72 20 63 6f 6d 70 61 72  o use for compar
102c0 69 73 6f 6e 20 2a 2f 0a 20 20 75 31 36 20 66 6c  ison */.  u16 fl
102d0 61 67 73 31 3b 20 20 20 20 20 20 20 20 20 2f 2a  ags1;         /*
102e0 20 43 6f 70 79 20 6f 66 20 69 6e 69 74 69 61 6c   Copy of initial
102f0 20 76 61 6c 75 65 20 6f 66 20 70 49 6e 31 2d 3e   value of pIn1->
10300 66 6c 61 67 73 20 2a 2f 0a 20 20 75 31 36 20 66  flags */.  u16 f
10310 6c 61 67 73 33 3b 20 20 20 20 20 20 20 20 20 2f  lags3;         /
10320 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69 74 69 61  * Copy of initia
10330 6c 20 76 61 6c 75 65 20 6f 66 20 70 49 6e 33 2d  l value of pIn3-
10340 3e 66 6c 61 67 73 20 2a 2f 0a 0a 20 20 70 49 6e  >flags */..  pIn
10350 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
10360 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d  1];.  pIn3 = &aM
10370 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66  em[pOp->p3];.  f
10380 6c 61 67 73 31 20 3d 20 70 49 6e 31 2d 3e 66 6c  lags1 = pIn1->fl
10390 61 67 73 3b 0a 20 20 66 6c 61 67 73 33 20 3d 20  ags;.  flags3 = 
103a0 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 69  pIn3->flags;.  i
103b0 66 28 20 28 66 6c 61 67 73 31 20 7c 20 66 6c 61  f( (flags1 | fla
103c0 67 73 33 29 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs3)&MEM_Null ){
103d0 0a 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 62  .    /* One or b
103e0 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65  oth operands are
103f0 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 69 66 28   NULL */.    if(
10400 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
10410 45 5f 4e 55 4c 4c 45 51 20 29 7b 0a 20 20 20 20  E_NULLEQ ){.    
10420 20 20 2f 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e    /* If SQLITE_N
10430 55 4c 4c 45 51 20 69 73 20 73 65 74 20 28 77 68  ULLEQ is set (wh
10440 69 63 68 20 77 69 6c 6c 20 6f 6e 6c 79 20 68 61  ich will only ha
10450 70 70 65 6e 20 69 66 20 74 68 65 20 6f 70 65 72  ppen if the oper
10460 61 74 6f 72 20 69 73 0a 20 20 20 20 20 20 2a 2a  ator is.      **
10470 20 4f 50 5f 45 71 20 6f 72 20 4f 50 5f 4e 65 29   OP_Eq or OP_Ne)
10480 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a   then take the j
10490 75 6d 70 20 6f 72 20 6e 6f 74 20 64 65 70 65 6e  ump or not depen
104a0 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a  ding on whether.
104b0 20 20 20 20 20 20 2a 2a 20 6f 72 20 6e 6f 74 20        ** or not 
104c0 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72  both operands ar
104d0 65 20 6e 75 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f  e null..      */
104e0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
104f0 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 43 6c 65  flags1 & MEM_Cle
10500 61 72 65 64 29 3d 3d 30 20 29 3b 0a 20 20 20 20  ared)==0 );.    
10510 20 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e    assert( (pOp->
10520 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50  p5 & SQLITE_JUMP
10530 49 46 4e 55 4c 4c 29 3d 3d 30 20 7c 7c 20 43 4f  IFNULL)==0 || CO
10540 52 52 55 50 54 5f 44 42 20 29 3b 0a 20 20 20 20  RRUPT_DB );.    
10550 20 20 74 65 73 74 63 61 73 65 28 20 28 70 4f 70    testcase( (pOp
10560 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55  ->p5 & SQLITE_JU
10570 4d 50 49 46 4e 55 4c 4c 29 21 3d 30 20 29 3b 0a  MPIFNULL)!=0 );.
10580 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73        if( (flags
10590 31 26 66 6c 61 67 73 33 26 4d 45 4d 5f 4e 75 6c  1&flags3&MEM_Nul
105a0 6c 29 21 3d 30 0a 20 20 20 20 20 20 20 26 26 20  l)!=0.       && 
105b0 28 66 6c 61 67 73 33 26 4d 45 4d 5f 43 6c 65 61  (flags3&MEM_Clea
105c0 72 65 64 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b  red)==0.      ){
105d0 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 30  .        res = 0
105e0 3b 20 20 2f 2a 20 4f 70 65 72 61 6e 64 73 20 61  ;  /* Operands a
105f0 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20  re equal */.    
10600 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
10610 20 72 65 73 20 3d 20 28 28 66 6c 61 67 73 33 20   res = ((flags3 
10620 26 20 4d 45 4d 5f 4e 75 6c 6c 29 20 3f 20 2d 31  & MEM_Null) ? -1
10630 20 3a 20 2b 31 29 3b 20 20 2f 2a 20 4f 70 65 72   : +1);  /* Oper
10640 61 6e 64 73 20 61 72 65 20 6e 6f 74 20 65 71 75  ands are not equ
10650 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 0a 20 20  al */.      }.  
10660 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f    }else{.      /
10670 2a 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  * SQLITE_NULLEQ 
10680 69 73 20 63 6c 65 61 72 20 61 6e 64 20 61 74 20  is clear and at 
10690 6c 65 61 73 74 20 6f 6e 65 20 6f 70 65 72 61 6e  least one operan
106a0 64 20 69 73 20 4e 55 4c 4c 2c 0a 20 20 20 20 20  d is NULL,.     
106b0 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 72 65 73   ** then the res
106c0 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 4e 55  ult is always NU
106d0 4c 4c 2e 0a 20 20 20 20 20 20 2a 2a 20 54 68 65  LL..      ** The
106e0 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
106f0 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d  f the SQLITE_JUM
10700 50 49 46 4e 55 4c 4c 20 62 69 74 20 69 73 20 73  PIFNULL bit is s
10710 65 74 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  et..      */.   
10720 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26     if( pOp->p5 &
10730 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
10740 29 7b 0a 20 20 20 20 20 20 20 20 70 4f 75 74 20  ){.        pOut 
10750 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
10760 3b 0a 20 20 20 20 20 20 20 20 69 43 6f 6d 70 61  ;.        iCompa
10770 72 65 20 3d 20 31 3b 20 20 20 20 2f 2a 20 4f 70  re = 1;    /* Op
10780 65 72 61 6e 64 73 20 61 72 65 20 6e 6f 74 20 65  erands are not e
10790 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 20 20  qual */.        
107a0 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
107b0 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20  (p, pOut);.     
107c0 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
107d0 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c  g(pOut, MEM_Null
107e0 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49 53  );.        REGIS
107f0 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
10800 32 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20  2, pOut);.      
10810 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 56  }else{.        V
10820 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 32  dbeBranchTaken(2
10830 2c 33 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ,3);.        if(
10840 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
10850 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a  E_JUMPIFNULL ){.
10860 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6a            goto j
10870 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20  ump_to_p2;.     
10880 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
10890 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
108a0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
108b0 4e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20  Neither operand 
108c0 69 73 20 4e 55 4c 4c 2e 20 20 44 6f 20 61 20 63  is NULL.  Do a c
108d0 6f 6d 70 61 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20  omparison. */.  
108e0 20 20 61 66 66 69 6e 69 74 79 20 3d 20 70 4f 70    affinity = pOp
108f0 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 41 46  ->p5 & SQLITE_AF
10900 46 5f 4d 41 53 4b 3b 0a 20 20 20 20 69 66 28 20  F_MASK;.    if( 
10910 61 66 66 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45  affinity>=SQLITE
10920 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a  _AFF_NUMERIC ){.
10930 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73        if( (flags
10940 31 20 7c 20 66 6c 61 67 73 33 29 26 4d 45 4d 5f  1 | flags3)&MEM_
10950 53 74 72 20 29 7b 0a 20 20 20 20 20 20 20 20 69  Str ){.        i
10960 66 28 20 28 66 6c 61 67 73 31 20 26 20 28 4d 45  f( (flags1 & (ME
10970 4d 5f 49 6e 74 7c 4d 45 4d 5f 49 6e 74 52 65 61  M_Int|MEM_IntRea
10980 6c 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53  l|MEM_Real|MEM_S
10990 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b  tr))==MEM_Str ){
109a0 0a 20 20 20 20 20 20 20 20 20 20 61 70 70 6c 79  .          apply
109b0 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
109c0 70 49 6e 31 2c 30 29 3b 0a 20 20 20 20 20 20 20  pIn1,0);.       
109d0 20 20 20 61 73 73 65 72 74 28 20 66 6c 61 67 73     assert( flags
109e0 33 3d 3d 70 49 6e 33 2d 3e 66 6c 61 67 73 20 29  3==pIn3->flags )
109f0 3b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74  ;.          /* t
10a00 65 73 74 63 61 73 65 28 20 66 6c 61 67 73 33 21  estcase( flags3!
10a10 3d 70 49 6e 33 2d 3e 66 6c 61 67 73 20 29 3b 0a  =pIn3->flags );.
10a20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 69            ** thi
10a30 73 20 75 73 65 64 20 74 6f 20 62 65 20 70 6f 73  s used to be pos
10a40 73 69 62 6c 65 20 77 69 74 68 20 70 49 6e 31 3d  sible with pIn1=
10a50 3d 70 49 6e 33 2c 20 62 75 74 20 6e 6f 74 20 73  =pIn3, but not s
10a60 69 6e 63 65 0a 20 20 20 20 20 20 20 20 20 20 2a  ince.          *
10a70 2a 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 61 63  * the column cac
10a80 68 65 20 77 61 73 20 72 65 6d 6f 76 65 64 2e 20  he was removed. 
10a90 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   The following a
10aa0 73 73 69 67 6e 6d 65 6e 74 0a 20 20 20 20 20 20  ssignment.      
10ab0 20 20 20 20 2a 2a 20 69 73 20 65 73 73 65 6e 74      ** is essent
10ac0 69 61 6c 6c 79 20 61 20 6e 6f 2d 6f 70 2e 20 20  ially a no-op.  
10ad0 42 75 74 2c 20 69 74 20 70 72 6f 76 69 64 65 73  But, it provides
10ae0 20 64 65 66 65 6e 73 65 2d 69 6e 2d 64 65 70 74   defense-in-dept
10af0 68 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20 69  h.          ** i
10b00 6e 20 63 61 73 65 20 6f 75 72 20 61 6e 61 6c 79  n case our analy
10b10 73 69 73 20 69 73 20 69 6e 63 6f 72 72 65 63 74  sis is incorrect
10b20 2c 20 73 6f 20 69 74 20 69 73 20 6c 65 66 74 20  , so it is left 
10b30 69 6e 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  in. */.         
10b40 20 66 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d 3e   flags3 = pIn3->
10b50 66 6c 61 67 73 3b 0a 20 20 20 20 20 20 20 20 7d  flags;.        }
10b60 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 66 6c  .        if( (fl
10b70 61 67 73 33 20 26 20 28 4d 45 4d 5f 49 6e 74 7c  ags3 & (MEM_Int|
10b80 4d 45 4d 5f 49 6e 74 52 65 61 6c 7c 4d 45 4d 5f  MEM_IntReal|MEM_
10b90 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d  Real|MEM_Str))==
10ba0 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20  MEM_Str ){.     
10bb0 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69       applyNumeri
10bc0 63 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 30  cAffinity(pIn3,0
10bd0 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
10be0 20 20 20 7d 0a 20 20 20 20 20 20 2f 2a 20 48 61     }.      /* Ha
10bf0 6e 64 6c 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20  ndle the common 
10c00 63 61 73 65 20 6f 66 20 69 6e 74 65 67 65 72 20  case of integer 
10c10 63 6f 6d 70 61 72 69 73 6f 6e 20 68 65 72 65 2c  comparison here,
10c20 20 61 73 20 61 6e 0a 20 20 20 20 20 20 2a 2a 20   as an.      ** 
10c30 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2c 20 74 6f  optimization, to
10c40 20 61 76 6f 69 64 20 61 20 63 61 6c 6c 20 74 6f   avoid a call to
10c50 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61   sqlite3MemCompa
10c60 72 65 28 29 20 2a 2f 0a 20 20 20 20 20 20 69 66  re() */.      if
10c70 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
10c80 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn3->flags & M
10c90 45 4d 5f 49 6e 74 29 21 3d 30 20 29 7b 0a 20 20  EM_Int)!=0 ){.  
10ca0 20 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e        if( pIn3->
10cb0 75 2e 69 20 3e 20 70 49 6e 31 2d 3e 75 2e 69 20  u.i > pIn1->u.i 
10cc0 29 7b 20 72 65 73 20 3d 20 2b 31 3b 20 67 6f 74  ){ res = +1; got
10cd0 6f 20 63 6f 6d 70 61 72 65 5f 6f 70 3b 20 7d 0a  o compare_op; }.
10ce0 20 20 20 20 20 20 20 20 69 66 28 20 70 49 6e 33          if( pIn3
10cf0 2d 3e 75 2e 69 20 3c 20 70 49 6e 31 2d 3e 75 2e  ->u.i < pIn1->u.
10d00 69 20 29 7b 20 72 65 73 20 3d 20 2d 31 3b 20 67  i ){ res = -1; g
10d10 6f 74 6f 20 63 6f 6d 70 61 72 65 5f 6f 70 3b 20  oto compare_op; 
10d20 7d 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20  }.        res = 
10d30 30 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  0;.        goto 
10d40 63 6f 6d 70 61 72 65 5f 6f 70 3b 0a 20 20 20 20  compare_op;.    
10d50 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 20 69 66    }.    }else if
10d60 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49  ( affinity==SQLI
10d70 54 45 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a 20  TE_AFF_TEXT ){. 
10d80 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 31       if( (flags1
10d90 20 26 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26   & MEM_Str)==0 &
10da0 26 20 28 66 6c 61 67 73 31 26 28 4d 45 4d 5f 49  & (flags1&(MEM_I
10db0 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f  nt|MEM_Real|MEM_
10dc0 49 6e 74 52 65 61 6c 29 29 21 3d 30 20 29 7b 0a  IntReal))!=0 ){.
10dd0 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65          testcase
10de0 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
10df0 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 20  MEM_Int );.     
10e00 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e     testcase( pIn
10e10 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  1->flags & MEM_R
10e20 65 61 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 74  eal );.        t
10e30 65 73 74 63 61 73 65 28 20 70 49 6e 31 2d 3e 66  estcase( pIn1->f
10e40 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 52 65  lags & MEM_IntRe
10e50 61 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71  al );.        sq
10e60 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69  lite3VdbeMemStri
10e70 6e 67 69 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f  ngify(pIn1, enco
10e80 64 69 6e 67 2c 20 31 29 3b 0a 20 20 20 20 20 20  ding, 1);.      
10e90 20 20 74 65 73 74 63 61 73 65 28 20 28 66 6c 61    testcase( (fla
10ea0 67 73 31 26 4d 45 4d 5f 44 79 6e 29 20 21 3d 20  gs1&MEM_Dyn) != 
10eb0 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pIn1->flags&MEM
10ec0 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20 20 20 20  _Dyn) );.       
10ed0 20 66 6c 61 67 73 31 20 3d 20 28 70 49 6e 31 2d   flags1 = (pIn1-
10ee0 3e 66 6c 61 67 73 20 26 20 7e 4d 45 4d 5f 54 79  >flags & ~MEM_Ty
10ef0 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67 73  peMask) | (flags
10f00 31 20 26 20 4d 45 4d 5f 54 79 70 65 4d 61 73 6b  1 & MEM_TypeMask
10f10 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
10f20 74 28 20 70 49 6e 31 21 3d 70 49 6e 33 20 29 3b  t( pIn1!=pIn3 );
10f30 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
10f40 66 28 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d  f( (flags3 & MEM
10f50 5f 53 74 72 29 3d 3d 30 20 26 26 20 28 66 6c 61  _Str)==0 && (fla
10f60 67 73 33 26 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d  gs3&(MEM_Int|MEM
10f70 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 52 65 61  _Real|MEM_IntRea
10f80 6c 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  l))!=0 ){.      
10f90 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 33    testcase( pIn3
10fa0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
10fb0 74 20 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73  t );.        tes
10fc0 74 63 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c 61  tcase( pIn3->fla
10fd0 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 3b  gs & MEM_Real );
10fe0 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73  .        testcas
10ff0 65 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  e( pIn3->flags &
11000 20 4d 45 4d 5f 49 6e 74 52 65 61 6c 20 29 3b 0a   MEM_IntReal );.
11010 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
11020 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28  dbeMemStringify(
11030 70 49 6e 33 2c 20 65 6e 63 6f 64 69 6e 67 2c 20  pIn3, encoding, 
11040 31 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74  1);.        test
11050 63 61 73 65 28 20 28 66 6c 61 67 73 33 26 4d 45  case( (flags3&ME
11060 4d 5f 44 79 6e 29 20 21 3d 20 28 70 49 6e 33 2d  M_Dyn) != (pIn3-
11070 3e 66 6c 61 67 73 26 4d 45 4d 5f 44 79 6e 29 20  >flags&MEM_Dyn) 
11080 29 3b 0a 20 20 20 20 20 20 20 20 66 6c 61 67 73  );.        flags
11090 33 20 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  3 = (pIn3->flags
110a0 20 26 20 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b   & ~MEM_TypeMask
110b0 29 20 7c 20 28 66 6c 61 67 73 33 20 26 20 4d 45  ) | (flags3 & ME
110c0 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20 20  M_TypeMask);.   
110d0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61     }.    }.    a
110e0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
110f0 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 7c  pe==P4_COLLSEQ |
11100 7c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d  | pOp->p4.pColl=
11110 3d 30 20 29 3b 0a 20 20 20 20 72 65 73 20 3d 20  =0 );.    res = 
11120 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72  sqlite3MemCompar
11130 65 28 70 49 6e 33 2c 20 70 49 6e 31 2c 20 70 4f  e(pIn3, pIn1, pO
11140 70 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b 0a 20 20  p->p4.pColl);.  
11150 7d 0a 63 6f 6d 70 61 72 65 5f 6f 70 3a 0a 20 20  }.compare_op:.  
11160 2f 2a 20 41 74 20 74 68 69 73 20 70 6f 69 6e 74  /* At this point
11170 2c 20 72 65 73 20 69 73 20 6e 65 67 61 74 69 76  , res is negativ
11180 65 2c 20 7a 65 72 6f 2c 20 6f 72 20 70 6f 73 69  e, zero, or posi
11190 74 69 76 65 20 69 66 20 72 65 67 5b 50 31 5d 20  tive if reg[P1] 
111a0 69 73 0a 20 20 2a 2a 20 6c 65 73 73 20 74 68 61  is.  ** less tha
111b0 6e 2c 20 65 71 75 61 6c 20 74 6f 2c 20 6f 72 20  n, equal to, or 
111c0 67 72 65 61 74 65 72 20 74 68 61 6e 20 72 65 67  greater than reg
111d0 5b 50 33 5d 2c 20 72 65 73 70 65 63 74 69 76 65  [P3], respective
111e0 6c 79 2e 20 20 43 6f 6d 70 75 74 65 0a 20 20 2a  ly.  Compute.  *
111f0 2a 20 74 68 65 20 61 6e 73 77 65 72 20 74 6f 20  * the answer to 
11200 74 68 69 73 20 6f 70 65 72 61 74 6f 72 20 69 6e  this operator in
11210 20 72 65 73 32 2c 20 64 65 70 65 6e 64 69 6e 67   res2, depending
11220 20 6f 6e 20 77 68 61 74 20 74 68 65 20 63 6f 6d   on what the com
11230 70 61 72 69 73 6f 6e 0a 20 20 2a 2a 20 6f 70 65  parison.  ** ope
11240 72 61 74 6f 72 20 61 63 74 75 61 6c 6c 79 20 69  rator actually i
11250 73 2e 20 20 54 68 65 20 6e 65 78 74 20 62 6c 6f  s.  The next blo
11260 63 6b 20 6f 66 20 63 6f 64 65 20 64 65 70 65 6e  ck of code depen
11270 64 73 20 6f 6e 20 74 68 65 20 66 61 63 74 0a 20  ds on the fact. 
11280 20 2a 2a 20 74 68 61 74 20 74 68 65 20 36 20 63   ** that the 6 c
11290 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74  omparison operat
112a0 6f 72 73 20 61 72 65 20 63 6f 6e 73 65 63 75 74  ors are consecut
112b0 69 76 65 20 69 6e 74 65 67 65 72 73 20 69 6e 20  ive integers in 
112c0 74 68 69 73 0a 20 20 2a 2a 20 6f 72 64 65 72 3a  this.  ** order:
112d0 20 20 4e 45 2c 20 45 51 2c 20 47 54 2c 20 4c 45    NE, EQ, GT, LE
112e0 2c 20 4c 54 2c 20 47 45 20 2a 2f 0a 20 20 61 73  , LT, GE */.  as
112f0 73 65 72 74 28 20 4f 50 5f 45 71 3d 3d 4f 50 5f  sert( OP_Eq==OP_
11300 4e 65 2b 31 20 29 3b 20 61 73 73 65 72 74 28 20  Ne+1 ); assert( 
11310 4f 50 5f 47 74 3d 3d 4f 50 5f 4e 65 2b 32 20 29  OP_Gt==OP_Ne+2 )
11320 3b 20 61 73 73 65 72 74 28 20 4f 50 5f 4c 65 3d  ; assert( OP_Le=
11330 3d 4f 50 5f 4e 65 2b 33 20 29 3b 0a 20 20 61 73  =OP_Ne+3 );.  as
11340 73 65 72 74 28 20 4f 50 5f 4c 74 3d 3d 4f 50 5f  sert( OP_Lt==OP_
11350 4e 65 2b 34 20 29 3b 20 61 73 73 65 72 74 28 20  Ne+4 ); assert( 
11360 4f 50 5f 47 65 3d 3d 4f 50 5f 4e 65 2b 35 20 29  OP_Ge==OP_Ne+5 )
11370 3b 0a 20 20 69 66 28 20 72 65 73 3c 30 20 29 7b  ;.  if( res<0 ){
11380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11390 20 20 20 20 20 20 20 20 2f 2a 20 6e 65 2c 20 65          /* ne, e
113a0 71 2c 20 67 74 2c 20 6c 65 2c 20 6c 74 2c 20 67  q, gt, le, lt, g
113b0 65 20 2a 2f 0a 20 20 20 20 73 74 61 74 69 63 20  e */.    static 
113c0 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
113d0 68 61 72 20 61 4c 54 62 5b 5d 20 3d 20 7b 20 31  har aLTb[] = { 1
113e0 2c 20 20 30 2c 20 20 30 2c 20 20 31 2c 20 20 31  ,  0,  0,  1,  1
113f0 2c 20 20 30 20 7d 3b 0a 20 20 20 20 72 65 73 32  ,  0 };.    res2
11400 20 3d 20 61 4c 54 62 5b 70 4f 70 2d 3e 6f 70 63   = aLTb[pOp->opc
11410 6f 64 65 20 2d 20 4f 50 5f 4e 65 5d 3b 0a 20 20  ode - OP_Ne];.  
11420 7d 65 6c 73 65 20 69 66 28 20 72 65 73 3d 3d 30  }else if( res==0
11430 20 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63   ){.    static c
11440 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
11450 61 72 20 61 45 51 62 5b 5d 20 3d 20 7b 20 30 2c  ar aEQb[] = { 0,
11460 20 20 31 2c 20 20 30 2c 20 20 31 2c 20 20 30 2c    1,  0,  1,  0,
11470 20 20 31 20 7d 3b 0a 20 20 20 20 72 65 73 32 20    1 };.    res2 
11480 3d 20 61 45 51 62 5b 70 4f 70 2d 3e 6f 70 63 6f  = aEQb[pOp->opco
11490 64 65 20 2d 20 4f 50 5f 4e 65 5d 3b 0a 20 20 7d  de - OP_Ne];.  }
114a0 65 6c 73 65 7b 0a 20 20 20 20 73 74 61 74 69 63  else{.    static
114b0 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
114c0 63 68 61 72 20 61 47 54 62 5b 5d 20 3d 20 7b 20  char aGTb[] = { 
114d0 31 2c 20 20 30 2c 20 20 31 2c 20 20 30 2c 20 20  1,  0,  1,  0,  
114e0 30 2c 20 20 31 20 7d 3b 0a 20 20 20 20 72 65 73  0,  1 };.    res
114f0 32 20 3d 20 61 47 54 62 5b 70 4f 70 2d 3e 6f 70  2 = aGTb[pOp->op
11500 63 6f 64 65 20 2d 20 4f 50 5f 4e 65 5d 3b 0a 20  code - OP_Ne];. 
11510 20 7d 0a 0a 20 20 2f 2a 20 55 6e 64 6f 20 61 6e   }..  /* Undo an
11520 79 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62  y changes made b
11530 79 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28  y applyAffinity(
11540 29 20 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72  ) to the input r
11550 65 67 69 73 74 65 72 73 2e 20 2a 2f 0a 20 20 61  egisters. */.  a
11560 73 73 65 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c  ssert( (pIn1->fl
11570 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20 3d  ags & MEM_Dyn) =
11580 3d 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f  = (flags1 & MEM_
11590 44 79 6e 29 20 29 3b 0a 20 20 70 49 6e 31 2d 3e  Dyn) );.  pIn1->
115a0 66 6c 61 67 73 20 3d 20 66 6c 61 67 73 31 3b 0a  flags = flags1;.
115b0 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 33 2d    assert( (pIn3-
115c0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e  >flags & MEM_Dyn
115d0 29 20 3d 3d 20 28 66 6c 61 67 73 33 20 26 20 4d  ) == (flags3 & M
115e0 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 70 49 6e  EM_Dyn) );.  pIn
115f0 33 2d 3e 66 6c 61 67 73 20 3d 20 66 6c 61 67 73  3->flags = flags
11600 33 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  3;..  if( pOp->p
11610 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  5 & SQLITE_STORE
11620 50 32 20 29 7b 0a 20 20 20 20 70 4f 75 74 20 3d  P2 ){.    pOut =
11630 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
11640 0a 20 20 20 20 69 43 6f 6d 70 61 72 65 20 3d 20  .    iCompare = 
11650 72 65 73 3b 0a 20 20 20 20 69 66 28 20 28 70 4f  res;.    if( (pO
11660 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4b  p->p5 & SQLITE_K
11670 45 45 50 4e 55 4c 4c 29 21 3d 30 20 29 7b 0a 20  EEPNULL)!=0 ){. 
11680 20 20 20 20 20 2f 2a 20 54 68 65 20 4b 45 45 50       /* The KEEP
11690 4e 55 4c 4c 20 66 6c 61 67 20 70 72 65 76 65 6e  NULL flag preven
116a0 74 73 20 4f 50 5f 45 71 20 66 72 6f 6d 20 6f 76  ts OP_Eq from ov
116b0 65 72 77 72 69 74 69 6e 67 20 61 20 4e 55 4c 4c  erwriting a NULL
116c0 20 77 69 74 68 20 31 0a 20 20 20 20 20 20 2a 2a   with 1.      **
116d0 20 61 6e 64 20 70 72 65 76 65 6e 74 73 20 4f 50   and prevents OP
116e0 5f 4e 65 20 66 72 6f 6d 20 6f 76 65 72 77 72 69  _Ne from overwri
116f0 74 69 6e 67 20 4e 55 4c 4c 20 77 69 74 68 20 30  ting NULL with 0
11700 2e 20 20 54 68 69 73 20 66 6c 61 67 0a 20 20 20  .  This flag.   
11710 20 20 20 2a 2a 20 69 73 20 6f 6e 6c 79 20 75 73     ** is only us
11720 65 64 20 69 6e 20 63 6f 6e 74 65 78 74 73 20 77  ed in contexts w
11730 68 65 72 65 20 65 69 74 68 65 72 3a 0a 20 20 20  here either:.   
11740 20 20 20 2a 2a 20 20 20 28 31 29 20 6f 70 3d 3d     **   (1) op==
11750 4f 50 5f 45 71 20 26 26 20 28 72 5b 50 32 5d 3d  OP_Eq && (r[P2]=
11760 3d 4e 55 4c 4c 20 7c 7c 20 72 5b 50 32 5d 3d 3d  =NULL || r[P2]==
11770 30 29 0a 20 20 20 20 20 20 2a 2a 20 20 20 28 32  0).      **   (2
11780 29 20 6f 70 3d 3d 4f 50 5f 4e 65 20 26 26 20 28  ) op==OP_Ne && (
11790 72 5b 50 32 5d 3d 3d 4e 55 4c 4c 20 7c 7c 20 72  r[P2]==NULL || r
117a0 5b 50 32 5d 3d 3d 31 29 0a 20 20 20 20 20 20 2a  [P2]==1).      *
117b0 2a 20 54 68 65 72 65 66 6f 72 65 20 69 74 20 69  * Therefore it i
117c0 73 20 6e 6f 74 20 6e 65 63 65 73 73 61 72 79 20  s not necessary 
117d0 74 6f 20 63 68 65 63 6b 20 74 68 65 20 63 6f 6e  to check the con
117e0 74 65 6e 74 20 6f 66 20 72 5b 50 32 5d 20 66 6f  tent of r[P2] fo
117f0 72 0a 20 20 20 20 20 20 2a 2a 20 4e 55 4c 4c 2e  r.      ** NULL.
11800 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
11810 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
11820 50 5f 4e 65 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  P_Ne || pOp->opc
11830 6f 64 65 3d 3d 4f 50 5f 45 71 20 29 3b 0a 20 20  ode==OP_Eq );.  
11840 20 20 20 20 61 73 73 65 72 74 28 20 72 65 73 32      assert( res2
11850 3d 3d 30 20 7c 7c 20 72 65 73 32 3d 3d 31 20 29  ==0 || res2==1 )
11860 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65  ;.      testcase
11870 28 20 72 65 73 32 3d 3d 30 20 26 26 20 70 4f 70  ( res2==0 && pOp
11880 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20  ->opcode==OP_Eq 
11890 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73  );.      testcas
118a0 65 28 20 72 65 73 32 3d 3d 31 20 26 26 20 70 4f  e( res2==1 && pO
118b0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71  p->opcode==OP_Eq
118c0 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61   );.      testca
118d0 73 65 28 20 72 65 73 32 3d 3d 30 20 26 26 20 70  se( res2==0 && p
118e0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e  Op->opcode==OP_N
118f0 65 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63  e );.      testc
11900 61 73 65 28 20 72 65 73 32 3d 3d 31 20 26 26 20  ase( res2==1 && 
11910 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
11920 4e 65 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  Ne );.      if( 
11930 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50  (pOp->opcode==OP
11940 5f 45 71 29 3d 3d 72 65 73 32 20 29 20 62 72 65  _Eq)==res2 ) bre
11950 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6d 65  ak;.    }.    me
11960 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
11970 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 4d 65 6d  , pOut);.    Mem
11980 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
11990 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20  , MEM_Int);.    
119a0 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 65 73 32  pOut->u.i = res2
119b0 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
119c0 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f  RACE(pOp->p2, pO
119d0 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ut);.  }else{.  
119e0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
119f0 6e 28 72 65 73 32 21 3d 30 2c 20 28 70 4f 70 2d  n(res2!=0, (pOp-
11a00 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c  >p5 & SQLITE_NUL
11a10 4c 45 51 29 3f 32 3a 33 29 3b 0a 20 20 20 20 69  LEQ)?2:3);.    i
11a20 66 28 20 72 65 73 32 20 29 7b 0a 20 20 20 20 20  f( res2 ){.     
11a30 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
11a40 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
11a50 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
11a60 65 3a 20 45 6c 73 65 4e 6f 74 45 71 20 2a 20 50  e: ElseNotEq * P
11a70 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  2 * * *.**.** Th
11a80 69 73 20 6f 70 63 6f 64 65 20 6d 75 73 74 20 69  is opcode must i
11a90 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f  mmediately follo
11aa0 77 20 61 6e 20 4f 50 5f 4c 74 20 6f 72 20 4f 50  w an OP_Lt or OP
11ab0 5f 47 74 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  _Gt comparison o
11ac0 70 65 72 61 74 6f 72 2e 0a 2a 2a 20 49 66 20 72  perator..** If r
11ad0 65 73 75 6c 74 20 6f 66 20 61 6e 20 4f 50 5f 45  esult of an OP_E
11ae0 71 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 6e 20  q comparison on 
11af0 74 68 65 20 73 61 6d 65 20 74 77 6f 20 6f 70 65  the same two ope
11b00 72 61 6e 64 73 0a 2a 2a 20 77 6f 75 6c 64 20 68  rands.** would h
11b10 61 76 65 20 62 65 20 4e 55 4c 4c 20 6f 72 20 66  ave be NULL or f
11b20 61 6c 73 65 20 28 30 29 2c 20 74 68 65 6e 20 74  alse (0), then t
11b30 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20  hen jump to P2. 
11b40 0a 2a 2a 20 49 66 20 74 68 65 20 72 65 73 75 6c  .** If the resul
11b50 74 20 6f 66 20 61 6e 20 4f 50 5f 45 71 20 63 6f  t of an OP_Eq co
11b60 6d 70 61 72 69 73 6f 6e 20 6f 6e 20 74 68 65 20  mparison on the 
11b70 74 77 6f 20 70 72 65 76 69 6f 75 73 20 6f 70 65  two previous ope
11b80 72 61 6e 64 73 0a 2a 2a 20 77 6f 75 6c 64 20 68  rands.** would h
11b90 61 76 65 20 62 65 65 6e 20 74 72 75 65 20 28 31  ave been true (1
11ba0 29 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  ), then fall thr
11bb0 6f 75 67 68 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ough..*/.case OP
11bc0 5f 45 6c 73 65 4e 6f 74 45 71 3a 20 7b 20 20 20  _ElseNotEq: {   
11bd0 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
11be0 4b 5f 45 53 43 41 50 45 2c 20 6a 75 6d 70 20 2a  K_ESCAPE, jump *
11bf0 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e  /.  assert( pOp>
11c00 61 4f 70 20 29 3b 0a 20 20 61 73 73 65 72 74 28  aOp );.  assert(
11c10 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d   pOp[-1].opcode=
11c20 3d 4f 50 5f 4c 74 20 7c 7c 20 70 4f 70 5b 2d 31  =OP_Lt || pOp[-1
11c30 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 47 74 20  ].opcode==OP_Gt 
11c40 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
11c50 5b 2d 31 5d 2e 70 35 20 26 20 53 51 4c 49 54 45  [-1].p5 & SQLITE
11c60 5f 53 54 4f 52 45 50 32 20 29 3b 0a 20 20 56 64  _STOREP2 );.  Vd
11c70 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 69 43  beBranchTaken(iC
11c80 6f 6d 70 61 72 65 21 3d 30 2c 20 32 29 3b 0a 20  ompare!=0, 2);. 
11c90 20 69 66 28 20 69 43 6f 6d 70 61 72 65 21 3d 30   if( iCompare!=0
11ca0 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
11cb0 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  p2;.  break;.}..
11cc0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 65 72 6d  ./* Opcode: Perm
11cd0 75 74 61 74 69 6f 6e 20 2a 20 2a 20 2a 20 50 34  utation * * * P4
11ce0 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65   *.**.** Set the
11cf0 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 75 73 65   permutation use
11d00 64 20 62 79 20 74 68 65 20 4f 50 5f 43 6f 6d 70  d by the OP_Comp
11d10 61 72 65 20 6f 70 65 72 61 74 6f 72 20 69 6e 20  are operator in 
11d20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74  the next.** inst
11d30 72 75 63 74 69 6f 6e 2e 20 20 54 68 65 20 70 65  ruction.  The pe
11d40 72 6d 75 74 61 74 69 6f 6e 20 69 73 20 73 74 6f  rmutation is sto
11d50 72 65 64 20 69 6e 20 74 68 65 20 50 34 20 6f 70  red in the P4 op
11d60 65 72 61 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  erand..**.** The
11d70 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 69 73 20   permutation is 
11d80 6f 6e 6c 79 20 76 61 6c 69 64 20 75 6e 74 69 6c  only valid until
11d90 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 43 6f 6d   the next OP_Com
11da0 70 61 72 65 20 74 68 61 74 20 68 61 73 0a 2a 2a  pare that has.**
11db0 20 74 68 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d   the OPFLAG_PERM
11dc0 55 54 45 20 62 69 74 20 73 65 74 20 69 6e 20 50  UTE bit set in P
11dd0 35 2e 20 54 79 70 69 63 61 6c 6c 79 20 74 68 65  5. Typically the
11de0 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20   OP_Permutation 
11df0 73 68 6f 75 6c 64 20 0a 2a 2a 20 6f 63 63 75 72  should .** occur
11e00 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 70 72 69   immediately pri
11e10 6f 72 20 74 6f 20 74 68 65 20 4f 50 5f 43 6f 6d  or to the OP_Com
11e20 70 61 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  pare..**.** The 
11e30 66 69 72 73 74 20 69 6e 74 65 67 65 72 20 69 6e  first integer in
11e40 20 74 68 65 20 50 34 20 69 6e 74 65 67 65 72 20   the P4 integer 
11e50 61 72 72 61 79 20 69 73 20 74 68 65 20 6c 65 6e  array is the len
11e60 67 74 68 20 6f 66 20 74 68 65 20 61 72 72 61 79  gth of the array
11e70 0a 2a 2a 20 61 6e 64 20 64 6f 65 73 20 6e 6f 74  .** and does not
11e80 20 62 65 63 6f 6d 65 20 70 61 72 74 20 6f 66 20   become part of 
11e90 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 2e  the permutation.
11ea0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d  .*/.case OP_Perm
11eb0 75 74 61 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73  utation: {.  ass
11ec0 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
11ed0 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 29 3b  ==P4_INTARRAY );
11ee0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
11ef0 70 34 2e 61 69 20 29 3b 0a 20 20 61 73 73 65 72  p4.ai );.  asser
11f00 74 28 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65  t( pOp[1].opcode
11f10 3d 3d 4f 50 5f 43 6f 6d 70 61 72 65 20 29 3b 0a  ==OP_Compare );.
11f20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d    assert( pOp[1]
11f30 2e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 45 52  .p5 & OPFLAG_PER
11f40 4d 55 54 45 20 29 3b 0a 20 20 62 72 65 61 6b 3b  MUTE );.  break;
11f50 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
11f60 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50 33 20  ompare P1 P2 P3 
11f70 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
11f80 73 3a 20 72 5b 50 31 40 50 33 5d 20 3c 2d 3e 20  s: r[P1@P3] <-> 
11f90 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 43  r[P2@P3].**.** C
11fa0 6f 6d 70 61 72 65 20 74 77 6f 20 76 65 63 74 6f  ompare two vecto
11fb0 72 73 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  rs of registers 
11fc0 69 6e 20 72 65 67 28 50 31 29 2e 2e 72 65 67 28  in reg(P1)..reg(
11fd0 50 31 2b 50 33 2d 31 29 20 28 63 61 6c 6c 20 74  P1+P3-1) (call t
11fe0 68 69 73 0a 2a 2a 20 76 65 63 74 6f 72 20 22 41  his.** vector "A
11ff0 22 29 20 61 6e 64 20 69 6e 20 72 65 67 28 50 32  ") and in reg(P2
12000 29 2e 2e 72 65 67 28 50 32 2b 50 33 2d 31 29 20  )..reg(P2+P3-1) 
12010 28 22 42 22 29 2e 20 20 53 61 76 65 20 74 68 65  ("B").  Save the
12020 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68   result of.** th
12030 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 6f 72  e comparison for
12040 20 75 73 65 20 62 79 20 74 68 65 20 6e 65 78 74   use by the next
12050 20 4f 50 5f 4a 75 6d 70 20 69 6e 73 74 72 75 63   OP_Jump instruc
12060 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68  t..**.** If P5 h
12070 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 50 45  as the OPFLAG_PE
12080 52 4d 55 54 45 20 62 69 74 20 73 65 74 2c 20 74  RMUTE bit set, t
12090 68 65 6e 20 74 68 65 20 6f 72 64 65 72 20 6f 66  hen the order of
120a0 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 0a 2a   comparison is.*
120b0 2a 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  * determined by 
120c0 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  the most recent 
120d0 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 6f  OP_Permutation o
120e0 70 65 72 61 74 6f 72 2e 20 20 49 66 20 74 68 65  perator.  If the
120f0 0a 2a 2a 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55  .** OPFLAG_PERMU
12100 54 45 20 62 69 74 20 69 73 20 63 6c 65 61 72 2c  TE bit is clear,
12110 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 61   then register a
12120 72 65 20 63 6f 6d 70 61 72 65 64 20 69 6e 20 73  re compared in s
12130 65 71 75 65 6e 74 69 61 6c 0a 2a 2a 20 6f 72 64  equential.** ord
12140 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  er..**.** P4 is 
12150 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74  a KeyInfo struct
12160 75 72 65 20 74 68 61 74 20 64 65 66 69 6e 65 73  ure that defines
12170 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
12180 6e 63 65 73 20 61 6e 64 20 73 6f 72 74 0a 2a 2a  nces and sort.**
12190 20 6f 72 64 65 72 73 20 66 6f 72 20 74 68 65 20   orders for the 
121a0 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 65  comparison.  The
121b0 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 61 70 70   permutation app
121c0 6c 69 65 73 20 74 6f 20 72 65 67 69 73 74 65 72  lies to register
121d0 73 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 20  s.** only.  The 
121e0 4b 65 79 49 6e 66 6f 20 65 6c 65 6d 65 6e 74 73  KeyInfo elements
121f0 20 61 72 65 20 75 73 65 64 20 73 65 71 75 65 6e   are used sequen
12200 74 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  tially..**.** Th
12210 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  e comparison is 
12220 61 20 73 6f 72 74 20 63 6f 6d 70 61 72 69 73 6f  a sort compariso
12230 6e 2c 20 73 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70  n, so NULLs comp
12240 61 72 65 20 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55  are equal,.** NU
12250 4c 4c 73 20 61 72 65 20 6c 65 73 73 20 74 68 61  LLs are less tha
12260 6e 20 6e 75 6d 62 65 72 73 2c 20 6e 75 6d 62 65  n numbers, numbe
12270 72 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e  rs are less than
12280 20 73 74 72 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64   strings,.** and
12290 20 73 74 72 69 6e 67 73 20 61 72 65 20 6c 65 73   strings are les
122a0 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f  s than blobs..*/
122b0 0a 63 61 73 65 20 4f 50 5f 43 6f 6d 70 61 72 65  .case OP_Compare
122c0 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69  : {.  int n;.  i
122d0 6e 74 20 69 3b 0a 20 20 69 6e 74 20 70 31 3b 0a  nt i;.  int p1;.
122e0 20 20 69 6e 74 20 70 32 3b 0a 20 20 63 6f 6e 73    int p2;.  cons
122f0 74 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49  t KeyInfo *pKeyI
12300 6e 66 6f 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a  nfo;.  int idx;.
12310 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c    CollSeq *pColl
12320 3b 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e  ;    /* Collatin
12330 67 20 73 65 71 75 65 6e 63 65 20 74 6f 20 75 73  g sequence to us
12340 65 20 6f 6e 20 74 68 69 73 20 74 65 72 6d 20 2a  e on this term *
12350 2f 0a 20 20 69 6e 74 20 62 52 65 76 3b 20 20 20  /.  int bRev;   
12360 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 66         /* True f
12370 6f 72 20 44 45 53 43 45 4e 44 49 4e 47 20 73 6f  or DESCENDING so
12380 72 74 20 6f 72 64 65 72 20 2a 2f 0a 20 20 69 6e  rt order */.  in
12390 74 20 2a 61 50 65 72 6d 75 74 65 3b 20 20 20 20  t *aPermute;    
123a0 20 2f 2a 20 54 68 65 20 70 65 72 6d 75 74 61 74   /* The permutat
123b0 69 6f 6e 20 2a 2f 0a 0a 20 20 69 66 28 20 28 70  ion */..  if( (p
123c0 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
123d0 50 45 52 4d 55 54 45 29 3d 3d 30 20 29 7b 0a 20  PERMUTE)==0 ){. 
123e0 20 20 20 61 50 65 72 6d 75 74 65 20 3d 20 30 3b     aPermute = 0;
123f0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
12400 73 65 72 74 28 20 70 4f 70 3e 61 4f 70 20 29 3b  sert( pOp>aOp );
12410 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
12420 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  [-1].opcode==OP_
12430 50 65 72 6d 75 74 61 74 69 6f 6e 20 29 3b 0a 20  Permutation );. 
12440 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d     assert( pOp[-
12450 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  1].p4type==P4_IN
12460 54 41 52 52 41 59 20 29 3b 0a 20 20 20 20 61 50  TARRAY );.    aP
12470 65 72 6d 75 74 65 20 3d 20 70 4f 70 5b 2d 31 5d  ermute = pOp[-1]
12480 2e 70 34 2e 61 69 20 2b 20 31 3b 0a 20 20 20 20  .p4.ai + 1;.    
12490 61 73 73 65 72 74 28 20 61 50 65 72 6d 75 74 65  assert( aPermute
124a0 21 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d  !=0 );.  }.  n =
124b0 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b 65 79   pOp->p3;.  pKey
124c0 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Info = pOp->p4.p
124d0 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72  KeyInfo;.  asser
124e0 74 28 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73 65  t( n>0 );.  asse
124f0 72 74 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30 20  rt( pKeyInfo!=0 
12500 29 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70  );.  p1 = pOp->p
12510 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70  1;.  p2 = pOp->p
12520 32 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  2;.#ifdef SQLITE
12530 5f 44 45 42 55 47 0a 20 20 69 66 28 20 61 50 65  _DEBUG.  if( aPe
12540 72 6d 75 74 65 20 29 7b 0a 20 20 20 20 69 6e 74  rmute ){.    int
12550 20 6b 2c 20 6d 78 20 3d 20 30 3b 0a 20 20 20 20   k, mx = 0;.    
12560 66 6f 72 28 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b  for(k=0; k<n; k+
12570 2b 29 20 69 66 28 20 61 50 65 72 6d 75 74 65 5b  +) if( aPermute[
12580 6b 5d 3e 6d 78 20 29 20 6d 78 20 3d 20 61 50 65  k]>mx ) mx = aPe
12590 72 6d 75 74 65 5b 6b 5d 3b 0a 20 20 20 20 61 73  rmute[k];.    as
125a0 73 65 72 74 28 20 70 31 3e 30 20 26 26 20 70 31  sert( p1>0 && p1
125b0 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  +mx<=(p->nMem+1 
125c0 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  - p->nCursor)+1 
125d0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
125e0 32 3e 30 20 26 26 20 70 32 2b 6d 78 3c 3d 28 70  2>0 && p2+mx<=(p
125f0 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
12600 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 65  ursor)+1 );.  }e
12610 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
12620 20 70 31 3e 30 20 26 26 20 70 31 2b 6e 3c 3d 28   p1>0 && p1+n<=(
12630 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
12640 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20  Cursor)+1 );.   
12650 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 26 26   assert( p2>0 &&
12660 20 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b   p2+n<=(p->nMem+
12670 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b  1 - p->nCursor)+
12680 31 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20  1 );.  }.#endif 
12690 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20  /* SQLITE_DEBUG 
126a0 2a 2f 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  */.  for(i=0; i<
126b0 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 64 78  n; i++){.    idx
126c0 20 3d 20 61 50 65 72 6d 75 74 65 20 3f 20 61 50   = aPermute ? aP
126d0 65 72 6d 75 74 65 5b 69 5d 20 3a 20 69 3b 0a 20  ermute[i] : i;. 
126e0 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
126f0 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 31 2b 69  Valid(&aMem[p1+i
12700 64 78 5d 29 20 29 3b 0a 20 20 20 20 61 73 73 65  dx]) );.    asse
12710 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
12720 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 20 29 3b  aMem[p2+idx]) );
12730 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
12740 41 43 45 28 70 31 2b 69 64 78 2c 20 26 61 4d 65  ACE(p1+idx, &aMe
12750 6d 5b 70 31 2b 69 64 78 5d 29 3b 0a 20 20 20 20  m[p1+idx]);.    
12760 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
12770 32 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70 32 2b  2+idx, &aMem[p2+
12780 69 64 78 5d 29 3b 0a 20 20 20 20 61 73 73 65 72  idx]);.    asser
12790 74 28 20 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e  t( i<pKeyInfo->n
127a0 4b 65 79 46 69 65 6c 64 20 29 3b 0a 20 20 20 20  KeyField );.    
127b0 70 43 6f 6c 6c 20 3d 20 70 4b 65 79 49 6e 66 6f  pColl = pKeyInfo
127c0 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b 0a 20 20 20 20  ->aColl[i];.    
127d0 62 52 65 76 20 3d 20 70 4b 65 79 49 6e 66 6f 2d  bRev = pKeyInfo-
127e0 3e 61 53 6f 72 74 4f 72 64 65 72 5b 69 5d 3b 0a  >aSortOrder[i];.
127f0 20 20 20 20 69 43 6f 6d 70 61 72 65 20 3d 20 73      iCompare = s
12800 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65  qlite3MemCompare
12810 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 2c 20  (&aMem[p1+idx], 
12820 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 2c 20 70  &aMem[p2+idx], p
12830 43 6f 6c 6c 29 3b 0a 20 20 20 20 69 66 28 20 69  Coll);.    if( i
12840 43 6f 6d 70 61 72 65 20 29 7b 0a 20 20 20 20 20  Compare ){.     
12850 20 69 66 28 20 62 52 65 76 20 29 20 69 43 6f 6d   if( bRev ) iCom
12860 70 61 72 65 20 3d 20 2d 69 43 6f 6d 70 61 72 65  pare = -iCompare
12870 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
12880 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
12890 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
128a0 4a 75 6d 70 20 50 31 20 50 32 20 50 33 20 2a 20  Jump P1 P2 P3 * 
128b0 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  *.**.** Jump to 
128c0 74 68 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  the instruction 
128d0 61 74 20 61 64 64 72 65 73 73 20 50 31 2c 20 50  at address P1, P
128e0 32 2c 20 6f 72 20 50 33 20 64 65 70 65 6e 64 69  2, or P3 dependi
128f0 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a  ng on whether.**
12900 20 69 6e 20 74 68 65 20 6d 6f 73 74 20 72 65 63   in the most rec
12910 65 6e 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 69  ent OP_Compare i
12920 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 65 20 50  nstruction the P
12930 31 20 76 65 63 74 6f 72 20 77 61 73 20 6c 65 73  1 vector was les
12940 73 20 74 68 61 6e 0a 2a 2a 20 65 71 75 61 6c 20  s than.** equal 
12950 74 6f 2c 20 6f 72 20 67 72 65 61 74 65 72 20 74  to, or greater t
12960 68 61 6e 20 74 68 65 20 50 32 20 76 65 63 74 6f  han the P2 vecto
12970 72 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  r, respectively.
12980 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 75 6d 70  .*/.case OP_Jump
12990 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
129a0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28  /* jump */.  if(
129b0 20 69 43 6f 6d 70 61 72 65 3c 30 20 29 7b 0a 20   iCompare<0 ){. 
129c0 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
129d0 65 6e 28 30 2c 34 29 3b 20 70 4f 70 20 3d 20 26  en(0,4); pOp = &
129e0 61 4f 70 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d  aOp[pOp->p1 - 1]
129f0 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69 43  ;.  }else if( iC
12a00 6f 6d 70 61 72 65 3d 3d 30 20 29 7b 0a 20 20 20  ompare==0 ){.   
12a10 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
12a20 28 31 2c 34 29 3b 20 70 4f 70 20 3d 20 26 61 4f  (1,4); pOp = &aO
12a30 70 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a  p[pOp->p2 - 1];.
12a40 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62    }else{.    Vdb
12a50 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c 34  eBranchTaken(2,4
12a60 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f  ); pOp = &aOp[pO
12a70 70 2d 3e 70 33 20 2d 20 31 5d 3b 0a 20 20 7d 0a  p->p3 - 1];.  }.
12a80 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
12a90 70 63 6f 64 65 3a 20 41 6e 64 20 50 31 20 50 32  pcode: And P1 P2
12aa0 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
12ab0 73 69 73 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31  sis: r[P3]=(r[P1
12ac0 5d 20 26 26 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a  ] && r[P2]).**.*
12ad0 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63  * Take the logic
12ae0 61 6c 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61  al AND of the va
12af0 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
12b00 73 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a  s P1 and P2 and.
12b10 2a 2a 20 77 72 69 74 65 20 74 68 65 20 72 65 73  ** write the res
12b20 75 6c 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ult into registe
12b30 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65  r P3..**.** If e
12b40 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20 69  ither P1 or P2 i
12b50 73 20 30 20 28 66 61 6c 73 65 29 20 74 68 65 6e  s 0 (false) then
12b60 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 30   the result is 0
12b70 20 65 76 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20   even if.** the 
12b80 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  other input is N
12b90 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64  ULL.  A NULL and
12ba0 20 74 72 75 65 20 6f 72 20 74 77 6f 20 4e 55 4c   true or two NUL
12bb0 4c 73 20 67 69 76 65 0a 2a 2a 20 61 20 4e 55 4c  Ls give.** a NUL
12bc0 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a 20  L output..*/./* 
12bd0 4f 70 63 6f 64 65 3a 20 4f 72 20 50 31 20 50 32  Opcode: Or P1 P2
12be0 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
12bf0 73 69 73 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31  sis: r[P3]=(r[P1
12c00 5d 20 7c 7c 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a  ] || r[P2]).**.*
12c10 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63  * Take the logic
12c20 61 6c 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c  al OR of the val
12c30 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ues in register 
12c40 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a  P1 and P2 and.**
12c50 20 73 74 6f 72 65 20 74 68 65 20 61 6e 73 77 65   store the answe
12c60 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  r in register P3
12c70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65  ..**.** If eithe
12c80 72 20 50 31 20 6f 72 20 50 32 20 69 73 20 6e 6f  r P1 or P2 is no
12c90 6e 7a 65 72 6f 20 28 74 72 75 65 29 20 74 68 65  nzero (true) the
12ca0 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
12cb0 31 20 28 74 72 75 65 29 0a 2a 2a 20 65 76 65 6e  1 (true).** even
12cc0 20 69 66 20 74 68 65 20 6f 74 68 65 72 20 69 6e   if the other in
12cd0 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20  put is NULL.  A 
12ce0 4e 55 4c 4c 20 61 6e 64 20 66 61 6c 73 65 20 6f  NULL and false o
12cf0 72 20 74 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67  r two NULLs.** g
12d00 69 76 65 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75  ive a NULL outpu
12d10 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 6e  t..*/.case OP_An
12d20 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d:              
12d30 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 41 4e  /* same as TK_AN
12d40 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  D, in1, in2, out
12d50 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 72 3a  3 */.case OP_Or:
12d60 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
12d70 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4f 52 2c  * same as TK_OR,
12d80 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
12d90 2a 2f 0a 20 20 69 6e 74 20 76 31 3b 20 20 20 20  */.  int v1;    
12da0 2f 2a 20 4c 65 66 74 20 6f 70 65 72 61 6e 64 3a  /* Left operand:
12db0 20 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54    0==FALSE, 1==T
12dc0 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20  RUE, 2==UNKNOWN 
12dd0 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74  or NULL */.  int
12de0 20 76 32 3b 20 20 20 20 2f 2a 20 52 69 67 68 74   v2;    /* Right
12df0 20 6f 70 65 72 61 6e 64 3a 20 30 3d 3d 46 41 4c   operand: 0==FAL
12e00 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d  SE, 1==TRUE, 2==
12e10 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20  UNKNOWN or NULL 
12e20 2a 2f 0a 0a 20 20 76 31 20 3d 20 73 71 6c 69 74  */..  v1 = sqlit
12e30 65 33 56 64 62 65 42 6f 6f 6c 65 61 6e 56 61 6c  e3VdbeBooleanVal
12e40 75 65 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  ue(&aMem[pOp->p1
12e50 5d 2c 20 32 29 3b 0a 20 20 76 32 20 3d 20 73 71  ], 2);.  v2 = sq
12e60 6c 69 74 65 33 56 64 62 65 42 6f 6f 6c 65 61 6e  lite3VdbeBoolean
12e70 56 61 6c 75 65 28 26 61 4d 65 6d 5b 70 4f 70 2d  Value(&aMem[pOp-
12e80 3e 70 32 5d 2c 20 32 29 3b 0a 20 20 69 66 28 20  >p2], 2);.  if( 
12e90 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
12ea0 41 6e 64 20 29 7b 0a 20 20 20 20 73 74 61 74 69  And ){.    stati
12eb0 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  c const unsigned
12ec0 20 63 68 61 72 20 61 6e 64 5f 6c 6f 67 69 63 5b   char and_logic[
12ed0 5d 20 3d 20 7b 20 30 2c 20 30 2c 20 30 2c 20 30  ] = { 0, 0, 0, 0
12ee0 2c 20 31 2c 20 32 2c 20 30 2c 20 32 2c 20 32 20  , 1, 2, 0, 2, 2 
12ef0 7d 3b 0a 20 20 20 20 76 31 20 3d 20 61 6e 64 5f  };.    v1 = and_
12f00 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a  logic[v1*3+v2];.
12f10 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 74 61    }else{.    sta
12f20 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  tic const unsign
12f30 65 64 20 63 68 61 72 20 6f 72 5f 6c 6f 67 69 63  ed char or_logic
12f40 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c 20 32 2c 20  [] = { 0, 1, 2, 
12f50 31 2c 20 31 2c 20 31 2c 20 32 2c 20 31 2c 20 32  1, 1, 1, 2, 1, 2
12f60 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 6f 72 5f   };.    v1 = or_
12f70 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a  logic[v1*3+v2];.
12f80 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d    }.  pOut = &aM
12f90 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
12fa0 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20 20 20 20  f( v1==2 ){.    
12fb0 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
12fc0 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  Out, MEM_Null);.
12fd0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75    }else{.    pOu
12fe0 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a 20 20 20  t->u.i = v1;.   
12ff0 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
13000 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
13010 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
13020 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 54 72 75  /* Opcode: IsTru
13030 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  e P1 P2 P3 P4 *.
13040 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
13050 32 5d 20 3d 20 63 6f 61 6c 65 73 63 65 28 72 5b  2] = coalesce(r[
13060 50 31 5d 3d 3d 54 52 55 45 2c 50 33 29 20 5e 20  P1]==TRUE,P3) ^ 
13070 50 34 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  P4.**.** This op
13080 63 6f 64 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20  code implements 
13090 74 68 65 20 49 53 20 54 52 55 45 2c 20 49 53 20  the IS TRUE, IS 
130a0 46 41 4c 53 45 2c 20 49 53 20 4e 4f 54 20 54 52  FALSE, IS NOT TR
130b0 55 45 2c 20 61 6e 64 0a 2a 2a 20 49 53 20 4e 4f  UE, and.** IS NO
130c0 54 20 46 41 4c 53 45 20 6f 70 65 72 61 74 6f 72  T FALSE operator
130d0 73 2e 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  s..**.** Interpr
130e0 65 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  et the value in 
130f0 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20 61  register P1 as a
13100 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 20   boolean value. 
13110 20 53 74 6f 72 65 20 74 68 61 74 0a 2a 2a 20 62   Store that.** b
13120 6f 6f 6c 65 61 6e 20 28 61 20 30 20 6f 72 20 31  oolean (a 0 or 1
13130 29 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  ) in register P2
13140 2e 20 20 4f 72 20 69 66 20 74 68 65 20 76 61 6c  .  Or if the val
13150 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
13160 31 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74  1 is .** NULL, t
13170 68 65 6e 20 74 68 65 20 50 33 20 69 73 20 73 74  hen the P3 is st
13180 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
13190 20 50 32 2e 20 20 49 6e 76 65 72 74 20 74 68 65   P2.  Invert the
131a0 20 61 6e 73 77 65 72 20 69 66 20 50 34 0a 2a 2a   answer if P4.**
131b0 20 69 73 20 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   is 1..**.** The
131c0 20 6c 6f 67 69 63 20 69 73 20 73 75 6d 6d 61 72   logic is summar
131d0 69 7a 65 64 20 6c 69 6b 65 20 74 68 69 73 3a 0a  ized like this:.
131e0 2a 2a 0a 2a 2a 20 3c 75 6c 3e 20 0a 2a 2a 20 3c  **.** <ul> .** <
131f0 6c 69 3e 20 49 66 20 50 33 3d 3d 30 20 61 6e 64  li> If P3==0 and
13200 20 50 34 3d 3d 30 20 20 74 68 65 6e 20 20 72 5b   P4==0  then  r[
13210 50 32 5d 20 3a 3d 20 72 5b 50 31 5d 20 49 53 20  P2] := r[P1] IS 
13220 54 52 55 45 0a 2a 2a 20 3c 6c 69 3e 20 49 66 20  TRUE.** <li> If 
13230 50 33 3d 3d 31 20 61 6e 64 20 50 34 3d 3d 31 20  P3==1 and P4==1 
13240 20 74 68 65 6e 20 20 72 5b 50 32 5d 20 3a 3d 20   then  r[P2] := 
13250 72 5b 50 31 5d 20 49 53 20 46 41 4c 53 45 0a 2a  r[P1] IS FALSE.*
13260 2a 20 3c 6c 69 3e 20 49 66 20 50 33 3d 3d 30 20  * <li> If P3==0 
13270 61 6e 64 20 50 34 3d 3d 31 20 20 74 68 65 6e 20  and P4==1  then 
13280 20 72 5b 50 32 5d 20 3a 3d 20 72 5b 50 31 5d 20   r[P2] := r[P1] 
13290 49 53 20 4e 4f 54 20 54 52 55 45 0a 2a 2a 20 3c  IS NOT TRUE.** <
132a0 6c 69 3e 20 49 66 20 50 33 3d 3d 31 20 61 6e 64  li> If P3==1 and
132b0 20 50 34 3d 3d 30 20 20 74 68 65 6e 20 20 72 5b   P4==0  then  r[
132c0 50 32 5d 20 3a 3d 20 72 5b 50 31 5d 20 49 53 20  P2] := r[P1] IS 
132d0 4e 4f 54 20 46 41 4c 53 45 0a 2a 2a 20 3c 2f 75  NOT FALSE.** </u
132e0 6c 3e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73  l>.*/.case OP_Is
132f0 54 72 75 65 3a 20 7b 20 20 20 20 20 20 20 20 20  True: {         
13300 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 6f 75        /* in1, ou
13310 74 32 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  t2 */.  assert( 
13320 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
13330 49 4e 54 33 32 20 29 3b 0a 20 20 61 73 73 65 72  INT32 );.  asser
13340 74 28 20 70 4f 70 2d 3e 70 34 2e 69 3d 3d 30 20  t( pOp->p4.i==0 
13350 7c 7c 20 70 4f 70 2d 3e 70 34 2e 69 3d 3d 31 20  || pOp->p4.i==1 
13360 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
13370 2d 3e 70 33 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  ->p3==0 || pOp->
13380 70 33 3d 3d 31 20 29 3b 0a 20 20 73 71 6c 69 74  p3==1 );.  sqlit
13390 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
133a0 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  4(&aMem[pOp->p2]
133b0 2c 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ,.      sqlite3V
133c0 64 62 65 42 6f 6f 6c 65 61 6e 56 61 6c 75 65 28  dbeBooleanValue(
133d0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20  &aMem[pOp->p1], 
133e0 70 4f 70 2d 3e 70 33 29 20 5e 20 70 4f 70 2d 3e  pOp->p3) ^ pOp->
133f0 70 34 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  p4.i);.  break;.
13400 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  }../* Opcode: No
13410 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
13420 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
13430 3d 20 21 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49  = !r[P1].**.** I
13440 6e 74 65 72 70 72 65 74 20 74 68 65 20 76 61 6c  nterpret the val
13450 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
13460 31 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76  1 as a boolean v
13470 61 6c 75 65 2e 20 20 53 74 6f 72 65 20 74 68 65  alue.  Store the
13480 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70  .** boolean comp
13490 6c 65 6d 65 6e 74 20 69 6e 20 72 65 67 69 73 74  lement in regist
134a0 65 72 20 50 32 2e 20 20 49 66 20 74 68 65 20 76  er P2.  If the v
134b0 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
134c0 20 50 31 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c   P1 is .** NULL,
134d0 20 74 68 65 6e 20 61 20 4e 55 4c 4c 20 69 73 20   then a NULL is 
134e0 73 74 6f 72 65 64 20 69 6e 20 50 32 2e 0a 2a 2f  stored in P2..*/
134f0 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20  .case OP_Not: { 
13500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
13510 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54  * same as TK_NOT
13520 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20  , in1, out2 */. 
13530 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
13540 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p1];.  pOut =
13550 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
13560 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
13570 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d  ags & MEM_Null)=
13580 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
13590 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
135a0 28 70 4f 75 74 2c 20 21 73 71 6c 69 74 65 33 56  (pOut, !sqlite3V
135b0 64 62 65 42 6f 6f 6c 65 61 6e 56 61 6c 75 65 28  dbeBooleanValue(
135c0 70 49 6e 31 2c 30 29 29 3b 0a 20 20 7d 65 6c 73  pIn1,0));.  }els
135d0 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  e{.    sqlite3Vd
135e0 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
135f0 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  t);.  }.  break;
13600 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42  .}../* Opcode: B
13610 69 74 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20  itNot P1 P2 * * 
13620 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
13630 5b 50 32 5d 3d 20 7e 72 5b 50 31 5d 0a 2a 2a 0a  [P2]= ~r[P1].**.
13640 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
13650 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
13660 73 74 65 72 20 50 31 20 61 73 20 61 6e 20 69 6e  ster P1 as an in
13670 74 65 67 65 72 2e 20 20 53 74 6f 72 65 20 74 68  teger.  Store th
13680 65 0a 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65  e.** ones-comple
13690 6d 65 6e 74 20 6f 66 20 74 68 65 20 50 31 20 76  ment of the P1 v
136a0 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74  alue into regist
136b0 65 72 20 50 32 2e 20 20 49 66 20 50 31 20 68 6f  er P2.  If P1 ho
136c0 6c 64 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20 74 68  lds.** a NULL th
136d0 65 6e 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20  en store a NULL 
136e0 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  in P2..*/.case O
136f0 50 5f 42 69 74 4e 6f 74 3a 20 7b 20 20 20 20 20  P_BitNot: {     
13700 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
13710 61 73 20 54 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e  as TK_BITNOT, in
13720 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e  1, out2 */.  pIn
13730 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
13740 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  1];.  pOut = &aM
13750 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73  em[pOp->p2];.  s
13760 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
13770 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 69 66  Null(pOut);.  if
13780 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
13790 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b   MEM_Null)==0 ){
137a0 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
137b0 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20   = MEM_Int;.    
137c0 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 7e 73 71 6c  pOut->u.i = ~sql
137d0 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
137e0 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72  (pIn1);.  }.  br
137f0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
13800 65 3a 20 4f 6e 63 65 20 50 31 20 50 32 20 2a 20  e: Once P1 P2 * 
13810 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c 20 74  * *.**.** Fall t
13820 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
13830 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  xt instruction t
13840 68 65 20 66 69 72 73 74 20 74 69 6d 65 20 74 68  he first time th
13850 69 73 20 6f 70 63 6f 64 65 20 69 73 0a 2a 2a 20  is opcode is.** 
13860 65 6e 63 6f 75 6e 74 65 72 65 64 20 6f 6e 20 65  encountered on e
13870 61 63 68 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f  ach invocation o
13880 66 20 74 68 65 20 62 79 74 65 2d 63 6f 64 65 20  f the byte-code 
13890 70 72 6f 67 72 61 6d 2e 20 20 4a 75 6d 70 20 74  program.  Jump t
138a0 6f 20 50 32 0a 2a 2a 20 6f 6e 20 74 68 65 20 73  o P2.** on the s
138b0 65 63 6f 6e 64 20 61 6e 64 20 61 6c 6c 20 73 75  econd and all su
138c0 62 73 65 71 75 65 6e 74 20 65 6e 63 6f 75 6e 74  bsequent encount
138d0 65 72 73 20 64 75 72 69 6e 67 20 74 68 65 20 73  ers during the s
138e0 61 6d 65 20 69 6e 76 6f 63 61 74 69 6f 6e 2e 0a  ame invocation..
138f0 2a 2a 0a 2a 2a 20 54 6f 70 2d 6c 65 76 65 6c 20  **.** Top-level 
13900 70 72 6f 67 72 61 6d 73 20 64 65 74 65 72 6d 69  programs determi
13910 6e 65 20 66 69 72 73 74 20 69 6e 76 6f 63 61 74  ne first invocat
13920 69 6f 6e 20 62 79 20 63 6f 6d 70 61 72 69 6e 67  ion by comparing
13930 20 74 68 65 20 50 31 0a 2a 2a 20 6f 70 65 72 61   the P1.** opera
13940 6e 64 20 61 67 61 69 6e 73 74 20 74 68 65 20 50  nd against the P
13950 31 20 6f 70 65 72 61 6e 64 20 6f 6e 20 74 68 65  1 operand on the
13960 20 4f 50 5f 49 6e 69 74 20 6f 70 63 6f 64 65 20   OP_Init opcode 
13970 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  at the beginning
13980 0a 2a 2a 20 6f 66 20 74 68 65 20 70 72 6f 67 72  .** of the progr
13990 61 6d 2e 20 20 49 66 20 74 68 65 20 50 31 20 76  am.  If the P1 v
139a0 61 6c 75 65 73 20 64 69 66 66 65 72 2c 20 74 68  alues differ, th
139b0 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  en fall through 
139c0 61 6e 64 20 6d 61 6b 65 0a 2a 2a 20 74 68 65 20  and make.** the 
139d0 50 31 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64  P1 of this opcod
139e0 65 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 50  e equal to the P
139f0 31 20 6f 66 20 4f 50 5f 49 6e 69 74 2e 20 20 49  1 of OP_Init.  I
13a00 66 20 50 31 20 76 61 6c 75 65 73 20 61 72 65 0a  f P1 values are.
13a10 2a 2a 20 74 68 65 20 73 61 6d 65 20 74 68 65 6e  ** the same then
13a20 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e 0a   take the jump..
13a30 2a 2a 0a 2a 2a 20 46 6f 72 20 73 75 62 70 72 6f  **.** For subpro
13a40 67 72 61 6d 73 2c 20 74 68 65 72 65 20 69 73 20  grams, there is 
13a50 61 20 62 69 74 6d 61 73 6b 20 69 6e 20 74 68 65  a bitmask in the
13a60 20 56 64 62 65 46 72 61 6d 65 20 74 68 61 74 20   VdbeFrame that 
13a70 64 65 74 65 72 6d 69 6e 65 73 0a 2a 2a 20 77 68  determines.** wh
13a80 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
13a90 20 6a 75 6d 70 20 73 68 6f 75 6c 64 20 62 65 20   jump should be 
13aa0 74 61 6b 65 6e 2e 20 20 54 68 65 20 62 69 74 6d  taken.  The bitm
13ab0 61 73 6b 20 69 73 20 6e 65 63 65 73 73 61 72 79  ask is necessary
13ac0 0a 2a 2a 20 62 65 63 61 75 73 65 20 74 68 65 20  .** because the 
13ad0 73 65 6c 66 2d 61 6c 74 65 72 69 6e 67 20 63 6f  self-altering co
13ae0 64 65 20 74 72 69 63 6b 20 64 6f 65 73 20 6e 6f  de trick does no
13af0 74 20 77 6f 72 6b 20 66 6f 72 20 72 65 63 75 72  t work for recur
13b00 73 69 76 65 0a 2a 2a 20 74 72 69 67 67 65 72 73  sive.** triggers
13b10 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 6e 63  ..*/.case OP_Onc
13b20 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  e: {            
13b30 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 75 33   /* jump */.  u3
13b40 32 20 69 41 64 64 72 3b 20 20 20 20 20 20 20 20  2 iAddr;        
13b50 20 20 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65          /* Addre
13b60 73 73 20 6f 66 20 74 68 69 73 20 69 6e 73 74 72  ss of this instr
13b70 75 63 74 69 6f 6e 20 2a 2f 0a 20 20 61 73 73 65  uction */.  asse
13b80 72 74 28 20 70 2d 3e 61 4f 70 5b 30 5d 2e 6f 70  rt( p->aOp[0].op
13b90 63 6f 64 65 3d 3d 4f 50 5f 49 6e 69 74 20 29 3b  code==OP_Init );
13ba0 0a 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65  .  if( p->pFrame
13bb0 20 29 7b 0a 20 20 20 20 69 41 64 64 72 20 3d 20   ){.    iAddr = 
13bc0 28 69 6e 74 29 28 70 4f 70 20 2d 20 70 2d 3e 61  (int)(pOp - p->a
13bd0 4f 70 29 3b 0a 20 20 20 20 69 66 28 20 28 70 2d  Op);.    if( (p-
13be0 3e 70 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 5b 69  >pFrame->aOnce[i
13bf0 41 64 64 72 2f 38 5d 20 26 20 28 31 3c 3c 28 69  Addr/8] & (1<<(i
13c00 41 64 64 72 20 26 20 37 29 29 29 21 3d 30 20 29  Addr & 7)))!=0 )
13c10 7b 0a 20 20 20 20 20 20 56 64 62 65 42 72 61 6e  {.      VdbeBran
13c20 63 68 54 61 6b 65 6e 28 31 2c 20 32 29 3b 0a 20  chTaken(1, 2);. 
13c30 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74       goto jump_t
13c40 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20 20 20  o_p2;.    }.    
13c50 70 2d 3e 70 46 72 61 6d 65 2d 3e 61 4f 6e 63 65  p->pFrame->aOnce
13c60 5b 69 41 64 64 72 2f 38 5d 20 7c 3d 20 31 3c 3c  [iAddr/8] |= 1<<
13c70 28 69 41 64 64 72 20 26 20 37 29 3b 0a 20 20 7d  (iAddr & 7);.  }
13c80 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20 70 2d  else{.    if( p-
13c90 3e 61 4f 70 5b 30 5d 2e 70 31 3d 3d 70 4f 70 2d  >aOp[0].p1==pOp-
13ca0 3e 70 31 20 29 7b 0a 20 20 20 20 20 20 56 64 62  >p1 ){.      Vdb
13cb0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 20  eBranchTaken(1, 
13cc0 32 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a  2);.      goto j
13cd0 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d  ump_to_p2;.    }
13ce0 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63  .  }.  VdbeBranc
13cf0 68 54 61 6b 65 6e 28 30 2c 20 32 29 3b 0a 20 20  hTaken(0, 2);.  
13d00 70 4f 70 2d 3e 70 31 20 3d 20 70 2d 3e 61 4f 70  pOp->p1 = p->aOp
13d10 5b 30 5d 2e 70 31 3b 0a 20 20 62 72 65 61 6b 3b  [0].p1;.  break;
13d20 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
13d30 66 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  f P1 P2 P3 * *.*
13d40 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20  *.** Jump to P2 
13d50 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  if the value in 
13d60 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 74  register P1 is t
13d70 72 75 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a  rue.  The value.
13d80 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  ** is considered
13d90 20 74 72 75 65 20 69 66 20 69 74 20 69 73 20 6e   true if it is n
13da0 75 6d 65 72 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a  umeric and non-z
13db0 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c  ero.  If the val
13dc0 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e  ue.** in P1 is N
13dd0 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68  ULL then take th
13de0 65 20 6a 75 6d 70 20 69 66 20 61 6e 64 20 6f 6e  e jump if and on
13df0 6c 79 20 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d  ly if P3 is non-
13e00 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  zero..*/.case OP
13e10 5f 49 66 3a 20 20 7b 20 20 20 20 20 20 20 20 20  _If:  {         
13e20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
13e30 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 63 3b 0a 20  n1 */.  int c;. 
13e40 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65   c = sqlite3Vdbe
13e50 42 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 26 61 4d  BooleanValue(&aM
13e60 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 70 4f 70  em[pOp->p1], pOp
13e70 2d 3e 70 33 29 3b 0a 20 20 56 64 62 65 42 72 61  ->p3);.  VdbeBra
13e80 6e 63 68 54 61 6b 65 6e 28 63 21 3d 30 2c 20 32  nchTaken(c!=0, 2
13e90 29 3b 0a 20 20 69 66 28 20 63 20 29 20 67 6f 74  );.  if( c ) got
13ea0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
13eb0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
13ec0 6f 64 65 3a 20 49 66 4e 6f 74 20 50 31 20 50 32  ode: IfNot P1 P2
13ed0 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75   P3 * *.**.** Ju
13ee0 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  mp to P2 if the 
13ef0 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
13f00 72 20 50 31 20 69 73 20 46 61 6c 73 65 2e 20 20  r P1 is False.  
13f10 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20  The value.** is 
13f20 63 6f 6e 73 69 64 65 72 65 64 20 66 61 6c 73 65  considered false
13f30 20 69 66 20 69 74 20 68 61 73 20 61 20 6e 75 6d   if it has a num
13f40 65 72 69 63 20 76 61 6c 75 65 20 6f 66 20 7a 65  eric value of ze
13f50 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  ro.  If the valu
13f60 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55  e.** in P1 is NU
13f70 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65  LL then take the
13f80 20 6a 75 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c   jump if and onl
13f90 79 20 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a  y if P3 is non-z
13fa0 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ero..*/.case OP_
13fb0 49 66 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20  IfNot: {        
13fc0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
13fd0 20 2a 2f 0a 20 20 69 6e 74 20 63 3b 0a 20 20 63   */.  int c;.  c
13fe0 20 3d 20 21 73 71 6c 69 74 65 33 56 64 62 65 42   = !sqlite3VdbeB
13ff0 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 26 61 4d 65  ooleanValue(&aMe
14000 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 21 70 4f 70  m[pOp->p1], !pOp
14010 2d 3e 70 33 29 3b 0a 20 20 56 64 62 65 42 72 61  ->p3);.  VdbeBra
14020 6e 63 68 54 61 6b 65 6e 28 63 21 3d 30 2c 20 32  nchTaken(c!=0, 2
14030 29 3b 0a 20 20 69 66 28 20 63 20 29 20 67 6f 74  );.  if( c ) got
14040 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
14050 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
14060 6f 64 65 3a 20 49 73 4e 75 6c 6c 20 50 31 20 50  ode: IsNull P1 P
14070 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
14080 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3d 3d 4e  sis: if r[P1]==N
14090 55 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  ULL goto P2.**.*
140a0 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20  * Jump to P2 if 
140b0 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
140c0 69 73 74 65 72 20 50 31 20 69 73 20 4e 55 4c 4c  ister P1 is NULL
140d0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73 4e  ..*/.case OP_IsN
140e0 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ull: {          
140f0 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
14100 49 53 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e  ISNULL, jump, in
14110 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
14120 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
14130 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
14140 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
14150 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 2c 20 32 29  MEM_Null)!=0, 2)
14160 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
14170 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
14180 21 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  !=0 ){.    goto 
14190 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
141a0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
141b0 70 63 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c 20 50  pcode: NotNull P
141c0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
141d0 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d  nopsis: if r[P1]
141e0 21 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a  !=NULL goto P2.*
141f0 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20  *.** Jump to P2 
14200 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  if the value in 
14210 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 6e  register P1 is n
14220 6f 74 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61  ot NULL.  .*/.ca
14230 73 65 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b  se OP_NotNull: {
14240 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
14250 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c  ame as TK_NOTNUL
14260 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  L, jump, in1 */.
14270 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
14280 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56 64 62 65 42  Op->p1];.  VdbeB
14290 72 61 6e 63 68 54 61 6b 65 6e 28 20 28 70 49 6e  ranchTaken( (pIn
142a0 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
142b0 75 6c 6c 29 3d 3d 30 2c 20 32 29 3b 0a 20 20 69  ull)==0, 2);.  i
142c0 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
142d0 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
142e0 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f  {.    goto jump_
142f0 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  to_p2;.  }.  bre
14300 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
14310 3a 20 49 66 4e 75 6c 6c 52 6f 77 20 50 31 20 50  : IfNullRow P1 P
14320 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
14330 70 73 69 73 3a 20 69 66 20 50 31 2e 6e 75 6c 6c  psis: if P1.null
14340 52 6f 77 20 74 68 65 6e 20 72 5b 50 33 5d 3d 4e  Row then r[P3]=N
14350 55 4c 4c 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  ULL, goto P2.**.
14360 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 63 75 72  ** Check the cur
14370 73 6f 72 20 50 31 20 74 6f 20 73 65 65 20 69 66  sor P1 to see if
14380 20 69 74 20 69 73 20 63 75 72 72 65 6e 74 6c 79   it is currently
14390 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 61 20 4e   pointing at a N
143a0 55 4c 4c 20 72 6f 77 2e 0a 2a 2a 20 49 66 20 69  ULL row..** If i
143b0 74 20 69 73 2c 20 74 68 65 6e 20 73 65 74 20 72  t is, then set r
143c0 65 67 69 73 74 65 72 20 50 33 20 74 6f 20 4e 55  egister P3 to NU
143d0 4c 4c 20 61 6e 64 20 6a 75 6d 70 20 69 6d 6d 65  LL and jump imme
143e0 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
143f0 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 74 20 6f  * If P1 is not o
14400 6e 20 61 20 4e 55 4c 4c 20 72 6f 77 2c 20 74 68  n a NULL row, th
14410 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  en fall through 
14420 77 69 74 68 6f 75 74 20 6d 61 6b 69 6e 67 20 61  without making a
14430 6e 79 0a 2a 2a 20 63 68 61 6e 67 65 73 2e 0a 2a  ny.** changes..*
14440 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 75 6c 6c  /.case OP_IfNull
14450 52 6f 77 3a 20 7b 20 20 20 20 20 20 20 20 20 2f  Row: {         /
14460 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65  * jump */.  asse
14470 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
14480 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
14490 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
144a0 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  ( p->apCsr[pOp->
144b0 70 31 5d 21 3d 30 20 29 3b 0a 20 20 69 66 28 20  p1]!=0 );.  if( 
144c0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
144d0 5d 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  ]->nullRow ){.  
144e0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
144f0 53 65 74 4e 75 6c 6c 28 61 4d 65 6d 20 2b 20 70  SetNull(aMem + p
14500 4f 70 2d 3e 70 33 29 3b 0a 20 20 20 20 67 6f 74  Op->p3);.    got
14510 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
14520 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  }.  break;.}..#i
14530 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
14540 4c 45 5f 4f 46 46 53 45 54 5f 53 51 4c 5f 46 55  LE_OFFSET_SQL_FU
14550 4e 43 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 66  NC./* Opcode: Of
14560 66 73 65 74 20 50 31 20 50 32 20 50 33 20 2a 20  fset P1 P2 P3 * 
14570 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
14580 5b 50 33 5d 20 3d 20 73 71 6c 69 74 65 5f 6f 66  [P3] = sqlite_of
14590 66 73 65 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20 53  fset(P1).**.** S
145a0 74 6f 72 65 20 69 6e 20 72 65 67 69 73 74 65 72  tore in register
145b0 20 72 5b 50 33 5d 20 74 68 65 20 62 79 74 65 20   r[P3] the byte 
145c0 6f 66 66 73 65 74 20 69 6e 74 6f 20 74 68 65 20  offset into the 
145d0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 68  database file th
145e0 61 74 20 69 73 20 74 68 65 0a 2a 2a 20 73 74 61  at is the.** sta
145f0 72 74 20 6f 66 20 74 68 65 20 70 61 79 6c 6f 61  rt of the payloa
14600 64 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64  d for the record
14610 20 61 74 20 77 68 69 63 68 20 74 68 61 74 20 63   at which that c
14620 75 72 73 6f 72 20 50 31 20 69 73 20 63 75 72 72  ursor P1 is curr
14630 65 6e 74 6c 79 0a 2a 2a 20 70 6f 69 6e 74 69 6e  ently.** pointin
14640 67 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74  g..**.** P2 is t
14650 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  he column number
14660 20 66 6f 72 20 74 68 65 20 61 72 67 75 6d 65 6e   for the argumen
14670 74 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 5f  t to the sqlite_
14680 6f 66 66 73 65 74 28 29 20 66 75 6e 63 74 69 6f  offset() functio
14690 6e 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  n..** This opcod
146a0 65 20 64 6f 65 73 20 6e 6f 74 20 75 73 65 20 50  e does not use P
146b0 32 20 69 74 73 65 6c 66 2c 20 62 75 74 20 74 68  2 itself, but th
146c0 65 20 50 32 20 76 61 6c 75 65 20 69 73 20 75 73  e P2 value is us
146d0 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 63 6f 64  ed by the.** cod
146e0 65 20 67 65 6e 65 72 61 74 6f 72 2e 20 20 54 68  e generator.  Th
146f0 65 20 50 31 2c 20 50 32 2c 20 61 6e 64 20 50 33  e P1, P2, and P3
14700 20 6f 70 65 72 61 6e 64 73 20 74 6f 20 74 68 69   operands to thi
14710 73 20 6f 70 63 6f 64 65 20 61 72 65 20 74 68 65  s opcode are the
14720 0a 2a 2a 20 73 61 6d 65 20 61 73 20 66 6f 72 20  .** same as for 
14730 4f 50 5f 43 6f 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a  OP_Column..**.**
14740 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
14750 6f 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65 20 69  only available i
14760 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70  f SQLite is comp
14770 69 6c 65 64 20 77 69 74 68 20 74 68 65 0a 2a 2a  iled with the.**
14780 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45   -DSQLITE_ENABLE
14790 5f 4f 46 46 53 45 54 5f 53 51 4c 5f 46 55 4e 43  _OFFSET_SQL_FUNC
147a0 20 6f 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65   option..*/.case
147b0 20 4f 50 5f 4f 66 66 73 65 74 3a 20 7b 20 20 20   OP_Offset: {   
147c0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 33 20 2a         /* out3 *
147d0 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
147e0 70 43 3b 20 20 20 20 2f 2a 20 54 68 65 20 56 44  pC;    /* The VD
147f0 42 45 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 61  BE cursor */.  a
14800 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
14810 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
14820 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
14830 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
14840 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 70  p1];.  pOut = &p
14850 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b  ->aMem[pOp->p3];
14860 0a 20 20 69 66 28 20 4e 45 56 45 52 28 70 43 3d  .  if( NEVER(pC=
14870 3d 30 29 20 7c 7c 20 70 43 2d 3e 65 43 75 72 54  =0) || pC->eCurT
14880 79 70 65 21 3d 43 55 52 54 59 50 45 5f 42 54 52  ype!=CURTYPE_BTR
14890 45 45 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  EE ){.    sqlite
148a0 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
148b0 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  pOut);.  }else{.
148c0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
148d0 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c  emSetInt64(pOut,
148e0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4f 66 66   sqlite3BtreeOff
148f0 73 65 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  set(pC->uc.pCurs
14900 6f 72 29 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  or));.  }.  brea
14910 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
14920 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4f 46 46  QLITE_ENABLE_OFF
14930 53 45 54 5f 53 51 4c 5f 46 55 4e 43 20 2a 2f 0a  SET_SQL_FUNC */.
14940 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75  ./* Opcode: Colu
14950 6d 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50  mn P1 P2 P3 P4 P
14960 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  5.** Synopsis: r
14970 5b 50 33 5d 3d 50 58 0a 2a 2a 0a 2a 2a 20 49 6e  [P3]=PX.**.** In
14980 74 65 72 70 72 65 74 20 74 68 65 20 64 61 74 61  terpret the data
14990 20 74 68 61 74 20 63 75 72 73 6f 72 20 50 31 20   that cursor P1 
149a0 70 6f 69 6e 74 73 20 74 6f 20 61 73 20 61 20 73  points to as a s
149b0 74 72 75 63 74 75 72 65 20 62 75 69 6c 74 20 75  tructure built u
149c0 73 69 6e 67 0a 2a 2a 20 74 68 65 20 4d 61 6b 65  sing.** the Make
149d0 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69  Record instructi
149e0 6f 6e 2e 20 20 28 53 65 65 20 74 68 65 20 4d 61  on.  (See the Ma
149f0 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20  keRecord opcode 
14a00 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a 2a  for additional.*
14a10 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * information ab
14a20 6f 75 74 20 74 68 65 20 66 6f 72 6d 61 74 20 6f  out the format o
14a30 66 20 74 68 65 20 64 61 74 61 2e 29 20 20 45 78  f the data.)  Ex
14a40 74 72 61 63 74 20 74 68 65 20 50 32 2d 74 68 20  tract the P2-th 
14a50 63 6f 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74  column.** from t
14a60 68 69 73 20 72 65 63 6f 72 64 2e 20 20 49 66 20  his record.  If 
14a70 74 68 65 72 65 20 61 72 65 20 6c 65 73 73 20 74  there are less t
14a80 68 61 74 20 28 50 32 2b 31 29 20 0a 2a 2a 20 76  hat (P2+1) .** v
14a90 61 6c 75 65 73 20 69 6e 20 74 68 65 20 72 65 63  alues in the rec
14aa0 6f 72 64 2c 20 65 78 74 72 61 63 74 20 61 20 4e  ord, extract a N
14ab0 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76  ULL..**.** The v
14ac0 61 6c 75 65 20 65 78 74 72 61 63 74 65 64 20 69  alue extracted i
14ad0 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
14ae0 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49  ster P3..**.** I
14af0 66 20 74 68 65 20 72 65 63 6f 72 64 20 63 6f 6e  f the record con
14b00 74 61 69 6e 73 20 66 65 77 65 72 20 74 68 61 6e  tains fewer than
14b10 20 50 32 20 66 69 65 6c 64 73 2c 20 74 68 65 6e   P2 fields, then
14b20 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e   extract a NULL.
14b30 20 20 4f 72 2c 0a 2a 2a 20 69 66 20 74 68 65 20    Or,.** if the 
14b40 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61  P4 argument is a
14b50 20 50 34 5f 4d 45 4d 20 75 73 65 20 74 68 65 20   P4_MEM use the 
14b60 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 34 20  value of the P4 
14b70 61 72 67 75 6d 65 6e 74 20 61 73 0a 2a 2a 20 74  argument as.** t
14b80 68 65 20 72 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a  he result..**.**
14b90 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 43   If the OPFLAG_C
14ba0 4c 45 41 52 43 41 43 48 45 20 62 69 74 20 69 73  LEARCACHE bit is
14bb0 20 73 65 74 20 6f 6e 20 50 35 20 61 6e 64 20 50   set on P5 and P
14bc0 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d 74 61  1 is a pseudo-ta
14bd0 62 6c 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74  ble cursor,.** t
14be0 68 65 6e 20 74 68 65 20 63 61 63 68 65 20 6f 66  hen the cache of
14bf0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 72   the cursor is r
14c00 65 73 65 74 20 70 72 69 6f 72 20 74 6f 20 65 78  eset prior to ex
14c10 74 72 61 63 74 69 6e 67 20 74 68 65 20 63 6f 6c  tracting the col
14c20 75 6d 6e 2e 0a 2a 2a 20 54 68 65 20 66 69 72 73  umn..** The firs
14c30 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20 61 67 61 69  t OP_Column agai
14c40 6e 73 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  nst a pseudo-tab
14c50 6c 65 20 61 66 74 65 72 20 74 68 65 20 76 61 6c  le after the val
14c60 75 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e  ue of the conten
14c70 74 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 68 61  t.** register ha
14c80 73 20 63 68 61 6e 67 65 64 20 73 68 6f 75 6c 64  s changed should
14c90 20 68 61 76 65 20 74 68 69 73 20 62 69 74 20 73   have this bit s
14ca0 65 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  et..**.** If the
14cb0 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52   OPFLAG_LENGTHAR
14cc0 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50  G and OPFLAG_TYP
14cd0 45 4f 46 41 52 47 20 62 69 74 73 20 61 72 65 20  EOFARG bits are 
14ce0 73 65 74 20 6f 6e 20 50 35 20 74 68 65 6e 0a 2a  set on P5 then.*
14cf0 2a 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  * the result is 
14d00 67 75 61 72 61 6e 74 65 65 64 20 74 6f 20 6f 6e  guaranteed to on
14d10 6c 79 20 62 65 20 75 73 65 64 20 61 73 20 74 68  ly be used as th
14d20 65 20 61 72 67 75 6d 65 6e 74 20 6f 66 20 61 20  e argument of a 
14d30 6c 65 6e 67 74 68 28 29 0a 2a 2a 20 6f 72 20 74  length().** or t
14d40 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e  ypeof() function
14d50 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
14d60 20 54 68 65 20 6c 6f 61 64 69 6e 67 20 6f 66 20   The loading of 
14d70 6c 61 72 67 65 20 62 6c 6f 62 73 20 63 61 6e 20  large blobs can 
14d80 62 65 0a 2a 2a 20 73 6b 69 70 70 65 64 20 66 6f  be.** skipped fo
14d90 72 20 6c 65 6e 67 74 68 28 29 20 61 6e 64 20 61  r length() and a
14da0 6c 6c 20 63 6f 6e 74 65 6e 74 20 6c 6f 61 64 69  ll content loadi
14db0 6e 67 20 63 61 6e 20 62 65 20 73 6b 69 70 70 65  ng can be skippe
14dc0 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29 2e 0a  d for typeof()..
14dd0 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d  */.case OP_Colum
14de0 6e 3a 20 7b 0a 20 20 69 6e 74 20 70 32 3b 20 20  n: {.  int p2;  
14df0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 63 6f 6c            /* col
14e00 75 6d 6e 20 6e 75 6d 62 65 72 20 74 6f 20 72 65  umn number to re
14e10 74 72 69 65 76 65 20 2a 2f 0a 20 20 56 64 62 65  trieve */.  Vdbe
14e20 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f  Cursor *pC;    /
14e30 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f  * The VDBE curso
14e40 72 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72 20  r */.  BtCursor 
14e50 2a 70 43 72 73 72 3b 20 20 20 2f 2a 20 54 68 65  *pCrsr;   /* The
14e60 20 42 54 72 65 65 20 63 75 72 73 6f 72 20 2a 2f   BTree cursor */
14e70 0a 20 20 75 33 32 20 2a 61 4f 66 66 73 65 74 3b  .  u32 *aOffset;
14e80 20 20 20 20 20 20 2f 2a 20 61 4f 66 66 73 65 74        /* aOffset
14e90 5b 69 5d 20 69 73 20 6f 66 66 73 65 74 20 74 6f  [i] is offset to
14ea0 20 73 74 61 72 74 20 6f 66 20 64 61 74 61 20 66   start of data f
14eb0 6f 72 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a  or i-th column *
14ec0 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20  /.  int len;    
14ed0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 65         /* The le
14ee0 6e 67 74 68 20 6f 66 20 74 68 65 20 73 65 72 69  ngth of the seri
14ef0 61 6c 69 7a 65 64 20 64 61 74 61 20 66 6f 72 20  alized data for 
14f00 74 68 65 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  the column */.  
14f10 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20  int i;          
14f20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74     /* Loop count
14f30 65 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 65  er */.  Mem *pDe
14f40 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 57 68  st;        /* Wh
14f50 65 72 65 20 74 6f 20 77 72 69 74 65 20 74 68 65  ere to write the
14f60 20 65 78 74 72 61 63 74 65 64 20 76 61 6c 75 65   extracted value
14f70 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b 20   */.  Mem sMem; 
14f80 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20           /* For 
14f90 73 74 6f 72 69 6e 67 20 74 68 65 20 72 65 63 6f  storing the reco
14fa0 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64  rd being decoded
14fb0 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a   */.  const u8 *
14fc0 7a 44 61 74 61 3b 20 20 20 2f 2a 20 50 61 72 74  zData;   /* Part
14fd0 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 62   of the record b
14fe0 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a  eing decoded */.
14ff0 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 48 64 72    const u8 *zHdr
15000 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 75 6e 70  ;    /* Next unp
15010 61 72 73 65 64 20 62 79 74 65 20 6f 66 20 74 68  arsed byte of th
15020 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 63 6f  e header */.  co
15030 6e 73 74 20 75 38 20 2a 7a 45 6e 64 48 64 72 3b  nst u8 *zEndHdr;
15040 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 66   /* Pointer to f
15050 69 72 73 74 20 62 79 74 65 20 61 66 74 65 72 20  irst byte after 
15060 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20  the header */.  
15070 75 36 34 20 6f 66 66 73 65 74 36 34 3b 20 20 20  u64 offset64;   
15080 20 20 20 2f 2a 20 36 34 2d 62 69 74 20 6f 66 66     /* 64-bit off
15090 73 65 74 20 2a 2f 0a 20 20 75 33 32 20 74 3b 20  set */.  u32 t; 
150a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
150b0 20 74 79 70 65 20 63 6f 64 65 20 66 72 6f 6d 20   type code from 
150c0 74 68 65 20 72 65 63 6f 72 64 20 68 65 61 64 65  the record heade
150d0 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 67  r */.  Mem *pReg
150e0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50 73 65  ;         /* Pse
150f0 75 64 6f 54 61 62 6c 65 20 69 6e 70 75 74 20 72  udoTable input r
15100 65 67 69 73 74 65 72 20 2a 2f 0a 0a 20 20 70 43  egister */..  pC
15110 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
15120 3e 70 31 5d 3b 0a 20 20 70 32 20 3d 20 70 4f 70  >p1];.  p2 = pOp
15130 2d 3e 70 32 3b 0a 0a 20 20 2f 2a 20 49 66 20 74  ->p2;..  /* If t
15140 68 65 20 63 75 72 73 6f 72 20 63 61 63 68 65 20  he cursor cache 
15150 69 73 20 73 74 61 6c 65 20 28 6d 65 61 6e 69 6e  is stale (meanin
15160 67 20 69 74 20 69 73 20 6e 6f 74 20 63 75 72 72  g it is not curr
15170 65 6e 74 6c 79 20 70 6f 69 6e 74 20 61 74 0a 20  ently point at. 
15180 20 2a 2a 20 74 68 65 20 63 6f 72 72 65 63 74 20   ** the correct 
15190 72 6f 77 29 20 74 68 65 6e 20 62 72 69 6e 67 20  row) then bring 
151a0 69 74 20 75 70 2d 74 6f 2d 64 61 74 65 20 62 79  it up-to-date by
151b0 20 64 6f 69 6e 67 20 74 68 65 20 6e 65 63 65 73   doing the neces
151c0 73 61 72 79 20 0a 20 20 2a 2a 20 42 2d 54 72 65  sary .  ** B-Tre
151d0 65 20 73 65 65 6b 2e 20 2a 2f 0a 20 20 72 63 20  e seek. */.  rc 
151e0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
151f0 73 6f 72 4d 6f 76 65 74 6f 28 26 70 43 2c 20 26  sorMoveto(&pC, &
15200 70 32 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  p2);.  if( rc ) 
15210 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
15220 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 61 73 73 65  o_error;..  asse
15230 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
15240 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
15250 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
15260 72 29 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20  r) );.  pDest = 
15270 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
15280 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
15290 67 65 28 70 2c 20 70 44 65 73 74 29 3b 0a 20 20  ge(p, pDest);.  
152a0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
152b0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
152c0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
152d0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
152e0 20 61 73 73 65 72 74 28 20 70 32 3c 70 43 2d 3e   assert( p2<pC->
152f0 6e 46 69 65 6c 64 20 29 3b 0a 20 20 61 4f 66 66  nField );.  aOff
15300 73 65 74 20 3d 20 70 43 2d 3e 61 4f 66 66 73 65  set = pC->aOffse
15310 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  t;.  assert( pC-
15320 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52 54 59  >eCurType!=CURTY
15330 50 45 5f 56 54 41 42 20 29 3b 0a 20 20 61 73 73  PE_VTAB );.  ass
15340 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
15350 65 21 3d 43 55 52 54 59 50 45 5f 50 53 45 55 44  e!=CURTYPE_PSEUD
15360 4f 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  O || pC->nullRow
15370 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
15380 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52 54  ->eCurType!=CURT
15390 59 50 45 5f 53 4f 52 54 45 52 20 29 3b 0a 0a 20  YPE_SORTER );.. 
153a0 20 69 66 28 20 70 43 2d 3e 63 61 63 68 65 53 74   if( pC->cacheSt
153b0 61 74 75 73 21 3d 70 2d 3e 63 61 63 68 65 43 74  atus!=p->cacheCt
153c0 72 20 29 7b 20 20 20 20 20 20 20 20 20 20 20 20  r ){            
153d0 20 20 20 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49      /*OPTIMIZATI
153e0 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20  ON-IF-FALSE*/.  
153f0 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f    if( pC->nullRo
15400 77 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70  w ){.      if( p
15410 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
15420 54 59 50 45 5f 50 53 45 55 44 4f 20 29 7b 0a 20  TYPE_PSEUDO ){. 
15430 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 74 68         /* For th
15440 65 20 73 70 65 63 69 61 6c 20 63 61 73 65 20 6f  e special case o
15450 66 20 61 73 20 70 73 65 75 64 6f 2d 63 75 72 73  f as pseudo-curs
15460 6f 72 2c 20 74 68 65 20 73 65 65 6b 52 65 73 75  or, the seekResu
15470 6c 74 20 66 69 65 6c 64 0a 20 20 20 20 20 20 20  lt field.       
15480 20 2a 2a 20 69 64 65 6e 74 69 66 69 65 73 20 74   ** identifies t
15490 68 65 20 72 65 67 69 73 74 65 72 20 74 68 61 74  he register that
154a0 20 68 6f 6c 64 73 20 74 68 65 20 72 65 63 6f 72   holds the recor
154b0 64 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73  d */.        ass
154c0 65 72 74 28 20 70 43 2d 3e 73 65 65 6b 52 65 73  ert( pC->seekRes
154d0 75 6c 74 3e 30 20 29 3b 0a 20 20 20 20 20 20 20  ult>0 );.       
154e0 20 70 52 65 67 20 3d 20 26 61 4d 65 6d 5b 70 43   pReg = &aMem[pC
154f0 2d 3e 73 65 65 6b 52 65 73 75 6c 74 5d 3b 0a 20  ->seekResult];. 
15500 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
15510 52 65 67 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Reg->flags & MEM
15520 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 20 20 20  _Blob );.       
15530 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
15540 6c 69 64 28 70 52 65 67 29 20 29 3b 0a 20 20 20  lid(pReg) );.   
15550 20 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64       pC->payload
15560 53 69 7a 65 20 3d 20 70 43 2d 3e 73 7a 52 6f 77  Size = pC->szRow
15570 20 3d 20 70 52 65 67 2d 3e 6e 3b 0a 20 20 20 20   = pReg->n;.    
15580 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 28      pC->aRow = (
15590 75 38 2a 29 70 52 65 67 2d 3e 7a 3b 0a 20 20 20  u8*)pReg->z;.   
155a0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
155b0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
155c0 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a  SetNull(pDest);.
155d0 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f          goto op_
155e0 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20  column_out;.    
155f0 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20    }.    }else{. 
15600 20 20 20 20 20 70 43 72 73 72 20 3d 20 70 43 2d       pCrsr = pC-
15610 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 20  >uc.pCursor;.   
15620 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65     assert( pC->e
15630 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
15640 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20 20 20  _BTREE );.      
15650 61 73 73 65 72 74 28 20 70 43 72 73 72 20 29 3b  assert( pCrsr );
15660 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73  .      assert( s
15670 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
15680 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20  rIsValid(pCrsr) 
15690 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 70 61 79  );.      pC->pay
156a0 6c 6f 61 64 53 69 7a 65 20 3d 20 73 71 6c 69 74  loadSize = sqlit
156b0 65 33 42 74 72 65 65 50 61 79 6c 6f 61 64 53 69  e3BtreePayloadSi
156c0 7a 65 28 70 43 72 73 72 29 3b 0a 20 20 20 20 20  ze(pCrsr);.     
156d0 20 70 43 2d 3e 61 52 6f 77 20 3d 20 73 71 6c 69   pC->aRow = sqli
156e0 74 65 33 42 74 72 65 65 50 61 79 6c 6f 61 64 46  te3BtreePayloadF
156f0 65 74 63 68 28 70 43 72 73 72 2c 20 26 70 43 2d  etch(pCrsr, &pC-
15700 3e 73 7a 52 6f 77 29 3b 0a 20 20 20 20 20 20 61  >szRow);.      a
15710 73 73 65 72 74 28 20 70 43 2d 3e 73 7a 52 6f 77  ssert( pC->szRow
15720 3c 3d 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a  <=pC->payloadSiz
15730 65 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  e );.      asser
15740 74 28 20 70 43 2d 3e 73 7a 52 6f 77 3c 3d 36 35  t( pC->szRow<=65
15750 35 33 36 20 29 3b 20 20 2f 2a 20 4d 61 78 69 6d  536 );  /* Maxim
15760 75 6d 20 70 61 67 65 20 73 69 7a 65 20 69 73 20  um page size is 
15770 36 34 4b 69 42 20 2a 2f 0a 20 20 20 20 20 20 69  64KiB */.      i
15780 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69  f( pC->payloadSi
15790 7a 65 20 3e 20 28 75 33 32 29 64 62 2d 3e 61 4c  ze > (u32)db->aL
157a0 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
157b0 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
157c0 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69       goto too_bi
157d0 67 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  g;.      }.    }
157e0 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
157f0 61 74 75 73 20 3d 20 70 2d 3e 63 61 63 68 65 43  atus = p->cacheC
15800 74 72 3b 0a 20 20 20 20 70 43 2d 3e 69 48 64 72  tr;.    pC->iHdr
15810 4f 66 66 73 65 74 20 3d 20 67 65 74 56 61 72 69  Offset = getVari
15820 6e 74 33 32 28 70 43 2d 3e 61 52 6f 77 2c 20 61  nt32(pC->aRow, a
15830 4f 66 66 73 65 74 5b 30 5d 29 3b 0a 20 20 20 20  Offset[0]);.    
15840 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 3d  pC->nHdrParsed =
15850 20 30 3b 0a 0a 0a 20 20 20 20 69 66 28 20 70 43   0;...    if( pC
15860 2d 3e 73 7a 52 6f 77 3c 61 4f 66 66 73 65 74 5b  ->szRow<aOffset[
15870 30 5d 20 29 7b 20 20 20 20 20 20 2f 2a 4f 50 54  0] ){      /*OPT
15880 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c  IMIZATION-IF-FAL
15890 53 45 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 70 43  SE*/.      /* pC
158a0 2d 3e 61 52 6f 77 20 64 6f 65 73 20 6e 6f 74 20  ->aRow does not 
158b0 68 61 76 65 20 74 6f 20 68 6f 6c 64 20 74 68 65  have to hold the
158c0 20 65 6e 74 69 72 65 20 72 6f 77 2c 20 62 75 74   entire row, but
158d0 20 69 74 20 64 6f 65 73 20 61 74 20 6c 65 61 73   it does at leas
158e0 74 0a 20 20 20 20 20 20 2a 2a 20 6e 65 65 64 20  t.      ** need 
158f0 74 6f 20 63 6f 76 65 72 20 74 68 65 20 68 65 61  to cover the hea
15900 64 65 72 20 6f 66 20 74 68 65 20 72 65 63 6f 72  der of the recor
15910 64 2e 20 20 49 66 20 70 43 2d 3e 61 52 6f 77 20  d.  If pC->aRow 
15920 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e  does not contain
15930 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 63 6f  .      ** the co
15940 6d 70 6c 65 74 65 20 68 65 61 64 65 72 2c 20 74  mplete header, t
15950 68 65 6e 20 73 65 74 20 69 74 20 74 6f 20 7a 65  hen set it to ze
15960 72 6f 2c 20 66 6f 72 63 69 6e 67 20 74 68 65 20  ro, forcing the 
15970 68 65 61 64 65 72 20 74 6f 20 62 65 0a 20 20 20  header to be.   
15980 20 20 20 2a 2a 20 64 79 6e 61 6d 69 63 61 6c 6c     ** dynamicall
15990 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 2a 2f 0a  y allocated. */.
159a0 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d        pC->aRow =
159b0 20 30 3b 0a 20 20 20 20 20 20 70 43 2d 3e 73 7a   0;.      pC->sz
159c0 52 6f 77 20 3d 20 30 3b 0a 0a 20 20 20 20 20 20  Row = 0;..      
159d0 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 20 63  /* Make sure a c
159e0 6f 72 72 75 70 74 20 64 61 74 61 62 61 73 65 20  orrupt database 
159f0 68 61 73 20 6e 6f 74 20 67 69 76 65 6e 20 75 73  has not given us
15a00 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 68 65 61   an oversize hea
15a10 64 65 72 2e 0a 20 20 20 20 20 20 2a 2a 20 44 6f  der..      ** Do
15a20 20 74 68 69 73 20 6e 6f 77 20 74 6f 20 61 76 6f   this now to avo
15a30 69 64 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 6d  id an oversize m
15a40 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
15a50 2e 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20  ..      **.     
15a60 20 2a 2a 20 54 79 70 65 20 65 6e 74 72 69 65 73   ** Type entries
15a70 20 63 61 6e 20 62 65 20 62 65 74 77 65 65 6e 20   can be between 
15a80 31 20 61 6e 64 20 35 20 62 79 74 65 73 20 65 61  1 and 5 bytes ea
15a90 63 68 2e 20 20 42 75 74 20 34 20 61 6e 64 20 35  ch.  But 4 and 5
15aa0 20 62 79 74 65 0a 20 20 20 20 20 20 2a 2a 20 74   byte.      ** t
15ab0 79 70 65 73 20 75 73 65 20 73 6f 20 6d 75 63 68  ypes use so much
15ac0 20 64 61 74 61 20 73 70 61 63 65 20 74 68 61 74   data space that
15ad0 20 74 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20   there can only 
15ae0 62 65 20 34 30 39 36 20 61 6e 64 20 33 32 20 6f  be 4096 and 32 o
15af0 66 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 6d 2c  f.      ** them,
15b00 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20   respectively.  
15b10 53 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 68  So the maximum h
15b20 65 61 64 65 72 20 6c 65 6e 67 74 68 20 72 65 73  eader length res
15b30 75 6c 74 73 20 66 72 6f 6d 20 61 0a 20 20 20 20  ults from a.    
15b40 20 20 2a 2a 20 33 2d 62 79 74 65 20 74 79 70 65    ** 3-byte type
15b50 20 66 6f 72 20 65 61 63 68 20 6f 66 20 74 68 65   for each of the
15b60 20 6d 61 78 69 6d 75 6d 20 6f 66 20 33 32 37 36   maximum of 3276
15b70 38 20 63 6f 6c 75 6d 6e 73 20 70 6c 75 73 20 74  8 columns plus t
15b80 68 72 65 65 0a 20 20 20 20 20 20 2a 2a 20 65 78  hree.      ** ex
15b90 74 72 61 20 62 79 74 65 73 20 66 6f 72 20 74 68  tra bytes for th
15ba0 65 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20  e header length 
15bb0 69 74 73 65 6c 66 2e 20 20 33 32 37 36 38 2a 33  itself.  32768*3
15bc0 20 2b 20 33 20 3d 20 39 38 33 30 37 2e 0a 20 20   + 3 = 98307..  
15bd0 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28      */.      if(
15be0 20 61 4f 66 66 73 65 74 5b 30 5d 20 3e 20 39 38   aOffset[0] > 98
15bf0 33 30 37 20 7c 7c 20 61 4f 66 66 73 65 74 5b 30  307 || aOffset[0
15c00 5d 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53  ] > pC->payloadS
15c10 69 7a 65 20 29 7b 0a 20 20 20 20 20 20 20 20 67  ize ){.        g
15c20 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 63 6f  oto op_column_co
15c30 72 72 75 70 74 3b 0a 20 20 20 20 20 20 7d 0a 20  rrupt;.      }. 
15c40 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
15c50 2f 2a 20 54 68 69 73 20 69 73 20 61 6e 20 6f 70  /* This is an op
15c60 74 69 6d 69 7a 61 74 69 6f 6e 2e 20 20 42 79 20  timization.  By 
15c70 73 6b 69 70 70 69 6e 67 20 6f 76 65 72 20 74 68  skipping over th
15c80 65 20 66 69 72 73 74 20 66 65 77 20 74 65 73 74  e first few test
15c90 73 0a 20 20 20 20 20 20 2a 2a 20 28 65 78 3a 20  s.      ** (ex: 
15ca0 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d  pC->nHdrParsed<=
15cb0 70 32 29 20 69 6e 20 74 68 65 20 6e 65 78 74 20  p2) in the next 
15cc0 73 65 63 74 69 6f 6e 2c 20 77 65 20 61 63 68 69  section, we achi
15cd0 65 76 65 20 61 0a 20 20 20 20 20 20 2a 2a 20 6d  eve a.      ** m
15ce0 65 61 73 75 72 61 62 6c 65 20 70 65 72 66 6f 72  easurable perfor
15cf0 6d 61 6e 63 65 20 67 61 69 6e 2e 0a 20 20 20 20  mance gain..    
15d00 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 54 68    **.      ** Th
15d10 69 73 20 62 72 61 6e 63 68 20 69 73 20 74 61 6b  is branch is tak
15d20 65 6e 20 65 76 65 6e 20 69 66 20 61 4f 66 66 73  en even if aOffs
15d30 65 74 5b 30 5d 3d 3d 30 2e 20 20 53 75 63 68 20  et[0]==0.  Such 
15d40 61 20 72 65 63 6f 72 64 20 69 73 20 6e 65 76 65  a record is neve
15d50 72 0a 20 20 20 20 20 20 2a 2a 20 67 65 6e 65 72  r.      ** gener
15d60 61 74 65 64 20 62 79 20 53 51 4c 69 74 65 2c 20  ated by SQLite, 
15d70 61 6e 64 20 63 6f 75 6c 64 20 62 65 20 63 6f 6e  and could be con
15d80 73 69 64 65 72 65 64 20 63 6f 72 72 75 70 74 69  sidered corrupti
15d90 6f 6e 2c 20 62 75 74 20 77 65 0a 20 20 20 20 20  on, but we.     
15da0 20 2a 2a 20 61 63 63 65 70 74 20 69 74 20 66 6f   ** accept it fo
15db0 72 20 68 69 73 74 6f 72 69 63 61 6c 20 72 65 61  r historical rea
15dc0 73 6f 6e 73 2e 20 20 57 68 65 6e 20 61 4f 66 66  sons.  When aOff
15dd0 73 65 74 5b 30 5d 3d 3d 30 2c 20 74 68 65 20 63  set[0]==0, the c
15de0 6f 64 65 20 74 68 69 73 0a 20 20 20 20 20 20 2a  ode this.      *
15df0 2a 20 62 72 61 6e 63 68 20 6a 75 6d 70 73 20 74  * branch jumps t
15e00 6f 20 72 65 61 64 73 20 70 61 73 74 20 74 68 65  o reads past the
15e10 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f   end of the reco
15e20 72 64 2c 20 62 75 74 20 6e 65 76 65 72 20 6d 6f  rd, but never mo
15e30 72 65 0a 20 20 20 20 20 20 2a 2a 20 74 68 61 6e  re.      ** than
15e40 20 61 20 66 65 77 20 62 79 74 65 73 2e 20 20 45   a few bytes.  E
15e50 76 65 6e 20 69 66 20 74 68 65 20 72 65 63 6f 72  ven if the recor
15e60 64 20 6f 63 63 75 72 73 20 61 74 20 74 68 65 20  d occurs at the 
15e70 65 6e 64 20 6f 66 20 74 68 65 20 70 61 67 65 0a  end of the page.
15e80 20 20 20 20 20 20 2a 2a 20 63 6f 6e 74 65 6e 74        ** content
15e90 20 61 72 65 61 2c 20 74 68 65 20 22 70 61 67 65   area, the "page
15ea0 20 68 65 61 64 65 72 22 20 63 6f 6d 65 73 20 61   header" comes a
15eb0 66 74 65 72 20 74 68 65 20 70 61 67 65 20 63 6f  fter the page co
15ec0 6e 74 65 6e 74 20 61 6e 64 20 73 6f 0a 20 20 20  ntent and so.   
15ed0 20 20 20 2a 2a 20 74 68 69 73 20 6f 76 65 72 72     ** this overr
15ee0 65 61 64 20 69 73 20 68 61 72 6d 6c 65 73 73 2e  ead is harmless.
15ef0 20 20 53 69 6d 69 6c 61 72 20 6f 76 65 72 72 65    Similar overre
15f00 61 64 73 20 63 61 6e 20 6f 63 63 75 72 20 66 6f  ads can occur fo
15f10 72 20 61 20 63 6f 72 72 75 70 74 0a 20 20 20 20  r a corrupt.    
15f20 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69    ** database fi
15f30 6c 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  le..      */.   
15f40 20 20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e 61     zData = pC->a
15f50 52 6f 77 3b 0a 20 20 20 20 20 20 61 73 73 65 72  Row;.      asser
15f60 74 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65  t( pC->nHdrParse
15f70 64 3c 3d 70 32 20 29 3b 20 20 20 20 20 20 20 20  d<=p2 );        
15f80 20 2f 2a 20 43 6f 6e 64 69 74 69 6f 6e 61 6c 20   /* Conditional 
15f90 73 6b 69 70 70 65 64 20 2a 2f 0a 20 20 20 20 20  skipped */.     
15fa0 20 74 65 73 74 63 61 73 65 28 20 61 4f 66 66 73   testcase( aOffs
15fb0 65 74 5b 30 5d 3d 3d 30 20 29 3b 0a 20 20 20 20  et[0]==0 );.    
15fc0 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
15fd0 5f 72 65 61 64 5f 68 65 61 64 65 72 3b 0a 20 20  _read_header;.  
15fe0 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61    }.  }..  /* Ma
15ff0 6b 65 20 73 75 72 65 20 61 74 20 6c 65 61 73 74  ke sure at least
16000 20 74 68 65 20 66 69 72 73 74 20 70 32 2b 31 20   the first p2+1 
16010 65 6e 74 72 69 65 73 20 6f 66 20 74 68 65 20 68  entries of the h
16020 65 61 64 65 72 20 68 61 76 65 20 62 65 65 6e 0a  eader have been.
16030 20 20 2a 2a 20 70 61 72 73 65 64 20 61 6e 64 20    ** parsed and 
16040 76 61 6c 69 64 20 69 6e 66 6f 72 6d 61 74 69 6f  valid informatio
16050 6e 20 69 73 20 69 6e 20 61 4f 66 66 73 65 74 5b  n is in aOffset[
16060 5d 20 61 6e 64 20 70 43 2d 3e 61 54 79 70 65 5b  ] and pC->aType[
16070 5d 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 70 43  ]..  */.  if( pC
16080 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32  ->nHdrParsed<=p2
16090 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68   ){.    /* If th
160a0 65 72 65 20 69 73 20 6d 6f 72 65 20 68 65 61 64  ere is more head
160b0 65 72 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72  er available for
160c0 20 70 61 72 73 69 6e 67 20 69 6e 20 74 68 65 20   parsing in the 
160d0 72 65 63 6f 72 64 2c 20 74 72 79 0a 20 20 20 20  record, try.    
160e0 2a 2a 20 74 6f 20 65 78 74 72 61 63 74 20 61 64  ** to extract ad
160f0 64 69 74 69 6f 6e 61 6c 20 66 69 65 6c 64 73 20  ditional fields 
16100 75 70 20 74 68 72 6f 75 67 68 20 74 68 65 20 70  up through the p
16110 32 2b 31 2d 74 68 20 66 69 65 6c 64 20 0a 20 20  2+1-th field .  
16120 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 43 2d    */.    if( pC-
16130 3e 69 48 64 72 4f 66 66 73 65 74 3c 61 4f 66 66  >iHdrOffset<aOff
16140 73 65 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20  set[0] ){.      
16150 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 7a 44 61  /* Make sure zDa
16160 74 61 20 70 6f 69 6e 74 73 20 74 6f 20 65 6e 6f  ta points to eno
16170 75 67 68 20 6f 66 20 74 68 65 20 72 65 63 6f 72  ugh of the recor
16180 64 20 74 6f 20 63 6f 76 65 72 20 74 68 65 20 68  d to cover the h
16190 65 61 64 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20  eader. */.      
161a0 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20  if( pC->aRow==0 
161b0 29 7b 0a 20 20 20 20 20 20 20 20 6d 65 6d 73 65  ){.        memse
161c0 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69 7a 65  t(&sMem, 0, size
161d0 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20 20 20 20  of(sMem));.     
161e0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
161f0 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28  dbeMemFromBtree(
16200 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
16210 30 2c 20 61 4f 66 66 73 65 74 5b 30 5d 2c 20 26  0, aOffset[0], &
16220 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 69  sMem);.        i
16230 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
16240 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
16250 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
16260 20 20 20 20 7a 44 61 74 61 20 3d 20 28 75 38 2a      zData = (u8*
16270 29 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20 20 7d  )sMem.z;.      }
16280 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 44  else{.        zD
16290 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77 3b 0a  ata = pC->aRow;.
162a0 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20        }.  .     
162b0 20 2f 2a 20 46 69 6c 6c 20 69 6e 20 70 43 2d 3e   /* Fill in pC->
162c0 61 54 79 70 65 5b 69 5d 20 61 6e 64 20 61 4f 66  aType[i] and aOf
162d0 66 73 65 74 5b 69 5d 20 76 61 6c 75 65 73 20 74  fset[i] values t
162e0 68 72 6f 75 67 68 20 74 68 65 20 70 32 2d 74 68  hrough the p2-th
162f0 20 66 69 65 6c 64 2e 20 2a 2f 0a 20 20 20 20 6f   field. */.    o
16300 70 5f 63 6f 6c 75 6d 6e 5f 72 65 61 64 5f 68 65  p_column_read_he
16310 61 64 65 72 3a 0a 20 20 20 20 20 20 69 20 3d 20  ader:.      i = 
16320 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3b 0a  pC->nHdrParsed;.
16330 20 20 20 20 20 20 6f 66 66 73 65 74 36 34 20 3d        offset64 =
16340 20 61 4f 66 66 73 65 74 5b 69 5d 3b 0a 20 20 20   aOffset[i];.   
16350 20 20 20 7a 48 64 72 20 3d 20 7a 44 61 74 61 20     zHdr = zData 
16360 2b 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74  + pC->iHdrOffset
16370 3b 0a 20 20 20 20 20 20 7a 45 6e 64 48 64 72 20  ;.      zEndHdr 
16380 3d 20 7a 44 61 74 61 20 2b 20 61 4f 66 66 73 65  = zData + aOffse
16390 74 5b 30 5d 3b 0a 20 20 20 20 20 20 74 65 73 74  t[0];.      test
163a0 63 61 73 65 28 20 7a 48 64 72 3e 3d 7a 45 6e 64  case( zHdr>=zEnd
163b0 48 64 72 20 29 3b 0a 20 20 20 20 20 20 64 6f 7b  Hdr );.      do{
163c0 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 70 43  .        if( (pC
163d0 2d 3e 61 54 79 70 65 5b 69 5d 20 3d 20 74 20 3d  ->aType[i] = t =
163e0 20 7a 48 64 72 5b 30 5d 29 3c 30 78 38 30 20 29   zHdr[0])<0x80 )
163f0 7b 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64 72  {.          zHdr
16400 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 6f 66  ++;.          of
16410 66 73 65 74 36 34 20 2b 3d 20 73 71 6c 69 74 65  fset64 += sqlite
16420 33 56 64 62 65 4f 6e 65 42 79 74 65 53 65 72 69  3VdbeOneByteSeri
16430 61 6c 54 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20  alTypeLen(t);.  
16440 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
16450 20 20 20 20 20 20 20 7a 48 64 72 20 2b 3d 20 73         zHdr += s
16460 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33  qlite3GetVarint3
16470 32 28 7a 48 64 72 2c 20 26 74 29 3b 0a 20 20 20  2(zHdr, &t);.   
16480 20 20 20 20 20 20 20 70 43 2d 3e 61 54 79 70 65         pC->aType
16490 5b 69 5d 20 3d 20 74 3b 0a 20 20 20 20 20 20 20  [i] = t;.       
164a0 20 20 20 6f 66 66 73 65 74 36 34 20 2b 3d 20 73     offset64 += s
164b0 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
164c0 54 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20  TypeLen(t);.    
164d0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 61 4f      }.        aO
164e0 66 66 73 65 74 5b 2b 2b 69 5d 20 3d 20 28 75 33  ffset[++i] = (u3
164f0 32 29 28 6f 66 66 73 65 74 36 34 20 26 20 30 78  2)(offset64 & 0x
16500 66 66 66 66 66 66 66 66 29 3b 0a 20 20 20 20 20  ffffffff);.     
16510 20 7d 77 68 69 6c 65 28 20 69 3c 3d 70 32 20 26   }while( i<=p2 &
16520 26 20 7a 48 64 72 3c 7a 45 6e 64 48 64 72 20 29  & zHdr<zEndHdr )
16530 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ;..      /* The 
16540 72 65 63 6f 72 64 20 69 73 20 63 6f 72 72 75 70  record is corrup
16550 74 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20  t if any of the 
16560 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 72  following are tr
16570 75 65 3a 0a 20 20 20 20 20 20 2a 2a 20 28 31 29  ue:.      ** (1)
16580 20 74 68 65 20 62 79 74 65 73 20 6f 66 20 74 68   the bytes of th
16590 65 20 68 65 61 64 65 72 20 65 78 74 65 6e 64 20  e header extend 
165a0 70 61 73 74 20 74 68 65 20 64 65 63 6c 61 72 65  past the declare
165b0 64 20 68 65 61 64 65 72 20 73 69 7a 65 0a 20 20  d header size.  
165c0 20 20 20 20 2a 2a 20 28 32 29 20 74 68 65 20 65      ** (2) the e
165d0 6e 74 69 72 65 20 68 65 61 64 65 72 20 77 61 73  ntire header was
165e0 20 75 73 65 64 20 62 75 74 20 6e 6f 74 20 61 6c   used but not al
165f0 6c 20 64 61 74 61 20 77 61 73 20 75 73 65 64 0a  l data was used.
16600 20 20 20 20 20 20 2a 2a 20 28 33 29 20 74 68 65        ** (3) the
16610 20 65 6e 64 20 6f 66 20 74 68 65 20 64 61 74 61   end of the data
16620 20 65 78 74 65 6e 64 73 20 62 65 79 6f 6e 64 20   extends beyond 
16630 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72  the end of the r
16640 65 63 6f 72 64 2e 0a 20 20 20 20 20 20 2a 2f 0a  ecord..      */.
16650 20 20 20 20 20 20 69 66 28 20 28 7a 48 64 72 3e        if( (zHdr>
16660 3d 7a 45 6e 64 48 64 72 20 26 26 20 28 7a 48 64  =zEndHdr && (zHd
16670 72 3e 7a 45 6e 64 48 64 72 20 7c 7c 20 6f 66 66  r>zEndHdr || off
16680 73 65 74 36 34 21 3d 70 43 2d 3e 70 61 79 6c 6f  set64!=pC->paylo
16690 61 64 53 69 7a 65 29 29 0a 20 20 20 20 20 20 20  adSize)).       
166a0 7c 7c 20 28 6f 66 66 73 65 74 36 34 20 3e 20 70  || (offset64 > p
166b0 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29 0a  C->payloadSize).
166c0 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20        ){.       
166d0 20 69 66 28 20 61 4f 66 66 73 65 74 5b 30 5d 3d   if( aOffset[0]=
166e0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
166f0 69 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20  i = 0;.         
16700 20 7a 48 64 72 20 3d 20 7a 45 6e 64 48 64 72 3b   zHdr = zEndHdr;
16710 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
16720 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70 43            if( pC
16730 2d 3e 61 52 6f 77 3d 3d 30 20 29 20 73 71 6c 69  ->aRow==0 ) sqli
16740 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
16750 65 28 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20  e(&sMem);.      
16760 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
16770 6d 6e 5f 63 6f 72 72 75 70 74 3b 0a 20 20 20 20  mn_corrupt;.    
16780 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 20      }.      }.. 
16790 20 20 20 20 20 70 43 2d 3e 6e 48 64 72 50 61 72       pC->nHdrPar
167a0 73 65 64 20 3d 20 69 3b 0a 20 20 20 20 20 20 70  sed = i;.      p
167b0 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 20 3d 20  C->iHdrOffset = 
167c0 28 75 33 32 29 28 7a 48 64 72 20 2d 20 7a 44 61  (u32)(zHdr - zDa
167d0 74 61 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  ta);.      if( p
167e0 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 20 73 71 6c  C->aRow==0 ) sql
167f0 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
16800 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20 20 20 7d  se(&sMem);.    }
16810 65 6c 73 65 7b 0a 20 20 20 20 20 20 74 20 3d 20  else{.      t = 
16820 30 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a  0;.    }..    /*
16830 20 49 66 20 61 66 74 65 72 20 74 72 79 69 6e 67   If after trying
16840 20 74 6f 20 65 78 74 72 61 63 74 20 6e 65 77 20   to extract new 
16850 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65  entries from the
16860 20 68 65 61 64 65 72 2c 20 6e 48 64 72 50 61 72   header, nHdrPar
16870 73 65 64 20 69 73 0a 20 20 20 20 2a 2a 20 73 74  sed is.    ** st
16880 69 6c 6c 20 6e 6f 74 20 75 70 20 74 6f 20 70 32  ill not up to p2
16890 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61  , that means tha
168a0 74 20 74 68 65 20 72 65 63 6f 72 64 20 68 61 73  t the record has
168b0 20 66 65 77 65 72 20 74 68 61 6e 20 70 32 0a 20   fewer than p2. 
168c0 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e 73 2e 20 20     ** columns.  
168d0 53 6f 20 74 68 65 20 72 65 73 75 6c 74 20 77 69  So the result wi
168e0 6c 6c 20 62 65 20 65 69 74 68 65 72 20 74 68 65  ll be either the
168f0 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   default value o
16900 72 20 61 20 4e 55 4c 4c 2e 0a 20 20 20 20 2a 2f  r a NULL..    */
16910 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 48 64  .    if( pC->nHd
16920 72 50 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a 20  rParsed<=p2 ){. 
16930 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34       if( pOp->p4
16940 74 79 70 65 3d 3d 50 34 5f 4d 45 4d 20 29 7b 0a  type==P4_MEM ){.
16950 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
16960 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
16970 79 28 70 44 65 73 74 2c 20 70 4f 70 2d 3e 70 34  y(pDest, pOp->p4
16980 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74 61 74 69  .pMem, MEM_Stati
16990 63 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  c);.      }else{
169a0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
169b0 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
169c0 44 65 73 74 29 3b 0a 20 20 20 20 20 20 7d 0a 20  Dest);.      }. 
169d0 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
169e0 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20  umn_out;.    }. 
169f0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 74 20 3d 20   }else{.    t = 
16a00 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 3b 0a 20  pC->aType[p2];. 
16a10 20 7d 0a 0a 20 20 2f 2a 20 45 78 74 72 61 63 74   }..  /* Extract
16a20 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 66 6f 72   the content for
16a30 20 74 68 65 20 70 32 2b 31 2d 74 68 20 63 6f 6c   the p2+1-th col
16a40 75 6d 6e 2e 20 20 43 6f 6e 74 72 6f 6c 20 63 61  umn.  Control ca
16a50 6e 20 6f 6e 6c 79 0a 20 20 2a 2a 20 72 65 61 63  n only.  ** reac
16a60 68 20 74 68 69 73 20 70 6f 69 6e 74 20 69 66 20  h this point if 
16a70 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 61 4f 66  aOffset[p2], aOf
16a80 66 73 65 74 5b 70 32 2b 31 5d 2c 20 61 6e 64 20  fset[p2+1], and 
16a90 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 20 61 72  pC->aType[p2] ar
16aa0 65 0a 20 20 2a 2a 20 61 6c 6c 20 76 61 6c 69 64  e.  ** all valid
16ab0 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ..  */.  assert(
16ac0 20 70 32 3c 70 43 2d 3e 6e 48 64 72 50 61 72 73   p2<pC->nHdrPars
16ad0 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ed );.  assert( 
16ae0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
16af0 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
16b00 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e  e3VdbeCheckMemIn
16b10 76 61 72 69 61 6e 74 73 28 70 44 65 73 74 29 20  variants(pDest) 
16b20 29 3b 0a 20 20 69 66 28 20 56 64 62 65 4d 65 6d  );.  if( VdbeMem
16b30 44 79 6e 61 6d 69 63 28 70 44 65 73 74 29 20 29  Dynamic(pDest) )
16b40 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
16b50 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73  eMemSetNull(pDes
16b60 74 29 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  t);.  }.  assert
16b70 28 20 74 3d 3d 70 43 2d 3e 61 54 79 70 65 5b 70  ( t==pC->aType[p
16b80 32 5d 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e  2] );.  if( pC->
16b90 73 7a 52 6f 77 3e 3d 61 4f 66 66 73 65 74 5b 70  szRow>=aOffset[p
16ba0 32 2b 31 5d 20 29 7b 0a 20 20 20 20 2f 2a 20 54  2+1] ){.    /* T
16bb0 68 69 73 20 69 73 20 74 68 65 20 63 6f 6d 6d 6f  his is the commo
16bc0 6e 20 63 61 73 65 20 77 68 65 72 65 20 74 68 65  n case where the
16bd0 20 64 65 73 69 72 65 64 20 63 6f 6e 74 65 6e 74   desired content
16be0 20 66 69 74 73 20 6f 6e 20 74 68 65 20 6f 72 69   fits on the ori
16bf0 67 69 6e 61 6c 0a 20 20 20 20 2a 2a 20 70 61 67  ginal.    ** pag
16c00 65 20 2d 20 77 68 65 72 65 20 74 68 65 20 63 6f  e - where the co
16c10 6e 74 65 6e 74 20 69 73 20 6e 6f 74 20 6f 6e 20  ntent is not on 
16c20 61 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65  an overflow page
16c30 20 2a 2f 0a 20 20 20 20 7a 44 61 74 61 20 3d 20   */.    zData = 
16c40 70 43 2d 3e 61 52 6f 77 20 2b 20 61 4f 66 66 73  pC->aRow + aOffs
16c50 65 74 5b 70 32 5d 3b 0a 20 20 20 20 69 66 28 20  et[p2];.    if( 
16c60 74 3c 31 32 20 29 7b 0a 20 20 20 20 20 20 73 71  t<12 ){.      sq
16c70 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47  lite3VdbeSerialG
16c80 65 74 28 7a 44 61 74 61 2c 20 74 2c 20 70 44 65  et(zData, t, pDe
16c90 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  st);.    }else{.
16ca0 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20        /* If the 
16cb0 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 69 73 20  column value is 
16cc0 61 20 73 74 72 69 6e 67 2c 20 77 65 20 6e 65 65  a string, we nee
16cd0 64 20 61 20 70 65 72 73 69 73 74 65 6e 74 20 76  d a persistent v
16ce0 61 6c 75 65 2c 20 6e 6f 74 0a 20 20 20 20 20 20  alue, not.      
16cf0 2a 2a 20 61 20 4d 45 4d 5f 45 70 68 65 6d 20 76  ** a MEM_Ephem v
16d00 61 6c 75 65 2e 20 20 54 68 69 73 20 62 72 61 6e  alue.  This bran
16d10 63 68 20 69 73 20 61 20 66 61 73 74 20 73 68 6f  ch is a fast sho
16d20 72 74 2d 63 75 74 20 74 68 61 74 20 69 73 20 65  rt-cut that is e
16d30 71 75 69 76 61 6c 65 6e 74 0a 20 20 20 20 20 20  quivalent.      
16d40 2a 2a 20 74 6f 20 63 61 6c 6c 69 6e 67 20 73 71  ** to calling sq
16d50 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47  lite3VdbeSerialG
16d60 65 74 28 29 20 61 6e 64 20 73 71 6c 69 74 65 33  et() and sqlite3
16d70 56 64 62 65 44 65 65 70 68 65 6d 65 72 61 6c 69  VdbeDeephemerali
16d80 7a 65 28 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  ze()..      */. 
16d90 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73       static cons
16da0 74 20 75 31 36 20 61 46 6c 61 67 5b 5d 20 3d 20  t u16 aFlag[] = 
16db0 7b 20 4d 45 4d 5f 42 6c 6f 62 2c 20 4d 45 4d 5f  { MEM_Blob, MEM_
16dc0 53 74 72 7c 4d 45 4d 5f 54 65 72 6d 20 7d 3b 0a  Str|MEM_Term };.
16dd0 20 20 20 20 20 20 70 44 65 73 74 2d 3e 6e 20 3d        pDest->n =
16de0 20 6c 65 6e 20 3d 20 28 74 2d 31 32 29 2f 32 3b   len = (t-12)/2;
16df0 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 65 6e  .      pDest->en
16e00 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20  c = encoding;.  
16e10 20 20 20 20 69 66 28 20 70 44 65 73 74 2d 3e 73      if( pDest->s
16e20 7a 4d 61 6c 6c 6f 63 20 3c 20 6c 65 6e 2b 32 20  zMalloc < len+2 
16e30 29 7b 0a 20 20 20 20 20 20 20 20 70 44 65 73 74  ){.        pDest
16e40 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  ->flags = MEM_Nu
16e50 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ll;.        if( 
16e60 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72  sqlite3VdbeMemGr
16e70 6f 77 28 70 44 65 73 74 2c 20 6c 65 6e 2b 32 2c  ow(pDest, len+2,
16e80 20 30 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65   0) ) goto no_me
16e90 6d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  m;.      }else{.
16ea0 20 20 20 20 20 20 20 20 70 44 65 73 74 2d 3e 7a          pDest->z
16eb0 20 3d 20 70 44 65 73 74 2d 3e 7a 4d 61 6c 6c 6f   = pDest->zMallo
16ec0 63 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  c;.      }.     
16ed0 20 6d 65 6d 63 70 79 28 70 44 65 73 74 2d 3e 7a   memcpy(pDest->z
16ee0 2c 20 7a 44 61 74 61 2c 20 6c 65 6e 29 3b 0a 20  , zData, len);. 
16ef0 20 20 20 20 20 70 44 65 73 74 2d 3e 7a 5b 6c 65       pDest->z[le
16f00 6e 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 44  n] = 0;.      pD
16f10 65 73 74 2d 3e 7a 5b 6c 65 6e 2b 31 5d 20 3d 20  est->z[len+1] = 
16f20 30 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e  0;.      pDest->
16f30 66 6c 61 67 73 20 3d 20 61 46 6c 61 67 5b 74 26  flags = aFlag[t&
16f40 31 5d 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  1];.    }.  }els
16f50 65 7b 0a 20 20 20 20 70 44 65 73 74 2d 3e 65 6e  e{.    pDest->en
16f60 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20  c = encoding;.  
16f70 20 20 2f 2a 20 54 68 69 73 20 62 72 61 6e 63 68    /* This branch
16f80 20 68 61 70 70 65 6e 73 20 6f 6e 6c 79 20 77 68   happens only wh
16f90 65 6e 20 63 6f 6e 74 65 6e 74 20 69 73 20 6f 6e  en content is on
16fa0 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 73 20   overflow pages 
16fb0 2a 2f 0a 20 20 20 20 69 66 28 20 28 28 70 4f 70  */.    if( ((pOp
16fc0 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 4c  ->p5 & (OPFLAG_L
16fd0 45 4e 47 54 48 41 52 47 7c 4f 50 46 4c 41 47 5f  ENGTHARG|OPFLAG_
16fe0 54 59 50 45 4f 46 41 52 47 29 29 21 3d 30 0a 20  TYPEOFARG))!=0. 
16ff0 20 20 20 20 20 20 20 20 20 26 26 20 28 28 74 3e           && ((t>
17000 3d 31 32 20 26 26 20 28 74 26 31 29 3d 3d 30 29  =12 && (t&1)==0)
17010 20 7c 7c 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f   || (pOp->p5 & O
17020 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29  PFLAG_TYPEOFARG)
17030 21 3d 30 29 29 0a 20 20 20 20 20 7c 7c 20 28 6c  !=0)).     || (l
17040 65 6e 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  en = sqlite3Vdbe
17050 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29  SerialTypeLen(t)
17060 29 3d 3d 30 0a 20 20 20 20 29 7b 0a 20 20 20 20  )==0.    ){.    
17070 20 20 2f 2a 20 43 6f 6e 74 65 6e 74 20 69 73 20    /* Content is 
17080 69 72 72 65 6c 65 76 61 6e 74 20 66 6f 72 0a 20  irrelevant for. 
17090 20 20 20 20 20 2a 2a 20 20 20 20 31 2e 20 74 68       **    1. th
170a0 65 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74  e typeof() funct
170b0 69 6f 6e 2c 0a 20 20 20 20 20 20 2a 2a 20 20 20  ion,.      **   
170c0 20 32 2e 20 74 68 65 20 6c 65 6e 67 74 68 28 58   2. the length(X
170d0 29 20 66 75 6e 63 74 69 6f 6e 20 69 66 20 58 20  ) function if X 
170e0 69 73 20 61 20 62 6c 6f 62 2c 20 61 6e 64 0a 20  is a blob, and. 
170f0 20 20 20 20 20 2a 2a 20 20 20 20 33 2e 20 69 66       **    3. if
17100 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6c 65 6e   the content len
17110 67 74 68 20 69 73 20 7a 65 72 6f 2e 0a 20 20 20  gth is zero..   
17120 20 20 20 2a 2a 20 53 6f 20 77 65 20 6d 69 67 68     ** So we migh
17130 74 20 61 73 20 77 65 6c 6c 20 75 73 65 20 62 6f  t as well use bo
17140 67 75 73 20 63 6f 6e 74 65 6e 74 20 72 61 74 68  gus content rath
17150 65 72 20 74 68 61 6e 20 72 65 61 64 69 6e 67 0a  er than reading.
17160 20 20 20 20 20 20 2a 2a 20 63 6f 6e 74 65 6e 74        ** content
17170 20 66 72 6f 6d 20 64 69 73 6b 2e 20 0a 20 20 20   from disk. .   
17180 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 41     **.      ** A
17190 6c 74 68 6f 75 67 68 20 73 71 6c 69 74 65 33 56  lthough sqlite3V
171a0 64 62 65 53 65 72 69 61 6c 47 65 74 28 29 20 6d  dbeSerialGet() m
171b0 61 79 20 72 65 61 64 20 61 74 20 6d 6f 73 74 20  ay read at most 
171c0 38 20 62 79 74 65 73 20 66 72 6f 6d 20 74 68 65  8 bytes from the
171d0 0a 20 20 20 20 20 20 2a 2a 20 62 75 66 66 65 72  .      ** buffer
171e0 20 70 61 73 73 65 64 20 74 6f 20 69 74 2c 20 64   passed to it, d
171f0 65 62 75 67 67 69 6e 67 20 66 75 6e 63 74 69 6f  ebugging functio
17200 6e 20 56 64 62 65 4d 65 6d 50 72 65 74 74 79 50  n VdbeMemPrettyP
17210 72 69 6e 74 28 29 20 6d 61 79 0a 20 20 20 20 20  rint() may.     
17220 20 2a 2a 20 72 65 61 64 20 75 70 20 74 6f 20 31   ** read up to 1
17230 36 2e 20 53 6f 20 31 36 20 62 79 74 65 73 20 6f  6. So 16 bytes o
17240 66 20 62 6f 67 75 73 20 63 6f 6e 74 65 6e 74 20  f bogus content 
17250 69 73 20 73 75 70 70 6c 69 65 64 2e 0a 20 20 20  is supplied..   
17260 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 74 61 74     */.      stat
17270 69 63 20 75 38 20 61 5a 65 72 6f 5b 31 36 5d 3b  ic u8 aZero[16];
17280 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65    /* This is the
17290 20 62 6f 67 75 73 20 63 6f 6e 74 65 6e 74 20 2a   bogus content *
172a0 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  /.      sqlite3V
172b0 64 62 65 53 65 72 69 61 6c 47 65 74 28 61 5a 65  dbeSerialGet(aZe
172c0 72 6f 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a 20  ro, t, pDest);. 
172d0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
172e0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
172f0 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 2d  MemFromBtree(pC-
17300 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 61 4f 66  >uc.pCursor, aOf
17310 66 73 65 74 5b 70 32 5d 2c 20 6c 65 6e 2c 20 70  fset[p2], len, p
17320 44 65 73 74 29 3b 0a 20 20 20 20 20 20 69 66 28  Dest);.      if(
17330 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
17340 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
17350 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
17360 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
17370 6c 47 65 74 28 28 63 6f 6e 73 74 20 75 38 2a 29  lGet((const u8*)
17380 70 44 65 73 74 2d 3e 7a 2c 20 74 2c 20 70 44 65  pDest->z, t, pDe
17390 73 74 29 3b 0a 20 20 20 20 20 20 70 44 65 73 74  st);.      pDest
173a0 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f  ->flags &= ~MEM_
173b0 45 70 68 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 7d  Ephem;.    }.  }
173c0 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3a  ..op_column_out:
173d0 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
173e0 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a 20  OBSIZE(pDest);. 
173f0 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
17400 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b  pOp->p3, pDest);
17410 0a 20 20 62 72 65 61 6b 3b 0a 0a 6f 70 5f 63 6f  .  break;..op_co
17420 6c 75 6d 6e 5f 63 6f 72 72 75 70 74 3a 0a 20 20  lumn_corrupt:.  
17430 69 66 28 20 61 4f 70 5b 30 5d 2e 70 33 3e 30 20  if( aOp[0].p3>0 
17440 29 7b 0a 20 20 20 20 70 4f 70 20 3d 20 26 61 4f  ){.    pOp = &aO
17450 70 5b 61 4f 70 5b 30 5d 2e 70 33 2d 31 5d 3b 0a  p[aOp[0].p3-1];.
17460 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c      break;.  }el
17470 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c  se{.    rc = SQL
17480 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54  ITE_CORRUPT_BKPT
17490 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74  ;.    goto abort
174a0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
174b0 20 7d 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a   }.}../* Opcode:
174c0 20 41 66 66 69 6e 69 74 79 20 50 31 20 50 32 20   Affinity P1 P2 
174d0 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
174e0 69 73 3a 20 61 66 66 69 6e 69 74 79 28 72 5b 50  is: affinity(r[P
174f0 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 41 70 70  1@P2]).**.** App
17500 6c 79 20 61 66 66 69 6e 69 74 69 65 73 20 74 6f  ly affinities to
17510 20 61 20 72 61 6e 67 65 20 6f 66 20 50 32 20 72   a range of P2 r
17520 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69 6e  egisters startin
17530 67 20 77 69 74 68 20 50 31 2e 0a 2a 2a 0a 2a 2a  g with P1..**.**
17540 20 50 34 20 69 73 20 61 20 73 74 72 69 6e 67 20   P4 is a string 
17550 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61  that is P2 chara
17560 63 74 65 72 73 20 6c 6f 6e 67 2e 20 54 68 65 20  cters long. The 
17570 4e 2d 74 68 20 63 68 61 72 61 63 74 65 72 20 6f  N-th character o
17580 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20  f the.** string 
17590 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f  indicates the co
175a0 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68  lumn affinity th
175b0 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65  at should be use
175c0 64 20 66 6f 72 20 74 68 65 20 4e 2d 74 68 0a 2a  d for the N-th.*
175d0 2a 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e  * memory cell in
175e0 20 74 68 65 20 72 61 6e 67 65 2e 0a 2a 2f 0a 63   the range..*/.c
175f0 61 73 65 20 4f 50 5f 41 66 66 69 6e 69 74 79 3a  ase OP_Affinity:
17600 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20   {.  const char 
17610 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a  *zAffinity;   /*
17620 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74 6f   The affinity to
17630 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a 0a   be applied */..
17640 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70 4f    zAffinity = pO
17650 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72  p->p4.z;.  asser
17660 74 28 20 7a 41 66 66 69 6e 69 74 79 21 3d 30 20  t( zAffinity!=0 
17670 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
17680 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65  ->p2>0 );.  asse
17690 72 74 28 20 7a 41 66 66 69 6e 69 74 79 5b 70 4f  rt( zAffinity[pO
176a0 70 2d 3e 70 32 5d 3d 3d 30 20 29 3b 0a 20 20 70  p->p2]==0 );.  p
176b0 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
176c0 3e 70 31 5d 3b 0a 20 20 77 68 69 6c 65 28 20 31  >p1];.  while( 1
176d0 20 2f 2a 65 78 69 74 2d 62 79 2d 62 72 65 61 6b   /*exit-by-break
176e0 2a 2f 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  */ ){.    assert
176f0 28 20 70 49 6e 31 20 3c 3d 20 26 70 2d 3e 61 4d  ( pIn1 <= &p->aM
17700 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  em[(p->nMem+1 - 
17710 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a  p->nCursor)] );.
17720 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
17730 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a  sValid(pIn1) );.
17740 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74      applyAffinit
17750 79 28 70 49 6e 31 2c 20 7a 41 66 66 69 6e 69 74  y(pIn1, zAffinit
17760 79 5b 30 5d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  y[0], encoding);
17770 0a 20 20 20 20 69 66 28 20 7a 41 66 66 69 6e 69  .    if( zAffini
17780 74 79 5b 30 5d 3d 3d 53 51 4c 49 54 45 5f 41 46  ty[0]==SQLITE_AF
17790 46 5f 52 45 41 4c 20 26 26 20 28 70 49 6e 31 2d  F_REAL && (pIn1-
177a0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
177b0 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a  )!=0 ){.      /*
177c0 20 57 68 65 6e 20 61 70 70 6c 79 69 6e 67 20 52   When applying R
177d0 45 41 4c 20 61 66 66 69 6e 69 74 79 2c 20 69 66  EAL affinity, if
177e0 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 73   the result is s
177f0 74 69 6c 6c 20 61 6e 20 4d 45 4d 5f 49 6e 74 0a  till an MEM_Int.
17800 20 20 20 20 20 20 2a 2a 20 74 68 61 74 20 77 69        ** that wi
17810 6c 6c 20 66 69 74 20 69 6e 20 36 20 62 79 74 65  ll fit in 6 byte
17820 73 2c 20 74 68 65 6e 20 63 68 61 6e 67 65 20 74  s, then change t
17830 68 65 20 74 79 70 65 20 74 6f 20 4d 45 4d 5f 49  he type to MEM_I
17840 6e 74 52 65 61 6c 0a 20 20 20 20 20 20 2a 2a 20  ntReal.      ** 
17850 73 6f 20 74 68 61 74 20 77 65 20 6b 65 65 70 20  so that we keep 
17860 74 68 65 20 68 69 67 68 2d 72 65 73 6f 6c 75 74  the high-resolut
17870 69 6f 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75  ion integer valu
17880 65 20 62 75 74 20 6b 6e 6f 77 20 74 68 61 74 0a  e but know that.
17890 20 20 20 20 20 20 2a 2a 20 74 68 65 20 74 79 70        ** the typ
178a0 65 20 72 65 61 6c 6c 79 20 77 61 6e 74 73 20 74  e really wants t
178b0 6f 20 62 65 20 52 45 41 4c 2e 20 2a 2f 0a 20 20  o be REAL. */.  
178c0 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49      testcase( pI
178d0 6e 31 2d 3e 75 2e 69 3d 3d 31 34 30 37 33 37 34  n1->u.i==1407374
178e0 38 38 33 35 35 33 32 38 4c 4c 20 29 3b 0a 20 20  88355328LL );.  
178f0 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49      testcase( pI
17900 6e 31 2d 3e 75 2e 69 3d 3d 31 34 30 37 33 37 34  n1->u.i==1407374
17910 38 38 33 35 35 33 32 37 4c 4c 20 29 3b 0a 20 20  88355327LL );.  
17920 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49      testcase( pI
17930 6e 31 2d 3e 75 2e 69 3d 3d 2d 31 34 30 37 33 37  n1->u.i==-140737
17940 34 38 38 33 35 35 33 32 38 4c 4c 20 29 3b 0a 20  488355328LL );. 
17950 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70       testcase( p
17960 49 6e 31 2d 3e 75 2e 69 3d 3d 2d 31 34 30 37 33  In1->u.i==-14073
17970 37 34 38 38 33 35 35 33 32 39 4c 4c 20 29 3b 0a  7488355329LL );.
17980 20 20 20 20 20 20 69 66 28 20 70 49 6e 31 2d 3e        if( pIn1->
17990 75 2e 69 3c 3d 31 34 30 37 33 37 34 38 38 33 35  u.i<=14073748835
179a0 35 33 32 37 4c 4c 20 26 26 20 70 49 6e 31 2d 3e  5327LL && pIn1->
179b0 75 2e 69 3e 3d 2d 31 34 30 37 33 37 34 38 38 33  u.i>=-1407374883
179c0 35 35 33 32 38 4c 4c 20 29 7b 0a 20 20 20 20 20  55328LL ){.     
179d0 20 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c     pIn1->flags |
179e0 3d 20 4d 45 4d 5f 49 6e 74 52 65 61 6c 3b 0a 20  = MEM_IntReal;. 
179f0 20 20 20 20 20 20 20 70 49 6e 31 2d 3e 66 6c 61         pIn1->fla
17a00 67 73 20 26 3d 20 7e 4d 45 4d 5f 49 6e 74 3b 0a  gs &= ~MEM_Int;.
17a10 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
17a20 20 20 20 20 20 70 49 6e 31 2d 3e 75 2e 72 20 3d       pIn1->u.r =
17a30 20 28 64 6f 75 62 6c 65 29 70 49 6e 31 2d 3e 75   (double)pIn1->u
17a40 2e 69 3b 0a 20 20 20 20 20 20 20 20 70 49 6e 31  .i;.        pIn1
17a50 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 52  ->flags |= MEM_R
17a60 65 61 6c 3b 0a 20 20 20 20 20 20 20 20 70 49 6e  eal;.        pIn
17a70 31 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d  1->flags &= ~MEM
17a80 5f 49 6e 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20  _Int;.      }.  
17a90 20 20 7d 0a 20 20 20 20 52 45 47 49 53 54 45 52    }.    REGISTER
17aa0 5f 54 52 41 43 45 28 28 69 6e 74 29 28 70 49 6e  _TRACE((int)(pIn
17ab0 31 2d 61 4d 65 6d 29 2c 20 70 49 6e 31 29 3b 0a  1-aMem), pIn1);.
17ac0 20 20 20 20 7a 41 66 66 69 6e 69 74 79 2b 2b 3b      zAffinity++;
17ad0 0a 20 20 20 20 69 66 28 20 7a 41 66 66 69 6e 69  .    if( zAffini
17ae0 74 79 5b 30 5d 3d 3d 30 20 29 20 62 72 65 61 6b  ty[0]==0 ) break
17af0 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20  ;.    pIn1++;.  
17b00 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
17b10 20 4f 70 63 6f 64 65 3a 20 4d 61 6b 65 52 65 63   Opcode: MakeRec
17b20 6f 72 64 20 50 31 20 50 32 20 50 33 20 50 34 20  ord P1 P2 P3 P4 
17b30 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
17b40 5b 50 33 5d 3d 6d 6b 72 65 63 28 72 5b 50 31 40  [P3]=mkrec(r[P1@
17b50 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76 65  P2]).**.** Conve
17b60 72 74 20 50 32 20 72 65 67 69 73 74 65 72 73 20  rt P2 registers 
17b70 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
17b80 31 20 69 6e 74 6f 20 74 68 65 20 5b 72 65 63 6f  1 into the [reco
17b90 72 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20 75 73  rd format].** us
17ba0 65 20 61 73 20 61 20 64 61 74 61 20 72 65 63 6f  e as a data reco
17bb0 72 64 20 69 6e 20 61 20 64 61 74 61 62 61 73 65  rd in a database
17bc0 20 74 61 62 6c 65 20 6f 72 20 61 73 20 61 20 6b   table or as a k
17bd0 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e 64 65  ey.** in an inde
17be0 78 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d  x.  The OP_Colum
17bf0 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20 64 65 63  n opcode can dec
17c00 6f 64 65 20 74 68 65 20 72 65 63 6f 72 64 20 6c  ode the record l
17c10 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d  ater..**.** P4 m
17c20 61 79 20 62 65 20 61 20 73 74 72 69 6e 67 20 74  ay be a string t
17c30 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61 63  hat is P2 charac
17c40 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65 20  ters long.  The 
17c50 4e 2d 74 68 20 63 68 61 72 61 63 74 65 72 20 6f  N-th character o
17c60 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20  f the.** string 
17c70 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f  indicates the co
17c80 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68  lumn affinity th
17c90 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65  at should be use
17ca0 64 20 66 6f 72 20 74 68 65 20 4e 2d 74 68 0a 2a  d for the N-th.*
17cb0 2a 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 69  * field of the i
17cc0 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20  ndex key..**.** 
17cd0 54 68 65 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d  The mapping from
17ce0 20 63 68 61 72 61 63 74 65 72 20 74 6f 20 61 66   character to af
17cf0 66 69 6e 69 74 79 20 69 73 20 67 69 76 65 6e 20  finity is given 
17d00 62 79 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46  by the SQLITE_AF
17d10 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64 65 66  F_.** macros def
17d20 69 6e 65 64 20 69 6e 20 73 71 6c 69 74 65 49 6e  ined in sqliteIn
17d30 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  t.h..**.** If P4
17d40 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 61 6c   is NULL then al
17d50 6c 20 69 6e 64 65 78 20 66 69 65 6c 64 73 20 68  l index fields h
17d60 61 76 65 20 74 68 65 20 61 66 66 69 6e 69 74 79  ave the affinity
17d70 20 42 4c 4f 42 2e 0a 2a 2f 0a 63 61 73 65 20 4f   BLOB..*/.case O
17d80 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20 7b 0a  P_MakeRecord: {.
17d90 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20 20 20 20    Mem *pRec;    
17da0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
17db0 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  new record */.  
17dc0 75 36 34 20 6e 44 61 74 61 3b 20 20 20 20 20 20  u64 nData;      
17dd0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
17de0 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61 74   of bytes of dat
17df0 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74  a space */.  int
17e00 20 6e 48 64 72 3b 20 20 20 20 20 20 20 20 20 20   nHdr;          
17e10 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
17e20 20 62 79 74 65 73 20 6f 66 20 68 65 61 64 65 72   bytes of header
17e30 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 36 34 20   space */.  i64 
17e40 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20 20 20  nByte;          
17e50 20 20 20 2f 2a 20 44 61 74 61 20 73 70 61 63 65     /* Data space
17e60 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68   required for th
17e70 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  is record */.  i
17e80 36 34 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20  64 nZero;       
17e90 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
17ea0 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20 61 74  of zero bytes at
17eb0 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
17ec0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
17ed0 6e 56 61 72 69 6e 74 3b 20 20 20 20 20 20 20 20  nVarint;        
17ee0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
17ef0 62 79 74 65 73 20 69 6e 20 61 20 76 61 72 69 6e  bytes in a varin
17f00 74 20 2a 2f 0a 20 20 75 33 32 20 73 65 72 69 61  t */.  u32 seria
17f10 6c 5f 74 79 70 65 3b 20 20 20 20 20 20 20 2f 2a  l_type;       /*
17f20 20 54 79 70 65 20 66 69 65 6c 64 20 2a 2f 0a 20   Type field */. 
17f30 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20 20 20   Mem *pData0;   
17f40 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
17f50 20 66 69 65 6c 64 20 74 6f 20 62 65 20 63 6f 6d   field to be com
17f60 62 69 6e 65 64 20 69 6e 74 6f 20 74 68 65 20 72  bined into the r
17f70 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  ecord */.  Mem *
17f80 70 4c 61 73 74 3b 20 20 20 20 20 20 20 20 20 20  pLast;          
17f90 20 20 2f 2a 20 4c 61 73 74 20 66 69 65 6c 64 20    /* Last field 
17fa0 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  of the record */
17fb0 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20  .  int nField;  
17fc0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
17fd0 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e  ber of fields in
17fe0 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
17ff0 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79   char *zAffinity
18000 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61  ;       /* The a
18010 66 66 69 6e 69 74 79 20 73 74 72 69 6e 67 20 66  ffinity string f
18020 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  or the record */
18030 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66 6f 72 6d  .  int file_form
18040 61 74 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 6c  at;       /* Fil
18050 65 20 66 6f 72 6d 61 74 20 74 6f 20 75 73 65 20  e format to use 
18060 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a  for encoding */.
18070 20 20 75 33 32 20 6c 65 6e 3b 20 20 20 20 20 20    u32 len;      
18080 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67           /* Leng
18090 74 68 20 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f  th of a field */
180a0 0a 20 20 75 38 20 2a 7a 48 64 72 3b 20 20 20 20  .  u8 *zHdr;    
180b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65            /* Whe
180c0 72 65 20 74 6f 20 77 72 69 74 65 20 6e 65 78 74  re to write next
180d0 20 62 79 74 65 20 6f 66 20 74 68 65 20 68 65 61   byte of the hea
180e0 64 65 72 20 2a 2f 0a 20 20 75 38 20 2a 7a 50 61  der */.  u8 *zPa
180f0 79 6c 6f 61 64 3b 20 20 20 20 20 20 20 20 20 20  yload;          
18100 2f 2a 20 57 68 65 72 65 20 74 6f 20 77 72 69 74  /* Where to writ
18110 65 20 6e 65 78 74 20 62 79 74 65 20 6f 66 20 74  e next byte of t
18120 68 65 20 70 61 79 6c 6f 61 64 20 2a 2f 0a 0a 20  he payload */.. 
18130 20 2f 2a 20 41 73 73 75 6d 69 6e 67 20 74 68 65   /* Assuming the
18140 20 72 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73   record contains
18150 20 4e 20 66 69 65 6c 64 73 2c 20 74 68 65 20 72   N fields, the r
18160 65 63 6f 72 64 20 66 6f 72 6d 61 74 20 6c 6f 6f  ecord format loo
18170 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65 20 74 68 69  ks.  ** like thi
18180 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d  s:.  **.  ** ---
18190 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
181a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
181b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
181c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
181d0 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c 20 68 64 72  -----.  ** | hdr
181e0 2d 73 69 7a 65 20 7c 20 74 79 70 65 20 30 20 7c  -size | type 0 |
181f0 20 74 79 70 65 20 31 20 7c 20 2e 2e 2e 20 7c 20   type 1 | ... | 
18200 74 79 70 65 20 4e 2d 31 20 7c 20 64 61 74 61 30  type N-1 | data0
18210 20 7c 20 2e 2e 2e 20 7c 20 64 61 74 61 20 4e 2d   | ... | data N-
18220 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d  1 | .  ** ------
18230 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
18240 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
18250 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
18260 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
18270 2d 2d 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 61 74  --.  **.  ** Dat
18280 61 28 30 29 20 69 73 20 74 61 6b 65 6e 20 66 72  a(0) is taken fr
18290 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  om register P1. 
182a0 20 44 61 74 61 28 31 29 20 63 6f 6d 65 73 20 66   Data(1) comes f
182b0 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31 2b  rom register P1+
182c0 31 0a 20 20 2a 2a 20 61 6e 64 20 73 6f 20 66 6f  1.  ** and so fo
182d0 72 74 68 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 45  rth..  **.  ** E
182e0 61 63 68 20 74 79 70 65 20 66 69 65 6c 64 20 69  ach type field i
182f0 73 20 61 20 76 61 72 69 6e 74 20 72 65 70 72 65  s a varint repre
18300 73 65 6e 74 69 6e 67 20 74 68 65 20 73 65 72 69  senting the seri
18310 61 6c 20 74 79 70 65 20 6f 66 20 74 68 65 20 0a  al type of the .
18320 20 20 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69    ** correspondi
18330 6e 67 20 64 61 74 61 20 65 6c 65 6d 65 6e 74 20  ng data element 
18340 28 73 65 65 20 73 71 6c 69 74 65 33 56 64 62 65  (see sqlite3Vdbe
18350 53 65 72 69 61 6c 54 79 70 65 28 29 29 2e 20 54  SerialType()). T
18360 68 65 0a 20 20 2a 2a 20 68 64 72 2d 73 69 7a 65  he.  ** hdr-size
18370 20 66 69 65 6c 64 20 69 73 20 61 6c 73 6f 20 61   field is also a
18380 20 76 61 72 69 6e 74 20 77 68 69 63 68 20 69 73   varint which is
18390 20 74 68 65 20 6f 66 66 73 65 74 20 66 72 6f 6d   the offset from
183a0 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20   the beginning. 
183b0 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72   ** of the recor
183c0 64 20 74 6f 20 64 61 74 61 30 2e 0a 20 20 2a 2f  d to data0..  */
183d0 0a 20 20 6e 44 61 74 61 20 3d 20 30 3b 20 20 20  .  nData = 0;   
183e0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
183f0 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61 74 61  of bytes of data
18400 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 48 64 72   space */.  nHdr
18410 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f   = 0;          /
18420 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
18430 73 20 6f 66 20 68 65 61 64 65 72 20 73 70 61 63  s of header spac
18440 65 20 2a 2f 0a 20 20 6e 5a 65 72 6f 20 3d 20 30  e */.  nZero = 0
18450 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
18460 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65  ber of zero byte
18470 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20  s at the end of 
18480 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
18490 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 31  nField = pOp->p1
184a0 3b 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20  ;.  zAffinity = 
184b0 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73  pOp->p4.z;.  ass
184c0 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 26 26  ert( nField>0 &&
184d0 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f   pOp->p2>0 && pO
184e0 70 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d 28 70  p->p2+nField<=(p
184f0 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
18500 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 70 44  ursor)+1 );.  pD
18510 61 74 61 30 20 3d 20 26 61 4d 65 6d 5b 6e 46 69  ata0 = &aMem[nFi
18520 65 6c 64 5d 3b 0a 20 20 6e 46 69 65 6c 64 20 3d  eld];.  nField =
18530 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 4c 61 73   pOp->p2;.  pLas
18540 74 20 3d 20 26 70 44 61 74 61 30 5b 6e 46 69 65  t = &pData0[nFie
18550 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c 65 5f 66 6f  ld-1];.  file_fo
18560 72 6d 61 74 20 3d 20 70 2d 3e 6d 69 6e 57 72 69  rmat = p->minWri
18570 74 65 46 69 6c 65 46 6f 72 6d 61 74 3b 0a 0a 20  teFileFormat;.. 
18580 20 2f 2a 20 49 64 65 6e 74 69 66 79 20 74 68 65   /* Identify the
18590 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72   output register
185a0 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
185b0 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 31 20 7c 7c  p->p3<pOp->p1 ||
185c0 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70   pOp->p3>=pOp->p
185d0 31 2b 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 70  1+pOp->p2 );.  p
185e0 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
185f0 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p3];.  memAbout
18600 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
18610 29 3b 0a 0a 20 20 2f 2a 20 41 70 70 6c 79 20 74  );..  /* Apply t
18620 68 65 20 72 65 71 75 65 73 74 65 64 20 61 66 66  he requested aff
18630 69 6e 69 74 79 20 74 6f 20 61 6c 6c 20 69 6e 70  inity to all inp
18640 75 74 73 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72  uts.  */.  asser
18650 74 28 20 70 44 61 74 61 30 3c 3d 70 4c 61 73 74  t( pData0<=pLast
18660 20 29 3b 0a 20 20 69 66 28 20 7a 41 66 66 69 6e   );.  if( zAffin
18670 69 74 79 20 29 7b 0a 20 20 20 20 70 52 65 63 20  ity ){.    pRec 
18680 3d 20 70 44 61 74 61 30 3b 0a 20 20 20 20 64 6f  = pData0;.    do
18690 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66 66  {.      applyAff
186a0 69 6e 69 74 79 28 70 52 65 63 2c 20 7a 41 66 66  inity(pRec, zAff
186b0 69 6e 69 74 79 5b 30 5d 2c 20 65 6e 63 6f 64 69  inity[0], encodi
186c0 6e 67 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a  ng);.      if( z
186d0 41 66 66 69 6e 69 74 79 5b 30 5d 3d 3d 53 51 4c  Affinity[0]==SQL
186e0 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 26 26 20  ITE_AFF_REAL && 
186f0 28 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d  (pRec->flags & M
18700 45 4d 5f 49 6e 74 29 20 29 7b 0a 20 20 20 20 20  EM_Int) ){.     
18710 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c     pRec->flags |
18720 3d 20 4d 45 4d 5f 49 6e 74 52 65 61 6c 3b 0a 20  = MEM_IntReal;. 
18730 20 20 20 20 20 20 20 70 52 65 63 2d 3e 66 6c 61         pRec->fla
18740 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 49 6e 74 29  gs &= ~(MEM_Int)
18750 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
18760 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 28  REGISTER_TRACE((
18770 69 6e 74 29 28 70 52 65 63 2d 61 4d 65 6d 29 2c  int)(pRec-aMem),
18780 20 70 52 65 63 29 3b 0a 20 20 20 20 20 20 7a 41   pRec);.      zA
18790 66 66 69 6e 69 74 79 2b 2b 3b 0a 20 20 20 20 20  ffinity++;.     
187a0 20 70 52 65 63 2b 2b 3b 0a 20 20 20 20 20 20 61   pRec++;.      a
187b0 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79  ssert( zAffinity
187c0 5b 30 5d 3d 3d 30 20 7c 7c 20 70 52 65 63 3c 3d  [0]==0 || pRec<=
187d0 70 4c 61 73 74 20 29 3b 0a 20 20 20 20 7d 77 68  pLast );.    }wh
187e0 69 6c 65 28 20 7a 41 66 66 69 6e 69 74 79 5b 30  ile( zAffinity[0
187f0 5d 20 29 3b 0a 20 20 7d 0a 0a 23 69 66 64 65 66  ] );.  }..#ifdef
18800 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4e   SQLITE_ENABLE_N
18810 55 4c 4c 5f 54 52 49 4d 0a 20 20 2f 2a 20 4e 55  ULL_TRIM.  /* NU
18820 4c 4c 73 20 63 61 6e 20 62 65 20 73 61 66 65 6c  LLs can be safel
18830 79 20 74 72 69 6d 6d 65 64 20 66 72 6f 6d 20 74  y trimmed from t
18840 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65  he end of the re
18850 63 6f 72 64 2c 20 61 73 20 6c 6f 6e 67 20 61 73  cord, as long as
18860 0a 20 20 2a 2a 20 61 73 20 74 68 65 20 73 63 68  .  ** as the sch
18870 65 6d 61 20 66 6f 72 6d 61 74 20 69 73 20 32 20  ema format is 2 
18880 6f 72 20 6d 6f 72 65 20 61 6e 64 20 6e 6f 6e 65  or more and none
18890 20 6f 66 20 74 68 65 20 6f 6d 69 74 74 65 64 20   of the omitted 
188a0 63 6f 6c 75 6d 6e 73 0a 20 20 2a 2a 20 68 61 76  columns.  ** hav
188b0 65 20 61 20 6e 6f 6e 2d 4e 55 4c 4c 20 64 65 66  e a non-NULL def
188c0 61 75 6c 74 20 76 61 6c 75 65 2e 20 20 41 6c 73  ault value.  Als
188d0 6f 2c 20 74 68 65 20 72 65 63 6f 72 64 20 6d 75  o, the record mu
188e0 73 74 20 62 65 20 6c 65 66 74 20 77 69 74 68 0a  st be left with.
188f0 20 20 2a 2a 20 61 74 20 6c 65 61 73 74 20 6f 6e    ** at least on
18900 65 20 66 69 65 6c 64 2e 20 20 49 66 20 50 35 3e  e field.  If P5>
18910 30 20 74 68 65 6e 20 69 74 20 77 69 6c 6c 20 62  0 then it will b
18920 65 20 6f 6e 65 20 6d 6f 72 65 20 74 68 61 6e 20  e one more than 
18930 74 68 65 0a 20 20 2a 2a 20 69 6e 64 65 78 20 6f  the.  ** index o
18940 66 20 74 68 65 20 72 69 67 68 74 2d 6d 6f 73 74  f the right-most
18950 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20 61 20 6e   column with a n
18960 6f 6e 2d 4e 55 4c 4c 20 64 65 66 61 75 6c 74 20  on-NULL default 
18970 76 61 6c 75 65 20 2a 2f 0a 20 20 69 66 28 20 70  value */.  if( p
18980 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 77 68  Op->p5 ){.    wh
18990 69 6c 65 28 20 28 70 4c 61 73 74 2d 3e 66 6c 61  ile( (pLast->fla
189a0 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d  gs & MEM_Null)!=
189b0 30 20 26 26 20 6e 46 69 65 6c 64 3e 70 4f 70 2d  0 && nField>pOp-
189c0 3e 70 35 20 29 7b 0a 20 20 20 20 20 20 70 4c 61  >p5 ){.      pLa
189d0 73 74 2d 2d 3b 0a 20 20 20 20 20 20 6e 46 69 65  st--;.      nFie
189e0 6c 64 2d 2d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  ld--;.    }.  }.
189f0 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 4c 6f 6f  #endif..  /* Loo
18a00 70 20 74 68 72 6f 75 67 68 20 74 68 65 20 65 6c  p through the el
18a10 65 6d 65 6e 74 73 20 74 68 61 74 20 77 69 6c 6c  ements that will
18a20 20 6d 61 6b 65 20 75 70 20 74 68 65 20 72 65 63   make up the rec
18a30 6f 72 64 20 74 6f 20 66 69 67 75 72 65 0a 20 20  ord to figure.  
18a40 2a 2a 20 6f 75 74 20 68 6f 77 20 6d 75 63 68 20  ** out how much 
18a50 73 70 61 63 65 20 69 73 20 72 65 71 75 69 72 65  space is require
18a60 64 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65  d for the new re
18a70 63 6f 72 64 2e 20 20 41 66 74 65 72 20 74 68 69  cord.  After thi
18a80 73 20 6c 6f 6f 70 2c 0a 20 20 2a 2a 20 74 68 65  s loop,.  ** the
18a90 20 4d 65 6d 2e 75 54 65 6d 70 20 66 69 65 6c 64   Mem.uTemp field
18aa0 20 6f 66 20 65 61 63 68 20 74 65 72 6d 20 73 68   of each term sh
18ab0 6f 75 6c 64 20 68 6f 6c 64 20 74 68 65 20 73 65  ould hold the se
18ac0 72 69 61 6c 2d 74 79 70 65 20 74 68 61 74 20 77  rial-type that w
18ad0 69 6c 6c 0a 20 20 2a 2a 20 62 65 20 75 73 65 64  ill.  ** be used
18ae0 20 66 6f 72 20 74 68 61 74 20 74 65 72 6d 20 69   for that term i
18af0 6e 20 74 68 65 20 67 65 6e 65 72 61 74 65 64 20  n the generated 
18b00 72 65 63 6f 72 64 3a 0a 20 20 2a 2a 0a 20 20 2a  record:.  **.  *
18b10 2a 20 20 20 4d 65 6d 2e 75 54 65 6d 70 20 76 61  *   Mem.uTemp va
18b20 6c 75 65 20 20 20 20 74 79 70 65 0a 20 20 2a 2a  lue    type.  **
18b30 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d     -------------
18b40 2d 2d 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  --    ----------
18b50 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 20 20 20 20 20  -----.  **      
18b60 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  0               
18b70 4e 55 4c 4c 0a 20 20 2a 2a 20 20 20 20 20 20 31  NULL.  **      1
18b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 31                 1
18b90 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74  -byte signed int
18ba0 65 67 65 72 0a 20 20 2a 2a 20 20 20 20 20 20 32  eger.  **      2
18bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32                 2
18bc0 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74  -byte signed int
18bd0 65 67 65 72 0a 20 20 2a 2a 20 20 20 20 20 20 33  eger.  **      3
18be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 33                 3
18bf0 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74  -byte signed int
18c00 65 67 65 72 0a 20 20 2a 2a 20 20 20 20 20 20 34  eger.  **      4
18c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 34                 4
18c20 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74  -byte signed int
18c30 65 67 65 72 0a 20 20 2a 2a 20 20 20 20 20 20 35  eger.  **      5
18c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 36                 6
18c50 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74  -byte signed int
18c60 65 67 65 72 0a 20 20 2a 2a 20 20 20 20 20 20 36  eger.  **      6
18c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 38                 8
18c80 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74  -byte signed int
18c90 65 67 65 72 0a 20 20 2a 2a 20 20 20 20 20 20 37  eger.  **      7
18ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
18cb0 45 45 45 20 66 6c 6f 61 74 0a 20 20 2a 2a 20 20  EEE float.  **  
18cc0 20 20 20 20 38 20 20 20 20 20 20 20 20 20 20 20      8           
18cd0 20 20 20 20 49 6e 74 65 67 65 72 20 63 6f 6e 73      Integer cons
18ce0 74 61 6e 74 20 30 0a 20 20 2a 2a 20 20 20 20 20  tant 0.  **     
18cf0 20 39 20 20 20 20 20 20 20 20 20 20 20 20 20 20   9              
18d00 20 49 6e 74 65 67 65 72 20 63 6f 6e 73 74 61 6e   Integer constan
18d10 74 20 31 0a 20 20 2a 2a 20 20 20 20 20 31 30 2c  t 1.  **     10,
18d20 31 31 20 20 20 20 20 20 20 20 20 20 20 20 72 65  11            re
18d30 73 65 72 76 65 64 20 66 6f 72 20 65 78 70 61 6e  served for expan
18d40 73 69 6f 6e 0a 20 20 2a 2a 20 20 20 20 4e 3e 3d  sion.  **    N>=
18d50 31 32 20 61 6e 64 20 65 76 65 6e 20 20 20 20 42  12 and even    B
18d60 4c 4f 42 0a 20 20 2a 2a 20 20 20 20 4e 3e 3d 31  LOB.  **    N>=1
18d70 33 20 61 6e 64 20 6f 64 64 20 20 20 20 20 74 65  3 and odd     te
18d80 78 74 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65  xt.  **.  ** The
18d90 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 64 64 69 74   following addit
18da0 69 6f 6e 61 6c 20 76 61 6c 75 65 73 20 61 72 65  ional values are
18db0 20 63 6f 6d 70 75 74 65 64 3a 0a 20 20 2a 2a 20   computed:.  ** 
18dc0 20 20 20 20 6e 48 64 72 20 20 20 20 20 20 20 20      nHdr        
18dd0 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
18de0 6e 65 65 64 65 64 20 66 6f 72 20 74 68 65 20 72  needed for the r
18df0 65 63 6f 72 64 20 68 65 61 64 65 72 0a 20 20 2a  ecord header.  *
18e00 2a 20 20 20 20 20 6e 44 61 74 61 20 20 20 20 20  *     nData     
18e10 20 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65    Number of byte
18e20 73 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20  s of data space 
18e30 6e 65 65 64 65 64 20 66 6f 72 20 74 68 65 20 72  needed for the r
18e40 65 63 6f 72 64 0a 20 20 2a 2a 20 20 20 20 20 6e  ecord.  **     n
18e50 5a 65 72 6f 20 20 20 20 20 20 20 5a 65 72 6f 20  Zero       Zero 
18e60 62 79 74 65 73 20 61 74 20 74 68 65 20 65 6e 64  bytes at the end
18e70 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 0a 20   of the record. 
18e80 20 2a 2f 0a 20 20 70 52 65 63 20 3d 20 70 4c 61   */.  pRec = pLa
18e90 73 74 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73  st;.  do{.    as
18ea0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
18eb0 28 70 52 65 63 29 20 29 3b 0a 20 20 20 20 69 66  (pRec) );.    if
18ec0 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20  ( pRec->flags & 
18ed0 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
18ee0 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67    if( pRec->flag
18ef0 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a  s & MEM_Zero ){.
18f00 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
18f10 73 20 77 69 74 68 20 4d 45 4d 5f 4e 75 6c 6c 20  s with MEM_Null 
18f20 61 6e 64 20 4d 45 4d 5f 5a 65 72 6f 20 61 72 65  and MEM_Zero are
18f30 20 63 72 65 61 74 65 64 20 62 79 20 78 43 6f 6c   created by xCol
18f40 75 6d 6e 20 76 69 72 74 75 61 6c 0a 20 20 20 20  umn virtual.    
18f50 20 20 20 20 2a 2a 20 74 61 62 6c 65 20 6d 65 74      ** table met
18f60 68 6f 64 73 20 74 68 61 74 20 6e 65 76 65 72 20  hods that never 
18f70 69 6e 76 6f 6b 65 20 73 71 6c 69 74 65 33 5f 72  invoke sqlite3_r
18f80 65 73 75 6c 74 5f 78 78 78 78 78 28 29 20 77 68  esult_xxxxx() wh
18f90 69 6c 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 63  ile.        ** c
18fa0 6f 6d 70 75 74 69 6e 67 20 61 6e 20 75 6e 63 68  omputing an unch
18fb0 61 6e 67 69 6e 67 20 63 6f 6c 75 6d 6e 20 76 61  anging column va
18fc0 6c 75 65 20 69 6e 20 61 6e 20 55 50 44 41 54 45  lue in an UPDATE
18fd0 20 73 74 61 74 65 6d 65 6e 74 2e 0a 20 20 20 20   statement..    
18fe0 20 20 20 20 2a 2a 20 47 69 76 65 20 73 75 63 68      ** Give such
18ff0 20 76 61 6c 75 65 73 20 61 20 73 70 65 63 69 61   values a specia
19000 6c 20 69 6e 74 65 72 6e 61 6c 2d 75 73 65 2d 6f  l internal-use-o
19010 6e 6c 79 20 73 65 72 69 61 6c 2d 74 79 70 65 20  nly serial-type 
19020 6f 66 20 31 30 0a 20 20 20 20 20 20 20 20 2a 2a  of 10.        **
19030 20 73 6f 20 74 68 61 74 20 74 68 65 79 20 63 61   so that they ca
19040 6e 20 62 65 20 70 61 73 73 65 64 20 74 68 72 6f  n be passed thro
19050 75 67 68 20 74 6f 20 78 55 70 64 61 74 65 20 61  ugh to xUpdate a
19060 6e 64 20 68 61 76 65 0a 20 20 20 20 20 20 20 20  nd have.        
19070 2a 2a 20 61 20 74 72 75 65 20 73 71 6c 69 74 65  ** a true sqlite
19080 33 5f 76 61 6c 75 65 5f 6e 6f 63 68 61 6e 67 65  3_value_nochange
19090 28 29 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61  (). */.        a
190a0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d  ssert( pOp->p5==
190b0 4f 50 46 4c 41 47 5f 4e 4f 43 48 4e 47 5f 4d 41  OPFLAG_NOCHNG_MA
190c0 47 49 43 20 7c 7c 20 43 4f 52 52 55 50 54 5f 44  GIC || CORRUPT_D
190d0 42 20 29 3b 0a 20 20 20 20 20 20 20 20 70 52 65  B );.        pRe
190e0 63 2d 3e 75 54 65 6d 70 20 3d 20 31 30 3b 0a 20  c->uTemp = 10;. 
190f0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
19100 20 20 20 20 70 52 65 63 2d 3e 75 54 65 6d 70 20      pRec->uTemp 
19110 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  = 0;.      }.   
19120 20 20 20 6e 48 64 72 2b 2b 3b 0a 20 20 20 20 7d     nHdr++;.    }
19130 65 6c 73 65 20 69 66 28 20 70 52 65 63 2d 3e 66  else if( pRec->f
19140 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c  lags & (MEM_Int|
19150 4d 45 4d 5f 49 6e 74 52 65 61 6c 29 20 29 7b 0a  MEM_IntReal) ){.
19160 20 20 20 20 20 20 2f 2a 20 46 69 67 75 72 65 20        /* Figure 
19170 6f 75 74 20 77 68 65 74 68 65 72 20 74 6f 20 75  out whether to u
19180 73 65 20 31 2c 20 32 2c 20 34 2c 20 36 20 6f 72  se 1, 2, 4, 6 or
19190 20 38 20 62 79 74 65 73 2e 20 2a 2f 0a 20 20 20   8 bytes. */.   
191a0 20 20 20 69 36 34 20 69 20 3d 20 70 52 65 63 2d     i64 i = pRec-
191b0 3e 75 2e 69 3b 0a 20 20 20 20 20 20 75 36 34 20  >u.i;.      u64 
191c0 75 75 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61  uu;.      testca
191d0 73 65 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20  se( pRec->flags 
191e0 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20  & MEM_Int );.   
191f0 20 20 20 74 65 73 74 63 61 73 65 28 20 70 52 65     testcase( pRe
19200 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  c->flags & MEM_I
19210 6e 74 52 65 61 6c 20 29 3b 0a 20 20 20 20 20 20  ntReal );.      
19220 69 66 28 20 69 3c 30 20 29 7b 0a 20 20 20 20 20  if( i<0 ){.     
19230 20 20 20 75 75 20 3d 20 7e 69 3b 0a 20 20 20 20     uu = ~i;.    
19240 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
19250 20 75 75 20 3d 20 69 3b 0a 20 20 20 20 20 20 7d   uu = i;.      }
19260 0a 20 20 20 20 20 20 6e 48 64 72 2b 2b 3b 0a 20  .      nHdr++;. 
19270 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 75       testcase( u
19280 75 3d 3d 31 32 37 20 29 3b 20 20 20 20 20 20 20  u==127 );       
19290 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65          testcase
192a0 28 20 75 75 3d 3d 31 32 38 20 29 3b 0a 20 20 20  ( uu==128 );.   
192b0 20 20 20 74 65 73 74 63 61 73 65 28 20 75 75 3d     testcase( uu=
192c0 3d 33 32 37 36 37 20 29 3b 20 20 20 20 20 20 20  =32767 );       
192d0 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
192e0 75 75 3d 3d 33 32 37 36 38 20 29 3b 0a 20 20 20  uu==32768 );.   
192f0 20 20 20 74 65 73 74 63 61 73 65 28 20 75 75 3d     testcase( uu=
19300 3d 38 33 38 38 36 30 37 20 29 3b 20 20 20 20 20  =8388607 );     
19310 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
19320 75 75 3d 3d 38 33 38 38 36 30 38 20 29 3b 0a 20  uu==8388608 );. 
19330 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 75       testcase( u
19340 75 3d 3d 32 31 34 37 34 38 33 36 34 37 20 29 3b  u==2147483647 );
19350 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65          testcase
19360 28 20 75 75 3d 3d 32 31 34 37 34 38 33 36 34 38  ( uu==2147483648
19370 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61   );.      testca
19380 73 65 28 20 75 75 3d 3d 31 34 30 37 33 37 34 38  se( uu==14073748
19390 38 33 35 35 33 32 37 4c 4c 20 29 3b 20 74 65 73  8355327LL ); tes
193a0 74 63 61 73 65 28 20 75 75 3d 3d 31 34 30 37 33  tcase( uu==14073
193b0 37 34 38 38 33 35 35 33 32 38 4c 4c 20 29 3b 0a  7488355328LL );.
193c0 20 20 20 20 20 20 69 66 28 20 75 75 3c 3d 31 32        if( uu<=12
193d0 37 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  7 ){.        if(
193e0 20 28 69 26 31 29 3d 3d 69 20 26 26 20 66 69 6c   (i&1)==i && fil
193f0 65 5f 66 6f 72 6d 61 74 3e 3d 34 20 29 7b 0a 20  e_format>=4 ){. 
19400 20 20 20 20 20 20 20 20 20 70 52 65 63 2d 3e 75           pRec->u
19410 54 65 6d 70 20 3d 20 38 2b 28 75 33 32 29 75 75  Temp = 8+(u32)uu
19420 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
19430 0a 20 20 20 20 20 20 20 20 20 20 6e 44 61 74 61  .          nData
19440 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 70 52  ++;.          pR
19450 65 63 2d 3e 75 54 65 6d 70 20 3d 20 31 3b 0a 20  ec->uTemp = 1;. 
19460 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
19470 65 6c 73 65 20 69 66 28 20 75 75 3c 3d 33 32 37  else if( uu<=327
19480 36 37 20 29 7b 0a 20 20 20 20 20 20 20 20 6e 44  67 ){.        nD
19490 61 74 61 20 2b 3d 20 32 3b 0a 20 20 20 20 20 20  ata += 2;.      
194a0 20 20 70 52 65 63 2d 3e 75 54 65 6d 70 20 3d 20    pRec->uTemp = 
194b0 32 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  2;.      }else i
194c0 66 28 20 75 75 3c 3d 38 33 38 38 36 30 37 20 29  f( uu<=8388607 )
194d0 7b 0a 20 20 20 20 20 20 20 20 6e 44 61 74 61 20  {.        nData 
194e0 2b 3d 20 33 3b 0a 20 20 20 20 20 20 20 20 70 52  += 3;.        pR
194f0 65 63 2d 3e 75 54 65 6d 70 20 3d 20 33 3b 0a 20  ec->uTemp = 3;. 
19500 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 75       }else if( u
19510 75 3c 3d 32 31 34 37 34 38 33 36 34 37 20 29 7b  u<=2147483647 ){
19520 0a 20 20 20 20 20 20 20 20 6e 44 61 74 61 20 2b  .        nData +
19530 3d 20 34 3b 0a 20 20 20 20 20 20 20 20 70 52 65  = 4;.        pRe
19540 63 2d 3e 75 54 65 6d 70 20 3d 20 34 3b 0a 20 20  c->uTemp = 4;.  
19550 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 75 75      }else if( uu
19560 3c 3d 31 34 30 37 33 37 34 38 38 33 35 35 33 32  <=14073748835532
19570 37 4c 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 6e  7LL ){.        n
19580 44 61 74 61 20 2b 3d 20 36 3b 0a 20 20 20 20 20  Data += 6;.     
19590 20 20 20 70 52 65 63 2d 3e 75 54 65 6d 70 20 3d     pRec->uTemp =
195a0 20 35 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   5;.      }else{
195b0 0a 20 20 20 20 20 20 20 20 6e 44 61 74 61 20 2b  .        nData +
195c0 3d 20 38 3b 0a 20 20 20 20 20 20 20 20 69 66 28  = 8;.        if(
195d0 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d   pRec->flags & M
195e0 45 4d 5f 49 6e 74 52 65 61 6c 20 29 7b 0a 20 20  EM_IntReal ){.  
195f0 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68          /* If th
19600 65 20 76 61 6c 75 65 20 69 73 20 49 6e 74 52 65  e value is IntRe
19610 61 6c 20 61 6e 64 20 69 73 20 67 6f 69 6e 67 20  al and is going 
19620 74 6f 20 74 61 6b 65 20 75 70 20 38 20 62 79 74  to take up 8 byt
19630 65 73 20 74 6f 20 73 74 6f 72 65 0a 20 20 20 20  es to store.    
19640 20 20 20 20 20 20 2a 2a 20 61 73 20 61 6e 20 69        ** as an i
19650 6e 74 65 67 65 72 2c 20 74 68 65 6e 20 77 65 20  nteger, then we 
19660 6d 69 67 68 74 20 61 73 20 77 65 6c 6c 20 6d 61  might as well ma
19670 6b 65 20 69 74 20 61 6e 20 38 2d 62 79 74 65 20  ke it an 8-byte 
19680 66 6c 6f 61 74 69 6e 67 0a 20 20 20 20 20 20 20  floating.       
19690 20 20 20 2a 2a 20 70 6f 69 6e 74 20 76 61 6c 75     ** point valu
196a0 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 70  e */.          p
196b0 52 65 63 2d 3e 75 2e 72 20 3d 20 28 64 6f 75 62  Rec->u.r = (doub
196c0 6c 65 29 70 52 65 63 2d 3e 75 2e 69 3b 0a 20 20  le)pRec->u.i;.  
196d0 20 20 20 20 20 20 20 20 70 52 65 63 2d 3e 66 6c          pRec->fl
196e0 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 49 6e 74 52  ags &= ~MEM_IntR
196f0 65 61 6c 3b 0a 20 20 20 20 20 20 20 20 20 20 70  eal;.          p
19700 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  Rec->flags |= ME
19710 4d 5f 52 65 61 6c 3b 0a 20 20 20 20 20 20 20 20  M_Real;.        
19720 20 20 70 52 65 63 2d 3e 75 54 65 6d 70 20 3d 20    pRec->uTemp = 
19730 37 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  7;.        }else
19740 7b 0a 20 20 20 20 20 20 20 20 20 20 70 52 65 63  {.          pRec
19750 2d 3e 75 54 65 6d 70 20 3d 20 36 3b 0a 20 20 20  ->uTemp = 6;.   
19760 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
19770 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70 52 65     }else if( pRe
19780 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  c->flags & MEM_R
19790 65 61 6c 20 29 7b 0a 20 20 20 20 20 20 6e 48 64  eal ){.      nHd
197a0 72 2b 2b 3b 0a 20 20 20 20 20 20 6e 44 61 74 61  r++;.      nData
197b0 20 2b 3d 20 38 3b 0a 20 20 20 20 20 20 70 52 65   += 8;.      pRe
197c0 63 2d 3e 75 54 65 6d 70 20 3d 20 37 3b 0a 20 20  c->uTemp = 7;.  
197d0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61    }else{.      a
197e0 73 73 65 72 74 28 20 64 62 2d 3e 6d 61 6c 6c 6f  ssert( db->mallo
197f0 63 46 61 69 6c 65 64 20 7c 7c 20 70 52 65 63 2d  cFailed || pRec-
19800 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c  >flags&(MEM_Str|
19810 4d 45 4d 5f 42 6c 6f 62 29 20 29 3b 0a 20 20 20  MEM_Blob) );.   
19820 20 20 20 61 73 73 65 72 74 28 20 70 52 65 63 2d     assert( pRec-
19830 3e 6e 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 6c  >n>=0 );.      l
19840 65 6e 20 3d 20 28 75 33 32 29 70 52 65 63 2d 3e  en = (u32)pRec->
19850 6e 3b 0a 20 20 20 20 20 20 73 65 72 69 61 6c 5f  n;.      serial_
19860 74 79 70 65 20 3d 20 28 6c 65 6e 2a 32 29 20 2b  type = (len*2) +
19870 20 31 32 20 2b 20 28 28 70 52 65 63 2d 3e 66 6c   12 + ((pRec->fl
19880 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 29 21 3d  ags & MEM_Str)!=
19890 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 52  0);.      if( pR
198a0 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ec->flags & MEM_
198b0 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 20 20  Zero ){.        
198c0 73 65 72 69 61 6c 5f 74 79 70 65 20 2b 3d 20 70  serial_type += p
198d0 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 2a 32 3b 0a  Rec->u.nZero*2;.
198e0 20 20 20 20 20 20 20 20 69 66 28 20 6e 44 61 74          if( nDat
198f0 61 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  a ){.          i
19900 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
19910 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70 52 65 63  mExpandBlob(pRec
19920 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  ) ) goto no_mem;
19930 0a 20 20 20 20 20 20 20 20 20 20 6c 65 6e 20 2b  .          len +
19940 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b  = pRec->u.nZero;
19950 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
19960 20 20 20 20 20 20 20 20 20 20 6e 5a 65 72 6f 20            nZero 
19970 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f  += pRec->u.nZero
19980 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
19990 20 20 7d 0a 20 20 20 20 20 20 6e 44 61 74 61 20    }.      nData 
199a0 2b 3d 20 6c 65 6e 3b 0a 20 20 20 20 20 20 6e 48  += len;.      nH
199b0 64 72 20 2b 3d 20 73 71 6c 69 74 65 33 56 61 72  dr += sqlite3Var
199c0 69 6e 74 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79  intLen(serial_ty
199d0 70 65 29 3b 0a 20 20 20 20 20 20 70 52 65 63 2d  pe);.      pRec-
199e0 3e 75 54 65 6d 70 20 3d 20 73 65 72 69 61 6c 5f  >uTemp = serial_
199f0 74 79 70 65 3b 0a 20 20 20 20 7d 0a 20 20 20 20  type;.    }.    
19a00 69 66 28 20 70 52 65 63 3d 3d 70 44 61 74 61 30  if( pRec==pData0
19a10 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 70 52   ) break;.    pR
19a20 65 63 2d 2d 3b 0a 20 20 7d 77 68 69 6c 65 28 31  ec--;.  }while(1
19a30 29 3b 0a 0a 20 20 2f 2a 20 45 56 49 44 45 4e 43  );..  /* EVIDENC
19a40 45 2d 4f 46 3a 20 52 2d 32 32 35 36 34 2d 31 31  E-OF: R-22564-11
19a50 36 34 37 20 54 68 65 20 68 65 61 64 65 72 20 62  647 The header b
19a60 65 67 69 6e 73 20 77 69 74 68 20 61 20 73 69 6e  egins with a sin
19a70 67 6c 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20  gle varint.  ** 
19a80 77 68 69 63 68 20 64 65 74 65 72 6d 69 6e 65 73  which determines
19a90 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65   the total numbe
19aa0 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68  r of bytes in th
19ab0 65 20 68 65 61 64 65 72 2e 20 54 68 65 20 76 61  e header. The va
19ac0 72 69 6e 74 0a 20 20 2a 2a 20 76 61 6c 75 65 20  rint.  ** value 
19ad0 69 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74  is the size of t
19ae0 68 65 20 68 65 61 64 65 72 20 69 6e 20 62 79 74  he header in byt
19af0 65 73 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 65  es including the
19b00 20 73 69 7a 65 20 76 61 72 69 6e 74 0a 20 20 2a   size varint.  *
19b10 2a 20 69 74 73 65 6c 66 2e 20 2a 2f 0a 20 20 74  * itself. */.  t
19b20 65 73 74 63 61 73 65 28 20 6e 48 64 72 3d 3d 31  estcase( nHdr==1
19b30 32 36 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  26 );.  testcase
19b40 28 20 6e 48 64 72 3d 3d 31 32 37 20 29 3b 0a 20  ( nHdr==127 );. 
19b50 20 69 66 28 20 6e 48 64 72 3c 3d 31 32 36 20 29   if( nHdr<=126 )
19b60 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 63 6f 6d  {.    /* The com
19b70 6d 6f 6e 20 63 61 73 65 20 2a 2f 0a 20 20 20 20  mon case */.    
19b80 6e 48 64 72 20 2b 3d 20 31 3b 0a 20 20 7d 65 6c  nHdr += 1;.  }el
19b90 73 65 7b 0a 20 20 20 20 2f 2a 20 52 61 72 65 20  se{.    /* Rare 
19ba0 63 61 73 65 20 6f 66 20 61 20 72 65 61 6c 6c 79  case of a really
19bb0 20 6c 61 72 67 65 20 68 65 61 64 65 72 20 2a 2f   large header */
19bc0 0a 20 20 20 20 6e 56 61 72 69 6e 74 20 3d 20 73  .    nVarint = s
19bd0 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28  qlite3VarintLen(
19be0 6e 48 64 72 29 3b 0a 20 20 20 20 6e 48 64 72 20  nHdr);.    nHdr 
19bf0 2b 3d 20 6e 56 61 72 69 6e 74 3b 0a 20 20 20 20  += nVarint;.    
19c00 69 66 28 20 6e 56 61 72 69 6e 74 3c 73 71 6c 69  if( nVarint<sqli
19c10 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64  te3VarintLen(nHd
19c20 72 29 20 29 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d  r) ) nHdr++;.  }
19c30 0a 20 20 6e 42 79 74 65 20 3d 20 6e 48 64 72 2b  .  nByte = nHdr+
19c40 6e 44 61 74 61 3b 0a 0a 20 20 2f 2a 20 4d 61 6b  nData;..  /* Mak
19c50 65 20 73 75 72 65 20 74 68 65 20 6f 75 74 70 75  e sure the outpu
19c60 74 20 72 65 67 69 73 74 65 72 20 68 61 73 20 61  t register has a
19c70 20 62 75 66 66 65 72 20 6c 61 72 67 65 20 65 6e   buffer large en
19c80 6f 75 67 68 20 74 6f 20 73 74 6f 72 65 20 0a 20  ough to store . 
19c90 20 2a 2a 20 74 68 65 20 6e 65 77 20 72 65 63 6f   ** the new reco
19ca0 72 64 2e 20 54 68 65 20 6f 75 74 70 75 74 20 72  rd. The output r
19cb0 65 67 69 73 74 65 72 20 28 70 4f 70 2d 3e 70 33  egister (pOp->p3
19cc0 29 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64  ) is not allowed
19cd0 20 74 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e 65 20   to.  ** be one 
19ce0 6f 66 20 74 68 65 20 69 6e 70 75 74 20 72 65 67  of the input reg
19cf0 69 73 74 65 72 73 20 28 62 65 63 61 75 73 65 20  isters (because 
19d00 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61  the following ca
19d10 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74  ll to.  ** sqlit
19d20 65 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e  e3VdbeMemClearAn
19d30 64 52 65 73 69 7a 65 28 29 20 63 6f 75 6c 64 20  dResize() could 
19d40 63 6c 6f 62 62 65 72 20 74 68 65 20 76 61 6c 75  clobber the valu
19d50 65 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 75  e before it is u
19d60 73 65 64 29 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  sed)..  */.  if(
19d70 20 6e 42 79 74 65 2b 6e 5a 65 72 6f 3c 3d 70 4f   nByte+nZero<=pO
19d80 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 29 7b 0a  ut->szMalloc ){.
19d90 20 20 20 20 2f 2a 20 54 68 65 20 6f 75 74 70 75      /* The outpu
19da0 74 20 72 65 67 69 73 74 65 72 20 69 73 20 61 6c  t register is al
19db0 72 65 61 64 79 20 6c 61 72 67 65 20 65 6e 6f 75  ready large enou
19dc0 67 68 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 72  gh to hold the r
19dd0 65 63 6f 72 64 2e 0a 20 20 20 20 2a 2a 20 4e 6f  ecord..    ** No
19de0 20 65 72 72 6f 72 20 63 68 65 63 6b 73 20 6f 72   error checks or
19df0 20 62 75 66 66 65 72 20 65 6e 6c 61 72 67 65 6d   buffer enlargem
19e00 65 6e 74 20 69 73 20 72 65 71 75 69 72 65 64 20  ent is required 
19e10 2a 2f 0a 20 20 20 20 70 4f 75 74 2d 3e 7a 20 3d  */.    pOut->z =
19e20 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a   pOut->zMalloc;.
19e30 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
19e40 4e 65 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72  Need to make sur
19e50 65 20 74 68 61 74 20 74 68 65 20 6f 75 74 70 75  e that the outpu
19e60 74 20 69 73 20 6e 6f 74 20 74 6f 6f 20 62 69 67  t is not too big
19e70 20 61 6e 64 20 74 68 65 6e 20 65 6e 6c 61 72 67   and then enlarg
19e80 65 0a 20 20 20 20 2a 2a 20 74 68 65 20 6f 75 74  e.    ** the out
19e90 70 75 74 20 72 65 67 69 73 74 65 72 20 74 6f 20  put register to 
19ea0 68 6f 6c 64 20 74 68 65 20 66 75 6c 6c 20 72 65  hold the full re
19eb0 73 75 6c 74 20 2a 2f 0a 20 20 20 20 69 66 28 20  sult */.    if( 
19ec0 6e 42 79 74 65 2b 6e 5a 65 72 6f 3e 64 62 2d 3e  nByte+nZero>db->
19ed0 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
19ee0 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
19ef0 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69       goto too_bi
19f00 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  g;.    }.    if(
19f10 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43   sqlite3VdbeMemC
19f20 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4f  learAndResize(pO
19f30 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 29 20  ut, (int)nByte) 
19f40 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f  ){.      goto no
19f50 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  _mem;.    }.  }.
19f60 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74    pOut->n = (int
19f70 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e  )nByte;.  pOut->
19f80 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62  flags = MEM_Blob
19f90 3b 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20 29 7b  ;.  if( nZero ){
19fa0 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65  .    pOut->u.nZe
19fb0 72 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20 20  ro = nZero;.    
19fc0 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d  pOut->flags |= M
19fd0 45 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20 55  EM_Zero;.  }.  U
19fe0 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
19ff0 5a 45 28 70 4f 75 74 29 3b 0a 20 20 7a 48 64 72  ZE(pOut);.  zHdr
1a000 20 3d 20 28 75 38 20 2a 29 70 4f 75 74 2d 3e 7a   = (u8 *)pOut->z
1a010 3b 0a 20 20 7a 50 61 79 6c 6f 61 64 20 3d 20 7a  ;.  zPayload = z
1a020 48 64 72 20 2b 20 6e 48 64 72 3b 0a 0a 20 20 2f  Hdr + nHdr;..  /
1a030 2a 20 57 72 69 74 65 20 74 68 65 20 72 65 63 6f  * Write the reco
1a040 72 64 20 2a 2f 0a 20 20 7a 48 64 72 20 2b 3d 20  rd */.  zHdr += 
1a050 70 75 74 56 61 72 69 6e 74 33 32 28 7a 48 64 72  putVarint32(zHdr
1a060 2c 20 6e 48 64 72 29 3b 0a 20 20 61 73 73 65 72  , nHdr);.  asser
1a070 74 28 20 70 44 61 74 61 30 3c 3d 70 4c 61 73 74  t( pData0<=pLast
1a080 20 29 3b 0a 20 20 70 52 65 63 20 3d 20 70 44 61   );.  pRec = pDa
1a090 74 61 30 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 73  ta0;.  do{.    s
1a0a0 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 70 52 65  erial_type = pRe
1a0b0 63 2d 3e 75 54 65 6d 70 3b 0a 20 20 20 20 2f 2a  c->uTemp;.    /*
1a0c0 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
1a0d0 30 36 35 32 39 2d 34 37 33 36 32 20 46 6f 6c 6c  06529-47362 Foll
1a0e0 6f 77 69 6e 67 20 74 68 65 20 73 69 7a 65 20 76  owing the size v
1a0f0 61 72 69 6e 74 20 61 72 65 20 6f 6e 65 20 6f 72  arint are one or
1a100 20 6d 6f 72 65 0a 20 20 20 20 2a 2a 20 61 64 64   more.    ** add
1a110 69 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74 73 2c  itional varints,
1a120 20 6f 6e 65 20 70 65 72 20 63 6f 6c 75 6d 6e 2e   one per column.
1a130 20 2a 2f 0a 20 20 20 20 7a 48 64 72 20 2b 3d 20   */.    zHdr += 
1a140 70 75 74 56 61 72 69 6e 74 33 32 28 7a 48 64 72  putVarint32(zHdr
1a150 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 20  , serial_type); 
1a160 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 65             /* se
1a170 72 69 61 6c 20 74 79 70 65 20 2a 2f 0a 20 20 20  rial type */.   
1a180 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a   /* EVIDENCE-OF:
1a190 20 52 2d 36 34 35 33 36 2d 35 31 37 32 38 20 54   R-64536-51728 T
1a1a0 68 65 20 76 61 6c 75 65 73 20 66 6f 72 20 65 61  he values for ea
1a1b0 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65  ch column in the
1a1c0 20 72 65 63 6f 72 64 0a 20 20 20 20 2a 2a 20 69   record.    ** i
1a1d0 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f  mmediately follo
1a1e0 77 20 74 68 65 20 68 65 61 64 65 72 2e 20 2a 2f  w the header. */
1a1f0 0a 20 20 20 20 7a 50 61 79 6c 6f 61 64 20 2b 3d  .    zPayload +=
1a200 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
1a210 61 6c 50 75 74 28 7a 50 61 79 6c 6f 61 64 2c 20  alPut(zPayload, 
1a220 70 52 65 63 2c 20 73 65 72 69 61 6c 5f 74 79 70  pRec, serial_typ
1a230 65 29 3b 20 2f 2a 20 63 6f 6e 74 65 6e 74 20 2a  e); /* content *
1a240 2f 0a 20 20 7d 77 68 69 6c 65 28 20 28 2b 2b 70  /.  }while( (++p
1a250 52 65 63 29 3c 3d 70 4c 61 73 74 20 29 3b 0a 20  Rec)<=pLast );. 
1a260 20 61 73 73 65 72 74 28 20 6e 48 64 72 3d 3d 28   assert( nHdr==(
1a270 69 6e 74 29 28 7a 48 64 72 20 2d 20 28 75 38 2a  int)(zHdr - (u8*
1a280 29 70 4f 75 74 2d 3e 7a 29 20 29 3b 0a 20 20 61  )pOut->z) );.  a
1a290 73 73 65 72 74 28 20 6e 42 79 74 65 3d 3d 28 69  ssert( nByte==(i
1a2a0 6e 74 29 28 7a 50 61 79 6c 6f 61 64 20 2d 20 28  nt)(zPayload - (
1a2b0 75 38 2a 29 70 4f 75 74 2d 3e 7a 29 20 29 3b 0a  u8*)pOut->z) );.
1a2c0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1a2d0 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
1a2e0 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
1a2f0 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 52  >nCursor) );.  R
1a300 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
1a310 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20  p->p3, pOut);.  
1a320 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1a330 6f 64 65 3a 20 43 6f 75 6e 74 20 50 31 20 50 32  ode: Count P1 P2
1a340 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
1a350 69 73 3a 20 72 5b 50 32 5d 3d 63 6f 75 6e 74 28  is: r[P2]=count(
1a360 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68  ).**.** Store th
1a370 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  e number of entr
1a380 69 65 73 20 28 61 6e 20 69 6e 74 65 67 65 72 20  ies (an integer 
1a390 76 61 6c 75 65 29 20 69 6e 20 74 68 65 20 74 61  value) in the ta
1a3a0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 0a 2a 2a  ble or index .**
1a3b0 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f   opened by curso
1a3c0 72 20 50 31 20 69 6e 20 72 65 67 69 73 74 65 72  r P1 in register
1a3d0 20 50 32 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53   P2.*/.#ifndef S
1a3e0 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45  QLITE_OMIT_BTREE
1a3f0 43 4f 55 4e 54 0a 63 61 73 65 20 4f 50 5f 43 6f  COUNT.case OP_Co
1a400 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 2f  unt: {         /
1a410 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 36 34 20  * out2 */.  i64 
1a420 6e 45 6e 74 72 79 3b 0a 20 20 42 74 43 75 72 73  nEntry;.  BtCurs
1a430 6f 72 20 2a 70 43 72 73 72 3b 0a 0a 20 20 61 73  or *pCrsr;..  as
1a440 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70  sert( p->apCsr[p
1a450 4f 70 2d 3e 70 31 5d 2d 3e 65 43 75 72 54 79 70  Op->p1]->eCurTyp
1a460 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
1a470 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 2d   );.  pCrsr = p-
1a480 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d  >apCsr[pOp->p1]-
1a490 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61  >uc.pCursor;.  a
1a4a0 73 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a  ssert( pCrsr );.
1a4b0 20 20 6e 45 6e 74 72 79 20 3d 20 30 3b 20 20 2f    nEntry = 0;  /
1a4c0 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f  * Not needed.  O
1a4d0 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65  nly used to sile
1a4e0 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a  nce a warning. *
1a4f0 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  /.  rc = sqlite3
1a500 42 74 72 65 65 43 6f 75 6e 74 28 70 43 72 73 72  BtreeCount(pCrsr
1a510 2c 20 26 6e 45 6e 74 72 79 29 3b 0a 20 20 69 66  , &nEntry);.  if
1a520 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
1a530 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1a540 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
1a550 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
1a560 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e  .  pOut->u.i = n
1a570 45 6e 74 72 79 3b 0a 20 20 62 72 65 61 6b 3b 0a  Entry;.  break;.
1a580 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63  }.#endif../* Opc
1a590 6f 64 65 3a 20 53 61 76 65 70 6f 69 6e 74 20 50  ode: Savepoint P
1a5a0 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
1a5b0 20 4f 70 65 6e 2c 20 72 65 6c 65 61 73 65 20 6f   Open, release o
1a5c0 72 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 73  r rollback the s
1a5d0 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 64 20 62  avepoint named b
1a5e0 79 20 70 61 72 61 6d 65 74 65 72 20 50 34 2c 20  y parameter P4, 
1a5f0 64 65 70 65 6e 64 69 6e 67 0a 2a 2a 20 6f 6e 20  depending.** on 
1a600 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50 31 2e  the value of P1.
1a610 20 54 6f 20 6f 70 65 6e 20 61 20 6e 65 77 20 73   To open a new s
1a620 61 76 65 70 6f 69 6e 74 20 73 65 74 20 50 31 3d  avepoint set P1=
1a630 3d 30 20 28 53 41 56 45 50 4f 49 4e 54 5f 42 45  =0 (SAVEPOINT_BE
1a640 47 49 4e 29 2e 0a 2a 2a 20 54 6f 20 72 65 6c 65  GIN)..** To rele
1a650 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e 20  ase (commit) an 
1a660 65 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69  existing savepoi
1a670 6e 74 20 73 65 74 20 50 31 3d 3d 31 20 28 53 41  nt set P1==1 (SA
1a680 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 29  VEPOINT_RELEASE)
1a690 2e 0a 2a 2a 20 54 6f 20 72 6f 6c 6c 62 61 63 6b  ..** To rollback
1a6a0 20 61 6e 20 65 78 69 73 74 69 6e 67 20 73 61 76   an existing sav
1a6b0 65 70 6f 69 6e 74 20 73 65 74 20 50 31 3d 3d 32  epoint set P1==2
1a6c0 20 28 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c   (SAVEPOINT_ROLL
1a6d0 42 41 43 4b 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  BACK)..*/.case O
1a6e0 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b 0a 20  P_Savepoint: {. 
1a6f0 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20   int p1;        
1a700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a710 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20 50 31 20   /* Value of P1 
1a720 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 63 68 61  operand */.  cha
1a730 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
1a740 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1a750 4e 61 6d 65 20 6f 66 20 73 61 76 65 70 6f 69 6e  Name of savepoin
1a760 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61 6d 65  t */.  int nName
1a770 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  ;.  Savepoint *p
1a780 4e 65 77 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74  New;.  Savepoint
1a790 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20   *pSavepoint;.  
1a7a0 53 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d 70 3b  Savepoint *pTmp;
1a7b0 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e  .  int iSavepoin
1a7c0 74 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 0a 20 20  t;.  int ii;..  
1a7d0 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  p1 = pOp->p1;.  
1a7e0 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e 70 34 2e  zName = pOp->p4.
1a7f0 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72 74 20  z;..  /* Assert 
1a800 74 68 61 74 20 74 68 65 20 70 31 20 70 61 72 61  that the p1 para
1a810 6d 65 74 65 72 20 69 73 20 76 61 6c 69 64 2e 20  meter is valid. 
1a820 41 6c 73 6f 20 74 68 61 74 20 69 66 20 74 68 65  Also that if the
1a830 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 0a 20 20  re is no open.  
1a840 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  ** transaction, 
1a850 74 68 65 6e 20 74 68 65 72 65 20 63 61 6e 6e 6f  then there canno
1a860 74 20 62 65 20 61 6e 79 20 73 61 76 65 70 6f 69  t be any savepoi
1a870 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20 20 61 73 73  nts. .  */.  ass
1a880 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65 70 6f  ert( db->pSavepo
1a890 69 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 75  int==0 || db->au
1a8a0 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20  toCommit==0 );. 
1a8b0 20 61 73 73 65 72 74 28 20 70 31 3d 3d 53 41 56   assert( p1==SAV
1a8c0 45 50 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c 70 31  EPOINT_BEGIN||p1
1a8d0 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  ==SAVEPOINT_RELE
1a8e0 41 53 45 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49  ASE||p1==SAVEPOI
1a8f0 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a 20  NT_ROLLBACK );. 
1a900 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61   assert( db->pSa
1a910 76 65 70 6f 69 6e 74 20 7c 7c 20 64 62 2d 3e 69  vepoint || db->i
1a920 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
1a930 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20 61 73  point==0 );.  as
1a940 73 65 72 74 28 20 63 68 65 63 6b 53 61 76 65 70  sert( checkSavep
1a950 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b  ointCount(db) );
1a960 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49  .  assert( p->bI
1a970 73 52 65 61 64 65 72 20 29 3b 0a 0a 20 20 69 66  sReader );..  if
1a980 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ( p1==SAVEPOINT_
1a990 42 45 47 49 4e 20 29 7b 0a 20 20 20 20 69 66 28  BEGIN ){.    if(
1a9a0 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e   db->nVdbeWrite>
1a9b0 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 20  0 ){.      /* A 
1a9c0 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 63 61  new savepoint ca
1a9d0 6e 6e 6f 74 20 62 65 20 63 72 65 61 74 65 64 20  nnot be created 
1a9e0 69 66 20 74 68 65 72 65 20 61 72 65 20 61 63 74  if there are act
1a9f0 69 76 65 20 77 72 69 74 65 20 0a 20 20 20 20 20  ive write .     
1aa00 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 20 28   ** statements (
1aa10 69 2e 65 2e 20 6f 70 65 6e 20 72 65 61 64 2f 77  i.e. open read/w
1aa20 72 69 74 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c  rite incremental
1aa30 20 62 6c 6f 62 20 68 61 6e 64 6c 65 73 29 2e 0a   blob handles)..
1aa40 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73        */.      s
1aa50 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28  qlite3VdbeError(
1aa60 70 2c 20 22 63 61 6e 6e 6f 74 20 6f 70 65 6e 20  p, "cannot open 
1aa70 73 61 76 65 70 6f 69 6e 74 20 2d 20 53 51 4c 20  savepoint - SQL 
1aa80 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72  statements in pr
1aa90 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20  ogress");.      
1aaa0 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
1aab0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
1aac0 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71 6c 69 74     nName = sqlit
1aad0 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61 6d 65  e3Strlen30(zName
1aae0 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  );..#ifndef SQLI
1aaf0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
1ab00 41 42 4c 45 0a 20 20 20 20 20 20 2f 2a 20 54 68  ABLE.      /* Th
1ab10 69 73 20 63 61 6c 6c 20 69 73 20 4f 6b 20 65 76  is call is Ok ev
1ab20 65 6e 20 69 66 20 74 68 69 73 20 73 61 76 65 70  en if this savep
1ab30 6f 69 6e 74 20 69 73 20 61 63 74 75 61 6c 6c 79  oint is actually
1ab40 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20   a transaction. 
1ab50 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e       ** savepoin
1ab60 74 20 28 61 6e 64 20 74 68 65 72 65 66 6f 72 65  t (and therefore
1ab70 20 73 68 6f 75 6c 64 20 6e 6f 74 20 70 72 6f 6d   should not prom
1ab80 70 74 20 78 53 61 76 65 70 6f 69 6e 74 28 29 29  pt xSavepoint())
1ab90 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 20 20 20 20   callbacks..    
1aba0 20 20 2a 2a 20 49 66 20 74 68 69 73 20 69 73 20    ** If this is 
1abb0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61  a transaction sa
1abc0 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70  vepoint being op
1abd0 65 6e 65 64 2c 20 69 74 20 69 73 20 67 75 61 72  ened, it is guar
1abe0 61 6e 74 65 65 64 0a 20 20 20 20 20 20 2a 2a 20  anteed.      ** 
1abf0 74 68 61 74 20 74 68 65 20 64 62 2d 3e 61 56 54  that the db->aVT
1ac00 72 61 6e 73 5b 5d 20 61 72 72 61 79 20 69 73 20  rans[] array is 
1ac10 65 6d 70 74 79 2e 20 20 2a 2f 0a 20 20 20 20 20  empty.  */.     
1ac20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 75 74   assert( db->aut
1ac30 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62  oCommit==0 || db
1ac40 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30 20 29 3b 0a  ->nVTrans==0 );.
1ac50 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1ac60 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
1ac70 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42 45  db, SAVEPOINT_BE
1ac80 47 49 4e 2c 0a 20 20 20 20 20 20 20 20 20 20 20  GIN,.           
1ac90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aca0 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d       db->nStatem
1acb0 65 6e 74 2b 64 62 2d 3e 6e 53 61 76 65 70 6f 69  ent+db->nSavepoi
1acc0 6e 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  nt);.      if( r
1acd0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
1ace0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1acf0 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a  _error;.#endif..
1ad00 20 20 20 20 20 20 2f 2a 20 43 72 65 61 74 65 20        /* Create 
1ad10 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20  a new savepoint 
1ad20 73 74 72 75 63 74 75 72 65 2e 20 2a 2f 0a 20 20  structure. */.  
1ad30 20 20 20 20 70 4e 65 77 20 3d 20 73 71 6c 69 74      pNew = sqlit
1ad40 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28  e3DbMallocRawNN(
1ad50 64 62 2c 20 73 69 7a 65 6f 66 28 53 61 76 65 70  db, sizeof(Savep
1ad60 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31 29 3b 0a  oint)+nName+1);.
1ad70 20 20 20 20 20 20 69 66 28 20 70 4e 65 77 20 29        if( pNew )
1ad80 7b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e  {.        pNew->
1ad90 7a 4e 61 6d 65 20 3d 20 28 63 68 61 72 20 2a 29  zName = (char *)
1ada0 26 70 4e 65 77 5b 31 5d 3b 0a 20 20 20 20 20 20  &pNew[1];.      
1adb0 20 20 6d 65 6d 63 70 79 28 70 4e 65 77 2d 3e 7a    memcpy(pNew->z
1adc0 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61  Name, zName, nNa
1add0 6d 65 2b 31 29 3b 0a 20 20 20 20 0a 20 20 20 20  me+1);.    .    
1ade0 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20      /* If there 
1adf0 69 73 20 6e 6f 20 6f 70 65 6e 20 74 72 61 6e 73  is no open trans
1ae00 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 72  action, then mar
1ae10 6b 20 74 68 69 73 20 61 73 20 61 20 73 70 65 63  k this as a spec
1ae20 69 61 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 22  ial.        ** "
1ae30 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
1ae40 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20 20 20 20  point". */.     
1ae50 20 20 20 69 66 28 20 64 62 2d 3e 61 75 74 6f 43     if( db->autoC
1ae60 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20 20 20  ommit ){.       
1ae70 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
1ae80 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20  t = 0;.         
1ae90 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
1aea0 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 31 3b  onSavepoint = 1;
1aeb0 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
1aec0 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53            db->nS
1aed0 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20  avepoint++;.    
1aee0 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 2f      }..        /
1aef0 2a 20 4c 69 6e 6b 20 74 68 65 20 6e 65 77 20 73  * Link the new s
1af00 61 76 65 70 6f 69 6e 74 20 69 6e 74 6f 20 74 68  avepoint into th
1af10 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
1af20 65 27 73 20 6c 69 73 74 2e 20 2a 2f 0a 20 20 20  e's list. */.   
1af30 20 20 20 20 20 70 4e 65 77 2d 3e 70 4e 65 78 74       pNew->pNext
1af40 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e   = db->pSavepoin
1af50 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70  t;.        db->p
1af60 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 4e 65 77  Savepoint = pNew
1af70 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e  ;.        pNew->
1af80 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20  nDeferredCons = 
1af90 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
1afa0 73 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d  s;.        pNew-
1afb0 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
1afc0 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s = db->nDeferre
1afd0 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20  dImmCons;.      
1afe0 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  }.    }.  }else{
1aff0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3d  .    assert( p1=
1b000 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41  =SAVEPOINT_RELEA
1b010 53 45 20 7c 7c 20 70 31 3d 3d 53 41 56 45 50 4f  SE || p1==SAVEPO
1b020 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a  INT_ROLLBACK );.
1b030 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d      iSavepoint =
1b040 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 6e 64   0;..    /* Find
1b050 20 74 68 65 20 6e 61 6d 65 64 20 73 61 76 65 70   the named savep
1b060 6f 69 6e 74 2e 20 49 66 20 74 68 65 72 65 20 69  oint. If there i
1b070 73 20 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f  s no such savepo
1b080 69 6e 74 2c 20 74 68 65 6e 20 61 6e 0a 20 20 20  int, then an.   
1b090 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 69 73 20   ** an error is 
1b0a0 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20  returned to the 
1b0b0 75 73 65 72 2e 20 20 2a 2f 0a 20 20 20 20 66 6f  user.  */.    fo
1b0c0 72 28 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f  r(.      pSavepo
1b0d0 69 6e 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70  int = db->pSavep
1b0e0 6f 69 6e 74 3b 20 0a 20 20 20 20 20 20 70 53 61  oint; .      pSa
1b0f0 76 65 70 6f 69 6e 74 20 26 26 20 73 71 6c 69 74  vepoint && sqlit
1b100 65 33 53 74 72 49 43 6d 70 28 70 53 61 76 65 70  e3StrICmp(pSavep
1b110 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61  oint->zName, zNa
1b120 6d 65 29 3b 0a 20 20 20 20 20 20 70 53 61 76 65  me);.      pSave
1b130 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69  point = pSavepoi
1b140 6e 74 2d 3e 70 4e 65 78 74 0a 20 20 20 20 29 7b  nt->pNext.    ){
1b150 0a 20 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e  .      iSavepoin
1b160 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  t++;.    }.    i
1b170 66 28 20 21 70 53 61 76 65 70 6f 69 6e 74 20 29  f( !pSavepoint )
1b180 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
1b190 64 62 65 45 72 72 6f 72 28 70 2c 20 22 6e 6f 20  dbeError(p, "no 
1b1a0 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74 3a 20  such savepoint: 
1b1b0 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20  %s", zName);.   
1b1c0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
1b1d0 52 52 4f 52 3b 0a 20 20 20 20 7d 65 6c 73 65 20  RROR;.    }else 
1b1e0 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72 69  if( db->nVdbeWri
1b1f0 74 65 3e 30 20 26 26 20 70 31 3d 3d 53 41 56 45  te>0 && p1==SAVE
1b200 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b  POINT_RELEASE ){
1b210 0a 20 20 20 20 20 20 2f 2a 20 49 74 20 69 73 20  .      /* It is 
1b220 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20  not possible to 
1b230 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29  release (commit)
1b240 20 61 20 73 61 76 65 70 6f 69 6e 74 20 69 66 20   a savepoint if 
1b250 74 68 65 72 65 20 61 72 65 20 0a 20 20 20 20 20  there are .     
1b260 20 2a 2a 20 61 63 74 69 76 65 20 77 72 69 74 65   ** active write
1b270 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20 20   statements..   
1b280 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69     */.      sqli
1b290 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
1b2a0 22 63 61 6e 6e 6f 74 20 72 65 6c 65 61 73 65 20  "cannot release 
1b2b0 73 61 76 65 70 6f 69 6e 74 20 2d 20 22 0a 20 20  savepoint - ".  
1b2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b2d0 20 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61          "SQL sta
1b2e0 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72  tements in progr
1b2f0 65 73 73 22 29 3b 0a 20 20 20 20 20 20 72 63 20  ess");.      rc 
1b300 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
1b310 20 20 20 7d 65 6c 73 65 7b 0a 0a 20 20 20 20 20     }else{..     
1b320 20 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68   /* Determine wh
1b330 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 69  ether or not thi
1b340 73 20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69  s is a transacti
1b350 6f 6e 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66  on savepoint. If
1b360 20 73 6f 2c 0a 20 20 20 20 20 20 2a 2a 20 61 6e   so,.      ** an
1b370 64 20 74 68 69 73 20 69 73 20 61 20 52 45 4c 45  d this is a RELE
1b380 41 53 45 20 63 6f 6d 6d 61 6e 64 2c 20 74 68 65  ASE command, the
1b390 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72  n the current tr
1b3a0 61 6e 73 61 63 74 69 6f 6e 20 0a 20 20 20 20 20  ansaction .     
1b3b0 20 2a 2a 20 69 73 20 63 6f 6d 6d 69 74 74 65 64   ** is committed
1b3c0 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  . .      */.    
1b3d0 20 20 69 6e 74 20 69 73 54 72 61 6e 73 61 63 74    int isTransact
1b3e0 69 6f 6e 20 3d 20 70 53 61 76 65 70 6f 69 6e 74  ion = pSavepoint
1b3f0 2d 3e 70 4e 65 78 74 3d 3d 30 20 26 26 20 64 62  ->pNext==0 && db
1b400 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
1b410 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20  avepoint;.      
1b420 69 66 28 20 69 73 54 72 61 6e 73 61 63 74 69 6f  if( isTransactio
1b430 6e 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49  n && p1==SAVEPOI
1b440 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20  NT_RELEASE ){.  
1b450 20 20 20 20 20 20 69 66 28 20 28 72 63 20 3d 20        if( (rc = 
1b460 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
1b470 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54  Fk(p, 1))!=SQLIT
1b480 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
1b490 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
1b4a0 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  rn;.        }.  
1b4b0 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
1b4c0 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 20 20  mmit = 1;.      
1b4d0 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
1b4e0 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45  eHalt(p)==SQLITE
1b4f0 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20  _BUSY ){.       
1b500 20 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29     p->pc = (int)
1b510 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20  (pOp - aOp);.   
1b520 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43         db->autoC
1b530 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20  ommit = 0;.     
1b540 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20       p->rc = rc 
1b550 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
1b560 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64           goto vd
1b570 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20  be_return;.     
1b580 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d     }.        db-
1b590 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
1b5a0 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 20 20 20  vepoint = 0;.   
1b5b0 20 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 3b       rc = p->rc;
1b5c0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
1b5d0 20 20 20 20 20 20 69 6e 74 20 69 73 53 63 68 65        int isSche
1b5e0 6d 61 43 68 61 6e 67 65 3b 0a 20 20 20 20 20 20  maChange;.      
1b5f0 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 64    iSavepoint = d
1b600 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2d 20  b->nSavepoint - 
1b610 69 53 61 76 65 70 6f 69 6e 74 20 2d 20 31 3b 0a  iSavepoint - 1;.
1b620 20 20 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d          if( p1==
1b630 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
1b640 43 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  CK ){.          
1b650 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65 20 3d  isSchemaChange =
1b660 20 28 64 62 2d 3e 6d 44 62 46 6c 61 67 73 20 26   (db->mDbFlags &
1b670 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61 43 68   DBFLAG_SchemaCh
1b680 61 6e 67 65 29 21 3d 30 3b 0a 20 20 20 20 20 20  ange)!=0;.      
1b690 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69      for(ii=0; ii
1b6a0 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b  <db->nDb; ii++){
1b6b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20  .            rc 
1b6c0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 54 72  = sqlite3BtreeTr
1b6d0 69 70 41 6c 6c 43 75 72 73 6f 72 73 28 64 62 2d  ipAllCursors(db-
1b6e0 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 0a 20 20  >aDb[ii].pBt,.  
1b6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b710 20 20 20 20 20 53 51 4c 49 54 45 5f 41 42 4f 52       SQLITE_ABOR
1b720 54 5f 52 4f 4c 4c 42 41 43 4b 2c 0a 20 20 20 20  T_ROLLBACK,.    
1b730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b750 20 20 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67     isSchemaChang
1b760 65 3d 3d 30 29 3b 0a 20 20 20 20 20 20 20 20 20  e==0);.         
1b770 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
1b780 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
1b790 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1b7a0 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
1b7b0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1b7c0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3d       assert( p1=
1b7d0 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41  =SAVEPOINT_RELEA
1b7e0 53 45 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20  SE );.          
1b7f0 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65 20 3d  isSchemaChange =
1b800 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20   0;.        }.  
1b810 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20        for(ii=0; 
1b820 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b  ii<db->nDb; ii++
1b830 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20  ){.          rc 
1b840 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 61  = sqlite3BtreeSa
1b850 76 65 70 6f 69 6e 74 28 64 62 2d 3e 61 44 62 5b  vepoint(db->aDb[
1b860 69 69 5d 2e 70 42 74 2c 20 70 31 2c 20 69 53 61  ii].pBt, p1, iSa
1b870 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20  vepoint);.      
1b880 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1b890 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
1b8a0 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
1b8b0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1b8c0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1b8d0 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20    }.        if( 
1b8e0 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65 20 29  isSchemaChange )
1b8f0 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
1b900 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65  te3ExpirePrepare
1b910 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 2c 20  dStatements(db, 
1b920 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  0);.          sq
1b930 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68  lite3ResetAllSch
1b940 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e  emasOfConnection
1b950 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20  (db);.          
1b960 64 62 2d 3e 6d 44 62 46 6c 61 67 73 20 7c 3d 20  db->mDbFlags |= 
1b970 44 42 46 4c 41 47 5f 53 63 68 65 6d 61 43 68 61  DBFLAG_SchemaCha
1b980 6e 67 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  nge;.        }. 
1b990 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20       }.  .      
1b9a0 2f 2a 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66  /* Regardless of
1b9b0 20 77 68 65 74 68 65 72 20 74 68 69 73 20 69 73   whether this is
1b9c0 20 61 20 52 45 4c 45 41 53 45 20 6f 72 20 52 4f   a RELEASE or RO
1b9d0 4c 4c 42 41 43 4b 2c 20 64 65 73 74 72 6f 79 20  LLBACK, destroy 
1b9e0 61 6c 6c 20 0a 20 20 20 20 20 20 2a 2a 20 73 61  all .      ** sa
1b9f0 76 65 70 6f 69 6e 74 73 20 6e 65 73 74 65 64 20  vepoints nested 
1ba00 69 6e 73 69 64 65 20 6f 66 20 74 68 65 20 73 61  inside of the sa
1ba10 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70  vepoint being op
1ba20 65 72 61 74 65 64 20 6f 6e 2e 20 2a 2f 0a 20 20  erated on. */.  
1ba30 20 20 20 20 77 68 69 6c 65 28 20 64 62 2d 3e 70      while( db->p
1ba40 53 61 76 65 70 6f 69 6e 74 21 3d 70 53 61 76 65  Savepoint!=pSave
1ba50 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 20  point ){.       
1ba60 20 70 54 6d 70 20 3d 20 64 62 2d 3e 70 53 61 76   pTmp = db->pSav
1ba70 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20  epoint;.        
1ba80 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d  db->pSavepoint =
1ba90 20 70 54 6d 70 2d 3e 70 4e 65 78 74 3b 0a 20 20   pTmp->pNext;.  
1baa0 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
1bab0 72 65 65 28 64 62 2c 20 70 54 6d 70 29 3b 0a 20  ree(db, pTmp);. 
1bac0 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65         db->nSave
1bad0 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 7d  point--;.      }
1bae0 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 69 74  ..      /* If it
1baf0 20 69 73 20 61 20 52 45 4c 45 41 53 45 2c 20 74   is a RELEASE, t
1bb00 68 65 6e 20 64 65 73 74 72 6f 79 20 74 68 65 20  hen destroy the 
1bb10 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20  savepoint being 
1bb20 6f 70 65 72 61 74 65 64 20 6f 6e 20 0a 20 20 20  operated on .   
1bb30 20 20 20 2a 2a 20 74 6f 6f 2e 20 49 66 20 69 74     ** too. If it
1bb40 20 69 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20 54   is a ROLLBACK T
1bb50 4f 2c 20 74 68 65 6e 20 73 65 74 20 74 68 65 20  O, then set the 
1bb60 6e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72  number of deferr
1bb70 65 64 20 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e  ed .      ** con
1bb80 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
1bb90 6e 73 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68  ns present in th
1bba0 65 20 64 61 74 61 62 61 73 65 20 74 6f 20 74 68  e database to th
1bbb0 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 0a 20  e value stored. 
1bbc0 20 20 20 20 20 2a 2a 20 77 68 65 6e 20 74 68 65       ** when the
1bbd0 20 73 61 76 65 70 6f 69 6e 74 20 77 61 73 20 63   savepoint was c
1bbe0 72 65 61 74 65 64 2e 20 20 2a 2f 0a 20 20 20 20  reated.  */.    
1bbf0 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f    if( p1==SAVEPO
1bc00 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20  INT_RELEASE ){. 
1bc10 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
1bc20 53 61 76 65 70 6f 69 6e 74 3d 3d 64 62 2d 3e 70  Savepoint==db->p
1bc30 53 61 76 65 70 6f 69 6e 74 20 29 3b 0a 20 20 20  Savepoint );.   
1bc40 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f       db->pSavepo
1bc50 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69 6e 74  int = pSavepoint
1bc60 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20  ->pNext;.       
1bc70 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
1bc80 62 2c 20 70 53 61 76 65 70 6f 69 6e 74 29 3b 0a  b, pSavepoint);.
1bc90 20 20 20 20 20 20 20 20 69 66 28 20 21 69 73 54          if( !isT
1bca0 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b 0a 20 20  ransaction ){.  
1bcb0 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76          db->nSav
1bcc0 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20  epoint--;.      
1bcd0 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b    }.      }else{
1bce0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1bcf0 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52   p1==SAVEPOINT_R
1bd00 4f 4c 4c 42 41 43 4b 20 29 3b 0a 20 20 20 20 20  OLLBACK );.     
1bd10 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64     db->nDeferred
1bd20 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f 69 6e  Cons = pSavepoin
1bd30 74 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  t->nDeferredCons
1bd40 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 44  ;.        db->nD
1bd50 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d  eferredImmCons =
1bd60 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65   pSavepoint->nDe
1bd70 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20  ferredImmCons;. 
1bd80 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 69 66       }..      if
1bd90 28 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  ( !isTransaction
1bda0 20 7c 7c 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e   || p1==SAVEPOIN
1bdb0 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20  T_ROLLBACK ){.  
1bdc0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1bdd0 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
1bde0 64 62 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69  db, p1, iSavepoi
1bdf0 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  nt);.        if(
1be00 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1be10 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1be20 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
1be30 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  }.    }.  }.  if
1be40 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
1be50 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1be60 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1be70 4f 70 63 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d  Opcode: AutoComm
1be80 69 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  it P1 P2 * * *.*
1be90 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 64 61 74  *.** Set the dat
1bea0 61 62 61 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69  abase auto-commi
1beb0 74 20 66 6c 61 67 20 74 6f 20 50 31 20 28 31 20  t flag to P1 (1 
1bec0 6f 72 20 30 29 2e 20 49 66 20 50 32 20 69 73 20  or 0). If P2 is 
1bed0 74 72 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61  true, roll.** ba
1bee0 63 6b 20 61 6e 79 20 63 75 72 72 65 6e 74 6c 79  ck any currently
1bef0 20 61 63 74 69 76 65 20 62 74 72 65 65 20 74 72   active btree tr
1bf00 61 6e 73 61 63 74 69 6f 6e 73 2e 20 49 66 20 74  ansactions. If t
1bf10 68 65 72 65 20 61 72 65 20 61 6e 79 20 61 63 74  here are any act
1bf20 69 76 65 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72  ive.** VMs (apar
1bf30 74 20 66 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29  t from this one)
1bf40 2c 20 74 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43  , then a ROLLBAC
1bf50 4b 20 66 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d  K fails.  A COMM
1bf60 49 54 20 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74  IT fails if.** t
1bf70 68 65 72 65 20 61 72 65 20 61 63 74 69 76 65 20  here are active 
1bf80 77 72 69 74 69 6e 67 20 56 4d 73 20 6f 72 20 61  writing VMs or a
1bf90 63 74 69 76 65 20 56 4d 73 20 74 68 61 74 20 75  ctive VMs that u
1bfa0 73 65 20 73 68 61 72 65 64 20 63 61 63 68 65 2e  se shared cache.
1bfb0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
1bfc0 72 75 63 74 69 6f 6e 20 63 61 75 73 65 73 20 74  ruction causes t
1bfd0 68 65 20 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a  he VM to halt..*
1bfe0 2f 0a 63 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f  /.case OP_AutoCo
1bff0 6d 6d 69 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65  mmit: {.  int de
1c000 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b  siredAutoCommit;
1c010 0a 20 20 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b  .  int iRollback
1c020 3b 0a 0a 20 20 64 65 73 69 72 65 64 41 75 74 6f  ;..  desiredAuto
1c030 43 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31  Commit = pOp->p1
1c040 3b 0a 20 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20  ;.  iRollback = 
1c050 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72  pOp->p2;.  asser
1c060 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  t( desiredAutoCo
1c070 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72  mmit==1 || desir
1c080 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  edAutoCommit==0 
1c090 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65 73  );.  assert( des
1c0a0 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
1c0b0 31 20 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d  1 || iRollback==
1c0c0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  0 );.  assert( d
1c0d0 62 2d 3e 6e 56 64 62 65 41 63 74 69 76 65 3e 30  b->nVdbeActive>0
1c0e0 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73 74   );  /* At least
1c0f0 20 74 68 69 73 20 6f 6e 65 20 56 4d 20 69 73 20   this one VM is 
1c100 61 63 74 69 76 65 20 2a 2f 0a 20 20 61 73 73 65  active */.  asse
1c110 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
1c120 20 29 3b 0a 0a 20 20 69 66 28 20 64 65 73 69 72   );..  if( desir
1c130 65 64 41 75 74 6f 43 6f 6d 6d 69 74 21 3d 64 62  edAutoCommit!=db
1c140 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a  ->autoCommit ){.
1c150 20 20 20 20 69 66 28 20 69 52 6f 6c 6c 62 61 63      if( iRollbac
1c160 6b 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  k ){.      asser
1c170 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  t( desiredAutoCo
1c180 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20 20 20 20 20  mmit==1 );.     
1c190 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b   sqlite3Rollback
1c1a0 41 6c 6c 28 64 62 2c 20 53 51 4c 49 54 45 5f 41  All(db, SQLITE_A
1c1b0 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 29 3b 0a  BORT_ROLLBACK);.
1c1c0 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
1c1d0 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 7d 65  mmit = 1;.    }e
1c1e0 6c 73 65 20 69 66 28 20 64 65 73 69 72 65 64 41  lse if( desiredA
1c1f0 75 74 6f 43 6f 6d 6d 69 74 20 26 26 20 64 62 2d  utoCommit && db-
1c200 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20 29 7b  >nVdbeWrite>0 ){
1c210 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 69  .      /* If thi
1c220 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d  s instruction im
1c230 70 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d 49  plements a COMMI
1c240 54 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20  T and other VMs 
1c250 61 72 65 20 77 72 69 74 69 6e 67 0a 20 20 20 20  are writing.    
1c260 20 20 2a 2a 20 72 65 74 75 72 6e 20 61 6e 20 65    ** return an e
1c270 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 20  rror indicating 
1c280 74 68 61 74 20 74 68 65 20 6f 74 68 65 72 20 56  that the other V
1c290 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65  Ms must complete
1c2a0 20 66 69 72 73 74 2e 20 0a 20 20 20 20 20 20 2a   first. .      *
1c2b0 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  /.      sqlite3V
1c2c0 64 62 65 45 72 72 6f 72 28 70 2c 20 22 63 61 6e  dbeError(p, "can
1c2d0 6e 6f 74 20 63 6f 6d 6d 69 74 20 74 72 61 6e 73  not commit trans
1c2e0 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20  action - ".     
1c2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c300 20 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d       "SQL statem
1c310 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73  ents in progress
1c320 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53  ");.      rc = S
1c330 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
1c340 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
1c350 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
1c360 65 6c 73 65 20 69 66 28 20 28 72 63 20 3d 20 73  else if( (rc = s
1c370 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46  qlite3VdbeCheckF
1c380 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45  k(p, 1))!=SQLITE
1c390 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  _OK ){.      got
1c3a0 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
1c3b0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1c3c0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
1c3d0 20 28 75 38 29 64 65 73 69 72 65 64 41 75 74 6f   (u8)desiredAuto
1c3e0 43 6f 6d 6d 69 74 3b 0a 20 20 20 20 7d 0a 20 20  Commit;.    }.  
1c3f0 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
1c400 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45  eHalt(p)==SQLITE
1c410 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 70  _BUSY ){.      p
1c420 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70  ->pc = (int)(pOp
1c430 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20 20 64   - aOp);.      d
1c440 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
1c450 28 75 38 29 28 31 2d 64 65 73 69 72 65 64 41 75  (u8)(1-desiredAu
1c460 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20 20 20 20 20  toCommit);.     
1c470 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51   p->rc = rc = SQ
1c480 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20  LITE_BUSY;.     
1c490 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
1c4a0 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73  n;.    }.    ass
1c4b0 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d  ert( db->nStatem
1c4c0 65 6e 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71  ent==0 );.    sq
1c4d0 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f  lite3CloseSavepo
1c4e0 69 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 69 66  ints(db);.    if
1c4f0 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f  ( p->rc==SQLITE_
1c500 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  OK ){.      rc =
1c510 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20   SQLITE_DONE;.  
1c520 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
1c530 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
1c540 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f  ;.    }.    goto
1c550 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
1c560 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
1c570 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 0a 20  e3VdbeError(p,. 
1c580 20 20 20 20 20 20 20 28 21 64 65 73 69 72 65 64         (!desired
1c590 41 75 74 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e  AutoCommit)?"can
1c5a0 6e 6f 74 20 73 74 61 72 74 20 61 20 74 72 61 6e  not start a tran
1c5b0 73 61 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 61  saction within a
1c5c0 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a   transaction":(.
1c5d0 20 20 20 20 20 20 20 20 28 69 52 6f 6c 6c 62 61          (iRollba
1c5e0 63 6b 29 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c  ck)?"cannot roll
1c5f0 62 61 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61  back - no transa
1c600 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22  ction is active"
1c610 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :.              
1c620 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d       "cannot com
1c630 6d 69 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63  mit - no transac
1c640 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 29  tion is active")
1c650 29 3b 0a 20 20 20 20 20 20 20 20 20 0a 20 20 20  );.         .   
1c660 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
1c670 4f 52 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f  OR;.    goto abo
1c680 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1c690 0a 20 20 7d 0a 20 20 2f 2a 4e 4f 54 52 45 41 43  .  }.  /*NOTREAC
1c6a0 48 45 44 2a 2f 20 61 73 73 65 72 74 28 30 29 3b  HED*/ assert(0);
1c6b0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  .}../* Opcode: T
1c6c0 72 61 6e 73 61 63 74 69 6f 6e 20 50 31 20 50 32  ransaction P1 P2
1c6d0 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
1c6e0 42 65 67 69 6e 20 61 20 74 72 61 6e 73 61 63 74  Begin a transact
1c6f0 69 6f 6e 20 6f 6e 20 64 61 74 61 62 61 73 65 20  ion on database 
1c700 50 31 20 69 66 20 61 20 74 72 61 6e 73 61 63 74  P1 if a transact
1c710 69 6f 6e 20 69 73 20 6e 6f 74 20 61 6c 72 65 61  ion is not alrea
1c720 64 79 0a 2a 2a 20 61 63 74 69 76 65 2e 0a 2a 2a  dy.** active..**
1c730 20 49 66 20 50 32 20 69 73 20 6e 6f 6e 2d 7a 65   If P2 is non-ze
1c740 72 6f 2c 20 74 68 65 6e 20 61 20 77 72 69 74 65  ro, then a write
1c750 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
1c760 73 74 61 72 74 65 64 2c 20 6f 72 20 69 66 20 61  started, or if a
1c770 20 0a 2a 2a 20 72 65 61 64 2d 74 72 61 6e 73 61   .** read-transa
1c780 63 74 69 6f 6e 20 69 73 20 61 6c 72 65 61 64 79  ction is already
1c790 20 61 63 74 69 76 65 2c 20 69 74 20 69 73 20 75   active, it is u
1c7a0 70 67 72 61 64 65 64 20 74 6f 20 61 20 77 72 69  pgraded to a wri
1c7b0 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a  te-transaction..
1c7c0 2a 2a 20 49 66 20 50 32 20 69 73 20 7a 65 72 6f  ** If P2 is zero
1c7d0 2c 20 74 68 65 6e 20 61 20 72 65 61 64 2d 74 72  , then a read-tr
1c7e0 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61  ansaction is sta
1c7f0 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69  rted..**.** P1 i
1c800 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74  s the index of t
1c810 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
1c820 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 74 72   on which the tr
1c830 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20  ansaction is.** 
1c840 73 74 61 72 74 65 64 2e 20 20 49 6e 64 65 78 20  started.  Index 
1c850 30 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61  0 is the main da
1c860 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20  tabase file and 
1c870 69 6e 64 65 78 20 31 20 69 73 20 74 68 65 0a 2a  index 1 is the.*
1c880 2a 20 66 69 6c 65 20 75 73 65 64 20 66 6f 72 20  * file used for 
1c890 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
1c8a0 2e 20 20 49 6e 64 69 63 65 73 20 6f 66 20 32 20  .  Indices of 2 
1c8b0 6f 72 20 6d 6f 72 65 20 61 72 65 20 75 73 65 64  or more are used
1c8c0 20 66 6f 72 0a 2a 2a 20 61 74 74 61 63 68 65 64   for.** attached
1c8d0 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a   databases..**.*
1c8e0 2a 20 49 66 20 61 20 77 72 69 74 65 2d 74 72 61  * If a write-tra
1c8f0 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72  nsaction is star
1c900 74 65 64 20 61 6e 64 20 74 68 65 20 56 64 62 65  ted and the Vdbe
1c910 2e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c  .usesStmtJournal
1c920 20 66 6c 61 67 20 69 73 0a 2a 2a 20 74 72 75 65   flag is.** true
1c930 20 28 74 68 69 73 20 66 6c 61 67 20 69 73 20 73   (this flag is s
1c940 65 74 20 69 66 20 74 68 65 20 56 64 62 65 20 6d  et if the Vdbe m
1c950 61 79 20 6d 6f 64 69 66 79 20 6d 6f 72 65 20 74  ay modify more t
1c960 68 61 6e 20 6f 6e 65 20 72 6f 77 20 61 6e 64 20  han one row and 
1c970 6d 61 79 0a 2a 2a 20 74 68 72 6f 77 20 61 6e 20  may.** throw an 
1c980 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 29  ABORT exception)
1c990 2c 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72  , a statement tr
1c9a0 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 61 6c  ansaction may al
1c9b0 73 6f 20 62 65 20 6f 70 65 6e 65 64 2e 0a 2a 2a  so be opened..**
1c9c0 20 4d 6f 72 65 20 73 70 65 63 69 66 69 63 61 6c   More specifical
1c9d0 6c 79 2c 20 61 20 73 74 61 74 65 6d 65 6e 74 20  ly, a statement 
1c9e0 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6f  transaction is o
1c9f0 70 65 6e 65 64 20 69 66 66 20 74 68 65 20 64 61  pened iff the da
1ca00 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63  tabase.** connec
1ca10 74 69 6f 6e 20 69 73 20 63 75 72 72 65 6e 74 6c  tion is currentl
1ca20 79 20 6e 6f 74 20 69 6e 20 61 75 74 6f 63 6f 6d  y not in autocom
1ca30 6d 69 74 20 6d 6f 64 65 2c 20 6f 72 20 69 66 20  mit mode, or if 
1ca40 74 68 65 72 65 20 61 72 65 20 6f 74 68 65 72 0a  there are other.
1ca50 2a 2a 20 61 63 74 69 76 65 20 73 74 61 74 65 6d  ** active statem
1ca60 65 6e 74 73 2e 20 41 20 73 74 61 74 65 6d 65 6e  ents. A statemen
1ca70 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c  t transaction al
1ca80 6c 6f 77 73 20 74 68 65 20 63 68 61 6e 67 65 73  lows the changes
1ca90 20 6d 61 64 65 20 62 79 20 74 68 69 73 0a 2a 2a   made by this.**
1caa0 20 56 44 42 45 20 74 6f 20 62 65 20 72 6f 6c 6c   VDBE to be roll
1cab0 65 64 20 62 61 63 6b 20 61 66 74 65 72 20 61 6e  ed back after an
1cac0 20 65 72 72 6f 72 20 77 69 74 68 6f 75 74 20 68   error without h
1cad0 61 76 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62 61  aving to roll ba
1cae0 63 6b 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65  ck the.** entire
1caf0 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 66   transaction. If
1cb00 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 65 6e 63   no error is enc
1cb10 6f 75 6e 74 65 72 65 64 2c 20 74 68 65 20 73 74  ountered, the st
1cb20 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
1cb30 69 6f 6e 0a 2a 2a 20 77 69 6c 6c 20 61 75 74 6f  ion.** will auto
1cb40 6d 61 74 69 63 61 6c 6c 79 20 63 6f 6d 6d 69 74  matically commit
1cb50 20 77 68 65 6e 20 74 68 65 20 56 44 42 45 20 68   when the VDBE h
1cb60 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  alts..**.** If P
1cb70 35 21 3d 30 20 74 68 65 6e 20 74 68 69 73 20 6f  5!=0 then this o
1cb80 70 63 6f 64 65 20 61 6c 73 6f 20 63 68 65 63 6b  pcode also check
1cb90 73 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f  s the schema coo
1cba0 6b 69 65 20 61 67 61 69 6e 73 74 20 50 33 0a 2a  kie against P3.*
1cbb0 2a 20 61 6e 64 20 74 68 65 20 73 63 68 65 6d 61  * and the schema
1cbc0 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e   generation coun
1cbd0 74 65 72 20 61 67 61 69 6e 73 74 20 50 34 2e 0a  ter against P4..
1cbe0 2a 2a 20 54 68 65 20 63 6f 6f 6b 69 65 20 63 68  ** The cookie ch
1cbf0 61 6e 67 65 73 20 69 74 73 20 76 61 6c 75 65 20  anges its value 
1cc00 77 68 65 6e 65 76 65 72 20 74 68 65 20 64 61 74  whenever the dat
1cc10 61 62 61 73 65 20 73 63 68 65 6d 61 20 63 68 61  abase schema cha
1cc20 6e 67 65 73 2e 0a 2a 2a 20 54 68 69 73 20 6f 70  nges..** This op
1cc30 65 72 61 74 69 6f 6e 20 69 73 20 75 73 65 64 20  eration is used 
1cc40 74 6f 20 64 65 74 65 63 74 20 77 68 65 6e 20 74  to detect when t
1cc50 68 61 74 20 74 68 65 20 63 6f 6f 6b 69 65 20 68  hat the cookie h
1cc60 61 73 20 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e  as changed.** an
1cc70 64 20 74 68 61 74 20 74 68 65 20 63 75 72 72 65  d that the curre
1cc80 6e 74 20 70 72 6f 63 65 73 73 20 6e 65 65 64 73  nt process needs
1cc90 20 74 6f 20 72 65 72 65 61 64 20 74 68 65 20 73   to reread the s
1cca0 63 68 65 6d 61 2e 20 20 49 66 20 74 68 65 20 73  chema.  If the s
1ccb0 63 68 65 6d 61 0a 2a 2a 20 63 6f 6f 6b 69 65 20  chema.** cookie 
1ccc0 69 6e 20 50 33 20 64 69 66 66 65 72 73 20 66 72  in P3 differs fr
1ccd0 6f 6d 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f  om the schema co
1cce0 6f 6b 69 65 20 69 6e 20 74 68 65 20 64 61 74 61  okie in the data
1ccf0 62 61 73 65 20 68 65 61 64 65 72 20 6f 72 0a 2a  base header or.*
1cd00 2a 20 69 66 20 74 68 65 20 73 63 68 65 6d 61 20  * if the schema 
1cd10 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74  generation count
1cd20 65 72 20 69 6e 20 50 34 20 64 69 66 66 65 72 73  er in P4 differs
1cd30 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e   from the curren
1cd40 74 0a 2a 2a 20 67 65 6e 65 72 61 74 69 6f 6e 20  t.** generation 
1cd50 63 6f 75 6e 74 65 72 2c 20 74 68 65 6e 20 61 6e  counter, then an
1cd60 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 65   SQLITE_SCHEMA e
1cd70 72 72 6f 72 20 69 73 20 72 61 69 73 65 64 20 61  rror is raised a
1cd80 6e 64 20 65 78 65 63 75 74 69 6f 6e 0a 2a 2a 20  nd execution.** 
1cd90 68 61 6c 74 73 2e 20 20 54 68 65 20 73 71 6c 69  halts.  The sqli
1cda0 74 65 33 5f 73 74 65 70 28 29 20 77 72 61 70 70  te3_step() wrapp
1cdb0 65 72 20 66 75 6e 63 74 69 6f 6e 20 6d 69 67 68  er function migh
1cdc0 74 20 74 68 65 6e 20 72 65 70 72 65 70 61 72 65  t then reprepare
1cdd0 20 74 68 65 0a 2a 2a 20 73 74 61 74 65 6d 65 6e   the.** statemen
1cde0 74 20 61 6e 64 20 72 65 72 75 6e 20 69 74 20 66  t and rerun it f
1cdf0 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  rom the beginnin
1ce00 67 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72  g..*/.case OP_Tr
1ce10 61 6e 73 61 63 74 69 6f 6e 3a 20 7b 0a 20 20 42  ansaction: {.  B
1ce20 74 72 65 65 20 2a 70 42 74 3b 0a 20 20 69 6e 74  tree *pBt;.  int
1ce30 20 69 4d 65 74 61 20 3d 20 30 3b 0a 0a 20 20 61   iMeta = 0;..  a
1ce40 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
1ce50 64 65 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  der );.  assert(
1ce60 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
1ce70 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b  || pOp->p2==0 );
1ce80 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1ce90 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1cea0 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
1ceb0 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
1cec0 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70  (p->btreeMask, p
1ced0 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 69 66 28  Op->p1) );.  if(
1cee0 20 70 4f 70 2d 3e 70 32 20 26 26 20 28 64 62 2d   pOp->p2 && (db-
1cef0 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
1cf00 51 75 65 72 79 4f 6e 6c 79 29 21 3d 30 20 29 7b  QueryOnly)!=0 ){
1cf10 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
1cf20 5f 52 45 41 44 4f 4e 4c 59 3b 0a 20 20 20 20 67  _READONLY;.    g
1cf30 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1cf40 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 42  _error;.  }.  pB
1cf50 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  t = db->aDb[pOp-
1cf60 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28  >p1].pBt;..  if(
1cf70 20 70 42 74 20 29 7b 0a 20 20 20 20 72 63 20 3d   pBt ){.    rc =
1cf80 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67   sqlite3BtreeBeg
1cf90 69 6e 54 72 61 6e 73 28 70 42 74 2c 20 70 4f 70  inTrans(pBt, pOp
1cfa0 2d 3e 70 32 2c 20 26 69 4d 65 74 61 29 3b 0a 20  ->p2, &iMeta);. 
1cfb0 20 20 20 74 65 73 74 63 61 73 65 28 20 72 63 3d     testcase( rc=
1cfc0 3d 53 51 4c 49 54 45 5f 42 55 53 59 5f 53 4e 41  =SQLITE_BUSY_SNA
1cfd0 50 53 48 4f 54 20 29 3b 0a 20 20 20 20 74 65 73  PSHOT );.    tes
1cfe0 74 63 61 73 65 28 20 72 63 3d 3d 53 51 4c 49 54  tcase( rc==SQLIT
1cff0 45 5f 42 55 53 59 5f 52 45 43 4f 56 45 52 59 20  E_BUSY_RECOVERY 
1d000 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53  );.    if( rc!=S
1d010 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1d020 20 20 69 66 28 20 28 72 63 26 30 78 66 66 29 3d    if( (rc&0xff)=
1d030 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
1d040 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20          p->pc = 
1d050 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
1d060 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20  ;.        p->rc 
1d070 3d 20 72 63 3b 0a 20 20 20 20 20 20 20 20 67 6f  = rc;.        go
1d080 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
1d090 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 67 6f        }.      go
1d0a0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1d0b0 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20 20  error;.    }..  
1d0c0 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26    if( pOp->p2 &&
1d0d0 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72   p->usesStmtJour
1d0e0 6e 61 6c 20 0a 20 20 20 20 20 26 26 20 28 64 62  nal .     && (db
1d0f0 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  ->autoCommit==0 
1d100 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64  || db->nVdbeRead
1d110 3e 31 29 20 0a 20 20 20 20 29 7b 0a 20 20 20 20  >1) .    ){.    
1d120 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
1d130 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28  3BtreeIsInTrans(
1d140 70 42 74 29 20 29 3b 0a 20 20 20 20 20 20 69 66  pBt) );.      if
1d150 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d  ( p->iStatement=
1d160 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  =0 ){.        as
1d170 73 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65  sert( db->nState
1d180 6d 65 6e 74 3e 3d 30 20 26 26 20 64 62 2d 3e 6e  ment>=0 && db->n
1d190 53 61 76 65 70 6f 69 6e 74 3e 3d 30 20 29 3b 0a  Savepoint>=0 );.
1d1a0 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61          db->nSta
1d1b0 74 65 6d 65 6e 74 2b 2b 3b 20 0a 20 20 20 20 20  tement++; .     
1d1c0 20 20 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74     p->iStatement
1d1d0 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e   = db->nSavepoin
1d1e0 74 20 2b 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65  t + db->nStateme
1d1f0 6e 74 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  nt;.      }..   
1d200 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
1d210 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c  tabSavepoint(db,
1d220 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e   SAVEPOINT_BEGIN
1d230 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 2d  , p->iStatement-
1d240 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  1);.      if( rc
1d250 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
1d260 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
1d270 74 65 33 42 74 72 65 65 42 65 67 69 6e 53 74 6d  te3BtreeBeginStm
1d280 74 28 70 42 74 2c 20 70 2d 3e 69 53 74 61 74 65  t(pBt, p->iState
1d290 6d 65 6e 74 29 3b 0a 20 20 20 20 20 20 7d 0a 0a  ment);.      }..
1d2a0 20 20 20 20 20 20 2f 2a 20 53 74 6f 72 65 20 74        /* Store t
1d2b0 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65  he current value
1d2c0 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
1d2d0 20 68 61 6e 64 6c 65 73 20 64 65 66 65 72 72 65   handles deferre
1d2e0 64 20 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20 20  d constraint.   
1d2f0 20 20 20 2a 2a 20 63 6f 75 6e 74 65 72 2e 20 49     ** counter. I
1d300 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  f the statement 
1d310 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64  transaction need
1d320 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62  s to be rolled b
1d330 61 63 6b 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68  ack,.      ** th
1d340 65 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20  e value of this 
1d350 63 6f 75 6e 74 65 72 20 6e 65 65 64 73 20 74 6f  counter needs to
1d360 20 62 65 20 72 65 73 74 6f 72 65 64 20 74 6f 6f   be restored too
1d370 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 2d 3e 6e  .  */.      p->n
1d380 53 74 6d 74 44 65 66 43 6f 6e 73 20 3d 20 64 62  StmtDefCons = db
1d390 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b  ->nDeferredCons;
1d3a0 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44  .      p->nStmtD
1d3b0 65 66 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e  efImmCons = db->
1d3c0 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
1d3d0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61 73  ;.    }.  }.  as
1d3e0 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30  sert( pOp->p5==0
1d3f0 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d   || pOp->p4type=
1d400 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 69  =P4_INT32 );.  i
1d410 66 28 20 70 4f 70 2d 3e 70 35 0a 20 20 20 26 26  f( pOp->p5.   &&
1d420 20 28 69 4d 65 74 61 21 3d 70 4f 70 2d 3e 70 33   (iMeta!=pOp->p3
1d430 0a 20 20 20 20 20 20 7c 7c 20 64 62 2d 3e 61 44  .      || db->aD
1d440 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65  b[pOp->p1].pSche
1d450 6d 61 2d 3e 69 47 65 6e 65 72 61 74 69 6f 6e 21  ma->iGeneration!
1d460 3d 70 4f 70 2d 3e 70 34 2e 69 29 0a 20 20 29 7b  =pOp->p4.i).  ){
1d470 0a 20 20 20 20 2f 2a 0a 20 20 20 20 2a 2a 20 49  .    /*.    ** I
1d480 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46  MPLEMENTATION-OF
1d490 3a 20 52 2d 30 33 31 38 39 2d 35 31 31 33 35 20  : R-03189-51135 
1d4a0 41 73 20 65 61 63 68 20 53 51 4c 20 73 74 61 74  As each SQL stat
1d4b0 65 6d 65 6e 74 20 72 75 6e 73 2c 20 74 68 65 20  ement runs, the 
1d4c0 73 63 68 65 6d 61 0a 20 20 20 20 2a 2a 20 76 65  schema.    ** ve
1d4d0 72 73 69 6f 6e 20 69 73 20 63 68 65 63 6b 65 64  rsion is checked
1d4e0 20 74 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20   to ensure that 
1d4f0 74 68 65 20 73 63 68 65 6d 61 20 68 61 73 20 6e  the schema has n
1d500 6f 74 20 63 68 61 6e 67 65 64 20 73 69 6e 63 65  ot changed since
1d510 20 74 68 65 0a 20 20 20 20 2a 2a 20 53 51 4c 20   the.    ** SQL 
1d520 73 74 61 74 65 6d 65 6e 74 20 77 61 73 20 70 72  statement was pr
1d530 65 70 61 72 65 64 2e 0a 20 20 20 20 2a 2f 0a 20  epared..    */. 
1d540 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
1d550 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29  (db, p->zErrMsg)
1d560 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67  ;.    p->zErrMsg
1d570 20 3d 20 73 71 6c 69 74 65 33 44 62 53 74 72 44   = sqlite3DbStrD
1d580 75 70 28 64 62 2c 20 22 64 61 74 61 62 61 73 65  up(db, "database
1d590 20 73 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e   schema has chan
1d5a0 67 65 64 22 29 3b 0a 20 20 20 20 2f 2a 20 49 66  ged");.    /* If
1d5b0 20 74 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b   the schema-cook
1d5c0 69 65 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ie from the data
1d5d0 62 61 73 65 20 66 69 6c 65 20 6d 61 74 63 68 65  base file matche
1d5e0 73 20 74 68 65 20 63 6f 6f 6b 69 65 20 0a 20 20  s the cookie .  
1d5f0 20 20 2a 2a 20 73 74 6f 72 65 64 20 77 69 74 68    ** stored with
1d600 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 72   the in-memory r
1d610 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
1d620 20 74 68 65 20 73 63 68 65 6d 61 2c 20 64 6f 0a   the schema, do.
1d630 20 20 20 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61      ** not reloa
1d640 64 20 74 68 65 20 73 63 68 65 6d 61 20 66 72 6f  d the schema fro
1d650 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  m the database f
1d660 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20  ile..    **.    
1d670 2a 2a 20 49 66 20 76 69 72 74 75 61 6c 2d 74 61  ** If virtual-ta
1d680 62 6c 65 73 20 61 72 65 20 69 6e 20 75 73 65 2c  bles are in use,
1d690 20 74 68 69 73 20 69 73 20 6e 6f 74 20 6a 75 73   this is not jus
1d6a0 74 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f  t an optimizatio
1d6b0 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66 74 65 6e 2c  n..    ** Often,
1d6c0 20 76 2d 74 61 62 6c 65 73 20 73 74 6f 72 65 20   v-tables store 
1d6d0 74 68 65 69 72 20 64 61 74 61 20 69 6e 20 6f 74  their data in ot
1d6e0 68 65 72 20 53 51 4c 69 74 65 20 74 61 62 6c 65  her SQLite table
1d6f0 73 2c 20 77 68 69 63 68 0a 20 20 20 20 2a 2a 20  s, which.    ** 
1d700 61 72 65 20 71 75 65 72 69 65 64 20 66 72 6f 6d  are queried from
1d710 20 77 69 74 68 69 6e 20 78 4e 65 78 74 28 29 20   within xNext() 
1d720 61 6e 64 20 6f 74 68 65 72 20 76 2d 74 61 62 6c  and other v-tabl
1d730 65 20 6d 65 74 68 6f 64 73 20 75 73 69 6e 67 0a  e methods using.
1d740 20 20 20 20 2a 2a 20 70 72 65 70 61 72 65 64 20      ** prepared 
1d750 71 75 65 72 69 65 73 2e 20 49 66 20 73 75 63 68  queries. If such
1d760 20 61 20 71 75 65 72 79 20 69 73 20 6f 75 74 2d   a query is out-
1d770 6f 66 2d 64 61 74 65 2c 20 77 65 20 64 6f 20 6e  of-date, we do n
1d780 6f 74 20 77 61 6e 74 20 74 6f 0a 20 20 20 20 2a  ot want to.    *
1d790 2a 20 64 69 73 63 61 72 64 20 74 68 65 20 64 61  * discard the da
1d7a0 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20 61  tabase schema, a
1d7b0 73 20 74 68 65 20 75 73 65 72 20 63 6f 64 65 20  s the user code 
1d7c0 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65  implementing the
1d7d0 0a 20 20 20 20 2a 2a 20 76 2d 74 61 62 6c 65 20  .    ** v-table 
1d7e0 77 6f 75 6c 64 20 68 61 76 65 20 74 6f 20 62 65  would have to be
1d7f0 20 72 65 61 64 79 20 66 6f 72 20 74 68 65 20 73   ready for the s
1d800 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75  qlite3_vtab stru
1d810 63 74 75 72 65 20 69 74 73 65 6c 66 0a 20 20 20  cture itself.   
1d820 20 2a 2a 20 74 6f 20 62 65 20 69 6e 76 61 6c 69   ** to be invali
1d830 64 61 74 65 64 20 77 68 65 6e 65 76 65 72 20 73  dated whenever s
1d840 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 69 73  qlite3_step() is
1d850 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74   called from wit
1d860 68 69 6e 20 0a 20 20 20 20 2a 2a 20 61 20 76 2d  hin .    ** a v-
1d870 74 61 62 6c 65 20 6d 65 74 68 6f 64 2e 0a 20 20  table method..  
1d880 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 64 62 2d    */.    if( db-
1d890 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53  >aDb[pOp->p1].pS
1d8a0 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f  chema->schema_co
1d8b0 6f 6b 69 65 21 3d 69 4d 65 74 61 20 29 7b 0a 20  okie!=iMeta ){. 
1d8c0 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65       sqlite3Rese
1d8d0 74 4f 6e 65 53 63 68 65 6d 61 28 64 62 2c 20 70  tOneSchema(db, p
1d8e0 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 20  Op->p1);.    }. 
1d8f0 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20     p->expired = 
1d900 31 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  1;.    rc = SQLI
1d910 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20  TE_SCHEMA;.  }. 
1d920 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
1d930 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1d940 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  r;.  break;.}../
1d950 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 64 43 6f  * Opcode: ReadCo
1d960 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a 20  okie P1 P2 P3 * 
1d970 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f 6f  *.**.** Read coo
1d980 6b 69 65 20 6e 75 6d 62 65 72 20 50 33 20 66 72  kie number P3 fr
1d990 6f 6d 20 64 61 74 61 62 61 73 65 20 50 31 20 61  om database P1 a
1d9a0 6e 64 20 77 72 69 74 65 20 69 74 20 69 6e 74 6f  nd write it into
1d9b0 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
1d9c0 20 50 33 3d 3d 31 20 69 73 20 74 68 65 20 73 63   P3==1 is the sc
1d9d0 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50  hema version.  P
1d9e0 33 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61  3==2 is the data
1d9f0 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20  base format..** 
1da00 50 33 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63  P3==3 is the rec
1da10 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63  ommended pager c
1da20 61 63 68 65 20 73 69 7a 65 2c 20 61 6e 64 20 73  ache size, and s
1da30 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20  o forth.  P1==0 
1da40 69 73 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64  is.** the main d
1da50 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64  atabase file and
1da60 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20 64 61   P1==1 is the da
1da70 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64  tabase file used
1da80 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d   to store.** tem
1da90 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a  porary tables..*
1daa0 2a 0a 2a 2a 20 54 68 65 72 65 20 6d 75 73 74 20  *.** There must 
1dab0 62 65 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20 6f  be a read-lock o
1dac0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 28  n the database (
1dad0 65 69 74 68 65 72 20 61 20 74 72 61 6e 73 61 63  either a transac
1dae0 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62 65 20  tion.** must be 
1daf0 73 74 61 72 74 65 64 20 6f 72 20 74 68 65 72 65  started or there
1db00 20 6d 75 73 74 20 62 65 20 61 6e 20 6f 70 65 6e   must be an open
1db10 20 63 75 72 73 6f 72 29 20 62 65 66 6f 72 65 0a   cursor) before.
1db20 2a 2a 20 65 78 65 63 75 74 69 6e 67 20 74 68 69  ** executing thi
1db30 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  s instruction..*
1db40 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 64 43 6f  /.case OP_ReadCo
1db50 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 20 20  okie: {         
1db60 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
1db70 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20  .  int iMeta;.  
1db80 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 69  int iDb;.  int i
1db90 43 6f 6f 6b 69 65 3b 0a 0a 20 20 61 73 73 65 72  Cookie;..  asser
1dba0 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
1dbb0 29 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e  );.  iDb = pOp->
1dbc0 70 31 3b 0a 20 20 69 43 6f 6f 6b 69 65 20 3d 20  p1;.  iCookie = 
1dbd0 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72  pOp->p3;.  asser
1dbe0 74 28 20 70 4f 70 2d 3e 70 33 3c 53 51 4c 49 54  t( pOp->p3<SQLIT
1dbf0 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29  E_N_BTREE_META )
1dc00 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e  ;.  assert( iDb>
1dc10 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44  =0 && iDb<db->nD
1dc20 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  b );.  assert( d
1dc30 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 21  b->aDb[iDb].pBt!
1dc40 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1dc50 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
1dc60 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b  reeMask, iDb) );
1dc70 0a 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65  ..  sqlite3Btree
1dc80 47 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b  GetMeta(db->aDb[
1dc90 69 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b 69  iDb].pBt, iCooki
1dca0 65 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61  e, (u32 *)&iMeta
1dcb0 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  );.  pOut = out2
1dcc0 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
1dcd0 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20  p);.  pOut->u.i 
1dce0 3d 20 69 4d 65 74 61 3b 0a 20 20 62 72 65 61 6b  = iMeta;.  break
1dcf0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1dd00 53 65 74 43 6f 6f 6b 69 65 20 50 31 20 50 32 20  SetCookie P1 P2 
1dd10 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69  P3 * *.**.** Wri
1dd20 74 65 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  te the integer v
1dd30 61 6c 75 65 20 50 33 20 69 6e 74 6f 20 63 6f 6f  alue P3 into coo
1dd40 6b 69 65 20 6e 75 6d 62 65 72 20 50 32 20 6f 66  kie number P2 of
1dd50 20 64 61 74 61 62 61 73 65 20 50 31 2e 0a 2a 2a   database P1..**
1dd60 20 50 32 3d 3d 31 20 69 73 20 74 68 65 20 73 63   P2==1 is the sc
1dd70 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50  hema version.  P
1dd80 32 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61  2==2 is the data
1dd90 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20  base format..** 
1dda0 50 32 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63  P2==3 is the rec
1ddb0 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63  ommended pager c
1ddc0 61 63 68 65 20 0a 2a 2a 20 73 69 7a 65 2c 20 61  ache .** size, a
1ddd0 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31  nd so forth.  P1
1dde0 3d 3d 30 20 69 73 20 74 68 65 20 6d 61 69 6e 20  ==0 is the main 
1ddf0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e  database file an
1de00 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20 0a  d P1==1 is the .
1de10 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ** database file
1de20 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
1de30 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e  emporary tables.
1de40 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e 73 61 63  .**.** A transac
1de50 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 73 74 61  tion must be sta
1de60 72 74 65 64 20 62 65 66 6f 72 65 20 65 78 65 63  rted before exec
1de70 75 74 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64  uting this opcod
1de80 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  e..*/.case OP_Se
1de90 74 43 6f 6f 6b 69 65 3a 20 7b 0a 20 20 44 62 20  tCookie: {.  Db 
1dea0 2a 70 44 62 3b 0a 0a 20 20 73 71 6c 69 74 65 33  *pDb;..  sqlite3
1deb0 56 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75  VdbeIncrWriteCou
1dec0 6e 74 65 72 28 70 2c 20 30 29 3b 0a 20 20 61 73  nter(p, 0);.  as
1ded0 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51  sert( pOp->p2<SQ
1dee0 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54  LITE_N_BTREE_MET
1def0 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  A );.  assert( p
1df00 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1df10 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
1df20 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
1df30 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
1df40 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20  k, pOp->p1) );. 
1df50 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
1df60 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62  Only==0 );.  pDb
1df70 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d   = &db->aDb[pOp-
1df80 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
1df90 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20  pDb->pBt!=0 );. 
1dfa0 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
1dfb0 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28  SchemaMutexHeld(
1dfc0 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 29 20  db, pOp->p1, 0) 
1dfd0 29 3b 0a 20 20 2f 2a 20 53 65 65 20 6e 6f 74 65  );.  /* See note
1dfe0 20 61 62 6f 75 74 20 69 6e 64 65 78 20 73 68 69   about index shi
1dff0 66 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65 61 64  fting on OP_Read
1e000 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63 20 3d  Cookie */.  rc =
1e010 20 73 71 6c 69 74 65 33 42 74 72 65 65 55 70 64   sqlite3BtreeUpd
1e020 61 74 65 4d 65 74 61 28 70 44 62 2d 3e 70 42 74  ateMeta(pDb->pBt
1e030 2c 20 70 4f 70 2d 3e 70 32 2c 20 70 4f 70 2d 3e  , pOp->p2, pOp->
1e040 70 33 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  p3);.  if( pOp->
1e050 70 32 3d 3d 42 54 52 45 45 5f 53 43 48 45 4d 41  p2==BTREE_SCHEMA
1e060 5f 56 45 52 53 49 4f 4e 20 29 7b 0a 20 20 20 20  _VERSION ){.    
1e070 2f 2a 20 57 68 65 6e 20 74 68 65 20 73 63 68 65  /* When the sche
1e080 6d 61 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65  ma cookie change
1e090 73 2c 20 72 65 63 6f 72 64 20 74 68 65 20 6e 65  s, record the ne
1e0a0 77 20 63 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61  w cookie interna
1e0b0 6c 6c 79 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e  lly */.    pDb->
1e0c0 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f  pSchema->schema_
1e0d0 63 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33  cookie = pOp->p3
1e0e0 3b 0a 20 20 20 20 64 62 2d 3e 6d 44 62 46 6c 61  ;.    db->mDbFla
1e0f0 67 73 20 7c 3d 20 44 42 46 4c 41 47 5f 53 63 68  gs |= DBFLAG_Sch
1e100 65 6d 61 43 68 61 6e 67 65 3b 0a 20 20 7d 65 6c  emaChange;.  }el
1e110 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d  se if( pOp->p2==
1e120 42 54 52 45 45 5f 46 49 4c 45 5f 46 4f 52 4d 41  BTREE_FILE_FORMA
1e130 54 20 29 7b 0a 20 20 20 20 2f 2a 20 52 65 63 6f  T ){.    /* Reco
1e140 72 64 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68  rd changes in th
1e150 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 2a 2f  e file format */
1e160 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d  .    pDb->pSchem
1e170 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d  a->file_format =
1e180 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20   pOp->p3;.  }.  
1e190 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 31 20 29  if( pOp->p1==1 )
1e1a0 7b 0a 20 20 20 20 2f 2a 20 49 6e 76 61 6c 69 64  {.    /* Invalid
1e1b0 61 74 65 20 61 6c 6c 20 70 72 65 70 61 72 65 64  ate all prepared
1e1c0 20 73 74 61 74 65 6d 65 6e 74 73 20 77 68 65 6e   statements when
1e1d0 65 76 65 72 20 74 68 65 20 54 45 4d 50 20 64 61  ever the TEMP da
1e1e0 74 61 62 61 73 65 0a 20 20 20 20 2a 2a 20 73 63  tabase.    ** sc
1e1f0 68 65 6d 61 20 69 73 20 63 68 61 6e 67 65 64 2e  hema is changed.
1e200 20 20 54 69 63 6b 65 74 20 23 31 36 34 34 20 2a    Ticket #1644 *
1e210 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70  /.    sqlite3Exp
1e220 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
1e230 6d 65 6e 74 73 28 64 62 2c 20 30 29 3b 0a 20 20  ments(db, 0);.  
1e240 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30    p->expired = 0
1e250 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29  ;.  }.  if( rc )
1e260 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1e270 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
1e280 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1e290 20 4f 70 65 6e 52 65 61 64 20 50 31 20 50 32 20   OpenRead P1 P2 
1e2a0 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
1e2b0 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44  psis: root=P2 iD
1e2c0 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20  b=P3.**.** Open 
1e2d0 61 20 72 65 61 64 2d 6f 6e 6c 79 20 63 75 72 73  a read-only curs
1e2e0 6f 72 20 66 6f 72 20 74 68 65 20 64 61 74 61 62  or for the datab
1e2f0 61 73 65 20 74 61 62 6c 65 20 77 68 6f 73 65 20  ase table whose 
1e300 72 6f 6f 74 20 70 61 67 65 20 69 73 0a 2a 2a 20  root page is.** 
1e310 50 32 20 69 6e 20 61 20 64 61 74 61 62 61 73 65  P2 in a database
1e320 20 66 69 6c 65 2e 20 20 54 68 65 20 64 61 74 61   file.  The data
1e330 62 61 73 65 20 66 69 6c 65 20 69 73 20 64 65 74  base file is det
1e340 65 72 6d 69 6e 65 64 20 62 79 20 50 33 2e 20 0a  ermined by P3. .
1e350 2a 2a 20 50 33 3d 3d 30 20 6d 65 61 6e 73 20 74  ** P3==0 means t
1e360 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
1e370 2c 20 50 33 3d 3d 31 20 6d 65 61 6e 73 20 74 68  , P3==1 means th
1e380 65 20 64 61 74 61 62 61 73 65 20 75 73 65 64 20  e database used 
1e390 66 6f 72 20 0a 2a 2a 20 74 65 6d 70 6f 72 61 72  for .** temporar
1e3a0 79 20 74 61 62 6c 65 73 2c 20 61 6e 64 20 50 33  y tables, and P3
1e3b0 3e 31 20 6d 65 61 6e 73 20 75 73 65 64 20 74 68  >1 means used th
1e3c0 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
1e3d0 61 74 74 61 63 68 65 64 0a 2a 2a 20 64 61 74 61  attached.** data
1e3e0 62 61 73 65 2e 20 20 47 69 76 65 20 74 68 65 20  base.  Give the 
1e3f0 6e 65 77 20 63 75 72 73 6f 72 20 61 6e 20 69 64  new cursor an id
1e400 65 6e 74 69 66 69 65 72 20 6f 66 20 50 31 2e 20  entifier of P1. 
1e410 20 54 68 65 20 50 31 0a 2a 2a 20 76 61 6c 75 65   The P1.** value
1e420 73 20 6e 65 65 64 20 6e 6f 74 20 62 65 20 63 6f  s need not be co
1e430 6e 74 69 67 75 6f 75 73 20 62 75 74 20 61 6c 6c  ntiguous but all
1e440 20 50 31 20 76 61 6c 75 65 73 20 73 68 6f 75 6c   P1 values shoul
1e450 64 20 62 65 20 73 6d 61 6c 6c 20 69 6e 74 65 67  d be small integ
1e460 65 72 73 2e 0a 2a 2a 20 49 74 20 69 73 20 61 6e  ers..** It is an
1e470 20 65 72 72 6f 72 20 66 6f 72 20 50 31 20 74 6f   error for P1 to
1e480 20 62 65 20 6e 65 67 61 74 69 76 65 2e 0a 2a 2a   be negative..**
1e490 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 50 35 20 62  .** Allowed P5 b
1e4a0 69 74 73 3a 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20  its:.** <ul>.** 
1e4b0 3c 6c 69 3e 20 20 3c 62 3e 30 78 30 32 20 4f 50  <li>  <b>0x02 OP
1e4c0 46 4c 41 47 5f 53 45 45 4b 45 51 3c 2f 62 3e 3a  FLAG_SEEKEQ</b>:
1e4d0 20 54 68 69 73 20 63 75 72 73 6f 72 20 77 69 6c   This cursor wil
1e4e0 6c 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 66  l only be used f
1e4f0 6f 72 0a 2a 2a 20 20 20 20 20 20 20 65 71 75 61  or.**       equa
1e500 6c 69 74 79 20 6c 6f 6f 6b 75 70 73 20 28 69 6d  lity lookups (im
1e510 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20 70  plemented as a p
1e520 61 69 72 20 6f 66 20 6f 70 63 6f 64 65 73 20 4f  air of opcodes O
1e530 50 5f 53 65 65 6b 47 45 2f 4f 50 5f 49 64 78 47  P_SeekGE/OP_IdxG
1e540 54 0a 2a 2a 20 20 20 20 20 20 20 6f 66 20 4f 50  T.**       of OP
1e550 5f 53 65 65 6b 4c 45 2f 4f 50 5f 49 64 78 47 54  _SeekLE/OP_IdxGT
1e560 29 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a  ).** </ul>.**.**
1e570 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61   The P4 value ma
1e580 79 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 69  y be either an i
1e590 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32  nteger (P4_INT32
1e5a0 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74  ) or a pointer t
1e5b0 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73  o.** a KeyInfo s
1e5c0 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59  tructure (P4_KEY
1e5d0 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20  INFO). If it is 
1e5e0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b  a pointer to a K
1e5f0 65 79 49 6e 66 6f 20 0a 2a 2a 20 6f 62 6a 65 63  eyInfo .** objec
1e600 74 2c 20 74 68 65 6e 20 74 61 62 6c 65 20 62 65  t, then table be
1e610 69 6e 67 20 6f 70 65 6e 65 64 20 6d 75 73 74 20  ing opened must 
1e620 62 65 20 61 6e 20 5b 69 6e 64 65 78 20 62 2d 74  be an [index b-t
1e630 72 65 65 5d 20 77 68 65 72 65 20 74 68 65 0a 2a  ree] where the.*
1e640 2a 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74  * KeyInfo object
1e650 20 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e   defines the con
1e660 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69  tent and collati
1e670 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20  ng .** sequence 
1e680 6f 66 20 74 68 61 74 20 69 6e 64 65 78 20 62 2d  of that index b-
1e690 74 72 65 65 2e 20 4f 74 68 65 72 77 69 73 65 2c  tree. Otherwise,
1e6a0 20 69 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74   if P4 is an int
1e6b0 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20  eger .** value, 
1e6c0 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 62  then the table b
1e6d0 65 69 6e 67 20 6f 70 65 6e 65 64 20 6d 75 73 74  eing opened must
1e6e0 20 62 65 20 61 20 5b 74 61 62 6c 65 20 62 2d 74   be a [table b-t
1e6f0 72 65 65 5d 20 77 69 74 68 20 61 0a 2a 2a 20 6e  ree] with a.** n
1e700 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
1e710 20 6e 6f 20 6c 65 73 73 20 74 68 61 6e 20 74 68   no less than th
1e720 65 20 76 61 6c 75 65 20 6f 66 20 50 34 2e 0a 2a  e value of P4..*
1e730 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4f  *.** See also: O
1e740 70 65 6e 57 72 69 74 65 2c 20 52 65 6f 70 65 6e  penWrite, Reopen
1e750 49 64 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  Idx.*/./* Opcode
1e760 3a 20 52 65 6f 70 65 6e 49 64 78 20 50 31 20 50  : ReopenIdx P1 P
1e770 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
1e780 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20  nopsis: root=P2 
1e790 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 54 68 65  iDb=P3.**.** The
1e7a0 20 52 65 6f 70 65 6e 49 64 78 20 6f 70 63 6f 64   ReopenIdx opcod
1e7b0 65 20 77 6f 72 6b 73 20 6c 69 6b 65 20 4f 50 5f  e works like OP_
1e7c0 4f 70 65 6e 52 65 61 64 20 65 78 63 65 70 74 20  OpenRead except 
1e7d0 74 68 61 74 20 69 74 20 66 69 72 73 74 0a 2a 2a  that it first.**
1e7e0 20 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69   checks to see i
1e7f0 66 20 74 68 65 20 63 75 72 73 6f 72 20 6f 6e 20  f the cursor on 
1e800 50 31 20 69 73 20 61 6c 72 65 61 64 79 20 6f 70  P1 is already op
1e810 65 6e 20 6f 6e 20 74 68 65 20 73 61 6d 65 0a 2a  en on the same.*
1e820 2a 20 62 2d 74 72 65 65 20 61 6e 64 20 69 66 20  * b-tree and if 
1e830 69 74 20 69 73 20 74 68 69 73 20 6f 70 63 6f 64  it is this opcod
1e840 65 20 62 65 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f  e becomes a no-o
1e850 70 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  p.  In other wor
1e860 64 73 2c 0a 2a 2a 20 69 66 20 74 68 65 20 63 75  ds,.** if the cu
1e870 72 73 6f 72 20 69 73 20 61 6c 72 65 61 64 79 20  rsor is already 
1e880 6f 70 65 6e 2c 20 64 6f 20 6e 6f 74 20 72 65 6f  open, do not reo
1e890 70 65 6e 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  pen it..**.** Th
1e8a0 65 20 52 65 6f 70 65 6e 49 64 78 20 6f 70 63 6f  e ReopenIdx opco
1e8b0 64 65 20 6d 61 79 20 6f 6e 6c 79 20 62 65 20 75  de may only be u
1e8c0 73 65 64 20 77 69 74 68 20 50 35 3d 3d 30 20 6f  sed with P5==0 o
1e8d0 72 20 50 35 3d 3d 4f 50 46 4c 41 47 5f 53 45 45  r P5==OPFLAG_SEE
1e8e0 4b 45 51 0a 2a 2a 20 61 6e 64 20 77 69 74 68 20  KEQ.** and with 
1e8f0 50 34 20 62 65 69 6e 67 20 61 20 50 34 5f 4b 45  P4 being a P4_KE
1e900 59 49 4e 46 4f 20 6f 62 6a 65 63 74 2e 20 20 46  YINFO object.  F
1e910 75 72 74 68 65 72 6d 6f 72 65 2c 20 74 68 65 20  urthermore, the 
1e920 50 33 20 76 61 6c 75 65 20 6d 75 73 74 0a 2a 2a  P3 value must.**
1e930 20 62 65 20 74 68 65 20 73 61 6d 65 20 61 73 20   be the same as 
1e940 65 76 65 72 79 20 6f 74 68 65 72 20 52 65 6f 70  every other Reop
1e950 65 6e 49 64 78 20 6f 72 20 4f 70 65 6e 52 65 61  enIdx or OpenRea
1e960 64 20 66 6f 72 20 74 68 65 20 73 61 6d 65 20 63  d for the same c
1e970 75 72 73 6f 72 0a 2a 2a 20 6e 75 6d 62 65 72 2e  ursor.** number.
1e980 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 50  .**.** Allowed P
1e990 35 20 62 69 74 73 3a 0a 2a 2a 20 3c 75 6c 3e 0a  5 bits:.** <ul>.
1e9a0 2a 2a 20 3c 6c 69 3e 20 20 3c 62 3e 30 78 30 32  ** <li>  <b>0x02
1e9b0 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 3c 2f   OPFLAG_SEEKEQ</
1e9c0 62 3e 3a 20 54 68 69 73 20 63 75 72 73 6f 72 20  b>: This cursor 
1e9d0 77 69 6c 6c 20 6f 6e 6c 79 20 62 65 20 75 73 65  will only be use
1e9e0 64 20 66 6f 72 0a 2a 2a 20 20 20 20 20 20 20 65  d for.**       e
1e9f0 71 75 61 6c 69 74 79 20 6c 6f 6f 6b 75 70 73 20  quality lookups 
1ea00 28 69 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20  (implemented as 
1ea10 61 20 70 61 69 72 20 6f 66 20 6f 70 63 6f 64 65  a pair of opcode
1ea20 73 20 4f 50 5f 53 65 65 6b 47 45 2f 4f 50 5f 49  s OP_SeekGE/OP_I
1ea30 64 78 47 54 0a 2a 2a 20 20 20 20 20 20 20 6f 66  dxGT.**       of
1ea40 20 4f 50 5f 53 65 65 6b 4c 45 2f 4f 50 5f 49 64   OP_SeekLE/OP_Id
1ea50 78 47 54 29 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a  xGT).** </ul>.**
1ea60 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4f 50  .** See also: OP
1ea70 5f 4f 70 65 6e 52 65 61 64 2c 20 4f 50 5f 4f 70  _OpenRead, OP_Op
1ea80 65 6e 57 72 69 74 65 0a 2a 2f 0a 2f 2a 20 4f 70  enWrite.*/./* Op
1ea90 63 6f 64 65 3a 20 4f 70 65 6e 57 72 69 74 65 20  code: OpenWrite 
1eaa0 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
1eab0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74  * Synopsis: root
1eac0 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a  =P2 iDb=P3.**.**
1ead0 20 4f 70 65 6e 20 61 20 72 65 61 64 2f 77 72 69   Open a read/wri
1eae0 74 65 20 63 75 72 73 6f 72 20 6e 61 6d 65 64 20  te cursor named 
1eaf0 50 31 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20  P1 on the table 
1eb00 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72  or index whose r
1eb10 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 69 73 20 50  oot.** page is P
1eb20 32 20 28 6f 72 20 77 68 6f 73 65 20 72 6f 6f 74  2 (or whose root
1eb30 20 70 61 67 65 20 69 73 20 68 65 6c 64 20 69 6e   page is held in
1eb40 20 72 65 67 69 73 74 65 72 20 50 32 20 69 66 20   register P2 if 
1eb50 74 68 65 0a 2a 2a 20 4f 50 46 4c 41 47 5f 50 32  the.** OPFLAG_P2
1eb60 49 53 52 45 47 20 62 69 74 20 69 73 20 73 65 74  ISREG bit is set
1eb70 20 69 6e 20 50 35 20 2d 20 73 65 65 20 62 65 6c   in P5 - see bel
1eb80 6f 77 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  ow)..**.** The P
1eb90 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65  4 value may be e
1eba0 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72  ither an integer
1ebb0 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61   (P4_INT32) or a
1ebc0 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61   pointer to.** a
1ebd0 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75   KeyInfo structu
1ebe0 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e  re (P4_KEYINFO).
1ebf0 20 49 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e   If it is a poin
1ec00 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f  ter to a KeyInfo
1ec10 20 0a 2a 2a 20 6f 62 6a 65 63 74 2c 20 74 68 65   .** object, the
1ec20 6e 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70  n table being op
1ec30 65 6e 65 64 20 6d 75 73 74 20 62 65 20 61 6e 20  ened must be an 
1ec40 5b 69 6e 64 65 78 20 62 2d 74 72 65 65 5d 20 77  [index b-tree] w
1ec50 68 65 72 65 20 74 68 65 0a 2a 2a 20 4b 65 79 49  here the.** KeyI
1ec60 6e 66 6f 20 6f 62 6a 65 63 74 20 64 65 66 69 6e  nfo object defin
1ec70 65 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61  es the content a
1ec80 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a  nd collating .**
1ec90 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68 61   sequence of tha
1eca0 74 20 69 6e 64 65 78 20 62 2d 74 72 65 65 2e 20  t index b-tree. 
1ecb0 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 34  Otherwise, if P4
1ecc0 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a   is an integer .
1ecd0 2a 2a 20 76 61 6c 75 65 2c 20 74 68 65 6e 20 74  ** value, then t
1ece0 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f  he table being o
1ecf0 70 65 6e 65 64 20 6d 75 73 74 20 62 65 20 61 20  pened must be a 
1ed00 5b 74 61 62 6c 65 20 62 2d 74 72 65 65 5d 20 77  [table b-tree] w
1ed10 69 74 68 20 61 0a 2a 2a 20 6e 75 6d 62 65 72 20  ith a.** number 
1ed20 6f 66 20 63 6f 6c 75 6d 6e 73 20 6e 6f 20 6c 65  of columns no le
1ed30 73 73 20 74 68 61 6e 20 74 68 65 20 76 61 6c 75  ss than the valu
1ed40 65 20 6f 66 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 41  e of P4..**.** A
1ed50 6c 6c 6f 77 65 64 20 50 35 20 62 69 74 73 3a 0a  llowed P5 bits:.
1ed60 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69 3e 20  ** <ul>.** <li> 
1ed70 20 3c 62 3e 30 78 30 32 20 4f 50 46 4c 41 47 5f   <b>0x02 OPFLAG_
1ed80 53 45 45 4b 45 51 3c 2f 62 3e 3a 20 54 68 69 73  SEEKEQ</b>: This
1ed90 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 6f 6e 6c   cursor will onl
1eda0 79 20 62 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a  y be used for.**
1edb0 20 20 20 20 20 20 20 65 71 75 61 6c 69 74 79 20         equality 
1edc0 6c 6f 6f 6b 75 70 73 20 28 69 6d 70 6c 65 6d 65  lookups (impleme
1edd0 6e 74 65 64 20 61 73 20 61 20 70 61 69 72 20 6f  nted as a pair o
1ede0 66 20 6f 70 63 6f 64 65 73 20 4f 50 5f 53 65 65  f opcodes OP_See
1edf0 6b 47 45 2f 4f 50 5f 49 64 78 47 54 0a 2a 2a 20  kGE/OP_IdxGT.** 
1ee00 20 20 20 20 20 20 6f 66 20 4f 50 5f 53 65 65 6b        of OP_Seek
1ee10 4c 45 2f 4f 50 5f 49 64 78 47 54 29 0a 2a 2a 20  LE/OP_IdxGT).** 
1ee20 3c 6c 69 3e 20 20 3c 62 3e 30 78 30 38 20 4f 50  <li>  <b>0x08 OP
1ee30 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 3c 2f  FLAG_FORDELETE</
1ee40 62 3e 3a 20 54 68 69 73 20 63 75 72 73 6f 72 20  b>: This cursor 
1ee50 69 73 20 75 73 65 64 20 6f 6e 6c 79 20 74 6f 20  is used only to 
1ee60 73 65 65 6b 0a 2a 2a 20 20 20 20 20 20 20 61 6e  seek.**       an
1ee70 64 20 73 75 62 73 65 71 75 65 6e 74 6c 79 20 64  d subsequently d
1ee80 65 6c 65 74 65 20 65 6e 74 72 69 65 73 20 69 6e  elete entries in
1ee90 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e   an index btree.
1eea0 20 20 54 68 69 73 20 69 73 20 61 0a 2a 2a 20 20    This is a.**  
1eeb0 20 20 20 20 20 68 69 6e 74 20 74 6f 20 74 68 65       hint to the
1eec0 20 73 74 6f 72 61 67 65 20 65 6e 67 69 6e 65 20   storage engine 
1eed0 74 68 61 74 20 74 68 65 20 73 74 6f 72 61 67 65  that the storage
1eee0 20 65 6e 67 69 6e 65 20 69 73 20 61 6c 6c 6f 77   engine is allow
1eef0 65 64 20 74 6f 0a 2a 2a 20 20 20 20 20 20 20 69  ed to.**       i
1ef00 67 6e 6f 72 65 2e 20 20 54 68 65 20 68 69 6e 74  gnore.  The hint
1ef10 20 69 73 20 6e 6f 74 20 75 73 65 64 20 62 79 20   is not used by 
1ef20 74 68 65 20 6f 66 66 69 63 69 61 6c 20 53 51 4c  the official SQL
1ef30 69 74 65 20 62 2a 74 72 65 65 20 73 74 6f 72 61  ite b*tree stora
1ef40 67 65 0a 2a 2a 20 20 20 20 20 20 20 65 6e 67 69  ge.**       engi
1ef50 6e 65 2c 20 62 75 74 20 69 73 20 75 73 65 64 20  ne, but is used 
1ef60 62 79 20 43 4f 4d 44 42 32 2e 0a 2a 2a 20 3c 6c  by COMDB2..** <l
1ef70 69 3e 20 20 3c 62 3e 30 78 31 30 20 4f 50 46 4c  i>  <b>0x10 OPFL
1ef80 41 47 5f 50 32 49 53 52 45 47 3c 2f 62 3e 3a 20  AG_P2ISREG</b>: 
1ef90 55 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  Use the content 
1efa0 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  of register P2.*
1efb0 2a 20 20 20 20 20 20 20 61 73 20 74 68 65 20 72  *       as the r
1efc0 6f 6f 74 20 70 61 67 65 2c 20 6e 6f 74 20 74 68  oot page, not th
1efd0 65 20 76 61 6c 75 65 20 6f 66 20 50 32 20 69 74  e value of P2 it
1efe0 73 65 6c 66 2e 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a  self..** </ul>.*
1eff0 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
1f000 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6c 69 6b 65  ction works like
1f010 20 4f 70 65 6e 52 65 61 64 20 65 78 63 65 70 74   OpenRead except
1f020 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73 20 74   that it opens t
1f030 68 65 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20  he cursor.** in 
1f040 72 65 61 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e  read/write mode.
1f050 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1f060 20 4f 50 5f 4f 70 65 6e 52 65 61 64 2c 20 4f 50   OP_OpenRead, OP
1f070 5f 52 65 6f 70 65 6e 49 64 78 0a 2a 2f 0a 63 61  _ReopenIdx.*/.ca
1f080 73 65 20 4f 50 5f 52 65 6f 70 65 6e 49 64 78 3a  se OP_ReopenIdx:
1f090 20 7b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b   {.  int nField;
1f0a0 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79  .  KeyInfo *pKey
1f0b0 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 70 32 3b 0a  Info;.  int p2;.
1f0c0 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74    int iDb;.  int
1f0d0 20 77 72 46 6c 61 67 3b 0a 20 20 42 74 72 65 65   wrFlag;.  Btree
1f0e0 20 2a 70 58 3b 0a 20 20 56 64 62 65 43 75 72 73   *pX;.  VdbeCurs
1f0f0 6f 72 20 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a  or *pCur;.  Db *
1f100 70 44 62 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  pDb;..  assert( 
1f110 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f  pOp->p5==0 || pO
1f120 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f 53 45  p->p5==OPFLAG_SE
1f130 45 4b 45 51 20 29 3b 0a 20 20 61 73 73 65 72 74  EKEQ );.  assert
1f140 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
1f150 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 70  4_KEYINFO );.  p
1f160 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  Cur = p->apCsr[p
1f170 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70  Op->p1];.  if( p
1f180 43 75 72 20 26 26 20 70 43 75 72 2d 3e 70 67 6e  Cur && pCur->pgn
1f190 6f 52 6f 6f 74 3d 3d 28 75 33 32 29 70 4f 70 2d  oRoot==(u32)pOp-
1f1a0 3e 70 32 20 29 7b 0a 20 20 20 20 61 73 73 65 72  >p2 ){.    asser
1f1b0 74 28 20 70 43 75 72 2d 3e 69 44 62 3d 3d 70 4f  t( pCur->iDb==pO
1f1c0 70 2d 3e 70 33 20 29 3b 20 20 20 20 20 20 2f 2a  p->p3 );      /*
1f1d0 20 47 75 61 72 61 6e 74 65 65 64 20 62 79 20 74   Guaranteed by t
1f1e0 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f  he code generato
1f1f0 72 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6f 70  r */.    goto op
1f200 65 6e 5f 63 75 72 73 6f 72 5f 73 65 74 5f 68 69  en_cursor_set_hi
1f210 6e 74 73 3b 0a 20 20 7d 0a 20 20 2f 2a 20 49 66  nts;.  }.  /* If
1f220 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 6e   the cursor is n
1f230 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65  ot currently ope
1f240 6e 20 6f 72 20 69 73 20 6f 70 65 6e 20 6f 6e 20  n or is open on 
1f250 61 20 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a  a different.  **
1f260 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 66 61 6c   index, then fal
1f270 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f  l through into O
1f280 50 5f 4f 70 65 6e 52 65 61 64 20 74 6f 20 66 6f  P_OpenRead to fo
1f290 72 63 65 20 61 20 72 65 6f 70 65 6e 20 2a 2f 0a  rce a reopen */.
1f2a0 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52 65 61 64  case OP_OpenRead
1f2b0 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 57 72  :.case OP_OpenWr
1f2c0 69 74 65 3a 0a 0a 20 20 61 73 73 65 72 74 28 20  ite:..  assert( 
1f2d0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
1f2e0 4f 70 65 6e 57 72 69 74 65 20 7c 7c 20 70 4f 70  OpenWrite || pOp
1f2f0 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  ->p5==0 || pOp->
1f300 70 35 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45  p5==OPFLAG_SEEKE
1f310 51 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Q );.  assert( p
1f320 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20  ->bIsReader );. 
1f330 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
1f340 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 52 65 61  code==OP_OpenRea
1f350 64 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  d || pOp->opcode
1f360 3d 3d 4f 50 5f 52 65 6f 70 65 6e 49 64 78 0a 20  ==OP_ReopenIdx. 
1f370 20 20 20 20 20 20 20 20 20 7c 7c 20 70 2d 3e 72           || p->r
1f380 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20  eadOnly==0 );.. 
1f390 20 69 66 28 20 70 2d 3e 65 78 70 69 72 65 64 3d   if( p->expired=
1f3a0 3d 31 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  =1 ){.    rc = S
1f3b0 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c  QLITE_ABORT_ROLL
1f3c0 42 41 43 4b 3b 0a 20 20 20 20 67 6f 74 6f 20 61  BACK;.    goto a
1f3d0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1f3e0 72 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64  r;.  }..  nField
1f3f0 20 3d 20 30 3b 0a 20 20 70 4b 65 79 49 6e 66 6f   = 0;.  pKeyInfo
1f400 20 3d 20 30 3b 0a 20 20 70 32 20 3d 20 70 4f 70   = 0;.  p2 = pOp
1f410 2d 3e 70 32 3b 0a 20 20 69 44 62 20 3d 20 70 4f  ->p2;.  iDb = pO
1f420 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28  p->p3;.  assert(
1f430 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64   iDb>=0 && iDb<d
1f440 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
1f450 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
1f460 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62  ->btreeMask, iDb
1f470 29 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62  ) );.  pDb = &db
1f480 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 20 20 70 58  ->aDb[iDb];.  pX
1f490 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 61   = pDb->pBt;.  a
1f4a0 73 73 65 72 74 28 20 70 58 21 3d 30 20 29 3b 0a  ssert( pX!=0 );.
1f4b0 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
1f4c0 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20  e==OP_OpenWrite 
1f4d0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 4f  ){.    assert( O
1f4e0 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 3d  PFLAG_FORDELETE=
1f4f0 3d 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54 45  =BTREE_FORDELETE
1f500 20 29 3b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d   );.    wrFlag =
1f510 20 42 54 52 45 45 5f 57 52 43 53 52 20 7c 20 28   BTREE_WRCSR | (
1f520 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
1f530 5f 46 4f 52 44 45 4c 45 54 45 29 3b 0a 20 20 20  _FORDELETE);.   
1f540 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
1f550 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28  SchemaMutexHeld(
1f560 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20  db, iDb, 0) );. 
1f570 20 20 20 69 66 28 20 70 44 62 2d 3e 70 53 63 68     if( pDb->pSch
1f580 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74  ema->file_format
1f590 20 3c 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69   < p->minWriteFi
1f5a0 6c 65 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20  leFormat ){.    
1f5b0 20 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c    p->minWriteFil
1f5c0 65 46 6f 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70  eFormat = pDb->p
1f5d0 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72  Schema->file_for
1f5e0 6d 61 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  mat;.    }.  }el
1f5f0 73 65 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d  se{.    wrFlag =
1f600 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f   0;.  }.  if( pO
1f610 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50  p->p5 & OPFLAG_P
1f620 32 49 53 52 45 47 20 29 7b 0a 20 20 20 20 61 73  2ISREG ){.    as
1f630 73 65 72 74 28 20 70 32 3e 30 20 29 3b 0a 20 20  sert( p2>0 );.  
1f640 20 20 61 73 73 65 72 74 28 20 70 32 3c 3d 28 70    assert( p2<=(p
1f650 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
1f660 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 61 73  ursor) );.    as
1f670 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
1f680 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20  e==OP_OpenWrite 
1f690 29 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20 26 61  );.    pIn2 = &a
1f6a0 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 61 73 73  Mem[p2];.    ass
1f6b0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
1f6c0 70 49 6e 32 29 20 29 3b 0a 20 20 20 20 61 73 73  pIn2) );.    ass
1f6d0 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67  ert( (pIn2->flag
1f6e0 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  s & MEM_Int)!=0 
1f6f0 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
1f700 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
1f710 70 49 6e 32 29 3b 0a 20 20 20 20 70 32 20 3d 20  pIn2);.    p2 = 
1f720 28 69 6e 74 29 70 49 6e 32 2d 3e 75 2e 69 3b 0a  (int)pIn2->u.i;.
1f730 20 20 20 20 2f 2a 20 54 68 65 20 70 32 20 76 61      /* The p2 va
1f740 6c 75 65 20 61 6c 77 61 79 73 20 63 6f 6d 65 73  lue always comes
1f750 20 66 72 6f 6d 20 61 20 70 72 69 6f 72 20 4f 50   from a prior OP
1f760 5f 43 72 65 61 74 65 42 74 72 65 65 20 6f 70 63  _CreateBtree opc
1f770 6f 64 65 20 61 6e 64 0a 20 20 20 20 2a 2a 20 74  ode and.    ** t
1f780 68 61 74 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20  hat opcode will 
1f790 61 6c 77 61 79 73 20 73 65 74 20 74 68 65 20 70  always set the p
1f7a0 32 20 76 61 6c 75 65 20 74 6f 20 32 20 6f 72 20  2 value to 2 or 
1f7b0 6d 6f 72 65 20 6f 72 20 65 6c 73 65 20 66 61 69  more or else fai
1f7c0 6c 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74 68 65  l..    ** If the
1f7d0 72 65 20 77 65 72 65 20 61 20 66 61 69 6c 75 72  re were a failur
1f7e0 65 2c 20 74 68 65 20 70 72 65 70 61 72 65 64 20  e, the prepared 
1f7f0 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20  statement would 
1f800 68 61 76 65 20 68 61 6c 74 65 64 0a 20 20 20 20  have halted.    
1f810 2a 2a 20 62 65 66 6f 72 65 20 72 65 61 63 68 69  ** before reachi
1f820 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  ng this instruct
1f830 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 73 73 65  ion. */.    asse
1f840 72 74 28 20 70 32 3e 3d 32 20 29 3b 0a 20 20 7d  rt( p2>=2 );.  }
1f850 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79  .  if( pOp->p4ty
1f860 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29  pe==P4_KEYINFO )
1f870 7b 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f 20 3d  {.    pKeyInfo =
1f880 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66   pOp->p4.pKeyInf
1f890 6f 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  o;.    assert( p
1f8a0 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e  KeyInfo->enc==EN
1f8b0 43 28 64 62 29 20 29 3b 0a 20 20 20 20 61 73 73  C(db) );.    ass
1f8c0 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 64  ert( pKeyInfo->d
1f8d0 62 3d 3d 64 62 20 29 3b 0a 20 20 20 20 6e 46 69  b==db );.    nFi
1f8e0 65 6c 64 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e  eld = pKeyInfo->
1f8f0 6e 41 6c 6c 46 69 65 6c 64 3b 0a 20 20 7d 65 6c  nAllField;.  }el
1f900 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79  se if( pOp->p4ty
1f910 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 7b 0a  pe==P4_INT32 ){.
1f920 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70      nField = pOp
1f930 2d 3e 70 34 2e 69 3b 0a 20 20 7d 0a 20 20 61 73  ->p4.i;.  }.  as
1f940 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1f950 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46   );.  assert( nF
1f960 69 65 6c 64 3e 3d 30 20 29 3b 0a 20 20 74 65 73  ield>=0 );.  tes
1f970 74 63 61 73 65 28 20 6e 46 69 65 6c 64 3d 3d 30  tcase( nField==0
1f980 20 29 3b 20 20 2f 2a 20 54 61 62 6c 65 20 77 69   );  /* Table wi
1f990 74 68 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  th INTEGER PRIMA
1f9a0 52 59 20 4b 45 59 20 61 6e 64 20 6e 6f 74 68 69  RY KEY and nothi
1f9b0 6e 67 20 65 6c 73 65 20 2a 2f 0a 20 20 70 43 75  ng else */.  pCu
1f9c0 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73  r = allocateCurs
1f9d0 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 6e  or(p, pOp->p1, n
1f9e0 46 69 65 6c 64 2c 20 69 44 62 2c 20 43 55 52 54  Field, iDb, CURT
1f9f0 59 50 45 5f 42 54 52 45 45 29 3b 0a 20 20 69 66  YPE_BTREE);.  if
1fa00 28 20 70 43 75 72 3d 3d 30 20 29 20 67 6f 74 6f  ( pCur==0 ) goto
1fa10 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 75 72 2d   no_mem;.  pCur-
1fa20 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20  >nullRow = 1;.  
1fa30 70 43 75 72 2d 3e 69 73 4f 72 64 65 72 65 64 20  pCur->isOrdered 
1fa40 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e 70 67 6e  = 1;.  pCur->pgn
1fa50 6f 52 6f 6f 74 20 3d 20 70 32 3b 0a 23 69 66 64  oRoot = p2;.#ifd
1fa60 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
1fa70 20 20 70 43 75 72 2d 3e 77 72 46 6c 61 67 20 3d    pCur->wrFlag =
1fa80 20 77 72 46 6c 61 67 3b 0a 23 65 6e 64 69 66 0a   wrFlag;.#endif.
1fa90 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1faa0 72 65 65 43 75 72 73 6f 72 28 70 58 2c 20 70 32  reeCursor(pX, p2
1fab0 2c 20 77 72 46 6c 61 67 2c 20 70 4b 65 79 49 6e  , wrFlag, pKeyIn
1fac0 66 6f 2c 20 70 43 75 72 2d 3e 75 63 2e 70 43 75  fo, pCur->uc.pCu
1fad0 72 73 6f 72 29 3b 0a 20 20 70 43 75 72 2d 3e 70  rsor);.  pCur->p
1fae0 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e  KeyInfo = pKeyIn
1faf0 66 6f 3b 0a 20 20 2f 2a 20 53 65 74 20 74 68 65  fo;.  /* Set the
1fb00 20 56 64 62 65 43 75 72 73 6f 72 2e 69 73 54 61   VdbeCursor.isTa
1fb10 62 6c 65 20 76 61 72 69 61 62 6c 65 2e 20 50 72  ble variable. Pr
1fb20 65 76 69 6f 75 73 20 76 65 72 73 69 6f 6e 73 20  evious versions 
1fb30 6f 66 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20 75  of.  ** SQLite u
1fb40 73 65 64 20 74 6f 20 63 68 65 63 6b 20 69 66 20  sed to check if 
1fb50 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 66 6c  the root-page fl
1fb60 61 67 73 20 77 65 72 65 20 73 61 6e 65 20 61 74  ags were sane at
1fb70 20 74 68 69 73 20 70 6f 69 6e 74 0a 20 20 2a 2a   this point.  **
1fb80 20 61 6e 64 20 72 65 70 6f 72 74 20 64 61 74 61   and report data
1fb90 62 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 20  base corruption 
1fba0 69 66 20 74 68 65 79 20 77 65 72 65 20 6e 6f 74  if they were not
1fbb0 2c 20 62 75 74 20 74 68 69 73 20 63 68 65 63 6b  , but this check
1fbc0 20 68 61 73 0a 20 20 2a 2a 20 73 69 6e 63 65 20   has.  ** since 
1fbd0 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20 62  moved into the b
1fbe0 74 72 65 65 20 6c 61 79 65 72 2e 20 20 2a 2f 20  tree layer.  */ 
1fbf0 20 0a 20 20 70 43 75 72 2d 3e 69 73 54 61 62 6c   .  pCur->isTabl
1fc00 65 20 3d 20 70 4f 70 2d 3e 70 34 74 79 70 65 21  e = pOp->p4type!
1fc10 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a 0a 6f 70  =P4_KEYINFO;..op
1fc20 65 6e 5f 63 75 72 73 6f 72 5f 73 65 74 5f 68 69  en_cursor_set_hi
1fc30 6e 74 73 3a 0a 20 20 61 73 73 65 72 74 28 20 4f  nts:.  assert( O
1fc40 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 3d 3d 42  PFLAG_BULKCSR==B
1fc50 54 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 20 29 3b  TREE_BULKLOAD );
1fc60 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41  .  assert( OPFLA
1fc70 47 5f 53 45 45 4b 45 51 3d 3d 42 54 52 45 45 5f  G_SEEKEQ==BTREE_
1fc80 53 45 45 4b 5f 45 51 20 29 3b 0a 20 20 74 65 73  SEEK_EQ );.  tes
1fc90 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 20 26  tcase( pOp->p5 &
1fca0 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20   OPFLAG_BULKCSR 
1fcb0 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
1fcc0 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48  _ENABLE_CURSOR_H
1fcd0 49 4e 54 53 0a 20 20 74 65 73 74 63 61 73 65 28  INTS.  testcase(
1fce0 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41   pOp->p2 & OPFLA
1fcf0 47 5f 53 45 45 4b 45 51 20 29 3b 0a 23 65 6e 64  G_SEEKEQ );.#end
1fd00 69 66 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65  if.  sqlite3Btre
1fd10 65 43 75 72 73 6f 72 48 69 6e 74 46 6c 61 67 73  eCursorHintFlags
1fd20 28 70 43 75 72 2d 3e 75 63 2e 70 43 75 72 73 6f  (pCur->uc.pCurso
1fd30 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r,.             
1fd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd50 20 20 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50    (pOp->p5 & (OP
1fd60 46 4c 41 47 5f 42 55 4c 4b 43 53 52 7c 4f 50 46  FLAG_BULKCSR|OPF
1fd70 4c 41 47 5f 53 45 45 4b 45 51 29 29 29 3b 0a 20  LAG_SEEKEQ)));. 
1fd80 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
1fd90 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1fda0 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  r;.  break;.}../
1fdb0 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 44 75  * Opcode: OpenDu
1fdc0 70 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  p P1 P2 * * *.**
1fdd0 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63  .** Open a new c
1fde0 75 72 73 6f 72 20 50 31 20 74 68 61 74 20 70 6f  ursor P1 that po
1fdf0 69 6e 74 73 20 74 6f 20 74 68 65 20 73 61 6d 65  ints to the same
1fe00 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65   ephemeral table
1fe10 20 61 73 0a 2a 2a 20 63 75 72 73 6f 72 20 50 32   as.** cursor P2
1fe20 2e 20 20 54 68 65 20 50 32 20 63 75 72 73 6f 72  .  The P2 cursor
1fe30 20 6d 75 73 74 20 68 61 76 65 20 62 65 65 6e 20   must have been 
1fe40 6f 70 65 6e 65 64 20 62 79 20 61 20 70 72 69 6f  opened by a prio
1fe50 72 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  r OP_OpenEphemer
1fe60 61 6c 0a 2a 2a 20 6f 70 63 6f 64 65 2e 20 20 4f  al.** opcode.  O
1fe70 6e 6c 79 20 65 70 68 65 6d 65 72 61 6c 20 63 75  nly ephemeral cu
1fe80 72 73 6f 72 73 20 6d 61 79 20 62 65 20 64 75 70  rsors may be dup
1fe90 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 44  licated..**.** D
1fea0 75 70 6c 69 63 61 74 65 20 65 70 68 65 6d 65 72  uplicate ephemer
1feb0 61 6c 20 63 75 72 73 6f 72 73 20 61 72 65 20 75  al cursors are u
1fec0 73 65 64 20 66 6f 72 20 73 65 6c 66 2d 6a 6f 69  sed for self-joi
1fed0 6e 73 20 6f 66 20 6d 61 74 65 72 69 61 6c 69 7a  ns of materializ
1fee0 65 64 20 76 69 65 77 73 2e 0a 2a 2f 0a 63 61 73  ed views..*/.cas
1fef0 65 20 4f 50 5f 4f 70 65 6e 44 75 70 3a 20 7b 0a  e OP_OpenDup: {.
1ff00 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 4f    VdbeCursor *pO
1ff10 72 69 67 3b 20 20 20 20 2f 2a 20 54 68 65 20 6f  rig;    /* The o
1ff20 72 69 67 69 6e 61 6c 20 63 75 72 73 6f 72 20 74  riginal cursor t
1ff30 6f 20 62 65 20 64 75 70 6c 69 63 61 74 65 64 20  o be duplicated 
1ff40 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
1ff50 2a 70 43 78 3b 20 20 20 20 20 20 2f 2a 20 54 68  *pCx;      /* Th
1ff60 65 20 6e 65 77 20 63 75 72 73 6f 72 20 2a 2f 0a  e new cursor */.
1ff70 0a 20 20 70 4f 72 69 67 20 3d 20 70 2d 3e 61 70  .  pOrig = p->ap
1ff80 43 73 72 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Csr[pOp->p2];.  
1ff90 61 73 73 65 72 74 28 20 70 4f 72 69 67 2d 3e 70  assert( pOrig->p
1ffa0 42 74 78 21 3d 30 20 29 3b 20 20 2f 2a 20 4f 6e  Btx!=0 );  /* On
1ffb0 6c 79 20 65 70 68 65 6d 65 72 61 6c 20 63 75 72  ly ephemeral cur
1ffc0 73 6f 72 73 20 63 61 6e 20 62 65 20 64 75 70 6c  sors can be dupl
1ffd0 69 63 61 74 65 64 20 2a 2f 0a 0a 20 20 70 43 78  icated */..  pCx
1ffe0 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f   = allocateCurso
1fff0 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  r(p, pOp->p1, pO
20000 72 69 67 2d 3e 6e 46 69 65 6c 64 2c 20 2d 31 2c  rig->nField, -1,
20010 20 43 55 52 54 59 50 45 5f 42 54 52 45 45 29 3b   CURTYPE_BTREE);
20020 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20  .  if( pCx==0 ) 
20030 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
20040 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  Cx->nullRow = 1;
20050 0a 20 20 70 43 78 2d 3e 69 73 45 70 68 65 6d 65  .  pCx->isEpheme
20060 72 61 6c 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e  ral = 1;.  pCx->
20070 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 72 69 67  pKeyInfo = pOrig
20080 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 70 43  ->pKeyInfo;.  pC
20090 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f 72  x->isTable = pOr
200a0 69 67 2d 3e 69 73 54 61 62 6c 65 3b 0a 20 20 70  ig->isTable;.  p
200b0 43 78 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d 20 70  Cx->pgnoRoot = p
200c0 4f 72 69 67 2d 3e 70 67 6e 6f 52 6f 6f 74 3b 0a  Orig->pgnoRoot;.
200d0 20 20 70 43 78 2d 3e 69 73 4f 72 64 65 72 65 64    pCx->isOrdered
200e0 20 3d 20 70 4f 72 69 67 2d 3e 69 73 4f 72 64 65   = pOrig->isOrde
200f0 72 65 64 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  red;.  rc = sqli
20100 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70  te3BtreeCursor(p
20110 4f 72 69 67 2d 3e 70 42 74 78 2c 20 70 43 78 2d  Orig->pBtx, pCx-
20120 3e 70 67 6e 6f 52 6f 6f 74 2c 20 42 54 52 45 45  >pgnoRoot, BTREE
20130 5f 57 52 43 53 52 2c 0a 20 20 20 20 20 20 20 20  _WRCSR,.        
20140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20150 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2c    pCx->pKeyInfo,
20160 20 70 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72   pCx->uc.pCursor
20170 29 3b 0a 20 20 2f 2a 20 54 68 65 20 73 71 6c 69  );.  /* The sqli
20180 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 29  te3BtreeCursor()
20190 20 72 6f 75 74 69 6e 65 20 63 61 6e 20 6f 6e 6c   routine can onl
201a0 79 20 66 61 69 6c 20 66 6f 72 20 74 68 65 20 66  y fail for the f
201b0 69 72 73 74 20 63 75 72 73 6f 72 0a 20 20 2a 2a  irst cursor.  **
201c0 20 6f 70 65 6e 65 64 20 66 6f 72 20 61 20 64 61   opened for a da
201d0 74 61 62 61 73 65 2e 20 20 53 69 6e 63 65 20 74  tabase.  Since t
201e0 68 65 72 65 20 69 73 20 61 6c 72 65 61 64 79 20  here is already 
201f0 61 6e 20 6f 70 65 6e 20 63 75 72 73 6f 72 20 77  an open cursor w
20200 68 65 6e 20 74 68 69 73 0a 20 20 2a 2a 20 6f 70  hen this.  ** op
20210 63 6f 64 65 20 69 73 20 72 75 6e 2c 20 74 68 65  code is run, the
20220 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
20230 73 6f 72 28 29 20 63 61 6e 6e 6f 74 20 66 61 69  sor() cannot fai
20240 6c 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 72  l */.  assert( r
20250 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a  c==SQLITE_OK );.
20260 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20    break;.}.../* 
20270 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 45 70 68 65  Opcode: OpenEphe
20280 6d 65 72 61 6c 20 50 31 20 50 32 20 2a 20 50 34  meral P1 P2 * P4
20290 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
202a0 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a   nColumn=P2.**.*
202b0 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72  * Open a new cur
202c0 73 6f 72 20 50 31 20 74 6f 20 61 20 74 72 61 6e  sor P1 to a tran
202d0 73 69 65 6e 74 20 74 61 62 6c 65 2e 0a 2a 2a 20  sient table..** 
202e0 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c  The cursor is al
202f0 77 61 79 73 20 6f 70 65 6e 65 64 20 72 65 61 64  ways opened read
20300 2f 77 72 69 74 65 20 65 76 65 6e 20 69 66 20 0a  /write even if .
20310 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ** the main data
20320 62 61 73 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c  base is read-onl
20330 79 2e 20 20 54 68 65 20 65 70 68 65 6d 65 72 61  y.  The ephemera
20340 6c 0a 2a 2a 20 74 61 62 6c 65 20 69 73 20 64 65  l.** table is de
20350 6c 65 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61  leted automatica
20360 6c 6c 79 20 77 68 65 6e 20 74 68 65 20 63 75 72  lly when the cur
20370 73 6f 72 20 69 73 20 63 6c 6f 73 65 64 2e 0a 2a  sor is closed..*
20380 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 75 72 73  *.** If the curs
20390 6f 72 20 50 31 20 69 73 20 61 6c 72 65 61 64 79  or P1 is already
203a0 20 6f 70 65 6e 65 64 20 6f 6e 20 61 6e 20 65 70   opened on an ep
203b0 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 2c 20 74  hemeral table, t
203c0 68 65 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 63  he table.** is c
203d0 6c 65 61 72 65 64 20 28 61 6c 6c 20 63 6f 6e 74  leared (all cont
203e0 65 6e 74 20 69 73 20 65 72 61 73 65 64 29 2e 0a  ent is erased)..
203f0 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20  **.** P2 is the 
20400 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
20410 73 20 69 6e 20 74 68 65 20 65 70 68 65 6d 65 72  s in the ephemer
20420 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65  al table..** The
20430 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 73 20 74   cursor points t
20440 6f 20 61 20 42 54 72 65 65 20 74 61 62 6c 65 20  o a BTree table 
20450 69 66 20 50 34 3d 3d 30 20 61 6e 64 20 74 6f 20  if P4==0 and to 
20460 61 20 42 54 72 65 65 20 69 6e 64 65 78 0a 2a 2a  a BTree index.**
20470 20 69 66 20 50 34 20 69 73 20 6e 6f 74 20 30 2e   if P4 is not 0.
20480 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e    If P4 is not N
20490 55 4c 4c 2c 20 69 74 20 70 6f 69 6e 74 73 20 74  ULL, it points t
204a0 6f 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75  o a KeyInfo stru
204b0 63 74 75 72 65 0a 2a 2a 20 74 68 61 74 20 64 65  cture.** that de
204c0 66 69 6e 65 73 20 74 68 65 20 66 6f 72 6d 61 74  fines the format
204d0 20 6f 66 20 6b 65 79 73 20 69 6e 20 74 68 65 20   of keys in the 
204e0 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  index..**.** The
204f0 20 50 35 20 70 61 72 61 6d 65 74 65 72 20 63 61   P5 parameter ca
20500 6e 20 62 65 20 61 20 6d 61 73 6b 20 6f 66 20 74  n be a mask of t
20510 68 65 20 42 54 52 45 45 5f 2a 20 66 6c 61 67 73  he BTREE_* flags
20520 20 64 65 66 69 6e 65 64 0a 2a 2a 20 69 6e 20 62   defined.** in b
20530 74 72 65 65 2e 68 2e 20 20 54 68 65 73 65 20 66  tree.h.  These f
20540 6c 61 67 73 20 63 6f 6e 74 72 6f 6c 20 61 73 70  lags control asp
20550 65 63 74 73 20 6f 66 20 74 68 65 20 6f 70 65 72  ects of the oper
20560 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20  ation of.** the 
20570 62 74 72 65 65 2e 20 20 54 68 65 20 42 54 52 45  btree.  The BTRE
20580 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 61  E_OMIT_JOURNAL a
20590 6e 64 20 42 54 52 45 45 5f 53 49 4e 47 4c 45 20  nd BTREE_SINGLE 
205a0 66 6c 61 67 73 20 61 72 65 0a 2a 2a 20 61 64 64  flags are.** add
205b0 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ed automatically
205c0 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
205d0 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78 20 50 31  OpenAutoindex P1
205e0 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
205f0 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d  nopsis: nColumn=
20600 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  P2.**.** This op
20610 63 6f 64 65 20 77 6f 72 6b 73 20 74 68 65 20 73  code works the s
20620 61 6d 65 20 61 73 20 4f 50 5f 4f 70 65 6e 45 70  ame as OP_OpenEp
20630 68 65 6d 65 72 61 6c 2e 20 20 49 74 20 68 61 73  hemeral.  It has
20640 20 61 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20   a.** different 
20650 6e 61 6d 65 20 74 6f 20 64 69 73 74 69 6e 67 75  name to distingu
20660 69 73 68 20 69 74 73 20 75 73 65 2e 20 20 54 61  ish its use.  Ta
20670 62 6c 65 73 20 63 72 65 61 74 65 64 20 75 73 69  bles created usi
20680 6e 67 0a 2a 2a 20 62 79 20 74 68 69 73 20 6f 70  ng.** by this op
20690 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65  code will be use
206a0 64 20 66 6f 72 20 61 75 74 6f 6d 61 74 69 63 61  d for automatica
206b0 6c 6c 79 20 63 72 65 61 74 65 64 20 74 72 61 6e  lly created tran
206c0 73 69 65 6e 74 0a 2a 2a 20 69 6e 64 69 63 65 73  sient.** indices
206d0 20 69 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f 0a 63 61   in joins..*/.ca
206e0 73 65 20 4f 50 5f 4f 70 65 6e 41 75 74 6f 69 6e  se OP_OpenAutoin
206f0 64 65 78 3a 20 0a 63 61 73 65 20 4f 50 5f 4f 70  dex: .case OP_Op
20700 65 6e 45 70 68 65 6d 65 72 61 6c 3a 20 7b 0a 20  enEphemeral: {. 
20710 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78   VdbeCursor *pCx
20720 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65  ;.  KeyInfo *pKe
20730 79 49 6e 66 6f 3b 0a 0a 20 20 73 74 61 74 69 63  yInfo;..  static
20740 20 63 6f 6e 73 74 20 69 6e 74 20 76 66 73 46 6c   const int vfsFl
20750 61 67 73 20 3d 20 0a 20 20 20 20 20 20 53 51 4c  ags = .      SQL
20760 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57 52 49  ITE_OPEN_READWRI
20770 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54  TE |.      SQLIT
20780 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20 7c 0a  E_OPEN_CREATE |.
20790 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
207a0 4e 5f 45 58 43 4c 55 53 49 56 45 20 7c 0a 20 20  N_EXCLUSIVE |.  
207b0 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
207c0 44 45 4c 45 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a  DELETEONCLOSE |.
207d0 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
207e0 4e 5f 54 52 41 4e 53 49 45 4e 54 5f 44 42 3b 0a  N_TRANSIENT_DB;.
207f0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
20800 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  1>=0 );.  assert
20810 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a  ( pOp->p2>=0 );.
20820 20 20 70 43 78 20 3d 20 70 2d 3e 61 70 43 73 72    pCx = p->apCsr
20830 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
20840 20 70 43 78 20 29 7b 0a 20 20 20 20 2f 2a 20 49   pCx ){.    /* I
20850 66 20 74 68 65 20 65 70 68 65 72 6d 65 72 61 6c  f the ephermeral
20860 20 74 61 62 6c 65 20 69 73 20 61 6c 72 65 61 64   table is alread
20870 79 20 6f 70 65 6e 2c 20 65 72 61 73 65 20 61 6c  y open, erase al
20880 6c 20 65 78 69 73 74 69 6e 67 20 63 6f 6e 74 65  l existing conte
20890 6e 74 0a 20 20 20 20 2a 2a 20 73 6f 20 74 68 61  nt.    ** so tha
208a0 74 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 65  t the table is e
208b0 6d 70 74 79 20 61 67 61 69 6e 2c 20 72 61 74 68  mpty again, rath
208c0 65 72 20 74 68 61 6e 20 63 72 65 61 74 69 6e 67  er than creating
208d0 20 61 20 6e 65 77 20 74 61 62 6c 65 2e 20 2a 2f   a new table. */
208e0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 78  .    assert( pCx
208f0 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 29 3b  ->isEphemeral );
20900 0a 20 20 20 20 70 43 78 2d 3e 73 65 71 43 6f 75  .    pCx->seqCou
20910 6e 74 20 3d 20 30 3b 0a 20 20 20 20 70 43 78 2d  nt = 0;.    pCx-
20920 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
20930 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20  ACHE_STALE;.    
20940 69 66 28 20 70 43 78 2d 3e 70 42 74 78 20 29 7b  if( pCx->pBtx ){
20950 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
20960 74 65 33 42 74 72 65 65 43 6c 65 61 72 54 61 62  te3BtreeClearTab
20970 6c 65 28 70 43 78 2d 3e 70 42 74 78 2c 20 70 43  le(pCx->pBtx, pC
20980 78 2d 3e 70 67 6e 6f 52 6f 6f 74 2c 20 30 29 3b  x->pgnoRoot, 0);
20990 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
209a0 20 20 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61      pCx = alloca
209b0 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
209c0 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31  >p1, pOp->p2, -1
209d0 2c 20 43 55 52 54 59 50 45 5f 42 54 52 45 45 29  , CURTYPE_BTREE)
209e0 3b 0a 20 20 20 20 69 66 28 20 70 43 78 3d 3d 30  ;.    if( pCx==0
209f0 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
20a00 20 20 20 20 70 43 78 2d 3e 69 73 45 70 68 65 6d      pCx->isEphem
20a10 65 72 61 6c 20 3d 20 31 3b 0a 20 20 20 20 72 63  eral = 1;.    rc
20a20 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4f   = sqlite3BtreeO
20a30 70 65 6e 28 64 62 2d 3e 70 56 66 73 2c 20 30 2c  pen(db->pVfs, 0,
20a40 20 64 62 2c 20 26 70 43 78 2d 3e 70 42 74 78 2c   db, &pCx->pBtx,
20a50 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
20a60 20 20 20 20 20 20 20 20 20 20 20 20 42 54 52 45              BTRE
20a70 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 7c  E_OMIT_JOURNAL |
20a80 20 42 54 52 45 45 5f 53 49 4e 47 4c 45 20 7c 20   BTREE_SINGLE | 
20a90 70 4f 70 2d 3e 70 35 2c 0a 20 20 20 20 20 20 20  pOp->p5,.       
20aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ab0 20 20 20 76 66 73 46 6c 61 67 73 29 3b 0a 20 20     vfsFlags);.  
20ac0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
20ad0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20  _OK ){.      rc 
20ae0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65  = sqlite3BtreeBe
20af0 67 69 6e 54 72 61 6e 73 28 70 43 78 2d 3e 70 42  ginTrans(pCx->pB
20b00 74 78 2c 20 31 2c 20 30 29 3b 0a 20 20 20 20 7d  tx, 1, 0);.    }
20b10 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  .    if( rc==SQL
20b20 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
20b30 2f 2a 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e  /* If a transien
20b40 74 20 69 6e 64 65 78 20 69 73 20 72 65 71 75 69  t index is requi
20b50 72 65 64 2c 20 63 72 65 61 74 65 20 69 74 20 62  red, create it b
20b60 79 20 63 61 6c 6c 69 6e 67 0a 20 20 20 20 20 20  y calling.      
20b70 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  ** sqlite3BtreeC
20b80 72 65 61 74 65 54 61 62 6c 65 28 29 20 77 69 74  reateTable() wit
20b90 68 20 74 68 65 20 42 54 52 45 45 5f 42 4c 4f 42  h the BTREE_BLOB
20ba0 4b 45 59 20 66 6c 61 67 20 62 65 66 6f 72 65 0a  KEY flag before.
20bb0 20 20 20 20 20 20 2a 2a 20 6f 70 65 6e 69 6e 67        ** opening
20bc0 20 69 74 2e 20 49 66 20 61 20 74 72 61 6e 73 69   it. If a transi
20bd0 65 6e 74 20 74 61 62 6c 65 20 69 73 20 72 65 71  ent table is req
20be0 75 69 72 65 64 2c 20 6a 75 73 74 20 75 73 65 20  uired, just use 
20bf0 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 61 75 74  the.      ** aut
20c00 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74  omatically creat
20c10 65 64 20 74 61 62 6c 65 20 77 69 74 68 20 72 6f  ed table with ro
20c20 6f 74 2d 70 61 67 65 20 31 20 28 61 6e 20 42 4c  ot-page 1 (an BL
20c30 4f 42 5f 49 4e 54 4b 45 59 20 74 61 62 6c 65 29  OB_INTKEY table)
20c40 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
20c50 20 69 66 28 20 28 70 43 78 2d 3e 70 4b 65 79 49   if( (pCx->pKeyI
20c60 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 20 3d  nfo = pKeyInfo =
20c70 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66   pOp->p4.pKeyInf
20c80 6f 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  o)!=0 ){.       
20c90 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
20ca0 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f  type==P4_KEYINFO
20cb0 20 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   );.        rc =
20cc0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65   sqlite3BtreeCre
20cd0 61 74 65 54 61 62 6c 65 28 70 43 78 2d 3e 70 42  ateTable(pCx->pB
20ce0 74 78 2c 20 28 69 6e 74 2a 29 26 70 43 78 2d 3e  tx, (int*)&pCx->
20cf0 70 67 6e 6f 52 6f 6f 74 2c 0a 20 20 20 20 20 20  pgnoRoot,.      
20d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42                 B
20d20 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 7c 20 70  TREE_BLOBKEY | p
20d30 4f 70 2d 3e 70 35 29 3b 20 0a 20 20 20 20 20 20  Op->p5); .      
20d40 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
20d50 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20  _OK ){.         
20d60 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e 70 67   assert( pCx->pg
20d70 6e 6f 52 6f 6f 74 3d 3d 4d 41 53 54 45 52 5f 52  noRoot==MASTER_R
20d80 4f 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20 20 20  OOT+1 );.       
20d90 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49     assert( pKeyI
20da0 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20  nfo->db==db );. 
20db0 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28           assert(
20dc0 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d   pKeyInfo->enc==
20dd0 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 20 20 20  ENC(db) );.     
20de0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
20df0 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 43 78  3BtreeCursor(pCx
20e00 2d 3e 70 42 74 78 2c 20 70 43 78 2d 3e 70 67 6e  ->pBtx, pCx->pgn
20e10 6f 52 6f 6f 74 2c 20 42 54 52 45 45 5f 57 52 43  oRoot, BTREE_WRC
20e20 53 52 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  SR,.            
20e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e40 20 20 20 20 20 20 70 4b 65 79 49 6e 66 6f 2c 20        pKeyInfo, 
20e50 70 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29  pCx->uc.pCursor)
20e60 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
20e70 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65      pCx->isTable
20e80 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73   = 0;.      }els
20e90 65 7b 0a 20 20 20 20 20 20 20 20 70 43 78 2d 3e  e{.        pCx->
20ea0 70 67 6e 6f 52 6f 6f 74 20 3d 20 4d 41 53 54 45  pgnoRoot = MASTE
20eb0 52 5f 52 4f 4f 54 3b 0a 20 20 20 20 20 20 20 20  R_ROOT;.        
20ec0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
20ed0 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74  eCursor(pCx->pBt
20ee0 78 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20  x, MASTER_ROOT, 
20ef0 42 54 52 45 45 5f 57 52 43 53 52 2c 0a 20 20 20  BTREE_WRCSR,.   
20f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f10 20 20 20 20 20 20 20 20 20 20 20 20 20 30 2c 20               0, 
20f20 70 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29  pCx->uc.pCursor)
20f30 3b 0a 20 20 20 20 20 20 20 20 70 43 78 2d 3e 69  ;.        pCx->i
20f40 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 20 20  sTable = 1;.    
20f50 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 43    }.    }.    pC
20f60 78 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 28  x->isOrdered = (
20f70 70 4f 70 2d 3e 70 35 21 3d 42 54 52 45 45 5f 55  pOp->p5!=BTREE_U
20f80 4e 4f 52 44 45 52 45 44 29 3b 0a 20 20 7d 0a 20  NORDERED);.  }. 
20f90 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
20fa0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
20fb0 72 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f  r;.  pCx->nullRo
20fc0 77 20 3d 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a  w = 1;.  break;.
20fd0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  }../* Opcode: So
20fe0 72 74 65 72 4f 70 65 6e 20 50 31 20 50 32 20 50  rterOpen P1 P2 P
20ff0 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69  3 P4 *.**.** Thi
21000 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6c  s opcode works l
21010 69 6b 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d  ike OP_OpenEphem
21020 65 72 61 6c 20 65 78 63 65 70 74 20 74 68 61 74  eral except that
21030 20 69 74 20 6f 70 65 6e 73 0a 2a 2a 20 61 20 74   it opens.** a t
21040 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 74  ransient index t
21050 68 61 74 20 69 73 20 73 70 65 63 69 66 69 63 61  hat is specifica
21060 6c 6c 79 20 64 65 73 69 67 6e 65 64 20 74 6f 20  lly designed to 
21070 73 6f 72 74 20 6c 61 72 67 65 0a 2a 2a 20 74 61  sort large.** ta
21080 62 6c 65 73 20 75 73 69 6e 67 20 61 6e 20 65 78  bles using an ex
21090 74 65 72 6e 61 6c 20 6d 65 72 67 65 2d 73 6f 72  ternal merge-sor
210a0 74 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 2a 2a 0a  t algorithm..**.
210b0 2a 2a 20 49 66 20 61 72 67 75 6d 65 6e 74 20 50  ** If argument P
210c0 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  3 is non-zero, t
210d0 68 65 6e 20 69 74 20 69 6e 64 69 63 61 74 65 73  hen it indicates
210e0 20 74 68 61 74 20 74 68 65 20 73 6f 72 74 65 72   that the sorter
210f0 20 6d 61 79 0a 2a 2a 20 61 73 73 75 6d 65 20 74   may.** assume t
21100 68 61 74 20 61 20 73 74 61 62 6c 65 20 73 6f 72  hat a stable sor
21110 74 20 63 6f 6e 73 69 64 65 72 69 6e 67 20 74 68  t considering th
21120 65 20 66 69 72 73 74 20 50 33 20 66 69 65 6c 64  e first P3 field
21130 73 20 6f 66 20 65 61 63 68 0a 2a 2a 20 6b 65 79  s of each.** key
21140 20 69 73 20 73 75 66 66 69 63 69 65 6e 74 20 74   is sufficient t
21150 6f 20 70 72 6f 64 75 63 65 20 74 68 65 20 72 65  o produce the re
21160 71 75 69 72 65 64 20 72 65 73 75 6c 74 73 2e 0a  quired results..
21170 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
21180 72 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43  rOpen: {.  VdbeC
21190 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61  ursor *pCx;..  a
211a0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
211b0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
211c0 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70  Op->p2>=0 );.  p
211d0 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72  Cx = allocateCur
211e0 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20  sor(p, pOp->p1, 
211f0 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 43 55 52  pOp->p2, -1, CUR
21200 54 59 50 45 5f 53 4f 52 54 45 52 29 3b 0a 20 20  TYPE_SORTER);.  
21210 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74  if( pCx==0 ) got
21220 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d  o no_mem;.  pCx-
21230 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d  >pKeyInfo = pOp-
21240 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  >p4.pKeyInfo;.  
21250 61 73 73 65 72 74 28 20 70 43 78 2d 3e 70 4b 65  assert( pCx->pKe
21260 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b  yInfo->db==db );
21270 0a 20 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e  .  assert( pCx->
21280 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45  pKeyInfo->enc==E
21290 4e 43 28 64 62 29 20 29 3b 0a 20 20 72 63 20 3d  NC(db) );.  rc =
212a0 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
212b0 65 72 49 6e 69 74 28 64 62 2c 20 70 4f 70 2d 3e  erInit(db, pOp->
212c0 70 33 2c 20 70 43 78 29 3b 0a 20 20 69 66 28 20  p3, pCx);.  if( 
212d0 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
212e0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
212f0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
21300 6f 64 65 3a 20 53 65 71 75 65 6e 63 65 54 65 73  ode: SequenceTes
21310 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
21320 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 28 20 63   Synopsis: if( c
21330 75 72 73 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b 20  ursor[P1].ctr++ 
21340 29 20 70 63 20 3d 20 50 32 0a 2a 2a 0a 2a 2a 20  ) pc = P2.**.** 
21350 50 31 20 69 73 20 61 20 73 6f 72 74 65 72 20 63  P1 is a sorter c
21360 75 72 73 6f 72 2e 20 49 66 20 74 68 65 20 73 65  ursor. If the se
21370 71 75 65 6e 63 65 20 63 6f 75 6e 74 65 72 20 69  quence counter i
21380 73 20 63 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f  s currently zero
21390 2c 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e  , jump.** to P2.
213a0 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77   Regardless of w
213b0 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
213c0 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c  e jump is taken,
213d0 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 65 0a 2a   increment the.*
213e0 2a 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 76  * the sequence v
213f0 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  alue..*/.case OP
21400 5f 53 65 71 75 65 6e 63 65 54 65 73 74 3a 20 7b  _SequenceTest: {
21410 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
21420 43 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  C;.  assert( pOp
21430 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
21440 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
21450 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
21460 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
21470 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43  ert( isSorter(pC
21480 29 20 29 3b 0a 20 20 69 66 28 20 28 70 43 2d 3e  ) );.  if( (pC->
21490 73 65 71 43 6f 75 6e 74 2b 2b 29 3d 3d 30 20 29  seqCount++)==0 )
214a0 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f  {.    goto jump_
214b0 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  to_p2;.  }.  bre
214c0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
214d0 3a 20 4f 70 65 6e 50 73 65 75 64 6f 20 50 31 20  : OpenPseudo P1 
214e0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
214f0 6f 70 73 69 73 3a 20 50 33 20 63 6f 6c 75 6d 6e  opsis: P3 column
21500 73 20 69 6e 20 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  s in r[P2].**.**
21510 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73   Open a new curs
21520 6f 72 20 74 68 61 74 20 70 6f 69 6e 74 73 20 74  or that points t
21530 6f 20 61 20 66 61 6b 65 20 74 61 62 6c 65 20 74  o a fake table t
21540 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 20 73  hat contains a s
21550 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66 20  ingle.** row of 
21560 64 61 74 61 2e 20 20 54 68 65 20 63 6f 6e 74 65  data.  The conte
21570 6e 74 20 6f 66 20 74 68 61 74 20 6f 6e 65 20 72  nt of that one r
21580 6f 77 20 69 73 20 74 68 65 20 63 6f 6e 74 65 6e  ow is the conten
21590 74 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 72  t of memory.** r
215a0 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 6e 20  egister P2.  In 
215b0 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 63 75 72  other words, cur
215c0 73 6f 72 20 50 31 20 62 65 63 6f 6d 65 73 20 61  sor P1 becomes a
215d0 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20  n alias for the 
215e0 0a 2a 2a 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f 6e  .** MEM_Blob con
215f0 74 65 6e 74 20 63 6f 6e 74 61 69 6e 65 64 20 69  tent contained i
21600 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
21610 2a 0a 2a 2a 20 41 20 70 73 65 75 64 6f 2d 74 61  *.** A pseudo-ta
21620 62 6c 65 20 63 72 65 61 74 65 64 20 62 79 20 74  ble created by t
21630 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73  his opcode is us
21640 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 73 69 6e  ed to hold a sin
21650 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 75 74 70 75  gle.** row outpu
21660 74 20 66 72 6f 6d 20 74 68 65 20 73 6f 72 74 65  t from the sorte
21670 72 20 73 6f 20 74 68 61 74 20 74 68 65 20 72 6f  r so that the ro
21680 77 20 63 61 6e 20 62 65 20 64 65 63 6f 6d 70 6f  w can be decompo
21690 73 65 64 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69  sed into.** indi
216a0 76 69 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 75  vidual columns u
216b0 73 69 6e 67 20 74 68 65 20 4f 50 5f 43 6f 6c 75  sing the OP_Colu
216c0 6d 6e 20 6f 70 63 6f 64 65 2e 20 20 54 68 65 20  mn opcode.  The 
216d0 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65  OP_Column opcode
216e0 0a 2a 2a 20 69 73 20 74 68 65 20 6f 6e 6c 79 20  .** is the only 
216f0 63 75 72 73 6f 72 20 6f 70 63 6f 64 65 20 74 68  cursor opcode th
21700 61 74 20 77 6f 72 6b 73 20 77 69 74 68 20 61 20  at works with a 
21710 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a  pseudo-table..**
21720 0a 2a 2a 20 50 33 20 69 73 20 74 68 65 20 6e 75  .** P3 is the nu
21730 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69  mber of fields i
21740 6e 20 74 68 65 20 72 65 63 6f 72 64 73 20 74 68  n the records th
21750 61 74 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65  at will be store
21760 64 20 62 79 0a 2a 2a 20 74 68 65 20 70 73 65 75  d by.** the pseu
21770 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73  do-table..*/.cas
21780 65 20 4f 50 5f 4f 70 65 6e 50 73 65 75 64 6f 3a  e OP_OpenPseudo:
21790 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
217a0 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65 72 74 28  *pCx;..  assert(
217b0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20   pOp->p1>=0 );. 
217c0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
217d0 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61  >=0 );.  pCx = a
217e0 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c  llocateCursor(p,
217f0 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
21800 33 2c 20 2d 31 2c 20 43 55 52 54 59 50 45 5f 50  3, -1, CURTYPE_P
21810 53 45 55 44 4f 29 3b 0a 20 20 69 66 28 20 70 43  SEUDO);.  if( pC
21820 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  x==0 ) goto no_m
21830 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52  em;.  pCx->nullR
21840 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 73  ow = 1;.  pCx->s
21850 65 65 6b 52 65 73 75 6c 74 20 3d 20 70 4f 70 2d  eekResult = pOp-
21860 3e 70 32 3b 0a 20 20 70 43 78 2d 3e 69 73 54 61  >p2;.  pCx->isTa
21870 62 6c 65 20 3d 20 31 3b 0a 20 20 2f 2a 20 47 69  ble = 1;.  /* Gi
21880 76 65 20 74 68 69 73 20 70 73 65 75 64 6f 2d 63  ve this pseudo-c
21890 75 72 73 6f 72 20 61 20 66 61 6b 65 20 42 74 43  ursor a fake BtC
218a0 75 72 73 6f 72 20 70 6f 69 6e 74 65 72 20 73 6f  ursor pointer so
218b0 20 74 68 61 74 20 70 43 78 0a 20 20 2a 2a 20 63   that pCx.  ** c
218c0 61 6e 20 62 65 20 73 61 66 65 6c 79 20 70 61 73  an be safely pas
218d0 73 65 64 20 74 6f 20 73 71 6c 69 74 65 33 56 64  sed to sqlite3Vd
218e0 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29  beCursorMoveto()
218f0 2e 20 20 54 68 69 73 20 61 76 6f 69 64 73 20 61  .  This avoids a
21900 20 74 65 73 74 0a 20 20 2a 2a 20 66 6f 72 20 70   test.  ** for p
21910 43 78 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  Cx->eCurType==CU
21920 52 54 59 50 45 5f 42 54 52 45 45 20 69 6e 73 69  RTYPE_BTREE insi
21930 64 65 20 6f 66 20 73 71 6c 69 74 65 33 56 64 62  de of sqlite3Vdb
21940 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 0a  eCursorMoveto().
21950 20 20 2a 2a 20 77 68 69 63 68 20 69 73 20 61 20    ** which is a 
21960 70 65 72 66 6f 72 6d 61 6e 63 65 20 6f 70 74 69  performance opti
21970 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 70 43  mization */.  pC
21980 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72 20 3d 20  x->uc.pCursor = 
21990 73 71 6c 69 74 65 33 42 74 72 65 65 46 61 6b 65  sqlite3BtreeFake
219a0 56 61 6c 69 64 43 75 72 73 6f 72 28 29 3b 0a 20  ValidCursor();. 
219b0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
219c0 3d 3d 30 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  ==0 );.  break;.
219d0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c  }../* Opcode: Cl
219e0 6f 73 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ose P1 * * * *.*
219f0 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 20 63 75 72  *.** Close a cur
21a00 73 6f 72 20 70 72 65 76 69 6f 75 73 6c 79 20 6f  sor previously o
21a10 70 65 6e 65 64 20 61 73 20 50 31 2e 20 20 49 66  pened as P1.  If
21a20 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 63 75   P1 is not.** cu
21a30 72 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 74 68  rrently open, th
21a40 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
21a50 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61  s a no-op..*/.ca
21a60 73 65 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20  se OP_Close: {. 
21a70 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
21a80 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
21a90 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 73  ->nCursor );.  s
21aa0 71 6c 69 74 65 33 56 64 62 65 46 72 65 65 43 75  qlite3VdbeFreeCu
21ab0 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73 72  rsor(p, p->apCsr
21ac0 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d  [pOp->p1]);.  p-
21ad0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 20  >apCsr[pOp->p1] 
21ae0 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 0;.  break;.}.
21af0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
21b00 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 55 53 45  NABLE_COLUMN_USE
21b10 44 5f 4d 41 53 4b 0a 2f 2a 20 4f 70 63 6f 64 65  D_MASK./* Opcode
21b20 3a 20 43 6f 6c 75 6d 6e 73 55 73 65 64 20 50 31  : ColumnsUsed P1
21b30 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
21b40 54 68 69 73 20 6f 70 63 6f 64 65 20 28 77 68 69  This opcode (whi
21b50 63 68 20 6f 6e 6c 79 20 65 78 69 73 74 73 20 69  ch only exists i
21b60 66 20 53 51 4c 69 74 65 20 77 61 73 20 63 6f 6d  f SQLite was com
21b70 70 69 6c 65 64 20 77 69 74 68 0a 2a 2a 20 53 51  piled with.** SQ
21b80 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55  LITE_ENABLE_COLU
21b90 4d 4e 5f 55 53 45 44 5f 4d 41 53 4b 29 20 69 64  MN_USED_MASK) id
21ba0 65 6e 74 69 66 69 65 73 20 77 68 69 63 68 20 63  entifies which c
21bb0 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 0a 2a 2a  olumns of the.**
21bc0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
21bd0 66 6f 72 20 63 75 72 73 6f 72 20 50 31 20 61 72  for cursor P1 ar
21be0 65 20 75 73 65 64 2e 20 20 50 34 20 69 73 20 61  e used.  P4 is a
21bf0 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a   64-bit integer.
21c00 2a 2a 20 28 50 34 5f 49 4e 54 36 34 29 20 69 6e  ** (P4_INT64) in
21c10 20 77 68 69 63 68 20 74 68 65 20 66 69 72 73 74   which the first
21c20 20 36 33 20 62 69 74 73 20 61 72 65 20 6f 6e 65   63 bits are one
21c30 20 66 6f 72 20 65 61 63 68 20 6f 66 20 74 68 65   for each of the
21c40 0a 2a 2a 20 66 69 72 73 74 20 36 33 20 63 6f 6c  .** first 63 col
21c50 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c  umns of the tabl
21c60 65 20 6f 72 20 69 6e 64 65 78 20 74 68 61 74 20  e or index that 
21c70 61 72 65 20 61 63 74 75 61 6c 6c 79 20 75 73 65  are actually use
21c80 64 0a 2a 2a 20 62 79 20 74 68 65 20 63 75 72 73  d.** by the curs
21c90 6f 72 2e 20 20 54 68 65 20 68 69 67 68 2d 6f 72  or.  The high-or
21ca0 64 65 72 20 62 69 74 20 69 73 20 73 65 74 20 69  der bit is set i
21cb0 66 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 61 66 74  f any column aft
21cc0 65 72 0a 2a 2a 20 74 68 65 20 36 34 74 68 20 69  er.** the 64th i
21cd0 73 20 75 73 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  s used..*/.case 
21ce0 4f 50 5f 43 6f 6c 75 6d 6e 73 55 73 65 64 3a 20  OP_ColumnsUsed: 
21cf0 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
21d00 70 43 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70  pC;.  pC = p->ap
21d10 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
21d20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
21d30 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
21d40 52 45 45 20 29 3b 0a 20 20 70 43 2d 3e 6d 61 73  REE );.  pC->mas
21d50 6b 55 73 65 64 20 3d 20 2a 28 75 36 34 2a 29 70  kUsed = *(u64*)p
21d60 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62  Op->p4.pI64;.  b
21d70 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
21d80 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47  /* Opcode: SeekG
21d90 45 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  E P1 P2 P3 P4 *.
21da0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
21db0 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
21dc0 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
21dd0 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61  ers to an SQL ta
21de0 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74  ble (B-Tree that
21df0 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65   uses integer ke
21e00 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65  ys), .** use the
21e10 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
21e20 65 72 20 50 33 20 61 73 20 74 68 65 20 6b 65 79  er P3 as the key
21e30 2e 20 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  .  If cursor P1 
21e40 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e  refers .** to an
21e50 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e   SQL index, then
21e60 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
21e70 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20   in an array of 
21e80 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a  P4 registers .**
21e90 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
21ea0 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  s an unpacked in
21eb0 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20  dex key. .**.** 
21ec0 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f  Reposition curso
21ed0 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74  r P1 so that  it
21ee0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73   points to the s
21ef0 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68  mallest entry th
21f00 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65  at .** is greate
21f10 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
21f20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  to the key value
21f30 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e  . If there are n
21f40 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 67 72  o records .** gr
21f50 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
21f60 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61  ual to the key a
21f70 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72  nd P2 is not zer
21f80 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  o, then jump to 
21f90 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  P2..**.** If the
21fa0 20 63 75 72 73 6f 72 20 50 31 20 77 61 73 20 6f   cursor P1 was o
21fb0 70 65 6e 65 64 20 75 73 69 6e 67 20 74 68 65 20  pened using the 
21fc0 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 66 6c  OPFLAG_SEEKEQ fl
21fd0 61 67 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a  ag, then this.**
21fe0 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77   opcode will alw
21ff0 61 79 73 20 6c 61 6e 64 20 6f 6e 20 61 20 72 65  ays land on a re
22000 63 6f 72 64 20 74 68 61 74 20 65 71 75 61 6c 6c  cord that equall
22010 79 20 65 71 75 61 6c 73 20 74 68 65 20 6b 65 79  y equals the key
22020 2c 20 6f 72 0a 2a 2a 20 65 6c 73 65 20 6a 75 6d  , or.** else jum
22030 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
22040 20 50 32 2e 20 20 57 68 65 6e 20 74 68 65 20 63   P2.  When the c
22050 75 72 73 6f 72 20 69 73 20 4f 50 46 4c 41 47 5f  ursor is OPFLAG_
22060 53 45 45 4b 45 51 2c 20 74 68 69 73 0a 2a 2a 20  SEEKEQ, this.** 
22070 6f 70 63 6f 64 65 20 6d 75 73 74 20 62 65 20 66  opcode must be f
22080 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 49 64  ollowed by an Id
22090 78 4c 45 20 6f 70 63 6f 64 65 20 77 69 74 68 20  xLE opcode with 
220a0 74 68 65 20 73 61 6d 65 20 61 72 67 75 6d 65 6e  the same argumen
220b0 74 73 2e 0a 2a 2a 20 54 68 65 20 49 64 78 4c 45  ts..** The IdxLE
220c0 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20   opcode will be 
220d0 73 6b 69 70 70 65 64 20 69 66 20 74 68 69 73 20  skipped if this 
220e0 6f 70 63 6f 64 65 20 73 75 63 63 65 65 64 73 2c  opcode succeeds,
220f0 20 62 75 74 20 74 68 65 0a 2a 2a 20 49 64 78 4c   but the.** IdxL
22100 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65  E opcode will be
22110 20 75 73 65 64 20 6f 6e 20 73 75 62 73 65 71 75   used on subsequ
22120 65 6e 74 20 6c 6f 6f 70 20 69 74 65 72 61 74 69  ent loop iterati
22130 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ons..**.** This 
22140 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68  opcode leaves th
22150 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75  e cursor configu
22160 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66  red to move in f
22170 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a  orward order,.**
22180 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e   from the beginn
22190 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65 20 65  ing toward the e
221a0 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  nd.  In other wo
221b0 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20  rds, the cursor 
221c0 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64  is.** configured
221d0 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f   to use Next, no
221e0 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65  t Prev..**.** Se
221f0 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
22200 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c  otFound, SeekLt,
22210 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 4c 65 0a   SeekGt, SeekLe.
22220 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  */./* Opcode: Se
22230 65 6b 47 54 20 50 31 20 50 32 20 50 33 20 50 34  ekGT P1 P2 P3 P4
22240 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
22250 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
22260 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  ** If cursor P1 
22270 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c  refers to an SQL
22280 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74   table (B-Tree t
22290 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72  hat uses integer
222a0 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20   keys), .** use 
222b0 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
222c0 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65  ister P3 as a ke
222d0 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  y. If cursor P1 
222e0 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e  refers .** to an
222f0 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e   SQL index, then
22300 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
22310 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20   in an array of 
22320 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a  P4 registers .**
22330 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
22340 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  s an unpacked in
22350 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20  dex key. .**.** 
22360 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f  Reposition curso
22370 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74  r P1 so that  it
22380 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73   points to the s
22390 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68  mallest entry th
223a0 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65  at .** is greate
223b0 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76  r than the key v
223c0 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61  alue. If there a
223d0 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 67 72  re no records gr
223e0 65 61 74 65 72 20 74 68 61 6e 20 0a 2a 2a 20 74  eater than .** t
223f0 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73  he key and P2 is
22400 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
22410 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  jump to P2..**.*
22420 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65  * This opcode le
22430 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
22440 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f  configured to mo
22450 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72  ve in forward or
22460 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65  der,.** from the
22470 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72   beginning towar
22480 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f  d the end.  In o
22490 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
224a0 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e  cursor is.** con
224b0 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e  figured to use N
224c0 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a  ext, not Prev..*
224d0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
224e0 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
224f0 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 65 2c 20  SeekLt, SeekGe, 
22500 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63  SeekLe.*/./* Opc
22510 6f 64 65 3a 20 53 65 65 6b 4c 54 20 50 31 20 50  ode: SeekLT P1 P
22520 32 20 50 33 20 50 34 20 2a 20 0a 2a 2a 20 53 79  2 P3 P4 * .** Sy
22530 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
22540 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  @P4].**.** If cu
22550 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
22560 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
22570 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
22580 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
22590 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75  .** use the valu
225a0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
225b0 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75   as a key. If cu
225c0 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a  rsor P1 refers .
225d0 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64  ** to an SQL ind
225e0 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74  ex, then P3 is t
225f0 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61  he first in an a
22600 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73  rray of P4 regis
22610 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72  ters .** that ar
22620 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70  e used as an unp
22630 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
22640 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69   .**.** Repositi
22650 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  on cursor P1 so 
22660 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20  that  it points 
22670 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20 65  to the largest e
22680 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73  ntry that .** is
22690 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b   less than the k
226a0 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65  ey value. If the
226b0 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
226c0 73 20 6c 65 73 73 20 74 68 61 6e 20 0a 2a 2a 20  s less than .** 
226d0 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69  the key and P2 i
226e0 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
226f0 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
22700 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
22710 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
22720 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d   configured to m
22730 6f 76 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f  ove in reverse o
22740 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68  rder,.** from th
22750 65 20 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65  e end toward the
22760 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20   beginning.  In 
22770 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
22780 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f   cursor is.** co
22790 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20  nfigured to use 
227a0 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a  Prev, not Next..
227b0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
227c0 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
227d0 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c   SeekGt, SeekGe,
227e0 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70   SeekLe.*/./* Op
227f0 63 6f 64 65 3a 20 53 65 65 6b 4c 45 20 50 31 20  code: SeekLE P1 
22800 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
22810 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
22820 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  @P4].**.** If cu
22830 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
22840 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
22850 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
22860 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
22870 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75  .** use the valu
22880 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
22890 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75   as a key. If cu
228a0 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a  rsor P1 refers .
228b0 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64  ** to an SQL ind
228c0 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74  ex, then P3 is t
228d0 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61  he first in an a
228e0 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73  rray of P4 regis
228f0 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72  ters .** that ar
22900 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70  e used as an unp
22910 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
22920 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69   .**.** Repositi
22930 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  on cursor P1 so 
22940 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74  that it points t
22950 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e  o the largest en
22960 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
22970 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75  less than or equ
22980 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61  al to the key va
22990 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72  lue. If there ar
229a0 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a  e no records .**
229b0 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
229c0 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61  ual to the key a
229d0 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72  nd P2 is not zer
229e0 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  o, then jump to 
229f0 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  P2..**.** This o
22a00 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65  pcode leaves the
22a10 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72   cursor configur
22a20 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65  ed to move in re
22a30 76 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20  verse order,.** 
22a40 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77  from the end tow
22a50 61 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  ard the beginnin
22a60 67 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  g.  In other wor
22a70 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69  ds, the cursor i
22a80 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20  s.** configured 
22a90 74 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74  to use Prev, not
22aa0 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   Next..**.** If 
22ab0 74 68 65 20 63 75 72 73 6f 72 20 50 31 20 77 61  the cursor P1 wa
22ac0 73 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 74  s opened using t
22ad0 68 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51  he OPFLAG_SEEKEQ
22ae0 20 66 6c 61 67 2c 20 74 68 65 6e 20 74 68 69 73   flag, then this
22af0 0a 2a 2a 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20  .** opcode will 
22b00 61 6c 77 61 79 73 20 6c 61 6e 64 20 6f 6e 20 61  always land on a
22b10 20 72 65 63 6f 72 64 20 74 68 61 74 20 65 71 75   record that equ
22b20 61 6c 6c 79 20 65 71 75 61 6c 73 20 74 68 65 20  ally equals the 
22b30 6b 65 79 2c 20 6f 72 0a 2a 2a 20 65 6c 73 65 20  key, or.** else 
22b40 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
22b50 20 74 6f 20 50 32 2e 20 20 57 68 65 6e 20 74 68   to P2.  When th
22b60 65 20 63 75 72 73 6f 72 20 69 73 20 4f 50 46 4c  e cursor is OPFL
22b70 41 47 5f 53 45 45 4b 45 51 2c 20 74 68 69 73 0a  AG_SEEKEQ, this.
22b80 2a 2a 20 6f 70 63 6f 64 65 20 6d 75 73 74 20 62  ** opcode must b
22b90 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e  e followed by an
22ba0 20 49 64 78 47 45 20 6f 70 63 6f 64 65 20 77 69   IdxGE opcode wi
22bb0 74 68 20 74 68 65 20 73 61 6d 65 20 61 72 67 75  th the same argu
22bc0 6d 65 6e 74 73 2e 0a 2a 2a 20 54 68 65 20 49 64  ments..** The Id
22bd0 78 47 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20  xGE opcode will 
22be0 62 65 20 73 6b 69 70 70 65 64 20 69 66 20 74 68  be skipped if th
22bf0 69 73 20 6f 70 63 6f 64 65 20 73 75 63 63 65 65  is opcode succee
22c00 64 73 2c 20 62 75 74 20 74 68 65 0a 2a 2a 20 49  ds, but the.** I
22c10 64 78 47 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c  dxGE opcode will
22c20 20 62 65 20 75 73 65 64 20 6f 6e 20 73 75 62 73   be used on subs
22c30 65 71 75 65 6e 74 20 6c 6f 6f 70 20 69 74 65 72  equent loop iter
22c40 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 53 65  ations..**.** Se
22c50 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
22c60 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 47 74 2c  otFound, SeekGt,
22c70 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 74 0a   SeekGe, SeekLt.
22c80 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c  */.case OP_SeekL
22c90 54 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  T:         /* ju
22ca0 6d 70 2c 20 69 6e 33 2c 20 67 72 6f 75 70 20 2a  mp, in3, group *
22cb0 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 45  /.case OP_SeekLE
22cc0 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  :         /* jum
22cd0 70 2c 20 69 6e 33 2c 20 67 72 6f 75 70 20 2a 2f  p, in3, group */
22ce0 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 45 3a  .case OP_SeekGE:
22cf0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
22d00 2c 20 69 6e 33 2c 20 67 72 6f 75 70 20 2a 2f 0a  , in3, group */.
22d10 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 54 3a 20  case OP_SeekGT: 
22d20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c  {       /* jump,
22d30 20 69 6e 33 2c 20 67 72 6f 75 70 20 2a 2f 0a 20   in3, group */. 
22d40 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20   int res;       
22d50 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f      /* Compariso
22d60 6e 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 69 6e  n result */.  in
22d70 74 20 6f 63 3b 20 20 20 20 20 20 20 20 20 20 20  t oc;           
22d80 20 2f 2a 20 4f 70 63 6f 64 65 20 2a 2f 0a 20 20   /* Opcode */.  
22d90 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20  VdbeCursor *pC; 
22da0 20 20 20 2f 2a 20 54 68 65 20 63 75 72 73 6f 72     /* The cursor
22db0 20 74 6f 20 73 65 65 6b 20 2a 2f 0a 20 20 55 6e   to seek */.  Un
22dc0 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 20  packedRecord r; 
22dd0 20 2f 2a 20 54 68 65 20 6b 65 79 20 74 6f 20 73   /* The key to s
22de0 65 65 6b 20 66 6f 72 20 2a 2f 0a 20 20 69 6e 74  eek for */.  int
22df0 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20   nField;        
22e00 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
22e10 75 6d 6e 73 20 6f 72 20 66 69 65 6c 64 73 20 69  umns or fields i
22e20 6e 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20 69  n the key */.  i
22e30 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20 20 20  64 iKey;        
22e40 20 20 2f 2a 20 54 68 65 20 72 6f 77 69 64 20 77    /* The rowid w
22e50 65 20 61 72 65 20 74 6f 20 73 65 65 6b 20 74 6f  e are to seek to
22e60 20 2a 2f 0a 20 20 69 6e 74 20 65 71 4f 6e 6c 79   */.  int eqOnly
22e70 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79  ;        /* Only
22e80 20 69 6e 74 65 72 65 73 74 65 64 20 69 6e 20 3d   interested in =
22e90 3d 20 72 65 73 75 6c 74 73 20 2a 2f 0a 0a 20 20  = results */..  
22ea0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
22eb0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
22ec0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
22ed0 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 21 3d 30  sert( pOp->p2!=0
22ee0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
22ef0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
22f00 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
22f10 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
22f20 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
22f30 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65  _BTREE );.  asse
22f40 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45 20 3d 3d  rt( OP_SeekLE ==
22f50 20 4f 50 5f 53 65 65 6b 4c 54 2b 31 20 29 3b 0a   OP_SeekLT+1 );.
22f60 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
22f70 6b 47 45 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54  kGE == OP_SeekLT
22f80 2b 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  +2 );.  assert( 
22f90 4f 50 5f 53 65 65 6b 47 54 20 3d 3d 20 4f 50 5f  OP_SeekGT == OP_
22fa0 53 65 65 6b 4c 54 2b 33 20 29 3b 0a 20 20 61 73  SeekLT+3 );.  as
22fb0 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72 64 65  sert( pC->isOrde
22fc0 72 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28  red );.  assert(
22fd0 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21   pC->uc.pCursor!
22fe0 3d 30 20 29 3b 0a 20 20 6f 63 20 3d 20 70 4f 70  =0 );.  oc = pOp
22ff0 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 65 71 4f 6e  ->opcode;.  eqOn
23000 6c 79 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 6e 75  ly = 0;.  pC->nu
23010 6c 6c 52 6f 77 20 3d 20 30 3b 0a 23 69 66 64 65  llRow = 0;.#ifde
23020 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
23030 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f   pC->seekOp = pO
23040 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69  p->opcode;.#endi
23050 66 0a 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65  f..  pC->deferre
23060 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70  dMoveto = 0;.  p
23070 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
23080 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
23090 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  if( pC->isTable 
230a0 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 42 54  ){.    /* The BT
230b0 52 45 45 5f 53 45 45 4b 5f 45 51 20 66 6c 61 67  REE_SEEK_EQ flag
230c0 20 69 73 20 6f 6e 6c 79 20 73 65 74 20 6f 6e 20   is only set on 
230d0 69 6e 64 65 78 20 63 75 72 73 6f 72 73 20 2a 2f  index cursors */
230e0 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c  .    assert( sql
230f0 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 48  ite3BtreeCursorH
23100 61 73 48 69 6e 74 28 70 43 2d 3e 75 63 2e 70 43  asHint(pC->uc.pC
23110 75 72 73 6f 72 2c 20 42 54 52 45 45 5f 53 45 45  ursor, BTREE_SEE
23120 4b 5f 45 51 29 3d 3d 30 0a 20 20 20 20 20 20 20  K_EQ)==0.       
23130 20 20 20 20 20 20 20 7c 7c 20 43 4f 52 52 55 50         || CORRUP
23140 54 5f 44 42 20 29 3b 0a 0a 20 20 20 20 2f 2a 20  T_DB );..    /* 
23150 54 68 65 20 69 6e 70 75 74 20 76 61 6c 75 65 20  The input value 
23160 69 6e 20 50 33 20 6d 69 67 68 74 20 62 65 20 6f  in P3 might be o
23170 66 20 61 6e 79 20 74 79 70 65 3a 20 69 6e 74 65  f any type: inte
23180 67 65 72 2c 20 72 65 61 6c 2c 20 73 74 72 69 6e  ger, real, strin
23190 67 2c 0a 20 20 20 20 2a 2a 20 62 6c 6f 62 2c 20  g,.    ** blob, 
231a0 6f 72 20 4e 55 4c 4c 2e 20 20 42 75 74 20 69 74  or NULL.  But it
231b0 20 6e 65 65 64 73 20 74 6f 20 62 65 20 61 6e 20   needs to be an 
231c0 69 6e 74 65 67 65 72 20 62 65 66 6f 72 65 20 77  integer before w
231d0 65 20 63 61 6e 20 64 6f 0a 20 20 20 20 2a 2a 20  e can do.    ** 
231e0 74 68 65 20 73 65 65 6b 2c 20 73 6f 20 63 6f 6e  the seek, so con
231f0 76 65 72 74 20 69 74 2e 20 2a 2f 0a 20 20 20 20  vert it. */.    
23200 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
23210 2d 3e 70 33 5d 3b 0a 20 20 20 20 69 66 28 20 28  ->p3];.    if( (
23220 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pIn3->flags & (M
23230 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c  EM_Int|MEM_Real|
23240 4d 45 4d 5f 49 6e 74 52 65 61 6c 7c 4d 45 4d 5f  MEM_IntReal|MEM_
23250 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29  Str))==MEM_Str )
23260 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d  {.      applyNum
23270 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e  ericAffinity(pIn
23280 33 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20  3, 0);.    }.   
23290 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56   iKey = sqlite3V
232a0 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 33  dbeIntValue(pIn3
232b0 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 74 68  );..    /* If th
232c0 65 20 50 33 20 76 61 6c 75 65 20 63 6f 75 6c 64  e P3 value could
232d0 20 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65   not be converte
232e0 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65  d into an intege
232f0 72 20 77 69 74 68 6f 75 74 0a 20 20 20 20 2a 2a  r without.    **
23300 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61   loss of informa
23310 74 69 6f 6e 2c 20 74 68 65 6e 20 73 70 65 63 69  tion, then speci
23320 61 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73  al processing is
23330 20 72 65 71 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a   required... */.
23340 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66      if( (pIn3->f
23350 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c  lags & (MEM_Int|
23360 4d 45 4d 5f 49 6e 74 52 65 61 6c 29 29 3d 3d 30  MEM_IntReal))==0
23370 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 70   ){.      if( (p
23380 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
23390 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Real)==0 ){.   
233a0 20 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e       if( (pIn3->
233b0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
233c0 29 20 7c 7c 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b  ) || oc>=OP_Seek
233d0 47 45 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  GE ){.          
233e0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
233f0 31 2c 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20  1,2);.          
23400 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
23410 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
23420 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73            rc = s
23430 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28  qlite3BtreeLast(
23440 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
23450 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 20  &res);.         
23460 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
23470 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
23480 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
23490 20 20 20 20 20 20 20 20 67 6f 74 6f 20 73 65 65          goto see
234a0 6b 5f 6e 6f 74 5f 66 6f 75 6e 64 3b 0a 20 20 20  k_not_found;.   
234b0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c       }.      }el
234c0 73 65 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20  se..      /* If 
234d0 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f  the approximatio
234e0 6e 20 69 4b 65 79 20 69 73 20 6c 61 72 67 65 72  n iKey is larger
234f0 20 74 68 61 6e 20 74 68 65 20 61 63 74 75 61 6c   than the actual
23500 20 72 65 61 6c 20 73 65 61 72 63 68 0a 20 20 20   real search.   
23510 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73     ** term, subs
23520 74 69 74 75 74 65 20 3e 3d 20 66 6f 72 20 3e 20  titute >= for > 
23530 61 6e 64 20 3c 20 66 6f 72 20 3c 3d 2e 20 65 2e  and < for <=. e.
23540 67 2e 20 69 66 20 74 68 65 20 73 65 61 72 63 68  g. if the search
23550 20 74 65 72 6d 0a 20 20 20 20 20 20 2a 2a 20 69   term.      ** i
23560 73 20 34 2e 39 20 61 6e 64 20 74 68 65 20 69 6e  s 4.9 and the in
23570 74 65 67 65 72 20 61 70 70 72 6f 78 69 6d 61 74  teger approximat
23580 69 6f 6e 20 35 3a 0a 20 20 20 20 20 20 2a 2a 0a  ion 5:.      **.
23590 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20        **        
235a0 28 78 20 3e 20 20 34 2e 39 29 20 20 20 20 2d 3e  (x >  4.9)    ->
235b0 20 20 20 20 20 28 78 20 3e 3d 20 35 29 0a 20 20       (x >= 5).  
235c0 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 28 78      **        (x
235d0 20 3c 3d 20 34 2e 39 29 20 20 20 20 2d 3e 20 20   <= 4.9)    ->  
235e0 20 20 20 28 78 20 3c 20 20 35 29 0a 20 20 20 20     (x <  5).    
235f0 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70    */.      if( p
23600 49 6e 33 2d 3e 75 2e 72 3c 28 64 6f 75 62 6c 65  In3->u.r<(double
23610 29 69 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20  )iKey ){.       
23620 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
23630 47 45 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 2d 31  GE==(OP_SeekGT-1
23640 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  ) );.        ass
23650 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 54 3d 3d  ert( OP_SeekLT==
23660 28 4f 50 5f 53 65 65 6b 4c 45 2d 31 29 20 29 3b  (OP_SeekLE-1) );
23670 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
23680 20 28 4f 50 5f 53 65 65 6b 4c 45 20 26 20 30 78   (OP_SeekLE & 0x
23690 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47  0001)==(OP_SeekG
236a0 54 20 26 20 30 78 30 30 30 31 29 20 29 3b 0a 20  T & 0x0001) );. 
236b0 20 20 20 20 20 20 20 69 66 28 20 28 6f 63 20 26         if( (oc &
236c0 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65   0x0001)==(OP_Se
236d0 65 6b 47 54 20 26 20 30 78 30 30 30 31 29 20 29  ekGT & 0x0001) )
236e0 20 6f 63 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a   oc--;.      }..
236f0 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20        /* If the 
23700 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b  approximation iK
23710 65 79 20 69 73 20 73 6d 61 6c 6c 65 72 20 74 68  ey is smaller th
23720 61 6e 20 74 68 65 20 61 63 74 75 61 6c 20 72 65  an the actual re
23730 61 6c 20 73 65 61 72 63 68 0a 20 20 20 20 20 20  al search.      
23740 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73 74 69 74  ** term, substit
23750 75 74 65 20 3c 3d 20 66 6f 72 20 3c 20 61 6e 64  ute <= for < and
23760 20 3e 20 66 6f 72 20 3e 3d 2e 20 20 2a 2f 0a 20   > for >=.  */. 
23770 20 20 20 20 20 65 6c 73 65 20 69 66 28 20 70 49       else if( pI
23780 6e 33 2d 3e 75 2e 72 3e 28 64 6f 75 62 6c 65 29  n3->u.r>(double)
23790 69 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20  iKey ){.        
237a0 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c  assert( OP_SeekL
237b0 45 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 2b 31 29  E==(OP_SeekLT+1)
237c0 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
237d0 72 74 28 20 4f 50 5f 53 65 65 6b 47 54 3d 3d 28  rt( OP_SeekGT==(
237e0 4f 50 5f 53 65 65 6b 47 45 2b 31 29 20 29 3b 0a  OP_SeekGE+1) );.
237f0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
23800 28 4f 50 5f 53 65 65 6b 4c 54 20 26 20 30 78 30  (OP_SeekLT & 0x0
23810 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 45  001)==(OP_SeekGE
23820 20 26 20 30 78 30 30 30 31 29 20 29 3b 0a 20 20   & 0x0001) );.  
23830 20 20 20 20 20 20 69 66 28 20 28 6f 63 20 26 20        if( (oc & 
23840 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65  0x0001)==(OP_See
23850 6b 4c 54 20 26 20 30 78 30 30 30 31 29 20 29 20  kLT & 0x0001) ) 
23860 6f 63 2b 2b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  oc++;.      }.  
23870 20 20 7d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c    }.    rc = sql
23880 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
23890 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70  npacked(pC->uc.p
238a0 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29  Cursor, 0, (u64)
238b0 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a  iKey, 0, &res);.
238c0 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61      pC->movetoTa
238d0 72 67 65 74 20 3d 20 69 4b 65 79 3b 20 20 2f 2a  rget = iKey;  /*
238e0 20 55 73 65 64 20 62 79 20 4f 50 5f 44 65 6c 65   Used by OP_Dele
238f0 74 65 20 2a 2f 0a 20 20 20 20 69 66 28 20 72 63  te */.    if( rc
23900 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
23910 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
23920 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
23930 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
23940 20 2f 2a 20 46 6f 72 20 61 20 63 75 72 73 6f 72   /* For a cursor
23950 20 77 69 74 68 20 74 68 65 20 42 54 52 45 45 5f   with the BTREE_
23960 53 45 45 4b 5f 45 51 20 68 69 6e 74 2c 20 6f 6e  SEEK_EQ hint, on
23970 6c 79 20 74 68 65 20 4f 50 5f 53 65 65 6b 47 45  ly the OP_SeekGE
23980 20 61 6e 64 0a 20 20 20 20 2a 2a 20 4f 50 5f 53   and.    ** OP_S
23990 65 65 6b 4c 45 20 6f 70 63 6f 64 65 73 20 61 72  eekLE opcodes ar
239a0 65 20 61 6c 6c 6f 77 65 64 2c 20 61 6e 64 20 74  e allowed, and t
239b0 68 65 73 65 20 6d 75 73 74 20 62 65 20 69 6d 6d  hese must be imm
239c0 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 65  ediately followe
239d0 64 0a 20 20 20 20 2a 2a 20 62 79 20 61 6e 20 4f  d.    ** by an O
239e0 50 5f 49 64 78 47 54 20 6f 72 20 4f 50 5f 49 64  P_IdxGT or OP_Id
239f0 78 4c 54 20 6f 70 63 6f 64 65 2c 20 72 65 73 70  xLT opcode, resp
23a00 65 63 74 69 76 65 6c 79 2c 20 77 69 74 68 20 74  ectively, with t
23a10 68 65 20 73 61 6d 65 20 6b 65 79 2e 0a 20 20 20  he same key..   
23a20 20 2a 2f 0a 20 20 20 20 69 66 28 20 73 71 6c 69   */.    if( sqli
23a30 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 48 61  te3BtreeCursorHa
23a40 73 48 69 6e 74 28 70 43 2d 3e 75 63 2e 70 43 75  sHint(pC->uc.pCu
23a50 72 73 6f 72 2c 20 42 54 52 45 45 5f 53 45 45 4b  rsor, BTREE_SEEK
23a60 5f 45 51 29 20 29 7b 0a 20 20 20 20 20 20 65 71  _EQ) ){.      eq
23a70 4f 6e 6c 79 20 3d 20 31 3b 0a 20 20 20 20 20 20  Only = 1;.      
23a80 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
23a90 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 47 45 20 7c  ode==OP_SeekGE |
23aa0 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
23ab0 50 5f 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20  P_SeekLE );.    
23ac0 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d    assert( pOp[1]
23ad0 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c  .opcode==OP_IdxL
23ae0 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f  T || pOp[1].opco
23af0 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a  de==OP_IdxGT );.
23b00 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
23b10 70 5b 31 5d 2e 70 31 3d 3d 70 4f 70 5b 30 5d 2e  p[1].p1==pOp[0].
23b20 70 31 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  p1 );.      asse
23b30 72 74 28 20 70 4f 70 5b 31 5d 2e 70 32 3d 3d 70  rt( pOp[1].p2==p
23b40 4f 70 5b 30 5d 2e 70 32 20 29 3b 0a 20 20 20 20  Op[0].p2 );.    
23b50 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d    assert( pOp[1]
23b60 2e 70 33 3d 3d 70 4f 70 5b 30 5d 2e 70 33 20 29  .p3==pOp[0].p3 )
23b70 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
23b80 70 4f 70 5b 31 5d 2e 70 34 2e 69 3d 3d 70 4f 70  pOp[1].p4.i==pOp
23b90 5b 30 5d 2e 70 34 2e 69 20 29 3b 0a 20 20 20 20  [0].p4.i );.    
23ba0 7d 0a 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20  }..    nField = 
23bb0 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 61  pOp->p4.i;.    a
23bc0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
23bd0 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
23be0 20 20 20 20 61 73 73 65 72 74 28 20 6e 46 69 65      assert( nFie
23bf0 6c 64 3e 30 20 29 3b 0a 20 20 20 20 72 2e 70 4b  ld>0 );.    r.pK
23c00 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65  eyInfo = pC->pKe
23c10 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69  yInfo;.    r.nFi
23c20 65 6c 64 20 3d 20 28 75 31 36 29 6e 46 69 65 6c  eld = (u16)nFiel
23c30 64 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e  d;..    /* The n
23c40 65 78 74 20 6c 69 6e 65 20 6f 66 20 63 6f 64 65  ext line of code
23c50 20 63 6f 6d 70 75 74 65 73 20 61 73 20 66 6f 6c   computes as fol
23c60 6c 6f 77 73 2c 20 6f 6e 6c 79 20 66 61 73 74 65  lows, only faste
23c70 72 3a 0a 20 20 20 20 2a 2a 20 20 20 69 66 28 20  r:.    **   if( 
23c80 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c  oc==OP_SeekGT ||
23c90 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29   oc==OP_SeekLE )
23ca0 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 64  {.    **     r.d
23cb0 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a  efault_rc = -1;.
23cc0 20 20 20 20 2a 2a 20 20 20 7d 65 6c 73 65 7b 0a      **   }else{.
23cd0 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 64 65 66      **     r.def
23ce0 61 75 6c 74 5f 72 63 20 3d 20 2b 31 3b 0a 20 20  ault_rc = +1;.  
23cf0 20 20 2a 2a 20 20 20 7d 0a 20 20 20 20 2a 2f 0a    **   }.    */.
23d00 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63      r.default_rc
23d10 20 3d 20 28 28 31 20 26 20 28 6f 63 20 2d 20 4f   = ((1 & (oc - O
23d20 50 5f 53 65 65 6b 4c 54 29 29 20 3f 20 2d 31 20  P_SeekLT)) ? -1 
23d30 3a 20 2b 31 29 3b 0a 20 20 20 20 61 73 73 65 72  : +1);.    asser
23d40 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 54  t( oc!=OP_SeekGT
23d50 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63   || r.default_rc
23d60 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73 73 65  ==-1 );.    asse
23d70 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c  rt( oc!=OP_SeekL
23d80 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72  E || r.default_r
23d90 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73 73  c==-1 );.    ass
23da0 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b  ert( oc!=OP_Seek
23db0 47 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f  GE || r.default_
23dc0 72 63 3d 3d 2b 31 20 29 3b 0a 20 20 20 20 61 73  rc==+1 );.    as
23dd0 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65  sert( oc!=OP_See
23de0 6b 4c 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74  kLT || r.default
23df0 5f 72 63 3d 3d 2b 31 20 29 3b 0a 0a 20 20 20 20  _rc==+1 );..    
23e00 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70  r.aMem = &aMem[p
23e10 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20  Op->p3];.#ifdef 
23e20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
23e30 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d   { int i; for(i=
23e40 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69  0; i<r.nField; i
23e50 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ++) assert( memI
23e60 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69  sValid(&r.aMem[i
23e70 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20  ]) ); }.#endif. 
23e80 20 20 20 72 2e 65 71 53 65 65 6e 20 3d 20 30 3b     r.eqSeen = 0;
23e90 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
23ea0 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
23eb0 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72  cked(pC->uc.pCur
23ec0 73 6f 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26  sor, &r, 0, 0, &
23ed0 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63  res);.    if( rc
23ee0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
23ef0 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
23f00 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
23f10 20 20 7d 0a 20 20 20 20 69 66 28 20 65 71 4f 6e    }.    if( eqOn
23f20 6c 79 20 26 26 20 72 2e 65 71 53 65 65 6e 3d 3d  ly && r.eqSeen==
23f30 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
23f40 74 28 20 72 65 73 21 3d 30 20 29 3b 0a 20 20 20  t( res!=0 );.   
23f50 20 20 20 67 6f 74 6f 20 73 65 65 6b 5f 6e 6f 74     goto seek_not
23f60 5f 66 6f 75 6e 64 3b 0a 20 20 20 20 7d 0a 20 20  _found;.    }.  
23f70 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  }.#ifdef SQLITE_
23f80 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73  TEST.  sqlite3_s
23f90 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23  earch_count++;.#
23fa0 65 6e 64 69 66 0a 20 20 69 66 28 20 6f 63 3e 3d  endif.  if( oc>=
23fb0 4f 50 5f 53 65 65 6b 47 45 20 29 7b 20 20 61 73  OP_SeekGE ){  as
23fc0 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65  sert( oc==OP_See
23fd0 6b 47 45 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kGE || oc==OP_Se
23fe0 65 6b 47 54 20 29 3b 0a 20 20 20 20 69 66 28 20  ekGT );.    if( 
23ff0 72 65 73 3c 30 20 7c 7c 20 28 72 65 73 3d 3d 30  res<0 || (res==0
24000 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47   && oc==OP_SeekG
24010 54 29 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20  T) ){.      res 
24020 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  = 0;.      rc = 
24030 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74  sqlite3BtreeNext
24040 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
24050 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72   0);.      if( r
24060 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
24070 20 20 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d          if( rc==
24080 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a 20  SQLITE_DONE ){. 
24090 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51           rc = SQ
240a0 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 20  LITE_OK;.       
240b0 20 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 20 20     res = 1;.    
240c0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
240d0 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
240e0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
240f0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
24100 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
24110 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 7d 0a   res = 0;.    }.
24120 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
24130 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  ert( oc==OP_Seek
24140 4c 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65  LT || oc==OP_See
24150 6b 4c 45 20 29 3b 0a 20 20 20 20 69 66 28 20 72  kLE );.    if( r
24160 65 73 3e 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20  es>0 || (res==0 
24170 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54  && oc==OP_SeekLT
24180 29 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d  ) ){.      res =
24190 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   0;.      rc = s
241a0 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69  qlite3BtreePrevi
241b0 6f 75 73 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  ous(pC->uc.pCurs
241c0 6f 72 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66  or, 0);.      if
241d0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
241e0 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  ){.        if( r
241f0 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29  c==SQLITE_DONE )
24200 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d  {.          rc =
24210 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20   SQLITE_OK;.    
24220 20 20 20 20 20 20 72 65 73 20 3d 20 31 3b 0a 20        res = 1;. 
24230 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
24240 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
24250 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
24260 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
24270 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
24280 20 20 20 20 2f 2a 20 72 65 73 20 6d 69 67 68 74      /* res might
24290 20 62 65 20 6e 65 67 61 74 69 76 65 20 62 65 63   be negative bec
242a0 61 75 73 65 20 74 68 65 20 74 61 62 6c 65 20 69  ause the table i
242b0 73 20 65 6d 70 74 79 2e 20 20 43 68 65 63 6b 20  s empty.  Check 
242c0 74 6f 0a 20 20 20 20 20 20 2a 2a 20 73 65 65 20  to.      ** see 
242d0 69 66 20 74 68 69 73 20 69 73 20 74 68 65 20 63  if this is the c
242e0 61 73 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  ase..      */.  
242f0 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65      res = sqlite
24300 33 42 74 72 65 65 45 6f 66 28 70 43 2d 3e 75 63  3BtreeEof(pC->uc
24310 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d  .pCursor);.    }
24320 0a 20 20 7d 0a 73 65 65 6b 5f 6e 6f 74 5f 66 6f  .  }.seek_not_fo
24330 75 6e 64 3a 0a 20 20 61 73 73 65 72 74 28 20 70  und:.  assert( p
24340 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 56 64  Op->p2>0 );.  Vd
24350 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
24360 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72  s!=0,2);.  if( r
24370 65 73 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a  es ){.    goto j
24380 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c  ump_to_p2;.  }el
24390 73 65 20 69 66 28 20 65 71 4f 6e 6c 79 20 29 7b  se if( eqOnly ){
243a0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
243b0 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  [1].opcode==OP_I
243c0 64 78 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f  dxLT || pOp[1].o
243d0 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20  pcode==OP_IdxGT 
243e0 29 3b 0a 20 20 20 20 70 4f 70 2b 2b 3b 20 2f 2a  );.    pOp++; /*
243f0 20 53 6b 69 70 20 74 68 65 20 4f 50 5f 49 64 78   Skip the OP_Idx
24400 4c 74 20 6f 72 20 4f 50 5f 49 64 78 47 54 20 74  Lt or OP_IdxGT t
24410 68 61 74 20 66 6f 6c 6c 6f 77 73 20 2a 2f 0a 20  hat follows */. 
24420 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
24430 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 48 69  * Opcode: SeekHi
24440 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
24450 20 53 79 6e 6f 70 73 69 73 3a 20 73 65 65 6b 48   Synopsis: seekH
24460 69 74 3d 50 32 0a 2a 2a 0a 2a 2a 20 53 65 74 20  it=P2.**.** Set 
24470 74 68 65 20 73 65 65 6b 48 69 74 20 66 6c 61 67  the seekHit flag
24480 20 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 74 6f   on cursor P1 to
24490 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 50 32   the value in P2
244a0 2e 0a 2a 2a 20 54 68 65 20 73 65 65 6b 48 69 74  ..** The seekHit
244b0 20 66 6c 61 67 20 69 73 20 75 73 65 64 20 62 79   flag is used by
244c0 20 74 68 65 20 49 66 4e 6f 48 6f 70 65 20 6f 70   the IfNoHope op
244d0 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d  code..**.** P1 m
244e0 75 73 74 20 62 65 20 61 20 76 61 6c 69 64 20 62  ust be a valid b
244f0 2d 74 72 65 65 20 63 75 72 73 6f 72 2e 20 20 50  -tree cursor.  P
24500 32 20 6d 75 73 74 20 62 65 20 61 20 62 6f 6f 6c  2 must be a bool
24510 65 61 6e 20 76 61 6c 75 65 2c 0a 2a 2a 20 65 69  ean value,.** ei
24520 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2f 0a  ther 0 or 1..*/.
24530 63 61 73 65 20 4f 50 5f 53 65 65 6b 48 69 74 3a  case OP_SeekHit:
24540 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
24550 2a 70 43 3b 0a 20 20 61 73 73 65 72 74 28 20 70  *pC;.  assert( p
24560 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
24570 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
24580 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
24590 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
245a0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
245b0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
245c0 32 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d  2==0 || pOp->p2=
245d0 3d 31 20 29 3b 0a 20 20 70 43 2d 3e 73 65 65 6b  =1 );.  pC->seek
245e0 48 69 74 20 3d 20 70 4f 70 2d 3e 70 32 20 26 20  Hit = pOp->p2 & 
245f0 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  1;.  break;.}../
24600 2a 20 4f 70 63 6f 64 65 3a 20 46 6f 75 6e 64 20  * Opcode: Found 
24610 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
24620 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
24630 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66  [P3@P4].**.** If
24640 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69   P4==0 then regi
24650 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20  ster P3 holds a 
24660 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64  blob constructed
24670 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20   by MakeRecord. 
24680 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e   If.** P4>0 then
24690 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
246a0 74 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20  the first of P4 
246b0 72 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66  registers that f
246c0 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a  orm an unpacked.
246d0 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a  ** record..**.**
246e0 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e   Cursor P1 is on
246f0 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e   an index btree.
24700 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20    If the record 
24710 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33  identified by P3
24720 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 61 20   and P4.** is a 
24730 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65 6e  prefix of any en
24740 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20 61  try in P1 then a
24750 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f   jump is made to
24760 20 50 32 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73   P2 and.** P1 is
24770 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61   left pointing a
24780 74 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20 65  t the matching e
24790 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ntry..**.** This
247a0 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65   operation leave
247b0 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20  s the cursor in 
247c0 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74  a state where it
247d0 20 63 61 6e 20 62 65 0a 2a 2a 20 61 64 76 61 6e   can be.** advan
247e0 63 65 64 20 69 6e 20 74 68 65 20 66 6f 72 77 61  ced in the forwa
247f0 72 64 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 54  rd direction.  T
24800 68 65 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74  he Next instruct
24810 69 6f 6e 20 77 69 6c 6c 20 77 6f 72 6b 2c 0a 2a  ion will work,.*
24820 2a 20 62 75 74 20 6e 6f 74 20 74 68 65 20 50 72  * but not the Pr
24830 65 76 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ev instruction..
24840 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
24850 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66  NotFound, NoConf
24860 6c 69 63 74 2c 20 4e 6f 74 45 78 69 73 74 73 2e  lict, NotExists.
24870 20 53 65 65 6b 47 65 0a 2a 2f 0a 2f 2a 20 4f 70   SeekGe.*/./* Op
24880 63 6f 64 65 3a 20 4e 6f 74 46 6f 75 6e 64 20 50  code: NotFound P
24890 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
248a0 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
248b0 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20  P3@P4].**.** If 
248c0 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73  P4==0 then regis
248d0 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62  ter P3 holds a b
248e0 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20  lob constructed 
248f0 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20  by MakeRecord.  
24900 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20  If.** P4>0 then 
24910 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74  register P3 is t
24920 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72  he first of P4 r
24930 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f  egisters that fo
24940 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a  rm an unpacked.*
24950 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a  * record..** .**
24960 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e   Cursor P1 is on
24970 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e   an index btree.
24980 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20    If the record 
24990 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33  identified by P3
249a0 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 6e 6f   and P4.** is no
249b0 74 20 74 68 65 20 70 72 65 66 69 78 20 6f 66 20  t the prefix of 
249c0 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20  any entry in P1 
249d0 74 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d  then a jump is m
249e0 61 64 65 20 74 6f 20 50 32 2e 20 20 49 66 20 50  ade to P2.  If P
249f0 31 20 0a 2a 2a 20 64 6f 65 73 20 63 6f 6e 74 61  1 .** does conta
24a00 69 6e 20 61 6e 20 65 6e 74 72 79 20 77 68 6f 73  in an entry whos
24a10 65 20 70 72 65 66 69 78 20 6d 61 74 63 68 65 73  e prefix matches
24a20 20 74 68 65 20 50 33 2f 50 34 20 72 65 63 6f 72   the P3/P4 recor
24a30 64 20 74 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a  d then control.*
24a40 2a 20 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 20  * falls through 
24a50 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
24a60 72 75 63 74 69 6f 6e 20 61 6e 64 20 50 31 20 69  ruction and P1 i
24a70 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20  s left pointing 
24a80 61 74 20 74 68 65 0a 2a 2a 20 6d 61 74 63 68 69  at the.** matchi
24a90 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20  ng entry..**.** 
24aa0 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c  This operation l
24ab0 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
24ac0 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65 72   in a state wher
24ad0 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a  e it cannot be.*
24ae0 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20 65 69  * advanced in ei
24af0 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20  ther direction. 
24b00 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
24b10 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72   the Next and Pr
24b20 65 76 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f  ev.** opcodes do
24b30 20 6e 6f 74 20 77 6f 72 6b 20 61 66 74 65 72 20   not work after 
24b40 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a  this operation..
24b50 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
24b60 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73  Found, NotExists
24b70 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 49 66  , NoConflict, If
24b80 4e 6f 48 6f 70 65 0a 2a 2f 0a 2f 2a 20 4f 70 63  NoHope.*/./* Opc
24b90 6f 64 65 3a 20 49 66 4e 6f 48 6f 70 65 20 50 31  ode: IfNoHope P1
24ba0 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
24bb0 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
24bc0 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69  3@P4].**.** Regi
24bd0 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66  ster P3 is the f
24be0 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73  irst of P4 regis
24bf0 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61  ters that form a
24c00 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65  n unpacked.** re
24c10 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73  cord..**.** Curs
24c20 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69  or P1 is on an i
24c30 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20  ndex btree.  If 
24c40 74 68 65 20 73 65 65 6b 48 69 74 20 66 6c 61 67  the seekHit flag
24c50 20 69 73 20 73 65 74 20 6f 6e 20 50 31 2c 20 74   is set on P1, t
24c60 68 65 6e 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f  hen.** this opco
24c70 64 65 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 20 20  de is a no-op.  
24c80 42 75 74 20 69 66 20 74 68 65 20 73 65 65 6b 48  But if the seekH
24c90 69 74 20 66 6c 61 67 20 6f 66 20 50 31 20 69 73  it flag of P1 is
24ca0 20 63 6c 65 61 72 2c 20 74 68 65 6e 0a 2a 2a 20   clear, then.** 
24cb0 63 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20  check to see if 
24cc0 74 68 65 72 65 20 69 73 20 61 6e 79 20 65 6e 74  there is any ent
24cd0 72 79 20 69 6e 20 50 31 20 74 68 61 74 20 6d 61  ry in P1 that ma
24ce0 74 63 68 65 73 20 74 68 65 0a 2a 2a 20 70 72 65  tches the.** pre
24cf0 66 69 78 20 69 64 65 6e 74 69 66 69 65 64 20 62  fix identified b
24d00 79 20 50 33 20 61 6e 64 20 50 34 2e 20 20 49 66  y P3 and P4.  If
24d10 20 6e 6f 20 65 6e 74 72 79 20 6d 61 74 63 68 65   no entry matche
24d20 73 20 74 68 65 20 70 72 65 66 69 78 2c 0a 2a 2a  s the prefix,.**
24d30 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74   jump to P2.  Ot
24d40 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72  herwise fall thr
24d50 6f 75 67 68 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ough..**.** This
24d60 20 6f 70 63 6f 64 65 20 62 65 68 61 76 65 73 20   opcode behaves 
24d70 6c 69 6b 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64  like OP_NotFound
24d80 20 69 66 20 74 68 65 20 73 65 65 6b 48 69 74 0a   if the seekHit.
24d90 2a 2a 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72  ** flag is clear
24da0 20 61 6e 64 20 69 74 20 62 65 68 61 76 65 73 20   and it behaves 
24db0 6c 69 6b 65 20 4f 50 5f 4e 6f 6f 70 20 69 66 20  like OP_Noop if 
24dc0 74 68 65 20 73 65 65 6b 48 69 74 20 66 6c 61 67  the seekHit flag
24dd0 20 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 54   is set..**.** T
24de0 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73  his opcode is us
24df0 65 64 20 69 6e 20 49 4e 20 63 6c 61 75 73 65 20  ed in IN clause 
24e00 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 61  processing for a
24e10 20 6d 75 6c 74 69 2d 63 6f 6c 75 6d 6e 20 6b 65   multi-column ke
24e20 79 2e 0a 2a 2a 20 49 66 20 61 6e 20 49 4e 20 63  y..** If an IN c
24e30 6c 61 75 73 65 20 69 73 20 61 74 74 61 63 68 65  lause is attache
24e40 64 20 74 6f 20 61 6e 20 65 6c 65 6d 65 6e 74 20  d to an element 
24e50 6f 66 20 74 68 65 20 6b 65 79 20 6f 74 68 65 72  of the key other
24e60 20 74 68 61 6e 20 74 68 65 0a 2a 2a 20 6c 65 66   than the.** lef
24e70 74 2d 6d 6f 73 74 20 65 6c 65 6d 65 6e 74 2c 20  t-most element, 
24e80 61 6e 64 20 69 66 20 74 68 65 72 65 20 61 72 65  and if there are
24e90 20 6e 6f 20 6d 61 74 63 68 65 73 20 6f 6e 20 74   no matches on t
24ea0 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 0a 2a  he most recent.*
24eb0 2a 20 73 65 65 6b 20 6f 76 65 72 20 74 68 65 20  * seek over the 
24ec0 77 68 6f 6c 65 20 6b 65 79 2c 20 74 68 65 6e 20  whole key, then 
24ed0 69 74 20 6d 69 67 68 74 20 62 65 20 74 68 61 74  it might be that
24ee0 20 6f 6e 65 20 6f 66 20 74 68 65 20 6b 65 79 20   one of the key 
24ef0 65 6c 65 6d 65 6e 74 0a 2a 2a 20 74 6f 20 74 68  element.** to th
24f00 65 20 6c 65 66 74 20 69 73 20 70 72 6f 68 69 62  e left is prohib
24f10 69 74 69 6e 67 20 61 20 6d 61 74 63 68 2c 20 61  iting a match, a
24f20 6e 64 20 68 65 6e 63 65 20 74 68 65 72 65 20 69  nd hence there i
24f30 73 20 22 6e 6f 20 68 6f 70 65 22 20 6f 66 0a 2a  s "no hope" of.*
24f40 2a 20 61 6e 79 20 6d 61 74 63 68 20 72 65 67 61  * any match rega
24f50 72 64 6c 65 73 73 20 6f 66 20 68 6f 77 20 6d 61  rdless of how ma
24f60 6e 79 20 49 4e 20 63 6c 61 75 73 65 20 65 6c 65  ny IN clause ele
24f70 6d 65 6e 74 73 20 61 72 65 20 63 68 65 63 6b 65  ments are checke
24f80 64 2e 0a 2a 2a 20 49 6e 20 73 75 63 68 20 61 20  d..** In such a 
24f90 63 61 73 65 2c 20 77 65 20 61 62 61 6e 64 6f 6e  case, we abandon
24fa0 20 74 68 65 20 49 4e 20 63 6c 61 75 73 65 20 73   the IN clause s
24fb0 65 61 72 63 68 20 65 61 72 6c 79 2c 20 75 73 69  earch early, usi
24fc0 6e 67 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64  ng this.** opcod
24fd0 65 2e 20 20 54 68 65 20 6f 70 63 6f 64 65 20 6e  e.  The opcode n
24fe0 61 6d 65 20 63 6f 6d 65 73 20 66 72 6f 6d 20 74  ame comes from t
24ff0 68 65 20 66 61 63 74 20 74 68 61 74 20 74 68 65  he fact that the
25000 0a 2a 2a 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  .** jump is take
25010 6e 20 69 66 20 74 68 65 72 65 20 69 73 20 22 6e  n if there is "n
25020 6f 20 68 6f 70 65 22 20 6f 66 20 61 63 68 69 65  o hope" of achie
25030 76 69 6e 67 20 61 20 6d 61 74 63 68 2e 0a 2a 2a  ving a match..**
25040 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f  .** See also: No
25050 74 46 6f 75 6e 64 2c 20 53 65 65 6b 48 69 74 0a  tFound, SeekHit.
25060 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  */./* Opcode: No
25070 43 6f 6e 66 6c 69 63 74 20 50 31 20 50 32 20 50  Conflict P1 P2 P
25080 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
25090 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
250a0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20  .**.** If P4==0 
250b0 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
250c0 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f   holds a blob co
250d0 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b  nstructed by Mak
250e0 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20  eRecord.  If.** 
250f0 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74  P4>0 then regist
25100 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72  er P3 is the fir
25110 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  st of P4 registe
25120 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20  rs that form an 
25130 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f  unpacked.** reco
25140 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f  rd..** .** Curso
25150 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e  r P1 is on an in
25160 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74  dex btree.  If t
25170 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69  he record identi
25180 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50  fied by P3 and P
25190 34 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 6e  4.** contains an
251a0 79 20 4e 55 4c 4c 20 76 61 6c 75 65 2c 20 6a 75  y NULL value, ju
251b0 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
251c0 6f 20 50 32 2e 20 20 49 66 20 61 6c 6c 20 74 65  o P2.  If all te
251d0 72 6d 73 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65  rms of the.** re
251e0 63 6f 72 64 20 61 72 65 20 6e 6f 74 2d 4e 55 4c  cord are not-NUL
251f0 4c 20 74 68 65 6e 20 61 20 63 68 65 63 6b 20 69  L then a check i
25200 73 20 64 6f 6e 65 20 74 6f 20 64 65 74 65 72 6d  s done to determ
25210 69 6e 65 20 69 66 20 61 6e 79 20 72 6f 77 20 69  ine if any row i
25220 6e 20 74 68 65 0a 2a 2a 20 50 31 20 69 6e 64 65  n the.** P1 inde
25230 78 20 62 74 72 65 65 20 68 61 73 20 61 20 6d 61  x btree has a ma
25240 74 63 68 69 6e 67 20 6b 65 79 20 70 72 65 66 69  tching key prefi
25250 78 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65  x.  If there are
25260 20 6e 6f 20 6d 61 74 63 68 65 73 2c 20 6a 75 6d   no matches, jum
25270 70 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79  p.** immediately
25280 20 74 6f 20 50 32 2e 20 20 49 66 20 74 68 65 72   to P2.  If ther
25290 65 20 69 73 20 61 20 6d 61 74 63 68 2c 20 66 61  e is a match, fa
252a0 6c 6c 20 74 68 72 6f 75 67 68 20 61 6e 64 20 6c  ll through and l
252b0 65 61 76 65 20 74 68 65 20 50 31 0a 2a 2a 20 63  eave the P1.** c
252c0 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74  ursor pointing t
252d0 6f 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20 72  o the matching r
252e0 6f 77 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  ow..**.** This o
252f0 70 63 6f 64 65 20 69 73 20 73 69 6d 69 6c 61 72  pcode is similar
25300 20 74 6f 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20   to OP_NotFound 
25310 77 69 74 68 20 74 68 65 20 65 78 63 65 70 74 69  with the excepti
25320 6f 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20  ons that the.** 
25330 62 72 61 6e 63 68 20 69 73 20 61 6c 77 61 79 73  branch is always
25340 20 74 61 6b 65 6e 20 69 66 20 61 6e 79 20 70 61   taken if any pa
25350 72 74 20 6f 66 20 74 68 65 20 73 65 61 72 63 68  rt of the search
25360 20 6b 65 79 20 69 6e 70 75 74 20 69 73 20 4e 55   key input is NU
25370 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  LL..**.** This o
25380 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73 20  peration leaves 
25390 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20  the cursor in a 
253a0 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63  state where it c
253b0 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61 64 76 61  annot be.** adva
253c0 6e 63 65 64 20 69 6e 20 65 69 74 68 65 72 20 64  nced in either d
253d0 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74  irection.  In ot
253e0 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e  her words, the N
253f0 65 78 74 20 61 6e 64 20 50 72 65 76 0a 2a 2a 20  ext and Prev.** 
25400 6f 70 63 6f 64 65 73 20 64 6f 20 6e 6f 74 20 77  opcodes do not w
25410 6f 72 6b 20 61 66 74 65 72 20 74 68 69 73 20 6f  ork after this o
25420 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  peration..**.** 
25430 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75  See also: NotFou
25440 6e 64 2c 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78  nd, Found, NotEx
25450 69 73 74 73 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ists.*/.case OP_
25460 49 66 4e 6f 48 6f 70 65 3a 20 7b 20 20 20 20 20  IfNoHope: {     
25470 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
25480 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
25490 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
254a0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
254b0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
254c0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
254d0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
254e0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69  rt( pC!=0 );.  i
254f0 66 28 20 70 43 2d 3e 73 65 65 6b 48 69 74 20 29  f( pC->seekHit )
25500 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c   break;.  /* Fal
25510 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f  l through into O
25520 50 5f 4e 6f 74 46 6f 75 6e 64 20 2a 2f 0a 7d 0a  P_NotFound */.}.
25530 63 61 73 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69  case OP_NoConfli
25540 63 74 3a 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c  ct:     /* jump,
25550 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
25560 4e 6f 74 46 6f 75 6e 64 3a 20 20 20 20 20 20 20  NotFound:       
25570 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
25580 63 61 73 65 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b  case OP_Found: {
25590 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
255a0 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 61 6c   in3 */.  int al
255b0 72 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20 69  readyExists;.  i
255c0 6e 74 20 74 61 6b 65 4a 75 6d 70 3b 0a 20 20 69  nt takeJump;.  i
255d0 6e 74 20 69 69 3b 0a 20 20 56 64 62 65 43 75 72  nt ii;.  VdbeCur
255e0 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72  sor *pC;.  int r
255f0 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  es;.  UnpackedRe
25600 63 6f 72 64 20 2a 70 46 72 65 65 3b 0a 20 20 55  cord *pFree;.  U
25610 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 2a 70  npackedRecord *p
25620 49 64 78 4b 65 79 3b 0a 20 20 55 6e 70 61 63 6b  IdxKey;.  Unpack
25630 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 23 69 66  edRecord r;..#if
25640 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
25650 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
25660 65 21 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74  e!=OP_NoConflict
25670 20 29 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64   ) sqlite3_found
25680 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66  _count++;.#endif
25690 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
256a0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
256b0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
256c0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
256d0 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
256e0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
256f0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
25700 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
25710 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
25720 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70  BUG.  pC->seekOp
25730 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a   = pOp->opcode;.
25740 23 65 6e 64 69 66 0a 20 20 70 49 6e 33 20 3d 20  #endif.  pIn3 = 
25750 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
25760 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
25770 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
25780 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72  BTREE );.  asser
25790 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  t( pC->uc.pCurso
257a0 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r!=0 );.  assert
257b0 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  ( pC->isTable==0
257c0 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   );.  if( pOp->p
257d0 34 2e 69 3e 30 20 29 7b 0a 20 20 20 20 72 2e 70  4.i>0 ){.    r.p
257e0 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b  KeyInfo = pC->pK
257f0 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46  eyInfo;.    r.nF
25800 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d  ield = (u16)pOp-
25810 3e 70 34 2e 69 3b 0a 20 20 20 20 72 2e 61 4d 65  >p4.i;.    r.aMe
25820 6d 20 3d 20 70 49 6e 33 3b 0a 23 69 66 64 65 66  m = pIn3;.#ifdef
25830 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
25840 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 72    for(ii=0; ii<r
25850 2e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a  .nField; ii++){.
25860 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
25870 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d  mIsValid(&r.aMem
25880 5b 69 69 5d 29 20 29 3b 0a 20 20 20 20 20 20 61  [ii]) );.      a
25890 73 73 65 72 74 28 20 28 72 2e 61 4d 65 6d 5b 69  ssert( (r.aMem[i
258a0 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a  i].flags & MEM_Z
258b0 65 72 6f 29 3d 3d 30 20 7c 7c 20 72 2e 61 4d 65  ero)==0 || r.aMe
258c0 6d 5b 69 69 5d 2e 6e 3d 3d 30 20 29 3b 0a 20 20  m[ii].n==0 );.  
258d0 20 20 20 20 69 66 28 20 69 69 20 29 20 52 45 47      if( ii ) REG
258e0 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
258f0 3e 70 33 2b 69 69 2c 20 26 72 2e 61 4d 65 6d 5b  >p3+ii, &r.aMem[
25900 69 69 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  ii]);.    }.#end
25910 69 66 0a 20 20 20 20 70 49 64 78 4b 65 79 20 3d  if.    pIdxKey =
25920 20 26 72 3b 0a 20 20 20 20 70 46 72 65 65 20 3d   &r;.    pFree =
25930 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   0;.  }else{.   
25940 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
25950 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20  lags & MEM_Blob 
25960 29 3b 0a 20 20 20 20 72 63 20 3d 20 45 78 70 61  );.    rc = Expa
25970 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20  ndBlob(pIn3);.  
25980 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
25990 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53  LITE_OK || rc==S
259a0 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 3b 0a 20  QLITE_NOMEM );. 
259b0 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f     if( rc ) goto
259c0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 70 46 72   no_mem;.    pFr
259d0 65 65 20 3d 20 70 49 64 78 4b 65 79 20 3d 20 73  ee = pIdxKey = s
259e0 71 6c 69 74 65 33 56 64 62 65 41 6c 6c 6f 63 55  qlite3VdbeAllocU
259f0 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 28 70 43  npackedRecord(pC
25a00 2d 3e 70 4b 65 79 49 6e 66 6f 29 3b 0a 20 20 20  ->pKeyInfo);.   
25a10 20 69 66 28 20 70 49 64 78 4b 65 79 3d 3d 30 20   if( pIdxKey==0 
25a20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
25a30 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 52 65     sqlite3VdbeRe
25a40 63 6f 72 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70  cordUnpack(pC->p
25a50 4b 65 79 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e  KeyInfo, pIn3->n
25a60 2c 20 70 49 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b  , pIn3->z, pIdxK
25a70 65 79 29 3b 0a 20 20 7d 0a 20 20 70 49 64 78 4b  ey);.  }.  pIdxK
25a80 65 79 2d 3e 64 65 66 61 75 6c 74 5f 72 63 20 3d  ey->default_rc =
25a90 20 30 3b 0a 20 20 74 61 6b 65 4a 75 6d 70 20 3d   0;.  takeJump =
25aa0 20 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f   0;.  if( pOp->o
25ab0 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 43 6f 6e 66  pcode==OP_NoConf
25ac0 6c 69 63 74 20 29 7b 0a 20 20 20 20 2f 2a 20 46  lict ){.    /* F
25ad0 6f 72 20 74 68 65 20 4f 50 5f 4e 6f 43 6f 6e 66  or the OP_NoConf
25ae0 6c 69 63 74 20 6f 70 63 6f 64 65 2c 20 74 61 6b  lict opcode, tak
25af0 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e  e the jump if an
25b00 79 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20  y of the.    ** 
25b10 69 6e 70 75 74 20 66 69 65 6c 64 73 20 61 72 65  input fields are
25b20 20 4e 55 4c 4c 2c 20 73 69 6e 63 65 20 61 6e 79   NULL, since any
25b30 20 6b 65 79 20 77 69 74 68 20 61 20 4e 55 4c 4c   key with a NULL
25b40 20 77 69 6c 6c 20 6e 6f 74 0a 20 20 20 20 2a 2a   will not.    **
25b50 20 63 6f 6e 66 6c 69 63 74 20 2a 2f 0a 20 20 20   conflict */.   
25b60 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 70 49   for(ii=0; ii<pI
25b70 64 78 4b 65 79 2d 3e 6e 46 69 65 6c 64 3b 20 69  dxKey->nField; i
25b80 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20  i++){.      if( 
25b90 70 49 64 78 4b 65 79 2d 3e 61 4d 65 6d 5b 69 69  pIdxKey->aMem[ii
25ba0 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ].flags & MEM_Nu
25bb0 6c 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 74 61  ll ){.        ta
25bc0 6b 65 4a 75 6d 70 20 3d 20 31 3b 0a 20 20 20 20  keJump = 1;.    
25bd0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
25be0 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72   }.    }.  }.  r
25bf0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
25c00 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
25c10 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 70  C->uc.pCursor, p
25c20 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72  IdxKey, 0, 0, &r
25c30 65 73 29 3b 0a 20 20 69 66 28 20 70 46 72 65 65  es);.  if( pFree
25c40 20 29 20 73 71 6c 69 74 65 33 44 62 46 72 65 65   ) sqlite3DbFree
25c50 4e 4e 28 64 62 2c 20 70 46 72 65 65 29 3b 0a 20  NN(db, pFree);. 
25c60 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
25c70 4f 4b 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 61  OK ){.    goto a
25c80 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
25c90 72 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 73 65 65  r;.  }.  pC->see
25ca0 6b 52 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20  kResult = res;. 
25cb0 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d   alreadyExists =
25cc0 20 28 72 65 73 3d 3d 30 29 3b 0a 20 20 70 43 2d   (res==0);.  pC-
25cd0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 2d 61 6c 72  >nullRow = 1-alr
25ce0 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20 70 43  eadyExists;.  pC
25cf0 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
25d00 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
25d10 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
25d20 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 4f 70  STALE;.  if( pOp
25d30 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75  ->opcode==OP_Fou
25d40 6e 64 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72  nd ){.    VdbeBr
25d50 61 6e 63 68 54 61 6b 65 6e 28 61 6c 72 65 61 64  anchTaken(alread
25d60 79 45 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20  yExists!=0,2);. 
25d70 20 20 20 69 66 28 20 61 6c 72 65 61 64 79 45 78     if( alreadyEx
25d80 69 73 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70  ists ) goto jump
25d90 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b  _to_p2;.  }else{
25da0 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
25db0 61 6b 65 6e 28 74 61 6b 65 4a 75 6d 70 7c 7c 61  aken(takeJump||a
25dc0 6c 72 65 61 64 79 45 78 69 73 74 73 3d 3d 30 2c  lreadyExists==0,
25dd0 32 29 3b 0a 20 20 20 20 69 66 28 20 74 61 6b 65  2);.    if( take
25de0 4a 75 6d 70 20 7c 7c 20 21 61 6c 72 65 61 64 79  Jump || !already
25df0 45 78 69 73 74 73 20 29 20 67 6f 74 6f 20 6a 75  Exists ) goto ju
25e00 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
25e10 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
25e20 6f 64 65 3a 20 53 65 65 6b 52 6f 77 69 64 20 50  ode: SeekRowid P
25e30 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
25e40 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d  ynopsis: intkey=
25e50 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69  r[P3].**.** P1 i
25e60 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61  s the index of a
25e70 20 63 75 72 73 6f 72 20 6f 70 65 6e 20 6f 6e 20   cursor open on 
25e80 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 62 74 72  an SQL table btr
25e90 65 65 20 28 77 69 74 68 20 69 6e 74 65 67 65 72  ee (with integer
25ea0 0a 2a 2a 20 6b 65 79 73 29 2e 20 20 49 66 20 72  .** keys).  If r
25eb0 65 67 69 73 74 65 72 20 50 33 20 64 6f 65 73 20  egister P3 does 
25ec0 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69  not contain an i
25ed0 6e 74 65 67 65 72 20 6f 72 20 69 66 20 50 31 20  nteger or if P1 
25ee0 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63 6f 6e 74  does not.** cont
25ef0 61 69 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74  ain a record wit
25f00 68 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20  h rowid P3 then 
25f10 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
25f20 20 74 6f 20 50 32 2e 20 20 0a 2a 2a 20 4f 72 2c   to P2.  .** Or,
25f30 20 69 66 20 50 32 20 69 73 20 30 2c 20 72 61 69   if P2 is 0, rai
25f40 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 43 4f 52  se an SQLITE_COR
25f50 52 55 50 54 20 65 72 72 6f 72 2e 20 49 66 20 50  RUPT error. If P
25f60 31 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 0a 2a  1 does contain.*
25f70 2a 20 61 20 72 65 63 6f 72 64 20 77 69 74 68 20  * a record with 
25f80 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20 0a 2a  rowid P3 then .*
25f90 2a 20 6c 65 61 76 65 20 74 68 65 20 63 75 72 73  * leave the curs
25fa0 6f 72 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74  or pointing at t
25fb0 68 61 74 20 72 65 63 6f 72 64 20 61 6e 64 20 66  hat record and f
25fc0 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
25fd0 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72  he next.** instr
25fe0 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  uction..**.** Th
25ff0 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f  e OP_NotExists o
26000 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74  pcode performs t
26010 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f  he same operatio
26020 6e 2c 20 62 75 74 20 77 69 74 68 20 4f 50 5f 4e  n, but with OP_N
26030 6f 74 45 78 69 73 74 73 0a 2a 2a 20 74 68 65 20  otExists.** the 
26040 50 33 20 72 65 67 69 73 74 65 72 20 6d 75 73 74  P3 register must
26050 20 62 65 20 67 75 61 72 61 6e 74 65 65 64 20 74   be guaranteed t
26060 6f 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  o contain an int
26070 65 67 65 72 20 76 61 6c 75 65 2e 20 20 57 69 74  eger value.  Wit
26080 68 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65  h this.** opcode
26090 2c 20 72 65 67 69 73 74 65 72 20 50 33 20 6d 69  , register P3 mi
260a0 67 68 74 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20  ght not contain 
260b0 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a  an integer..**.*
260c0 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e  * The OP_NotFoun
260d0 64 20 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d  d opcode perform
260e0 73 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61  s the same opera
260f0 74 69 6f 6e 20 6f 6e 20 69 6e 64 65 78 20 62 74  tion on index bt
26100 72 65 65 73 0a 2a 2a 20 28 77 69 74 68 20 61 72  rees.** (with ar
26110 62 69 74 72 61 72 79 20 6d 75 6c 74 69 2d 76 61  bitrary multi-va
26120 6c 75 65 20 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a  lue keys)..**.**
26130 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
26140 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 69  ves the cursor i
26150 6e 20 61 20 73 74 61 74 65 20 77 68 65 72 65 20  n a state where 
26160 69 74 20 63 61 6e 6e 6f 74 20 62 65 20 61 64 76  it cannot be adv
26170 61 6e 63 65 64 0a 2a 2a 20 69 6e 20 65 69 74 68  anced.** in eith
26180 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49  er direction.  I
26190 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
261a0 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76  he Next and Prev
261b0 20 6f 70 63 6f 64 65 73 20 77 69 6c 6c 0a 2a 2a   opcodes will.**
261c0 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 6c 6c 6f 77   not work follow
261d0 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e  ing this opcode.
261e0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
261f0 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
26200 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 53 65  , NoConflict, Se
26210 65 6b 52 6f 77 69 64 0a 2a 2f 0a 2f 2a 20 4f 70  ekRowid.*/./* Op
26220 63 6f 64 65 3a 20 4e 6f 74 45 78 69 73 74 73 20  code: NotExists 
26230 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
26240 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79  Synopsis: intkey
26250 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20  =r[P3].**.** P1 
26260 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  is the index of 
26270 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 20 6f 6e  a cursor open on
26280 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 62 74   an SQL table bt
26290 72 65 65 20 28 77 69 74 68 20 69 6e 74 65 67 65  ree (with intege
262a0 72 0a 2a 2a 20 6b 65 79 73 29 2e 20 20 50 33 20  r.** keys).  P3 
262b0 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 72 6f  is an integer ro
262c0 77 69 64 2e 20 20 49 66 20 50 31 20 64 6f 65 73  wid.  If P1 does
262d0 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 20 72   not contain a r
262e0 65 63 6f 72 64 20 77 69 74 68 0a 2a 2a 20 72 6f  ecord with.** ro
262f0 77 69 64 20 50 33 20 74 68 65 6e 20 6a 75 6d 70  wid P3 then jump
26300 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
26310 50 32 2e 20 20 4f 72 2c 20 69 66 20 50 32 20 69  P2.  Or, if P2 i
26320 73 20 30 2c 20 72 61 69 73 65 20 61 6e 0a 2a 2a  s 0, raise an.**
26330 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20   SQLITE_CORRUPT 
26340 65 72 72 6f 72 2e 20 49 66 20 50 31 20 64 6f 65  error. If P1 doe
26350 73 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f  s contain a reco
26360 72 64 20 77 69 74 68 20 72 6f 77 69 64 20 50 33  rd with rowid P3
26370 20 74 68 65 6e 20 0a 2a 2a 20 6c 65 61 76 65 20   then .** leave 
26380 74 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74  the cursor point
26390 69 6e 67 20 61 74 20 74 68 61 74 20 72 65 63 6f  ing at that reco
263a0 72 64 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f  rd and fall thro
263b0 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 0a  ugh to the next.
263c0 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ** instruction..
263d0 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 53 65 65  **.** The OP_See
263e0 6b 52 6f 77 69 64 20 6f 70 63 6f 64 65 20 70 65  kRowid opcode pe
263f0 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20  rforms the same 
26400 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20 61 6c  operation but al
26410 73 6f 20 61 6c 6c 6f 77 73 20 74 68 65 0a 2a 2a  so allows the.**
26420 20 50 33 20 72 65 67 69 73 74 65 72 20 74 6f 20   P3 register to 
26430 63 6f 6e 74 61 69 6e 20 61 20 6e 6f 6e 2d 69 6e  contain a non-in
26440 74 65 67 65 72 20 76 61 6c 75 65 2c 20 69 6e 20  teger value, in 
26450 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20 6a  which case the j
26460 75 6d 70 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73  ump is.** always
26470 20 74 61 6b 65 6e 2e 20 20 54 68 69 73 20 6f 70   taken.  This op
26480 63 6f 64 65 20 72 65 71 75 69 72 65 73 20 74 68  code requires th
26490 61 74 20 50 33 20 61 6c 77 61 79 73 20 63 6f 6e  at P3 always con
264a0 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e  tain an integer.
264b0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f  .**.** The OP_No
264c0 74 46 6f 75 6e 64 20 6f 70 63 6f 64 65 20 70 65  tFound opcode pe
264d0 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20  rforms the same 
264e0 6f 70 65 72 61 74 69 6f 6e 20 6f 6e 20 69 6e 64  operation on ind
264f0 65 78 20 62 74 72 65 65 73 0a 2a 2a 20 28 77 69  ex btrees.** (wi
26500 74 68 20 61 72 62 69 74 72 61 72 79 20 6d 75 6c  th arbitrary mul
26510 74 69 2d 76 61 6c 75 65 20 6b 65 79 73 29 2e 0a  ti-value keys)..
26520 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
26530 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  e leaves the cur
26540 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77  sor in a state w
26550 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62  here it cannot b
26560 65 20 61 64 76 61 6e 63 65 64 0a 2a 2a 20 69 6e  e advanced.** in
26570 20 65 69 74 68 65 72 20 64 69 72 65 63 74 69 6f   either directio
26580 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  n.  In other wor
26590 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64  ds, the Next and
265a0 20 50 72 65 76 20 6f 70 63 6f 64 65 73 20 77 69   Prev opcodes wi
265b0 6c 6c 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20 66  ll.** not work f
265c0 6f 6c 6c 6f 77 69 6e 67 20 74 68 69 73 20 6f 70  ollowing this op
265d0 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  code..**.** See 
265e0 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
265f0 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63  Found, NoConflic
26600 74 2c 20 53 65 65 6b 52 6f 77 69 64 0a 2a 2f 0a  t, SeekRowid.*/.
26610 63 61 73 65 20 4f 50 5f 53 65 65 6b 52 6f 77 69  case OP_SeekRowi
26620 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  d: {        /* j
26630 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64  ump, in3 */.  Vd
26640 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
26650 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
26660 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 75 36  .  int res;.  u6
26670 34 20 69 4b 65 79 3b 0a 0a 20 20 70 49 6e 33 20  4 iKey;..  pIn3 
26680 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
26690 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 49  ;.  testcase( pI
266a0 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
266b0 49 6e 74 20 29 3b 0a 20 20 74 65 73 74 63 61 73  Int );.  testcas
266c0 65 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  e( pIn3->flags &
266d0 20 4d 45 4d 5f 49 6e 74 52 65 61 6c 20 29 3b 0a   MEM_IntReal );.
266e0 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61    if( (pIn3->fla
266f0 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  gs & (MEM_Int|ME
26700 4d 5f 49 6e 74 52 65 61 6c 29 29 3d 3d 30 20 29  M_IntReal))==0 )
26710 7b 0a 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75  {.    /* Make su
26720 72 65 20 70 49 6e 33 2d 3e 75 2e 69 20 63 6f 6e  re pIn3->u.i con
26730 74 61 69 6e 73 20 61 20 76 61 6c 69 64 20 69 6e  tains a valid in
26740 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
26750 74 69 6f 6e 20 6f 66 0a 20 20 20 20 2a 2a 20 74  tion of.    ** t
26760 68 65 20 6b 65 79 20 76 61 6c 75 65 2c 20 62 75  he key value, bu
26770 74 20 64 6f 20 6e 6f 74 20 63 68 61 6e 67 65 20  t do not change 
26780 74 68 65 20 64 61 74 61 74 79 70 65 20 6f 66 20  the datatype of 
26790 74 68 65 20 72 65 67 69 73 74 65 72 2c 20 61 73  the register, as
267a0 0a 20 20 20 20 2a 2a 20 6f 74 68 65 72 20 70 61  .    ** other pa
267b0 72 74 73 20 6f 66 20 74 68 65 20 70 65 72 70 61  rts of the perpa
267c0 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 6d 69  red statement mi
267d0 67 68 74 20 62 65 20 64 65 70 65 6e 64 69 6e 67  ght be depending
267e0 20 6f 6e 20 74 68 65 0a 20 20 20 20 2a 2a 20 63   on the.    ** c
267f0 75 72 72 65 6e 74 20 64 61 74 61 74 79 70 65 2e  urrent datatype.
26800 20 2a 2f 0a 20 20 20 20 75 31 36 20 6f 72 69 67   */.    u16 orig
26810 46 6c 61 67 73 20 3d 20 70 49 6e 33 2d 3e 66 6c  Flags = pIn3->fl
26820 61 67 73 3b 0a 20 20 20 20 69 6e 74 20 69 73 4e  ags;.    int isN
26830 6f 74 49 6e 74 3b 0a 20 20 20 20 61 70 70 6c 79  otInt;.    apply
26840 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 20 53  Affinity(pIn3, S
26850 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
26860 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  C, encoding);.  
26870 20 20 69 73 4e 6f 74 49 6e 74 20 3d 20 28 70 49    isNotInt = (pI
26880 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
26890 49 6e 74 29 3d 3d 30 3b 0a 20 20 20 20 70 49 6e  Int)==0;.    pIn
268a0 33 2d 3e 66 6c 61 67 73 20 3d 20 6f 72 69 67 46  3->flags = origF
268b0 6c 61 67 73 3b 0a 20 20 20 20 69 66 28 20 69 73  lags;.    if( is
268c0 4e 6f 74 49 6e 74 20 29 20 67 6f 74 6f 20 6a 75  NotInt ) goto ju
268d0 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
268e0 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
268f0 69 6e 74 6f 20 4f 50 5f 4e 6f 74 45 78 69 73 74  into OP_NotExist
26900 73 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74  s */.case OP_Not
26910 45 78 69 73 74 73 3a 20 20 20 20 20 20 20 20 20  Exists:         
26920 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
26930 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
26940 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65  pOp->p3];.  asse
26950 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  rt( (pIn3->flags
26960 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 7c   & MEM_Int)!=0 |
26970 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
26980 50 5f 53 65 65 6b 52 6f 77 69 64 20 29 3b 0a 20  P_SeekRowid );. 
26990 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
269a0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
269b0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
269c0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
269d0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
269e0 20 70 43 21 3d 30 20 29 3b 0a 23 69 66 64 65 66   pC!=0 );.#ifdef
269f0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
26a00 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
26a10 3d 4f 50 5f 53 65 65 6b 52 6f 77 69 64 20 29 20  =OP_SeekRowid ) 
26a20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f  pC->seekOp = OP_
26a30 53 65 65 6b 52 6f 77 69 64 3b 0a 23 65 6e 64 69  SeekRowid;.#endi
26a40 66 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  f.  assert( pC->
26a50 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73  isTable );.  ass
26a60 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
26a70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
26a80 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43   );.  pCrsr = pC
26a90 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20  ->uc.pCursor;.  
26aa0 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30  assert( pCrsr!=0
26ab0 20 29 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20   );.  res = 0;. 
26ac0 20 69 4b 65 79 20 3d 20 70 49 6e 33 2d 3e 75 2e   iKey = pIn3->u.
26ad0 69 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  i;.  rc = sqlite
26ae0 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
26af0 63 6b 65 64 28 70 43 72 73 72 2c 20 30 2c 20 69  cked(pCrsr, 0, i
26b00 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20  Key, 0, &res);. 
26b10 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
26b20 49 54 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30  ITE_OK || res==0
26b30 20 29 3b 0a 20 20 70 43 2d 3e 6d 6f 76 65 74 6f   );.  pC->moveto
26b40 54 61 72 67 65 74 20 3d 20 69 4b 65 79 3b 20 20  Target = iKey;  
26b50 2f 2a 20 55 73 65 64 20 62 79 20 4f 50 5f 44 65  /* Used by OP_De
26b60 6c 65 74 65 20 2a 2f 0a 20 20 70 43 2d 3e 6e 75  lete */.  pC->nu
26b70 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 70 43 2d  llRow = 0;.  pC-
26b80 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
26b90 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43  ACHE_STALE;.  pC
26ba0 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
26bb0 20 3d 20 30 3b 0a 20 20 56 64 62 65 42 72 61 6e   = 0;.  VdbeBran
26bc0 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32  chTaken(res!=0,2
26bd0 29 3b 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73  );.  pC->seekRes
26be0 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 69 66 28  ult = res;.  if(
26bf0 20 72 65 73 21 3d 30 20 29 7b 0a 20 20 20 20 61   res!=0 ){.    a
26c00 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
26c10 45 5f 4f 4b 20 29 3b 0a 20 20 20 20 69 66 28 20  E_OK );.    if( 
26c20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20  pOp->p2==0 ){.  
26c30 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
26c40 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20  CORRUPT_BKPT;.  
26c50 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 67    }else{.      g
26c60 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
26c70 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20      }.  }.  if( 
26c80 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
26c90 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
26ca0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
26cb0 6f 64 65 3a 20 53 65 71 75 65 6e 63 65 20 50 31  ode: Sequence P1
26cc0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
26cd0 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 63 75 72  opsis: r[P2]=cur
26ce0 73 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b 0a 2a 2a  sor[P1].ctr++.**
26cf0 0a 2a 2a 20 46 69 6e 64 20 74 68 65 20 6e 65 78  .** Find the nex
26d00 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65 71 75  t available sequ
26d10 65 6e 63 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  ence number for 
26d20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72  cursor P1..** Wr
26d30 69 74 65 20 74 68 65 20 73 65 71 75 65 6e 63 65  ite the sequence
26d40 20 6e 75 6d 62 65 72 20 69 6e 74 6f 20 72 65 67   number into reg
26d50 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65  ister P2..** The
26d60 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72   sequence number
26d70 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69   on the cursor i
26d80 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 66  s incremented af
26d90 74 65 72 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74  ter this.** inst
26da0 72 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61  ruction.  .*/.ca
26db0 73 65 20 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20  se OP_Sequence: 
26dc0 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
26dd0 75 74 32 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ut2 */.  assert(
26de0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
26df0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
26e00 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
26e10 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
26e20 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
26e30 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
26e40 31 5d 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55  1]->eCurType!=CU
26e50 52 54 59 50 45 5f 56 54 41 42 20 29 3b 0a 20 20  RTYPE_VTAB );.  
26e60 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
26e70 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
26e80 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e   pOut->u.i = p->
26e90 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e  apCsr[pOp->p1]->
26ea0 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20 62 72  seqCount++;.  br
26eb0 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f  eak;.}.../* Opco
26ec0 64 65 3a 20 4e 65 77 52 6f 77 69 64 20 50 31 20  de: NewRowid P1 
26ed0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
26ee0 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77  opsis: r[P2]=row
26ef0 69 64 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61 20 6e  id.**.** Get a n
26f00 65 77 20 69 6e 74 65 67 65 72 20 72 65 63 6f 72  ew integer recor
26f10 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b 2e 61 20  d number (a.k.a 
26f20 22 72 6f 77 69 64 22 29 20 75 73 65 64 20 61 73  "rowid") used as
26f30 20 74 68 65 20 6b 65 79 20 74 6f 20 61 20 74 61   the key to a ta
26f40 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 65 63 6f  ble..** The reco
26f50 72 64 20 6e 75 6d 62 65 72 20 69 73 20 6e 6f 74  rd number is not
26f60 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64   previously used
26f70 20 61 73 20 61 20 6b 65 79 20 69 6e 20 74 68 65   as a key in the
26f80 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 74 61 62   database.** tab
26f90 6c 65 20 74 68 61 74 20 63 75 72 73 6f 72 20 50  le that cursor P
26fa0 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 54 68  1 points to.  Th
26fb0 65 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d  e new record num
26fc0 62 65 72 20 69 73 20 77 72 69 74 74 65 6e 0a 2a  ber is written.*
26fd0 2a 20 77 72 69 74 74 65 6e 20 74 6f 20 72 65 67  * written to reg
26fe0 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
26ff0 49 66 20 50 33 3e 30 20 74 68 65 6e 20 50 33 20  If P3>0 then P3 
27000 69 73 20 61 20 72 65 67 69 73 74 65 72 20 69 6e  is a register in
27010 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20   the root frame 
27020 6f 66 20 74 68 69 73 20 56 44 42 45 20 74 68 61  of this VDBE tha
27030 74 20 68 6f 6c 64 73 20 0a 2a 2a 20 74 68 65 20  t holds .** the 
27040 6c 61 72 67 65 73 74 20 70 72 65 76 69 6f 75 73  largest previous
27050 6c 79 20 67 65 6e 65 72 61 74 65 64 20 72 65 63  ly generated rec
27060 6f 72 64 20 6e 75 6d 62 65 72 2e 20 4e 6f 20 6e  ord number. No n
27070 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  ew record number
27080 73 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f 77 65 64  s are.** allowed
27090 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e   to be less than
270a0 20 74 68 69 73 20 76 61 6c 75 65 2e 20 57 68 65   this value. Whe
270b0 6e 20 74 68 69 73 20 76 61 6c 75 65 20 72 65 61  n this value rea
270c0 63 68 65 73 20 69 74 73 20 6d 61 78 69 6d 75 6d  ches its maximum
270d0 2c 20 0a 2a 2a 20 61 6e 20 53 51 4c 49 54 45 5f  , .** an SQLITE_
270e0 46 55 4c 4c 20 65 72 72 6f 72 20 69 73 20 67 65  FULL error is ge
270f0 6e 65 72 61 74 65 64 2e 20 54 68 65 20 50 33 20  nerated. The P3 
27100 72 65 67 69 73 74 65 72 20 69 73 20 75 70 64 61  register is upda
27110 74 65 64 20 77 69 74 68 20 74 68 65 20 27 0a 2a  ted with the '.*
27120 2a 20 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f  * generated reco
27130 72 64 20 6e 75 6d 62 65 72 2e 20 54 68 69 73 20  rd number. This 
27140 50 33 20 6d 65 63 68 61 6e 69 73 6d 20 69 73 20  P3 mechanism is 
27150 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69 6d 70  used to help imp
27160 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 41 55  lement the.** AU
27170 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65 61 74  TOINCREMENT feat
27180 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ure..*/.case OP_
27190 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20 20 20 20  NewRowid: {     
271a0 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
271b0 0a 20 20 69 36 34 20 76 3b 20 20 20 20 20 20 20  .  i64 v;       
271c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
271d0 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20   new rowid */.  
271e0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20  VdbeCursor *pC; 
271f0 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72         /* Cursor
27200 20 6f 66 20 74 61 62 6c 65 20 74 6f 20 67 65 74   of table to get
27210 20 74 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a   the new rowid *
27220 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20  /.  int res;    
27230 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
27240 73 75 6c 74 20 6f 66 20 61 6e 20 73 71 6c 69 74  sult of an sqlit
27250 65 33 42 74 72 65 65 4c 61 73 74 28 29 20 2a 2f  e3BtreeLast() */
27260 0a 20 20 69 6e 74 20 63 6e 74 3b 20 20 20 20 20  .  int cnt;     
27270 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75            /* Cou
27280 6e 74 65 72 20 74 6f 20 6c 69 6d 69 74 20 74 68  nter to limit th
27290 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 65 61 72  e number of sear
272a0 63 68 65 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ches */.  Mem *p
272b0 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
272c0 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c   /* Register hol
272d0 64 69 6e 67 20 6c 61 72 67 65 73 74 20 72 6f 77  ding largest row
272e0 69 64 20 66 6f 72 20 41 55 54 4f 49 4e 43 52 45  id for AUTOINCRE
272f0 4d 45 4e 54 20 2a 2f 0a 20 20 56 64 62 65 46 72  MENT */.  VdbeFr
27300 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20 20  ame *pFrame;    
27310 20 2f 2a 20 52 6f 6f 74 20 66 72 61 6d 65 20 6f   /* Root frame o
27320 66 20 56 44 42 45 20 2a 2f 0a 0a 20 20 76 20 3d  f VDBE */..  v =
27330 20 30 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20   0;.  res = 0;. 
27340 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
27350 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
27360 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
27370 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
27380 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
27390 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
273a0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
273b0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
273c0 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
273d0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
273e0 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
273f0 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61  YPE_BTREE );.  a
27400 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43  ssert( pC->uc.pC
27410 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 7b 0a  ursor!=0 );.  {.
27420 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20      /* The next 
27430 72 6f 77 69 64 20 6f 72 20 72 65 63 6f 72 64 20  rowid or record 
27440 6e 75 6d 62 65 72 20 28 64 69 66 66 65 72 65 6e  number (differen
27450 74 20 74 65 72 6d 73 20 66 6f 72 20 74 68 65 20  t terms for the 
27460 73 61 6d 65 0a 20 20 20 20 2a 2a 20 74 68 69 6e  same.    ** thin
27470 67 29 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69  g) is obtained i
27480 6e 20 61 20 74 77 6f 2d 73 74 65 70 20 61 6c 67  n a two-step alg
27490 6f 72 69 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20  orithm..    **. 
274a0 20 20 20 2a 2a 20 46 69 72 73 74 20 77 65 20 61     ** First we a
274b0 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64 20 74  ttempt to find t
274c0 68 65 20 6c 61 72 67 65 73 74 20 65 78 69 73 74  he largest exist
274d0 69 6e 67 20 72 6f 77 69 64 20 61 6e 64 20 61 64  ing rowid and ad
274e0 64 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 74 6f 20  d one.    ** to 
274f0 74 68 61 74 2e 20 20 42 75 74 20 69 66 20 74 68  that.  But if th
27500 65 20 6c 61 72 67 65 73 74 20 65 78 69 73 74 69  e largest existi
27510 6e 67 20 72 6f 77 69 64 20 69 73 20 61 6c 72 65  ng rowid is alre
27520 61 64 79 20 74 68 65 20 6d 61 78 69 6d 75 6d 0a  ady the maximum.
27530 20 20 20 20 2a 2a 20 70 6f 73 69 74 69 76 65 20      ** positive 
27540 69 6e 74 65 67 65 72 2c 20 77 65 20 68 61 76 65  integer, we have
27550 20 74 6f 20 66 61 6c 6c 20 74 68 72 6f 75 67 68   to fall through
27560 20 74 6f 20 74 68 65 20 73 65 63 6f 6e 64 0a 20   to the second. 
27570 20 20 20 2a 2a 20 70 72 6f 62 61 62 69 6c 69 73     ** probabilis
27580 74 69 63 20 61 6c 67 6f 72 69 74 68 6d 0a 20 20  tic algorithm.  
27590 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65 20    **.    ** The 
275a0 73 65 63 6f 6e 64 20 61 6c 67 6f 72 69 74 68 6d  second algorithm
275b0 20 69 73 20 74 6f 20 73 65 6c 65 63 74 20 61 20   is to select a 
275c0 72 6f 77 69 64 20 61 74 20 72 61 6e 64 6f 6d 20  rowid at random 
275d0 61 6e 64 20 73 65 65 20 69 66 0a 20 20 20 20 2a  and see if.    *
275e0 2a 20 69 74 20 61 6c 72 65 61 64 79 20 65 78 69  * it already exi
275f0 73 74 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  sts in the table
27600 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f  .  If it does no
27610 74 20 65 78 69 73 74 2c 20 77 65 20 68 61 76 65  t exist, we have
27620 0a 20 20 20 20 2a 2a 20 73 75 63 63 65 65 64 65  .    ** succeede
27630 64 2e 20 20 49 66 20 74 68 65 20 72 61 6e 64 6f  d.  If the rando
27640 6d 20 72 6f 77 69 64 20 64 6f 65 73 20 65 78 69  m rowid does exi
27650 73 74 2c 20 77 65 20 73 65 6c 65 63 74 20 61 20  st, we select a 
27660 6e 65 77 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 61  new one.    ** a
27670 6e 64 20 74 72 79 20 61 67 61 69 6e 2c 20 75 70  nd try again, up
27680 20 74 6f 20 31 30 30 20 74 69 6d 65 73 2e 0a 20   to 100 times.. 
27690 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74     */.    assert
276a0 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b  ( pC->isTable );
276b0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
276c0 33 32 42 49 54 5f 52 4f 57 49 44 0a 23 20 20 20  32BIT_ROWID.#   
276d0 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44  define MAX_ROWID
276e0 20 30 78 37 66 66 66 66 66 66 66 0a 23 65 6c 73   0x7fffffff.#els
276f0 65 0a 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f  e.    /* Some co
27700 6d 70 69 6c 65 72 73 20 63 6f 6d 70 6c 61 69 6e  mpilers complain
27710 20 61 62 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73   about constants
27720 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 30 78 37   of the form 0x7
27730 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 2e  fffffffffffffff.
27740 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72 73 20 63  .    ** Others c
27750 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 30 78  omplain about 0x
27760 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66  7fffffffffffffff
27770 66 4c 4c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  fLL.  The follow
27780 69 6e 67 20 6d 61 63 72 6f 20 73 65 65 6d 73 0a  ing macro seems.
27790 20 20 20 20 2a 2a 20 74 6f 20 70 72 6f 76 69 64      ** to provid
277a0 65 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 77  e the constant w
277b0 68 69 6c 65 20 6d 61 6b 69 6e 67 20 61 6c 6c 20  hile making all 
277c0 63 6f 6d 70 69 6c 65 72 73 20 68 61 70 70 79 2e  compilers happy.
277d0 0a 20 20 20 20 2a 2f 0a 23 20 20 20 64 65 66 69  .    */.#   defi
277e0 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 20 28 69  ne MAX_ROWID  (i
277f0 36 34 29 28 20 28 28 28 75 36 34 29 30 78 37 66  64)( (((u64)0x7f
27800 66 66 66 66 66 66 29 3c 3c 33 32 29 20 7c 20 28  ffffff)<<32) | (
27810 75 36 34 29 30 78 66 66 66 66 66 66 66 66 20 29  u64)0xffffffff )
27820 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 69 66 28  .#endif..    if(
27830 20 21 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52   !pC->useRandomR
27840 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 72 63  owid ){.      rc
27850 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c   = sqlite3BtreeL
27860 61 73 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  ast(pC->uc.pCurs
27870 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20  or, &res);.     
27880 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
27890 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f  OK ){.        go
278a0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
278b0 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20  error;.      }. 
278c0 20 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a       if( res ){.
278d0 20 20 20 20 20 20 20 20 76 20 3d 20 31 3b 20 20          v = 1;  
278e0 20 2f 2a 20 49 4d 50 3a 20 52 2d 36 31 39 31 34   /* IMP: R-61914
278f0 2d 34 38 30 37 34 20 2a 2f 0a 20 20 20 20 20 20  -48074 */.      
27900 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 61  }else{.        a
27910 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
27920 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64  reeCursorIsValid
27930 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29  (pC->uc.pCursor)
27940 20 29 3b 0a 20 20 20 20 20 20 20 20 76 20 3d 20   );.        v = 
27950 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65  sqlite3BtreeInte
27960 67 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e 70 43  gerKey(pC->uc.pC
27970 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 20 20  ursor);.        
27980 69 66 28 20 76 3e 3d 4d 41 58 5f 52 4f 57 49 44  if( v>=MAX_ROWID
27990 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 43   ){.          pC
279a0 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64  ->useRandomRowid
279b0 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65   = 1;.        }e
279c0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 76  lse{.          v
279d0 2b 2b 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d  ++;   /* IMP: R-
279e0 32 39 35 33 38 2d 33 34 39 38 37 20 2a 2f 0a 20  29538-34987 */. 
279f0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
27a00 0a 20 20 20 20 7d 0a 0a 23 69 66 6e 64 65 66 20  .    }..#ifndef 
27a10 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
27a20 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20 20 69 66  INCREMENT.    if
27a30 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20  ( pOp->p3 ){.   
27a40 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61     /* Assert tha
27a50 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20  t P3 is a valid 
27a60 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a  memory cell. */.
27a70 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
27a80 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20  p->p3>0 );.     
27a90 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29   if( p->pFrame )
27aa0 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 70 46  {.        for(pF
27ab0 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20  rame=p->pFrame; 
27ac0 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b  pFrame->pParent;
27ad0 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e   pFrame=pFrame->
27ae0 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 20 20  pParent);.      
27af0 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74    /* Assert that
27b00 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d   P3 is a valid m
27b10 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20  emory cell. */. 
27b20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
27b30 4f 70 2d 3e 70 33 3c 3d 70 46 72 61 6d 65 2d 3e  Op->p3<=pFrame->
27b40 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20 20  nMem );.        
27b50 70 4d 65 6d 20 3d 20 26 70 46 72 61 6d 65 2d 3e  pMem = &pFrame->
27b60 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
27b70 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
27b80 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68      /* Assert th
27b90 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64  at P3 is a valid
27ba0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f   memory cell. */
27bb0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
27bc0 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
27bd0 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
27be0 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 70 4d  r) );.        pM
27bf0 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
27c00 70 33 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d  p3];.        mem
27c10 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
27c20 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 7d 0a   pMem);.      }.
27c30 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
27c40 6d 49 73 56 61 6c 69 64 28 70 4d 65 6d 29 20 29  mIsValid(pMem) )
27c50 3b 0a 0a 20 20 20 20 20 20 52 45 47 49 53 54 45  ;..      REGISTE
27c60 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
27c70 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 73 71   pMem);.      sq
27c80 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
27c90 67 65 72 69 66 79 28 70 4d 65 6d 29 3b 0a 20 20  gerify(pMem);.  
27ca0 20 20 20 20 61 73 73 65 72 74 28 20 28 70 4d 65      assert( (pMe
27cb0 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  m->flags & MEM_I
27cc0 6e 74 29 21 3d 30 20 29 3b 20 20 2f 2a 20 6d 65  nt)!=0 );  /* me
27cd0 6d 28 50 33 29 20 68 6f 6c 64 73 20 61 6e 20 69  m(P3) holds an i
27ce0 6e 74 65 67 65 72 20 2a 2f 0a 20 20 20 20 20 20  nteger */.      
27cf0 69 66 28 20 70 4d 65 6d 2d 3e 75 2e 69 3d 3d 4d  if( pMem->u.i==M
27d00 41 58 5f 52 4f 57 49 44 20 7c 7c 20 70 43 2d 3e  AX_ROWID || pC->
27d10 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29  useRandomRowid )
27d20 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
27d30 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a  QLITE_FULL;   /*
27d40 20 49 4d 50 3a 20 52 2d 31 37 38 31 37 2d 30 30   IMP: R-17817-00
27d50 36 33 30 20 2a 2f 0a 20 20 20 20 20 20 20 20 67  630 */.        g
27d60 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
27d70 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
27d80 20 20 20 20 20 20 69 66 28 20 76 3c 70 4d 65 6d        if( v<pMem
27d90 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20 20  ->u.i+1 ){.     
27da0 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e 69     v = pMem->u.i
27db0 20 2b 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20   + 1;.      }.  
27dc0 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d 20      pMem->u.i = 
27dd0 76 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  v;.    }.#endif.
27de0 20 20 20 20 69 66 28 20 70 43 2d 3e 75 73 65 52      if( pC->useR
27df0 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20  andomRowid ){.  
27e00 20 20 20 20 2f 2a 20 49 4d 50 4c 45 4d 45 4e 54      /* IMPLEMENT
27e10 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30 37 36 37  ATION-OF: R-0767
27e20 37 2d 34 31 38 38 31 20 49 66 20 74 68 65 20 6c  7-41881 If the l
27e30 61 72 67 65 73 74 20 52 4f 57 49 44 20 69 73 20  argest ROWID is 
27e40 65 71 75 61 6c 20 74 6f 20 74 68 65 0a 20 20 20  equal to the.   
27e50 20 20 20 2a 2a 20 6c 61 72 67 65 73 74 20 70 6f     ** largest po
27e60 73 73 69 62 6c 65 20 69 6e 74 65 67 65 72 20 28  ssible integer (
27e70 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35  9223372036854775
27e80 38 30 37 29 20 74 68 65 6e 20 74 68 65 20 64 61  807) then the da
27e90 74 61 62 61 73 65 0a 20 20 20 20 20 20 2a 2a 20  tabase.      ** 
27ea0 65 6e 67 69 6e 65 20 73 74 61 72 74 73 20 70 69  engine starts pi
27eb0 63 6b 69 6e 67 20 70 6f 73 69 74 69 76 65 20 63  cking positive c
27ec0 61 6e 64 69 64 61 74 65 20 52 4f 57 49 44 73 20  andidate ROWIDs 
27ed0 61 74 20 72 61 6e 64 6f 6d 20 75 6e 74 69 6c 0a  at random until.
27ee0 20 20 20 20 20 20 2a 2a 20 69 74 20 66 69 6e 64        ** it find
27ef0 73 20 6f 6e 65 20 74 68 61 74 20 69 73 20 6e 6f  s one that is no
27f00 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65  t previously use
27f10 64 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65  d. */.      asse
27f20 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 29  rt( pOp->p3==0 )
27f30 3b 20 20 2f 2a 20 57 65 20 63 61 6e 6e 6f 74 20  ;  /* We cannot 
27f40 62 65 20 69 6e 20 72 61 6e 64 6f 6d 20 72 6f 77  be in random row
27f50 69 64 20 6d 6f 64 65 20 69 66 20 74 68 69 73 20  id mode if this 
27f60 69 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  is.             
27f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f80 2a 2a 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d  ** an AUTOINCREM
27f90 45 4e 54 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20  ENT table. */.  
27fa0 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a 20 20 20      cnt = 0;.   
27fb0 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20 73     do{.        s
27fc0 71 6c 69 74 65 33 5f 72 61 6e 64 6f 6d 6e 65 73  qlite3_randomnes
27fd0 73 28 73 69 7a 65 6f 66 28 76 29 2c 20 26 76 29  s(sizeof(v), &v)
27fe0 3b 0a 20 20 20 20 20 20 20 20 76 20 26 3d 20 28  ;.        v &= (
27ff0 4d 41 58 5f 52 4f 57 49 44 3e 3e 31 29 3b 20 76  MAX_ROWID>>1); v
28000 2b 2b 3b 20 20 2f 2a 20 45 6e 73 75 72 65 20 74  ++;  /* Ensure t
28010 68 61 74 20 76 20 69 73 20 67 72 65 61 74 65 72  hat v is greater
28020 20 74 68 61 6e 20 7a 65 72 6f 20 2a 2f 0a 20 20   than zero */.  
28030 20 20 20 20 7d 77 68 69 6c 65 28 20 20 28 28 72      }while(  ((r
28040 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
28050 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
28060 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 30  C->uc.pCursor, 0
28070 2c 20 28 75 36 34 29 76 2c 0a 20 20 20 20 20 20  , (u64)v,.      
28080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
280a0 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 26 72             0, &r
280b0 65 73 29 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 29  es))==SQLITE_OK)
280c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20  .            && 
280d0 28 72 65 73 3d 3d 30 29 0a 20 20 20 20 20 20 20  (res==0).       
280e0 20 20 20 20 20 26 26 20 28 2b 2b 63 6e 74 3c 31       && (++cnt<1
280f0 30 30 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20  00));.      if( 
28100 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
28110 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
28120 20 20 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29      if( res==0 )
28130 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
28140 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a  QLITE_FULL;   /*
28150 20 49 4d 50 3a 20 52 2d 33 38 32 31 39 2d 35 33   IMP: R-38219-53
28160 30 30 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 67  002 */.        g
28170 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
28180 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
28190 20 20 20 20 20 20 61 73 73 65 72 74 28 20 76 3e        assert( v>
281a0 30 20 29 3b 20 20 2f 2a 20 45 56 3a 20 52 2d 34  0 );  /* EV: R-4
281b0 30 38 31 32 2d 30 33 35 37 30 20 2a 2f 0a 20 20  0812-03570 */.  
281c0 20 20 7d 0a 20 20 20 20 70 43 2d 3e 64 65 66 65    }.    pC->defe
281d0 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
281e0 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
281f0 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
28200 45 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75  E;.  }.  pOut->u
28210 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b  .i = v;.  break;
28220 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
28230 6e 73 65 72 74 20 50 31 20 50 32 20 50 33 20 50  nsert P1 P2 P3 P
28240 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
28250 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 20 64  : intkey=r[P3] d
28260 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  ata=r[P2].**.** 
28270 57 72 69 74 65 20 61 6e 20 65 6e 74 72 79 20 69  Write an entry i
28280 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20 6f 66  nto the table of
28290 20 63 75 72 73 6f 72 20 50 31 2e 20 20 41 20 6e   cursor P1.  A n
282a0 65 77 20 65 6e 74 72 79 20 69 73 0a 2a 2a 20 63  ew entry is.** c
282b0 72 65 61 74 65 64 20 69 66 20 69 74 20 64 6f 65  reated if it doe
282c0 73 6e 27 74 20 61 6c 72 65 61 64 79 20 65 78 69  sn't already exi
282d0 73 74 20 6f 72 20 74 68 65 20 64 61 74 61 20 66  st or the data f
282e0 6f 72 20 61 6e 20 65 78 69 73 74 69 6e 67 0a 2a  or an existing.*
282f0 2a 20 65 6e 74 72 79 20 69 73 20 6f 76 65 72 77  * entry is overw
28300 72 69 74 74 65 6e 2e 20 20 54 68 65 20 64 61 74  ritten.  The dat
28310 61 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 4d  a is the value M
28320 45 4d 5f 42 6c 6f 62 20 73 74 6f 72 65 64 20 69  EM_Blob stored i
28330 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e 75  n register.** nu
28340 6d 62 65 72 20 50 32 2e 20 54 68 65 20 6b 65 79  mber P2. The key
28350 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
28360 67 69 73 74 65 72 20 50 33 2e 20 54 68 65 20 6b  gister P3. The k
28370 65 79 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61 20  ey must.** be a 
28380 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49  MEM_Int..**.** I
28390 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48  f the OPFLAG_NCH
283a0 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 35 20  ANGE flag of P5 
283b0 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65  is set, then the
283c0 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e   row change coun
283d0 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e  t is.** incremen
283e0 74 65 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e  ted (otherwise n
283f0 6f 74 29 2e 20 20 49 66 20 74 68 65 20 4f 50 46  ot).  If the OPF
28400 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 66 6c  LAG_LASTROWID fl
28410 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c  ag of P5 is set,
28420 0a 2a 2a 20 74 68 65 6e 20 72 6f 77 69 64 20 69  .** then rowid i
28430 73 20 73 74 6f 72 65 64 20 66 6f 72 20 73 75 62  s stored for sub
28440 73 65 71 75 65 6e 74 20 72 65 74 75 72 6e 20 62  sequent return b
28450 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33  y the.** sqlite3
28460 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77  _last_insert_row
28470 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 28 6f  id() function (o
28480 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20 75  therwise it is u
28490 6e 6d 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a  nmodified)..**.*
284a0 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
284b0 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c  USESEEKRESULT fl
284c0 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c  ag of P5 is set,
284d0 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
284e0 69 6f 6e 20 6d 69 67 68 74 0a 2a 2a 20 72 75 6e  ion might.** run
284f0 20 66 61 73 74 65 72 20 62 79 20 61 76 6f 69 64   faster by avoid
28500 69 6e 67 20 61 6e 20 75 6e 6e 65 63 65 73 73 61  ing an unnecessa
28510 72 79 20 73 65 65 6b 20 6f 6e 20 63 75 72 73 6f  ry seek on curso
28520 72 20 50 31 2e 20 20 48 6f 77 65 76 65 72 2c 0a  r P1.  However,.
28530 2a 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53  ** the OPFLAG_US
28540 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67  ESEEKRESULT flag
28550 20 6d 75 73 74 20 6f 6e 6c 79 20 62 65 20 73 65   must only be se
28560 74 20 69 66 20 74 68 65 72 65 20 68 61 76 65 20  t if there have 
28570 62 65 65 6e 20 6e 6f 20 70 72 69 6f 72 0a 2a 2a  been no prior.**
28580 20 73 65 65 6b 73 20 6f 6e 20 74 68 65 20 63 75   seeks on the cu
28590 72 73 6f 72 20 6f 72 20 69 66 20 74 68 65 20 6d  rsor or if the m
285a0 6f 73 74 20 72 65 63 65 6e 74 20 73 65 65 6b 20  ost recent seek 
285b0 75 73 65 64 20 61 20 6b 65 79 20 65 71 75 61 6c  used a key equal
285c0 20 74 6f 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66   to P3..**.** If
285d0 20 74 68 65 20 4f 50 46 4c 41 47 5f 49 53 55 50   the OPFLAG_ISUP
285e0 44 41 54 45 20 66 6c 61 67 20 69 73 20 73 65 74  DATE flag is set
285f0 2c 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f  , then this opco
28600 64 65 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e  de is part of an
28610 0a 2a 2a 20 55 50 44 41 54 45 20 6f 70 65 72 61  .** UPDATE opera
28620 74 69 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73 65  tion.  Otherwise
28630 20 28 69 66 20 74 68 65 20 66 6c 61 67 20 69 73   (if the flag is
28640 20 63 6c 65 61 72 29 20 74 68 65 6e 20 74 68 69   clear) then thi
28650 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 70  s opcode.** is p
28660 61 72 74 20 6f 66 20 61 6e 20 49 4e 53 45 52 54  art of an INSERT
28670 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 54 68 65   operation.  The
28680 20 64 69 66 66 65 72 65 6e 63 65 20 69 73 20 6f   difference is o
28690 6e 6c 79 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f  nly important to
286a0 0a 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20 68  .** the update h
286b0 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d  ook..**.** Param
286c0 65 74 65 72 20 50 34 20 6d 61 79 20 70 6f 69 6e  eter P4 may poin
286d0 74 20 74 6f 20 61 20 54 61 62 6c 65 20 73 74 72  t to a Table str
286e0 75 63 74 75 72 65 2c 20 6f 72 20 6d 61 79 20 62  ucture, or may b
286f0 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74 20 69 73  e NULL. If it is
28700 20 0a 2a 2a 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74   .** not NULL, t
28710 68 65 6e 20 74 68 65 20 75 70 64 61 74 65 2d 68  hen the update-h
28720 6f 6f 6b 20 28 73 71 6c 69 74 65 33 2e 78 55 70  ook (sqlite3.xUp
28730 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 20 69 73  dateCallback) is
28740 20 69 6e 76 6f 6b 65 64 20 0a 2a 2a 20 66 6f 6c   invoked .** fol
28750 6c 6f 77 69 6e 67 20 61 20 73 75 63 63 65 73 73  lowing a success
28760 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a  ful insert..**.*
28770 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a  * (WARNING/TODO:
28780 20 49 66 20 50 31 20 69 73 20 61 20 70 73 65 75   If P1 is a pseu
28790 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20 50 32  do-cursor and P2
287a0 20 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a   is dynamically.
287b0 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68  ** allocated, th
287c0 65 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f 66 20  en ownership of 
287d0 50 32 20 69 73 20 74 72 61 6e 73 66 65 72 72 65  P2 is transferre
287e0 64 20 74 6f 20 74 68 65 20 70 73 65 75 64 6f 2d  d to the pseudo-
287f0 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65  cursor.** and re
28800 67 69 73 74 65 72 20 50 32 20 62 65 63 6f 6d 65  gister P2 become
28810 73 20 65 70 68 65 6d 65 72 61 6c 2e 20 20 49 66  s ephemeral.  If
28820 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63   the cursor is c
28830 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76  hanged, the.** v
28840 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72  alue of register
28850 20 50 32 20 77 69 6c 6c 20 74 68 65 6e 20 63 68   P2 will then ch
28860 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75 72 65  ange.  Make sure
28870 20 74 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a   this does not.*
28880 2a 20 63 61 75 73 65 20 61 6e 79 20 70 72 6f 62  * cause any prob
28890 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69  lems.).**.** Thi
288a0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e  s instruction on
288b0 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c  ly works on tabl
288c0 65 73 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c  es.  The equival
288d0 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a  ent instruction.
288e0 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65 73 20 69  ** for indices i
288f0 73 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a  s OP_IdxInsert..
28900 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72  */.case OP_Inser
28910 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 44 61 74  t: {.  Mem *pDat
28920 61 3b 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20  a;       /* MEM 
28930 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 64 61 74  cell holding dat
28940 61 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64  a for the record
28950 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20   to be inserted 
28960 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4b 65 79 3b 20  */.  Mem *pKey; 
28970 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65         /* MEM ce
28980 6c 6c 20 68 6f 6c 64 69 6e 67 20 6b 65 79 20 20  ll holding key  
28990 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 2a  for the record *
289a0 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
289b0 70 43 3b 20 20 20 2f 2a 20 43 75 72 73 6f 72 20  pC;   /* Cursor 
289c0 74 6f 20 74 61 62 6c 65 20 69 6e 74 6f 20 77 68  to table into wh
289d0 69 63 68 20 69 6e 73 65 72 74 20 69 73 20 77 72  ich insert is wr
289e0 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 73  itten */.  int s
289f0 65 65 6b 52 65 73 75 6c 74 3b 20 20 20 2f 2a 20  eekResult;   /* 
28a00 52 65 73 75 6c 74 20 6f 66 20 70 72 69 6f 72 20  Result of prior 
28a10 73 65 65 6b 20 6f 72 20 30 20 69 66 20 6e 6f 20  seek or 0 if no 
28a20 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c  USESEEKRESULT fl
28a30 61 67 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ag */.  const ch
28a40 61 72 20 2a 7a 44 62 3b 20 20 2f 2a 20 64 61 74  ar *zDb;  /* dat
28a50 61 62 61 73 65 20 6e 61 6d 65 20 2d 20 75 73 65  abase name - use
28a60 64 20 62 79 20 74 68 65 20 75 70 64 61 74 65 20  d by the update 
28a70 68 6f 6f 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 20  hook */.  Table 
28a80 2a 70 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54  *pTab;      /* T
28a90 61 62 6c 65 20 73 74 72 75 63 74 75 72 65 20 2d  able structure -
28aa0 20 75 73 65 64 20 62 79 20 75 70 64 61 74 65 20   used by update 
28ab0 61 6e 64 20 70 72 65 2d 75 70 64 61 74 65 20 68  and pre-update h
28ac0 6f 6f 6b 73 20 2a 2f 0a 20 20 42 74 72 65 65 50  ooks */.  BtreeP
28ad0 61 79 6c 6f 61 64 20 78 3b 20 20 20 2f 2a 20 50  ayload x;   /* P
28ae0 61 79 6c 6f 61 64 20 74 6f 20 62 65 20 69 6e 73  ayload to be ins
28af0 65 72 74 65 64 20 2a 2f 0a 0a 20 20 70 44 61 74  erted */..  pDat
28b00 61 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  a = &aMem[pOp->p
28b10 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  2];.  assert( pO
28b20 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
28b30 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
28b40 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ;.  assert( memI
28b50 73 56 61 6c 69 64 28 70 44 61 74 61 29 20 29 3b  sValid(pData) );
28b60 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
28b70 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
28b80 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
28b90 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
28ba0 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
28bb0 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28  REE );.  assert(
28bc0 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21   pC->uc.pCursor!
28bd0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
28be0 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
28bf0 47 5f 49 53 4e 4f 4f 50 29 20 7c 7c 20 70 43 2d  G_ISNOOP) || pC-
28c00 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61 73  >isTable );.  as
28c10 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
28c20 65 3d 3d 50 34 5f 54 41 42 4c 45 20 7c 7c 20 70  e==P4_TABLE || p
28c30 4f 70 2d 3e 70 34 74 79 70 65 3e 3d 50 34 5f 53  Op->p4type>=P4_S
28c40 54 41 54 49 43 20 29 3b 0a 20 20 52 45 47 49 53  TATIC );.  REGIS
28c50 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
28c60 32 2c 20 70 44 61 74 61 29 3b 0a 20 20 73 71 6c  2, pData);.  sql
28c70 69 74 65 33 56 64 62 65 49 6e 63 72 57 72 69 74  ite3VdbeIncrWrit
28c80 65 43 6f 75 6e 74 65 72 28 70 2c 20 70 43 29 3b  eCounter(p, pC);
28c90 0a 0a 20 20 70 4b 65 79 20 3d 20 26 61 4d 65 6d  ..  pKey = &aMem
28ca0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73  [pOp->p3];.  ass
28cb0 65 72 74 28 20 70 4b 65 79 2d 3e 66 6c 61 67 73  ert( pKey->flags
28cc0 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20   & MEM_Int );.  
28cd0 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
28ce0 69 64 28 70 4b 65 79 29 20 29 3b 0a 20 20 52 45  id(pKey) );.  RE
28cf0 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
28d00 2d 3e 70 33 2c 20 70 4b 65 79 29 3b 0a 20 20 78  ->p3, pKey);.  x
28d10 2e 6e 4b 65 79 20 3d 20 70 4b 65 79 2d 3e 75 2e  .nKey = pKey->u.
28d20 69 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  i;..  if( pOp->p
28d30 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20  4type==P4_TABLE 
28d40 26 26 20 48 41 53 5f 55 50 44 41 54 45 5f 48 4f  && HAS_UPDATE_HO
28d50 4f 4b 28 64 62 29 20 29 7b 0a 20 20 20 20 61 73  OK(db) ){.    as
28d60 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30  sert( pC->iDb>=0
28d70 20 29 3b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62   );.    zDb = db
28d80 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a  ->aDb[pC->iDb].z
28d90 44 62 53 4e 61 6d 65 3b 0a 20 20 20 20 70 54 61  DbSName;.    pTa
28da0 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62  b = pOp->p4.pTab
28db0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70  ;.    assert( (p
28dc0 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
28dd0 49 53 4e 4f 4f 50 29 20 7c 7c 20 48 61 73 52 6f  ISNOOP) || HasRo
28de0 77 69 64 28 70 54 61 62 29 20 29 3b 0a 20 20 7d  wid(pTab) );.  }
28df0 65 6c 73 65 7b 0a 20 20 20 20 70 54 61 62 20 3d  else{.    pTab =
28e00 20 30 3b 0a 20 20 20 20 7a 44 62 20 3d 20 30 3b   0;.    zDb = 0;
28e10 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e    /* Not needed.
28e20 20 20 53 69 6c 65 6e 63 65 20 61 20 63 6f 6d 70    Silence a comp
28e30 69 6c 65 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f  iler warning. */
28e40 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c  .  }..#ifdef SQL
28e50 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50  ITE_ENABLE_PREUP
28e60 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 2f 2a 20 49  DATE_HOOK.  /* I
28e70 6e 76 6f 6b 65 20 74 68 65 20 70 72 65 2d 75 70  nvoke the pre-up
28e80 64 61 74 65 20 68 6f 6f 6b 2c 20 69 66 20 61 6e  date hook, if an
28e90 79 20 2a 2f 0a 20 20 69 66 28 20 70 54 61 62 20  y */.  if( pTab 
28ea0 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78  ){.    if( db->x
28eb0 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  PreUpdateCallbac
28ec0 6b 20 26 26 20 21 28 70 4f 70 2d 3e 70 35 20 26  k && !(pOp->p5 &
28ed0 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45   OPFLAG_ISUPDATE
28ee0 29 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ) ){.      sqlit
28ef0 65 33 56 64 62 65 50 72 65 55 70 64 61 74 65 48  e3VdbePreUpdateH
28f00 6f 6f 6b 28 70 2c 20 70 43 2c 20 53 51 4c 49 54  ook(p, pC, SQLIT
28f10 45 5f 49 4e 53 45 52 54 2c 20 7a 44 62 2c 20 70  E_INSERT, zDb, p
28f20 54 61 62 2c 20 78 2e 6e 4b 65 79 2c 70 4f 70 2d  Tab, x.nKey,pOp-
28f30 3e 70 32 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  >p2);.    }.    
28f40 69 66 28 20 64 62 2d 3e 78 55 70 64 61 74 65 43  if( db->xUpdateC
28f50 61 6c 6c 62 61 63 6b 3d 3d 30 20 7c 7c 20 70 54  allback==0 || pT
28f60 61 62 2d 3e 61 43 6f 6c 3d 3d 30 20 29 7b 0a 20  ab->aCol==0 ){. 
28f70 20 20 20 20 20 2f 2a 20 50 72 65 76 65 6e 74 20       /* Prevent 
28f80 70 6f 73 74 2d 75 70 64 61 74 65 20 68 6f 6f 6b  post-update hook
28f90 20 66 72 6f 6d 20 72 75 6e 6e 69 6e 67 20 69 6e   from running in
28fa0 20 63 61 73 65 73 20 77 68 65 6e 20 69 74 20 73   cases when it s
28fb0 68 6f 75 6c 64 20 6e 6f 74 20 2a 2f 0a 20 20 20  hould not */.   
28fc0 20 20 20 70 54 61 62 20 3d 20 30 3b 0a 20 20 20     pTab = 0;.   
28fd0 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70   }.  }.  if( pOp
28fe0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53  ->p5 & OPFLAG_IS
28ff0 4e 4f 4f 50 20 29 20 62 72 65 61 6b 3b 0a 23 65  NOOP ) break;.#e
29000 6e 64 69 66 0a 0a 20 20 69 66 28 20 70 4f 70 2d  ndif..  if( pOp-
29010 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48  >p5 & OPFLAG_NCH
29020 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67  ANGE ) p->nChang
29030 65 2b 2b 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  e++;.  if( pOp->
29040 70 35 20 26 20 4f 50 46 4c 41 47 5f 4c 41 53 54  p5 & OPFLAG_LAST
29050 52 4f 57 49 44 20 29 20 64 62 2d 3e 6c 61 73 74  ROWID ) db->last
29060 52 6f 77 69 64 20 3d 20 78 2e 6e 4b 65 79 3b 0a  Rowid = x.nKey;.
29070 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61 2d    assert( pData-
29080 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c  >flags & (MEM_Bl
29090 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29 3b 0a 20  ob|MEM_Str) );. 
290a0 20 78 2e 70 44 61 74 61 20 3d 20 70 44 61 74 61   x.pData = pData
290b0 2d 3e 7a 3b 0a 20 20 78 2e 6e 44 61 74 61 20 3d  ->z;.  x.nData =
290c0 20 70 44 61 74 61 2d 3e 6e 3b 0a 20 20 73 65 65   pData->n;.  see
290d0 6b 52 65 73 75 6c 74 20 3d 20 28 28 70 4f 70 2d  kResult = ((pOp-
290e0 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45  >p5 & OPFLAG_USE
290f0 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43  SEEKRESULT) ? pC
29100 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30  ->seekResult : 0
29110 29 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e  );.  if( pData->
29120 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f  flags & MEM_Zero
29130 20 29 7b 0a 20 20 20 20 78 2e 6e 5a 65 72 6f 20   ){.    x.nZero 
29140 3d 20 70 44 61 74 61 2d 3e 75 2e 6e 5a 65 72 6f  = pData->u.nZero
29150 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 78  ;.  }else{.    x
29160 2e 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 7d 0a  .nZero = 0;.  }.
29170 20 20 78 2e 70 4b 65 79 20 3d 20 30 3b 0a 20 20    x.pKey = 0;.  
29180 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
29190 65 49 6e 73 65 72 74 28 70 43 2d 3e 75 63 2e 70  eInsert(pC->uc.p
291a0 43 75 72 73 6f 72 2c 20 26 78 2c 0a 20 20 20 20  Cursor, &x,.    
291b0 20 20 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50    (pOp->p5 & (OP
291c0 46 4c 41 47 5f 41 50 50 45 4e 44 7c 4f 50 46 4c  FLAG_APPEND|OPFL
291d0 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 29  AG_SAVEPOSITION)
291e0 29 2c 20 73 65 65 6b 52 65 73 75 6c 74 0a 20 20  ), seekResult.  
291f0 29 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65  );.  pC->deferre
29200 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70  dMoveto = 0;.  p
29210 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
29220 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20   CACHE_STALE;.. 
29230 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75   /* Invoke the u
29240 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65  pdate-hook if re
29250 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28  quired. */.  if(
29260 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
29270 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
29280 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20   if( pTab ){.   
29290 20 61 73 73 65 72 74 28 20 64 62 2d 3e 78 55 70   assert( db->xUp
292a0 64 61 74 65 43 61 6c 6c 62 61 63 6b 21 3d 30 20  dateCallback!=0 
292b0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
292c0 54 61 62 2d 3e 61 43 6f 6c 21 3d 30 20 29 3b 0a  Tab->aCol!=0 );.
292d0 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43      db->xUpdateC
292e0 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64  allback(db->pUpd
292f0 61 74 65 41 72 67 2c 0a 20 20 20 20 20 20 20 20  ateArg,.        
29300 20 20 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50     (pOp->p5 & OP
29310 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20 3f  FLAG_ISUPDATE) ?
29320 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 3a   SQLITE_UPDATE :
29330 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 2c 0a   SQLITE_INSERT,.
29340 20 20 20 20 20 20 20 20 20 20 20 7a 44 62 2c 20             zDb, 
29350 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 20 78 2e 6e  pTab->zName, x.n
29360 4b 65 79 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  Key);.  }.  brea
29370 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
29380 20 44 65 6c 65 74 65 20 50 31 20 50 32 20 50 33   Delete P1 P2 P3
29390 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 44 65 6c   P4 P5.**.** Del
293a0 65 74 65 20 74 68 65 20 72 65 63 6f 72 64 20 61  ete the record a
293b0 74 20 77 68 69 63 68 20 74 68 65 20 50 31 20 63  t which the P1 c
293c0 75 72 73 6f 72 20 69 73 20 63 75 72 72 65 6e 74  ursor is current
293d0 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a  ly pointing..**.
293e0 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
293f0 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 62 69  _SAVEPOSITION bi
29400 74 20 6f 66 20 74 68 65 20 50 35 20 70 61 72 61  t of the P5 para
29410 6d 65 74 65 72 20 69 73 20 73 65 74 2c 20 74 68  meter is set, th
29420 65 6e 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72  en.** the cursor
29430 20 77 69 6c 6c 20 62 65 20 6c 65 66 74 20 70 6f   will be left po
29440 69 6e 74 69 6e 67 20 61 74 20 20 65 69 74 68 65  inting at  eithe
29450 72 20 74 68 65 20 6e 65 78 74 20 6f 72 20 74 68  r the next or th
29460 65 20 70 72 65 76 69 6f 75 73 0a 2a 2a 20 72 65  e previous.** re
29470 63 6f 72 64 20 69 6e 20 74 68 65 20 74 61 62 6c  cord in the tabl
29480 65 2e 20 49 66 20 69 74 20 69 73 20 6c 65 66 74  e. If it is left
29490 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65   pointing at the
294a0 20 6e 65 78 74 20 72 65 63 6f 72 64 2c 20 74 68   next record, th
294b0 65 6e 0a 2a 2a 20 74 68 65 20 6e 65 78 74 20 4e  en.** the next N
294c0 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
294d0 77 69 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f 70 2e  will be a no-op.
294e0 20 41 73 20 61 20 72 65 73 75 6c 74 2c 20 69 6e   As a result, in
294f0 20 74 68 69 73 20 63 61 73 65 0a 2a 2a 20 69 74   this case.** it
29500 20 69 73 20 6f 6b 20 74 6f 20 64 65 6c 65 74 65   is ok to delete
29510 20 61 20 72 65 63 6f 72 64 20 66 72 6f 6d 20 77   a record from w
29520 69 74 68 69 6e 20 61 20 4e 65 78 74 20 6c 6f 6f  ithin a Next loo
29530 70 2e 20 49 66 20 0a 2a 2a 20 4f 50 46 4c 41 47  p. If .** OPFLAG
29540 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 62 69  _SAVEPOSITION bi
29550 74 20 6f 66 20 50 35 20 69 73 20 63 6c 65 61 72  t of P5 is clear
29560 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72 73 6f  , then the curso
29570 72 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 6c 65 66  r will be.** lef
29580 74 20 69 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65  t in an undefine
29590 64 20 73 74 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 49  d state..**.** I
295a0 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 41 55 58  f the OPFLAG_AUX
295b0 44 45 4c 45 54 45 20 62 69 74 20 69 73 20 73 65  DELETE bit is se
295c0 74 20 6f 6e 20 50 35 2c 20 74 68 61 74 20 69 6e  t on P5, that in
295d0 64 69 63 61 74 65 73 20 74 68 61 74 20 74 68 69  dicates that thi
295e0 73 0a 2a 2a 20 64 65 6c 65 74 65 20 6f 6e 65 20  s.** delete one 
295f0 6f 66 20 73 65 76 65 72 61 6c 20 61 73 73 6f 63  of several assoc
29600 69 61 74 65 64 20 77 69 74 68 20 64 65 6c 65 74  iated with delet
29610 69 6e 67 20 61 20 74 61 62 6c 65 20 72 6f 77 20  ing a table row 
29620 61 6e 64 20 61 6c 6c 20 69 74 73 0a 2a 2a 20 61  and all its.** a
29630 73 73 6f 63 69 61 74 65 64 20 69 6e 64 65 78 20  ssociated index 
29640 65 6e 74 72 69 65 73 2e 20 20 45 78 61 63 74 6c  entries.  Exactl
29650 79 20 6f 6e 65 20 6f 66 20 74 68 6f 73 65 20 64  y one of those d
29660 65 6c 65 74 65 73 20 69 73 20 74 68 65 20 22 70  eletes is the "p
29670 72 69 6d 61 72 79 22 0a 2a 2a 20 64 65 6c 65 74  rimary".** delet
29680 65 2e 20 20 54 68 65 20 6f 74 68 65 72 73 20 61  e.  The others a
29690 72 65 20 61 6c 6c 20 6f 6e 20 4f 50 46 4c 41 47  re all on OPFLAG
296a0 5f 46 4f 52 44 45 4c 45 54 45 20 63 75 72 73 6f  _FORDELETE curso
296b0 72 73 20 6f 72 20 65 6c 73 65 20 61 72 65 0a 2a  rs or else are.*
296c0 2a 20 6d 61 72 6b 65 64 20 77 69 74 68 20 74 68  * marked with th
296d0 65 20 41 55 58 44 45 4c 45 54 45 20 66 6c 61 67  e AUXDELETE flag
296e0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
296f0 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c  PFLAG_NCHANGE fl
29700 61 67 20 6f 66 20 50 32 20 28 4e 42 3a 20 50 32  ag of P2 (NB: P2
29710 20 6e 6f 74 20 50 35 29 20 69 73 20 73 65 74 2c   not P5) is set,
29720 20 74 68 65 6e 20 74 68 65 20 72 6f 77 0a 2a 2a   then the row.**
29730 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73   change count is
29740 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74   incremented (ot
29750 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a  herwise not)..**
29760 0a 2a 2a 20 50 31 20 6d 75 73 74 20 6e 6f 74 20  .** P1 must not 
29770 62 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e  be pseudo-table.
29780 20 20 49 74 20 68 61 73 20 74 6f 20 62 65 20 61    It has to be a
29790 20 72 65 61 6c 20 74 61 62 6c 65 20 77 69 74 68   real table with
297a0 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77  .** multiple row
297b0 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69  s..**.** If P4 i
297c0 73 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20  s not NULL then 
297d0 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 54  it points to a T
297e0 61 62 6c 65 20 6f 62 6a 65 63 74 2e 20 49 6e 20  able object. In 
297f0 74 68 69 73 20 63 61 73 65 20 65 69 74 68 65 72  this case either
29800 20 0a 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20   .** the update 
29810 6f 72 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f  or pre-update ho
29820 6f 6b 2c 20 6f 72 20 62 6f 74 68 2c 20 6d 61 79  ok, or both, may
29830 20 62 65 20 69 6e 76 6f 6b 65 64 2e 20 54 68 65   be invoked. The
29840 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 0a   P1 cursor must.
29850 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 70 6f 73  ** have been pos
29860 69 74 69 6f 6e 65 64 20 75 73 69 6e 67 20 4f 50  itioned using OP
29870 5f 4e 6f 74 46 6f 75 6e 64 20 70 72 69 6f 72 20  _NotFound prior 
29880 74 6f 20 69 6e 76 6f 6b 69 6e 67 20 74 68 69 73  to invoking this
29890 20 6f 70 63 6f 64 65 20 69 6e 20 0a 2a 2a 20 74   opcode in .** t
298a0 68 69 73 20 63 61 73 65 2e 20 53 70 65 63 69 66  his case. Specif
298b0 69 63 61 6c 6c 79 2c 20 69 66 20 6f 6e 65 20 69  ically, if one i
298c0 73 20 63 6f 6e 66 69 67 75 72 65 64 2c 20 74 68  s configured, th
298d0 65 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f  e pre-update hoo
298e0 6b 20 69 73 20 0a 2a 2a 20 69 6e 76 6f 6b 65 64  k is .** invoked
298f0 20 69 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55   if P4 is not NU
29900 4c 4c 2e 20 54 68 65 20 75 70 64 61 74 65 2d 68  LL. The update-h
29910 6f 6f 6b 20 69 73 20 69 6e 76 6f 6b 65 64 20 69  ook is invoked i
29920 66 20 6f 6e 65 20 69 73 20 63 6f 6e 66 69 67 75  f one is configu
29930 72 65 64 2c 20 0a 2a 2a 20 50 34 20 69 73 20 6e  red, .** P4 is n
29940 6f 74 20 4e 55 4c 4c 2c 20 61 6e 64 20 74 68 65  ot NULL, and the
29950 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
29960 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 50  flag is set in P
29970 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  2..**.** If the 
29980 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20  OPFLAG_ISUPDATE 
29990 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 50  flag is set in P
299a0 32 2c 20 74 68 65 6e 20 50 33 20 63 6f 6e 74 61  2, then P3 conta
299b0 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 0a  ins the address.
299c0 2a 2a 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79  ** of the memory
299d0 20 63 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61   cell that conta
299e0 69 6e 73 20 74 68 65 20 76 61 6c 75 65 20 74 68  ins the value th
299f0 61 74 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  at the rowid of 
29a00 74 68 65 20 72 6f 77 20 77 69 6c 6c 0a 2a 2a 20  the row will.** 
29a10 62 65 20 73 65 74 20 74 6f 20 62 79 20 74 68 65  be set to by the
29a20 20 75 70 64 61 74 65 2e 0a 2a 2f 0a 63 61 73 65   update..*/.case
29a30 20 4f 50 5f 44 65 6c 65 74 65 3a 20 7b 0a 20 20   OP_Delete: {.  
29a40 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
29a50 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
29a60 62 3b 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62  b;.  Table *pTab
29a70 3b 0a 20 20 69 6e 74 20 6f 70 66 6c 61 67 73 3b  ;.  int opflags;
29a80 0a 0a 20 20 6f 70 66 6c 61 67 73 20 3d 20 70 4f  ..  opflags = pO
29a90 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28  p->p2;.  assert(
29aa0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
29ab0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
29ac0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
29ad0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
29ae0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
29af0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
29b00 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
29b10 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
29b20 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72  ert( pC->uc.pCur
29b30 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  sor!=0 );.  asse
29b40 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
29b50 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 73  Moveto==0 );.  s
29b60 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57 72  qlite3VdbeIncrWr
29b70 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 70 43  iteCounter(p, pC
29b80 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
29b90 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70 4f  E_DEBUG.  if( pO
29ba0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41  p->p4type==P4_TA
29bb0 42 4c 45 20 26 26 20 48 61 73 52 6f 77 69 64 28  BLE && HasRowid(
29bc0 70 4f 70 2d 3e 70 34 2e 70 54 61 62 29 20 26 26  pOp->p4.pTab) &&
29bd0 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 7b 0a 20   pOp->p5==0 ){. 
29be0 20 20 20 2f 2a 20 49 66 20 70 35 20 69 73 20 7a     /* If p5 is z
29bf0 65 72 6f 2c 20 74 68 65 20 73 65 65 6b 20 6f 70  ero, the seek op
29c00 65 72 61 74 69 6f 6e 20 74 68 61 74 20 70 6f 73  eration that pos
29c10 69 74 69 6f 6e 65 64 20 74 68 65 20 63 75 72 73  itioned the curs
29c20 6f 72 20 70 72 69 6f 72 20 74 6f 0a 20 20 20 20  or prior to.    
29c30 2a 2a 20 4f 50 5f 44 65 6c 65 74 65 20 77 69 6c  ** OP_Delete wil
29c40 6c 20 68 61 76 65 20 61 6c 73 6f 20 73 65 74 20  l have also set 
29c50 74 68 65 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61  the pC->movetoTa
29c60 72 67 65 74 20 66 69 65 6c 64 20 74 6f 20 74 68  rget field to th
29c70 65 20 72 6f 77 69 64 20 6f 66 0a 20 20 20 20 2a  e rowid of.    *
29c80 2a 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 69  * the row that i
29c90 73 20 62 65 69 6e 67 20 64 65 6c 65 74 65 64 20  s being deleted 
29ca0 2a 2f 0a 20 20 20 20 69 36 34 20 69 4b 65 79 20  */.    i64 iKey 
29cb0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e  = sqlite3BtreeIn
29cc0 74 65 67 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e  tegerKey(pC->uc.
29cd0 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 61 73  pCursor);.    as
29ce0 73 65 72 74 28 20 43 4f 52 52 55 50 54 5f 44 42  sert( CORRUPT_DB
29cf0 20 7c 7c 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61   || pC->movetoTa
29d00 72 67 65 74 3d 3d 69 4b 65 79 20 29 3b 0a 20 20  rget==iKey );.  
29d10 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 49  }.#endif..  /* I
29d20 66 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  f the update-hoo
29d30 6b 20 6f 72 20 70 72 65 2d 75 70 64 61 74 65 2d  k or pre-update-
29d40 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e 76  hook will be inv
29d50 6f 6b 65 64 2c 20 73 65 74 20 7a 44 62 20 74 6f  oked, set zDb to
29d60 0a 20 20 2a 2a 20 74 68 65 20 6e 61 6d 65 20 6f  .  ** the name o
29d70 66 20 74 68 65 20 64 62 20 74 6f 20 70 61 73 73  f the db to pass
29d80 20 61 73 20 74 6f 20 69 74 2e 20 41 6c 73 6f 20   as to it. Also 
29d90 73 65 74 20 6c 6f 63 61 6c 20 70 54 61 62 20 74  set local pTab t
29da0 6f 20 61 20 63 6f 70 79 0a 20 20 2a 2a 20 6f 66  o a copy.  ** of
29db0 20 70 34 2e 70 54 61 62 2e 20 46 69 6e 61 6c 6c   p4.pTab. Finall
29dc0 79 2c 20 69 66 20 70 35 20 69 73 20 74 72 75 65  y, if p5 is true
29dd0 2c 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61  , indicating tha
29de0 74 20 74 68 69 73 20 63 75 72 73 6f 72 20 77 61  t this cursor wa
29df0 73 0a 20 20 2a 2a 20 6c 61 73 74 20 6d 6f 76 65  s.  ** last move
29e00 64 20 77 69 74 68 20 4f 50 5f 4e 65 78 74 20 6f  d with OP_Next o
29e10 72 20 4f 50 5f 50 72 65 76 2c 20 6e 6f 74 20 53  r OP_Prev, not S
29e20 65 65 6b 20 6f 72 20 4e 6f 74 46 6f 75 6e 64 2c  eek or NotFound,
29e30 20 73 65 74 20 0a 20 20 2a 2a 20 56 64 62 65 43   set .  ** VdbeC
29e40 75 72 73 6f 72 2e 6d 6f 76 65 74 6f 54 61 72 67  ursor.movetoTarg
29e50 65 74 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e  et to the curren
29e60 74 20 72 6f 77 69 64 2e 20 20 2a 2f 0a 20 20 69  t rowid.  */.  i
29e70 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
29e80 50 34 5f 54 41 42 4c 45 20 26 26 20 48 41 53 5f  P4_TABLE && HAS_
29e90 55 50 44 41 54 45 5f 48 4f 4f 4b 28 64 62 29 20  UPDATE_HOOK(db) 
29ea0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
29eb0 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20  C->iDb>=0 );.   
29ec0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
29ed0 2e 70 54 61 62 21 3d 30 20 29 3b 0a 20 20 20 20  .pTab!=0 );.    
29ee0 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43  zDb = db->aDb[pC
29ef0 2d 3e 69 44 62 5d 2e 7a 44 62 53 4e 61 6d 65 3b  ->iDb].zDbSName;
29f00 0a 20 20 20 20 70 54 61 62 20 3d 20 70 4f 70 2d  .    pTab = pOp-
29f10 3e 70 34 2e 70 54 61 62 3b 0a 20 20 20 20 69 66  >p4.pTab;.    if
29f20 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  ( (pOp->p5 & OPF
29f30 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e  LAG_SAVEPOSITION
29f40 29 21 3d 30 20 26 26 20 70 43 2d 3e 69 73 54 61  )!=0 && pC->isTa
29f50 62 6c 65 20 29 7b 0a 20 20 20 20 20 20 70 43 2d  ble ){.      pC-
29f60 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20  >movetoTarget = 
29f70 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65  sqlite3BtreeInte
29f80 67 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e 70 43  gerKey(pC->uc.pC
29f90 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20  ursor);.    }.  
29fa0 7d 65 6c 73 65 7b 0a 20 20 20 20 7a 44 62 20 3d  }else{.    zDb =
29fb0 20 30 3b 20 20 20 2f 2a 20 4e 6f 74 20 6e 65 65   0;   /* Not nee
29fc0 64 65 64 2e 20 20 53 69 6c 65 6e 63 65 20 61 20  ded.  Silence a 
29fd0 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67  compiler warning
29fe0 2e 20 2a 2f 0a 20 20 20 20 70 54 61 62 20 3d 20  . */.    pTab = 
29ff0 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65  0;  /* Not neede
2a000 64 2e 20 20 53 69 6c 65 6e 63 65 20 61 20 63 6f  d.  Silence a co
2a010 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 2e 20  mpiler warning. 
2a020 2a 2f 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53  */.  }..#ifdef S
2a030 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45  QLITE_ENABLE_PRE
2a040 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 2f 2a  UPDATE_HOOK.  /*
2a050 20 49 6e 76 6f 6b 65 20 74 68 65 20 70 72 65 2d   Invoke the pre-
2a060 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72  update-hook if r
2a070 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66  equired. */.  if
2a080 28 20 64 62 2d 3e 78 50 72 65 55 70 64 61 74 65  ( db->xPreUpdate
2a090 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d  Callback && pOp-
2a0a0 3e 70 34 2e 70 54 61 62 20 29 7b 0a 20 20 20 20  >p4.pTab ){.    
2a0b0 61 73 73 65 72 74 28 20 21 28 6f 70 66 6c 61 67  assert( !(opflag
2a0c0 73 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44  s & OPFLAG_ISUPD
2a0d0 41 54 45 29 20 0a 20 20 20 20 20 20 20 20 20 7c  ATE) .         |
2a0e0 7c 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29  | HasRowid(pTab)
2a0f0 3d 3d 30 20 0a 20 20 20 20 20 20 20 20 20 7c 7c  ==0 .         ||
2a100 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e   (aMem[pOp->p3].
2a110 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
2a120 20 0a 20 20 20 20 29 3b 0a 20 20 20 20 73 71 6c   .    );.    sql
2a130 69 74 65 33 56 64 62 65 50 72 65 55 70 64 61 74  ite3VdbePreUpdat
2a140 65 48 6f 6f 6b 28 70 2c 20 70 43 2c 0a 20 20 20  eHook(p, pC,.   
2a150 20 20 20 20 20 28 6f 70 66 6c 61 67 73 20 26 20       (opflags & 
2a160 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29  OPFLAG_ISUPDATE)
2a170 20 3f 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45   ? SQLITE_UPDATE
2a180 20 3a 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45   : SQLITE_DELETE
2a190 2c 20 0a 20 20 20 20 20 20 20 20 7a 44 62 2c 20  , .        zDb, 
2a1a0 70 54 61 62 2c 20 70 43 2d 3e 6d 6f 76 65 74 6f  pTab, pC->moveto
2a1b0 54 61 72 67 65 74 2c 0a 20 20 20 20 20 20 20 20  Target,.        
2a1c0 70 4f 70 2d 3e 70 33 0a 20 20 20 20 29 3b 0a 20  pOp->p3.    );. 
2a1d0 20 7d 0a 20 20 69 66 28 20 6f 70 66 6c 61 67 73   }.  if( opflags
2a1e0 20 26 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50   & OPFLAG_ISNOOP
2a1f0 20 29 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66   ) break;.#endif
2a200 0a 20 0a 20 20 2f 2a 20 4f 6e 6c 79 20 66 6c 61  . .  /* Only fla
2a210 67 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 73  gs that can be s
2a220 65 74 20 61 72 65 20 53 41 56 45 50 4f 49 53 54  et are SAVEPOIST
2a230 49 4f 4e 20 61 6e 64 20 41 55 58 44 45 4c 45 54  ION and AUXDELET
2a240 45 20 2a 2f 20 0a 20 20 61 73 73 65 72 74 28 20  E */ .  assert( 
2a250 28 70 4f 70 2d 3e 70 35 20 26 20 7e 28 4f 50 46  (pOp->p5 & ~(OPF
2a260 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e  LAG_SAVEPOSITION
2a270 7c 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54  |OPFLAG_AUXDELET
2a280 45 29 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  E))==0 );.  asse
2a290 72 74 28 20 4f 50 46 4c 41 47 5f 53 41 56 45 50  rt( OPFLAG_SAVEP
2a2a0 4f 53 49 54 49 4f 4e 3d 3d 42 54 52 45 45 5f 53  OSITION==BTREE_S
2a2b0 41 56 45 50 4f 53 49 54 49 4f 4e 20 29 3b 0a 20  AVEPOSITION );. 
2a2c0 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f   assert( OPFLAG_
2a2d0 41 55 58 44 45 4c 45 54 45 3d 3d 42 54 52 45 45  AUXDELETE==BTREE
2a2e0 5f 41 55 58 44 45 4c 45 54 45 20 29 3b 0a 0a 23  _AUXDELETE );..#
2a2f0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
2a300 55 47 0a 20 20 69 66 28 20 70 2d 3e 70 46 72 61  UG.  if( p->pFra
2a310 6d 65 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28  me==0 ){.    if(
2a320 20 70 43 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c   pC->isEphemeral
2a330 3d 3d 30 0a 20 20 20 20 20 20 20 20 26 26 20 28  ==0.        && (
2a340 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
2a350 5f 41 55 58 44 45 4c 45 54 45 29 3d 3d 30 0a 20  _AUXDELETE)==0. 
2a360 20 20 20 20 20 20 20 26 26 20 28 70 43 2d 3e 77         && (pC->w
2a370 72 46 6c 61 67 20 26 20 4f 50 46 4c 41 47 5f 46  rFlag & OPFLAG_F
2a380 4f 52 44 45 4c 45 54 45 29 3d 3d 30 0a 20 20 20  ORDELETE)==0.   
2a390 20 20 20 29 7b 0a 20 20 20 20 20 20 6e 45 78 74     ){.      nExt
2a3a0 72 61 44 65 6c 65 74 65 2b 2b 3b 0a 20 20 20 20  raDelete++;.    
2a3b0 7d 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  }.    if( pOp->p
2a3c0 32 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  2 & OPFLAG_NCHAN
2a3d0 47 45 20 29 7b 0a 20 20 20 20 20 20 6e 45 78 74  GE ){.      nExt
2a3e0 72 61 44 65 6c 65 74 65 2d 2d 3b 0a 20 20 20 20  raDelete--;.    
2a3f0 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20  }.  }.#endif..  
2a400 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
2a410 65 44 65 6c 65 74 65 28 70 43 2d 3e 75 63 2e 70  eDelete(pC->uc.p
2a420 43 75 72 73 6f 72 2c 20 70 4f 70 2d 3e 70 35 29  Cursor, pOp->p5)
2a430 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
2a440 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
2a450 45 3b 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73  E;.  pC->seekRes
2a460 75 6c 74 20 3d 20 30 3b 0a 20 20 69 66 28 20 72  ult = 0;.  if( r
2a470 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
2a480 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20  ue_to_error;..  
2a490 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70  /* Invoke the up
2a4a0 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71  date-hook if req
2a4b0 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20  uired. */.  if( 
2a4c0 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47  opflags & OPFLAG
2a4d0 5f 4e 43 48 41 4e 47 45 20 29 7b 0a 20 20 20 20  _NCHANGE ){.    
2a4e0 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20  p->nChange++;.  
2a4f0 20 20 69 66 28 20 64 62 2d 3e 78 55 70 64 61 74    if( db->xUpdat
2a500 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 48 61 73  eCallback && Has
2a510 52 6f 77 69 64 28 70 54 61 62 29 20 29 7b 0a 20  Rowid(pTab) ){. 
2a520 20 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65       db->xUpdate
2a530 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70  Callback(db->pUp
2a540 64 61 74 65 41 72 67 2c 20 53 51 4c 49 54 45 5f  dateArg, SQLITE_
2a550 44 45 4c 45 54 45 2c 20 7a 44 62 2c 20 70 54 61  DELETE, zDb, pTa
2a560 62 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20  b->zName,.      
2a570 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61      pC->movetoTa
2a580 72 67 65 74 29 3b 0a 20 20 20 20 20 20 61 73 73  rget);.      ass
2a590 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20  ert( pC->iDb>=0 
2a5a0 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20  );.    }.  }..  
2a5b0 62 72 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f  break;.}./* Opco
2a5c0 64 65 3a 20 52 65 73 65 74 43 6f 75 6e 74 20 2a  de: ResetCount *
2a5d0 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54   * * * *.**.** T
2a5e0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
2a5f0 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69  change counter i
2a600 73 20 63 6f 70 69 65 64 20 74 6f 20 74 68 65 20  s copied to the 
2a610 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a  database handle.
2a620 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  ** change counte
2a630 72 20 28 72 65 74 75 72 6e 65 64 20 62 79 20 73  r (returned by s
2a640 75 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 73 20  ubsequent calls 
2a650 74 6f 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  to sqlite3_chang
2a660 65 73 28 29 29 2e 0a 2a 2a 20 54 68 65 6e 20 74  es())..** Then t
2a670 68 65 20 56 4d 73 20 69 6e 74 65 72 6e 61 6c 20  he VMs internal 
2a680 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 72  change counter r
2a690 65 73 65 74 73 20 74 6f 20 30 2e 0a 2a 2a 20 54  esets to 0..** T
2a6a0 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74  his is used by t
2a6b0 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e  rigger programs.
2a6c0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65  .*/.case OP_Rese
2a6d0 74 43 6f 75 6e 74 3a 20 7b 0a 20 20 73 71 6c 69  tCount: {.  sqli
2a6e0 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65  te3VdbeSetChange
2a6f0 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65  s(db, p->nChange
2a700 29 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20  );.  p->nChange 
2a710 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 0;.  break;.}.
2a720 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74  ./* Opcode: Sort
2a730 65 72 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20  erCompare P1 P2 
2a740 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69  P3 P4.** Synopsi
2a750 73 3a 20 69 66 20 6b 65 79 28 50 31 29 21 3d 74  s: if key(P1)!=t
2a760 72 69 6d 28 72 5b 50 33 5d 2c 50 34 29 20 67 6f  rim(r[P3],P4) go
2a770 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69  to P2.**.** P1 i
2a780 73 20 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f  s a sorter curso
2a790 72 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  r. This instruct
2a7a0 69 6f 6e 20 63 6f 6d 70 61 72 65 73 20 61 20 70  ion compares a p
2a7b0 72 65 66 69 78 20 6f 66 20 74 68 65 0a 2a 2a 20  refix of the.** 
2a7c0 72 65 63 6f 72 64 20 62 6c 6f 62 20 69 6e 20 72  record blob in r
2a7d0 65 67 69 73 74 65 72 20 50 33 20 61 67 61 69 6e  egister P3 again
2a7e0 73 74 20 61 20 70 72 65 66 69 78 20 6f 66 20 74  st a prefix of t
2a7f0 68 65 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  he entry that .*
2a800 2a 20 74 68 65 20 73 6f 72 74 65 72 20 63 75 72  * the sorter cur
2a810 73 6f 72 20 63 75 72 72 65 6e 74 6c 79 20 70 6f  sor currently po
2a820 69 6e 74 73 20 74 6f 2e 20 20 4f 6e 6c 79 20 74  ints to.  Only t
2a830 68 65 20 66 69 72 73 74 20 50 34 20 66 69 65 6c  he first P4 fiel
2a840 64 73 0a 2a 2a 20 6f 66 20 72 5b 50 33 5d 20 61  ds.** of r[P3] a
2a850 6e 64 20 74 68 65 20 73 6f 72 74 65 72 20 72 65  nd the sorter re
2a860 63 6f 72 64 20 61 72 65 20 63 6f 6d 70 61 72 65  cord are compare
2a870 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68  d..**.** If eith
2a880 65 72 20 50 33 20 6f 72 20 74 68 65 20 73 6f 72  er P3 or the sor
2a890 74 65 72 20 63 6f 6e 74 61 69 6e 73 20 61 20 4e  ter contains a N
2a8a0 55 4c 4c 20 69 6e 20 6f 6e 65 20 6f 66 20 74 68  ULL in one of th
2a8b0 65 69 72 20 73 69 67 6e 69 66 69 63 61 6e 74 0a  eir significant.
2a8c0 2a 2a 20 66 69 65 6c 64 73 20 28 6e 6f 74 20 63  ** fields (not c
2a8d0 6f 75 6e 74 69 6e 67 20 74 68 65 20 50 34 20 66  ounting the P4 f
2a8e0 69 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64  ields at the end
2a8f0 20 77 68 69 63 68 20 61 72 65 20 69 67 6e 6f 72   which are ignor
2a900 65 64 29 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20  ed) then.** the 
2a910 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 73  comparison is as
2a920 73 75 6d 65 64 20 74 6f 20 62 65 20 65 71 75 61  sumed to be equa
2a930 6c 2e 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c 20 74 68  l..**.** Fall th
2a940 72 6f 75 67 68 20 74 6f 20 6e 65 78 74 20 69 6e  rough to next in
2a950 73 74 72 75 63 74 69 6f 6e 20 69 66 20 74 68 65  struction if the
2a960 20 74 77 6f 20 72 65 63 6f 72 64 73 20 63 6f 6d   two records com
2a970 70 61 72 65 20 65 71 75 61 6c 20 74 6f 0a 2a 2a  pare equal to.**
2a980 20 65 61 63 68 20 6f 74 68 65 72 2e 20 20 4a 75   each other.  Ju
2a990 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 79  mp to P2 if they
2a9a0 20 61 72 65 20 64 69 66 66 65 72 65 6e 74 2e 0a   are different..
2a9b0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
2a9c0 72 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 56 64  rCompare: {.  Vd
2a9d0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
2a9e0 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 6e  int res;.  int n
2a9f0 4b 65 79 43 6f 6c 3b 0a 0a 20 20 70 43 20 3d 20  KeyCol;..  pC = 
2aa00 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
2aa10 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  ];.  assert( isS
2aa20 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 61  orter(pC) );.  a
2aa30 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
2aa40 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
2aa50 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
2aa60 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6e 4b 65 79 43  Op->p3];.  nKeyC
2aa70 6f 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a  ol = pOp->p4.i;.
2aa80 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 72 63 20    res = 0;.  rc 
2aa90 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  = sqlite3VdbeSor
2aaa0 74 65 72 43 6f 6d 70 61 72 65 28 70 43 2c 20 70  terCompare(pC, p
2aab0 49 6e 33 2c 20 6e 4b 65 79 43 6f 6c 2c 20 26 72  In3, nKeyCol, &r
2aac0 65 73 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  es);.  VdbeBranc
2aad0 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29  hTaken(res!=0,2)
2aae0 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
2aaf0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2ab00 72 72 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 20  rror;.  if( res 
2ab10 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
2ab20 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 0a  2;.  break;.};..
2ab30 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65  /* Opcode: Sorte
2ab40 72 44 61 74 61 20 50 31 20 50 32 20 50 33 20 2a  rData P1 P2 P3 *
2ab50 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2ab60 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a  r[P2]=data.**.**
2ab70 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69   Write into regi
2ab80 73 74 65 72 20 50 32 20 74 68 65 20 63 75 72 72  ster P2 the curr
2ab90 65 6e 74 20 73 6f 72 74 65 72 20 64 61 74 61 20  ent sorter data 
2aba0 66 6f 72 20 73 6f 72 74 65 72 20 63 75 72 73 6f  for sorter curso
2abb0 72 20 50 31 2e 0a 2a 2a 20 54 68 65 6e 20 63 6c  r P1..** Then cl
2abc0 65 61 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 68  ear the column h
2abd0 65 61 64 65 72 20 63 61 63 68 65 20 6f 6e 20 63  eader cache on c
2abe0 75 72 73 6f 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  ursor P3..**.** 
2abf0 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6e  This opcode is n
2ac00 6f 72 6d 61 6c 6c 79 20 75 73 65 20 74 6f 20 6d  ormally use to m
2ac10 6f 76 65 20 61 20 72 65 63 6f 72 64 20 6f 75 74  ove a record out
2ac20 20 6f 66 20 74 68 65 20 73 6f 72 74 65 72 20 61   of the sorter a
2ac30 6e 64 20 69 6e 74 6f 0a 2a 2a 20 61 20 72 65 67  nd into.** a reg
2ac40 69 73 74 65 72 20 74 68 61 74 20 69 73 20 74 68  ister that is th
2ac50 65 20 73 6f 75 72 63 65 20 66 6f 72 20 61 20 70  e source for a p
2ac60 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73  seudo-table curs
2ac70 6f 72 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  or created using
2ac80 0a 2a 2a 20 4f 70 65 6e 50 73 65 75 64 6f 2e 20  .** OpenPseudo. 
2ac90 20 54 68 61 74 20 70 73 65 75 64 6f 2d 74 61 62   That pseudo-tab
2aca0 6c 65 20 63 75 72 73 6f 72 20 69 73 20 74 68 65  le cursor is the
2acb0 20 6f 6e 65 20 74 68 61 74 20 69 73 20 69 64 65   one that is ide
2acc0 6e 74 69 66 69 65 64 20 62 79 0a 2a 2a 20 70 61  ntified by.** pa
2acd0 72 61 6d 65 74 65 72 20 50 33 2e 20 20 43 6c 65  rameter P3.  Cle
2ace0 61 72 69 6e 67 20 74 68 65 20 50 33 20 63 6f 6c  aring the P3 col
2acf0 75 6d 6e 20 63 61 63 68 65 20 61 73 20 70 61 72  umn cache as par
2ad00 74 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65  t of this opcode
2ad10 20 73 61 76 65 73 0a 2a 2a 20 75 73 20 66 72 6f   saves.** us fro
2ad20 6d 20 68 61 76 69 6e 67 20 74 6f 20 69 73 73 75  m having to issu
2ad30 65 20 61 20 73 65 70 61 72 61 74 65 20 4e 75 6c  e a separate Nul
2ad40 6c 52 6f 77 20 69 6e 73 74 72 75 63 74 69 6f 6e  lRow instruction
2ad50 20 74 6f 20 63 6c 65 61 72 20 74 68 61 74 20 63   to clear that c
2ad60 61 63 68 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ache..*/.case OP
2ad70 5f 53 6f 72 74 65 72 44 61 74 61 3a 20 7b 0a 20  _SorterData: {. 
2ad80 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
2ad90 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ..  pOut = &aMem
2ada0 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 43 20  [pOp->p2];.  pC 
2adb0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
2adc0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69  p1];.  assert( i
2add0 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20  sSorter(pC) );. 
2ade0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
2adf0 65 53 6f 72 74 65 72 52 6f 77 6b 65 79 28 70 43  eSorterRowkey(pC
2ae00 2c 20 70 4f 75 74 29 3b 0a 20 20 61 73 73 65 72  , pOut);.  asser
2ae10 74 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc!=SQLITE_OK
2ae20 20 7c 7c 20 28 70 4f 75 74 2d 3e 66 6c 61 67 73   || (pOut->flags
2ae30 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 20 29 3b 0a   & MEM_Blob) );.
2ae40 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2ae50 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
2ae60 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
2ae70 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
2ae80 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2ae90 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  ;.  p->apCsr[pOp
2aea0 2d 3e 70 33 5d 2d 3e 63 61 63 68 65 53 74 61 74  ->p3]->cacheStat
2aeb0 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
2aec0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
2aed0 20 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61 74 61   Opcode: RowData
2aee0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
2aef0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
2af00 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74  =data.**.** Writ
2af10 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
2af20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  P2 the complete 
2af30 72 6f 77 20 63 6f 6e 74 65 6e 74 20 66 6f 72 20  row content for 
2af40 74 68 65 20 72 6f 77 20 61 74 20 0a 2a 2a 20 77  the row at .** w
2af50 68 69 63 68 20 63 75 72 73 6f 72 20 50 31 20 69  hich cursor P1 i
2af60 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
2af70 74 69 6e 67 2e 0a 2a 2a 20 54 68 65 72 65 20 69  ting..** There i
2af80 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74  s no interpretat
2af90 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e  ion of the data.
2afa0 20 20 0a 2a 2a 20 49 74 20 69 73 20 6a 75 73 74    .** It is just
2afb0 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65   copied onto the
2afc0 20 50 32 20 72 65 67 69 73 74 65 72 20 65 78 61   P2 register exa
2afd0 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69  ctly as .** it i
2afe0 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64  s found in the d
2aff0 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a  atabase file..**
2b000 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31  .** If cursor P1
2b010 20 69 73 20 61 6e 20 69 6e 64 65 78 2c 20 74 68   is an index, th
2b020 65 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 69  en the content i
2b030 73 20 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65  s the key of the
2b040 20 72 6f 77 2e 0a 2a 2a 20 49 66 20 63 75 72 73   row..** If curs
2b050 6f 72 20 50 32 20 69 73 20 61 20 74 61 62 6c 65  or P2 is a table
2b060 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6e 74 65  , then the conte
2b070 6e 74 20 65 78 74 72 61 63 74 65 64 20 69 73 20  nt extracted is 
2b080 74 68 65 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20  the data..**.** 
2b090 49 66 20 74 68 65 20 50 31 20 63 75 72 73 6f 72  If the P1 cursor
2b0a0 20 6d 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e   must be pointin
2b0b0 67 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77  g to a valid row
2b0c0 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77   (not a NULL row
2b0d0 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74  ).** of a real t
2b0e0 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75  able, not a pseu
2b0f0 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  do-table..**.** 
2b100 49 66 20 50 33 21 3d 30 20 74 68 65 6e 20 74 68  If P3!=0 then th
2b110 69 73 20 6f 70 63 6f 64 65 20 69 73 20 61 6c 6c  is opcode is all
2b120 6f 77 65 64 20 74 6f 20 6d 61 6b 65 20 61 6e 20  owed to make an 
2b130 65 70 68 65 6d 65 72 61 6c 20 70 6f 69 6e 74 65  ephemeral pointe
2b140 72 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 64 61  r.** into the da
2b150 74 61 62 61 73 65 20 70 61 67 65 2e 20 20 54 68  tabase page.  Th
2b160 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  at means that th
2b170 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65  e content of the
2b180 20 6f 75 74 70 75 74 0a 2a 2a 20 72 65 67 69 73   output.** regis
2b190 74 65 72 20 77 69 6c 6c 20 62 65 20 69 6e 76 61  ter will be inva
2b1a0 6c 69 64 61 74 65 64 20 61 73 20 73 6f 6f 6e 20  lidated as soon 
2b1b0 61 73 20 74 68 65 20 63 75 72 73 6f 72 20 6d 6f  as the cursor mo
2b1c0 76 65 73 20 2d 20 69 6e 63 6c 75 64 69 6e 67 0a  ves - including.
2b1d0 2a 2a 20 6d 6f 76 65 73 20 63 61 75 73 65 64 20  ** moves caused 
2b1e0 62 79 20 6f 74 68 65 72 20 63 75 72 73 6f 72 73  by other cursors
2b1f0 20 74 68 61 74 20 22 73 61 76 65 22 20 74 68 65   that "save" the
2b200 20 63 75 72 72 65 6e 74 20 63 75 72 73 6f 72 73   current cursors
2b210 0a 2a 2a 20 70 6f 73 69 74 69 6f 6e 20 69 6e 20  .** position in 
2b220 6f 72 64 65 72 20 74 68 61 74 20 74 68 65 79 20  order that they 
2b230 63 61 6e 20 77 72 69 74 65 20 74 6f 20 74 68 65  can write to the
2b240 20 73 61 6d 65 20 74 61 62 6c 65 2e 20 20 49 66   same table.  If
2b250 20 50 33 3d 3d 30 0a 2a 2a 20 74 68 65 6e 20 61   P3==0.** then a
2b260 20 63 6f 70 79 20 6f 66 20 74 68 65 20 64 61 74   copy of the dat
2b270 61 20 69 73 20 6d 61 64 65 20 69 6e 74 6f 20 6d  a is made into m
2b280 65 6d 6f 72 79 2e 20 20 50 33 21 3d 30 20 69 73  emory.  P3!=0 is
2b290 20 66 61 73 74 65 72 2c 20 62 75 74 0a 2a 2a 20   faster, but.** 
2b2a0 50 33 3d 3d 30 20 69 73 20 73 61 66 65 72 2e 0a  P3==0 is safer..
2b2b0 2a 2a 0a 2a 2a 20 49 66 20 50 33 21 3d 30 20 74  **.** If P3!=0 t
2b2c0 68 65 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  hen the content 
2b2d0 6f 66 20 74 68 65 20 50 32 20 72 65 67 69 73 74  of the P2 regist
2b2e0 65 72 20 69 73 20 75 6e 73 75 69 74 61 62 6c 65  er is unsuitable
2b2f0 20 66 6f 72 20 75 73 65 0a 2a 2a 20 69 6e 20 4f   for use.** in O
2b300 50 5f 52 65 73 75 6c 74 20 61 6e 64 20 61 6e 79  P_Result and any
2b310 20 4f 50 5f 52 65 73 75 6c 74 20 77 69 6c 6c 20   OP_Result will 
2b320 69 6e 76 61 6c 69 64 61 74 65 20 74 68 65 20 50  invalidate the P
2b330 32 20 72 65 67 69 73 74 65 72 20 63 6f 6e 74 65  2 register conte
2b340 6e 74 2e 0a 2a 2a 20 54 68 65 20 50 32 20 72 65  nt..** The P2 re
2b350 67 69 73 74 65 72 20 63 6f 6e 74 65 6e 74 20 69  gister content i
2b360 73 20 69 6e 76 61 6c 69 64 61 74 65 64 20 62 79  s invalidated by
2b370 20 6f 70 63 6f 64 65 73 20 6c 69 6b 65 20 4f 50   opcodes like OP
2b380 5f 46 75 6e 63 74 69 6f 6e 20 6f 72 0a 2a 2a 20  _Function or.** 
2b390 62 79 20 61 6e 79 20 75 73 65 20 6f 66 20 61 6e  by any use of an
2b3a0 6f 74 68 65 72 20 63 75 72 73 6f 72 20 70 6f 69  other cursor poi
2b3b0 6e 74 69 6e 67 20 74 6f 20 74 68 65 20 73 61 6d  nting to the sam
2b3c0 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65  e table..*/.case
2b3d0 20 4f 50 5f 52 6f 77 44 61 74 61 3a 20 7b 0a 20   OP_RowData: {. 
2b3e0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
2b3f0 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
2b400 73 72 3b 0a 20 20 75 33 32 20 6e 3b 0a 0a 20 20  sr;.  u32 n;..  
2b410 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
2b420 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 0a  lease(p, pOp);..
2b430 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2b440 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
2b450 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
2b460 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
2b470 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2b480 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
2b490 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
2b4a0 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
2b4b0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73   );.  assert( is
2b4c0 53 6f 72 74 65 72 28 70 43 29 3d 3d 30 20 29 3b  Sorter(pC)==0 );
2b4d0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6e  .  assert( pC->n
2b4e0 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b 0a 20 20 61  ullRow==0 );.  a
2b4f0 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43  ssert( pC->uc.pC
2b500 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 70 43  ursor!=0 );.  pC
2b510 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75  rsr = pC->uc.pCu
2b520 72 73 6f 72 3b 0a 0a 20 20 2f 2a 20 54 68 65 20  rsor;..  /* The 
2b530 4f 50 5f 52 6f 77 44 61 74 61 20 6f 70 63 6f 64  OP_RowData opcod
2b540 65 73 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77  es always follow
2b550 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72   OP_NotExists or
2b560 0a 20 20 2a 2a 20 4f 50 5f 53 65 65 6b 52 6f 77  .  ** OP_SeekRow
2b570 69 64 20 6f 72 20 4f 50 5f 52 65 77 69 6e 64 2f  id or OP_Rewind/
2b580 4f 70 5f 4e 65 78 74 20 77 69 74 68 20 6e 6f 20  Op_Next with no 
2b590 69 6e 74 65 72 76 65 6e 69 6e 67 20 69 6e 73 74  intervening inst
2b5a0 72 75 63 74 69 6f 6e 73 0a 20 20 2a 2a 20 74 68  ructions.  ** th
2b5b0 61 74 20 6d 69 67 68 74 20 69 6e 76 61 6c 69 64  at might invalid
2b5c0 61 74 65 20 74 68 65 20 63 75 72 73 6f 72 2e 0a  ate the cursor..
2b5d0 20 20 2a 2a 20 49 66 20 74 68 69 73 20 77 68 65    ** If this whe
2b5e0 72 65 20 6e 6f 74 20 74 68 65 20 63 61 73 65 2c  re not the case,
2b5f0 20 6f 6e 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f   on of the follo
2b600 77 69 6e 67 20 61 73 73 65 72 74 28 29 73 0a 20  wing assert()s. 
2b610 20 2a 2a 20 77 6f 75 6c 64 20 66 61 69 6c 2e 20   ** would fail. 
2b620 20 53 68 6f 75 6c 64 20 74 68 69 73 20 65 76 65   Should this eve
2b630 72 20 63 68 61 6e 67 65 20 28 62 65 63 61 75 73  r change (becaus
2b640 65 20 6f 66 20 63 68 61 6e 67 65 73 20 69 6e 20  e of changes in 
2b650 74 68 65 20 63 6f 64 65 0a 20 20 2a 2a 20 67 65  the code.  ** ge
2b660 6e 65 72 61 74 6f 72 29 20 74 68 65 6e 20 74 68  nerator) then th
2b670 65 20 66 69 78 20 77 6f 75 6c 64 20 62 65 20 74  e fix would be t
2b680 6f 20 69 6e 73 65 72 74 20 61 20 63 61 6c 6c 20  o insert a call 
2b690 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56  to.  ** sqlite3V
2b6a0 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
2b6b0 29 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  )..  */.  assert
2b6c0 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
2b6d0 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73  veto==0 );.  ass
2b6e0 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
2b6f0 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70  eCursorIsValid(p
2b700 43 72 73 72 29 20 29 3b 0a 23 69 66 20 30 20 20  Crsr) );.#if 0  
2b710 2f 2a 20 4e 6f 74 20 72 65 71 75 69 72 65 64 20  /* Not required 
2b720 64 75 65 20 74 6f 20 74 68 65 20 70 72 65 76 69  due to the previ
2b730 6f 75 73 20 74 6f 20 61 73 73 65 72 74 28 29 20  ous to assert() 
2b740 73 74 61 74 65 6d 65 6e 74 73 20 2a 2f 0a 20 20  statements */.  
2b750 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
2b760 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29  CursorMoveto(pC)
2b770 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  ;.  if( rc!=SQLI
2b780 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
2b790 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2b7a0 0a 23 65 6e 64 69 66 0a 0a 20 20 6e 20 3d 20 73  .#endif..  n = s
2b7b0 71 6c 69 74 65 33 42 74 72 65 65 50 61 79 6c 6f  qlite3BtreePaylo
2b7c0 61 64 53 69 7a 65 28 70 43 72 73 72 29 3b 0a 20  adSize(pCrsr);. 
2b7d0 20 69 66 28 20 6e 3e 28 75 33 32 29 64 62 2d 3e   if( n>(u32)db->
2b7e0 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
2b7f0 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
2b800 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
2b810 0a 20 20 7d 0a 20 20 74 65 73 74 63 61 73 65 28  .  }.  testcase(
2b820 20 6e 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20   n==0 );.  rc = 
2b830 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72  sqlite3VdbeMemFr
2b840 6f 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20 30  omBtree(pCrsr, 0
2b850 2c 20 6e 2c 20 70 4f 75 74 29 3b 0a 20 20 69 66  , n, pOut);.  if
2b860 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
2b870 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2b880 20 20 69 66 28 20 21 70 4f 70 2d 3e 70 33 20 29    if( !pOp->p3 )
2b890 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28   Deephemeralize(
2b8a0 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f  pOut);.  UPDATE_
2b8b0 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
2b8c0 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  t);.  REGISTER_T
2b8d0 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f  RACE(pOp->p2, pO
2b8e0 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
2b8f0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 69  ./* Opcode: Rowi
2b900 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  d P1 P2 * * *.**
2b910 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
2b920 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 53 74 6f  =rowid.**.** Sto
2b930 72 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  re in register P
2b940 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69  2 an integer whi
2b950 63 68 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66  ch is the key of
2b960 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79   the table entry
2b970 20 74 68 61 74 0a 2a 2a 20 50 31 20 69 73 20 63   that.** P1 is c
2b980 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74  urrently point t
2b990 6f 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20  o..**.** P1 can 
2b9a0 62 65 20 65 69 74 68 65 72 20 61 6e 20 6f 72 64  be either an ord
2b9b0 69 6e 61 72 79 20 74 61 62 6c 65 20 6f 72 20 61  inary table or a
2b9c0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20   virtual table. 
2b9d0 20 54 68 65 72 65 20 75 73 65 64 20 74 6f 0a 2a   There used to.*
2b9e0 2a 20 62 65 20 61 20 73 65 70 61 72 61 74 65 20  * be a separate 
2b9f0 4f 50 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64 65  OP_VRowid opcode
2ba00 20 66 6f 72 20 75 73 65 20 77 69 74 68 20 76 69   for use with vi
2ba10 72 74 75 61 6c 20 74 61 62 6c 65 73 2c 20 62 75  rtual tables, bu
2ba20 74 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70  t this.** one op
2ba30 63 6f 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66  code now works f
2ba40 6f 72 20 62 6f 74 68 20 74 61 62 6c 65 20 74 79  or both table ty
2ba50 70 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  pes..*/.case OP_
2ba60 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20  Rowid: {        
2ba70 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
2ba80 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
2ba90 20 2a 70 43 3b 0a 20 20 69 36 34 20 76 3b 0a 20   *pC;.  i64 v;. 
2baa0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
2bab0 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71  Vtab;.  const sq
2bac0 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
2bad0 6f 64 75 6c 65 3b 0a 0a 20 20 70 4f 75 74 20 3d  odule;..  pOut =
2bae0 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
2baf0 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72  p, pOp);.  asser
2bb00 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
2bb10 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
2bb20 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
2bb30 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
2bb40 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
2bb50 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
2bb60 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52 54  ->eCurType!=CURT
2bb70 59 50 45 5f 50 53 45 55 44 4f 20 7c 7c 20 70 43  YPE_PSEUDO || pC
2bb80 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 69  ->nullRow );.  i
2bb90 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29  f( pC->nullRow )
2bba0 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  {.    pOut->flag
2bbb0 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
2bbc0 20 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65    break;.  }else
2bbd0 20 69 66 28 20 70 43 2d 3e 64 65 66 65 72 72 65   if( pC->deferre
2bbe0 64 4d 6f 76 65 74 6f 20 29 7b 0a 20 20 20 20 76  dMoveto ){.    v
2bbf0 20 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72   = pC->movetoTar
2bc00 67 65 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  get;.#ifndef SQL
2bc10 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2bc20 54 41 42 4c 45 0a 20 20 7d 65 6c 73 65 20 69 66  TABLE.  }else if
2bc30 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
2bc40 43 55 52 54 59 50 45 5f 56 54 41 42 20 29 7b 0a  CURTYPE_VTAB ){.
2bc50 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
2bc60 75 63 2e 70 56 43 75 72 21 3d 30 20 29 3b 0a 20  uc.pVCur!=0 );. 
2bc70 20 20 20 70 56 74 61 62 20 3d 20 70 43 2d 3e 75     pVtab = pC->u
2bc80 63 2e 70 56 43 75 72 2d 3e 70 56 74 61 62 3b 0a  c.pVCur->pVtab;.
2bc90 20 20 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56      pModule = pV
2bca0 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20  tab->pModule;.  
2bcb0 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c    assert( pModul
2bcc0 65 2d 3e 78 52 6f 77 69 64 20 29 3b 0a 20 20 20  e->xRowid );.   
2bcd0 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
2bce0 52 6f 77 69 64 28 70 43 2d 3e 75 63 2e 70 56 43  Rowid(pC->uc.pVC
2bcf0 75 72 2c 20 26 76 29 3b 0a 20 20 20 20 73 71 6c  ur, &v);.    sql
2bd00 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72  ite3VtabImportEr
2bd10 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rmsg(p, pVtab);.
2bd20 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74      if( rc ) got
2bd30 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2bd40 72 72 6f 72 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  rror;.#endif /* 
2bd50 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2bd60 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 20 20 7d 65  UALTABLE */.  }e
2bd70 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
2bd80 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
2bd90 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
2bda0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
2bdb0 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  uc.pCursor!=0 );
2bdc0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
2bdd0 33 56 64 62 65 43 75 72 73 6f 72 52 65 73 74 6f  3VdbeCursorResto
2bde0 72 65 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20  re(pC);.    if( 
2bdf0 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
2be00 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
2be10 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f    if( pC->nullRo
2be20 77 20 29 7b 0a 20 20 20 20 20 20 70 4f 75 74 2d  w ){.      pOut-
2be30 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  >flags = MEM_Nul
2be40 6c 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  l;.      break;.
2be50 20 20 20 20 7d 0a 20 20 20 20 76 20 3d 20 73 71      }.    v = sq
2be60 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65 67 65  lite3BtreeIntege
2be70 72 4b 65 79 28 70 43 2d 3e 75 63 2e 70 43 75 72  rKey(pC->uc.pCur
2be80 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  sor);.  }.  pOut
2be90 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65  ->u.i = v;.  bre
2bea0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2beb0 3a 20 4e 75 6c 6c 52 6f 77 20 50 31 20 2a 20 2a  : NullRow P1 * *
2bec0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20   * *.**.** Move 
2bed0 74 68 65 20 63 75 72 73 6f 72 20 50 31 20 74 6f  the cursor P1 to
2bee0 20 61 20 6e 75 6c 6c 20 72 6f 77 2e 20 20 41 6e   a null row.  An
2bef0 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 65 72  y OP_Column oper
2bf00 61 74 69 6f 6e 73 0a 2a 2a 20 74 68 61 74 20 6f  ations.** that o
2bf10 63 63 75 72 20 77 68 69 6c 65 20 74 68 65 20 63  ccur while the c
2bf20 75 72 73 6f 72 20 69 73 20 6f 6e 20 74 68 65 20  ursor is on the 
2bf30 6e 75 6c 6c 20 72 6f 77 20 77 69 6c 6c 20 61 6c  null row will al
2bf40 77 61 79 73 0a 2a 2a 20 77 72 69 74 65 20 61 20  ways.** write a 
2bf50 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
2bf60 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a 20 20 56 64  _NullRow: {.  Vd
2bf70 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20  beCursor *pC;.. 
2bf80 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
2bf90 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
2bfa0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
2bfb0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
2bfc0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2bfd0 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 2d 3e   pC!=0 );.  pC->
2bfe0 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70  nullRow = 1;.  p
2bff0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
2c000 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
2c010 69 66 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  if( pC->eCurType
2c020 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
2c030 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
2c040 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30  C->uc.pCursor!=0
2c050 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 42   );.    sqlite3B
2c060 74 72 65 65 43 6c 65 61 72 43 75 72 73 6f 72 28  treeClearCursor(
2c070 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b  pC->uc.pCursor);
2c080 0a 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49  .  }.#ifdef SQLI
2c090 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70  TE_DEBUG.  if( p
2c0a0 43 2d 3e 73 65 65 6b 4f 70 3d 3d 30 20 29 20 70  C->seekOp==0 ) p
2c0b0 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 4e  C->seekOp = OP_N
2c0c0 75 6c 6c 52 6f 77 3b 0a 23 65 6e 64 69 66 0a 20  ullRow;.#endif. 
2c0d0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2c0e0 63 6f 64 65 3a 20 53 65 65 6b 45 6e 64 20 50 31  code: SeekEnd P1
2c0f0 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50   * * * *.**.** P
2c100 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
2c110 31 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20  1 at the end of 
2c120 74 68 65 20 62 74 72 65 65 20 66 6f 72 20 74 68  the btree for th
2c130 65 20 70 75 72 70 6f 73 65 20 6f 66 0a 2a 2a 20  e purpose of.** 
2c140 61 70 70 65 6e 64 69 6e 67 20 61 20 6e 65 77 20  appending a new 
2c150 65 6e 74 72 79 20 6f 6e 74 6f 20 74 68 65 20 62  entry onto the b
2c160 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 74 20 69  tree..**.** It i
2c170 73 20 61 73 73 75 6d 65 64 20 74 68 61 74 20 74  s assumed that t
2c180 68 65 20 63 75 72 73 6f 72 20 69 73 20 75 73 65  he cursor is use
2c190 64 20 6f 6e 6c 79 20 66 6f 72 20 61 70 70 65 6e  d only for appen
2c1a0 64 69 6e 67 20 61 6e 64 20 73 6f 0a 2a 2a 20 69  ding and so.** i
2c1b0 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  f the cursor is 
2c1c0 76 61 6c 69 64 2c 20 74 68 65 6e 20 74 68 65 20  valid, then the 
2c1d0 63 75 72 73 6f 72 20 6d 75 73 74 20 61 6c 72 65  cursor must alre
2c1e0 61 64 79 20 62 65 20 70 6f 69 6e 74 69 6e 67 0a  ady be pointing.
2c1f0 2a 2a 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  ** at the end of
2c200 20 74 68 65 20 62 74 72 65 65 20 61 6e 64 20 73   the btree and s
2c210 6f 20 6e 6f 20 63 68 61 6e 67 65 73 20 61 72 65  o no changes are
2c220 20 6d 61 64 65 20 74 6f 0a 2a 2a 20 74 68 65 20   made to.** the 
2c230 63 75 72 73 6f 72 2e 0a 2a 2f 0a 2f 2a 20 4f 70  cursor..*/./* Op
2c240 63 6f 64 65 3a 20 4c 61 73 74 20 50 31 20 50 32  code: Last P1 P2
2c250 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
2c260 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65   next use of the
2c270 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e   Rowid or Column
2c280 20 6f 72 20 50 72 65 76 20 69 6e 73 74 72 75 63   or Prev instruc
2c290 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20  tion for P1 .** 
2c2a0 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68  will refer to th
2c2b0 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20  e last entry in 
2c2c0 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
2c2d0 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20  le or index..** 
2c2e0 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  If the table or 
2c2f0 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 61  index is empty a
2c300 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75  nd P2>0, then ju
2c310 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
2c320 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69  o P2..** If P2 i
2c330 73 20 30 20 6f 72 20 69 66 20 74 68 65 20 74 61  s 0 or if the ta
2c340 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
2c350 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20  not empty, fall 
2c360 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68  through.** to th
2c370 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74  e following inst
2c380 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ruction..**.** T
2c390 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65  his opcode leave
2c3a0 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e  s the cursor con
2c3b0 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20  figured to move 
2c3c0 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65 72  in reverse order
2c3d0 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e  ,.** from the en
2c3e0 64 20 74 6f 77 61 72 64 20 74 68 65 20 62 65 67  d toward the beg
2c3f0 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65  inning.  In othe
2c400 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72  r words, the cur
2c410 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67  sor is.** config
2c420 75 72 65 64 20 74 6f 20 75 73 65 20 50 72 65 76  ured to use Prev
2c430 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2f 0a 63  , not Next..*/.c
2c440 61 73 65 20 4f 50 5f 53 65 65 6b 45 6e 64 3a 0a  ase OP_SeekEnd:.
2c450 63 61 73 65 20 4f 50 5f 4c 61 73 74 3a 20 7b 20  case OP_Last: { 
2c460 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
2c470 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
2c480 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
2c490 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
2c4a0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
2c4b0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
2c4c0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
2c4d0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
2c4e0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2c4f0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
2c500 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
2c510 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
2c520 52 45 45 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  REE );.  pCrsr =
2c530 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b   pC->uc.pCursor;
2c540 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 73  .  res = 0;.  as
2c550 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29  sert( pCrsr!=0 )
2c560 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
2c570 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b  DEBUG.  pC->seek
2c580 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  Op = pOp->opcode
2c590 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70  ;.#endif.  if( p
2c5a0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53  Op->opcode==OP_S
2c5b0 65 65 6b 45 6e 64 20 29 7b 0a 20 20 20 20 61 73  eekEnd ){.    as
2c5c0 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 30  sert( pOp->p2==0
2c5d0 20 29 3b 0a 20 20 20 20 70 43 2d 3e 73 65 65 6b   );.    pC->seek
2c5e0 52 65 73 75 6c 74 20 3d 20 2d 31 3b 0a 20 20 20  Result = -1;.   
2c5f0 20 69 66 28 20 73 71 6c 69 74 65 33 42 74 72 65   if( sqlite3Btre
2c600 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 4e 4e  eCursorIsValidNN
2c610 28 70 43 72 73 72 29 20 29 7b 0a 20 20 20 20 20  (pCrsr) ){.     
2c620 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
2c630 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  }.  rc = sqlite3
2c640 42 74 72 65 65 4c 61 73 74 28 70 43 72 73 72 2c  BtreeLast(pCrsr,
2c650 20 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6e 75   &res);.  pC->nu
2c660 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b  llRow = (u8)res;
2c670 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  .  pC->deferredM
2c680 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d  oveto = 0;.  pC-
2c690 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
2c6a0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66  ACHE_STALE;.  if
2c6b0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
2c6c0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2c6d0 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3e 30 20    if( pOp->p2>0 
2c6e0 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  ){.    VdbeBranc
2c6f0 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29  hTaken(res!=0,2)
2c700 3b 0a 20 20 20 20 69 66 28 20 72 65 73 20 29 20  ;.    if( res ) 
2c710 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
2c720 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2c730 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 53 6d  ./* Opcode: IfSm
2c740 61 6c 6c 65 72 20 50 31 20 50 32 20 50 33 20 2a  aller P1 P2 P3 *
2c750 20 2a 0a 2a 2a 0a 2a 2a 20 45 73 74 69 6d 61 74   *.**.** Estimat
2c760 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
2c770 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c  rows in the tabl
2c780 65 20 50 31 2e 20 20 4a 75 6d 70 20 74 6f 20 50  e P1.  Jump to P
2c790 32 20 69 66 20 74 68 61 74 0a 2a 2a 20 65 73 74  2 if that.** est
2c7a0 69 6d 61 74 65 20 69 73 20 6c 65 73 73 20 74 68  imate is less th
2c7b0 61 6e 20 61 70 70 72 6f 78 69 6d 61 74 65 6c 79  an approximately
2c7c0 20 32 2a 2a 28 30 2e 31 2a 50 33 29 2e 0a 2a 2f   2**(0.1*P3)..*/
2c7d0 0a 63 61 73 65 20 4f 50 5f 49 66 53 6d 61 6c 6c  .case OP_IfSmall
2c7e0 65 72 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  er: {        /* 
2c7f0 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75  jump */.  VdbeCu
2c800 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
2c810 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69  rsor *pCrsr;.  i
2c820 6e 74 20 72 65 73 3b 0a 20 20 69 36 34 20 73 7a  nt res;.  i64 sz
2c830 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
2c840 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
2c850 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
2c860 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
2c870 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2c880 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
2c890 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70  pCrsr = pC->uc.p
2c8a0 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74  Cursor;.  assert
2c8b0 28 20 70 43 72 73 72 20 29 3b 0a 20 20 72 63 20  ( pCrsr );.  rc 
2c8c0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 69  = sqlite3BtreeFi
2c8d0 72 73 74 28 70 43 72 73 72 2c 20 26 72 65 73 29  rst(pCrsr, &res)
2c8e0 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
2c8f0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2c900 72 72 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 3d  rror;.  if( res=
2c910 3d 30 20 29 7b 0a 20 20 20 20 73 7a 20 3d 20 73  =0 ){.    sz = s
2c920 71 6c 69 74 65 33 42 74 72 65 65 52 6f 77 43 6f  qlite3BtreeRowCo
2c930 75 6e 74 45 73 74 28 70 43 72 73 72 29 3b 0a 20  untEst(pCrsr);. 
2c940 20 20 20 69 66 28 20 41 4c 57 41 59 53 28 73 7a     if( ALWAYS(sz
2c950 3e 3d 30 29 20 26 26 20 73 71 6c 69 74 65 33 4c  >=0) && sqlite3L
2c960 6f 67 45 73 74 28 28 75 36 34 29 73 7a 29 3c 70  ogEst((u64)sz)<p
2c970 4f 70 2d 3e 70 33 20 29 20 72 65 73 20 3d 20 31  Op->p3 ) res = 1
2c980 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e  ;.  }.  VdbeBran
2c990 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32  chTaken(res!=0,2
2c9a0 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 20 67  );.  if( res ) g
2c9b0 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
2c9c0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20    break;.}.../* 
2c9d0 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 53 6f  Opcode: SorterSo
2c9e0 72 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  rt P1 P2 * * *.*
2c9f0 2a 0a 2a 2a 20 41 66 74 65 72 20 61 6c 6c 20 72  *.** After all r
2ca00 65 63 6f 72 64 73 20 68 61 76 65 20 62 65 65 6e  ecords have been
2ca10 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74   inserted into t
2ca20 68 65 20 53 6f 72 74 65 72 20 6f 62 6a 65 63 74  he Sorter object
2ca30 0a 2a 2a 20 69 64 65 6e 74 69 66 69 65 64 20 62  .** identified b
2ca40 79 20 50 31 2c 20 69 6e 76 6f 6b 65 20 74 68 69  y P1, invoke thi
2ca50 73 20 6f 70 63 6f 64 65 20 74 6f 20 61 63 74 75  s opcode to actu
2ca60 61 6c 6c 79 20 64 6f 20 74 68 65 20 73 6f 72 74  ally do the sort
2ca70 69 6e 67 2e 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  ing..** Jump to 
2ca80 50 32 20 69 66 20 74 68 65 72 65 20 61 72 65 20  P2 if there are 
2ca90 6e 6f 20 72 65 63 6f 72 64 73 20 74 6f 20 62 65  no records to be
2caa0 20 73 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54   sorted..**.** T
2cab0 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 61 6e  his opcode is an
2cac0 20 61 6c 69 61 73 20 66 6f 72 20 4f 50 5f 53 6f   alias for OP_So
2cad0 72 74 20 61 6e 64 20 4f 50 5f 52 65 77 69 6e 64  rt and OP_Rewind
2cae0 20 74 68 61 74 20 69 73 20 75 73 65 64 0a 2a 2a   that is used.**
2caf0 20 66 6f 72 20 53 6f 72 74 65 72 20 6f 62 6a 65   for Sorter obje
2cb00 63 74 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  cts..*/./* Opcod
2cb10 65 3a 20 53 6f 72 74 20 50 31 20 50 32 20 2a 20  e: Sort P1 P2 * 
2cb20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  * *.**.** This o
2cb30 70 63 6f 64 65 20 64 6f 65 73 20 65 78 61 63 74  pcode does exact
2cb40 6c 79 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e  ly the same thin
2cb50 67 20 61 73 20 4f 50 5f 52 65 77 69 6e 64 20 65  g as OP_Rewind e
2cb60 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 69 74  xcept that.** it
2cb70 20 69 6e 63 72 65 6d 65 6e 74 73 20 61 6e 20 75   increments an u
2cb80 6e 64 6f 63 75 6d 65 6e 74 65 64 20 67 6c 6f 62  ndocumented glob
2cb90 61 6c 20 76 61 72 69 61 62 6c 65 20 75 73 65 64  al variable used
2cba0 20 66 6f 72 20 74 65 73 74 69 6e 67 2e 0a 2a 2a   for testing..**
2cbb0 0a 2a 2a 20 53 6f 72 74 69 6e 67 20 69 73 20 61  .** Sorting is a
2cbc0 63 63 6f 6d 70 6c 69 73 68 65 64 20 62 79 20 77  ccomplished by w
2cbd0 72 69 74 69 6e 67 20 72 65 63 6f 72 64 73 20 69  riting records i
2cbe0 6e 74 6f 20 61 20 73 6f 72 74 69 6e 67 20 69 6e  nto a sorting in
2cbf0 64 65 78 2c 0a 2a 2a 20 74 68 65 6e 20 72 65 77  dex,.** then rew
2cc00 69 6e 64 69 6e 67 20 74 68 61 74 20 69 6e 64 65  inding that inde
2cc10 78 20 61 6e 64 20 70 6c 61 79 69 6e 67 20 69 74  x and playing it
2cc20 20 62 61 63 6b 20 66 72 6f 6d 20 62 65 67 69 6e   back from begin
2cc30 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e 64 2e 20  ning to.** end. 
2cc40 20 57 65 20 75 73 65 20 74 68 65 20 4f 50 5f 53   We use the OP_S
2cc50 6f 72 74 20 6f 70 63 6f 64 65 20 69 6e 73 74 65  ort opcode inste
2cc60 61 64 20 6f 66 20 4f 50 5f 52 65 77 69 6e 64 20  ad of OP_Rewind 
2cc70 74 6f 20 64 6f 20 74 68 65 0a 2a 2a 20 72 65 77  to do the.** rew
2cc80 69 6e 64 69 6e 67 20 73 6f 20 74 68 61 74 20 74  inding so that t
2cc90 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  he global variab
2cca0 6c 65 20 77 69 6c 6c 20 62 65 20 69 6e 63 72 65  le will be incre
2ccb0 6d 65 6e 74 65 64 20 61 6e 64 0a 2a 2a 20 72 65  mented and.** re
2ccc0 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20 63  gression tests c
2ccd0 61 6e 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65  an determine whe
2cce0 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
2ccf0 6f 70 74 69 6d 69 7a 65 72 20 69 73 0a 2a 2a 20  optimizer is.** 
2cd00 63 6f 72 72 65 63 74 6c 79 20 6f 70 74 69 6d 69  correctly optimi
2cd10 7a 69 6e 67 20 6f 75 74 20 73 6f 72 74 73 2e 0a  zing out sorts..
2cd20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
2cd30 72 53 6f 72 74 3a 20 20 20 20 2f 2a 20 6a 75 6d  rSort:    /* jum
2cd40 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  p */.case OP_Sor
2cd50 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  t: {        /* j
2cd60 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  ump */.#ifdef SQ
2cd70 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69  LITE_TEST.  sqli
2cd80 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 2b 2b  te3_sort_count++
2cd90 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72  ;.  sqlite3_sear
2cda0 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65 6e 64  ch_count--;.#end
2cdb0 69 66 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72  if.  p->aCounter
2cdc0 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54  [SQLITE_STMTSTAT
2cdd0 55 53 5f 53 4f 52 54 5d 2b 2b 3b 0a 20 20 2f 2a  US_SORT]++;.  /*
2cde0 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e   Fall through in
2cdf0 74 6f 20 4f 50 5f 52 65 77 69 6e 64 20 2a 2f 0a  to OP_Rewind */.
2ce00 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 77  }./* Opcode: Rew
2ce10 69 6e 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ind P1 P2 * * *.
2ce20 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75  **.** The next u
2ce30 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20  se of the Rowid 
2ce40 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78  or Column or Nex
2ce50 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f  t instruction fo
2ce60 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65  r P1 .** will re
2ce70 66 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74  fer to the first
2ce80 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61   entry in the da
2ce90 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
2cea0 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65  index..** If the
2ceb0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
2cec0 69 73 20 65 6d 70 74 79 2c 20 6a 75 6d 70 20 69  is empty, jump i
2ced0 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
2cee0 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c  ..** If the tabl
2cef0 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f  e or index is no
2cf00 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68  t empty, fall th
2cf10 72 6f 75 67 68 20 74 6f 20 74 68 65 20 66 6f 6c  rough to the fol
2cf20 6c 6f 77 69 6e 67 20 0a 2a 2a 20 69 6e 73 74 72  lowing .** instr
2cf30 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  uction..**.** Th
2cf40 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73  is opcode leaves
2cf50 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66   the cursor conf
2cf60 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69  igured to move i
2cf70 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c  n forward order,
2cf80 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67  .** from the beg
2cf90 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68  inning toward th
2cfa0 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72  e end.  In other
2cfb0 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73   words, the curs
2cfc0 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  or is.** configu
2cfd0 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c  red to use Next,
2cfe0 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2f 0a 63 61   not Prev..*/.ca
2cff0 73 65 20 4f 50 5f 52 65 77 69 6e 64 3a 20 7b 20  se OP_Rewind: { 
2d000 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
2d010 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
2d020 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
2d030 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
2d040 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
2d050 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
2d060 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
2d070 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2d080 70 35 3d 3d 30 20 29 3b 0a 20 20 70 43 20 3d 20  p5==0 );.  pC = 
2d090 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
2d0a0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
2d0b0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
2d0c0 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 28 70  isSorter(pC)==(p
2d0d0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53  Op->opcode==OP_S
2d0e0 6f 72 74 65 72 53 6f 72 74 29 20 29 3b 0a 20 20  orterSort) );.  
2d0f0 72 65 73 20 3d 20 31 3b 0a 23 69 66 64 65 66 20  res = 1;.#ifdef 
2d100 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70  SQLITE_DEBUG.  p
2d110 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 52  C->seekOp = OP_R
2d120 65 77 69 6e 64 3b 0a 23 65 6e 64 69 66 0a 20 20  ewind;.#endif.  
2d130 69 66 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  if( isSorter(pC)
2d140 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
2d150 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 52 65  ite3VdbeSorterRe
2d160 77 69 6e 64 28 70 43 2c 20 26 72 65 73 29 3b 0a  wind(pC, &res);.
2d170 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
2d180 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
2d190 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
2d1a0 20 29 3b 0a 20 20 20 20 70 43 72 73 72 20 3d 20   );.    pCrsr = 
2d1b0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a  pC->uc.pCursor;.
2d1c0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 72 73      assert( pCrs
2d1d0 72 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  r );.    rc = sq
2d1e0 6c 69 74 65 33 42 74 72 65 65 46 69 72 73 74 28  lite3BtreeFirst(
2d1f0 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20  pCrsr, &res);.  
2d200 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
2d210 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43  veto = 0;.    pC
2d220 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
2d230 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d  CACHE_STALE;.  }
2d240 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
2d250 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2d260 72 6f 72 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  ror;.  pC->nullR
2d270 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20  ow = (u8)res;.  
2d280 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
2d290 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e  0 && pOp->p2<p->
2d2a0 6e 4f 70 20 29 3b 0a 20 20 56 64 62 65 42 72 61  nOp );.  VdbeBra
2d2b0 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c  nchTaken(res!=0,
2d2c0 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 20  2);.  if( res ) 
2d2d0 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
2d2e0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2d2f0 4f 70 63 6f 64 65 3a 20 4e 65 78 74 20 50 31 20  Opcode: Next P1 
2d300 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
2d310 2a 20 41 64 76 61 6e 63 65 20 63 75 72 73 6f 72  * Advance cursor
2d320 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70   P1 so that it p
2d330 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6e 65 78  oints to the nex
2d340 74 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20  t key/data pair 
2d350 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20  in its.** table 
2d360 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68  or index.  If th
2d370 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20  ere are no more 
2d380 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20  key/value pairs 
2d390 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
2d3a0 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c  h.** to the foll
2d3b0 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f  owing instructio
2d3c0 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 63  n.  But if the c
2d3d0 75 72 73 6f 72 20 61 64 76 61 6e 63 65 20 77 61  ursor advance wa
2d3e0 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a  s successful,.**
2d3f0 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
2d400 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  y to P2..**.** T
2d410 68 65 20 4e 65 78 74 20 6f 70 63 6f 64 65 20 69  he Next opcode i
2d420 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 66 6f 6c  s only valid fol
2d430 6c 6f 77 69 6e 67 20 61 6e 20 53 65 65 6b 47 54  lowing an SeekGT
2d440 2c 20 53 65 65 6b 47 45 2c 20 6f 72 0a 2a 2a 20  , SeekGE, or.** 
2d450 4f 50 5f 52 65 77 69 6e 64 20 6f 70 63 6f 64 65  OP_Rewind opcode
2d460 20 75 73 65 64 20 74 6f 20 70 6f 73 69 74 69 6f   used to positio
2d470 6e 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 4e  n the cursor.  N
2d480 65 78 74 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77  ext is not allow
2d490 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77 20  ed.** to follow 
2d4a0 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20  SeekLT, SeekLE, 
2d4b0 6f 72 20 4f 50 5f 4c 61 73 74 2e 0a 2a 2a 0a 2a  or OP_Last..**.*
2d4c0 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20  * The P1 cursor 
2d4d0 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20 72 65  must be for a re
2d4e0 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20  al table, not a 
2d4f0 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 50  pseudo-table.  P
2d500 31 20 6d 75 73 74 20 68 61 76 65 0a 2a 2a 20 62  1 must have.** b
2d510 65 65 6e 20 6f 70 65 6e 65 64 20 70 72 69 6f 72  een opened prior
2d520 20 74 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20   to this opcode 
2d530 6f 72 20 74 68 65 20 70 72 6f 67 72 61 6d 20 77  or the program w
2d540 69 6c 6c 20 73 65 67 66 61 75 6c 74 2e 0a 2a 2a  ill segfault..**
2d550 0a 2a 2a 20 54 68 65 20 50 33 20 76 61 6c 75 65  .** The P3 value
2d560 20 69 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68   is a hint to th
2d570 65 20 62 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e  e btree implemen
2d580 74 61 74 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31  tation. If P3==1
2d590 2c 20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20  , that.** means 
2d5a0 50 31 20 69 73 20 61 6e 20 53 51 4c 20 69 6e 64  P1 is an SQL ind
2d5b0 65 78 20 61 6e 64 20 74 68 61 74 20 74 68 69 73  ex and that this
2d5c0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 75   instruction cou
2d5d0 6c 64 20 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20  ld have been.** 
2d5e0 6f 6d 69 74 74 65 64 20 69 66 20 74 68 61 74 20  omitted if that 
2d5f0 69 6e 64 65 78 20 68 61 64 20 62 65 65 6e 20 75  index had been u
2d600 6e 69 71 75 65 2e 20 20 50 33 20 69 73 20 75 73  nique.  P3 is us
2d610 75 61 6c 6c 79 20 30 2e 20 20 50 33 20 69 73 0a  ually 0.  P3 is.
2d620 2a 2a 20 61 6c 77 61 79 73 20 65 69 74 68 65 72  ** always either
2d630 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50   0 or 1..**.** P
2d640 34 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20 74  4 is always of t
2d650 79 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e 20  ype P4_ADVANCE. 
2d660 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69  The function poi
2d670 6e 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a  nter points to.*
2d680 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65  * sqlite3BtreeNe
2d690 78 74 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  xt()..**.** If P
2d6a0 35 20 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e  5 is positive an
2d6b0 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  d the jump is ta
2d6c0 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20  ken, then event 
2d6d0 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65  counter.** numbe
2d6e0 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72  r P5-1 in the pr
2d6f0 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
2d700 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e   is incremented.
2d710 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
2d720 20 50 72 65 76 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f   Prev.*/./* Opco
2d730 64 65 3a 20 50 72 65 76 20 50 31 20 50 32 20 50  de: Prev P1 P2 P
2d740 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 61  3 P4 P5.**.** Ba
2d750 63 6b 20 75 70 20 63 75 72 73 6f 72 20 50 31 20  ck up cursor P1 
2d760 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74  so that it point
2d770 73 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75  s to the previou
2d780 73 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20  s key/data pair 
2d790 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20  in its.** table 
2d7a0 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68  or index.  If th
2d7b0 65 72 65 20 69 73 20 6e 6f 20 70 72 65 76 69 6f  ere is no previo
2d7c0 75 73 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69  us key/value pai
2d7d0 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  rs then fall thr
2d7e0 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66  ough.** to the f
2d7f0 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63  ollowing instruc
2d800 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68  tion.  But if th
2d810 65 20 63 75 72 73 6f 72 20 62 61 63 6b 75 70 20  e cursor backup 
2d820 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a  was successful,.
2d830 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  ** jump immediat
2d840 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ely to P2..**.**
2d850 0a 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70 63  .** The Prev opc
2d860 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69  ode is only vali
2d870 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20 53  d following an S
2d880 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 6f  eekLT, SeekLE, o
2d890 72 0a 2a 2a 20 4f 50 5f 4c 61 73 74 20 6f 70 63  r.** OP_Last opc
2d8a0 6f 64 65 20 75 73 65 64 20 74 6f 20 70 6f 73 69  ode used to posi
2d8b0 74 69 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 2e  tion the cursor.
2d8c0 20 20 50 72 65 76 20 69 73 20 6e 6f 74 20 61 6c    Prev is not al
2d8d0 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c  lowed.** to foll
2d8e0 6f 77 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47  ow SeekGT, SeekG
2d8f0 45 2c 20 6f 72 20 4f 50 5f 52 65 77 69 6e 64 2e  E, or OP_Rewind.
2d900 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75  .**.** The P1 cu
2d910 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72  rsor must be for
2d920 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e   a real table, n
2d930 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  ot a pseudo-tabl
2d940 65 2e 20 20 49 66 20 50 31 20 69 73 0a 2a 2a 20  e.  If P1 is.** 
2d950 6e 6f 74 20 6f 70 65 6e 20 74 68 65 6e 20 74 68  not open then th
2d960 65 20 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e  e behavior is un
2d970 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54  defined..**.** T
2d980 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 61  he P3 value is a
2d990 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74 72   hint to the btr
2d9a0 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ee implementatio
2d9b0 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68 61  n. If P3==1, tha
2d9c0 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69 73  t.** means P1 is
2d9d0 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61 6e   an SQL index an
2d9e0 64 20 74 68 61 74 20 74 68 69 73 20 69 6e 73 74  d that this inst
2d9f0 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61  ruction could ha
2da00 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74  ve been.** omitt
2da10 65 64 20 69 66 20 74 68 61 74 20 69 6e 64 65 78  ed if that index
2da20 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75 65   had been unique
2da30 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c 79  .  P3 is usually
2da40 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c   0.  P3 is.** al
2da50 77 61 79 73 20 65 69 74 68 65 72 20 30 20 6f 72  ways either 0 or
2da60 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20   1..**.** P4 is 
2da70 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20 50  always of type P
2da80 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66  4_ADVANCE. The f
2da90 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20  unction pointer 
2daa0 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c  points to.** sql
2dab0 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75  ite3BtreePreviou
2dac0 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  s()..**.** If P5
2dad0 20 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64   is positive and
2dae0 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
2daf0 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63  en, then event c
2db00 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72  ounter.** number
2db10 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65   P5-1 in the pre
2db20 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
2db30 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a  is incremented..
2db40 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  */./* Opcode: So
2db50 72 74 65 72 4e 65 78 74 20 50 31 20 50 32 20 2a  rterNext P1 P2 *
2db60 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73   * P5.**.** This
2db70 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75   opcode works ju
2db80 73 74 20 6c 69 6b 65 20 4f 50 5f 4e 65 78 74 20  st like OP_Next 
2db90 65 78 63 65 70 74 20 74 68 61 74 20 50 31 20 6d  except that P1 m
2dba0 75 73 74 20 62 65 20 61 0a 2a 2a 20 73 6f 72 74  ust be a.** sort
2dbb0 65 72 20 6f 62 6a 65 63 74 20 66 6f 72 20 77 68  er object for wh
2dbc0 69 63 68 20 74 68 65 20 4f 50 5f 53 6f 72 74 65  ich the OP_Sorte
2dbd0 72 53 6f 72 74 20 6f 70 63 6f 64 65 20 68 61 73  rSort opcode has
2dbe0 20 62 65 65 6e 0a 2a 2a 20 69 6e 76 6f 6b 65 64   been.** invoked
2dbf0 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 61  .  This opcode a
2dc00 64 76 61 6e 63 65 73 20 74 68 65 20 63 75 72 73  dvances the curs
2dc10 6f 72 20 74 6f 20 74 68 65 20 6e 65 78 74 20 73  or to the next s
2dc20 6f 72 74 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2c  orted.** record,
2dc30 20 6f 72 20 6a 75 6d 70 73 20 74 6f 20 50 32 20   or jumps to P2 
2dc40 69 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  if there are no 
2dc50 6d 6f 72 65 20 73 6f 72 74 65 64 20 72 65 63 6f  more sorted reco
2dc60 72 64 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  rds..*/.case OP_
2dc70 53 6f 72 74 65 72 4e 65 78 74 3a 20 7b 20 20 2f  SorterNext: {  /
2dc80 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65  * jump */.  Vdbe
2dc90 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 70  Cursor *pC;..  p
2dca0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
2dcb0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2dcc0 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b   isSorter(pC) );
2dcd0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
2dce0 64 62 65 53 6f 72 74 65 72 4e 65 78 74 28 64 62  dbeSorterNext(db
2dcf0 2c 20 70 43 29 3b 0a 20 20 67 6f 74 6f 20 6e 65  , pC);.  goto ne
2dd00 78 74 5f 74 61 69 6c 3b 0a 63 61 73 65 20 4f 50  xt_tail;.case OP
2dd10 5f 50 72 65 76 3a 20 20 20 20 20 20 20 20 20 20  _Prev:          
2dd20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
2dd30 4f 50 5f 4e 65 78 74 3a 20 20 20 20 20 20 20 20  OP_Next:        
2dd40 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61    /* jump */.  a
2dd50 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
2dd60 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
2dd70 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
2dd80 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 41 72 72  ert( pOp->p5<Arr
2dd90 61 79 53 69 7a 65 28 70 2d 3e 61 43 6f 75 6e 74  aySize(p->aCount
2dda0 65 72 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  er) );.  pC = p-
2ddb0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
2ddc0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
2ddd0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
2dde0 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
2ddf0 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
2de00 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
2de10 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
2de20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
2de30 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 20 7c  pcode!=OP_Next |
2de40 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e  | pOp->p4.xAdvan
2de50 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65  ce==sqlite3Btree
2de60 4e 65 78 74 20 29 3b 0a 20 20 61 73 73 65 72 74  Next );.  assert
2de70 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f  ( pOp->opcode!=O
2de80 50 5f 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e 70  P_Prev || pOp->p
2de90 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69  4.xAdvance==sqli
2dea0 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73  te3BtreePrevious
2deb0 20 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4e 65   );..  /* The Ne
2dec0 78 74 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c  xt opcode is onl
2ded0 79 20 75 73 65 64 20 61 66 74 65 72 20 53 65 65  y used after See
2dee0 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20 52 65 77  kGT, SeekGE, Rew
2def0 69 6e 64 2c 20 61 6e 64 20 46 6f 75 6e 64 2e 0a  ind, and Found..
2df00 20 20 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70    ** The Prev op
2df10 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75 73 65  code is only use
2df20 64 20 61 66 74 65 72 20 53 65 65 6b 4c 54 2c 20  d after SeekLT, 
2df30 53 65 65 6b 4c 45 2c 20 61 6e 64 20 4c 61 73 74  SeekLE, and Last
2df40 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  . */.  assert( p
2df50 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e  Op->opcode!=OP_N
2df60 65 78 74 0a 20 20 20 20 20 20 20 7c 7c 20 70 43  ext.       || pC
2df70 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65  ->seekOp==OP_See
2df80 6b 47 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f  kGT || pC->seekO
2df90 70 3d 3d 4f 50 5f 53 65 65 6b 47 45 0a 20 20 20  p==OP_SeekGE.   
2dfa0 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f      || pC->seekO
2dfb0 70 3d 3d 4f 50 5f 52 65 77 69 6e 64 20 7c 7c 20  p==OP_Rewind || 
2dfc0 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 46  pC->seekOp==OP_F
2dfd0 6f 75 6e 64 20 0a 20 20 20 20 20 20 20 7c 7c 20  ound .       || 
2dfe0 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 4e  pC->seekOp==OP_N
2dff0 75 6c 6c 52 6f 77 7c 7c 20 70 43 2d 3e 73 65 65  ullRow|| pC->see
2e000 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 52 6f 77 69  kOp==OP_SeekRowi
2e010 64 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  d);.  assert( pO
2e020 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72  p->opcode!=OP_Pr
2e030 65 76 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d  ev.       || pC-
2e040 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b  >seekOp==OP_Seek
2e050 4c 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70  LT || pC->seekOp
2e060 3d 3d 4f 50 5f 53 65 65 6b 4c 45 0a 20 20 20 20  ==OP_SeekLE.    
2e070 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70     || pC->seekOp
2e080 3d 3d 4f 50 5f 4c 61 73 74 20 0a 20 20 20 20 20  ==OP_Last .     
2e090 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d    || pC->seekOp=
2e0a0 3d 4f 50 5f 4e 75 6c 6c 52 6f 77 29 3b 0a 0a 20  =OP_NullRow);.. 
2e0b0 20 72 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 78 41   rc = pOp->p4.xA
2e0c0 64 76 61 6e 63 65 28 70 43 2d 3e 75 63 2e 70 43  dvance(pC->uc.pC
2e0d0 75 72 73 6f 72 2c 20 70 4f 70 2d 3e 70 33 29 3b  ursor, pOp->p3);
2e0e0 0a 6e 65 78 74 5f 74 61 69 6c 3a 0a 20 20 70 43  .next_tail:.  pC
2e0f0 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
2e100 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 56  CACHE_STALE;.  V
2e110 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
2e120 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 2c 32 29 3b  c==SQLITE_OK,2);
2e130 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
2e140 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 70 43 2d 3e  E_OK ){.    pC->
2e150 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20  nullRow = 0;.   
2e160 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70   p->aCounter[pOp
2e170 2d 3e 70 35 5d 2b 2b 3b 0a 23 69 66 64 65 66 20  ->p5]++;.#ifdef 
2e180 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20  SQLITE_TEST.    
2e190 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63  sqlite3_search_c
2e1a0 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20  ount++;.#endif. 
2e1b0 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
2e1c0 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72  p2_and_check_for
2e1d0 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d 0a  _interrupt;.  }.
2e1e0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
2e1f0 5f 44 4f 4e 45 20 29 20 67 6f 74 6f 20 61 62 6f  _DONE ) goto abo
2e200 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2e210 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f  .  rc = SQLITE_O
2e220 4b 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  K;.  pC->nullRow
2e230 20 3d 20 31 3b 0a 20 20 67 6f 74 6f 20 63 68 65   = 1;.  goto che
2e240 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74  ck_for_interrupt
2e250 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2e260 49 64 78 49 6e 73 65 72 74 20 50 31 20 50 32 20  IdxInsert P1 P2 
2e270 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
2e280 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32 5d 0a  psis: key=r[P2].
2e290 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50  **.** Register P
2e2a0 32 20 68 6f 6c 64 73 20 61 6e 20 53 51 4c 20 69  2 holds an SQL i
2e2b0 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20 75 73  ndex key made us
2e2c0 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52  ing the.** MakeR
2e2d0 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f  ecord instructio
2e2e0 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65  ns.  This opcode
2e2f0 20 77 72 69 74 65 73 20 74 68 61 74 20 6b 65 79   writes that key
2e300 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69 6e 64  .** into the ind
2e310 65 78 20 50 31 2e 20 20 44 61 74 61 20 66 6f 72  ex P1.  Data for
2e320 20 74 68 65 20 65 6e 74 72 79 20 69 73 20 6e 69   the entry is ni
2e330 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69  l..**.** If P4 i
2e340 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
2e350 20 69 74 20 69 73 20 74 68 65 20 6e 75 6d 62 65   it is the numbe
2e360 72 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20 74  r of values in t
2e370 68 65 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 6b  he unpacked.** k
2e380 65 79 20 6f 66 20 72 65 67 28 50 32 29 2e 20 20  ey of reg(P2).  
2e390 49 6e 20 74 68 61 74 20 63 61 73 65 2c 20 50 33  In that case, P3
2e3a0 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66   is the index of
2e3b0 20 74 68 65 20 66 69 72 73 74 20 72 65 67 69 73   the first regis
2e3c0 74 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20 75  ter.** for the u
2e3d0 6e 70 61 63 6b 65 64 20 6b 65 79 2e 20 20 54 68  npacked key.  Th
2e3e0 65 20 61 76 61 69 6c 61 62 69 6c 69 74 79 20 6f  e availability o
2e3f0 66 20 74 68 65 20 75 6e 70 61 63 6b 65 64 20 6b  f the unpacked k
2e400 65 79 20 63 61 6e 20 73 6f 6d 65 74 69 6d 65 73  ey can sometimes
2e410 0a 2a 2a 20 62 65 20 61 6e 20 6f 70 74 69 6d 69  .** be an optimi
2e420 7a 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66  zation..**.** If
2e430 20 50 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c   P5 has the OPFL
2e440 41 47 5f 41 50 50 45 4e 44 20 62 69 74 20 73 65  AG_APPEND bit se
2e450 74 2c 20 74 68 61 74 20 69 73 20 61 20 68 69 6e  t, that is a hin
2e460 74 20 74 6f 20 74 68 65 20 62 2d 74 72 65 65 20  t to the b-tree 
2e470 6c 61 79 65 72 0a 2a 2a 20 74 68 61 74 20 74 68  layer.** that th
2e480 69 73 20 69 6e 73 65 72 74 20 69 73 20 6c 69 6b  is insert is lik
2e490 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70  ely to be an app
2e4a0 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  end..**.** If P5
2e4b0 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f   has the OPFLAG_
2e4c0 4e 43 48 41 4e 47 45 20 62 69 74 20 73 65 74 2c  NCHANGE bit set,
2e4d0 20 74 68 65 6e 20 74 68 65 20 63 68 61 6e 67 65   then the change
2e4e0 20 63 6f 75 6e 74 65 72 20 69 73 0a 2a 2a 20 69   counter is.** i
2e4f0 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68  ncremented by th
2e500 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  is instruction. 
2e510 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e   If the OPFLAG_N
2e520 43 48 41 4e 47 45 20 62 69 74 20 69 73 20 63 6c  CHANGE bit is cl
2e530 65 61 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65  ear,.** then the
2e540 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20   change counter 
2e550 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2a  is unchanged..**
2e560 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
2e570 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20  G_USESEEKRESULT 
2e580 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65  flag of P5 is se
2e590 74 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  t, the implement
2e5a0 61 74 69 6f 6e 20 6d 69 67 68 74 0a 2a 2a 20 72  ation might.** r
2e5b0 75 6e 20 66 61 73 74 65 72 20 62 79 20 61 76 6f  un faster by avo
2e5c0 69 64 69 6e 67 20 61 6e 20 75 6e 6e 65 63 65 73  iding an unneces
2e5d0 73 61 72 79 20 73 65 65 6b 20 6f 6e 20 63 75 72  sary seek on cur
2e5e0 73 6f 72 20 50 31 2e 20 20 48 6f 77 65 76 65 72  sor P1.  However
2e5f0 2c 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f  ,.** the OPFLAG_
2e600 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c  USESEEKRESULT fl
2e610 61 67 20 6d 75 73 74 20 6f 6e 6c 79 20 62 65 20  ag must only be 
2e620 73 65 74 20 69 66 20 74 68 65 72 65 20 68 61 76  set if there hav
2e630 65 20 62 65 65 6e 20 6e 6f 20 70 72 69 6f 72 0a  e been no prior.
2e640 2a 2a 20 73 65 65 6b 73 20 6f 6e 20 74 68 65 20  ** seeks on the 
2e650 63 75 72 73 6f 72 20 6f 72 20 69 66 20 74 68 65  cursor or if the
2e660 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 73 65 65   most recent see
2e670 6b 20 75 73 65 64 20 61 20 6b 65 79 20 65 71 75  k used a key equ
2e680 69 76 61 6c 65 6e 74 0a 2a 2a 20 74 6f 20 50 32  ivalent.** to P2
2e690 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  . .**.** This in
2e6a0 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77  struction only w
2e6b0 6f 72 6b 73 20 66 6f 72 20 69 6e 64 69 63 65 73  orks for indices
2e6c0 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e  .  The equivalen
2e6d0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a  t instruction.**
2e6e0 20 66 6f 72 20 74 61 62 6c 65 73 20 69 73 20 4f   for tables is O
2e6f0 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20  P_Insert..*/./* 
2e700 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 49 6e  Opcode: SorterIn
2e710 73 65 72 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  sert P1 P2 * * *
2e720 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
2e730 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65  y=r[P2].**.** Re
2e740 67 69 73 74 65 72 20 50 32 20 68 6f 6c 64 73 20  gister P2 holds 
2e750 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 6b 65 79  an SQL index key
2e760 20 6d 61 64 65 20 75 73 69 6e 67 20 74 68 65 0a   made using the.
2e770 2a 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e  ** MakeRecord in
2e780 73 74 72 75 63 74 69 6f 6e 73 2e 20 20 54 68 69  structions.  Thi
2e790 73 20 6f 70 63 6f 64 65 20 77 72 69 74 65 73 20  s opcode writes 
2e7a0 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f  that key.** into
2e7b0 20 74 68 65 20 73 6f 72 74 65 72 20 50 31 2e 20   the sorter P1. 
2e7c0 20 44 61 74 61 20 66 6f 72 20 74 68 65 20 65 6e   Data for the en
2e7d0 74 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2f 0a 63  try is nil..*/.c
2e7e0 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 49 6e 73  ase OP_SorterIns
2e7f0 65 72 74 3a 20 20 20 20 20 20 20 2f 2a 20 69 6e  ert:       /* in
2e800 32 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  2 */.case OP_Idx
2e810 49 6e 73 65 72 74 3a 20 7b 20 20 20 20 20 20 20  Insert: {       
2e820 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62   /* in2 */.  Vdb
2e830 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
2e840 74 72 65 65 50 61 79 6c 6f 61 64 20 78 3b 0a 0a  treePayload x;..
2e850 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2e860 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
2e870 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
2e880 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
2e890 70 2d 3e 70 31 5d 3b 0a 20 20 73 71 6c 69 74 65  p->p1];.  sqlite
2e8a0 33 56 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f  3VdbeIncrWriteCo
2e8b0 75 6e 74 65 72 28 70 2c 20 70 43 29 3b 0a 20 20  unter(p, pC);.  
2e8c0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
2e8d0 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72  .  assert( isSor
2e8e0 74 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f  ter(pC)==(pOp->o
2e8f0 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72  pcode==OP_Sorter
2e900 49 6e 73 65 72 74 29 20 29 3b 0a 20 20 70 49 6e  Insert) );.  pIn
2e910 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
2e920 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  2];.  assert( pI
2e930 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n2->flags & MEM_
2e940 42 6c 6f 62 20 29 3b 0a 20 20 69 66 28 20 70 4f  Blob );.  if( pO
2e950 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e  p->p5 & OPFLAG_N
2e960 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61  CHANGE ) p->nCha
2e970 6e 67 65 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28  nge++;.  assert(
2e980 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
2e990 55 52 54 59 50 45 5f 42 54 52 45 45 20 7c 7c 20  URTYPE_BTREE || 
2e9a0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2e9b0 53 6f 72 74 65 72 49 6e 73 65 72 74 20 29 3b 0a  SorterInsert );.
2e9c0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
2e9d0 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 72 63  Table==0 );.  rc
2e9e0 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49   = ExpandBlob(pI
2e9f0 6e 32 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  n2);.  if( rc ) 
2ea00 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2ea10 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 70  o_error;.  if( p
2ea20 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53  Op->opcode==OP_S
2ea30 6f 72 74 65 72 49 6e 73 65 72 74 20 29 7b 0a 20  orterInsert ){. 
2ea40 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
2ea50 64 62 65 53 6f 72 74 65 72 57 72 69 74 65 28 70  dbeSorterWrite(p
2ea60 43 2c 20 70 49 6e 32 29 3b 0a 20 20 7d 65 6c 73  C, pIn2);.  }els
2ea70 65 7b 0a 20 20 20 20 78 2e 6e 4b 65 79 20 3d 20  e{.    x.nKey = 
2ea80 70 49 6e 32 2d 3e 6e 3b 0a 20 20 20 20 78 2e 70  pIn2->n;.    x.p
2ea90 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 7a 3b 0a 20  Key = pIn2->z;. 
2eaa0 20 20 20 78 2e 61 4d 65 6d 20 3d 20 61 4d 65 6d     x.aMem = aMem
2eab0 20 2b 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20   + pOp->p3;.    
2eac0 78 2e 6e 4d 65 6d 20 3d 20 28 75 31 36 29 70 4f  x.nMem = (u16)pO
2ead0 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 72 63 20  p->p4.i;.    rc 
2eae0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e  = sqlite3BtreeIn
2eaf0 73 65 72 74 28 70 43 2d 3e 75 63 2e 70 43 75 72  sert(pC->uc.pCur
2eb00 73 6f 72 2c 20 26 78 2c 0a 20 20 20 20 20 20 20  sor, &x,.       
2eb10 20 20 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50    (pOp->p5 & (OP
2eb20 46 4c 41 47 5f 41 50 50 45 4e 44 7c 4f 50 46 4c  FLAG_APPEND|OPFL
2eb30 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 29  AG_SAVEPOSITION)
2eb40 29 2c 20 0a 20 20 20 20 20 20 20 20 28 28 70 4f  ), .        ((pO
2eb50 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55  p->p5 & OPFLAG_U
2eb60 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20  SESEEKRESULT) ? 
2eb70 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a  pC->seekResult :
2eb80 20 30 29 0a 20 20 20 20 20 20 20 20 29 3b 0a 20   0).        );. 
2eb90 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64     assert( pC->d
2eba0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
2ebb0 20 29 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68   );.    pC->cach
2ebc0 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
2ebd0 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 69 66 28  STALE;.  }.  if(
2ebe0 20 72 63 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f   rc) goto abort_
2ebf0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
2ec00 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2ec10 6f 64 65 3a 20 49 64 78 44 65 6c 65 74 65 20 50  ode: IdxDelete P
2ec20 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
2ec30 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
2ec40 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20  2@P3].**.** The 
2ec50 63 6f 6e 74 65 6e 74 20 6f 66 20 50 33 20 72 65  content of P3 re
2ec60 67 69 73 74 65 72 73 20 73 74 61 72 74 69 6e 67  gisters starting
2ec70 20 61 74 20 72 65 67 69 73 74 65 72 20 50 32 20   at register P2 
2ec80 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70 61 63  form.** an unpac
2ec90 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 54  ked index key. T
2eca0 68 69 73 20 6f 70 63 6f 64 65 20 72 65 6d 6f 76  his opcode remov
2ecb0 65 73 20 74 68 61 74 20 65 6e 74 72 79 20 66 72  es that entry fr
2ecc0 6f 6d 20 74 68 65 20 0a 2a 2a 20 69 6e 64 65 78  om the .** index
2ecd0 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f   opened by curso
2ece0 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P1..*/.case OP
2ecf0 5f 49 64 78 44 65 6c 65 74 65 3a 20 7b 0a 20 20  _IdxDelete: {.  
2ed00 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
2ed10 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
2ed20 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  r;.  int res;.  
2ed30 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72  UnpackedRecord r
2ed40 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
2ed50 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 61 73 73 65  ->p3>0 );.  asse
2ed60 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26  rt( pOp->p2>0 &&
2ed70 20 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33   pOp->p2+pOp->p3
2ed80 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
2ed90 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
2eda0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2edb0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
2edc0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
2edd0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
2ede0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2edf0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
2ee00 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
2ee10 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
2ee20 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   );.  sqlite3Vdb
2ee30 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e 74 65  eIncrWriteCounte
2ee40 72 28 70 2c 20 70 43 29 3b 0a 20 20 70 43 72 73  r(p, pC);.  pCrs
2ee50 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  r = pC->uc.pCurs
2ee60 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  or;.  assert( pC
2ee70 72 73 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  rsr!=0 );.  asse
2ee80 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29  rt( pOp->p5==0 )
2ee90 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d  ;.  r.pKeyInfo =
2eea0 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20   pC->pKeyInfo;. 
2eeb0 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36   r.nField = (u16
2eec0 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 72 2e 64 65  )pOp->p3;.  r.de
2eed0 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20  fault_rc = 0;.  
2eee0 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70  r.aMem = &aMem[p
2eef0 4f 70 2d 3e 70 32 5d 3b 0a 20 20 72 63 20 3d 20  Op->p2];.  rc = 
2ef00 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
2ef10 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72  toUnpacked(pCrsr
2ef20 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73  , &r, 0, 0, &res
2ef30 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
2ef40 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2ef50 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 72 65 73  error;.  if( res
2ef60 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  ==0 ){.    rc = 
2ef70 73 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65  sqlite3BtreeDele
2ef80 74 65 28 70 43 72 73 72 2c 20 42 54 52 45 45 5f  te(pCrsr, BTREE_
2ef90 41 55 58 44 45 4c 45 54 45 29 3b 0a 20 20 20 20  AUXDELETE);.    
2efa0 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
2efb0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2efc0 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  ;.  }.  assert( 
2efd0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
2efe0 74 6f 3d 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 63  to==0 );.  pC->c
2eff0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
2f000 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e  HE_STALE;.  pC->
2f010 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 30 3b 0a  seekResult = 0;.
2f020 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2f030 70 63 6f 64 65 3a 20 44 65 66 65 72 72 65 64 53  pcode: DeferredS
2f040 65 65 6b 20 50 31 20 2a 20 50 33 20 50 34 20 2a  eek P1 * P3 P4 *
2f050 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 4d 6f  .** Synopsis: Mo
2f060 76 65 20 50 33 20 74 6f 20 50 31 2e 72 6f 77 69  ve P3 to P1.rowi
2f070 64 20 69 66 20 6e 65 65 64 65 64 0a 2a 2a 0a 2a  d if needed.**.*
2f080 2a 20 50 31 20 69 73 20 61 6e 20 6f 70 65 6e 20  * P1 is an open 
2f090 69 6e 64 65 78 20 63 75 72 73 6f 72 20 61 6e 64  index cursor and
2f0a0 20 50 33 20 69 73 20 61 20 63 75 72 73 6f 72 20   P3 is a cursor 
2f0b0 6f 6e 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  on the correspon
2f0c0 64 69 6e 67 0a 2a 2a 20 74 61 62 6c 65 2e 20 20  ding.** table.  
2f0d0 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73  This opcode does
2f0e0 20 61 20 64 65 66 65 72 72 65 64 20 73 65 65 6b   a deferred seek
2f0f0 20 6f 66 20 74 68 65 20 50 33 20 74 61 62 6c 65   of the P3 table
2f100 20 63 75 72 73 6f 72 0a 2a 2a 20 74 6f 20 74 68   cursor.** to th
2f110 65 20 72 6f 77 20 74 68 61 74 20 63 6f 72 72 65  e row that corre
2f120 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 63 75  sponds to the cu
2f130 72 72 65 6e 74 20 72 6f 77 20 6f 66 20 50 31 2e  rrent row of P1.
2f140 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61  .**.** This is a
2f150 20 64 65 66 65 72 72 65 64 20 73 65 65 6b 2e 20   deferred seek. 
2f160 20 4e 6f 74 68 69 6e 67 20 61 63 74 75 61 6c 6c   Nothing actuall
2f170 79 20 68 61 70 70 65 6e 73 20 75 6e 74 69 6c 0a  y happens until.
2f180 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  ** the cursor is
2f190 20 75 73 65 64 20 74 6f 20 72 65 61 64 20 61 20   used to read a 
2f1a0 72 65 63 6f 72 64 2e 20 20 54 68 61 74 20 77 61  record.  That wa
2f1b0 79 2c 20 69 66 20 6e 6f 20 72 65 61 64 73 0a 2a  y, if no reads.*
2f1c0 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75 6e 6e 65  * occur, no unne
2f1d0 63 65 73 73 61 72 79 20 49 2f 4f 20 68 61 70 70  cessary I/O happ
2f1e0 65 6e 73 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61  ens..**.** P4 ma
2f1f0 79 20 62 65 20 61 6e 20 61 72 72 61 79 20 6f 66  y be an array of
2f200 20 69 6e 74 65 67 65 72 73 20 28 74 79 70 65 20   integers (type 
2f210 50 34 5f 49 4e 54 41 52 52 41 59 29 20 63 6f 6e  P4_INTARRAY) con
2f220 74 61 69 6e 69 6e 67 0a 2a 2a 20 6f 6e 65 20 65  taining.** one e
2f230 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 63 6f  ntry for each co
2f240 6c 75 6d 6e 20 69 6e 20 74 68 65 20 50 33 20 74  lumn in the P3 t
2f250 61 62 6c 65 2e 20 20 49 66 20 61 72 72 61 79 20  able.  If array 
2f260 65 6e 74 72 79 20 61 28 69 29 0a 2a 2a 20 69 73  entry a(i).** is
2f270 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
2f280 72 65 61 64 69 6e 67 20 63 6f 6c 75 6d 6e 20 61  reading column a
2f290 28 69 29 2d 31 20 66 72 6f 6d 20 63 75 72 73 6f  (i)-1 from curso
2f2a0 72 20 50 33 20 69 73 20 0a 2a 2a 20 65 71 75 69  r P3 is .** equi
2f2b0 76 61 6c 65 6e 74 20 74 6f 20 70 65 72 66 6f 72  valent to perfor
2f2c0 6d 69 6e 67 20 74 68 65 20 64 65 66 65 72 72 65  ming the deferre
2f2d0 64 20 73 65 65 6b 20 61 6e 64 20 74 68 65 6e 20  d seek and then 
2f2e0 72 65 61 64 69 6e 67 20 63 6f 6c 75 6d 6e 20 69  reading column i
2f2f0 20 0a 2a 2a 20 66 72 6f 6d 20 50 31 2e 20 20 54   .** from P1.  T
2f300 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  his information 
2f310 69 73 20 73 74 6f 72 65 64 20 69 6e 20 50 33 20  is stored in P3 
2f320 61 6e 64 20 75 73 65 64 20 74 6f 20 72 65 64 69  and used to redi
2f330 72 65 63 74 0a 2a 2a 20 72 65 61 64 73 20 61 67  rect.** reads ag
2f340 61 69 6e 73 74 20 50 33 20 6f 76 65 72 20 74 6f  ainst P3 over to
2f350 20 50 31 2c 20 74 68 75 73 20 70 6f 73 73 69 62   P1, thus possib
2f360 6c 79 20 61 76 6f 69 64 69 6e 67 20 74 68 65 20  ly avoiding the 
2f370 6e 65 65 64 20 74 6f 0a 2a 2a 20 73 65 65 6b 20  need to.** seek 
2f380 61 6e 64 20 72 65 61 64 20 63 75 72 73 6f 72 20  and read cursor 
2f390 50 33 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  P3..*/./* Opcode
2f3a0 3a 20 49 64 78 52 6f 77 69 64 20 50 31 20 50 32  : IdxRowid P1 P2
2f3b0 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
2f3c0 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a  is: r[P2]=rowid.
2f3d0 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f  **.** Write into
2f3e0 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 20   register P2 an 
2f3f0 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73  integer which is
2f400 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20   the last entry 
2f410 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 61 74  in the record at
2f420 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 74  .** the end of t
2f430 68 65 20 69 6e 64 65 78 20 6b 65 79 20 70 6f 69  he index key poi
2f440 6e 74 65 64 20 74 6f 20 62 79 20 63 75 72 73 6f  nted to by curso
2f450 72 20 50 31 2e 20 20 54 68 69 73 20 69 6e 74 65  r P1.  This inte
2f460 67 65 72 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a  ger should be.**
2f470 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
2f480 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 6f  e table entry to
2f490 20 77 68 69 63 68 20 74 68 69 73 20 69 6e 64 65   which this inde
2f4a0 78 20 65 6e 74 72 79 20 70 6f 69 6e 74 73 2e 0a  x entry points..
2f4b0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
2f4c0 52 6f 77 69 64 2c 20 4d 61 6b 65 52 65 63 6f 72  Rowid, MakeRecor
2f4d0 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65  d..*/.case OP_De
2f4e0 66 65 72 72 65 64 53 65 65 6b 3a 0a 63 61 73 65  ferredSeek:.case
2f4f0 20 4f 50 5f 49 64 78 52 6f 77 69 64 3a 20 7b 20   OP_IdxRowid: { 
2f500 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
2f510 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  2 */.  VdbeCurso
2f520 72 20 2a 70 43 3b 20 20 20 20 20 20 20 20 20 20  r *pC;          
2f530 20 20 20 2f 2a 20 54 68 65 20 50 31 20 69 6e 64     /* The P1 ind
2f540 65 78 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 56  ex cursor */.  V
2f550 64 62 65 43 75 72 73 6f 72 20 2a 70 54 61 62 43  dbeCursor *pTabC
2f560 75 72 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ur;        /* Th
2f570 65 20 50 32 20 74 61 62 6c 65 20 63 75 72 73 6f  e P2 table curso
2f580 72 20 28 4f 50 5f 44 65 66 65 72 72 65 64 53 65  r (OP_DeferredSe
2f590 65 6b 20 6f 6e 6c 79 29 20 2a 2f 0a 20 20 69 36  ek only) */.  i6
2f5a0 34 20 72 6f 77 69 64 3b 20 20 20 20 20 20 20 20  4 rowid;        
2f5b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 77            /* Row
2f5c0 69 64 20 74 68 61 74 20 50 31 20 63 75 72 72 65  id that P1 curre
2f5d0 6e 74 20 70 6f 69 6e 74 73 20 74 6f 20 2a 2f 0a  nt points to */.
2f5e0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2f5f0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
2f600 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
2f610 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
2f620 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2f630 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
2f640 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
2f650 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
2f660 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  E );.  assert( p
2f670 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30  C->uc.pCursor!=0
2f680 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
2f690 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a  ->isTable==0 );.
2f6a0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
2f6b0 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
2f6c0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 21 70 43  );.  assert( !pC
2f6d0 2d 3e 6e 75 6c 6c 52 6f 77 20 7c 7c 20 70 4f 70  ->nullRow || pOp
2f6e0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
2f6f0 52 6f 77 69 64 20 29 3b 0a 0a 20 20 2f 2a 20 54  Rowid );..  /* T
2f700 68 65 20 49 64 78 52 6f 77 69 64 20 61 6e 64 20  he IdxRowid and 
2f710 53 65 65 6b 20 6f 70 63 6f 64 65 73 20 61 72 65  Seek opcodes are
2f720 20 63 6f 6d 62 69 6e 65 64 20 62 65 63 61 75 73   combined becaus
2f730 65 20 6f 66 20 74 68 65 20 63 6f 6d 6d 6f 6e 61  e of the commona
2f740 6c 69 74 79 0a 20 20 2a 2a 20 6f 66 20 73 71 6c  lity.  ** of sql
2f750 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 52 65  ite3VdbeCursorRe
2f760 73 74 6f 72 65 28 29 20 61 6e 64 20 73 71 6c 69  store() and sqli
2f770 74 65 33 56 64 62 65 49 64 78 52 6f 77 69 64 28  te3VdbeIdxRowid(
2f780 29 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c  ). */.  rc = sql
2f790 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 52 65  ite3VdbeCursorRe
2f7a0 73 74 6f 72 65 28 70 43 29 3b 0a 0a 20 20 2f 2a  store(pC);..  /*
2f7b0 20 73 71 6c 69 74 65 33 56 62 65 43 75 72 73 6f   sqlite3VbeCurso
2f7c0 72 52 65 73 74 6f 72 65 28 29 20 63 61 6e 20 6f  rRestore() can o
2f7d0 6e 6c 79 20 66 61 69 6c 20 69 66 20 74 68 65 20  nly fail if the 
2f7e0 72 65 63 6f 72 64 20 68 61 73 20 62 65 65 6e 20  record has been 
2f7f0 64 65 6c 65 74 65 64 0a 20 20 2a 2a 20 6f 75 74  deleted.  ** out
2f800 20 66 72 6f 6d 20 75 6e 64 65 72 20 74 68 65 20   from under the 
2f810 63 75 72 73 6f 72 2e 20 20 54 68 61 74 20 77 69  cursor.  That wi
2f820 6c 6c 20 6e 65 76 65 72 20 68 61 70 70 65 6e 73  ll never happens
2f830 20 66 6f 72 20 61 6e 20 49 64 78 52 6f 77 69 64   for an IdxRowid
2f840 0a 20 20 2a 2a 20 6f 72 20 53 65 65 6b 20 6f 70  .  ** or Seek op
2f850 63 6f 64 65 20 2a 2f 0a 20 20 69 66 28 20 4e 45  code */.  if( NE
2f860 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f  VER(rc!=SQLITE_O
2f870 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  K) ) goto abort_
2f880 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20  due_to_error;.. 
2f890 20 69 66 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f   if( !pC->nullRo
2f8a0 77 20 29 7b 0a 20 20 20 20 72 6f 77 69 64 20 3d  w ){.    rowid =
2f8b0 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64   0;  /* Not need
2f8c0 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20 74  ed.  Only used t
2f8d0 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e  o silence a warn
2f8e0 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d  ing. */.    rc =
2f8f0 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78 52   sqlite3VdbeIdxR
2f900 6f 77 69 64 28 64 62 2c 20 70 43 2d 3e 75 63 2e  owid(db, pC->uc.
2f910 70 43 75 72 73 6f 72 2c 20 26 72 6f 77 69 64 29  pCursor, &rowid)
2f920 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  ;.    if( rc!=SQ
2f930 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
2f940 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
2f950 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
2f960 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63      if( pOp->opc
2f970 6f 64 65 3d 3d 4f 50 5f 44 65 66 65 72 72 65 64  ode==OP_Deferred
2f980 53 65 65 6b 20 29 7b 0a 20 20 20 20 20 20 61 73  Seek ){.      as
2f990 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30  sert( pOp->p3>=0
2f9a0 20 26 26 20 70 4f 70 2d 3e 70 33 3c 70 2d 3e 6e   && pOp->p3<p->n
2f9b0 43 75 72 73 6f 72 20 29 3b 0a 20 20 20 20 20 20  Cursor );.      
2f9c0 70 54 61 62 43 75 72 20 3d 20 70 2d 3e 61 70 43  pTabCur = p->apC
2f9d0 73 72 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  sr[pOp->p3];.   
2f9e0 20 20 20 61 73 73 65 72 74 28 20 70 54 61 62 43     assert( pTabC
2f9f0 75 72 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 61  ur!=0 );.      a
2fa00 73 73 65 72 74 28 20 70 54 61 62 43 75 72 2d 3e  ssert( pTabCur->
2fa10 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
2fa20 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20 20  E_BTREE );.     
2fa30 20 61 73 73 65 72 74 28 20 70 54 61 62 43 75 72   assert( pTabCur
2fa40 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20  ->uc.pCursor!=0 
2fa50 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
2fa60 20 70 54 61 62 43 75 72 2d 3e 69 73 54 61 62 6c   pTabCur->isTabl
2fa70 65 20 29 3b 0a 20 20 20 20 20 20 70 54 61 62 43  e );.      pTabC
2fa80 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b  ur->nullRow = 0;
2fa90 0a 20 20 20 20 20 20 70 54 61 62 43 75 72 2d 3e  .      pTabCur->
2faa0 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20 72  movetoTarget = r
2fab0 6f 77 69 64 3b 0a 20 20 20 20 20 20 70 54 61 62  owid;.      pTab
2fac0 43 75 72 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76  Cur->deferredMov
2fad0 65 74 6f 20 3d 20 31 3b 0a 20 20 20 20 20 20 61  eto = 1;.      a
2fae0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
2faf0 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59 20  pe==P4_INTARRAY 
2fb00 7c 7c 20 70 4f 70 2d 3e 70 34 2e 61 69 3d 3d 30  || pOp->p4.ai==0
2fb10 20 29 3b 0a 20 20 20 20 20 20 70 54 61 62 43 75   );.      pTabCu
2fb20 72 2d 3e 61 41 6c 74 4d 61 70 20 3d 20 70 4f 70  r->aAltMap = pOp
2fb30 2d 3e 70 34 2e 61 69 3b 0a 20 20 20 20 20 20 70  ->p4.ai;.      p
2fb40 54 61 62 43 75 72 2d 3e 70 41 6c 74 43 75 72 73  TabCur->pAltCurs
2fb50 6f 72 20 3d 20 70 43 3b 0a 20 20 20 20 7d 65 6c  or = pC;.    }el
2fb60 73 65 7b 0a 20 20 20 20 20 20 70 4f 75 74 20 3d  se{.      pOut =
2fb70 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
2fb80 70 2c 20 70 4f 70 29 3b 0a 20 20 20 20 20 20 70  p, pOp);.      p
2fb90 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f 77 69 64  Out->u.i = rowid
2fba0 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
2fbb0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
2fbc0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
2fbd0 52 6f 77 69 64 20 29 3b 0a 20 20 20 20 73 71 6c  Rowid );.    sql
2fbe0 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
2fbf0 6c 6c 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  ll(&aMem[pOp->p2
2fc00 5d 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ]);.  }.  break;
2fc10 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
2fc20 64 78 47 45 20 50 31 20 50 32 20 50 33 20 50 34  dxGE P1 P2 P3 P4
2fc30 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
2fc40 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
2fc50 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
2fc60 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
2fc70 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
2fc80 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
2fc90 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
2fca0 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41   omits the PRIMA
2fcb0 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65  RY KEY.  Compare
2fcc0 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20   this key value 
2fcd0 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65  against the inde
2fce0 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73  x .** that P1 is
2fcf0 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
2fd00 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67  ing to, ignoring
2fd10 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
2fd20 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69   or ROWID .** fi
2fd30 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64 2e  elds at the end.
2fd40 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
2fd50 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20   index entry is 
2fd60 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
2fd70 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
2fd80 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a   value.** then j
2fd90 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65  ump to P2.  Othe
2fda0 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75  rwise fall throu
2fdb0 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
2fdc0 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f  nstruction..*/./
2fdd0 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 54 20  * Opcode: IdxGT 
2fde0 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
2fdf0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
2fe00 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54  r[P3@P4].**.** T
2fe10 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76  he P4 register v
2fe20 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20  alues beginning 
2fe30 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20  with P3 form an 
2fe40 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a  unpacked index .
2fe50 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74  ** key that omit
2fe60 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  s the PRIMARY KE
2fe70 59 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73  Y.  Compare this
2fe80 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e   key value again
2fe90 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a  st the index .**
2fea0 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72   that P1 is curr
2feb0 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74  ently pointing t
2fec0 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20  o, ignoring the 
2fed0 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52  PRIMARY KEY or R
2fee0 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c 64 73 20  OWID .** fields 
2fef0 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a  at the end..**.*
2ff00 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65  * If the P1 inde
2ff10 78 20 65 6e 74 72 79 20 69 73 20 67 72 65 61 74  x entry is great
2ff20 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20  er than the key 
2ff30 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75  value.** then ju
2ff40 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72  mp to P2.  Other
2ff50 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67  wise fall throug
2ff60 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
2ff70 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  struction..*/./*
2ff80 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 54 20 50   Opcode: IdxLT P
2ff90 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
2ffa0 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
2ffb0 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68  [P3@P4].**.** Th
2ffc0 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61  e P4 register va
2ffd0 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77  lues beginning w
2ffe0 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75  ith P3 form an u
2fff0 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a  npacked index .*
30000 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73  * key that omits
30010 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
30020 20 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70   or ROWID.  Comp
30030 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c  are this key val
30040 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68  ue against.** th
30050 65 20 69 6e 64 65 78 20 74 68 61 74 20 50 31 20  e index that P1 
30060 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
30070 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69  nting to, ignori
30080 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  ng the PRIMARY K
30090 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f  EY or.** ROWID o
300a0 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a  n the P1 index..
300b0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
300c0 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c  index entry is l
300d0 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79  ess than the key
300e0 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70   value then jump
300f0 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68 65 72   to P2..** Other
30100 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67  wise fall throug
30110 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
30120 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  struction..*/./*
30130 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 45 20 50   Opcode: IdxLE P
30140 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
30150 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
30160 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68  [P3@P4].**.** Th
30170 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61  e P4 register va
30180 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77  lues beginning w
30190 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75  ith P3 form an u
301a0 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a  npacked index .*
301b0 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73  * key that omits
301c0 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
301d0 20 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70   or ROWID.  Comp
301e0 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c  are this key val
301f0 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68  ue against.** th
30200 65 20 69 6e 64 65 78 20 74 68 61 74 20 50 31 20  e index that P1 
30210 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
30220 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69  nting to, ignori
30230 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  ng the PRIMARY K
30240 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f  EY or.** ROWID o
30250 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a  n the P1 index..
30260 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
30270 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c  index entry is l
30280 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ess than or equa
30290 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c  l to the key val
302a0 75 65 20 74 68 65 6e 20 6a 75 6d 70 0a 2a 2a 20  ue then jump.** 
302b0 74 6f 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65  to P2. Otherwise
302c0 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
302d0 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
302e0 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
302f0 50 5f 49 64 78 4c 45 3a 20 20 20 20 20 20 20 20  P_IdxLE:        
30300 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73    /* jump */.cas
30310 65 20 4f 50 5f 49 64 78 47 54 3a 20 20 20 20 20  e OP_IdxGT:     
30320 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
30330 63 61 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20 20  case OP_IdxLT:  
30340 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
30350 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 45  */.case OP_IdxGE
30360 3a 20 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75  :  {       /* ju
30370 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  mp */.  VdbeCurs
30380 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65  or *pC;.  int re
30390 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  s;.  UnpackedRec
303a0 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74  ord r;..  assert
303b0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
303c0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
303d0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
303e0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
303f0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
30400 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
30410 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20  >isOrdered );.  
30420 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
30430 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
30440 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28  REE );.  assert(
30450 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21   pC->uc.pCursor!
30460 3d 30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  =0);.  assert( p
30470 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
30480 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  o==0 );.  assert
30490 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20  ( pOp->p5==0 || 
304a0 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20  pOp->p5==1 );.  
304b0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
304c0 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
304d0 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20  .  r.pKeyInfo = 
304e0 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  pC->pKeyInfo;.  
304f0 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29  r.nField = (u16)
30500 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 69 66 28  pOp->p4.i;.  if(
30510 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3c 4f 50 5f   pOp->opcode<OP_
30520 49 64 78 4c 54 20 29 7b 0a 20 20 20 20 61 73 73  IdxLT ){.    ass
30530 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
30540 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c 20 70 4f  ==OP_IdxLE || pO
30550 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
30560 78 47 54 20 29 3b 0a 20 20 20 20 72 2e 64 65 66  xGT );.    r.def
30570 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20  ault_rc = -1;.  
30580 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
30590 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
305a0 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d  OP_IdxGE || pOp-
305b0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c  >opcode==OP_IdxL
305c0 54 20 29 3b 0a 20 20 20 20 72 2e 64 65 66 61 75  T );.    r.defau
305d0 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 7d 0a 20  lt_rc = 0;.  }. 
305e0 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b   r.aMem = &aMem[
305f0 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66  pOp->p3];.#ifdef
30600 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
30610 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20  {.    int i;.   
30620 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46   for(i=0; i<r.nF
30630 69 65 6c 64 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  ield; i++){.    
30640 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
30650 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29  alid(&r.aMem[i])
30660 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54   );.      REGIST
30670 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
30680 2b 69 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  +i, &aMem[pOp->p
30690 33 2b 69 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  3+i]);.    }.  }
306a0 0a 23 65 6e 64 69 66 0a 20 20 72 65 73 20 3d 20  .#endif.  res = 
306b0 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65  0;  /* Not neede
306c0 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f  d.  Only used to
306d0 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69   silence a warni
306e0 6e 67 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  ng. */.  rc = sq
306f0 6c 69 74 65 33 56 64 62 65 49 64 78 4b 65 79 43  lite3VdbeIdxKeyC
30700 6f 6d 70 61 72 65 28 64 62 2c 20 70 43 2c 20 26  ompare(db, pC, &
30710 72 2c 20 26 72 65 73 29 3b 0a 20 20 61 73 73 65  r, &res);.  asse
30720 72 74 28 20 28 4f 50 5f 49 64 78 4c 45 26 31 29  rt( (OP_IdxLE&1)
30730 3d 3d 28 4f 50 5f 49 64 78 4c 54 26 31 29 20 26  ==(OP_IdxLT&1) &
30740 26 20 28 4f 50 5f 49 64 78 47 45 26 31 29 3d 3d  & (OP_IdxGE&1)==
30750 28 4f 50 5f 49 64 78 47 54 26 31 29 20 29 3b 0a  (OP_IdxGT&1) );.
30760 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 63 6f    if( (pOp->opco
30770 64 65 26 31 29 3d 3d 28 4f 50 5f 49 64 78 4c 54  de&1)==(OP_IdxLT
30780 26 31 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72  &1) ){.    asser
30790 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
307a0 4f 50 5f 49 64 78 4c 45 20 7c 7c 20 70 4f 70 2d  OP_IdxLE || pOp-
307b0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c  >opcode==OP_IdxL
307c0 54 20 29 3b 0a 20 20 20 20 72 65 73 20 3d 20 2d  T );.    res = -
307d0 72 65 73 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  res;.  }else{.  
307e0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
307f0 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20  pcode==OP_IdxGE 
30800 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
30810 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20  OP_IdxGT );.    
30820 72 65 73 2b 2b 3b 0a 20 20 7d 0a 20 20 56 64 62  res++;.  }.  Vdb
30830 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
30840 3e 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 63 20  >0,2);.  if( rc 
30850 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
30860 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28  _to_error;.  if(
30870 20 72 65 73 3e 30 20 29 20 67 6f 74 6f 20 6a 75   res>0 ) goto ju
30880 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61  mp_to_p2;.  brea
30890 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
308a0 20 44 65 73 74 72 6f 79 20 50 31 20 50 32 20 50   Destroy P1 P2 P
308b0 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65  3 * *.**.** Dele
308c0 74 65 20 61 6e 20 65 6e 74 69 72 65 20 64 61 74  te an entire dat
308d0 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69  abase table or i
308e0 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 20  ndex whose root 
308f0 70 61 67 65 20 69 6e 20 74 68 65 20 64 61 74 61  page in the data
30900 62 61 73 65 0a 2a 2a 20 66 69 6c 65 20 69 73 20  base.** file is 
30910 67 69 76 65 6e 20 62 79 20 50 31 2e 0a 2a 2a 0a  given by P1..**.
30920 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65 69  ** The table bei
30930 6e 67 20 64 65 73 74 72 6f 79 65 64 20 69 73 20  ng destroyed is 
30940 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
30950 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 33 3d  base file if P3=
30960 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 33 3d 3d 31  =0.  If.** P3==1
30970 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
30980 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20 69  to be clear is i
30990 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20  n the auxiliary 
309a0 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a  database file.**
309b0 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f   that is used to
309c0 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72   store tables cr
309d0 65 61 74 65 20 75 73 69 6e 67 20 43 52 45 41 54  eate using CREAT
309e0 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c  E TEMPORARY TABL
309f0 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 41 55 54 4f  E..**.** If AUTO
30a00 56 41 43 55 55 4d 20 69 73 20 65 6e 61 62 6c 65  VACUUM is enable
30a10 64 20 74 68 65 6e 20 69 74 20 69 73 20 70 6f 73  d then it is pos
30a20 73 69 62 6c 65 20 74 68 61 74 20 61 6e 6f 74 68  sible that anoth
30a30 65 72 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20  er root page.** 
30a40 6d 69 67 68 74 20 62 65 20 6d 6f 76 65 64 20 69  might be moved i
30a50 6e 74 6f 20 74 68 65 20 6e 65 77 6c 79 20 64 65  nto the newly de
30a60 6c 65 74 65 64 20 72 6f 6f 74 20 70 61 67 65 20  leted root page 
30a70 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70  in order to keep
30a80 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74 20 70 61 67   all.** root pag
30a90 65 73 20 63 6f 6e 74 69 67 75 6f 75 73 20 61 74  es contiguous at
30aa0 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
30ab0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20  f the database. 
30ac0 20 54 68 65 20 66 6f 72 6d 65 72 0a 2a 2a 20 76   The former.** v
30ad0 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f 6f 74  alue of the root
30ae0 20 70 61 67 65 20 74 68 61 74 20 6d 6f 76 65 64   page that moved
30af0 20 2d 20 69 74 73 20 76 61 6c 75 65 20 62 65 66   - its value bef
30b00 6f 72 65 20 74 68 65 20 6d 6f 76 65 20 6f 63 63  ore the move occ
30b10 75 72 72 65 64 20 2d 0a 2a 2a 20 69 73 20 73 74  urred -.** is st
30b20 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
30b30 20 50 32 2e 20 49 66 20 6e 6f 20 70 61 67 65 20   P2. If no page 
30b40 6d 6f 76 65 6d 65 6e 74 20 77 61 73 20 72 65 71  movement was req
30b50 75 69 72 65 64 20 28 62 65 63 61 75 73 65 20 74  uired (because t
30b60 68 65 0a 2a 2a 20 74 61 62 6c 65 20 62 65 69 6e  he.** table bein
30b70 67 20 64 72 6f 70 70 65 64 20 77 61 73 20 61 6c  g dropped was al
30b80 72 65 61 64 79 20 74 68 65 20 6c 61 73 74 20 6f  ready the last o
30b90 6e 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ne in the databa
30ba0 73 65 29 20 74 68 65 6e 20 61 20 0a 2a 2a 20 7a  se) then a .** z
30bb0 65 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ero is stored in
30bc0 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49   register P2.  I
30bd0 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20  f AUTOVACUUM is 
30be0 64 69 73 61 62 6c 65 64 20 74 68 65 6e 20 61 20  disabled then a 
30bf0 7a 65 72 6f 20 0a 2a 2a 20 69 73 20 73 74 6f 72  zero .** is stor
30c00 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
30c10 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  2..**.** This op
30c20 63 6f 64 65 20 74 68 72 6f 77 73 20 61 6e 20 65  code throws an e
30c30 72 72 6f 72 20 69 66 20 74 68 65 72 65 20 61 72  rror if there ar
30c40 65 20 61 6e 79 20 61 63 74 69 76 65 20 72 65 61  e any active rea
30c50 64 65 72 20 56 4d 73 20 77 68 65 6e 0a 2a 2a 20  der VMs when.** 
30c60 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20 54  it is invoked. T
30c70 68 69 73 20 69 73 20 64 6f 6e 65 20 74 6f 20 61  his is done to a
30c80 76 6f 69 64 20 74 68 65 20 64 69 66 66 69 63 75  void the difficu
30c90 6c 74 79 20 61 73 73 6f 63 69 61 74 65 64 20 77  lty associated w
30ca0 69 74 68 20 0a 2a 2a 20 75 70 64 61 74 69 6e 67  ith .** updating
30cb0 20 65 78 69 73 74 69 6e 67 20 63 75 72 73 6f 72   existing cursor
30cc0 73 20 77 68 65 6e 20 61 20 72 6f 6f 74 20 70 61  s when a root pa
30cd0 67 65 20 69 73 20 6d 6f 76 65 64 20 69 6e 20 61  ge is moved in a
30ce0 6e 20 41 55 54 4f 56 41 43 55 55 4d 20 0a 2a 2a  n AUTOVACUUM .**
30cf0 20 64 61 74 61 62 61 73 65 2e 20 54 68 69 73 20   database. This 
30d00 65 72 72 6f 72 20 69 73 20 74 68 72 6f 77 6e 20  error is thrown 
30d10 65 76 65 6e 20 69 66 20 74 68 65 20 64 61 74 61  even if the data
30d20 62 61 73 65 20 69 73 20 6e 6f 74 20 61 6e 20 41  base is not an A
30d30 55 54 4f 56 41 43 55 55 4d 20 0a 2a 2a 20 64 62  UTOVACUUM .** db
30d40 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 61 76 6f   in order to avo
30d50 69 64 20 69 6e 74 72 6f 64 75 63 69 6e 67 20 61  id introducing a
30d60 6e 20 69 6e 63 6f 6d 70 61 74 69 62 69 6c 69 74  n incompatibilit
30d70 79 20 62 65 74 77 65 65 6e 20 61 75 74 6f 76 61  y between autova
30d80 63 75 75 6d 20 0a 2a 2a 20 61 6e 64 20 6e 6f 6e  cuum .** and non
30d90 2d 61 75 74 6f 76 61 63 75 75 6d 20 6d 6f 64 65  -autovacuum mode
30da0 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  s..**.** See als
30db0 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a 63 61 73 65  o: Clear.*/.case
30dc0 20 4f 50 5f 44 65 73 74 72 6f 79 3a 20 7b 20 20   OP_Destroy: {  
30dd0 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
30de0 69 6e 74 20 69 4d 6f 76 65 64 3b 0a 20 20 69 6e  int iMoved;.  in
30df0 74 20 69 44 62 3b 0a 0a 20 20 73 71 6c 69 74 65  t iDb;..  sqlite
30e00 33 56 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f  3VdbeIncrWriteCo
30e10 75 6e 74 65 72 28 70 2c 20 30 29 3b 0a 20 20 61  unter(p, 0);.  a
30e20 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
30e30 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ly==0 );.  asser
30e40 74 28 20 70 4f 70 2d 3e 70 31 3e 31 20 29 3b 0a  t( pOp->p1>1 );.
30e50 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
30e60 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
30e70 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
30e80 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28   MEM_Null;.  if(
30e90 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 20 3e   db->nVdbeRead >
30ea0 20 64 62 2d 3e 6e 56 44 65 73 74 72 6f 79 2b 31   db->nVDestroy+1
30eb0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
30ec0 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20  ITE_LOCKED;.    
30ed0 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d  p->errorAction =
30ee0 20 4f 45 5f 41 62 6f 72 74 3b 0a 20 20 20 20 67   OE_Abort;.    g
30ef0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
30f00 5f 65 72 72 6f 72 3b 0a 20 20 7d 65 6c 73 65 7b  _error;.  }else{
30f10 0a 20 20 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e  .    iDb = pOp->
30f20 70 33 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  p3;.    assert( 
30f30 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
30f40 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b  reeMask, iDb) );
30f50 0a 20 20 20 20 69 4d 6f 76 65 64 20 3d 20 30 3b  .    iMoved = 0;
30f60 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e    /* Not needed.
30f70 20 20 4f 6e 6c 79 20 74 6f 20 73 69 6c 65 6e 63    Only to silenc
30f80 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a  e a warning. */.
30f90 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
30fa0 42 74 72 65 65 44 72 6f 70 54 61 62 6c 65 28 64  BtreeDropTable(d
30fb0 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c  b->aDb[iDb].pBt,
30fc0 20 70 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f 76 65   pOp->p1, &iMove
30fd0 64 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c  d);.    pOut->fl
30fe0 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
30ff0 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69     pOut->u.i = i
31000 4d 6f 76 65 64 3b 0a 20 20 20 20 69 66 28 20 72  Moved;.    if( r
31010 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
31020 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 69 66  ue_to_error;.#if
31030 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
31040 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 20 20  _AUTOVACUUM.    
31050 69 66 28 20 69 4d 6f 76 65 64 21 3d 30 20 29 7b  if( iMoved!=0 ){
31060 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f  .      sqlite3Ro
31070 6f 74 50 61 67 65 4d 6f 76 65 64 28 64 62 2c 20  otPageMoved(db, 
31080 69 44 62 2c 20 69 4d 6f 76 65 64 2c 20 70 4f 70  iDb, iMoved, pOp
31090 2d 3e 70 31 29 3b 0a 20 20 20 20 20 20 2f 2a 20  ->p1);.      /* 
310a0 41 6c 6c 20 4f 50 5f 44 65 73 74 72 6f 79 20 6f  All OP_Destroy o
310b0 70 65 72 61 74 69 6f 6e 73 20 6f 63 63 75 72 20  perations occur 
310c0 6f 6e 20 74 68 65 20 73 61 6d 65 20 62 74 72 65  on the same btre
310d0 65 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72  e */.      asser
310e0 74 28 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e  t( resetSchemaOn
310f0 46 61 75 6c 74 3d 3d 30 20 7c 7c 20 72 65 73 65  Fault==0 || rese
31100 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d  tSchemaOnFault==
31110 69 44 62 2b 31 20 29 3b 0a 20 20 20 20 20 20 72  iDb+1 );.      r
31120 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c  esetSchemaOnFaul
31130 74 20 3d 20 69 44 62 2b 31 3b 0a 20 20 20 20 7d  t = iDb+1;.    }
31140 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72  .#endif.  }.  br
31150 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
31160 65 3a 20 43 6c 65 61 72 20 50 31 20 50 32 20 50  e: Clear P1 P2 P
31170 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61  3.**.** Delete a
31180 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74  ll contents of t
31190 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
311a0 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65  e or index whose
311b0 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 69 6e   root page.** in
311c0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
311d0 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79 20 50  le is given by P
311e0 31 2e 20 20 42 75 74 2c 20 75 6e 6c 69 6b 65 20  1.  But, unlike 
311f0 44 65 73 74 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a  Destroy, do not.
31200 2a 2a 20 72 65 6d 6f 76 65 20 74 68 65 20 74 61  ** remove the ta
31210 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 72 6f  ble or index fro
31220 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  m the database f
31230 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74  ile..**.** The t
31240 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72  able being clear
31250 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20   is in the main 
31260 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
31270 20 50 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50   P2==0.  If.** P
31280 32 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61  2==1 then the ta
31290 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20  ble to be clear 
312a0 69 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69  is in the auxili
312b0 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  ary database fil
312c0 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65  e.** that is use
312d0 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65  d to store table
312e0 73 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43  s create using C
312f0 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20  REATE TEMPORARY 
31300 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  TABLE..**.** If 
31310 74 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20  the P3 value is 
31320 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74  non-zero, then t
31330 68 65 20 74 61 62 6c 65 20 72 65 66 65 72 72 65  he table referre
31340 64 20 74 6f 20 6d 75 73 74 20 62 65 20 61 6e 0a  d to must be an.
31350 2a 2a 20 69 6e 74 6b 65 79 20 74 61 62 6c 65 20  ** intkey table 
31360 28 61 6e 20 53 51 4c 20 74 61 62 6c 65 2c 20 6e  (an SQL table, n
31370 6f 74 20 61 6e 20 69 6e 64 65 78 29 2e 20 49 6e  ot an index). In
31380 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20 72   this case the r
31390 6f 77 20 63 68 61 6e 67 65 20 0a 2a 2a 20 63 6f  ow change .** co
313a0 75 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  unt is increment
313b0 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72  ed by the number
313c0 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20   of rows in the 
313d0 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61  table being clea
313e0 72 65 64 2e 20 0a 2a 2a 20 49 66 20 50 33 20 69  red. .** If P3 i
313f0 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a  s greater than z
31400 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 76 61  ero, then the va
31410 6c 75 65 20 73 74 6f 72 65 64 20 69 6e 20 72 65  lue stored in re
31420 67 69 73 74 65 72 20 50 33 20 69 73 0a 2a 2a 20  gister P3 is.** 
31430 61 6c 73 6f 20 69 6e 63 72 65 6d 65 6e 74 65 64  also incremented
31440 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   by the number o
31450 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61  f rows in the ta
31460 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65  ble being cleare
31470 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  d..**.** See als
31480 6f 3a 20 44 65 73 74 72 6f 79 0a 2a 2f 0a 63 61  o: Destroy.*/.ca
31490 73 65 20 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a 20  se OP_Clear: {. 
314a0 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 0a 20 0a   int nChange;. .
314b0 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63    sqlite3VdbeInc
314c0 72 57 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c  rWriteCounter(p,
314d0 20 30 29 3b 0a 20 20 6e 43 68 61 6e 67 65 20 3d   0);.  nChange =
314e0 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   0;.  assert( p-
314f0 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
31500 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
31510 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
31520 6b 2c 20 70 4f 70 2d 3e 70 32 29 20 29 3b 0a 20  k, pOp->p2) );. 
31530 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
31540 65 65 43 6c 65 61 72 54 61 62 6c 65 28 0a 20 20  eeClearTable(.  
31550 20 20 20 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d      db->aDb[pOp-
31560 3e 70 32 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70  >p2].pBt, pOp->p
31570 31 2c 20 28 70 4f 70 2d 3e 70 33 20 3f 20 26 6e  1, (pOp->p3 ? &n
31580 43 68 61 6e 67 65 20 3a 20 30 29 0a 20 20 29 3b  Change : 0).  );
31590 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29  .  if( pOp->p3 )
315a0 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65  {.    p->nChange
315b0 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20   += nChange;.   
315c0 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29   if( pOp->p3>0 )
315d0 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
315e0 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
315f0 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20  [pOp->p3]) );.  
31600 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
31610 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f  ange(p, &aMem[pO
31620 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 61  p->p3]);.      a
31630 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69  Mem[pOp->p3].u.i
31640 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20   += nChange;.   
31650 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20   }.  }.  if( rc 
31660 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
31670 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65  _to_error;.  bre
31680 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
31690 3a 20 52 65 73 65 74 53 6f 72 74 65 72 20 50 31  : ResetSorter P1
316a0 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44   * * * *.**.** D
316b0 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e  elete all conten
316c0 74 73 20 66 72 6f 6d 20 74 68 65 20 65 70 68 65  ts from the ephe
316d0 6d 65 72 61 6c 20 74 61 62 6c 65 20 6f 72 20 73  meral table or s
316e0 6f 72 74 65 72 0a 2a 2a 20 74 68 61 74 20 69 73  orter.** that is
316f0 20 6f 70 65 6e 20 6f 6e 20 63 75 72 73 6f 72 20   open on cursor 
31700 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  P1..**.** This o
31710 70 63 6f 64 65 20 6f 6e 6c 79 20 77 6f 72 6b 73  pcode only works
31720 20 66 6f 72 20 63 75 72 73 6f 72 73 20 75 73 65   for cursors use
31730 64 20 66 6f 72 20 73 6f 72 74 69 6e 67 20 61 6e  d for sorting an
31740 64 0a 2a 2a 20 6f 70 65 6e 65 64 20 77 69 74 68  d.** opened with
31750 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
31760 6c 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72 4f 70  l or OP_SorterOp
31770 65 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  en..*/.case OP_R
31780 65 73 65 74 53 6f 72 74 65 72 3a 20 7b 0a 20 20  esetSorter: {.  
31790 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
317a0 20 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d   .  assert( pOp-
317b0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
317c0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
317d0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
317e0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
317f0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69  rt( pC!=0 );.  i
31800 66 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  f( isSorter(pC) 
31810 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
31820 62 65 53 6f 72 74 65 72 52 65 73 65 74 28 64 62  beSorterReset(db
31830 2c 20 70 43 2d 3e 75 63 2e 70 53 6f 72 74 65 72  , pC->uc.pSorter
31840 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
31850 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
31860 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
31870 52 45 45 20 29 3b 0a 20 20 20 20 61 73 73 65 72  REE );.    asser
31880 74 28 20 70 43 2d 3e 69 73 45 70 68 65 6d 65 72  t( pC->isEphemer
31890 61 6c 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  al );.    rc = s
318a0 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72  qlite3BtreeClear
318b0 54 61 62 6c 65 4f 66 43 75 72 73 6f 72 28 70 43  TableOfCursor(pC
318c0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20  ->uc.pCursor);. 
318d0 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f     if( rc ) goto
318e0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
318f0 72 6f 72 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ror;.  }.  break
31900 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
31910 43 72 65 61 74 65 42 74 72 65 65 20 50 31 20 50  CreateBtree P1 P
31920 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
31930 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74  psis: r[P2]=root
31940 20 69 44 62 3d 50 31 20 66 6c 61 67 73 3d 50 33   iDb=P1 flags=P3
31950 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20  .**.** Allocate 
31960 61 20 6e 65 77 20 62 2d 74 72 65 65 20 69 6e 20  a new b-tree in 
31970 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
31980 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20  e file if P1==0 
31990 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 54 45 4d  or in the.** TEM
319a0 50 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  P database file 
319b0 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61  if P1==1 or in a
319c0 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
319d0 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20  ase if.** P1>1. 
319e0 20 54 68 65 20 50 33 20 61 72 67 75 6d 65 6e 74   The P3 argument
319f0 20 6d 75 73 74 20 62 65 20 31 20 28 42 54 52 45   must be 1 (BTRE
31a00 45 5f 49 4e 54 4b 45 59 29 20 66 6f 72 20 61 20  E_INTKEY) for a 
31a10 72 6f 77 69 64 20 74 61 62 6c 65 0a 2a 2a 20 69  rowid table.** i
31a20 74 20 6d 75 73 74 20 62 65 20 32 20 28 42 54 52  t must be 2 (BTR
31a30 45 45 5f 42 4c 4f 42 4b 45 59 29 20 66 6f 72 20  EE_BLOBKEY) for 
31a40 61 6e 20 69 6e 64 65 78 20 6f 72 20 57 49 54 48  an index or WITH
31a50 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c 65 2e  OUT ROWID table.
31a60 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61 67  .** The root pag
31a70 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  e number of the 
31a80 6e 65 77 20 62 2d 74 72 65 65 20 69 73 20 73 74  new b-tree is st
31a90 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
31aa0 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
31ab0 43 72 65 61 74 65 42 74 72 65 65 3a 20 7b 20 20  CreateBtree: {  
31ac0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
31ad0 2a 2f 0a 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20  */.  int pgno;. 
31ae0 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 73 71 6c   Db *pDb;..  sql
31af0 69 74 65 33 56 64 62 65 49 6e 63 72 57 72 69 74  ite3VdbeIncrWrit
31b00 65 43 6f 75 6e 74 65 72 28 70 2c 20 30 29 3b 0a  eCounter(p, 0);.
31b10 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
31b20 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
31b30 0a 20 20 70 67 6e 6f 20 3d 20 30 3b 0a 20 20 61  .  pgno = 0;.  a
31b40 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d  ssert( pOp->p3==
31b50 42 54 52 45 45 5f 49 4e 54 4b 45 59 20 7c 7c 20  BTREE_INTKEY || 
31b60 70 4f 70 2d 3e 70 33 3d 3d 42 54 52 45 45 5f 42  pOp->p3==BTREE_B
31b70 4c 4f 42 4b 45 59 20 29 3b 0a 20 20 61 73 73 65  LOBKEY );.  asse
31b80 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
31b90 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
31ba0 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44  b );.  assert( D
31bb0 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72  bMaskTest(p->btr
31bc0 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29  eeMask, pOp->p1)
31bd0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
31be0 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
31bf0 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62    pDb = &db->aDb
31c00 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
31c10 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30  ert( pDb->pBt!=0
31c20 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
31c30 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62  e3BtreeCreateTab
31c40 6c 65 28 70 44 62 2d 3e 70 42 74 2c 20 26 70 67  le(pDb->pBt, &pg
31c50 6e 6f 2c 20 70 4f 70 2d 3e 70 33 29 3b 0a 20 20  no, pOp->p3);.  
31c60 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
31c70 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
31c80 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
31c90 70 67 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  pgno;.  break;.}
31ca0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 71 6c  ../* Opcode: Sql
31cb0 45 78 65 63 20 2a 20 2a 20 2a 20 50 34 20 2a 0a  Exec * * * P4 *.
31cc0 2a 2a 0a 2a 2a 20 52 75 6e 20 74 68 65 20 53 51  **.** Run the SQ
31cd0 4c 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 73  L statement or s
31ce0 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66  tatements specif
31cf0 69 65 64 20 69 6e 20 74 68 65 20 50 34 20 73 74  ied in the P4 st
31d00 72 69 6e 67 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ring..*/.case OP
31d10 5f 53 71 6c 45 78 65 63 3a 20 7b 0a 20 20 73 71  _SqlExec: {.  sq
31d20 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57 72 69  lite3VdbeIncrWri
31d30 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 30 29 3b  teCounter(p, 0);
31d40 0a 20 20 64 62 2d 3e 6e 53 71 6c 45 78 65 63 2b  .  db->nSqlExec+
31d50 2b 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  +;.  rc = sqlite
31d60 33 5f 65 78 65 63 28 64 62 2c 20 70 4f 70 2d 3e  3_exec(db, pOp->
31d70 70 34 2e 7a 2c 20 30 2c 20 30 2c 20 30 29 3b 0a  p4.z, 0, 0, 0);.
31d80 20 20 64 62 2d 3e 6e 53 71 6c 45 78 65 63 2d 2d    db->nSqlExec--
31d90 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
31da0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
31db0 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
31dc0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72  ../* Opcode: Par
31dd0 73 65 53 63 68 65 6d 61 20 50 31 20 2a 20 2a 20  seSchema P1 * * 
31de0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20  P4 *.**.** Read 
31df0 61 6e 64 20 70 61 72 73 65 20 61 6c 6c 20 65 6e  and parse all en
31e00 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65 20 53  tries from the S
31e10 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 74 61 62  QLITE_MASTER tab
31e20 6c 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 50  le of database P
31e30 31 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63 68 20  1.** that match 
31e40 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  the WHERE clause
31e50 20 50 34 2e 20 20 49 66 20 50 34 20 69 73 20 61   P4.  If P4 is a
31e60 20 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2c 20 74   NULL pointer, t
31e70 68 65 6e 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72  hen the.** entir
31e80 65 20 73 63 68 65 6d 61 20 66 6f 72 20 50 31 20  e schema for P1 
31e90 69 73 20 72 65 70 61 72 73 65 64 2e 0a 2a 2a 0a  is reparsed..**.
31ea0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
31eb0 6e 76 6f 6b 65 73 20 74 68 65 20 70 61 72 73 65  nvokes the parse
31ec0 72 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65  r to create a ne
31ed0 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  w virtual machin
31ee0 65 2c 0a 2a 2a 20 74 68 65 6e 20 72 75 6e 73 20  e,.** then runs 
31ef0 74 68 65 20 6e 65 77 20 76 69 72 74 75 61 6c 20  the new virtual 
31f00 6d 61 63 68 69 6e 65 2e 20 20 49 74 20 69 73 20  machine.  It is 
31f10 74 68 75 73 20 61 20 72 65 2d 65 6e 74 72 61 6e  thus a re-entran
31f20 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73  t opcode..*/.cas
31f30 65 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61  e OP_ParseSchema
31f40 3a 20 7b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20  : {.  int iDb;. 
31f50 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d 61   const char *zMa
31f60 73 74 65 72 3b 0a 20 20 63 68 61 72 20 2a 7a 53  ster;.  char *zS
31f70 71 6c 3b 0a 20 20 49 6e 69 74 44 61 74 61 20 69  ql;.  InitData i
31f80 6e 69 74 44 61 74 61 3b 0a 0a 20 20 2f 2a 20 41  nitData;..  /* A
31f90 6e 79 20 70 72 65 70 61 72 65 64 20 73 74 61 74  ny prepared stat
31fa0 65 6d 65 6e 74 20 74 68 61 74 20 69 6e 76 6f 6b  ement that invok
31fb0 65 73 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77  es this opcode w
31fc0 69 6c 6c 20 68 6f 6c 64 20 6d 75 74 65 78 65 73  ill hold mutexes
31fd0 0a 20 20 2a 2a 20 6f 6e 20 65 76 65 72 79 20 62  .  ** on every b
31fe0 74 72 65 65 2e 20 20 54 68 69 73 20 69 73 20 61  tree.  This is a
31ff0 20 70 72 65 72 65 71 75 69 73 69 74 65 20 66 6f   prerequisite fo
32000 72 20 69 6e 76 6f 6b 69 6e 67 20 0a 20 20 2a 2a  r invoking .  **
32010 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c   sqlite3InitCall
32020 62 61 63 6b 28 29 2e 0a 20 20 2a 2f 0a 23 69 66  back()..  */.#if
32030 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
32040 0a 20 20 66 6f 72 28 69 44 62 3d 30 3b 20 69 44  .  for(iDb=0; iD
32050 62 3c 64 62 2d 3e 6e 44 62 3b 20 69 44 62 2b 2b  b<db->nDb; iDb++
32060 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69  ){.    assert( i
32070 44 62 3d 3d 31 20 7c 7c 20 73 71 6c 69 74 65 33  Db==1 || sqlite3
32080 42 74 72 65 65 48 6f 6c 64 73 4d 75 74 65 78 28  BtreeHoldsMutex(
32090 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74  db->aDb[iDb].pBt
320a0 29 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  ) );.  }.#endif.
320b0 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31  .  iDb = pOp->p1
320c0 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e  ;.  assert( iDb>
320d0 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44  =0 && iDb<db->nD
320e0 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44  b );.  assert( D
320f0 62 48 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c  bHasProperty(db,
32100 20 69 44 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c   iDb, DB_SchemaL
32110 6f 61 64 65 64 29 20 29 3b 0a 0a 23 69 66 6e 64  oaded) );..#ifnd
32120 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
32130 4c 54 45 52 54 41 42 4c 45 0a 20 20 69 66 28 20  LTERTABLE.  if( 
32140 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20 29 7b 0a  pOp->p4.z==0 ){.
32150 20 20 20 20 73 71 6c 69 74 65 33 53 63 68 65 6d      sqlite3Schem
32160 61 43 6c 65 61 72 28 64 62 2d 3e 61 44 62 5b 69  aClear(db->aDb[i
32170 44 62 5d 2e 70 53 63 68 65 6d 61 29 3b 0a 20 20  Db].pSchema);.  
32180 20 20 64 62 2d 3e 6d 44 62 46 6c 61 67 73 20 26    db->mDbFlags &
32190 3d 20 7e 44 42 46 4c 41 47 5f 53 63 68 65 6d 61  = ~DBFLAG_Schema
321a0 4b 6e 6f 77 6e 4f 6b 3b 0a 20 20 20 20 72 63 20  KnownOk;.    rc 
321b0 3d 20 73 71 6c 69 74 65 33 49 6e 69 74 4f 6e 65  = sqlite3InitOne
321c0 28 64 62 2c 20 69 44 62 2c 20 26 70 2d 3e 7a 45  (db, iDb, &p->zE
321d0 72 72 4d 73 67 2c 20 49 4e 49 54 46 4c 41 47 5f  rrMsg, INITFLAG_
321e0 41 6c 74 65 72 54 61 62 6c 65 29 3b 0a 20 20 20  AlterTable);.   
321f0 20 64 62 2d 3e 6d 44 62 46 6c 61 67 73 20 7c 3d   db->mDbFlags |=
32200 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61 43 68   DBFLAG_SchemaCh
32210 61 6e 67 65 3b 0a 20 20 20 20 70 2d 3e 65 78 70  ange;.    p->exp
32220 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 65 6c 73  ired = 0;.  }els
32230 65 0a 23 65 6e 64 69 66 0a 20 20 7b 0a 20 20 20  e.#endif.  {.   
32240 20 7a 4d 61 73 74 65 72 20 3d 20 4d 41 53 54 45   zMaster = MASTE
32250 52 5f 4e 41 4d 45 3b 0a 20 20 20 20 69 6e 69 74  R_NAME;.    init
32260 44 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a 20 20  Data.db = db;.  
32270 20 20 69 6e 69 74 44 61 74 61 2e 69 44 62 20 3d    initData.iDb =
32280 20 69 44 62 3b 0a 20 20 20 20 69 6e 69 74 44 61   iDb;.    initDa
32290 74 61 2e 70 7a 45 72 72 4d 73 67 20 3d 20 26 70  ta.pzErrMsg = &p
322a0 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 69  ->zErrMsg;.    i
322b0 6e 69 74 44 61 74 61 2e 6d 49 6e 69 74 46 6c 61  nitData.mInitFla
322c0 67 73 20 3d 20 30 3b 0a 20 20 20 20 7a 53 71 6c  gs = 0;.    zSql
322d0 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74   = sqlite3MPrint
322e0 66 28 64 62 2c 0a 20 20 20 20 20 20 20 22 53 45  f(db,.       "SE
322f0 4c 45 43 54 20 6e 61 6d 65 2c 20 72 6f 6f 74 70  LECT name, rootp
32300 61 67 65 2c 20 73 71 6c 20 46 52 4f 4d 20 27 25  age, sql FROM '%
32310 71 27 2e 25 73 20 57 48 45 52 45 20 25 73 20 4f  q'.%s WHERE %s O
32320 52 44 45 52 20 42 59 20 72 6f 77 69 64 22 2c 0a  RDER BY rowid",.
32330 20 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 69         db->aDb[i
32340 44 62 5d 2e 7a 44 62 53 4e 61 6d 65 2c 20 7a 4d  Db].zDbSName, zM
32350 61 73 74 65 72 2c 20 70 4f 70 2d 3e 70 34 2e 7a  aster, pOp->p4.z
32360 29 3b 0a 20 20 20 20 69 66 28 20 7a 53 71 6c 3d  );.    if( zSql=
32370 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  =0 ){.      rc =
32380 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b   SQLITE_NOMEM_BK
32390 50 54 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  PT;.    }else{. 
323a0 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d       assert( db-
323b0 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20 29 3b  >init.busy==0 );
323c0 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e  .      db->init.
323d0 62 75 73 79 20 3d 20 31 3b 0a 20 20 20 20 20 20  busy = 1;.      
323e0 69 6e 69 74 44 61 74 61 2e 72 63 20 3d 20 53 51  initData.rc = SQ
323f0 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 69  LITE_OK;.      i
32400 6e 69 74 44 61 74 61 2e 6e 49 6e 69 74 52 6f 77  nitData.nInitRow
32410 20 3d 20 30 3b 0a 20 20 20 20 20 20 61 73 73 65   = 0;.      asse
32420 72 74 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46  rt( !db->mallocF
32430 61 69 6c 65 64 20 29 3b 0a 20 20 20 20 20 20 72  ailed );.      r
32440 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63  c = sqlite3_exec
32450 28 64 62 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74  (db, zSql, sqlit
32460 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20  e3InitCallback, 
32470 26 69 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a 20  &initData, 0);. 
32480 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
32490 49 54 45 5f 4f 4b 20 29 20 72 63 20 3d 20 69 6e  ITE_OK ) rc = in
324a0 69 74 44 61 74 61 2e 72 63 3b 0a 20 20 20 20 20  itData.rc;.     
324b0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
324c0 4f 4b 20 26 26 20 69 6e 69 74 44 61 74 61 2e 6e  OK && initData.n
324d0 49 6e 69 74 52 6f 77 3d 3d 30 20 29 7b 0a 20 20  InitRow==0 ){.  
324e0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 4f 50 5f        /* The OP_
324f0 50 61 72 73 65 53 63 68 65 6d 61 20 6f 70 63 6f  ParseSchema opco
32500 64 65 20 77 69 74 68 20 61 20 6e 6f 6e 2d 4e 55  de with a non-NU
32510 4c 4c 20 50 34 20 61 72 67 75 6d 65 6e 74 20 73  LL P4 argument s
32520 68 6f 75 6c 64 20 70 61 72 73 65 0a 20 20 20 20  hould parse.    
32530 20 20 20 20 2a 2a 20 61 74 20 6c 65 61 73 74 20      ** at least 
32540 6f 6e 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  one SQL statemen
32550 74 2e 20 41 6e 79 20 6c 65 73 73 20 74 68 61 6e  t. Any less than
32560 20 74 68 61 74 20 69 6e 64 69 63 61 74 65 73 20   that indicates 
32570 74 68 61 74 0a 20 20 20 20 20 20 20 20 2a 2a 20  that.        ** 
32580 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  the sqlite_maste
32590 72 20 74 61 62 6c 65 20 69 73 20 63 6f 72 72 75  r table is corru
325a0 70 74 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 72  pt. */.        r
325b0 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  c = SQLITE_CORRU
325c0 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 7d  PT_BKPT;.      }
325d0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62  .      sqlite3Db
325e0 46 72 65 65 4e 4e 28 64 62 2c 20 7a 53 71 6c 29  FreeNN(db, zSql)
325f0 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74  ;.      db->init
32600 2e 62 75 73 79 20 3d 20 30 3b 0a 20 20 20 20 7d  .busy = 0;.    }
32610 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 7b  .  }.  if( rc ){
32620 0a 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65  .    sqlite3Rese
32630 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e  tAllSchemasOfCon
32640 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 20  nection(db);.   
32650 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
32660 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 67  NOMEM ){.      g
32670 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
32680 7d 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74  }.    goto abort
32690 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
326a0 20 7d 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a   }.  break;  .}.
326b0 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
326c0 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a  LITE_OMIT_ANALYZ
326d0 45 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f  E)./* Opcode: Lo
326e0 61 64 41 6e 61 6c 79 73 69 73 20 50 31 20 2a 20  adAnalysis P1 * 
326f0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64  * * *.**.** Read
32700 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74   the sqlite_stat
32710 31 20 74 61 62 6c 65 20 66 6f 72 20 64 61 74 61  1 table for data
32720 62 61 73 65 20 50 31 20 61 6e 64 20 6c 6f 61 64  base P1 and load
32730 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20   the content.** 
32740 6f 66 20 74 68 61 74 20 74 61 62 6c 65 20 69 6e  of that table in
32750 74 6f 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  to the internal 
32760 69 6e 64 65 78 20 68 61 73 68 20 74 61 62 6c 65  index hash table
32770 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75  .  This will cau
32780 73 65 0a 2a 2a 20 74 68 65 20 61 6e 61 6c 79 73  se.** the analys
32790 69 73 20 74 6f 20 62 65 20 75 73 65 64 20 77 68  is to be used wh
327a0 65 6e 20 70 72 65 70 61 72 69 6e 67 20 61 6c 6c  en preparing all
327b0 20 73 75 62 73 65 71 75 65 6e 74 20 71 75 65 72   subsequent quer
327c0 69 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ies..*/.case OP_
327d0 4c 6f 61 64 41 6e 61 6c 79 73 69 73 3a 20 7b 0a  LoadAnalysis: {.
327e0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
327f0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
32800 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 72 63 20  db->nDb );.  rc 
32810 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69  = sqlite3Analysi
32820 73 4c 6f 61 64 28 64 62 2c 20 70 4f 70 2d 3e 70  sLoad(db, pOp->p
32830 31 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  1);.  if( rc ) g
32840 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
32850 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
32860 20 20 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21    .}.#endif /* !
32870 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
32880 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f 0a  MIT_ANALYZE) */.
32890 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70  ./* Opcode: Drop
328a0 54 61 62 6c 65 20 50 31 20 2a 20 2a 20 50 34 20  Table P1 * * P4 
328b0 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74  *.**.** Remove t
328c0 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d  he internal (in-
328d0 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72  memory) data str
328e0 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73  uctures that des
328f0 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 61 62  cribe.** the tab
32900 6c 65 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64  le named P4 in d
32910 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69  atabase P1.  Thi
32920 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65  s is called afte
32930 72 20 61 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20  r a table.** is 
32940 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73  dropped from dis
32950 6b 20 28 75 73 69 6e 67 20 74 68 65 20 44 65 73  k (using the Des
32960 74 72 6f 79 20 6f 70 63 6f 64 65 29 20 69 6e 20  troy opcode) in 
32970 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 0a 2a  order to keep .*
32980 2a 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72  * the internal r
32990 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
329a0 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63   the.** schema c
329b0 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77  onsistent with w
329c0 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a  hat is on disk..
329d0 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54  */.case OP_DropT
329e0 61 62 6c 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65  able: {.  sqlite
329f0 33 56 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f  3VdbeIncrWriteCo
32a00 75 6e 74 65 72 28 70 2c 20 30 29 3b 0a 20 20 73  unter(p, 0);.  s
32a10 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
32a20 65 6c 65 74 65 54 61 62 6c 65 28 64 62 2c 20 70  eleteTable(db, p
32a30 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e  Op->p1, pOp->p4.
32a40 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  z);.  break;.}..
32a50 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 49  /* Opcode: DropI
32a60 6e 64 65 78 20 50 31 20 2a 20 2a 20 50 34 20 2a  ndex P1 * * P4 *
32a70 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68  .**.** Remove th
32a80 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d  e internal (in-m
32a90 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75  emory) data stru
32aa0 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63  ctures that desc
32ab0 72 69 62 65 0a 2a 2a 20 74 68 65 20 69 6e 64 65  ribe.** the inde
32ac0 78 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61  x named P4 in da
32ad0 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73  tabase P1.  This
32ae0 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72   is called after
32af0 20 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 69 73 20   an index.** is 
32b00 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73  dropped from dis
32b10 6b 20 28 75 73 69 6e 67 20 74 68 65 20 44 65 73  k (using the Des
32b20 74 72 6f 79 20 6f 70 63 6f 64 65 29 0a 2a 2a 20  troy opcode).** 
32b30 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70  in order to keep
32b40 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65   the internal re
32b50 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
32b60 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f  the.** schema co
32b70 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68  nsistent with wh
32b80 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a  at is on disk..*
32b90 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 49 6e  /.case OP_DropIn
32ba0 64 65 78 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  dex: {.  sqlite3
32bb0 56 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75  VdbeIncrWriteCou
32bc0 6e 74 65 72 28 70 2c 20 30 29 3b 0a 20 20 73 71  nter(p, 0);.  sq
32bd0 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
32be0 6c 65 74 65 49 6e 64 65 78 28 64 62 2c 20 70 4f  leteIndex(db, pO
32bf0 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
32c00 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
32c10 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 72  * Opcode: DropTr
32c20 69 67 67 65 72 20 50 31 20 2a 20 2a 20 50 34 20  igger P1 * * P4 
32c30 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74  *.**.** Remove t
32c40 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d  he internal (in-
32c50 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72  memory) data str
32c60 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73  uctures that des
32c70 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 72 69  cribe.** the tri
32c80 67 67 65 72 20 6e 61 6d 65 64 20 50 34 20 69 6e  gger named P4 in
32c90 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54   database P1.  T
32ca0 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66  his is called af
32cb0 74 65 72 20 61 20 74 72 69 67 67 65 72 0a 2a 2a  ter a trigger.**
32cc0 20 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d   is dropped from
32cd0 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65   disk (using the
32ce0 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29   Destroy opcode)
32cf0 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
32d00 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65 72 6e  p .** the intern
32d10 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  al representatio
32d20 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65  n of the.** sche
32d30 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69  ma consistent wi
32d40 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69  th what is on di
32d50 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  sk..*/.case OP_D
32d60 72 6f 70 54 72 69 67 67 65 72 3a 20 7b 0a 20 20  ropTrigger: {.  
32d70 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57  sqlite3VdbeIncrW
32d80 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 30  riteCounter(p, 0
32d90 29 3b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69  );.  sqlite3Unli
32da0 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67  nkAndDeleteTrigg
32db0 65 72 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  er(db, pOp->p1, 
32dc0 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72  pOp->p4.z);.  br
32dd0 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66  eak;.}...#ifndef
32de0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54   SQLITE_OMIT_INT
32df0 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 2f 2a 20  EGRITY_CHECK./* 
32e00 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 72 69 74  Opcode: Integrit
32e10 79 43 6b 20 50 31 20 50 32 20 50 33 20 50 34 20  yCk P1 P2 P3 P4 
32e20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61  P5.**.** Do an a
32e30 6e 61 6c 79 73 69 73 20 6f 66 20 74 68 65 20 63  nalysis of the c
32e40 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61  urrently open da
32e50 74 61 62 61 73 65 2e 20 20 53 74 6f 72 65 20 69  tabase.  Store i
32e60 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31  n.** register P1
32e70 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 6e 20   the text of an 
32e80 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 64 65  error message de
32e90 73 63 72 69 62 69 6e 67 20 61 6e 79 20 70 72 6f  scribing any pro
32ea0 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20  blems..** If no 
32eb0 70 72 6f 62 6c 65 6d 73 20 61 72 65 20 66 6f 75  problems are fou
32ec0 6e 64 2c 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c  nd, store a NULL
32ed0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
32ee0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73  .**.** The regis
32ef0 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20  ter P3 contains 
32f00 6f 6e 65 20 6c 65 73 73 20 74 68 61 6e 20 74 68  one less than th
32f10 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72  e maximum number
32f20 20 6f 66 20 61 6c 6c 6f 77 65 64 20 65 72 72 6f   of allowed erro
32f30 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74 20 72  rs..** At most r
32f40 65 67 28 50 33 29 20 65 72 72 6f 72 73 20 77 69  eg(P3) errors wi
32f50 6c 6c 20 62 65 20 72 65 70 6f 72 74 65 64 2e 0a  ll be reported..
32f60 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  ** In other word
32f70 73 2c 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20  s, the analysis 
32f80 73 74 6f 70 73 20 61 73 20 73 6f 6f 6e 20 61 73  stops as soon as
32f90 20 72 65 67 28 50 31 29 20 65 72 72 6f 72 73 20   reg(P1) errors 
32fa0 61 72 65 20 0a 2a 2a 20 73 65 65 6e 2e 20 20 52  are .** seen.  R
32fb0 65 67 28 50 31 29 20 69 73 20 75 70 64 61 74 65  eg(P1) is update
32fc0 64 20 77 69 74 68 20 74 68 65 20 6e 75 6d 62 65  d with the numbe
32fd0 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61  r of errors rema
32fe0 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ining..**.** The
32ff0 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65   root page numbe
33000 72 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73  rs of all tables
33010 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
33020 20 61 72 65 20 69 6e 74 65 67 65 72 73 0a 2a 2a   are integers.**
33030 20 73 74 6f 72 65 64 20 69 6e 20 50 34 5f 49 4e   stored in P4_IN
33040 54 41 52 52 41 59 20 61 72 67 75 6d 65 6e 74 2e  TARRAY argument.
33050 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
33060 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 20 63 68  not zero, the ch
33070 65 63 6b 20 69 73 20 64 6f 6e 65 20 6f 6e 20 74  eck is done on t
33080 68 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74  he auxiliary dat
33090 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e  abase.** file, n
330a0 6f 74 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ot the main data
330b0 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a  base file..**.**
330c0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
330d0 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e  used to implemen
330e0 74 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 5f  t the integrity_
330f0 63 68 65 63 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f  check pragma..*/
33100 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 72 69  .case OP_Integri
33110 74 79 43 6b 3a 20 7b 0a 20 20 69 6e 74 20 6e 52  tyCk: {.  int nR
33120 6f 6f 74 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  oot;      /* Num
33130 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20 74 6f  ber of tables to
33140 20 63 68 65 63 6b 2e 20 20 28 4e 75 6d 62 65 72   check.  (Number
33150 20 6f 66 20 72 6f 6f 74 20 70 61 67 65 73 2e 29   of root pages.)
33160 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 52 6f 6f 74   */.  int *aRoot
33170 3b 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f  ;     /* Array o
33180 66 20 72 6f 6f 74 70 61 67 65 20 6e 75 6d 62 65  f rootpage numbe
33190 72 73 20 66 6f 72 20 74 61 62 6c 65 73 20 74 6f  rs for tables to
331a0 20 62 65 20 63 68 65 63 6b 65 64 20 2a 2f 0a 20   be checked */. 
331b0 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20   int nErr;      
331c0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72   /* Number of er
331d0 72 6f 72 73 20 72 65 70 6f 72 74 65 64 20 2a 2f  rors reported */
331e0 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20  .  char *z;     
331f0 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68     /* Text of th
33200 65 20 65 72 72 6f 72 20 72 65 70 6f 72 74 20 2a  e error report *
33210 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45 72 72 3b 20  /.  Mem *pnErr; 
33220 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
33230 6b 65 65 70 69 6e 67 20 74 72 61 63 6b 20 6f 66  keeping track of
33240 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e   errors remainin
33250 67 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20  g */..  assert( 
33260 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
33270 20 20 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70    nRoot = pOp->p
33280 32 3b 0a 20 20 61 52 6f 6f 74 20 3d 20 70 4f 70  2;.  aRoot = pOp
33290 2d 3e 70 34 2e 61 69 3b 0a 20 20 61 73 73 65 72  ->p4.ai;.  asser
332a0 74 28 20 6e 52 6f 6f 74 3e 30 20 29 3b 0a 20 20  t( nRoot>0 );.  
332b0 61 73 73 65 72 74 28 20 61 52 6f 6f 74 5b 30 5d  assert( aRoot[0]
332c0 3d 3d 6e 52 6f 6f 74 20 29 3b 0a 20 20 61 73 73  ==nRoot );.  ass
332d0 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
332e0 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  & pOp->p3<=(p->n
332f0 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
33300 6f 72 29 20 29 3b 0a 20 20 70 6e 45 72 72 20 3d  or) );.  pnErr =
33310 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
33320 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e 45 72  .  assert( (pnEr
33330 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  r->flags & MEM_I
33340 6e 74 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  nt)!=0 );.  asse
33350 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67  rt( (pnErr->flag
33360 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  s & (MEM_Str|MEM
33370 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20  _Blob))==0 );.  
33380 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
33390 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
333a0 20 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62   pOp->p5<db->nDb
333b0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
333c0 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
333d0 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 35 29 20  eMask, pOp->p5) 
333e0 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33  );.  z = sqlite3
333f0 42 74 72 65 65 49 6e 74 65 67 72 69 74 79 43 68  BtreeIntegrityCh
33400 65 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  eck(db->aDb[pOp-
33410 3e 70 35 5d 2e 70 42 74 2c 20 26 61 52 6f 6f 74  >p5].pBt, &aRoot
33420 5b 31 5d 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20 20  [1], nRoot,.    
33430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33440 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e               (in
33450 74 29 70 6e 45 72 72 2d 3e 75 2e 69 2b 31 2c 20  t)pnErr->u.i+1, 
33460 26 6e 45 72 72 29 3b 0a 20 20 73 71 6c 69 74 65  &nErr);.  sqlite
33470 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
33480 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 6e 45 72  pIn1);.  if( nEr
33490 72 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65  r==0 ){.    asse
334a0 72 74 28 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65  rt( z==0 );.  }e
334b0 6c 73 65 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a  lse if( z==0 ){.
334c0 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
334d0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 6e  .  }else{.    pn
334e0 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72  Err->u.i -= nErr
334f0 2d 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  -1;.    sqlite3V
33500 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 49 6e  dbeMemSetStr(pIn
33510 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45  1, z, -1, SQLITE
33520 5f 55 54 46 38 2c 20 73 71 6c 69 74 65 33 5f 66  _UTF8, sqlite3_f
33530 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41  ree);.  }.  UPDA
33540 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
33550 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33  pIn1);.  sqlite3
33560 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
33570 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e  ng(pIn1, encodin
33580 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  g);.  break;.}.#
33590 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
335a0 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43  OMIT_INTEGRITY_C
335b0 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  HECK */../* Opco
335c0 64 65 3a 20 52 6f 77 53 65 74 41 64 64 20 50 31  de: RowSetAdd P1
335d0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
335e0 6f 70 73 69 73 3a 20 72 6f 77 73 65 74 28 50 31  opsis: rowset(P1
335f0 29 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 49 6e  )=r[P2].**.** In
33600 73 65 72 74 20 74 68 65 20 69 6e 74 65 67 65 72  sert the integer
33610 20 76 61 6c 75 65 20 68 65 6c 64 20 62 79 20 72   value held by r
33620 65 67 69 73 74 65 72 20 50 32 20 69 6e 74 6f 20  egister P2 into 
33630 61 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 0a  a RowSet object.
33640 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73  ** held in regis
33650 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e  ter P1..**.** An
33660 20 61 73 73 65 72 74 69 6f 6e 20 66 61 69 6c 73   assertion fails
33670 20 69 66 20 50 32 20 69 73 20 6e 6f 74 20 61 6e   if P2 is not an
33680 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73   integer..*/.cas
33690 65 20 4f 50 5f 52 6f 77 53 65 74 41 64 64 3a 20  e OP_RowSetAdd: 
336a0 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20  {       /* in1, 
336b0 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in2 */.  pIn1 = 
336c0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
336d0 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
336e0 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
336f0 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20  t( (pIn2->flags 
33700 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
33710 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
33720 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 3d  ags & MEM_Blob)=
33730 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 73 71  =0 ){.    if( sq
33740 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52  lite3VdbeMemSetR
33750 6f 77 53 65 74 28 70 49 6e 31 29 20 29 20 67 6f  owSet(pIn1) ) go
33760 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20  to no_mem;.  }. 
33770 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
33780 56 64 62 65 4d 65 6d 49 73 52 6f 77 53 65 74 28  VdbeMemIsRowSet(
33790 70 49 6e 31 29 20 29 3b 0a 20 20 73 71 6c 69 74  pIn1) );.  sqlit
337a0 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 28  e3RowSetInsert((
337b0 52 6f 77 53 65 74 2a 29 70 49 6e 31 2d 3e 7a 2c  RowSet*)pIn1->z,
337c0 20 70 49 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20 62   pIn2->u.i);.  b
337d0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
337e0 64 65 3a 20 52 6f 77 53 65 74 52 65 61 64 20 50  de: RowSetRead P
337f0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
33800 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72  ynopsis: r[P3]=r
33810 6f 77 73 65 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20  owset(P1).**.** 
33820 45 78 74 72 61 63 74 20 74 68 65 20 73 6d 61 6c  Extract the smal
33830 6c 65 73 74 20 76 61 6c 75 65 20 66 72 6f 6d 20  lest value from 
33840 74 68 65 20 52 6f 77 53 65 74 20 6f 62 6a 65 63  the RowSet objec
33850 74 20 69 6e 20 50 31 0a 2a 2a 20 61 6e 64 20 70  t in P1.** and p
33860 75 74 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e  ut that value in
33870 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  to register P3..
33880 2a 2a 20 4f 72 2c 20 69 66 20 52 6f 77 53 65 74  ** Or, if RowSet
33890 20 6f 62 6a 65 63 74 20 50 31 20 69 73 20 69 6e   object P1 is in
338a0 69 74 69 61 6c 6c 79 20 65 6d 70 74 79 2c 20 6c  itially empty, l
338b0 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e 63 68 61  eave P3.** uncha
338c0 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70 20 74 6f  nged and jump to
338d0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e   instruction P2.
338e0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53  .*/.case OP_RowS
338f0 65 74 52 65 61 64 3a 20 7b 20 20 20 20 20 20 20  etRead: {       
33900 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 6f 75  /* jump, in1, ou
33910 74 33 20 2a 2f 0a 20 20 69 36 34 20 76 61 6c 3b  t3 */.  i64 val;
33920 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
33930 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
33940 65 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67  ert( (pIn1->flag
33950 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30  s & MEM_Blob)==0
33960 20 7c 7c 20 73 71 6c 69 74 65 33 56 64 62 65 4d   || sqlite3VdbeM
33970 65 6d 49 73 52 6f 77 53 65 74 28 70 49 6e 31 29  emIsRowSet(pIn1)
33980 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d   );.  if( (pIn1-
33990 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f  >flags & MEM_Blo
339a0 62 29 3d 3d 30 20 0a 20 20 20 7c 7c 20 73 71 6c  b)==0 .   || sql
339b0 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28 28  ite3RowSetNext((
339c0 52 6f 77 53 65 74 2a 29 70 49 6e 31 2d 3e 7a 2c  RowSet*)pIn1->z,
339d0 20 26 76 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20   &val)==0.  ){. 
339e0 20 20 20 2f 2a 20 54 68 65 20 62 6f 6f 6c 65 61     /* The boolea
339f0 6e 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79  n index is empty
33a00 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56   */.    sqlite3V
33a10 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49  dbeMemSetNull(pI
33a20 6e 31 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61  n1);.    VdbeBra
33a30 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a 20  nchTaken(1,2);. 
33a40 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
33a50 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72  p2_and_check_for
33a60 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d 65  _interrupt;.  }e
33a70 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20 76 61  lse{.    /* A va
33a80 6c 75 65 20 77 61 73 20 70 75 6c 6c 65 64 20 66  lue was pulled f
33a90 72 6f 6d 20 74 68 65 20 69 6e 64 65 78 20 2a 2f  rom the index */
33aa0 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
33ab0 61 6b 65 6e 28 30 2c 32 29 3b 0a 20 20 20 20 73  aken(0,2);.    s
33ac0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
33ad0 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d  Int64(&aMem[pOp-
33ae0 3e 70 33 5d 2c 20 76 61 6c 29 3b 0a 20 20 7d 0a  >p3], val);.  }.
33af0 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72    goto check_for
33b00 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f  _interrupt;.}../
33b10 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74  * Opcode: RowSet
33b20 54 65 73 74 20 50 31 20 50 32 20 50 33 20 50 34  Test P1 P2 P3 P4
33b30 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
33b40 20 72 5b 50 33 5d 20 69 6e 20 72 6f 77 73 65 74   r[P3] in rowset
33b50 28 50 31 29 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  (P1) goto P2.**.
33b60 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33 20 69  ** Register P3 i
33b70 73 20 61 73 73 75 6d 65 64 20 74 6f 20 68 6f 6c  s assumed to hol
33b80 64 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67  d a 64-bit integ
33b90 65 72 20 76 61 6c 75 65 2e 20 49 66 20 72 65 67  er value. If reg
33ba0 69 73 74 65 72 20 50 31 0a 2a 2a 20 63 6f 6e 74  ister P1.** cont
33bb0 61 69 6e 73 20 61 20 52 6f 77 53 65 74 20 6f 62  ains a RowSet ob
33bc0 6a 65 63 74 20 61 6e 64 20 74 68 61 74 20 52 6f  ject and that Ro
33bd0 77 53 65 74 20 6f 62 6a 65 63 74 20 63 6f 6e 74  wSet object cont
33be0 61 69 6e 73 0a 2a 2a 20 74 68 65 20 76 61 6c 75  ains.** the valu
33bf0 65 20 68 65 6c 64 20 69 6e 20 50 33 2c 20 6a 75  e held in P3, ju
33c00 6d 70 20 74 6f 20 72 65 67 69 73 74 65 72 20 50  mp to register P
33c10 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 6e  2. Otherwise, in
33c20 73 65 72 74 20 74 68 65 0a 2a 2a 20 69 6e 74 65  sert the.** inte
33c30 67 65 72 20 69 6e 20 50 33 20 69 6e 74 6f 20 74  ger in P3 into t
33c40 68 65 20 52 6f 77 53 65 74 20 61 6e 64 20 63 6f  he RowSet and co
33c50 6e 74 69 6e 75 65 20 6f 6e 20 74 6f 20 74 68 65  ntinue on to the
33c60 0a 2a 2a 20 6e 65 78 74 20 6f 70 63 6f 64 65 2e  .** next opcode.
33c70 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 6f 77 53 65  .**.** The RowSe
33c80 74 20 6f 62 6a 65 63 74 20 69 73 20 6f 70 74 69  t object is opti
33c90 6d 69 7a 65 64 20 66 6f 72 20 74 68 65 20 63 61  mized for the ca
33ca0 73 65 20 77 68 65 72 65 20 73 65 74 73 20 6f 66  se where sets of
33cb0 20 69 6e 74 65 67 65 72 73 0a 2a 2a 20 61 72 65   integers.** are
33cc0 20 69 6e 73 65 72 74 65 64 20 69 6e 20 64 69 73   inserted in dis
33cd0 74 69 6e 63 74 20 70 68 61 73 65 73 2c 20 77 68  tinct phases, wh
33ce0 69 63 68 20 65 61 63 68 20 73 65 74 20 63 6f 6e  ich each set con
33cf0 74 61 69 6e 73 20 6e 6f 20 64 75 70 6c 69 63 61  tains no duplica
33d00 74 65 73 2e 0a 2a 2a 20 45 61 63 68 20 73 65 74  tes..** Each set
33d10 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 20 62   is identified b
33d20 79 20 61 20 75 6e 69 71 75 65 20 50 34 20 76 61  y a unique P4 va
33d30 6c 75 65 2e 20 54 68 65 20 66 69 72 73 74 20 73  lue. The first s
33d40 65 74 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65 20  et.** must have 
33d50 50 34 3d 3d 30 2c 20 74 68 65 20 66 69 6e 61 6c  P4==0, the final
33d60 20 73 65 74 20 6d 75 73 74 20 68 61 76 65 20 50   set must have P
33d70 34 3d 3d 2d 31 2c 20 61 6e 64 20 66 6f 72 20 61  4==-1, and for a
33d80 6c 6c 20 6f 74 68 65 72 20 73 65 74 73 0a 2a 2a  ll other sets.**
33d90 20 6d 75 73 74 20 68 61 76 65 20 50 34 3e 30 2e   must have P4>0.
33da0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f  .**.** This allo
33db0 77 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  ws optimizations
33dc0 3a 20 28 61 29 20 77 68 65 6e 20 50 34 3d 3d 30  : (a) when P4==0
33dd0 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65   there is no nee
33de0 64 20 74 6f 20 74 65 73 74 0a 2a 2a 20 74 68 65  d to test.** the
33df0 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 66   RowSet object f
33e00 6f 72 20 50 33 2c 20 61 73 20 69 74 20 69 73 20  or P3, as it is 
33e10 67 75 61 72 61 6e 74 65 65 64 20 6e 6f 74 20 74  guaranteed not t
33e20 6f 20 63 6f 6e 74 61 69 6e 20 69 74 2c 0a 2a 2a  o contain it,.**
33e30 20 28 62 29 20 77 68 65 6e 20 50 34 3d 3d 2d 31   (b) when P4==-1
33e40 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65   there is no nee
33e50 64 20 74 6f 20 69 6e 73 65 72 74 20 74 68 65 20  d to insert the 
33e60 76 61 6c 75 65 2c 20 61 73 20 69 74 20 77 69 6c  value, as it wil
33e70 6c 0a 2a 2a 20 6e 65 76 65 72 20 62 65 20 74 65  l.** never be te
33e80 73 74 65 64 20 66 6f 72 2c 20 61 6e 64 20 28 63  sted for, and (c
33e90 29 20 77 68 65 6e 20 61 20 76 61 6c 75 65 20 74  ) when a value t
33ea0 68 61 74 20 69 73 20 70 61 72 74 20 6f 66 20 73  hat is part of s
33eb0 65 74 20 58 20 69 73 0a 2a 2a 20 69 6e 73 65 72  et X is.** inser
33ec0 74 65 64 2c 20 74 68 65 72 65 20 69 73 20 6e 6f  ted, there is no
33ed0 20 6e 65 65 64 20 74 6f 20 73 65 61 72 63 68 20   need to search 
33ee0 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 73 61  to see if the sa
33ef0 6d 65 20 76 61 6c 75 65 20 77 61 73 0a 2a 2a 20  me value was.** 
33f00 70 72 65 76 69 6f 75 73 6c 79 20 69 6e 73 65 72  previously inser
33f10 74 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 73  ted as part of s
33f20 65 74 20 58 20 28 6f 6e 6c 79 20 69 66 20 69 74  et X (only if it
33f30 20 77 61 73 20 70 72 65 76 69 6f 75 73 6c 79 0a   was previously.
33f40 2a 2a 20 69 6e 73 65 72 74 65 64 20 61 73 20 70  ** inserted as p
33f50 61 72 74 20 6f 66 20 73 6f 6d 65 20 6f 74 68 65  art of some othe
33f60 72 20 73 65 74 29 2e 0a 2a 2f 0a 63 61 73 65 20  r set)..*/.case 
33f70 4f 50 5f 52 6f 77 53 65 74 54 65 73 74 3a 20 7b  OP_RowSetTest: {
33f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f90 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
33fa0 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20  1, in3 */.  int 
33fb0 69 53 65 74 3b 0a 20 20 69 6e 74 20 65 78 69 73  iSet;.  int exis
33fc0 74 73 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61  ts;..  pIn1 = &a
33fd0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
33fe0 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
33ff0 2d 3e 70 33 5d 3b 0a 20 20 69 53 65 74 20 3d 20  ->p3];.  iSet = 
34000 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 61 73 73  pOp->p4.i;.  ass
34010 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73  ert( pIn3->flags
34020 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 0a 20 20 2f  &MEM_Int );..  /
34030 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 61 6e  * If there is an
34040 79 74 68 69 6e 67 20 6f 74 68 65 72 20 74 68 61  ything other tha
34050 6e 20 61 20 72 6f 77 73 65 74 20 6f 62 6a 65 63  n a rowset objec
34060 74 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  t in memory cell
34070 20 50 31 2c 0a 20 20 2a 2a 20 64 65 6c 65 74 65   P1,.  ** delete
34080 20 69 74 20 6e 6f 77 20 61 6e 64 20 69 6e 69 74   it now and init
34090 69 61 6c 69 7a 65 20 50 31 20 77 69 74 68 20 61  ialize P1 with a
340a0 6e 20 65 6d 70 74 79 20 72 6f 77 73 65 74 0a 20  n empty rowset. 
340b0 20 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e 31 2d   */.  if( (pIn1-
340c0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f  >flags & MEM_Blo
340d0 62 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28  b)==0 ){.    if(
340e0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
340f0 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29 20 29  etRowSet(pIn1) )
34100 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
34110 7d 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69  }.  assert( sqli
34120 74 65 33 56 64 62 65 4d 65 6d 49 73 52 6f 77 53  te3VdbeMemIsRowS
34130 65 74 28 70 49 6e 31 29 20 29 3b 0a 20 20 61 73  et(pIn1) );.  as
34140 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
34150 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
34160 20 61 73 73 65 72 74 28 20 69 53 65 74 3d 3d 2d   assert( iSet==-
34170 31 20 7c 7c 20 69 53 65 74 3e 3d 30 20 29 3b 0a  1 || iSet>=0 );.
34180 20 20 69 66 28 20 69 53 65 74 20 29 7b 0a 20 20    if( iSet ){.  
34190 20 20 65 78 69 73 74 73 20 3d 20 73 71 6c 69 74    exists = sqlit
341a0 65 33 52 6f 77 53 65 74 54 65 73 74 28 28 52 6f  e3RowSetTest((Ro
341b0 77 53 65 74 2a 29 70 49 6e 31 2d 3e 7a 2c 20 69  wSet*)pIn1->z, i
341c0 53 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b  Set, pIn3->u.i);
341d0 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
341e0 61 6b 65 6e 28 65 78 69 73 74 73 21 3d 30 2c 32  aken(exists!=0,2
341f0 29 3b 0a 20 20 20 20 69 66 28 20 65 78 69 73 74  );.    if( exist
34200 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  s ) goto jump_to
34210 5f 70 32 3b 0a 20 20 7d 0a 20 20 69 66 28 20 69  _p2;.  }.  if( i
34220 53 65 74 3e 3d 30 20 29 7b 0a 20 20 20 20 73 71  Set>=0 ){.    sq
34230 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72  lite3RowSetInser
34240 74 28 28 52 6f 77 53 65 74 2a 29 70 49 6e 31 2d  t((RowSet*)pIn1-
34250 3e 7a 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a  >z, pIn3->u.i);.
34260 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
34270 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
34280 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 0a 2f 2a  OMIT_TRIGGER../*
34290 20 4f 70 63 6f 64 65 3a 20 50 72 6f 67 72 61 6d   Opcode: Program
342a0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
342b0 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68  **.** Execute th
342c0 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  e trigger progra
342d0 6d 20 70 61 73 73 65 64 20 61 73 20 50 34 20 28  m passed as P4 (
342e0 74 79 70 65 20 50 34 5f 53 55 42 50 52 4f 47 52  type P4_SUBPROGR
342f0 41 4d 29 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 63  AM). .**.** P1 c
34300 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64 72  ontains the addr
34310 65 73 73 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72  ess of the memor
34320 79 20 63 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74  y cell that cont
34330 61 69 6e 73 20 74 68 65 20 66 69 72 73 74 20 6d  ains the first m
34340 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 69  emory .** cell i
34350 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 76 61  n an array of va
34360 6c 75 65 73 20 75 73 65 64 20 61 73 20 61 72 67  lues used as arg
34370 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 73 75  uments to the su
34380 62 2d 70 72 6f 67 72 61 6d 2e 20 50 32 20 0a 2a  b-program. P2 .*
34390 2a 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61  * contains the a
343a0 64 64 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74  ddress to jump t
343b0 6f 20 69 66 20 74 68 65 20 73 75 62 2d 70 72 6f  o if the sub-pro
343c0 67 72 61 6d 20 74 68 72 6f 77 73 20 61 6e 20 49  gram throws an I
343d0 47 4e 4f 52 45 20 0a 2a 2a 20 65 78 63 65 70 74  GNORE .** except
343e0 69 6f 6e 20 75 73 69 6e 67 20 74 68 65 20 52 41  ion using the RA
343f0 49 53 45 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20  ISE() function. 
34400 52 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74  Register P3 cont
34410 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73  ains the address
34420 20 0a 2a 2a 20 6f 66 20 61 20 6d 65 6d 6f 72 79   .** of a memory
34430 20 63 65 6c 6c 20 69 6e 20 74 68 69 73 20 28 74   cell in this (t
34440 68 65 20 70 61 72 65 6e 74 29 20 56 4d 20 74 68  he parent) VM th
34450 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 61 6c  at is used to al
34460 6c 6f 63 61 74 65 20 74 68 65 20 0a 2a 2a 20 6d  locate the .** m
34470 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 62  emory required b
34480 79 20 74 68 65 20 73 75 62 2d 76 64 62 65 20 61  y the sub-vdbe a
34490 74 20 72 75 6e 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a  t runtime..**.**
344a0 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
344b0 20 74 6f 20 74 68 65 20 56 4d 20 63 6f 6e 74 61   to the VM conta
344c0 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67 65  ining the trigge
344d0 72 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a  r program..**.**
344e0 20 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65   If P5 is non-ze
344f0 72 6f 2c 20 74 68 65 6e 20 72 65 63 75 72 73 69  ro, then recursi
34500 76 65 20 70 72 6f 67 72 61 6d 20 69 6e 76 6f 63  ve program invoc
34510 61 74 69 6f 6e 20 69 73 20 65 6e 61 62 6c 65 64  ation is enabled
34520 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 6f  ..*/.case OP_Pro
34530 67 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f  gram: {        /
34540 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20  * jump */.  int 
34550 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  nMem;           
34560 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
34570 20 6d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72   memory register
34580 73 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61  s for sub-progra
34590 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65  m */.  int nByte
345a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
345b0 2a 20 42 79 74 65 73 20 6f 66 20 72 75 6e 74 69  * Bytes of runti
345c0 6d 65 20 73 70 61 63 65 20 72 65 71 75 69 72 65  me space require
345d0 64 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61  d for sub-progra
345e0 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 74 3b  m */.  Mem *pRt;
345f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
34600 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 61 6c  * Register to al
34610 6c 6f 63 61 74 65 20 72 75 6e 74 69 6d 65 20 73  locate runtime s
34620 70 61 63 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  pace */.  Mem *p
34630 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
34640 20 20 2f 2a 20 55 73 65 64 20 74 6f 20 69 74 65    /* Used to ite
34650 72 61 74 65 20 74 68 72 6f 75 67 68 20 6d 65 6d  rate through mem
34660 6f 72 79 20 63 65 6c 6c 73 20 2a 2f 0a 20 20 4d  ory cells */.  M
34670 65 6d 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20  em *pEnd;       
34680 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 6d         /* Last m
34690 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 6e 65  emory cell in ne
346a0 77 20 61 72 72 61 79 20 2a 2f 0a 20 20 56 64 62  w array */.  Vdb
346b0 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20  eFrame *pFrame; 
346c0 20 20 20 20 20 2f 2a 20 4e 65 77 20 76 64 62 65       /* New vdbe
346d0 20 66 72 61 6d 65 20 74 6f 20 65 78 65 63 75 74   frame to execut
346e0 65 20 69 6e 20 2a 2f 0a 20 20 53 75 62 50 72 6f  e in */.  SubPro
346f0 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20  gram *pProgram; 
34700 20 20 2f 2a 20 53 75 62 2d 70 72 6f 67 72 61 6d    /* Sub-program
34710 20 74 6f 20 65 78 65 63 75 74 65 20 2a 2f 0a 20   to execute */. 
34720 20 76 6f 69 64 20 2a 74 3b 20 20 20 20 20 20 20   void *t;       
34730 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65           /* Toke
34740 6e 20 69 64 65 6e 74 69 66 79 69 6e 67 20 74 72  n identifying tr
34750 69 67 67 65 72 20 2a 2f 0a 0a 20 20 70 50 72 6f  igger */..  pPro
34760 67 72 61 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  gram = pOp->p4.p
34770 50 72 6f 67 72 61 6d 3b 0a 20 20 70 52 74 20 3d  Program;.  pRt =
34780 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
34790 0a 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67  .  assert( pProg
347a0 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20  ram->nOp>0 );.  
347b0 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 70 35 20  .  /* If the p5 
347c0 66 6c 61 67 20 69 73 20 63 6c 65 61 72 2c 20 74  flag is clear, t
347d0 68 65 6e 20 72 65 63 75 72 73 69 76 65 20 69 6e  hen recursive in
347e0 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67  vocation of trig
347f0 67 65 72 73 20 69 73 20 0a 20 20 2a 2a 20 64 69  gers is .  ** di
34800 73 61 62 6c 65 64 20 66 6f 72 20 62 61 63 6b 77  sabled for backw
34810 61 72 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69  ards compatibili
34820 74 79 20 28 70 35 20 69 73 20 73 65 74 20 69 66  ty (p5 is set if
34830 20 74 68 69 73 20 73 75 62 2d 70 72 6f 67 72 61   this sub-progra
34840 6d 0a 20 20 2a 2a 20 69 73 20 72 65 61 6c 6c 79  m.  ** is really
34850 20 61 20 74 72 69 67 67 65 72 2c 20 6e 6f 74 20   a trigger, not 
34860 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 61 63  a foreign key ac
34870 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65 20 66 6c  tion, and the fl
34880 61 67 20 73 65 74 0a 20 20 2a 2a 20 61 6e 64 20  ag set.  ** and 
34890 63 6c 65 61 72 65 64 20 62 79 20 74 68 65 20 22  cleared by the "
348a0 50 52 41 47 4d 41 20 72 65 63 75 72 73 69 76 65  PRAGMA recursive
348b0 5f 74 72 69 67 67 65 72 73 22 20 63 6f 6d 6d 61  _triggers" comma
348c0 6e 64 20 69 73 20 63 6c 65 61 72 29 2e 0a 20 20  nd is clear)..  
348d0 2a 2a 20 0a 20 20 2a 2a 20 49 74 20 69 73 20 72  ** .  ** It is r
348e0 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74  ecursive invocat
348f0 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73 2c  ion of triggers,
34900 20 61 74 20 74 68 65 20 53 51 4c 20 6c 65 76 65   at the SQL leve
34910 6c 2c 20 74 68 61 74 20 69 73 20 0a 20 20 2a 2a  l, that is .  **
34920 20 64 69 73 61 62 6c 65 64 2e 20 49 6e 20 73 6f   disabled. In so
34930 6d 65 20 63 61 73 65 73 20 61 20 73 69 6e 67 6c  me cases a singl
34940 65 20 74 72 69 67 67 65 72 20 6d 61 79 20 67 65  e trigger may ge
34950 6e 65 72 61 74 65 20 6d 6f 72 65 20 74 68 61 6e  nerate more than
34960 20 6f 6e 65 20 0a 20 20 2a 2a 20 53 75 62 50 72   one .  ** SubPr
34970 6f 67 72 61 6d 20 28 69 66 20 74 68 65 20 74 72  ogram (if the tr
34980 69 67 67 65 72 20 6d 61 79 20 62 65 20 65 78 65  igger may be exe
34990 63 75 74 65 64 20 77 69 74 68 20 6d 6f 72 65 20  cuted with more 
349a0 74 68 61 6e 20 6f 6e 65 20 64 69 66 66 65 72 65  than one differe
349b0 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46  nt .  ** ON CONF
349c0 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 29 2e  LICT algorithm).
349d0 20 53 75 62 50 72 6f 67 72 61 6d 20 73 74 72 75   SubProgram stru
349e0 63 74 75 72 65 73 20 61 73 73 6f 63 69 61 74 65  ctures associate
349f0 64 20 77 69 74 68 20 61 0a 20 20 2a 2a 20 73 69  d with a.  ** si
34a00 6e 67 6c 65 20 74 72 69 67 67 65 72 20 61 6c 6c  ngle trigger all
34a10 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 76   have the same v
34a20 61 6c 75 65 20 66 6f 72 20 74 68 65 20 53 75 62  alue for the Sub
34a30 50 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20  Program.token . 
34a40 20 2a 2a 20 76 61 72 69 61 62 6c 65 2e 20 20 2a   ** variable.  *
34a50 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  /.  if( pOp->p5 
34a60 29 7b 0a 20 20 20 20 74 20 3d 20 70 50 72 6f 67  ){.    t = pProg
34a70 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20  ram->token;.    
34a80 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46  for(pFrame=p->pF
34a90 72 61 6d 65 3b 20 70 46 72 61 6d 65 20 26 26 20  rame; pFrame && 
34aa0 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74  pFrame->token!=t
34ab0 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d  ; pFrame=pFrame-
34ac0 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 69  >pParent);.    i
34ad0 66 28 20 70 46 72 61 6d 65 20 29 20 62 72 65 61  f( pFrame ) brea
34ae0 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 2d  k;.  }..  if( p-
34af0 3e 6e 46 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69  >nFrame>=db->aLi
34b00 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
34b10 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48 5d 20  _TRIGGER_DEPTH] 
34b20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
34b30 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73 71  TE_ERROR;.    sq
34b40 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70  lite3VdbeError(p
34b50 2c 20 22 74 6f 6f 20 6d 61 6e 79 20 6c 65 76 65  , "too many leve
34b60 6c 73 20 6f 66 20 74 72 69 67 67 65 72 20 72 65  ls of trigger re
34b70 63 75 72 73 69 6f 6e 22 29 3b 0a 20 20 20 20 67  cursion");.    g
34b80 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
34b90 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f  _error;.  }..  /
34ba0 2a 20 52 65 67 69 73 74 65 72 20 70 52 74 20 69  * Register pRt i
34bb0 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
34bc0 74 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69  the memory requi
34bd0 72 65 64 20 74 6f 20 73 61 76 65 20 74 68 65 20  red to save the 
34be0 73 74 61 74 65 0a 20 20 2a 2a 20 6f 66 20 74 68  state.  ** of th
34bf0 65 20 63 75 72 72 65 6e 74 20 70 72 6f 67 72 61  e current progra
34c00 6d 2c 20 61 6e 64 20 74 68 65 20 6d 65 6d 6f 72  m, and the memor
34c10 79 20 72 65 71 75 69 72 65 64 20 61 74 20 72 75  y required at ru
34c20 6e 74 69 6d 65 20 74 6f 20 65 78 65 63 75 74 65  ntime to execute
34c30 0a 20 20 2a 2a 20 74 68 65 20 74 72 69 67 67 65  .  ** the trigge
34c40 72 20 70 72 6f 67 72 61 6d 2e 20 49 66 20 74 68  r program. If th
34c50 69 73 20 74 72 69 67 67 65 72 20 68 61 73 20 62  is trigger has b
34c60 65 65 6e 20 66 69 72 65 64 20 62 65 66 6f 72 65  een fired before
34c70 2c 20 74 68 65 6e 20 70 52 74 20 0a 20 20 2a 2a  , then pRt .  **
34c80 20 69 73 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f   is already allo
34c90 63 61 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65  cated. Otherwise
34ca0 2c 20 69 74 20 6d 75 73 74 20 62 65 20 69 6e 69  , it must be ini
34cb0 74 69 61 6c 69 7a 65 64 2e 20 20 2a 2f 0a 20 20  tialized.  */.  
34cc0 69 66 28 20 28 70 52 74 2d 3e 66 6c 61 67 73 26  if( (pRt->flags&
34cd0 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29 7b 0a  MEM_Blob)==0 ){.
34ce0 20 20 20 20 2f 2a 20 53 75 62 50 72 6f 67 72 61      /* SubProgra
34cf0 6d 2e 6e 4d 65 6d 20 69 73 20 73 65 74 20 74 6f  m.nMem is set to
34d00 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d   the number of m
34d10 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64  emory cells used
34d20 20 62 79 20 74 68 65 20 0a 20 20 20 20 2a 2a 20   by the .    ** 
34d30 70 72 6f 67 72 61 6d 20 73 74 6f 72 65 64 20 69  program stored i
34d40 6e 20 53 75 62 50 72 6f 67 72 61 6d 2e 61 4f 70  n SubProgram.aOp
34d50 2e 20 41 73 20 77 65 6c 6c 20 61 73 20 74 68 65  . As well as the
34d60 73 65 2c 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20  se, one memory. 
34d70 20 20 20 2a 2a 20 63 65 6c 6c 20 69 73 20 72 65     ** cell is re
34d80 71 75 69 72 65 64 20 66 6f 72 20 65 61 63 68 20  quired for each 
34d90 63 75 72 73 6f 72 20 75 73 65 64 20 62 79 20 74  cursor used by t
34da0 68 65 20 70 72 6f 67 72 61 6d 2e 20 53 65 74 20  he program. Set 
34db0 6c 6f 63 61 6c 0a 20 20 20 20 2a 2a 20 76 61 72  local.    ** var
34dc0 69 61 62 6c 65 20 6e 4d 65 6d 20 28 61 6e 64 20  iable nMem (and 
34dd0 6c 61 74 65 72 2c 20 56 64 62 65 46 72 61 6d 65  later, VdbeFrame
34de0 2e 6e 43 68 69 6c 64 4d 65 6d 29 20 74 6f 20 74  .nChildMem) to t
34df0 68 69 73 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a  his value..    *
34e00 2f 0a 20 20 20 20 6e 4d 65 6d 20 3d 20 70 50 72  /.    nMem = pPr
34e10 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50  ogram->nMem + pP
34e20 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20  rogram->nCsr;.  
34e30 20 20 61 73 73 65 72 74 28 20 6e 4d 65 6d 3e 30    assert( nMem>0
34e40 20 29 3b 0a 20 20 20 20 69 66 28 20 70 50 72 6f   );.    if( pPro
34e50 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 30 20 29 20  gram->nCsr==0 ) 
34e60 6e 4d 65 6d 2b 2b 3b 0a 20 20 20 20 6e 42 79 74  nMem++;.    nByt
34e70 65 20 3d 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f  e = ROUND8(sizeo
34e80 66 28 56 64 62 65 46 72 61 6d 65 29 29 0a 20 20  f(VdbeFrame)).  
34e90 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 6e 4d              + nM
34ea0 65 6d 20 2a 20 73 69 7a 65 6f 66 28 4d 65 6d 29  em * sizeof(Mem)
34eb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b  .              +
34ec0 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 20   pProgram->nCsr 
34ed0 2a 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72  * sizeof(VdbeCur
34ee0 73 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20 20  sor*).          
34ef0 20 20 20 20 2b 20 28 70 50 72 6f 67 72 61 6d 2d      + (pProgram-
34f00 3e 6e 4f 70 20 2b 20 37 29 2f 38 3b 0a 20 20 20  >nOp + 7)/8;.   
34f10 20 70 46 72 61 6d 65 20 3d 20 73 71 6c 69 74 65   pFrame = sqlite
34f20 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64 62  3DbMallocZero(db
34f30 2c 20 6e 42 79 74 65 29 3b 0a 20 20 20 20 69 66  , nByte);.    if
34f40 28 20 21 70 46 72 61 6d 65 20 29 7b 0a 20 20 20  ( !pFrame ){.   
34f50 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
34f60 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
34f70 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28  3VdbeMemRelease(
34f80 70 52 74 29 3b 0a 20 20 20 20 70 52 74 2d 3e 66  pRt);.    pRt->f
34f90 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 7c  lags = MEM_Blob|
34fa0 4d 45 4d 5f 44 79 6e 3b 0a 20 20 20 20 70 52 74  MEM_Dyn;.    pRt
34fb0 2d 3e 7a 20 3d 20 28 63 68 61 72 2a 29 70 46 72  ->z = (char*)pFr
34fc0 61 6d 65 3b 0a 20 20 20 20 70 52 74 2d 3e 6e 20  ame;.    pRt->n 
34fd0 3d 20 6e 42 79 74 65 3b 0a 20 20 20 20 70 52 74  = nByte;.    pRt
34fe0 2d 3e 78 44 65 6c 20 3d 20 73 71 6c 69 74 65 33  ->xDel = sqlite3
34ff0 56 64 62 65 46 72 61 6d 65 4d 65 6d 44 65 6c 3b  VdbeFrameMemDel;
35000 0a 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 76 20  ..    pFrame->v 
35010 3d 20 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  = p;.    pFrame-
35020 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d 20 6e 4d 65  >nChildMem = nMe
35030 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e  m;.    pFrame->n
35040 43 68 69 6c 64 43 73 72 20 3d 20 70 50 72 6f 67  ChildCsr = pProg
35050 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 70  ram->nCsr;.    p
35060 46 72 61 6d 65 2d 3e 70 63 20 3d 20 28 69 6e 74  Frame->pc = (int
35070 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20  )(pOp - aOp);.  
35080 20 20 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d    pFrame->aMem =
35090 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 46   p->aMem;.    pF
350a0 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e  rame->nMem = p->
350b0 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65  nMem;.    pFrame
350c0 2d 3e 61 70 43 73 72 20 3d 20 70 2d 3e 61 70 43  ->apCsr = p->apC
350d0 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  sr;.    pFrame->
350e0 6e 43 75 72 73 6f 72 20 3d 20 70 2d 3e 6e 43 75  nCursor = p->nCu
350f0 72 73 6f 72 3b 0a 20 20 20 20 70 46 72 61 6d 65  rsor;.    pFrame
35100 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a  ->aOp = p->aOp;.
35110 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 70 20      pFrame->nOp 
35120 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70 46  = p->nOp;.    pF
35130 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50  rame->token = pP
35140 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 23  rogram->token;.#
35150 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
35160 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41  BLE_STMT_SCANSTA
35170 54 55 53 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  TUS.    pFrame->
35180 61 6e 45 78 65 63 20 3d 20 70 2d 3e 61 6e 45 78  anExec = p->anEx
35190 65 63 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65  ec;.#endif.#ifde
351a0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
351b0 20 20 20 70 46 72 61 6d 65 2d 3e 69 46 72 61 6d     pFrame->iFram
351c0 65 4d 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f  eMagic = SQLITE_
351d0 46 52 41 4d 45 5f 4d 41 47 49 43 3b 0a 23 65 6e  FRAME_MAGIC;.#en
351e0 64 69 66 0a 0a 20 20 20 20 70 45 6e 64 20 3d 20  dif..    pEnd = 
351f0 26 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46  &VdbeFrameMem(pF
35200 72 61 6d 65 29 5b 70 46 72 61 6d 65 2d 3e 6e 43  rame)[pFrame->nC
35210 68 69 6c 64 4d 65 6d 5d 3b 0a 20 20 20 20 66 6f  hildMem];.    fo
35220 72 28 70 4d 65 6d 3d 56 64 62 65 46 72 61 6d 65  r(pMem=VdbeFrame
35230 4d 65 6d 28 70 46 72 61 6d 65 29 3b 20 70 4d 65  Mem(pFrame); pMe
35240 6d 21 3d 70 45 6e 64 3b 20 70 4d 65 6d 2b 2b 29  m!=pEnd; pMem++)
35250 7b 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 66 6c  {.      pMem->fl
35260 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69  ags = MEM_Undefi
35270 6e 65 64 3b 0a 20 20 20 20 20 20 70 4d 65 6d 2d  ned;.      pMem-
35280 3e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 7d 0a  >db = db;.    }.
35290 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 46 72    }else{.    pFr
352a0 61 6d 65 20 3d 20 28 56 64 62 65 46 72 61 6d 65  ame = (VdbeFrame
352b0 2a 29 70 52 74 2d 3e 7a 3b 0a 20 20 20 20 61 73  *)pRt->z;.    as
352c0 73 65 72 74 28 20 70 52 74 2d 3e 78 44 65 6c 3d  sert( pRt->xDel=
352d0 3d 73 71 6c 69 74 65 33 56 64 62 65 46 72 61 6d  =sqlite3VdbeFram
352e0 65 4d 65 6d 44 65 6c 20 29 3b 0a 20 20 20 20 61  eMemDel );.    a
352f0 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d  ssert( pProgram-
35300 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e  >nMem+pProgram->
35310 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43  nCsr==pFrame->nC
35320 68 69 6c 64 4d 65 6d 20 0a 20 20 20 20 20 20 20  hildMem .       
35330 20 7c 7c 20 28 70 50 72 6f 67 72 61 6d 2d 3e 6e   || (pProgram->n
35340 43 73 72 3d 3d 30 20 26 26 20 70 50 72 6f 67 72  Csr==0 && pProgr
35350 61 6d 2d 3e 6e 4d 65 6d 2b 31 3d 3d 70 46 72 61  am->nMem+1==pFra
35360 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 29 20 29  me->nChildMem) )
35370 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 50  ;.    assert( pP
35380 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46  rogram->nCsr==pF
35390 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20  rame->nChildCsr 
353a0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28  );.    assert( (
353b0 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3d  int)(pOp - aOp)=
353c0 3d 70 46 72 61 6d 65 2d 3e 70 63 20 29 3b 0a 20  =pFrame->pc );. 
353d0 20 7d 0a 0a 20 20 70 2d 3e 6e 46 72 61 6d 65 2b   }..  p->nFrame+
353e0 2b 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70 50 61  +;.  pFrame->pPa
353f0 72 65 6e 74 20 3d 20 70 2d 3e 70 46 72 61 6d 65  rent = p->pFrame
35400 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6c 61 73 74  ;.  pFrame->last
35410 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74  Rowid = db->last
35420 52 6f 77 69 64 3b 0a 20 20 70 46 72 61 6d 65 2d  Rowid;.  pFrame-
35430 3e 6e 43 68 61 6e 67 65 20 3d 20 70 2d 3e 6e 43  >nChange = p->nC
35440 68 61 6e 67 65 3b 0a 20 20 70 46 72 61 6d 65 2d  hange;.  pFrame-
35450 3e 6e 44 62 43 68 61 6e 67 65 20 3d 20 70 2d 3e  >nDbChange = p->
35460 64 62 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 61  db->nChange;.  a
35470 73 73 65 72 74 28 20 70 46 72 61 6d 65 2d 3e 70  ssert( pFrame->p
35480 41 75 78 44 61 74 61 3d 3d 30 20 29 3b 0a 20 20  AuxData==0 );.  
35490 70 46 72 61 6d 65 2d 3e 70 41 75 78 44 61 74 61  pFrame->pAuxData
354a0 20 3d 20 70 2d 3e 70 41 75 78 44 61 74 61 3b 0a   = p->pAuxData;.
354b0 20 20 70 2d 3e 70 41 75 78 44 61 74 61 20 3d 20    p->pAuxData = 
354c0 30 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20  0;.  p->nChange 
354d0 3d 20 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d 65  = 0;.  p->pFrame
354e0 20 3d 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d 3e   = pFrame;.  p->
354f0 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d 20 56 64  aMem = aMem = Vd
35500 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d  beFrameMem(pFram
35510 65 29 3b 0a 20 20 70 2d 3e 6e 4d 65 6d 20 3d 20  e);.  p->nMem = 
35520 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65  pFrame->nChildMe
35530 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72 73 6f 72 20  m;.  p->nCursor 
35540 3d 20 28 75 31 36 29 70 46 72 61 6d 65 2d 3e 6e  = (u16)pFrame->n
35550 43 68 69 6c 64 43 73 72 3b 0a 20 20 70 2d 3e 61  ChildCsr;.  p->a
35560 70 43 73 72 20 3d 20 28 56 64 62 65 43 75 72 73  pCsr = (VdbeCurs
35570 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b 70 2d 3e 6e  or **)&aMem[p->n
35580 4d 65 6d 5d 3b 0a 20 20 70 46 72 61 6d 65 2d 3e  Mem];.  pFrame->
35590 61 4f 6e 63 65 20 3d 20 28 75 38 2a 29 26 70 2d  aOnce = (u8*)&p-
355a0 3e 61 70 43 73 72 5b 70 50 72 6f 67 72 61 6d 2d  >apCsr[pProgram-
355b0 3e 6e 43 73 72 5d 3b 0a 20 20 6d 65 6d 73 65 74  >nCsr];.  memset
355c0 28 70 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 2c 20  (pFrame->aOnce, 
355d0 30 2c 20 28 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f  0, (pProgram->nO
355e0 70 20 2b 20 37 29 2f 38 29 3b 0a 20 20 70 2d 3e  p + 7)/8);.  p->
355f0 61 4f 70 20 3d 20 61 4f 70 20 3d 20 70 50 72 6f  aOp = aOp = pPro
35600 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d 3e  gram->aOp;.  p->
35610 6e 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  nOp = pProgram->
35620 6e 4f 70 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  nOp;.#ifdef SQLI
35630 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53  TE_ENABLE_STMT_S
35640 43 41 4e 53 54 41 54 55 53 0a 20 20 70 2d 3e 61  CANSTATUS.  p->a
35650 6e 45 78 65 63 20 3d 20 30 3b 0a 23 65 6e 64 69  nExec = 0;.#endi
35660 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
35670 44 45 42 55 47 0a 20 20 2f 2a 20 56 65 72 69 66  DEBUG.  /* Verif
35680 79 20 74 68 61 74 20 73 65 63 6f 6e 64 20 61 6e  y that second an
35690 64 20 73 75 62 73 65 71 75 65 6e 74 20 65 78 65  d subsequent exe
356a0 63 75 74 69 6f 6e 73 20 6f 66 20 74 68 65 20 73  cutions of the s
356b0 61 6d 65 20 74 72 69 67 67 65 72 20 64 6f 20 6e  ame trigger do n
356c0 6f 74 0a 20 20 2a 2a 20 74 72 79 20 74 6f 20 72  ot.  ** try to r
356d0 65 75 73 65 20 72 65 67 69 73 74 65 72 20 76 61  euse register va
356e0 6c 75 65 73 20 66 72 6f 6d 20 74 68 65 20 66 69  lues from the fi
356f0 72 73 74 20 75 73 65 2e 20 2a 2f 0a 20 20 7b 0a  rst use. */.  {.
35700 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 66      int i;.    f
35710 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4d 65  or(i=0; i<p->nMe
35720 6d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61  m; i++){.      a
35730 4d 65 6d 5b 69 5d 2e 70 53 63 6f 70 79 46 72 6f  Mem[i].pScopyFro
35740 6d 20 3d 20 30 3b 20 20 2f 2a 20 50 72 65 76 65  m = 0;  /* Preve
35750 6e 74 20 66 61 6c 73 65 2d 70 6f 73 69 74 69 76  nt false-positiv
35760 65 20 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  e AboutToChange(
35770 29 20 65 72 72 73 20 2a 2f 0a 20 20 20 20 20 20  ) errs */.      
35780 61 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 7c 3d  aMem[i].flags |=
35790 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 20   MEM_Undefined; 
357a0 2f 2a 20 43 61 75 73 65 20 61 20 66 61 75 6c 74  /* Cause a fault
357b0 20 69 66 20 74 68 69 73 20 72 65 67 20 69 73 20   if this reg is 
357c0 72 65 75 73 65 64 20 2a 2f 0a 20 20 20 20 7d 0a  reused */.    }.
357d0 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 70 4f 70    }.#endif.  pOp
357e0 20 3d 20 26 61 4f 70 5b 2d 31 5d 3b 0a 20 20 67   = &aOp[-1];.  g
357f0 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e  oto check_for_in
35800 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f  terrupt;.}../* O
35810 70 63 6f 64 65 3a 20 50 61 72 61 6d 20 50 31 20  pcode: Param P1 
35820 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
35830 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e  his opcode is on
35840 6c 79 20 65 76 65 72 20 70 72 65 73 65 6e 74 20  ly ever present 
35850 69 6e 20 73 75 62 2d 70 72 6f 67 72 61 6d 73 20  in sub-programs 
35860 63 61 6c 6c 65 64 20 76 69 61 20 74 68 65 20 0a  called via the .
35870 2a 2a 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e  ** OP_Program in
35880 73 74 72 75 63 74 69 6f 6e 2e 20 43 6f 70 79 20  struction. Copy 
35890 61 20 76 61 6c 75 65 20 63 75 72 72 65 6e 74 6c  a value currentl
358a0 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6d 65  y stored in a me
358b0 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66  mory .** cell of
358c0 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 28 70 61   the calling (pa
358d0 72 65 6e 74 29 20 66 72 61 6d 65 20 74 6f 20 63  rent) frame to c
358e0 65 6c 6c 20 50 32 20 69 6e 20 74 68 65 20 63 75  ell P2 in the cu
358f0 72 72 65 6e 74 20 66 72 61 6d 65 73 20 0a 2a 2a  rrent frames .**
35900 20 61 64 64 72 65 73 73 20 73 70 61 63 65 2e 20   address space. 
35910 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20  This is used by 
35920 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73  trigger programs
35930 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 6e   to access the n
35940 65 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64  ew.* .** and old
35950 2e 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a  .* values..**.**
35960 20 54 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   The address of 
35970 74 68 65 20 63 65 6c 6c 20 69 6e 20 74 68 65 20  the cell in the 
35980 70 61 72 65 6e 74 20 66 72 61 6d 65 20 69 73 20  parent frame is 
35990 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 61 64  determined by ad
359a0 64 69 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75  ding.** the valu
359b0 65 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75  e of the P1 argu
359c0 6d 65 6e 74 20 74 6f 20 74 68 65 20 76 61 6c 75  ment to the valu
359d0 65 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75  e of the P1 argu
359e0 6d 65 6e 74 20 74 6f 20 74 68 65 0a 2a 2a 20 63  ment to the.** c
359f0 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61  alling OP_Progra
35a00 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  m instruction..*
35a10 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 61 6d 3a  /.case OP_Param:
35a20 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
35a30 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62 65 46 72  out2 */.  VdbeFr
35a40 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 4d  ame *pFrame;.  M
35a50 65 6d 20 2a 70 49 6e 3b 0a 20 20 70 4f 75 74 20  em *pIn;.  pOut 
35a60 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
35a70 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 46 72 61  (p, pOp);.  pFra
35a80 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a  me = p->pFrame;.
35a90 20 20 70 49 6e 20 3d 20 26 70 46 72 61 6d 65 2d    pIn = &pFrame-
35aa0 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 20 2b 20  >aMem[pOp->p1 + 
35ab0 70 46 72 61 6d 65 2d 3e 61 4f 70 5b 70 46 72 61  pFrame->aOp[pFra
35ac0 6d 65 2d 3e 70 63 5d 2e 70 31 5d 3b 20 20 20 0a  me->pc].p1];   .
35ad0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
35ae0 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74  ShallowCopy(pOut
35af0 2c 20 70 49 6e 2c 20 4d 45 4d 5f 45 70 68 65 6d  , pIn, MEM_Ephem
35b00 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23  );.  break;.}..#
35b10 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66  endif /* #ifndef
35b20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49   SQLITE_OMIT_TRI
35b30 47 47 45 52 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  GGER */..#ifndef
35b40 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52   SQLITE_OMIT_FOR
35b50 45 49 47 4e 5f 4b 45 59 0a 2f 2a 20 4f 70 63 6f  EIGN_KEY./* Opco
35b60 64 65 3a 20 46 6b 43 6f 75 6e 74 65 72 20 50 31  de: FkCounter P1
35b70 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
35b80 6f 70 73 69 73 3a 20 66 6b 63 74 72 5b 50 31 5d  opsis: fkctr[P1]
35b90 2b 3d 50 32 0a 2a 2a 0a 2a 2a 20 49 6e 63 72 65  +=P2.**.** Incre
35ba0 6d 65 6e 74 20 61 20 22 63 6f 6e 73 74 72 61 69  ment a "constrai
35bb0 6e 74 20 63 6f 75 6e 74 65 72 22 20 62 79 20 50  nt counter" by P
35bc0 32 20 28 50 32 20 6d 61 79 20 62 65 20 6e 65 67  2 (P2 may be neg
35bd0 61 74 69 76 65 20 6f 72 20 70 6f 73 69 74 69 76  ative or positiv
35be0 65 29 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73 20  e)..** If P1 is 
35bf0 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 64 61  non-zero, the da
35c00 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e  tabase constrain
35c10 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63  t counter is inc
35c20 72 65 6d 65 6e 74 65 64 20 0a 2a 2a 20 28 64 65  remented .** (de
35c30 66 65 72 72 65 64 20 66 6f 72 65 69 67 6e 20 6b  ferred foreign k
35c40 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e  ey constraints).
35c50 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50   Otherwise, if P
35c60 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 0a  1 is zero, the .
35c70 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 75  ** statement cou
35c80 6e 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e  nter is incremen
35c90 74 65 64 20 28 69 6d 6d 65 64 69 61 74 65 20 66  ted (immediate f
35ca0 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
35cb0 72 61 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61 73 65  raints)..*/.case
35cc0 20 4f 50 5f 46 6b 43 6f 75 6e 74 65 72 3a 20 7b   OP_FkCounter: {
35cd0 0a 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73  .  if( db->flags
35ce0 20 26 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46   & SQLITE_DeferF
35cf0 4b 73 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44  Ks ){.    db->nD
35d00 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 2b  eferredImmCons +
35d10 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c  = pOp->p2;.  }el
35d20 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29  se if( pOp->p1 )
35d30 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72  {.    db->nDefer
35d40 72 65 64 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e  redCons += pOp->
35d50 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  p2;.  }else{.   
35d60 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e   p->nFkConstrain
35d70 74 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  t += pOp->p2;.  
35d80 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
35d90 20 4f 70 63 6f 64 65 3a 20 46 6b 49 66 5a 65 72   Opcode: FkIfZer
35da0 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  o P1 P2 * * *.**
35db0 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 66 6b   Synopsis: if fk
35dc0 63 74 72 5b 50 31 5d 3d 3d 30 20 67 6f 74 6f 20  ctr[P1]==0 goto 
35dd0 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  P2.**.** This op
35de0 63 6f 64 65 20 74 65 73 74 73 20 69 66 20 61 20  code tests if a 
35df0 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
35e00 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69  traint-counter i
35e10 73 20 63 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f  s currently zero
35e20 2e 0a 2a 2a 20 49 66 20 73 6f 2c 20 6a 75 6d 70  ..** If so, jump
35e30 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
35e40 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66  P2. Otherwise, f
35e50 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
35e60 68 65 20 6e 65 78 74 20 0a 2a 2a 20 69 6e 73 74  he next .** inst
35e70 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49  ruction..**.** I
35e80 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P1 is non-zero
35e90 2c 20 74 68 65 6e 20 74 68 65 20 6a 75 6d 70 20  , then the jump 
35ea0 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20  is taken if the 
35eb0 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61  database constra
35ec0 69 6e 74 2d 63 6f 75 6e 74 65 72 0a 2a 2a 20 69  int-counter.** i
35ed0 73 20 7a 65 72 6f 20 28 74 68 65 20 6f 6e 65 20  s zero (the one 
35ee0 74 68 61 74 20 63 6f 75 6e 74 73 20 64 65 66 65  that counts defe
35ef0 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 20  rred constraint 
35f00 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 20 49 66 20  violations). If 
35f10 50 31 20 69 73 0a 2a 2a 20 7a 65 72 6f 2c 20 74  P1 is.** zero, t
35f20 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
35f30 20 69 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e   if the statemen
35f40 74 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75  t constraint-cou
35f50 6e 74 65 72 20 69 73 20 7a 65 72 6f 0a 2a 2a 20  nter is zero.** 
35f60 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69  (immediate forei
35f70 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
35f80 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 0a 2a  t violations)..*
35f90 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 49 66 5a 65  /.case OP_FkIfZe
35fa0 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a  ro: {         /*
35fb0 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70   jump */.  if( p
35fc0 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 56 64  Op->p1 ){.    Vd
35fd0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 64 62  beBranchTaken(db
35fe0 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d  ->nDeferredCons=
35ff0 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72  =0 && db->nDefer
36000 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32  redImmCons==0, 2
36010 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e  );.    if( db->n
36020 44 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20  DeferredCons==0 
36030 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  && db->nDeferred
36040 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 67 6f 74  ImmCons==0 ) got
36050 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
36060 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42  }else{.    VdbeB
36070 72 61 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 6e 46  ranchTaken(p->nF
36080 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26  kConstraint==0 &
36090 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  & db->nDeferredI
360a0 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20  mmCons==0, 2);. 
360b0 20 20 20 69 66 28 20 70 2d 3e 6e 46 6b 43 6f 6e     if( p->nFkCon
360c0 73 74 72 61 69 6e 74 3d 3d 30 20 26 26 20 64 62  straint==0 && db
360d0 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
360e0 6e 73 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d  ns==0 ) goto jum
360f0 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62  p_to_p2;.  }.  b
36100 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
36110 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  * #ifndef SQLITE
36120 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
36130 59 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  Y */..#ifndef SQ
36140 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
36150 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64  CREMENT./* Opcod
36160 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50 32 20  e: MemMax P1 P2 
36170 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
36180 73 3a 20 72 5b 50 31 5d 3d 6d 61 78 28 72 5b 50  s: r[P1]=max(r[P
36190 31 5d 2c 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20  1],r[P2]).**.** 
361a0 50 31 20 69 73 20 61 20 72 65 67 69 73 74 65 72  P1 is a register
361b0 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61   in the root fra
361c0 6d 65 20 6f 66 20 74 68 69 73 20 56 4d 20 28 74  me of this VM (t
361d0 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 69 73  he root frame is
361e0 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 66 72  .** different fr
361f0 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74 20 66  om the current f
36200 72 61 6d 65 20 69 66 20 74 68 69 73 20 69 6e 73  rame if this ins
36210 74 72 75 63 74 69 6f 6e 20 69 73 20 62 65 69 6e  truction is bein
36220 67 20 65 78 65 63 75 74 65 64 0a 2a 2a 20 77 69  g executed.** wi
36230 74 68 69 6e 20 61 20 73 75 62 2d 70 72 6f 67 72  thin a sub-progr
36240 61 6d 29 2e 20 53 65 74 20 74 68 65 20 76 61 6c  am). Set the val
36250 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
36260 31 20 74 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d  1 to the maximum
36270 20 6f 66 20 0a 2a 2a 20 69 74 73 20 63 75 72 72   of .** its curr
36280 65 6e 74 20 76 61 6c 75 65 20 61 6e 64 20 74 68  ent value and th
36290 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
362a0 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68  ter P2..**.** Th
362b0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  is instruction t
362c0 68 72 6f 77 73 20 61 6e 20 65 72 72 6f 72 20 69  hrows an error i
362d0 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  f the memory cel
362e0 6c 20 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c  l is not initial
362f0 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72  ly.** an integer
36300 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d  ..*/.case OP_Mem
36310 4d 61 78 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  Max: {        /*
36320 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 46 72   in2 */.  VdbeFr
36330 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69  ame *pFrame;.  i
36340 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a  f( p->pFrame ){.
36350 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70      for(pFrame=p
36360 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65  ->pFrame; pFrame
36370 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d  ->pParent; pFram
36380 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  e=pFrame->pParen
36390 74 29 3b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26  t);.    pIn1 = &
363a0 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70  pFrame->aMem[pOp
363b0 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a  ->p1];.  }else{.
363c0 20 20 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d      pIn1 = &aMem
363d0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a 20  [pOp->p1];.  }. 
363e0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
363f0 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 73  lid(pIn1) );.  s
36400 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
36410 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20  egerify(pIn1);. 
36420 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
36430 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65  p->p2];.  sqlite
36440 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
36450 66 79 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20  fy(pIn2);.  if( 
36460 70 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e  pIn1->u.i<pIn2->
36470 75 2e 69 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e  u.i){.    pIn1->
36480 75 2e 69 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b  u.i = pIn2->u.i;
36490 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
364a0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
364b0 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d  _OMIT_AUTOINCREM
364c0 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  ENT */../* Opcod
364d0 65 3a 20 49 66 50 6f 73 20 50 31 20 50 32 20 50  e: IfPos P1 P2 P
364e0 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
364f0 73 3a 20 69 66 20 72 5b 50 31 5d 3e 30 20 74 68  s: if r[P1]>0 th
36500 65 6e 20 72 5b 50 31 5d 2d 3d 50 33 2c 20 67 6f  en r[P1]-=P3, go
36510 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69  to P2.**.** Regi
36520 73 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e  ster P1 must con
36530 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e  tain an integer.
36540 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65  .** If the value
36550 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
36560 69 73 20 31 20 6f 72 20 67 72 65 61 74 65 72 2c  is 1 or greater,
36570 20 73 75 62 74 72 61 63 74 20 50 33 20 66 72 6f   subtract P3 fro
36580 6d 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69  m the.** value i
36590 6e 20 50 31 20 61 6e 64 20 6a 75 6d 70 20 74 6f  n P1 and jump to
365a0 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   P2..**.** If th
365b0 65 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20  e initial value 
365c0 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69  of register P1 i
365d0 73 20 6c 65 73 73 20 74 68 61 6e 20 31 2c 20 74  s less than 1, t
365e0 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65  hen the.** value
365f0 20 69 73 20 75 6e 63 68 61 6e 67 65 64 20 61 6e   is unchanged an
36600 64 20 63 6f 6e 74 72 6f 6c 20 70 61 73 73 65 73  d control passes
36610 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
36620 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
36630 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 50  ..*/.case OP_IfP
36640 6f 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  os: {        /* 
36650 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  jump, in1 */.  p
36660 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
36670 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
36680 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
36690 49 6e 74 20 29 3b 0a 20 20 56 64 62 65 42 72 61  Int );.  VdbeBra
366a0 6e 63 68 54 61 6b 65 6e 28 20 70 49 6e 31 2d 3e  nchTaken( pIn1->
366b0 75 2e 69 3e 30 2c 20 32 29 3b 0a 20 20 69 66 28  u.i>0, 2);.  if(
366c0 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a   pIn1->u.i>0 ){.
366d0 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2d 3d      pIn1->u.i -=
366e0 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 67 6f   pOp->p3;.    go
366f0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
36700 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
36710 2a 20 4f 70 63 6f 64 65 3a 20 4f 66 66 73 65 74  * Opcode: Offset
36720 4c 69 6d 69 74 20 50 31 20 50 32 20 50 33 20 2a  Limit P1 P2 P3 *
36730 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
36740 69 66 20 72 5b 50 31 5d 3e 30 20 74 68 65 6e 20  if r[P1]>0 then 
36750 72 5b 50 32 5d 3d 72 5b 50 31 5d 2b 6d 61 78 28  r[P2]=r[P1]+max(
36760 30 2c 72 5b 50 33 5d 29 20 65 6c 73 65 20 72 5b  0,r[P3]) else r[
36770 50 32 5d 3d 28 2d 31 29 0a 2a 2a 0a 2a 2a 20 54  P2]=(-1).**.** T
36780 68 69 73 20 6f 70 63 6f 64 65 20 70 65 72 66 6f  his opcode perfo
36790 72 6d 73 20 61 20 63 6f 6d 6d 6f 6e 6c 79 20 75  rms a commonly u
367a0 73 65 64 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20  sed computation 
367b0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a  associated with.
367c0 2a 2a 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46  ** LIMIT and OFF
367d0 53 45 54 20 70 72 6f 63 65 73 73 2e 20 20 72 5b  SET process.  r[
367e0 50 31 5d 20 68 6f 6c 64 73 20 74 68 65 20 6c 69  P1] holds the li
367f0 6d 69 74 20 63 6f 75 6e 74 65 72 2e 20 20 72 5b  mit counter.  r[
36800 50 33 5d 0a 2a 2a 20 68 6f 6c 64 73 20 74 68 65  P3].** holds the
36810 20 6f 66 66 73 65 74 20 63 6f 75 6e 74 65 72 2e   offset counter.
36820 20 20 54 68 65 20 6f 70 63 6f 64 65 20 63 6f 6d    The opcode com
36830 70 75 74 65 73 20 74 68 65 20 63 6f 6d 62 69 6e  putes the combin
36840 65 64 20 76 61 6c 75 65 0a 2a 2a 20 6f 66 20 74  ed value.** of t
36850 68 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46  he LIMIT and OFF
36860 53 45 54 20 61 6e 64 20 73 74 6f 72 65 73 20 74  SET and stores t
36870 68 61 74 20 76 61 6c 75 65 20 69 6e 20 72 5b 50  hat value in r[P
36880 32 5d 2e 20 20 54 68 65 20 72 5b 50 32 5d 0a 2a  2].  The r[P2].*
36890 2a 20 76 61 6c 75 65 20 63 6f 6d 70 75 74 65 64  * value computed
368a0 20 69 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75   is the total nu
368b0 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 74 68 61  mber of rows tha
368c0 74 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62  t will need to b
368d0 65 0a 2a 2a 20 76 69 73 69 74 65 64 20 69 6e 20  e.** visited in 
368e0 6f 72 64 65 72 20 74 6f 20 63 6f 6d 70 6c 65 74  order to complet
368f0 65 20 74 68 65 20 71 75 65 72 79 2e 0a 2a 2a 0a  e the query..**.
36900 2a 2a 20 49 66 20 72 5b 50 33 5d 20 69 73 20 7a  ** If r[P3] is z
36910 65 72 6f 20 6f 72 20 6e 65 67 61 74 69 76 65 2c  ero or negative,
36920 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 65 72   that means ther
36930 65 20 69 73 20 6e 6f 20 4f 46 46 53 45 54 0a 2a  e is no OFFSET.*
36940 2a 20 61 6e 64 20 72 5b 50 32 5d 20 69 73 20 73  * and r[P2] is s
36950 65 74 20 74 6f 20 62 65 20 74 68 65 20 76 61 6c  et to be the val
36960 75 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 2c  ue of the LIMIT,
36970 20 72 5b 50 31 5d 2e 0a 2a 2a 0a 2a 2a 20 69 66   r[P1]..**.** if
36980 20 72 5b 50 31 5d 20 69 73 20 7a 65 72 6f 20 6f   r[P1] is zero o
36990 72 20 6e 65 67 61 74 69 76 65 2c 20 74 68 61 74  r negative, that
369a0 20 6d 65 61 6e 73 20 74 68 65 72 65 20 69 73 20   means there is 
369b0 6e 6f 20 4c 49 4d 49 54 0a 2a 2a 20 61 6e 64 20  no LIMIT.** and 
369c0 72 5b 50 32 5d 20 69 73 20 73 65 74 20 74 6f 20  r[P2] is set to 
369d0 2d 31 2e 20 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72  -1. .**.** Other
369e0 77 69 73 65 2c 20 72 5b 50 32 5d 20 69 73 20 73  wise, r[P2] is s
369f0 65 74 20 74 6f 20 74 68 65 20 73 75 6d 20 6f 66  et to the sum of
36a00 20 72 5b 50 31 5d 20 61 6e 64 20 72 5b 50 33 5d   r[P1] and r[P3]
36a10 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 66 66  ..*/.case OP_Off
36a20 73 65 74 4c 69 6d 69 74 3a 20 7b 20 20 20 20 2f  setLimit: {    /
36a30 2a 20 69 6e 31 2c 20 6f 75 74 32 2c 20 69 6e 33  * in1, out2, in3
36a40 20 2a 2f 0a 20 20 69 36 34 20 78 3b 0a 20 20 70   */.  i64 x;.  p
36a50 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
36a60 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26  >p1];.  pIn3 = &
36a70 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
36a80 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
36a90 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
36aa0 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
36ab0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
36ac0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  );.  assert( pIn
36ad0 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  3->flags & MEM_I
36ae0 6e 74 20 29 3b 0a 20 20 78 20 3d 20 70 49 6e 31  nt );.  x = pIn1
36af0 2d 3e 75 2e 69 3b 0a 20 20 69 66 28 20 78 3c 3d  ->u.i;.  if( x<=
36b00 30 20 7c 7c 20 73 71 6c 69 74 65 33 41 64 64 49  0 || sqlite3AddI
36b10 6e 74 36 34 28 26 78 2c 20 70 49 6e 33 2d 3e 75  nt64(&x, pIn3->u
36b20 2e 69 3e 30 3f 70 49 6e 33 2d 3e 75 2e 69 3a 30  .i>0?pIn3->u.i:0
36b30 29 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74  ) ){.    /* If t
36b40 68 65 20 4c 49 4d 49 54 20 69 73 20 6c 65 73 73  he LIMIT is less
36b50 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
36b60 6f 20 7a 65 72 6f 2c 20 6c 6f 6f 70 20 66 6f 72  o zero, loop for
36b70 65 76 65 72 2e 20 20 54 68 69 73 0a 20 20 20 20  ever.  This.    
36b80 2a 2a 20 69 73 20 64 6f 63 75 6d 65 6e 74 65 64  ** is documented
36b90 2e 20 20 42 75 74 20 61 6c 73 6f 2c 20 69 66 20  .  But also, if 
36ba0 74 68 65 20 4c 49 4d 49 54 2b 4f 46 46 53 45 54  the LIMIT+OFFSET
36bb0 20 65 78 63 65 65 64 73 20 32 5e 36 33 20 74 68   exceeds 2^63 th
36bc0 65 6e 0a 20 20 20 20 2a 2a 20 61 6c 73 6f 20 6c  en.    ** also l
36bd0 6f 6f 70 20 66 6f 72 65 76 65 72 2e 20 20 54 68  oop forever.  Th
36be0 69 73 20 69 73 20 75 6e 64 6f 63 75 6d 65 6e 74  is is undocument
36bf0 65 64 2e 20 20 49 6e 20 66 61 63 74 2c 20 6f 6e  ed.  In fact, on
36c00 65 20 63 6f 75 6c 64 20 61 72 67 75 65 0a 20 20  e could argue.  
36c10 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20 6c 6f    ** that the lo
36c20 6f 70 20 73 68 6f 75 6c 64 20 74 65 72 6d 69 6e  op should termin
36c30 61 74 65 2e 20 20 42 75 74 20 61 73 73 75 6d 69  ate.  But assumi
36c40 6e 67 20 31 20 62 69 6c 6c 69 6f 6e 20 69 74 65  ng 1 billion ite
36c50 72 61 74 69 6f 6e 73 0a 20 20 20 20 2a 2a 20 70  rations.    ** p
36c60 65 72 20 73 65 63 6f 6e 64 20 28 66 61 72 20 65  er second (far e
36c70 78 63 65 65 64 69 6e 67 20 74 68 65 20 63 61 70  xceeding the cap
36c80 61 62 69 6c 69 74 69 65 73 20 6f 66 20 61 6e 79  abilities of any
36c90 20 63 75 72 72 65 6e 74 20 68 61 72 64 77 61 72   current hardwar
36ca0 65 29 0a 20 20 20 20 2a 2a 20 69 74 20 77 6f 75  e).    ** it wou
36cb0 6c 64 20 74 61 6b 65 20 6e 65 61 72 6c 79 20 33  ld take nearly 3
36cc0 30 30 20 79 65 61 72 73 20 74 6f 20 61 63 74 75  00 years to actu
36cd0 61 6c 6c 79 20 72 65 61 63 68 20 74 68 65 20 6c  ally reach the l
36ce0 69 6d 69 74 2e 20 20 53 6f 0a 20 20 20 20 2a 2a  imit.  So.    **
36cf0 20 6c 6f 6f 70 69 6e 67 20 66 6f 72 65 76 65 72   looping forever
36d00 20 69 73 20 61 20 72 65 61 73 6f 6e 61 62 6c 65   is a reasonable
36d10 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 2e 20   approximation. 
36d20 2a 2f 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  */.    pOut->u.i
36d30 20 3d 20 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a   = -1;.  }else{.
36d40 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
36d50 78 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  x;.  }.  break;.
36d60 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  }../* Opcode: If
36d70 4e 6f 74 5a 65 72 6f 20 50 31 20 50 32 20 2a 20  NotZero P1 P2 * 
36d80 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
36d90 20 69 66 20 72 5b 50 31 5d 21 3d 30 20 74 68 65   if r[P1]!=0 the
36da0 6e 20 72 5b 50 31 5d 2d 2d 2c 20 67 6f 74 6f 20  n r[P1]--, goto 
36db0 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65  P2.**.** Registe
36dc0 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74 61 69  r P1 must contai
36dd0 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49  n an integer.  I
36de0 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  f the content of
36df0 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 0a   register P1 is.
36e00 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 67 72 65  ** initially gre
36e10 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20  ater than zero, 
36e20 74 68 65 6e 20 64 65 63 72 65 6d 65 6e 74 20 74  then decrement t
36e30 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
36e40 73 74 65 72 20 50 31 2e 0a 2a 2a 20 49 66 20 69  ster P1..** If i
36e50 74 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 28 6e  t is non-zero (n
36e60 65 67 61 74 69 76 65 20 6f 72 20 70 6f 73 69 74  egative or posit
36e70 69 76 65 29 20 61 6e 64 20 74 68 65 6e 20 61 6c  ive) and then al
36e80 73 6f 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20  so jump to P2.  
36e90 0a 2a 2a 20 49 66 20 72 65 67 69 73 74 65 72 20  .** If register 
36ea0 50 31 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20  P1 is initially 
36eb0 7a 65 72 6f 2c 20 6c 65 61 76 65 20 69 74 20 75  zero, leave it u
36ec0 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 66 61 6c  nchanged and fal
36ed0 6c 20 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a 63 61  l through..*/.ca
36ee0 73 65 20 4f 50 5f 49 66 4e 6f 74 5a 65 72 6f 3a  se OP_IfNotZero:
36ef0 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
36f00 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
36f10 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
36f20 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
36f30 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  1->flags&MEM_Int
36f40 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68   );.  VdbeBranch
36f50 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3c  Taken(pIn1->u.i<
36f60 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e  0, 2);.  if( pIn
36f70 31 2d 3e 75 2e 69 20 29 7b 0a 20 20 20 20 20 69  1->u.i ){.     i
36f80 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20 29  f( pIn1->u.i>0 )
36f90 20 70 49 6e 31 2d 3e 75 2e 69 2d 2d 3b 0a 20 20   pIn1->u.i--;.  
36fa0 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
36fb0 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
36fc0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
36fd0 65 63 72 4a 75 6d 70 5a 65 72 6f 20 50 31 20 50  ecrJumpZero P1 P
36fe0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
36ff0 73 69 73 3a 20 69 66 20 28 2d 2d 72 5b 50 31 5d  sis: if (--r[P1]
37000 29 3d 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  )==0 goto P2.**.
37010 2a 2a 20 52 65 67 69 73 74 65 72 20 50 31 20 6d  ** Register P1 m
37020 75 73 74 20 68 6f 6c 64 20 61 6e 20 69 6e 74 65  ust hold an inte
37030 67 65 72 2e 20 20 44 65 63 72 65 6d 65 6e 74 20  ger.  Decrement 
37040 74 68 65 20 76 61 6c 75 65 20 69 6e 20 50 31 0a  the value in P1.
37050 2a 2a 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 50  ** and jump to P
37060 32 20 69 66 20 74 68 65 20 6e 65 77 20 76 61 6c  2 if the new val
37070 75 65 20 69 73 20 65 78 61 63 74 6c 79 20 7a 65  ue is exactly ze
37080 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  ro..*/.case OP_D
37090 65 63 72 4a 75 6d 70 5a 65 72 6f 3a 20 7b 20 20  ecrJumpZero: {  
370a0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
370b0 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
370c0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
370d0 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
370e0 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  gs&MEM_Int );.  
370f0 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 53 4d  if( pIn1->u.i>SM
37100 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29 20 70  ALLEST_INT64 ) p
37110 49 6e 31 2d 3e 75 2e 69 2d 2d 3b 0a 20 20 56 64  In1->u.i--;.  Vd
37120 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49  beBranchTaken(pI
37130 6e 31 2d 3e 75 2e 69 3d 3d 30 2c 20 32 29 3b 0a  n1->u.i==0, 2);.
37140 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3d    if( pIn1->u.i=
37150 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  =0 ) goto jump_t
37160 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  o_p2;.  break;.}
37170 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67  .../* Opcode: Ag
37180 67 53 74 65 70 20 2a 20 50 32 20 50 33 20 50 34  gStep * P2 P3 P4
37190 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
371a0 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20 73 74 65   accum=r[P3] ste
371b0 70 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a  p(r[P2@P5]).**.*
371c0 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 78 53  * Execute the xS
371d0 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72  tep function for
371e0 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 0a 2a   an aggregate..*
371f0 2a 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 68  * The function h
37200 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73 2e  as P5 arguments.
37210 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65    P4 is a pointe
37220 72 20 74 6f 20 74 68 65 20 0a 2a 2a 20 46 75 6e  r to the .** Fun
37230 63 44 65 66 20 73 74 72 75 63 74 75 72 65 20 74  cDef structure t
37240 68 61 74 20 73 70 65 63 69 66 69 65 73 20 74 68  hat specifies th
37250 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 52 65 67  e function.  Reg
37260 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65 0a  ister P3 is the.
37270 2a 2a 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a  ** accumulator..
37280 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67  **.** The P5 arg
37290 75 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e  uments are taken
372a0 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
372b0 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63  2 and its.** suc
372c0 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a 2f 2a 20 4f  cessors..*/./* O
372d0 70 63 6f 64 65 3a 20 41 67 67 49 6e 76 65 72 73  pcode: AggInvers
372e0 65 20 2a 20 50 32 20 50 33 20 50 34 20 50 35 0a  e * P2 P3 P4 P5.
372f0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63  ** Synopsis: acc
37300 75 6d 3d 72 5b 50 33 5d 20 69 6e 76 65 72 73 65  um=r[P3] inverse
37310 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a  (r[P2@P5]).**.**
37320 20 45 78 65 63 75 74 65 20 74 68 65 20 78 49 6e   Execute the xIn
37330 76 65 72 73 65 20 66 75 6e 63 74 69 6f 6e 20 66  verse function f
37340 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e  or an aggregate.
37350 0a 2a 2a 20 54 68 65 20 66 75 6e 63 74 69 6f 6e  .** The function
37360 20 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74   has P5 argument
37370 73 2e 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e  s.  P4 is a poin
37380 74 65 72 20 74 6f 20 74 68 65 20 0a 2a 2a 20 46  ter to the .** F
37390 75 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65  uncDef structure
373a0 20 74 68 61 74 20 73 70 65 63 69 66 69 65 73 20   that specifies 
373b0 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 52  the function.  R
373c0 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68  egister P3 is th
373d0 65 0a 2a 2a 20 61 63 63 75 6d 75 6c 61 74 6f 72  e.** accumulator
373e0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61  ..**.** The P5 a
373f0 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74 61 6b  rguments are tak
37400 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72  en from register
37410 20 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73   P2 and its.** s
37420 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a 2f 2a  uccessors..*/./*
37430 20 4f 70 63 6f 64 65 3a 20 41 67 67 53 74 65 70   Opcode: AggStep
37440 31 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  1 P1 P2 P3 P4 P5
37450 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63  .** Synopsis: ac
37460 63 75 6d 3d 72 5b 50 33 5d 20 73 74 65 70 28 72  cum=r[P3] step(r
37470 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45  [P2@P5]).**.** E
37480 78 65 63 75 74 65 20 74 68 65 20 78 53 74 65 70  xecute the xStep
37490 20 28 69 66 20 50 31 3d 3d 30 29 20 6f 72 20 78   (if P1==0) or x
374a0 49 6e 76 65 72 73 65 20 28 69 66 20 50 31 21 3d  Inverse (if P1!=
374b0 30 29 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20  0) function for 
374c0 61 6e 0a 2a 2a 20 61 67 67 72 65 67 61 74 65 2e  an.** aggregate.
374d0 20 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 68    The function h
374e0 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73 2e  as P5 arguments.
374f0 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65    P4 is a pointe
37500 72 20 74 6f 20 74 68 65 20 0a 2a 2a 20 46 75 6e  r to the .** Fun
37510 63 44 65 66 20 73 74 72 75 63 74 75 72 65 20 74  cDef structure t
37520 68 61 74 20 73 70 65 63 69 66 69 65 73 20 74 68  hat specifies th
37530 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 52 65 67  e function.  Reg
37540 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65 0a  ister P3 is the.
37550 2a 2a 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a  ** accumulator..
37560 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67  **.** The P5 arg
37570 75 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e  uments are taken
37580 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
37590 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63  2 and its.** suc
375a0 63 65 73 73 6f 72 73 2e 0a 2a 2a 0a 2a 2a 20 54  cessors..**.** T
375b0 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 69 6e  his opcode is in
375c0 69 74 69 61 6c 6c 79 20 63 6f 64 65 64 20 61 73  itially coded as
375d0 20 4f 50 5f 41 67 67 53 74 65 70 30 2e 20 20 4f   OP_AggStep0.  O
375e0 6e 20 66 69 72 73 74 20 65 76 61 6c 75 61 74 69  n first evaluati
375f0 6f 6e 2c 0a 2a 2a 20 74 68 65 20 46 75 6e 63 44  on,.** the FuncD
37600 65 66 20 73 74 6f 72 65 64 20 69 6e 20 50 34 20  ef stored in P4 
37610 69 73 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  is converted int
37620 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e  o an sqlite3_con
37630 74 65 78 74 20 61 6e 64 0a 2a 2a 20 74 68 65 20  text and.** the 
37640 6f 70 63 6f 64 65 20 69 73 20 63 68 61 6e 67 65  opcode is change
37650 64 2e 20 20 49 6e 20 74 68 69 73 20 77 61 79 2c  d.  In this way,
37660 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74   the initializat
37670 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 71  ion of the.** sq
37680 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 6e  lite3_context on
37690 6c 79 20 68 61 70 70 65 6e 73 20 6f 6e 63 65 2c  ly happens once,
376a0 20 69 6e 73 74 65 61 64 20 6f 66 20 6f 6e 20 65   instead of on e
376b0 61 63 68 20 63 61 6c 6c 20 74 6f 20 74 68 65 0a  ach call to the.
376c0 2a 2a 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e  ** step function
376d0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67  ..*/.case OP_Agg
376e0 49 6e 76 65 72 73 65 3a 0a 63 61 73 65 20 4f 50  Inverse:.case OP
376f0 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20 20 69 6e  _AggStep: {.  in
37700 74 20 6e 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63  t n;.  sqlite3_c
37710 6f 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a 0a 20  ontext *pCtx;.. 
37720 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
37730 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46  type==P4_FUNCDEF
37740 20 29 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70   );.  n = pOp->p
37750 35 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  5;.  assert( pOp
37760 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
37770 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  3<=(p->nMem+1 - 
37780 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
37790 20 61 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c 7c   assert( n==0 ||
377a0 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70   (pOp->p2>0 && p
377b0 4f 70 2d 3e 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d  Op->p2+n<=(p->nM
377c0 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
377d0 72 29 2b 31 29 20 29 3b 0a 20 20 61 73 73 65 72  r)+1) );.  asser
377e0 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e  t( pOp->p3<pOp->
377f0 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70  p2 || pOp->p3>=p
37800 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 43  Op->p2+n );.  pC
37810 74 78 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61  tx = sqlite3DbMa
37820 6c 6c 6f 63 52 61 77 4e 4e 28 64 62 2c 20 6e 2a  llocRawNN(db, n*
37830 73 69 7a 65 6f 66 28 73 71 6c 69 74 65 33 5f 76  sizeof(sqlite3_v
37840 61 6c 75 65 2a 29 20 2b 0a 20 20 20 20 20 20 20  alue*) +.       
37850 20 20 20 20 20 20 20 20 28 73 69 7a 65 6f 66 28          (sizeof(
37860 70 43 74 78 5b 30 5d 29 20 2b 20 73 69 7a 65 6f  pCtx[0]) + sizeo
37870 66 28 4d 65 6d 29 20 2d 20 73 69 7a 65 6f 66 28  f(Mem) - sizeof(
37880 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 29  sqlite3_value*))
37890 29 3b 0a 20 20 69 66 28 20 70 43 74 78 3d 3d 30  );.  if( pCtx==0
378a0 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
378b0 20 20 70 43 74 78 2d 3e 70 4d 65 6d 20 3d 20 30    pCtx->pMem = 0
378c0 3b 0a 20 20 70 43 74 78 2d 3e 70 4f 75 74 20 3d  ;.  pCtx->pOut =
378d0 20 28 4d 65 6d 2a 29 26 28 70 43 74 78 2d 3e 61   (Mem*)&(pCtx->a
378e0 72 67 76 5b 6e 5d 29 3b 0a 20 20 73 71 6c 69 74  rgv[n]);.  sqlit
378f0 65 33 56 64 62 65 4d 65 6d 49 6e 69 74 28 70 43  e3VdbeMemInit(pC
37900 74 78 2d 3e 70 4f 75 74 2c 20 64 62 2c 20 4d 45  tx->pOut, db, ME
37910 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 70 43 74 78 2d  M_Null);.  pCtx-
37920 3e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34  >pFunc = pOp->p4
37930 2e 70 46 75 6e 63 3b 0a 20 20 70 43 74 78 2d 3e  .pFunc;.  pCtx->
37940 69 4f 70 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  iOp = (int)(pOp 
37950 2d 20 61 4f 70 29 3b 0a 20 20 70 43 74 78 2d 3e  - aOp);.  pCtx->
37960 70 56 64 62 65 20 3d 20 70 3b 0a 20 20 70 43 74  pVdbe = p;.  pCt
37970 78 2d 3e 73 6b 69 70 46 6c 61 67 20 3d 20 30 3b  x->skipFlag = 0;
37980 0a 20 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72  .  pCtx->isError
37990 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d 3e 61 72   = 0;.  pCtx->ar
379a0 67 63 20 3d 20 6e 3b 0a 20 20 70 4f 70 2d 3e 70  gc = n;.  pOp->p
379b0 34 74 79 70 65 20 3d 20 50 34 5f 46 55 4e 43 43  4type = P4_FUNCC
379c0 54 58 3b 0a 20 20 70 4f 70 2d 3e 70 34 2e 70 43  TX;.  pOp->p4.pC
379d0 74 78 20 3d 20 70 43 74 78 3b 0a 0a 20 20 2f 2a  tx = pCtx;..  /*
379e0 20 4f 50 5f 41 67 67 49 6e 76 65 72 73 65 20 6d   OP_AggInverse m
379f0 75 73 74 20 68 61 76 65 20 50 31 3d 3d 31 20 61  ust have P1==1 a
37a00 6e 64 20 4f 50 5f 41 67 67 53 74 65 70 20 6d 75  nd OP_AggStep mu
37a10 73 74 20 68 61 76 65 20 50 31 3d 3d 30 20 2a 2f  st have P1==0 */
37a20 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
37a30 70 31 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65  p1==(pOp->opcode
37a40 3d 3d 4f 50 5f 41 67 67 49 6e 76 65 72 73 65 29  ==OP_AggInverse)
37a50 20 29 3b 0a 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f   );..  pOp->opco
37a60 64 65 20 3d 20 4f 50 5f 41 67 67 53 74 65 70 31  de = OP_AggStep1
37a70 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f  ;.  /* Fall thro
37a80 75 67 68 20 69 6e 74 6f 20 4f 50 5f 41 67 67 53  ugh into OP_AggS
37a90 74 65 70 20 2a 2f 0a 7d 0a 63 61 73 65 20 4f 50  tep */.}.case OP
37aa0 5f 41 67 67 53 74 65 70 31 3a 20 7b 0a 20 20 69  _AggStep1: {.  i
37ab0 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74 65 33 5f  nt i;.  sqlite3_
37ac0 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a 20  context *pCtx;. 
37ad0 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 0a 20 20 61   Mem *pMem;..  a
37ae0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
37af0 70 65 3d 3d 50 34 5f 46 55 4e 43 43 54 58 20 29  pe==P4_FUNCCTX )
37b00 3b 0a 20 20 70 43 74 78 20 3d 20 70 4f 70 2d 3e  ;.  pCtx = pOp->
37b10 70 34 2e 70 43 74 78 3b 0a 20 20 70 4d 65 6d 20  p4.pCtx;.  pMem 
37b20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
37b30 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
37b40 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70 4f 70  _DEBUG.  if( pOp
37b50 2d 3e 70 31 20 29 7b 0a 20 20 20 20 2f 2a 20 54  ->p1 ){.    /* T
37b60 68 69 73 20 69 73 20 61 6e 20 4f 50 5f 41 67 67  his is an OP_Agg
37b70 49 6e 76 65 72 73 65 20 63 61 6c 6c 2e 20 20 56  Inverse call.  V
37b80 65 72 69 66 79 20 74 68 61 74 20 78 53 74 65 70  erify that xStep
37b90 20 68 61 73 20 61 6c 77 61 79 73 0a 20 20 20 20   has always.    
37ba0 2a 2a 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 61  ** been called a
37bb0 74 20 6c 65 61 73 74 20 6f 6e 63 65 20 70 72 69  t least once pri
37bc0 6f 72 20 74 6f 20 61 6e 79 20 78 49 6e 76 65 72  or to any xInver
37bd0 73 65 20 63 61 6c 6c 2e 20 2a 2f 0a 20 20 20 20  se call. */.    
37be0 61 73 73 65 72 74 28 20 70 4d 65 6d 2d 3e 75 54  assert( pMem->uT
37bf0 65 6d 70 3d 3d 30 78 31 31 32 32 65 30 65 33 20  emp==0x1122e0e3 
37c00 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
37c10 2f 2a 20 54 68 69 73 20 69 73 20 61 6e 20 4f 50  /* This is an OP
37c20 5f 41 67 67 53 74 65 70 20 63 61 6c 6c 2e 20 20  _AggStep call.  
37c30 4d 61 72 6b 20 69 74 20 61 73 20 73 75 63 68 2e  Mark it as such.
37c40 20 2a 2f 0a 20 20 20 20 70 4d 65 6d 2d 3e 75 54   */.    pMem->uT
37c50 65 6d 70 20 3d 20 30 78 31 31 32 32 65 30 65 33  emp = 0x1122e0e3
37c60 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20  ;.  }.#endif..  
37c70 2f 2a 20 49 66 20 74 68 69 73 20 66 75 6e 63 74  /* If this funct
37c80 69 6f 6e 20 69 73 20 69 6e 73 69 64 65 20 6f 66  ion is inside of
37c90 20 61 20 74 72 69 67 67 65 72 2c 20 74 68 65 20   a trigger, the 
37ca0 72 65 67 69 73 74 65 72 20 61 72 72 61 79 20 69  register array i
37cb0 6e 20 61 4d 65 6d 5b 5d 0a 20 20 2a 2a 20 6d 69  n aMem[].  ** mi
37cc0 67 68 74 20 63 68 61 6e 67 65 20 66 72 6f 6d 20  ght change from 
37cd0 6f 6e 65 20 65 76 61 6c 75 61 74 69 6f 6e 20 74  one evaluation t
37ce0 6f 20 74 68 65 20 6e 65 78 74 2e 20 20 54 68 65  o the next.  The
37cf0 20 6e 65 78 74 20 62 6c 6f 63 6b 20 6f 66 20 63   next block of c
37d00 6f 64 65 0a 20 20 2a 2a 20 63 68 65 63 6b 73 20  ode.  ** checks 
37d10 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 72 65  to see if the re
37d20 67 69 73 74 65 72 20 61 72 72 61 79 20 68 61 73  gister array has
37d30 20 63 68 61 6e 67 65 64 2c 20 61 6e 64 20 69 66   changed, and if
37d40 20 73 6f 20 69 74 0a 20 20 2a 2a 20 72 65 69 6e   so it.  ** rein
37d50 69 74 69 61 6c 69 7a 65 73 20 74 68 65 20 72 65  itializes the re
37d60 6c 61 76 61 6e 74 20 70 61 72 74 73 20 6f 66 20  lavant parts of 
37d70 74 68 65 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  the sqlite3_cont
37d80 65 78 74 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20  ext object */.  
37d90 69 66 28 20 70 43 74 78 2d 3e 70 4d 65 6d 20 21  if( pCtx->pMem !
37da0 3d 20 70 4d 65 6d 20 29 7b 0a 20 20 20 20 70 43  = pMem ){.    pC
37db0 74 78 2d 3e 70 4d 65 6d 20 3d 20 70 4d 65 6d 3b  tx->pMem = pMem;
37dc0 0a 20 20 20 20 66 6f 72 28 69 3d 70 43 74 78 2d  .    for(i=pCtx-
37dd0 3e 61 72 67 63 2d 31 3b 20 69 3e 3d 30 3b 20 69  >argc-1; i>=0; i
37de0 2d 2d 29 20 70 43 74 78 2d 3e 61 72 67 76 5b 69  --) pCtx->argv[i
37df0 5d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  ] = &aMem[pOp->p
37e00 32 2b 69 5d 3b 0a 20 20 7d 0a 0a 23 69 66 64 65  2+i];.  }..#ifde
37e10 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
37e20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 43 74 78   for(i=0; i<pCtx
37e30 2d 3e 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20  ->argc; i++){.  
37e40 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
37e50 61 6c 69 64 28 70 43 74 78 2d 3e 61 72 67 76 5b  alid(pCtx->argv[
37e60 69 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53  i]) );.    REGIS
37e70 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
37e80 32 2b 69 2c 20 70 43 74 78 2d 3e 61 72 67 76 5b  2+i, pCtx->argv[
37e90 69 5d 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  i]);.  }.#endif.
37ea0 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20  .  pMem->n++;.  
37eb0 61 73 73 65 72 74 28 20 70 43 74 78 2d 3e 70 4f  assert( pCtx->pO
37ec0 75 74 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 4e  ut->flags==MEM_N
37ed0 75 6c 6c 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ull );.  assert(
37ee0 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 3d 3d   pCtx->isError==
37ef0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
37f00 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67 3d 3d 30  Ctx->skipFlag==0
37f10 20 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   );.#ifndef SQLI
37f20 54 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55  TE_OMIT_WINDOWFU
37f30 4e 43 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  NC.  if( pOp->p1
37f40 20 29 7b 0a 20 20 20 20 28 70 43 74 78 2d 3e 70   ){.    (pCtx->p
37f50 46 75 6e 63 2d 3e 78 49 6e 76 65 72 73 65 29 28  Func->xInverse)(
37f60 70 43 74 78 2c 70 43 74 78 2d 3e 61 72 67 63 2c  pCtx,pCtx->argc,
37f70 70 43 74 78 2d 3e 61 72 67 76 29 3b 0a 20 20 7d  pCtx->argv);.  }
37f80 65 6c 73 65 0a 23 65 6e 64 69 66 0a 20 20 28 70  else.#endif.  (p
37f90 43 74 78 2d 3e 70 46 75 6e 63 2d 3e 78 53 46 75  Ctx->pFunc->xSFu
37fa0 6e 63 29 28 70 43 74 78 2c 70 43 74 78 2d 3e 61  nc)(pCtx,pCtx->a
37fb0 72 67 63 2c 70 43 74 78 2d 3e 61 72 67 76 29 3b  rgc,pCtx->argv);
37fc0 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30 35   /* IMP: R-24505
37fd0 2d 32 33 32 33 30 20 2a 2f 0a 0a 20 20 69 66 28  -23230 */..  if(
37fe0 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 20 29   pCtx->isError )
37ff0 7b 0a 20 20 20 20 69 66 28 20 70 43 74 78 2d 3e  {.    if( pCtx->
38000 69 73 45 72 72 6f 72 3e 30 20 29 7b 0a 20 20 20  isError>0 ){.   
38010 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
38020 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 73 71 6c  ror(p, "%s", sql
38030 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
38040 70 43 74 78 2d 3e 70 4f 75 74 29 29 3b 0a 20 20  pCtx->pOut));.  
38050 20 20 20 20 72 63 20 3d 20 70 43 74 78 2d 3e 69      rc = pCtx->i
38060 73 45 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  sError;.    }.  
38070 20 20 69 66 28 20 70 43 74 78 2d 3e 73 6b 69 70    if( pCtx->skip
38080 46 6c 61 67 20 29 7b 0a 20 20 20 20 20 20 61 73  Flag ){.      as
38090 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70  sert( pOp[-1].op
380a0 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71  code==OP_CollSeq
380b0 20 29 3b 0a 20 20 20 20 20 20 69 20 3d 20 70 4f   );.      i = pO
380c0 70 5b 2d 31 5d 2e 70 31 3b 0a 20 20 20 20 20 20  p[-1].p1;.      
380d0 69 66 28 20 69 20 29 20 73 71 6c 69 74 65 33 56  if( i ) sqlite3V
380e0 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26  dbeMemSetInt64(&
380f0 61 4d 65 6d 5b 69 5d 2c 20 31 29 3b 0a 20 20 20  aMem[i], 1);.   
38100 20 20 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61     pCtx->skipFla
38110 67 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20  g = 0;.    }.   
38120 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
38130 65 6c 65 61 73 65 28 70 43 74 78 2d 3e 70 4f 75  elease(pCtx->pOu
38140 74 29 3b 0a 20 20 20 20 70 43 74 78 2d 3e 70 4f  t);.    pCtx->pO
38150 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
38160 4e 75 6c 6c 3b 0a 20 20 20 20 70 43 74 78 2d 3e  Null;.    pCtx->
38170 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20 20  isError = 0;.   
38180 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
38190 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
381a0 72 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  r;.  }.  assert(
381b0 20 70 43 74 78 2d 3e 70 4f 75 74 2d 3e 66 6c 61   pCtx->pOut->fla
381c0 67 73 3d 3d 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a  gs==MEM_Null );.
381d0 20 20 61 73 73 65 72 74 28 20 70 43 74 78 2d 3e    assert( pCtx->
381e0 73 6b 69 70 46 6c 61 67 3d 3d 30 20 29 3b 0a 20  skipFlag==0 );. 
381f0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
38200 63 6f 64 65 3a 20 41 67 67 46 69 6e 61 6c 20 50  code: AggFinal P
38210 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  1 P2 * P4 *.** S
38220 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d 72  ynopsis: accum=r
38230 5b 50 31 5d 20 4e 3d 50 32 0a 2a 2a 0a 2a 2a 20  [P1] N=P2.**.** 
38240 50 31 20 69 73 20 74 68 65 20 6d 65 6d 6f 72 79  P1 is the memory
38250 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 69   location that i
38260 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f  s the accumulato
38270 72 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61  r for an aggrega
38280 74 65 0a 2a 2a 20 6f 72 20 77 69 6e 64 6f 77 20  te.** or window 
38290 66 75 6e 63 74 69 6f 6e 2e 20 20 45 78 65 63 75  function.  Execu
382a0 74 65 20 74 68 65 20 66 69 6e 61 6c 69 7a 65 72  te the finalizer
382b0 20 66 75 6e 63 74 69 6f 6e 20 0a 2a 2a 20 66 6f   function .** fo
382c0 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 61  r an aggregate a
382d0 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 7