/ Hex Artifact Content
Login

Artifact ba31e329cd8d8051cf52384aa60883ff92662f128a0816863b54d229553ec96b:


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 2a 28 7a 43 73  ) = c;.    *(zCs
46c0: 72 2b 2b 29 20 3d 20 27 78 27 3b 0a 20 20 20 20  r++) = 'x';.    
46d0: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
46e0: 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 64 5b  (100, zCsr, "%d[
46f0: 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20  ", pMem->n);.   
4700: 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33   zCsr += sqlite3
4710: 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a  Strlen30(zCsr);.
4720: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 32      for(i=0; i<2
4730: 35 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20  5 && i<pMem->n; 
4740: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  i++){.      sqli
4750: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30  te3_snprintf(100
4760: 2c 20 7a 43 73 72 2c 20 22 25 30 32 58 22 2c 20  , zCsr, "%02X", 
4770: 28 28 69 6e 74 29 70 4d 65 6d 2d 3e 7a 5b 69 5d  ((int)pMem->z[i]
4780: 20 26 20 30 78 46 46 29 29 3b 0a 20 20 20 20 20   & 0xFF));.     
4790: 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33   zCsr += sqlite3
47a0: 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a  Strlen30(zCsr);.
47b0: 20 20 20 20 7d 0a 20 20 20 20 2a 7a 43 73 72 2b      }.    *zCsr+
47c0: 2b 20 3d 20 27 7c 27 3b 0a 20 20 20 20 66 6f 72  + = '|';.    for
47d0: 28 69 3d 30 3b 20 69 3c 32 35 20 26 26 20 69 3c  (i=0; i<25 && i<
47e0: 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20  pMem->n; i++){. 
47f0: 20 20 20 20 20 63 68 61 72 20 7a 20 3d 20 70 4d       char z = pM
4800: 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20 20 20 20  em->z[i];.      
4810: 69 66 28 20 7a 3c 33 32 20 7c 7c 20 7a 3e 31 32  if( z<32 || z>12
4820: 36 20 29 20 2a 7a 43 73 72 2b 2b 20 3d 20 27 2e  6 ) *zCsr++ = '.
4830: 27 3b 0a 20 20 20 20 20 20 65 6c 73 65 20 2a 7a  ';.      else *z
4840: 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20 20 20 7d  Csr++ = z;.    }
4850: 0a 20 20 20 20 2a 28 7a 43 73 72 2b 2b 29 20 3d  .    *(zCsr++) =
4860: 20 27 5d 27 3b 0a 20 20 20 20 69 66 28 20 66 20   ']';.    if( f 
4870: 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20  & MEM_Zero ){.  
4880: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
4890: 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 22  intf(100, zCsr,"
48a0: 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a  +%dz",pMem->u.nZ
48b0: 65 72 6f 29 3b 0a 20 20 20 20 20 20 7a 43 73 72  ero);.      zCsr
48c0: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
48d0: 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d  n30(zCsr);.    }
48e0: 0a 20 20 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30  .    *zCsr = '\0
48f0: 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 66  ';.  }else if( f
4900: 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20   & MEM_Str ){.  
4910: 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20    int j, k;.    
4920: 7a 42 75 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20  zBuf[0] = ' ';. 
4930: 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44     if( f & MEM_D
4940: 79 6e 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66  yn ){.      zBuf
4950: 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20  [1] = 'z';.     
4960: 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d   assert( (f & (M
4970: 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70  EM_Static|MEM_Ep
4980: 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  hem))==0 );.    
4990: 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45  }else if( f & ME
49a0: 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20  M_Static ){.    
49b0: 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b    zBuf[1] = 't';
49c0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
49d0: 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d  f & (MEM_Dyn|MEM
49e0: 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20  _Ephem))==0 );. 
49f0: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26     }else if( f &
4a00: 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20   MEM_Ephem ){.  
4a10: 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65      zBuf[1] = 'e
4a20: 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ';.      assert(
4a30: 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69   (f & (MEM_Stati
4a40: 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29  c|MEM_Dyn))==0 )
4a50: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
4a60: 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27     zBuf[1] = 's'
4a70: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20  ;.    }.    k = 
4a80: 32 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  2;.    sqlite3_s
4a90: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 26 7a 42  nprintf(100, &zB
4aa0: 75 66 5b 6b 5d 2c 20 22 25 64 22 2c 20 70 4d 65  uf[k], "%d", pMe
4ab0: 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d 20  m->n);.    k += 
4ac0: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
4ad0: 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a  &zBuf[k]);.    z
4ae0: 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a  Buf[k++] = '[';.
4af0: 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 32      for(j=0; j<2
4b00: 35 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20  5 && j<pMem->n; 
4b10: 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 75 38 20 63  j++){.      u8 c
4b20: 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20   = pMem->z[j];. 
4b30: 20 20 20 20 20 69 66 28 20 63 3e 3d 30 78 32 30       if( c>=0x20
4b40: 20 26 26 20 63 3c 30 78 37 66 20 29 7b 0a 20 20   && c<0x7f ){.  
4b50: 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20        zBuf[k++] 
4b60: 3d 20 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  = c;.      }else
4b70: 7b 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b  {.        zBuf[k
4b80: 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20  ++] = '.';.     
4b90: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a 42 75   }.    }.    zBu
4ba0: 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20  f[k++] = ']';.  
4bb0: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
4bc0: 74 66 28 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c  tf(100,&zBuf[k],
4bd0: 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e   encnames[pMem->
4be0: 65 6e 63 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20  enc]);.    k += 
4bf0: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
4c00: 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a  &zBuf[k]);.    z
4c10: 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20  Buf[k++] = 0;.  
4c20: 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  }.}.#endif..#ifd
4c30: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
4c40: 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20  /*.** Print the 
4c50: 76 61 6c 75 65 20 6f 66 20 61 20 72 65 67 69 73  value of a regis
4c60: 74 65 72 20 66 6f 72 20 74 72 61 63 69 6e 67 20  ter for tracing 
4c70: 70 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61  purposes:.*/.sta
4c80: 74 69 63 20 76 6f 69 64 20 6d 65 6d 54 72 61 63  tic void memTrac
4c90: 65 50 72 69 6e 74 28 4d 65 6d 20 2a 70 29 7b 0a  ePrint(Mem *p){.
4ca0: 20 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26    if( p->flags &
4cb0: 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 20 29   MEM_Undefined )
4cc0: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 75  {.    printf(" u
4cd0: 6e 64 65 66 69 6e 65 64 22 29 3b 0a 20 20 7d 65  ndefined");.  }e
4ce0: 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73  lse if( p->flags
4cf0: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
4d00: 20 20 20 70 72 69 6e 74 66 28 70 2d 3e 66 6c 61     printf(p->fla
4d10: 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 3f 20  gs & MEM_Zero ? 
4d20: 22 20 4e 55 4c 4c 2d 6e 6f 63 68 6e 67 22 20 3a  " NULL-nochng" :
4d30: 20 22 20 4e 55 4c 4c 22 29 3b 0a 20 20 7d 65 6c   " NULL");.  }el
4d40: 73 65 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  se if( (p->flags
4d50: 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
4d60: 53 74 72 29 29 3d 3d 28 4d 45 4d 5f 49 6e 74 7c  Str))==(MEM_Int|
4d70: 4d 45 4d 5f 53 74 72 29 20 29 7b 0a 20 20 20 20  MEM_Str) ){.    
4d80: 70 72 69 6e 74 66 28 22 20 73 69 3a 25 6c 6c 64  printf(" si:%lld
4d90: 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65  ", p->u.i);.  }e
4da0: 6c 73 65 20 69 66 28 20 28 70 2d 3e 66 6c 61 67  lse if( (p->flag
4db0: 73 20 26 20 28 4d 45 4d 5f 49 6e 74 52 65 61 6c  s & (MEM_IntReal
4dc0: 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 70 72 69  ))!=0 ){.    pri
4dd0: 6e 74 66 28 22 20 69 72 3a 25 6c 6c 64 22 2c 20  ntf(" ir:%lld", 
4de0: 70 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65 6c 73 65  p->u.i);.  }else
4df0: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
4e00: 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 70  MEM_Int ){.    p
4e10: 72 69 6e 74 66 28 22 20 69 3a 25 6c 6c 64 22 2c  rintf(" i:%lld",
4e20: 20 70 2d 3e 75 2e 69 29 3b 0a 23 69 66 6e 64 65   p->u.i);.#ifnde
4e30: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
4e40: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 7d  OATING_POINT.  }
4e50: 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67  else if( p->flag
4e60: 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a  s & MEM_Real ){.
4e70: 20 20 20 20 70 72 69 6e 74 66 28 22 20 72 3a 25      printf(" r:%
4e80: 2e 31 37 67 22 2c 20 70 2d 3e 75 2e 72 29 3b 0a  .17g", p->u.r);.
4e90: 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73 65 20 69  #endif.  }else i
4ea0: 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
4eb0: 6d 49 73 52 6f 77 53 65 74 28 70 29 20 29 7b 0a  mIsRowSet(p) ){.
4ec0: 20 20 20 20 70 72 69 6e 74 66 28 22 20 28 72 6f      printf(" (ro
4ed0: 77 73 65 74 29 22 29 3b 0a 20 20 7d 65 6c 73 65  wset)");.  }else
4ee0: 7b 0a 20 20 20 20 63 68 61 72 20 7a 42 75 66 5b  {.    char zBuf[
4ef0: 32 30 30 5d 3b 0a 20 20 20 20 73 71 6c 69 74 65  200];.    sqlite
4f00: 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72  3VdbeMemPrettyPr
4f10: 69 6e 74 28 70 2c 20 7a 42 75 66 29 3b 0a 20 20  int(p, zBuf);.  
4f20: 20 20 70 72 69 6e 74 66 28 22 20 25 73 22 2c 20    printf(" %s", 
4f30: 7a 42 75 66 29 3b 0a 20 20 7d 0a 20 20 69 66 28  zBuf);.  }.  if(
4f40: 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f   p->flags & MEM_
4f50: 53 75 62 74 79 70 65 20 29 20 70 72 69 6e 74 66  Subtype ) printf
4f60: 28 22 20 73 75 62 74 79 70 65 3d 30 78 25 30 32  (" subtype=0x%02
4f70: 78 22 2c 20 70 2d 3e 65 53 75 62 74 79 70 65 29  x", p->eSubtype)
4f80: 3b 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20  ;.}.static void 
4f90: 72 65 67 69 73 74 65 72 54 72 61 63 65 28 69 6e  registerTrace(in
4fa0: 74 20 69 52 65 67 2c 20 4d 65 6d 20 2a 70 29 7b  t iReg, Mem *p){
4fb0: 0a 20 20 70 72 69 6e 74 66 28 22 52 45 47 5b 25  .  printf("REG[%
4fc0: 64 5d 20 3d 20 22 2c 20 69 52 65 67 29 3b 0a 20  d] = ", iReg);. 
4fd0: 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28 70   memTracePrint(p
4fe0: 29 3b 0a 20 20 70 72 69 6e 74 66 28 22 5c 6e 22  );.  printf("\n"
4ff0: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
5000: 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e  CheckMemInvarian
5010: 74 73 28 70 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a  ts(p);.}.#endif.
5020: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
5030: 45 42 55 47 0a 23 20 20 64 65 66 69 6e 65 20 52  EBUG.#  define R
5040: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c  EGISTER_TRACE(R,
5050: 4d 29 20 69 66 28 64 62 2d 3e 66 6c 61 67 73 26  M) if(db->flags&
5060: 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65  SQLITE_VdbeTrace
5070: 29 72 65 67 69 73 74 65 72 54 72 61 63 65 28 52  )registerTrace(R
5080: 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66  ,M).#else.#  def
5090: 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52 41  ine REGISTER_TRA
50a0: 43 45 28 52 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a  CE(R,M).#endif..
50b0: 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
50c0: 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77 74  FILE../* .** hwt
50d0: 69 6d 65 2e 68 20 63 6f 6e 74 61 69 6e 73 20 69  ime.h contains i
50e0: 6e 6c 69 6e 65 20 61 73 73 65 6d 62 6c 65 72 20  nline assembler 
50f0: 63 6f 64 65 20 66 6f 72 20 69 6d 70 6c 65 6d 65  code for impleme
5100: 6e 74 69 6e 67 20 0a 2a 2a 20 68 69 67 68 2d 70  nting .** high-p
5110: 65 72 66 6f 72 6d 61 6e 63 65 20 74 69 6d 69 6e  erformance timin
5120: 67 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 23  g routines..*/.#
5130: 69 6e 63 6c 75 64 65 20 22 68 77 74 69 6d 65 2e  include "hwtime.
5140: 68 22 0a 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  h"..#endif..#ifn
5150: 64 65 66 20 4e 44 45 42 55 47 0a 2f 2a 0a 2a 2a  def NDEBUG./*.**
5160: 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69   This function i
5170: 73 20 6f 6e 6c 79 20 63 61 6c 6c 65 64 20 66 72  s only called fr
5180: 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20 61 73 73  om within an ass
5190: 65 72 74 28 29 20 65 78 70 72 65 73 73 69 6f 6e  ert() expression
51a0: 2e 20 49 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74  . It.** checks t
51b0: 68 61 74 20 74 68 65 20 73 71 6c 69 74 65 33 2e  hat the sqlite3.
51c0: 6e 54 72 61 6e 73 61 63 74 69 6f 6e 20 76 61 72  nTransaction var
51d0: 69 61 62 6c 65 20 69 73 20 63 6f 72 72 65 63 74  iable is correct
51e0: 6c 79 20 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65  ly set to.** the
51f0: 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74   number of non-t
5200: 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70  ransaction savep
5210: 6f 69 6e 74 73 20 63 75 72 72 65 6e 74 6c 79 20  oints currently 
5220: 69 6e 20 74 68 65 20 0a 2a 2a 20 6c 69 6e 6b 65  in the .** linke
5230: 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20  d list starting 
5240: 61 74 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65  at sqlite3.pSave
5250: 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20 55 73  point..** .** Us
5260: 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61  age:.**.**     a
5270: 73 73 65 72 74 28 20 63 68 65 63 6b 53 61 76 65  ssert( checkSave
5280: 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29  pointCount(db) )
5290: 3b 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ;.*/.static int 
52a0: 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f  checkSavepointCo
52b0: 75 6e 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29  unt(sqlite3 *db)
52c0: 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 30 3b 0a 20  {.  int n = 0;. 
52d0: 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 3b 0a 20   Savepoint *p;. 
52e0: 20 66 6f 72 28 70 3d 64 62 2d 3e 70 53 61 76 65   for(p=db->pSave
52f0: 70 6f 69 6e 74 3b 20 70 3b 20 70 3d 70 2d 3e 70  point; p; p=p->p
5300: 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20 20 61 73 73  Next) n++;.  ass
5310: 65 72 74 28 20 6e 3d 3d 28 64 62 2d 3e 6e 53 61  ert( n==(db->nSa
5320: 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 69 73  vepoint + db->is
5330: 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
5340: 6f 69 6e 74 29 20 29 3b 0a 20 20 72 65 74 75 72  oint) );.  retur
5350: 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  n 1;.}.#endif../
5360: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
5370: 72 65 67 69 73 74 65 72 20 6f 66 20 70 4f 70 2d  register of pOp-
5380: 3e 70 32 20 61 66 74 65 72 20 66 69 72 73 74 20  >p2 after first 
5390: 70 72 65 70 61 72 69 6e 67 20 69 74 20 74 6f 20  preparing it to 
53a0: 62 65 0a 2a 2a 20 6f 76 65 72 77 72 69 74 74 65  be.** overwritte
53b0: 6e 20 77 69 74 68 20 61 6e 20 69 6e 74 65 67 65  n with an intege
53c0: 72 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74  r value..*/.stat
53d0: 69 63 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49  ic SQLITE_NOINLI
53e0: 4e 45 20 4d 65 6d 20 2a 6f 75 74 32 50 72 65 72  NE Mem *out2Prer
53f0: 65 6c 65 61 73 65 57 69 74 68 43 6c 65 61 72 28  eleaseWithClear(
5400: 4d 65 6d 20 2a 70 4f 75 74 29 7b 0a 20 20 73 71  Mem *pOut){.  sq
5410: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
5420: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 70 4f 75  ull(pOut);.  pOu
5430: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  t->flags = MEM_I
5440: 6e 74 3b 0a 20 20 72 65 74 75 72 6e 20 70 4f 75  nt;.  return pOu
5450: 74 3b 0a 7d 0a 73 74 61 74 69 63 20 4d 65 6d 20  t;.}.static Mem 
5460: 2a 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28  *out2Prerelease(
5470: 56 64 62 65 20 2a 70 2c 20 56 64 62 65 4f 70 20  Vdbe *p, VdbeOp 
5480: 2a 70 4f 70 29 7b 0a 20 20 4d 65 6d 20 2a 70 4f  *pOp){.  Mem *pO
5490: 75 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  ut;.  assert( pO
54a0: 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 61 73 73  p->p2>0 );.  ass
54b0: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70  ert( pOp->p2<=(p
54c0: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
54d0: 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74  ursor) );.  pOut
54e0: 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
54f0: 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p2];.  memAbout
5500: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
5510: 29 3b 0a 20 20 69 66 28 20 56 64 62 65 4d 65 6d  );.  if( VdbeMem
5520: 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 20 29 7b  Dynamic(pOut) ){
5530: 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d   /*OPTIMIZATION-
5540: 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20 72  IF-FALSE*/.    r
5550: 65 74 75 72 6e 20 6f 75 74 32 50 72 65 72 65 6c  eturn out2Prerel
5560: 65 61 73 65 57 69 74 68 43 6c 65 61 72 28 70 4f  easeWithClear(pO
5570: 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ut);.  }else{.  
5580: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
5590: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 72 65 74  MEM_Int;.    ret
55a0: 75 72 6e 20 70 4f 75 74 3b 0a 20 20 7d 0a 7d 0a  urn pOut;.  }.}.
55b0: 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20  ../*.** Execute 
55c0: 61 73 20 6d 75 63 68 20 6f 66 20 61 20 56 44 42  as much of a VDB
55d0: 45 20 70 72 6f 67 72 61 6d 20 61 73 20 77 65 20  E program as we 
55e0: 63 61 6e 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20  can..** This is 
55f0: 74 68 65 20 63 6f 72 65 20 6f 66 20 73 71 6c 69  the core of sqli
5600: 74 65 33 5f 73 74 65 70 28 29 2e 20 20 0a 2a 2f  te3_step().  .*/
5610: 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65  .int sqlite3Vdbe
5620: 45 78 65 63 28 0a 20 20 56 64 62 65 20 2a 70 20  Exec(.  Vdbe *p 
5630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5640: 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 2a     /* The VDBE *
5650: 2f 0a 29 7b 0a 20 20 4f 70 20 2a 61 4f 70 20 3d  /.){.  Op *aOp =
5660: 20 70 2d 3e 61 4f 70 3b 20 20 20 20 20 20 20 20   p->aOp;        
5670: 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e    /* Copy of p->
5680: 61 4f 70 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70  aOp */.  Op *pOp
5690: 20 3d 20 61 4f 70 3b 20 20 20 20 20 20 20 20 20   = aOp;         
56a0: 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f      /* Current o
56b0: 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 20  peration */.#if 
56c0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
56d0: 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
56e0: 28 56 44 42 45 5f 50 52 4f 46 49 4c 45 29 0a 20  (VDBE_PROFILE). 
56f0: 20 4f 70 20 2a 70 4f 72 69 67 4f 70 3b 20 20 20   Op *pOrigOp;   
5700: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
5710: 61 6c 75 65 20 6f 66 20 70 4f 70 20 61 74 20 74  alue of pOp at t
5720: 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20 6c 6f  he top of the lo
5730: 6f 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  op */.#endif.#if
5740: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
5750: 0a 20 20 69 6e 74 20 6e 45 78 74 72 61 44 65 6c  .  int nExtraDel
5760: 65 74 65 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a  ete = 0;      /*
5770: 20 56 65 72 69 66 69 65 73 20 46 4f 52 44 45 4c   Verifies FORDEL
5780: 45 54 45 20 61 6e 64 20 41 55 58 44 45 4c 45 54  ETE and AUXDELET
5790: 45 20 66 6c 61 67 73 20 2a 2f 0a 23 65 6e 64 69  E flags */.#endi
57a0: 66 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c  f.  int rc = SQL
57b0: 49 54 45 5f 4f 4b 3b 20 20 20 20 20 20 20 20 2f  ITE_OK;        /
57c0: 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72  * Value to retur
57d0: 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  n */.  sqlite3 *
57e0: 64 62 20 3d 20 70 2d 3e 64 62 3b 20 20 20 20 20  db = p->db;     
57f0: 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
5800: 65 20 2a 2f 0a 20 20 75 38 20 72 65 73 65 74 53  e */.  u8 resetS
5810: 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 30  chemaOnFault = 0
5820: 3b 20 2f 2a 20 52 65 73 65 74 20 73 63 68 65 6d  ; /* Reset schem
5830: 61 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72  a after an error
5840: 20 69 66 20 70 6f 73 69 74 69 76 65 20 2a 2f 0a   if positive */.
5850: 20 20 75 38 20 65 6e 63 6f 64 69 6e 67 20 3d 20    u8 encoding = 
5860: 45 4e 43 28 64 62 29 3b 20 20 20 20 20 2f 2a 20  ENC(db);     /* 
5870: 54 68 65 20 64 61 74 61 62 61 73 65 20 65 6e 63  The database enc
5880: 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69  oding */.  int i
5890: 43 6f 6d 70 61 72 65 20 3d 20 30 3b 20 20 20 20  Compare = 0;    
58a0: 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20        /* Result 
58b0: 6f 66 20 6c 61 73 74 20 63 6f 6d 70 61 72 69 73  of last comparis
58c0: 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  on */.  unsigned
58d0: 20 6e 56 6d 53 74 65 70 20 3d 20 30 3b 20 20 20   nVmStep = 0;   
58e0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
58f0: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20  virtual machine 
5900: 73 74 65 70 73 20 2a 2f 0a 23 69 66 6e 64 65 66  steps */.#ifndef
5910: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
5920: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
5930: 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72   unsigned nProgr
5940: 65 73 73 4c 69 6d 69 74 3b 20 20 20 2f 2a 20 49  essLimit;   /* I
5950: 6e 76 6f 6b 65 20 78 50 72 6f 67 72 65 73 73 28  nvoke xProgress(
5960: 29 20 77 68 65 6e 20 6e 56 6d 53 74 65 70 20 72  ) when nVmStep r
5970: 65 61 63 68 65 73 20 74 68 69 73 20 2a 2f 0a 23  eaches this */.#
5980: 65 6e 64 69 66 0a 20 20 4d 65 6d 20 2a 61 4d 65  endif.  Mem *aMe
5990: 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20 20 20 20  m = p->aMem;    
59a0: 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d     /* Copy of p-
59b0: 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a  >aMem */.  Mem *
59c0: 70 49 6e 31 20 3d 20 30 3b 20 20 20 20 20 20 20  pIn1 = 0;       
59d0: 20 20 20 20 20 20 2f 2a 20 31 73 74 20 69 6e 70        /* 1st inp
59e0: 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ut operand */.  
59f0: 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30 3b 20 20  Mem *pIn2 = 0;  
5a00: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 6e             /* 2n
5a10: 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20  d input operand 
5a20: 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 33 20 3d  */.  Mem *pIn3 =
5a30: 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   0;             
5a40: 2f 2a 20 33 72 64 20 69 6e 70 75 74 20 6f 70 65  /* 3rd input ope
5a50: 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  rand */.  Mem *p
5a60: 4f 75 74 20 3d 20 30 3b 20 20 20 20 20 20 20 20  Out = 0;        
5a70: 20 20 20 20 20 2f 2a 20 4f 75 74 70 75 74 20 6f       /* Output o
5a80: 70 65 72 61 6e 64 20 2a 2f 0a 23 69 66 64 65 66  perand */.#ifdef
5a90: 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20   VDBE_PROFILE.  
5aa0: 75 36 34 20 73 74 61 72 74 3b 20 20 20 20 20 20  u64 start;      
5ab0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 50             /* CP
5ac0: 55 20 63 6c 6f 63 6b 20 63 6f 75 6e 74 20 61 74  U clock count at
5ad0: 20 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65   start of opcode
5ae0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 2f 2a 2a   */.#endif.  /**
5af0: 2a 20 49 4e 53 45 52 54 20 53 54 41 43 4b 20 55  * INSERT STACK U
5b00: 4e 49 4f 4e 20 48 45 52 45 20 2a 2a 2a 2f 0a 0a  NION HERE ***/..
5b10: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6d 61 67    assert( p->mag
5b20: 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52  ic==VDBE_MAGIC_R
5b30: 55 4e 20 29 3b 20 20 2f 2a 20 73 71 6c 69 74 65  UN );  /* sqlite
5b40: 33 5f 73 74 65 70 28 29 20 76 65 72 69 66 69 65  3_step() verifie
5b50: 73 20 74 68 69 73 20 2a 2f 0a 20 20 73 71 6c 69  s this */.  sqli
5b60: 74 65 33 56 64 62 65 45 6e 74 65 72 28 70 29 3b  te3VdbeEnter(p);
5b70: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
5b80: 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41  OMIT_PROGRESS_CA
5b90: 4c 4c 42 41 43 4b 0a 20 20 69 66 28 20 64 62 2d  LLBACK.  if( db-
5ba0: 3e 78 50 72 6f 67 72 65 73 73 20 29 7b 0a 20 20  >xProgress ){.  
5bb0: 20 20 75 33 32 20 69 50 72 69 6f 72 20 3d 20 70    u32 iPrior = p
5bc0: 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54  ->aCounter[SQLIT
5bd0: 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 56 4d 5f  E_STMTSTATUS_VM_
5be0: 53 54 45 50 5d 3b 0a 20 20 20 20 61 73 73 65 72  STEP];.    asser
5bf0: 74 28 20 30 20 3c 20 64 62 2d 3e 6e 50 72 6f 67  t( 0 < db->nProg
5c00: 72 65 73 73 4f 70 73 20 29 3b 0a 20 20 20 20 6e  ressOps );.    n
5c10: 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20  ProgressLimit = 
5c20: 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73  db->nProgressOps
5c30: 20 2d 20 28 69 50 72 69 6f 72 20 25 20 64 62 2d   - (iPrior % db-
5c40: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a  >nProgressOps);.
5c50: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 50 72    }else{.    nPr
5c60: 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 30 78  ogressLimit = 0x
5c70: 66 66 66 66 66 66 66 66 3b 0a 20 20 7d 0a 23 65  ffffffff;.  }.#e
5c80: 6e 64 69 66 0a 20 20 69 66 28 20 70 2d 3e 72 63  ndif.  if( p->rc
5c90: 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29  ==SQLITE_NOMEM )
5ca0: 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61  {.    /* This ha
5cb0: 70 70 65 6e 73 20 69 66 20 61 20 6d 61 6c 6c 6f  ppens if a mallo
5cc0: 63 28 29 20 69 6e 73 69 64 65 20 61 20 63 61 6c  c() inside a cal
5cd0: 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 6f 6c  l to sqlite3_col
5ce0: 75 6d 6e 5f 74 65 78 74 28 29 20 6f 72 0a 20 20  umn_text() or.  
5cf0: 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c    ** sqlite3_col
5d00: 75 6d 6e 5f 74 65 78 74 31 36 28 29 20 66 61 69  umn_text16() fai
5d10: 6c 65 64 2e 20 20 2a 2f 0a 20 20 20 20 67 6f 74  led.  */.    got
5d20: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
5d30: 61 73 73 65 72 74 28 20 70 2d 3e 72 63 3d 3d 53  assert( p->rc==S
5d40: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e  QLITE_OK || (p->
5d50: 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45  rc&0xff)==SQLITE
5d60: 5f 42 55 53 59 0a 20 20 20 20 20 20 20 20 20 20  _BUSY.          
5d70: 20 20 7c 7c 20 28 70 2d 3e 72 63 26 30 78 46 46    || (p->rc&0xFF
5d80: 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  )==SQLITE_LOCKED
5d90: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
5da0: 3e 62 49 73 52 65 61 64 65 72 20 7c 7c 20 70 2d  >bIsReader || p-
5db0: 3e 72 65 61 64 4f 6e 6c 79 21 3d 30 20 29 3b 0a  >readOnly!=0 );.
5dc0: 20 20 70 2d 3e 69 43 75 72 72 65 6e 74 54 69 6d    p->iCurrentTim
5dd0: 65 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  e = 0;.  assert(
5de0: 20 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d 30 20 29   p->explain==0 )
5df0: 3b 0a 20 20 70 2d 3e 70 52 65 73 75 6c 74 53 65  ;.  p->pResultSe
5e00: 74 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73  t = 0;.  db->bus
5e10: 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d  yHandler.nBusy =
5e20: 20 30 3b 0a 20 20 69 66 28 20 64 62 2d 3e 75 31   0;.  if( db->u1
5e30: 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29  .isInterrupted )
5e40: 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
5e50: 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20 20  to_interrupt;.  
5e60: 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61  sqlite3VdbeIOTra
5e70: 63 65 53 71 6c 28 70 29 3b 0a 23 69 66 64 65 66  ceSql(p);.#ifdef
5e80: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
5e90: 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69  sqlite3BeginBeni
5ea0: 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 69 66  gnMalloc();.  if
5eb0: 28 20 70 2d 3e 70 63 3d 3d 30 0a 20 20 20 26 26  ( p->pc==0.   &&
5ec0: 20 28 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26   (p->db->flags &
5ed0: 20 28 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73   (SQLITE_VdbeLis
5ee0: 74 69 6e 67 7c 53 51 4c 49 54 45 5f 56 64 62 65  ting|SQLITE_Vdbe
5ef0: 45 51 50 7c 53 51 4c 49 54 45 5f 56 64 62 65 54  EQP|SQLITE_VdbeT
5f00: 72 61 63 65 29 29 21 3d 30 0a 20 20 29 7b 0a 20  race))!=0.  ){. 
5f10: 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 69 6e     int i;.    in
5f20: 74 20 6f 6e 63 65 20 3d 20 31 3b 0a 20 20 20 20  t once = 1;.    
5f30: 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74  sqlite3VdbePrint
5f40: 53 71 6c 28 70 29 3b 0a 20 20 20 20 69 66 28 20  Sql(p);.    if( 
5f50: 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  p->db->flags & S
5f60: 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e  QLITE_VdbeListin
5f70: 67 20 29 7b 0a 20 20 20 20 20 20 70 72 69 6e 74  g ){.      print
5f80: 66 28 22 56 44 42 45 20 50 72 6f 67 72 61 6d 20  f("VDBE Program 
5f90: 4c 69 73 74 69 6e 67 3a 5c 6e 22 29 3b 0a 20 20  Listing:\n");.  
5fa0: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70      for(i=0; i<p
5fb0: 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20  ->nOp; i++){.   
5fc0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
5fd0: 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20  PrintOp(stdout, 
5fe0: 69 2c 20 26 61 4f 70 5b 69 5d 29 3b 0a 20 20 20  i, &aOp[i]);.   
5ff0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69     }.    }.    i
6000: 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20  f( p->db->flags 
6010: 26 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50  & SQLITE_VdbeEQP
6020: 20 29 7b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d   ){.      for(i=
6030: 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b  0; i<p->nOp; i++
6040: 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 61  ){.        if( a
6050: 4f 70 5b 69 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50  Op[i].opcode==OP
6060: 5f 45 78 70 6c 61 69 6e 20 29 7b 0a 20 20 20 20  _Explain ){.    
6070: 20 20 20 20 20 20 69 66 28 20 6f 6e 63 65 20 29        if( once )
6080: 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 51 75   printf("VDBE Qu
6090: 65 72 79 20 50 6c 61 6e 3a 5c 6e 22 29 3b 0a 20  ery Plan:\n");. 
60a0: 20 20 20 20 20 20 20 20 20 70 72 69 6e 74 66 28           printf(
60b0: 22 25 73 5c 6e 22 2c 20 61 4f 70 5b 69 5d 2e 70  "%s\n", aOp[i].p
60c0: 34 2e 7a 29 3b 0a 20 20 20 20 20 20 20 20 20 20  4.z);.          
60d0: 6f 6e 63 65 20 3d 20 30 3b 0a 20 20 20 20 20 20  once = 0;.      
60e0: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
60f0: 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d  }.    if( p->db-
6100: 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
6110: 56 64 62 65 54 72 61 63 65 20 29 20 20 70 72 69  VdbeTrace )  pri
6120: 6e 74 66 28 22 56 44 42 45 20 54 72 61 63 65 3a  ntf("VDBE Trace:
6130: 5c 6e 22 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  \n");.  }.  sqli
6140: 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c  te3EndBenignMall
6150: 6f 63 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 66  oc();.#endif.  f
6160: 6f 72 28 70 4f 70 3d 26 61 4f 70 5b 70 2d 3e 70  or(pOp=&aOp[p->p
6170: 63 5d 3b 20 31 3b 20 70 4f 70 2b 2b 29 7b 0a 20  c]; 1; pOp++){. 
6180: 20 20 20 2f 2a 20 45 72 72 6f 72 73 20 61 72 65     /* Errors are
6190: 20 64 65 74 65 63 74 65 64 20 62 79 20 69 6e 64   detected by ind
61a0: 69 76 69 64 75 61 6c 20 6f 70 63 6f 64 65 73 2c  ividual opcodes,
61b0: 20 77 69 74 68 20 61 6e 20 69 6d 6d 65 64 69 61   with an immedia
61c0: 74 65 0a 20 20 20 20 2a 2a 20 6a 75 6d 70 73 20  te.    ** jumps 
61d0: 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
61e0: 65 72 72 6f 72 2e 20 2a 2f 0a 20 20 20 20 61 73  error. */.    as
61f0: 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
6200: 5f 4f 4b 20 29 3b 0a 0a 20 20 20 20 61 73 73 65  _OK );..    asse
6210: 72 74 28 20 70 4f 70 3e 3d 61 4f 70 20 26 26 20  rt( pOp>=aOp && 
6220: 70 4f 70 3c 26 61 4f 70 5b 70 2d 3e 6e 4f 70 5d  pOp<&aOp[p->nOp]
6230: 29 3b 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  );.#ifdef VDBE_P
6240: 52 4f 46 49 4c 45 0a 20 20 20 20 73 74 61 72 74  ROFILE.    start
6250: 20 3d 20 73 71 6c 69 74 65 33 4e 50 72 6f 66 69   = sqlite3NProfi
6260: 6c 65 43 6e 74 20 3f 20 73 71 6c 69 74 65 33 4e  leCnt ? sqlite3N
6270: 50 72 6f 66 69 6c 65 43 6e 74 20 3a 20 73 71 6c  ProfileCnt : sql
6280: 69 74 65 33 48 77 74 69 6d 65 28 29 3b 0a 23 65  ite3Hwtime();.#e
6290: 6e 64 69 66 0a 20 20 20 20 6e 56 6d 53 74 65 70  ndif.    nVmStep
62a0: 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  ++;.#ifdef SQLIT
62b0: 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43  E_ENABLE_STMT_SC
62c0: 41 4e 53 54 41 54 55 53 0a 20 20 20 20 69 66 28  ANSTATUS.    if(
62d0: 20 70 2d 3e 61 6e 45 78 65 63 20 29 20 70 2d 3e   p->anExec ) p->
62e0: 61 6e 45 78 65 63 5b 28 69 6e 74 29 28 70 4f 70  anExec[(int)(pOp
62f0: 2d 61 4f 70 29 5d 2b 2b 3b 0a 23 65 6e 64 69 66  -aOp)]++;.#endif
6300: 0a 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c  ..    /* Only al
6310: 6c 6f 77 20 74 72 61 63 69 6e 67 20 69 66 20 53  low tracing if S
6320: 51 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20 64  QLITE_DEBUG is d
6330: 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23  efined..    */.#
6340: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
6350: 55 47 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 66  UG.    if( db->f
6360: 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64  lags & SQLITE_Vd
6370: 62 65 54 72 61 63 65 20 29 7b 0a 20 20 20 20 20  beTrace ){.     
6380: 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e   sqlite3VdbePrin
6390: 74 4f 70 28 73 74 64 6f 75 74 2c 20 28 69 6e 74  tOp(stdout, (int
63a0: 29 28 70 4f 70 20 2d 20 61 4f 70 29 2c 20 70 4f  )(pOp - aOp), pO
63b0: 70 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  p);.    }.#endif
63c0: 0a 20 20 20 20 20 20 0a 0a 20 20 20 20 2f 2a 20  .      ..    /* 
63d0: 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20  Check to see if 
63e0: 77 65 20 6e 65 65 64 20 74 6f 20 73 69 6d 75 6c  we need to simul
63f0: 61 74 65 20 61 6e 20 69 6e 74 65 72 72 75 70 74  ate an interrupt
6400: 2e 20 20 54 68 69 73 20 6f 6e 6c 79 20 68 61 70  .  This only hap
6410: 70 65 6e 73 0a 20 20 20 20 2a 2a 20 69 66 20 77  pens.    ** if w
6420: 65 20 68 61 76 65 20 61 20 73 70 65 63 69 61 6c  e have a special
6430: 20 74 65 73 74 20 62 75 69 6c 64 2e 0a 20 20 20   test build..   
6440: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
6450: 45 5f 54 45 53 54 0a 20 20 20 20 69 66 28 20 73  E_TEST.    if( s
6460: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
6470: 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a 20 20 20 20  _count>0 ){.    
6480: 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72    sqlite3_interr
6490: 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20  upt_count--;.   
64a0: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69     if( sqlite3_i
64b0: 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3d 3d  nterrupt_count==
64c0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  0 ){.        sql
64d0: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 64  ite3_interrupt(d
64e0: 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  b);.      }.    
64f0: 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a  }.#endif..    /*
6500: 20 53 61 6e 69 74 79 20 63 68 65 63 6b 69 6e 67   Sanity checking
6510: 20 6f 6e 20 6f 74 68 65 72 20 6f 70 65 72 61 6e   on other operan
6520: 64 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  ds */.#ifdef SQL
6530: 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 7b 0a  ITE_DEBUG.    {.
6540: 20 20 20 20 20 20 75 38 20 6f 70 50 72 6f 70 65        u8 opPrope
6550: 72 74 79 20 3d 20 73 71 6c 69 74 65 33 4f 70 63  rty = sqlite3Opc
6560: 6f 64 65 50 72 6f 70 65 72 74 79 5b 70 4f 70 2d  odeProperty[pOp-
6570: 3e 6f 70 63 6f 64 65 5d 3b 0a 20 20 20 20 20 20  >opcode];.      
6580: 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20  if( (opProperty 
6590: 26 20 4f 50 46 4c 47 5f 49 4e 31 29 21 3d 30 20  & OPFLG_IN1)!=0 
65a0: 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
65b0: 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a  t( pOp->p1>0 );.
65c0: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
65d0: 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p1<=(p->nMe
65e0: 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
65f0: 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  ) );.        ass
6600: 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
6610: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20  &aMem[pOp->p1]) 
6620: 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
6630: 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  t( sqlite3VdbeCh
6640: 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73  eckMemInvariants
6650: 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29  (&aMem[pOp->p1])
6660: 20 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49   );.        REGI
6670: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
6680: 70 31 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  p1, &aMem[pOp->p
6690: 31 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  1]);.      }.   
66a0: 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72     if( (opProper
66b0: 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 32 29 21  ty & OPFLG_IN2)!
66c0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  =0 ){.        as
66d0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
66e0: 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
66f0: 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e  t( pOp->p2<=(p->
6700: 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
6710: 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20  sor) );.        
6720: 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
6730: 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  id(&aMem[pOp->p2
6740: 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  ]) );.        as
6750: 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64 62  sert( sqlite3Vdb
6760: 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61  eCheckMemInvaria
6770: 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  nts(&aMem[pOp->p
6780: 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20 52  2]) );.        R
6790: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
67a0: 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70  p->p2, &aMem[pOp
67b0: 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 20 20 7d 0a  ->p2]);.      }.
67c0: 20 20 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f        if( (opPro
67d0: 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e  perty & OPFLG_IN
67e0: 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  3)!=0 ){.       
67f0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
6800: 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  >0 );.        as
6810: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28  sert( pOp->p3<=(
6820: 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
6830: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20  Cursor) );.     
6840: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
6850: 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d  Valid(&aMem[pOp-
6860: 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 20  >p3]) );.       
6870: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
6880: 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61  VdbeCheckMemInva
6890: 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70  riants(&aMem[pOp
68a0: 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p3]) );.      
68b0: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
68c0: 28 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b  (pOp->p3, &aMem[
68d0: 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20  pOp->p3]);.     
68e0: 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 6f 70   }.      if( (op
68f0: 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47  Property & OPFLG
6900: 5f 4f 55 54 32 29 21 3d 30 20 29 7b 0a 20 20 20  _OUT2)!=0 ){.   
6910: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
6920: 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p2>0 );.      
6930: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
6940: 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  2<=(p->nMem+1 - 
6950: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
6960: 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54         memAboutT
6970: 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d  oChange(p, &aMem
6980: 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20  [pOp->p2]);.    
6990: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 6f    }.      if( (o
69a0: 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c  pProperty & OPFL
69b0: 47 5f 4f 55 54 33 29 21 3d 30 20 29 7b 0a 20 20  G_OUT3)!=0 ){.  
69c0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
69d0: 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20  p->p3>0 );.     
69e0: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
69f0: 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p3<=(p->nMem+1 -
6a00: 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
6a10: 20 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74          memAbout
6a20: 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65  ToChange(p, &aMe
6a30: 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20  m[pOp->p3]);.   
6a40: 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69     }.    }.#endi
6a50: 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
6a60: 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64  LITE_DEBUG) || d
6a70: 65 66 69 6e 65 64 28 56 44 42 45 5f 50 52 4f 46  efined(VDBE_PROF
6a80: 49 4c 45 29 0a 20 20 20 20 70 4f 72 69 67 4f 70  ILE).    pOrigOp
6a90: 20 3d 20 70 4f 70 3b 0a 23 65 6e 64 69 66 0a 20   = pOp;.#endif. 
6aa0: 20 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f   .    switch( pO
6ab0: 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a  p->opcode ){../*
6ac0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6ad0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6ae0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6af0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6b00: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20  ************.** 
6b10: 57 68 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20  What follows is 
6b20: 61 20 6d 61 73 73 69 76 65 20 73 77 69 74 63 68  a massive switch
6b30: 20 73 74 61 74 65 6d 65 6e 74 20 77 68 65 72 65   statement where
6b40: 20 65 61 63 68 20 63 61 73 65 20 69 6d 70 6c 65   each case imple
6b50: 6d 65 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61 72  ments a.** separ
6b60: 61 74 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ate instruction 
6b70: 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d  in the virtual m
6b80: 61 63 68 69 6e 65 2e 20 20 49 66 20 77 65 20 66  achine.  If we f
6b90: 6f 6c 6c 6f 77 20 74 68 65 20 75 73 75 61 6c 0a  ollow the usual.
6ba0: 2a 2a 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63  ** indentation c
6bb0: 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68  onventions, each
6bc0: 20 63 61 73 65 20 73 68 6f 75 6c 64 20 62 65 20   case should be 
6bd0: 69 6e 64 65 6e 74 65 64 20 62 79 20 36 20 73 70  indented by 6 sp
6be0: 61 63 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68  aces.  But.** th
6bf0: 61 74 20 69 73 20 61 20 6c 6f 74 20 6f 66 20 77  at is a lot of w
6c00: 61 73 74 65 64 20 73 70 61 63 65 20 6f 6e 20 74  asted space on t
6c10: 68 65 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20  he left margin. 
6c20: 20 53 6f 20 74 68 65 20 63 6f 64 65 20 77 69 74   So the code wit
6c30: 68 69 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74 63  hin.** the switc
6c40: 68 20 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c  h statement will
6c50: 20 62 72 65 61 6b 20 77 69 74 68 20 63 6f 6e 76   break with conv
6c60: 65 6e 74 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c  ention and be fl
6c70: 75 73 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65  ush-left. Anothe
6c80: 72 0a 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74  r.** big comment
6c90: 20 28 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69   (similar to thi
6ca0: 73 20 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b  s one) will mark
6cb0: 20 74 68 65 20 70 6f 69 6e 74 20 69 6e 20 74 68   the point in th
6cc0: 65 20 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20  e code where.** 
6cd0: 77 65 20 74 72 61 6e 73 69 74 69 6f 6e 20 62 61  we transition ba
6ce0: 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64  ck to normal ind
6cf0: 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  entation..**.** 
6d00: 54 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f  The formatting o
6d10: 66 20 65 61 63 68 20 63 61 73 65 20 69 73 20 69  f each case is i
6d20: 6d 70 6f 72 74 61 6e 74 2e 20 20 54 68 65 20 6d  mportant.  The m
6d30: 61 6b 65 66 69 6c 65 20 66 6f 72 20 53 51 4c 69  akefile for SQLi
6d40: 74 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73 20  te.** generates 
6d50: 74 77 6f 20 43 20 66 69 6c 65 73 20 22 6f 70 63  two C files "opc
6d60: 6f 64 65 73 2e 68 22 20 61 6e 64 20 22 6f 70 63  odes.h" and "opc
6d70: 6f 64 65 73 2e 63 22 20 62 79 20 73 63 61 6e 6e  odes.c" by scann
6d80: 69 6e 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65  ing this.** file
6d90: 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e   looking for lin
6da0: 65 73 20 74 68 61 74 20 62 65 67 69 6e 20 77 69  es that begin wi
6db0: 74 68 20 22 63 61 73 65 20 4f 50 5f 22 2e 20 20  th "case OP_".  
6dc0: 54 68 65 20 6f 70 63 6f 64 65 73 2e 68 20 66 69  The opcodes.h fi
6dd0: 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66  les.** will be f
6de0: 69 6c 6c 65 64 20 77 69 74 68 20 23 64 65 66 69  illed with #defi
6df0: 6e 65 73 20 74 68 61 74 20 67 69 76 65 20 75 6e  nes that give un
6e00: 69 71 75 65 20 69 6e 74 65 67 65 72 20 76 61 6c  ique integer val
6e10: 75 65 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f  ues to each.** o
6e20: 70 63 6f 64 65 20 61 6e 64 20 74 68 65 20 6f 70  pcode and the op
6e30: 63 6f 64 65 73 2e 63 20 66 69 6c 65 20 69 73 20  codes.c file is 
6e40: 66 69 6c 6c 65 64 20 77 69 74 68 20 61 6e 20 61  filled with an a
6e50: 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20  rray of strings 
6e60: 77 68 65 72 65 0a 2a 2a 20 65 61 63 68 20 73 74  where.** each st
6e70: 72 69 6e 67 20 69 73 20 74 68 65 20 73 79 6d 62  ring is the symb
6e80: 6f 6c 69 63 20 6e 61 6d 65 20 66 6f 72 20 74 68  olic name for th
6e90: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
6ea0: 6f 70 63 6f 64 65 2e 20 20 49 66 20 74 68 65 0a  opcode.  If the.
6eb0: 2a 2a 20 63 61 73 65 20 73 74 61 74 65 6d 65 6e  ** case statemen
6ec0: 74 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79  t is followed by
6ed0: 20 61 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68   a comment of th
6ee0: 65 20 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20  e form "/# same 
6ef0: 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68  as ... #/".** th
6f00: 61 74 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73  at comment is us
6f10: 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  ed to determine 
6f20: 74 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 76  the particular v
6f30: 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f  alue of the opco
6f40: 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20  de..**.** Other 
6f50: 6b 65 79 77 6f 72 64 73 20 69 6e 20 74 68 65 20  keywords in the 
6f60: 63 6f 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c  comment that fol
6f70: 6c 6f 77 73 20 65 61 63 68 20 63 61 73 65 20 61  lows each case a
6f80: 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f  re used to.** co
6f90: 6e 73 74 72 75 63 74 20 74 68 65 20 4f 50 46 4c  nstruct the OPFL
6fa0: 47 5f 49 4e 49 54 49 41 4c 49 5a 45 52 20 76 61  G_INITIALIZER va
6fb0: 6c 75 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c  lue that initial
6fc0: 69 7a 65 73 20 6f 70 63 6f 64 65 50 72 6f 70 65  izes opcodePrope
6fd0: 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72  rty[]..** Keywor
6fe0: 64 73 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c  ds include: in1,
6ff0: 20 69 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32 2c   in2, in3, out2,
7000: 20 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20 74   out3.  See.** t
7010: 68 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77 6b  he mkopcodeh.awk
7020: 20 73 63 72 69 70 74 20 66 6f 72 20 61 64 64 69   script for addi
7030: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
7040: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65  on..**.** Docume
7050: 6e 74 61 74 69 6f 6e 20 61 62 6f 75 74 20 56 44  ntation about VD
7060: 42 45 20 6f 70 63 6f 64 65 73 20 69 73 20 67 65  BE opcodes is ge
7070: 6e 65 72 61 74 65 64 20 62 79 20 73 63 61 6e 6e  nerated by scann
7080: 69 6e 67 20 74 68 69 73 20 66 69 6c 65 0a 2a 2a  ing this file.**
7090: 20 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74 68   for lines of th
70a0: 61 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63 6f  at contain "Opco
70b0: 64 65 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e 65  de:".  That line
70c0: 20 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71 75   and all subsequ
70d0: 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c  ent.** comment l
70e0: 69 6e 65 73 20 61 72 65 20 75 73 65 64 20 69 6e  ines are used in
70f0: 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20   the generation 
7100: 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 68 74  of the opcode.ht
7110: 6d 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  ml documentation
7120: 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  .** file..**.** 
7130: 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20  SUMMARY:.**.**  
7140: 20 20 20 46 6f 72 6d 61 74 74 69 6e 67 20 69 73     Formatting is
7150: 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73 63   important to sc
7160: 72 69 70 74 73 20 74 68 61 74 20 73 63 61 6e 20  ripts that scan 
7170: 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20 20  this file..**   
7180: 20 20 44 6f 20 6e 6f 74 20 64 65 76 69 61 74 65    Do not deviate
7190: 20 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61 74   from the format
71a0: 74 69 6e 67 20 73 74 79 6c 65 20 63 75 72 72 65  ting style curre
71b0: 6e 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a  ntly in use..**.
71c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
71d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
71e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
71f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
7200: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
7210: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74 6f  /* Opcode:  Goto
7220: 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   * P2 * * *.**.*
7230: 2a 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e  * An uncondition
7240: 61 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65  al jump to addre
7250: 73 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e 65  ss P2..** The ne
7260: 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65  xt instruction e
7270: 78 65 63 75 74 65 64 20 77 69 6c 6c 20 62 65 20  xecuted will be 
7280: 0a 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74 20 69  .** the one at i
7290: 6e 64 65 78 20 50 32 20 66 72 6f 6d 20 74 68 65  ndex P2 from the
72a0: 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a   beginning of.**
72b0: 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a   the program..**
72c0: 0a 2a 2a 20 54 68 65 20 50 31 20 70 61 72 61 6d  .** The P1 param
72d0: 65 74 65 72 20 69 73 20 6e 6f 74 20 61 63 74 75  eter is not actu
72e0: 61 6c 6c 79 20 75 73 65 64 20 62 79 20 74 68 69  ally used by thi
72f0: 73 20 6f 70 63 6f 64 65 2e 20 20 48 6f 77 65 76  s opcode.  Howev
7300: 65 72 2c 20 69 74 0a 2a 2a 20 69 73 20 73 6f 6d  er, it.** is som
7310: 65 74 69 6d 65 73 20 73 65 74 20 74 6f 20 31 20  etimes set to 1 
7320: 69 6e 73 74 65 61 64 20 6f 66 20 30 20 61 73 20  instead of 0 as 
7330: 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63 6f  a hint to the co
7340: 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73 68 65 6c 6c  mmand-line shell
7350: 0a 2a 2a 20 74 68 61 74 20 74 68 69 73 20 47 6f  .** that this Go
7360: 74 6f 20 69 73 20 74 68 65 20 62 6f 74 74 6f 6d  to is the bottom
7370: 20 6f 66 20 61 20 6c 6f 6f 70 20 61 6e 64 20 74   of a loop and t
7380: 68 61 74 20 74 68 65 20 6c 69 6e 65 73 20 66 72  hat the lines fr
7390: 6f 6d 20 50 32 20 64 6f 77 6e 0a 2a 2a 20 74 6f  om P2 down.** to
73a0: 20 74 68 65 20 63 75 72 72 65 6e 74 20 6c 69 6e   the current lin
73b0: 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 64 65  e should be inde
73c0: 6e 74 65 64 20 66 6f 72 20 45 58 50 4c 41 49 4e  nted for EXPLAIN
73d0: 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65   output..*/.case
73e0: 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20 20 20 20 20   OP_Goto: {     
73f0: 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
7400: 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e  */.jump_to_p2_an
7410: 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  d_check_for_inte
7420: 72 72 75 70 74 3a 0a 20 20 70 4f 70 20 3d 20 26  rrupt:.  pOp = &
7430: 61 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d  aOp[pOp->p2 - 1]
7440: 3b 0a 0a 20 20 2f 2a 20 4f 70 63 6f 64 65 73 20  ;..  /* Opcodes 
7450: 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73  that are used as
7460: 20 74 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20 61   the bottom of a
7470: 20 6c 6f 6f 70 20 28 4f 50 5f 4e 65 78 74 2c 20   loop (OP_Next, 
7480: 4f 50 5f 50 72 65 76 2c 0a 20 20 2a 2a 20 4f 50  OP_Prev,.  ** OP
7490: 5f 56 4e 65 78 74 2c 20 6f 72 20 4f 50 5f 53 6f  _VNext, or OP_So
74a0: 72 74 65 72 4e 65 78 74 29 20 61 6c 6c 20 6a 75  rterNext) all ju
74b0: 6d 70 20 68 65 72 65 20 75 70 6f 6e 0a 20 20 2a  mp here upon.  *
74c0: 2a 20 63 6f 6d 70 6c 65 74 69 6f 6e 2e 20 20 43  * completion.  C
74d0: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 73  heck to see if s
74e0: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
74f0: 28 29 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c  () has been call
7500: 65 64 0a 20 20 2a 2a 20 6f 72 20 69 66 20 74 68  ed.  ** or if th
7510: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
7520: 61 63 6b 20 6e 65 65 64 73 20 74 6f 20 62 65 20  ack needs to be 
7530: 69 6e 76 6f 6b 65 64 2e 20 0a 20 20 2a 2a 0a 20  invoked. .  **. 
7540: 20 2a 2a 20 54 68 69 73 20 63 6f 64 65 20 75 73   ** This code us
7550: 65 73 20 75 6e 73 74 72 75 63 74 75 72 65 64 20  es unstructured 
7560: 22 67 6f 74 6f 22 20 73 74 61 74 65 6d 65 6e 74  "goto" statement
7570: 73 20 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 6c  s and does not l
7580: 6f 6f 6b 20 63 6c 65 61 6e 2e 0a 20 20 2a 2a 20  ook clean..  ** 
7590: 42 75 74 20 74 68 61 74 20 69 73 20 6e 6f 74 20  But that is not 
75a0: 64 75 65 20 74 6f 20 73 6c 6f 70 70 79 20 63 6f  due to sloppy co
75b0: 64 69 6e 67 20 68 61 62 69 74 73 2e 20 54 68 65  ding habits. The
75c0: 20 63 6f 64 65 20 69 73 20 77 72 69 74 74 65 6e   code is written
75d0: 20 74 68 69 73 0a 20 20 2a 2a 20 77 61 79 20 66   this.  ** way f
75e0: 6f 72 20 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20  or performance, 
75f0: 74 6f 20 61 76 6f 69 64 20 68 61 76 69 6e 67 20  to avoid having 
7600: 74 6f 20 72 75 6e 20 74 68 65 20 69 6e 74 65 72  to run the inter
7610: 72 75 70 74 20 61 6e 64 20 70 72 6f 67 72 65 73  rupt and progres
7620: 73 0a 20 20 2a 2a 20 63 68 65 63 6b 73 20 6f 6e  s.  ** checks on
7630: 20 65 76 65 72 79 20 6f 70 63 6f 64 65 2e 20 20   every opcode.  
7640: 54 68 69 73 20 68 65 6c 70 73 20 73 71 6c 69 74  This helps sqlit
7650: 65 33 5f 73 74 65 70 28 29 20 74 6f 20 72 75 6e  e3_step() to run
7660: 20 61 62 6f 75 74 20 31 2e 35 25 0a 20 20 2a 2a   about 1.5%.  **
7670: 20 66 61 73 74 65 72 20 61 63 63 6f 72 64 69 6e   faster accordin
7680: 67 20 74 6f 20 22 76 61 6c 67 72 69 6e 64 20 2d  g to "valgrind -
7690: 2d 74 6f 6f 6c 3d 63 61 63 68 65 67 72 69 6e 64  -tool=cachegrind
76a0: 22 20 2a 2f 0a 63 68 65 63 6b 5f 66 6f 72 5f 69  " */.check_for_i
76b0: 6e 74 65 72 72 75 70 74 3a 0a 20 20 69 66 28 20  nterrupt:.  if( 
76c0: 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75  db->u1.isInterru
76d0: 70 74 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72  pted ) goto abor
76e0: 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75  t_due_to_interru
76f0: 70 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  pt;.#ifndef SQLI
7700: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
7710: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20 43  _CALLBACK.  /* C
7720: 61 6c 6c 20 74 68 65 20 70 72 6f 67 72 65 73 73  all the progress
7730: 20 63 61 6c 6c 62 61 63 6b 20 69 66 20 69 74 20   callback if it 
7740: 69 73 20 63 6f 6e 66 69 67 75 72 65 64 20 61 6e  is configured an
7750: 64 20 74 68 65 20 72 65 71 75 69 72 65 64 20 6e  d the required n
7760: 75 6d 62 65 72 0a 20 20 2a 2a 20 6f 66 20 56 44  umber.  ** of VD
7770: 42 45 20 6f 70 73 20 68 61 76 65 20 62 65 65 6e  BE ops have been
7780: 20 65 78 65 63 75 74 65 64 20 28 65 69 74 68 65   executed (eithe
7790: 72 20 73 69 6e 63 65 20 74 68 69 73 20 69 6e 76  r since this inv
77a0: 6f 63 61 74 69 6f 6e 20 6f 66 0a 20 20 2a 2a 20  ocation of.  ** 
77b0: 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63 28  sqlite3VdbeExec(
77c0: 29 20 6f 72 20 73 69 6e 63 65 20 6c 61 73 74 20  ) or since last 
77d0: 74 69 6d 65 20 74 68 65 20 70 72 6f 67 72 65 73  time the progres
77e0: 73 20 63 61 6c 6c 62 61 63 6b 20 77 61 73 20 63  s callback was c
77f0: 61 6c 6c 65 64 29 2e 0a 20 20 2a 2a 20 49 66 20  alled)..  ** If 
7800: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
7810: 6c 62 61 63 6b 20 72 65 74 75 72 6e 73 20 6e 6f  lback returns no
7820: 6e 2d 7a 65 72 6f 2c 20 65 78 69 74 20 74 68 65  n-zero, exit the
7830: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
7840: 20 77 69 74 68 0a 20 20 2a 2a 20 61 20 72 65 74   with.  ** a ret
7850: 75 72 6e 20 63 6f 64 65 20 53 51 4c 49 54 45 5f  urn code SQLITE_
7860: 41 42 4f 52 54 2e 0a 20 20 2a 2f 0a 20 20 77 68  ABORT..  */.  wh
7870: 69 6c 65 28 20 6e 56 6d 53 74 65 70 3e 3d 6e 50  ile( nVmStep>=nP
7880: 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 26 26 20  rogressLimit && 
7890: 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d 30  db->xProgress!=0
78a0: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
78b0: 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73  db->nProgressOps
78c0: 21 3d 30 20 29 3b 0a 20 20 20 20 6e 50 72 6f 67  !=0 );.    nProg
78d0: 72 65 73 73 4c 69 6d 69 74 20 2b 3d 20 64 62 2d  ressLimit += db-
78e0: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 0a 20  >nProgressOps;. 
78f0: 20 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67     if( db->xProg
7900: 72 65 73 73 28 64 62 2d 3e 70 50 72 6f 67 72 65  ress(db->pProgre
7910: 73 73 41 72 67 29 20 29 7b 0a 20 20 20 20 20 20  ssArg) ){.      
7920: 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d  nProgressLimit =
7930: 20 30 78 66 66 66 66 66 66 66 66 3b 0a 20 20 20   0xffffffff;.   
7940: 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49     rc = SQLITE_I
7950: 4e 54 45 52 52 55 50 54 3b 0a 20 20 20 20 20 20  NTERRUPT;.      
7960: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
7970: 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20  o_error;.    }. 
7980: 20 7d 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 62   }.#endif.  .  b
7990: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
79a0: 64 65 3a 20 20 47 6f 73 75 62 20 50 31 20 50 32  de:  Gosub P1 P2
79b0: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69   * * *.**.** Wri
79c0: 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 61  te the current a
79d0: 64 64 72 65 73 73 20 6f 6e 74 6f 20 72 65 67 69  ddress onto regi
79e0: 73 74 65 72 20 50 31 0a 2a 2a 20 61 6e 64 20 74  ster P1.** and t
79f0: 68 65 6e 20 6a 75 6d 70 20 74 6f 20 61 64 64 72  hen jump to addr
7a00: 65 73 73 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ess P2..*/.case 
7a10: 4f 50 5f 47 6f 73 75 62 3a 20 7b 20 20 20 20 20  OP_Gosub: {     
7a20: 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
7a30: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
7a40: 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31  >p1>0 && pOp->p1
7a50: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
7a60: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
7a70: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
7a80: 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
7a90: 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28   VdbeMemDynamic(
7aa0: 70 49 6e 31 29 3d 3d 30 20 29 3b 0a 20 20 6d 65  pIn1)==0 );.  me
7ab0: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
7ac0: 2c 20 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d  , pIn1);.  pIn1-
7ad0: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
7ae0: 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20  ;.  pIn1->u.i = 
7af0: 28 69 6e 74 29 28 70 4f 70 2d 61 4f 70 29 3b 0a  (int)(pOp-aOp);.
7b00: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
7b10: 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b  (pOp->p1, pIn1);
7b20: 0a 0a 20 20 2f 2a 20 4d 6f 73 74 20 6a 75 6d 70  ..  /* Most jump
7b30: 20 6f 70 65 72 61 74 69 6f 6e 73 20 64 6f 20 61   operations do a
7b40: 20 67 6f 74 6f 20 74 6f 20 74 68 69 73 20 73 70   goto to this sp
7b50: 6f 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 75  ot in order to u
7b60: 70 64 61 74 65 0a 20 20 2a 2a 20 74 68 65 20 70  pdate.  ** the p
7b70: 4f 70 20 70 6f 69 6e 74 65 72 2e 20 2a 2f 0a 6a  Op pointer. */.j
7b80: 75 6d 70 5f 74 6f 5f 70 32 3a 0a 20 20 70 4f 70  ump_to_p2:.  pOp
7b90: 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20   = &aOp[pOp->p2 
7ba0: 2d 20 31 5d 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  - 1];.  break;.}
7bb0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 52 65  ../* Opcode:  Re
7bc0: 74 75 72 6e 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  turn P1 * * * *.
7bd0: 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68  **.** Jump to th
7be0: 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
7bf0: 6f 6e 20 61 66 74 65 72 20 74 68 65 20 61 64 64  on after the add
7c00: 72 65 73 73 20 69 6e 20 72 65 67 69 73 74 65 72  ress in register
7c10: 20 50 31 2e 20 20 41 66 74 65 72 0a 2a 2a 20 74   P1.  After.** t
7c20: 68 65 20 6a 75 6d 70 2c 20 72 65 67 69 73 74 65  he jump, registe
7c30: 72 20 50 31 20 62 65 63 6f 6d 65 73 20 75 6e 64  r P1 becomes und
7c40: 65 66 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  efined..*/.case 
7c50: 4f 50 5f 52 65 74 75 72 6e 3a 20 7b 20 20 20 20  OP_Return: {    
7c60: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
7c70: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
7c80: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
7c90: 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3d  rt( pIn1->flags=
7ca0: 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 4f  =MEM_Int );.  pO
7cb0: 70 20 3d 20 26 61 4f 70 5b 70 49 6e 31 2d 3e 75  p = &aOp[pIn1->u
7cc0: 2e 69 5d 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  .i];.  pIn1->fla
7cd0: 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e  gs = MEM_Undefin
7ce0: 65 64 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  ed;.  break;.}..
7cf0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 69 74 43  /* Opcode: InitC
7d00: 6f 72 6f 75 74 69 6e 65 20 50 31 20 50 32 20 50  oroutine P1 P2 P
7d10: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20  3 * *.**.** Set 
7d20: 75 70 20 72 65 67 69 73 74 65 72 20 50 31 20 73  up register P1 s
7d30: 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20 59  o that it will Y
7d40: 69 65 6c 64 20 74 6f 20 74 68 65 20 63 6f 72 6f  ield to the coro
7d50: 75 74 69 6e 65 0a 2a 2a 20 6c 6f 63 61 74 65 64  utine.** located
7d60: 20 61 74 20 61 64 64 72 65 73 73 20 50 33 2e 0a   at address P3..
7d70: 2a 2a 0a 2a 2a 20 49 66 20 50 32 21 3d 30 20 74  **.** If P2!=0 t
7d80: 68 65 6e 20 74 68 65 20 63 6f 72 6f 75 74 69 6e  hen the coroutin
7d90: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
7da0: 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c   immediately fol
7db0: 6c 6f 77 73 0a 2a 2a 20 74 68 69 73 20 6f 70 63  lows.** this opc
7dc0: 6f 64 65 2e 20 20 53 6f 20 6a 75 6d 70 20 6f 76  ode.  So jump ov
7dd0: 65 72 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65  er the coroutine
7de0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
7df0: 74 6f 0a 2a 2a 20 61 64 64 72 65 73 73 20 50 32  to.** address P2
7e00: 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
7e10: 3a 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65 0a 2a  : EndCoroutine.*
7e20: 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 69 74 43 6f  /.case OP_InitCo
7e30: 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20 20 20 2f  routine: {     /
7e40: 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65  * jump */.  asse
7e50: 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26  rt( pOp->p1>0 &&
7e60: 20 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e    pOp->p1<=(p->n
7e70: 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
7e80: 6f 72 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  or) );.  assert(
7e90: 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 26 26 20 70   pOp->p2>=0 && p
7ea0: 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b  Op->p2<p->nOp );
7eb0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
7ec0: 70 33 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 33  p3>=0 && pOp->p3
7ed0: 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f 75  <p->nOp );.  pOu
7ee0: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
7ef0: 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 21 56  1];.  assert( !V
7f00: 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f  dbeMemDynamic(pO
7f10: 75 74 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75  ut) );.  pOut->u
7f20: 2e 69 20 3d 20 70 4f 70 2d 3e 70 33 20 2d 20 31  .i = pOp->p3 - 1
7f30: 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
7f40: 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 69 66 28  = MEM_Int;.  if(
7f50: 20 70 4f 70 2d 3e 70 32 20 29 20 67 6f 74 6f 20   pOp->p2 ) goto 
7f60: 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72  jump_to_p2;.  br
7f70: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
7f80: 65 3a 20 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65  e:  EndCoroutine
7f90: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
7fa0: 2a 20 54 68 65 20 69 6e 73 74 72 75 63 74 69 6f  * The instructio
7fb0: 6e 20 61 74 20 74 68 65 20 61 64 64 72 65 73 73  n at the address
7fc0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
7fd0: 69 73 20 61 20 59 69 65 6c 64 2e 0a 2a 2a 20 4a  is a Yield..** J
7fe0: 75 6d 70 20 74 6f 20 74 68 65 20 50 32 20 70 61  ump to the P2 pa
7ff0: 72 61 6d 65 74 65 72 20 6f 66 20 74 68 61 74 20  rameter of that 
8000: 59 69 65 6c 64 2e 0a 2a 2a 20 41 66 74 65 72 20  Yield..** After 
8010: 74 68 65 20 6a 75 6d 70 2c 20 72 65 67 69 73 74  the jump, regist
8020: 65 72 20 50 31 20 62 65 63 6f 6d 65 73 20 75 6e  er P1 becomes un
8030: 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 53  defined..**.** S
8040: 65 65 20 61 6c 73 6f 3a 20 49 6e 69 74 43 6f 72  ee also: InitCor
8050: 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f  outine.*/.case O
8060: 50 5f 45 6e 64 43 6f 72 6f 75 74 69 6e 65 3a 20  P_EndCoroutine: 
8070: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69  {           /* i
8080: 6e 31 20 2a 2f 0a 20 20 56 64 62 65 4f 70 20 2a  n1 */.  VdbeOp *
8090: 70 43 61 6c 6c 65 72 3b 0a 20 20 70 49 6e 31 20  pCaller;.  pIn1 
80a0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
80b0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
80c0: 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74  ->flags==MEM_Int
80d0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49   );.  assert( pI
80e0: 6e 31 2d 3e 75 2e 69 3e 3d 30 20 26 26 20 70 49  n1->u.i>=0 && pI
80f0: 6e 31 2d 3e 75 2e 69 3c 70 2d 3e 6e 4f 70 20 29  n1->u.i<p->nOp )
8100: 3b 0a 20 20 70 43 61 6c 6c 65 72 20 3d 20 26 61  ;.  pCaller = &a
8110: 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20  Op[pIn1->u.i];. 
8120: 20 61 73 73 65 72 74 28 20 70 43 61 6c 6c 65 72   assert( pCaller
8130: 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 59 69 65  ->opcode==OP_Yie
8140: 6c 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ld );.  assert( 
8150: 70 43 61 6c 6c 65 72 2d 3e 70 32 3e 3d 30 20 26  pCaller->p2>=0 &
8160: 26 20 70 43 61 6c 6c 65 72 2d 3e 70 32 3c 70 2d  & pCaller->p2<p-
8170: 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f 70 20 3d 20  >nOp );.  pOp = 
8180: 26 61 4f 70 5b 70 43 61 6c 6c 65 72 2d 3e 70 32  &aOp[pCaller->p2
8190: 20 2d 20 31 5d 3b 0a 20 20 70 49 6e 31 2d 3e 66   - 1];.  pIn1->f
81a0: 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66  lags = MEM_Undef
81b0: 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ined;.  break;.}
81c0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 59 69  ../* Opcode:  Yi
81d0: 65 6c 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  eld P1 P2 * * *.
81e0: 2a 2a 0a 2a 2a 20 53 77 61 70 20 74 68 65 20 70  **.** Swap the p
81f0: 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 77  rogram counter w
8200: 69 74 68 20 74 68 65 20 76 61 6c 75 65 20 69 6e  ith the value in
8210: 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 54   register P1.  T
8220: 68 69 73 0a 2a 2a 20 68 61 73 20 74 68 65 20 65  his.** has the e
8230: 66 66 65 63 74 20 6f 66 20 79 69 65 6c 64 69 6e  ffect of yieldin
8240: 67 20 74 6f 20 61 20 63 6f 72 6f 75 74 69 6e 65  g to a coroutine
8250: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63  ..**.** If the c
8260: 6f 72 6f 75 74 69 6e 65 20 74 68 61 74 20 69 73  oroutine that is
8270: 20 6c 61 75 6e 63 68 65 64 20 62 79 20 74 68 69   launched by thi
8280: 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e  s instruction en
8290: 64 73 20 77 69 74 68 0a 2a 2a 20 59 69 65 6c 64  ds with.** Yield
82a0: 20 6f 72 20 52 65 74 75 72 6e 20 74 68 65 6e 20   or Return then 
82b0: 63 6f 6e 74 69 6e 75 65 20 74 6f 20 74 68 65 20  continue to the 
82c0: 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
82d0: 2e 20 20 42 75 74 20 69 66 0a 2a 2a 20 74 68 65  .  But if.** the
82e0: 20 63 6f 72 6f 75 74 69 6e 65 20 6c 61 75 6e 63   coroutine launc
82f0: 68 65 64 20 62 79 20 74 68 69 73 20 69 6e 73 74  hed by this inst
8300: 72 75 63 74 69 6f 6e 20 65 6e 64 73 20 77 69 74  ruction ends wit
8310: 68 0a 2a 2a 20 45 6e 64 43 6f 72 6f 75 74 69 6e  h.** EndCoroutin
8320: 65 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  e, then jump to 
8330: 50 32 20 72 61 74 68 65 72 20 74 68 61 6e 20 63  P2 rather than c
8340: 6f 6e 74 69 6e 75 69 6e 67 20 77 69 74 68 20 74  ontinuing with t
8350: 68 65 0a 2a 2a 20 6e 65 78 74 20 69 6e 73 74 72  he.** next instr
8360: 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65  uction..**.** Se
8370: 65 20 61 6c 73 6f 3a 20 49 6e 69 74 43 6f 72 6f  e also: InitCoro
8380: 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50  utine.*/.case OP
8390: 5f 59 69 65 6c 64 3a 20 7b 20 20 20 20 20 20 20  _Yield: {       
83a0: 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 6a 75 6d       /* in1, jum
83b0: 70 20 2a 2f 0a 20 20 69 6e 74 20 70 63 44 65 73  p */.  int pcDes
83c0: 74 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  t;.  pIn1 = &aMe
83d0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
83e0: 73 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e  sert( VdbeMemDyn
83f0: 61 6d 69 63 28 70 49 6e 31 29 3d 3d 30 20 29 3b  amic(pIn1)==0 );
8400: 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d  .  pIn1->flags =
8410: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 63 44 65   MEM_Int;.  pcDe
8420: 73 74 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e  st = (int)pIn1->
8430: 75 2e 69 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69  u.i;.  pIn1->u.i
8440: 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61   = (int)(pOp - a
8450: 4f 70 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  Op);.  REGISTER_
8460: 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70  TRACE(pOp->p1, p
8470: 49 6e 31 29 3b 0a 20 20 70 4f 70 20 3d 20 26 61  In1);.  pOp = &a
8480: 4f 70 5b 70 63 44 65 73 74 5d 3b 0a 20 20 62 72  Op[pcDest];.  br
8490: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
84a0: 65 3a 20 20 48 61 6c 74 49 66 4e 75 6c 6c 20 20  e:  HaltIfNull  
84b0: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
84c0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
84d0: 5b 50 33 5d 3d 6e 75 6c 6c 20 68 61 6c 74 0a 2a  [P3]=null halt.*
84e0: 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 76  *.** Check the v
84f0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
8500: 20 50 33 2e 20 20 49 66 20 69 74 20 69 73 20 4e   P3.  If it is N
8510: 55 4c 4c 20 74 68 65 6e 20 48 61 6c 74 20 75 73  ULL then Halt us
8520: 69 6e 67 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72  ing.** parameter
8530: 20 50 31 2c 20 50 32 2c 20 61 6e 64 20 50 34 20   P1, P2, and P4 
8540: 61 73 20 69 66 20 74 68 69 73 20 77 65 72 65 20  as if this were 
8550: 61 20 48 61 6c 74 20 69 6e 73 74 72 75 63 74 69  a Halt instructi
8560: 6f 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 76  on.  If the.** v
8570: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
8580: 20 50 33 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   P3 is not NULL,
8590: 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69   then this routi
85a0: 6e 65 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a  ne is a no-op..*
85b0: 2a 20 54 68 65 20 50 35 20 70 61 72 61 6d 65 74  * The P5 paramet
85c0: 65 72 20 73 68 6f 75 6c 64 20 62 65 20 31 2e 0a  er should be 1..
85d0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 49  */.case OP_HaltI
85e0: 66 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 2f 2a  fNull: {      /*
85f0: 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33 20 3d   in3 */.  pIn3 =
8600: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
8610: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
8620: 45 42 55 47 0a 20 20 69 66 28 20 70 4f 70 2d 3e  EBUG.  if( pOp->
8630: 70 32 3d 3d 4f 45 5f 41 62 6f 72 74 20 29 7b 20  p2==OE_Abort ){ 
8640: 73 71 6c 69 74 65 33 56 64 62 65 41 73 73 65 72  sqlite3VdbeAsser
8650: 74 41 62 6f 72 74 61 62 6c 65 28 70 29 3b 20 7d  tAbortable(p); }
8660: 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 28 70  .#endif.  if( (p
8670: 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
8680: 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20 62 72 65 61  _Null)==0 ) brea
8690: 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72  k;.  /* Fall thr
86a0: 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 48 61 6c  ough into OP_Hal
86b0: 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  t */.}../* Opcod
86c0: 65 3a 20 20 48 61 6c 74 20 50 31 20 50 32 20 2a  e:  Halt P1 P2 *
86d0: 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 69   P4 P5.**.** Exi
86e0: 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20  t immediately.  
86f0: 41 6c 6c 20 6f 70 65 6e 20 63 75 72 73 6f 72 73  All open cursors
8700: 2c 20 65 74 63 20 61 72 65 20 63 6c 6f 73 65 64  , etc are closed
8710: 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  .** automaticall
8720: 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74  y..**.** P1 is t
8730: 68 65 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72  he result code r
8740: 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74  eturned by sqlit
8750: 65 33 5f 65 78 65 63 28 29 2c 20 73 71 6c 69 74  e3_exec(), sqlit
8760: 65 33 5f 72 65 73 65 74 28 29 2c 0a 2a 2a 20 6f  e3_reset(),.** o
8770: 72 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69  r sqlite3_finali
8780: 7a 65 28 29 2e 20 20 46 6f 72 20 61 20 6e 6f 72  ze().  For a nor
8790: 6d 61 6c 20 68 61 6c 74 2c 20 74 68 69 73 20 73  mal halt, this s
87a0: 68 6f 75 6c 64 20 62 65 20 53 51 4c 49 54 45 5f  hould be SQLITE_
87b0: 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f 72 20 65  OK (0)..** For e
87c0: 72 72 6f 72 73 2c 20 69 74 20 63 61 6e 20 62 65  rrors, it can be
87d0: 20 73 6f 6d 65 20 6f 74 68 65 72 20 76 61 6c 75   some other valu
87e0: 65 2e 20 20 49 66 20 50 31 21 3d 30 20 74 68 65  e.  If P1!=0 the
87f0: 6e 20 50 32 20 77 69 6c 6c 20 64 65 74 65 72 6d  n P2 will determ
8800: 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6f  ine.** whether o
8810: 72 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62 61 63  r not to rollbac
8820: 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72  k the current tr
8830: 61 6e 73 61 63 74 69 6f 6e 2e 20 20 44 6f 20 6e  ansaction.  Do n
8840: 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69  ot rollback.** i
8850: 66 20 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44  f P2==OE_Fail. D
8860: 6f 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 69  o the rollback i
8870: 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63  f P2==OE_Rollbac
8880: 6b 2e 20 20 49 66 20 50 32 3d 3d 4f 45 5f 41 62  k.  If P2==OE_Ab
8890: 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e 20 62 61 63  ort,.** then bac
88a0: 6b 20 6f 75 74 20 61 6c 6c 20 63 68 61 6e 67 65  k out all change
88b0: 73 20 74 68 61 74 20 68 61 76 65 20 6f 63 63 75  s that have occu
88c0: 72 72 65 64 20 64 75 72 69 6e 67 20 74 68 69 73  rred during this
88d0: 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 74 68   execution of th
88e0: 65 0a 2a 2a 20 56 44 42 45 2c 20 62 75 74 20 64  e.** VDBE, but d
88f0: 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74  o not rollback t
8900: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  he transaction. 
8910: 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20  .**.** If P4 is 
8920: 6e 6f 74 20 6e 75 6c 6c 20 74 68 65 6e 20 69 74  not null then it
8930: 20 69 73 20 61 6e 20 65 72 72 6f 72 20 6d 65 73   is an error mes
8940: 73 61 67 65 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a  sage string..**.
8950: 2a 2a 20 50 35 20 69 73 20 61 20 76 61 6c 75 65  ** P5 is a value
8960: 20 62 65 74 77 65 65 6e 20 30 20 61 6e 64 20 34   between 0 and 4
8970: 2c 20 69 6e 63 6c 75 73 69 76 65 2c 20 74 68 61  , inclusive, tha
8980: 74 20 6d 6f 64 69 66 69 65 73 20 74 68 65 20 50  t modifies the P
8990: 34 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20  4 string..**.** 
89a0: 20 20 20 30 3a 20 20 28 6e 6f 20 63 68 61 6e 67     0:  (no chang
89b0: 65 29 0a 2a 2a 20 20 20 20 31 3a 20 20 4e 4f 54  e).**    1:  NOT
89c0: 20 4e 55 4c 4c 20 63 6f 6e 74 72 61 69 6e 74 20   NULL contraint 
89d0: 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20  failed: P4.**   
89e0: 20 32 3a 20 20 55 4e 49 51 55 45 20 63 6f 6e 73   2:  UNIQUE cons
89f0: 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50  traint failed: P
8a00: 34 0a 2a 2a 20 20 20 20 33 3a 20 20 43 48 45 43  4.**    3:  CHEC
8a10: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69  K constraint fai
8a20: 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20 34 3a  led: P4.**    4:
8a30: 20 20 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f    FOREIGN KEY co
8a40: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a  nstraint failed:
8a50: 20 50 34 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20   P4.**.** If P5 
8a60: 69 73 20 6e 6f 74 20 7a 65 72 6f 20 61 6e 64 20  is not zero and 
8a70: 50 34 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e  P4 is NULL, then
8a80: 20 65 76 65 72 79 74 68 69 6e 67 20 61 66 74 65   everything afte
8a90: 72 20 74 68 65 20 22 3a 22 20 69 73 0a 2a 2a 20  r the ":" is.** 
8aa0: 6f 6d 69 74 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54  omitted..**.** T
8ab0: 68 65 72 65 20 69 73 20 61 6e 20 69 6d 70 6c 69  here is an impli
8ac0: 65 64 20 22 48 61 6c 74 20 30 20 30 20 30 22 20  ed "Halt 0 0 0" 
8ad0: 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 73 65  instruction inse
8ae0: 72 74 65 64 20 61 74 20 74 68 65 20 76 65 72 79  rted at the very
8af0: 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 76 65 72 79   end of.** every
8b00: 20 70 72 6f 67 72 61 6d 2e 20 20 53 6f 20 61 20   program.  So a 
8b10: 6a 75 6d 70 20 70 61 73 74 20 74 68 65 20 6c 61  jump past the la
8b20: 73 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  st instruction o
8b30: 66 20 74 68 65 20 70 72 6f 67 72 61 6d 0a 2a 2a  f the program.**
8b40: 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20   is the same as 
8b50: 65 78 65 63 75 74 69 6e 67 20 48 61 6c 74 2e 0a  executing Halt..
8b60: 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 3a  */.case OP_Halt:
8b70: 20 7b 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a   {.  VdbeFrame *
8b80: 70 46 72 61 6d 65 3b 0a 20 20 69 6e 74 20 70 63  pFrame;.  int pc
8b90: 78 3b 0a 0a 20 20 70 63 78 20 3d 20 28 69 6e 74  x;..  pcx = (int
8ba0: 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 23 69  )(pOp - aOp);.#i
8bb0: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
8bc0: 47 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d  G.  if( pOp->p2=
8bd0: 3d 4f 45 5f 41 62 6f 72 74 20 29 7b 20 73 71 6c  =OE_Abort ){ sql
8be0: 69 74 65 33 56 64 62 65 41 73 73 65 72 74 41 62  ite3VdbeAssertAb
8bf0: 6f 72 74 61 62 6c 65 28 70 29 3b 20 7d 0a 23 65  ortable(p); }.#e
8c00: 6e 64 69 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e  ndif.  if( pOp->
8c10: 70 31 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  p1==SQLITE_OK &&
8c20: 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20   p->pFrame ){.  
8c30: 20 20 2f 2a 20 48 61 6c 74 20 74 68 65 20 73 75    /* Halt the su
8c40: 62 2d 70 72 6f 67 72 61 6d 2e 20 52 65 74 75 72  b-program. Retur
8c50: 6e 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65  n control to the
8c60: 20 70 61 72 65 6e 74 20 66 72 61 6d 65 2e 20 2a   parent frame. *
8c70: 2f 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20 70  /.    pFrame = p
8c80: 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 20 20 70 2d  ->pFrame;.    p-
8c90: 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65  >pFrame = pFrame
8ca0: 2d 3e 70 50 61 72 65 6e 74 3b 0a 20 20 20 20 70  ->pParent;.    p
8cb0: 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20 20 20  ->nFrame--;.    
8cc0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68  sqlite3VdbeSetCh
8cd0: 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68  anges(db, p->nCh
8ce0: 61 6e 67 65 29 3b 0a 20 20 20 20 70 63 78 20 3d  ange);.    pcx =
8cf0: 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 61 6d   sqlite3VdbeFram
8d00: 65 52 65 73 74 6f 72 65 28 70 46 72 61 6d 65 29  eRestore(pFrame)
8d10: 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
8d20: 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a  2==OE_Ignore ){.
8d30: 20 20 20 20 20 20 2f 2a 20 49 6e 73 74 72 75 63        /* Instruc
8d40: 74 69 6f 6e 20 70 63 78 20 69 73 20 74 68 65 20  tion pcx is the 
8d50: 4f 50 5f 50 72 6f 67 72 61 6d 20 74 68 61 74 20  OP_Program that 
8d60: 69 6e 76 6f 6b 65 64 20 74 68 65 20 73 75 62 2d  invoked the sub-
8d70: 70 72 6f 67 72 61 6d 20 0a 20 20 20 20 20 20 2a  program .      *
8d80: 2a 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e  * currently bein
8d90: 67 20 68 61 6c 74 65 64 2e 20 49 66 20 74 68 65  g halted. If the
8da0: 20 70 32 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   p2 instruction 
8db0: 6f 66 20 74 68 69 73 20 4f 50 5f 48 61 6c 74 0a  of this OP_Halt.
8dc0: 20 20 20 20 20 20 2a 2a 20 69 6e 73 74 72 75 63        ** instruc
8dd0: 74 69 6f 6e 20 69 73 20 73 65 74 20 74 6f 20 4f  tion is set to O
8de0: 45 5f 49 67 6e 6f 72 65 2c 20 74 68 65 6e 20 74  E_Ignore, then t
8df0: 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 69  he sub-program i
8e00: 73 20 74 68 72 6f 77 69 6e 67 0a 20 20 20 20 20  s throwing.     
8e10: 20 2a 2a 20 61 6e 20 49 47 4e 4f 52 45 20 65 78   ** an IGNORE ex
8e20: 63 65 70 74 69 6f 6e 2e 20 49 6e 20 74 68 69 73  ception. In this
8e30: 20 63 61 73 65 20 6a 75 6d 70 20 74 6f 20 74 68   case jump to th
8e40: 65 20 61 64 64 72 65 73 73 20 73 70 65 63 69 66  e address specif
8e50: 69 65 64 0a 20 20 20 20 20 20 2a 2a 20 61 73 20  ied.      ** as 
8e60: 74 68 65 20 70 32 20 6f 66 20 74 68 65 20 63 61  the p2 of the ca
8e70: 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d  lling OP_Program
8e80: 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 63 78 20  .  */.      pcx 
8e90: 3d 20 70 2d 3e 61 4f 70 5b 70 63 78 5d 2e 70 32  = p->aOp[pcx].p2
8ea0: 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 4f  -1;.    }.    aO
8eb0: 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20  p = p->aOp;.    
8ec0: 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a  aMem = p->aMem;.
8ed0: 20 20 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70      pOp = &aOp[p
8ee0: 63 78 5d 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  cx];.    break;.
8ef0: 20 20 7d 0a 20 20 70 2d 3e 72 63 20 3d 20 70 4f    }.  p->rc = pO
8f00: 70 2d 3e 70 31 3b 0a 20 20 70 2d 3e 65 72 72 6f  p->p1;.  p->erro
8f10: 72 41 63 74 69 6f 6e 20 3d 20 28 75 38 29 70 4f  rAction = (u8)pO
8f20: 70 2d 3e 70 32 3b 0a 20 20 70 2d 3e 70 63 20 3d  p->p2;.  p->pc =
8f30: 20 70 63 78 3b 0a 20 20 61 73 73 65 72 74 28 20   pcx;.  assert( 
8f40: 70 4f 70 2d 3e 70 35 3c 3d 34 20 29 3b 0a 20 20  pOp->p5<=4 );.  
8f50: 69 66 28 20 70 2d 3e 72 63 20 29 7b 0a 20 20 20  if( p->rc ){.   
8f60: 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a   if( pOp->p5 ){.
8f70: 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e        static con
8f80: 73 74 20 63 68 61 72 20 2a 20 63 6f 6e 73 74 20  st char * const 
8f90: 61 7a 54 79 70 65 5b 5d 20 3d 20 7b 20 22 4e 4f  azType[] = { "NO
8fa0: 54 20 4e 55 4c 4c 22 2c 20 22 55 4e 49 51 55 45  T NULL", "UNIQUE
8fb0: 22 2c 20 22 43 48 45 43 4b 22 2c 0a 20 20 20 20  ", "CHECK",.    
8fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fe0: 20 20 20 20 20 20 20 20 20 22 46 4f 52 45 49 47           "FOREIG
8ff0: 4e 20 4b 45 59 22 20 7d 3b 0a 20 20 20 20 20 20  N KEY" };.      
9000: 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
9010: 35 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 74 65  5==1 );.      te
9020: 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d  stcase( pOp->p5=
9030: 3d 32 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74  =2 );.      test
9040: 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 33  case( pOp->p5==3
9050: 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61   );.      testca
9060: 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 34 20 29  se( pOp->p5==4 )
9070: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
9080: 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 20  dbeError(p, "%s 
9090: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
90a0: 64 22 2c 20 61 7a 54 79 70 65 5b 70 4f 70 2d 3e  d", azType[pOp->
90b0: 70 35 2d 31 5d 29 3b 0a 20 20 20 20 20 20 69 66  p5-1]);.      if
90c0: 28 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20  ( pOp->p4.z ){. 
90d0: 20 20 20 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73         p->zErrMs
90e0: 67 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e  g = sqlite3MPrin
90f0: 74 66 28 64 62 2c 20 22 25 7a 3a 20 25 73 22 2c  tf(db, "%z: %s",
9100: 20 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 70 4f 70   p->zErrMsg, pOp
9110: 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 20 20 7d  ->p4.z);.      }
9120: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
9130: 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
9140: 6f 72 28 70 2c 20 22 25 73 22 2c 20 70 4f 70 2d  or(p, "%s", pOp-
9150: 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20 20  >p4.z);.    }.  
9160: 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 70 4f    sqlite3_log(pO
9170: 70 2d 3e 70 31 2c 20 22 61 62 6f 72 74 20 61 74  p->p1, "abort at
9180: 20 25 64 20 69 6e 20 5b 25 73 5d 3a 20 25 73 22   %d in [%s]: %s"
9190: 2c 20 70 63 78 2c 20 70 2d 3e 7a 53 71 6c 2c 20  , pcx, p->zSql, 
91a0: 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d  p->zErrMsg);.  }
91b0: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
91c0: 64 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 61 73  dbeHalt(p);.  as
91d0: 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
91e0: 5f 42 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c  _BUSY || rc==SQL
91f0: 49 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51  ITE_OK || rc==SQ
9200: 4c 49 54 45 5f 45 52 52 4f 52 20 29 3b 0a 20 20  LITE_ERROR );.  
9210: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  if( rc==SQLITE_B
9220: 55 53 59 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63  USY ){.    p->rc
9230: 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
9240: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
9250: 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
9260: 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63 26 30 78 66  OK || (p->rc&0xf
9270: 66 29 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54  f)==SQLITE_CONST
9280: 52 41 49 4e 54 20 29 3b 0a 20 20 20 20 61 73 73  RAINT );.    ass
9290: 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
92a0: 4f 4b 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72  OK || db->nDefer
92b0: 72 65 64 43 6f 6e 73 3e 30 20 7c 7c 20 64 62 2d  redCons>0 || db-
92c0: 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
92d0: 73 3e 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  s>0 );.    rc = 
92e0: 70 2d 3e 72 63 20 3f 20 53 51 4c 49 54 45 5f 45  p->rc ? SQLITE_E
92f0: 52 52 4f 52 20 3a 20 53 51 4c 49 54 45 5f 44 4f  RROR : SQLITE_DO
9300: 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76  NE;.  }.  goto v
9310: 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f  dbe_return;.}../
9320: 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 65  * Opcode: Intege
9330: 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  r P1 P2 * * *.**
9340: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
9350: 3d 50 31 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33 32  =P1.**.** The 32
9360: 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c  -bit integer val
9370: 75 65 20 50 31 20 69 73 20 77 72 69 74 74 65 6e  ue P1 is written
9380: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
9390: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  2..*/.case OP_In
93a0: 74 65 67 65 72 3a 20 7b 20 20 20 20 20 20 20 20  teger: {        
93b0: 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f   /* out2 */.  pO
93c0: 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
93d0: 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70  ase(p, pOp);.  p
93e0: 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e  Out->u.i = pOp->
93f0: 70 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  p1;.  break;.}..
9400: 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 36 34  /* Opcode: Int64
9410: 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20   * P2 * P4 *.** 
9420: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
9430: 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  P4.**.** P4 is a
9440: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34   pointer to a 64
9450: 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c  -bit integer val
9460: 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61  ue..** Write tha
9470: 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67  t value into reg
9480: 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
9490: 65 20 4f 50 5f 49 6e 74 36 34 3a 20 7b 20 20 20  e OP_Int64: {   
94a0: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
94b0: 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  */.  pOut = out2
94c0: 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
94d0: 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  p);.  assert( pO
94e0: 70 2d 3e 70 34 2e 70 49 36 34 21 3d 30 20 29 3b  p->p4.pI64!=0 );
94f0: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 2a  .  pOut->u.i = *
9500: 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20  pOp->p4.pI64;.  
9510: 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65  break;.}..#ifnde
9520: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
9530: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20  OATING_POINT./* 
9540: 4f 70 63 6f 64 65 3a 20 52 65 61 6c 20 2a 20 50  Opcode: Real * P
9550: 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
9560: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a  psis: r[P2]=P4.*
9570: 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
9580: 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74  nter to a 64-bit
9590: 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
95a0: 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20  value..** Write 
95b0: 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20  that value into 
95c0: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
95d0: 63 61 73 65 20 4f 50 5f 52 65 61 6c 3a 20 7b 20  case OP_Real: { 
95e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
95f0: 6d 65 20 61 73 20 54 4b 5f 46 4c 4f 41 54 2c 20  me as TK_FLOAT, 
9600: 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d  out2 */.  pOut =
9610: 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
9620: 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d  p, pOp);.  pOut-
9630: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 52 65 61  >flags = MEM_Rea
9640: 6c 3b 0a 20 20 61 73 73 65 72 74 28 20 21 73 71  l;.  assert( !sq
9650: 6c 69 74 65 33 49 73 4e 61 4e 28 2a 70 4f 70 2d  lite3IsNaN(*pOp-
9660: 3e 70 34 2e 70 52 65 61 6c 29 20 29 3b 0a 20 20  >p4.pReal) );.  
9670: 70 4f 75 74 2d 3e 75 2e 72 20 3d 20 2a 70 4f 70  pOut->u.r = *pOp
9680: 2d 3e 70 34 2e 70 52 65 61 6c 3b 0a 20 20 62 72  ->p4.pReal;.  br
9690: 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  eak;.}.#endif../
96a0: 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67  * Opcode: String
96b0: 38 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a  8 * P2 * P4 *.**
96c0: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
96d0: 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20 50 34 20 70  ='P4'.**.** P4 p
96e0: 6f 69 6e 74 73 20 74 6f 20 61 20 6e 75 6c 20 74  oints to a nul t
96f0: 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20  erminated UTF-8 
9700: 73 74 72 69 6e 67 2e 20 54 68 69 73 20 6f 70 63  string. This opc
9710: 6f 64 65 20 69 73 20 74 72 61 6e 73 66 6f 72 6d  ode is transform
9720: 65 64 20 0a 2a 2a 20 69 6e 74 6f 20 61 20 53 74  ed .** into a St
9730: 72 69 6e 67 20 6f 70 63 6f 64 65 20 62 65 66 6f  ring opcode befo
9740: 72 65 20 69 74 20 69 73 20 65 78 65 63 75 74 65  re it is execute
9750: 64 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20  d for the first 
9760: 74 69 6d 65 2e 20 20 44 75 72 69 6e 67 0a 2a 2a  time.  During.**
9770: 20 74 68 69 73 20 74 72 61 6e 73 66 6f 72 6d 61   this transforma
9780: 74 69 6f 6e 2c 20 74 68 65 20 6c 65 6e 67 74 68  tion, the length
9790: 20 6f 66 20 73 74 72 69 6e 67 20 50 34 20 69 73   of string P4 is
97a0: 20 63 6f 6d 70 75 74 65 64 20 61 6e 64 20 73 74   computed and st
97b0: 6f 72 65 64 0a 2a 2a 20 61 73 20 74 68 65 20 50  ored.** as the P
97c0: 31 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a  1 parameter..*/.
97d0: 63 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 38 3a  case OP_String8:
97e0: 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61   {         /* sa
97f0: 6d 65 20 61 73 20 54 4b 5f 53 54 52 49 4e 47 2c  me as TK_STRING,
9800: 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73 65 72   out2 */.  asser
9810: 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20  t( pOp->p4.z!=0 
9820: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  );.  pOut = out2
9830: 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
9840: 70 29 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d 20  p);.  pOp->p1 = 
9850: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
9860: 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69 66  pOp->p4.z);..#if
9870: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
9880: 5f 55 54 46 31 36 0a 20 20 69 66 28 20 65 6e 63  _UTF16.  if( enc
9890: 6f 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55 54  oding!=SQLITE_UT
98a0: 46 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  F8 ){.    rc = s
98b0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
98c0: 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70  Str(pOut, pOp->p
98d0: 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f  4.z, -1, SQLITE_
98e0: 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41  UTF8, SQLITE_STA
98f0: 54 49 43 29 3b 0a 20 20 20 20 61 73 73 65 72 74  TIC);.    assert
9900: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
9910: 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 54 4f  || rc==SQLITE_TO
9920: 4f 42 49 47 20 29 3b 0a 20 20 20 20 69 66 28 20  OBIG );.    if( 
9930: 72 63 20 29 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  rc ) goto too_bi
9940: 67 3b 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54  g;.    if( SQLIT
9950: 45 5f 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64 62  E_OK!=sqlite3Vdb
9960: 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
9970: 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 20  pOut, encoding) 
9980: 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
9990: 20 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 2d     assert( pOut-
99a0: 3e 73 7a 4d 61 6c 6c 6f 63 3e 30 20 26 26 20 70  >szMalloc>0 && p
99b0: 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f  Out->zMalloc==pO
99c0: 75 74 2d 3e 7a 20 29 3b 0a 20 20 20 20 61 73 73  ut->z );.    ass
99d0: 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61  ert( VdbeMemDyna
99e0: 6d 69 63 28 70 4f 75 74 29 3d 3d 30 20 29 3b 0a  mic(pOut)==0 );.
99f0: 20 20 20 20 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c      pOut->szMall
9a00: 6f 63 20 3d 20 30 3b 0a 20 20 20 20 70 4f 75 74  oc = 0;.    pOut
9a10: 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 53  ->flags |= MEM_S
9a20: 74 61 74 69 63 3b 0a 20 20 20 20 69 66 28 20 70  tatic;.    if( p
9a30: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 44  Op->p4type==P4_D
9a40: 59 4e 41 4d 49 43 20 29 7b 0a 20 20 20 20 20 20  YNAMIC ){.      
9a50: 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
9a60: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
9a70: 20 20 7d 0a 20 20 20 20 70 4f 70 2d 3e 70 34 74    }.    pOp->p4t
9a80: 79 70 65 20 3d 20 50 34 5f 44 59 4e 41 4d 49 43  ype = P4_DYNAMIC
9a90: 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34 2e 7a 20  ;.    pOp->p4.z 
9aa0: 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20 20 20 20 70  = pOut->z;.    p
9ab0: 4f 70 2d 3e 70 31 20 3d 20 70 4f 75 74 2d 3e 6e  Op->p1 = pOut->n
9ac0: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 69  ;.  }.#endif.  i
9ad0: 66 28 20 70 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61  f( pOp->p1>db->a
9ae0: 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
9af0: 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
9b00: 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
9b10: 20 20 7d 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64    }.  pOp->opcod
9b20: 65 20 3d 20 4f 50 5f 53 74 72 69 6e 67 3b 0a 20  e = OP_String;. 
9b30: 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
9b40: 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 2f 2a 20 46  ITE_OK );.  /* F
9b50: 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
9b60: 68 65 20 6e 65 78 74 20 63 61 73 65 2c 20 4f 50  he next case, OP
9b70: 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a  _String */.}.  .
9b80: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e  /* Opcode: Strin
9b90: 67 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  g P1 P2 P3 P4 P5
9ba0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
9bb0: 50 32 5d 3d 27 50 34 27 20 28 6c 65 6e 3d 50 31  P2]='P4' (len=P1
9bc0: 29 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69  ).**.** The stri
9bd0: 6e 67 20 76 61 6c 75 65 20 50 34 20 6f 66 20 6c  ng value P4 of l
9be0: 65 6e 67 74 68 20 50 31 20 28 62 79 74 65 73 29  ength P1 (bytes)
9bf0: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
9c00: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
9c10: 20 49 66 20 50 33 20 69 73 20 6e 6f 74 20 7a 65   If P3 is not ze
9c20: 72 6f 20 61 6e 64 20 74 68 65 20 63 6f 6e 74 65  ro and the conte
9c30: 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
9c40: 33 20 69 73 20 65 71 75 61 6c 20 74 6f 20 50 35  3 is equal to P5
9c50: 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 64 61  , then.** the da
9c60: 74 61 74 79 70 65 20 6f 66 20 74 68 65 20 72 65  tatype of the re
9c70: 67 69 73 74 65 72 20 50 32 20 69 73 20 63 6f 6e  gister P2 is con
9c80: 76 65 72 74 65 64 20 74 6f 20 42 4c 4f 42 2e 20  verted to BLOB. 
9c90: 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 0a   The content is.
9ca0: 2a 2a 20 74 68 65 20 73 61 6d 65 20 73 65 71 75  ** the same sequ
9cb0: 65 6e 63 65 20 6f 66 20 62 79 74 65 73 2c 20 69  ence of bytes, i
9cc0: 74 20 69 73 20 6d 65 72 65 6c 79 20 69 6e 74 65  t is merely inte
9cd0: 72 70 72 65 74 65 64 20 61 73 20 61 20 42 4c 4f  rpreted as a BLO
9ce0: 42 20 69 6e 73 74 65 61 64 0a 2a 2a 20 6f 66 20  B instead.** of 
9cf0: 61 20 73 74 72 69 6e 67 2c 20 61 73 20 69 66 20  a string, as if 
9d00: 69 74 20 68 61 64 20 62 65 65 6e 20 43 41 53 54  it had been CAST
9d10: 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
9d20: 73 3a 0a 2a 2a 0a 2a 2a 20 69 66 28 20 50 33 21  s:.**.** if( P3!
9d30: 3d 30 20 61 6e 64 20 72 65 67 5b 50 33 5d 3d 3d  =0 and reg[P3]==
9d40: 50 35 20 29 20 72 65 67 5b 50 32 5d 20 3a 3d 20  P5 ) reg[P2] := 
9d50: 43 41 53 54 28 72 65 67 5b 50 32 5d 20 61 73 20  CAST(reg[P2] as 
9d60: 42 4c 4f 42 29 0a 2a 2f 0a 63 61 73 65 20 4f 50  BLOB).*/.case OP
9d70: 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20 20 20 20  _String: {      
9d80: 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
9d90: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
9da0: 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20  .z!=0 );.  pOut 
9db0: 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
9dc0: 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74  (p, pOp);.  pOut
9dd0: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74  ->flags = MEM_St
9de0: 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d  r|MEM_Static|MEM
9df0: 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a  _Term;.  pOut->z
9e00: 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20   = pOp->p4.z;.  
9e10: 70 4f 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70  pOut->n = pOp->p
9e20: 31 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d  1;.  pOut->enc =
9e30: 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44   encoding;.  UPD
9e40: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
9e50: 28 70 4f 75 74 29 3b 0a 23 69 66 6e 64 65 66 20  (pOut);.#ifndef 
9e60: 53 51 4c 49 54 45 5f 4c 49 4b 45 5f 44 4f 45 53  SQLITE_LIKE_DOES
9e70: 4e 54 5f 4d 41 54 43 48 5f 42 4c 4f 42 53 0a 20  NT_MATCH_BLOBS. 
9e80: 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29   if( pOp->p3>0 )
9e90: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
9ea0: 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p3<=(p->nMem+
9eb0: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
9ec0: 29 3b 0a 20 20 20 20 70 49 6e 33 20 3d 20 26 61  );.    pIn3 = &a
9ed0: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
9ee0: 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e    assert( pIn3->
9ef0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
9f00: 29 3b 0a 20 20 20 20 69 66 28 20 70 49 6e 33 2d  );.    if( pIn3-
9f10: 3e 75 2e 69 3d 3d 70 4f 70 2d 3e 70 35 20 29 20  >u.i==pOp->p5 ) 
9f20: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
9f30: 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 61 74 69  M_Blob|MEM_Stati
9f40: 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 7d 0a  c|MEM_Term;.  }.
9f50: 23 65 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b 0a  #endif.  break;.
9f60: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75  }../* Opcode: Nu
9f70: 6c 6c 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ll P1 P2 P3 * *.
9f80: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
9f90: 32 2e 2e 50 33 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a  2..P3]=NULL.**.*
9fa0: 2a 20 57 72 69 74 65 20 61 20 4e 55 4c 4c 20 69  * Write a NULL i
9fb0: 6e 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 32  nto registers P2
9fc0: 2e 20 20 49 66 20 50 33 20 67 72 65 61 74 65 72  .  If P3 greater
9fd0: 20 74 68 61 6e 20 50 32 2c 20 74 68 65 6e 20 61   than P2, then a
9fe0: 6c 73 6f 20 77 72 69 74 65 0a 2a 2a 20 4e 55 4c  lso write.** NUL
9ff0: 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  L into register 
a000: 50 33 20 61 6e 64 20 65 76 65 72 79 20 72 65 67  P3 and every reg
a010: 69 73 74 65 72 20 69 6e 20 62 65 74 77 65 65 6e  ister in between
a020: 20 50 32 20 61 6e 64 20 50 33 2e 20 20 49 66 20   P2 and P3.  If 
a030: 50 33 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68  P3.** is less th
a040: 61 6e 20 50 32 20 28 74 79 70 69 63 61 6c 6c 79  an P2 (typically
a050: 20 50 33 20 69 73 20 7a 65 72 6f 29 20 74 68 65   P3 is zero) the
a060: 6e 20 6f 6e 6c 79 20 72 65 67 69 73 74 65 72 20  n only register 
a070: 50 32 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20  P2 is.** set to 
a080: 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  NULL..**.** If t
a090: 68 65 20 50 31 20 76 61 6c 75 65 20 69 73 20 6e  he P1 value is n
a0a0: 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 6c  on-zero, then al
a0b0: 73 6f 20 73 65 74 20 74 68 65 20 4d 45 4d 5f 43  so set the MEM_C
a0c0: 6c 65 61 72 65 64 20 66 6c 61 67 20 73 6f 20 74  leared flag so t
a0d0: 68 61 74 0a 2a 2a 20 4e 55 4c 4c 20 76 61 6c 75  hat.** NULL valu
a0e0: 65 73 20 77 69 6c 6c 20 6e 6f 74 20 63 6f 6d 70  es will not comp
a0f0: 61 72 65 20 65 71 75 61 6c 20 65 76 65 6e 20 69  are equal even i
a100: 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  f SQLITE_NULLEQ 
a110: 69 73 20 73 65 74 20 6f 6e 0a 2a 2a 20 4f 50 5f  is set on.** OP_
a120: 4e 65 20 6f 72 20 4f 50 5f 45 71 2e 0a 2a 2f 0a  Ne or OP_Eq..*/.
a130: 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20  case OP_Null: { 
a140: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
a150: 32 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 0a  2 */.  int cnt;.
a160: 20 20 75 31 36 20 6e 75 6c 6c 46 6c 61 67 3b 0a    u16 nullFlag;.
a170: 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
a180: 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
a190: 0a 20 20 63 6e 74 20 3d 20 70 4f 70 2d 3e 70 33  .  cnt = pOp->p3
a1a0: 2d 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65  -pOp->p2;.  asse
a1b0: 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d  rt( pOp->p3<=(p-
a1c0: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
a1d0: 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 2d  rsor) );.  pOut-
a1e0: 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c 46 6c 61  >flags = nullFla
a1f0: 67 20 3d 20 70 4f 70 2d 3e 70 31 20 3f 20 28 4d  g = pOp->p1 ? (M
a200: 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 43 6c 65 61  EM_Null|MEM_Clea
a210: 72 65 64 29 20 3a 20 4d 45 4d 5f 4e 75 6c 6c 3b  red) : MEM_Null;
a220: 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 30 3b 0a  .  pOut->n = 0;.
a230: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
a240: 42 55 47 0a 20 20 70 4f 75 74 2d 3e 75 54 65 6d  BUG.  pOut->uTem
a250: 70 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20  p = 0;.#endif.  
a260: 77 68 69 6c 65 28 20 63 6e 74 3e 30 20 29 7b 0a  while( cnt>0 ){.
a270: 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20      pOut++;.    
a280: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
a290: 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 73  (p, pOut);.    s
a2a0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
a2b0: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20  Null(pOut);.    
a2c0: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75  pOut->flags = nu
a2d0: 6c 6c 46 6c 61 67 3b 0a 20 20 20 20 70 4f 75 74  llFlag;.    pOut
a2e0: 2d 3e 6e 20 3d 20 30 3b 0a 20 20 20 20 63 6e 74  ->n = 0;.    cnt
a2f0: 2d 2d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  --;.  }.  break;
a300: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
a310: 6f 66 74 4e 75 6c 6c 20 50 31 20 2a 20 2a 20 2a  oftNull P1 * * *
a320: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
a330: 72 5b 50 31 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a  r[P1]=NULL.**.**
a340: 20 53 65 74 20 72 65 67 69 73 74 65 72 20 50 31   Set register P1
a350: 20 74 6f 20 68 61 76 65 20 74 68 65 20 76 61 6c   to have the val
a360: 75 65 20 4e 55 4c 4c 20 61 73 20 73 65 65 6e 20  ue NULL as seen 
a370: 62 79 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65  by the OP_MakeRe
a380: 63 6f 72 64 0a 2a 2a 20 69 6e 73 74 72 75 63 74  cord.** instruct
a390: 69 6f 6e 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20  ion, but do not 
a3a0: 66 72 65 65 20 61 6e 79 20 73 74 72 69 6e 67 20  free any string 
a3b0: 6f 72 20 62 6c 6f 62 20 6d 65 6d 6f 72 79 20 61  or blob memory a
a3c0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a 2a  ssociated with.*
a3d0: 2a 20 74 68 65 20 72 65 67 69 73 74 65 72 2c 20  * the register, 
a3e0: 73 6f 20 74 68 61 74 20 69 66 20 74 68 65 20 76  so that if the v
a3f0: 61 6c 75 65 20 77 61 73 20 61 20 73 74 72 69 6e  alue was a strin
a400: 67 20 6f 72 20 62 6c 6f 62 20 74 68 61 74 20 77  g or blob that w
a410: 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79  as.** previously
a420: 20 63 6f 70 69 65 64 20 75 73 69 6e 67 20 4f 50   copied using OP
a430: 5f 53 43 6f 70 79 2c 20 74 68 65 20 63 6f 70 69  _SCopy, the copi
a440: 65 73 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75 65  es will continue
a450: 20 74 6f 20 62 65 20 76 61 6c 69 64 2e 0a 2a 2f   to be valid..*/
a460: 0a 63 61 73 65 20 4f 50 5f 53 6f 66 74 4e 75 6c  .case OP_SoftNul
a470: 6c 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  l: {.  assert( p
a480: 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d  Op->p1>0 && pOp-
a490: 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p1<=(p->nMem+1 
a4a0: 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
a4b0: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
a4c0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74  pOp->p1];.  pOut
a4d0: 2d 3e 66 6c 61 67 73 20 3d 20 28 70 4f 75 74 2d  ->flags = (pOut-
a4e0: 3e 66 6c 61 67 73 26 7e 28 4d 45 4d 5f 55 6e 64  >flags&~(MEM_Und
a4f0: 65 66 69 6e 65 64 7c 4d 45 4d 5f 41 66 66 4d 61  efined|MEM_AffMa
a500: 73 6b 29 29 7c 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  sk))|MEM_Null;. 
a510: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
a520: 63 6f 64 65 3a 20 42 6c 6f 62 20 50 31 20 50 32  code: Blob P1 P2
a530: 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
a540: 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 20 28 6c  sis: r[P2]=P4 (l
a550: 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 50 34 20  en=P1).**.** P4 
a560: 70 6f 69 6e 74 73 20 74 6f 20 61 20 62 6c 6f 62  points to a blob
a570: 20 6f 66 20 64 61 74 61 20 50 31 20 62 79 74 65   of data P1 byte
a580: 73 20 6c 6f 6e 67 2e 20 20 53 74 6f 72 65 20 74  s long.  Store t
a590: 68 69 73 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20 72  his.** blob in r
a5a0: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
a5b0: 61 73 65 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20  ase OP_Blob: {  
a5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a5d0: 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73 65 72   out2 */.  asser
a5e0: 74 28 20 70 4f 70 2d 3e 70 31 20 3c 3d 20 53 51  t( pOp->p1 <= SQ
a5f0: 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 20  LITE_MAX_LENGTH 
a600: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  );.  pOut = out2
a610: 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
a620: 70 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  p);.  sqlite3Vdb
a630: 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c  eMemSetStr(pOut,
a640: 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 4f 70 2d   pOp->p4.z, pOp-
a650: 3e 70 31 2c 20 30 2c 20 30 29 3b 0a 20 20 70 4f  >p1, 0, 0);.  pO
a660: 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69  ut->enc = encodi
a670: 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  ng;.  UPDATE_MAX
a680: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
a690: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
a6a0: 4f 70 63 6f 64 65 3a 20 56 61 72 69 61 62 6c 65  Opcode: Variable
a6b0: 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
a6c0: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
a6d0: 3d 70 61 72 61 6d 65 74 65 72 28 50 31 2c 50 34  =parameter(P1,P4
a6e0: 29 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72  ).**.** Transfer
a6f0: 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 62   the values of b
a700: 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72 20 50  ound parameter P
a710: 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  1 into register 
a720: 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  P2.**.** If the 
a730: 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 61 6d  parameter is nam
a740: 65 64 2c 20 74 68 65 6e 20 69 74 73 20 6e 61 6d  ed, then its nam
a750: 65 20 61 70 70 65 61 72 73 20 69 6e 20 50 34 2e  e appears in P4.
a760: 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65  .** The P4 value
a770: 20 69 73 20 75 73 65 64 20 62 79 20 73 71 6c 69   is used by sqli
a780: 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
a790: 65 72 5f 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63 61  er_name()..*/.ca
a7a0: 73 65 20 4f 50 5f 56 61 72 69 61 62 6c 65 3a 20  se OP_Variable: 
a7b0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
a7c0: 6f 75 74 32 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  out2 */.  Mem *p
a7d0: 56 61 72 3b 20 20 20 20 20 20 20 2f 2a 20 56 61  Var;       /* Va
a7e0: 6c 75 65 20 62 65 69 6e 67 20 74 72 61 6e 73 66  lue being transf
a7f0: 65 72 72 65 64 20 2a 2f 0a 0a 20 20 61 73 73 65  erred */..  asse
a800: 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26  rt( pOp->p1>0 &&
a810: 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 56 61   pOp->p1<=p->nVa
a820: 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
a830: 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20 7c 7c 20 70  Op->p4.z==0 || p
a840: 4f 70 2d 3e 70 34 2e 7a 3d 3d 73 71 6c 69 74 65  Op->p4.z==sqlite
a850: 33 56 4c 69 73 74 4e 75 6d 54 6f 4e 61 6d 65 28  3VListNumToName(
a860: 70 2d 3e 70 56 4c 69 73 74 2c 70 4f 70 2d 3e 70  p->pVList,pOp->p
a870: 31 29 20 29 3b 0a 20 20 70 56 61 72 20 3d 20 26  1) );.  pVar = &
a880: 70 2d 3e 61 56 61 72 5b 70 4f 70 2d 3e 70 31 20  p->aVar[pOp->p1 
a890: 2d 20 31 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69  - 1];.  if( sqli
a8a0: 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67  te3VdbeMemTooBig
a8b0: 28 70 56 61 72 29 20 29 7b 0a 20 20 20 20 67 6f  (pVar) ){.    go
a8c0: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
a8d0: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
a8e0: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20 56  Op->p2];.  if( V
a8f0: 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f  dbeMemDynamic(pO
a900: 75 74 29 20 29 20 73 71 6c 69 74 65 33 56 64 62  ut) ) sqlite3Vdb
a910: 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
a920: 29 3b 0a 20 20 6d 65 6d 63 70 79 28 70 4f 75 74  );.  memcpy(pOut
a930: 2c 20 70 56 61 72 2c 20 4d 45 4d 43 45 4c 4c 53  , pVar, MEMCELLS
a940: 49 5a 45 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  IZE);.  pOut->fl
a950: 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 44 79 6e  ags &= ~(MEM_Dyn
a960: 7c 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 70  |MEM_Ephem);.  p
a970: 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  Out->flags |= ME
a980: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 46 72 6f  M_Static|MEM_Fro
a990: 6d 42 69 6e 64 3b 0a 20 20 55 50 44 41 54 45 5f  mBind;.  UPDATE_
a9a0: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
a9b0: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
a9c0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 20  /* Opcode: Move 
a9d0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
a9e0: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 40 50  Synopsis: r[P2@P
a9f0: 33 5d 3d 72 5b 50 31 40 50 33 5d 0a 2a 2a 0a 2a  3]=r[P1@P3].**.*
aa00: 2a 20 4d 6f 76 65 20 74 68 65 20 50 33 20 76 61  * Move the P3 va
aa10: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
aa20: 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 6f 76 65   P1..P1+P3-1 ove
aa30: 72 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74  r into.** regist
aa40: 65 72 73 20 50 32 2e 2e 50 32 2b 50 33 2d 31 2e  ers P2..P2+P3-1.
aa50: 20 20 52 65 67 69 73 74 65 72 73 20 50 31 2e 2e    Registers P1..
aa60: 50 31 2b 50 33 2d 31 20 61 72 65 0a 2a 2a 20 6c  P1+P3-1 are.** l
aa70: 65 66 74 20 68 6f 6c 64 69 6e 67 20 61 20 4e 55  eft holding a NU
aa80: 4c 4c 2e 20 20 49 74 20 69 73 20 61 6e 20 65 72  LL.  It is an er
aa90: 72 6f 72 20 66 6f 72 20 72 65 67 69 73 74 65 72  ror for register
aaa0: 20 72 61 6e 67 65 73 0a 2a 2a 20 50 31 2e 2e 50   ranges.** P1..P
aab0: 31 2b 50 33 2d 31 20 61 6e 64 20 50 32 2e 2e 50  1+P3-1 and P2..P
aac0: 32 2b 50 33 2d 31 20 74 6f 20 6f 76 65 72 6c 61  2+P3-1 to overla
aad0: 70 2e 20 20 49 74 20 69 73 20 61 6e 20 65 72 72  p.  It is an err
aae0: 6f 72 0a 2a 2a 20 66 6f 72 20 50 33 20 74 6f 20  or.** for P3 to 
aaf0: 62 65 20 6c 65 73 73 20 74 68 61 6e 20 31 2e 0a  be less than 1..
ab00: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f 76 65 3a  */.case OP_Move:
ab10: 20 7b 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20   {.  int n;     
ab20: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
ab30: 6f 66 20 72 65 67 69 73 74 65 72 73 20 6c 65 66  of registers lef
ab40: 74 20 74 6f 20 63 6f 70 79 20 2a 2f 0a 20 20 69  t to copy */.  i
ab50: 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20 20 20  nt p1;          
ab60: 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 63  /* Register to c
ab70: 6f 70 79 20 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e  opy from */.  in
ab80: 74 20 70 32 3b 20 20 20 20 20 20 20 20 20 20 2f  t p2;          /
ab90: 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f  * Register to co
aba0: 70 79 20 74 6f 20 2a 2f 0a 0a 20 20 6e 20 3d 20  py to */..  n = 
abb0: 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 31 20 3d 20  pOp->p3;.  p1 = 
abc0: 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20  pOp->p1;.  p2 = 
abd0: 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72  pOp->p2;.  asser
abe0: 74 28 20 6e 3e 30 20 26 26 20 70 31 3e 30 20 26  t( n>0 && p1>0 &
abf0: 26 20 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65  & p2>0 );.  asse
ac00: 72 74 28 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20  rt( p1+n<=p2 || 
ac10: 70 32 2b 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20 70  p2+n<=p1 );..  p
ac20: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b  In1 = &aMem[p1];
ac30: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
ac40: 70 32 5d 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61  p2];.  do{.    a
ac50: 73 73 65 72 74 28 20 70 4f 75 74 3c 3d 26 61 4d  ssert( pOut<=&aM
ac60: 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  em[(p->nMem+1 - 
ac70: 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a  p->nCursor)] );.
ac80: 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31      assert( pIn1
ac90: 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d  <=&aMem[(p->nMem
aca0: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
acb0: 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ] );.    assert(
acc0: 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31   memIsValid(pIn1
acd0: 29 20 29 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75  ) );.    memAbou
ace0: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
acf0: 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  t);.    sqlite3V
ad00: 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f 75 74 2c  dbeMemMove(pOut,
ad10: 20 70 49 6e 31 29 3b 0a 23 69 66 64 65 66 20 53   pIn1);.#ifdef S
ad20: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
ad30: 69 66 28 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79  if( pOut->pScopy
ad40: 46 72 6f 6d 3e 3d 26 61 4d 65 6d 5b 70 31 5d 20  From>=&aMem[p1] 
ad50: 26 26 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46  && pOut->pScopyF
ad60: 72 6f 6d 3c 70 4f 75 74 20 29 7b 0a 20 20 20 20  rom<pOut ){.    
ad70: 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72    pOut->pScopyFr
ad80: 6f 6d 20 2b 3d 20 70 4f 70 2d 3e 70 32 20 2d 20  om += pOp->p2 - 
ad90: 70 31 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  p1;.    }.#endif
ada0: 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c  .    Deephemeral
adb0: 69 7a 65 28 70 4f 75 74 29 3b 0a 20 20 20 20 52  ize(pOut);.    R
adc0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 32  EGISTER_TRACE(p2
add0: 2b 2b 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 70  ++, pOut);.    p
ade0: 49 6e 31 2b 2b 3b 0a 20 20 20 20 70 4f 75 74 2b  In1++;.    pOut+
adf0: 2b 3b 0a 20 20 7d 77 68 69 6c 65 28 20 2d 2d 6e  +;.  }while( --n
ae00: 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   );.  break;.}..
ae10: 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 70 79 20  /* Opcode: Copy 
ae20: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
ae30: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 40 50  Synopsis: r[P2@P
ae40: 33 2b 31 5d 3d 72 5b 50 31 40 50 33 2b 31 5d 0a  3+1]=r[P1@P3+1].
ae50: 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 63 6f 70  **.** Make a cop
ae60: 79 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 50  y of registers P
ae70: 31 2e 2e 50 31 2b 50 33 20 69 6e 74 6f 20 72 65  1..P1+P3 into re
ae80: 67 69 73 74 65 72 73 20 50 32 2e 2e 50 32 2b 50  gisters P2..P2+P
ae90: 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  3..**.** This in
aea0: 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20  struction makes 
aeb0: 61 20 64 65 65 70 20 63 6f 70 79 20 6f 66 20 74  a deep copy of t
aec0: 68 65 20 76 61 6c 75 65 2e 20 20 41 20 64 75 70  he value.  A dup
aed0: 6c 69 63 61 74 65 0a 2a 2a 20 69 73 20 6d 61 64  licate.** is mad
aee0: 65 20 6f 66 20 61 6e 79 20 73 74 72 69 6e 67 20  e of any string 
aef0: 6f 72 20 62 6c 6f 62 20 63 6f 6e 73 74 61 6e 74  or blob constant
af00: 2e 20 20 53 65 65 20 61 6c 73 6f 20 4f 50 5f 53  .  See also OP_S
af10: 43 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  Copy..*/.case OP
af20: 5f 43 6f 70 79 3a 20 7b 0a 20 20 69 6e 74 20 6e  _Copy: {.  int n
af30: 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33  ;..  n = pOp->p3
af40: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
af50: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75  [pOp->p1];.  pOu
af60: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
af70: 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  2];.  assert( pO
af80: 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 77 68  ut!=pIn1 );.  wh
af90: 69 6c 65 28 20 31 20 29 7b 0a 20 20 20 20 6d 65  ile( 1 ){.    me
afa0: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
afb0: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 73 71 6c  , pOut);.    sql
afc0: 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
afd0: 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e  owCopy(pOut, pIn
afe0: 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20  1, MEM_Ephem);. 
aff0: 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a     Deephemeraliz
b000: 65 28 70 4f 75 74 29 3b 0a 23 69 66 64 65 66 20  e(pOut);.#ifdef 
b010: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
b020: 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f   pOut->pScopyFro
b030: 6d 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20  m = 0;.#endif.  
b040: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
b050: 28 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33  (pOp->p2+pOp->p3
b060: 2d 6e 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 69  -n, pOut);.    i
b070: 66 28 20 28 6e 2d 2d 29 3d 3d 30 20 29 20 62 72  f( (n--)==0 ) br
b080: 65 61 6b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b  eak;.    pOut++;
b090: 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d  .    pIn1++;.  }
b0a0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
b0b0: 4f 70 63 6f 64 65 3a 20 53 43 6f 70 79 20 50 31  Opcode: SCopy P1
b0c0: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
b0d0: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 5b 50  opsis: r[P2]=r[P
b0e0: 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20  1].**.** Make a 
b0f0: 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20  shallow copy of 
b100: 72 65 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f  register P1 into
b110: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
b120: 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
b130: 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 73 68 61  tion makes a sha
b140: 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 74 68 65  llow copy of the
b150: 20 76 61 6c 75 65 2e 20 20 49 66 20 74 68 65 20   value.  If the 
b160: 76 61 6c 75 65 0a 2a 2a 20 69 73 20 61 20 73 74  value.** is a st
b170: 72 69 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 74 68  ring or blob, th
b180: 65 6e 20 74 68 65 20 63 6f 70 79 20 69 73 20 6f  en the copy is o
b190: 6e 6c 79 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  nly a pointer to
b1a0: 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c   the.** original
b1b0: 20 61 6e 64 20 68 65 6e 63 65 20 69 66 20 74 68   and hence if th
b1c0: 65 20 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e 67  e original chang
b1d0: 65 73 20 73 6f 20 77 69 6c 6c 20 74 68 65 20 63  es so will the c
b1e0: 6f 70 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20 69  opy..** Worse, i
b1f0: 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 69  f the original i
b200: 73 20 64 65 61 6c 6c 6f 63 61 74 65 64 2c 20 74  s deallocated, t
b210: 68 65 20 63 6f 70 79 20 62 65 63 6f 6d 65 73 20  he copy becomes 
b220: 69 6e 76 61 6c 69 64 2e 0a 2a 2a 20 54 68 75 73  invalid..** Thus
b230: 20 74 68 65 20 70 72 6f 67 72 61 6d 20 6d 75 73   the program mus
b240: 74 20 67 75 61 72 61 6e 74 65 65 20 74 68 61 74  t guarantee that
b250: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 77 69   the original wi
b260: 6c 6c 20 6e 6f 74 20 63 68 61 6e 67 65 0a 2a 2a  ll not change.**
b270: 20 64 75 72 69 6e 67 20 74 68 65 20 6c 69 66 65   during the life
b280: 74 69 6d 65 20 6f 66 20 74 68 65 20 63 6f 70 79  time of the copy
b290: 2e 20 20 55 73 65 20 4f 50 5f 43 6f 70 79 20 74  .  Use OP_Copy t
b2a0: 6f 20 6d 61 6b 65 20 61 20 63 6f 6d 70 6c 65 74  o make a complet
b2b0: 65 0a 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61  e.** copy..*/.ca
b2c0: 73 65 20 4f 50 5f 53 43 6f 70 79 3a 20 7b 20 20  se OP_SCopy: {  
b2d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
b2e0: 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  2 */.  pIn1 = &a
b2f0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
b300: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
b310: 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
b320: 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20   pOut!=pIn1 );. 
b330: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
b340: 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c  hallowCopy(pOut,
b350: 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d   pIn1, MEM_Ephem
b360: 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
b370: 5f 44 45 42 55 47 0a 20 20 70 4f 75 74 2d 3e 70  _DEBUG.  pOut->p
b380: 53 63 6f 70 79 46 72 6f 6d 20 3d 20 70 49 6e 31  ScopyFrom = pIn1
b390: 3b 0a 20 20 70 4f 75 74 2d 3e 6d 53 63 6f 70 79  ;.  pOut->mScopy
b3a0: 46 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c  Flags = pIn1->fl
b3b0: 61 67 73 3b 0a 23 65 6e 64 69 66 0a 20 20 62 72  ags;.#endif.  br
b3c0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
b3d0: 65 3a 20 49 6e 74 43 6f 70 79 20 50 31 20 50 32  e: IntCopy P1 P2
b3e0: 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
b3f0: 69 73 3a 20 72 5b 50 32 5d 3d 72 5b 50 31 5d 0a  is: r[P2]=r[P1].
b400: 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20 74  **.** Transfer t
b410: 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  he integer value
b420: 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73 74 65   held in registe
b430: 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74  r P1 into regist
b440: 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  er P2..**.** Thi
b450: 73 20 69 73 20 61 6e 20 6f 70 74 69 6d 69 7a 65  s is an optimize
b460: 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 53 43 6f  d version of SCo
b470: 70 79 20 74 68 61 74 20 77 6f 72 6b 73 20 6f 6e  py that works on
b480: 6c 79 20 66 6f 72 20 69 6e 74 65 67 65 72 0a 2a  ly for integer.*
b490: 2a 20 76 61 6c 75 65 73 2e 0a 2a 2f 0a 63 61 73  * values..*/.cas
b4a0: 65 20 4f 50 5f 49 6e 74 43 6f 70 79 3a 20 7b 20  e OP_IntCopy: { 
b4b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
b4c0: 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  t2 */.  pIn1 = &
b4d0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
b4e0: 20 61 73 73 65 72 74 28 20 28 70 49 6e 31 2d 3e   assert( (pIn1->
b4f0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
b500: 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  !=0 );.  pOut = 
b510: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
b520: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
b530: 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 70  SetInt64(pOut, p
b540: 49 6e 31 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65  In1->u.i);.  bre
b550: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
b560: 3a 20 52 65 73 75 6c 74 52 6f 77 20 50 31 20 50  : ResultRow P1 P
b570: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
b580: 73 69 73 3a 20 6f 75 74 70 75 74 3d 72 5b 50 31  sis: output=r[P1
b590: 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72  @P2].**.** The r
b5a0: 65 67 69 73 74 65 72 73 20 50 31 20 74 68 72 6f  egisters P1 thro
b5b0: 75 67 68 20 50 31 2b 50 32 2d 31 20 63 6f 6e 74  ugh P1+P2-1 cont
b5c0: 61 69 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77  ain a single row
b5d0: 20 6f 66 0a 2a 2a 20 72 65 73 75 6c 74 73 2e 20   of.** results. 
b5e0: 54 68 69 73 20 6f 70 63 6f 64 65 20 63 61 75 73  This opcode caus
b5f0: 65 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73  es the sqlite3_s
b600: 74 65 70 28 29 20 63 61 6c 6c 20 74 6f 20 74 65  tep() call to te
b610: 72 6d 69 6e 61 74 65 0a 2a 2a 20 77 69 74 68 20  rminate.** with 
b620: 61 6e 20 53 51 4c 49 54 45 5f 52 4f 57 20 72 65  an SQLITE_ROW re
b630: 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 69 74  turn code and it
b640: 20 73 65 74 73 20 75 70 20 74 68 65 20 73 71 6c   sets up the sql
b650: 69 74 65 33 5f 73 74 6d 74 0a 2a 2a 20 73 74 72  ite3_stmt.** str
b660: 75 63 74 75 72 65 20 74 6f 20 70 72 6f 76 69 64  ucture to provid
b670: 65 20 61 63 63 65 73 73 20 74 6f 20 74 68 65 20  e access to the 
b680: 72 28 50 31 29 2e 2e 72 28 50 31 2b 50 32 2d 31  r(P1)..r(P1+P2-1
b690: 29 20 76 61 6c 75 65 73 20 61 73 0a 2a 2a 20 74  ) values as.** t
b6a0: 68 65 20 72 65 73 75 6c 74 20 72 6f 77 2e 0a 2a  he result row..*
b6b0: 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 75 6c 74  /.case OP_Result
b6c0: 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d  Row: {.  Mem *pM
b6d0: 65 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 61  em;.  int i;.  a
b6e0: 73 73 65 72 74 28 20 70 2d 3e 6e 52 65 73 43 6f  ssert( p->nResCo
b6f0: 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29 3b  lumn==pOp->p2 );
b700: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
b710: 70 31 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74  p1>0 );.  assert
b720: 28 20 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70  ( pOp->p1+pOp->p
b730: 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  2<=(p->nMem+1 - 
b740: 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
b750: 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73 20 73  ..  /* If this s
b760: 74 61 74 65 6d 65 6e 74 20 68 61 73 20 76 69 6f  tatement has vio
b770: 6c 61 74 65 64 20 69 6d 6d 65 64 69 61 74 65 20  lated immediate 
b780: 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
b790: 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20 20 2a 2a  traints, do.  **
b7a0: 20 6e 6f 74 20 72 65 74 75 72 6e 20 74 68 65 20   not return the 
b7b0: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 6d  number of rows m
b7c0: 6f 64 69 66 69 65 64 2e 20 41 6e 64 20 64 6f 20  odified. And do 
b7d0: 6e 6f 74 20 52 45 4c 45 41 53 45 20 74 68 65 20  not RELEASE the 
b7e0: 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a 2a 20 74  statement.  ** t
b7f0: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 74 20 6e  ransaction. It n
b800: 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65  eeds to be rolle
b810: 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20 20 69 66  d back.  */.  if
b820: 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 28 72 63  ( SQLITE_OK!=(rc
b830: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68   = sqlite3VdbeCh
b840: 65 63 6b 46 6b 28 70 2c 20 30 29 29 20 29 7b 0a  eckFk(p, 0)) ){.
b850: 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
b860: 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f 75  flags&SQLITE_Cou
b870: 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20 20 61 73  ntRows );.    as
b880: 73 65 72 74 28 20 70 2d 3e 75 73 65 73 53 74 6d  sert( p->usesStm
b890: 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20 20 20 20  tJournal );.    
b8a0: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
b8b0: 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20  o_error;.  }..  
b8c0: 2f 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  /* If the SQLITE
b8d0: 5f 43 6f 75 6e 74 52 6f 77 73 20 66 6c 61 67 20  _CountRows flag 
b8e0: 69 73 20 73 65 74 20 69 6e 20 73 71 6c 69 74 65  is set in sqlite
b8f0: 33 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68  3.flags mask, th
b900: 65 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20 73 74 61  en .  ** DML sta
b910: 74 65 6d 65 6e 74 73 20 69 6e 76 6f 6b 65 20 74  tements invoke t
b920: 68 69 73 20 6f 70 63 6f 64 65 20 74 6f 20 72 65  his opcode to re
b930: 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  turn the number 
b940: 6f 66 20 72 6f 77 73 20 0a 20 20 2a 2a 20 6d 6f  of rows .  ** mo
b950: 64 69 66 69 65 64 20 74 6f 20 74 68 65 20 75 73  dified to the us
b960: 65 72 2e 20 54 68 69 73 20 69 73 20 74 68 65 20  er. This is the 
b970: 6f 6e 6c 79 20 77 61 79 20 74 68 61 74 20 61 20  only way that a 
b980: 56 4d 20 74 68 61 74 0a 20 20 2a 2a 20 6f 70 65  VM that.  ** ope
b990: 6e 73 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74  ns a statement t
b9a0: 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 69  ransaction may i
b9b0: 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64  nvoke this opcod
b9c0: 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20  e..  **.  ** In 
b9d0: 63 61 73 65 20 74 68 69 73 20 69 73 20 73 75 63  case this is suc
b9e0: 68 20 61 20 73 74 61 74 65 6d 65 6e 74 2c 20 63  h a statement, c
b9f0: 6c 6f 73 65 20 61 6e 79 20 73 74 61 74 65 6d 65  lose any stateme
ba00: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20  nt transaction. 
ba10: 20 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 74 68   ** opened by th
ba20: 69 73 20 56 4d 20 62 65 66 6f 72 65 20 72 65 74  is VM before ret
ba30: 75 72 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c 20 74  urning control t
ba40: 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68 69 73  o the user. This
ba50: 20 69 73 20 74 6f 0a 20 20 2a 2a 20 65 6e 73 75   is to.  ** ensu
ba60: 72 65 20 74 68 61 74 20 73 74 61 74 65 6d 65 6e  re that statemen
ba70: 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61  t-transactions a
ba80: 72 65 20 61 6c 77 61 79 73 20 6e 65 73 74 65 64  re always nested
ba90: 2c 20 6e 6f 74 20 6f 76 65 72 6c 61 70 70 69 6e  , not overlappin
baa0: 67 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 6f  g..  ** If the o
bab0: 70 65 6e 20 73 74 61 74 65 6d 65 6e 74 2d 74 72  pen statement-tr
bac0: 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74  ansaction is not
bad0: 20 63 6c 6f 73 65 64 20 68 65 72 65 2c 20 74 68   closed here, th
bae0: 65 6e 20 74 68 65 20 75 73 65 72 0a 20 20 2a 2a  en the user.  **
baf0: 20 6d 61 79 20 73 74 65 70 20 61 6e 6f 74 68 65   may step anothe
bb00: 72 20 56 4d 20 74 68 61 74 20 6f 70 65 6e 73 20  r VM that opens 
bb10: 69 74 73 20 6f 77 6e 20 73 74 61 74 65 6d 65 6e  its own statemen
bb20: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 54  t transaction. T
bb30: 68 69 73 0a 20 20 2a 2a 20 6d 61 79 20 6c 65 61  his.  ** may lea
bb40: 64 20 74 6f 20 6f 76 65 72 6c 61 70 70 69 6e 67  d to overlapping
bb50: 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
bb60: 61 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20  actions..  **.  
bb70: 2a 2a 20 54 68 65 20 73 74 61 74 65 6d 65 6e 74  ** The statement
bb80: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
bb90: 6e 65 76 65 72 20 61 20 74 6f 70 2d 6c 65 76 65  never a top-leve
bba0: 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20  l transaction.  
bbb0: 48 65 6e 63 65 0a 20 20 2a 2a 20 74 68 65 20 52  Hence.  ** the R
bbc0: 45 4c 45 41 53 45 20 63 61 6c 6c 20 62 65 6c 6f  ELEASE call belo
bbd0: 77 20 63 61 6e 20 6e 65 76 65 72 20 66 61 69 6c  w can never fail
bbe0: 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ..  */.  assert(
bbf0: 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d   p->iStatement==
bc00: 30 20 7c 7c 20 64 62 2d 3e 66 6c 61 67 73 26 53  0 || db->flags&S
bc10: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
bc20: 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
bc30: 33 56 64 62 65 43 6c 6f 73 65 53 74 61 74 65 6d  3VdbeCloseStatem
bc40: 65 6e 74 28 70 2c 20 53 41 56 45 50 4f 49 4e 54  ent(p, SAVEPOINT
bc50: 5f 52 45 4c 45 41 53 45 29 3b 0a 20 20 61 73 73  _RELEASE);.  ass
bc60: 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
bc70: 4f 4b 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76 61  OK );..  /* Inva
bc80: 6c 69 64 61 74 65 20 61 6c 6c 20 65 70 68 65 6d  lidate all ephem
bc90: 65 72 61 6c 20 63 75 72 73 6f 72 20 72 6f 77 20  eral cursor row 
bca0: 63 61 63 68 65 73 20 2a 2f 0a 20 20 70 2d 3e 63  caches */.  p->c
bcb0: 61 63 68 65 43 74 72 20 3d 20 28 70 2d 3e 63 61  acheCtr = (p->ca
bcc0: 63 68 65 43 74 72 20 2b 20 32 29 7c 31 3b 0a 0a  cheCtr + 2)|1;..
bcd0: 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74    /* Make sure t
bce0: 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68  he results of th
bcf0: 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 61 72  e current row ar
bd00: 65 20 5c 30 30 30 20 74 65 72 6d 69 6e 61 74 65  e \000 terminate
bd10: 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61 76 65 20  d.  ** and have 
bd20: 61 6e 20 61 73 73 69 67 6e 65 64 20 74 79 70 65  an assigned type
bd30: 2e 20 20 54 68 65 20 72 65 73 75 6c 74 73 20 61  .  The results a
bd40: 72 65 20 64 65 2d 65 70 68 65 6d 65 72 61 6c 69  re de-ephemerali
bd50: 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61 20 73 69  zed as.  ** a si
bd60: 64 65 20 65 66 66 65 63 74 2e 0a 20 20 2a 2f 0a  de effect..  */.
bd70: 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70 52 65 73    pMem = p->pRes
bd80: 75 6c 74 53 65 74 20 3d 20 26 61 4d 65 6d 5b 70  ultSet = &aMem[p
bd90: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 69  Op->p1];.  for(i
bda0: 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32 3b 20 69  =0; i<pOp->p2; i
bdb0: 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ++){.    assert(
bdc0: 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 70 4d 65   memIsValid(&pMe
bdd0: 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20 44 65 65  m[i]) );.    Dee
bde0: 70 68 65 6d 65 72 61 6c 69 7a 65 28 26 70 4d 65  phemeralize(&pMe
bdf0: 6d 5b 69 5d 29 3b 0a 20 20 20 20 61 73 73 65 72  m[i]);.    asser
be00: 74 28 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67  t( (pMem[i].flag
be10: 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d 29 3d 3d  s & MEM_Ephem)==
be20: 30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c  0.            ||
be30: 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20   (pMem[i].flags 
be40: 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
be50: 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  lob))==0 );.    
be60: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75  sqlite3VdbeMemNu
be70: 6c 54 65 72 6d 69 6e 61 74 65 28 26 70 4d 65 6d  lTerminate(&pMem
be80: 5b 69 5d 29 3b 0a 20 20 20 20 52 45 47 49 53 54  [i]);.    REGIST
be90: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
bea0: 2b 69 2c 20 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20  +i, &pMem[i]);. 
beb0: 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c   }.  if( db->mal
bec0: 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f  locFailed ) goto
bed0: 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20 69 66 28 20   no_mem;..  if( 
bee0: 64 62 2d 3e 6d 54 72 61 63 65 20 26 20 53 51 4c  db->mTrace & SQL
bef0: 49 54 45 5f 54 52 41 43 45 5f 52 4f 57 20 29 7b  ITE_TRACE_ROW ){
bf00: 0a 20 20 20 20 64 62 2d 3e 78 54 72 61 63 65 28  .    db->xTrace(
bf10: 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 52 4f 57  SQLITE_TRACE_ROW
bf20: 2c 20 64 62 2d 3e 70 54 72 61 63 65 41 72 67 2c  , db->pTraceArg,
bf30: 20 70 2c 20 30 29 3b 0a 20 20 7d 0a 0a 20 20 2f   p, 0);.  }..  /
bf40: 2a 20 52 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  * Return SQLITE_
bf50: 52 4f 57 0a 20 20 2a 2f 0a 20 20 70 2d 3e 70 63  ROW.  */.  p->pc
bf60: 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61   = (int)(pOp - a
bf70: 4f 70 29 20 2b 20 31 3b 0a 20 20 72 63 20 3d 20  Op) + 1;.  rc = 
bf80: 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20 67 6f  SQLITE_ROW;.  go
bf90: 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
bfa0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
bfb0: 6e 63 61 74 20 50 31 20 50 32 20 50 33 20 2a 20  ncat P1 P2 P3 * 
bfc0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
bfd0: 5b 50 33 5d 3d 72 5b 50 32 5d 2b 72 5b 50 31 5d  [P3]=r[P2]+r[P1]
bfe0: 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 74  .**.** Add the t
bff0: 65 78 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ext in register 
c000: 50 31 20 6f 6e 74 6f 20 74 68 65 20 65 6e 64 20  P1 onto the end 
c010: 6f 66 20 74 68 65 20 74 65 78 74 20 69 6e 0a 2a  of the text in.*
c020: 2a 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  * register P2 an
c030: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
c040: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
c050: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
c060: 74 68 65 20 50 31 20 6f 72 20 50 32 20 74 65 78  the P1 or P2 tex
c070: 74 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20  t are NULL then 
c080: 73 74 6f 72 65 20 4e 55 4c 4c 20 69 6e 20 50 33  store NULL in P3
c090: 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20 3d 20 50  ..**.**   P3 = P
c0a0: 32 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74  2 || P1.**.** It
c0b0: 20 69 73 20 69 6c 6c 65 67 61 6c 20 66 6f 72 20   is illegal for 
c0c0: 50 31 20 61 6e 64 20 50 33 20 74 6f 20 62 65 20  P1 and P3 to be 
c0d0: 74 68 65 20 73 61 6d 65 20 72 65 67 69 73 74 65  the same registe
c0e0: 72 2e 20 53 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a  r. Sometimes,.**
c0f0: 20 69 66 20 50 33 20 69 73 20 74 68 65 20 73 61   if P3 is the sa
c100: 6d 65 20 72 65 67 69 73 74 65 72 20 61 73 20 50  me register as P
c110: 32 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  2, the implement
c120: 61 74 69 6f 6e 20 69 73 20 61 62 6c 65 0a 2a 2a  ation is able.**
c130: 20 74 6f 20 61 76 6f 69 64 20 61 20 6d 65 6d 63   to avoid a memc
c140: 70 79 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  py()..*/.case OP
c150: 5f 43 6f 6e 63 61 74 3a 20 7b 20 20 20 20 20 20  _Concat: {      
c160: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
c170: 54 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e 31 2c 20  TK_CONCAT, in1, 
c180: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69  in2, out3 */.  i
c190: 36 34 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20  64 nByte;       
c1a0: 20 20 20 2f 2a 20 54 6f 74 61 6c 20 73 69 7a 65     /* Total size
c1b0: 20 6f 66 20 74 68 65 20 6f 75 74 70 75 74 20 73   of the output s
c1c0: 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 2a 2f  tring or blob */
c1d0: 0a 20 20 75 31 36 20 66 6c 61 67 73 31 3b 20 20  .  u16 flags1;  
c1e0: 20 20 20 20 20 20 20 2f 2a 20 49 6e 69 74 69 61         /* Initia
c1f0: 6c 20 66 6c 61 67 73 20 66 6f 72 20 50 31 20 2a  l flags for P1 *
c200: 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 32 3b 20  /.  u16 flags2; 
c210: 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 69 74 69          /* Initi
c220: 61 6c 20 66 6c 61 67 73 20 66 6f 72 20 50 32 20  al flags for P2 
c230: 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  */..  pIn1 = &aM
c240: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
c250: 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
c260: 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  >p2];.  pOut = &
c270: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
c280: 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 31 3d   testcase( pIn1=
c290: 3d 70 49 6e 32 20 29 3b 0a 20 20 74 65 73 74 63  =pIn2 );.  testc
c2a0: 61 73 65 28 20 70 4f 75 74 3d 3d 70 49 6e 32 20  ase( pOut==pIn2 
c2b0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  );.  assert( pIn
c2c0: 31 21 3d 70 4f 75 74 20 29 3b 0a 20 20 66 6c 61  1!=pOut );.  fla
c2d0: 67 73 31 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67  gs1 = pIn1->flag
c2e0: 73 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 66  s;.  testcase( f
c2f0: 6c 61 67 73 31 20 26 20 4d 45 4d 5f 4e 75 6c 6c  lags1 & MEM_Null
c300: 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
c310: 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn2->flags & ME
c320: 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 69 66 28 20  M_Null );.  if( 
c330: 28 66 6c 61 67 73 31 20 7c 20 70 49 6e 32 2d 3e  (flags1 | pIn2->
c340: 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c  flags) & MEM_Nul
c350: 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  l ){.    sqlite3
c360: 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
c370: 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  Out);.    break;
c380: 0a 20 20 7d 0a 20 20 69 66 28 20 28 66 6c 61 67  .  }.  if( (flag
c390: 73 31 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  s1 & (MEM_Str|ME
c3a0: 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 7b 0a 20  M_Blob))==0 ){. 
c3b0: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64     if( sqlite3Vd
c3c0: 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70  beMemStringify(p
c3d0: 49 6e 31 2c 65 6e 63 6f 64 69 6e 67 2c 30 29 20  In1,encoding,0) 
c3e0: 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
c3f0: 20 20 20 66 6c 61 67 73 31 20 3d 20 70 49 6e 31     flags1 = pIn1
c400: 2d 3e 66 6c 61 67 73 20 26 20 7e 4d 45 4d 5f 53  ->flags & ~MEM_S
c410: 74 72 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  tr;.  }else if( 
c420: 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 5a 65  (flags1 & MEM_Ze
c430: 72 6f 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 66  ro)!=0 ){.    if
c440: 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
c450: 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29  ExpandBlob(pIn1)
c460: 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
c470: 20 20 20 20 66 6c 61 67 73 31 20 3d 20 70 49 6e      flags1 = pIn
c480: 31 2d 3e 66 6c 61 67 73 20 26 20 7e 4d 45 4d 5f  1->flags & ~MEM_
c490: 53 74 72 3b 0a 20 20 7d 0a 20 20 66 6c 61 67 73  Str;.  }.  flags
c4a0: 32 20 3d 20 70 49 6e 32 2d 3e 66 6c 61 67 73 3b  2 = pIn2->flags;
c4b0: 0a 20 20 69 66 28 20 28 66 6c 61 67 73 32 20 26  .  if( (flags2 &
c4c0: 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c   (MEM_Str|MEM_Bl
c4d0: 6f 62 29 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69  ob))==0 ){.    i
c4e0: 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
c4f0: 6d 53 74 72 69 6e 67 69 66 79 28 70 49 6e 32 2c  mStringify(pIn2,
c500: 65 6e 63 6f 64 69 6e 67 2c 30 29 20 29 20 67 6f  encoding,0) ) go
c510: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 66  to no_mem;.    f
c520: 6c 61 67 73 32 20 3d 20 70 49 6e 32 2d 3e 66 6c  lags2 = pIn2->fl
c530: 61 67 73 20 26 20 7e 4d 45 4d 5f 53 74 72 3b 0a  ags & ~MEM_Str;.
c540: 20 20 7d 65 6c 73 65 20 69 66 28 20 28 66 6c 61    }else if( (fla
c550: 67 73 32 20 26 20 4d 45 4d 5f 5a 65 72 6f 29 21  gs2 & MEM_Zero)!
c560: 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 73 71  =0 ){.    if( sq
c570: 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61  lite3VdbeMemExpa
c580: 6e 64 42 6c 6f 62 28 70 49 6e 32 29 20 29 20 67  ndBlob(pIn2) ) g
c590: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
c5a0: 66 6c 61 67 73 32 20 3d 20 70 49 6e 32 2d 3e 66  flags2 = pIn2->f
c5b0: 6c 61 67 73 20 26 20 7e 4d 45 4d 5f 53 74 72 3b  lags & ~MEM_Str;
c5c0: 0a 20 20 7d 0a 20 20 6e 42 79 74 65 20 3d 20 70  .  }.  nByte = p
c5d0: 49 6e 31 2d 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e  In1->n + pIn2->n
c5e0: 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 3e 64 62  ;.  if( nByte>db
c5f0: 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
c600: 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
c610: 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
c620: 67 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c  g;.  }.  if( sql
c630: 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28  ite3VdbeMemGrow(
c640: 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65  pOut, (int)nByte
c650: 2b 33 2c 20 70 4f 75 74 3d 3d 70 49 6e 32 29 20  +3, pOut==pIn2) 
c660: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  ){.    goto no_m
c670: 65 6d 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74  em;.  }.  MemSet
c680: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
c690: 45 4d 5f 53 74 72 29 3b 0a 20 20 69 66 28 20 70  EM_Str);.  if( p
c6a0: 4f 75 74 21 3d 70 49 6e 32 20 29 7b 0a 20 20 20  Out!=pIn2 ){.   
c6b0: 20 6d 65 6d 63 70 79 28 70 4f 75 74 2d 3e 7a 2c   memcpy(pOut->z,
c6c0: 20 70 49 6e 32 2d 3e 7a 2c 20 70 49 6e 32 2d 3e   pIn2->z, pIn2->
c6d0: 6e 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  n);.    assert( 
c6e0: 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn2->flags & M
c6f0: 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61 67  EM_Dyn) == (flag
c700: 73 32 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b  s2 & MEM_Dyn) );
c710: 0a 20 20 20 20 70 49 6e 32 2d 3e 66 6c 61 67 73  .    pIn2->flags
c720: 20 3d 20 66 6c 61 67 73 32 3b 0a 20 20 7d 0a 20   = flags2;.  }. 
c730: 20 6d 65 6d 63 70 79 28 26 70 4f 75 74 2d 3e 7a   memcpy(&pOut->z
c740: 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d  [pIn2->n], pIn1-
c750: 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20  >z, pIn1->n);.  
c760: 61 73 73 65 72 74 28 20 28 70 49 6e 31 2d 3e 66  assert( (pIn1->f
c770: 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20  lags & MEM_Dyn) 
c780: 3d 3d 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d  == (flags1 & MEM
c790: 5f 44 79 6e 29 20 29 3b 0a 20 20 70 49 6e 31 2d  _Dyn) );.  pIn1-
c7a0: 3e 66 6c 61 67 73 20 3d 20 66 6c 61 67 73 31 3b  >flags = flags1;
c7b0: 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65  .  pOut->z[nByte
c7c0: 5d 3d 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e  ]=0;.  pOut->z[n
c7d0: 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a 20 20 70  Byte+1] = 0;.  p
c7e0: 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 2b 32 5d 20  Out->z[nByte+2] 
c7f0: 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  = 0;.  pOut->fla
c800: 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a  gs |= MEM_Term;.
c810: 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74    pOut->n = (int
c820: 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e  )nByte;.  pOut->
c830: 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a  enc = encoding;.
c840: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
c850: 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62  BSIZE(pOut);.  b
c860: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
c870: 64 65 3a 20 41 64 64 20 50 31 20 50 32 20 50 33  de: Add P1 P2 P3
c880: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
c890: 3a 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2b 72 5b  : r[P3]=r[P1]+r[
c8a0: 50 32 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68  P2].**.** Add th
c8b0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
c8c0: 74 65 72 20 50 31 20 74 6f 20 74 68 65 20 76 61  ter P1 to the va
c8d0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
c8e0: 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20  P2.** and store 
c8f0: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
c900: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
c910: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
c920: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
c930: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
c940: 20 4f 70 63 6f 64 65 3a 20 4d 75 6c 74 69 70 6c   Opcode: Multipl
c950: 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  y P1 P2 P3 * *.*
c960: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
c970: 5d 3d 72 5b 50 31 5d 2a 72 5b 50 32 5d 0a 2a 2a  ]=r[P1]*r[P2].**
c980: 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74 69 70 6c 79 20  .**.** Multiply 
c990: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
c9a0: 69 73 74 65 72 20 50 31 20 62 79 20 74 68 65 20  ister P1 by the 
c9b0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
c9c0: 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72  r P2.** and stor
c9d0: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
c9e0: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
c9f0: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
ca00: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
ca10: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
ca20: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 75 62 74 72  /* Opcode: Subtr
ca30: 61 63 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  act P1 P2 P3 * *
ca40: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
ca50: 50 33 5d 3d 72 5b 50 32 5d 2d 72 5b 50 31 5d 0a  P3]=r[P2]-r[P1].
ca60: 2a 2a 0a 2a 2a 20 53 75 62 74 72 61 63 74 20 74  **.** Subtract t
ca70: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
ca80: 73 74 65 72 20 50 31 20 66 72 6f 6d 20 74 68 65  ster P1 from the
ca90: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
caa0: 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f  er P2.** and sto
cab0: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
cac0: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
cad0: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
cae0: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
caf0: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
cb00: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 69 76 69  ./* Opcode: Divi
cb10: 64 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  de P1 P2 P3 * *.
cb20: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
cb30: 33 5d 3d 72 5b 50 32 5d 2f 72 5b 50 31 5d 0a 2a  3]=r[P2]/r[P1].*
cb40: 2a 0a 2a 2a 20 44 69 76 69 64 65 20 74 68 65 20  *.** Divide the 
cb50: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
cb60: 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c 75  r P1 by the valu
cb70: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
cb80: 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68  .** and store th
cb90: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
cba0: 73 74 65 72 20 50 33 20 28 50 33 3d 50 32 2f 50  ster P3 (P3=P2/P
cbb0: 31 29 2e 20 49 66 20 74 68 65 20 76 61 6c 75 65  1). If the value
cbc0: 20 69 6e 20 0a 2a 2a 20 72 65 67 69 73 74 65 72   in .** register
cbd0: 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65   P1 is zero, the
cbe0: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
cbf0: 4e 55 4c 4c 2e 20 49 66 20 65 69 74 68 65 72 20  NULL. If either 
cc00: 69 6e 70 75 74 20 69 73 20 0a 2a 2a 20 4e 55 4c  input is .** NUL
cc10: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
cc20: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
cc30: 6f 64 65 3a 20 52 65 6d 61 69 6e 64 65 72 20 50  ode: Remainder P
cc40: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
cc50: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72  ynopsis: r[P3]=r
cc60: 5b 50 32 5d 25 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P2]%r[P1].**.**
cc70: 20 43 6f 6d 70 75 74 65 20 74 68 65 20 72 65 6d   Compute the rem
cc80: 61 69 6e 64 65 72 20 61 66 74 65 72 20 69 6e 74  ainder after int
cc90: 65 67 65 72 20 72 65 67 69 73 74 65 72 20 50 32  eger register P2
cca0: 20 69 73 20 64 69 76 69 64 65 64 20 62 79 20 0a   is divided by .
ccb0: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 61  ** register P1 a
ccc0: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
ccd0: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
cce0: 50 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 76  P3. .** If the v
ccf0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
cd00: 20 50 31 20 69 73 20 7a 65 72 6f 20 74 68 65 20   P1 is zero the 
cd10: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
cd20: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 6f 70 65  ** If either ope
cd30: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68  rand is NULL, th
cd40: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
cd50: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64  ..*/.case OP_Add
cd60: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
cd70: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
cd80: 4b 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32  K_PLUS, in1, in2
cd90: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
cda0: 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 20  P_Subtract:     
cdb0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
cdc0: 20 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e   as TK_MINUS, in
cdd0: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
cde0: 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79  case OP_Multiply
cdf0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  :              /
ce00: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 41  * same as TK_STA
ce10: 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  R, in1, in2, out
ce20: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76  3 */.case OP_Div
ce30: 69 64 65 3a 20 20 20 20 20 20 20 20 20 20 20 20  ide:            
ce40: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
ce50: 4b 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e  K_SLASH, in1, in
ce60: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
ce70: 4f 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20  OP_Remainder: { 
ce80: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
ce90: 65 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31  e as TK_REM, in1
cea0: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in2, out3 */. 
ceb0: 20 75 31 36 20 66 6c 61 67 73 3b 20 20 20 20 20   u16 flags;     
cec0: 20 2f 2a 20 43 6f 6d 62 69 6e 65 64 20 4d 45 4d   /* Combined MEM
ced0: 5f 2a 20 66 6c 61 67 73 20 66 72 6f 6d 20 62 6f  _* flags from bo
cee0: 74 68 20 69 6e 70 75 74 73 20 2a 2f 0a 20 20 75  th inputs */.  u
cef0: 31 36 20 74 79 70 65 31 3b 20 20 20 20 20 20 2f  16 type1;      /
cf00: 2a 20 4e 75 6d 65 72 69 63 20 74 79 70 65 20 6f  * Numeric type o
cf10: 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a  f left operand *
cf20: 2f 0a 20 20 75 31 36 20 74 79 70 65 32 3b 20 20  /.  u16 type2;  
cf30: 20 20 20 20 2f 2a 20 4e 75 6d 65 72 69 63 20 74      /* Numeric t
cf40: 79 70 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65  ype of right ope
cf50: 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20 69 41  rand */.  i64 iA
cf60: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74  ;         /* Int
cf70: 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20 6c 65  eger value of le
cf80: 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ft operand */.  
cf90: 69 36 34 20 69 42 3b 20 20 20 20 20 20 20 20 20  i64 iB;         
cfa0: 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65  /* Integer value
cfb0: 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e   of right operan
cfc0: 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 41  d */.  double rA
cfd0: 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76  ;      /* Real v
cfe0: 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f 70 65  alue of left ope
cff0: 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65  rand */.  double
d000: 20 72 42 3b 20 20 20 20 20 20 2f 2a 20 52 65 61   rB;      /* Rea
d010: 6c 20 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74  l value of right
d020: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 0a 20 20 70   operand */..  p
d030: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
d040: 3e 70 31 5d 3b 0a 20 20 74 79 70 65 31 20 3d 20  >p1];.  type1 = 
d050: 6e 75 6d 65 72 69 63 54 79 70 65 28 70 49 6e 31  numericType(pIn1
d060: 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  );.  pIn2 = &aMe
d070: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 74 79  m[pOp->p2];.  ty
d080: 70 65 32 20 3d 20 6e 75 6d 65 72 69 63 54 79 70  pe2 = numericTyp
d090: 65 28 70 49 6e 32 29 3b 0a 20 20 70 4f 75 74 20  e(pIn2);.  pOut 
d0a0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
d0b0: 3b 0a 20 20 66 6c 61 67 73 20 3d 20 70 49 6e 31  ;.  flags = pIn1
d0c0: 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e  ->flags | pIn2->
d0d0: 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 74 79  flags;.  if( (ty
d0e0: 70 65 31 20 26 20 74 79 70 65 32 20 26 20 4d 45  pe1 & type2 & ME
d0f0: 4d 5f 49 6e 74 29 21 3d 30 20 29 7b 0a 20 20 20  M_Int)!=0 ){.   
d100: 20 69 41 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b   iA = pIn1->u.i;
d110: 0a 20 20 20 20 69 42 20 3d 20 70 49 6e 32 2d 3e  .    iB = pIn2->
d120: 75 2e 69 3b 0a 20 20 20 20 73 77 69 74 63 68 28  u.i;.    switch(
d130: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a   pOp->opcode ){.
d140: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41 64        case OP_Ad
d150: 64 3a 20 20 20 20 20 20 20 69 66 28 20 73 71 6c  d:       if( sql
d160: 69 74 65 33 41 64 64 49 6e 74 36 34 28 26 69 42  ite3AddInt64(&iB
d170: 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d  ,iA) ) goto fp_m
d180: 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20  ath;  break;.   
d190: 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72     case OP_Subtr
d1a0: 61 63 74 3a 20 20 69 66 28 20 73 71 6c 69 74 65  act:  if( sqlite
d1b0: 33 53 75 62 49 6e 74 36 34 28 26 69 42 2c 69 41  3SubInt64(&iB,iA
d1c0: 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68  ) ) goto fp_math
d1d0: 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20  ;  break;.      
d1e0: 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79  case OP_Multiply
d1f0: 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33 4d 75  :  if( sqlite3Mu
d200: 6c 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29  lInt64(&iB,iA) )
d210: 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20   goto fp_math;  
d220: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
d230: 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20  e OP_Divide: {. 
d240: 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30         if( iA==0
d250: 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74   ) goto arithmet
d260: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
d270: 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  l;.        if( i
d280: 41 3d 3d 2d 31 20 26 26 20 69 42 3d 3d 53 4d 41  A==-1 && iB==SMA
d290: 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29 20 67 6f  LLEST_INT64 ) go
d2a0: 74 6f 20 66 70 5f 6d 61 74 68 3b 0a 20 20 20 20  to fp_math;.    
d2b0: 20 20 20 20 69 42 20 2f 3d 20 69 41 3b 0a 20 20      iB /= iA;.  
d2c0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
d2d0: 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75     }.      defau
d2e0: 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66  lt: {.        if
d2f0: 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61  ( iA==0 ) goto a
d300: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
d310: 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20  _is_null;.      
d320: 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29 20 69    if( iA==-1 ) i
d330: 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69  A = 1;.        i
d340: 42 20 25 3d 20 69 41 3b 0a 20 20 20 20 20 20 20  B %= iA;.       
d350: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
d360: 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e      }.    pOut->
d370: 75 2e 69 20 3d 20 69 42 3b 0a 20 20 20 20 4d 65  u.i = iB;.    Me
d380: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
d390: 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d  t, MEM_Int);.  }
d3a0: 65 6c 73 65 20 69 66 28 20 28 66 6c 61 67 73 20  else if( (flags 
d3b0: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29  & MEM_Null)!=0 )
d3c0: 7b 0a 20 20 20 20 67 6f 74 6f 20 61 72 69 74 68  {.    goto arith
d3d0: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
d3e0: 6e 75 6c 6c 3b 0a 20 20 7d 65 6c 73 65 7b 0a 66  null;.  }else{.f
d3f0: 70 5f 6d 61 74 68 3a 0a 20 20 20 20 72 41 20 3d  p_math:.    rA =
d400: 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c   sqlite3VdbeReal
d410: 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 20  Value(pIn1);.   
d420: 20 72 42 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rB = sqlite3Vdb
d430: 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 32 29  eRealValue(pIn2)
d440: 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f  ;.    switch( pO
d450: 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20  p->opcode ){.   
d460: 20 20 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20     case OP_Add: 
d470: 20 20 20 20 20 20 20 20 72 42 20 2b 3d 20 72 41          rB += rA
d480: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
d490: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62       case OP_Sub
d4a0: 74 72 61 63 74 3a 20 20 20 20 72 42 20 2d 3d 20  tract:    rB -= 
d4b0: 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b  rA;       break;
d4c0: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d  .      case OP_M
d4d0: 75 6c 74 69 70 6c 79 3a 20 20 20 20 72 42 20 2a  ultiply:    rB *
d4e0: 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65 61  = rA;       brea
d4f0: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  k;.      case OP
d500: 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20  _Divide: {.     
d510: 20 20 20 2f 2a 20 28 64 6f 75 62 6c 65 29 30 20     /* (double)0 
d520: 49 6e 20 63 61 73 65 20 6f 66 20 53 51 4c 49 54  In case of SQLIT
d530: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
d540: 50 4f 49 4e 54 2e 2e 2e 20 2a 2f 0a 20 20 20 20  POINT... */.    
d550: 20 20 20 20 69 66 28 20 72 41 3d 3d 28 64 6f 75      if( rA==(dou
d560: 62 6c 65 29 30 20 29 20 67 6f 74 6f 20 61 72 69  ble)0 ) goto ari
d570: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
d580: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  s_null;.        
d590: 72 42 20 2f 3d 20 72 41 3b 0a 20 20 20 20 20 20  rB /= rA;.      
d5a0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
d5b0: 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20  .      default: 
d5c0: 7b 0a 20 20 20 20 20 20 20 20 69 41 20 3d 20 73  {.        iA = s
d5d0: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
d5e0: 75 65 28 70 49 6e 31 29 3b 0a 20 20 20 20 20 20  ue(pIn1);.      
d5f0: 20 20 69 42 20 3d 20 73 71 6c 69 74 65 33 56 64    iB = sqlite3Vd
d600: 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29  beIntValue(pIn2)
d610: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  ;.        if( iA
d620: 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68  ==0 ) goto arith
d630: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
d640: 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66  null;.        if
d650: 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20  ( iA==-1 ) iA = 
d660: 31 3b 0a 20 20 20 20 20 20 20 20 72 42 20 3d 20  1;.        rB = 
d670: 28 64 6f 75 62 6c 65 29 28 69 42 20 25 20 69 41  (double)(iB % iA
d680: 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  );.        break
d690: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
d6a0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
d6b0: 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
d6c0: 54 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  T.    pOut->u.i 
d6d0: 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74  = rB;.    MemSet
d6e0: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
d6f0: 45 4d 5f 49 6e 74 29 3b 0a 23 65 6c 73 65 0a 20  EM_Int);.#else. 
d700: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 49 73     if( sqlite3Is
d710: 4e 61 4e 28 72 42 29 20 29 7b 0a 20 20 20 20 20  NaN(rB) ){.     
d720: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
d730: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
d740: 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d  .    }.    pOut-
d750: 3e 75 2e 72 20 3d 20 72 42 3b 0a 20 20 20 20 4d  >u.r = rB;.    M
d760: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
d770: 75 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a 23  ut, MEM_Real);.#
d780: 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61  endif.  }.  brea
d790: 6b 3b 0a 0a 61 72 69 74 68 6d 65 74 69 63 5f 72  k;..arithmetic_r
d7a0: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20  esult_is_null:. 
d7b0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
d7c0: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
d7d0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
d7e0: 6f 64 65 3a 20 43 6f 6c 6c 53 65 71 20 50 31 20  ode: CollSeq P1 
d7f0: 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20  * * P4.**.** P4 
d800: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
d810: 61 20 43 6f 6c 6c 53 65 71 20 6f 62 6a 65 63 74  a CollSeq object
d820: 2e 20 49 66 20 74 68 65 20 6e 65 78 74 20 63 61  . If the next ca
d830: 6c 6c 20 74 6f 20 61 20 75 73 65 72 20 66 75 6e  ll to a user fun
d840: 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67 72  ction.** or aggr
d850: 65 67 61 74 65 20 63 61 6c 6c 73 20 73 71 6c 69  egate calls sqli
d860: 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65  te3GetFuncCollSe
d870: 71 28 29 2c 20 74 68 69 73 20 63 6f 6c 6c 61 74  q(), this collat
d880: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77 69 6c  ion sequence wil
d890: 6c 0a 2a 2a 20 62 65 20 72 65 74 75 72 6e 65 64  l.** be returned
d8a0: 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62  . This is used b
d8b0: 79 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 6d  y the built-in m
d8c0: 69 6e 28 29 2c 20 6d 61 78 28 29 20 61 6e 64 20  in(), max() and 
d8d0: 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20 66 75 6e 63  nullif().** func
d8e0: 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  tions..**.** If 
d8f0: 50 31 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P1 is not zero, 
d900: 74 68 65 6e 20 69 74 20 69 73 20 61 20 72 65 67  then it is a reg
d910: 69 73 74 65 72 20 74 68 61 74 20 61 20 73 75 62  ister that a sub
d920: 73 65 71 75 65 6e 74 20 6d 69 6e 28 29 20 6f 72  sequent min() or
d930: 0a 2a 2a 20 6d 61 78 28 29 20 61 67 67 72 65 67  .** max() aggreg
d940: 61 74 65 20 77 69 6c 6c 20 73 65 74 20 74 6f 20  ate will set to 
d950: 31 20 69 66 20 74 68 65 20 63 75 72 72 65 6e 74  1 if the current
d960: 20 72 6f 77 20 69 73 20 6e 6f 74 20 74 68 65 20   row is not the 
d970: 6d 69 6e 69 6d 75 6d 20 6f 72 0a 2a 2a 20 6d 61  minimum or.** ma
d980: 78 69 6d 75 6d 2e 20 20 54 68 65 20 50 31 20 72  ximum.  The P1 r
d990: 65 67 69 73 74 65 72 20 69 73 20 69 6e 69 74 69  egister is initi
d9a0: 61 6c 69 7a 65 64 20 74 6f 20 30 20 62 79 20 74  alized to 0 by t
d9b0: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  his instruction.
d9c0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72  .**.** The inter
d9d0: 66 61 63 65 20 75 73 65 64 20 62 79 20 74 68 65  face used by the
d9e0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
d9f0: 6f 66 20 74 68 65 20 61 66 6f 72 65 6d 65 6e 74  of the aforement
da00: 69 6f 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 0a  ioned functions.
da10: 2a 2a 20 74 6f 20 72 65 74 72 69 65 76 65 20 74  ** to retrieve t
da20: 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  he collation seq
da30: 75 65 6e 63 65 20 73 65 74 20 62 79 20 74 68 69  uence set by thi
da40: 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f 74 20  s opcode is not 
da50: 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 70 75 62  available.** pub
da60: 6c 69 63 6c 79 2e 20 20 4f 6e 6c 79 20 62 75 69  licly.  Only bui
da70: 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 73 20  lt-in functions 
da80: 68 61 76 65 20 61 63 63 65 73 73 20 74 6f 20 74  have access to t
da90: 68 69 73 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a  his feature..*/.
daa0: 63 61 73 65 20 4f 50 5f 43 6f 6c 6c 53 65 71 3a  case OP_CollSeq:
dab0: 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
dac0: 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c  ->p4type==P4_COL
dad0: 4c 53 45 51 20 29 3b 0a 20 20 69 66 28 20 70 4f  LSEQ );.  if( pO
dae0: 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71 6c  p->p1 ){.    sql
daf0: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
db00: 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t64(&aMem[pOp->p
db10: 31 5d 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 62 72  1], 0);.  }.  br
db20: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
db30: 65 3a 20 42 69 74 41 6e 64 20 50 31 20 50 32 20  e: BitAnd P1 P2 
db40: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
db50: 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 26  is: r[P3]=r[P1]&
db60: 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65  r[P2].**.** Take
db70: 20 74 68 65 20 62 69 74 2d 77 69 73 65 20 41 4e   the bit-wise AN
db80: 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  D of the values 
db90: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
dba0: 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f  nd P2 and.** sto
dbb0: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
dbc0: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
dbd0: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
dbe0: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
dbf0: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
dc00: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4f  ./* Opcode: BitO
dc10: 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  r P1 P2 P3 * *.*
dc20: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
dc30: 5d 3d 72 5b 50 31 5d 7c 72 5b 50 32 5d 0a 2a 2a  ]=r[P1]|r[P2].**
dc40: 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74  .** Take the bit
dc50: 2d 77 69 73 65 20 4f 52 20 6f 66 20 74 68 65 20  -wise OR of the 
dc60: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
dc70: 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64  er P1 and P2 and
dc80: 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65  .** store the re
dc90: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
dca0: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
dcb0: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
dcc0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
dcd0: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
dce0: 65 3a 20 53 68 69 66 74 4c 65 66 74 20 50 31 20  e: ShiftLeft P1 
dcf0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
dd00: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50  opsis: r[P3]=r[P
dd10: 32 5d 3c 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  2]<<r[P1].**.** 
dd20: 53 68 69 66 74 20 74 68 65 20 69 6e 74 65 67 65  Shift the intege
dd30: 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  r value in regis
dd40: 74 65 72 20 50 32 20 74 6f 20 74 68 65 20 6c 65  ter P2 to the le
dd50: 66 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d  ft by the.** num
dd60: 62 65 72 20 6f 66 20 62 69 74 73 20 73 70 65 63  ber of bits spec
dd70: 69 66 69 65 64 20 62 79 20 74 68 65 20 69 6e 74  ified by the int
dd80: 65 67 65 72 20 69 6e 20 72 65 67 69 73 74 65 72  eger in register
dd90: 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68   P1..** Store th
dda0: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
ddb0: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
ddc0: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
ddd0: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
dde0: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
ddf0: 70 63 6f 64 65 3a 20 53 68 69 66 74 52 69 67 68  pcode: ShiftRigh
de00: 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
de10: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
de20: 5d 3d 72 5b 50 32 5d 3e 3e 72 5b 50 31 5d 0a 2a  ]=r[P2]>>r[P1].*
de30: 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69  *.** Shift the i
de40: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20  nteger value in 
de50: 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 74  register P2 to t
de60: 68 65 20 72 69 67 68 74 20 62 79 20 74 68 65 0a  he right by the.
de70: 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74  ** number of bit
de80: 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74  s specified by t
de90: 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65  he integer in re
dea0: 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74  gister P1..** St
deb0: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
dec0: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
ded0: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
dee0: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
def0: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
df00: 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 41 6e 64  /.case OP_BitAnd
df10: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
df20: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
df30: 42 49 54 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32  BITAND, in1, in2
df40: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
df50: 50 5f 42 69 74 4f 72 3a 20 20 20 20 20 20 20 20  P_BitOr:        
df60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
df70: 65 20 61 73 20 54 4b 5f 42 49 54 4f 52 2c 20 69  e as TK_BITOR, i
df80: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
df90: 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74 4c 65  .case OP_ShiftLe
dfa0: 66 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  ft:             
dfb0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c   /* same as TK_L
dfc0: 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c  SHIFT, in1, in2,
dfd0: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
dfe0: 5f 53 68 69 66 74 52 69 67 68 74 3a 20 7b 20 20  _ShiftRight: {  
dff0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
e000: 20 61 73 20 54 4b 5f 52 53 48 49 46 54 2c 20 69   as TK_RSHIFT, i
e010: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
e020: 0a 20 20 69 36 34 20 69 41 3b 0a 20 20 75 36 34  .  i64 iA;.  u64
e030: 20 75 41 3b 0a 20 20 69 36 34 20 69 42 3b 0a 20   uA;.  i64 iB;. 
e040: 20 75 38 20 6f 70 3b 0a 0a 20 20 70 49 6e 31 20   u8 op;..  pIn1 
e050: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
e060: 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
e070: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75  [pOp->p2];.  pOu
e080: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
e090: 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  3];.  if( (pIn1-
e0a0: 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66  >flags | pIn2->f
e0b0: 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c  lags) & MEM_Null
e0c0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
e0d0: 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f  dbeMemSetNull(pO
e0e0: 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  ut);.    break;.
e0f0: 20 20 7d 0a 20 20 69 41 20 3d 20 73 71 6c 69 74    }.  iA = sqlit
e100: 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
e110: 49 6e 32 29 3b 0a 20 20 69 42 20 3d 20 73 71 6c  In2);.  iB = sql
e120: 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
e130: 28 70 49 6e 31 29 3b 0a 20 20 6f 70 20 3d 20 70  (pIn1);.  op = p
e140: 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 69 66  Op->opcode;.  if
e150: 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 41 6e 64 20  ( op==OP_BitAnd 
e160: 29 7b 0a 20 20 20 20 69 41 20 26 3d 20 69 42 3b  ){.    iA &= iB;
e170: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 70 3d  .  }else if( op=
e180: 3d 4f 50 5f 42 69 74 4f 72 20 29 7b 0a 20 20 20  =OP_BitOr ){.   
e190: 20 69 41 20 7c 3d 20 69 42 3b 0a 20 20 7d 65 6c   iA |= iB;.  }el
e1a0: 73 65 20 69 66 28 20 69 42 21 3d 30 20 29 7b 0a  se if( iB!=0 ){.
e1b0: 20 20 20 20 61 73 73 65 72 74 28 20 6f 70 3d 3d      assert( op==
e1c0: 4f 50 5f 53 68 69 66 74 52 69 67 68 74 20 7c 7c  OP_ShiftRight ||
e1d0: 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66   op==OP_ShiftLef
e1e0: 74 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20  t );..    /* If 
e1f0: 73 68 69 66 74 69 6e 67 20 62 79 20 61 20 6e 65  shifting by a ne
e200: 67 61 74 69 76 65 20 61 6d 6f 75 6e 74 2c 20 73  gative amount, s
e210: 68 69 66 74 20 69 6e 20 74 68 65 20 6f 74 68 65  hift in the othe
e220: 72 20 64 69 72 65 63 74 69 6f 6e 20 2a 2f 0a 20  r direction */. 
e230: 20 20 20 69 66 28 20 69 42 3c 30 20 29 7b 0a 20     if( iB<0 ){. 
e240: 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f       assert( OP_
e250: 53 68 69 66 74 52 69 67 68 74 3d 3d 4f 50 5f 53  ShiftRight==OP_S
e260: 68 69 66 74 4c 65 66 74 2b 31 20 29 3b 0a 20 20  hiftLeft+1 );.  
e270: 20 20 20 20 6f 70 20 3d 20 32 2a 4f 50 5f 53 68      op = 2*OP_Sh
e280: 69 66 74 4c 65 66 74 20 2b 20 31 20 2d 20 6f 70  iftLeft + 1 - op
e290: 3b 0a 20 20 20 20 20 20 69 42 20 3d 20 69 42 3e  ;.      iB = iB>
e2a0: 28 2d 36 34 29 20 3f 20 2d 69 42 20 3a 20 36 34  (-64) ? -iB : 64
e2b0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28  ;.    }..    if(
e2c0: 20 69 42 3e 3d 36 34 20 29 7b 0a 20 20 20 20 20   iB>=64 ){.     
e2d0: 20 69 41 20 3d 20 28 69 41 3e 3d 30 20 7c 7c 20   iA = (iA>=0 || 
e2e0: 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74  op==OP_ShiftLeft
e2f0: 29 20 3f 20 30 20 3a 20 2d 31 3b 0a 20 20 20 20  ) ? 0 : -1;.    
e300: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6d 65 6d  }else{.      mem
e310: 63 70 79 28 26 75 41 2c 20 26 69 41 2c 20 73 69  cpy(&uA, &iA, si
e320: 7a 65 6f 66 28 75 41 29 29 3b 0a 20 20 20 20 20  zeof(uA));.     
e330: 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66   if( op==OP_Shif
e340: 74 4c 65 66 74 20 29 7b 0a 20 20 20 20 20 20 20  tLeft ){.       
e350: 20 75 41 20 3c 3c 3d 20 69 42 3b 0a 20 20 20 20   uA <<= iB;.    
e360: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
e370: 20 75 41 20 3e 3e 3d 20 69 42 3b 0a 20 20 20 20   uA >>= iB;.    
e380: 20 20 20 20 2f 2a 20 53 69 67 6e 2d 65 78 74 65      /* Sign-exte
e390: 6e 64 20 6f 6e 20 61 20 72 69 67 68 74 20 73 68  nd on a right sh
e3a0: 69 66 74 20 6f 66 20 61 20 6e 65 67 61 74 69 76  ift of a negativ
e3b0: 65 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20  e number */.    
e3c0: 20 20 20 20 69 66 28 20 69 41 3c 30 20 29 20 75      if( iA<0 ) u
e3d0: 41 20 7c 3d 20 28 28 28 28 75 36 34 29 30 78 66  A |= ((((u64)0xf
e3e0: 66 66 66 66 66 66 66 29 3c 3c 33 32 29 7c 30 78  fffffff)<<32)|0x
e3f0: 66 66 66 66 66 66 66 66 29 20 3c 3c 20 28 36 34  ffffffff) << (64
e400: 2d 69 42 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  -iB);.      }.  
e410: 20 20 20 20 6d 65 6d 63 70 79 28 26 69 41 2c 20      memcpy(&iA, 
e420: 26 75 41 2c 20 73 69 7a 65 6f 66 28 69 41 29 29  &uA, sizeof(iA))
e430: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 4f  ;.    }.  }.  pO
e440: 75 74 2d 3e 75 2e 69 20 3d 20 69 41 3b 0a 20 20  ut->u.i = iA;.  
e450: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
e460: 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
e470: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
e480: 63 6f 64 65 3a 20 41 64 64 49 6d 6d 20 20 50 31  code: AddImm  P1
e490: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
e4a0: 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 72 5b 50  opsis: r[P1]=r[P
e4b0: 31 5d 2b 50 32 0a 2a 2a 20 0a 2a 2a 20 41 64 64  1]+P2.** .** Add
e4c0: 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 50 32   the constant P2
e4d0: 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e   to the value in
e4e0: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
e4f0: 20 54 68 65 20 72 65 73 75 6c 74 20 69 73 20 61   The result is a
e500: 6c 77 61 79 73 20 61 6e 20 69 6e 74 65 67 65 72  lways an integer
e510: 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f 72 63 65  ..**.** To force
e520: 20 61 6e 79 20 72 65 67 69 73 74 65 72 20 74 6f   any register to
e530: 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2c 20   be an integer, 
e540: 6a 75 73 74 20 61 64 64 20 30 2e 0a 2a 2f 0a 63  just add 0..*/.c
e550: 61 73 65 20 4f 50 5f 41 64 64 49 6d 6d 3a 20 7b  ase OP_AddImm: {
e560: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
e570: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
e580: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
e590: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
e5a0: 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 73 71  e(p, pIn1);.  sq
e5b0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
e5c0: 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20  gerify(pIn1);.  
e5d0: 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70  pIn1->u.i += pOp
e5e0: 2d 3e 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ->p2;.  break;.}
e5f0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 73  ../* Opcode: Mus
e600: 74 42 65 49 6e 74 20 50 31 20 50 32 20 2a 20 2a  tBeInt P1 P2 * *
e610: 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63 65 20   *.** .** Force 
e620: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
e630: 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61  ister P1 to be a
e640: 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20 74  n integer.  If t
e650: 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50  he value.** in P
e660: 31 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65  1 is not an inte
e670: 67 65 72 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62  ger and cannot b
e680: 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  e converted into
e690: 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 77   an integer.** w
e6a0: 69 74 68 6f 75 74 20 64 61 74 61 20 6c 6f 73 73  ithout data loss
e6b0: 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65  , then jump imme
e6c0: 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2c 20 6f  diately to P2, o
e6d0: 72 20 69 66 20 50 32 3d 3d 30 0a 2a 2a 20 72 61  r if P2==0.** ra
e6e0: 69 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49  ise an SQLITE_MI
e6f0: 53 4d 41 54 43 48 20 65 78 63 65 70 74 69 6f 6e  SMATCH exception
e700: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 73  ..*/.case OP_Mus
e710: 74 42 65 49 6e 74 3a 20 7b 20 20 20 20 20 20 20  tBeInt: {       
e720: 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
e730: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
e740: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
e750: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
e760: 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29   & MEM_Int)==0 )
e770: 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e  {.    applyAffin
e780: 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45  ity(pIn1, SQLITE
e790: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e  _AFF_NUMERIC, en
e7a0: 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 69 66 28  coding);.    if(
e7b0: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
e7c0: 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20  MEM_Int)==0 ){. 
e7d0: 20 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54       VdbeBranchT
e7e0: 61 6b 65 6e 28 31 2c 20 32 29 3b 0a 20 20 20 20  aken(1, 2);.    
e7f0: 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30    if( pOp->p2==0
e800: 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
e810: 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48   SQLITE_MISMATCH
e820: 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  ;.        goto a
e830: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
e840: 72 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  r;.      }else{.
e850: 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d          goto jum
e860: 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 7d  p_to_p2;.      }
e870: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 56 64 62  .    }.  }.  Vdb
e880: 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c 20  eBranchTaken(0, 
e890: 32 29 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65  2);.  MemSetType
e8a0: 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 49  Flag(pIn1, MEM_I
e8b0: 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  nt);.  break;.}.
e8c0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
e8d0: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
e8e0: 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  INT./* Opcode: R
e8f0: 65 61 6c 41 66 66 69 6e 69 74 79 20 50 31 20 2a  ealAffinity P1 *
e900: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20   * * *.**.** If 
e910: 72 65 67 69 73 74 65 72 20 50 31 20 68 6f 6c 64  register P1 hold
e920: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 63 6f 6e  s an integer con
e930: 76 65 72 74 20 69 74 20 74 6f 20 61 20 72 65 61  vert it to a rea
e940: 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54  l value..**.** T
e950: 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73  his opcode is us
e960: 65 64 20 77 68 65 6e 20 65 78 74 72 61 63 74 69  ed when extracti
e970: 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66  ng information f
e980: 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74 68 61  rom a column tha
e990: 74 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20 61 66  t.** has REAL af
e9a0: 66 69 6e 69 74 79 2e 20 20 53 75 63 68 20 63 6f  finity.  Such co
e9b0: 6c 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61 79 20  lumn values may 
e9c0: 73 74 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20  still be stored 
e9d0: 61 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73 2c 20  as.** integers, 
e9e0: 66 6f 72 20 73 70 61 63 65 20 65 66 66 69 63 69  for space effici
e9f0: 65 6e 63 79 2c 20 62 75 74 20 61 66 74 65 72 20  ency, but after 
ea00: 65 78 74 72 61 63 74 69 6f 6e 20 77 65 20 77 61  extraction we wa
ea10: 6e 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20 68 61  nt them.** to ha
ea20: 76 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c 20 76  ve only a real v
ea30: 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  alue..*/.case OP
ea40: 5f 52 65 61 6c 41 66 66 69 6e 69 74 79 3a 20 7b  _RealAffinity: {
ea50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea60: 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49    /* in1 */.  pI
ea70: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
ea80: 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  p1];.  if( pIn1-
ea90: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e  >flags & (MEM_In
eaa0: 74 7c 4d 45 4d 5f 49 6e 74 52 65 61 6c 29 20 29  t|MEM_IntReal) )
eab0: 7b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20  {.    testcase( 
eac0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
ead0: 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 74 65 73  M_Int );.    tes
eae0: 74 63 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61  tcase( pIn1->fla
eaf0: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 52 65 61 6c  gs & MEM_IntReal
eb00: 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   );.    sqlite3V
eb10: 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 49  dbeMemRealify(pI
eb20: 6e 31 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  n1);.    REGISTE
eb30: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c  R_TRACE(pOp->p1,
eb40: 20 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72   pIn1);.  }.  br
eb50: 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  eak;.}.#endif..#
eb60: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
eb70: 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64  IT_CAST./* Opcod
eb80: 65 3a 20 43 61 73 74 20 50 31 20 50 32 20 2a 20  e: Cast P1 P2 * 
eb90: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
eba0: 20 61 66 66 69 6e 69 74 79 28 72 5b 50 31 5d 29   affinity(r[P1])
ebb0: 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65  .**.** Force the
ebc0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
ebd0: 65 72 20 50 31 20 74 6f 20 62 65 20 74 68 65 20  er P1 to be the 
ebe0: 74 79 70 65 20 64 65 66 69 6e 65 64 20 62 79 20  type defined by 
ebf0: 50 32 2e 0a 2a 2a 20 0a 2a 2a 20 3c 75 6c 3e 0a  P2..** .** <ul>.
ec00: 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27 41 27 20  ** <li> P2=='A' 
ec10: 26 72 61 72 72 3b 20 42 4c 4f 42 0a 2a 2a 20 3c  &rarr; BLOB.** <
ec20: 6c 69 3e 20 50 32 3d 3d 27 42 27 20 26 72 61 72  li> P2=='B' &rar
ec30: 72 3b 20 54 45 58 54 0a 2a 2a 20 3c 6c 69 3e 20  r; TEXT.** <li> 
ec40: 50 32 3d 3d 27 43 27 20 26 72 61 72 72 3b 20 4e  P2=='C' &rarr; N
ec50: 55 4d 45 52 49 43 0a 2a 2a 20 3c 6c 69 3e 20 50  UMERIC.** <li> P
ec60: 32 3d 3d 27 44 27 20 26 72 61 72 72 3b 20 49 4e  2=='D' &rarr; IN
ec70: 54 45 47 45 52 0a 2a 2a 20 3c 6c 69 3e 20 50 32  TEGER.** <li> P2
ec80: 3d 3d 27 45 27 20 26 72 61 72 72 3b 20 52 45 41  =='E' &rarr; REA
ec90: 4c 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a  L.** </ul>.**.**
eca0: 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73   A NULL value is
ecb0: 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20   not changed by 
ecc0: 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49  this routine.  I
ecd0: 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a  t remains NULL..
ece0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 61 73 74 3a  */.case OP_Cast:
ecf0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
ed00: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
ed10: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
ed20: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42  =SQLITE_AFF_BLOB
ed30: 20 26 26 20 70 4f 70 2d 3e 70 32 3c 3d 53 51 4c   && pOp->p2<=SQL
ed40: 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 29 3b 0a  ITE_AFF_REAL );.
ed50: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
ed60: 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  >p2==SQLITE_AFF_
ed70: 54 45 58 54 20 29 3b 0a 20 20 74 65 73 74 63 61  TEXT );.  testca
ed80: 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c  se( pOp->p2==SQL
ed90: 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20 29 3b 0a  ITE_AFF_BLOB );.
eda0: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
edb0: 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  >p2==SQLITE_AFF_
edc0: 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20 74 65 73  NUMERIC );.  tes
edd0: 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d  tcase( pOp->p2==
ede0: 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47  SQLITE_AFF_INTEG
edf0: 45 52 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  ER );.  testcase
ee00: 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  ( pOp->p2==SQLIT
ee10: 45 5f 41 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20  E_AFF_REAL );.  
ee20: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
ee30: 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p1];.  memAbou
ee40: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e  tToChange(p, pIn
ee50: 31 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e  1);.  rc = Expan
ee60: 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 73  dBlob(pIn1);.  s
ee70: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 61 73  qlite3VdbeMemCas
ee80: 74 28 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 32 2c  t(pIn1, pOp->p2,
ee90: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50   encoding);.  UP
eea0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
eeb0: 45 28 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 72  E(pIn1);.  if( r
eec0: 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
eed0: 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62  ue_to_error;.  b
eee0: 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
eef0: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41  * SQLITE_OMIT_CA
ef00: 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ST */../* Opcode
ef10: 3a 20 45 71 20 50 31 20 50 32 20 50 33 20 50 34  : Eq P1 P2 P3 P4
ef20: 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
ef30: 20 49 46 20 72 5b 50 33 5d 3d 3d 72 5b 50 31 5d   IF r[P3]==r[P1]
ef40: 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74  .**.** Compare t
ef50: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
ef60: 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 33 2e  ister P1 and P3.
ef70: 20 20 49 66 20 72 65 67 28 50 33 29 3d 3d 72 65    If reg(P3)==re
ef80: 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20 6a 75  g(P1) then.** ju
ef90: 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32  mp to address P2
efa0: 2e 20 20 4f 72 20 69 66 20 74 68 65 20 53 51 4c  .  Or if the SQL
efb0: 49 54 45 5f 53 54 4f 52 45 50 32 20 66 6c 61 67  ITE_STOREP2 flag
efc0: 20 69 73 20 73 65 74 20 69 6e 20 50 35 2c 20 74   is set in P5, t
efd0: 68 65 6e 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65  hen.** store the
efe0: 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61   result of compa
eff0: 72 69 73 6f 6e 20 69 6e 20 72 65 67 69 73 74 65  rison in registe
f000: 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  r P2..**.** The 
f010: 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
f020: 70 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75  portion of P5 mu
f030: 73 74 20 62 65 20 61 6e 20 61 66 66 69 6e 69 74  st be an affinit
f040: 79 20 63 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a  y character -.**
f050: 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54   SQLITE_AFF_TEXT
f060: 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  , SQLITE_AFF_INT
f070: 45 47 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72  EGER, and so for
f080: 74 68 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 69  th. An attempt i
f090: 73 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f  s made .** to co
f0a0: 65 72 63 65 20 62 6f 74 68 20 69 6e 70 75 74 73  erce both inputs
f0b0: 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68   according to th
f0c0: 69 73 20 61 66 66 69 6e 69 74 79 20 62 65 66 6f  is affinity befo
f0d0: 72 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72  re the.** compar
f0e0: 69 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49 66  ison is made. If
f0f0: 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   the SQLITE_AFF_
f100: 4d 41 53 4b 20 69 73 20 30 78 30 30 2c 20 74 68  MASK is 0x00, th
f110: 65 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66  en numeric.** af
f120: 66 69 6e 69 74 79 20 69 73 20 75 73 65 64 2e 20  finity is used. 
f130: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 61 66  Note that the af
f140: 66 69 6e 69 74 79 20 63 6f 6e 76 65 72 73 69 6f  finity conversio
f150: 6e 73 20 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a  ns are stored.**
f160: 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 69   back into the i
f170: 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20 50  nput registers P
f180: 31 20 61 6e 64 20 50 33 2e 20 20 53 6f 20 74 68  1 and P3.  So th
f190: 69 73 20 6f 70 63 6f 64 65 20 63 61 6e 20 63 61  is opcode can ca
f1a0: 75 73 65 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e  use.** persisten
f1b0: 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72 65 67  t changes to reg
f1c0: 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33  isters P1 and P3
f1d0: 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79  ..**.** Once any
f1e0: 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61 76   conversions hav
f1f0: 65 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61  e taken place, a
f200: 6e 64 20 6e 65 69 74 68 65 72 20 76 61 6c 75 65  nd neither value
f210: 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68   is NULL, .** th
f220: 65 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d  e values are com
f230: 70 61 72 65 64 2e 20 49 66 20 62 6f 74 68 20 76  pared. If both v
f240: 61 6c 75 65 73 20 61 72 65 20 62 6c 6f 62 73 20  alues are blobs 
f250: 74 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73  then memcmp() is
f260: 0a 2a 2a 20 75 73 65 64 20 74 6f 20 64 65 74 65  .** used to dete
f270: 72 6d 69 6e 65 20 74 68 65 20 72 65 73 75 6c 74  rmine the result
f280: 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69  s of the compari
f290: 73 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20 76 61  son.  If both va
f2a0: 6c 75 65 73 0a 2a 2a 20 61 72 65 20 74 65 78 74  lues.** are text
f2b0: 2c 20 74 68 65 6e 20 74 68 65 20 61 70 70 72 6f  , then the appro
f2c0: 70 72 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67  priate collating
f2d0: 20 66 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 66   function specif
f2e0: 69 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20  ied in.** P4 is 
f2f0: 75 73 65 64 20 74 6f 20 64 6f 20 74 68 65 20 63  used to do the c
f300: 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 50  omparison.  If P
f310: 34 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69  4 is not specifi
f320: 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d  ed then.** memcm
f330: 70 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 63  p() is used to c
f340: 6f 6d 70 61 72 65 20 74 65 78 74 20 73 74 72 69  ompare text stri
f350: 6e 67 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c  ng.  If both val
f360: 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72  ues are.** numer
f370: 69 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65 72  ic, then a numer
f380: 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  ic comparison is
f390: 20 75 73 65 64 2e 20 49 66 20 74 68 65 20 74 77   used. If the tw
f3a0: 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20  o values.** are 
f3b0: 6f 66 20 64 69 66 66 65 72 65 6e 74 20 74 79 70  of different typ
f3c0: 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72 73  es, then numbers
f3d0: 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
f3e0: 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72  less than.** str
f3f0: 69 6e 67 73 20 61 6e 64 20 73 74 72 69 6e 67 73  ings and strings
f400: 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
f410: 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e  less than blobs.
f420: 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  .**.** If SQLITE
f430: 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69  _NULLEQ is set i
f440: 6e 20 50 35 20 74 68 65 6e 20 74 68 65 20 72 65  n P5 then the re
f450: 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73  sult of comparis
f460: 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 65 69 74  on is always eit
f470: 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66  her.** true or f
f480: 61 6c 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65  alse and is neve
f490: 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68  r NULL.  If both
f4a0: 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55   operands are NU
f4b0: 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  LL then the resu
f4c0: 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69  lt.** of compari
f4d0: 73 6f 6e 20 69 73 20 74 72 75 65 2e 20 20 49 66  son is true.  If
f4e0: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
f4f0: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65  is NULL then the
f500: 20 72 65 73 75 6c 74 20 69 73 20 66 61 6c 73 65   result is false
f510: 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20  ..** If neither 
f520: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
f530: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 68  the result is th
f540: 65 20 73 61 6d 65 20 61 73 20 69 74 20 77 6f 75  e same as it wou
f550: 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74 68 65 20  ld be if.** the 
f560: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c  SQLITE_NULLEQ fl
f570: 61 67 20 77 65 72 65 20 6f 6d 69 74 74 65 64 20  ag were omitted 
f580: 66 72 6f 6d 20 50 35 2e 0a 2a 2a 0a 2a 2a 20 49  from P5..**.** I
f590: 66 20 62 6f 74 68 20 53 51 4c 49 54 45 5f 53 54  f both SQLITE_ST
f5a0: 4f 52 45 50 32 20 61 6e 64 20 53 51 4c 49 54 45  OREP2 and SQLITE
f5b0: 5f 4b 45 45 50 4e 55 4c 4c 20 66 6c 61 67 73 20  _KEEPNULL flags 
f5c0: 61 72 65 20 73 65 74 20 74 68 65 6e 20 74 68 65  are set then the
f5d0: 0a 2a 2a 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  .** content of r
f5e0: 5b 50 32 5d 20 69 73 20 6f 6e 6c 79 20 63 68 61  [P2] is only cha
f5f0: 6e 67 65 64 20 69 66 20 74 68 65 20 6e 65 77 20  nged if the new 
f600: 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 20 6f 72  value is NULL or
f610: 20 30 20 28 66 61 6c 73 65 29 2e 0a 2a 2a 20 49   0 (false)..** I
f620: 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 61  n other words, a
f630: 20 70 72 69 6f 72 20 72 5b 50 32 5d 20 76 61 6c   prior r[P2] val
f640: 75 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 6f  ue will not be o
f650: 76 65 72 77 72 69 74 74 65 6e 20 62 79 20 31 20  verwritten by 1 
f660: 28 74 72 75 65 29 2e 0a 2a 2f 0a 2f 2a 20 4f 70  (true)..*/./* Op
f670: 63 6f 64 65 3a 20 4e 65 20 50 31 20 50 32 20 50  code: Ne P1 P2 P
f680: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
f690: 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 21 3d 72  sis: IF r[P3]!=r
f6a0: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  [P1].**.** This 
f6b0: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
f6c0: 74 68 65 20 45 71 20 6f 70 63 6f 64 65 20 65 78  the Eq opcode ex
f6d0: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
f6e0: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
f6f0: 2a 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 69  * the operands i
f700: 6e 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  n registers P1 a
f710: 6e 64 20 50 33 20 61 72 65 20 6e 6f 74 20 65 71  nd P3 are not eq
f720: 75 61 6c 2e 20 20 53 65 65 20 74 68 65 20 45 71  ual.  See the Eq
f730: 20 6f 70 63 6f 64 65 20 66 6f 72 0a 2a 2a 20 61   opcode for.** a
f740: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
f750: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ation..**.** If 
f760: 62 6f 74 68 20 53 51 4c 49 54 45 5f 53 54 4f 52  both SQLITE_STOR
f770: 45 50 32 20 61 6e 64 20 53 51 4c 49 54 45 5f 4b  EP2 and SQLITE_K
f780: 45 45 50 4e 55 4c 4c 20 66 6c 61 67 73 20 61 72  EEPNULL flags ar
f790: 65 20 73 65 74 20 74 68 65 6e 20 74 68 65 0a 2a  e set then the.*
f7a0: 2a 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 5b 50  * content of r[P
f7b0: 32 5d 20 69 73 20 6f 6e 6c 79 20 63 68 61 6e 67  2] is only chang
f7c0: 65 64 20 69 66 20 74 68 65 20 6e 65 77 20 76 61  ed if the new va
f7d0: 6c 75 65 20 69 73 20 4e 55 4c 4c 20 6f 72 20 31  lue is NULL or 1
f7e0: 20 28 74 72 75 65 29 2e 0a 2a 2a 20 49 6e 20 6f   (true)..** In o
f7f0: 74 68 65 72 20 77 6f 72 64 73 2c 20 61 20 70 72  ther words, a pr
f800: 69 6f 72 20 72 5b 50 32 5d 20 76 61 6c 75 65 20  ior r[P2] value 
f810: 77 69 6c 6c 20 6e 6f 74 20 62 65 20 6f 76 65 72  will not be over
f820: 77 72 69 74 74 65 6e 20 62 79 20 30 20 28 66 61  written by 0 (fa
f830: 6c 73 65 29 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  lse)..*/./* Opco
f840: 64 65 3a 20 4c 74 20 50 31 20 50 32 20 50 33 20  de: Lt P1 P2 P3 
f850: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
f860: 73 3a 20 49 46 20 72 5b 50 33 5d 3c 72 5b 50 31  s: IF r[P3]<r[P1
f870: 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20  ].**.** Compare 
f880: 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
f890: 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 33  gister P1 and P3
f8a0: 2e 20 20 49 66 20 72 65 67 28 50 33 29 3c 72 65  .  If reg(P3)<re
f8b0: 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20 6a 75  g(P1) then.** ju
f8c0: 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32  mp to address P2
f8d0: 2e 20 20 4f 72 20 69 66 20 74 68 65 20 53 51 4c  .  Or if the SQL
f8e0: 49 54 45 5f 53 54 4f 52 45 50 32 20 66 6c 61 67  ITE_STOREP2 flag
f8f0: 20 69 73 20 73 65 74 20 69 6e 20 50 35 20 73 74   is set in P5 st
f900: 6f 72 65 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c  ore.** the resul
f910: 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20  t of comparison 
f920: 28 30 20 6f 72 20 31 20 6f 72 20 4e 55 4c 4c 29  (0 or 1 or NULL)
f930: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
f940: 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  2..**.** If the 
f950: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
f960: 4c 20 62 69 74 20 6f 66 20 50 35 20 69 73 20 73  L bit of P5 is s
f970: 65 74 20 61 6e 64 20 65 69 74 68 65 72 20 72 65  et and either re
f980: 67 28 50 31 29 20 6f 72 0a 2a 2a 20 72 65 67 28  g(P1) or.** reg(
f990: 50 33 29 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e  P3) is NULL then
f9a0: 20 74 68 65 20 74 61 6b 65 20 74 68 65 20 6a 75   the take the ju
f9b0: 6d 70 2e 20 20 49 66 20 74 68 65 20 53 51 4c 49  mp.  If the SQLI
f9c0: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 0a 2a  TE_JUMPIFNULL .*
f9d0: 2a 20 62 69 74 20 69 73 20 63 6c 65 61 72 20 74  * bit is clear t
f9e0: 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  hen fall through
f9f0: 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   if either opera
fa00: 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  nd is NULL..**.*
fa10: 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46  * The SQLITE_AFF
fa20: 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66  _MASK portion of
fa30: 20 50 35 20 6d 75 73 74 20 62 65 20 61 6e 20 61   P5 must be an a
fa40: 66 66 69 6e 69 74 79 20 63 68 61 72 61 63 74 65  ffinity characte
fa50: 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46  r -.** SQLITE_AF
fa60: 46 5f 54 45 58 54 2c 20 53 51 4c 49 54 45 5f 41  F_TEXT, SQLITE_A
fa70: 46 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64 20  FF_INTEGER, and 
fa80: 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61 74 74  so forth. An att
fa90: 65 6d 70 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a  empt is made .**
faa0: 20 74 6f 20 63 6f 65 72 63 65 20 62 6f 74 68 20   to coerce both 
fab0: 69 6e 70 75 74 73 20 61 63 63 6f 72 64 69 6e 67  inputs according
fac0: 20 74 6f 20 74 68 69 73 20 61 66 66 69 6e 69 74   to this affinit
fad0: 79 20 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20  y before the.** 
fae0: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d 61  comparison is ma
faf0: 64 65 2e 20 49 66 20 74 68 65 20 53 51 4c 49 54  de. If the SQLIT
fb00: 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20 30 78  E_AFF_MASK is 0x
fb10: 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69 63  00, then numeric
fb20: 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 69 73 20  .** affinity is 
fb30: 75 73 65 64 2e 20 4e 6f 74 65 20 74 68 61 74 20  used. Note that 
fb40: 74 68 65 20 61 66 66 69 6e 69 74 79 20 63 6f 6e  the affinity con
fb50: 76 65 72 73 69 6f 6e 73 20 61 72 65 20 73 74 6f  versions are sto
fb60: 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f  red.** back into
fb70: 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73   the input regis
fb80: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 20  ters P1 and P3. 
fb90: 20 53 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20   So this opcode 
fba0: 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65 72  can cause.** per
fbb0: 73 69 73 74 65 6e 74 20 63 68 61 6e 67 65 73 20  sistent changes 
fbc0: 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 31 20  to registers P1 
fbd0: 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e  and P3..**.** On
fbe0: 63 65 20 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f  ce any conversio
fbf0: 6e 73 20 68 61 76 65 20 74 61 6b 65 6e 20 70 6c  ns have taken pl
fc00: 61 63 65 2c 20 61 6e 64 20 6e 65 69 74 68 65 72  ace, and neither
fc10: 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20   value is NULL, 
fc20: 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 61  .** the values a
fc30: 72 65 20 63 6f 6d 70 61 72 65 64 2e 20 49 66 20  re compared. If 
fc40: 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 20  both values are 
fc50: 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d  blobs then memcm
fc60: 70 28 29 20 69 73 0a 2a 2a 20 75 73 65 64 20 74  p() is.** used t
fc70: 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  o determine the 
fc80: 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63  results of the c
fc90: 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 62  omparison.  If b
fca0: 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72  oth values.** ar
fcb0: 65 20 74 65 78 74 2c 20 74 68 65 6e 20 74 68 65  e text, then the
fcc0: 20 61 70 70 72 6f 70 72 69 61 74 65 20 63 6f 6c   appropriate col
fcd0: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  lating function 
fce0: 73 70 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20  specified in.** 
fcf0: 50 34 20 69 73 20 20 75 73 65 64 20 74 6f 20 64  P4 is  used to d
fd00: 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  o the comparison
fd10: 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  .  If P4 is not 
fd20: 73 70 65 63 69 66 69 65 64 20 74 68 65 6e 0a 2a  specified then.*
fd30: 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73 20 75 73  * memcmp() is us
fd40: 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65  ed to compare te
fd50: 78 74 20 73 74 72 69 6e 67 2e 20 20 49 66 20 62  xt string.  If b
fd60: 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 0a 2a  oth values are.*
fd70: 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e 20  * numeric, then 
fd80: 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61 72  a numeric compar
fd90: 69 73 6f 6e 20 69 73 20 75 73 65 64 2e 20 49 66  ison is used. If
fda0: 20 74 68 65 20 74 77 6f 20 76 61 6c 75 65 73 0a   the two values.
fdb0: 2a 2a 20 61 72 65 20 6f 66 20 64 69 66 66 65 72  ** are of differ
fdc0: 65 6e 74 20 74 79 70 65 73 2c 20 74 68 65 6e 20  ent types, then 
fdd0: 6e 75 6d 62 65 72 73 20 61 72 65 20 63 6f 6e 73  numbers are cons
fde0: 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e  idered less than
fdf0: 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e 64 20  .** strings and 
fe00: 73 74 72 69 6e 67 73 20 61 72 65 20 63 6f 6e 73  strings are cons
fe10: 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e  idered less than
fe20: 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70   blobs..*/./* Op
fe30: 63 6f 64 65 3a 20 4c 65 20 50 31 20 50 32 20 50  code: Le P1 P2 P
fe40: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
fe50: 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3c 3d 72  sis: IF r[P3]<=r
fe60: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  [P1].**.** This 
fe70: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
fe80: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
fe90: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
fea0: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
feb0: 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * the content of
fec0: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
fed0: 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75  less than or equ
fee0: 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e  al to the conten
fef0: 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72  t of.** register
ff00: 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74   P1.  See the Lt
ff10: 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69   opcode for addi
ff20: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
ff30: 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  on..*/./* Opcode
ff40: 3a 20 47 74 20 50 31 20 50 32 20 50 33 20 50 34  : Gt P1 P2 P3 P4
ff50: 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
ff60: 20 49 46 20 72 5b 50 33 5d 3e 72 5b 50 31 5d 0a   IF r[P3]>r[P1].
ff70: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
ff80: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c   just like the L
ff90: 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  t opcode except 
ffa0: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
ffb0: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
ffc0: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
ffd0: 73 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74  ster P3 is great
ffe0: 65 72 20 74 68 61 6e 20 74 68 65 20 63 6f 6e 74  er than the cont
fff0: 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74  ent of.** regist
10000 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20  er P1.  See the 
10010 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  Lt opcode for ad
10020 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
10030 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
10040 64 65 3a 20 47 65 20 50 31 20 50 32 20 50 33 20  de: Ge P1 P2 P3 
10050 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
10060 73 3a 20 49 46 20 72 5b 50 33 5d 3e 3d 72 5b 50  s: IF r[P3]>=r[P
10070 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  1].**.** This wo
10080 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68  rks just like th
10090 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65  e Lt opcode exce
100a0 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70  pt that the jump
100b0 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20   is taken if.** 
100c0 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
100d0 65 67 69 73 74 65 72 20 50 33 20 69 73 20 67 72  egister P3 is gr
100e0 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
100f0 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65  ual to the conte
10100 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65  nt of.** registe
10110 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c  r P1.  See the L
10120 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  t opcode for add
10130 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
10140 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
10150 45 71 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Eq:             
10160 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
10170 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  EQ, jump, in1, i
10180 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65  n3 */.case OP_Ne
10190 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
101a0 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 45  /* same as TK_NE
101b0 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
101c0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74 3a 20   */.case OP_Lt: 
101d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
101e0 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54 2c 20   same as TK_LT, 
101f0 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
10200 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20  /.case OP_Le:   
10210 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
10220 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20 6a 75  ame as TK_LE, ju
10230 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
10240 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20 20  case OP_Gt:     
10250 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
10260 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75 6d 70  e as TK_GT, jump
10270 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61  , in1, in3 */.ca
10280 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20 20 20  se OP_Ge: {     
10290 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
102a0 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20  as TK_GE, jump, 
102b0 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e  in1, in3 */.  in
102c0 74 20 72 65 73 2c 20 72 65 73 32 3b 20 20 20 20  t res, res2;    
102d0 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 74    /* Result of t
102e0 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66  he comparison of
102f0 20 70 49 6e 31 20 61 67 61 69 6e 73 74 20 70 49   pIn1 against pI
10300 6e 33 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66  n3 */.  char aff
10310 69 6e 69 74 79 3b 20 20 20 20 20 20 2f 2a 20 41  inity;      /* A
10320 66 66 69 6e 69 74 79 20 74 6f 20 75 73 65 20 66  ffinity to use f
10330 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20 2a 2f  or comparison */
10340 0a 20 20 75 31 36 20 66 6c 61 67 73 31 3b 20 20  .  u16 flags1;  
10350 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f         /* Copy o
10360 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20  f initial value 
10370 6f 66 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 2a  of pIn1->flags *
10380 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 33 3b 20  /.  u16 flags3; 
10390 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20          /* Copy 
103a0 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65  of initial value
103b0 20 6f 66 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20   of pIn3->flags 
103c0 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  */..  pIn1 = &aM
103d0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
103e0 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
103f0 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 31 20 3d  >p3];.  flags1 =
10400 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a 20 20   pIn1->flags;.  
10410 66 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d 3e 66  flags3 = pIn3->f
10420 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66 6c 61  lags;.  if( (fla
10430 67 73 31 20 7c 20 66 6c 61 67 73 33 29 26 4d 45  gs1 | flags3)&ME
10440 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 2f 2a  M_Null ){.    /*
10450 20 4f 6e 65 20 6f 72 20 62 6f 74 68 20 6f 70 65   One or both ope
10460 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 2a  rands are NULL *
10470 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  /.    if( pOp->p
10480 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45  5 & SQLITE_NULLE
10490 51 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66  Q ){.      /* If
104a0 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69   SQLITE_NULLEQ i
104b0 73 20 73 65 74 20 28 77 68 69 63 68 20 77 69 6c  s set (which wil
104c0 6c 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20 69 66  l only happen if
104d0 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20 69 73   the operator is
104e0 0a 20 20 20 20 20 20 2a 2a 20 4f 50 5f 45 71 20  .      ** OP_Eq 
104f0 6f 72 20 4f 50 5f 4e 65 29 20 74 68 65 6e 20 74  or OP_Ne) then t
10500 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 6f 72 20  ake the jump or 
10510 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  not depending on
10520 20 77 68 65 74 68 65 72 0a 20 20 20 20 20 20 2a   whether.      *
10530 2a 20 6f 72 20 6e 6f 74 20 62 6f 74 68 20 6f 70  * or not both op
10540 65 72 61 6e 64 73 20 61 72 65 20 6e 75 6c 6c 2e  erands are null.
10550 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
10560 61 73 73 65 72 74 28 20 28 66 6c 61 67 73 31 20  assert( (flags1 
10570 26 20 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d  & MEM_Cleared)==
10580 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  0 );.      asser
10590 74 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 53 51  t( (pOp->p5 & SQ
105a0 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 29  LITE_JUMPIFNULL)
105b0 3d 3d 30 20 7c 7c 20 43 4f 52 52 55 50 54 5f 44  ==0 || CORRUPT_D
105c0 42 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63  B );.      testc
105d0 61 73 65 28 20 28 70 4f 70 2d 3e 70 35 20 26 20  ase( (pOp->p5 & 
105e0 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
105f0 4c 29 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 69  L)!=0 );.      i
10600 66 28 20 28 66 6c 61 67 73 31 26 66 6c 61 67 73  f( (flags1&flags
10610 33 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20  3&MEM_Null)!=0. 
10620 20 20 20 20 20 20 26 26 20 28 66 6c 61 67 73 33        && (flags3
10630 26 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30  &MEM_Cleared)==0
10640 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20  .      ){.      
10650 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20 4f    res = 0;  /* O
10660 70 65 72 61 6e 64 73 20 61 72 65 20 65 71 75 61  perands are equa
10670 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73 65  l */.      }else
10680 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20  {.        res = 
10690 28 28 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f 4e  ((flags3 & MEM_N
106a0 75 6c 6c 29 20 3f 20 2d 31 20 3a 20 2b 31 29 3b  ull) ? -1 : +1);
106b0 20 20 2f 2a 20 4f 70 65 72 61 6e 64 73 20 61 72    /* Operands ar
106c0 65 20 6e 6f 74 20 65 71 75 61 6c 20 2a 2f 0a 20  e not equal */. 
106d0 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
106e0 7b 0a 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54  {.      /* SQLIT
106f0 45 5f 4e 55 4c 4c 45 51 20 69 73 20 63 6c 65 61  E_NULLEQ is clea
10700 72 20 61 6e 64 20 61 74 20 6c 65 61 73 74 20 6f  r and at least o
10710 6e 65 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  ne operand is NU
10720 4c 4c 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65  LL,.      ** the
10730 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
10740 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a 20 20 20  always NULL..   
10750 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d 70 20 69     ** The jump i
10760 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 53  s taken if the S
10770 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
10780 20 62 69 74 20 69 73 20 73 65 74 2e 0a 20 20 20   bit is set..   
10790 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20     */.      if( 
107a0 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
107b0 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20  _STOREP2 ){.    
107c0 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d      pOut = &aMem
107d0 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20  [pOp->p2];.     
107e0 20 20 20 69 43 6f 6d 70 61 72 65 20 3d 20 31 3b     iCompare = 1;
107f0 20 20 20 20 2f 2a 20 4f 70 65 72 61 6e 64 73 20      /* Operands 
10800 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 20 2a 2f  are not equal */
10810 0a 20 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75  .        memAbou
10820 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
10830 74 29 3b 0a 20 20 20 20 20 20 20 20 4d 65 6d 53  t);.        MemS
10840 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
10850 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20   MEM_Null);.    
10860 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
10870 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74  CE(pOp->p2, pOut
10880 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
10890 20 20 20 20 20 20 20 20 56 64 62 65 42 72 61 6e          VdbeBran
108a0 63 68 54 61 6b 65 6e 28 32 2c 33 29 3b 0a 20 20  chTaken(2,3);.  
108b0 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70        if( pOp->p
108c0 35 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  5 & SQLITE_JUMPI
108d0 46 4e 55 4c 4c 20 29 7b 0a 20 20 20 20 20 20 20  FNULL ){.       
108e0 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
108f0 70 32 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  p2;.        }.  
10900 20 20 20 20 7d 0a 20 20 20 20 20 20 62 72 65 61      }.      brea
10910 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  k;.    }.  }else
10920 7b 0a 20 20 20 20 2f 2a 20 4e 65 69 74 68 65 72  {.    /* Neither
10930 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
10940 2e 20 20 44 6f 20 61 20 63 6f 6d 70 61 72 69 73  .  Do a comparis
10950 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 66 66 69 6e  on. */.    affin
10960 69 74 79 20 3d 20 70 4f 70 2d 3e 70 35 20 26 20  ity = pOp->p5 & 
10970 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 3b  SQLITE_AFF_MASK;
10980 0a 20 20 20 20 69 66 28 20 61 66 66 69 6e 69 74  .    if( affinit
10990 79 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  y>=SQLITE_AFF_NU
109a0 4d 45 52 49 43 20 29 7b 0a 20 20 20 20 20 20 69  MERIC ){.      i
109b0 66 28 20 28 66 6c 61 67 73 31 20 7c 20 66 6c 61  f( (flags1 | fla
109c0 67 73 33 29 26 4d 45 4d 5f 53 74 72 20 29 7b 0a  gs3)&MEM_Str ){.
109d0 20 20 20 20 20 20 20 20 69 66 28 20 28 66 6c 61          if( (fla
109e0 67 73 31 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d  gs1 & (MEM_Int|M
109f0 45 4d 5f 49 6e 74 52 65 61 6c 7c 4d 45 4d 5f 52  EM_IntReal|MEM_R
10a00 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d  eal|MEM_Str))==M
10a10 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20  EM_Str ){.      
10a20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
10a30 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 30 29  Affinity(pIn1,0)
10a40 3b 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65  ;.          asse
10a50 72 74 28 20 66 6c 61 67 73 33 3d 3d 70 49 6e 33  rt( flags3==pIn3
10a60 2d 3e 66 6c 61 67 73 20 29 3b 0a 20 20 20 20 20  ->flags );.     
10a70 20 20 20 20 20 2f 2a 20 74 65 73 74 63 61 73 65       /* testcase
10a80 28 20 66 6c 61 67 73 33 21 3d 70 49 6e 33 2d 3e  ( flags3!=pIn3->
10a90 66 6c 61 67 73 20 29 3b 0a 20 20 20 20 20 20 20  flags );.       
10aa0 20 20 20 2a 2a 20 74 68 69 73 20 75 73 65 64 20     ** this used 
10ab0 74 6f 20 62 65 20 70 6f 73 73 69 62 6c 65 20 77  to be possible w
10ac0 69 74 68 20 70 49 6e 31 3d 3d 70 49 6e 33 2c 20  ith pIn1==pIn3, 
10ad0 62 75 74 20 6e 6f 74 20 73 69 6e 63 65 0a 20 20  but not since.  
10ae0 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 20 63          ** the c
10af0 6f 6c 75 6d 6e 20 63 61 63 68 65 20 77 61 73 20  olumn cache was 
10b00 72 65 6d 6f 76 65 64 2e 20 20 54 68 65 20 66 6f  removed.  The fo
10b10 6c 6c 6f 77 69 6e 67 20 61 73 73 69 67 6e 6d 65  llowing assignme
10b20 6e 74 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20  nt.          ** 
10b30 69 73 20 65 73 73 65 6e 74 69 61 6c 6c 79 20 61  is essentially a
10b40 20 6e 6f 2d 6f 70 2e 20 20 42 75 74 2c 20 69 74   no-op.  But, it
10b50 20 70 72 6f 76 69 64 65 73 20 64 65 66 65 6e 73   provides defens
10b60 65 2d 69 6e 2d 64 65 70 74 68 0a 20 20 20 20 20  e-in-depth.     
10b70 20 20 20 20 20 2a 2a 20 69 6e 20 63 61 73 65 20       ** in case 
10b80 6f 75 72 20 61 6e 61 6c 79 73 69 73 20 69 73 20  our analysis is 
10b90 69 6e 63 6f 72 72 65 63 74 2c 20 73 6f 20 69 74  incorrect, so it
10ba0 20 69 73 20 6c 65 66 74 20 69 6e 2e 20 2a 2f 0a   is left in. */.
10bb0 20 20 20 20 20 20 20 20 20 20 66 6c 61 67 73 33            flags3
10bc0 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a   = pIn3->flags;.
10bd0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
10be0 20 20 69 66 28 20 28 66 6c 61 67 73 33 20 26 20    if( (flags3 & 
10bf0 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 49 6e 74  (MEM_Int|MEM_Int
10c00 52 65 61 6c 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45  Real|MEM_Real|ME
10c10 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72  M_Str))==MEM_Str
10c20 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61 70   ){.          ap
10c30 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  plyNumericAffini
10c40 74 79 28 70 49 6e 33 2c 30 29 3b 0a 20 20 20 20  ty(pIn3,0);.    
10c50 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
10c60 20 20 20 20 2f 2a 20 48 61 6e 64 6c 65 20 74 68      /* Handle th
10c70 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 6f 66  e common case of
10c80 20 69 6e 74 65 67 65 72 20 63 6f 6d 70 61 72 69   integer compari
10c90 73 6f 6e 20 68 65 72 65 2c 20 61 73 20 61 6e 0a  son here, as an.
10ca0 20 20 20 20 20 20 2a 2a 20 6f 70 74 69 6d 69 7a        ** optimiz
10cb0 61 74 69 6f 6e 2c 20 74 6f 20 61 76 6f 69 64 20  ation, to avoid 
10cc0 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65  a call to sqlite
10cd0 33 4d 65 6d 43 6f 6d 70 61 72 65 28 29 20 2a 2f  3MemCompare() */
10ce0 0a 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 31  .      if( (pIn1
10cf0 2d 3e 66 6c 61 67 73 20 26 20 70 49 6e 33 2d 3e  ->flags & pIn3->
10d00 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
10d10 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69  !=0 ){.        i
10d20 66 28 20 70 49 6e 33 2d 3e 75 2e 69 20 3e 20 70  f( pIn3->u.i > p
10d30 49 6e 31 2d 3e 75 2e 69 20 29 7b 20 72 65 73 20  In1->u.i ){ res 
10d40 3d 20 2b 31 3b 20 67 6f 74 6f 20 63 6f 6d 70 61  = +1; goto compa
10d50 72 65 5f 6f 70 3b 20 7d 0a 20 20 20 20 20 20 20  re_op; }.       
10d60 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 69 20 3c   if( pIn3->u.i <
10d70 20 70 49 6e 31 2d 3e 75 2e 69 20 29 7b 20 72 65   pIn1->u.i ){ re
10d80 73 20 3d 20 2d 31 3b 20 67 6f 74 6f 20 63 6f 6d  s = -1; goto com
10d90 70 61 72 65 5f 6f 70 3b 20 7d 0a 20 20 20 20 20  pare_op; }.     
10da0 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20     res = 0;.    
10db0 20 20 20 20 67 6f 74 6f 20 63 6f 6d 70 61 72 65      goto compare
10dc0 5f 6f 70 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  _op;.      }.   
10dd0 20 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69 6e   }else if( affin
10de0 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
10df0 54 45 58 54 20 29 7b 0a 20 20 20 20 20 20 69 66  TEXT ){.      if
10e00 28 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f  ( (flags1 & MEM_
10e10 53 74 72 29 3d 3d 30 20 26 26 20 28 66 6c 61 67  Str)==0 && (flag
10e20 73 31 26 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  s1&(MEM_Int|MEM_
10e30 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 52 65 61 6c  Real|MEM_IntReal
10e40 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ))!=0 ){.       
10e50 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 31 2d   testcase( pIn1-
10e60 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
10e70 20 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74   );.        test
10e80 63 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61 67  case( pIn1->flag
10e90 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a  s & MEM_Real );.
10ea0 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65          testcase
10eb0 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
10ec0 4d 45 4d 5f 49 6e 74 52 65 61 6c 20 29 3b 0a 20  MEM_IntReal );. 
10ed0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
10ee0 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70  beMemStringify(p
10ef0 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 2c 20 31  In1, encoding, 1
10f00 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63  );.        testc
10f10 61 73 65 28 20 28 66 6c 61 67 73 31 26 4d 45 4d  ase( (flags1&MEM
10f20 5f 44 79 6e 29 20 21 3d 20 28 70 49 6e 31 2d 3e  _Dyn) != (pIn1->
10f30 66 6c 61 67 73 26 4d 45 4d 5f 44 79 6e 29 20 29  flags&MEM_Dyn) )
10f40 3b 0a 20 20 20 20 20 20 20 20 66 6c 61 67 73 31  ;.        flags1
10f50 20 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20   = (pIn1->flags 
10f60 26 20 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29  & ~MEM_TypeMask)
10f70 20 7c 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d   | (flags1 & MEM
10f80 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20 20 20  _TypeMask);.    
10f90 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31      assert( pIn1
10fa0 21 3d 70 49 6e 33 20 29 3b 0a 20 20 20 20 20 20  !=pIn3 );.      
10fb0 7d 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c 61  }.      if( (fla
10fc0 67 73 33 20 26 20 4d 45 4d 5f 53 74 72 29 3d 3d  gs3 & MEM_Str)==
10fd0 30 20 26 26 20 28 66 6c 61 67 73 33 26 28 4d 45  0 && (flags3&(ME
10fe0 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d  M_Int|MEM_Real|M
10ff0 45 4d 5f 49 6e 74 52 65 61 6c 29 29 21 3d 30 20  EM_IntReal))!=0 
11000 29 7b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63  ){.        testc
11010 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73  ase( pIn3->flags
11020 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20   & MEM_Int );.  
11030 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
11040 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
11050 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20 20 20 20  M_Real );.      
11060 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 33    testcase( pIn3
11070 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
11080 74 52 65 61 6c 20 29 3b 0a 20 20 20 20 20 20 20  tReal );.       
11090 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
110a0 74 72 69 6e 67 69 66 79 28 70 49 6e 33 2c 20 65  tringify(pIn3, e
110b0 6e 63 6f 64 69 6e 67 2c 20 31 29 3b 0a 20 20 20  ncoding, 1);.   
110c0 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 28       testcase( (
110d0 66 6c 61 67 73 33 26 4d 45 4d 5f 44 79 6e 29 20  flags3&MEM_Dyn) 
110e0 21 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 26  != (pIn3->flags&
110f0 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20  MEM_Dyn) );.    
11100 20 20 20 20 66 6c 61 67 73 33 20 3d 20 28 70 49      flags3 = (pI
11110 6e 33 2d 3e 66 6c 61 67 73 20 26 20 7e 4d 45 4d  n3->flags & ~MEM
11120 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c  _TypeMask) | (fl
11130 61 67 73 33 20 26 20 4d 45 4d 5f 54 79 70 65 4d  ags3 & MEM_TypeM
11140 61 73 6b 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ask);.      }.  
11150 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20    }.    assert( 
11160 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
11170 43 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f 70 2d 3e  COLLSEQ || pOp->
11180 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20  p4.pColl==0 );. 
11190 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33     res = sqlite3
111a0 4d 65 6d 43 6f 6d 70 61 72 65 28 70 49 6e 33 2c  MemCompare(pIn3,
111b0 20 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e 70   pIn1, pOp->p4.p
111c0 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 63 6f 6d 70 61  Coll);.  }.compa
111d0 72 65 5f 6f 70 3a 0a 20 20 2f 2a 20 41 74 20 74  re_op:.  /* At t
111e0 68 69 73 20 70 6f 69 6e 74 2c 20 72 65 73 20 69  his point, res i
111f0 73 20 6e 65 67 61 74 69 76 65 2c 20 7a 65 72 6f  s negative, zero
11200 2c 20 6f 72 20 70 6f 73 69 74 69 76 65 20 69 66  , or positive if
11210 20 72 65 67 5b 50 31 5d 20 69 73 0a 20 20 2a 2a   reg[P1] is.  **
11220 20 6c 65 73 73 20 74 68 61 6e 2c 20 65 71 75 61   less than, equa
11230 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74 65 72  l to, or greater
11240 20 74 68 61 6e 20 72 65 67 5b 50 33 5d 2c 20 72   than reg[P3], r
11250 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 43 6f  espectively.  Co
11260 6d 70 75 74 65 0a 20 20 2a 2a 20 74 68 65 20 61  mpute.  ** the a
11270 6e 73 77 65 72 20 74 6f 20 74 68 69 73 20 6f 70  nswer to this op
11280 65 72 61 74 6f 72 20 69 6e 20 72 65 73 32 2c 20  erator in res2, 
11290 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 61  depending on wha
112a0 74 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  t the comparison
112b0 0a 20 20 2a 2a 20 6f 70 65 72 61 74 6f 72 20 61  .  ** operator a
112c0 63 74 75 61 6c 6c 79 20 69 73 2e 20 20 54 68 65  ctually is.  The
112d0 20 6e 65 78 74 20 62 6c 6f 63 6b 20 6f 66 20 63   next block of c
112e0 6f 64 65 20 64 65 70 65 6e 64 73 20 6f 6e 20 74  ode depends on t
112f0 68 65 20 66 61 63 74 0a 20 20 2a 2a 20 74 68 61  he fact.  ** tha
11300 74 20 74 68 65 20 36 20 63 6f 6d 70 61 72 69 73  t the 6 comparis
11310 6f 6e 20 6f 70 65 72 61 74 6f 72 73 20 61 72 65  on operators are
11320 20 63 6f 6e 73 65 63 75 74 69 76 65 20 69 6e 74   consecutive int
11330 65 67 65 72 73 20 69 6e 20 74 68 69 73 0a 20 20  egers in this.  
11340 2a 2a 20 6f 72 64 65 72 3a 20 20 4e 45 2c 20 45  ** order:  NE, E
11350 51 2c 20 47 54 2c 20 4c 45 2c 20 4c 54 2c 20 47  Q, GT, LE, LT, G
11360 45 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 4f  E */.  assert( O
11370 50 5f 45 71 3d 3d 4f 50 5f 4e 65 2b 31 20 29 3b  P_Eq==OP_Ne+1 );
11380 20 61 73 73 65 72 74 28 20 4f 50 5f 47 74 3d 3d   assert( OP_Gt==
11390 4f 50 5f 4e 65 2b 32 20 29 3b 20 61 73 73 65 72  OP_Ne+2 ); asser
113a0 74 28 20 4f 50 5f 4c 65 3d 3d 4f 50 5f 4e 65 2b  t( OP_Le==OP_Ne+
113b0 33 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f  3 );.  assert( O
113c0 50 5f 4c 74 3d 3d 4f 50 5f 4e 65 2b 34 20 29 3b  P_Lt==OP_Ne+4 );
113d0 20 61 73 73 65 72 74 28 20 4f 50 5f 47 65 3d 3d   assert( OP_Ge==
113e0 4f 50 5f 4e 65 2b 35 20 29 3b 0a 20 20 69 66 28  OP_Ne+5 );.  if(
113f0 20 72 65 73 3c 30 20 29 7b 20 20 20 20 20 20 20   res<0 ){       
11400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11410 20 2f 2a 20 6e 65 2c 20 65 71 2c 20 67 74 2c 20   /* ne, eq, gt, 
11420 6c 65 2c 20 6c 74 2c 20 67 65 20 2a 2f 0a 20 20  le, lt, ge */.  
11430 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75    static const u
11440 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61 4c 54  nsigned char aLT
11450 62 5b 5d 20 3d 20 7b 20 31 2c 20 20 30 2c 20 20  b[] = { 1,  0,  
11460 30 2c 20 20 31 2c 20 20 31 2c 20 20 30 20 7d 3b  0,  1,  1,  0 };
11470 0a 20 20 20 20 72 65 73 32 20 3d 20 61 4c 54 62  .    res2 = aLTb
11480 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 2d 20 4f  [pOp->opcode - O
11490 50 5f 4e 65 5d 3b 0a 20 20 7d 65 6c 73 65 20 69  P_Ne];.  }else i
114a0 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20  f( res==0 ){.   
114b0 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e   static const un
114c0 73 69 67 6e 65 64 20 63 68 61 72 20 61 45 51 62  signed char aEQb
114d0 5b 5d 20 3d 20 7b 20 30 2c 20 20 31 2c 20 20 30  [] = { 0,  1,  0
114e0 2c 20 20 31 2c 20 20 30 2c 20 20 31 20 7d 3b 0a  ,  1,  0,  1 };.
114f0 20 20 20 20 72 65 73 32 20 3d 20 61 45 51 62 5b      res2 = aEQb[
11500 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 2d 20 4f 50  pOp->opcode - OP
11510 5f 4e 65 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  _Ne];.  }else{. 
11520 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
11530 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61 47  unsigned char aG
11540 54 62 5b 5d 20 3d 20 7b 20 31 2c 20 20 30 2c 20  Tb[] = { 1,  0, 
11550 20 31 2c 20 20 30 2c 20 20 30 2c 20 20 31 20 7d   1,  0,  0,  1 }
11560 3b 0a 20 20 20 20 72 65 73 32 20 3d 20 61 47 54  ;.    res2 = aGT
11570 62 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 2d 20  b[pOp->opcode - 
11580 4f 50 5f 4e 65 5d 3b 0a 20 20 7d 0a 0a 20 20 2f  OP_Ne];.  }..  /
11590 2a 20 55 6e 64 6f 20 61 6e 79 20 63 68 61 6e 67  * Undo any chang
115a0 65 73 20 6d 61 64 65 20 62 79 20 61 70 70 6c 79  es made by apply
115b0 41 66 66 69 6e 69 74 79 28 29 20 74 6f 20 74 68  Affinity() to th
115c0 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72  e input register
115d0 73 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  s. */.  assert( 
115e0 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
115f0 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61 67  EM_Dyn) == (flag
11600 73 31 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b  s1 & MEM_Dyn) );
11610 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d  .  pIn1->flags =
11620 20 66 6c 61 67 73 31 3b 0a 20 20 61 73 73 65 72   flags1;.  asser
11630 74 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  t( (pIn3->flags 
11640 26 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66  & MEM_Dyn) == (f
11650 6c 61 67 73 33 20 26 20 4d 45 4d 5f 44 79 6e 29  lags3 & MEM_Dyn)
11660 20 29 3b 0a 20 20 70 49 6e 33 2d 3e 66 6c 61 67   );.  pIn3->flag
11670 73 20 3d 20 66 6c 61 67 73 33 3b 0a 0a 20 20 69  s = flags3;..  i
11680 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c  f( pOp->p5 & SQL
11690 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20  ITE_STOREP2 ){. 
116a0 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b     pOut = &aMem[
116b0 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 69 43  pOp->p2];.    iC
116c0 6f 6d 70 61 72 65 20 3d 20 72 65 73 3b 0a 20 20  ompare = res;.  
116d0 20 20 69 66 28 20 28 70 4f 70 2d 3e 70 35 20 26    if( (pOp->p5 &
116e0 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e 55 4c 4c   SQLITE_KEEPNULL
116f0 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a  )!=0 ){.      /*
11700 20 54 68 65 20 4b 45 45 50 4e 55 4c 4c 20 66 6c   The KEEPNULL fl
11710 61 67 20 70 72 65 76 65 6e 74 73 20 4f 50 5f 45  ag prevents OP_E
11720 71 20 66 72 6f 6d 20 6f 76 65 72 77 72 69 74 69  q from overwriti
11730 6e 67 20 61 20 4e 55 4c 4c 20 77 69 74 68 20 31  ng a NULL with 1
11740 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64 20 70 72  .      ** and pr
11750 65 76 65 6e 74 73 20 4f 50 5f 4e 65 20 66 72 6f  events OP_Ne fro
11760 6d 20 6f 76 65 72 77 72 69 74 69 6e 67 20 4e 55  m overwriting NU
11770 4c 4c 20 77 69 74 68 20 30 2e 20 20 54 68 69 73  LL with 0.  This
11780 20 66 6c 61 67 0a 20 20 20 20 20 20 2a 2a 20 69   flag.      ** i
11790 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e 20 63  s only used in c
117a0 6f 6e 74 65 78 74 73 20 77 68 65 72 65 20 65 69  ontexts where ei
117b0 74 68 65 72 3a 0a 20 20 20 20 20 20 2a 2a 20 20  ther:.      **  
117c0 20 28 31 29 20 6f 70 3d 3d 4f 50 5f 45 71 20 26   (1) op==OP_Eq &
117d0 26 20 28 72 5b 50 32 5d 3d 3d 4e 55 4c 4c 20 7c  & (r[P2]==NULL |
117e0 7c 20 72 5b 50 32 5d 3d 3d 30 29 0a 20 20 20 20  | r[P2]==0).    
117f0 20 20 2a 2a 20 20 20 28 32 29 20 6f 70 3d 3d 4f    **   (2) op==O
11800 50 5f 4e 65 20 26 26 20 28 72 5b 50 32 5d 3d 3d  P_Ne && (r[P2]==
11810 4e 55 4c 4c 20 7c 7c 20 72 5b 50 32 5d 3d 3d 31  NULL || r[P2]==1
11820 29 0a 20 20 20 20 20 20 2a 2a 20 54 68 65 72 65  ).      ** There
11830 66 6f 72 65 20 69 74 20 69 73 20 6e 6f 74 20 6e  fore it is not n
11840 65 63 65 73 73 61 72 79 20 74 6f 20 63 68 65 63  ecessary to chec
11850 6b 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  k the content of
11860 20 72 5b 50 32 5d 20 66 6f 72 0a 20 20 20 20 20   r[P2] for.     
11870 20 2a 2a 20 4e 55 4c 4c 2e 20 2a 2f 0a 20 20 20   ** NULL. */.   
11880 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
11890 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 7c 7c  opcode==OP_Ne ||
118a0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
118b0 5f 45 71 20 29 3b 0a 20 20 20 20 20 20 61 73 73  _Eq );.      ass
118c0 65 72 74 28 20 72 65 73 32 3d 3d 30 20 7c 7c 20  ert( res2==0 || 
118d0 72 65 73 32 3d 3d 31 20 29 3b 0a 20 20 20 20 20  res2==1 );.     
118e0 20 74 65 73 74 63 61 73 65 28 20 72 65 73 32 3d   testcase( res2=
118f0 3d 30 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f 64  =0 && pOp->opcod
11900 65 3d 3d 4f 50 5f 45 71 20 29 3b 0a 20 20 20 20  e==OP_Eq );.    
11910 20 20 74 65 73 74 63 61 73 65 28 20 72 65 73 32    testcase( res2
11920 3d 3d 31 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f  ==1 && pOp->opco
11930 64 65 3d 3d 4f 50 5f 45 71 20 29 3b 0a 20 20 20  de==OP_Eq );.   
11940 20 20 20 74 65 73 74 63 61 73 65 28 20 72 65 73     testcase( res
11950 32 3d 3d 30 20 26 26 20 70 4f 70 2d 3e 6f 70 63  2==0 && pOp->opc
11960 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20  ode==OP_Ne );.  
11970 20 20 20 20 74 65 73 74 63 61 73 65 28 20 72 65      testcase( re
11980 73 32 3d 3d 31 20 26 26 20 70 4f 70 2d 3e 6f 70  s2==1 && pOp->op
11990 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20  code==OP_Ne );. 
119a0 20 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f       if( (pOp->o
119b0 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 29 3d 3d 72  pcode==OP_Eq)==r
119c0 65 73 32 20 29 20 62 72 65 61 6b 3b 0a 20 20 20  es2 ) break;.   
119d0 20 7d 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54   }.    memAboutT
119e0 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29  oChange(p, pOut)
119f0 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
11a00 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49  Flag(pOut, MEM_I
11a10 6e 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  nt);.    pOut->u
11a20 2e 69 20 3d 20 72 65 73 32 3b 0a 20 20 20 20 52  .i = res2;.    R
11a30 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
11a40 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20  p->p2, pOut);.  
11a50 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42  }else{.    VdbeB
11a60 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 32 21  ranchTaken(res2!
11a70 3d 30 2c 20 28 70 4f 70 2d 3e 70 35 20 26 20 53  =0, (pOp->p5 & S
11a80 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 29 3f 32 3a  QLITE_NULLEQ)?2:
11a90 33 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73 32  3);.    if( res2
11aa0 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a   ){.      goto j
11ab0 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d  ump_to_p2;.    }
11ac0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
11ad0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 6c 73 65  ./* Opcode: Else
11ae0 4e 6f 74 45 71 20 2a 20 50 32 20 2a 20 2a 20 2a  NotEq * P2 * * *
11af0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
11b00 64 65 20 6d 75 73 74 20 69 6d 6d 65 64 69 61 74  de must immediat
11b10 65 6c 79 20 66 6f 6c 6c 6f 77 20 61 6e 20 4f 50  ely follow an OP
11b20 5f 4c 74 20 6f 72 20 4f 50 5f 47 74 20 63 6f 6d  _Lt or OP_Gt com
11b30 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72  parison operator
11b40 2e 0a 2a 2a 20 49 66 20 72 65 73 75 6c 74 20 6f  ..** If result o
11b50 66 20 61 6e 20 4f 50 5f 45 71 20 63 6f 6d 70 61  f an OP_Eq compa
11b60 72 69 73 6f 6e 20 6f 6e 20 74 68 65 20 73 61 6d  rison on the sam
11b70 65 20 74 77 6f 20 6f 70 65 72 61 6e 64 73 0a 2a  e two operands.*
11b80 2a 20 77 6f 75 6c 64 20 68 61 76 65 20 62 65 20  * would have be 
11b90 4e 55 4c 4c 20 6f 72 20 66 61 6c 73 65 20 28 30  NULL or false (0
11ba0 29 2c 20 74 68 65 6e 20 74 68 65 6e 20 6a 75 6d  ), then then jum
11bb0 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 20 49 66 20  p to P2. .** If 
11bc0 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61 6e  the result of an
11bd0 20 4f 50 5f 45 71 20 63 6f 6d 70 61 72 69 73 6f   OP_Eq compariso
11be0 6e 20 6f 6e 20 74 68 65 20 74 77 6f 20 70 72 65  n on the two pre
11bf0 76 69 6f 75 73 20 6f 70 65 72 61 6e 64 73 0a 2a  vious operands.*
11c00 2a 20 77 6f 75 6c 64 20 68 61 76 65 20 62 65 65  * would have bee
11c10 6e 20 74 72 75 65 20 28 31 29 2c 20 74 68 65 6e  n true (1), then
11c20 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 2e 0a 2a   fall through..*
11c30 2f 0a 63 61 73 65 20 4f 50 5f 45 6c 73 65 4e 6f  /.case OP_ElseNo
11c40 74 45 71 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20  tEq: {       /* 
11c50 73 61 6d 65 20 61 73 20 54 4b 5f 45 53 43 41 50  same as TK_ESCAP
11c60 45 2c 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73  E, jump */.  ass
11c70 65 72 74 28 20 70 4f 70 3e 61 4f 70 20 29 3b 0a  ert( pOp>aOp );.
11c80 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31    assert( pOp[-1
11c90 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4c 74 20  ].opcode==OP_Lt 
11ca0 7c 7c 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64  || pOp[-1].opcod
11cb0 65 3d 3d 4f 50 5f 47 74 20 29 3b 0a 20 20 61 73  e==OP_Gt );.  as
11cc0 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 35  sert( pOp[-1].p5
11cd0 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50   & SQLITE_STOREP
11ce0 32 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  2 );.  VdbeBranc
11cf0 68 54 61 6b 65 6e 28 69 43 6f 6d 70 61 72 65 21  hTaken(iCompare!
11d00 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 69 43  =0, 2);.  if( iC
11d10 6f 6d 70 61 72 65 21 3d 30 20 29 20 67 6f 74 6f  ompare!=0 ) goto
11d20 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62   jump_to_p2;.  b
11d30 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63  reak;.}.../* Opc
11d40 6f 64 65 3a 20 50 65 72 6d 75 74 61 74 69 6f 6e  ode: Permutation
11d50 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a   * * * P4 *.**.*
11d60 2a 20 53 65 74 20 74 68 65 20 70 65 72 6d 75 74  * Set the permut
11d70 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68  ation used by th
11d80 65 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65  e OP_Compare ope
11d90 72 61 74 6f 72 20 69 6e 20 74 68 65 20 6e 65 78  rator in the nex
11da0 74 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e  t.** instruction
11db0 2e 20 20 54 68 65 20 70 65 72 6d 75 74 61 74 69  .  The permutati
11dc0 6f 6e 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  on is stored in 
11dd0 74 68 65 20 50 34 20 6f 70 65 72 61 6e 64 2e 0a  the P4 operand..
11de0 2a 2a 0a 2a 2a 20 54 68 65 20 70 65 72 6d 75 74  **.** The permut
11df0 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 76 61  ation is only va
11e00 6c 69 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65  lid until the ne
11e10 78 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 74 68  xt OP_Compare th
11e20 61 74 20 68 61 73 0a 2a 2a 20 74 68 65 20 4f 50  at has.** the OP
11e30 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74  FLAG_PERMUTE bit
11e40 20 73 65 74 20 69 6e 20 50 35 2e 20 54 79 70 69   set in P5. Typi
11e50 63 61 6c 6c 79 20 74 68 65 20 4f 50 5f 50 65 72  cally the OP_Per
11e60 6d 75 74 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20  mutation should 
11e70 0a 2a 2a 20 6f 63 63 75 72 20 69 6d 6d 65 64 69  .** occur immedi
11e80 61 74 65 6c 79 20 70 72 69 6f 72 20 74 6f 20 74  ately prior to t
11e90 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a  he OP_Compare..*
11ea0 2a 0a 2a 2a 20 54 68 65 20 66 69 72 73 74 20 69  *.** The first i
11eb0 6e 74 65 67 65 72 20 69 6e 20 74 68 65 20 50 34  nteger in the P4
11ec0 20 69 6e 74 65 67 65 72 20 61 72 72 61 79 20 69   integer array i
11ed0 73 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20  s the length of 
11ee0 74 68 65 20 61 72 72 61 79 0a 2a 2a 20 61 6e 64  the array.** and
11ef0 20 64 6f 65 73 20 6e 6f 74 20 62 65 63 6f 6d 65   does not become
11f00 20 70 61 72 74 20 6f 66 20 74 68 65 20 70 65 72   part of the per
11f10 6d 75 74 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  mutation..*/.cas
11f20 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e  e OP_Permutation
11f30 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
11f40 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
11f50 54 41 52 52 41 59 20 29 3b 0a 20 20 61 73 73 65  TARRAY );.  asse
11f60 72 74 28 20 70 4f 70 2d 3e 70 34 2e 61 69 20 29  rt( pOp->p4.ai )
11f70 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b  ;.  assert( pOp[
11f80 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f  1].opcode==OP_Co
11f90 6d 70 61 72 65 20 29 3b 0a 20 20 61 73 73 65 72  mpare );.  asser
11fa0 74 28 20 70 4f 70 5b 31 5d 2e 70 35 20 26 20 4f  t( pOp[1].p5 & O
11fb0 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 29 3b  PFLAG_PERMUTE );
11fc0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
11fd0 4f 70 63 6f 64 65 3a 20 43 6f 6d 70 61 72 65 20  Opcode: Compare 
11fe0 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
11ff0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31  * Synopsis: r[P1
12000 40 50 33 5d 20 3c 2d 3e 20 72 5b 50 32 40 50 33  @P3] <-> r[P2@P3
12010 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20  ].**.** Compare 
12020 74 77 6f 20 76 65 63 74 6f 72 73 20 6f 66 20 72  two vectors of r
12030 65 67 69 73 74 65 72 73 20 69 6e 20 72 65 67 28  egisters in reg(
12040 50 31 29 2e 2e 72 65 67 28 50 31 2b 50 33 2d 31  P1)..reg(P1+P3-1
12050 29 20 28 63 61 6c 6c 20 74 68 69 73 0a 2a 2a 20  ) (call this.** 
12060 76 65 63 74 6f 72 20 22 41 22 29 20 61 6e 64 20  vector "A") and 
12070 69 6e 20 72 65 67 28 50 32 29 2e 2e 72 65 67 28  in reg(P2)..reg(
12080 50 32 2b 50 33 2d 31 29 20 28 22 42 22 29 2e 20  P2+P3-1) ("B"). 
12090 20 53 61 76 65 20 74 68 65 20 72 65 73 75 6c 74   Save the result
120a0 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61   of.** the compa
120b0 72 69 73 6f 6e 20 66 6f 72 20 75 73 65 20 62 79  rison for use by
120c0 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 4a 75 6d   the next OP_Jum
120d0 70 20 69 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a  p instruct..**.*
120e0 2a 20 49 66 20 50 35 20 68 61 73 20 74 68 65 20  * If P5 has the 
120f0 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62  OPFLAG_PERMUTE b
12100 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65  it set, then the
12110 20 6f 72 64 65 72 20 6f 66 20 63 6f 6d 70 61 72   order of compar
12120 69 73 6f 6e 20 69 73 0a 2a 2a 20 64 65 74 65 72  ison is.** deter
12130 6d 69 6e 65 64 20 62 79 20 74 68 65 20 6d 6f 73  mined by the mos
12140 74 20 72 65 63 65 6e 74 20 4f 50 5f 50 65 72 6d  t recent OP_Perm
12150 75 74 61 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72  utation operator
12160 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 4f 50 46  .  If the.** OPF
12170 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20  LAG_PERMUTE bit 
12180 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 72  is clear, then r
12190 65 67 69 73 74 65 72 20 61 72 65 20 63 6f 6d 70  egister are comp
121a0 61 72 65 64 20 69 6e 20 73 65 71 75 65 6e 74 69  ared in sequenti
121b0 61 6c 0a 2a 2a 20 6f 72 64 65 72 2e 0a 2a 2a 0a  al.** order..**.
121c0 2a 2a 20 50 34 20 69 73 20 61 20 4b 65 79 49 6e  ** P4 is a KeyIn
121d0 66 6f 20 73 74 72 75 63 74 75 72 65 20 74 68 61  fo structure tha
121e0 74 20 64 65 66 69 6e 65 73 20 63 6f 6c 6c 61 74  t defines collat
121f0 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 61 6e  ing sequences an
12200 64 20 73 6f 72 74 0a 2a 2a 20 6f 72 64 65 72 73  d sort.** orders
12210 20 66 6f 72 20 74 68 65 20 63 6f 6d 70 61 72 69   for the compari
12220 73 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d 75 74  son.  The permut
12230 61 74 69 6f 6e 20 61 70 70 6c 69 65 73 20 74 6f  ation applies to
12240 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 6f 6e   registers.** on
12250 6c 79 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f  ly.  The KeyInfo
12260 20 65 6c 65 6d 65 6e 74 73 20 61 72 65 20 75 73   elements are us
12270 65 64 20 73 65 71 75 65 6e 74 69 61 6c 6c 79 2e  ed sequentially.
12280 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 70 61  .**.** The compa
12290 72 69 73 6f 6e 20 69 73 20 61 20 73 6f 72 74 20  rison is a sort 
122a0 63 6f 6d 70 61 72 69 73 6f 6e 2c 20 73 6f 20 4e  comparison, so N
122b0 55 4c 4c 73 20 63 6f 6d 70 61 72 65 20 65 71 75  ULLs compare equ
122c0 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72 65  al,.** NULLs are
122d0 20 6c 65 73 73 20 74 68 61 6e 20 6e 75 6d 62 65   less than numbe
122e0 72 73 2c 20 6e 75 6d 62 65 72 73 20 61 72 65 20  rs, numbers are 
122f0 6c 65 73 73 20 74 68 61 6e 20 73 74 72 69 6e 67  less than string
12300 73 2c 0a 2a 2a 20 61 6e 64 20 73 74 72 69 6e 67  s,.** and string
12310 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20  s are less than 
12320 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  blobs..*/.case O
12330 50 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 69  P_Compare: {.  i
12340 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20  nt n;.  int i;. 
12350 20 69 6e 74 20 70 31 3b 0a 20 20 69 6e 74 20 70   int p1;.  int p
12360 32 3b 0a 20 20 63 6f 6e 73 74 20 4b 65 79 49 6e  2;.  const KeyIn
12370 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  fo *pKeyInfo;.  
12380 69 6e 74 20 69 64 78 3b 0a 20 20 43 6f 6c 6c 53  int idx;.  CollS
12390 65 71 20 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a  eq *pColl;    /*
123a0 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   Collating seque
123b0 6e 63 65 20 74 6f 20 75 73 65 20 6f 6e 20 74 68  nce to use on th
123c0 69 73 20 74 65 72 6d 20 2a 2f 0a 20 20 69 6e 74  is term */.  int
123d0 20 62 52 65 76 3b 20 20 20 20 20 20 20 20 20 20   bRev;          
123e0 2f 2a 20 54 72 75 65 20 66 6f 72 20 44 45 53 43  /* True for DESC
123f0 45 4e 44 49 4e 47 20 73 6f 72 74 20 6f 72 64 65  ENDING sort orde
12400 72 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 50 65 72  r */.  int *aPer
12410 6d 75 74 65 3b 20 20 20 20 20 2f 2a 20 54 68 65  mute;     /* The
12420 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a   permutation */.
12430 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e 70 35 20  .  if( (pOp->p5 
12440 26 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  & OPFLAG_PERMUTE
12450 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 50 65 72  )==0 ){.    aPer
12460 6d 75 74 65 20 3d 20 30 3b 0a 20 20 7d 65 6c 73  mute = 0;.  }els
12470 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
12480 4f 70 3e 61 4f 70 20 29 3b 0a 20 20 20 20 61 73  Op>aOp );.    as
12490 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70  sert( pOp[-1].op
124a0 63 6f 64 65 3d 3d 4f 50 5f 50 65 72 6d 75 74 61  code==OP_Permuta
124b0 74 69 6f 6e 20 29 3b 0a 20 20 20 20 61 73 73 65  tion );.    asse
124c0 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 34 74 79  rt( pOp[-1].p4ty
124d0 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59 20  pe==P4_INTARRAY 
124e0 29 3b 0a 20 20 20 20 61 50 65 72 6d 75 74 65 20  );.    aPermute 
124f0 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 61 69 20  = pOp[-1].p4.ai 
12500 2b 20 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28  + 1;.    assert(
12510 20 61 50 65 72 6d 75 74 65 21 3d 30 20 29 3b 0a   aPermute!=0 );.
12520 20 20 7d 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70    }.  n = pOp->p
12530 33 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20  3;.  pKeyInfo = 
12540 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f  pOp->p4.pKeyInfo
12550 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20  ;.  assert( n>0 
12560 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4b 65  );.  assert( pKe
12570 79 49 6e 66 6f 21 3d 30 20 29 3b 0a 20 20 70 31  yInfo!=0 );.  p1
12580 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32   = pOp->p1;.  p2
12590 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 23 69 66 64   = pOp->p2;.#ifd
125a0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
125b0 20 20 69 66 28 20 61 50 65 72 6d 75 74 65 20 29    if( aPermute )
125c0 7b 0a 20 20 20 20 69 6e 74 20 6b 2c 20 6d 78 20  {.    int k, mx 
125d0 3d 20 30 3b 0a 20 20 20 20 66 6f 72 28 6b 3d 30  = 0;.    for(k=0
125e0 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20 69 66 28 20  ; k<n; k++) if( 
125f0 61 50 65 72 6d 75 74 65 5b 6b 5d 3e 6d 78 20 29  aPermute[k]>mx )
12600 20 6d 78 20 3d 20 61 50 65 72 6d 75 74 65 5b 6b   mx = aPermute[k
12610 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ];.    assert( p
12620 31 3e 30 20 26 26 20 70 31 2b 6d 78 3c 3d 28 70  1>0 && p1+mx<=(p
12630 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
12640 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20  ursor)+1 );.    
12650 61 73 73 65 72 74 28 20 70 32 3e 30 20 26 26 20  assert( p2>0 && 
12660 70 32 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p2+mx<=(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 65 6c 73 65 7b 0a 20 20  1 );.  }else{.  
12690 20 20 61 73 73 65 72 74 28 20 70 31 3e 30 20 26    assert( p1>0 &
126a0 26 20 70 31 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d  & p1+n<=(p->nMem
126b0 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
126c0 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  +1 );.    assert
126d0 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6e 3c 3d  ( p2>0 && p2+n<=
126e0 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
126f0 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20  nCursor)+1 );.  
12700 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
12710 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20 66 6f  TE_DEBUG */.  fo
12720 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29  r(i=0; i<n; i++)
12730 7b 0a 20 20 20 20 69 64 78 20 3d 20 61 50 65 72  {.    idx = aPer
12740 6d 75 74 65 20 3f 20 61 50 65 72 6d 75 74 65 5b  mute ? aPermute[
12750 69 5d 20 3a 20 69 3b 0a 20 20 20 20 61 73 73 65  i] : i;.    asse
12760 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
12770 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 20 29 3b  aMem[p1+idx]) );
12780 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
12790 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 32  IsValid(&aMem[p2
127a0 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20 20 52 45  +idx]) );.    RE
127b0 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 31 2b  GISTER_TRACE(p1+
127c0 69 64 78 2c 20 26 61 4d 65 6d 5b 70 31 2b 69 64  idx, &aMem[p1+id
127d0 78 5d 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  x]);.    REGISTE
127e0 52 5f 54 52 41 43 45 28 70 32 2b 69 64 78 2c 20  R_TRACE(p2+idx, 
127f0 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a  &aMem[p2+idx]);.
12800 20 20 20 20 61 73 73 65 72 74 28 20 69 3c 70 4b      assert( i<pK
12810 65 79 49 6e 66 6f 2d 3e 6e 4b 65 79 46 69 65 6c  eyInfo->nKeyFiel
12820 64 20 29 3b 0a 20 20 20 20 70 43 6f 6c 6c 20 3d  d );.    pColl =
12830 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c   pKeyInfo->aColl
12840 5b 69 5d 3b 0a 20 20 20 20 62 52 65 76 20 3d 20  [i];.    bRev = 
12850 28 70 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f 72 74  (pKeyInfo->aSort
12860 46 6c 61 67 73 5b 69 5d 20 26 20 4b 45 59 49 4e  Flags[i] & KEYIN
12870 46 4f 5f 4f 52 44 45 52 5f 44 45 53 43 29 3b 0a  FO_ORDER_DESC);.
12880 20 20 20 20 69 43 6f 6d 70 61 72 65 20 3d 20 73      iCompare = s
12890 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65  qlite3MemCompare
128a0 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 2c 20  (&aMem[p1+idx], 
128b0 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 2c 20 70  &aMem[p2+idx], p
128c0 43 6f 6c 6c 29 3b 0a 20 20 20 20 69 66 28 20 69  Coll);.    if( i
128d0 43 6f 6d 70 61 72 65 20 29 7b 0a 20 20 20 20 20  Compare ){.     
128e0 20 69 66 28 20 28 70 4b 65 79 49 6e 66 6f 2d 3e   if( (pKeyInfo->
128f0 61 53 6f 72 74 46 6c 61 67 73 5b 69 5d 20 26 20  aSortFlags[i] & 
12900 4b 45 59 49 4e 46 4f 5f 4f 52 44 45 52 5f 42 49  KEYINFO_ORDER_BI
12910 47 4e 55 4c 4c 29 20 0a 20 20 20 20 20 20 20 26  GNULL) .       &
12920 26 20 28 28 61 4d 65 6d 5b 70 31 2b 69 64 78 5d  & ((aMem[p1+idx]
12930 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  .flags & MEM_Nul
12940 6c 29 20 7c 7c 20 28 61 4d 65 6d 5b 70 32 2b 69  l) || (aMem[p2+i
12950 64 78 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  dx].flags & MEM_
12960 4e 75 6c 6c 29 29 0a 20 20 20 20 20 20 29 7b 0a  Null)).      ){.
12970 20 20 20 20 20 20 20 20 69 43 6f 6d 70 61 72 65          iCompare
12980 20 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20 20   = -iCompare;.  
12990 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
129a0 62 52 65 76 20 29 20 69 43 6f 6d 70 61 72 65 20  bRev ) iCompare 
129b0 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20 20 20  = -iCompare;.   
129c0 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
129d0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
129e0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 20  /* Opcode: Jump 
129f0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
12a00 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 69  ** Jump to the i
12a10 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20 61 64  nstruction at ad
12a20 64 72 65 73 73 20 50 31 2c 20 50 32 2c 20 6f 72  dress P1, P2, or
12a30 20 50 33 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e   P3 depending on
12a40 20 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e 20 74   whether.** in t
12a50 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f  he most recent O
12a60 50 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74 72 75  P_Compare instru
12a70 63 74 69 6f 6e 20 74 68 65 20 50 31 20 76 65 63  ction the P1 vec
12a80 74 6f 72 20 77 61 73 20 6c 65 73 73 20 74 68 61  tor was less tha
12a90 6e 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c 20 6f  n.** equal to, o
12aa0 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74  r greater than t
12ab0 68 65 20 50 32 20 76 65 63 74 6f 72 2c 20 72 65  he P2 vector, re
12ac0 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63  spectively..*/.c
12ad0 61 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20  ase OP_Jump: {  
12ae0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
12af0 6d 70 20 2a 2f 0a 20 20 69 66 28 20 69 43 6f 6d  mp */.  if( iCom
12b00 70 61 72 65 3c 30 20 29 7b 0a 20 20 20 20 56 64  pare<0 ){.    Vd
12b10 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c  beBranchTaken(0,
12b20 34 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70  4); pOp = &aOp[p
12b30 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20 20 7d  Op->p1 - 1];.  }
12b40 65 6c 73 65 20 69 66 28 20 69 43 6f 6d 70 61 72  else if( iCompar
12b50 65 3d 3d 30 20 29 7b 0a 20 20 20 20 56 64 62 65  e==0 ){.    Vdbe
12b60 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 34 29  BranchTaken(1,4)
12b70 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70  ; pOp = &aOp[pOp
12b80 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 7d 65 6c  ->p2 - 1];.  }el
12b90 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e  se{.    VdbeBran
12ba0 63 68 54 61 6b 65 6e 28 32 2c 34 29 3b 20 70 4f  chTaken(2,4); pO
12bb0 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 33  p = &aOp[pOp->p3
12bc0 20 2d 20 31 5d 3b 0a 20 20 7d 0a 20 20 62 72 65   - 1];.  }.  bre
12bd0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
12be0 3a 20 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a  : And P1 P2 P3 *
12bf0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
12c00 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 26 26 20  r[P3]=(r[P1] && 
12c10 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b  r[P2]).**.** Tak
12c20 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 41 4e  e the logical AN
12c30 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  D of the values 
12c40 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31 20  in registers P1 
12c50 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 77 72  and P2 and.** wr
12c60 69 74 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ite the result i
12c70 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e  nto register P3.
12c80 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  .**.** If either
12c90 20 50 31 20 6f 72 20 50 32 20 69 73 20 30 20 28   P1 or P2 is 0 (
12ca0 66 61 6c 73 65 29 20 74 68 65 6e 20 74 68 65 20  false) then the 
12cb0 72 65 73 75 6c 74 20 69 73 20 30 20 65 76 65 6e  result is 0 even
12cc0 20 69 66 0a 2a 2a 20 74 68 65 20 6f 74 68 65 72   if.** the other
12cd0 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20   input is NULL. 
12ce0 20 41 20 4e 55 4c 4c 20 61 6e 64 20 74 72 75 65   A NULL and true
12cf0 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 20 67 69   or two NULLs gi
12d00 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75 74  ve.** a NULL out
12d10 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  put..*/./* Opcod
12d20 65 3a 20 4f 72 20 50 31 20 50 32 20 50 33 20 2a  e: Or P1 P2 P3 *
12d30 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
12d40 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 7c 7c 20  r[P3]=(r[P1] || 
12d50 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b  r[P2]).**.** Tak
12d60 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 4f 52  e the logical OR
12d70 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69   of the values i
12d80 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  n register P1 an
12d90 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72  d P2 and.** stor
12da0 65 20 74 68 65 20 61 6e 73 77 65 72 20 69 6e 20  e the answer in 
12db0 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a  register P3..**.
12dc0 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50 31 20  ** If either P1 
12dd0 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a 65 72 6f  or P2 is nonzero
12de0 20 28 74 72 75 65 29 20 74 68 65 6e 20 74 68 65   (true) then the
12df0 20 72 65 73 75 6c 74 20 69 73 20 31 20 28 74 72   result is 1 (tr
12e00 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69 66 20 74  ue).** even if t
12e10 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69  he other input i
12e20 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20  s NULL.  A NULL 
12e30 61 6e 64 20 66 61 6c 73 65 20 6f 72 20 74 77 6f  and false or two
12e40 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76 65 20 61   NULLs.** give a
12e50 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f   NULL output..*/
12e60 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a 20 20 20  .case OP_And:   
12e70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
12e80 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c 20 69 6e  me as TK_AND, in
12e90 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
12ea0 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b 20 20 20  case OP_Or: {   
12eb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
12ec0 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69 6e 31 2c  e as TK_OR, in1,
12ed0 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in2, out3 */.  
12ee0 69 6e 74 20 76 31 3b 20 20 20 20 2f 2a 20 4c 65  int v1;    /* Le
12ef0 66 74 20 6f 70 65 72 61 6e 64 3a 20 20 30 3d 3d  ft operand:  0==
12f00 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20  FALSE, 1==TRUE, 
12f10 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55  2==UNKNOWN or NU
12f20 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 76 32 3b 20  LL */.  int v2; 
12f30 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 70 65 72     /* Right oper
12f40 61 6e 64 3a 20 30 3d 3d 46 41 4c 53 45 2c 20 31  and: 0==FALSE, 1
12f50 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f  ==TRUE, 2==UNKNO
12f60 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 20  WN or NULL */.. 
12f70 20 76 31 20 3d 20 73 71 6c 69 74 65 33 56 64 62   v1 = sqlite3Vdb
12f80 65 42 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 26 61  eBooleanValue(&a
12f90 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 32 29  Mem[pOp->p1], 2)
12fa0 3b 0a 20 20 76 32 20 3d 20 73 71 6c 69 74 65 33  ;.  v2 = sqlite3
12fb0 56 64 62 65 42 6f 6f 6c 65 61 6e 56 61 6c 75 65  VdbeBooleanValue
12fc0 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 2c  (&aMem[pOp->p2],
12fd0 20 32 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e   2);.  if( pOp->
12fe0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20 29  opcode==OP_And )
12ff0 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  {.    static con
13000 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
13010 20 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b   and_logic[] = {
13020 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20   0, 0, 0, 0, 1, 
13030 32 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20 20  2, 0, 2, 2 };.  
13040 20 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69 63    v1 = and_logic
13050 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c  [v1*3+v2];.  }el
13060 73 65 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63  se{.    static c
13070 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
13080 61 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20  ar or_logic[] = 
13090 7b 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31 2c  { 0, 1, 2, 1, 1,
130a0 20 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a 20   1, 2, 1, 2 };. 
130b0 20 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69 63     v1 = or_logic
130c0 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20  [v1*3+v2];.  }. 
130d0 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
130e0 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 76 31  p->p3];.  if( v1
130f0 3d 3d 32 20 29 7b 0a 20 20 20 20 4d 65 6d 53 65  ==2 ){.    MemSe
13100 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
13110 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c  MEM_Null);.  }el
13120 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  se{.    pOut->u.
13130 69 20 3d 20 76 31 3b 0a 20 20 20 20 4d 65 6d 53  i = v1;.    MemS
13140 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
13150 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20   MEM_Int);.  }. 
13160 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
13170 63 6f 64 65 3a 20 49 73 54 72 75 65 20 50 31 20  code: IsTrue P1 
13180 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
13190 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 20 3d 20  nopsis: r[P2] = 
131a0 63 6f 61 6c 65 73 63 65 28 72 5b 50 31 5d 3d 3d  coalesce(r[P1]==
131b0 54 52 55 45 2c 50 33 29 20 5e 20 50 34 0a 2a 2a  TRUE,P3) ^ P4.**
131c0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
131d0 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 49  implements the I
131e0 53 20 54 52 55 45 2c 20 49 53 20 46 41 4c 53 45  S TRUE, IS FALSE
131f0 2c 20 49 53 20 4e 4f 54 20 54 52 55 45 2c 20 61  , IS NOT TRUE, a
13200 6e 64 0a 2a 2a 20 49 53 20 4e 4f 54 20 46 41 4c  nd.** IS NOT FAL
13210 53 45 20 6f 70 65 72 61 74 6f 72 73 2e 0a 2a 2a  SE operators..**
13220 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68  .** Interpret th
13230 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
13240 74 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f 6c  ter P1 as a bool
13250 65 61 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f 72  ean value.  Stor
13260 65 20 74 68 61 74 0a 2a 2a 20 62 6f 6f 6c 65 61  e that.** boolea
13270 6e 20 28 61 20 30 20 6f 72 20 31 29 20 69 6e 20  n (a 0 or 1) in 
13280 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 4f 72  register P2.  Or
13290 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   if the value in
132a0 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
132b0 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74  .** NULL, then t
132c0 68 65 20 50 33 20 69 73 20 73 74 6f 72 65 64 20  he P3 is stored 
132d0 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20  in register P2. 
132e0 20 49 6e 76 65 72 74 20 74 68 65 20 61 6e 73 77   Invert the answ
132f0 65 72 20 69 66 20 50 34 0a 2a 2a 20 69 73 20 31  er if P4.** is 1
13300 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c 6f 67 69  ..**.** The logi
13310 63 20 69 73 20 73 75 6d 6d 61 72 69 7a 65 64 20  c is summarized 
13320 6c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a  like this:.**.**
13330 20 3c 75 6c 3e 20 0a 2a 2a 20 3c 6c 69 3e 20 49   <ul> .** <li> I
13340 66 20 50 33 3d 3d 30 20 61 6e 64 20 50 34 3d 3d  f P3==0 and P4==
13350 30 20 20 74 68 65 6e 20 20 72 5b 50 32 5d 20 3a  0  then  r[P2] :
13360 3d 20 72 5b 50 31 5d 20 49 53 20 54 52 55 45 0a  = r[P1] IS TRUE.
13370 2a 2a 20 3c 6c 69 3e 20 49 66 20 50 33 3d 3d 31  ** <li> If P3==1
13380 20 61 6e 64 20 50 34 3d 3d 31 20 20 74 68 65 6e   and P4==1  then
13390 20 20 72 5b 50 32 5d 20 3a 3d 20 72 5b 50 31 5d    r[P2] := r[P1]
133a0 20 49 53 20 46 41 4c 53 45 0a 2a 2a 20 3c 6c 69   IS FALSE.** <li
133b0 3e 20 49 66 20 50 33 3d 3d 30 20 61 6e 64 20 50  > If P3==0 and P
133c0 34 3d 3d 31 20 20 74 68 65 6e 20 20 72 5b 50 32  4==1  then  r[P2
133d0 5d 20 3a 3d 20 72 5b 50 31 5d 20 49 53 20 4e 4f  ] := r[P1] IS NO
133e0 54 20 54 52 55 45 0a 2a 2a 20 3c 6c 69 3e 20 49  T TRUE.** <li> I
133f0 66 20 50 33 3d 3d 31 20 61 6e 64 20 50 34 3d 3d  f P3==1 and P4==
13400 30 20 20 74 68 65 6e 20 20 72 5b 50 32 5d 20 3a  0  then  r[P2] :
13410 3d 20 72 5b 50 31 5d 20 49 53 20 4e 4f 54 20 46  = r[P1] IS NOT F
13420 41 4c 53 45 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2f  ALSE.** </ul>.*/
13430 0a 63 61 73 65 20 4f 50 5f 49 73 54 72 75 65 3a  .case OP_IsTrue:
13440 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
13450 20 2f 2a 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f   /* in1, out2 */
13460 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
13470 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
13480 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
13490 70 2d 3e 70 34 2e 69 3d 3d 30 20 7c 7c 20 70 4f  p->p4.i==0 || pO
134a0 70 2d 3e 70 34 2e 69 3d 3d 31 20 29 3b 0a 20 20  p->p4.i==1 );.  
134b0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d  assert( pOp->p3=
134c0 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 33 3d 3d 31  =0 || pOp->p3==1
134d0 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   );.  sqlite3Vdb
134e0 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d  eMemSetInt64(&aM
134f0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 2c 0a 20 20 20  em[pOp->p2],.   
13500 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 42 6f     sqlite3VdbeBo
13510 6f 6c 65 61 6e 56 61 6c 75 65 28 26 61 4d 65 6d  oleanValue(&aMem
13520 5b 70 4f 70 2d 3e 70 31 5d 2c 20 70 4f 70 2d 3e  [pOp->p1], pOp->
13530 70 33 29 20 5e 20 70 4f 70 2d 3e 70 34 2e 69 29  p3) ^ pOp->p4.i)
13540 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
13550 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 20 50 31 20   Opcode: Not P1 
13560 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
13570 70 73 69 73 3a 20 72 5b 50 32 5d 3d 20 21 72 5b  psis: r[P2]= !r[
13580 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70  P1].**.** Interp
13590 72 65 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e  ret the value in
135a0 20 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20   register P1 as 
135b0 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e  a boolean value.
135c0 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20 62    Store the.** b
135d0 6f 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d 65 6e  oolean complemen
135e0 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  t in register P2
135f0 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  .  If the value 
13600 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
13610 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e  s .** NULL, then
13620 20 61 20 4e 55 4c 4c 20 69 73 20 73 74 6f 72 65   a NULL is store
13630 64 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  d in P2..*/.case
13640 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20 20 20 20   OP_Not: {      
13650 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
13660 65 20 61 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e 31  e as TK_NOT, in1
13670 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31  , out2 */.  pIn1
13680 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
13690 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
136a0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66  m[pOp->p2];.  if
136b0 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
136c0 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b   MEM_Null)==0 ){
136d0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
136e0 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75 74  MemSetInt64(pOut
136f0 2c 20 21 73 71 6c 69 74 65 33 56 64 62 65 42 6f  , !sqlite3VdbeBo
13700 6f 6c 65 61 6e 56 61 6c 75 65 28 70 49 6e 31 2c  oleanValue(pIn1,
13710 30 29 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  0));.  }else{.  
13720 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
13730 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
13740 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
13750 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4e 6f 74  * Opcode: BitNot
13760 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
13770 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
13780 20 7e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e   ~r[P1].**.** In
13790 74 65 72 70 72 65 74 20 74 68 65 20 63 6f 6e 74  terpret the cont
137a0 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
137b0 50 31 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72  P1 as an integer
137c0 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20  .  Store the.** 
137d0 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20  ones-complement 
137e0 6f 66 20 74 68 65 20 50 31 20 76 61 6c 75 65 20  of the P1 value 
137f0 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
13800 2e 20 20 49 66 20 50 31 20 68 6f 6c 64 73 0a 2a  .  If P1 holds.*
13810 2a 20 61 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74  * a NULL then st
13820 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 50 32  ore a NULL in P2
13830 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74  ..*/.case OP_Bit
13840 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Not: {          
13850 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
13860 5f 42 49 54 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75  _BITNOT, in1, ou
13870 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  t2 */.  pIn1 = &
13880 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
13890 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
138a0 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65  p->p2];.  sqlite
138b0 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
138c0 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 28 70 49  pOut);.  if( (pI
138d0 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
138e0 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Null)==0 ){.    
138f0 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
13900 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d  M_Int;.    pOut-
13910 3e 75 2e 69 20 3d 20 7e 73 71 6c 69 74 65 33 56  >u.i = ~sqlite3V
13920 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31  dbeIntValue(pIn1
13930 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
13940 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 6e  }../* Opcode: On
13950 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ce P1 P2 * * *.*
13960 2a 0a 2a 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67  *.** Fall throug
13970 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
13980 73 74 72 75 63 74 69 6f 6e 20 74 68 65 20 66 69  struction the fi
13990 72 73 74 20 74 69 6d 65 20 74 68 69 73 20 6f 70  rst time this op
139a0 63 6f 64 65 20 69 73 0a 2a 2a 20 65 6e 63 6f 75  code is.** encou
139b0 6e 74 65 72 65 64 20 6f 6e 20 65 61 63 68 20 69  ntered on each i
139c0 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65  nvocation of the
139d0 20 62 79 74 65 2d 63 6f 64 65 20 70 72 6f 67 72   byte-code progr
139e0 61 6d 2e 20 20 4a 75 6d 70 20 74 6f 20 50 32 0a  am.  Jump to P2.
139f0 2a 2a 20 6f 6e 20 74 68 65 20 73 65 63 6f 6e 64  ** on the second
13a00 20 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71 75   and all subsequ
13a10 65 6e 74 20 65 6e 63 6f 75 6e 74 65 72 73 20 64  ent encounters d
13a20 75 72 69 6e 67 20 74 68 65 20 73 61 6d 65 20 69  uring the same i
13a30 6e 76 6f 63 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  nvocation..**.**
13a40 20 54 6f 70 2d 6c 65 76 65 6c 20 70 72 6f 67 72   Top-level progr
13a50 61 6d 73 20 64 65 74 65 72 6d 69 6e 65 20 66 69  ams determine fi
13a60 72 73 74 20 69 6e 76 6f 63 61 74 69 6f 6e 20 62  rst invocation b
13a70 79 20 63 6f 6d 70 61 72 69 6e 67 20 74 68 65 20  y comparing the 
13a80 50 31 0a 2a 2a 20 6f 70 65 72 61 6e 64 20 61 67  P1.** operand ag
13a90 61 69 6e 73 74 20 74 68 65 20 50 31 20 6f 70 65  ainst the P1 ope
13aa0 72 61 6e 64 20 6f 6e 20 74 68 65 20 4f 50 5f 49  rand on the OP_I
13ab0 6e 69 74 20 6f 70 63 6f 64 65 20 61 74 20 74 68  nit opcode at th
13ac0 65 20 62 65 67 69 6e 6e 69 6e 67 0a 2a 2a 20 6f  e beginning.** o
13ad0 66 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 20  f the program.  
13ae0 49 66 20 74 68 65 20 50 31 20 76 61 6c 75 65 73  If the P1 values
13af0 20 64 69 66 66 65 72 2c 20 74 68 65 6e 20 66 61   differ, then fa
13b00 6c 6c 20 74 68 72 6f 75 67 68 20 61 6e 64 20 6d  ll through and m
13b10 61 6b 65 0a 2a 2a 20 74 68 65 20 50 31 20 6f 66  ake.** the P1 of
13b20 20 74 68 69 73 20 6f 70 63 6f 64 65 20 65 71 75   this opcode equ
13b30 61 6c 20 74 6f 20 74 68 65 20 50 31 20 6f 66 20  al to the P1 of 
13b40 4f 50 5f 49 6e 69 74 2e 20 20 49 66 20 50 31 20  OP_Init.  If P1 
13b50 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20 74 68  values are.** th
13b60 65 20 73 61 6d 65 20 74 68 65 6e 20 74 61 6b 65  e same then take
13b70 20 74 68 65 20 6a 75 6d 70 2e 0a 2a 2a 0a 2a 2a   the jump..**.**
13b80 20 46 6f 72 20 73 75 62 70 72 6f 67 72 61 6d 73   For subprograms
13b90 2c 20 74 68 65 72 65 20 69 73 20 61 20 62 69 74  , there is a bit
13ba0 6d 61 73 6b 20 69 6e 20 74 68 65 20 56 64 62 65  mask in the Vdbe
13bb0 46 72 61 6d 65 20 74 68 61 74 20 64 65 74 65 72  Frame that deter
13bc0 6d 69 6e 65 73 0a 2a 2a 20 77 68 65 74 68 65 72  mines.** whether
13bd0 20 6f 72 20 6e 6f 74 20 74 68 65 20 6a 75 6d 70   or not the jump
13be0 20 73 68 6f 75 6c 64 20 62 65 20 74 61 6b 65 6e   should be taken
13bf0 2e 20 20 54 68 65 20 62 69 74 6d 61 73 6b 20 69  .  The bitmask i
13c00 73 20 6e 65 63 65 73 73 61 72 79 0a 2a 2a 20 62  s necessary.** b
13c10 65 63 61 75 73 65 20 74 68 65 20 73 65 6c 66 2d  ecause the self-
13c20 61 6c 74 65 72 69 6e 67 20 63 6f 64 65 20 74 72  altering code tr
13c30 69 63 6b 20 64 6f 65 73 20 6e 6f 74 20 77 6f 72  ick does not wor
13c40 6b 20 66 6f 72 20 72 65 63 75 72 73 69 76 65 0a  k for recursive.
13c50 2a 2a 20 74 72 69 67 67 65 72 73 2e 0a 2a 2f 0a  ** triggers..*/.
13c60 63 61 73 65 20 4f 50 5f 4f 6e 63 65 3a 20 7b 20  case OP_Once: { 
13c70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
13c80 75 6d 70 20 2a 2f 0a 20 20 75 33 32 20 69 41 64  ump */.  u32 iAd
13c90 64 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  dr;             
13ca0 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66     /* Address of
13cb0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
13cc0 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  n */.  assert( p
13cd0 2d 3e 61 4f 70 5b 30 5d 2e 6f 70 63 6f 64 65 3d  ->aOp[0].opcode=
13ce0 3d 4f 50 5f 49 6e 69 74 20 29 3b 0a 20 20 69 66  =OP_Init );.  if
13cf0 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20  ( p->pFrame ){. 
13d00 20 20 20 69 41 64 64 72 20 3d 20 28 69 6e 74 29     iAddr = (int)
13d10 28 70 4f 70 20 2d 20 70 2d 3e 61 4f 70 29 3b 0a  (pOp - p->aOp);.
13d20 20 20 20 20 69 66 28 20 28 70 2d 3e 70 46 72 61      if( (p->pFra
13d30 6d 65 2d 3e 61 4f 6e 63 65 5b 69 41 64 64 72 2f  me->aOnce[iAddr/
13d40 38 5d 20 26 20 28 31 3c 3c 28 69 41 64 64 72 20  8] & (1<<(iAddr 
13d50 26 20 37 29 29 29 21 3d 30 20 29 7b 0a 20 20 20  & 7)))!=0 ){.   
13d60 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
13d70 65 6e 28 31 2c 20 32 29 3b 0a 20 20 20 20 20 20  en(1, 2);.      
13d80 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
13d90 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e 70 46  .    }.    p->pF
13da0 72 61 6d 65 2d 3e 61 4f 6e 63 65 5b 69 41 64 64  rame->aOnce[iAdd
13db0 72 2f 38 5d 20 7c 3d 20 31 3c 3c 28 69 41 64 64  r/8] |= 1<<(iAdd
13dc0 72 20 26 20 37 29 3b 0a 20 20 7d 65 6c 73 65 7b  r & 7);.  }else{
13dd0 0a 20 20 20 20 69 66 28 20 70 2d 3e 61 4f 70 5b  .    if( p->aOp[
13de0 30 5d 2e 70 31 3d 3d 70 4f 70 2d 3e 70 31 20 29  0].p1==pOp->p1 )
13df0 7b 0a 20 20 20 20 20 20 56 64 62 65 42 72 61 6e  {.      VdbeBran
13e00 63 68 54 61 6b 65 6e 28 31 2c 20 32 29 3b 0a 20  chTaken(1, 2);. 
13e10 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74       goto jump_t
13e20 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  o_p2;.    }.  }.
13e30 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
13e40 6e 28 30 2c 20 32 29 3b 0a 20 20 70 4f 70 2d 3e  n(0, 2);.  pOp->
13e50 70 31 20 3d 20 70 2d 3e 61 4f 70 5b 30 5d 2e 70  p1 = p->aOp[0].p
13e60 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  1;.  break;.}../
13e70 2a 20 4f 70 63 6f 64 65 3a 20 49 66 20 50 31 20  * Opcode: If P1 
13e80 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
13e90 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
13ea0 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
13eb0 74 65 72 20 50 31 20 69 73 20 74 72 75 65 2e 20  ter P1 is true. 
13ec0 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   The value.** is
13ed0 20 63 6f 6e 73 69 64 65 72 65 64 20 74 72 75 65   considered true
13ee0 20 69 66 20 69 74 20 69 73 20 6e 75 6d 65 72 69   if it is numeri
13ef0 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20  c and non-zero. 
13f00 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a   If the value.**
13f10 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74   in P1 is NULL t
13f20 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  hen take the jum
13f30 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66  p if and only if
13f40 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e   P3 is non-zero.
13f50 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 3a 20  .*/.case OP_If: 
13f60 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
13f70 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
13f80 0a 20 20 69 6e 74 20 63 3b 0a 20 20 63 20 3d 20  .  int c;.  c = 
13f90 73 71 6c 69 74 65 33 56 64 62 65 42 6f 6f 6c 65  sqlite3VdbeBoole
13fa0 61 6e 56 61 6c 75 65 28 26 61 4d 65 6d 5b 70 4f  anValue(&aMem[pO
13fb0 70 2d 3e 70 31 5d 2c 20 70 4f 70 2d 3e 70 33 29  p->p1], pOp->p3)
13fc0 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
13fd0 6b 65 6e 28 63 21 3d 30 2c 20 32 29 3b 0a 20 20  ken(c!=0, 2);.  
13fe0 69 66 28 20 63 20 29 20 67 6f 74 6f 20 6a 75 6d  if( c ) goto jum
13ff0 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b  p_to_p2;.  break
14000 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
14010 49 66 4e 6f 74 20 50 31 20 50 32 20 50 33 20 2a  IfNot P1 P2 P3 *
14020 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f   *.**.** Jump to
14030 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65   P2 if the value
14040 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
14050 69 73 20 46 61 6c 73 65 2e 20 20 54 68 65 20 76  is False.  The v
14060 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 69  alue.** is consi
14070 64 65 72 65 64 20 66 61 6c 73 65 20 69 66 20 69  dered false if i
14080 74 20 68 61 73 20 61 20 6e 75 6d 65 72 69 63 20  t has a numeric 
14090 76 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e 20 20  value of zero.  
140a0 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20  If the value.** 
140b0 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68  in P1 is NULL th
140c0 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  en take the jump
140d0 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20   if and only if 
140e0 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a  P3 is non-zero..
140f0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74  */.case OP_IfNot
14100 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
14110 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  * jump, in1 */. 
14120 20 69 6e 74 20 63 3b 0a 20 20 63 20 3d 20 21 73   int c;.  c = !s
14130 71 6c 69 74 65 33 56 64 62 65 42 6f 6f 6c 65 61  qlite3VdbeBoolea
14140 6e 56 61 6c 75 65 28 26 61 4d 65 6d 5b 70 4f 70  nValue(&aMem[pOp
14150 2d 3e 70 31 5d 2c 20 21 70 4f 70 2d 3e 70 33 29  ->p1], !pOp->p3)
14160 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
14170 6b 65 6e 28 63 21 3d 30 2c 20 32 29 3b 0a 20 20  ken(c!=0, 2);.  
14180 69 66 28 20 63 20 29 20 67 6f 74 6f 20 6a 75 6d  if( c ) goto jum
14190 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b  p_to_p2;.  break
141a0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
141b0 49 73 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a  IsNull P1 P2 * *
141c0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
141d0 69 66 20 72 5b 50 31 5d 3d 3d 4e 55 4c 4c 20 67  if r[P1]==NULL g
141e0 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d  oto P2.**.** Jum
141f0 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76  p to P2 if the v
14200 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
14210 20 50 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a   P1 is NULL..*/.
14220 63 61 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20  case OP_IsNull: 
14230 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
14240 73 61 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55 4c  same as TK_ISNUL
14250 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  L, jump, in1 */.
14260 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
14270 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56 64 62 65 42  Op->p1];.  VdbeB
14280 72 61 6e 63 68 54 61 6b 65 6e 28 20 28 70 49 6e  ranchTaken( (pIn
14290 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
142a0 75 6c 6c 29 21 3d 30 2c 20 32 29 3b 0a 20 20 69  ull)!=0, 2);.  i
142b0 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
142c0 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29  & MEM_Null)!=0 )
142d0 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f  {.    goto jump_
142e0 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  to_p2;.  }.  bre
142f0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
14300 3a 20 4e 6f 74 4e 75 6c 6c 20 50 31 20 50 32 20  : NotNull P1 P2 
14310 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
14320 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d 4e 55 4c  s: if r[P1]!=NUL
14330 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  L goto P2.**.** 
14340 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
14350 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
14360 74 65 72 20 50 31 20 69 73 20 6e 6f 74 20 4e 55  ter P1 is not NU
14370 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50  LL.  .*/.case OP
14380 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20 20 20  _NotNull: {     
14390 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
143a0 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a 75  s TK_NOTNULL, ju
143b0 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
143c0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
143d0 31 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68  1];.  VdbeBranch
143e0 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c  Taken( (pIn1->fl
143f0 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d  ags & MEM_Null)=
14400 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28 70  =0, 2);.  if( (p
14410 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
14420 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Null)==0 ){.   
14430 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
14440 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
14450 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e  ../* Opcode: IfN
14460 75 6c 6c 52 6f 77 20 50 31 20 50 32 20 50 33 20  ullRow P1 P2 P3 
14470 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
14480 20 69 66 20 50 31 2e 6e 75 6c 6c 52 6f 77 20 74   if P1.nullRow t
14490 68 65 6e 20 72 5b 50 33 5d 3d 4e 55 4c 4c 2c 20  hen r[P3]=NULL, 
144a0 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 43 68  goto P2.**.** Ch
144b0 65 63 6b 20 74 68 65 20 63 75 72 73 6f 72 20 50  eck the cursor P
144c0 31 20 74 6f 20 73 65 65 20 69 66 20 69 74 20 69  1 to see if it i
144d0 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
144e0 74 69 6e 67 20 61 74 20 61 20 4e 55 4c 4c 20 72  ting at a NULL r
144f0 6f 77 2e 0a 2a 2a 20 49 66 20 69 74 20 69 73 2c  ow..** If it is,
14500 20 74 68 65 6e 20 73 65 74 20 72 65 67 69 73 74   then set regist
14510 65 72 20 50 33 20 74 6f 20 4e 55 4c 4c 20 61 6e  er P3 to NULL an
14520 64 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  d jump immediate
14530 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20  ly to P2..** If 
14540 50 31 20 69 73 20 6e 6f 74 20 6f 6e 20 61 20 4e  P1 is not on a N
14550 55 4c 4c 20 72 6f 77 2c 20 74 68 65 6e 20 66 61  ULL row, then fa
14560 6c 6c 20 74 68 72 6f 75 67 68 20 77 69 74 68 6f  ll through witho
14570 75 74 20 6d 61 6b 69 6e 67 20 61 6e 79 0a 2a 2a  ut making any.**
14580 20 63 68 61 6e 67 65 73 2e 0a 2a 2f 0a 63 61 73   changes..*/.cas
14590 65 20 4f 50 5f 49 66 4e 75 6c 6c 52 6f 77 3a 20  e OP_IfNullRow: 
145a0 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  {         /* jum
145b0 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  p */.  assert( p
145c0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
145d0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
145e0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
145f0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d  apCsr[pOp->p1]!=
14600 30 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 70  0 );.  if( p->ap
14610 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 6e 75  Csr[pOp->p1]->nu
14620 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c  llRow ){.    sql
14630 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
14640 6c 6c 28 61 4d 65 6d 20 2b 20 70 4f 70 2d 3e 70  ll(aMem + pOp->p
14650 33 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d  3);.    goto jum
14660 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62  p_to_p2;.  }.  b
14670 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 64 65 66 20  reak;.}..#ifdef 
14680 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4f 46  SQLITE_ENABLE_OF
14690 46 53 45 54 5f 53 51 4c 5f 46 55 4e 43 0a 2f 2a  FSET_SQL_FUNC./*
146a0 20 4f 70 63 6f 64 65 3a 20 4f 66 66 73 65 74 20   Opcode: Offset 
146b0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
146c0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 20  Synopsis: r[P3] 
146d0 3d 20 73 71 6c 69 74 65 5f 6f 66 66 73 65 74 28  = sqlite_offset(
146e0 50 31 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20  P1).**.** Store 
146f0 69 6e 20 72 65 67 69 73 74 65 72 20 72 5b 50 33  in register r[P3
14700 5d 20 74 68 65 20 62 79 74 65 20 6f 66 66 73 65  ] the byte offse
14710 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62  t into the datab
14720 61 73 65 20 66 69 6c 65 20 74 68 61 74 20 69 73  ase file that is
14730 20 74 68 65 0a 2a 2a 20 73 74 61 72 74 20 6f 66   the.** start of
14740 20 74 68 65 20 70 61 79 6c 6f 61 64 20 66 6f 72   the payload for
14750 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 20 77   the record at w
14760 68 69 63 68 20 74 68 61 74 20 63 75 72 73 6f 72  hich that cursor
14770 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
14780 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a  .** pointing..**
14790 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20 63 6f  .** P2 is the co
147a0 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20  lumn number for 
147b0 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  the argument to 
147c0 74 68 65 20 73 71 6c 69 74 65 5f 6f 66 66 73 65  the sqlite_offse
147d0 74 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a  t() function..**
147e0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65   This opcode doe
147f0 73 20 6e 6f 74 20 75 73 65 20 50 32 20 69 74 73  s not use P2 its
14800 65 6c 66 2c 20 62 75 74 20 74 68 65 20 50 32 20  elf, but the P2 
14810 76 61 6c 75 65 20 69 73 20 75 73 65 64 20 62 79  value is used by
14820 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20 67 65 6e   the.** code gen
14830 65 72 61 74 6f 72 2e 20 20 54 68 65 20 50 31 2c  erator.  The P1,
14840 20 50 32 2c 20 61 6e 64 20 50 33 20 6f 70 65 72   P2, and P3 oper
14850 61 6e 64 73 20 74 6f 20 74 68 69 73 20 6f 70 63  ands to this opc
14860 6f 64 65 20 61 72 65 20 74 68 65 0a 2a 2a 20 73  ode are the.** s
14870 61 6d 65 20 61 73 20 66 6f 72 20 4f 50 5f 43 6f  ame as for OP_Co
14880 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  lumn..**.** This
14890 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20   opcode is only 
148a0 61 76 61 69 6c 61 62 6c 65 20 69 66 20 53 51 4c  available if SQL
148b0 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 20  ite is compiled 
148c0 77 69 74 68 20 74 68 65 0a 2a 2a 20 2d 44 53 51  with the.** -DSQ
148d0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4f 46 46 53  LITE_ENABLE_OFFS
148e0 45 54 5f 53 51 4c 5f 46 55 4e 43 20 6f 70 74 69  ET_SQL_FUNC opti
148f0 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  on..*/.case OP_O
14900 66 66 73 65 74 3a 20 7b 20 20 20 20 20 20 20 20  ffset: {        
14910 20 20 2f 2a 20 6f 75 74 33 20 2a 2f 0a 20 20 56    /* out3 */.  V
14920 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20  dbeCursor *pC;  
14930 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75    /* The VDBE cu
14940 72 73 6f 72 20 2a 2f 0a 20 20 61 73 73 65 72 74  rsor */.  assert
14950 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
14960 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
14970 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
14980 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
14990 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65    pOut = &p->aMe
149a0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66  m[pOp->p3];.  if
149b0 28 20 4e 45 56 45 52 28 70 43 3d 3d 30 29 20 7c  ( NEVER(pC==0) |
149c0 7c 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21 3d  | pC->eCurType!=
149d0 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 7b  CURTYPE_BTREE ){
149e0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
149f0 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29  MemSetNull(pOut)
14a00 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
14a10 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
14a20 49 6e 74 36 34 28 70 4f 75 74 2c 20 73 71 6c 69  Int64(pOut, sqli
14a30 74 65 33 42 74 72 65 65 4f 66 66 73 65 74 28 70  te3BtreeOffset(p
14a40 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 29 3b  C->uc.pCursor));
14a50 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
14a60 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
14a70 5f 45 4e 41 42 4c 45 5f 4f 46 46 53 45 54 5f 53  _ENABLE_OFFSET_S
14a80 51 4c 5f 46 55 4e 43 20 2a 2f 0a 0a 2f 2a 20 4f  QL_FUNC */../* O
14a90 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 20 50 31  pcode: Column P1
14aa0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
14ab0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
14ac0 50 58 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  PX.**.** Interpr
14ad0 65 74 20 74 68 65 20 64 61 74 61 20 74 68 61 74  et the data that
14ae0 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74   cursor P1 point
14af0 73 20 74 6f 20 61 73 20 61 20 73 74 72 75 63 74  s to as a struct
14b00 75 72 65 20 62 75 69 6c 74 20 75 73 69 6e 67 0a  ure built using.
14b10 2a 2a 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72  ** the MakeRecor
14b20 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  d instruction.  
14b30 28 53 65 65 20 74 68 65 20 4d 61 6b 65 52 65 63  (See the MakeRec
14b40 6f 72 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 61  ord opcode for a
14b50 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66  dditional.** inf
14b60 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
14b70 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65  he format of the
14b80 20 64 61 74 61 2e 29 20 20 45 78 74 72 61 63 74   data.)  Extract
14b90 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d   the P2-th colum
14ba0 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68 69 73 20 72  n.** from this r
14bb0 65 63 6f 72 64 2e 20 20 49 66 20 74 68 65 72 65  ecord.  If there
14bc0 20 61 72 65 20 6c 65 73 73 20 74 68 61 74 20 28   are less that (
14bd0 50 32 2b 31 29 20 0a 2a 2a 20 76 61 6c 75 65 73  P2+1) .** values
14be0 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20   in the record, 
14bf0 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 0a  extract a NULL..
14c00 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20  **.** The value 
14c10 65 78 74 72 61 63 74 65 64 20 69 73 20 73 74 6f  extracted is sto
14c20 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
14c30 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  P3..**.** If the
14c40 20 72 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73   record contains
14c50 20 66 65 77 65 72 20 74 68 61 6e 20 50 32 20 66   fewer than P2 f
14c60 69 65 6c 64 73 2c 20 74 68 65 6e 20 65 78 74 72  ields, then extr
14c70 61 63 74 20 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c  act a NULL.  Or,
14c80 0a 2a 2a 20 69 66 20 74 68 65 20 50 34 20 61 72  .** if the P4 ar
14c90 67 75 6d 65 6e 74 20 69 73 20 61 20 50 34 5f 4d  gument is a P4_M
14ca0 45 4d 20 75 73 65 20 74 68 65 20 76 61 6c 75 65  EM use the value
14cb0 20 6f 66 20 74 68 65 20 50 34 20 61 72 67 75 6d   of the P4 argum
14cc0 65 6e 74 20 61 73 0a 2a 2a 20 74 68 65 20 72 65  ent as.** the re
14cd0 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  sult..**.** If t
14ce0 68 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48  he OPFLAG_LENGTH
14cf0 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54  ARG and OPFLAG_T
14d00 59 50 45 4f 46 41 52 47 20 62 69 74 73 20 61 72  YPEOFARG bits ar
14d10 65 20 73 65 74 20 6f 6e 20 50 35 20 74 68 65 6e  e set on P5 then
14d20 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20 69  .** the result i
14d30 73 20 67 75 61 72 61 6e 74 65 65 64 20 74 6f 20  s guaranteed to 
14d40 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 61 73 20  only be used as 
14d50 74 68 65 20 61 72 67 75 6d 65 6e 74 20 6f 66 20  the argument of 
14d60 61 20 6c 65 6e 67 74 68 28 29 0a 2a 2a 20 6f 72  a length().** or
14d70 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69   typeof() functi
14d80 6f 6e 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  on, respectively
14d90 2e 20 20 54 68 65 20 6c 6f 61 64 69 6e 67 20 6f  .  The loading o
14da0 66 20 6c 61 72 67 65 20 62 6c 6f 62 73 20 63 61  f large blobs ca
14db0 6e 20 62 65 0a 2a 2a 20 73 6b 69 70 70 65 64 20  n be.** skipped 
14dc0 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 61 6e 64  for length() and
14dd0 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 20 6c 6f 61   all content loa
14de0 64 69 6e 67 20 63 61 6e 20 62 65 20 73 6b 69 70  ding can be skip
14df0 70 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29  ped for typeof()
14e00 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c  ..*/.case OP_Col
14e10 75 6d 6e 3a 20 7b 0a 20 20 69 6e 74 20 70 32 3b  umn: {.  int p2;
14e20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 63              /* c
14e30 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 74 6f 20  olumn number to 
14e40 72 65 74 72 69 65 76 65 20 2a 2f 0a 20 20 56 64  retrieve */.  Vd
14e50 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20  beCursor *pC;   
14e60 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72   /* The VDBE cur
14e70 73 6f 72 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f  sor */.  BtCurso
14e80 72 20 2a 70 43 72 73 72 3b 20 20 20 2f 2a 20 54  r *pCrsr;   /* T
14e90 68 65 20 42 54 72 65 65 20 63 75 72 73 6f 72 20  he BTree cursor 
14ea0 2a 2f 0a 20 20 75 33 32 20 2a 61 4f 66 66 73 65  */.  u32 *aOffse
14eb0 74 3b 20 20 20 20 20 20 2f 2a 20 61 4f 66 66 73  t;      /* aOffs
14ec0 65 74 5b 69 5d 20 69 73 20 6f 66 66 73 65 74 20  et[i] is offset 
14ed0 74 6f 20 73 74 61 72 74 20 6f 66 20 64 61 74 61  to start of data
14ee0 20 66 6f 72 20 69 2d 74 68 20 63 6f 6c 75 6d 6e   for i-th column
14ef0 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20   */.  int len;  
14f00 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
14f10 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 65  length of the se
14f20 72 69 61 6c 69 7a 65 64 20 64 61 74 61 20 66 6f  rialized data fo
14f30 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  r the column */.
14f40 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20    int i;        
14f50 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75       /* Loop cou
14f60 6e 74 65 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  nter */.  Mem *p
14f70 44 65 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  Dest;        /* 
14f80 57 68 65 72 65 20 74 6f 20 77 72 69 74 65 20 74  Where to write t
14f90 68 65 20 65 78 74 72 61 63 74 65 64 20 76 61 6c  he extracted val
14fa0 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d 65 6d  ue */.  Mem sMem
14fb0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f  ;          /* Fo
14fc0 72 20 73 74 6f 72 69 6e 67 20 74 68 65 20 72 65  r storing the re
14fd0 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64  cord being decod
14fe0 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38  ed */.  const u8
14ff0 20 2a 7a 44 61 74 61 3b 20 20 20 2f 2a 20 50 61   *zData;   /* Pa
15000 72 74 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  rt of the record
15010 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a   being decoded *
15020 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 48  /.  const u8 *zH
15030 64 72 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20 75  dr;    /* Next u
15040 6e 70 61 72 73 65 64 20 62 79 74 65 20 6f 66 20  nparsed byte of 
15050 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20  the header */.  
15060 63 6f 6e 73 74 20 75 38 20 2a 7a 45 6e 64 48 64  const u8 *zEndHd
15070 72 3b 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f  r; /* Pointer to
15080 20 66 69 72 73 74 20 62 79 74 65 20 61 66 74 65   first byte afte
15090 72 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a  r the header */.
150a0 20 20 75 36 34 20 6f 66 66 73 65 74 36 34 3b 20    u64 offset64; 
150b0 20 20 20 20 20 2f 2a 20 36 34 2d 62 69 74 20 6f       /* 64-bit o
150c0 66 66 73 65 74 20 2a 2f 0a 20 20 75 33 32 20 74  ffset */.  u32 t
150d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
150e0 20 41 20 74 79 70 65 20 63 6f 64 65 20 66 72 6f   A type code fro
150f0 6d 20 74 68 65 20 72 65 63 6f 72 64 20 68 65 61  m the record hea
15100 64 65 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52  der */.  Mem *pR
15110 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50  eg;         /* P
15120 73 65 75 64 6f 54 61 62 6c 65 20 69 6e 70 75 74  seudoTable input
15130 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 0a 20 20   register */..  
15140 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
15150 70 2d 3e 70 31 5d 3b 0a 20 20 70 32 20 3d 20 70  p->p1];.  p2 = p
15160 4f 70 2d 3e 70 32 3b 0a 0a 20 20 2f 2a 20 49 66  Op->p2;..  /* If
15170 20 74 68 65 20 63 75 72 73 6f 72 20 63 61 63 68   the cursor cach
15180 65 20 69 73 20 73 74 61 6c 65 20 28 6d 65 61 6e  e is stale (mean
15190 69 6e 67 20 69 74 20 69 73 20 6e 6f 74 20 63 75  ing it is not cu
151a0 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20 61 74  rrently point at
151b0 0a 20 20 2a 2a 20 74 68 65 20 63 6f 72 72 65 63  .  ** the correc
151c0 74 20 72 6f 77 29 20 74 68 65 6e 20 62 72 69 6e  t row) then brin
151d0 67 20 69 74 20 75 70 2d 74 6f 2d 64 61 74 65 20  g it up-to-date 
151e0 62 79 20 64 6f 69 6e 67 20 74 68 65 20 6e 65 63  by doing the nec
151f0 65 73 73 61 72 79 20 0a 20 20 2a 2a 20 42 2d 54  essary .  ** B-T
15200 72 65 65 20 73 65 65 6b 2e 20 2a 2f 0a 20 20 72  ree seek. */.  r
15210 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
15220 75 72 73 6f 72 4d 6f 76 65 74 6f 28 26 70 43 2c  ursorMoveto(&pC,
15230 20 26 70 32 29 3b 0a 20 20 69 66 28 20 72 63 20   &p2);.  if( rc 
15240 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
15250 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 61 73  _to_error;..  as
15260 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
15270 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  && pOp->p3<=(p->
15280 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
15290 73 6f 72 29 20 29 3b 0a 20 20 70 44 65 73 74 20  sor) );.  pDest 
152a0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
152b0 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
152c0 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29 3b 0a  ange(p, pDest);.
152d0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
152e0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
152f0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
15300 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
15310 0a 20 20 61 73 73 65 72 74 28 20 70 32 3c 70 43  .  assert( p2<pC
15320 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a 20 20 61 4f  ->nField );.  aO
15330 66 66 73 65 74 20 3d 20 70 43 2d 3e 61 4f 66 66  ffset = pC->aOff
15340 73 65 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70  set;.  assert( p
15350 43 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52  C->eCurType!=CUR
15360 54 59 50 45 5f 56 54 41 42 20 29 3b 0a 20 20 61  TYPE_VTAB );.  a
15370 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
15380 79 70 65 21 3d 43 55 52 54 59 50 45 5f 50 53 45  ype!=CURTYPE_PSE
15390 55 44 4f 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52  UDO || pC->nullR
153a0 6f 77 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ow );.  assert( 
153b0 70 43 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55  pC->eCurType!=CU
153c0 52 54 59 50 45 5f 53 4f 52 54 45 52 20 29 3b 0a  RTYPE_SORTER );.
153d0 0a 20 20 69 66 28 20 70 43 2d 3e 63 61 63 68 65  .  if( pC->cache
153e0 53 74 61 74 75 73 21 3d 70 2d 3e 63 61 63 68 65  Status!=p->cache
153f0 43 74 72 20 29 7b 20 20 20 20 20 20 20 20 20 20  Ctr ){          
15400 20 20 20 20 20 20 2f 2a 4f 50 54 49 4d 49 5a 41        /*OPTIMIZA
15410 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a  TION-IF-FALSE*/.
15420 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c      if( pC->null
15430 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 69 66 28  Row ){.      if(
15440 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
15450 55 52 54 59 50 45 5f 50 53 45 55 44 4f 20 29 7b  URTYPE_PSEUDO ){
15460 0a 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20  .        /* For 
15470 74 68 65 20 73 70 65 63 69 61 6c 20 63 61 73 65  the special case
15480 20 6f 66 20 61 73 20 70 73 65 75 64 6f 2d 63 75   of as pseudo-cu
15490 72 73 6f 72 2c 20 74 68 65 20 73 65 65 6b 52 65  rsor, the seekRe
154a0 73 75 6c 74 20 66 69 65 6c 64 0a 20 20 20 20 20  sult field.     
154b0 20 20 20 2a 2a 20 69 64 65 6e 74 69 66 69 65 73     ** identifies
154c0 20 74 68 65 20 72 65 67 69 73 74 65 72 20 74 68   the register th
154d0 61 74 20 68 6f 6c 64 73 20 74 68 65 20 72 65 63  at holds the rec
154e0 6f 72 64 20 2a 2f 0a 20 20 20 20 20 20 20 20 61  ord */.        a
154f0 73 73 65 72 74 28 20 70 43 2d 3e 73 65 65 6b 52  ssert( pC->seekR
15500 65 73 75 6c 74 3e 30 20 29 3b 0a 20 20 20 20 20  esult>0 );.     
15510 20 20 20 70 52 65 67 20 3d 20 26 61 4d 65 6d 5b     pReg = &aMem[
15520 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 5d 3b  pC->seekResult];
15530 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
15540 20 70 52 65 67 2d 3e 66 6c 61 67 73 20 26 20 4d   pReg->flags & M
15550 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 20  EM_Blob );.     
15560 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
15570 56 61 6c 69 64 28 70 52 65 67 29 20 29 3b 0a 20  Valid(pReg) );. 
15580 20 20 20 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f         pC->paylo
15590 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e 73 7a 52  adSize = pC->szR
155a0 6f 77 20 3d 20 70 52 65 67 2d 3e 6e 3b 0a 20 20  ow = pReg->n;.  
155b0 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d        pC->aRow =
155c0 20 28 75 38 2a 29 70 52 65 67 2d 3e 7a 3b 0a 20   (u8*)pReg->z;. 
155d0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
155e0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
155f0 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29  emSetNull(pDest)
15600 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f  ;.        goto o
15610 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20  p_column_out;.  
15620 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
15630 0a 20 20 20 20 20 20 70 43 72 73 72 20 3d 20 70  .      pCrsr = p
15640 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20  C->uc.pCursor;. 
15650 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d       assert( pC-
15660 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
15670 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20  PE_BTREE );.    
15680 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 20    assert( pCrsr 
15690 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
156a0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
156b0 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72  sorIsValid(pCrsr
156c0 29 20 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 70  ) );.      pC->p
156d0 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 73 71 6c  ayloadSize = sql
156e0 69 74 65 33 42 74 72 65 65 50 61 79 6c 6f 61 64  ite3BtreePayload
156f0 53 69 7a 65 28 70 43 72 73 72 29 3b 0a 20 20 20  Size(pCrsr);.   
15700 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 73 71     pC->aRow = sq
15710 6c 69 74 65 33 42 74 72 65 65 50 61 79 6c 6f 61  lite3BtreePayloa
15720 64 46 65 74 63 68 28 70 43 72 73 72 2c 20 26 70  dFetch(pCrsr, &p
15730 43 2d 3e 73 7a 52 6f 77 29 3b 0a 20 20 20 20 20  C->szRow);.     
15740 20 61 73 73 65 72 74 28 20 70 43 2d 3e 73 7a 52   assert( pC->szR
15750 6f 77 3c 3d 70 43 2d 3e 70 61 79 6c 6f 61 64 53  ow<=pC->payloadS
15760 69 7a 65 20 29 3b 0a 20 20 20 20 20 20 61 73 73  ize );.      ass
15770 65 72 74 28 20 70 43 2d 3e 73 7a 52 6f 77 3c 3d  ert( pC->szRow<=
15780 36 35 35 33 36 20 29 3b 20 20 2f 2a 20 4d 61 78  65536 );  /* Max
15790 69 6d 75 6d 20 70 61 67 65 20 73 69 7a 65 20 69  imum page size i
157a0 73 20 36 34 4b 69 42 20 2a 2f 0a 20 20 20 20 20  s 64KiB */.     
157b0 20 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61 64   if( pC->payload
157c0 53 69 7a 65 20 3e 20 28 75 33 32 29 64 62 2d 3e  Size > (u32)db->
157d0 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
157e0 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
157f0 20 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f         goto too_
15800 62 69 67 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  big;.      }.   
15810 20 7d 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65   }.    pC->cache
15820 53 74 61 74 75 73 20 3d 20 70 2d 3e 63 61 63 68  Status = p->cach
15830 65 43 74 72 3b 0a 20 20 20 20 70 43 2d 3e 69 48  eCtr;.    pC->iH
15840 64 72 4f 66 66 73 65 74 20 3d 20 67 65 74 56 61  drOffset = getVa
15850 72 69 6e 74 33 32 28 70 43 2d 3e 61 52 6f 77 2c  rint32(pC->aRow,
15860 20 61 4f 66 66 73 65 74 5b 30 5d 29 3b 0a 20 20   aOffset[0]);.  
15870 20 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64    pC->nHdrParsed
15880 20 3d 20 30 3b 0a 0a 0a 20 20 20 20 69 66 28 20   = 0;...    if( 
15890 70 43 2d 3e 73 7a 52 6f 77 3c 61 4f 66 66 73 65  pC->szRow<aOffse
158a0 74 5b 30 5d 20 29 7b 20 20 20 20 20 20 2f 2a 4f  t[0] ){      /*O
158b0 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46  PTIMIZATION-IF-F
158c0 41 4c 53 45 2a 2f 0a 20 20 20 20 20 20 2f 2a 20  ALSE*/.      /* 
158d0 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20 6e 6f  pC->aRow does no
158e0 74 20 68 61 76 65 20 74 6f 20 68 6f 6c 64 20 74  t have to hold t
158f0 68 65 20 65 6e 74 69 72 65 20 72 6f 77 2c 20 62  he entire row, b
15900 75 74 20 69 74 20 64 6f 65 73 20 61 74 20 6c 65  ut it does at le
15910 61 73 74 0a 20 20 20 20 20 20 2a 2a 20 6e 65 65  ast.      ** nee
15920 64 20 74 6f 20 63 6f 76 65 72 20 74 68 65 20 68  d to cover the h
15930 65 61 64 65 72 20 6f 66 20 74 68 65 20 72 65 63  eader of the rec
15940 6f 72 64 2e 20 20 49 66 20 70 43 2d 3e 61 52 6f  ord.  If pC->aRo
15950 77 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61  w does not conta
15960 69 6e 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20  in.      ** the 
15970 63 6f 6d 70 6c 65 74 65 20 68 65 61 64 65 72 2c  complete header,
15980 20 74 68 65 6e 20 73 65 74 20 69 74 20 74 6f 20   then set it to 
15990 7a 65 72 6f 2c 20 66 6f 72 63 69 6e 67 20 74 68  zero, forcing th
159a0 65 20 68 65 61 64 65 72 20 74 6f 20 62 65 0a 20  e header to be. 
159b0 20 20 20 20 20 2a 2a 20 64 79 6e 61 6d 69 63 61       ** dynamica
159c0 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 2a  lly allocated. *
159d0 2f 0a 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77  /.      pC->aRow
159e0 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 43 2d 3e   = 0;.      pC->
159f0 73 7a 52 6f 77 20 3d 20 30 3b 0a 0a 20 20 20 20  szRow = 0;..    
15a00 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61    /* Make sure a
15a10 20 63 6f 72 72 75 70 74 20 64 61 74 61 62 61 73   corrupt databas
15a20 65 20 68 61 73 20 6e 6f 74 20 67 69 76 65 6e 20  e has not given 
15a30 75 73 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 68  us an oversize h
15a40 65 61 64 65 72 2e 0a 20 20 20 20 20 20 2a 2a 20  eader..      ** 
15a50 44 6f 20 74 68 69 73 20 6e 6f 77 20 74 6f 20 61  Do this now to a
15a60 76 6f 69 64 20 61 6e 20 6f 76 65 72 73 69 7a 65  void an oversize
15a70 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
15a80 6f 6e 2e 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20  on..      **.   
15a90 20 20 20 2a 2a 20 54 79 70 65 20 65 6e 74 72 69     ** Type entri
15aa0 65 73 20 63 61 6e 20 62 65 20 62 65 74 77 65 65  es can be betwee
15ab0 6e 20 31 20 61 6e 64 20 35 20 62 79 74 65 73 20  n 1 and 5 bytes 
15ac0 65 61 63 68 2e 20 20 42 75 74 20 34 20 61 6e 64  each.  But 4 and
15ad0 20 35 20 62 79 74 65 0a 20 20 20 20 20 20 2a 2a   5 byte.      **
15ae0 20 74 79 70 65 73 20 75 73 65 20 73 6f 20 6d 75   types use so mu
15af0 63 68 20 64 61 74 61 20 73 70 61 63 65 20 74 68  ch data space th
15b00 61 74 20 74 68 65 72 65 20 63 61 6e 20 6f 6e 6c  at there can onl
15b10 79 20 62 65 20 34 30 39 36 20 61 6e 64 20 33 32  y be 4096 and 32
15b20 20 6f 66 0a 20 20 20 20 20 20 2a 2a 20 74 68 65   of.      ** the
15b30 6d 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  m, respectively.
15b40 20 20 53 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d    So the maximum
15b50 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20 72   header length r
15b60 65 73 75 6c 74 73 20 66 72 6f 6d 20 61 0a 20 20  esults from a.  
15b70 20 20 20 20 2a 2a 20 33 2d 62 79 74 65 20 74 79      ** 3-byte ty
15b80 70 65 20 66 6f 72 20 65 61 63 68 20 6f 66 20 74  pe for each of t
15b90 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 33 32  he maximum of 32
15ba0 37 36 38 20 63 6f 6c 75 6d 6e 73 20 70 6c 75 73  768 columns plus
15bb0 20 74 68 72 65 65 0a 20 20 20 20 20 20 2a 2a 20   three.      ** 
15bc0 65 78 74 72 61 20 62 79 74 65 73 20 66 6f 72 20  extra bytes for 
15bd0 74 68 65 20 68 65 61 64 65 72 20 6c 65 6e 67 74  the header lengt
15be0 68 20 69 74 73 65 6c 66 2e 20 20 33 32 37 36 38  h itself.  32768
15bf0 2a 33 20 2b 20 33 20 3d 20 39 38 33 30 37 2e 0a  *3 + 3 = 98307..
15c00 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
15c10 66 28 20 61 4f 66 66 73 65 74 5b 30 5d 20 3e 20  f( aOffset[0] > 
15c20 39 38 33 30 37 20 7c 7c 20 61 4f 66 66 73 65 74  98307 || aOffset
15c30 5b 30 5d 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61  [0] > pC->payloa
15c40 64 53 69 7a 65 20 29 7b 0a 20 20 20 20 20 20 20  dSize ){.       
15c50 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
15c60 63 6f 72 72 75 70 74 3b 0a 20 20 20 20 20 20 7d  corrupt;.      }
15c70 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
15c80 20 20 2f 2a 20 54 68 69 73 20 69 73 20 61 6e 20    /* This is an 
15c90 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 20 20 42  optimization.  B
15ca0 79 20 73 6b 69 70 70 69 6e 67 20 6f 76 65 72 20  y skipping over 
15cb0 74 68 65 20 66 69 72 73 74 20 66 65 77 20 74 65  the first few te
15cc0 73 74 73 0a 20 20 20 20 20 20 2a 2a 20 28 65 78  sts.      ** (ex
15cd0 3a 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64  : pC->nHdrParsed
15ce0 3c 3d 70 32 29 20 69 6e 20 74 68 65 20 6e 65 78  <=p2) in the nex
15cf0 74 20 73 65 63 74 69 6f 6e 2c 20 77 65 20 61 63  t section, we ac
15d00 68 69 65 76 65 20 61 0a 20 20 20 20 20 20 2a 2a  hieve a.      **
15d10 20 6d 65 61 73 75 72 61 62 6c 65 20 70 65 72 66   measurable perf
15d20 6f 72 6d 61 6e 63 65 20 67 61 69 6e 2e 0a 20 20  ormance gain..  
15d30 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20      **.      ** 
15d40 54 68 69 73 20 62 72 61 6e 63 68 20 69 73 20 74  This branch is t
15d50 61 6b 65 6e 20 65 76 65 6e 20 69 66 20 61 4f 66  aken even if aOf
15d60 66 73 65 74 5b 30 5d 3d 3d 30 2e 20 20 53 75 63  fset[0]==0.  Suc
15d70 68 20 61 20 72 65 63 6f 72 64 20 69 73 20 6e 65  h a record is ne
15d80 76 65 72 0a 20 20 20 20 20 20 2a 2a 20 67 65 6e  ver.      ** gen
15d90 65 72 61 74 65 64 20 62 79 20 53 51 4c 69 74 65  erated by SQLite
15da0 2c 20 61 6e 64 20 63 6f 75 6c 64 20 62 65 20 63  , and could be c
15db0 6f 6e 73 69 64 65 72 65 64 20 63 6f 72 72 75 70  onsidered corrup
15dc0 74 69 6f 6e 2c 20 62 75 74 20 77 65 0a 20 20 20  tion, but we.   
15dd0 20 20 20 2a 2a 20 61 63 63 65 70 74 20 69 74 20     ** accept it 
15de0 66 6f 72 20 68 69 73 74 6f 72 69 63 61 6c 20 72  for historical r
15df0 65 61 73 6f 6e 73 2e 20 20 57 68 65 6e 20 61 4f  easons.  When aO
15e00 66 66 73 65 74 5b 30 5d 3d 3d 30 2c 20 74 68 65  ffset[0]==0, the
15e10 20 63 6f 64 65 20 74 68 69 73 0a 20 20 20 20 20   code this.     
15e20 20 2a 2a 20 62 72 61 6e 63 68 20 6a 75 6d 70 73   ** branch jumps
15e30 20 74 6f 20 72 65 61 64 73 20 70 61 73 74 20 74   to reads past t
15e40 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65  he end of the re
15e50 63 6f 72 64 2c 20 62 75 74 20 6e 65 76 65 72 20  cord, but never 
15e60 6d 6f 72 65 0a 20 20 20 20 20 20 2a 2a 20 74 68  more.      ** th
15e70 61 6e 20 61 20 66 65 77 20 62 79 74 65 73 2e 20  an a few bytes. 
15e80 20 45 76 65 6e 20 69 66 20 74 68 65 20 72 65 63   Even if the rec
15e90 6f 72 64 20 6f 63 63 75 72 73 20 61 74 20 74 68  ord occurs at th
15ea0 65 20 65 6e 64 20 6f 66 20 74 68 65 20 70 61 67  e end of the pag
15eb0 65 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e 74 65  e.      ** conte
15ec0 6e 74 20 61 72 65 61 2c 20 74 68 65 20 22 70 61  nt area, the "pa
15ed0 67 65 20 68 65 61 64 65 72 22 20 63 6f 6d 65 73  ge header" comes
15ee0 20 61 66 74 65 72 20 74 68 65 20 70 61 67 65 20   after the page 
15ef0 63 6f 6e 74 65 6e 74 20 61 6e 64 20 73 6f 0a 20  content and so. 
15f00 20 20 20 20 20 2a 2a 20 74 68 69 73 20 6f 76 65       ** this ove
15f10 72 72 65 61 64 20 69 73 20 68 61 72 6d 6c 65 73  rread is harmles
15f20 73 2e 20 20 53 69 6d 69 6c 61 72 20 6f 76 65 72  s.  Similar over
15f30 72 65 61 64 73 20 63 61 6e 20 6f 63 63 75 72 20  reads can occur 
15f40 66 6f 72 20 61 20 63 6f 72 72 75 70 74 0a 20 20  for a corrupt.  
15f50 20 20 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20      ** database 
15f60 66 69 6c 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  file..      */. 
15f70 20 20 20 20 20 7a 44 61 74 61 20 3d 20 70 43 2d       zData = pC-
15f80 3e 61 52 6f 77 3b 0a 20 20 20 20 20 20 61 73 73  >aRow;.      ass
15f90 65 72 74 28 20 70 43 2d 3e 6e 48 64 72 50 61 72  ert( pC->nHdrPar
15fa0 73 65 64 3c 3d 70 32 20 29 3b 20 20 20 20 20 20  sed<=p2 );      
15fb0 20 20 20 2f 2a 20 43 6f 6e 64 69 74 69 6f 6e 61     /* Conditiona
15fc0 6c 20 73 6b 69 70 70 65 64 20 2a 2f 0a 20 20 20  l skipped */.   
15fd0 20 20 20 74 65 73 74 63 61 73 65 28 20 61 4f 66     testcase( aOf
15fe0 66 73 65 74 5b 30 5d 3d 3d 30 20 29 3b 0a 20 20  fset[0]==0 );.  
15ff0 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
16000 6d 6e 5f 72 65 61 64 5f 68 65 61 64 65 72 3b 0a  mn_read_header;.
16010 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20      }.  }..  /* 
16020 4d 61 6b 65 20 73 75 72 65 20 61 74 20 6c 65 61  Make sure at lea
16030 73 74 20 74 68 65 20 66 69 72 73 74 20 70 32 2b  st the first p2+
16040 31 20 65 6e 74 72 69 65 73 20 6f 66 20 74 68 65  1 entries of the
16050 20 68 65 61 64 65 72 20 68 61 76 65 20 62 65 65   header have bee
16060 6e 0a 20 20 2a 2a 20 70 61 72 73 65 64 20 61 6e  n.  ** parsed an
16070 64 20 76 61 6c 69 64 20 69 6e 66 6f 72 6d 61 74  d valid informat
16080 69 6f 6e 20 69 73 20 69 6e 20 61 4f 66 66 73 65  ion is in aOffse
16090 74 5b 5d 20 61 6e 64 20 70 43 2d 3e 61 54 79 70  t[] and pC->aTyp
160a0 65 5b 5d 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  e[]..  */.  if( 
160b0 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d  pC->nHdrParsed<=
160c0 70 32 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  p2 ){.    /* If 
160d0 74 68 65 72 65 20 69 73 20 6d 6f 72 65 20 68 65  there is more he
160e0 61 64 65 72 20 61 76 61 69 6c 61 62 6c 65 20 66  ader available f
160f0 6f 72 20 70 61 72 73 69 6e 67 20 69 6e 20 74 68  or parsing in th
16100 65 20 72 65 63 6f 72 64 2c 20 74 72 79 0a 20 20  e record, try.  
16110 20 20 2a 2a 20 74 6f 20 65 78 74 72 61 63 74 20    ** to extract 
16120 61 64 64 69 74 69 6f 6e 61 6c 20 66 69 65 6c 64  additional field
16130 73 20 75 70 20 74 68 72 6f 75 67 68 20 74 68 65  s up through the
16140 20 70 32 2b 31 2d 74 68 20 66 69 65 6c 64 20 0a   p2+1-th field .
16150 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70      */.    if( p
16160 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 3c 61 4f  C->iHdrOffset<aO
16170 66 66 73 65 74 5b 30 5d 20 29 7b 0a 20 20 20 20  ffset[0] ){.    
16180 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 7a    /* Make sure z
16190 44 61 74 61 20 70 6f 69 6e 74 73 20 74 6f 20 65  Data points to e
161a0 6e 6f 75 67 68 20 6f 66 20 74 68 65 20 72 65 63  nough of the rec
161b0 6f 72 64 20 74 6f 20 63 6f 76 65 72 20 74 68 65  ord to cover the
161c0 20 68 65 61 64 65 72 2e 20 2a 2f 0a 20 20 20 20   header. */.    
161d0 20 20 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d    if( pC->aRow==
161e0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 6d 65 6d  0 ){.        mem
161f0 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69  set(&sMem, 0, si
16200 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20 20  zeof(sMem));.   
16210 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
16220 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65  3VdbeMemFromBtre
16230 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  e(pC->uc.pCursor
16240 2c 20 30 2c 20 61 4f 66 66 73 65 74 5b 30 5d 2c  , 0, aOffset[0],
16250 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20   &sMem);.       
16260 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
16270 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
16280 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
16290 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 28 75        zData = (u
162a0 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20  8*)sMem.z;.     
162b0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
162c0 7a 44 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77  zData = pC->aRow
162d0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20  ;.      }.  .   
162e0 20 20 20 2f 2a 20 46 69 6c 6c 20 69 6e 20 70 43     /* Fill in pC
162f0 2d 3e 61 54 79 70 65 5b 69 5d 20 61 6e 64 20 61  ->aType[i] and a
16300 4f 66 66 73 65 74 5b 69 5d 20 76 61 6c 75 65 73  Offset[i] values
16310 20 74 68 72 6f 75 67 68 20 74 68 65 20 70 32 2d   through the p2-
16320 74 68 20 66 69 65 6c 64 2e 20 2a 2f 0a 20 20 20  th field. */.   
16330 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72 65 61 64 5f   op_column_read_
16340 68 65 61 64 65 72 3a 0a 20 20 20 20 20 20 69 20  header:.      i 
16350 3d 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64  = pC->nHdrParsed
16360 3b 0a 20 20 20 20 20 20 6f 66 66 73 65 74 36 34  ;.      offset64
16370 20 3d 20 61 4f 66 66 73 65 74 5b 69 5d 3b 0a 20   = aOffset[i];. 
16380 20 20 20 20 20 7a 48 64 72 20 3d 20 7a 44 61 74       zHdr = zDat
16390 61 20 2b 20 70 43 2d 3e 69 48 64 72 4f 66 66 73  a + pC->iHdrOffs
163a0 65 74 3b 0a 20 20 20 20 20 20 7a 45 6e 64 48 64  et;.      zEndHd
163b0 72 20 3d 20 7a 44 61 74 61 20 2b 20 61 4f 66 66  r = zData + aOff
163c0 73 65 74 5b 30 5d 3b 0a 20 20 20 20 20 20 74 65  set[0];.      te
163d0 73 74 63 61 73 65 28 20 7a 48 64 72 3e 3d 7a 45  stcase( zHdr>=zE
163e0 6e 64 48 64 72 20 29 3b 0a 20 20 20 20 20 20 64  ndHdr );.      d
163f0 6f 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28  o{.        if( (
16400 70 43 2d 3e 61 54 79 70 65 5b 69 5d 20 3d 20 74  pC->aType[i] = t
16410 20 3d 20 7a 48 64 72 5b 30 5d 29 3c 30 78 38 30   = zHdr[0])<0x80
16420 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 7a 48   ){.          zH
16430 64 72 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20  dr++;.          
16440 6f 66 66 73 65 74 36 34 20 2b 3d 20 73 71 6c 69  offset64 += sqli
16450 74 65 33 56 64 62 65 4f 6e 65 42 79 74 65 53 65  te3VdbeOneByteSe
16460 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29 3b 0a  rialTypeLen(t);.
16470 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
16480 20 20 20 20 20 20 20 20 20 7a 48 64 72 20 2b 3d           zHdr +=
16490 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
164a0 74 33 32 28 7a 48 64 72 2c 20 26 74 29 3b 0a 20  t32(zHdr, &t);. 
164b0 20 20 20 20 20 20 20 20 20 70 43 2d 3e 61 54 79           pC->aTy
164c0 70 65 5b 69 5d 20 3d 20 74 3b 0a 20 20 20 20 20  pe[i] = t;.     
164d0 20 20 20 20 20 6f 66 66 73 65 74 36 34 20 2b 3d       offset64 +=
164e0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
164f0 61 6c 54 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20  alTypeLen(t);.  
16500 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
16510 61 4f 66 66 73 65 74 5b 2b 2b 69 5d 20 3d 20 28  aOffset[++i] = (
16520 75 33 32 29 28 6f 66 66 73 65 74 36 34 20 26 20  u32)(offset64 & 
16530 30 78 66 66 66 66 66 66 66 66 29 3b 0a 20 20 20  0xffffffff);.   
16540 20 20 20 7d 77 68 69 6c 65 28 20 69 3c 3d 70 32     }while( i<=p2
16550 20 26 26 20 7a 48 64 72 3c 7a 45 6e 64 48 64 72   && zHdr<zEndHdr
16560 20 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 54 68   );..      /* Th
16570 65 20 72 65 63 6f 72 64 20 69 73 20 63 6f 72 72  e record is corr
16580 75 70 74 20 69 66 20 61 6e 79 20 6f 66 20 74 68  upt if any of th
16590 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20  e following are 
165a0 74 72 75 65 3a 0a 20 20 20 20 20 20 2a 2a 20 28  true:.      ** (
165b0 31 29 20 74 68 65 20 62 79 74 65 73 20 6f 66 20  1) the bytes of 
165c0 74 68 65 20 68 65 61 64 65 72 20 65 78 74 65 6e  the header exten
165d0 64 20 70 61 73 74 20 74 68 65 20 64 65 63 6c 61  d past the decla
165e0 72 65 64 20 68 65 61 64 65 72 20 73 69 7a 65 0a  red header size.
165f0 20 20 20 20 20 20 2a 2a 20 28 32 29 20 74 68 65        ** (2) the
16600 20 65 6e 74 69 72 65 20 68 65 61 64 65 72 20 77   entire header w
16610 61 73 20 75 73 65 64 20 62 75 74 20 6e 6f 74 20  as used but not 
16620 61 6c 6c 20 64 61 74 61 20 77 61 73 20 75 73 65  all data was use
16630 64 0a 20 20 20 20 20 20 2a 2a 20 28 33 29 20 74  d.      ** (3) t
16640 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 64 61  he end of the da
16650 74 61 20 65 78 74 65 6e 64 73 20 62 65 79 6f 6e  ta extends beyon
16660 64 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  d the end of the
16670 20 72 65 63 6f 72 64 2e 0a 20 20 20 20 20 20 2a   record..      *
16680 2f 0a 20 20 20 20 20 20 69 66 28 20 28 7a 48 64  /.      if( (zHd
16690 72 3e 3d 7a 45 6e 64 48 64 72 20 26 26 20 28 7a  r>=zEndHdr && (z
166a0 48 64 72 3e 7a 45 6e 64 48 64 72 20 7c 7c 20 6f  Hdr>zEndHdr || o
166b0 66 66 73 65 74 36 34 21 3d 70 43 2d 3e 70 61 79  ffset64!=pC->pay
166c0 6c 6f 61 64 53 69 7a 65 29 29 0a 20 20 20 20 20  loadSize)).     
166d0 20 20 7c 7c 20 28 6f 66 66 73 65 74 36 34 20 3e    || (offset64 >
166e0 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
166f0 29 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20  ).      ){.     
16700 20 20 20 69 66 28 20 61 4f 66 66 73 65 74 5b 30     if( aOffset[0
16710 5d 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  ]==0 ){.        
16720 20 20 69 20 3d 20 30 3b 0a 20 20 20 20 20 20 20    i = 0;.       
16730 20 20 20 7a 48 64 72 20 3d 20 7a 45 6e 64 48 64     zHdr = zEndHd
16740 72 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  r;.        }else
16750 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  {.          if( 
16760 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 20 73 71  pC->aRow==0 ) sq
16770 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
16780 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20 20 20  ase(&sMem);.    
16790 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f        goto op_co
167a0 6c 75 6d 6e 5f 63 6f 72 72 75 70 74 3b 0a 20 20  lumn_corrupt;.  
167b0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
167c0 0a 20 20 20 20 20 20 70 43 2d 3e 6e 48 64 72 50  .      pC->nHdrP
167d0 61 72 73 65 64 20 3d 20 69 3b 0a 20 20 20 20 20  arsed = i;.     
167e0 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 20   pC->iHdrOffset 
167f0 3d 20 28 75 33 32 29 28 7a 48 64 72 20 2d 20 7a  = (u32)(zHdr - z
16800 44 61 74 61 29 3b 0a 20 20 20 20 20 20 69 66 28  Data);.      if(
16810 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 20 73   pC->aRow==0 ) s
16820 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
16830 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20 20  ease(&sMem);.   
16840 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 74 20   }else{.      t 
16850 3d 20 30 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  = 0;.    }..    
16860 2f 2a 20 49 66 20 61 66 74 65 72 20 74 72 79 69  /* If after tryi
16870 6e 67 20 74 6f 20 65 78 74 72 61 63 74 20 6e 65  ng to extract ne
16880 77 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74  w entries from t
16890 68 65 20 68 65 61 64 65 72 2c 20 6e 48 64 72 50  he header, nHdrP
168a0 61 72 73 65 64 20 69 73 0a 20 20 20 20 2a 2a 20  arsed is.    ** 
168b0 73 74 69 6c 6c 20 6e 6f 74 20 75 70 20 74 6f 20  still not up to 
168c0 70 32 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  p2, that means t
168d0 68 61 74 20 74 68 65 20 72 65 63 6f 72 64 20 68  hat the record h
168e0 61 73 20 66 65 77 65 72 20 74 68 61 6e 20 70 32  as fewer than p2
168f0 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e 73 2e  .    ** columns.
16900 20 20 53 6f 20 74 68 65 20 72 65 73 75 6c 74 20    So the result 
16910 77 69 6c 6c 20 62 65 20 65 69 74 68 65 72 20 74  will be either t
16920 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  he default value
16930 20 6f 72 20 61 20 4e 55 4c 4c 2e 0a 20 20 20 20   or a NULL..    
16940 2a 2f 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e  */.    if( pC->n
16950 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29 7b  HdrParsed<=p2 ){
16960 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
16970 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45 4d 20 29  p4type==P4_MEM )
16980 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
16990 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
169a0 6f 70 79 28 70 44 65 73 74 2c 20 70 4f 70 2d 3e  opy(pDest, pOp->
169b0 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74 61  p4.pMem, MEM_Sta
169c0 74 69 63 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  tic);.      }els
169d0 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
169e0 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
169f0 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 7d  (pDest);.      }
16a00 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63  .      goto op_c
16a10 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d  olumn_out;.    }
16a20 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 74 20  .  }else{.    t 
16a30 3d 20 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 3b  = pC->aType[p2];
16a40 0a 20 20 7d 0a 0a 20 20 2f 2a 20 45 78 74 72 61  .  }..  /* Extra
16a50 63 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 66  ct the content f
16a60 6f 72 20 74 68 65 20 70 32 2b 31 2d 74 68 20 63  or the p2+1-th c
16a70 6f 6c 75 6d 6e 2e 20 20 43 6f 6e 74 72 6f 6c 20  olumn.  Control 
16a80 63 61 6e 20 6f 6e 6c 79 0a 20 20 2a 2a 20 72 65  can only.  ** re
16a90 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74 20 69  ach this point i
16aa0 66 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 61  f aOffset[p2], a
16ab0 4f 66 66 73 65 74 5b 70 32 2b 31 5d 2c 20 61 6e  Offset[p2+1], an
16ac0 64 20 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 20  d pC->aType[p2] 
16ad0 61 72 65 0a 20 20 2a 2a 20 61 6c 6c 20 76 61 6c  are.  ** all val
16ae0 69 64 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72  id..  */.  asser
16af0 74 28 20 70 32 3c 70 43 2d 3e 6e 48 64 72 50 61  t( p2<pC->nHdrPa
16b00 72 73 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74  rsed );.  assert
16b10 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
16b20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c  );.  assert( sql
16b30 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d  ite3VdbeCheckMem
16b40 49 6e 76 61 72 69 61 6e 74 73 28 70 44 65 73 74  Invariants(pDest
16b50 29 20 29 3b 0a 20 20 69 66 28 20 56 64 62 65 4d  ) );.  if( VdbeM
16b60 65 6d 44 79 6e 61 6d 69 63 28 70 44 65 73 74 29  emDynamic(pDest)
16b70 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
16b80 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44  dbeMemSetNull(pD
16b90 65 73 74 29 3b 0a 20 20 7d 0a 20 20 61 73 73 65  est);.  }.  asse
16ba0 72 74 28 20 74 3d 3d 70 43 2d 3e 61 54 79 70 65  rt( t==pC->aType
16bb0 5b 70 32 5d 20 29 3b 0a 20 20 69 66 28 20 70 43  [p2] );.  if( pC
16bc0 2d 3e 73 7a 52 6f 77 3e 3d 61 4f 66 66 73 65 74  ->szRow>=aOffset
16bd0 5b 70 32 2b 31 5d 20 29 7b 0a 20 20 20 20 2f 2a  [p2+1] ){.    /*
16be0 20 54 68 69 73 20 69 73 20 74 68 65 20 63 6f 6d   This is the com
16bf0 6d 6f 6e 20 63 61 73 65 20 77 68 65 72 65 20 74  mon case where t
16c00 68 65 20 64 65 73 69 72 65 64 20 63 6f 6e 74 65  he desired conte
16c10 6e 74 20 66 69 74 73 20 6f 6e 20 74 68 65 20 6f  nt fits on the o
16c20 72 69 67 69 6e 61 6c 0a 20 20 20 20 2a 2a 20 70  riginal.    ** p
16c30 61 67 65 20 2d 20 77 68 65 72 65 20 74 68 65 20  age - where the 
16c40 63 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74 20 6f  content is not o
16c50 6e 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61  n an overflow pa
16c60 67 65 20 2a 2f 0a 20 20 20 20 7a 44 61 74 61 20  ge */.    zData 
16c70 3d 20 70 43 2d 3e 61 52 6f 77 20 2b 20 61 4f 66  = pC->aRow + aOf
16c80 66 73 65 74 5b 70 32 5d 3b 0a 20 20 20 20 69 66  fset[p2];.    if
16c90 28 20 74 3c 31 32 20 29 7b 0a 20 20 20 20 20 20  ( t<12 ){.      
16ca0 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
16cb0 6c 47 65 74 28 7a 44 61 74 61 2c 20 74 2c 20 70  lGet(zData, t, p
16cc0 44 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65  Dest);.    }else
16cd0 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68  {.      /* If th
16ce0 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 69  e column value i
16cf0 73 20 61 20 73 74 72 69 6e 67 2c 20 77 65 20 6e  s a string, we n
16d00 65 65 64 20 61 20 70 65 72 73 69 73 74 65 6e 74  eed a persistent
16d10 20 76 61 6c 75 65 2c 20 6e 6f 74 0a 20 20 20 20   value, not.    
16d20 20 20 2a 2a 20 61 20 4d 45 4d 5f 45 70 68 65 6d    ** a MEM_Ephem
16d30 20 76 61 6c 75 65 2e 20 20 54 68 69 73 20 62 72   value.  This br
16d40 61 6e 63 68 20 69 73 20 61 20 66 61 73 74 20 73  anch is a fast s
16d50 68 6f 72 74 2d 63 75 74 20 74 68 61 74 20 69 73  hort-cut that is
16d60 20 65 71 75 69 76 61 6c 65 6e 74 0a 20 20 20 20   equivalent.    
16d70 20 20 2a 2a 20 74 6f 20 63 61 6c 6c 69 6e 67 20    ** to calling 
16d80 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
16d90 6c 47 65 74 28 29 20 61 6e 64 20 73 71 6c 69 74  lGet() and sqlit
16da0 65 33 56 64 62 65 44 65 65 70 68 65 6d 65 72 61  e3VdbeDeephemera
16db0 6c 69 7a 65 28 29 2e 0a 20 20 20 20 20 20 2a 2f  lize()..      */
16dc0 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f  .      static co
16dd0 6e 73 74 20 75 31 36 20 61 46 6c 61 67 5b 5d 20  nst u16 aFlag[] 
16de0 3d 20 7b 20 4d 45 4d 5f 42 6c 6f 62 2c 20 4d 45  = { MEM_Blob, ME
16df0 4d 5f 53 74 72 7c 4d 45 4d 5f 54 65 72 6d 20 7d  M_Str|MEM_Term }
16e00 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 6e  ;.      pDest->n
16e10 20 3d 20 6c 65 6e 20 3d 20 28 74 2d 31 32 29 2f   = len = (t-12)/
16e20 32 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e  2;.      pDest->
16e30 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a  enc = encoding;.
16e40 20 20 20 20 20 20 69 66 28 20 70 44 65 73 74 2d        if( pDest-
16e50 3e 73 7a 4d 61 6c 6c 6f 63 20 3c 20 6c 65 6e 2b  >szMalloc < len+
16e60 32 20 29 7b 0a 20 20 20 20 20 20 20 20 70 44 65  2 ){.        pDe
16e70 73 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  st->flags = MEM_
16e80 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66  Null;.        if
16e90 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
16ea0 47 72 6f 77 28 70 44 65 73 74 2c 20 6c 65 6e 2b  Grow(pDest, len+
16eb0 32 2c 20 30 29 20 29 20 67 6f 74 6f 20 6e 6f 5f  2, 0) ) goto no_
16ec0 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  mem;.      }else
16ed0 7b 0a 20 20 20 20 20 20 20 20 70 44 65 73 74 2d  {.        pDest-
16ee0 3e 7a 20 3d 20 70 44 65 73 74 2d 3e 7a 4d 61 6c  >z = pDest->zMal
16ef0 6c 6f 63 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  loc;.      }.   
16f00 20 20 20 6d 65 6d 63 70 79 28 70 44 65 73 74 2d     memcpy(pDest-
16f10 3e 7a 2c 20 7a 44 61 74 61 2c 20 6c 65 6e 29 3b  >z, zData, len);
16f20 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 7a 5b  .      pDest->z[
16f30 6c 65 6e 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20  len] = 0;.      
16f40 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 2b 31 5d 20  pDest->z[len+1] 
16f50 3d 20 30 3b 0a 20 20 20 20 20 20 70 44 65 73 74  = 0;.      pDest
16f60 2d 3e 66 6c 61 67 73 20 3d 20 61 46 6c 61 67 5b  ->flags = aFlag[
16f70 74 26 31 5d 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  t&1];.    }.  }e
16f80 6c 73 65 7b 0a 20 20 20 20 70 44 65 73 74 2d 3e  lse{.    pDest->
16f90 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a  enc = encoding;.
16fa0 20 20 20 20 2f 2a 20 54 68 69 73 20 62 72 61 6e      /* This bran
16fb0 63 68 20 68 61 70 70 65 6e 73 20 6f 6e 6c 79 20  ch happens only 
16fc0 77 68 65 6e 20 63 6f 6e 74 65 6e 74 20 69 73 20  when content is 
16fd0 6f 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65  on overflow page
16fe0 73 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 28 70  s */.    if( ((p
16ff0 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41 47  Op->p5 & (OPFLAG
17000 5f 4c 45 4e 47 54 48 41 52 47 7c 4f 50 46 4c 41  _LENGTHARG|OPFLA
17010 47 5f 54 59 50 45 4f 46 41 52 47 29 29 21 3d 30  G_TYPEOFARG))!=0
17020 0a 20 20 20 20 20 20 20 20 20 20 26 26 20 28 28  .          && ((
17030 74 3e 3d 31 32 20 26 26 20 28 74 26 31 29 3d 3d  t>=12 && (t&1)==
17040 30 29 20 7c 7c 20 28 70 4f 70 2d 3e 70 35 20 26  0) || (pOp->p5 &
17050 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52   OPFLAG_TYPEOFAR
17060 47 29 21 3d 30 29 29 0a 20 20 20 20 20 7c 7c 20  G)!=0)).     || 
17070 28 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 56 64  (len = sqlite3Vd
17080 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28  beSerialTypeLen(
17090 74 29 29 3d 3d 30 0a 20 20 20 20 29 7b 0a 20 20  t))==0.    ){.  
170a0 20 20 20 20 2f 2a 20 43 6f 6e 74 65 6e 74 20 69      /* Content i
170b0 73 20 69 72 72 65 6c 65 76 61 6e 74 20 66 6f 72  s irrelevant for
170c0 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 31 2e 20  .      **    1. 
170d0 74 68 65 20 74 79 70 65 6f 66 28 29 20 66 75 6e  the typeof() fun
170e0 63 74 69 6f 6e 2c 0a 20 20 20 20 20 20 2a 2a 20  ction,.      ** 
170f0 20 20 20 32 2e 20 74 68 65 20 6c 65 6e 67 74 68     2. the length
17100 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 66 20  (X) function if 
17110 58 20 69 73 20 61 20 62 6c 6f 62 2c 20 61 6e 64  X is a blob, and
17120 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 33 2e 20  .      **    3. 
17130 69 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6c  if the content l
17140 65 6e 67 74 68 20 69 73 20 7a 65 72 6f 2e 0a 20  ength is zero.. 
17150 20 20 20 20 20 2a 2a 20 53 6f 20 77 65 20 6d 69       ** So we mi
17160 67 68 74 20 61 73 20 77 65 6c 6c 20 75 73 65 20  ght as well use 
17170 62 6f 67 75 73 20 63 6f 6e 74 65 6e 74 20 72 61  bogus content ra
17180 74 68 65 72 20 74 68 61 6e 20 72 65 61 64 69 6e  ther than readin
17190 67 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e 74 65  g.      ** conte
171a0 6e 74 20 66 72 6f 6d 20 64 69 73 6b 2e 20 0a 20  nt from disk. . 
171b0 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a       **.      **
171c0 20 41 6c 74 68 6f 75 67 68 20 73 71 6c 69 74 65   Although sqlite
171d0 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 29  3VdbeSerialGet()
171e0 20 6d 61 79 20 72 65 61 64 20 61 74 20 6d 6f 73   may read at mos
171f0 74 20 38 20 62 79 74 65 73 20 66 72 6f 6d 20 74  t 8 bytes from t
17200 68 65 0a 20 20 20 20 20 20 2a 2a 20 62 75 66 66  he.      ** buff
17210 65 72 20 70 61 73 73 65 64 20 74 6f 20 69 74 2c  er passed to it,
17220 20 64 65 62 75 67 67 69 6e 67 20 66 75 6e 63 74   debugging funct
17230 69 6f 6e 20 56 64 62 65 4d 65 6d 50 72 65 74 74  ion VdbeMemPrett
17240 79 50 72 69 6e 74 28 29 20 6d 61 79 0a 20 20 20  yPrint() may.   
17250 20 20 20 2a 2a 20 72 65 61 64 20 75 70 20 74 6f     ** read up to
17260 20 31 36 2e 20 53 6f 20 31 36 20 62 79 74 65 73   16. So 16 bytes
17270 20 6f 66 20 62 6f 67 75 73 20 63 6f 6e 74 65 6e   of bogus conten
17280 74 20 69 73 20 73 75 70 70 6c 69 65 64 2e 0a 20  t is supplied.. 
17290 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 74       */.      st
172a0 61 74 69 63 20 75 38 20 61 5a 65 72 6f 5b 31 36  atic u8 aZero[16
172b0 5d 3b 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74  ];  /* This is t
172c0 68 65 20 62 6f 67 75 73 20 63 6f 6e 74 65 6e 74  he bogus content
172d0 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65   */.      sqlite
172e0 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 61  3VdbeSerialGet(a
172f0 5a 65 72 6f 2c 20 74 2c 20 70 44 65 73 74 29 3b  Zero, t, pDest);
17300 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
17310 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
17320 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70  beMemFromBtree(p
17330 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 61  C->uc.pCursor, a
17340 4f 66 66 73 65 74 5b 70 32 5d 2c 20 6c 65 6e 2c  Offset[p2], len,
17350 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 69   pDest);.      i
17360 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
17370 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
17380 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
17390 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72    sqlite3VdbeSer
173a0 69 61 6c 47 65 74 28 28 63 6f 6e 73 74 20 75 38  ialGet((const u8
173b0 2a 29 70 44 65 73 74 2d 3e 7a 2c 20 74 2c 20 70  *)pDest->z, t, p
173c0 44 65 73 74 29 3b 0a 20 20 20 20 20 20 70 44 65  Dest);.      pDe
173d0 73 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45  st->flags &= ~ME
173e0 4d 5f 45 70 68 65 6d 3b 0a 20 20 20 20 7d 0a 20  M_Ephem;.    }. 
173f0 20 7d 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75   }..op_column_ou
17400 74 3a 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  t:.  UPDATE_MAX_
17410 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b  BLOBSIZE(pDest);
17420 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
17430 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74  E(pOp->p3, pDest
17440 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 0a 6f 70 5f  );.  break;..op_
17450 63 6f 6c 75 6d 6e 5f 63 6f 72 72 75 70 74 3a 0a  column_corrupt:.
17460 20 20 69 66 28 20 61 4f 70 5b 30 5d 2e 70 33 3e    if( aOp[0].p3>
17470 30 20 29 7b 0a 20 20 20 20 70 4f 70 20 3d 20 26  0 ){.    pOp = &
17480 61 4f 70 5b 61 4f 70 5b 30 5d 2e 70 33 2d 31 5d  aOp[aOp[0].p3-1]
17490 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
174a0 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 53  else{.    rc = S
174b0 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b  QLITE_CORRUPT_BK
174c0 50 54 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f  PT;.    goto abo
174d0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
174e0 0a 20 20 7d 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  .  }.}../* Opcod
174f0 65 3a 20 41 66 66 69 6e 69 74 79 20 50 31 20 50  e: Affinity P1 P
17500 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
17510 70 73 69 73 3a 20 61 66 66 69 6e 69 74 79 28 72  psis: affinity(r
17520 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 41  [P1@P2]).**.** A
17530 70 70 6c 79 20 61 66 66 69 6e 69 74 69 65 73 20  pply affinities 
17540 74 6f 20 61 20 72 61 6e 67 65 20 6f 66 20 50 32  to a range of P2
17550 20 72 65 67 69 73 74 65 72 73 20 73 74 61 72 74   registers start
17560 69 6e 67 20 77 69 74 68 20 50 31 2e 0a 2a 2a 0a  ing with P1..**.
17570 2a 2a 20 50 34 20 69 73 20 61 20 73 74 72 69 6e  ** P4 is a strin
17580 67 20 74 68 61 74 20 69 73 20 50 32 20 63 68 61  g that is P2 cha
17590 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 54 68  racters long. Th
175a0 65 20 4e 2d 74 68 20 63 68 61 72 61 63 74 65 72  e N-th character
175b0 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e   of the.** strin
175c0 67 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20  g indicates the 
175d0 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20  column affinity 
175e0 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75  that should be u
175f0 73 65 64 20 66 6f 72 20 74 68 65 20 4e 2d 74 68  sed for the N-th
17600 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  .** memory cell 
17610 69 6e 20 74 68 65 20 72 61 6e 67 65 2e 0a 2a 2f  in the range..*/
17620 0a 63 61 73 65 20 4f 50 5f 41 66 66 69 6e 69 74  .case OP_Affinit
17630 79 3a 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  y: {.  const cha
17640 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20  r *zAffinity;   
17650 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20  /* The affinity 
17660 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f  to be applied */
17670 0a 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20  ..  zAffinity = 
17680 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73  pOp->p4.z;.  ass
17690 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79 21 3d  ert( zAffinity!=
176a0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
176b0 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 61 73  Op->p2>0 );.  as
176c0 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79 5b  sert( zAffinity[
176d0 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29 3b 0a 20  pOp->p2]==0 );. 
176e0 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
176f0 70 2d 3e 70 31 5d 3b 0a 20 20 77 68 69 6c 65 28  p->p1];.  while(
17700 20 31 20 2f 2a 65 78 69 74 2d 62 79 2d 62 72 65   1 /*exit-by-bre
17710 61 6b 2a 2f 20 29 7b 0a 20 20 20 20 61 73 73 65  ak*/ ){.    asse
17720 72 74 28 20 70 49 6e 31 20 3c 3d 20 26 70 2d 3e  rt( pIn1 <= &p->
17730 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20  aMem[(p->nMem+1 
17740 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29  - p->nCursor)] )
17750 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
17760 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29  mIsValid(pIn1) )
17770 3b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e  ;.    applyAffin
17780 69 74 79 28 70 49 6e 31 2c 20 7a 41 66 66 69 6e  ity(pIn1, zAffin
17790 69 74 79 5b 30 5d 2c 20 65 6e 63 6f 64 69 6e 67  ity[0], encoding
177a0 29 3b 0a 20 20 20 20 69 66 28 20 7a 41 66 66 69  );.    if( zAffi
177b0 6e 69 74 79 5b 30 5d 3d 3d 53 51 4c 49 54 45 5f  nity[0]==SQLITE_
177c0 41 46 46 5f 52 45 41 4c 20 26 26 20 28 70 49 6e  AFF_REAL && (pIn
177d0 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
177e0 6e 74 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  nt)!=0 ){.      
177f0 2f 2a 20 57 68 65 6e 20 61 70 70 6c 79 69 6e 67  /* When applying
17800 20 52 45 41 4c 20 61 66 66 69 6e 69 74 79 2c 20   REAL affinity, 
17810 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  if the result is
17820 20 73 74 69 6c 6c 20 61 6e 20 4d 45 4d 5f 49 6e   still an MEM_In
17830 74 0a 20 20 20 20 20 20 2a 2a 20 74 68 61 74 20  t.      ** that 
17840 77 69 6c 6c 20 66 69 74 20 69 6e 20 36 20 62 79  will fit in 6 by
17850 74 65 73 2c 20 74 68 65 6e 20 63 68 61 6e 67 65  tes, then change
17860 20 74 68 65 20 74 79 70 65 20 74 6f 20 4d 45 4d   the type to MEM
17870 5f 49 6e 74 52 65 61 6c 0a 20 20 20 20 20 20 2a  _IntReal.      *
17880 2a 20 73 6f 20 74 68 61 74 20 77 65 20 6b 65 65  * so that we kee
17890 70 20 74 68 65 20 68 69 67 68 2d 72 65 73 6f 6c  p the high-resol
178a0 75 74 69 6f 6e 20 69 6e 74 65 67 65 72 20 76 61  ution integer va
178b0 6c 75 65 20 62 75 74 20 6b 6e 6f 77 20 74 68 61  lue but know tha
178c0 74 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 74  t.      ** the t
178d0 79 70 65 20 72 65 61 6c 6c 79 20 77 61 6e 74 73  ype really wants
178e0 20 74 6f 20 62 65 20 52 45 41 4c 2e 20 2a 2f 0a   to be REAL. */.
178f0 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
17900 70 49 6e 31 2d 3e 75 2e 69 3d 3d 31 34 30 37 33  pIn1->u.i==14073
17910 37 34 38 38 33 35 35 33 32 38 4c 4c 20 29 3b 0a  7488355328LL );.
17920 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
17930 70 49 6e 31 2d 3e 75 2e 69 3d 3d 31 34 30 37 33  pIn1->u.i==14073
17940 37 34 38 38 33 35 35 33 32 37 4c 4c 20 29 3b 0a  7488355327LL );.
17950 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
17960 70 49 6e 31 2d 3e 75 2e 69 3d 3d 2d 31 34 30 37  pIn1->u.i==-1407
17970 33 37 34 38 38 33 35 35 33 32 38 4c 4c 20 29 3b  37488355328LL );
17980 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
17990 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d 2d 31 34 30   pIn1->u.i==-140
179a0 37 33 37 34 38 38 33 35 35 33 32 39 4c 4c 20 29  737488355329LL )
179b0 3b 0a 20 20 20 20 20 20 69 66 28 20 70 49 6e 31  ;.      if( pIn1
179c0 2d 3e 75 2e 69 3c 3d 31 34 30 37 33 37 34 38 38  ->u.i<=140737488
179d0 33 35 35 33 32 37 4c 4c 20 26 26 20 70 49 6e 31  355327LL && pIn1
179e0 2d 3e 75 2e 69 3e 3d 2d 31 34 30 37 33 37 34 38  ->u.i>=-14073748
179f0 38 33 35 35 33 32 38 4c 4c 20 29 7b 0a 20 20 20  8355328LL ){.   
17a00 20 20 20 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73       pIn1->flags
17a10 20 7c 3d 20 4d 45 4d 5f 49 6e 74 52 65 61 6c 3b   |= MEM_IntReal;
17a20 0a 20 20 20 20 20 20 20 20 70 49 6e 31 2d 3e 66  .        pIn1->f
17a30 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 49 6e 74  lags &= ~MEM_Int
17a40 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
17a50 20 20 20 20 20 20 20 70 49 6e 31 2d 3e 75 2e 72         pIn1->u.r
17a60 20 3d 20 28 64 6f 75 62 6c 65 29 70 49 6e 31 2d   = (double)pIn1-
17a70 3e 75 2e 69 3b 0a 20 20 20 20 20 20 20 20 70 49  >u.i;.        pI
17a80 6e 31 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  n1->flags |= MEM
17a90 5f 52 65 61 6c 3b 0a 20 20 20 20 20 20 20 20 70  _Real;.        p
17aa0 49 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d  In1->flags &= ~M
17ab0 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 20 20 7d 0a  EM_Int;.      }.
17ac0 20 20 20 20 7d 0a 20 20 20 20 52 45 47 49 53 54      }.    REGIST
17ad0 45 52 5f 54 52 41 43 45 28 28 69 6e 74 29 28 70  ER_TRACE((int)(p
17ae0 49 6e 31 2d 61 4d 65 6d 29 2c 20 70 49 6e 31 29  In1-aMem), pIn1)
17af0 3b 0a 20 20 20 20 7a 41 66 66 69 6e 69 74 79 2b  ;.    zAffinity+
17b00 2b 3b 0a 20 20 20 20 69 66 28 20 7a 41 66 66 69  +;.    if( zAffi
17b10 6e 69 74 79 5b 30 5d 3d 3d 30 20 29 20 62 72 65  nity[0]==0 ) bre
17b20 61 6b 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a  ak;.    pIn1++;.
17b30 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
17b40 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 6b 65 52  /* Opcode: MakeR
17b50 65 63 6f 72 64 20 50 31 20 50 32 20 50 33 20 50  ecord P1 P2 P3 P
17b60 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
17b70 20 72 5b 50 33 5d 3d 6d 6b 72 65 63 28 72 5b 50   r[P3]=mkrec(r[P
17b80 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 43 6f 6e  1@P2]).**.** Con
17b90 76 65 72 74 20 50 32 20 72 65 67 69 73 74 65 72  vert P2 register
17ba0 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
17bb0 20 50 31 20 69 6e 74 6f 20 74 68 65 20 5b 72 65   P1 into the [re
17bc0 63 6f 72 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20  cord format].** 
17bd0 75 73 65 20 61 73 20 61 20 64 61 74 61 20 72 65  use as a data re
17be0 63 6f 72 64 20 69 6e 20 61 20 64 61 74 61 62 61  cord in a databa
17bf0 73 65 20 74 61 62 6c 65 20 6f 72 20 61 73 20 61  se table or as a
17c00 20 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e   key.** in an in
17c10 64 65 78 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c  dex.  The OP_Col
17c20 75 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20 64  umn opcode can d
17c30 65 63 6f 64 65 20 74 68 65 20 72 65 63 6f 72 64  ecode the record
17c40 20 6c 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34   later..**.** P4
17c50 20 6d 61 79 20 62 65 20 61 20 73 74 72 69 6e 67   may be a string
17c60 20 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72   that is P2 char
17c70 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68  acters long.  Th
17c80 65 20 4e 2d 74 68 20 63 68 61 72 61 63 74 65 72  e N-th character
17c90 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e   of the.** strin
17ca0 67 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20  g indicates the 
17cb0 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20  column affinity 
17cc0 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75  that should be u
17cd0 73 65 64 20 66 6f 72 20 74 68 65 20 4e 2d 74 68  sed for the N-th
17ce0 0a 2a 2a 20 66 69 65 6c 64 20 6f 66 20 74 68 65  .** field of the
17cf0 20 69 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a   index key..**.*
17d00 2a 20 54 68 65 20 6d 61 70 70 69 6e 67 20 66 72  * The mapping fr
17d10 6f 6d 20 63 68 61 72 61 63 74 65 72 20 74 6f 20  om character to 
17d20 61 66 66 69 6e 69 74 79 20 69 73 20 67 69 76 65  affinity is give
17d30 6e 20 62 79 20 74 68 65 20 53 51 4c 49 54 45 5f  n by the SQLITE_
17d40 41 46 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64  AFF_.** macros d
17d50 65 66 69 6e 65 64 20 69 6e 20 73 71 6c 69 74 65  efined in sqlite
17d60 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  Int.h..**.** If 
17d70 50 34 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  P4 is NULL then 
17d80 61 6c 6c 20 69 6e 64 65 78 20 66 69 65 6c 64 73  all index fields
17d90 20 68 61 76 65 20 74 68 65 20 61 66 66 69 6e 69   have the affini
17da0 74 79 20 42 4c 4f 42 2e 0a 2a 2f 0a 63 61 73 65  ty BLOB..*/.case
17db0 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20   OP_MakeRecord: 
17dc0 7b 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20 20  {.  Mem *pRec;  
17dd0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
17de0 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a  e new record */.
17df0 20 20 75 36 34 20 6e 44 61 74 61 3b 20 20 20 20    u64 nData;    
17e00 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
17e10 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64  er of bytes of d
17e20 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 69  ata space */.  i
17e30 6e 74 20 6e 48 64 72 3b 20 20 20 20 20 20 20 20  nt nHdr;        
17e40 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
17e50 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64  of bytes of head
17e60 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 36  er space */.  i6
17e70 34 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20  4 nByte;        
17e80 20 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70 61       /* Data spa
17e90 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  ce required for 
17ea0 74 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20  this record */. 
17eb0 20 69 36 34 20 6e 5a 65 72 6f 3b 20 20 20 20 20   i64 nZero;     
17ec0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
17ed0 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20  r of zero bytes 
17ee0 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
17ef0 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
17f00 74 20 6e 56 61 72 69 6e 74 3b 20 20 20 20 20 20  t nVarint;      
17f10 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
17f20 66 20 62 79 74 65 73 20 69 6e 20 61 20 76 61 72  f bytes in a var
17f30 69 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73 65 72  int */.  u32 ser
17f40 69 61 6c 5f 74 79 70 65 3b 20 20 20 20 20 20 20  ial_type;       
17f50 2f 2a 20 54 79 70 65 20 66 69 65 6c 64 20 2a 2f  /* Type field */
17f60 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20  .  Mem *pData0; 
17f70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
17f80 73 74 20 66 69 65 6c 64 20 74 6f 20 62 65 20 63  st field to be c
17f90 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74 68 65  ombined into the
17fa0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d   record */.  Mem
17fb0 20 2a 70 4c 61 73 74 3b 20 20 20 20 20 20 20 20   *pLast;        
17fc0 20 20 20 20 2f 2a 20 4c 61 73 74 20 66 69 65 6c      /* Last fiel
17fd0 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  d of the record 
17fe0 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b  */.  int nField;
17ff0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
18000 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
18010 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  in the record */
18020 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69  .  char *zAffini
18030 74 79 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ty;       /* The
18040 20 61 66 66 69 6e 69 74 79 20 73 74 72 69 6e 67   affinity string
18050 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
18060 2a 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66 6f  */.  int file_fo
18070 72 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a 20 46  rmat;       /* F
18080 69 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20 75 73  ile format to us
18090 65 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20 2a  e for encoding *
180a0 2f 0a 20 20 75 33 32 20 6c 65 6e 3b 20 20 20 20  /.  u32 len;    
180b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65             /* Le
180c0 6e 67 74 68 20 6f 66 20 61 20 66 69 65 6c 64 20  ngth of a field 
180d0 2a 2f 0a 20 20 75 38 20 2a 7a 48 64 72 3b 20 20  */.  u8 *zHdr;  
180e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57              /* W
180f0 68 65 72 65 20 74 6f 20 77 72 69 74 65 20 6e 65  here to write ne
18100 78 74 20 62 79 74 65 20 6f 66 20 74 68 65 20 68  xt byte of the h
18110 65 61 64 65 72 20 2a 2f 0a 20 20 75 38 20 2a 7a  eader */.  u8 *z
18120 50 61 79 6c 6f 61 64 3b 20 20 20 20 20 20 20 20  Payload;        
18130 20 20 2f 2a 20 57 68 65 72 65 20 74 6f 20 77 72    /* Where to wr
18140 69 74 65 20 6e 65 78 74 20 62 79 74 65 20 6f 66  ite next byte of
18150 20 74 68 65 20 70 61 79 6c 6f 61 64 20 2a 2f 0a   the payload */.
18160 0a 20 20 2f 2a 20 41 73 73 75 6d 69 6e 67 20 74  .  /* Assuming t
18170 68 65 20 72 65 63 6f 72 64 20 63 6f 6e 74 61 69  he record contai
18180 6e 73 20 4e 20 66 69 65 6c 64 73 2c 20 74 68 65  ns N fields, the
18190 20 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 20 6c   record format l
181a0 6f 6f 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65 20 74  ooks.  ** like t
181b0 68 69 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 2d  his:.  **.  ** -
181c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
181d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
181e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
181f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
18200 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c 20 68  -------.  ** | h
18210 64 72 2d 73 69 7a 65 20 7c 20 74 79 70 65 20 30  dr-size | type 0
18220 20 7c 20 74 79 70 65 20 31 20 7c 20 2e 2e 2e 20   | type 1 | ... 
18230 7c 20 74 79 70 65 20 4e 2d 31 20 7c 20 64 61 74  | type N-1 | dat
18240 61 30 20 7c 20 2e 2e 2e 20 7c 20 64 61 74 61 20  a0 | ... | data 
18250 4e 2d 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d 2d 2d  N-1 | .  ** ----
18260 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
18270 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
18280 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
18290 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
182a0 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44  ----.  **.  ** D
182b0 61 74 61 28 30 29 20 69 73 20 74 61 6b 65 6e 20  ata(0) is taken 
182c0 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31  from register P1
182d0 2e 20 20 44 61 74 61 28 31 29 20 63 6f 6d 65 73  .  Data(1) comes
182e0 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
182f0 31 2b 31 0a 20 20 2a 2a 20 61 6e 64 20 73 6f 20  1+1.  ** and so 
18300 66 6f 72 74 68 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  forth..  **.  **
18310 20 45 61 63 68 20 74 79 70 65 20 66 69 65 6c 64   Each type field
18320 20 69 73 20 61 20 76 61 72 69 6e 74 20 72 65 70   is a varint rep
18330 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20 73 65  resenting the se
18340 72 69 61 6c 20 74 79 70 65 20 6f 66 20 74 68 65  rial type of the
18350 20 0a 20 20 2a 2a 20 63 6f 72 72 65 73 70 6f 6e   .  ** correspon
18360 64 69 6e 67 20 64 61 74 61 20 65 6c 65 6d 65 6e  ding data elemen
18370 74 20 28 73 65 65 20 73 71 6c 69 74 65 33 56 64  t (see sqlite3Vd
18380 62 65 53 65 72 69 61 6c 54 79 70 65 28 29 29 2e  beSerialType()).
18390 20 54 68 65 0a 20 20 2a 2a 20 68 64 72 2d 73 69   The.  ** hdr-si
183a0 7a 65 20 66 69 65 6c 64 20 69 73 20 61 6c 73 6f  ze field is also
183b0 20 61 20 76 61 72 69 6e 74 20 77 68 69 63 68 20   a varint which 
183c0 69 73 20 74 68 65 20 6f 66 66 73 65 74 20 66 72  is the offset fr
183d0 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
183e0 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63  .  ** of the rec
183f0 6f 72 64 20 74 6f 20 64 61 74 61 30 2e 0a 20 20  ord to data0..  
18400 2a 2f 0a 20 20 6e 44 61 74 61 20 3d 20 30 3b 20  */.  nData = 0; 
18410 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
18420 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61  r of bytes of da
18430 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 48  ta space */.  nH
18440 64 72 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  dr = 0;         
18450 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
18460 74 65 73 20 6f 66 20 68 65 61 64 65 72 20 73 70  tes of header sp
18470 61 63 65 20 2a 2f 0a 20 20 6e 5a 65 72 6f 20 3d  ace */.  nZero =
18480 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e   0;         /* N
18490 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79  umber of zero by
184a0 74 65 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f  tes at the end o
184b0 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  f the record */.
184c0 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e    nField = pOp->
184d0 70 31 3b 0a 20 20 7a 41 66 66 69 6e 69 74 79 20  p1;.  zAffinity 
184e0 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61  = pOp->p4.z;.  a
184f0 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20  ssert( nField>0 
18500 26 26 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  && pOp->p2>0 && 
18510 70 4f 70 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d  pOp->p2+nField<=
18520 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
18530 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20  nCursor)+1 );.  
18540 70 44 61 74 61 30 20 3d 20 26 61 4d 65 6d 5b 6e  pData0 = &aMem[n
18550 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69 65 6c 64  Field];.  nField
18560 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 4c   = pOp->p2;.  pL
18570 61 73 74 20 3d 20 26 70 44 61 74 61 30 5b 6e 46  ast = &pData0[nF
18580 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c 65 5f  ield-1];.  file_
18590 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d 69 6e 57  format = p->minW
185a0 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 3b 0a  riteFileFormat;.
185b0 0a 20 20 2f 2a 20 49 64 65 6e 74 69 66 79 20 74  .  /* Identify t
185c0 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74  he output regist
185d0 65 72 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  er */.  assert( 
185e0 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 31 20  pOp->p3<pOp->p1 
185f0 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d  || pOp->p3>=pOp-
18600 3e 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b 0a 20  >p1+pOp->p2 );. 
18610 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
18620 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p3];.  memAbo
18630 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f  utToChange(p, pO
18640 75 74 29 3b 0a 0a 20 20 2f 2a 20 41 70 70 6c 79  ut);..  /* Apply
18650 20 74 68 65 20 72 65 71 75 65 73 74 65 64 20 61   the requested a
18660 66 66 69 6e 69 74 79 20 74 6f 20 61 6c 6c 20 69  ffinity to all i
18670 6e 70 75 74 73 0a 20 20 2a 2f 0a 20 20 61 73 73  nputs.  */.  ass
18680 65 72 74 28 20 70 44 61 74 61 30 3c 3d 70 4c 61  ert( pData0<=pLa
18690 73 74 20 29 3b 0a 20 20 69 66 28 20 7a 41 66 66  st );.  if( zAff
186a0 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 70 52 65  inity ){.    pRe
186b0 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20 20 20  c = pData0;.    
186c0 64 6f 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 41  do{.      applyA
186d0 66 66 69 6e 69 74 79 28 70 52 65 63 2c 20 7a 41  ffinity(pRec, zA
186e0 66 66 69 6e 69 74 79 5b 30 5d 2c 20 65 6e 63 6f  ffinity[0], enco
186f0 64 69 6e 67 29 3b 0a 20 20 20 20 20 20 69 66 28  ding);.      if(
18700 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d 3d 3d 53   zAffinity[0]==S
18710 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 26  QLITE_AFF_REAL &
18720 26 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 20 26  & (pRec->flags &
18730 20 4d 45 4d 5f 49 6e 74 29 20 29 7b 0a 20 20 20   MEM_Int) ){.   
18740 20 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73       pRec->flags
18750 20 7c 3d 20 4d 45 4d 5f 49 6e 74 52 65 61 6c 3b   |= MEM_IntReal;
18760 0a 20 20 20 20 20 20 20 20 70 52 65 63 2d 3e 66  .        pRec->f
18770 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 49 6e  lags &= ~(MEM_In
18780 74 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  t);.      }.    
18790 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
187a0 28 28 69 6e 74 29 28 70 52 65 63 2d 61 4d 65 6d  ((int)(pRec-aMem
187b0 29 2c 20 70 52 65 63 29 3b 0a 20 20 20 20 20 20  ), pRec);.      
187c0 7a 41 66 66 69 6e 69 74 79 2b 2b 3b 0a 20 20 20  zAffinity++;.   
187d0 20 20 20 70 52 65 63 2b 2b 3b 0a 20 20 20 20 20     pRec++;.     
187e0 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69   assert( zAffini
187f0 74 79 5b 30 5d 3d 3d 30 20 7c 7c 20 70 52 65 63  ty[0]==0 || pRec
18800 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 20 20 7d  <=pLast );.    }
18810 77 68 69 6c 65 28 20 7a 41 66 66 69 6e 69 74 79  while( zAffinity
18820 5b 30 5d 20 29 3b 0a 20 20 7d 0a 0a 23 69 66 64  [0] );.  }..#ifd
18830 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
18840 5f 4e 55 4c 4c 5f 54 52 49 4d 0a 20 20 2f 2a 20  _NULL_TRIM.  /* 
18850 4e 55 4c 4c 73 20 63 61 6e 20 62 65 20 73 61 66  NULLs can be saf
18860 65 6c 79 20 74 72 69 6d 6d 65 64 20 66 72 6f 6d  ely trimmed from
18870 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
18880 72 65 63 6f 72 64 2c 20 61 73 20 6c 6f 6e 67 20  record, as long 
18890 61 73 0a 20 20 2a 2a 20 61 73 20 74 68 65 20 73  as.  ** as the s
188a0 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 69 73 20  chema format is 
188b0 32 20 6f 72 20 6d 6f 72 65 20 61 6e 64 20 6e 6f  2 or more and no
188c0 6e 65 20 6f 66 20 74 68 65 20 6f 6d 69 74 74 65  ne of the omitte
188d0 64 20 63 6f 6c 75 6d 6e 73 0a 20 20 2a 2a 20 68  d columns.  ** h
188e0 61 76 65 20 61 20 6e 6f 6e 2d 4e 55 4c 4c 20 64  ave a non-NULL d
188f0 65 66 61 75 6c 74 20 76 61 6c 75 65 2e 20 20 41  efault value.  A
18900 6c 73 6f 2c 20 74 68 65 20 72 65 63 6f 72 64 20  lso, the record 
18910 6d 75 73 74 20 62 65 20 6c 65 66 74 20 77 69 74  must be left wit
18920 68 0a 20 20 2a 2a 20 61 74 20 6c 65 61 73 74 20  h.  ** at least 
18930 6f 6e 65 20 66 69 65 6c 64 2e 20 20 49 66 20 50  one field.  If P
18940 35 3e 30 20 74 68 65 6e 20 69 74 20 77 69 6c 6c  5>0 then it will
18950 20 62 65 20 6f 6e 65 20 6d 6f 72 65 20 74 68 61   be one more tha
18960 6e 20 74 68 65 0a 20 20 2a 2a 20 69 6e 64 65 78  n the.  ** index
18970 20 6f 66 20 74 68 65 20 72 69 67 68 74 2d 6d 6f   of the right-mo
18980 73 74 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20 61  st column with a
18990 20 6e 6f 6e 2d 4e 55 4c 4c 20 64 65 66 61 75 6c   non-NULL defaul
189a0 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 69 66 28  t value */.  if(
189b0 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20   pOp->p5 ){.    
189c0 77 68 69 6c 65 28 20 28 70 4c 61 73 74 2d 3e 66  while( (pLast->f
189d0 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
189e0 21 3d 30 20 26 26 20 6e 46 69 65 6c 64 3e 70 4f  !=0 && nField>pO
189f0 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20 20 70  p->p5 ){.      p
18a00 4c 61 73 74 2d 2d 3b 0a 20 20 20 20 20 20 6e 46  Last--;.      nF
18a10 69 65 6c 64 2d 2d 3b 0a 20 20 20 20 7d 0a 20 20  ield--;.    }.  
18a20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 4c  }.#endif..  /* L
18a30 6f 6f 70 20 74 68 72 6f 75 67 68 20 74 68 65 20  oop through the 
18a40 65 6c 65 6d 65 6e 74 73 20 74 68 61 74 20 77 69  elements that wi
18a50 6c 6c 20 6d 61 6b 65 20 75 70 20 74 68 65 20 72  ll make up the r
18a60 65 63 6f 72 64 20 74 6f 20 66 69 67 75 72 65 0a  ecord to figure.
18a70 20 20 2a 2a 20 6f 75 74 20 68 6f 77 20 6d 75 63    ** out how muc
18a80 68 20 73 70 61 63 65 20 69 73 20 72 65 71 75 69  h space is requi
18a90 72 65 64 20 66 6f 72 20 74 68 65 20 6e 65 77 20  red for the new 
18aa0 72 65 63 6f 72 64 2e 20 20 41 66 74 65 72 20 74  record.  After t
18ab0 68 69 73 20 6c 6f 6f 70 2c 0a 20 20 2a 2a 20 74  his loop,.  ** t
18ac0 68 65 20 4d 65 6d 2e 75 54 65 6d 70 20 66 69 65  he Mem.uTemp fie
18ad0 6c 64 20 6f 66 20 65 61 63 68 20 74 65 72 6d 20  ld of each term 
18ae0 73 68 6f 75 6c 64 20 68 6f 6c 64 20 74 68 65 20  should hold the 
18af0 73 65 72 69 61 6c 2d 74 79 70 65 20 74 68 61 74  serial-type that
18b00 20 77 69 6c 6c 0a 20 20 2a 2a 20 62 65 20 75 73   will.  ** be us
18b10 65 64 20 66 6f 72 20 74 68 61 74 20 74 65 72 6d  ed for that term
18b20 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74 65   in the generate
18b30 64 20 72 65 63 6f 72 64 3a 0a 20 20 2a 2a 0a 20  d record:.  **. 
18b40 20 2a 2a 20 20 20 4d 65 6d 2e 75 54 65 6d 70 20   **   Mem.uTemp 
18b50 76 61 6c 75 65 20 20 20 20 74 79 70 65 0a 20 20  value    type.  
18b60 2a 2a 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  **   -----------
18b70 2d 2d 2d 2d 20 20 20 20 2d 2d 2d 2d 2d 2d 2d 2d  ----    --------
18b80 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 20 20 20  -------.  **    
18b90 20 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20    0             
18ba0 20 20 4e 55 4c 4c 0a 20 20 2a 2a 20 20 20 20 20    NULL.  **     
18bb0 20 31 20 20 20 20 20 20 20 20 20 20 20 20 20 20   1              
18bc0 20 31 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69   1-byte signed i
18bd0 6e 74 65 67 65 72 0a 20 20 2a 2a 20 20 20 20 20  nteger.  **     
18be0 20 32 20 20 20 20 20 20 20 20 20 20 20 20 20 20   2              
18bf0 20 32 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69   2-byte signed i
18c00 6e 74 65 67 65 72 0a 20 20 2a 2a 20 20 20 20 20  nteger.  **     
18c10 20 33 20 20 20 20 20 20 20 20 20 20 20 20 20 20   3              
18c20 20 33 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69   3-byte signed i
18c30 6e 74 65 67 65 72 0a 20 20 2a 2a 20 20 20 20 20  nteger.  **     
18c40 20 34 20 20 20 20 20 20 20 20 20 20 20 20 20 20   4              
18c50 20 34 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69   4-byte signed i
18c60 6e 74 65 67 65 72 0a 20 20 2a 2a 20 20 20 20 20  nteger.  **     
18c70 20 35 20 20 20 20 20 20 20 20 20 20 20 20 20 20   5              
18c80 20 36 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69   6-byte signed i
18c90 6e 74 65 67 65 72 0a 20 20 2a 2a 20 20 20 20 20  nteger.  **     
18ca0 20 36 20 20 20 20 20 20 20 20 20 20 20 20 20 20   6              
18cb0 20 38 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69   8-byte signed i
18cc0 6e 74 65 67 65 72 0a 20 20 2a 2a 20 20 20 20 20  nteger.  **     
18cd0 20 37 20 20 20 20 20 20 20 20 20 20 20 20 20 20   7              
18ce0 20 49 45 45 45 20 66 6c 6f 61 74 0a 20 20 2a 2a   IEEE float.  **
18cf0 20 20 20 20 20 20 38 20 20 20 20 20 20 20 20 20        8         
18d00 20 20 20 20 20 20 49 6e 74 65 67 65 72 20 63 6f        Integer co
18d10 6e 73 74 61 6e 74 20 30 0a 20 20 2a 2a 20 20 20  nstant 0.  **   
18d20 20 20 20 39 20 20 20 20 20 20 20 20 20 20 20 20     9            
18d30 20 20 20 49 6e 74 65 67 65 72 20 63 6f 6e 73 74     Integer const
18d40 61 6e 74 20 31 0a 20 20 2a 2a 20 20 20 20 20 31  ant 1.  **     1
18d50 30 2c 31 31 20 20 20 20 20 20 20 20 20 20 20 20  0,11            
18d60 72 65 73 65 72 76 65 64 20 66 6f 72 20 65 78 70  reserved for exp
18d70 61 6e 73 69 6f 6e 0a 20 20 2a 2a 20 20 20 20 4e  ansion.  **    N
18d80 3e 3d 31 32 20 61 6e 64 20 65 76 65 6e 20 20 20  >=12 and even   
18d90 20 42 4c 4f 42 0a 20 20 2a 2a 20 20 20 20 4e 3e   BLOB.  **    N>
18da0 3d 31 33 20 61 6e 64 20 6f 64 64 20 20 20 20 20  =13 and odd     
18db0 74 65 78 74 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  text.  **.  ** T
18dc0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 64 64  he following add
18dd0 69 74 69 6f 6e 61 6c 20 76 61 6c 75 65 73 20 61  itional values a
18de0 72 65 20 63 6f 6d 70 75 74 65 64 3a 0a 20 20 2a  re computed:.  *
18df0 2a 20 20 20 20 20 6e 48 64 72 20 20 20 20 20 20  *     nHdr      
18e00 20 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65    Number of byte
18e10 73 20 6e 65 65 64 65 64 20 66 6f 72 20 74 68 65  s needed for the
18e20 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 0a 20   record header. 
18e30 20 2a 2a 20 20 20 20 20 6e 44 61 74 61 20 20 20   **     nData   
18e40 20 20 20 20 4e 75 6d 62 65 72 20 6f 66 20 62 79      Number of by
18e50 74 65 73 20 6f 66 20 64 61 74 61 20 73 70 61 63  tes of data spac
18e60 65 20 6e 65 65 64 65 64 20 66 6f 72 20 74 68 65  e needed for the
18e70 20 72 65 63 6f 72 64 0a 20 20 2a 2a 20 20 20 20   record.  **    
18e80 20 6e 5a 65 72 6f 20 20 20 20 20 20 20 5a 65 72   nZero       Zer
18e90 6f 20 62 79 74 65 73 20 61 74 20 74 68 65 20 65  o bytes at the e
18ea0 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  nd of the record
18eb0 0a 20 20 2a 2f 0a 20 20 70 52 65 63 20 3d 20 70  .  */.  pRec = p
18ec0 4c 61 73 74 3b 0a 20 20 64 6f 7b 0a 20 20 20 20  Last;.  do{.    
18ed0 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
18ee0 69 64 28 70 52 65 63 29 20 29 3b 0a 20 20 20 20  id(pRec) );.    
18ef0 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20  if( pRec->flags 
18f00 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
18f10 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c      if( pRec->fl
18f20 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29  ags & MEM_Zero )
18f30 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c  {.        /* Val
18f40 75 65 73 20 77 69 74 68 20 4d 45 4d 5f 4e 75 6c  ues with MEM_Nul
18f50 6c 20 61 6e 64 20 4d 45 4d 5f 5a 65 72 6f 20 61  l and MEM_Zero a
18f60 72 65 20 63 72 65 61 74 65 64 20 62 79 20 78 43  re created by xC
18f70 6f 6c 75 6d 6e 20 76 69 72 74 75 61 6c 0a 20 20  olumn virtual.  
18f80 20 20 20 20 20 20 2a 2a 20 74 61 62 6c 65 20 6d        ** table m
18f90 65 74 68 6f 64 73 20 74 68 61 74 20 6e 65 76 65  ethods that neve
18fa0 72 20 69 6e 76 6f 6b 65 20 73 71 6c 69 74 65 33  r invoke sqlite3
18fb0 5f 72 65 73 75 6c 74 5f 78 78 78 78 78 28 29 20  _result_xxxxx() 
18fc0 77 68 69 6c 65 0a 20 20 20 20 20 20 20 20 2a 2a  while.        **
18fd0 20 63 6f 6d 70 75 74 69 6e 67 20 61 6e 20 75 6e   computing an un
18fe0 63 68 61 6e 67 69 6e 67 20 63 6f 6c 75 6d 6e 20  changing column 
18ff0 76 61 6c 75 65 20 69 6e 20 61 6e 20 55 50 44 41  value in an UPDA
19000 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a 20 20  TE statement..  
19010 20 20 20 20 20 20 2a 2a 20 47 69 76 65 20 73 75        ** Give su
19020 63 68 20 76 61 6c 75 65 73 20 61 20 73 70 65 63  ch values a spec
19030 69 61 6c 20 69 6e 74 65 72 6e 61 6c 2d 75 73 65  ial internal-use
19040 2d 6f 6e 6c 79 20 73 65 72 69 61 6c 2d 74 79 70  -only serial-typ
19050 65 20 6f 66 20 31 30 0a 20 20 20 20 20 20 20 20  e of 10.        
19060 2a 2a 20 73 6f 20 74 68 61 74 20 74 68 65 79 20  ** so that they 
19070 63 61 6e 20 62 65 20 70 61 73 73 65 64 20 74 68  can be passed th
19080 72 6f 75 67 68 20 74 6f 20 78 55 70 64 61 74 65  rough to xUpdate
19090 20 61 6e 64 20 68 61 76 65 0a 20 20 20 20 20 20   and have.      
190a0 20 20 2a 2a 20 61 20 74 72 75 65 20 73 71 6c 69    ** a true sqli
190b0 74 65 33 5f 76 61 6c 75 65 5f 6e 6f 63 68 61 6e  te3_value_nochan
190c0 67 65 28 29 2e 20 2a 2f 0a 20 20 20 20 20 20 20  ge(). */.       
190d0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
190e0 3d 3d 4f 50 46 4c 41 47 5f 4e 4f 43 48 4e 47 5f  ==OPFLAG_NOCHNG_
190f0 4d 41 47 49 43 20 7c 7c 20 43 4f 52 52 55 50 54  MAGIC || CORRUPT
19100 5f 44 42 20 29 3b 0a 20 20 20 20 20 20 20 20 70  _DB );.        p
19110 52 65 63 2d 3e 75 54 65 6d 70 20 3d 20 31 30 3b  Rec->uTemp = 10;
19120 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
19130 20 20 20 20 20 20 70 52 65 63 2d 3e 75 54 65 6d        pRec->uTem
19140 70 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20  p = 0;.      }. 
19150 20 20 20 20 20 6e 48 64 72 2b 2b 3b 0a 20 20 20       nHdr++;.   
19160 20 7d 65 6c 73 65 20 69 66 28 20 70 52 65 63 2d   }else if( pRec-
19170 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e  >flags & (MEM_In
19180 74 7c 4d 45 4d 5f 49 6e 74 52 65 61 6c 29 20 29  t|MEM_IntReal) )
19190 7b 0a 20 20 20 20 20 20 2f 2a 20 46 69 67 75 72  {.      /* Figur
191a0 65 20 6f 75 74 20 77 68 65 74 68 65 72 20 74 6f  e out whether to
191b0 20 75 73 65 20 31 2c 20 32 2c 20 34 2c 20 36 20   use 1, 2, 4, 6 
191c0 6f 72 20 38 20 62 79 74 65 73 2e 20 2a 2f 0a 20  or 8 bytes. */. 
191d0 20 20 20 20 20 69 36 34 20 69 20 3d 20 70 52 65       i64 i = pRe
191e0 63 2d 3e 75 2e 69 3b 0a 20 20 20 20 20 20 75 36  c->u.i;.      u6
191f0 34 20 75 75 3b 0a 20 20 20 20 20 20 74 65 73 74  4 uu;.      test
19200 63 61 73 65 28 20 70 52 65 63 2d 3e 66 6c 61 67  case( pRec->flag
19210 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  s & MEM_Int );. 
19220 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70       testcase( p
19230 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Rec->flags & MEM
19240 5f 49 6e 74 52 65 61 6c 20 29 3b 0a 20 20 20 20  _IntReal );.    
19250 20 20 69 66 28 20 69 3c 30 20 29 7b 0a 20 20 20    if( i<0 ){.   
19260 20 20 20 20 20 75 75 20 3d 20 7e 69 3b 0a 20 20       uu = ~i;.  
19270 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
19280 20 20 20 75 75 20 3d 20 69 3b 0a 20 20 20 20 20     uu = i;.     
19290 20 7d 0a 20 20 20 20 20 20 6e 48 64 72 2b 2b 3b   }.      nHdr++;
192a0 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
192b0 20 75 75 3d 3d 31 32 37 20 29 3b 20 20 20 20 20   uu==127 );     
192c0 20 20 20 20 20 20 20 20 20 20 74 65 73 74 63 61            testca
192d0 73 65 28 20 75 75 3d 3d 31 32 38 20 29 3b 0a 20  se( uu==128 );. 
192e0 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 75       testcase( u
192f0 75 3d 3d 33 32 37 36 37 20 29 3b 20 20 20 20 20  u==32767 );     
19300 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65          testcase
19310 28 20 75 75 3d 3d 33 32 37 36 38 20 29 3b 0a 20  ( uu==32768 );. 
19320 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 75       testcase( u
19330 75 3d 3d 38 33 38 38 36 30 37 20 29 3b 20 20 20  u==8388607 );   
19340 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65          testcase
19350 28 20 75 75 3d 3d 38 33 38 38 36 30 38 20 29 3b  ( uu==8388608 );
19360 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
19370 20 75 75 3d 3d 32 31 34 37 34 38 33 36 34 37 20   uu==2147483647 
19380 29 3b 20 20 20 20 20 20 20 20 74 65 73 74 63 61  );        testca
19390 73 65 28 20 75 75 3d 3d 32 31 34 37 34 38 33 36  se( uu==21474836
193a0 34 38 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74  48 );.      test
193b0 63 61 73 65 28 20 75 75 3d 3d 31 34 30 37 33 37  case( uu==140737
193c0 34 38 38 33 35 35 33 32 37 4c 4c 20 29 3b 20 74  488355327LL ); t
193d0 65 73 74 63 61 73 65 28 20 75 75 3d 3d 31 34 30  estcase( uu==140
193e0 37 33 37 34 38 38 33 35 35 33 32 38 4c 4c 20 29  737488355328LL )
193f0 3b 0a 20 20 20 20 20 20 69 66 28 20 75 75 3c 3d  ;.      if( uu<=
19400 31 32 37 20 29 7b 0a 20 20 20 20 20 20 20 20 69  127 ){.        i
19410 66 28 20 28 69 26 31 29 3d 3d 69 20 26 26 20 66  f( (i&1)==i && f
19420 69 6c 65 5f 66 6f 72 6d 61 74 3e 3d 34 20 29 7b  ile_format>=4 ){
19430 0a 20 20 20 20 20 20 20 20 20 20 70 52 65 63 2d  .          pRec-
19440 3e 75 54 65 6d 70 20 3d 20 38 2b 28 75 33 32 29  >uTemp = 8+(u32)
19450 75 75 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  uu;.        }els
19460 65 7b 0a 20 20 20 20 20 20 20 20 20 20 6e 44 61  e{.          nDa
19470 74 61 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20  ta++;.          
19480 70 52 65 63 2d 3e 75 54 65 6d 70 20 3d 20 31 3b  pRec->uTemp = 1;
19490 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
194a0 20 7d 65 6c 73 65 20 69 66 28 20 75 75 3c 3d 33   }else if( uu<=3
194b0 32 37 36 37 20 29 7b 0a 20 20 20 20 20 20 20 20  2767 ){.        
194c0 6e 44 61 74 61 20 2b 3d 20 32 3b 0a 20 20 20 20  nData += 2;.    
194d0 20 20 20 20 70 52 65 63 2d 3e 75 54 65 6d 70 20      pRec->uTemp 
194e0 3d 20 32 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  = 2;.      }else
194f0 20 69 66 28 20 75 75 3c 3d 38 33 38 38 36 30 37   if( uu<=8388607
19500 20 29 7b 0a 20 20 20 20 20 20 20 20 6e 44 61 74   ){.        nDat
19510 61 20 2b 3d 20 33 3b 0a 20 20 20 20 20 20 20 20  a += 3;.        
19520 70 52 65 63 2d 3e 75 54 65 6d 70 20 3d 20 33 3b  pRec->uTemp = 3;
19530 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
19540 20 75 75 3c 3d 32 31 34 37 34 38 33 36 34 37 20   uu<=2147483647 
19550 29 7b 0a 20 20 20 20 20 20 20 20 6e 44 61 74 61  ){.        nData
19560 20 2b 3d 20 34 3b 0a 20 20 20 20 20 20 20 20 70   += 4;.        p
19570 52 65 63 2d 3e 75 54 65 6d 70 20 3d 20 34 3b 0a  Rec->uTemp = 4;.
19580 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
19590 75 75 3c 3d 31 34 30 37 33 37 34 38 38 33 35 35  uu<=140737488355
195a0 33 32 37 4c 4c 20 29 7b 0a 20 20 20 20 20 20 20  327LL ){.       
195b0 20 6e 44 61 74 61 20 2b 3d 20 36 3b 0a 20 20 20   nData += 6;.   
195c0 20 20 20 20 20 70 52 65 63 2d 3e 75 54 65 6d 70       pRec->uTemp
195d0 20 3d 20 35 3b 0a 20 20 20 20 20 20 7d 65 6c 73   = 5;.      }els
195e0 65 7b 0a 20 20 20 20 20 20 20 20 6e 44 61 74 61  e{.        nData
195f0 20 2b 3d 20 38 3b 0a 20 20 20 20 20 20 20 20 69   += 8;.        i
19600 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26  f( pRec->flags &
19610 20 4d 45 4d 5f 49 6e 74 52 65 61 6c 20 29 7b 0a   MEM_IntReal ){.
19620 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20            /* If 
19630 74 68 65 20 76 61 6c 75 65 20 69 73 20 49 6e 74  the value is Int
19640 52 65 61 6c 20 61 6e 64 20 69 73 20 67 6f 69 6e  Real and is goin
19650 67 20 74 6f 20 74 61 6b 65 20 75 70 20 38 20 62  g to take up 8 b
19660 79 74 65 73 20 74 6f 20 73 74 6f 72 65 0a 20 20  ytes to store.  
19670 20 20 20 20 20 20 20 20 2a 2a 20 61 73 20 61 6e          ** as an
19680 20 69 6e 74 65 67 65 72 2c 20 74 68 65 6e 20 77   integer, then w
19690 65 20 6d 69 67 68 74 20 61 73 20 77 65 6c 6c 20  e might as well 
196a0 6d 61 6b 65 20 69 74 20 61 6e 20 38 2d 62 79 74  make it an 8-byt
196b0 65 20 66 6c 6f 61 74 69 6e 67 0a 20 20 20 20 20  e floating.     
196c0 20 20 20 20 20 2a 2a 20 70 6f 69 6e 74 20 76 61       ** point va
196d0 6c 75 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  lue */.         
196e0 20 70 52 65 63 2d 3e 75 2e 72 20 3d 20 28 64 6f   pRec->u.r = (do
196f0 75 62 6c 65 29 70 52 65 63 2d 3e 75 2e 69 3b 0a  uble)pRec->u.i;.
19700 20 20 20 20 20 20 20 20 20 20 70 52 65 63 2d 3e            pRec->
19710 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 49 6e  flags &= ~MEM_In
19720 74 52 65 61 6c 3b 0a 20 20 20 20 20 20 20 20 20  tReal;.         
19730 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20   pRec->flags |= 
19740 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 20 20 20 20  MEM_Real;.      
19750 20 20 20 20 70 52 65 63 2d 3e 75 54 65 6d 70 20      pRec->uTemp 
19760 3d 20 37 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  = 7;.        }el
19770 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 70 52  se{.          pR
19780 65 63 2d 3e 75 54 65 6d 70 20 3d 20 36 3b 0a 20  ec->uTemp = 6;. 
19790 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
197a0 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70  .    }else if( p
197b0 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Rec->flags & MEM
197c0 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 20 20 6e  _Real ){.      n
197d0 48 64 72 2b 2b 3b 0a 20 20 20 20 20 20 6e 44 61  Hdr++;.      nDa
197e0 74 61 20 2b 3d 20 38 3b 0a 20 20 20 20 20 20 70  ta += 8;.      p
197f0 52 65 63 2d 3e 75 54 65 6d 70 20 3d 20 37 3b 0a  Rec->uTemp = 7;.
19800 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
19810 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6d 61 6c   assert( db->mal
19820 6c 6f 63 46 61 69 6c 65 64 20 7c 7c 20 70 52 65  locFailed || pRe
19830 63 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 53 74  c->flags&(MEM_St
19840 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 3b 0a 20  r|MEM_Blob) );. 
19850 20 20 20 20 20 61 73 73 65 72 74 28 20 70 52 65       assert( pRe
19860 63 2d 3e 6e 3e 3d 30 20 29 3b 0a 20 20 20 20 20  c->n>=0 );.     
19870 20 6c 65 6e 20 3d 20 28 75 33 32 29 70 52 65 63   len = (u32)pRec
19880 2d 3e 6e 3b 0a 20 20 20 20 20 20 73 65 72 69 61  ->n;.      seria
19890 6c 5f 74 79 70 65 20 3d 20 28 6c 65 6e 2a 32 29  l_type = (len*2)
198a0 20 2b 20 31 32 20 2b 20 28 28 70 52 65 63 2d 3e   + 12 + ((pRec->
198b0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 29  flags & MEM_Str)
198c0 21 3d 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20  !=0);.      if( 
198d0 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pRec->flags & ME
198e0 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20  M_Zero ){.      
198f0 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20 2b 3d    serial_type +=
19900 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 2a 32   pRec->u.nZero*2
19910 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 6e 44  ;.        if( nD
19920 61 74 61 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ata ){.         
19930 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
19940 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70 52  MemExpandBlob(pR
19950 65 63 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ec) ) goto no_me
19960 6d 3b 0a 20 20 20 20 20 20 20 20 20 20 6c 65 6e  m;.          len
19970 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72   += pRec->u.nZer
19980 6f 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  o;.        }else
19990 7b 0a 20 20 20 20 20 20 20 20 20 20 6e 5a 65 72  {.          nZer
199a0 6f 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65  o += pRec->u.nZe
199b0 72 6f 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ro;.        }.  
199c0 20 20 20 20 7d 0a 20 20 20 20 20 20 6e 44 61 74      }.      nDat
199d0 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20 20 20 20 20  a += len;.      
199e0 6e 48 64 72 20 2b 3d 20 73 71 6c 69 74 65 33 56  nHdr += sqlite3V
199f0 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61 6c 5f  arintLen(serial_
19a00 74 79 70 65 29 3b 0a 20 20 20 20 20 20 70 52 65  type);.      pRe
19a10 63 2d 3e 75 54 65 6d 70 20 3d 20 73 65 72 69 61  c->uTemp = seria
19a20 6c 5f 74 79 70 65 3b 0a 20 20 20 20 7d 0a 20 20  l_type;.    }.  
19a30 20 20 69 66 28 20 70 52 65 63 3d 3d 70 44 61 74    if( pRec==pDat
19a40 61 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20  a0 ) break;.    
19a50 70 52 65 63 2d 2d 3b 0a 20 20 7d 77 68 69 6c 65  pRec--;.  }while
19a60 28 31 29 3b 0a 0a 20 20 2f 2a 20 45 56 49 44 45  (1);..  /* EVIDE
19a70 4e 43 45 2d 4f 46 3a 20 52 2d 32 32 35 36 34 2d  NCE-OF: R-22564-
19a80 31 31 36 34 37 20 54 68 65 20 68 65 61 64 65 72  11647 The header
19a90 20 62 65 67 69 6e 73 20 77 69 74 68 20 61 20 73   begins with a s
19aa0 69 6e 67 6c 65 20 76 61 72 69 6e 74 0a 20 20 2a  ingle varint.  *
19ab0 2a 20 77 68 69 63 68 20 64 65 74 65 72 6d 69 6e  * which determin
19ac0 65 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d  es the total num
19ad0 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
19ae0 74 68 65 20 68 65 61 64 65 72 2e 20 54 68 65 20  the header. The 
19af0 76 61 72 69 6e 74 0a 20 20 2a 2a 20 76 61 6c 75  varint.  ** valu
19b00 65 20 69 73 20 74 68 65 20 73 69 7a 65 20 6f 66  e is the size of
19b10 20 74 68 65 20 68 65 61 64 65 72 20 69 6e 20 62   the header in b
19b20 79 74 65 73 20 69 6e 63 6c 75 64 69 6e 67 20 74  ytes including t
19b30 68 65 20 73 69 7a 65 20 76 61 72 69 6e 74 0a 20  he size varint. 
19b40 20 2a 2a 20 69 74 73 65 6c 66 2e 20 2a 2f 0a 20   ** itself. */. 
19b50 20 74 65 73 74 63 61 73 65 28 20 6e 48 64 72 3d   testcase( nHdr=
19b60 3d 31 32 36 20 29 3b 0a 20 20 74 65 73 74 63 61  =126 );.  testca
19b70 73 65 28 20 6e 48 64 72 3d 3d 31 32 37 20 29 3b  se( nHdr==127 );
19b80 0a 20 20 69 66 28 20 6e 48 64 72 3c 3d 31 32 36  .  if( nHdr<=126
19b90 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 63   ){.    /* The c
19ba0 6f 6d 6d 6f 6e 20 63 61 73 65 20 2a 2f 0a 20 20  ommon case */.  
19bb0 20 20 6e 48 64 72 20 2b 3d 20 31 3b 0a 20 20 7d    nHdr += 1;.  }
19bc0 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 52 61 72  else{.    /* Rar
19bd0 65 20 63 61 73 65 20 6f 66 20 61 20 72 65 61 6c  e case of a real
19be0 6c 79 20 6c 61 72 67 65 20 68 65 61 64 65 72 20  ly large header 
19bf0 2a 2f 0a 20 20 20 20 6e 56 61 72 69 6e 74 20 3d  */.    nVarint =
19c00 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65   sqlite3VarintLe
19c10 6e 28 6e 48 64 72 29 3b 0a 20 20 20 20 6e 48 64  n(nHdr);.    nHd
19c20 72 20 2b 3d 20 6e 56 61 72 69 6e 74 3b 0a 20 20  r += nVarint;.  
19c30 20 20 69 66 28 20 6e 56 61 72 69 6e 74 3c 73 71    if( nVarint<sq
19c40 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e  lite3VarintLen(n
19c50 48 64 72 29 20 29 20 6e 48 64 72 2b 2b 3b 0a 20  Hdr) ) nHdr++;. 
19c60 20 7d 0a 20 20 6e 42 79 74 65 20 3d 20 6e 48 64   }.  nByte = nHd
19c70 72 2b 6e 44 61 74 61 3b 0a 0a 20 20 2f 2a 20 4d  r+nData;..  /* M
19c80 61 6b 65 20 73 75 72 65 20 74 68 65 20 6f 75 74  ake sure the out
19c90 70 75 74 20 72 65 67 69 73 74 65 72 20 68 61 73  put register has
19ca0 20 61 20 62 75 66 66 65 72 20 6c 61 72 67 65 20   a buffer large 
19cb0 65 6e 6f 75 67 68 20 74 6f 20 73 74 6f 72 65 20  enough to store 
19cc0 0a 20 20 2a 2a 20 74 68 65 20 6e 65 77 20 72 65  .  ** the new re
19cd0 63 6f 72 64 2e 20 54 68 65 20 6f 75 74 70 75 74  cord. The output
19ce0 20 72 65 67 69 73 74 65 72 20 28 70 4f 70 2d 3e   register (pOp->
19cf0 70 33 29 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77  p3) is not allow
19d00 65 64 20 74 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e  ed to.  ** be on
19d10 65 20 6f 66 20 74 68 65 20 69 6e 70 75 74 20 72  e of the input r
19d20 65 67 69 73 74 65 72 73 20 28 62 65 63 61 75 73  egisters (becaus
19d30 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  e the following 
19d40 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c  call to.  ** sql
19d50 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65 61 72  ite3VdbeMemClear
19d60 41 6e 64 52 65 73 69 7a 65 28 29 20 63 6f 75 6c  AndResize() coul
19d70 64 20 63 6c 6f 62 62 65 72 20 74 68 65 20 76 61  d clobber the va
19d80 6c 75 65 20 62 65 66 6f 72 65 20 69 74 20 69 73  lue before it is
19d90 20 75 73 65 64 29 2e 0a 20 20 2a 2f 0a 20 20 69   used)..  */.  i
19da0 66 28 20 6e 42 79 74 65 2b 6e 5a 65 72 6f 3c 3d  f( nByte+nZero<=
19db0 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 29  pOut->szMalloc )
19dc0 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 6f 75 74  {.    /* The out
19dd0 70 75 74 20 72 65 67 69 73 74 65 72 20 69 73 20  put register is 
19de0 61 6c 72 65 61 64 79 20 6c 61 72 67 65 20 65 6e  already large en
19df0 6f 75 67 68 20 74 6f 20 68 6f 6c 64 20 74 68 65  ough to hold the
19e00 20 72 65 63 6f 72 64 2e 0a 20 20 20 20 2a 2a 20   record..    ** 
19e10 4e 6f 20 65 72 72 6f 72 20 63 68 65 63 6b 73 20  No error checks 
19e20 6f 72 20 62 75 66 66 65 72 20 65 6e 6c 61 72 67  or buffer enlarg
19e30 65 6d 65 6e 74 20 69 73 20 72 65 71 75 69 72 65  ement is require
19e40 64 20 2a 2f 0a 20 20 20 20 70 4f 75 74 2d 3e 7a  d */.    pOut->z
19e50 20 3d 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63   = pOut->zMalloc
19e60 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  ;.  }else{.    /
19e70 2a 20 4e 65 65 64 20 74 6f 20 6d 61 6b 65 20 73  * Need to make s
19e80 75 72 65 20 74 68 61 74 20 74 68 65 20 6f 75 74  ure that the out
19e90 70 75 74 20 69 73 20 6e 6f 74 20 74 6f 6f 20 62  put is not too b
19ea0 69 67 20 61 6e 64 20 74 68 65 6e 20 65 6e 6c 61  ig and then enla
19eb0 72 67 65 0a 20 20 20 20 2a 2a 20 74 68 65 20 6f  rge.    ** the o
19ec0 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20 74  utput register t
19ed0 6f 20 68 6f 6c 64 20 74 68 65 20 66 75 6c 6c 20  o hold the full 
19ee0 72 65 73 75 6c 74 20 2a 2f 0a 20 20 20 20 69 66  result */.    if
19ef0 28 20 6e 42 79 74 65 2b 6e 5a 65 72 6f 3e 64 62  ( nByte+nZero>db
19f00 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
19f10 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
19f20 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  .      goto too_
19f30 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  big;.    }.    i
19f40 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
19f50 6d 43 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28  mClearAndResize(
19f60 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65  pOut, (int)nByte
19f70 29 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  ) ){.      goto 
19f80 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20  no_mem;.    }.  
19f90 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69  }.  pOut->n = (i
19fa0 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74  nt)nByte;.  pOut
19fb0 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c  ->flags = MEM_Bl
19fc0 6f 62 3b 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20  ob;.  if( nZero 
19fd0 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 6e  ){.    pOut->u.n
19fe0 5a 65 72 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20  Zero = nZero;.  
19ff0 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d    pOut->flags |=
1a000 20 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20   MEM_Zero;.  }. 
1a010 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
1a020 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 7a 48  SIZE(pOut);.  zH
1a030 64 72 20 3d 20 28 75 38 20 2a 29 70 4f 75 74 2d  dr = (u8 *)pOut-
1a040 3e 7a 3b 0a 20 20 7a 50 61 79 6c 6f 61 64 20 3d  >z;.  zPayload =
1a050 20 7a 48 64 72 20 2b 20 6e 48 64 72 3b 0a 0a 20   zHdr + nHdr;.. 
1a060 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20 72 65   /* Write the re
1a070 63 6f 72 64 20 2a 2f 0a 20 20 7a 48 64 72 20 2b  cord */.  zHdr +
1a080 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28 7a 48  = putVarint32(zH
1a090 64 72 2c 20 6e 48 64 72 29 3b 0a 20 20 61 73 73  dr, nHdr);.  ass
1a0a0 65 72 74 28 20 70 44 61 74 61 30 3c 3d 70 4c 61  ert( pData0<=pLa
1a0b0 73 74 20 29 3b 0a 20 20 70 52 65 63 20 3d 20 70  st );.  pRec = p
1a0c0 44 61 74 61 30 3b 0a 20 20 64 6f 7b 0a 20 20 20  Data0;.  do{.   
1a0d0 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 70   serial_type = p
1a0e0 52 65 63 2d 3e 75 54 65 6d 70 3b 0a 20 20 20 20  Rec->uTemp;.    
1a0f0 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  /* EVIDENCE-OF: 
1a100 52 2d 30 36 35 32 39 2d 34 37 33 36 32 20 46 6f  R-06529-47362 Fo
1a110 6c 6c 6f 77 69 6e 67 20 74 68 65 20 73 69 7a 65  llowing the size
1a120 20 76 61 72 69 6e 74 20 61 72 65 20 6f 6e 65 20   varint are one 
1a130 6f 72 20 6d 6f 72 65 0a 20 20 20 20 2a 2a 20 61  or more.    ** a
1a140 64 64 69 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74  dditional varint
1a150 73 2c 20 6f 6e 65 20 70 65 72 20 63 6f 6c 75 6d  s, one per colum
1a160 6e 2e 20 2a 2f 0a 20 20 20 20 7a 48 64 72 20 2b  n. */.    zHdr +
1a170 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28 7a 48  = putVarint32(zH
1a180 64 72 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29  dr, serial_type)
1a190 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1a1a0 73 65 72 69 61 6c 20 74 79 70 65 20 2a 2f 0a 20  serial type */. 
1a1b0 20 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f     /* EVIDENCE-O
1a1c0 46 3a 20 52 2d 36 34 35 33 36 2d 35 31 37 32 38  F: R-64536-51728
1a1d0 20 54 68 65 20 76 61 6c 75 65 73 20 66 6f 72 20   The values for 
1a1e0 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  each column in t
1a1f0 68 65 20 72 65 63 6f 72 64 0a 20 20 20 20 2a 2a  he record.    **
1a200 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c   immediately fol
1a210 6c 6f 77 20 74 68 65 20 68 65 61 64 65 72 2e 20  low the header. 
1a220 2a 2f 0a 20 20 20 20 7a 50 61 79 6c 6f 61 64 20  */.    zPayload 
1a230 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  += sqlite3VdbeSe
1a240 72 69 61 6c 50 75 74 28 7a 50 61 79 6c 6f 61 64  rialPut(zPayload
1a250 2c 20 70 52 65 63 2c 20 73 65 72 69 61 6c 5f 74  , pRec, serial_t
1a260 79 70 65 29 3b 20 2f 2a 20 63 6f 6e 74 65 6e 74  ype); /* content
1a270 20 2a 2f 0a 20 20 7d 77 68 69 6c 65 28 20 28 2b   */.  }while( (+
1a280 2b 70 52 65 63 29 3c 3d 70 4c 61 73 74 20 29 3b  +pRec)<=pLast );
1a290 0a 20 20 61 73 73 65 72 74 28 20 6e 48 64 72 3d  .  assert( nHdr=
1a2a0 3d 28 69 6e 74 29 28 7a 48 64 72 20 2d 20 28 75  =(int)(zHdr - (u
1a2b0 38 2a 29 70 4f 75 74 2d 3e 7a 29 20 29 3b 0a 20  8*)pOut->z) );. 
1a2c0 20 61 73 73 65 72 74 28 20 6e 42 79 74 65 3d 3d   assert( nByte==
1a2d0 28 69 6e 74 29 28 7a 50 61 79 6c 6f 61 64 20 2d  (int)(zPayload -
1a2e0 20 28 75 38 2a 29 70 4f 75 74 2d 3e 7a 29 20 29   (u8*)pOut->z) )
1a2f0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
1a300 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
1a310 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  3<=(p->nMem+1 - 
1a320 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
1a330 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
1a340 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a  pOp->p3, pOut);.
1a350 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1a360 70 63 6f 64 65 3a 20 43 6f 75 6e 74 20 50 31 20  pcode: Count P1 
1a370 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
1a380 70 73 69 73 3a 20 72 5b 50 32 5d 3d 63 6f 75 6e  psis: r[P2]=coun
1a390 74 28 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20  t().**.** Store 
1a3a0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e  the number of en
1a3b0 74 72 69 65 73 20 28 61 6e 20 69 6e 74 65 67 65  tries (an intege
1a3c0 72 20 76 61 6c 75 65 29 20 69 6e 20 74 68 65 20  r value) in the 
1a3d0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 0a  table or index .
1a3e0 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72  ** opened by cur
1a3f0 73 6f 72 20 50 31 20 69 6e 20 72 65 67 69 73 74  sor P1 in regist
1a400 65 72 20 50 32 0a 2a 2f 0a 23 69 66 6e 64 65 66  er P2.*/.#ifndef
1a410 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52   SQLITE_OMIT_BTR
1a420 45 45 43 4f 55 4e 54 0a 63 61 73 65 20 4f 50 5f  EECOUNT.case OP_
1a430 43 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20  Count: {        
1a440 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 36   /* out2 */.  i6
1a450 34 20 6e 45 6e 74 72 79 3b 0a 20 20 42 74 43 75  4 nEntry;.  BtCu
1a460 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 0a 20 20  rsor *pCrsr;..  
1a470 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72  assert( p->apCsr
1a480 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 65 43 75 72 54  [pOp->p1]->eCurT
1a490 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
1a4a0 45 45 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  EE );.  pCrsr = 
1a4b0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1a4c0 5d 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20  ]->uc.pCursor;. 
1a4d0 20 61 73 73 65 72 74 28 20 70 43 72 73 72 20 29   assert( pCrsr )
1a4e0 3b 0a 20 20 6e 45 6e 74 72 79 20 3d 20 30 3b 20  ;.  nEntry = 0; 
1a4f0 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20   /* Not needed. 
1a500 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69   Only used to si
1a510 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e  lence a warning.
1a520 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   */.  rc = sqlit
1a530 65 33 42 74 72 65 65 43 6f 75 6e 74 28 70 43 72  e3BtreeCount(pCr
1a540 73 72 2c 20 26 6e 45 6e 74 72 79 29 3b 0a 20 20  sr, &nEntry);.  
1a550 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
1a560 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1a570 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ;.  pOut = out2P
1a580 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
1a590 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
1a5a0 20 6e 45 6e 74 72 79 3b 0a 20 20 62 72 65 61 6b   nEntry;.  break
1a5b0 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f  ;.}.#endif../* O
1a5c0 70 63 6f 64 65 3a 20 53 61 76 65 70 6f 69 6e 74  pcode: Savepoint
1a5d0 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
1a5e0 2a 2a 20 4f 70 65 6e 2c 20 72 65 6c 65 61 73 65  ** Open, release
1a5f0 20 6f 72 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65   or rollback the
1a600 20 73 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 64   savepoint named
1a610 20 62 79 20 70 61 72 61 6d 65 74 65 72 20 50 34   by parameter P4
1a620 2c 20 64 65 70 65 6e 64 69 6e 67 0a 2a 2a 20 6f  , depending.** o
1a630 6e 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50  n the value of P
1a640 31 2e 20 54 6f 20 6f 70 65 6e 20 61 20 6e 65 77  1. To open a new
1a650 20 73 61 76 65 70 6f 69 6e 74 20 73 65 74 20 50   savepoint set P
1a660 31 3d 3d 30 20 28 53 41 56 45 50 4f 49 4e 54 5f  1==0 (SAVEPOINT_
1a670 42 45 47 49 4e 29 2e 0a 2a 2a 20 54 6f 20 72 65  BEGIN)..** To re
1a680 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61  lease (commit) a
1a690 6e 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70  n existing savep
1a6a0 6f 69 6e 74 20 73 65 74 20 50 31 3d 3d 31 20 28  oint set P1==1 (
1a6b0 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
1a6c0 45 29 2e 0a 2a 2a 20 54 6f 20 72 6f 6c 6c 62 61  E)..** To rollba
1a6d0 63 6b 20 61 6e 20 65 78 69 73 74 69 6e 67 20 73  ck an existing s
1a6e0 61 76 65 70 6f 69 6e 74 20 73 65 74 20 50 31 3d  avepoint set P1=
1a6f0 3d 32 20 28 53 41 56 45 50 4f 49 4e 54 5f 52 4f  =2 (SAVEPOINT_RO
1a700 4c 4c 42 41 43 4b 29 2e 0a 2a 2f 0a 63 61 73 65  LLBACK)..*/.case
1a710 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b   OP_Savepoint: {
1a720 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20  .  int p1;      
1a730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a740 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20 50     /* Value of P
1a750 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 63  1 operand */.  c
1a760 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
1a770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1a780 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76 65 70 6f  * Name of savepo
1a790 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61  int */.  int nNa
1a7a0 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20  me;.  Savepoint 
1a7b0 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65 70 6f 69  *pNew;.  Savepoi
1a7c0 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 0a  nt *pSavepoint;.
1a7d0 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d    Savepoint *pTm
1a7e0 70 3b 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f  p;.  int iSavepo
1a7f0 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 0a  int;.  int ii;..
1a800 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a    p1 = pOp->p1;.
1a810 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e 70    zName = pOp->p
1a820 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72  4.z;..  /* Asser
1a830 74 20 74 68 61 74 20 74 68 65 20 70 31 20 70 61  t that the p1 pa
1a840 72 61 6d 65 74 65 72 20 69 73 20 76 61 6c 69 64  rameter is valid
1a850 2e 20 41 6c 73 6f 20 74 68 61 74 20 69 66 20 74  . Also that if t
1a860 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 0a  here is no open.
1a870 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e    ** transaction
1a880 2c 20 74 68 65 6e 20 74 68 65 72 65 20 63 61 6e  , then there can
1a890 6e 6f 74 20 62 65 20 61 6e 79 20 73 61 76 65 70  not be any savep
1a8a0 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20 20 61  oints. .  */.  a
1a8b0 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65  ssert( db->pSave
1a8c0 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e  point==0 || db->
1a8d0 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b  autoCommit==0 );
1a8e0 0a 20 20 61 73 73 65 72 74 28 20 70 31 3d 3d 53  .  assert( p1==S
1a8f0 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c  AVEPOINT_BEGIN||
1a900 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45  p1==SAVEPOINT_RE
1a910 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56 45 50  LEASE||p1==SAVEP
1a920 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b  OINT_ROLLBACK );
1a930 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70  .  assert( db->p
1a940 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64 62 2d  Savepoint || db-
1a950 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
1a960 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20  vepoint==0 );.  
1a970 61 73 73 65 72 74 28 20 63 68 65 63 6b 53 61 76  assert( checkSav
1a980 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20  epointCount(db) 
1a990 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
1a9a0 62 49 73 52 65 61 64 65 72 20 29 3b 0a 0a 20 20  bIsReader );..  
1a9b0 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e  if( p1==SAVEPOIN
1a9c0 54 5f 42 45 47 49 4e 20 29 7b 0a 20 20 20 20 69  T_BEGIN ){.    i
1a9d0 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74  f( db->nVdbeWrit
1a9e0 65 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  e>0 ){.      /* 
1a9f0 41 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20  A new savepoint 
1aa00 63 61 6e 6e 6f 74 20 62 65 20 63 72 65 61 74 65  cannot be create
1aa10 64 20 69 66 20 74 68 65 72 65 20 61 72 65 20 61  d if there are a
1aa20 63 74 69 76 65 20 77 72 69 74 65 20 0a 20 20 20  ctive write .   
1aa30 20 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73     ** statements
1aa40 20 28 69 2e 65 2e 20 6f 70 65 6e 20 72 65 61 64   (i.e. open read
1aa50 2f 77 72 69 74 65 20 69 6e 63 72 65 6d 65 6e 74  /write increment
1aa60 61 6c 20 62 6c 6f 62 20 68 61 6e 64 6c 65 73 29  al blob handles)
1aa70 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
1aa80 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
1aa90 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 6f 70 65  r(p, "cannot ope
1aaa0 6e 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 53 51  n savepoint - SQ
1aab0 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
1aac0 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20  progress");.    
1aad0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55    rc = SQLITE_BU
1aae0 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  SY;.    }else{. 
1aaf0 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71 6c       nName = sql
1ab00 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61  ite3Strlen30(zNa
1ab10 6d 65 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  me);..#ifndef SQ
1ab20 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
1ab30 4c 54 41 42 4c 45 0a 20 20 20 20 20 20 2f 2a 20  LTABLE.      /* 
1ab40 54 68 69 73 20 63 61 6c 6c 20 69 73 20 4f 6b 20  This call is Ok 
1ab50 65 76 65 6e 20 69 66 20 74 68 69 73 20 73 61 76  even if this sav
1ab60 65 70 6f 69 6e 74 20 69 73 20 61 63 74 75 61 6c  epoint is actual
1ab70 6c 79 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  ly a transaction
1ab80 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f  .      ** savepo
1ab90 69 6e 74 20 28 61 6e 64 20 74 68 65 72 65 66 6f  int (and therefo
1aba0 72 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20 70 72  re should not pr
1abb0 6f 6d 70 74 20 78 53 61 76 65 70 6f 69 6e 74 28  ompt xSavepoint(
1abc0 29 29 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 20 20  )) callbacks..  
1abd0 20 20 20 20 2a 2a 20 49 66 20 74 68 69 73 20 69      ** If this i
1abe0 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  s a transaction 
1abf0 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20  savepoint being 
1ac00 6f 70 65 6e 65 64 2c 20 69 74 20 69 73 20 67 75  opened, it is gu
1ac10 61 72 61 6e 74 65 65 64 0a 20 20 20 20 20 20 2a  aranteed.      *
1ac20 2a 20 74 68 61 74 20 74 68 65 20 64 62 2d 3e 61  * that the db->a
1ac30 56 54 72 61 6e 73 5b 5d 20 61 72 72 61 79 20 69  VTrans[] array i
1ac40 73 20 65 6d 70 74 79 2e 20 20 2a 2f 0a 20 20 20  s empty.  */.   
1ac50 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61     assert( db->a
1ac60 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20  utoCommit==0 || 
1ac70 64 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30 20 29  db->nVTrans==0 )
1ac80 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
1ac90 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
1aca0 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f  t(db, SAVEPOINT_
1acb0 42 45 47 49 4e 2c 0a 20 20 20 20 20 20 20 20 20  BEGIN,.         
1acc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1acd0 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74         db->nStat
1ace0 65 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61 76 65 70  ement+db->nSavep
1acf0 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 69 66 28  oint);.      if(
1ad00 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1ad10 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1ad20 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66  to_error;.#endif
1ad30 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72 65 61 74  ..      /* Creat
1ad40 65 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  e a new savepoin
1ad50 74 20 73 74 72 75 63 74 75 72 65 2e 20 2a 2f 0a  t structure. */.
1ad60 20 20 20 20 20 20 70 4e 65 77 20 3d 20 73 71 6c        pNew = sql
1ad70 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e  ite3DbMallocRawN
1ad80 4e 28 64 62 2c 20 73 69 7a 65 6f 66 28 53 61 76  N(db, sizeof(Sav
1ad90 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31 29  epoint)+nName+1)
1ada0 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4e 65 77  ;.      if( pNew
1adb0 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4e 65 77   ){.        pNew
1adc0 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63 68 61 72 20  ->zName = (char 
1add0 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a 20 20 20 20  *)&pNew[1];.    
1ade0 20 20 20 20 6d 65 6d 63 70 79 28 70 4e 65 77 2d      memcpy(pNew-
1adf0 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20 6e  >zName, zName, n
1ae00 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 0a 20 20  Name+1);.    .  
1ae10 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72        /* If ther
1ae20 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20 74 72 61  e is no open tra
1ae30 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 6d  nsaction, then m
1ae40 61 72 6b 20 74 68 69 73 20 61 73 20 61 20 73 70  ark this as a sp
1ae50 65 63 69 61 6c 0a 20 20 20 20 20 20 20 20 2a 2a  ecial.        **
1ae60 20 22 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61   "transaction sa
1ae70 76 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20 20  vepoint". */.   
1ae80 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 75 74       if( db->aut
1ae90 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20  oCommit ){.     
1aea0 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d       db->autoCom
1aeb0 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  mit = 0;.       
1aec0 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63     db->isTransac
1aed0 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20  tionSavepoint = 
1aee0 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  1;.        }else
1aef0 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  {.          db->
1af00 6e 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20  nSavepoint++;.  
1af10 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20        }..       
1af20 20 2f 2a 20 4c 69 6e 6b 20 74 68 65 20 6e 65 77   /* Link the new
1af30 20 73 61 76 65 70 6f 69 6e 74 20 69 6e 74 6f 20   savepoint into 
1af40 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
1af50 64 6c 65 27 73 20 6c 69 73 74 2e 20 2a 2f 0a 20  dle's list. */. 
1af60 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 70 4e 65         pNew->pNe
1af70 78 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f  xt = db->pSavepo
1af80 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  int;.        db-
1af90 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 4e  >pSavepoint = pN
1afa0 65 77 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77  ew;.        pNew
1afb0 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20  ->nDeferredCons 
1afc0 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43  = db->nDeferredC
1afd0 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20 70 4e 65  ons;.        pNe
1afe0 77 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  w->nDeferredImmC
1aff0 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72  ons = db->nDefer
1b000 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20  redImmCons;.    
1b010 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73    }.    }.  }els
1b020 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
1b030 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  1==SAVEPOINT_REL
1b040 45 41 53 45 20 7c 7c 20 70 31 3d 3d 53 41 56 45  EASE || p1==SAVE
1b050 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29  POINT_ROLLBACK )
1b060 3b 0a 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74  ;.    iSavepoint
1b070 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 46 69   = 0;..    /* Fi
1b080 6e 64 20 74 68 65 20 6e 61 6d 65 64 20 73 61 76  nd the named sav
1b090 65 70 6f 69 6e 74 2e 20 49 66 20 74 68 65 72 65  epoint. If there
1b0a0 20 69 73 20 6e 6f 20 73 75 63 68 20 73 61 76 65   is no such save
1b0b0 70 6f 69 6e 74 2c 20 74 68 65 6e 20 61 6e 0a 20  point, then an. 
1b0c0 20 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 69     ** an error i
1b0d0 73 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68  s returned to th
1b0e0 65 20 75 73 65 72 2e 20 20 2a 2f 0a 20 20 20 20  e user.  */.    
1b0f0 66 6f 72 28 0a 20 20 20 20 20 20 70 53 61 76 65  for(.      pSave
1b100 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 70 53 61 76  point = db->pSav
1b110 65 70 6f 69 6e 74 3b 20 0a 20 20 20 20 20 20 70  epoint; .      p
1b120 53 61 76 65 70 6f 69 6e 74 20 26 26 20 73 71 6c  Savepoint && sql
1b130 69 74 65 33 53 74 72 49 43 6d 70 28 70 53 61 76  ite3StrICmp(pSav
1b140 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a  epoint->zName, z
1b150 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 70 53 61  Name);.      pSa
1b160 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70  vepoint = pSavep
1b170 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a 20 20 20 20  oint->pNext.    
1b180 29 7b 0a 20 20 20 20 20 20 69 53 61 76 65 70 6f  ){.      iSavepo
1b190 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20  int++;.    }.   
1b1a0 20 69 66 28 20 21 70 53 61 76 65 70 6f 69 6e 74   if( !pSavepoint
1b1b0 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
1b1c0 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 6e  3VdbeError(p, "n
1b1d0 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74  o such savepoint
1b1e0 3a 20 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20  : %s", zName);. 
1b1f0 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
1b200 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 65 6c 73  _ERROR;.    }els
1b210 65 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57  e if( db->nVdbeW
1b220 72 69 74 65 3e 30 20 26 26 20 70 31 3d 3d 53 41  rite>0 && p1==SA
1b230 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20  VEPOINT_RELEASE 
1b240 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 74 20 69  ){.      /* It i
1b250 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74  s not possible t
1b260 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69  o release (commi
1b270 74 29 20 61 20 73 61 76 65 70 6f 69 6e 74 20 69  t) a savepoint i
1b280 66 20 74 68 65 72 65 20 61 72 65 20 0a 20 20 20  f there are .   
1b290 20 20 20 2a 2a 20 61 63 74 69 76 65 20 77 72 69     ** active wri
1b2a0 74 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20  te statements.. 
1b2b0 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71       */.      sq
1b2c0 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70  lite3VdbeError(p
1b2d0 2c 20 22 63 61 6e 6e 6f 74 20 72 65 6c 65 61 73  , "cannot releas
1b2e0 65 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 22 0a  e savepoint - ".
1b2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b300 20 20 20 20 20 20 20 20 20 20 22 53 51 4c 20 73            "SQL s
1b310 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f  tatements in pro
1b320 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20 72  gress");.      r
1b330 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
1b340 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 0a 20 20 20  .    }else{..   
1b350 20 20 20 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20     /* Determine 
1b360 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
1b370 68 69 73 20 69 73 20 61 20 74 72 61 6e 73 61 63  his is a transac
1b380 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 2e 20  tion savepoint. 
1b390 49 66 20 73 6f 2c 0a 20 20 20 20 20 20 2a 2a 20  If so,.      ** 
1b3a0 61 6e 64 20 74 68 69 73 20 69 73 20 61 20 52 45  and this is a RE
1b3b0 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2c 20 74  LEASE command, t
1b3c0 68 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20  hen the current 
1b3d0 74 72 61 6e 73 61 63 74 69 6f 6e 20 0a 20 20 20  transaction .   
1b3e0 20 20 20 2a 2a 20 69 73 20 63 6f 6d 6d 69 74 74     ** is committ
1b3f0 65 64 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20  ed. .      */.  
1b400 20 20 20 20 69 6e 74 20 69 73 54 72 61 6e 73 61      int isTransa
1b410 63 74 69 6f 6e 20 3d 20 70 53 61 76 65 70 6f 69  ction = pSavepoi
1b420 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30 20 26 26 20  nt->pNext==0 && 
1b430 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f  db->isTransactio
1b440 6e 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20  nSavepoint;.    
1b450 20 20 69 66 28 20 69 73 54 72 61 6e 73 61 63 74    if( isTransact
1b460 69 6f 6e 20 26 26 20 70 31 3d 3d 53 41 56 45 50  ion && p1==SAVEP
1b470 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a  OINT_RELEASE ){.
1b480 20 20 20 20 20 20 20 20 69 66 28 20 28 72 63 20          if( (rc 
1b490 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  = sqlite3VdbeChe
1b4a0 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c  ckFk(p, 1))!=SQL
1b4b0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
1b4c0 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65      goto vdbe_re
1b4d0 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a  turn;.        }.
1b4e0 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f          db->auto
1b4f0 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20  Commit = 1;.    
1b500 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56      if( sqlite3V
1b510 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49  dbeHalt(p)==SQLI
1b520 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20  TE_BUSY ){.     
1b530 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e       p->pc = (in
1b540 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20  t)(pOp - aOp);. 
1b550 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74           db->aut
1b560 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20  oCommit = 0;.   
1b570 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72         p->rc = r
1b580 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
1b590 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
1b5a0 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20  vdbe_return;.   
1b5b0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64       }.        d
1b5c0 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
1b5d0 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 20  Savepoint = 0;. 
1b5e0 20 20 20 20 20 20 20 72 63 20 3d 20 70 2d 3e 72         rc = p->r
1b5f0 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  c;.      }else{.
1b600 20 20 20 20 20 20 20 20 69 6e 74 20 69 73 53 63          int isSc
1b610 68 65 6d 61 43 68 61 6e 67 65 3b 0a 20 20 20 20  hemaChange;.    
1b620 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d      iSavepoint =
1b630 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20   db->nSavepoint 
1b640 2d 20 69 53 61 76 65 70 6f 69 6e 74 20 2d 20 31  - iSavepoint - 1
1b650 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 31  ;.        if( p1
1b660 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c  ==SAVEPOINT_ROLL
1b670 42 41 43 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  BACK ){.        
1b680 20 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65    isSchemaChange
1b690 20 3d 20 28 64 62 2d 3e 6d 44 62 46 6c 61 67 73   = (db->mDbFlags
1b6a0 20 26 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61   & DBFLAG_Schema
1b6b0 43 68 61 6e 67 65 29 21 3d 30 3b 0a 20 20 20 20  Change)!=0;.    
1b6c0 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20        for(ii=0; 
1b6d0 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b  ii<db->nDb; ii++
1b6e0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ){.            r
1b6f0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1b700 54 72 69 70 41 6c 6c 43 75 72 73 6f 72 73 28 64  TripAllCursors(d
1b710 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 0a  b->aDb[ii].pBt,.
1b720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
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 53 51 4c 49 54 45 5f 41 42         SQLITE_AB
1b750 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 2c 0a 20 20  ORT_ROLLBACK,.  
1b760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b780 20 20 20 20 20 69 73 53 63 68 65 6d 61 43 68 61       isSchemaCha
1b790 6e 67 65 3d 3d 30 29 3b 0a 20 20 20 20 20 20 20  nge==0);.       
1b7a0 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
1b7b0 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
1b7c0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1b7d0 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
1b7e0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
1b7f0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
1b800 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  1==SAVEPOINT_REL
1b810 45 41 53 45 20 29 3b 0a 20 20 20 20 20 20 20 20  EASE );.        
1b820 20 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65    isSchemaChange
1b830 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a   = 0;.        }.
1b840 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30          for(ii=0
1b850 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69  ; ii<db->nDb; ii
1b860 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72  ++){.          r
1b870 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1b880 53 61 76 65 70 6f 69 6e 74 28 64 62 2d 3e 61 44  Savepoint(db->aD
1b890 62 5b 69 69 5d 2e 70 42 74 2c 20 70 31 2c 20 69  b[ii].pBt, p1, i
1b8a0 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20  Savepoint);.    
1b8b0 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
1b8c0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
1b8d0 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
1b8e0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1b8f0 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
1b900 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
1b910 28 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65  ( isSchemaChange
1b920 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71   ){.          sq
1b930 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
1b940 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62  redStatements(db
1b950 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 0);.          
1b960 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53  sqlite3ResetAllS
1b970 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69  chemasOfConnecti
1b980 6f 6e 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20  on(db);.        
1b990 20 20 64 62 2d 3e 6d 44 62 46 6c 61 67 73 20 7c    db->mDbFlags |
1b9a0 3d 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61 43  = DBFLAG_SchemaC
1b9b0 68 61 6e 67 65 3b 0a 20 20 20 20 20 20 20 20 7d  hange;.        }
1b9c0 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20  .      }.  .    
1b9d0 20 20 2f 2a 20 52 65 67 61 72 64 6c 65 73 73 20    /* Regardless 
1b9e0 6f 66 20 77 68 65 74 68 65 72 20 74 68 69 73 20  of whether this 
1b9f0 69 73 20 61 20 52 45 4c 45 41 53 45 20 6f 72 20  is a RELEASE or 
1ba00 52 4f 4c 4c 42 41 43 4b 2c 20 64 65 73 74 72 6f  ROLLBACK, destro
1ba10 79 20 61 6c 6c 20 0a 20 20 20 20 20 20 2a 2a 20  y all .      ** 
1ba20 73 61 76 65 70 6f 69 6e 74 73 20 6e 65 73 74 65  savepoints neste
1ba30 64 20 69 6e 73 69 64 65 20 6f 66 20 74 68 65 20  d inside of the 
1ba40 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20  savepoint being 
1ba50 6f 70 65 72 61 74 65 64 20 6f 6e 2e 20 2a 2f 0a  operated on. */.
1ba60 20 20 20 20 20 20 77 68 69 6c 65 28 20 64 62 2d        while( db-
1ba70 3e 70 53 61 76 65 70 6f 69 6e 74 21 3d 70 53 61  >pSavepoint!=pSa
1ba80 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20  vepoint ){.     
1ba90 20 20 20 70 54 6d 70 20 3d 20 64 62 2d 3e 70 53     pTmp = db->pS
1baa0 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20  avepoint;.      
1bab0 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74    db->pSavepoint
1bac0 20 3d 20 70 54 6d 70 2d 3e 70 4e 65 78 74 3b 0a   = pTmp->pNext;.
1bad0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44          sqlite3D
1bae0 62 46 72 65 65 28 64 62 2c 20 70 54 6d 70 29 3b  bFree(db, pTmp);
1baf0 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61  .        db->nSa
1bb00 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20  vepoint--;.     
1bb10 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20   }..      /* If 
1bb20 69 74 20 69 73 20 61 20 52 45 4c 45 41 53 45 2c  it is a RELEASE,
1bb30 20 74 68 65 6e 20 64 65 73 74 72 6f 79 20 74 68   then destroy th
1bb40 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e  e savepoint bein
1bb50 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 0a 20  g operated on . 
1bb60 20 20 20 20 20 2a 2a 20 74 6f 6f 2e 20 49 66 20       ** too. If 
1bb70 69 74 20 69 73 20 61 20 52 4f 4c 4c 42 41 43 4b  it is a ROLLBACK
1bb80 20 54 4f 2c 20 74 68 65 6e 20 73 65 74 20 74 68   TO, then set th
1bb90 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 65 66 65  e number of defe
1bba0 72 72 65 64 20 0a 20 20 20 20 20 20 2a 2a 20 63  rred .      ** c
1bbb0 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
1bbc0 69 6f 6e 73 20 70 72 65 73 65 6e 74 20 69 6e 20  ions present in 
1bbd0 74 68 65 20 64 61 74 61 62 61 73 65 20 74 6f 20  the database to 
1bbe0 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64  the value stored
1bbf0 0a 20 20 20 20 20 20 2a 2a 20 77 68 65 6e 20 74  .      ** when t
1bc00 68 65 20 73 61 76 65 70 6f 69 6e 74 20 77 61 73  he savepoint was
1bc10 20 63 72 65 61 74 65 64 2e 20 20 2a 2f 0a 20 20   created.  */.  
1bc20 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45      if( p1==SAVE
1bc30 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b  POINT_RELEASE ){
1bc40 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1bc50 20 70 53 61 76 65 70 6f 69 6e 74 3d 3d 64 62 2d   pSavepoint==db-
1bc60 3e 70 53 61 76 65 70 6f 69 6e 74 20 29 3b 0a 20  >pSavepoint );. 
1bc70 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65         db->pSave
1bc80 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69  point = pSavepoi
1bc90 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20  nt->pNext;.     
1bca0 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
1bcb0 28 64 62 2c 20 70 53 61 76 65 70 6f 69 6e 74 29  (db, pSavepoint)
1bcc0 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 21 69  ;.        if( !i
1bcd0 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b 0a  sTransaction ){.
1bce0 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53            db->nS
1bcf0 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20  avepoint--;.    
1bd00 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73      }.      }els
1bd10 65 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  e{.        asser
1bd20 74 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  t( p1==SAVEPOINT
1bd30 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a 20 20 20  _ROLLBACK );.   
1bd40 20 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72       db->nDeferr
1bd50 65 64 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f  edCons = pSavepo
1bd60 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f  int->nDeferredCo
1bd70 6e 73 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  ns;.        db->
1bd80 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
1bd90 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e   = pSavepoint->n
1bda0 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
1bdb0 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
1bdc0 69 66 28 20 21 69 73 54 72 61 6e 73 61 63 74 69  if( !isTransacti
1bdd0 6f 6e 20 7c 7c 20 70 31 3d 3d 53 41 56 45 50 4f  on || p1==SAVEPO
1bde0 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a  INT_ROLLBACK ){.
1bdf0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
1be00 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
1be10 74 28 64 62 2c 20 70 31 2c 20 69 53 61 76 65 70  t(db, p1, iSavep
1be20 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69  oint);.        i
1be30 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1be40 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1be50 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1be60 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20    }.    }.  }.  
1be70 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
1be80 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1be90 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  ;..  break;.}../
1bea0 2a 20 4f 70 63 6f 64 65 3a 20 41 75 74 6f 43 6f  * Opcode: AutoCo
1beb0 6d 6d 69 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  mmit P1 P2 * * *
1bec0 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 64  .**.** Set the d
1bed0 61 74 61 62 61 73 65 20 61 75 74 6f 2d 63 6f 6d  atabase auto-com
1bee0 6d 69 74 20 66 6c 61 67 20 74 6f 20 50 31 20 28  mit flag to P1 (
1bef0 31 20 6f 72 20 30 29 2e 20 49 66 20 50 32 20 69  1 or 0). If P2 i
1bf00 73 20 74 72 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20  s true, roll.** 
1bf10 62 61 63 6b 20 61 6e 79 20 63 75 72 72 65 6e 74  back any current
1bf20 6c 79 20 61 63 74 69 76 65 20 62 74 72 65 65 20  ly active btree 
1bf30 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20 49 66  transactions. If
1bf40 20 74 68 65 72 65 20 61 72 65 20 61 6e 79 20 61   there are any a
1bf50 63 74 69 76 65 0a 2a 2a 20 56 4d 73 20 28 61 70  ctive.** VMs (ap
1bf60 61 72 74 20 66 72 6f 6d 20 74 68 69 73 20 6f 6e  art from this on
1bf70 65 29 2c 20 74 68 65 6e 20 61 20 52 4f 4c 4c 42  e), then a ROLLB
1bf80 41 43 4b 20 66 61 69 6c 73 2e 20 20 41 20 43 4f  ACK fails.  A CO
1bf90 4d 4d 49 54 20 66 61 69 6c 73 20 69 66 0a 2a 2a  MMIT fails if.**
1bfa0 20 74 68 65 72 65 20 61 72 65 20 61 63 74 69 76   there are activ
1bfb0 65 20 77 72 69 74 69 6e 67 20 56 4d 73 20 6f 72  e writing VMs or
1bfc0 20 61 63 74 69 76 65 20 56 4d 73 20 74 68 61 74   active VMs that
1bfd0 20 75 73 65 20 73 68 61 72 65 64 20 63 61 63 68   use shared cach
1bfe0 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  e..**.** This in
1bff0 73 74 72 75 63 74 69 6f 6e 20 63 61 75 73 65 73  struction causes
1c000 20 74 68 65 20 56 4d 20 74 6f 20 68 61 6c 74 2e   the VM to halt.
1c010 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 75 74 6f  .*/.case OP_Auto
1c020 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20 69 6e 74 20  Commit: {.  int 
1c030 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
1c040 74 3b 0a 20 20 69 6e 74 20 69 52 6f 6c 6c 62 61  t;.  int iRollba
1c050 63 6b 3b 0a 0a 20 20 64 65 73 69 72 65 64 41 75  ck;..  desiredAu
1c060 74 6f 43 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e  toCommit = pOp->
1c070 70 31 3b 0a 20 20 69 52 6f 6c 6c 62 61 63 6b 20  p1;.  iRollback 
1c080 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73  = pOp->p2;.  ass
1c090 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f  ert( desiredAuto
1c0a0 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64 65 73  Commit==1 || des
1c0b0 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
1c0c0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  0 );.  assert( d
1c0d0 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
1c0e0 3d 3d 31 20 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b  ==1 || iRollback
1c0f0 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
1c100 20 64 62 2d 3e 6e 56 64 62 65 41 63 74 69 76 65   db->nVdbeActive
1c110 3e 30 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61  >0 );  /* At lea
1c120 73 74 20 74 68 69 73 20 6f 6e 65 20 56 4d 20 69  st this one VM i
1c130 73 20 61 63 74 69 76 65 20 2a 2f 0a 20 20 61 73  s active */.  as
1c140 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
1c150 65 72 20 29 3b 0a 0a 20 20 69 66 28 20 64 65 73  er );..  if( des
1c160 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 21 3d  iredAutoCommit!=
1c170 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29  db->autoCommit )
1c180 7b 0a 20 20 20 20 69 66 28 20 69 52 6f 6c 6c 62  {.    if( iRollb
1c190 61 63 6b 20 29 7b 0a 20 20 20 20 20 20 61 73 73  ack ){.      ass
1c1a0 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f  ert( desiredAuto
1c1b0 43 6f 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20 20 20  Commit==1 );.   
1c1c0 20 20 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61     sqlite3Rollba
1c1d0 63 6b 41 6c 6c 28 64 62 2c 20 53 51 4c 49 54 45  ckAll(db, SQLITE
1c1e0 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 29  _ABORT_ROLLBACK)
1c1f0 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f  ;.      db->auto
1c200 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20  Commit = 1;.    
1c210 7d 65 6c 73 65 20 69 66 28 20 64 65 73 69 72 65  }else if( desire
1c220 64 41 75 74 6f 43 6f 6d 6d 69 74 20 26 26 20 64  dAutoCommit && d
1c230 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20  b->nVdbeWrite>0 
1c240 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74  ){.      /* If t
1c250 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
1c260 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d  implements a COM
1c270 4d 49 54 20 61 6e 64 20 6f 74 68 65 72 20 56 4d  MIT and other VM
1c280 73 20 61 72 65 20 77 72 69 74 69 6e 67 0a 20 20  s are writing.  
1c290 20 20 20 20 2a 2a 20 72 65 74 75 72 6e 20 61 6e      ** return an
1c2a0 20 65 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e   error indicatin
1c2b0 67 20 74 68 61 74 20 74 68 65 20 6f 74 68 65 72  g that the other
1c2c0 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65   VMs must comple
1c2d0 74 65 20 66 69 72 73 74 2e 20 0a 20 20 20 20 20  te first. .     
1c2e0 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65   */.      sqlite
1c2f0 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 63  3VdbeError(p, "c
1c300 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 74 72 61  annot commit tra
1c310 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20  nsaction - ".   
1c320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c330 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74         "SQL stat
1c340 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65  ements in progre
1c350 73 73 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  ss");.      rc =
1c360 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
1c370 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
1c380 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1c390 20 7d 65 6c 73 65 20 69 66 28 20 28 72 63 20 3d   }else if( (rc =
1c3a0 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63   sqlite3VdbeChec
1c3b0 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49  kFk(p, 1))!=SQLI
1c3c0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67  TE_OK ){.      g
1c3d0 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
1c3e0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
1c3f0 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
1c400 20 3d 20 28 75 38 29 64 65 73 69 72 65 64 41 75   = (u8)desiredAu
1c410 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 20 20 7d 0a  toCommit;.    }.
1c420 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56      if( sqlite3V
1c430 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49  dbeHalt(p)==SQLI
1c440 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20  TE_BUSY ){.     
1c450 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70   p->pc = (int)(p
1c460 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20  Op - aOp);.     
1c470 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
1c480 3d 20 28 75 38 29 28 31 2d 64 65 73 69 72 65 64  = (u8)(1-desired
1c490 41 75 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20 20 20  AutoCommit);.   
1c4a0 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20     p->rc = rc = 
1c4b0 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20  SQLITE_BUSY;.   
1c4c0 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
1c4d0 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61  urn;.    }.    a
1c4e0 73 73 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74  ssert( db->nStat
1c4f0 65 6d 65 6e 74 3d 3d 30 20 29 3b 0a 20 20 20 20  ement==0 );.    
1c500 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65  sqlite3CloseSave
1c510 70 6f 69 6e 74 73 28 64 62 29 3b 0a 20 20 20 20  points(db);.    
1c520 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54  if( p->rc==SQLIT
1c530 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63  E_OK ){.      rc
1c540 20 3d 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a   = SQLITE_DONE;.
1c550 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1c560 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
1c570 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f  OR;.    }.    go
1c580 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
1c590 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c    }else{.    sql
1c5a0 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
1c5b0 0a 20 20 20 20 20 20 20 20 28 21 64 65 73 69 72  .        (!desir
1c5c0 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3f 22 63  edAutoCommit)?"c
1c5d0 61 6e 6e 6f 74 20 73 74 61 72 74 20 61 20 74 72  annot start a tr
1c5e0 61 6e 73 61 63 74 69 6f 6e 20 77 69 74 68 69 6e  ansaction within
1c5f0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 3a   a transaction":
1c600 28 0a 20 20 20 20 20 20 20 20 28 69 52 6f 6c 6c  (.        (iRoll
1c610 62 61 63 6b 29 3f 22 63 61 6e 6e 6f 74 20 72 6f  back)?"cannot ro
1c620 6c 6c 62 61 63 6b 20 2d 20 6e 6f 20 74 72 61 6e  llback - no tran
1c630 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76  saction is activ
1c640 65 22 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20  e":.            
1c650 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63         "cannot c
1c660 6f 6d 6d 69 74 20 2d 20 6e 6f 20 74 72 61 6e 73  ommit - no trans
1c670 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65  action is active
1c680 22 29 29 3b 0a 20 20 20 20 20 20 20 20 20 0a 20  "));.         . 
1c690 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
1c6a0 52 52 4f 52 3b 0a 20 20 20 20 67 6f 74 6f 20 61  RROR;.    goto a
1c6b0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1c6c0 72 3b 0a 20 20 7d 0a 20 20 2f 2a 4e 4f 54 52 45  r;.  }.  /*NOTRE
1c6d0 41 43 48 45 44 2a 2f 20 61 73 73 65 72 74 28 30  ACHED*/ assert(0
1c6e0 29 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  );.}../* Opcode:
1c6f0 20 54 72 61 6e 73 61 63 74 69 6f 6e 20 50 31 20   Transaction P1 
1c700 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
1c710 2a 20 42 65 67 69 6e 20 61 20 74 72 61 6e 73 61  * Begin a transa
1c720 63 74 69 6f 6e 20 6f 6e 20 64 61 74 61 62 61 73  ction on databas
1c730 65 20 50 31 20 69 66 20 61 20 74 72 61 6e 73 61  e P1 if a transa
1c740 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 61 6c 72  ction is not alr
1c750 65 61 64 79 0a 2a 2a 20 61 63 74 69 76 65 2e 0a  eady.** active..
1c760 2a 2a 20 49 66 20 50 32 20 69 73 20 6e 6f 6e 2d  ** If P2 is non-
1c770 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 77 72 69  zero, then a wri
1c780 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  te-transaction i
1c790 73 20 73 74 61 72 74 65 64 2c 20 6f 72 20 69 66  s started, or if
1c7a0 20 61 20 0a 2a 2a 20 72 65 61 64 2d 74 72 61 6e   a .** read-tran
1c7b0 73 61 63 74 69 6f 6e 20 69 73 20 61 6c 72 65 61  saction is alrea
1c7c0 64 79 20 61 63 74 69 76 65 2c 20 69 74 20 69 73  dy active, it is
1c7d0 20 75 70 67 72 61 64 65 64 20 74 6f 20 61 20 77   upgraded to a w
1c7e0 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e  rite-transaction
1c7f0 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 7a 65  ..** If P2 is ze
1c800 72 6f 2c 20 74 68 65 6e 20 61 20 72 65 61 64 2d  ro, then a read-
1c810 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73  transaction is s
1c820 74 61 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 31  tarted..**.** P1
1c830 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66   is the index of
1c840 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
1c850 6c 65 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20  le on which the 
1c860 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a  transaction is.*
1c870 2a 20 73 74 61 72 74 65 64 2e 20 20 49 6e 64 65  * started.  Inde
1c880 78 20 30 20 69 73 20 74 68 65 20 6d 61 69 6e 20  x 0 is the main 
1c890 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e  database file an
1c8a0 64 20 69 6e 64 65 78 20 31 20 69 73 20 74 68 65  d index 1 is the
1c8b0 0a 2a 2a 20 66 69 6c 65 20 75 73 65 64 20 66 6f  .** file used fo
1c8c0 72 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  r temporary tabl
1c8d0 65 73 2e 20 20 49 6e 64 69 63 65 73 20 6f 66 20  es.  Indices of 
1c8e0 32 20 6f 72 20 6d 6f 72 65 20 61 72 65 20 75 73  2 or more are us
1c8f0 65 64 20 66 6f 72 0a 2a 2a 20 61 74 74 61 63 68  ed for.** attach
1c900 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a  ed databases..**
1c910 0a 2a 2a 20 49 66 20 61 20 77 72 69 74 65 2d 74  .** If a write-t
1c920 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74  ransaction is st
1c930 61 72 74 65 64 20 61 6e 64 20 74 68 65 20 56 64  arted and the Vd
1c940 62 65 2e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e  be.usesStmtJourn
1c950 61 6c 20 66 6c 61 67 20 69 73 0a 2a 2a 20 74 72  al flag is.** tr
1c960 75 65 20 28 74 68 69 73 20 66 6c 61 67 20 69 73  ue (this flag is
1c970 20 73 65 74 20 69 66 20 74 68 65 20 56 64 62 65   set if the Vdbe
1c980 20 6d 61 79 20 6d 6f 64 69 66 79 20 6d 6f 72 65   may modify more
1c990 20 74 68 61 6e 20 6f 6e 65 20 72 6f 77 20 61 6e   than one row an
1c9a0 64 20 6d 61 79 0a 2a 2a 20 74 68 72 6f 77 20 61  d may.** throw a
1c9b0 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f  n ABORT exceptio
1c9c0 6e 29 2c 20 61 20 73 74 61 74 65 6d 65 6e 74 20  n), a statement 
1c9d0 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20  transaction may 
1c9e0 61 6c 73 6f 20 62 65 20 6f 70 65 6e 65 64 2e 0a  also be opened..
1c9f0 2a 2a 20 4d 6f 72 65 20 73 70 65 63 69 66 69 63  ** More specific
1ca00 61 6c 6c 79 2c 20 61 20 73 74 61 74 65 6d 65 6e  ally, a statemen
1ca10 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  t transaction is
1ca20 20 6f 70 65 6e 65 64 20 69 66 66 20 74 68 65 20   opened iff the 
1ca30 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e  database.** conn
1ca40 65 63 74 69 6f 6e 20 69 73 20 63 75 72 72 65 6e  ection is curren
1ca50 74 6c 79 20 6e 6f 74 20 69 6e 20 61 75 74 6f 63  tly not in autoc
1ca60 6f 6d 6d 69 74 20 6d 6f 64 65 2c 20 6f 72 20 69  ommit mode, or i
1ca70 66 20 74 68 65 72 65 20 61 72 65 20 6f 74 68 65  f there are othe
1ca80 72 0a 2a 2a 20 61 63 74 69 76 65 20 73 74 61 74  r.** active stat
1ca90 65 6d 65 6e 74 73 2e 20 41 20 73 74 61 74 65 6d  ements. A statem
1caa0 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
1cab0 61 6c 6c 6f 77 73 20 74 68 65 20 63 68 61 6e 67  allows the chang
1cac0 65 73 20 6d 61 64 65 20 62 79 20 74 68 69 73 0a  es made by this.
1cad0 2a 2a 20 56 44 42 45 20 74 6f 20 62 65 20 72 6f  ** VDBE to be ro
1cae0 6c 6c 65 64 20 62 61 63 6b 20 61 66 74 65 72 20  lled back after 
1caf0 61 6e 20 65 72 72 6f 72 20 77 69 74 68 6f 75 74  an error without
1cb00 20 68 61 76 69 6e 67 20 74 6f 20 72 6f 6c 6c 20   having to roll 
1cb10 62 61 63 6b 20 74 68 65 0a 2a 2a 20 65 6e 74 69  back the.** enti
1cb20 72 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  re transaction. 
1cb30 49 66 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 65  If no error is e
1cb40 6e 63 6f 75 6e 74 65 72 65 64 2c 20 74 68 65 20  ncountered, the 
1cb50 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
1cb60 63 74 69 6f 6e 0a 2a 2a 20 77 69 6c 6c 20 61 75  ction.** will au
1cb70 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 6f 6d 6d  tomatically comm
1cb80 69 74 20 77 68 65 6e 20 74 68 65 20 56 44 42 45  it when the VDBE
1cb90 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49 66   halts..**.** If
1cba0 20 50 35 21 3d 30 20 74 68 65 6e 20 74 68 69 73   P5!=0 then this
1cbb0 20 6f 70 63 6f 64 65 20 61 6c 73 6f 20 63 68 65   opcode also che
1cbc0 63 6b 73 20 74 68 65 20 73 63 68 65 6d 61 20 63  cks the schema c
1cbd0 6f 6f 6b 69 65 20 61 67 61 69 6e 73 74 20 50 33  ookie against P3
1cbe0 0a 2a 2a 20 61 6e 64 20 74 68 65 20 73 63 68 65  .** and the sche
1cbf0 6d 61 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f  ma generation co
1cc00 75 6e 74 65 72 20 61 67 61 69 6e 73 74 20 50 34  unter against P4
1cc10 2e 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b 69 65 20  ..** The cookie 
1cc20 63 68 61 6e 67 65 73 20 69 74 73 20 76 61 6c 75  changes its valu
1cc30 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 20 64  e whenever the d
1cc40 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 63  atabase schema c
1cc50 68 61 6e 67 65 73 2e 0a 2a 2a 20 54 68 69 73 20  hanges..** This 
1cc60 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 75 73 65  operation is use
1cc70 64 20 74 6f 20 64 65 74 65 63 74 20 77 68 65 6e  d to detect when
1cc80 20 74 68 61 74 20 74 68 65 20 63 6f 6f 6b 69 65   that the cookie
1cc90 20 68 61 73 20 63 68 61 6e 67 65 64 0a 2a 2a 20   has changed.** 
1cca0 61 6e 64 20 74 68 61 74 20 74 68 65 20 63 75 72  and that the cur
1ccb0 72 65 6e 74 20 70 72 6f 63 65 73 73 20 6e 65 65  rent process nee
1ccc0 64 73 20 74 6f 20 72 65 72 65 61 64 20 74 68 65  ds to reread the
1ccd0 20 73 63 68 65 6d 61 2e 20 20 49 66 20 74 68 65   schema.  If the
1cce0 20 73 63 68 65 6d 61 0a 2a 2a 20 63 6f 6f 6b 69   schema.** cooki
1ccf0 65 20 69 6e 20 50 33 20 64 69 66 66 65 72 73 20  e in P3 differs 
1cd00 66 72 6f 6d 20 74 68 65 20 73 63 68 65 6d 61 20  from the schema 
1cd10 63 6f 6f 6b 69 65 20 69 6e 20 74 68 65 20 64 61  cookie in the da
1cd20 74 61 62 61 73 65 20 68 65 61 64 65 72 20 6f 72  tabase header or
1cd30 0a 2a 2a 20 69 66 20 74 68 65 20 73 63 68 65 6d  .** if the schem
1cd40 61 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75  a generation cou
1cd50 6e 74 65 72 20 69 6e 20 50 34 20 64 69 66 66 65  nter in P4 diffe
1cd60 72 73 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72  rs from the curr
1cd70 65 6e 74 0a 2a 2a 20 67 65 6e 65 72 61 74 69 6f  ent.** generatio
1cd80 6e 20 63 6f 75 6e 74 65 72 2c 20 74 68 65 6e 20  n counter, then 
1cd90 61 6e 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41  an SQLITE_SCHEMA
1cda0 20 65 72 72 6f 72 20 69 73 20 72 61 69 73 65 64   error is raised
1cdb0 20 61 6e 64 20 65 78 65 63 75 74 69 6f 6e 0a 2a   and execution.*
1cdc0 2a 20 68 61 6c 74 73 2e 20 20 54 68 65 20 73 71  * halts.  The sq
1cdd0 6c 69 74 65 33 5f 73 74 65 70 28 29 20 77 72 61  lite3_step() wra
1cde0 70 70 65 72 20 66 75 6e 63 74 69 6f 6e 20 6d 69  pper function mi
1cdf0 67 68 74 20 74 68 65 6e 20 72 65 70 72 65 70 61  ght then reprepa
1ce00 72 65 20 74 68 65 0a 2a 2a 20 73 74 61 74 65 6d  re the.** statem
1ce10 65 6e 74 20 61 6e 64 20 72 65 72 75 6e 20 69 74  ent and rerun it
1ce20 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e   from the beginn
1ce30 69 6e 67 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ing..*/.case OP_
1ce40 54 72 61 6e 73 61 63 74 69 6f 6e 3a 20 7b 0a 20  Transaction: {. 
1ce50 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 20 20 69   Btree *pBt;.  i
1ce60 6e 74 20 69 4d 65 74 61 20 3d 20 30 3b 0a 0a 20  nt iMeta = 0;.. 
1ce70 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52   assert( p->bIsR
1ce80 65 61 64 65 72 20 29 3b 0a 20 20 61 73 73 65 72  eader );.  asser
1ce90 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
1cea0 30 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 30 20  0 || pOp->p2==0 
1ceb0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1cec0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1ced0 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
1cee0 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
1cef0 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
1cf00 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 69   pOp->p1) );.  i
1cf10 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20 28 64  f( pOp->p2 && (d
1cf20 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
1cf30 45 5f 51 75 65 72 79 4f 6e 6c 79 29 21 3d 30 20  E_QueryOnly)!=0 
1cf40 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
1cf50 54 45 5f 52 45 41 44 4f 4e 4c 59 3b 0a 20 20 20  TE_READONLY;.   
1cf60 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1cf70 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20  to_error;.  }.  
1cf80 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f  pBt = db->aDb[pO
1cf90 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20 20 69  p->p1].pBt;..  i
1cfa0 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20 72 63  f( pBt ){.    rc
1cfb0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42   = sqlite3BtreeB
1cfc0 65 67 69 6e 54 72 61 6e 73 28 70 42 74 2c 20 70  eginTrans(pBt, p
1cfd0 4f 70 2d 3e 70 32 2c 20 26 69 4d 65 74 61 29 3b  Op->p2, &iMeta);
1cfe0 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20 72  .    testcase( r
1cff0 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 5f 53  c==SQLITE_BUSY_S
1d000 4e 41 50 53 48 4f 54 20 29 3b 0a 20 20 20 20 74  NAPSHOT );.    t
1d010 65 73 74 63 61 73 65 28 20 72 63 3d 3d 53 51 4c  estcase( rc==SQL
1d020 49 54 45 5f 42 55 53 59 5f 52 45 43 4f 56 45 52  ITE_BUSY_RECOVER
1d030 59 20 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21  Y );.    if( rc!
1d040 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1d050 20 20 20 20 69 66 28 20 28 72 63 26 30 78 66 66      if( (rc&0xff
1d060 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  )==SQLITE_BUSY )
1d070 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20  {.        p->pc 
1d080 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f  = (int)(pOp - aO
1d090 70 29 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e 72  p);.        p->r
1d0a0 63 20 3d 20 72 63 3b 0a 20 20 20 20 20 20 20 20  c = rc;.        
1d0b0 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
1d0c0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
1d0d0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1d0e0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a  o_error;.    }..
1d0f0 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20      if( pOp->p2 
1d100 26 26 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f  && p->usesStmtJo
1d110 75 72 6e 61 6c 20 0a 20 20 20 20 20 26 26 20 28  urnal .     && (
1d120 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d  db->autoCommit==
1d130 30 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65  0 || db->nVdbeRe
1d140 61 64 3e 31 29 20 0a 20 20 20 20 29 7b 0a 20 20  ad>1) .    ){.  
1d150 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
1d160 74 65 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e  te3BtreeIsInTran
1d170 73 28 70 42 74 29 20 29 3b 0a 20 20 20 20 20 20  s(pBt) );.      
1d180 69 66 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e  if( p->iStatemen
1d190 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  t==0 ){.        
1d1a0 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 53 74 61  assert( db->nSta
1d1b0 74 65 6d 65 6e 74 3e 3d 30 20 26 26 20 64 62 2d  tement>=0 && db-
1d1c0 3e 6e 53 61 76 65 70 6f 69 6e 74 3e 3d 30 20 29  >nSavepoint>=0 )
1d1d0 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53  ;.        db->nS
1d1e0 74 61 74 65 6d 65 6e 74 2b 2b 3b 20 0a 20 20 20  tatement++; .   
1d1f0 20 20 20 20 20 70 2d 3e 69 53 74 61 74 65 6d 65       p->iStateme
1d200 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f  nt = db->nSavepo
1d210 69 6e 74 20 2b 20 64 62 2d 3e 6e 53 74 61 74 65  int + db->nState
1d220 6d 65 6e 74 3b 0a 20 20 20 20 20 20 7d 0a 0a 20  ment;.      }.. 
1d230 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1d240 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64  3VtabSavepoint(d
1d250 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47  b, SAVEPOINT_BEG
1d260 49 4e 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e  IN, p->iStatemen
1d270 74 2d 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20  t-1);.      if( 
1d280 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
1d290 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
1d2a0 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 53  lite3BtreeBeginS
1d2b0 74 6d 74 28 70 42 74 2c 20 70 2d 3e 69 53 74 61  tmt(pBt, p->iSta
1d2c0 74 65 6d 65 6e 74 29 3b 0a 20 20 20 20 20 20 7d  tement);.      }
1d2d0 0a 0a 20 20 20 20 20 20 2f 2a 20 53 74 6f 72 65  ..      /* Store
1d2e0 20 74 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c   the current val
1d2f0 75 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ue of the databa
1d300 73 65 20 68 61 6e 64 6c 65 73 20 64 65 66 65 72  se handles defer
1d310 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 0a 20  red constraint. 
1d320 20 20 20 20 20 2a 2a 20 63 6f 75 6e 74 65 72 2e       ** counter.
1d330 20 49 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e   If the statemen
1d340 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e 65  t transaction ne
1d350 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64  eds to be rolled
1d360 20 62 61 63 6b 2c 0a 20 20 20 20 20 20 2a 2a 20   back,.      ** 
1d370 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 69  the value of thi
1d380 73 20 63 6f 75 6e 74 65 72 20 6e 65 65 64 73 20  s counter needs 
1d390 74 6f 20 62 65 20 72 65 73 74 6f 72 65 64 20 74  to be restored t
1d3a0 6f 6f 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 2d  oo.  */.      p-
1d3b0 3e 6e 53 74 6d 74 44 65 66 43 6f 6e 73 20 3d 20  >nStmtDefCons = 
1d3c0 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
1d3d0 73 3b 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d  s;.      p->nStm
1d3e0 74 44 65 66 49 6d 6d 43 6f 6e 73 20 3d 20 64 62  tDefImmCons = db
1d3f0 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
1d400 6e 73 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ns;.    }.  }.  
1d410 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d  assert( pOp->p5=
1d420 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70  =0 || pOp->p4typ
1d430 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
1d440 20 69 66 28 20 70 4f 70 2d 3e 70 35 0a 20 20 20   if( pOp->p5.   
1d450 26 26 20 28 69 4d 65 74 61 21 3d 70 4f 70 2d 3e  && (iMeta!=pOp->
1d460 70 33 0a 20 20 20 20 20 20 7c 7c 20 64 62 2d 3e  p3.      || db->
1d470 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63  aDb[pOp->p1].pSc
1d480 68 65 6d 61 2d 3e 69 47 65 6e 65 72 61 74 69 6f  hema->iGeneratio
1d490 6e 21 3d 70 4f 70 2d 3e 70 34 2e 69 29 0a 20 20  n!=pOp->p4.i).  
1d4a0 29 7b 0a 20 20 20 20 2f 2a 0a 20 20 20 20 2a 2a  ){.    /*.    **
1d4b0 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d   IMPLEMENTATION-
1d4c0 4f 46 3a 20 52 2d 30 33 31 38 39 2d 35 31 31 33  OF: R-03189-5113
1d4d0 35 20 41 73 20 65 61 63 68 20 53 51 4c 20 73 74  5 As each SQL st
1d4e0 61 74 65 6d 65 6e 74 20 72 75 6e 73 2c 20 74 68  atement runs, th
1d4f0 65 20 73 63 68 65 6d 61 0a 20 20 20 20 2a 2a 20  e schema.    ** 
1d500 76 65 72 73 69 6f 6e 20 69 73 20 63 68 65 63 6b  version is check
1d510 65 64 20 74 6f 20 65 6e 73 75 72 65 20 74 68 61  ed to ensure tha
1d520 74 20 74 68 65 20 73 63 68 65 6d 61 20 68 61 73  t the schema has
1d530 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 73 69 6e   not changed sin
1d540 63 65 20 74 68 65 0a 20 20 20 20 2a 2a 20 53 51  ce the.    ** SQ
1d550 4c 20 73 74 61 74 65 6d 65 6e 74 20 77 61 73 20  L statement was 
1d560 70 72 65 70 61 72 65 64 2e 0a 20 20 20 20 2a 2f  prepared..    */
1d570 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72  .    sqlite3DbFr
1d580 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73  ee(db, p->zErrMs
1d590 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d  g);.    p->zErrM
1d5a0 73 67 20 3d 20 73 71 6c 69 74 65 33 44 62 53 74  sg = sqlite3DbSt
1d5b0 72 44 75 70 28 64 62 2c 20 22 64 61 74 61 62 61  rDup(db, "databa
1d5c0 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 63 68  se schema has ch
1d5d0 61 6e 67 65 64 22 29 3b 0a 20 20 20 20 2f 2a 20  anged");.    /* 
1d5e0 49 66 20 74 68 65 20 73 63 68 65 6d 61 2d 63 6f  If the schema-co
1d5f0 6f 6b 69 65 20 66 72 6f 6d 20 74 68 65 20 64 61  okie from the da
1d600 74 61 62 61 73 65 20 66 69 6c 65 20 6d 61 74 63  tabase file matc
1d610 68 65 73 20 74 68 65 20 63 6f 6f 6b 69 65 20 0a  hes the cookie .
1d620 20 20 20 20 2a 2a 20 73 74 6f 72 65 64 20 77 69      ** stored wi
1d630 74 68 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79  th the in-memory
1d640 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
1d650 6f 66 20 74 68 65 20 73 63 68 65 6d 61 2c 20 64  of the schema, d
1d660 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74 20 72 65 6c  o.    ** not rel
1d670 6f 61 64 20 74 68 65 20 73 63 68 65 6d 61 20 66  oad the schema f
1d680 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
1d690 20 66 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20 20   file..    **.  
1d6a0 20 20 2a 2a 20 49 66 20 76 69 72 74 75 61 6c 2d    ** If virtual-
1d6b0 74 61 62 6c 65 73 20 61 72 65 20 69 6e 20 75 73  tables are in us
1d6c0 65 2c 20 74 68 69 73 20 69 73 20 6e 6f 74 20 6a  e, this is not j
1d6d0 75 73 74 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74  ust an optimizat
1d6e0 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66 74 65  ion..    ** Ofte
1d6f0 6e 2c 20 76 2d 74 61 62 6c 65 73 20 73 74 6f 72  n, v-tables stor
1d700 65 20 74 68 65 69 72 20 64 61 74 61 20 69 6e 20  e their data in 
1d710 6f 74 68 65 72 20 53 51 4c 69 74 65 20 74 61 62  other SQLite tab
1d720 6c 65 73 2c 20 77 68 69 63 68 0a 20 20 20 20 2a  les, which.    *
1d730 2a 20 61 72 65 20 71 75 65 72 69 65 64 20 66 72  * are queried fr
1d740 6f 6d 20 77 69 74 68 69 6e 20 78 4e 65 78 74 28  om within xNext(
1d750 29 20 61 6e 64 20 6f 74 68 65 72 20 76 2d 74 61  ) and other v-ta
1d760 62 6c 65 20 6d 65 74 68 6f 64 73 20 75 73 69 6e  ble methods usin
1d770 67 0a 20 20 20 20 2a 2a 20 70 72 65 70 61 72 65  g.    ** prepare
1d780 64 20 71 75 65 72 69 65 73 2e 20 49 66 20 73 75  d queries. If su
1d790 63 68 20 61 20 71 75 65 72 79 20 69 73 20 6f 75  ch a query is ou
1d7a0 74 2d 6f 66 2d 64 61 74 65 2c 20 77 65 20 64 6f  t-of-date, we do
1d7b0 20 6e 6f 74 20 77 61 6e 74 20 74 6f 0a 20 20 20   not want to.   
1d7c0 20 2a 2a 20 64 69 73 63 61 72 64 20 74 68 65 20   ** discard the 
1d7d0 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c  database schema,
1d7e0 20 61 73 20 74 68 65 20 75 73 65 72 20 63 6f 64   as the user cod
1d7f0 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74  e implementing t
1d800 68 65 0a 20 20 20 20 2a 2a 20 76 2d 74 61 62 6c  he.    ** v-tabl
1d810 65 20 77 6f 75 6c 64 20 68 61 76 65 20 74 6f 20  e would have to 
1d820 62 65 20 72 65 61 64 79 20 66 6f 72 20 74 68 65  be ready for the
1d830 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
1d840 72 75 63 74 75 72 65 20 69 74 73 65 6c 66 0a 20  ructure itself. 
1d850 20 20 20 2a 2a 20 74 6f 20 62 65 20 69 6e 76 61     ** to be inva
1d860 6c 69 64 61 74 65 64 20 77 68 65 6e 65 76 65 72  lidated whenever
1d870 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
1d880 69 73 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77  is called from w
1d890 69 74 68 69 6e 20 0a 20 20 20 20 2a 2a 20 61 20  ithin .    ** a 
1d8a0 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 2e 0a  v-table method..
1d8b0 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 64      */.    if( d
1d8c0 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
1d8d0 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f  pSchema->schema_
1d8e0 63 6f 6f 6b 69 65 21 3d 69 4d 65 74 61 20 29 7b  cookie!=iMeta ){
1d8f0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65  .      sqlite3Re
1d900 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 64 62 2c  setOneSchema(db,
1d910 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d   pOp->p1);.    }
1d920 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20  .    p->expired 
1d930 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 53 51  = 1;.    rc = SQ
1d940 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20 7d  LITE_SCHEMA;.  }
1d950 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
1d960 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1d970 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ror;.  break;.}.
1d980 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 64  ./* Opcode: Read
1d990 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20  Cookie P1 P2 P3 
1d9a0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 63  * *.**.** Read c
1d9b0 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 33 20  ookie number P3 
1d9c0 66 72 6f 6d 20 64 61 74 61 62 61 73 65 20 50 31  from database P1
1d9d0 20 61 6e 64 20 77 72 69 74 65 20 69 74 20 69 6e   and write it in
1d9e0 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
1d9f0 2a 2a 20 50 33 3d 3d 31 20 69 73 20 74 68 65 20  ** P3==1 is the 
1da00 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20  schema version. 
1da10 20 50 33 3d 3d 32 20 69 73 20 74 68 65 20 64 61   P3==2 is the da
1da20 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a  tabase format..*
1da30 2a 20 50 33 3d 3d 33 20 69 73 20 74 68 65 20 72  * P3==3 is the r
1da40 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72  ecommended pager
1da50 20 63 61 63 68 65 20 73 69 7a 65 2c 20 61 6e 64   cache size, and
1da60 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d   so forth.  P1==
1da70 30 20 69 73 0a 2a 2a 20 74 68 65 20 6d 61 69 6e  0 is.** the main
1da80 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
1da90 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20  nd P1==1 is the 
1daa0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73  database file us
1dab0 65 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74  ed to store.** t
1dac0 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e  emporary tables.
1dad0 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 6d 75 73  .**.** There mus
1dae0 74 20 62 65 20 61 20 72 65 61 64 2d 6c 6f 63 6b  t be a read-lock
1daf0 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
1db00 20 28 65 69 74 68 65 72 20 61 20 74 72 61 6e 73   (either a trans
1db10 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62  action.** must b
1db20 65 20 73 74 61 72 74 65 64 20 6f 72 20 74 68 65  e started or the
1db30 72 65 20 6d 75 73 74 20 62 65 20 61 6e 20 6f 70  re must be an op
1db40 65 6e 20 63 75 72 73 6f 72 29 20 62 65 66 6f 72  en cursor) befor
1db50 65 0a 2a 2a 20 65 78 65 63 75 74 69 6e 67 20 74  e.** executing t
1db60 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  his instruction.
1db70 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 64  .*/.case OP_Read
1db80 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20  Cookie: {       
1db90 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
1dba0 2a 2f 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a  */.  int iMeta;.
1dbb0 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74    int iDb;.  int
1dbc0 20 69 43 6f 6f 6b 69 65 3b 0a 0a 20 20 61 73 73   iCookie;..  ass
1dbd0 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65  ert( p->bIsReade
1dbe0 72 20 29 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70  r );.  iDb = pOp
1dbf0 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b 69 65 20  ->p1;.  iCookie 
1dc00 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73  = pOp->p3;.  ass
1dc10 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 53 51 4c  ert( pOp->p3<SQL
1dc20 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41  ITE_N_BTREE_META
1dc30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44   );.  assert( iD
1dc40 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e  b>=0 && iDb<db->
1dc50 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
1dc60 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42   db->aDb[iDb].pB
1dc70 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  t!=0 );.  assert
1dc80 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
1dc90 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20  btreeMask, iDb) 
1dca0 29 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42 74 72  );..  sqlite3Btr
1dcb0 65 65 47 65 74 4d 65 74 61 28 64 62 2d 3e 61 44  eeGetMeta(db->aD
1dcc0 62 5b 69 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f  b[iDb].pBt, iCoo
1dcd0 6b 69 65 2c 20 28 75 33 32 20 2a 29 26 69 4d 65  kie, (u32 *)&iMe
1dce0 74 61 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75  ta);.  pOut = ou
1dcf0 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
1dd00 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  pOp);.  pOut->u.
1dd10 69 20 3d 20 69 4d 65 74 61 3b 0a 20 20 62 72 65  i = iMeta;.  bre
1dd20 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1dd30 3a 20 53 65 74 43 6f 6f 6b 69 65 20 50 31 20 50  : SetCookie P1 P
1dd40 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57  2 P3 * *.**.** W
1dd50 72 69 74 65 20 74 68 65 20 69 6e 74 65 67 65 72  rite the integer
1dd60 20 76 61 6c 75 65 20 50 33 20 69 6e 74 6f 20 63   value P3 into c
1dd70 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 32 20  ookie number P2 
1dd80 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 2e 0a  of database P1..
1dd90 2a 2a 20 50 32 3d 3d 31 20 69 73 20 74 68 65 20  ** P2==1 is the 
1dda0 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20  schema version. 
1ddb0 20 50 32 3d 3d 32 20 69 73 20 74 68 65 20 64 61   P2==2 is the da
1ddc0 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a  tabase format..*
1ddd0 2a 20 50 32 3d 3d 33 20 69 73 20 74 68 65 20 72  * P2==3 is the r
1dde0 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72  ecommended pager
1ddf0 20 63 61 63 68 65 20 0a 2a 2a 20 73 69 7a 65 2c   cache .** size,
1de00 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20   and so forth.  
1de10 50 31 3d 3d 30 20 69 73 20 74 68 65 20 6d 61 69  P1==0 is the mai
1de20 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
1de30 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65  and P1==1 is the
1de40 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69   .** database fi
1de50 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  le used to store
1de60 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
1de70 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e 73  s..**.** A trans
1de80 61 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 73  action must be s
1de90 74 61 72 74 65 64 20 62 65 66 6f 72 65 20 65 78  tarted before ex
1dea0 65 63 75 74 69 6e 67 20 74 68 69 73 20 6f 70 63  ecuting this opc
1deb0 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ode..*/.case OP_
1dec0 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 0a 20 20 44  SetCookie: {.  D
1ded0 62 20 2a 70 44 62 3b 0a 0a 20 20 73 71 6c 69 74  b *pDb;..  sqlit
1dee0 65 33 56 64 62 65 49 6e 63 72 57 72 69 74 65 43  e3VdbeIncrWriteC
1def0 6f 75 6e 74 65 72 28 70 2c 20 30 29 3b 0a 20 20  ounter(p, 0);.  
1df00 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c  assert( pOp->p2<
1df10 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d  SQLITE_N_BTREE_M
1df20 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ETA );.  assert(
1df30 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1df40 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
1df50 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61  ;.  assert( DbMa
1df60 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
1df70 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b  ask, pOp->p1) );
1df80 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
1df90 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70  adOnly==0 );.  p
1dfa0 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f  Db = &db->aDb[pO
1dfb0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1dfc0 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b  ( pDb->pBt!=0 );
1dfd0 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
1dfe0 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c  e3SchemaMutexHel
1dff0 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 30  d(db, pOp->p1, 0
1e000 29 20 29 3b 0a 20 20 2f 2a 20 53 65 65 20 6e 6f  ) );.  /* See no
1e010 74 65 20 61 62 6f 75 74 20 69 6e 64 65 78 20 73  te about index s
1e020 68 69 66 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65  hifting on OP_Re
1e030 61 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63  adCookie */.  rc
1e040 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 55   = sqlite3BtreeU
1e050 70 64 61 74 65 4d 65 74 61 28 70 44 62 2d 3e 70  pdateMeta(pDb->p
1e060 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 70 4f 70  Bt, pOp->p2, pOp
1e070 2d 3e 70 33 29 3b 0a 20 20 69 66 28 20 70 4f 70  ->p3);.  if( pOp
1e080 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 53 43 48 45  ->p2==BTREE_SCHE
1e090 4d 41 5f 56 45 52 53 49 4f 4e 20 29 7b 0a 20 20  MA_VERSION ){.  
1e0a0 20 20 2f 2a 20 57 68 65 6e 20 74 68 65 20 73 63    /* When the sc
1e0b0 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 61 6e  hema cookie chan
1e0c0 67 65 73 2c 20 72 65 63 6f 72 64 20 74 68 65 20  ges, record the 
1e0d0 6e 65 77 20 63 6f 6f 6b 69 65 20 69 6e 74 65 72  new cookie inter
1e0e0 6e 61 6c 6c 79 20 2a 2f 0a 20 20 20 20 70 44 62  nally */.    pDb
1e0f0 2d 3e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d  ->pSchema->schem
1e100 61 5f 63 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e  a_cookie = pOp->
1e110 70 33 3b 0a 20 20 20 20 64 62 2d 3e 6d 44 62 46  p3;.    db->mDbF
1e120 6c 61 67 73 20 7c 3d 20 44 42 46 4c 41 47 5f 53  lags |= DBFLAG_S
1e130 63 68 65 6d 61 43 68 61 6e 67 65 3b 0a 20 20 7d  chemaChange;.  }
1e140 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 32  else if( pOp->p2
1e150 3d 3d 42 54 52 45 45 5f 46 49 4c 45 5f 46 4f 52  ==BTREE_FILE_FOR
1e160 4d 41 54 20 29 7b 0a 20 20 20 20 2f 2a 20 52 65  MAT ){.    /* Re
1e170 63 6f 72 64 20 63 68 61 6e 67 65 73 20 69 6e 20  cord changes in 
1e180 74 68 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20  the file format 
1e190 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68  */.    pDb->pSch
1e1a0 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74  ema->file_format
1e1b0 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a   = pOp->p3;.  }.
1e1c0 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 31    if( pOp->p1==1
1e1d0 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 76 61 6c   ){.    /* Inval
1e1e0 69 64 61 74 65 20 61 6c 6c 20 70 72 65 70 61 72  idate all prepar
1e1f0 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77 68  ed statements wh
1e200 65 6e 65 76 65 72 20 74 68 65 20 54 45 4d 50 20  enever the TEMP 
1e210 64 61 74 61 62 61 73 65 0a 20 20 20 20 2a 2a 20  database.    ** 
1e220 73 63 68 65 6d 61 20 69 73 20 63 68 61 6e 67 65  schema is change
1e230 64 2e 20 20 54 69 63 6b 65 74 20 23 31 36 34 34  d.  Ticket #1644
1e240 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 45   */.    sqlite3E
1e250 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
1e260 74 65 6d 65 6e 74 73 28 64 62 2c 20 30 29 3b 0a  tements(db, 0);.
1e270 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d      p->expired =
1e280 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63   0;.  }.  if( rc
1e290 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1e2a0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
1e2b0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1e2c0 65 3a 20 4f 70 65 6e 52 65 61 64 20 50 31 20 50  e: OpenRead P1 P
1e2d0 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
1e2e0 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20  nopsis: root=P2 
1e2f0 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65  iDb=P3.**.** Ope
1e300 6e 20 61 20 72 65 61 64 2d 6f 6e 6c 79 20 63 75  n a read-only cu
1e310 72 73 6f 72 20 66 6f 72 20 74 68 65 20 64 61 74  rsor for the dat
1e320 61 62 61 73 65 20 74 61 62 6c 65 20 77 68 6f 73  abase table whos
1e330 65 20 72 6f 6f 74 20 70 61 67 65 20 69 73 0a 2a  e root page is.*
1e340 2a 20 50 32 20 69 6e 20 61 20 64 61 74 61 62 61  * P2 in a databa
1e350 73 65 20 66 69 6c 65 2e 20 20 54 68 65 20 64 61  se file.  The da
1e360 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 64  tabase file is d
1e370 65 74 65 72 6d 69 6e 65 64 20 62 79 20 50 33 2e  etermined by P3.
1e380 20 0a 2a 2a 20 50 33 3d 3d 30 20 6d 65 61 6e 73   .** P3==0 means
1e390 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
1e3a0 73 65 2c 20 50 33 3d 3d 31 20 6d 65 61 6e 73 20  se, P3==1 means 
1e3b0 74 68 65 20 64 61 74 61 62 61 73 65 20 75 73 65  the database use
1e3c0 64 20 66 6f 72 20 0a 2a 2a 20 74 65 6d 70 6f 72  d for .** tempor
1e3d0 61 72 79 20 74 61 62 6c 65 73 2c 20 61 6e 64 20  ary tables, and 
1e3e0 50 33 3e 31 20 6d 65 61 6e 73 20 75 73 65 64 20  P3>1 means used 
1e3f0 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
1e400 67 20 61 74 74 61 63 68 65 64 0a 2a 2a 20 64 61  g attached.** da
1e410 74 61 62 61 73 65 2e 20 20 47 69 76 65 20 74 68  tabase.  Give th
1e420 65 20 6e 65 77 20 63 75 72 73 6f 72 20 61 6e 20  e new cursor an 
1e430 69 64 65 6e 74 69 66 69 65 72 20 6f 66 20 50 31  identifier of P1
1e440 2e 20 20 54 68 65 20 50 31 0a 2a 2a 20 76 61 6c  .  The P1.** val
1e450 75 65 73 20 6e 65 65 64 20 6e 6f 74 20 62 65 20  ues need not be 
1e460 63 6f 6e 74 69 67 75 6f 75 73 20 62 75 74 20 61  contiguous but a
1e470 6c 6c 20 50 31 20 76 61 6c 75 65 73 20 73 68 6f  ll P1 values sho
1e480 75 6c 64 20 62 65 20 73 6d 61 6c 6c 20 69 6e 74  uld be small int
1e490 65 67 65 72 73 2e 0a 2a 2a 20 49 74 20 69 73 20  egers..** It is 
1e4a0 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 50 31 20  an error for P1 
1e4b0 74 6f 20 62 65 20 6e 65 67 61 74 69 76 65 2e 0a  to be negative..
1e4c0 2a 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 50 35  **.** Allowed P5
1e4d0 20 62 69 74 73 3a 0a 2a 2a 20 3c 75 6c 3e 0a 2a   bits:.** <ul>.*
1e4e0 2a 20 3c 6c 69 3e 20 20 3c 62 3e 30 78 30 32 20  * <li>  <b>0x02 
1e4f0 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 3c 2f 62  OPFLAG_SEEKEQ</b
1e500 3e 3a 20 54 68 69 73 20 63 75 72 73 6f 72 20 77  >: This cursor w
1e510 69 6c 6c 20 6f 6e 6c 79 20 62 65 20 75 73 65 64  ill only be used
1e520 20 66 6f 72 0a 2a 2a 20 20 20 20 20 20 20 65 71   for.**       eq
1e530 75 61 6c 69 74 79 20 6c 6f 6f 6b 75 70 73 20 28  uality lookups (
1e540 69 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61  implemented as a
1e550 20 70 61 69 72 20 6f 66 20 6f 70 63 6f 64 65 73   pair of opcodes
1e560 20 4f 50 5f 53 65 65 6b 47 45 2f 4f 50 5f 49 64   OP_SeekGE/OP_Id
1e570 78 47 54 0a 2a 2a 20 20 20 20 20 20 20 6f 66 20  xGT.**       of 
1e580 4f 50 5f 53 65 65 6b 4c 45 2f 4f 50 5f 49 64 78  OP_SeekLE/OP_Idx
1e590 47 54 29 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a  GT).** </ul>.**.
1e5a0 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20  ** The P4 value 
1e5b0 6d 61 79 20 62 65 20 65 69 74 68 65 72 20 61 6e  may be either an
1e5c0 20 69 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54   integer (P4_INT
1e5d0 33 32 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72  32) or a pointer
1e5e0 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f   to.** a KeyInfo
1e5f0 20 73 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b   structure (P4_K
1e600 45 59 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69  EYINFO). If it i
1e610 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
1e620 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 6f 62 6a   KeyInfo .** obj
1e630 65 63 74 2c 20 74 68 65 6e 20 74 61 62 6c 65 20  ect, then table 
1e640 62 65 69 6e 67 20 6f 70 65 6e 65 64 20 6d 75 73  being opened mus
1e650 74 20 62 65 20 61 6e 20 5b 69 6e 64 65 78 20 62  t be an [index b
1e660 2d 74 72 65 65 5d 20 77 68 65 72 65 20 74 68 65  -tree] where the
1e670 0a 2a 2a 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65  .** KeyInfo obje
1e680 63 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 63  ct defines the c
1e690 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61  ontent and colla
1e6a0 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63  ting .** sequenc
1e6b0 65 20 6f 66 20 74 68 61 74 20 69 6e 64 65 78 20  e of that index 
1e6c0 62 2d 74 72 65 65 2e 20 4f 74 68 65 72 77 69 73  b-tree. Otherwis
1e6d0 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20 69  e, if P4 is an i
1e6e0 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65  nteger .** value
1e6f0 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  , then the table
1e700 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 20 6d 75   being opened mu
1e710 73 74 20 62 65 20 61 20 5b 74 61 62 6c 65 20 62  st be a [table b
1e720 2d 74 72 65 65 5d 20 77 69 74 68 20 61 0a 2a 2a  -tree] with a.**
1e730 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
1e740 6e 73 20 6e 6f 20 6c 65 73 73 20 74 68 61 6e 20  ns no less than 
1e750 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50 34 2e  the value of P4.
1e760 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1e770 20 4f 70 65 6e 57 72 69 74 65 2c 20 52 65 6f 70   OpenWrite, Reop
1e780 65 6e 49 64 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  enIdx.*/./* Opco
1e790 64 65 3a 20 52 65 6f 70 65 6e 49 64 78 20 50 31  de: ReopenIdx P1
1e7a0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
1e7b0 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50  Synopsis: root=P
1e7c0 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 54  2 iDb=P3.**.** T
1e7d0 68 65 20 52 65 6f 70 65 6e 49 64 78 20 6f 70 63  he ReopenIdx opc
1e7e0 6f 64 65 20 77 6f 72 6b 73 20 6c 69 6b 65 20 4f  ode works like O
1e7f0 50 5f 4f 70 65 6e 52 65 61 64 20 65 78 63 65 70  P_OpenRead excep
1e800 74 20 74 68 61 74 20 69 74 20 66 69 72 73 74 0a  t that it first.
1e810 2a 2a 20 63 68 65 63 6b 73 20 74 6f 20 73 65 65  ** checks to see
1e820 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 6f   if the cursor o
1e830 6e 20 50 31 20 69 73 20 61 6c 72 65 61 64 79 20  n P1 is already 
1e840 6f 70 65 6e 20 6f 6e 20 74 68 65 20 73 61 6d 65  open on the same
1e850 0a 2a 2a 20 62 2d 74 72 65 65 20 61 6e 64 20 69  .** b-tree and i
1e860 66 20 69 74 20 69 73 20 74 68 69 73 20 6f 70 63  f it is this opc
1e870 6f 64 65 20 62 65 63 6f 6d 65 73 20 61 20 6e 6f  ode becomes a no
1e880 2d 6f 70 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  -op.  In other w
1e890 6f 72 64 73 2c 0a 2a 2a 20 69 66 20 74 68 65 20  ords,.** if the 
1e8a0 63 75 72 73 6f 72 20 69 73 20 61 6c 72 65 61 64  cursor is alread
1e8b0 79 20 6f 70 65 6e 2c 20 64 6f 20 6e 6f 74 20 72  y open, do not r
1e8c0 65 6f 70 65 6e 20 69 74 2e 0a 2a 2a 0a 2a 2a 20  eopen it..**.** 
1e8d0 54 68 65 20 52 65 6f 70 65 6e 49 64 78 20 6f 70  The ReopenIdx op
1e8e0 63 6f 64 65 20 6d 61 79 20 6f 6e 6c 79 20 62 65  code may only be
1e8f0 20 75 73 65 64 20 77 69 74 68 20 50 35 3d 3d 30   used with P5==0
1e900 20 6f 72 20 50 35 3d 3d 4f 50 46 4c 41 47 5f 53   or P5==OPFLAG_S
1e910 45 45 4b 45 51 0a 2a 2a 20 61 6e 64 20 77 69 74  EEKEQ.** and wit
1e920 68 20 50 34 20 62 65 69 6e 67 20 61 20 50 34 5f  h P4 being a P4_
1e930 4b 45 59 49 4e 46 4f 20 6f 62 6a 65 63 74 2e 20  KEYINFO object. 
1e940 20 46 75 72 74 68 65 72 6d 6f 72 65 2c 20 74 68   Furthermore, th
1e950 65 20 50 33 20 76 61 6c 75 65 20 6d 75 73 74 0a  e P3 value must.
1e960 2a 2a 20 62 65 20 74 68 65 20 73 61 6d 65 20 61  ** be the same a
1e970 73 20 65 76 65 72 79 20 6f 74 68 65 72 20 52 65  s every other Re
1e980 6f 70 65 6e 49 64 78 20 6f 72 20 4f 70 65 6e 52  openIdx or OpenR
1e990 65 61 64 20 66 6f 72 20 74 68 65 20 73 61 6d 65  ead for the same
1e9a0 20 63 75 72 73 6f 72 0a 2a 2a 20 6e 75 6d 62 65   cursor.** numbe
1e9b0 72 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  r..**.** Allowed
1e9c0 20 50 35 20 62 69 74 73 3a 0a 2a 2a 20 3c 75 6c   P5 bits:.** <ul
1e9d0 3e 0a 2a 2a 20 3c 6c 69 3e 20 20 3c 62 3e 30 78  >.** <li>  <b>0x
1e9e0 30 32 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51  02 OPFLAG_SEEKEQ
1e9f0 3c 2f 62 3e 3a 20 54 68 69 73 20 63 75 72 73 6f  </b>: This curso
1ea00 72 20 77 69 6c 6c 20 6f 6e 6c 79 20 62 65 20 75  r will only be u
1ea10 73 65 64 20 66 6f 72 0a 2a 2a 20 20 20 20 20 20  sed for.**      
1ea20 20 65 71 75 61 6c 69 74 79 20 6c 6f 6f 6b 75 70   equality lookup
1ea30 73 20 28 69 6d 70 6c 65 6d 65 6e 74 65 64 20 61  s (implemented a
1ea40 73 20 61 20 70 61 69 72 20 6f 66 20 6f 70 63 6f  s a pair of opco
1ea50 64 65 73 20 4f 50 5f 53 65 65 6b 47 45 2f 4f 50  des OP_SeekGE/OP
1ea60 5f 49 64 78 47 54 0a 2a 2a 20 20 20 20 20 20 20  _IdxGT.**       
1ea70 6f 66 20 4f 50 5f 53 65 65 6b 4c 45 2f 4f 50 5f  of OP_SeekLE/OP_
1ea80 49 64 78 47 54 29 0a 2a 2a 20 3c 2f 75 6c 3e 0a  IdxGT).** </ul>.
1ea90 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1eaa0 4f 50 5f 4f 70 65 6e 52 65 61 64 2c 20 4f 50 5f  OP_OpenRead, OP_
1eab0 4f 70 65 6e 57 72 69 74 65 0a 2a 2f 0a 2f 2a 20  OpenWrite.*/./* 
1eac0 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 57 72 69 74  Opcode: OpenWrit
1ead0 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
1eae0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f  .** Synopsis: ro
1eaf0 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a  ot=P2 iDb=P3.**.
1eb00 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2f 77  ** Open a read/w
1eb10 72 69 74 65 20 63 75 72 73 6f 72 20 6e 61 6d 65  rite cursor name
1eb20 64 20 50 31 20 6f 6e 20 74 68 65 20 74 61 62 6c  d P1 on the tabl
1eb30 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65  e or index whose
1eb40 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 69 73   root.** page is
1eb50 20 50 32 20 28 6f 72 20 77 68 6f 73 65 20 72 6f   P2 (or whose ro
1eb60 6f 74 20 70 61 67 65 20 69 73 20 68 65 6c 64 20  ot page is held 
1eb70 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 69  in register P2 i
1eb80 66 20 74 68 65 0a 2a 2a 20 4f 50 46 4c 41 47 5f  f the.** OPFLAG_
1eb90 50 32 49 53 52 45 47 20 62 69 74 20 69 73 20 73  P2ISREG bit is s
1eba0 65 74 20 69 6e 20 50 35 20 2d 20 73 65 65 20 62  et in P5 - see b
1ebb0 65 6c 6f 77 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  elow)..**.** The
1ebc0 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65   P4 value may be
1ebd0 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67   either an integ
1ebe0 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72  er (P4_INT32) or
1ebf0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a   a pointer to.**
1ec00 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63   a KeyInfo struc
1ec10 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f  ture (P4_KEYINFO
1ec20 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70 6f  ). If it is a po
1ec30 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e  inter to a KeyIn
1ec40 66 6f 20 0a 2a 2a 20 6f 62 6a 65 63 74 2c 20 74  fo .** object, t
1ec50 68 65 6e 20 74 61 62 6c 65 20 62 65 69 6e 67 20  hen table being 
1ec60 6f 70 65 6e 65 64 20 6d 75 73 74 20 62 65 20 61  opened must be a
1ec70 6e 20 5b 69 6e 64 65 78 20 62 2d 74 72 65 65 5d  n [index b-tree]
1ec80 20 77 68 65 72 65 20 74 68 65 0a 2a 2a 20 4b 65   where the.** Ke
1ec90 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20 64 65 66  yInfo object def
1eca0 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65 6e 74  ines the content
1ecb0 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a   and collating .
1ecc0 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74  ** sequence of t
1ecd0 68 61 74 20 69 6e 64 65 78 20 62 2d 74 72 65 65  hat index b-tree
1ece0 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20  . Otherwise, if 
1ecf0 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  P4 is an integer
1ed00 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 74 68 65 6e   .** value, then
1ed10 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
1ed20 20 6f 70 65 6e 65 64 20 6d 75 73 74 20 62 65 20   opened must be 
1ed30 61 20 5b 74 61 62 6c 65 20 62 2d 74 72 65 65 5d  a [table b-tree]
1ed40 20 77 69 74 68 20 61 0a 2a 2a 20 6e 75 6d 62 65   with a.** numbe
1ed50 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 6e 6f 20  r of columns no 
1ed60 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 76 61  less than the va
1ed70 6c 75 65 20 6f 66 20 50 34 2e 0a 2a 2a 0a 2a 2a  lue of P4..**.**
1ed80 20 41 6c 6c 6f 77 65 64 20 50 35 20 62 69 74 73   Allowed P5 bits
1ed90 3a 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69  :.** <ul>.** <li
1eda0 3e 20 20 3c 62 3e 30 78 30 32 20 4f 50 46 4c 41  >  <b>0x02 OPFLA
1edb0 47 5f 53 45 45 4b 45 51 3c 2f 62 3e 3a 20 54 68  G_SEEKEQ</b>: Th
1edc0 69 73 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 6f  is cursor will o
1edd0 6e 6c 79 20 62 65 20 75 73 65 64 20 66 6f 72 0a  nly be used for.
1ede0 2a 2a 20 20 20 20 20 20 20 65 71 75 61 6c 69 74  **       equalit
1edf0 79 20 6c 6f 6f 6b 75 70 73 20 28 69 6d 70 6c 65  y lookups (imple
1ee00 6d 65 6e 74 65 64 20 61 73 20 61 20 70 61 69 72  mented as a pair
1ee10 20 6f 66 20 6f 70 63 6f 64 65 73 20 4f 50 5f 53   of opcodes OP_S
1ee20 65 65 6b 47 45 2f 4f 50 5f 49 64 78 47 54 0a 2a  eekGE/OP_IdxGT.*
1ee30 2a 20 20 20 20 20 20 20 6f 66 20 4f 50 5f 53 65  *       of OP_Se
1ee40 65 6b 4c 45 2f 4f 50 5f 49 64 78 47 54 29 0a 2a  ekLE/OP_IdxGT).*
1ee50 2a 20 3c 6c 69 3e 20 20 3c 62 3e 30 78 30 38 20  * <li>  <b>0x08 
1ee60 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45  OPFLAG_FORDELETE
1ee70 3c 2f 62 3e 3a 20 54 68 69 73 20 63 75 72 73 6f  </b>: This curso
1ee80 72 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20 74  r is used only t
1ee90 6f 20 73 65 65 6b 0a 2a 2a 20 20 20 20 20 20 20  o seek.**       
1eea0 61 6e 64 20 73 75 62 73 65 71 75 65 6e 74 6c 79  and subsequently
1eeb0 20 64 65 6c 65 74 65 20 65 6e 74 72 69 65 73 20   delete entries 
1eec0 69 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65  in an index btre
1eed0 65 2e 20 20 54 68 69 73 20 69 73 20 61 0a 2a 2a  e.  This is a.**
1eee0 20 20 20 20 20 20 20 68 69 6e 74 20 74 6f 20 74         hint to t
1eef0 68 65 20 73 74 6f 72 61 67 65 20 65 6e 67 69 6e  he storage engin
1ef00 65 20 74 68 61 74 20 74 68 65 20 73 74 6f 72 61  e that the stora
1ef10 67 65 20 65 6e 67 69 6e 65 20 69 73 20 61 6c 6c  ge engine is all
1ef20 6f 77 65 64 20 74 6f 0a 2a 2a 20 20 20 20 20 20  owed to.**      
1ef30 20 69 67 6e 6f 72 65 2e 20 20 54 68 65 20 68 69   ignore.  The hi
1ef40 6e 74 20 69 73 20 6e 6f 74 20 75 73 65 64 20 62  nt is not used b
1ef50 79 20 74 68 65 20 6f 66 66 69 63 69 61 6c 20 53  y the official S
1ef60 51 4c 69 74 65 20 62 2a 74 72 65 65 20 73 74 6f  QLite b*tree sto
1ef70 72 61 67 65 0a 2a 2a 20 20 20 20 20 20 20 65 6e  rage.**       en
1ef80 67 69 6e 65 2c 20 62 75 74 20 69 73 20 75 73 65  gine, but is use
1ef90 64 20 62 79 20 43 4f 4d 44 42 32 2e 0a 2a 2a 20  d by COMDB2..** 
1efa0 3c 6c 69 3e 20 20 3c 62 3e 30 78 31 30 20 4f 50  <li>  <b>0x10 OP
1efb0 46 4c 41 47 5f 50 32 49 53 52 45 47 3c 2f 62 3e  FLAG_P2ISREG</b>
1efc0 3a 20 55 73 65 20 74 68 65 20 63 6f 6e 74 65 6e  : Use the conten
1efd0 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32  t of register P2
1efe0 0a 2a 2a 20 20 20 20 20 20 20 61 73 20 74 68 65  .**       as the
1eff0 20 72 6f 6f 74 20 70 61 67 65 2c 20 6e 6f 74 20   root page, not 
1f000 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50 32 20  the value of P2 
1f010 69 74 73 65 6c 66 2e 0a 2a 2a 20 3c 2f 75 6c 3e  itself..** </ul>
1f020 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
1f030 72 75 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6c 69  ruction works li
1f040 6b 65 20 4f 70 65 6e 52 65 61 64 20 65 78 63 65  ke OpenRead exce
1f050 70 74 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73  pt that it opens
1f060 20 74 68 65 20 63 75 72 73 6f 72 0a 2a 2a 20 69   the cursor.** i
1f070 6e 20 72 65 61 64 2f 77 72 69 74 65 20 6d 6f 64  n read/write mod
1f080 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  e..**.** See als
1f090 6f 3a 20 4f 50 5f 4f 70 65 6e 52 65 61 64 2c 20  o: OP_OpenRead, 
1f0a0 4f 50 5f 52 65 6f 70 65 6e 49 64 78 0a 2a 2f 0a  OP_ReopenIdx.*/.
1f0b0 63 61 73 65 20 4f 50 5f 52 65 6f 70 65 6e 49 64  case OP_ReopenId
1f0c0 78 3a 20 7b 0a 20 20 69 6e 74 20 6e 46 69 65 6c  x: {.  int nFiel
1f0d0 64 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b  d;.  KeyInfo *pK
1f0e0 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 70 32  eyInfo;.  int p2
1f0f0 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69  ;.  int iDb;.  i
1f100 6e 74 20 77 72 46 6c 61 67 3b 0a 20 20 42 74 72  nt wrFlag;.  Btr
1f110 65 65 20 2a 70 58 3b 0a 20 20 56 64 62 65 43 75  ee *pX;.  VdbeCu
1f120 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 44 62  rsor *pCur;.  Db
1f130 20 2a 70 44 62 3b 0a 0a 20 20 61 73 73 65 72 74   *pDb;..  assert
1f140 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20  ( pOp->p5==0 || 
1f150 70 4f 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f  pOp->p5==OPFLAG_
1f160 53 45 45 4b 45 51 20 29 3b 0a 20 20 61 73 73 65  SEEKEQ );.  asse
1f170 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
1f180 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20  =P4_KEYINFO );. 
1f190 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72   pCur = p->apCsr
1f1a0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
1f1b0 20 70 43 75 72 20 26 26 20 70 43 75 72 2d 3e 70   pCur && pCur->p
1f1c0 67 6e 6f 52 6f 6f 74 3d 3d 28 75 33 32 29 70 4f  gnoRoot==(u32)pO
1f1d0 70 2d 3e 70 32 20 29 7b 0a 20 20 20 20 61 73 73  p->p2 ){.    ass
1f1e0 65 72 74 28 20 70 43 75 72 2d 3e 69 44 62 3d 3d  ert( pCur->iDb==
1f1f0 70 4f 70 2d 3e 70 33 20 29 3b 20 20 20 20 20 20  pOp->p3 );      
1f200 2f 2a 20 47 75 61 72 61 6e 74 65 65 64 20 62 79  /* Guaranteed by
1f210 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
1f220 74 6f 72 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20  tor */.    goto 
1f230 6f 70 65 6e 5f 63 75 72 73 6f 72 5f 73 65 74 5f  open_cursor_set_
1f240 68 69 6e 74 73 3b 0a 20 20 7d 0a 20 20 2f 2a 20  hints;.  }.  /* 
1f250 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  If the cursor is
1f260 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 6f   not currently o
1f270 70 65 6e 20 6f 72 20 69 73 20 6f 70 65 6e 20 6f  pen or is open o
1f280 6e 20 61 20 64 69 66 66 65 72 65 6e 74 0a 20 20  n a different.  
1f290 2a 2a 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 66  ** index, then f
1f2a0 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f  all through into
1f2b0 20 4f 50 5f 4f 70 65 6e 52 65 61 64 20 74 6f 20   OP_OpenRead to 
1f2c0 66 6f 72 63 65 20 61 20 72 65 6f 70 65 6e 20 2a  force a reopen *
1f2d0 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52 65  /.case OP_OpenRe
1f2e0 61 64 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e  ad:.case OP_Open
1f2f0 57 72 69 74 65 3a 0a 0a 20 20 61 73 73 65 72 74  Write:..  assert
1f300 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
1f310 50 5f 4f 70 65 6e 57 72 69 74 65 20 7c 7c 20 70  P_OpenWrite || p
1f320 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70  Op->p5==0 || pOp
1f330 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f 53 45 45  ->p5==OPFLAG_SEE
1f340 4b 45 51 20 29 3b 0a 20 20 61 73 73 65 72 74 28  KEQ );.  assert(
1f350 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b   p->bIsReader );
1f360 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1f370 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 52  opcode==OP_OpenR
1f380 65 61 64 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  ead || pOp->opco
1f390 64 65 3d 3d 4f 50 5f 52 65 6f 70 65 6e 49 64 78  de==OP_ReopenIdx
1f3a0 0a 20 20 20 20 20 20 20 20 20 20 7c 7c 20 70 2d  .          || p-
1f3b0 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
1f3c0 0a 20 20 69 66 28 20 70 2d 3e 65 78 70 69 72 65  .  if( p->expire
1f3d0 64 3d 3d 31 20 29 7b 0a 20 20 20 20 72 63 20 3d  d==1 ){.    rc =
1f3e0 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f   SQLITE_ABORT_RO
1f3f0 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 67 6f 74 6f  LLBACK;.    goto
1f400 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1f410 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65  ror;.  }..  nFie
1f420 6c 64 20 3d 20 30 3b 0a 20 20 70 4b 65 79 49 6e  ld = 0;.  pKeyIn
1f430 66 6f 20 3d 20 30 3b 0a 20 20 70 32 20 3d 20 70  fo = 0;.  p2 = p
1f440 4f 70 2d 3e 70 32 3b 0a 20 20 69 44 62 20 3d 20  Op->p2;.  iDb = 
1f450 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72  pOp->p3;.  asser
1f460 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62  t( iDb>=0 && iDb
1f470 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
1f480 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
1f490 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69  (p->btreeMask, i
1f4a0 44 62 29 20 29 3b 0a 20 20 70 44 62 20 3d 20 26  Db) );.  pDb = &
1f4b0 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 20 20  db->aDb[iDb];.  
1f4c0 70 58 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20  pX = pDb->pBt;. 
1f4d0 20 61 73 73 65 72 74 28 20 70 58 21 3d 30 20 29   assert( pX!=0 )
1f4e0 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ;.  if( pOp->opc
1f4f0 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74  ode==OP_OpenWrit
1f500 65 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  e ){.    assert(
1f510 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54   OPFLAG_FORDELET
1f520 45 3d 3d 42 54 52 45 45 5f 46 4f 52 44 45 4c 45  E==BTREE_FORDELE
1f530 54 45 20 29 3b 0a 20 20 20 20 77 72 46 6c 61 67  TE );.    wrFlag
1f540 20 3d 20 42 54 52 45 45 5f 57 52 43 53 52 20 7c   = BTREE_WRCSR |
1f550 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c   (pOp->p5 & OPFL
1f560 41 47 5f 46 4f 52 44 45 4c 45 54 45 29 3b 0a 20  AG_FORDELETE);. 
1f570 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
1f580 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c  e3SchemaMutexHel
1f590 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b  d(db, iDb, 0) );
1f5a0 0a 20 20 20 20 69 66 28 20 70 44 62 2d 3e 70 53  .    if( pDb->pS
1f5b0 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d  chema->file_form
1f5c0 61 74 20 3c 20 70 2d 3e 6d 69 6e 57 72 69 74 65  at < p->minWrite
1f5d0 46 69 6c 65 46 6f 72 6d 61 74 20 29 7b 0a 20 20  FileFormat ){.  
1f5e0 20 20 20 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46      p->minWriteF
1f5f0 69 6c 65 46 6f 72 6d 61 74 20 3d 20 70 44 62 2d  ileFormat = pDb-
1f600 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66  >pSchema->file_f
1f610 6f 72 6d 61 74 3b 0a 20 20 20 20 7d 0a 20 20 7d  ormat;.    }.  }
1f620 65 6c 73 65 7b 0a 20 20 20 20 77 72 46 6c 61 67  else{.    wrFlag
1f630 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20   = 0;.  }.  if( 
1f640 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
1f650 5f 50 32 49 53 52 45 47 20 29 7b 0a 20 20 20 20  _P2ISREG ){.    
1f660 61 73 73 65 72 74 28 20 70 32 3e 30 20 29 3b 0a  assert( p2>0 );.
1f670 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3c 3d      assert( p2<=
1f680 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
1f690 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  nCursor) );.    
1f6a0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
1f6b0 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74  ode==OP_OpenWrit
1f6c0 65 20 29 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20  e );.    pIn2 = 
1f6d0 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 61  &aMem[p2];.    a
1f6e0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
1f6f0 64 28 70 49 6e 32 29 20 29 3b 0a 20 20 20 20 61  d(pIn2) );.    a
1f700 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c  ssert( (pIn2->fl
1f710 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d  ags & MEM_Int)!=
1f720 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 );.    sqlite3
1f730 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
1f740 79 28 70 49 6e 32 29 3b 0a 20 20 20 20 70 32 20  y(pIn2);.    p2 
1f750 3d 20 28 69 6e 74 29 70 49 6e 32 2d 3e 75 2e 69  = (int)pIn2->u.i
1f760 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20 70 32 20  ;.    /* The p2 
1f770 76 61 6c 75 65 20 61 6c 77 61 79 73 20 63 6f 6d  value always com
1f780 65 73 20 66 72 6f 6d 20 61 20 70 72 69 6f 72 20  es from a prior 
1f790 4f 50 5f 43 72 65 61 74 65 42 74 72 65 65 20 6f  OP_CreateBtree o
1f7a0 70 63 6f 64 65 20 61 6e 64 0a 20 20 20 20 2a 2a  pcode and.    **
1f7b0 20 74 68 61 74 20 6f 70 63 6f 64 65 20 77 69 6c   that opcode wil
1f7c0 6c 20 61 6c 77 61 79 73 20 73 65 74 20 74 68 65  l always set the
1f7d0 20 70 32 20 76 61 6c 75 65 20 74 6f 20 32 20 6f   p2 value to 2 o
1f7e0 72 20 6d 6f 72 65 20 6f 72 20 65 6c 73 65 20 66  r more or else f
1f7f0 61 69 6c 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74  ail..    ** If t
1f800 68 65 72 65 20 77 65 72 65 20 61 20 66 61 69 6c  here were a fail
1f810 75 72 65 2c 20 74 68 65 20 70 72 65 70 61 72 65  ure, the prepare
1f820 64 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c  d statement woul
1f830 64 20 68 61 76 65 20 68 61 6c 74 65 64 0a 20 20  d have halted.  
1f840 20 20 2a 2a 20 62 65 66 6f 72 65 20 72 65 61 63    ** before reac
1f850 68 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75  hing this instru
1f860 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 73  ction. */.    as
1f870 73 65 72 74 28 20 70 32 3e 3d 32 20 29 3b 0a 20  sert( p2>=2 );. 
1f880 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34   }.  if( pOp->p4
1f890 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f  type==P4_KEYINFO
1f8a0 20 29 7b 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f   ){.    pKeyInfo
1f8b0 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49   = pOp->p4.pKeyI
1f8c0 6e 66 6f 3b 0a 20 20 20 20 61 73 73 65 72 74 28  nfo;.    assert(
1f8d0 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d   pKeyInfo->enc==
1f8e0 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 20 20 61  ENC(db) );.    a
1f8f0 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d  ssert( pKeyInfo-
1f900 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20 20 6e  >db==db );.    n
1f910 46 69 65 6c 64 20 3d 20 70 4b 65 79 49 6e 66 6f  Field = pKeyInfo
1f920 2d 3e 6e 41 6c 6c 46 69 65 6c 64 3b 0a 20 20 7d  ->nAllField;.  }
1f930 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 34  else if( pOp->p4
1f940 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
1f950 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70  {.    nField = p
1f960 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 7d 0a 20 20  Op->p4.i;.  }.  
1f970 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1f980 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1f990 6e 46 69 65 6c 64 3e 3d 30 20 29 3b 0a 20 20 74  nField>=0 );.  t
1f9a0 65 73 74 63 61 73 65 28 20 6e 46 69 65 6c 64 3d  estcase( nField=
1f9b0 3d 30 20 29 3b 20 20 2f 2a 20 54 61 62 6c 65 20  =0 );  /* Table 
1f9c0 77 69 74 68 20 49 4e 54 45 47 45 52 20 50 52 49  with INTEGER PRI
1f9d0 4d 41 52 59 20 4b 45 59 20 61 6e 64 20 6e 6f 74  MARY KEY and not
1f9e0 68 69 6e 67 20 65 6c 73 65 20 2a 2f 0a 20 20 70  hing else */.  p
1f9f0 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  Cur = allocateCu
1fa00 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c  rsor(p, pOp->p1,
1fa10 20 6e 46 69 65 6c 64 2c 20 69 44 62 2c 20 43 55   nField, iDb, CU
1fa20 52 54 59 50 45 5f 42 54 52 45 45 29 3b 0a 20 20  RTYPE_BTREE);.  
1fa30 69 66 28 20 70 43 75 72 3d 3d 30 20 29 20 67 6f  if( pCur==0 ) go
1fa40 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 75  to no_mem;.  pCu
1fa50 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  r->nullRow = 1;.
1fa60 20 20 70 43 75 72 2d 3e 69 73 4f 72 64 65 72 65    pCur->isOrdere
1fa70 64 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e 70  d = 1;.  pCur->p
1fa80 67 6e 6f 52 6f 6f 74 20 3d 20 70 32 3b 0a 23 69  gnoRoot = p2;.#i
1fa90 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
1faa0 47 0a 20 20 70 43 75 72 2d 3e 77 72 46 6c 61 67  G.  pCur->wrFlag
1fab0 20 3d 20 77 72 46 6c 61 67 3b 0a 23 65 6e 64 69   = wrFlag;.#endi
1fac0 66 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  f.  rc = sqlite3
1fad0 42 74 72 65 65 43 75 72 73 6f 72 28 70 58 2c 20  BtreeCursor(pX, 
1fae0 70 32 2c 20 77 72 46 6c 61 67 2c 20 70 4b 65 79  p2, wrFlag, pKey
1faf0 49 6e 66 6f 2c 20 70 43 75 72 2d 3e 75 63 2e 70  Info, pCur->uc.p
1fb00 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 75 72 2d  Cursor);.  pCur-
1fb10 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79  >pKeyInfo = pKey
1fb20 49 6e 66 6f 3b 0a 20 20 2f 2a 20 53 65 74 20 74  Info;.  /* Set t
1fb30 68 65 20 56 64 62 65 43 75 72 73 6f 72 2e 69 73  he VdbeCursor.is
1fb40 54 61 62 6c 65 20 76 61 72 69 61 62 6c 65 2e 20  Table variable. 
1fb50 50 72 65 76 69 6f 75 73 20 76 65 72 73 69 6f 6e  Previous version
1fb60 73 20 6f 66 0a 20 20 2a 2a 20 53 51 4c 69 74 65  s of.  ** SQLite
1fb70 20 75 73 65 64 20 74 6f 20 63 68 65 63 6b 20 69   used to check i
1fb80 66 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  f the root-page 
1fb90 66 6c 61 67 73 20 77 65 72 65 20 73 61 6e 65 20  flags were sane 
1fba0 61 74 20 74 68 69 73 20 70 6f 69 6e 74 0a 20 20  at this point.  
1fbb0 2a 2a 20 61 6e 64 20 72 65 70 6f 72 74 20 64 61  ** and report da
1fbc0 74 61 62 61 73 65 20 63 6f 72 72 75 70 74 69 6f  tabase corruptio
1fbd0 6e 20 69 66 20 74 68 65 79 20 77 65 72 65 20 6e  n if they were n
1fbe0 6f 74 2c 20 62 75 74 20 74 68 69 73 20 63 68 65  ot, but this che
1fbf0 63 6b 20 68 61 73 0a 20 20 2a 2a 20 73 69 6e 63  ck has.  ** sinc
1fc00 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65  e moved into the
1fc10 20 62 74 72 65 65 20 6c 61 79 65 72 2e 20 20 2a   btree layer.  *
1fc20 2f 20 20 0a 20 20 70 43 75 72 2d 3e 69 73 54 61  /  .  pCur->isTa
1fc30 62 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74 79 70  ble = pOp->p4typ
1fc40 65 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a 0a  e!=P4_KEYINFO;..
1fc50 6f 70 65 6e 5f 63 75 72 73 6f 72 5f 73 65 74 5f  open_cursor_set_
1fc60 68 69 6e 74 73 3a 0a 20 20 61 73 73 65 72 74 28  hints:.  assert(
1fc70 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 3d   OPFLAG_BULKCSR=
1fc80 3d 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 20  =BTREE_BULKLOAD 
1fc90 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46  );.  assert( OPF
1fca0 4c 41 47 5f 53 45 45 4b 45 51 3d 3d 42 54 52 45  LAG_SEEKEQ==BTRE
1fcb0 45 5f 53 45 45 4b 5f 45 51 20 29 3b 0a 20 20 74  E_SEEK_EQ );.  t
1fcc0 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35  estcase( pOp->p5
1fcd0 20 26 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53   & OPFLAG_BULKCS
1fce0 52 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  R );.#ifdef SQLI
1fcf0 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52  TE_ENABLE_CURSOR
1fd00 5f 48 49 4e 54 53 0a 20 20 74 65 73 74 63 61 73  _HINTS.  testcas
1fd10 65 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46  e( pOp->p2 & OPF
1fd20 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a 23 65  LAG_SEEKEQ );.#e
1fd30 6e 64 69 66 0a 20 20 73 71 6c 69 74 65 33 42 74  ndif.  sqlite3Bt
1fd40 72 65 65 43 75 72 73 6f 72 48 69 6e 74 46 6c 61  reeCursorHintFla
1fd50 67 73 28 70 43 75 72 2d 3e 75 63 2e 70 43 75 72  gs(pCur->uc.pCur
1fd60 73 6f 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20  sor,.           
1fd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd80 20 20 20 20 28 70 4f 70 2d 3e 70 35 20 26 20 28      (pOp->p5 & (
1fd90 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 7c 4f  OPFLAG_BULKCSR|O
1fda0 50 46 4c 41 47 5f 53 45 45 4b 45 51 29 29 29 3b  PFLAG_SEEKEQ)));
1fdb0 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
1fdc0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1fdd0 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ror;.  break;.}.
1fde0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
1fdf0 44 75 70 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Dup P1 P2 * * *.
1fe00 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77  **.** Open a new
1fe10 20 63 75 72 73 6f 72 20 50 31 20 74 68 61 74 20   cursor P1 that 
1fe20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73 61  points to the sa
1fe30 6d 65 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62  me ephemeral tab
1fe40 6c 65 20 61 73 0a 2a 2a 20 63 75 72 73 6f 72 20  le as.** cursor 
1fe50 50 32 2e 20 20 54 68 65 20 50 32 20 63 75 72 73  P2.  The P2 curs
1fe60 6f 72 20 6d 75 73 74 20 68 61 76 65 20 62 65 65  or must have bee
1fe70 6e 20 6f 70 65 6e 65 64 20 62 79 20 61 20 70 72  n opened by a pr
1fe80 69 6f 72 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d  ior OP_OpenEphem
1fe90 65 72 61 6c 0a 2a 2a 20 6f 70 63 6f 64 65 2e 20  eral.** opcode. 
1fea0 20 4f 6e 6c 79 20 65 70 68 65 6d 65 72 61 6c 20   Only ephemeral 
1feb0 63 75 72 73 6f 72 73 20 6d 61 79 20 62 65 20 64  cursors may be d
1fec0 75 70 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a  uplicated..**.**
1fed0 20 44 75 70 6c 69 63 61 74 65 20 65 70 68 65 6d   Duplicate ephem
1fee0 65 72 61 6c 20 63 75 72 73 6f 72 73 20 61 72 65  eral cursors are
1fef0 20 75 73 65 64 20 66 6f 72 20 73 65 6c 66 2d 6a   used for self-j
1ff00 6f 69 6e 73 20 6f 66 20 6d 61 74 65 72 69 61 6c  oins of material
1ff10 69 7a 65 64 20 76 69 65 77 73 2e 0a 2a 2f 0a 63  ized views..*/.c
1ff20 61 73 65 20 4f 50 5f 4f 70 65 6e 44 75 70 3a 20  ase OP_OpenDup: 
1ff30 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
1ff40 70 4f 72 69 67 3b 20 20 20 20 2f 2a 20 54 68 65  pOrig;    /* The
1ff50 20 6f 72 69 67 69 6e 61 6c 20 63 75 72 73 6f 72   original cursor
1ff60 20 74 6f 20 62 65 20 64 75 70 6c 69 63 61 74 65   to be duplicate
1ff70 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  d */.  VdbeCurso
1ff80 72 20 2a 70 43 78 3b 20 20 20 20 20 20 2f 2a 20  r *pCx;      /* 
1ff90 54 68 65 20 6e 65 77 20 63 75 72 73 6f 72 20 2a  The new cursor *
1ffa0 2f 0a 0a 20 20 70 4f 72 69 67 20 3d 20 70 2d 3e  /..  pOrig = p->
1ffb0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  apCsr[pOp->p2];.
1ffc0 20 20 61 73 73 65 72 74 28 20 70 4f 72 69 67 2d    assert( pOrig-
1ffd0 3e 70 42 74 78 21 3d 30 20 29 3b 20 20 2f 2a 20  >pBtx!=0 );  /* 
1ffe0 4f 6e 6c 79 20 65 70 68 65 6d 65 72 61 6c 20 63  Only ephemeral c
1fff0 75 72 73 6f 72 73 20 63 61 6e 20 62 65 20 64 75  ursors can be du
20000 70 6c 69 63 61 74 65 64 20 2a 2f 0a 0a 20 20 70  plicated */..  p
20010 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72  Cx = allocateCur
20020 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20  sor(p, pOp->p1, 
20030 70 4f 72 69 67 2d 3e 6e 46 69 65 6c 64 2c 20 2d  pOrig->nField, -
20040 31 2c 20 43 55 52 54 59 50 45 5f 42 54 52 45 45  1, CURTYPE_BTREE
20050 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20  );.  if( pCx==0 
20060 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
20070 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20   pCx->nullRow = 
20080 31 3b 0a 20 20 70 43 78 2d 3e 69 73 45 70 68 65  1;.  pCx->isEphe
20090 6d 65 72 61 6c 20 3d 20 31 3b 0a 20 20 70 43 78  meral = 1;.  pCx
200a0 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 72  ->pKeyInfo = pOr
200b0 69 67 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  ig->pKeyInfo;.  
200c0 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70  pCx->isTable = p
200d0 4f 72 69 67 2d 3e 69 73 54 61 62 6c 65 3b 0a 20  Orig->isTable;. 
200e0 20 70 43 78 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d   pCx->pgnoRoot =
200f0 20 70 4f 72 69 67 2d 3e 70 67 6e 6f 52 6f 6f 74   pOrig->pgnoRoot
20100 3b 0a 20 20 70 43 78 2d 3e 69 73 4f 72 64 65 72  ;.  pCx->isOrder
20110 65 64 20 3d 20 70 4f 72 69 67 2d 3e 69 73 4f 72  ed = pOrig->isOr
20120 64 65 72 65 64 3b 0a 20 20 72 63 20 3d 20 73 71  dered;.  rc = sq
20130 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
20140 28 70 4f 72 69 67 2d 3e 70 42 74 78 2c 20 70 43  (pOrig->pBtx, pC
20150 78 2d 3e 70 67 6e 6f 52 6f 6f 74 2c 20 42 54 52  x->pgnoRoot, BTR
20160 45 45 5f 57 52 43 53 52 2c 0a 20 20 20 20 20 20  EE_WRCSR,.      
20170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20180 20 20 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66      pCx->pKeyInf
20190 6f 2c 20 70 43 78 2d 3e 75 63 2e 70 43 75 72 73  o, pCx->uc.pCurs
201a0 6f 72 29 3b 0a 20 20 2f 2a 20 54 68 65 20 73 71  or);.  /* The sq
201b0 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
201c0 28 29 20 72 6f 75 74 69 6e 65 20 63 61 6e 20 6f  () routine can o
201d0 6e 6c 79 20 66 61 69 6c 20 66 6f 72 20 74 68 65  nly fail for the
201e0 20 66 69 72 73 74 20 63 75 72 73 6f 72 0a 20 20   first cursor.  
201f0 2a 2a 20 6f 70 65 6e 65 64 20 66 6f 72 20 61 20  ** opened for a 
20200 64 61 74 61 62 61 73 65 2e 20 20 53 69 6e 63 65  database.  Since
20210 20 74 68 65 72 65 20 69 73 20 61 6c 72 65 61 64   there is alread
20220 79 20 61 6e 20 6f 70 65 6e 20 63 75 72 73 6f 72  y an open cursor
20230 20 77 68 65 6e 20 74 68 69 73 0a 20 20 2a 2a 20   when this.  ** 
20240 6f 70 63 6f 64 65 20 69 73 20 72 75 6e 2c 20 74  opcode is run, t
20250 68 65 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  he sqlite3BtreeC
20260 75 72 73 6f 72 28 29 20 63 61 6e 6e 6f 74 20 66  ursor() cannot f
20270 61 69 6c 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ail */.  assert(
20280 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
20290 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f  ;.  break;.}.../
202a0 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 45 70  * Opcode: OpenEp
202b0 68 65 6d 65 72 61 6c 20 50 31 20 50 32 20 2a 20  hemeral P1 P2 * 
202c0 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
202d0 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a  s: nColumn=P2.**
202e0 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63  .** Open a new c
202f0 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20 74 72  ursor P1 to a tr
20300 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 2e 0a 2a  ansient table..*
20310 2a 20 54 68 65 20 63 75 72 73 6f 72 20 69 73 20  * The cursor is 
20320 61 6c 77 61 79 73 20 6f 70 65 6e 65 64 20 72 65  always opened re
20330 61 64 2f 77 72 69 74 65 20 65 76 65 6e 20 69 66  ad/write even if
20340 20 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61   .** the main da
20350 74 61 62 61 73 65 20 69 73 20 72 65 61 64 2d 6f  tabase is read-o
20360 6e 6c 79 2e 20 20 54 68 65 20 65 70 68 65 6d 65  nly.  The epheme
20370 72 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 69 73 20  ral.** table is 
20380 64 65 6c 65 74 65 64 20 61 75 74 6f 6d 61 74 69  deleted automati
20390 63 61 6c 6c 79 20 77 68 65 6e 20 74 68 65 20 63  cally when the c
203a0 75 72 73 6f 72 20 69 73 20 63 6c 6f 73 65 64 2e  ursor is closed.
203b0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 75  .**.** If the cu
203c0 72 73 6f 72 20 50 31 20 69 73 20 61 6c 72 65 61  rsor P1 is alrea
203d0 64 79 20 6f 70 65 6e 65 64 20 6f 6e 20 61 6e 20  dy opened on an 
203e0 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 2c  ephemeral table,
203f0 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20 69 73   the table.** is
20400 20 63 6c 65 61 72 65 64 20 28 61 6c 6c 20 63 6f   cleared (all co
20410 6e 74 65 6e 74 20 69 73 20 65 72 61 73 65 64 29  ntent is erased)
20420 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68  ..**.** P2 is th
20430 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
20440 6d 6e 73 20 69 6e 20 74 68 65 20 65 70 68 65 6d  mns in the ephem
20450 65 72 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20 54  eral table..** T
20460 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 73  he cursor points
20470 20 74 6f 20 61 20 42 54 72 65 65 20 74 61 62 6c   to a BTree tabl
20480 65 20 69 66 20 50 34 3d 3d 30 20 61 6e 64 20 74  e if P4==0 and t
20490 6f 20 61 20 42 54 72 65 65 20 69 6e 64 65 78 0a  o a BTree index.
204a0 2a 2a 20 69 66 20 50 34 20 69 73 20 6e 6f 74 20  ** if P4 is not 
204b0 30 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74  0.  If P4 is not
204c0 20 4e 55 4c 4c 2c 20 69 74 20 70 6f 69 6e 74 73   NULL, it points
204d0 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 73 74   to a KeyInfo st
204e0 72 75 63 74 75 72 65 0a 2a 2a 20 74 68 61 74 20  ructure.** that 
204f0 64 65 66 69 6e 65 73 20 74 68 65 20 66 6f 72 6d  defines the form
20500 61 74 20 6f 66 20 6b 65 79 73 20 69 6e 20 74 68  at of keys in th
20510 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 54  e index..**.** T
20520 68 65 20 50 35 20 70 61 72 61 6d 65 74 65 72 20  he P5 parameter 
20530 63 61 6e 20 62 65 20 61 20 6d 61 73 6b 20 6f 66  can be a mask of
20540 20 74 68 65 20 42 54 52 45 45 5f 2a 20 66 6c 61   the BTREE_* fla
20550 67 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20 69 6e  gs defined.** in
20560 20 62 74 72 65 65 2e 68 2e 20 20 54 68 65 73 65   btree.h.  These
20570 20 66 6c 61 67 73 20 63 6f 6e 74 72 6f 6c 20 61   flags control a
20580 73 70 65 63 74 73 20 6f 66 20 74 68 65 20 6f 70  spects of the op
20590 65 72 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68  eration of.** th
205a0 65 20 62 74 72 65 65 2e 20 20 54 68 65 20 42 54  e btree.  The BT
205b0 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c  REE_OMIT_JOURNAL
205c0 20 61 6e 64 20 42 54 52 45 45 5f 53 49 4e 47 4c   and BTREE_SINGL
205d0 45 20 66 6c 61 67 73 20 61 72 65 0a 2a 2a 20 61  E flags are.** a
205e0 64 64 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c  dded automatical
205f0 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ly..*/./* Opcode
20600 3a 20 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78 20  : OpenAutoindex 
20610 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20  P1 P2 * P4 *.** 
20620 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d  Synopsis: nColum
20630 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  n=P2.**.** This 
20640 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 74 68 65  opcode works the
20650 20 73 61 6d 65 20 61 73 20 4f 50 5f 4f 70 65 6e   same as OP_Open
20660 45 70 68 65 6d 65 72 61 6c 2e 20 20 49 74 20 68  Ephemeral.  It h
20670 61 73 20 61 0a 2a 2a 20 64 69 66 66 65 72 65 6e  as a.** differen
20680 74 20 6e 61 6d 65 20 74 6f 20 64 69 73 74 69 6e  t name to distin
20690 67 75 69 73 68 20 69 74 73 20 75 73 65 2e 20 20  guish its use.  
206a0 54 61 62 6c 65 73 20 63 72 65 61 74 65 64 20 75  Tables created u
206b0 73 69 6e 67 0a 2a 2a 20 62 79 20 74 68 69 73 20  sing.** by this 
206c0 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75  opcode will be u
206d0 73 65 64 20 66 6f 72 20 61 75 74 6f 6d 61 74 69  sed for automati
206e0 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74 72  cally created tr
206f0 61 6e 73 69 65 6e 74 0a 2a 2a 20 69 6e 64 69 63  ansient.** indic
20700 65 73 20 69 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f 0a  es in joins..*/.
20710 63 61 73 65 20 4f 50 5f 4f 70 65 6e 41 75 74 6f  case OP_OpenAuto
20720 69 6e 64 65 78 3a 20 0a 63 61 73 65 20 4f 50 5f  index: .case OP_
20730 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 3a 20 7b  OpenEphemeral: {
20740 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
20750 43 78 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70  Cx;.  KeyInfo *p
20760 4b 65 79 49 6e 66 6f 3b 0a 0a 20 20 73 74 61 74  KeyInfo;..  stat
20770 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 76 66 73  ic const int vfs
20780 46 6c 61 67 73 20 3d 20 0a 20 20 20 20 20 20 53  Flags = .      S
20790 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57  QLITE_OPEN_READW
207a0 52 49 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c  RITE |.      SQL
207b0 49 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20  ITE_OPEN_CREATE 
207c0 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f  |.      SQLITE_O
207d0 50 45 4e 5f 45 58 43 4c 55 53 49 56 45 20 7c 0a  PEN_EXCLUSIVE |.
207e0 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
207f0 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f 53 45 20  N_DELETEONCLOSE 
20800 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f  |.      SQLITE_O
20810 50 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f 44 42  PEN_TRANSIENT_DB
20820 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
20830 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65  >p1>=0 );.  asse
20840 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29  rt( pOp->p2>=0 )
20850 3b 0a 20 20 70 43 78 20 3d 20 70 2d 3e 61 70 43  ;.  pCx = p->apC
20860 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  sr[pOp->p1];.  i
20870 66 28 20 70 43 78 20 29 7b 0a 20 20 20 20 2f 2a  f( pCx ){.    /*
20880 20 49 66 20 74 68 65 20 65 70 68 65 72 6d 65 72   If the ephermer
20890 61 6c 20 74 61 62 6c 65 20 69 73 20 61 6c 72 65  al table is alre
208a0 61 64 79 20 6f 70 65 6e 2c 20 65 72 61 73 65 20  ady open, erase 
208b0 61 6c 6c 20 65 78 69 73 74 69 6e 67 20 63 6f 6e  all existing con
208c0 74 65 6e 74 0a 20 20 20 20 2a 2a 20 73 6f 20 74  tent.    ** so t
208d0 68 61 74 20 74 68 65 20 74 61 62 6c 65 20 69 73  hat the table is
208e0 20 65 6d 70 74 79 20 61 67 61 69 6e 2c 20 72 61   empty again, ra
208f0 74 68 65 72 20 74 68 61 6e 20 63 72 65 61 74 69  ther than creati
20900 6e 67 20 61 20 6e 65 77 20 74 61 62 6c 65 2e 20  ng a new table. 
20910 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  */.    assert( p
20920 43 78 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 20  Cx->isEphemeral 
20930 29 3b 0a 20 20 20 20 70 43 78 2d 3e 73 65 71 43  );.    pCx->seqC
20940 6f 75 6e 74 20 3d 20 30 3b 0a 20 20 20 20 70 43  ount = 0;.    pC
20950 78 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  x->cacheStatus =
20960 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
20970 20 20 69 66 28 20 70 43 78 2d 3e 70 42 74 78 20    if( pCx->pBtx 
20980 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  ){.      rc = sq
20990 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72 54  lite3BtreeClearT
209a0 61 62 6c 65 28 70 43 78 2d 3e 70 42 74 78 2c 20  able(pCx->pBtx, 
209b0 70 43 78 2d 3e 70 67 6e 6f 52 6f 6f 74 2c 20 30  pCx->pgnoRoot, 0
209c0 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  );.    }.  }else
209d0 7b 0a 20 20 20 20 70 43 78 20 3d 20 61 6c 6c 6f  {.    pCx = allo
209e0 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f  cateCursor(p, pO
209f0 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20  p->p1, pOp->p2, 
20a00 2d 31 2c 20 43 55 52 54 59 50 45 5f 42 54 52 45  -1, CURTYPE_BTRE
20a10 45 29 3b 0a 20 20 20 20 69 66 28 20 70 43 78 3d  E);.    if( pCx=
20a20 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
20a30 3b 0a 20 20 20 20 70 43 78 2d 3e 69 73 45 70 68  ;.    pCx->isEph
20a40 65 6d 65 72 61 6c 20 3d 20 31 3b 0a 20 20 20 20  emeral = 1;.    
20a50 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
20a60 65 4f 70 65 6e 28 64 62 2d 3e 70 56 66 73 2c 20  eOpen(db->pVfs, 
20a70 30 2c 20 64 62 2c 20 26 70 43 78 2d 3e 70 42 74  0, db, &pCx->pBt
20a80 78 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  x, .            
20a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42 54                BT
20aa0 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c  REE_OMIT_JOURNAL
20ab0 20 7c 20 42 54 52 45 45 5f 53 49 4e 47 4c 45 20   | BTREE_SINGLE 
20ac0 7c 20 70 4f 70 2d 3e 70 35 2c 0a 20 20 20 20 20  | pOp->p5,.     
20ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ae0 20 20 20 20 20 76 66 73 46 6c 61 67 73 29 3b 0a       vfsFlags);.
20af0 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
20b00 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72  TE_OK ){.      r
20b10 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
20b20 42 65 67 69 6e 54 72 61 6e 73 28 70 43 78 2d 3e  BeginTrans(pCx->
20b30 70 42 74 78 2c 20 31 2c 20 30 29 3b 0a 20 20 20  pBtx, 1, 0);.   
20b40 20 7d 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53   }.    if( rc==S
20b50 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
20b60 20 20 2f 2a 20 49 66 20 61 20 74 72 61 6e 73 69    /* If a transi
20b70 65 6e 74 20 69 6e 64 65 78 20 69 73 20 72 65 71  ent index is req
20b80 75 69 72 65 64 2c 20 63 72 65 61 74 65 20 69 74  uired, create it
20b90 20 62 79 20 63 61 6c 6c 69 6e 67 0a 20 20 20 20   by calling.    
20ba0 20 20 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65    ** sqlite3Btre
20bb0 65 43 72 65 61 74 65 54 61 62 6c 65 28 29 20 77  eCreateTable() w
20bc0 69 74 68 20 74 68 65 20 42 54 52 45 45 5f 42 4c  ith the BTREE_BL
20bd0 4f 42 4b 45 59 20 66 6c 61 67 20 62 65 66 6f 72  OBKEY flag befor
20be0 65 0a 20 20 20 20 20 20 2a 2a 20 6f 70 65 6e 69  e.      ** openi
20bf0 6e 67 20 69 74 2e 20 49 66 20 61 20 74 72 61 6e  ng it. If a tran
20c00 73 69 65 6e 74 20 74 61 62 6c 65 20 69 73 20 72  sient table is r
20c10 65 71 75 69 72 65 64 2c 20 6a 75 73 74 20 75 73  equired, just us
20c20 65 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 61  e the.      ** a
20c30 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65  utomatically cre
20c40 61 74 65 64 20 74 61 62 6c 65 20 77 69 74 68 20  ated table with 
20c50 72 6f 6f 74 2d 70 61 67 65 20 31 20 28 61 6e 20  root-page 1 (an 
20c60 42 4c 4f 42 5f 49 4e 54 4b 45 59 20 74 61 62 6c  BLOB_INTKEY tabl
20c70 65 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  e)..      */.   
20c80 20 20 20 69 66 28 20 28 70 43 78 2d 3e 70 4b 65     if( (pCx->pKe
20c90 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f  yInfo = pKeyInfo
20ca0 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49   = pOp->p4.pKeyI
20cb0 6e 66 6f 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  nfo)!=0 ){.     
20cc0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
20cd0 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e  p4type==P4_KEYIN
20ce0 46 4f 20 29 3b 0a 20 20 20 20 20 20 20 20 72 63  FO );.        rc
20cf0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
20d00 72 65 61 74 65 54 61 62 6c 65 28 70 43 78 2d 3e  reateTable(pCx->
20d10 70 42 74 78 2c 20 28 69 6e 74 2a 29 26 70 43 78  pBtx, (int*)&pCx
20d20 2d 3e 70 67 6e 6f 52 6f 6f 74 2c 0a 20 20 20 20  ->pgnoRoot,.    
20d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d50 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 7c   BTREE_BLOBKEY |
20d60 20 70 4f 70 2d 3e 70 35 29 3b 20 0a 20 20 20 20   pOp->p5); .    
20d70 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
20d80 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
20d90 20 20 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e     assert( pCx->
20da0 70 67 6e 6f 52 6f 6f 74 3d 3d 4d 41 53 54 45 52  pgnoRoot==MASTER
20db0 5f 52 4f 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20  _ROOT+1 );.     
20dc0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65       assert( pKe
20dd0 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b  yInfo->db==db );
20de0 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72  .          asser
20df0 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63  t( pKeyInfo->enc
20e00 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 20  ==ENC(db) );.   
20e10 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
20e20 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70  te3BtreeCursor(p
20e30 43 78 2d 3e 70 42 74 78 2c 20 70 43 78 2d 3e 70  Cx->pBtx, pCx->p
20e40 67 6e 6f 52 6f 6f 74 2c 20 42 54 52 45 45 5f 57  gnoRoot, BTREE_W
20e50 52 43 53 52 2c 0a 20 20 20 20 20 20 20 20 20 20  RCSR,.          
20e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e70 20 20 20 20 20 20 20 20 70 4b 65 79 49 6e 66 6f          pKeyInfo
20e80 2c 20 70 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f  , pCx->uc.pCurso
20e90 72 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  r);.        }.  
20ea0 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62        pCx->isTab
20eb0 6c 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65  le = 0;.      }e
20ec0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 43 78  lse{.        pCx
20ed0 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d 20 4d 41 53  ->pgnoRoot = MAS
20ee0 54 45 52 5f 52 4f 4f 54 3b 0a 20 20 20 20 20 20  TER_ROOT;.      
20ef0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
20f00 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70  reeCursor(pCx->p
20f10 42 74 78 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54  Btx, MASTER_ROOT
20f20 2c 20 42 54 52 45 45 5f 57 52 43 53 52 2c 0a 20  , BTREE_WRCSR,. 
20f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30                 0
20f50 2c 20 70 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f  , pCx->uc.pCurso
20f60 72 29 3b 0a 20 20 20 20 20 20 20 20 70 43 78 2d  r);.        pCx-
20f70 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20  >isTable = 1;.  
20f80 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
20f90 70 43 78 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d  pCx->isOrdered =
20fa0 20 28 70 4f 70 2d 3e 70 35 21 3d 42 54 52 45 45   (pOp->p5!=BTREE
20fb0 5f 55 4e 4f 52 44 45 52 45 44 29 3b 0a 20 20 7d  _UNORDERED);.  }
20fc0 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
20fd0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
20fe0 72 6f 72 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c  ror;.  pCx->null
20ff0 52 6f 77 20 3d 20 31 3b 0a 20 20 62 72 65 61 6b  Row = 1;.  break
21000 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
21010 53 6f 72 74 65 72 4f 70 65 6e 20 50 31 20 50 32  SorterOpen P1 P2
21020 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54   P3 P4 *.**.** T
21030 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73  his opcode works
21040 20 6c 69 6b 65 20 4f 50 5f 4f 70 65 6e 45 70 68   like OP_OpenEph
21050 65 6d 65 72 61 6c 20 65 78 63 65 70 74 20 74 68  emeral except th
21060 61 74 20 69 74 20 6f 70 65 6e 73 0a 2a 2a 20 61  at it opens.** a
21070 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78   transient index
21080 20 74 68 61 74 20 69 73 20 73 70 65 63 69 66 69   that is specifi
21090 63 61 6c 6c 79 20 64 65 73 69 67 6e 65 64 20 74  cally designed t
210a0 6f 20 73 6f 72 74 20 6c 61 72 67 65 0a 2a 2a 20  o sort large.** 
210b0 74 61 62 6c 65 73 20 75 73 69 6e 67 20 61 6e 20  tables using an 
210c0 65 78 74 65 72 6e 61 6c 20 6d 65 72 67 65 2d 73  external merge-s
210d0 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 2a  ort algorithm..*
210e0 2a 0a 2a 2a 20 49 66 20 61 72 67 75 6d 65 6e 74  *.** If argument
210f0 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c   P3 is non-zero,
21100 20 74 68 65 6e 20 69 74 20 69 6e 64 69 63 61 74   then it indicat
21110 65 73 20 74 68 61 74 20 74 68 65 20 73 6f 72 74  es that the sort
21120 65 72 20 6d 61 79 0a 2a 2a 20 61 73 73 75 6d 65  er may.** assume
21130 20 74 68 61 74 20 61 20 73 74 61 62 6c 65 20 73   that a stable s
21140 6f 72 74 20 63 6f 6e 73 69 64 65 72 69 6e 67 20  ort considering 
21150 74 68 65 20 66 69 72 73 74 20 50 33 20 66 69 65  the first P3 fie
21160 6c 64 73 20 6f 66 20 65 61 63 68 0a 2a 2a 20 6b  lds of each.** k
21170 65 79 20 69 73 20 73 75 66 66 69 63 69 65 6e 74  ey is sufficient
21180 20 74 6f 20 70 72 6f 64 75 63 65 20 74 68 65 20   to produce the 
21190 72 65 71 75 69 72 65 64 20 72 65 73 75 6c 74 73  required results
211a0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
211b0 74 65 72 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62  terOpen: {.  Vdb
211c0 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20  eCursor *pCx;.. 
211d0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
211e0 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  >=0 );.  assert(
211f0 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20   pOp->p2>=0 );. 
21200 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43   pCx = allocateC
21210 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31  ursor(p, pOp->p1
21220 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 43  , pOp->p2, -1, C
21230 55 52 54 59 50 45 5f 53 4f 52 54 45 52 29 3b 0a  URTYPE_SORTER);.
21240 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67    if( pCx==0 ) g
21250 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
21260 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f  x->pKeyInfo = pO
21270 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a  p->p4.pKeyInfo;.
21280 20 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e 70    assert( pCx->p
21290 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20  KeyInfo->db==db 
212a0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 78  );.  assert( pCx
212b0 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d  ->pKeyInfo->enc=
212c0 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 72 63  =ENC(db) );.  rc
212d0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f   = sqlite3VdbeSo
212e0 72 74 65 72 49 6e 69 74 28 64 62 2c 20 70 4f 70  rterInit(db, pOp
212f0 2d 3e 70 33 2c 20 70 43 78 29 3b 0a 20 20 69 66  ->p3, pCx);.  if
21300 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
21310 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
21320 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
21330 70 63 6f 64 65 3a 20 53 65 71 75 65 6e 63 65 54  pcode: SequenceT
21340 65 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  est P1 P2 * * *.
21350 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 28  ** Synopsis: if(
21360 20 63 75 72 73 6f 72 5b 50 31 5d 2e 63 74 72 2b   cursor[P1].ctr+
21370 2b 20 29 20 70 63 20 3d 20 50 32 0a 2a 2a 0a 2a  + ) pc = P2.**.*
21380 2a 20 50 31 20 69 73 20 61 20 73 6f 72 74 65 72  * P1 is a sorter
21390 20 63 75 72 73 6f 72 2e 20 49 66 20 74 68 65 20   cursor. If the 
213a0 73 65 71 75 65 6e 63 65 20 63 6f 75 6e 74 65 72  sequence counter
213b0 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 7a 65   is currently ze
213c0 72 6f 2c 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50  ro, jump.** to P
213d0 32 2e 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66  2. Regardless of
213e0 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
213f0 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
21400 6e 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 65  n, increment the
21410 0a 2a 2a 20 74 68 65 20 73 65 71 75 65 6e 63 65  .** the sequence
21420 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20   value..*/.case 
21430 4f 50 5f 53 65 71 75 65 6e 63 65 54 65 73 74 3a  OP_SequenceTest:
21440 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
21450 2a 70 43 3b 0a 20 20 61 73 73 65 72 74 28 20 70  *pC;.  assert( p
21460 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
21470 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
21480 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
21490 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
214a0 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28  ssert( isSorter(
214b0 70 43 29 20 29 3b 0a 20 20 69 66 28 20 28 70 43  pC) );.  if( (pC
214c0 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 29 3d 3d 30  ->seqCount++)==0
214d0 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d   ){.    goto jum
214e0 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62  p_to_p2;.  }.  b
214f0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
21500 64 65 3a 20 4f 70 65 6e 50 73 65 75 64 6f 20 50  de: OpenPseudo P
21510 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
21520 79 6e 6f 70 73 69 73 3a 20 50 33 20 63 6f 6c 75  ynopsis: P3 colu
21530 6d 6e 73 20 69 6e 20 72 5b 50 32 5d 0a 2a 2a 0a  mns in r[P2].**.
21540 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75  ** Open a new cu
21550 72 73 6f 72 20 74 68 61 74 20 70 6f 69 6e 74 73  rsor that points
21560 20 74 6f 20 61 20 66 61 6b 65 20 74 61 62 6c 65   to a fake table
21570 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61   that contains a
21580 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f   single.** row o
21590 66 20 64 61 74 61 2e 20 20 54 68 65 20 63 6f 6e  f data.  The con
215a0 74 65 6e 74 20 6f 66 20 74 68 61 74 20 6f 6e 65  tent of that one
215b0 20 72 6f 77 20 69 73 20 74 68 65 20 63 6f 6e 74   row is the cont
215c0 65 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a  ent of memory.**
215d0 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49   register P2.  I
215e0 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 63  n other words, c
215f0 75 72 73 6f 72 20 50 31 20 62 65 63 6f 6d 65 73  ursor P1 becomes
21600 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68   an alias for th
21610 65 20 0a 2a 2a 20 4d 45 4d 5f 42 6c 6f 62 20 63  e .** MEM_Blob c
21620 6f 6e 74 65 6e 74 20 63 6f 6e 74 61 69 6e 65 64  ontent contained
21630 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
21640 0a 2a 2a 0a 2a 2a 20 41 20 70 73 65 75 64 6f 2d  .**.** A pseudo-
21650 74 61 62 6c 65 20 63 72 65 61 74 65 64 20 62 79  table created by
21660 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   this opcode is 
21670 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 73  used to hold a s
21680 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 75 74  ingle.** row out
21690 70 75 74 20 66 72 6f 6d 20 74 68 65 20 73 6f 72  put from the sor
216a0 74 65 72 20 73 6f 20 74 68 61 74 20 74 68 65 20  ter so that the 
216b0 72 6f 77 20 63 61 6e 20 62 65 20 64 65 63 6f 6d  row can be decom
216c0 70 6f 73 65 64 20 69 6e 74 6f 0a 2a 2a 20 69 6e  posed into.** in
216d0 64 69 76 69 64 75 61 6c 20 63 6f 6c 75 6d 6e 73  dividual columns
216e0 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 43 6f   using the OP_Co
216f0 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 20 20 54 68  lumn opcode.  Th
21700 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f  e OP_Column opco
21710 64 65 0a 2a 2a 20 69 73 20 74 68 65 20 6f 6e 6c  de.** is the onl
21720 79 20 63 75 72 73 6f 72 20 6f 70 63 6f 64 65 20  y cursor opcode 
21730 74 68 61 74 20 77 6f 72 6b 73 20 77 69 74 68 20  that works with 
21740 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a  a pseudo-table..
21750 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 74 68 65 20  **.** P3 is the 
21760 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73  number of fields
21770 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 73 20   in the records 
21780 74 68 61 74 20 77 69 6c 6c 20 62 65 20 73 74 6f  that will be sto
21790 72 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 70 73  red by.** the ps
217a0 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63  eudo-table..*/.c
217b0 61 73 65 20 4f 50 5f 4f 70 65 6e 50 73 65 75 64  ase OP_OpenPseud
217c0 6f 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  o: {.  VdbeCurso
217d0 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65 72  r *pCx;..  asser
217e0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b  t( pOp->p1>=0 );
217f0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
21800 70 33 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d  p3>=0 );.  pCx =
21810 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28   allocateCursor(
21820 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  p, pOp->p1, pOp-
21830 3e 70 33 2c 20 2d 31 2c 20 43 55 52 54 59 50 45  >p3, -1, CURTYPE
21840 5f 50 53 45 55 44 4f 29 3b 0a 20 20 69 66 28 20  _PSEUDO);.  if( 
21850 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  pCx==0 ) goto no
21860 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c  _mem;.  pCx->nul
21870 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d  lRow = 1;.  pCx-
21880 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 70 4f  >seekResult = pO
21890 70 2d 3e 70 32 3b 0a 20 20 70 43 78 2d 3e 69 73  p->p2;.  pCx->is
218a0 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 2f 2a 20  Table = 1;.  /* 
218b0 47 69 76 65 20 74 68 69 73 20 70 73 65 75 64 6f  Give this pseudo
218c0 2d 63 75 72 73 6f 72 20 61 20 66 61 6b 65 20 42  -cursor a fake B
218d0 74 43 75 72 73 6f 72 20 70 6f 69 6e 74 65 72 20  tCursor pointer 
218e0 73 6f 20 74 68 61 74 20 70 43 78 0a 20 20 2a 2a  so that pCx.  **
218f0 20 63 61 6e 20 62 65 20 73 61 66 65 6c 79 20 70   can be safely p
21900 61 73 73 65 64 20 74 6f 20 73 71 6c 69 74 65 33  assed to sqlite3
21910 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
21920 28 29 2e 20 20 54 68 69 73 20 61 76 6f 69 64 73  ().  This avoids
21930 20 61 20 74 65 73 74 0a 20 20 2a 2a 20 66 6f 72   a test.  ** for
21940 20 70 43 78 2d 3e 65 43 75 72 54 79 70 65 3d 3d   pCx->eCurType==
21950 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 69 6e  CURTYPE_BTREE in
21960 73 69 64 65 20 6f 66 20 73 71 6c 69 74 65 33 56  side of sqlite3V
21970 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
21980 29 0a 20 20 2a 2a 20 77 68 69 63 68 20 69 73 20  ).  ** which is 
21990 61 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 6f 70  a performance op
219a0 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20  timization */.  
219b0 70 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72 20  pCx->uc.pCursor 
219c0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 61  = sqlite3BtreeFa
219d0 6b 65 56 61 6c 69 64 43 75 72 73 6f 72 28 29 3b  keValidCursor();
219e0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
219f0 70 35 3d 3d 30 20 29 3b 0a 20 20 62 72 65 61 6b  p5==0 );.  break
21a00 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
21a10 43 6c 6f 73 65 20 50 31 20 2a 20 2a 20 2a 20 2a  Close P1 * * * *
21a20 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 20 63  .**.** Close a c
21a30 75 72 73 6f 72 20 70 72 65 76 69 6f 75 73 6c 79  ursor previously
21a40 20 6f 70 65 6e 65 64 20 61 73 20 50 31 2e 20 20   opened as P1.  
21a50 49 66 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20  If P1 is not.** 
21a60 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20  currently open, 
21a70 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
21a80 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a   is a no-op..*/.
21a90 63 61 73 65 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b  case OP_Close: {
21aa0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
21ab0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
21ac0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
21ad0 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65   sqlite3VdbeFree
21ae0 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43  Cursor(p, p->apC
21af0 73 72 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20  sr[pOp->p1]);.  
21b00 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
21b10 5d 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a  ] = 0;.  break;.
21b20 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  }..#ifdef SQLITE
21b30 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 55  _ENABLE_COLUMN_U
21b40 53 45 44 5f 4d 41 53 4b 0a 2f 2a 20 4f 70 63 6f  SED_MASK./* Opco
21b50 64 65 3a 20 43 6f 6c 75 6d 6e 73 55 73 65 64 20  de: ColumnsUsed 
21b60 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
21b70 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 28 77  * This opcode (w
21b80 68 69 63 68 20 6f 6e 6c 79 20 65 78 69 73 74 73  hich only exists
21b90 20 69 66 20 53 51 4c 69 74 65 20 77 61 73 20 63   if SQLite was c
21ba0 6f 6d 70 69 6c 65 64 20 77 69 74 68 0a 2a 2a 20  ompiled with.** 
21bb0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f  SQLITE_ENABLE_CO
21bc0 4c 55 4d 4e 5f 55 53 45 44 5f 4d 41 53 4b 29 20  LUMN_USED_MASK) 
21bd0 69 64 65 6e 74 69 66 69 65 73 20 77 68 69 63 68  identifies which
21be0 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 0a   columns of the.
21bf0 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  ** table or inde
21c00 78 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 20  x for cursor P1 
21c10 61 72 65 20 75 73 65 64 2e 20 20 50 34 20 69 73  are used.  P4 is
21c20 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65   a 64-bit intege
21c30 72 0a 2a 2a 20 28 50 34 5f 49 4e 54 36 34 29 20  r.** (P4_INT64) 
21c40 69 6e 20 77 68 69 63 68 20 74 68 65 20 66 69 72  in which the fir
21c50 73 74 20 36 33 20 62 69 74 73 20 61 72 65 20 6f  st 63 bits are o
21c60 6e 65 20 66 6f 72 20 65 61 63 68 20 6f 66 20 74  ne for each of t
21c70 68 65 0a 2a 2a 20 66 69 72 73 74 20 36 33 20 63  he.** first 63 c
21c80 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61  olumns of the ta
21c90 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 74 68 61  ble or index tha
21ca0 74 20 61 72 65 20 61 63 74 75 61 6c 6c 79 20 75  t are actually u
21cb0 73 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 63 75  sed.** by the cu
21cc0 72 73 6f 72 2e 20 20 54 68 65 20 68 69 67 68 2d  rsor.  The high-
21cd0 6f 72 64 65 72 20 62 69 74 20 69 73 20 73 65 74  order bit is set
21ce0 20 69 66 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 61   if any column a
21cf0 66 74 65 72 0a 2a 2a 20 74 68 65 20 36 34 74 68  fter.** the 64th
21d00 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 63 61 73   is used..*/.cas
21d10 65 20 4f 50 5f 43 6f 6c 75 6d 6e 73 55 73 65 64  e OP_ColumnsUsed
21d20 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
21d30 20 2a 70 43 3b 0a 20 20 70 43 20 3d 20 70 2d 3e   *pC;.  pC = p->
21d40 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
21d50 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
21d60 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
21d70 42 54 52 45 45 20 29 3b 0a 20 20 70 43 2d 3e 6d  BTREE );.  pC->m
21d80 61 73 6b 55 73 65 64 20 3d 20 2a 28 75 36 34 2a  askUsed = *(u64*
21d90 29 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20  )pOp->p4.pI64;. 
21da0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
21db0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65  ../* Opcode: See
21dc0 6b 47 45 20 50 31 20 50 32 20 50 33 20 50 34 20  kGE P1 P2 P3 P4 
21dd0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  *.** Synopsis: k
21de0 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
21df0 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  * If cursor P1 r
21e00 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20  efers to an SQL 
21e10 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68  table (B-Tree th
21e20 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20  at uses integer 
21e30 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74  keys), .** use t
21e40 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
21e50 73 74 65 72 20 50 33 20 61 73 20 74 68 65 20 6b  ster P3 as the k
21e60 65 79 2e 20 20 49 66 20 63 75 72 73 6f 72 20 50  ey.  If cursor P
21e70 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20  1 refers .** to 
21e80 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68  an SQL index, th
21e90 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72  en P3 is the fir
21ea0 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f  st in an array o
21eb0 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a  f P4 registers .
21ec0 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ** that are used
21ed0 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20   as an unpacked 
21ee0 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a  index key. .**.*
21ef0 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72  * Reposition cur
21f00 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20  sor P1 so that  
21f10 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
21f20 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20   smallest entry 
21f30 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61  that .** is grea
21f40 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ter than or equa
21f50 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c  l to the key val
21f60 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65  ue. If there are
21f70 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20   no records .** 
21f80 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
21f90 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
21fa0 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a   and P2 is not z
21fb0 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74  ero, then jump t
21fc0 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  o P2..**.** If t
21fd0 68 65 20 63 75 72 73 6f 72 20 50 31 20 77 61 73  he cursor P1 was
21fe0 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 74 68   opened using th
21ff0 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20  e OPFLAG_SEEKEQ 
22000 66 6c 61 67 2c 20 74 68 65 6e 20 74 68 69 73 0a  flag, then this.
22010 2a 2a 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61  ** opcode will a
22020 6c 77 61 79 73 20 6c 61 6e 64 20 6f 6e 20 61 20  lways land on a 
22030 72 65 63 6f 72 64 20 74 68 61 74 20 65 71 75 61  record that equa
22040 6c 6c 79 20 65 71 75 61 6c 73 20 74 68 65 20 6b  lly equals the k
22050 65 79 2c 20 6f 72 0a 2a 2a 20 65 6c 73 65 20 6a  ey, or.** else j
22060 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
22070 74 6f 20 50 32 2e 20 20 57 68 65 6e 20 74 68 65  to P2.  When the
22080 20 63 75 72 73 6f 72 20 69 73 20 4f 50 46 4c 41   cursor is OPFLA
22090 47 5f 53 45 45 4b 45 51 2c 20 74 68 69 73 0a 2a  G_SEEKEQ, this.*
220a0 2a 20 6f 70 63 6f 64 65 20 6d 75 73 74 20 62 65  * opcode must be
220b0 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20   followed by an 
220c0 49 64 78 4c 45 20 6f 70 63 6f 64 65 20 77 69 74  IdxLE opcode wit
220d0 68 20 74 68 65 20 73 61 6d 65 20 61 72 67 75 6d  h the same argum
220e0 65 6e 74 73 2e 0a 2a 2a 20 54 68 65 20 49 64 78  ents..** The Idx
220f0 4c 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62  LE opcode will b
22100 65 20 73 6b 69 70 70 65 64 20 69 66 20 74 68 69  e skipped if thi
22110 73 20 6f 70 63 6f 64 65 20 73 75 63 63 65 65 64  s opcode succeed
22120 73 2c 20 62 75 74 20 74 68 65 0a 2a 2a 20 49 64  s, but the.** Id
22130 78 4c 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20  xLE opcode will 
22140 62 65 20 75 73 65 64 20 6f 6e 20 73 75 62 73 65  be used on subse
22150 71 75 65 6e 74 20 6c 6f 6f 70 20 69 74 65 72 61  quent loop itera
22160 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  tions..**.** Thi
22170 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20  s opcode leaves 
22180 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69  the cursor confi
22190 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e  gured to move in
221a0 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a   forward order,.
221b0 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69  ** from the begi
221c0 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65  nning toward the
221d0 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20   end.  In other 
221e0 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f  words, the curso
221f0 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72  r is.** configur
22200 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20  ed to use Next, 
22210 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20  not Prev..**.** 
22220 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
22230 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 4c   NotFound, SeekL
22240 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 4c  t, SeekGt, SeekL
22250 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  e.*/./* Opcode: 
22260 53 65 65 6b 47 54 20 50 31 20 50 32 20 50 33 20  SeekGT P1 P2 P3 
22270 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
22280 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
22290 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50  *.** If cursor P
222a0 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53  1 refers to an S
222b0 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65  QL table (B-Tree
222c0 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67   that uses integ
222d0 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73  er keys), .** us
222e0 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
222f0 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20  egister P3 as a 
22300 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50  key. If cursor P
22310 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20  1 refers .** to 
22320 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68  an SQL index, th
22330 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72  en P3 is the fir
22340 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f  st in an array o
22350 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a  f P4 registers .
22360 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ** that are used
22370 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20   as an unpacked 
22380 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a  index key. .**.*
22390 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72  * Reposition cur
223a0 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20  sor P1 so that  
223b0 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
223c0 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20   smallest entry 
223d0 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61  that .** is grea
223e0 74 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79  ter than the key
223f0 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65   value. If there
22400 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
22410 67 72 65 61 74 65 72 20 74 68 61 6e 20 0a 2a 2a  greater than .**
22420 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20   the key and P2 
22430 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
22440 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
22450 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
22460 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
22470 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  r configured to 
22480 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20  move in forward 
22490 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74  order,.** from t
224a0 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77  he beginning tow
224b0 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e  ard the end.  In
224c0 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
224d0 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63  e cursor is.** c
224e0 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65  onfigured to use
224f0 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e   Next, not Prev.
22500 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
22510 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
22520 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 65  , SeekLt, SeekGe
22530 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f  , SeekLe.*/./* O
22540 70 63 6f 64 65 3a 20 53 65 65 6b 4c 54 20 50 31  pcode: SeekLT P1
22550 20 50 32 20 50 33 20 50 34 20 2a 20 0a 2a 2a 20   P2 P3 P4 * .** 
22560 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
22570 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20  P3@P4].**.** If 
22580 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
22590 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   to an SQL table
225a0 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73   (B-Tree that us
225b0 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29  es integer keys)
225c0 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61  , .** use the va
225d0 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
225e0 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20  P3 as a key. If 
225f0 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
22600 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69   .** to an SQL i
22610 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73  ndex, then P3 is
22620 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e   the first in an
22630 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67   array of P4 reg
22640 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20  isters .** that 
22650 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75  are used as an u
22660 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
22670 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69  y. .**.** Reposi
22680 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73  tion cursor P1 s
22690 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74  o that  it point
226a0 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74  s to the largest
226b0 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20   entry that .** 
226c0 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65  is less than the
226d0 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74   key value. If t
226e0 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f  here are no reco
226f0 72 64 73 20 6c 65 73 73 20 74 68 61 6e 20 0a 2a  rds less than .*
22700 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32  * the key and P2
22710 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
22720 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
22730 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
22740 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
22750 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  or configured to
22760 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72 73 65   move in reverse
22770 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20   order,.** from 
22780 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64 20 74  the end toward t
22790 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49  he beginning.  I
227a0 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
227b0 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20  he cursor is.** 
227c0 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73  configured to us
227d0 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74  e Prev, not Next
227e0 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
227f0 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e  : Found, NotFoun
22800 64 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47  d, SeekGt, SeekG
22810 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20  e, SeekLe.*/./* 
22820 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c 45 20 50  Opcode: SeekLE P
22830 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
22840 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
22850 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20  P3@P4].**.** If 
22860 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
22870 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   to an SQL table
22880 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73   (B-Tree that us
22890 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29  es integer keys)
228a0 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61  , .** use the va
228b0 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
228c0 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20  P3 as a key. If 
228d0 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
228e0 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69   .** to an SQL i
228f0 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73  ndex, then P3 is
22900 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e   the first in an
22910 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67   array of P4 reg
22920 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20  isters .** that 
22930 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75  are used as an u
22940 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
22950 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69  y. .**.** Reposi
22960 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73  tion cursor P1 s
22970 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73  o that it points
22980 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20   to the largest 
22990 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69  entry that .** i
229a0 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65  s less than or e
229b0 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
229c0 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20  value. If there 
229d0 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a  are no records .
229e0 2a 2a 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20  ** less than or 
229f0 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
22a00 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a   and P2 is not z
22a10 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74  ero, then jump t
22a20 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  o P2..**.** This
22a30 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74   opcode leaves t
22a40 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67  he cursor config
22a50 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20  ured to move in 
22a60 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a  reverse order,.*
22a70 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 74  * from the end t
22a80 6f 77 61 72 64 20 74 68 65 20 62 65 67 69 6e 6e  oward the beginn
22a90 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ing.  In other w
22aa0 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72  ords, the cursor
22ab0 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65   is.** configure
22ac0 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c 20 6e  d to use Prev, n
22ad0 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 49  ot Next..**.** I
22ae0 66 20 74 68 65 20 63 75 72 73 6f 72 20 50 31 20  f the cursor P1 
22af0 77 61 73 20 6f 70 65 6e 65 64 20 75 73 69 6e 67  was opened using
22b00 20 74 68 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b   the OPFLAG_SEEK
22b10 45 51 20 66 6c 61 67 2c 20 74 68 65 6e 20 74 68  EQ flag, then th
22b20 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20 77 69 6c  is.** opcode wil
22b30 6c 20 61 6c 77 61 79 73 20 6c 61 6e 64 20 6f 6e  l always land on
22b40 20 61 20 72 65 63 6f 72 64 20 74 68 61 74 20 65   a record that e
22b50 71 75 61 6c 6c 79 20 65 71 75 61 6c 73 20 74 68  qually equals th
22b60 65 20 6b 65 79 2c 20 6f 72 0a 2a 2a 20 65 6c 73  e key, or.** els
22b70 65 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  e jump immediate
22b80 6c 79 20 74 6f 20 50 32 2e 20 20 57 68 65 6e 20  ly to P2.  When 
22b90 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 4f 50  the cursor is OP
22ba0 46 4c 41 47 5f 53 45 45 4b 45 51 2c 20 74 68 69  FLAG_SEEKEQ, thi
22bb0 73 0a 2a 2a 20 6f 70 63 6f 64 65 20 6d 75 73 74  s.** opcode must
22bc0 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20   be followed by 
22bd0 61 6e 20 49 64 78 47 45 20 6f 70 63 6f 64 65 20  an IdxGE opcode 
22be0 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 61 72  with the same ar
22bf0 67 75 6d 65 6e 74 73 2e 0a 2a 2a 20 54 68 65 20  guments..** The 
22c00 49 64 78 47 45 20 6f 70 63 6f 64 65 20 77 69 6c  IdxGE opcode wil
22c10 6c 20 62 65 20 73 6b 69 70 70 65 64 20 69 66 20  l be skipped if 
22c20 74 68 69 73 20 6f 70 63 6f 64 65 20 73 75 63 63  this opcode succ
22c30 65 65 64 73 2c 20 62 75 74 20 74 68 65 0a 2a 2a  eeds, but the.**
22c40 20 49 64 78 47 45 20 6f 70 63 6f 64 65 20 77 69   IdxGE opcode wi
22c50 6c 6c 20 62 65 20 75 73 65 64 20 6f 6e 20 73 75  ll be used on su
22c60 62 73 65 71 75 65 6e 74 20 6c 6f 6f 70 20 69 74  bsequent loop it
22c70 65 72 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  erations..**.** 
22c80 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
22c90 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 47   NotFound, SeekG
22ca0 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c  t, SeekGe, SeekL
22cb0 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  t.*/.case OP_See
22cc0 6b 4c 54 3a 20 20 20 20 20 20 20 20 20 2f 2a 20  kLT:         /* 
22cd0 6a 75 6d 70 2c 20 69 6e 33 2c 20 67 72 6f 75 70  jump, in3, group
22ce0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b   */.case OP_Seek
22cf0 4c 45 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  LE:         /* j
22d00 75 6d 70 2c 20 69 6e 33 2c 20 67 72 6f 75 70 20  ump, in3, group 
22d10 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47  */.case OP_SeekG
22d20 45 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  E:         /* ju
22d30 6d 70 2c 20 69 6e 33 2c 20 67 72 6f 75 70 20 2a  mp, in3, group *
22d40 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 54  /.case OP_SeekGT
22d50 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  : {       /* jum
22d60 70 2c 20 69 6e 33 2c 20 67 72 6f 75 70 20 2a 2f  p, in3, group */
22d70 0a 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20  .  int res;     
22d80 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69        /* Compari
22d90 73 6f 6e 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20  son result */.  
22da0 69 6e 74 20 6f 63 3b 20 20 20 20 20 20 20 20 20  int oc;         
22db0 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20 2a 2f 0a     /* Opcode */.
22dc0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
22dd0 3b 20 20 20 20 2f 2a 20 54 68 65 20 63 75 72 73  ;    /* The curs
22de0 6f 72 20 74 6f 20 73 65 65 6b 20 2a 2f 0a 20 20  or to seek */.  
22df0 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72  UnpackedRecord r
22e00 3b 20 20 2f 2a 20 54 68 65 20 6b 65 79 20 74 6f  ;  /* The key to
22e10 20 73 65 65 6b 20 66 6f 72 20 2a 2f 0a 20 20 69   seek for */.  i
22e20 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20  nt nField;      
22e30 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
22e40 6f 6c 75 6d 6e 73 20 6f 72 20 66 69 65 6c 64 73  olumns or fields
22e50 20 69 6e 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20   in the key */. 
22e60 20 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20   i64 iKey;      
22e70 20 20 20 20 2f 2a 20 54 68 65 20 72 6f 77 69 64      /* The rowid
22e80 20 77 65 20 61 72 65 20 74 6f 20 73 65 65 6b 20   we are to seek 
22e90 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 65 71 4f 6e  to */.  int eqOn
22ea0 6c 79 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e  ly;        /* On
22eb0 6c 79 20 69 6e 74 65 72 65 73 74 65 64 20 69 6e  ly interested in
22ec0 20 3d 3d 20 72 65 73 75 6c 74 73 20 2a 2f 0a 0a   == results */..
22ed0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
22ee0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
22ef0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
22f00 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 21  assert( pOp->p2!
22f10 3d 30 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  =0 );.  pC = p->
22f20 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
22f30 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
22f40 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
22f50 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
22f60 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73  PE_BTREE );.  as
22f70 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45 20  sert( OP_SeekLE 
22f80 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 31 20 29  == OP_SeekLT+1 )
22f90 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53  ;.  assert( OP_S
22fa0 65 65 6b 47 45 20 3d 3d 20 4f 50 5f 53 65 65 6b  eekGE == OP_Seek
22fb0 4c 54 2b 32 20 29 3b 0a 20 20 61 73 73 65 72 74  LT+2 );.  assert
22fc0 28 20 4f 50 5f 53 65 65 6b 47 54 20 3d 3d 20 4f  ( OP_SeekGT == O
22fd0 50 5f 53 65 65 6b 4c 54 2b 33 20 29 3b 0a 20 20  P_SeekLT+3 );.  
22fe0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72  assert( pC->isOr
22ff0 64 65 72 65 64 20 29 3b 0a 20 20 61 73 73 65 72  dered );.  asser
23000 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  t( pC->uc.pCurso
23010 72 21 3d 30 20 29 3b 0a 20 20 6f 63 20 3d 20 70  r!=0 );.  oc = p
23020 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 65 71  Op->opcode;.  eq
23030 4f 6e 6c 79 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  Only = 0;.  pC->
23040 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 23 69 66  nullRow = 0;.#if
23050 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
23060 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20  .  pC->seekOp = 
23070 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e  pOp->opcode;.#en
23080 64 69 66 0a 0a 20 20 70 43 2d 3e 64 65 66 65 72  dif..  pC->defer
23090 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
230a0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
230b0 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
230c0 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c    if( pC->isTabl
230d0 65 20 29 7b 0a 20 20 20 20 75 31 36 20 66 6c 61  e ){.    u16 fla
230e0 67 73 33 2c 20 6e 65 77 54 79 70 65 3b 0a 20 20  gs3, newType;.  
230f0 20 20 2f 2a 20 54 68 65 20 42 54 52 45 45 5f 53    /* The BTREE_S
23100 45 45 4b 5f 45 51 20 66 6c 61 67 20 69 73 20 6f  EEK_EQ flag is o
23110 6e 6c 79 20 73 65 74 20 6f 6e 20 69 6e 64 65 78  nly set on index
23120 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20 20 20   cursors */.    
23130 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
23140 74 72 65 65 43 75 72 73 6f 72 48 61 73 48 69 6e  treeCursorHasHin
23150 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  t(pC->uc.pCursor
23160 2c 20 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 29  , BTREE_SEEK_EQ)
23170 3d 3d 30 0a 20 20 20 20 20 20 20 20 20 20 20 20  ==0.            
23180 20 20 7c 7c 20 43 4f 52 52 55 50 54 5f 44 42 20    || CORRUPT_DB 
23190 29 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 69  );..    /* The i
231a0 6e 70 75 74 20 76 61 6c 75 65 20 69 6e 20 50 33  nput value in P3
231b0 20 6d 69 67 68 74 20 62 65 20 6f 66 20 61 6e 79   might be of any
231c0 20 74 79 70 65 3a 20 69 6e 74 65 67 65 72 2c 20   type: integer, 
231d0 72 65 61 6c 2c 20 73 74 72 69 6e 67 2c 0a 20 20  real, string,.  
231e0 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f 72 20 4e 55    ** blob, or NU
231f0 4c 4c 2e 20 20 42 75 74 20 69 74 20 6e 65 65 64  LL.  But it need
23200 73 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67  s to be an integ
23210 65 72 20 62 65 66 6f 72 65 20 77 65 20 63 61 6e  er before we can
23220 20 64 6f 0a 20 20 20 20 2a 2a 20 74 68 65 20 73   do.    ** the s
23230 65 65 6b 2c 20 73 6f 20 63 6f 6e 76 65 72 74 20  eek, so convert 
23240 69 74 2e 20 2a 2f 0a 20 20 20 20 70 49 6e 33 20  it. */.    pIn3 
23250 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
23260 3b 0a 20 20 20 20 66 6c 61 67 73 33 20 3d 20 70  ;.    flags3 = p
23270 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 20 20  In3->flags;.    
23280 69 66 28 20 28 66 6c 61 67 73 33 20 26 20 28 4d  if( (flags3 & (M
23290 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c  EM_Int|MEM_Real|
232a0 4d 45 4d 5f 49 6e 74 52 65 61 6c 7c 4d 45 4d 5f  MEM_IntReal|MEM_
232b0 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29  Str))==MEM_Str )
232c0 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d  {.      applyNum
232d0 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e  ericAffinity(pIn
232e0 33 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20  3, 0);.    }.   
232f0 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56   iKey = sqlite3V
23300 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 33  dbeIntValue(pIn3
23310 29 3b 20 2f 2a 20 47 65 74 20 74 68 65 20 69 6e  ); /* Get the in
23320 74 65 67 65 72 20 6b 65 79 20 76 61 6c 75 65 20  teger key value 
23330 2a 2f 0a 20 20 20 20 6e 65 77 54 79 70 65 20 3d  */.    newType =
23340 20 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 20 2f 2a   pIn3->flags; /*
23350 20 52 65 63 6f 72 64 20 74 68 65 20 74 79 70 65   Record the type
23360 20 61 66 74 65 72 20 61 70 70 6c 79 69 6e 67 20   after applying 
23370 6e 75 6d 65 72 69 63 20 61 66 66 69 6e 69 74 79  numeric affinity
23380 20 2a 2f 0a 20 20 20 20 70 49 6e 33 2d 3e 66 6c   */.    pIn3->fl
23390 61 67 73 20 3d 20 66 6c 61 67 73 33 3b 20 20 2f  ags = flags3;  /
233a0 2a 20 42 75 74 20 63 6f 6e 76 65 72 74 20 74 68  * But convert th
233b0 65 20 74 79 70 65 20 62 61 63 6b 20 74 6f 20 69  e type back to i
233c0 74 73 20 6f 72 69 67 69 6e 61 6c 20 2a 2f 0a 0a  ts original */..
233d0 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33      /* If the P3
233e0 20 76 61 6c 75 65 20 63 6f 75 6c 64 20 6e 6f 74   value could not
233f0 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e   be converted in
23400 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 77 69  to an integer wi
23410 74 68 6f 75 74 0a 20 20 20 20 2a 2a 20 6c 6f 73  thout.    ** los
23420 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  s of information
23430 2c 20 74 68 65 6e 20 73 70 65 63 69 61 6c 20 70  , then special p
23440 72 6f 63 65 73 73 69 6e 67 20 69 73 20 72 65 71  rocessing is req
23450 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20  uired... */.    
23460 69 66 28 20 28 6e 65 77 54 79 70 65 20 26 20 28  if( (newType & (
23470 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 49 6e 74 52  MEM_Int|MEM_IntR
23480 65 61 6c 29 29 3d 3d 30 20 29 7b 0a 20 20 20 20  eal))==0 ){.    
23490 20 20 69 66 28 20 28 6e 65 77 54 79 70 65 20 26    if( (newType &
234a0 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b   MEM_Real)==0 ){
234b0 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 6e 65  .        if( (ne
234c0 77 54 79 70 65 20 26 20 4d 45 4d 5f 4e 75 6c 6c  wType & MEM_Null
234d0 29 20 7c 7c 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b  ) || oc>=OP_Seek
234e0 47 45 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  GE ){.          
234f0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
23500 31 2c 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20  1,2);.          
23510 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
23520 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
23530 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73            rc = s
23540 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28  qlite3BtreeLast(
23550 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
23560 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 20  &res);.         
23570 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
23580 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
23590 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
235a0 20 20 20 20 20 20 20 20 67 6f 74 6f 20 73 65 65          goto see
235b0 6b 5f 6e 6f 74 5f 66 6f 75 6e 64 3b 0a 20 20 20  k_not_found;.   
235c0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c       }.      }el
235d0 73 65 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20  se..      /* If 
235e0 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f  the approximatio
235f0 6e 20 69 4b 65 79 20 69 73 20 6c 61 72 67 65 72  n iKey is larger
23600 20 74 68 61 6e 20 74 68 65 20 61 63 74 75 61 6c   than the actual
23610 20 72 65 61 6c 20 73 65 61 72 63 68 0a 20 20 20   real search.   
23620 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73     ** term, subs
23630 74 69 74 75 74 65 20 3e 3d 20 66 6f 72 20 3e 20  titute >= for > 
23640 61 6e 64 20 3c 20 66 6f 72 20 3c 3d 2e 20 65 2e  and < for <=. e.
23650 67 2e 20 69 66 20 74 68 65 20 73 65 61 72 63 68  g. if the search
23660 20 74 65 72 6d 0a 20 20 20 20 20 20 2a 2a 20 69   term.      ** i
23670 73 20 34 2e 39 20 61 6e 64 20 74 68 65 20 69 6e  s 4.9 and the in
23680 74 65 67 65 72 20 61 70 70 72 6f 78 69 6d 61 74  teger approximat
23690 69 6f 6e 20 35 3a 0a 20 20 20 20 20 20 2a 2a 0a  ion 5:.      **.
236a0 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20        **        
236b0 28 78 20 3e 20 20 34 2e 39 29 20 20 20 20 2d 3e  (x >  4.9)    ->
236c0 20 20 20 20 20 28 78 20 3e 3d 20 35 29 0a 20 20       (x >= 5).  
236d0 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 28 78      **        (x
236e0 20 3c 3d 20 34 2e 39 29 20 20 20 20 2d 3e 20 20   <= 4.9)    ->  
236f0 20 20 20 28 78 20 3c 20 20 35 29 0a 20 20 20 20     (x <  5).    
23700 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70    */.      if( p
23710 49 6e 33 2d 3e 75 2e 72 3c 28 64 6f 75 62 6c 65  In3->u.r<(double
23720 29 69 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20  )iKey ){.       
23730 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
23740 47 45 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 2d 31  GE==(OP_SeekGT-1
23750 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  ) );.        ass
23760 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 54 3d 3d  ert( OP_SeekLT==
23770 28 4f 50 5f 53 65 65 6b 4c 45 2d 31 29 20 29 3b  (OP_SeekLE-1) );
23780 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
23790 20 28 4f 50 5f 53 65 65 6b 4c 45 20 26 20 30 78   (OP_SeekLE & 0x
237a0 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47  0001)==(OP_SeekG
237b0 54 20 26 20 30 78 30 30 30 31 29 20 29 3b 0a 20  T & 0x0001) );. 
237c0 20 20 20 20 20 20 20 69 66 28 20 28 6f 63 20 26         if( (oc &
237d0 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65   0x0001)==(OP_Se
237e0 65 6b 47 54 20 26 20 30 78 30 30 30 31 29 20 29  ekGT & 0x0001) )
237f0 20 6f 63 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a   oc--;.      }..
23800 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20        /* If the 
23810 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b  approximation iK
23820 65 79 20 69 73 20 73 6d 61 6c 6c 65 72 20 74 68  ey is smaller th
23830 61 6e 20 74 68 65 20 61 63 74 75 61 6c 20 72 65  an the actual re
23840 61 6c 20 73 65 61 72 63 68 0a 20 20 20 20 20 20  al search.      
23850 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73 74 69 74  ** term, substit
23860 75 74 65 20 3c 3d 20 66 6f 72 20 3c 20 61 6e 64  ute <= for < and
23870 20 3e 20 66 6f 72 20 3e 3d 2e 20 20 2a 2f 0a 20   > for >=.  */. 
23880 20 20 20 20 20 65 6c 73 65 20 69 66 28 20 70 49       else if( pI
23890 6e 33 2d 3e 75 2e 72 3e 28 64 6f 75 62 6c 65 29  n3->u.r>(double)
238a0 69 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20  iKey ){.        
238b0 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c  assert( OP_SeekL
238c0 45 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 2b 31 29  E==(OP_SeekLT+1)
238d0 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
238e0 72 74 28 20 4f 50 5f 53 65 65 6b 47 54 3d 3d 28  rt( OP_SeekGT==(
238f0 4f 50 5f 53 65 65 6b 47 45 2b 31 29 20 29 3b 0a  OP_SeekGE+1) );.
23900 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
23910 28 4f 50 5f 53 65 65 6b 4c 54 20 26 20 30 78 30  (OP_SeekLT & 0x0
23920 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 45  001)==(OP_SeekGE
23930 20 26 20 30 78 30 30 30 31 29 20 29 3b 0a 20 20   & 0x0001) );.  
23940 20 20 20 20 20 20 69 66 28 20 28 6f 63 20 26 20        if( (oc & 
23950 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65  0x0001)==(OP_See
23960 6b 4c 54 20 26 20 30 78 30 30 30 31 29 20 29 20  kLT & 0x0001) ) 
23970 6f 63 2b 2b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  oc++;.      }.  
23980 20 20 7d 0a 20 20 20 20 72 63 20 3d 20 73 71 6c    }.    rc = sql
23990 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
239a0 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70  npacked(pC->uc.p
239b0 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29  Cursor, 0, (u64)
239c0 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a  iKey, 0, &res);.
239d0 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61      pC->movetoTa
239e0 72 67 65 74 20 3d 20 69 4b 65 79 3b 20 20 2f 2a  rget = iKey;  /*
239f0 20 55 73 65 64 20 62 79 20 4f 50 5f 44 65 6c 65   Used by OP_Dele
23a00 74 65 20 2a 2f 0a 20 20 20 20 69 66 28 20 72 63  te */.    if( rc
23a10 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
23a20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
23a30 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
23a40 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
23a50 20 2f 2a 20 46 6f 72 20 61 20 63 75 72 73 6f 72   /* For a cursor
23a60 20 77 69 74 68 20 74 68 65 20 42 54 52 45 45 5f   with the BTREE_
23a70 53 45 45 4b 5f 45 51 20 68 69 6e 74 2c 20 6f 6e  SEEK_EQ hint, on
23a80 6c 79 20 74 68 65 20 4f 50 5f 53 65 65 6b 47 45  ly the OP_SeekGE
23a90 20 61 6e 64 0a 20 20 20 20 2a 2a 20 4f 50 5f 53   and.    ** OP_S
23aa0 65 65 6b 4c 45 20 6f 70 63 6f 64 65 73 20 61 72  eekLE opcodes ar
23ab0 65 20 61 6c 6c 6f 77 65 64 2c 20 61 6e 64 20 74  e allowed, and t
23ac0 68 65 73 65 20 6d 75 73 74 20 62 65 20 69 6d 6d  hese must be imm
23ad0 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 65  ediately followe
23ae0 64 0a 20 20 20 20 2a 2a 20 62 79 20 61 6e 20 4f  d.    ** by an O
23af0 50 5f 49 64 78 47 54 20 6f 72 20 4f 50 5f 49 64  P_IdxGT or OP_Id
23b00 78 4c 54 20 6f 70 63 6f 64 65 2c 20 72 65 73 70  xLT opcode, resp
23b10 65 63 74 69 76 65 6c 79 2c 20 77 69 74 68 20 74  ectively, with t
23b20 68 65 20 73 61 6d 65 20 6b 65 79 2e 0a 20 20 20  he same key..   
23b30 20 2a 2f 0a 20 20 20 20 69 66 28 20 73 71 6c 69   */.    if( sqli
23b40 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 48 61  te3BtreeCursorHa
23b50 73 48 69 6e 74 28 70 43 2d 3e 75 63 2e 70 43 75  sHint(pC->uc.pCu
23b60 72 73 6f 72 2c 20 42 54 52 45 45 5f 53 45 45 4b  rsor, BTREE_SEEK
23b70 5f 45 51 29 20 29 7b 0a 20 20 20 20 20 20 65 71  _EQ) ){.      eq
23b80 4f 6e 6c 79 20 3d 20 31 3b 0a 20 20 20 20 20 20  Only = 1;.      
23b90 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
23ba0 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 47 45 20 7c  ode==OP_SeekGE |
23bb0 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
23bc0 50 5f 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20  P_SeekLE );.    
23bd0 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d    assert( pOp[1]
23be0 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c  .opcode==OP_IdxL
23bf0 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f  T || pOp[1].opco
23c00 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a  de==OP_IdxGT );.
23c10 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
23c20 70 5b 31 5d 2e 70 31 3d 3d 70 4f 70 5b 30 5d 2e  p[1].p1==pOp[0].
23c30 70 31 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  p1 );.      asse
23c40 72 74 28 20 70 4f 70 5b 31 5d 2e 70 32 3d 3d 70  rt( pOp[1].p2==p
23c50 4f 70 5b 30 5d 2e 70 32 20 29 3b 0a 20 20 20 20  Op[0].p2 );.    
23c60 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d    assert( pOp[1]
23c70 2e 70 33 3d 3d 70 4f 70 5b 30 5d 2e 70 33 20 29  .p3==pOp[0].p3 )
23c80 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
23c90 70 4f 70 5b 31 5d 2e 70 34 2e 69 3d 3d 70 4f 70  pOp[1].p4.i==pOp
23ca0 5b 30 5d 2e 70 34 2e 69 20 29 3b 0a 20 20 20 20  [0].p4.i );.    
23cb0 7d 0a 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20  }..    nField = 
23cc0 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 61  pOp->p4.i;.    a
23cd0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
23ce0 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
23cf0 20 20 20 20 61 73 73 65 72 74 28 20 6e 46 69 65      assert( nFie
23d00 6c 64 3e 30 20 29 3b 0a 20 20 20 20 72 2e 70 4b  ld>0 );.    r.pK
23d10 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65  eyInfo = pC->pKe
23d20 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69  yInfo;.    r.nFi
23d30 65 6c 64 20 3d 20 28 75 31 36 29 6e 46 69 65 6c  eld = (u16)nFiel
23d40 64 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e  d;..    /* The n
23d50 65 78 74 20 6c 69 6e 65 20 6f 66 20 63 6f 64 65  ext line of code
23d60 20 63 6f 6d 70 75 74 65 73 20 61 73 20 66 6f 6c   computes as fol
23d70 6c 6f 77 73 2c 20 6f 6e 6c 79 20 66 61 73 74 65  lows, only faste
23d80 72 3a 0a 20 20 20 20 2a 2a 20 20 20 69 66 28 20  r:.    **   if( 
23d90 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c  oc==OP_SeekGT ||
23da0 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29   oc==OP_SeekLE )
23db0 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 64  {.    **     r.d
23dc0 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a  efault_rc = -1;.
23dd0 20 20 20 20 2a 2a 20 20 20 7d 65 6c 73 65 7b 0a      **   }else{.
23de0 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 64 65 66      **     r.def
23df0 61 75 6c 74 5f 72 63 20 3d 20 2b 31 3b 0a 20 20  ault_rc = +1;.  
23e00 20 20 2a 2a 20 20 20 7d 0a 20 20 20 20 2a 2f 0a    **   }.    */.
23e10 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63      r.default_rc
23e20 20 3d 20 28 28 31 20 26 20 28 6f 63 20 2d 20 4f   = ((1 & (oc - O
23e30 50 5f 53 65 65 6b 4c 54 29 29 20 3f 20 2d 31 20  P_SeekLT)) ? -1 
23e40 3a 20 2b 31 29 3b 0a 20 20 20 20 61 73 73 65 72  : +1);.    asser
23e50 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 54  t( oc!=OP_SeekGT
23e60 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63   || r.default_rc
23e70 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73 73 65  ==-1 );.    asse
23e80 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c  rt( oc!=OP_SeekL
23e90 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72  E || r.default_r
23ea0 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73 73  c==-1 );.    ass
23eb0 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b  ert( oc!=OP_Seek
23ec0 47 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f  GE || r.default_
23ed0 72 63 3d 3d 2b 31 20 29 3b 0a 20 20 20 20 61 73  rc==+1 );.    as
23ee0 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65  sert( oc!=OP_See
23ef0 6b 4c 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74  kLT || r.default
23f00 5f 72 63 3d 3d 2b 31 20 29 3b 0a 0a 20 20 20 20  _rc==+1 );..    
23f10 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70  r.aMem = &aMem[p
23f20 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20  Op->p3];.#ifdef 
23f30 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
23f40 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d   { int i; for(i=
23f50 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69  0; i<r.nField; i
23f60 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ++) assert( memI
23f70 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69  sValid(&r.aMem[i
23f80 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20  ]) ); }.#endif. 
23f90 20 20 20 72 2e 65 71 53 65 65 6e 20 3d 20 30 3b     r.eqSeen = 0;
23fa0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
23fb0 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
23fc0 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72  cked(pC->uc.pCur
23fd0 73 6f 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26  sor, &r, 0, 0, &
23fe0 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63  res);.    if( rc
23ff0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
24000 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
24010 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
24020 20 20 7d 0a 20 20 20 20 69 66 28 20 65 71 4f 6e    }.    if( eqOn
24030 6c 79 20 26 26 20 72 2e 65 71 53 65 65 6e 3d 3d  ly && r.eqSeen==
24040 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
24050 74 28 20 72 65 73 21 3d 30 20 29 3b 0a 20 20 20  t( res!=0 );.   
24060 20 20 20 67 6f 74 6f 20 73 65 65 6b 5f 6e 6f 74     goto seek_not
24070 5f 66 6f 75 6e 64 3b 0a 20 20 20 20 7d 0a 20 20  _found;.    }.  
24080 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  }.#ifdef SQLITE_
24090 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73  TEST.  sqlite3_s
240a0 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23  earch_count++;.#
240b0 65 6e 64 69 66 0a 20 20 69 66 28 20 6f 63 3e 3d  endif.  if( oc>=
240c0 4f 50 5f 53 65 65 6b 47 45 20 29 7b 20 20 61 73  OP_SeekGE ){  as
240d0 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65  sert( oc==OP_See
240e0 6b 47 45 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kGE || oc==OP_Se
240f0 65 6b 47 54 20 29 3b 0a 20 20 20 20 69 66 28 20  ekGT );.    if( 
24100 72 65 73 3c 30 20 7c 7c 20 28 72 65 73 3d 3d 30  res<0 || (res==0
24110 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47   && oc==OP_SeekG
24120 54 29 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20  T) ){.      res 
24130 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  = 0;.      rc = 
24140 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74  sqlite3BtreeNext
24150 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
24160 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72   0);.      if( r
24170 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
24180 20 20 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d          if( rc==
24190 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a 20  SQLITE_DONE ){. 
241a0 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51           rc = SQ
241b0 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 20  LITE_OK;.       
241c0 20 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 20 20     res = 1;.    
241d0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
241e0 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
241f0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
24200 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
24210 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
24220 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 7d 0a   res = 0;.    }.
24230 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
24240 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  ert( oc==OP_Seek
24250 4c 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65  LT || oc==OP_See
24260 6b 4c 45 20 29 3b 0a 20 20 20 20 69 66 28 20 72  kLE );.    if( r
24270 65 73 3e 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20  es>0 || (res==0 
24280 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54  && oc==OP_SeekLT
24290 29 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d  ) ){.      res =
242a0 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   0;.      rc = s
242b0 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69  qlite3BtreePrevi
242c0 6f 75 73 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  ous(pC->uc.pCurs
242d0 6f 72 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66  or, 0);.      if
242e0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
242f0 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  ){.        if( r
24300 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29  c==SQLITE_DONE )
24310 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d  {.          rc =
24320 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20   SQLITE_OK;.    
24330 20 20 20 20 20 20 72 65 73 20 3d 20 31 3b 0a 20        res = 1;. 
24340 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
24350 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
24360 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
24370 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
24380 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
24390 20 20 20 20 2f 2a 20 72 65 73 20 6d 69 67 68 74      /* res might
243a0 20 62 65 20 6e 65 67 61 74 69 76 65 20 62 65 63   be negative bec
243b0 61 75 73 65 20 74 68 65 20 74 61 62 6c 65 20 69  ause the table i
243c0 73 20 65 6d 70 74 79 2e 20 20 43 68 65 63 6b 20  s empty.  Check 
243d0 74 6f 0a 20 20 20 20 20 20 2a 2a 20 73 65 65 20  to.      ** see 
243e0 69 66 20 74 68 69 73 20 69 73 20 74 68 65 20 63  if this is the c
243f0 61 73 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  ase..      */.  
24400 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65      res = sqlite
24410 33 42 74 72 65 65 45 6f 66 28 70 43 2d 3e 75 63  3BtreeEof(pC->uc
24420 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d  .pCursor);.    }
24430 0a 20 20 7d 0a 73 65 65 6b 5f 6e 6f 74 5f 66 6f  .  }.seek_not_fo
24440 75 6e 64 3a 0a 20 20 61 73 73 65 72 74 28 20 70  und:.  assert( p
24450 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 56 64  Op->p2>0 );.  Vd
24460 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
24470 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72  s!=0,2);.  if( r
24480 65 73 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a  es ){.    goto j
24490 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c  ump_to_p2;.  }el
244a0 73 65 20 69 66 28 20 65 71 4f 6e 6c 79 20 29 7b  se if( eqOnly ){
244b0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
244c0 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  [1].opcode==OP_I
244d0 64 78 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f  dxLT || pOp[1].o
244e0 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20  pcode==OP_IdxGT 
244f0 29 3b 0a 20 20 20 20 70 4f 70 2b 2b 3b 20 2f 2a  );.    pOp++; /*
24500 20 53 6b 69 70 20 74 68 65 20 4f 50 5f 49 64 78   Skip the OP_Idx
24510 4c 74 20 6f 72 20 4f 50 5f 49 64 78 47 54 20 74  Lt or OP_IdxGT t
24520 68 61 74 20 66 6f 6c 6c 6f 77 73 20 2a 2f 0a 20  hat follows */. 
24530 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
24540 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 48 69  * Opcode: SeekHi
24550 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
24560 20 53 79 6e 6f 70 73 69 73 3a 20 73 65 65 6b 48   Synopsis: seekH
24570 69 74 3d 50 32 0a 2a 2a 0a 2a 2a 20 53 65 74 20  it=P2.**.** Set 
24580 74 68 65 20 73 65 65 6b 48 69 74 20 66 6c 61 67  the seekHit flag
24590 20 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 74 6f   on cursor P1 to
245a0 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 50 32   the value in P2
245b0 2e 0a 2a 2a 20 54 68 65 20 73 65 65 6b 48 69 74  ..** The seekHit
245c0 20 66 6c 61 67 20 69 73 20 75 73 65 64 20 62 79   flag is used by
245d0 20 74 68 65 20 49 66 4e 6f 48 6f 70 65 20 6f 70   the IfNoHope op
245e0 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d  code..**.** P1 m
245f0 75 73 74 20 62 65 20 61 20 76 61 6c 69 64 20 62  ust be a valid b
24600 2d 74 72 65 65 20 63 75 72 73 6f 72 2e 20 20 50  -tree cursor.  P
24610 32 20 6d 75 73 74 20 62 65 20 61 20 62 6f 6f 6c  2 must be a bool
24620 65 61 6e 20 76 61 6c 75 65 2c 0a 2a 2a 20 65 69  ean value,.** ei
24630 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2f 0a  ther 0 or 1..*/.
24640 63 61 73 65 20 4f 50 5f 53 65 65 6b 48 69 74 3a  case OP_SeekHit:
24650 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
24660 2a 70 43 3b 0a 20 20 61 73 73 65 72 74 28 20 70  *pC;.  assert( p
24670 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
24680 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
24690 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
246a0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
246b0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
246c0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
246d0 32 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d  2==0 || pOp->p2=
246e0 3d 31 20 29 3b 0a 20 20 70 43 2d 3e 73 65 65 6b  =1 );.  pC->seek
246f0 48 69 74 20 3d 20 70 4f 70 2d 3e 70 32 20 26 20  Hit = pOp->p2 & 
24700 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  1;.  break;.}../
24710 2a 20 4f 70 63 6f 64 65 3a 20 46 6f 75 6e 64 20  * Opcode: Found 
24720 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
24730 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
24740 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66  [P3@P4].**.** If
24750 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69   P4==0 then regi
24760 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20  ster P3 holds a 
24770 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64  blob constructed
24780 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20   by MakeRecord. 
24790 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e   If.** P4>0 then
247a0 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
247b0 74 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20  the first of P4 
247c0 72 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66  registers that f
247d0 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a  orm an unpacked.
247e0 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a  ** record..**.**
247f0 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e   Cursor P1 is on
24800 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e   an index btree.
24810 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20    If the record 
24820 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33  identified by P3
24830 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 61 20   and P4.** is a 
24840 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65 6e  prefix of any en
24850 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20 61  try in P1 then a
24860 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f   jump is made to
24870 20 50 32 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73   P2 and.** P1 is
24880 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61   left pointing a
24890 74 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20 65  t the matching e
248a0 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ntry..**.** This
248b0 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65   operation leave
248c0 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20  s the cursor in 
248d0 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74  a state where it
248e0 20 63 61 6e 20 62 65 0a 2a 2a 20 61 64 76 61 6e   can be.** advan
248f0 63 65 64 20 69 6e 20 74 68 65 20 66 6f 72 77 61  ced in the forwa
24900 72 64 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 54  rd direction.  T
24910 68 65 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74  he Next instruct
24920 69 6f 6e 20 77 69 6c 6c 20 77 6f 72 6b 2c 0a 2a  ion will work,.*
24930 2a 20 62 75 74 20 6e 6f 74 20 74 68 65 20 50 72  * but not the Pr
24940 65 76 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ev instruction..
24950 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
24960 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66  NotFound, NoConf
24970 6c 69 63 74 2c 20 4e 6f 74 45 78 69 73 74 73 2e  lict, NotExists.
24980 20 53 65 65 6b 47 65 0a 2a 2f 0a 2f 2a 20 4f 70   SeekGe.*/./* Op
24990 63 6f 64 65 3a 20 4e 6f 74 46 6f 75 6e 64 20 50  code: NotFound P
249a0 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
249b0 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
249c0 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20  P3@P4].**.** If 
249d0 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73  P4==0 then regis
249e0 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62  ter P3 holds a b
249f0 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20  lob constructed 
24a00 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20  by MakeRecord.  
24a10 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20  If.** P4>0 then 
24a20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74  register P3 is t
24a30 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72  he first of P4 r
24a40 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f  egisters that fo
24a50 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a  rm an unpacked.*
24a60 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a  * record..** .**
24a70 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e   Cursor P1 is on
24a80 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e   an index btree.
24a90 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20    If the record 
24aa0 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33  identified by P3
24ab0 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 6e 6f   and P4.** is no
24ac0 74 20 74 68 65 20 70 72 65 66 69 78 20 6f 66 20  t the prefix of 
24ad0 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20  any entry in P1 
24ae0 74 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d  then a jump is m
24af0 61 64 65 20 74 6f 20 50 32 2e 20 20 49 66 20 50  ade to P2.  If P
24b00 31 20 0a 2a 2a 20 64 6f 65 73 20 63 6f 6e 74 61  1 .** does conta
24b10 69 6e 20 61 6e 20 65 6e 74 72 79 20 77 68 6f 73  in an entry whos
24b20 65 20 70 72 65 66 69 78 20 6d 61 74 63 68 65 73  e prefix matches
24b30 20 74 68 65 20 50 33 2f 50 34 20 72 65 63 6f 72   the P3/P4 recor
24b40 64 20 74 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a  d then control.*
24b50 2a 20 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 20  * falls through 
24b60 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
24b70 72 75 63 74 69 6f 6e 20 61 6e 64 20 50 31 20 69  ruction and P1 i
24b80 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20  s left pointing 
24b90 61 74 20 74 68 65 0a 2a 2a 20 6d 61 74 63 68 69  at the.** matchi
24ba0 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20  ng entry..**.** 
24bb0 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c  This operation l
24bc0 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
24bd0 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65 72   in a state wher
24be0 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a  e it cannot be.*
24bf0 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20 65 69  * advanced in ei
24c00 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20  ther direction. 
24c10 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
24c20 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72   the Next and Pr
24c30 65 76 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f  ev.** opcodes do
24c40 20 6e 6f 74 20 77 6f 72 6b 20 61 66 74 65 72 20   not work after 
24c50 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a  this operation..
24c60 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
24c70 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73  Found, NotExists
24c80 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 49 66  , NoConflict, If
24c90 4e 6f 48 6f 70 65 0a 2a 2f 0a 2f 2a 20 4f 70 63  NoHope.*/./* Opc
24ca0 6f 64 65 3a 20 49 66 4e 6f 48 6f 70 65 20 50 31  ode: IfNoHope P1
24cb0 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
24cc0 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
24cd0 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69  3@P4].**.** Regi
24ce0 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66  ster P3 is the f
24cf0 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73  irst of P4 regis
24d00 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61  ters that form a
24d10 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65  n unpacked.** re
24d20 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73  cord..**.** Curs
24d30 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69  or P1 is on an i
24d40 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20  ndex btree.  If 
24d50 74 68 65 20 73 65 65 6b 48 69 74 20 66 6c 61 67  the seekHit flag
24d60 20 69 73 20 73 65 74 20 6f 6e 20 50 31 2c 20 74   is set on P1, t
24d70 68 65 6e 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f  hen.** this opco
24d80 64 65 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 20 20  de is a no-op.  
24d90 42 75 74 20 69 66 20 74 68 65 20 73 65 65 6b 48  But if the seekH
24da0 69 74 20 66 6c 61 67 20 6f 66 20 50 31 20 69 73  it flag of P1 is
24db0 20 63 6c 65 61 72 2c 20 74 68 65 6e 0a 2a 2a 20   clear, then.** 
24dc0 63 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20  check to see if 
24dd0 74 68 65 72 65 20 69 73 20 61 6e 79 20 65 6e 74  there is any ent
24de0 72 79 20 69 6e 20 50 31 20 74 68 61 74 20 6d 61  ry in P1 that ma
24df0 74 63 68 65 73 20 74 68 65 0a 2a 2a 20 70 72 65  tches the.** pre
24e00 66 69 78 20 69 64 65 6e 74 69 66 69 65 64 20 62  fix identified b
24e10 79 20 50 33 20 61 6e 64 20 50 34 2e 20 20 49 66  y P3 and P4.  If
24e20 20 6e 6f 20 65 6e 74 72 79 20 6d 61 74 63 68 65   no entry matche
24e30 73 20 74 68 65 20 70 72 65 66 69 78 2c 0a 2a 2a  s the prefix,.**
24e40 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74   jump to P2.  Ot
24e50 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72  herwise fall thr
24e60 6f 75 67 68 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ough..**.** This
24e70 20 6f 70 63 6f 64 65 20 62 65 68 61 76 65 73 20   opcode behaves 
24e80 6c 69 6b 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64  like OP_NotFound
24e90 20 69 66 20 74 68 65 20 73 65 65 6b 48 69 74 0a   if the seekHit.
24ea0 2a 2a 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72  ** flag is clear
24eb0 20 61 6e 64 20 69 74 20 62 65 68 61 76 65 73 20   and it behaves 
24ec0 6c 69 6b 65 20 4f 50 5f 4e 6f 6f 70 20 69 66 20  like OP_Noop if 
24ed0 74 68 65 20 73 65 65 6b 48 69 74 20 66 6c 61 67  the seekHit flag
24ee0 20 69 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 54   is set..**.** T
24ef0 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73  his opcode is us
24f00 65 64 20 69 6e 20 49 4e 20 63 6c 61 75 73 65 20  ed in IN clause 
24f10 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 61  processing for a
24f20 20 6d 75 6c 74 69 2d 63 6f 6c 75 6d 6e 20 6b 65   multi-column ke
24f30 79 2e 0a 2a 2a 20 49 66 20 61 6e 20 49 4e 20 63  y..** If an IN c
24f40 6c 61 75 73 65 20 69 73 20 61 74 74 61 63 68 65  lause is attache
24f50 64 20 74 6f 20 61 6e 20 65 6c 65 6d 65 6e 74 20  d to an element 
24f60 6f 66 20 74 68 65 20 6b 65 79 20 6f 74 68 65 72  of the key other
24f70 20 74 68 61 6e 20 74 68 65 0a 2a 2a 20 6c 65 66   than the.** lef
24f80 74 2d 6d 6f 73 74 20 65 6c 65 6d 65 6e 74 2c 20  t-most element, 
24f90 61 6e 64 20 69 66 20 74 68 65 72 65 20 61 72 65  and if there are
24fa0 20 6e 6f 20 6d 61 74 63 68 65 73 20 6f 6e 20 74   no matches on t
24fb0 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 0a 2a  he most recent.*
24fc0 2a 20 73 65 65 6b 20 6f 76 65 72 20 74 68 65 20  * seek over the 
24fd0 77 68 6f 6c 65 20 6b 65 79 2c 20 74 68 65 6e 20  whole key, then 
24fe0 69 74 20 6d 69 67 68 74 20 62 65 20 74 68 61 74  it might be that
24ff0 20 6f 6e 65 20 6f 66 20 74 68 65 20 6b 65 79 20   one of the key 
25000 65 6c 65 6d 65 6e 74 0a 2a 2a 20 74 6f 20 74 68  element.** to th
25010 65 20 6c 65 66 74 20 69 73 20 70 72 6f 68 69 62  e left is prohib
25020 69 74 69 6e 67 20 61 20 6d 61 74 63 68 2c 20 61  iting a match, a
25030 6e 64 20 68 65 6e 63 65 20 74 68 65 72 65 20 69  nd hence there i
25040 73 20 22 6e 6f 20 68 6f 70 65 22 20 6f 66 0a 2a  s "no hope" of.*
25050 2a 20 61 6e 79 20 6d 61 74 63 68 20 72 65 67 61  * any match rega
25060 72 64 6c 65 73 73 20 6f 66 20 68 6f 77 20 6d 61  rdless of how ma
25070 6e 79 20 49 4e 20 63 6c 61 75 73 65 20 65 6c 65  ny IN clause ele
25080 6d 65 6e 74 73 20 61 72 65 20 63 68 65 63 6b 65  ments are checke
25090 64 2e 0a 2a 2a 20 49 6e 20 73 75 63 68 20 61 20  d..** In such a 
250a0 63 61 73 65 2c 20 77 65 20 61 62 61 6e 64 6f 6e  case, we abandon
250b0 20 74 68 65 20 49 4e 20 63 6c 61 75 73 65 20 73   the IN clause s
250c0 65 61 72 63 68 20 65 61 72 6c 79 2c 20 75 73 69  earch early, usi
250d0 6e 67 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64  ng this.** opcod
250e0 65 2e 20 20 54 68 65 20 6f 70 63 6f 64 65 20 6e  e.  The opcode n
250f0 61 6d 65 20 63 6f 6d 65 73 20 66 72 6f 6d 20 74  ame comes from t
25100 68 65 20 66 61 63 74 20 74 68 61 74 20 74 68 65  he fact that the
25110 0a 2a 2a 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  .** jump is take
25120 6e 20 69 66 20 74 68 65 72 65 20 69 73 20 22 6e  n if there is "n
25130 6f 20 68 6f 70 65 22 20 6f 66 20 61 63 68 69 65  o hope" of achie
25140 76 69 6e 67 20 61 20 6d 61 74 63 68 2e 0a 2a 2a  ving a match..**
25150 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f  .** See also: No
25160 74 46 6f 75 6e 64 2c 20 53 65 65 6b 48 69 74 0a  tFound, SeekHit.
25170 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  */./* Opcode: No
25180 43 6f 6e 66 6c 69 63 74 20 50 31 20 50 32 20 50  Conflict P1 P2 P
25190 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
251a0 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
251b0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20  .**.** If P4==0 
251c0 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
251d0 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f   holds a blob co
251e0 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b  nstructed by Mak
251f0 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20  eRecord.  If.** 
25200 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74  P4>0 then regist
25210 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72  er P3 is the fir
25220 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  st of P4 registe
25230 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20  rs that form an 
25240 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f  unpacked.** reco
25250 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f  rd..** .** Curso
25260 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e  r P1 is on an in
25270 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74  dex btree.  If t
25280 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69  he record identi
25290 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50  fied by P3 and P
252a0 34 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 6e  4.** contains an
252b0 79 20 4e 55 4c 4c 20 76 61 6c 75 65 2c 20 6a 75  y NULL value, ju
252c0 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
252d0 6f 20 50 32 2e 20 20 49 66 20 61 6c 6c 20 74 65  o P2.  If all te
252e0 72 6d 73 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65  rms of the.** re
252f0 63 6f 72 64 20 61 72 65 20 6e 6f 74 2d 4e 55 4c  cord are not-NUL
25300 4c 20 74 68 65 6e 20 61 20 63 68 65 63 6b 20 69  L then a check i
25310 73 20 64 6f 6e 65 20 74 6f 20 64 65 74 65 72 6d  s done to determ
25320 69 6e 65 20 69 66 20 61 6e 79 20 72 6f 77 20 69  ine if any row i
25330 6e 20 74 68 65 0a 2a 2a 20 50 31 20 69 6e 64 65  n the.** P1 inde
25340 78 20 62 74 72 65 65 20 68 61 73 20 61 20 6d 61  x btree has a ma
25350 74 63 68 69 6e 67 20 6b 65 79 20 70 72 65 66 69  tching key prefi
25360 78 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65  x.  If there are
25370 20 6e 6f 20 6d 61 74 63 68 65 73 2c 20 6a 75 6d   no matches, jum
25380 70 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79  p.** immediately
25390 20 74 6f 20 50 32 2e 20 20 49 66 20 74 68 65 72   to P2.  If ther
253a0 65 20 69 73 20 61 20 6d 61 74 63 68 2c 20 66 61  e is a match, fa
253b0 6c 6c 20 74 68 72 6f 75 67 68 20 61 6e 64 20 6c  ll through and l
253c0 65 61 76 65 20 74 68 65 20 50 31 0a 2a 2a 20 63  eave the P1.** c
253d0 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74  ursor pointing t
253e0 6f 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20 72  o the matching r
253f0 6f 77 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  ow..**.** This o
25400 70 63 6f 64 65 20 69 73 20 73 69 6d 69 6c 61 72  pcode is similar
25410 20 74 6f 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20   to OP_NotFound 
25420 77 69 74 68 20 74 68 65 20 65 78 63 65 70 74 69  with the excepti
25430 6f 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20  ons that the.** 
25440 62 72 61 6e 63 68 20 69 73 20 61 6c 77 61 79 73  branch is always
25450 20 74 61 6b 65 6e 20 69 66 20 61 6e 79 20 70 61   taken if any pa
25460 72 74 20 6f 66 20 74 68 65 20 73 65 61 72 63 68  rt of the search
25470 20 6b 65 79 20 69 6e 70 75 74 20 69 73 20 4e 55   key input is NU
25480 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  LL..**.** This o
25490 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73 20  peration leaves 
254a0 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20  the cursor in a 
254b0 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63  state where it c
254c0 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61 64 76 61  annot be.** adva
254d0 6e 63 65 64 20 69 6e 20 65 69 74 68 65 72 20 64  nced in either d
254e0 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74  irection.  In ot
254f0 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e  her words, the N
25500 65 78 74 20 61 6e 64 20 50 72 65 76 0a 2a 2a 20  ext and Prev.** 
25510 6f 70 63 6f 64 65 73 20 64 6f 20 6e 6f 74 20 77  opcodes do not w
25520 6f 72 6b 20 61 66 74 65 72 20 74 68 69 73 20 6f  ork after this o
25530 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  peration..**.** 
25540 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75  See also: NotFou
25550 6e 64 2c 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78  nd, Found, NotEx
25560 69 73 74 73 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ists.*/.case OP_
25570 49 66 4e 6f 48 6f 70 65 3a 20 7b 20 20 20 20 20  IfNoHope: {     
25580 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
25590 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
255a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
255b0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
255c0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
255d0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
255e0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
255f0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69  rt( pC!=0 );.  i
25600 66 28 20 70 43 2d 3e 73 65 65 6b 48 69 74 20 29  f( pC->seekHit )
25610 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c   break;.  /* Fal
25620 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f  l through into O
25630 50 5f 4e 6f 74 46 6f 75 6e 64 20 2a 2f 0a 7d 0a  P_NotFound */.}.
25640 63 61 73 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69  case OP_NoConfli
25650 63 74 3a 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c  ct:     /* jump,
25660 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
25670 4e 6f 74 46 6f 75 6e 64 3a 20 20 20 20 20 20 20  NotFound:       
25680 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
25690 63 61 73 65 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b  case OP_Found: {
256a0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
256b0 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 61 6c   in3 */.  int al
256c0 72 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20 69  readyExists;.  i
256d0 6e 74 20 74 61 6b 65 4a 75 6d 70 3b 0a 20 20 69  nt takeJump;.  i
256e0 6e 74 20 69 69 3b 0a 20 20 56 64 62 65 43 75 72  nt ii;.  VdbeCur
256f0 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72  sor *pC;.  int r
25700 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  es;.  UnpackedRe
25710 63 6f 72 64 20 2a 70 46 72 65 65 3b 0a 20 20 55  cord *pFree;.  U
25720 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 2a 70  npackedRecord *p
25730 49 64 78 4b 65 79 3b 0a 20 20 55 6e 70 61 63 6b  IdxKey;.  Unpack
25740 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 23 69 66  edRecord r;..#if
25750 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
25760 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
25770 65 21 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74  e!=OP_NoConflict
25780 20 29 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64   ) sqlite3_found
25790 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66  _count++;.#endif
257a0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
257b0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
257c0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
257d0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
257e0 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
257f0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
25800 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
25810 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
25820 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
25830 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70  BUG.  pC->seekOp
25840 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a   = pOp->opcode;.
25850 23 65 6e 64 69 66 0a 20 20 70 49 6e 33 20 3d 20  #endif.  pIn3 = 
25860 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
25870 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
25880 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
25890 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72  BTREE );.  asser
258a0 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  t( pC->uc.pCurso
258b0 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r!=0 );.  assert
258c0 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  ( pC->isTable==0
258d0 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   );.  if( pOp->p
258e0 34 2e 69 3e 30 20 29 7b 0a 20 20 20 20 72 2e 70  4.i>0 ){.    r.p
258f0 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b  KeyInfo = pC->pK
25900 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46  eyInfo;.    r.nF
25910 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d  ield = (u16)pOp-
25920 3e 70 34 2e 69 3b 0a 20 20 20 20 72 2e 61 4d 65  >p4.i;.    r.aMe
25930 6d 20 3d 20 70 49 6e 33 3b 0a 23 69 66 64 65 66  m = pIn3;.#ifdef
25940 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
25950 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 72    for(ii=0; ii<r
25960 2e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a  .nField; ii++){.
25970 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
25980 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d  mIsValid(&r.aMem
25990 5b 69 69 5d 29 20 29 3b 0a 20 20 20 20 20 20 61  [ii]) );.      a
259a0 73 73 65 72 74 28 20 28 72 2e 61 4d 65 6d 5b 69  ssert( (r.aMem[i
259b0 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a  i].flags & MEM_Z
259c0 65 72 6f 29 3d 3d 30 20 7c 7c 20 72 2e 61 4d 65  ero)==0 || r.aMe
259d0 6d 5b 69 69 5d 2e 6e 3d 3d 30 20 29 3b 0a 20 20  m[ii].n==0 );.  
259e0 20 20 20 20 69 66 28 20 69 69 20 29 20 52 45 47      if( ii ) REG
259f0 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
25a00 3e 70 33 2b 69 69 2c 20 26 72 2e 61 4d 65 6d 5b  >p3+ii, &r.aMem[
25a10 69 69 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  ii]);.    }.#end
25a20 69 66 0a 20 20 20 20 70 49 64 78 4b 65 79 20 3d  if.    pIdxKey =
25a30 20 26 72 3b 0a 20 20 20 20 70 46 72 65 65 20 3d   &r;.    pFree =
25a40 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   0;.  }else{.   
25a50 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
25a60 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20  lags & MEM_Blob 
25a70 29 3b 0a 20 20 20 20 72 63 20 3d 20 45 78 70 61  );.    rc = Expa
25a80 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20  ndBlob(pIn3);.  
25a90 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
25aa0 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53  LITE_OK || rc==S
25ab0 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 3b 0a 20  QLITE_NOMEM );. 
25ac0 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f     if( rc ) goto
25ad0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 70 46 72   no_mem;.    pFr
25ae0 65 65 20 3d 20 70 49 64 78 4b 65 79 20 3d 20 73  ee = pIdxKey = s
25af0 71 6c 69 74 65 33 56 64 62 65 41 6c 6c 6f 63 55  qlite3VdbeAllocU
25b00 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 28 70 43  npackedRecord(pC
25b10 2d 3e 70 4b 65 79 49 6e 66 6f 29 3b 0a 20 20 20  ->pKeyInfo);.   
25b20 20 69 66 28 20 70 49 64 78 4b 65 79 3d 3d 30 20   if( pIdxKey==0 
25b30 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
25b40 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 52 65     sqlite3VdbeRe
25b50 63 6f 72 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70  cordUnpack(pC->p
25b60 4b 65 79 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e  KeyInfo, pIn3->n
25b70 2c 20 70 49 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b  , pIn3->z, pIdxK
25b80 65 79 29 3b 0a 20 20 7d 0a 20 20 70 49 64 78 4b  ey);.  }.  pIdxK
25b90 65 79 2d 3e 64 65 66 61 75 6c 74 5f 72 63 20 3d  ey->default_rc =
25ba0 20 30 3b 0a 20 20 74 61 6b 65 4a 75 6d 70 20 3d   0;.  takeJump =
25bb0 20 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f   0;.  if( pOp->o
25bc0 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 43 6f 6e 66  pcode==OP_NoConf
25bd0 6c 69 63 74 20 29 7b 0a 20 20 20 20 2f 2a 20 46  lict ){.    /* F
25be0 6f 72 20 74 68 65 20 4f 50 5f 4e 6f 43 6f 6e 66  or the OP_NoConf
25bf0 6c 69 63 74 20 6f 70 63 6f 64 65 2c 20 74 61 6b  lict opcode, tak
25c00 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e  e the jump if an
25c10 79 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20  y of the.    ** 
25c20 69 6e 70 75 74 20 66 69 65 6c 64 73 20 61 72 65  input fields are
25c30 20 4e 55 4c 4c 2c 20 73 69 6e 63 65 20 61 6e 79   NULL, since any
25c40 20 6b 65 79 20 77 69 74 68 20 61 20 4e 55 4c 4c   key with a NULL
25c50 20 77 69 6c 6c 20 6e 6f 74 0a 20 20 20 20 2a 2a   will not.    **
25c60 20 63 6f 6e 66 6c 69 63 74 20 2a 2f 0a 20 20 20   conflict */.   
25c70 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 70 49   for(ii=0; ii<pI
25c80 64 78 4b 65 79 2d 3e 6e 46 69 65 6c 64 3b 20 69  dxKey->nField; i
25c90 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20  i++){.      if( 
25ca0 70 49 64 78 4b 65 79 2d 3e 61 4d 65 6d 5b 69 69  pIdxKey->aMem[ii
25cb0 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ].flags & MEM_Nu
25cc0 6c 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 74 61  ll ){.        ta
25cd0 6b 65 4a 75 6d 70 20 3d 20 31 3b 0a 20 20 20 20  keJump = 1;.    
25ce0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
25cf0 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72   }.    }.  }.  r
25d00 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
25d10 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
25d20 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 70  C->uc.pCursor, p
25d30 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72  IdxKey, 0, 0, &r
25d40 65 73 29 3b 0a 20 20 69 66 28 20 70 46 72 65 65  es);.  if( pFree
25d50 20 29 20 73 71 6c 69 74 65 33 44 62 46 72 65 65   ) sqlite3DbFree
25d60 4e 4e 28 64 62 2c 20 70 46 72 65 65 29 3b 0a 20  NN(db, pFree);. 
25d70 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
25d80 4f 4b 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 61  OK ){.    goto a
25d90 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
25da0 72 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 73 65 65  r;.  }.  pC->see
25db0 6b 52 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20  kResult = res;. 
25dc0 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d   alreadyExists =
25dd0 20 28 72 65 73 3d 3d 30 29 3b 0a 20 20 70 43 2d   (res==0);.  pC-
25de0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 2d 61 6c 72  >nullRow = 1-alr
25df0 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20 70 43  eadyExists;.  pC
25e00 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
25e10 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
25e20 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
25e30 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 4f 70  STALE;.  if( pOp
25e40 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75  ->opcode==OP_Fou
25e50 6e 64 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72  nd ){.    VdbeBr
25e60 61 6e 63 68 54 61 6b 65 6e 28 61 6c 72 65 61 64  anchTaken(alread
25e70 79 45 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20  yExists!=0,2);. 
25e80 20 20 20 69 66 28 20 61 6c 72 65 61 64 79 45 78     if( alreadyEx
25e90 69 73 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70  ists ) goto jump
25ea0 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b  _to_p2;.  }else{
25eb0 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
25ec0 61 6b 65 6e 28 74 61 6b 65 4a 75 6d 70 7c 7c 61  aken(takeJump||a
25ed0 6c 72 65 61 64 79 45 78 69 73 74 73 3d 3d 30 2c  lreadyExists==0,
25ee0 32 29 3b 0a 20 20 20 20 69 66 28 20 74 61 6b 65  2);.    if( take
25ef0 4a 75 6d 70 20 7c 7c 20 21 61 6c 72 65 61 64 79  Jump || !already
25f00 45 78 69 73 74 73 20 29 20 67 6f 74 6f 20 6a 75  Exists ) goto ju
25f10 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
25f20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
25f30 6f 64 65 3a 20 53 65 65 6b 52 6f 77 69 64 20 50  ode: SeekRowid P
25f40 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
25f50 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d  ynopsis: intkey=
25f60 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69  r[P3].**.** P1 i
25f70 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61  s the index of a
25f80 20 63 75 72 73 6f 72 20 6f 70 65 6e 20 6f 6e 20   cursor open on 
25f90 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 62 74 72  an SQL table btr
25fa0 65 65 20 28 77 69 74 68 20 69 6e 74 65 67 65 72  ee (with integer
25fb0 0a 2a 2a 20 6b 65 79 73 29 2e 20 20 49 66 20 72  .** keys).  If r
25fc0 65 67 69 73 74 65 72 20 50 33 20 64 6f 65 73 20  egister P3 does 
25fd0 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69  not contain an i
25fe0 6e 74 65 67 65 72 20 6f 72 20 69 66 20 50 31 20  nteger or if P1 
25ff0 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63 6f 6e 74  does not.** cont
26000 61 69 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74  ain a record wit
26010 68 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20  h rowid P3 then 
26020 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
26030 20 74 6f 20 50 32 2e 20 20 0a 2a 2a 20 4f 72 2c   to P2.  .** Or,
26040 20 69 66 20 50 32 20 69 73 20 30 2c 20 72 61 69   if P2 is 0, rai
26050 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 43 4f 52  se an SQLITE_COR
26060 52 55 50 54 20 65 72 72 6f 72 2e 20 49 66 20 50  RUPT error. If P
26070 31 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 0a 2a  1 does contain.*
26080 2a 20 61 20 72 65 63 6f 72 64 20 77 69 74 68 20  * a record with 
26090 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20 0a 2a  rowid P3 then .*
260a0 2a 20 6c 65 61 76 65 20 74 68 65 20 63 75 72 73  * leave the curs
260b0 6f 72 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74  or pointing at t
260c0 68 61 74 20 72 65 63 6f 72 64 20 61 6e 64 20 66  hat record and f
260d0 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
260e0 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72  he next.** instr
260f0 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  uction..**.** Th
26100 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f  e OP_NotExists o
26110 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74  pcode performs t
26120 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f  he same operatio
26130 6e 2c 20 62 75 74 20 77 69 74 68 20 4f 50 5f 4e  n, but with OP_N
26140 6f 74 45 78 69 73 74 73 0a 2a 2a 20 74 68 65 20  otExists.** the 
26150 50 33 20 72 65 67 69 73 74 65 72 20 6d 75 73 74  P3 register must
26160 20 62 65 20 67 75 61 72 61 6e 74 65 65 64 20 74   be guaranteed t
26170 6f 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  o contain an int
26180 65 67 65 72 20 76 61 6c 75 65 2e 20 20 57 69 74  eger value.  Wit
26190 68 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65  h this.** opcode
261a0 2c 20 72 65 67 69 73 74 65 72 20 50 33 20 6d 69  , register P3 mi
261b0 67 68 74 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20  ght not contain 
261c0 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a  an integer..**.*
261d0 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e  * The OP_NotFoun
261e0 64 20 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d  d opcode perform
261f0 73 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61  s the same opera
26200 74 69 6f 6e 20 6f 6e 20 69 6e 64 65 78 20 62 74  tion on index bt
26210 72 65 65 73 0a 2a 2a 20 28 77 69 74 68 20 61 72  rees.** (with ar
26220 62 69 74 72 61 72 79 20 6d 75 6c 74 69 2d 76 61  bitrary multi-va
26230 6c 75 65 20 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a  lue keys)..**.**
26240 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
26250 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 69  ves the cursor i
26260 6e 20 61 20 73 74 61 74 65 20 77 68 65 72 65 20  n a state where 
26270 69 74 20 63 61 6e 6e 6f 74 20 62 65 20 61 64 76  it cannot be adv
26280 61 6e 63 65 64 0a 2a 2a 20 69 6e 20 65 69 74 68  anced.** in eith
26290 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49  er direction.  I
262a0 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
262b0 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76  he Next and Prev
262c0 20 6f 70 63 6f 64 65 73 20 77 69 6c 6c 0a 2a 2a   opcodes will.**
262d0 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 6c 6c 6f 77   not work follow
262e0 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e  ing this opcode.
262f0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
26300 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
26310 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 53 65  , NoConflict, Se
26320 65 6b 52 6f 77 69 64 0a 2a 2f 0a 2f 2a 20 4f 70  ekRowid.*/./* Op
26330 63 6f 64 65 3a 20 4e 6f 74 45 78 69 73 74 73 20  code: NotExists 
26340 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
26350 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79  Synopsis: intkey
26360 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20  =r[P3].**.** P1 
26370 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  is the index of 
26380 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 20 6f 6e  a cursor open on
26390 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 62 74   an SQL table bt
263a0 72 65 65 20 28 77 69 74 68 20 69 6e 74 65 67 65  ree (with intege
263b0 72 0a 2a 2a 20 6b 65 79 73 29 2e 20 20 50 33 20  r.** keys).  P3 
263c0 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 72 6f  is an integer ro
263d0 77 69 64 2e 20 20 49 66 20 50 31 20 64 6f 65 73  wid.  If P1 does
263e0 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 20 72   not contain a r
263f0 65 63 6f 72 64 20 77 69 74 68 0a 2a 2a 20 72 6f  ecord with.** ro
26400 77 69 64 20 50 33 20 74 68 65 6e 20 6a 75 6d 70  wid P3 then jump
26410 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
26420 50 32 2e 20 20 4f 72 2c 20 69 66 20 50 32 20 69  P2.  Or, if P2 i
26430 73 20 30 2c 20 72 61 69 73 65 20 61 6e 0a 2a 2a  s 0, raise an.**
26440 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20   SQLITE_CORRUPT 
26450 65 72 72 6f 72 2e 20 49 66 20 50 31 20 64 6f 65  error. If P1 doe
26460 73 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f  s contain a reco
26470 72 64 20 77 69 74 68 20 72 6f 77 69 64 20 50 33  rd with rowid P3
26480 20 74 68 65 6e 20 0a 2a 2a 20 6c 65 61 76 65 20   then .** leave 
26490 74 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74  the cursor point
264a0 69 6e 67 20 61 74 20 74 68 61 74 20 72 65 63 6f  ing at that reco
264b0 72 64 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f  rd and fall thro
264c0 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 0a  ugh to the next.
264d0 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ** instruction..
264e0 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 53 65 65  **.** The OP_See
264f0 6b 52 6f 77 69 64 20 6f 70 63 6f 64 65 20 70 65  kRowid opcode pe
26500 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20  rforms the same 
26510 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20 61 6c  operation but al
26520 73 6f 20 61 6c 6c 6f 77 73 20 74 68 65 0a 2a 2a  so allows the.**
26530 20 50 33 20 72 65 67 69 73 74 65 72 20 74 6f 20   P3 register to 
26540 63 6f 6e 74 61 69 6e 20 61 20 6e 6f 6e 2d 69 6e  contain a non-in
26550 74 65 67 65 72 20 76 61 6c 75 65 2c 20 69 6e 20  teger value, in 
26560 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20 6a  which case the j
26570 75 6d 70 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73  ump is.** always
26580 20 74 61 6b 65 6e 2e 20 20 54 68 69 73 20 6f 70   taken.  This op
26590 63 6f 64 65 20 72 65 71 75 69 72 65 73 20 74 68  code requires th
265a0 61 74 20 50 33 20 61 6c 77 61 79 73 20 63 6f 6e  at P3 always con
265b0 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e  tain an integer.
265c0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f  .**.** The OP_No
265d0 74 46 6f 75 6e 64 20 6f 70 63 6f 64 65 20 70 65  tFound opcode pe
265e0 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20  rforms the same 
265f0 6f 70 65 72 61 74 69 6f 6e 20 6f 6e 20 69 6e 64  operation on ind
26600 65 78 20 62 74 72 65 65 73 0a 2a 2a 20 28 77 69  ex btrees.** (wi
26610 74 68 20 61 72 62 69 74 72 61 72 79 20 6d 75 6c  th arbitrary mul
26620 74 69 2d 76 61 6c 75 65 20 6b 65 79 73 29 2e 0a  ti-value keys)..
26630 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
26640 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  e leaves the cur
26650 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77  sor in a state w
26660 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62  here it cannot b
26670 65 20 61 64 76 61 6e 63 65 64 0a 2a 2a 20 69 6e  e advanced.** in
26680 20 65 69 74 68 65 72 20 64 69 72 65 63 74 69 6f   either directio
26690 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  n.  In other wor
266a0 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64  ds, the Next and
266b0 20 50 72 65 76 20 6f 70 63 6f 64 65 73 20 77 69   Prev opcodes wi
266c0 6c 6c 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20 66  ll.** not work f
266d0 6f 6c 6c 6f 77 69 6e 67 20 74 68 69 73 20 6f 70  ollowing this op
266e0 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  code..**.** See 
266f0 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
26700 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63  Found, NoConflic
26710 74 2c 20 53 65 65 6b 52 6f 77 69 64 0a 2a 2f 0a  t, SeekRowid.*/.
26720 63 61 73 65 20 4f 50 5f 53 65 65 6b 52 6f 77 69  case OP_SeekRowi
26730 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  d: {        /* j
26740 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64  ump, in3 */.  Vd
26750 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
26760 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
26770 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 75 36  .  int res;.  u6
26780 34 20 69 4b 65 79 3b 0a 0a 20 20 70 49 6e 33 20  4 iKey;..  pIn3 
26790 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
267a0 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 49  ;.  testcase( pI
267b0 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
267c0 49 6e 74 20 29 3b 0a 20 20 74 65 73 74 63 61 73  Int );.  testcas
267d0 65 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  e( pIn3->flags &
267e0 20 4d 45 4d 5f 49 6e 74 52 65 61 6c 20 29 3b 0a   MEM_IntReal );.
267f0 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61    if( (pIn3->fla
26800 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  gs & (MEM_Int|ME
26810 4d 5f 49 6e 74 52 65 61 6c 29 29 3d 3d 30 20 29  M_IntReal))==0 )
26820 7b 0a 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75  {.    /* Make su
26830 72 65 20 70 49 6e 33 2d 3e 75 2e 69 20 63 6f 6e  re pIn3->u.i con
26840 74 61 69 6e 73 20 61 20 76 61 6c 69 64 20 69 6e  tains a valid in
26850 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
26860 74 69 6f 6e 20 6f 66 0a 20 20 20 20 2a 2a 20 74  tion of.    ** t
26870 68 65 20 6b 65 79 20 76 61 6c 75 65 2c 20 62 75  he key value, bu
26880 74 20 64 6f 20 6e 6f 74 20 63 68 61 6e 67 65 20  t do not change 
26890 74 68 65 20 64 61 74 61 74 79 70 65 20 6f 66 20  the datatype of 
268a0 74 68 65 20 72 65 67 69 73 74 65 72 2c 20 61 73  the register, as
268b0 0a 20 20 20 20 2a 2a 20 6f 74 68 65 72 20 70 61  .    ** other pa
268c0 72 74 73 20 6f 66 20 74 68 65 20 70 65 72 70 61  rts of the perpa
268d0 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 6d 69  red statement mi
268e0 67 68 74 20 62 65 20 64 65 70 65 6e 64 69 6e 67  ght be depending
268f0 20 6f 6e 20 74 68 65 0a 20 20 20 20 2a 2a 20 63   on the.    ** c
26900 75 72 72 65 6e 74 20 64 61 74 61 74 79 70 65 2e  urrent datatype.
26910 20 2a 2f 0a 20 20 20 20 75 31 36 20 6f 72 69 67   */.    u16 orig
26920 46 6c 61 67 73 20 3d 20 70 49 6e 33 2d 3e 66 6c  Flags = pIn3->fl
26930 61 67 73 3b 0a 20 20 20 20 69 6e 74 20 69 73 4e  ags;.    int isN
26940 6f 74 49 6e 74 3b 0a 20 20 20 20 61 70 70 6c 79  otInt;.    apply
26950 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 20 53  Affinity(pIn3, S
26960 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
26970 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  C, encoding);.  
26980 20 20 69 73 4e 6f 74 49 6e 74 20 3d 20 28 70 49    isNotInt = (pI
26990 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
269a0 49 6e 74 29 3d 3d 30 3b 0a 20 20 20 20 70 49 6e  Int)==0;.    pIn
269b0 33 2d 3e 66 6c 61 67 73 20 3d 20 6f 72 69 67 46  3->flags = origF
269c0 6c 61 67 73 3b 0a 20 20 20 20 69 66 28 20 69 73  lags;.    if( is
269d0 4e 6f 74 49 6e 74 20 29 20 67 6f 74 6f 20 6a 75  NotInt ) goto ju
269e0 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
269f0 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
26a00 69 6e 74 6f 20 4f 50 5f 4e 6f 74 45 78 69 73 74  into OP_NotExist
26a10 73 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74  s */.case OP_Not
26a20 45 78 69 73 74 73 3a 20 20 20 20 20 20 20 20 20  Exists:         
26a30 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
26a40 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
26a50 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65  pOp->p3];.  asse
26a60 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  rt( (pIn3->flags
26a70 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 7c   & MEM_Int)!=0 |
26a80 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
26a90 50 5f 53 65 65 6b 52 6f 77 69 64 20 29 3b 0a 20  P_SeekRowid );. 
26aa0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
26ab0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
26ac0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
26ad0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
26ae0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
26af0 20 70 43 21 3d 30 20 29 3b 0a 23 69 66 64 65 66   pC!=0 );.#ifdef
26b00 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
26b10 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
26b20 3d 4f 50 5f 53 65 65 6b 52 6f 77 69 64 20 29 20  =OP_SeekRowid ) 
26b30 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f  pC->seekOp = OP_
26b40 53 65 65 6b 52 6f 77 69 64 3b 0a 23 65 6e 64 69  SeekRowid;.#endi
26b50 66 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  f.  assert( pC->
26b60 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73  isTable );.  ass
26b70 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
26b80 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
26b90 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43   );.  pCrsr = pC
26ba0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20  ->uc.pCursor;.  
26bb0 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30  assert( pCrsr!=0
26bc0 20 29 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20   );.  res = 0;. 
26bd0 20 69 4b 65 79 20 3d 20 70 49 6e 33 2d 3e 75 2e   iKey = pIn3->u.
26be0 69 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  i;.  rc = sqlite
26bf0 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
26c00 63 6b 65 64 28 70 43 72 73 72 2c 20 30 2c 20 69  cked(pCrsr, 0, i
26c10 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20  Key, 0, &res);. 
26c20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
26c30 49 54 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30  ITE_OK || res==0
26c40 20 29 3b 0a 20 20 70 43 2d 3e 6d 6f 76 65 74 6f   );.  pC->moveto
26c50 54 61 72 67 65 74 20 3d 20 69 4b 65 79 3b 20 20  Target = iKey;  
26c60 2f 2a 20 55 73 65 64 20 62 79 20 4f 50 5f 44 65  /* Used by OP_De
26c70 6c 65 74 65 20 2a 2f 0a 20 20 70 43 2d 3e 6e 75  lete */.  pC->nu
26c80 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 70 43 2d  llRow = 0;.  pC-
26c90 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
26ca0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43  ACHE_STALE;.  pC
26cb0 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
26cc0 20 3d 20 30 3b 0a 20 20 56 64 62 65 42 72 61 6e   = 0;.  VdbeBran
26cd0 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32  chTaken(res!=0,2
26ce0 29 3b 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73  );.  pC->seekRes
26cf0 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 69 66 28  ult = res;.  if(
26d00 20 72 65 73 21 3d 30 20 29 7b 0a 20 20 20 20 61   res!=0 ){.    a
26d10 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
26d20 45 5f 4f 4b 20 29 3b 0a 20 20 20 20 69 66 28 20  E_OK );.    if( 
26d30 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20  pOp->p2==0 ){.  
26d40 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
26d50 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20  CORRUPT_BKPT;.  
26d60 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 67    }else{.      g
26d70 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
26d80 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20      }.  }.  if( 
26d90 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
26da0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
26db0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
26dc0 6f 64 65 3a 20 53 65 71 75 65 6e 63 65 20 50 31  ode: Sequence P1
26dd0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
26de0 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 63 75 72  opsis: r[P2]=cur
26df0 73 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b 0a 2a 2a  sor[P1].ctr++.**
26e00 0a 2a 2a 20 46 69 6e 64 20 74 68 65 20 6e 65 78  .** Find the nex
26e10 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65 71 75  t available sequ
26e20 65 6e 63 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  ence number for 
26e30 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72  cursor P1..** Wr
26e40 69 74 65 20 74 68 65 20 73 65 71 75 65 6e 63 65  ite the sequence
26e50 20 6e 75 6d 62 65 72 20 69 6e 74 6f 20 72 65 67   number into reg
26e60 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65  ister P2..** The
26e70 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72   sequence number
26e80 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69   on the cursor i
26e90 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 66  s incremented af
26ea0 74 65 72 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74  ter this.** inst
26eb0 72 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61  ruction.  .*/.ca
26ec0 73 65 20 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20  se OP_Sequence: 
26ed0 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
26ee0 75 74 32 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ut2 */.  assert(
26ef0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
26f00 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
26f10 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
26f20 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
26f30 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
26f40 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
26f50 31 5d 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55  1]->eCurType!=CU
26f60 52 54 59 50 45 5f 56 54 41 42 20 29 3b 0a 20 20  RTYPE_VTAB );.  
26f70 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
26f80 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
26f90 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e   pOut->u.i = p->
26fa0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e  apCsr[pOp->p1]->
26fb0 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20 62 72  seqCount++;.  br
26fc0 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f  eak;.}.../* Opco
26fd0 64 65 3a 20 4e 65 77 52 6f 77 69 64 20 50 31 20  de: NewRowid P1 
26fe0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
26ff0 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77  opsis: r[P2]=row
27000 69 64 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61 20 6e  id.**.** Get a n
27010 65 77 20 69 6e 74 65 67 65 72 20 72 65 63 6f 72  ew integer recor
27020 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b 2e 61 20  d number (a.k.a 
27030 22 72 6f 77 69 64 22 29 20 75 73 65 64 20 61 73  "rowid") used as
27040 20 74 68 65 20 6b 65 79 20 74 6f 20 61 20 74 61   the key to a ta
27050 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 65 63 6f  ble..** The reco
27060 72 64 20 6e 75 6d 62 65 72 20 69 73 20 6e 6f 74  rd number is not
27070 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64   previously used
27080 20 61 73 20 61 20 6b 65 79 20 69 6e 20 74 68 65   as a key in the
27090 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 74 61 62   database.** tab
270a0 6c 65 20 74 68 61 74 20 63 75 72 73 6f 72 20 50  le that cursor P
270b0 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 54 68  1 points to.  Th
270c0 65 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d  e new record num
270d0 62 65 72 20 69 73 20 77 72 69 74 74 65 6e 0a 2a  ber is written.*
270e0 2a 20 77 72 69 74 74 65 6e 20 74 6f 20 72 65 67  * written to reg
270f0 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
27100 49 66 20 50 33 3e 30 20 74 68 65 6e 20 50 33 20  If P3>0 then P3 
27110 69 73 20 61 20 72 65 67 69 73 74 65 72 20 69 6e  is a register in
27120 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20   the root frame 
27130 6f 66 20 74 68 69 73 20 56 44 42 45 20 74 68 61  of this VDBE tha
27140 74 20 68 6f 6c 64 73 20 0a 2a 2a 20 74 68 65 20  t holds .** the 
27150 6c 61 72 67 65 73 74 20 70 72 65 76 69 6f 75 73  largest previous
27160 6c 79 20 67 65 6e 65 72 61 74 65 64 20 72 65 63  ly generated rec
27170 6f 72 64 20 6e 75 6d 62 65 72 2e 20 4e 6f 20 6e  ord number. No n
27180 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  ew record number
27190 73 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f 77 65 64  s are.** allowed
271a0 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e   to be less than
271b0 20 74 68 69 73 20 76 61 6c 75 65 2e 20 57 68 65   this value. Whe
271c0 6e 20 74 68 69 73 20 76 61 6c 75 65 20 72 65 61  n this value rea
271d0 63 68 65 73 20 69 74 73 20 6d 61 78 69 6d 75 6d  ches its maximum
271e0 2c 20 0a 2a 2a 20 61 6e 20 53 51 4c 49 54 45 5f  , .** an SQLITE_
271f0 46 55 4c 4c 20 65 72 72 6f 72 20 69 73 20 67 65  FULL error is ge
27200 6e 65 72 61 74 65 64 2e 20 54 68 65 20 50 33 20  nerated. The P3 
27210 72 65 67 69 73 74 65 72 20 69 73 20 75 70 64 61  register is upda
27220 74 65 64 20 77 69 74 68 20 74 68 65 20 27 0a 2a  ted with the '.*
27230 2a 20 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f  * generated reco
27240 72 64 20 6e 75 6d 62 65 72 2e 20 54 68 69 73 20  rd number. This 
27250 50 33 20 6d 65 63 68 61 6e 69 73 6d 20 69 73 20  P3 mechanism is 
27260 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69 6d 70  used to help imp
27270 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 41 55  lement the.** AU
27280 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65 61 74  TOINCREMENT feat
27290 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ure..*/.case OP_
272a0 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20 20 20 20  NewRowid: {     
272b0 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
272c0 0a 20 20 69 36 34 20 76 3b 20 20 20 20 20 20 20  .  i64 v;       
272d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
272e0 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20   new rowid */.  
272f0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20  VdbeCursor *pC; 
27300 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72         /* Cursor
27310 20 6f 66 20 74 61 62 6c 65 20 74 6f 20 67 65 74   of table to get
27320 20 74 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a   the new rowid *
27330 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20  /.  int res;    
27340 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
27350 73 75 6c 74 20 6f 66 20 61 6e 20 73 71 6c 69 74  sult of an sqlit
27360 65 33 42 74 72 65 65 4c 61 73 74 28 29 20 2a 2f  e3BtreeLast() */
27370 0a 20 20 69 6e 74 20 63 6e 74 3b 20 20 20 20 20  .  int cnt;     
27380 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75            /* Cou
27390 6e 74 65 72 20 74 6f 20 6c 69 6d 69 74 20 74 68  nter to limit th
273a0 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 65 61 72  e number of sear
273b0 63 68 65 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ches */.  Mem *p
273c0 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
273d0 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c   /* Register hol
273e0 64 69 6e 67 20 6c 61 72 67 65 73 74 20 72 6f 77  ding largest row
273f0 69 64 20 66 6f 72 20 41 55 54 4f 49 4e 43 52 45  id for AUTOINCRE
27400 4d 45 4e 54 20 2a 2f 0a 20 20 56 64 62 65 46 72  MENT */.  VdbeFr
27410 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20 20  ame *pFrame;    
27420 20 2f 2a 20 52 6f 6f 74 20 66 72 61 6d 65 20 6f   /* Root frame o
27430 66 20 56 44 42 45 20 2a 2f 0a 0a 20 20 76 20 3d  f VDBE */..  v =
27440 20 30 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20   0;.  res = 0;. 
27450 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
27460 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
27470 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
27480 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
27490 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
274a0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
274b0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
274c0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
274d0 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
274e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
274f0 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
27500 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61  YPE_BTREE );.  a
27510 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43  ssert( pC->uc.pC
27520 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 7b 0a  ursor!=0 );.  {.
27530 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20      /* The next 
27540 72 6f 77 69 64 20 6f 72 20 72 65 63 6f 72 64 20  rowid or record 
27550 6e 75 6d 62 65 72 20 28 64 69 66 66 65 72 65 6e  number (differen
27560 74 20 74 65 72 6d 73 20 66 6f 72 20 74 68 65 20  t terms for the 
27570 73 61 6d 65 0a 20 20 20 20 2a 2a 20 74 68 69 6e  same.    ** thin
27580 67 29 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69  g) is obtained i
27590 6e 20 61 20 74 77 6f 2d 73 74 65 70 20 61 6c 67  n a two-step alg
275a0 6f 72 69 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20  orithm..    **. 
275b0 20 20 20 2a 2a 20 46 69 72 73 74 20 77 65 20 61     ** First we a
275c0 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64 20 74  ttempt to find t
275d0 68 65 20 6c 61 72 67 65 73 74 20 65 78 69 73 74  he largest exist
275e0 69 6e 67 20 72 6f 77 69 64 20 61 6e 64 20 61 64  ing rowid and ad
275f0 64 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 74 6f 20  d one.    ** to 
27600 74 68 61 74 2e 20 20 42 75 74 20 69 66 20 74 68  that.  But if th
27610 65 20 6c 61 72 67 65 73 74 20 65 78 69 73 74 69  e largest existi
27620 6e 67 20 72 6f 77 69 64 20 69 73 20 61 6c 72 65  ng rowid is alre
27630 61 64 79 20 74 68 65 20 6d 61 78 69 6d 75 6d 0a  ady the maximum.
27640 20 20 20 20 2a 2a 20 70 6f 73 69 74 69 76 65 20      ** positive 
27650 69 6e 74 65 67 65 72 2c 20 77 65 20 68 61 76 65  integer, we have
27660 20 74 6f 20 66 61 6c 6c 20 74 68 72 6f 75 67 68   to fall through
27670 20 74 6f 20 74 68 65 20 73 65 63 6f 6e 64 0a 20   to the second. 
27680 20 20 20 2a 2a 20 70 72 6f 62 61 62 69 6c 69 73     ** probabilis
27690 74 69 63 20 61 6c 67 6f 72 69 74 68 6d 0a 20 20  tic algorithm.  
276a0 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65 20    **.    ** The 
276b0 73 65 63 6f 6e 64 20 61 6c 67 6f 72 69 74 68 6d  second algorithm
276c0 20 69 73 20 74 6f 20 73 65 6c 65 63 74 20 61 20   is to select a 
276d0 72 6f 77 69 64 20 61 74 20 72 61 6e 64 6f 6d 20  rowid at random 
276e0 61 6e 64 20 73 65 65 20 69 66 0a 20 20 20 20 2a  and see if.    *
276f0 2a 20 69 74 20 61 6c 72 65 61 64 79 20 65 78 69  * it already exi
27700 73 74 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  sts in the table
27710 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f  .  If it does no
27720 74 20 65 78 69 73 74 2c 20 77 65 20 68 61 76 65  t exist, we have
27730 0a 20 20 20 20 2a 2a 20 73 75 63 63 65 65 64 65  .    ** succeede
27740 64 2e 20 20 49 66 20 74 68 65 20 72 61 6e 64 6f  d.  If the rando
27750 6d 20 72 6f 77 69 64 20 64 6f 65 73 20 65 78 69  m rowid does exi
27760 73 74 2c 20 77 65 20 73 65 6c 65 63 74 20 61 20  st, we select a 
27770 6e 65 77 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 61  new one.    ** a
27780 6e 64 20 74 72 79 20 61 67 61 69 6e 2c 20 75 70  nd try again, up
27790 20 74 6f 20 31 30 30 20 74 69 6d 65 73 2e 0a 20   to 100 times.. 
277a0 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74     */.    assert
277b0 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b  ( pC->isTable );
277c0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
277d0 33 32 42 49 54 5f 52 4f 57 49 44 0a 23 20 20 20  32BIT_ROWID.#   
277e0 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44  define MAX_ROWID
277f0 20 30 78 37 66 66 66 66 66 66 66 0a 23 65 6c 73   0x7fffffff.#els
27800 65 0a 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f  e.    /* Some co
27810 6d 70 69 6c 65 72 73 20 63 6f 6d 70 6c 61 69 6e  mpilers complain
27820 20 61 62 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73   about constants
27830 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 30 78 37   of the form 0x7
27840 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 2e  fffffffffffffff.
27850 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72 73 20 63  .    ** Others c
27860 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 30 78  omplain about 0x
27870 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66  7fffffffffffffff
27880 66 4c 4c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  fLL.  The follow
27890 69 6e 67 20 6d 61 63 72 6f 20 73 65 65 6d 73 0a  ing macro seems.
278a0 20 20 20 20 2a 2a 20 74 6f 20 70 72 6f 76 69 64      ** to provid
278b0 65 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 77  e the constant w
278c0 68 69 6c 65 20 6d 61 6b 69 6e 67 20 61 6c 6c 20  hile making all 
278d0 63 6f 6d 70 69 6c 65 72 73 20 68 61 70 70 79 2e  compilers happy.
278e0 0a 20 20 20 20 2a 2f 0a 23 20 20 20 64 65 66 69  .    */.#   defi
278f0 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 20 28 69  ne MAX_ROWID  (i
27900 36 34 29 28 20 28 28 28 75 36 34 29 30 78 37 66  64)( (((u64)0x7f
27910 66 66 66 66 66 66 29 3c 3c 33 32 29 20 7c 20 28  ffffff)<<32) | (
27920 75 36 34 29 30 78 66 66 66 66 66 66 66 66 20 29  u64)0xffffffff )
27930 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 69 66 28  .#endif..    if(
27940 20 21 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52   !pC->useRandomR
27950 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 72 63  owid ){.      rc
27960 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c   = sqlite3BtreeL
27970 61 73 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  ast(pC->uc.pCurs
27980 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20  or, &res);.     
27990 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
279a0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f  OK ){.        go
279b0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
279c0 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20  error;.      }. 
279d0 20 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a       if( res ){.
279e0 20 20 20 20 20 20 20 20 76 20 3d 20 31 3b 20 20          v = 1;  
279f0 20 2f 2a 20 49 4d 50 3a 20 52 2d 36 31 39 31 34   /* IMP: R-61914
27a00 2d 34 38 30 37 34 20 2a 2f 0a 20 20 20 20 20 20  -48074 */.      
27a10 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 61  }else{.        a
27a20 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
27a30 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64  reeCursorIsValid
27a40 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29  (pC->uc.pCursor)
27a50 20 29 3b 0a 20 20 20 20 20 20 20 20 76 20 3d 20   );.        v = 
27a60 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65  sqlite3BtreeInte
27a70 67 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e 70 43  gerKey(pC->uc.pC
27a80 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 20 20  ursor);.        
27a90 69 66 28 20 76 3e 3d 4d 41 58 5f 52 4f 57 49 44  if( v>=MAX_ROWID
27aa0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 43   ){.          pC
27ab0 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64  ->useRandomRowid
27ac0 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65   = 1;.        }e
27ad0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 76  lse{.          v
27ae0 2b 2b 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d  ++;   /* IMP: R-
27af0 32 39 35 33 38 2d 33 34 39 38 37 20 2a 2f 0a 20  29538-34987 */. 
27b00 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
27b10 0a 20 20 20 20 7d 0a 0a 23 69 66 6e 64 65 66 20  .    }..#ifndef 
27b20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
27b30 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20 20 69 66  INCREMENT.    if
27b40 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20  ( pOp->p3 ){.   
27b50 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61     /* Assert tha
27b60 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20  t P3 is a valid 
27b70 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a  memory cell. */.
27b80 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
27b90 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20  p->p3>0 );.     
27ba0 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29   if( p->pFrame )
27bb0 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 70 46  {.        for(pF
27bc0 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20  rame=p->pFrame; 
27bd0 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b  pFrame->pParent;
27be0 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e   pFrame=pFrame->
27bf0 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 20 20  pParent);.      
27c00 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74    /* Assert that
27c10 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d   P3 is a valid m
27c20 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20  emory cell. */. 
27c30 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
27c40 4f 70 2d 3e 70 33 3c 3d 70 46 72 61 6d 65 2d 3e  Op->p3<=pFrame->
27c50 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20 20  nMem );.        
27c60 70 4d 65 6d 20 3d 20 26 70 46 72 61 6d 65 2d 3e  pMem = &pFrame->
27c70 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
27c80 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
27c90 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68      /* Assert th
27ca0 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64  at P3 is a valid
27cb0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f   memory cell. */
27cc0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
27cd0 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
27ce0 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
27cf0 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 70 4d  r) );.        pM
27d00 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
27d10 70 33 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d  p3];.        mem
27d20 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
27d30 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 7d 0a   pMem);.      }.
27d40 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
27d50 6d 49 73 56 61 6c 69 64 28 70 4d 65 6d 29 20 29  mIsValid(pMem) )
27d60 3b 0a 0a 20 20 20 20 20 20 52 45 47 49 53 54 45  ;..      REGISTE
27d70 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
27d80 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 73 71   pMem);.      sq
27d90 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
27da0 67 65 72 69 66 79 28 70 4d 65 6d 29 3b 0a 20 20  gerify(pMem);.  
27db0 20 20 20 20 61 73 73 65 72 74 28 20 28 70 4d 65      assert( (pMe
27dc0 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  m->flags & MEM_I
27dd0 6e 74 29 21 3d 30 20 29 3b 20 20 2f 2a 20 6d 65  nt)!=0 );  /* me
27de0 6d 28 50 33 29 20 68 6f 6c 64 73 20 61 6e 20 69  m(P3) holds an i
27df0 6e 74 65 67 65 72 20 2a 2f 0a 20 20 20 20 20 20  nteger */.      
27e00 69 66 28 20 70 4d 65 6d 2d 3e 75 2e 69 3d 3d 4d  if( pMem->u.i==M
27e10 41 58 5f 52 4f 57 49 44 20 7c 7c 20 70 43 2d 3e  AX_ROWID || pC->
27e20 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29  useRandomRowid )
27e30 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
27e40 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a  QLITE_FULL;   /*
27e50 20 49 4d 50 3a 20 52 2d 31 37 38 31 37 2d 30 30   IMP: R-17817-00
27e60 36 33 30 20 2a 2f 0a 20 20 20 20 20 20 20 20 67  630 */.        g
27e70 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
27e80 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
27e90 20 20 20 20 20 20 69 66 28 20 76 3c 70 4d 65 6d        if( v<pMem
27ea0 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20 20  ->u.i+1 ){.     
27eb0 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e 69     v = pMem->u.i
27ec0 20 2b 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20   + 1;.      }.  
27ed0 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d 20      pMem->u.i = 
27ee0 76 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  v;.    }.#endif.
27ef0 20 20 20 20 69 66 28 20 70 43 2d 3e 75 73 65 52      if( pC->useR
27f00 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20  andomRowid ){.  
27f10 20 20 20 20 2f 2a 20 49 4d 50 4c 45 4d 45 4e 54      /* IMPLEMENT
27f20 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30 37 36 37  ATION-OF: R-0767
27f30 37 2d 34 31 38 38 31 20 49 66 20 74 68 65 20 6c  7-41881 If the l
27f40 61 72 67 65 73 74 20 52 4f 57 49 44 20 69 73 20  argest ROWID is 
27f50 65 71 75 61 6c 20 74 6f 20 74 68 65 0a 20 20 20  equal to the.   
27f60 20 20 20 2a 2a 20 6c 61 72 67 65 73 74 20 70 6f     ** largest po
27f70 73 73 69 62 6c 65 20 69 6e 74 65 67 65 72 20 28  ssible integer (
27f80 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35  9223372036854775
27f90 38 30 37 29 20 74 68 65 6e 20 74 68 65 20 64 61  807) then the da
27fa0 74 61 62 61 73 65 0a 20 20 20 20 20 20 2a 2a 20  tabase.      ** 
27fb0 65 6e 67 69 6e 65 20 73 74 61 72 74 73 20 70 69  engine starts pi
27fc0 63 6b 69 6e 67 20 70 6f 73 69 74 69 76 65 20 63  cking positive c
27fd0 61 6e 64 69 64 61 74 65 20 52 4f 57 49 44 73 20  andidate ROWIDs 
27fe0 61 74 20 72 61 6e 64 6f 6d 20 75 6e 74 69 6c 0a  at random until.
27ff0 20 20 20 20 20 20 2a 2a 20 69 74 20 66 69 6e 64        ** it find
28000 73 20 6f 6e 65 20 74 68 61 74 20 69 73 20 6e 6f  s one that is no
28010 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65  t previously use
28020 64 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65  d. */.      asse
28030 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 29  rt( pOp->p3==0 )
28040 3b 20 20 2f 2a 20 57 65 20 63 61 6e 6e 6f 74 20  ;  /* We cannot 
28050 62 65 20 69 6e 20 72 61 6e 64 6f 6d 20 72 6f 77  be in random row
28060 69 64 20 6d 6f 64 65 20 69 66 20 74 68 69 73 20  id mode if this 
28070 69 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  is.             
28080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28090 2a 2a 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d  ** an AUTOINCREM
280a0 45 4e 54 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20  ENT table. */.  
280b0 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a 20 20 20      cnt = 0;.   
280c0 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20 73     do{.        s
280d0 71 6c 69 74 65 33 5f 72 61 6e 64 6f 6d 6e 65 73  qlite3_randomnes
280e0 73 28 73 69 7a 65 6f 66 28 76 29 2c 20 26 76 29  s(sizeof(v), &v)
280f0 3b 0a 20 20 20 20 20 20 20 20 76 20 26 3d 20 28  ;.        v &= (
28100 4d 41 58 5f 52 4f 57 49 44 3e 3e 31 29 3b 20 76  MAX_ROWID>>1); v
28110 2b 2b 3b 20 20 2f 2a 20 45 6e 73 75 72 65 20 74  ++;  /* Ensure t
28120 68 61 74 20 76 20 69 73 20 67 72 65 61 74 65 72  hat v is greater
28130 20 74 68 61 6e 20 7a 65 72 6f 20 2a 2f 0a 20 20   than zero */.  
28140 20 20 20 20 7d 77 68 69 6c 65 28 20 20 28 28 72      }while(  ((r
28150 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
28160 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
28170 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 30  C->uc.pCursor, 0
28180 2c 20 28 75 36 34 29 76 2c 0a 20 20 20 20 20 20  , (u64)v,.      
28190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
281a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
281b0 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 26 72             0, &r
281c0 65 73 29 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 29  es))==SQLITE_OK)
281d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20  .            && 
281e0 28 72 65 73 3d 3d 30 29 0a 20 20 20 20 20 20 20  (res==0).       
281f0 20 20 20 20 20 26 26 20 28 2b 2b 63 6e 74 3c 31       && (++cnt<1
28200 30 30 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20  00));.      if( 
28210 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
28220 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
28230 20 20 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29      if( res==0 )
28240 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
28250 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a  QLITE_FULL;   /*
28260 20 49 4d 50 3a 20 52 2d 33 38 32 31 39 2d 35 33   IMP: R-38219-53
28270 30 30 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 67  002 */.        g
28280 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
28290 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
282a0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 76 3e        assert( v>
282b0 30 20 29 3b 20 20 2f 2a 20 45 56 3a 20 52 2d 34  0 );  /* EV: R-4
282c0 30 38 31 32 2d 30 33 35 37 30 20 2a 2f 0a 20 20  0812-03570 */.  
282d0 20 20 7d 0a 20 20 20 20 70 43 2d 3e 64 65 66 65    }.    pC->defe
282e0 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
282f0 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
28300 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
28310 45 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75  E;.  }.  pOut->u
28320 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b  .i = v;.  break;
28330 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
28340 6e 73 65 72 74 20 50 31 20 50 32 20 50 33 20 50  nsert P1 P2 P3 P
28350 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
28360 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 20 64  : intkey=r[P3] d
28370 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  ata=r[P2].**.** 
28380 57 72 69 74 65 20 61 6e 20 65 6e 74 72 79 20 69  Write an entry i
28390 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20 6f 66  nto the table of
283a0 20 63 75 72 73 6f 72 20 50 31 2e 20 20 41 20 6e   cursor P1.  A n
283b0 65 77 20 65 6e 74 72 79 20 69 73 0a 2a 2a 20 63  ew entry is.** c
283c0 72 65 61 74 65 64 20 69 66 20 69 74 20 64 6f 65  reated if it doe
283d0 73 6e 27 74 20 61 6c 72 65 61 64 79 20 65 78 69  sn't already exi
283e0 73 74 20 6f 72 20 74 68 65 20 64 61 74 61 20 66  st or the data f
283f0 6f 72 20 61 6e 20 65 78 69 73 74 69 6e 67 0a 2a  or an existing.*
28400 2a 20 65 6e 74 72 79 20 69 73 20 6f 76 65 72 77  * entry is overw
28410 72 69 74 74 65 6e 2e 20 20 54 68 65 20 64 61 74  ritten.  The dat
28420 61 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 4d  a is the value M
28430 45 4d 5f 42 6c 6f 62 20 73 74 6f 72 65 64 20 69  EM_Blob stored i
28440 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e 75  n register.** nu
28450 6d 62 65 72 20 50 32 2e 20 54 68 65 20 6b 65 79  mber P2. The key
28460 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
28470 67 69 73 74 65 72 20 50 33 2e 20 54 68 65 20 6b  gister P3. The k
28480 65 79 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61 20  ey must.** be a 
28490 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49  MEM_Int..**.** I
284a0 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48  f the OPFLAG_NCH
284b0 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 35 20  ANGE flag of P5 
284c0 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65  is set, then the
284d0 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e   row change coun
284e0 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e  t is.** incremen
284f0 74 65 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e  ted (otherwise n
28500 6f 74 29 2e 20 20 49 66 20 74 68 65 20 4f 50 46  ot).  If the OPF
28510 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 66 6c  LAG_LASTROWID fl
28520 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c  ag of P5 is set,
28530 0a 2a 2a 20 74 68 65 6e 20 72 6f 77 69 64 20 69  .** then rowid i
28540 73 20 73 74 6f 72 65 64 20 66 6f 72 20 73 75 62  s stored for sub
28550 73 65 71 75 65 6e 74 20 72 65 74 75 72 6e 20 62  sequent return b
28560 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33  y the.** sqlite3
28570 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77  _last_insert_row
28580 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 28 6f  id() function (o
28590 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20 75  therwise it is u
285a0 6e 6d 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a  nmodified)..**.*
285b0 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
285c0 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c  USESEEKRESULT fl
285d0 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c  ag of P5 is set,
285e0 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
285f0 69 6f 6e 20 6d 69 67 68 74 0a 2a 2a 20 72 75 6e  ion might.** run
28600 20 66 61 73 74 65 72 20 62 79 20 61 76 6f 69 64   faster by avoid
28610 69 6e 67 20 61 6e 20 75 6e 6e 65 63 65 73 73 61  ing an unnecessa
28620 72 79 20 73 65 65 6b 20 6f 6e 20 63 75 72 73 6f  ry seek on curso
28630 72 20 50 31 2e 20 20 48 6f 77 65 76 65 72 2c 0a  r P1.  However,.
28640 2a 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53  ** the OPFLAG_US
28650 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67  ESEEKRESULT flag
28660 20 6d 75 73 74 20 6f 6e 6c 79 20 62 65 20 73 65   must only be se
28670 74 20 69 66 20 74 68 65 72 65 20 68 61 76 65 20  t if there have 
28680 62 65 65 6e 20 6e 6f 20 70 72 69 6f 72 0a 2a 2a  been no prior.**
28690 20 73 65 65 6b 73 20 6f 6e 20 74 68 65 20 63 75   seeks on the cu
286a0 72 73 6f 72 20 6f 72 20 69 66 20 74 68 65 20 6d  rsor or if the m
286b0 6f 73 74 20 72 65 63 65 6e 74 20 73 65 65 6b 20  ost recent seek 
286c0 75 73 65 64 20 61 20 6b 65 79 20 65 71 75 61 6c  used a key equal
286d0 20 74 6f 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66   to P3..**.** If
286e0 20 74 68 65 20 4f 50 46 4c 41 47 5f 49 53 55 50   the OPFLAG_ISUP
286f0 44 41 54 45 20 66 6c 61 67 20 69 73 20 73 65 74  DATE flag is set
28700 2c 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f  , then this opco
28710 64 65 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e  de is part of an
28720 0a 2a 2a 20 55 50 44 41 54 45 20 6f 70 65 72 61  .** UPDATE opera
28730 74 69 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73 65  tion.  Otherwise
28740 20 28 69 66 20 74 68 65 20 66 6c 61 67 20 69 73   (if the flag is
28750 20 63 6c 65 61 72 29 20 74 68 65 6e 20 74 68 69   clear) then thi
28760 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 70  s opcode.** is p
28770 61 72 74 20 6f 66 20 61 6e 20 49 4e 53 45 52 54  art of an INSERT
28780 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 54 68 65   operation.  The
28790 20 64 69 66 66 65 72 65 6e 63 65 20 69 73 20 6f   difference is o
287a0 6e 6c 79 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f  nly important to
287b0 0a 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20 68  .** the update h
287c0 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d  ook..**.** Param
287d0 65 74 65 72 20 50 34 20 6d 61 79 20 70 6f 69 6e  eter P4 may poin
287e0 74 20 74 6f 20 61 20 54 61 62 6c 65 20 73 74 72  t to a Table str
287f0 75 63 74 75 72 65 2c 20 6f 72 20 6d 61 79 20 62  ucture, or may b
28800 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74 20 69 73  e NULL. If it is
28810 20 0a 2a 2a 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74   .** not NULL, t
28820 68 65 6e 20 74 68 65 20 75 70 64 61 74 65 2d 68  hen the update-h
28830 6f 6f 6b 20 28 73 71 6c 69 74 65 33 2e 78 55 70  ook (sqlite3.xUp
28840 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 20 69 73  dateCallback) is
28850 20 69 6e 76 6f 6b 65 64 20 0a 2a 2a 20 66 6f 6c   invoked .** fol
28860 6c 6f 77 69 6e 67 20 61 20 73 75 63 63 65 73 73  lowing a success
28870 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a  ful insert..**.*
28880 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a  * (WARNING/TODO:
28890 20 49 66 20 50 31 20 69 73 20 61 20 70 73 65 75   If P1 is a pseu
288a0 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20 50 32  do-cursor and P2
288b0 20 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a   is dynamically.
288c0 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68  ** allocated, th
288d0 65 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f 66 20  en ownership of 
288e0 50 32 20 69 73 20 74 72 61 6e 73 66 65 72 72 65  P2 is transferre
288f0 64 20 74 6f 20 74 68 65 20 70 73 65 75 64 6f 2d  d to the pseudo-
28900 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65  cursor.** and re
28910 67 69 73 74 65 72 20 50 32 20 62 65 63 6f 6d 65  gister P2 become
28920 73 20 65 70 68 65 6d 65 72 61 6c 2e 20 20 49 66  s ephemeral.  If
28930 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63   the cursor is c
28940 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76  hanged, the.** v
28950 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72  alue of register
28960 20 50 32 20 77 69 6c 6c 20 74 68 65 6e 20 63 68   P2 will then ch
28970 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75 72 65  ange.  Make sure
28980 20 74 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a   this does not.*
28990 2a 20 63 61 75 73 65 20 61 6e 79 20 70 72 6f 62  * cause any prob
289a0 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69  lems.).**.** Thi
289b0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e  s instruction on
289c0 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c  ly works on tabl
289d0 65 73 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c  es.  The equival
289e0 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a  ent instruction.
289f0 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65 73 20 69  ** for indices i
28a00 73 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a  s OP_IdxInsert..
28a10 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72  */.case OP_Inser
28a20 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 44 61 74  t: {.  Mem *pDat
28a30 61 3b 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20  a;       /* MEM 
28a40 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 64 61 74  cell holding dat
28a50 61 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64  a for the record
28a60 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20   to be inserted 
28a70 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4b 65 79 3b 20  */.  Mem *pKey; 
28a80 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65         /* MEM ce
28a90 6c 6c 20 68 6f 6c 64 69 6e 67 20 6b 65 79 20 20  ll holding key  
28aa0 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 2a  for the record *
28ab0 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
28ac0 70 43 3b 20 20 20 2f 2a 20 43 75 72 73 6f 72 20  pC;   /* Cursor 
28ad0 74 6f 20 74 61 62 6c 65 20 69 6e 74 6f 20 77 68  to table into wh
28ae0 69 63 68 20 69 6e 73 65 72 74 20 69 73 20 77 72  ich insert is wr
28af0 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 73  itten */.  int s
28b00 65 65 6b 52 65 73 75 6c 74 3b 20 20 20 2f 2a 20  eekResult;   /* 
28b10 52 65 73 75 6c 74 20 6f 66 20 70 72 69 6f 72 20  Result of prior 
28b20 73 65 65 6b 20 6f 72 20 30 20 69 66 20 6e 6f 20  seek or 0 if no 
28b30 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c  USESEEKRESULT fl
28b40 61 67 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ag */.  const ch
28b50 61 72 20 2a 7a 44 62 3b 20 20 2f 2a 20 64 61 74  ar *zDb;  /* dat
28b60 61 62 61 73 65 20 6e 61 6d 65 20 2d 20 75 73 65  abase name - use
28b70 64 20 62 79 20 74 68 65 20 75 70 64 61 74 65 20  d by the update 
28b80 68 6f 6f 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 20  hook */.  Table 
28b90 2a 70 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54  *pTab;      /* T
28ba0 61 62 6c 65 20 73 74 72 75 63 74 75 72 65 20 2d  able structure -
28bb0 20 75 73 65 64 20 62 79 20 75 70 64 61 74 65 20   used by update 
28bc0 61 6e 64 20 70 72 65 2d 75 70 64 61 74 65 20 68  and pre-update h
28bd0 6f 6f 6b 73 20 2a 2f 0a 20 20 42 74 72 65 65 50  ooks */.  BtreeP
28be0 61 79 6c 6f 61 64 20 78 3b 20 20 20 2f 2a 20 50  ayload x;   /* P
28bf0 61 79 6c 6f 61 64 20 74 6f 20 62 65 20 69 6e 73  ayload to be ins
28c00 65 72 74 65 64 20 2a 2f 0a 0a 20 20 70 44 61 74  erted */..  pDat
28c10 61 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  a = &aMem[pOp->p
28c20 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  2];.  assert( pO
28c30 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
28c40 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
28c50 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ;.  assert( memI
28c60 73 56 61 6c 69 64 28 70 44 61 74 61 29 20 29 3b  sValid(pData) );
28c70 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
28c80 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
28c90 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
28ca0 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
28cb0 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
28cc0 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28  REE );.  assert(
28cd0 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21   pC->uc.pCursor!
28ce0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
28cf0 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
28d00 47 5f 49 53 4e 4f 4f 50 29 20 7c 7c 20 70 43 2d  G_ISNOOP) || pC-
28d10 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61 73  >isTable );.  as
28d20 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
28d30 65 3d 3d 50 34 5f 54 41 42 4c 45 20 7c 7c 20 70  e==P4_TABLE || p
28d40 4f 70 2d 3e 70 34 74 79 70 65 3e 3d 50 34 5f 53  Op->p4type>=P4_S
28d50 54 41 54 49 43 20 29 3b 0a 20 20 52 45 47 49 53  TATIC );.  REGIS
28d60 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
28d70 32 2c 20 70 44 61 74 61 29 3b 0a 20 20 73 71 6c  2, pData);.  sql
28d80 69 74 65 33 56 64 62 65 49 6e 63 72 57 72 69 74  ite3VdbeIncrWrit
28d90 65 43 6f 75 6e 74 65 72 28 70 2c 20 70 43 29 3b  eCounter(p, pC);
28da0 0a 0a 20 20 70 4b 65 79 20 3d 20 26 61 4d 65 6d  ..  pKey = &aMem
28db0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73  [pOp->p3];.  ass
28dc0 65 72 74 28 20 70 4b 65 79 2d 3e 66 6c 61 67 73  ert( pKey->flags
28dd0 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20   & MEM_Int );.  
28de0 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
28df0 69 64 28 70 4b 65 79 29 20 29 3b 0a 20 20 52 45  id(pKey) );.  RE
28e00 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
28e10 2d 3e 70 33 2c 20 70 4b 65 79 29 3b 0a 20 20 78  ->p3, pKey);.  x
28e20 2e 6e 4b 65 79 20 3d 20 70 4b 65 79 2d 3e 75 2e  .nKey = pKey->u.
28e30 69 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  i;..  if( pOp->p
28e40 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20  4type==P4_TABLE 
28e50 26 26 20 48 41 53 5f 55 50 44 41 54 45 5f 48 4f  && HAS_UPDATE_HO
28e60 4f 4b 28 64 62 29 20 29 7b 0a 20 20 20 20 61 73  OK(db) ){.    as
28e70 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30  sert( pC->iDb>=0
28e80 20 29 3b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62   );.    zDb = db
28e90 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a  ->aDb[pC->iDb].z
28ea0 44 62 53 4e 61 6d 65 3b 0a 20 20 20 20 70 54 61  DbSName;.    pTa
28eb0 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62  b = pOp->p4.pTab
28ec0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70  ;.    assert( (p
28ed0 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
28ee0 49 53 4e 4f 4f 50 29 20 7c 7c 20 48 61 73 52 6f  ISNOOP) || HasRo
28ef0 77 69 64 28 70 54 61 62 29 20 29 3b 0a 20 20 7d  wid(pTab) );.  }
28f00 65 6c 73 65 7b 0a 20 20 20 20 70 54 61 62 20 3d  else{.    pTab =
28f10 20 30 3b 0a 20 20 20 20 7a 44 62 20 3d 20 30 3b   0;.    zDb = 0;
28f20 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e    /* Not needed.
28f30 20 20 53 69 6c 65 6e 63 65 20 61 20 63 6f 6d 70    Silence a comp
28f40 69 6c 65 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f  iler warning. */
28f50 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c  .  }..#ifdef SQL
28f60 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50  ITE_ENABLE_PREUP
28f70 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 2f 2a 20 49  DATE_HOOK.  /* I
28f80 6e 76 6f 6b 65 20 74 68 65 20 70 72 65 2d 75 70  nvoke the pre-up
28f90 64 61 74 65 20 68 6f 6f 6b 2c 20 69 66 20 61 6e  date hook, if an
28fa0 79 20 2a 2f 0a 20 20 69 66 28 20 70 54 61 62 20  y */.  if( pTab 
28fb0 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78  ){.    if( db->x
28fc0 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  PreUpdateCallbac
28fd0 6b 20 26 26 20 21 28 70 4f 70 2d 3e 70 35 20 26  k && !(pOp->p5 &
28fe0 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45   OPFLAG_ISUPDATE
28ff0 29 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ) ){.      sqlit
29000 65 33 56 64 62 65 50 72 65 55 70 64 61 74 65 48  e3VdbePreUpdateH
29010 6f 6f 6b 28 70 2c 20 70 43 2c 20 53 51 4c 49 54  ook(p, pC, SQLIT
29020 45 5f 49 4e 53 45 52 54 2c 20 7a 44 62 2c 20 70  E_INSERT, zDb, p
29030 54 61 62 2c 20 78 2e 6e 4b 65 79 2c 70 4f 70 2d  Tab, x.nKey,pOp-
29040 3e 70 32 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  >p2);.    }.    
29050 69 66 28 20 64 62 2d 3e 78 55 70 64 61 74 65 43  if( db->xUpdateC
29060 61 6c 6c 62 61 63 6b 3d 3d 30 20 7c 7c 20 70 54  allback==0 || pT
29070 61 62 2d 3e 61 43 6f 6c 3d 3d 30 20 29 7b 0a 20  ab->aCol==0 ){. 
29080 20 20 20 20 20 2f 2a 20 50 72 65 76 65 6e 74 20       /* Prevent 
29090 70 6f 73 74 2d 75 70 64 61 74 65 20 68 6f 6f 6b  post-update hook
290a0 20 66 72 6f 6d 20 72 75 6e 6e 69 6e 67 20 69 6e   from running in
290b0 20 63 61 73 65 73 20 77 68 65 6e 20 69 74 20 73   cases when it s
290c0 68 6f 75 6c 64 20 6e 6f 74 20 2a 2f 0a 20 20 20  hould not */.   
290d0 20 20 20 70 54 61 62 20 3d 20 30 3b 0a 20 20 20     pTab = 0;.   
290e0 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70   }.  }.  if( pOp
290f0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53  ->p5 & OPFLAG_IS
29100 4e 4f 4f 50 20 29 20 62 72 65 61 6b 3b 0a 23 65  NOOP ) break;.#e
29110 6e 64 69 66 0a 0a 20 20 69 66 28 20 70 4f 70 2d  ndif..  if( pOp-
29120 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48  >p5 & OPFLAG_NCH
29130 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67  ANGE ) p->nChang
29140 65 2b 2b 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  e++;.  if( pOp->
29150 70 35 20 26 20 4f 50 46 4c 41 47 5f 4c 41 53 54  p5 & OPFLAG_LAST
29160 52 4f 57 49 44 20 29 20 64 62 2d 3e 6c 61 73 74  ROWID ) db->last
29170 52 6f 77 69 64 20 3d 20 78 2e 6e 4b 65 79 3b 0a  Rowid = x.nKey;.
29180 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61 2d    assert( pData-
29190 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c  >flags & (MEM_Bl
291a0 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29 3b 0a 20  ob|MEM_Str) );. 
291b0 20 78 2e 70 44 61 74 61 20 3d 20 70 44 61 74 61   x.pData = pData
291c0 2d 3e 7a 3b 0a 20 20 78 2e 6e 44 61 74 61 20 3d  ->z;.  x.nData =
291d0 20 70 44 61 74 61 2d 3e 6e 3b 0a 20 20 73 65 65   pData->n;.  see
291e0 6b 52 65 73 75 6c 74 20 3d 20 28 28 70 4f 70 2d  kResult = ((pOp-
291f0 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45  >p5 & OPFLAG_USE
29200 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43  SEEKRESULT) ? pC
29210 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30  ->seekResult : 0
29220 29 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e  );.  if( pData->
29230 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f  flags & MEM_Zero
29240 20 29 7b 0a 20 20 20 20 78 2e 6e 5a 65 72 6f 20   ){.    x.nZero 
29250 3d 20 70 44 61 74 61 2d 3e 75 2e 6e 5a 65 72 6f  = pData->u.nZero
29260 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 78  ;.  }else{.    x
29270 2e 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 7d 0a  .nZero = 0;.  }.
29280 20 20 78 2e 70 4b 65 79 20 3d 20 30 3b 0a 20 20    x.pKey = 0;.  
29290 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
292a0 65 49 6e 73 65 72 74 28 70 43 2d 3e 75 63 2e 70  eInsert(pC->uc.p
292b0 43 75 72 73 6f 72 2c 20 26 78 2c 0a 20 20 20 20  Cursor, &x,.    
292c0 20 20 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50    (pOp->p5 & (OP
292d0 46 4c 41 47 5f 41 50 50 45 4e 44 7c 4f 50 46 4c  FLAG_APPEND|OPFL
292e0 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 29  AG_SAVEPOSITION)
292f0 29 2c 20 73 65 65 6b 52 65 73 75 6c 74 0a 20 20  ), seekResult.  
29300 29 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65  );.  pC->deferre
29310 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70  dMoveto = 0;.  p
29320 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
29330 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20   CACHE_STALE;.. 
29340 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75   /* Invoke the u
29350 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65  pdate-hook if re
29360 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28  quired. */.  if(
29370 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
29380 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
29390 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20   if( pTab ){.   
293a0 20 61 73 73 65 72 74 28 20 64 62 2d 3e 78 55 70   assert( db->xUp
293b0 64 61 74 65 43 61 6c 6c 62 61 63 6b 21 3d 30 20  dateCallback!=0 
293c0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
293d0 54 61 62 2d 3e 61 43 6f 6c 21 3d 30 20 29 3b 0a  Tab->aCol!=0 );.
293e0 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43      db->xUpdateC
293f0 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64  allback(db->pUpd
29400 61 74 65 41 72 67 2c 0a 20 20 20 20 20 20 20 20  ateArg,.        
29410 20 20 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50     (pOp->p5 & OP
29420 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20 3f  FLAG_ISUPDATE) ?
29430 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 3a   SQLITE_UPDATE :
29440 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 2c 0a   SQLITE_INSERT,.
29450 20 20 20 20 20 20 20 20 20 20 20 7a 44 62 2c 20             zDb, 
29460 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 20 78 2e 6e  pTab->zName, x.n
29470 4b 65 79 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  Key);.  }.  brea
29480 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
29490 20 44 65 6c 65 74 65 20 50 31 20 50 32 20 50 33   Delete P1 P2 P3
294a0 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 44 65 6c   P4 P5.**.** Del
294b0 65 74 65 20 74 68 65 20 72 65 63 6f 72 64 20 61  ete the record a
294c0 74 20 77 68 69 63 68 20 74 68 65 20 50 31 20 63  t which the P1 c
294d0 75 72 73 6f 72 20 69 73 20 63 75 72 72 65 6e 74  ursor is current
294e0 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a  ly pointing..**.
294f0 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
29500 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 62 69  _SAVEPOSITION bi
29510 74 20 6f 66 20 74 68 65 20 50 35 20 70 61 72 61  t of the P5 para
29520 6d 65 74 65 72 20 69 73 20 73 65 74 2c 20 74 68  meter is set, th
29530 65 6e 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72  en.** the cursor
29540 20 77 69 6c 6c 20 62 65 20 6c 65 66 74 20 70 6f   will be left po
29550 69 6e 74 69 6e 67 20 61 74 20 20 65 69 74 68 65  inting at  eithe
29560 72 20 74 68 65 20 6e 65 78 74 20 6f 72 20 74 68  r the next or th
29570 65 20 70 72 65 76 69 6f 75 73 0a 2a 2a 20 72 65  e previous.** re
29580 63 6f 72 64 20 69 6e 20 74 68 65 20 74 61 62 6c  cord in the tabl
29590 65 2e 20 49 66 20 69 74 20 69 73 20 6c 65 66 74  e. If it is left
295a0 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65   pointing at the
295b0 20 6e 65 78 74 20 72 65 63 6f 72 64 2c 20 74 68   next record, th
295c0 65 6e 0a 2a 2a 20 74 68 65 20 6e 65 78 74 20 4e  en.** the next N
295d0 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
295e0 77 69 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f 70 2e  will be a no-op.
295f0 20 41 73 20 61 20 72 65 73 75 6c 74 2c 20 69 6e   As a result, in
29600 20 74 68 69 73 20 63 61 73 65 0a 2a 2a 20 69 74   this case.** it
29610 20 69 73 20 6f 6b 20 74 6f 20 64 65 6c 65 74 65   is ok to delete
29620 20 61 20 72 65 63 6f 72 64 20 66 72 6f 6d 20 77   a record from w
29630 69 74 68 69 6e 20 61 20 4e 65 78 74 20 6c 6f 6f  ithin a Next loo
29640 70 2e 20 49 66 20 0a 2a 2a 20 4f 50 46 4c 41 47  p. If .** OPFLAG
29650 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 62 69  _SAVEPOSITION bi
29660 74 20 6f 66 20 50 35 20 69 73 20 63 6c 65 61 72  t of P5 is clear
29670 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72 73 6f  , then the curso
29680 72 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 6c 65 66  r will be.** lef
29690 74 20 69 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65  t in an undefine
296a0 64 20 73 74 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 49  d state..**.** I
296b0 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 41 55 58  f the OPFLAG_AUX
296c0 44 45 4c 45 54 45 20 62 69 74 20 69 73 20 73 65  DELETE bit is se
296d0 74 20 6f 6e 20 50 35 2c 20 74 68 61 74 20 69 6e  t on P5, that in
296e0 64 69 63 61 74 65 73 20 74 68 61 74 20 74 68 69  dicates that thi
296f0 73 0a 2a 2a 20 64 65 6c 65 74 65 20 6f 6e 65 20  s.** delete one 
29700 6f 66 20 73 65 76 65 72 61 6c 20 61 73 73 6f 63  of several assoc
29710 69 61 74 65 64 20 77 69 74 68 20 64 65 6c 65 74  iated with delet
29720 69 6e 67 20 61 20 74 61 62 6c 65 20 72 6f 77 20  ing a table row 
29730 61 6e 64 20 61 6c 6c 20 69 74 73 0a 2a 2a 20 61  and all its.** a
29740 73 73 6f 63 69 61 74 65 64 20 69 6e 64 65 78 20  ssociated index 
29750 65 6e 74 72 69 65 73 2e 20 20 45 78 61 63 74 6c  entries.  Exactl
29760 79 20 6f 6e 65 20 6f 66 20 74 68 6f 73 65 20 64  y one of those d
29770 65 6c 65 74 65 73 20 69 73 20 74 68 65 20 22 70  eletes is the "p
29780 72 69 6d 61 72 79 22 0a 2a 2a 20 64 65 6c 65 74  rimary".** delet
29790 65 2e 20 20 54 68 65 20 6f 74 68 65 72 73 20 61  e.  The others a
297a0 72 65 20 61 6c 6c 20 6f 6e 20 4f 50 46 4c 41 47  re all on OPFLAG
297b0 5f 46 4f 52 44 45 4c 45 54 45 20 63 75 72 73 6f  _FORDELETE curso
297c0 72 73 20 6f 72 20 65 6c 73 65 20 61 72 65 0a 2a  rs or else are.*
297d0 2a 20 6d 61 72 6b 65 64 20 77 69 74 68 20 74 68  * marked with th
297e0 65 20 41 55 58 44 45 4c 45 54 45 20 66 6c 61 67  e AUXDELETE flag
297f0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
29800 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c  PFLAG_NCHANGE fl
29810 61 67 20 6f 66 20 50 32 20 28 4e 42 3a 20 50 32  ag of P2 (NB: P2
29820 20 6e 6f 74 20 50 35 29 20 69 73 20 73 65 74 2c   not P5) is set,
29830 20 74 68 65 6e 20 74 68 65 20 72 6f 77 0a 2a 2a   then the row.**
29840 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73   change count is
29850 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74   incremented (ot
29860 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a  herwise not)..**
29870 0a 2a 2a 20 50 31 20 6d 75 73 74 20 6e 6f 74 20  .** P1 must not 
29880 62 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e  be pseudo-table.
29890 20 20 49 74 20 68 61 73 20 74 6f 20 62 65 20 61    It has to be a
298a0 20 72 65 61 6c 20 74 61 62 6c 65 20 77 69 74 68   real table with
298b0 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77  .** multiple row
298c0 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69  s..**.** If P4 i
298d0 73 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20  s not NULL then 
298e0 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 54  it points to a T
298f0 61 62 6c 65 20 6f 62 6a 65 63 74 2e 20 49 6e 20  able object. In 
29900 74 68 69 73 20 63 61 73 65 20 65 69 74 68 65 72  this case either
29910 20 0a 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20   .** the update 
29920 6f 72 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f  or pre-update ho
29930 6f 6b 2c 20 6f 72 20 62 6f 74 68 2c 20 6d 61 79  ok, or both, may
29940 20 62 65 20 69 6e 76 6f 6b 65 64 2e 20 54 68 65   be invoked. The
29950 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 0a   P1 cursor must.
29960 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 70 6f 73  ** have been pos
29970 69 74 69 6f 6e 65 64 20 75 73 69 6e 67 20 4f 50  itioned using OP
29980 5f 4e 6f 74 46 6f 75 6e 64 20 70 72 69 6f 72 20  _NotFound prior 
29990 74 6f 20 69 6e 76 6f 6b 69 6e 67 20 74 68 69 73  to invoking this
299a0 20 6f 70 63 6f 64 65 20 69 6e 20 0a 2a 2a 20 74   opcode in .** t
299b0 68 69 73 20 63 61 73 65 2e 20 53 70 65 63 69 66  his case. Specif
299c0 69 63 61 6c 6c 79 2c 20 69 66 20 6f 6e 65 20 69  ically, if one i
299d0 73 20 63 6f 6e 66 69 67 75 72 65 64 2c 20 74 68  s configured, th
299e0 65 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f  e pre-update hoo
299f0 6b 20 69 73 20 0a 2a 2a 20 69 6e 76 6f 6b 65 64  k is .** invoked
29a00 20 69 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55   if P4 is not NU
29a10 4c 4c 2e 20 54 68 65 20 75 70 64 61 74 65 2d 68  LL. The update-h
29a20 6f 6f 6b 20 69 73 20 69 6e 76 6f 6b 65 64 20 69  ook is invoked i
29a30 66 20 6f 6e 65 20 69 73 20 63 6f 6e 66 69 67 75  f one is configu
29a40 72 65 64 2c 20 0a 2a 2a 20 50 34 20 69 73 20 6e  red, .** P4 is n
29a50 6f 74 20 4e 55 4c 4c 2c 20 61 6e 64 20 74 68 65  ot NULL, and the
29a60 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
29a70 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 50  flag is set in P
29a80 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  2..**.** If the 
29a90 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20  OPFLAG_ISUPDATE 
29aa0 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 50  flag is set in P
29ab0 32 2c 20 74 68 65 6e 20 50 33 20 63 6f 6e 74 61  2, then P3 conta
29ac0 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 0a  ins the address.
29ad0 2a 2a 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79  ** of the memory
29ae0 20 63 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61   cell that conta
29af0 69 6e 73 20 74 68 65 20 76 61 6c 75 65 20 74 68  ins the value th
29b00 61 74 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  at the rowid of 
29b10 74 68 65 20 72 6f 77 20 77 69 6c 6c 0a 2a 2a 20  the row will.** 
29b20 62 65 20 73 65 74 20 74 6f 20 62 79 20 74 68 65  be set to by the
29b30 20 75 70 64 61 74 65 2e 0a 2a 2f 0a 63 61 73 65   update..*/.case
29b40 20 4f 50 5f 44 65 6c 65 74 65 3a 20 7b 0a 20 20   OP_Delete: {.  
29b50 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
29b60 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
29b70 62 3b 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62  b;.  Table *pTab
29b80 3b 0a 20 20 69 6e 74 20 6f 70 66 6c 61 67 73 3b  ;.  int opflags;
29b90 0a 0a 20 20 6f 70 66 6c 61 67 73 20 3d 20 70 4f  ..  opflags = pO
29ba0 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28  p->p2;.  assert(
29bb0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
29bc0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
29bd0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
29be0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
29bf0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
29c00 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
29c10 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
29c20 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
29c30 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72  ert( pC->uc.pCur
29c40 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  sor!=0 );.  asse
29c50 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
29c60 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 73  Moveto==0 );.  s
29c70 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57 72  qlite3VdbeIncrWr
29c80 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 70 43  iteCounter(p, pC
29c90 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
29ca0 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70 4f  E_DEBUG.  if( pO
29cb0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41  p->p4type==P4_TA
29cc0 42 4c 45 20 26 26 20 48 61 73 52 6f 77 69 64 28  BLE && HasRowid(
29cd0 70 4f 70 2d 3e 70 34 2e 70 54 61 62 29 20 26 26  pOp->p4.pTab) &&
29ce0 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 7b 0a 20   pOp->p5==0 ){. 
29cf0 20 20 20 2f 2a 20 49 66 20 70 35 20 69 73 20 7a     /* If p5 is z
29d00 65 72 6f 2c 20 74 68 65 20 73 65 65 6b 20 6f 70  ero, the seek op
29d10 65 72 61 74 69 6f 6e 20 74 68 61 74 20 70 6f 73  eration that pos
29d20 69 74 69 6f 6e 65 64 20 74 68 65 20 63 75 72 73  itioned the curs
29d30 6f 72 20 70 72 69 6f 72 20 74 6f 0a 20 20 20 20  or prior to.    
29d40 2a 2a 20 4f 50 5f 44 65 6c 65 74 65 20 77 69 6c  ** OP_Delete wil
29d50 6c 20 68 61 76 65 20 61 6c 73 6f 20 73 65 74 20  l have also set 
29d60 74 68 65 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61  the pC->movetoTa
29d70 72 67 65 74 20 66 69 65 6c 64 20 74 6f 20 74 68  rget field to th
29d80 65 20 72 6f 77 69 64 20 6f 66 0a 20 20 20 20 2a  e rowid of.    *
29d90 2a 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 69  * the row that i
29da0 73 20 62 65 69 6e 67 20 64 65 6c 65 74 65 64 20  s being deleted 
29db0 2a 2f 0a 20 20 20 20 69 36 34 20 69 4b 65 79 20  */.    i64 iKey 
29dc0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e  = sqlite3BtreeIn
29dd0 74 65 67 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e  tegerKey(pC->uc.
29de0 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 61 73  pCursor);.    as
29df0 73 65 72 74 28 20 43 4f 52 52 55 50 54 5f 44 42  sert( CORRUPT_DB
29e00 20 7c 7c 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61   || pC->movetoTa
29e10 72 67 65 74 3d 3d 69 4b 65 79 20 29 3b 0a 20 20  rget==iKey );.  
29e20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 49  }.#endif..  /* I
29e30 66 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  f the update-hoo
29e40 6b 20 6f 72 20 70 72 65 2d 75 70 64 61 74 65 2d  k or pre-update-
29e50 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e 76  hook will be inv
29e60 6f 6b 65 64 2c 20 73 65 74 20 7a 44 62 20 74 6f  oked, set zDb to
29e70 0a 20 20 2a 2a 20 74 68 65 20 6e 61 6d 65 20 6f  .  ** the name o
29e80 66 20 74 68 65 20 64 62 20 74 6f 20 70 61 73 73  f the db to pass
29e90 20 61 73 20 74 6f 20 69 74 2e 20 41 6c 73 6f 20   as to it. Also 
29ea0 73 65 74 20 6c 6f 63 61 6c 20 70 54 61 62 20 74  set local pTab t
29eb0 6f 20 61 20 63 6f 70 79 0a 20 20 2a 2a 20 6f 66  o a copy.  ** of
29ec0 20 70 34 2e 70 54 61 62 2e 20 46 69 6e 61 6c 6c   p4.pTab. Finall
29ed0 79 2c 20 69 66 20 70 35 20 69 73 20 74 72 75 65  y, if p5 is true
29ee0 2c 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61  , indicating tha
29ef0 74 20 74 68 69 73 20 63 75 72 73 6f 72 20 77 61  t this cursor wa
29f00 73 0a 20 20 2a 2a 20 6c 61 73 74 20 6d 6f 76 65  s.  ** last move
29f10 64 20 77 69 74 68 20 4f 50 5f 4e 65 78 74 20 6f  d with OP_Next o
29f20 72 20 4f 50 5f 50 72 65 76 2c 20 6e 6f 74 20 53  r OP_Prev, not S
29f30 65 65 6b 20 6f 72 20 4e 6f 74 46 6f 75 6e 64 2c  eek or NotFound,
29f40 20 73 65 74 20 0a 20 20 2a 2a 20 56 64 62 65 43   set .  ** VdbeC
29f50 75 72 73 6f 72 2e 6d 6f 76 65 74 6f 54 61 72 67  ursor.movetoTarg
29f60 65 74 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e  et to the curren
29f70 74 20 72 6f 77 69 64 2e 20 20 2a 2f 0a 20 20 69  t rowid.  */.  i
29f80 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
29f90 50 34 5f 54 41 42 4c 45 20 26 26 20 48 41 53 5f  P4_TABLE && HAS_
29fa0 55 50 44 41 54 45 5f 48 4f 4f 4b 28 64 62 29 20  UPDATE_HOOK(db) 
29fb0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
29fc0 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20  C->iDb>=0 );.   
29fd0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
29fe0 2e 70 54 61 62 21 3d 30 20 29 3b 0a 20 20 20 20  .pTab!=0 );.    
29ff0 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43  zDb = db->aDb[pC
2a000 2d 3e 69 44 62 5d 2e 7a 44 62 53 4e 61 6d 65 3b  ->iDb].zDbSName;
2a010 0a 20 20 20 20 70 54 61 62 20 3d 20 70 4f 70 2d  .    pTab = pOp-
2a020 3e 70 34 2e 70 54 61 62 3b 0a 20 20 20 20 69 66  >p4.pTab;.    if
2a030 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  ( (pOp->p5 & OPF
2a040 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e  LAG_SAVEPOSITION
2a050 29 21 3d 30 20 26 26 20 70 43 2d 3e 69 73 54 61  )!=0 && pC->isTa
2a060 62 6c 65 20 29 7b 0a 20 20 20 20 20 20 70 43 2d  ble ){.      pC-
2a070 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20  >movetoTarget = 
2a080 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65  sqlite3BtreeInte
2a090 67 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e 70 43  gerKey(pC->uc.pC
2a0a0 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20  ursor);.    }.  
2a0b0 7d 65 6c 73 65 7b 0a 20 20 20 20 7a 44 62 20 3d  }else{.    zDb =
2a0c0 20 30 3b 20 20 20 2f 2a 20 4e 6f 74 20 6e 65 65   0;   /* Not nee
2a0d0 64 65 64 2e 20 20 53 69 6c 65 6e 63 65 20 61 20  ded.  Silence a 
2a0e0 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67  compiler warning
2a0f0 2e 20 2a 2f 0a 20 20 20 20 70 54 61 62 20 3d 20  . */.    pTab = 
2a100 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65  0;  /* Not neede
2a110 64 2e 20 20 53 69 6c 65 6e 63 65 20 61 20 63 6f  d.  Silence a co
2a120 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 2e 20  mpiler warning. 
2a130 2a 2f 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53  */.  }..#ifdef S
2a140 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45  QLITE_ENABLE_PRE
2a150 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 2f 2a  UPDATE_HOOK.  /*
2a160 20 49 6e 76 6f 6b 65 20 74 68 65 20 70 72 65 2d   Invoke the pre-
2a170 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72  update-hook if r
2a180 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66  equired. */.  if
2a190 28 20 64 62 2d 3e 78 50 72 65 55 70 64 61 74 65  ( db->xPreUpdate
2a1a0 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d  Callback && pOp-
2a1b0 3e 70 34 2e 70 54 61 62 20 29 7b 0a 20 20 20 20  >p4.pTab ){.    
2a1c0 61 73 73 65 72 74 28 20 21 28 6f 70 66 6c 61 67  assert( !(opflag
2a1d0 73 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44  s & OPFLAG_ISUPD
2a1e0 41 54 45 29 20 0a 20 20 20 20 20 20 20 20 20 7c  ATE) .         |
2a1f0 7c 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29  | HasRowid(pTab)
2a200 3d 3d 30 20 0a 20 20 20 20 20 20 20 20 20 7c 7c  ==0 .         ||
2a210 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e   (aMem[pOp->p3].
2a220 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
2a230 20 0a 20 20 20 20 29 3b 0a 20 20 20 20 73 71 6c   .    );.    sql
2a240 69 74 65 33 56 64 62 65 50 72 65 55 70 64 61 74  ite3VdbePreUpdat
2a250 65 48 6f 6f 6b 28 70 2c 20 70 43 2c 0a 20 20 20  eHook(p, pC,.   
2a260 20 20 20 20 20 28 6f 70 66 6c 61 67 73 20 26 20       (opflags & 
2a270 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29  OPFLAG_ISUPDATE)
2a280 20 3f 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45   ? SQLITE_UPDATE
2a290 20 3a 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45   : SQLITE_DELETE
2a2a0 2c 20 0a 20 20 20 20 20 20 20 20 7a 44 62 2c 20  , .        zDb, 
2a2b0 70 54 61 62 2c 20 70 43 2d 3e 6d 6f 76 65 74 6f  pTab, pC->moveto
2a2c0 54 61 72 67 65 74 2c 0a 20 20 20 20 20 20 20 20  Target,.        
2a2d0 70 4f 70 2d 3e 70 33 0a 20 20 20 20 29 3b 0a 20  pOp->p3.    );. 
2a2e0 20 7d 0a 20 20 69 66 28 20 6f 70 66 6c 61 67 73   }.  if( opflags
2a2f0 20 26 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50   & OPFLAG_ISNOOP
2a300 20 29 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66   ) break;.#endif
2a310 0a 20 0a 20 20 2f 2a 20 4f 6e 6c 79 20 66 6c 61  . .  /* Only fla
2a320 67 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 73  gs that can be s
2a330 65 74 20 61 72 65 20 53 41 56 45 50 4f 49 53 54  et are SAVEPOIST
2a340 49 4f 4e 20 61 6e 64 20 41 55 58 44 45 4c 45 54  ION and AUXDELET
2a350 45 20 2a 2f 20 0a 20 20 61 73 73 65 72 74 28 20  E */ .  assert( 
2a360 28 70 4f 70 2d 3e 70 35 20 26 20 7e 28 4f 50 46  (pOp->p5 & ~(OPF
2a370 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e  LAG_SAVEPOSITION
2a380 7c 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54  |OPFLAG_AUXDELET
2a390 45 29 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  E))==0 );.  asse
2a3a0 72 74 28 20 4f 50 46 4c 41 47 5f 53 41 56 45 50  rt( OPFLAG_SAVEP
2a3b0 4f 53 49 54 49 4f 4e 3d 3d 42 54 52 45 45 5f 53  OSITION==BTREE_S
2a3c0 41 56 45 50 4f 53 49 54 49 4f 4e 20 29 3b 0a 20  AVEPOSITION );. 
2a3d0 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f   assert( OPFLAG_
2a3e0 41 55 58 44 45 4c 45 54 45 3d 3d 42 54 52 45 45  AUXDELETE==BTREE
2a3f0 5f 41 55 58 44 45 4c 45 54 45 20 29 3b 0a 0a 23  _AUXDELETE );..#
2a400 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
2a410 55 47 0a 20 20 69 66 28 20 70 2d 3e 70 46 72 61  UG.  if( p->pFra
2a420 6d 65 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28  me==0 ){.    if(
2a430 20 70 43 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c   pC->isEphemeral
2a440 3d 3d 30 0a 20 20 20 20 20 20 20 20 26 26 20 28  ==0.        && (
2a450 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
2a460 5f 41 55 58 44 45 4c 45 54 45 29 3d 3d 30 0a 20  _AUXDELETE)==0. 
2a470 20 20 20 20 20 20 20 26 26 20 28 70 43 2d 3e 77         && (pC->w
2a480 72 46 6c 61 67 20 26 20 4f 50 46 4c 41 47 5f 46  rFlag & OPFLAG_F
2a490 4f 52 44 45 4c 45 54 45 29 3d 3d 30 0a 20 20 20  ORDELETE)==0.   
2a4a0 20 20 20 29 7b 0a 20 20 20 20 20 20 6e 45 78 74     ){.      nExt
2a4b0 72 61 44 65 6c 65 74 65 2b 2b 3b 0a 20 20 20 20  raDelete++;.    
2a4c0 7d 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  }.    if( pOp->p
2a4d0 32 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  2 & OPFLAG_NCHAN
2a4e0 47 45 20 29 7b 0a 20 20 20 20 20 20 6e 45 78 74  GE ){.      nExt
2a4f0 72 61 44 65 6c 65 74 65 2d 2d 3b 0a 20 20 20 20  raDelete--;.    
2a500 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20  }.  }.#endif..  
2a510 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
2a520 65 44 65 6c 65 74 65 28 70 43 2d 3e 75 63 2e 70  eDelete(pC->uc.p
2a530 43 75 72 73 6f 72 2c 20 70 4f 70 2d 3e 70 35 29  Cursor, pOp->p5)
2a540 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
2a550 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
2a560 45 3b 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73  E;.  pC->seekRes
2a570 75 6c 74 20 3d 20 30 3b 0a 20 20 69 66 28 20 72  ult = 0;.  if( r
2a580 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
2a590 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20  ue_to_error;..  
2a5a0 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70  /* Invoke the up
2a5b0 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71  date-hook if req
2a5c0 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20  uired. */.  if( 
2a5d0 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47  opflags & OPFLAG
2a5e0 5f 4e 43 48 41 4e 47 45 20 29 7b 0a 20 20 20 20  _NCHANGE ){.    
2a5f0 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20  p->nChange++;.  
2a600 20 20 69 66 28 20 64 62 2d 3e 78 55 70 64 61 74    if( db->xUpdat
2a610 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 48 61 73  eCallback && Has
2a620 52 6f 77 69 64 28 70 54 61 62 29 20 29 7b 0a 20  Rowid(pTab) ){. 
2a630 20 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65       db->xUpdate
2a640 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70  Callback(db->pUp
2a650 64 61 74 65 41 72 67 2c 20 53 51 4c 49 54 45 5f  dateArg, SQLITE_
2a660 44 45 4c 45 54 45 2c 20 7a 44 62 2c 20 70 54 61  DELETE, zDb, pTa
2a670 62 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20  b->zName,.      
2a680 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61      pC->movetoTa
2a690 72 67 65 74 29 3b 0a 20 20 20 20 20 20 61 73 73  rget);.      ass
2a6a0 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20  ert( pC->iDb>=0 
2a6b0 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20  );.    }.  }..  
2a6c0 62 72 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f  break;.}./* Opco
2a6d0 64 65 3a 20 52 65 73 65 74 43 6f 75 6e 74 20 2a  de: ResetCount *
2a6e0 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54   * * * *.**.** T
2a6f0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
2a700 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69  change counter i
2a710 73 20 63 6f 70 69 65 64 20 74 6f 20 74 68 65 20  s copied to the 
2a720 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a  database handle.
2a730 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  ** change counte
2a740 72 20 28 72 65 74 75 72 6e 65 64 20 62 79 20 73  r (returned by s
2a750 75 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 73 20  ubsequent calls 
2a760 74 6f 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67  to sqlite3_chang
2a770 65 73 28 29 29 2e 0a 2a 2a 20 54 68 65 6e 20 74  es())..** Then t
2a780 68 65 20 56 4d 73 20 69 6e 74 65 72 6e 61 6c 20  he VMs internal 
2a790 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 72  change counter r
2a7a0 65 73 65 74 73 20 74 6f 20 30 2e 0a 2a 2a 20 54  esets to 0..** T
2a7b0 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74  his is used by t
2a7c0 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e  rigger programs.
2a7d0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65  .*/.case OP_Rese
2a7e0 74 43 6f 75 6e 74 3a 20 7b 0a 20 20 73 71 6c 69  tCount: {.  sqli
2a7f0 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65  te3VdbeSetChange
2a800 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65  s(db, p->nChange
2a810 29 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20  );.  p->nChange 
2a820 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = 0;.  break;.}.
2a830 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74  ./* Opcode: Sort
2a840 65 72 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20  erCompare P1 P2 
2a850 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69  P3 P4.** Synopsi
2a860 73 3a 20 69 66 20 6b 65 79 28 50 31 29 21 3d 74  s: if key(P1)!=t
2a870 72 69 6d 28 72 5b 50 33 5d 2c 50 34 29 20 67 6f  rim(r[P3],P4) go
2a880 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69  to P2.**.** P1 i
2a890 73 20 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f  s a sorter curso
2a8a0 72 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  r. This instruct
2a8b0 69 6f 6e 20 63 6f 6d 70 61 72 65 73 20 61 20 70  ion compares a p
2a8c0 72 65 66 69 78 20 6f 66 20 74 68 65 0a 2a 2a 20  refix of the.** 
2a8d0 72 65 63 6f 72 64 20 62 6c 6f 62 20 69 6e 20 72  record blob in r
2a8e0 65 67 69 73 74 65 72 20 50 33 20 61 67 61 69 6e  egister P3 again
2a8f0 73 74 20 61 20 70 72 65 66 69 78 20 6f 66 20 74  st a prefix of t
2a900 68 65 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  he entry that .*
2a910 2a 20 74 68 65 20 73 6f 72 74 65 72 20 63 75 72  * the sorter cur
2a920 73 6f 72 20 63 75 72 72 65 6e 74 6c 79 20 70 6f  sor currently po
2a930 69 6e 74 73 20 74 6f 2e 20 20 4f 6e 6c 79 20 74  ints to.  Only t
2a940 68 65 20 66 69 72 73 74 20 50 34 20 66 69 65 6c  he first P4 fiel
2a950 64 73 0a 2a 2a 20 6f 66 20 72 5b 50 33 5d 20 61  ds.** of r[P3] a
2a960 6e 64 20 74 68 65 20 73 6f 72 74 65 72 20 72 65  nd the sorter re
2a970 63 6f 72 64 20 61 72 65 20 63 6f 6d 70 61 72 65  cord are compare
2a980 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68  d..**.** If eith
2a990 65 72 20 50 33 20 6f 72 20 74 68 65 20 73 6f 72  er P3 or the sor
2a9a0 74 65 72 20 63 6f 6e 74 61 69 6e 73 20 61 20 4e  ter contains a N
2a9b0 55 4c 4c 20 69 6e 20 6f 6e 65 20 6f 66 20 74 68  ULL in one of th
2a9c0 65 69 72 20 73 69 67 6e 69 66 69 63 61 6e 74 0a  eir significant.
2a9d0 2a 2a 20 66 69 65 6c 64 73 20 28 6e 6f 74 20 63  ** fields (not c
2a9e0 6f 75 6e 74 69 6e 67 20 74 68 65 20 50 34 20 66  ounting the P4 f
2a9f0 69 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64  ields at the end
2aa00 20 77 68 69 63 68 20 61 72 65 20 69 67 6e 6f 72   which are ignor
2aa10 65 64 29 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20  ed) then.** the 
2aa20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 73  comparison is as
2aa30 73 75 6d 65 64 20 74 6f 20 62 65 20 65 71 75 61  sumed to be equa
2aa40 6c 2e 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c 20 74 68  l..**.** Fall th
2aa50 72 6f 75 67 68 20 74 6f 20 6e 65 78 74 20 69 6e  rough to next in
2aa60 73 74 72 75 63 74 69 6f 6e 20 69 66 20 74 68 65  struction if the
2aa70 20 74 77 6f 20 72 65 63 6f 72 64 73 20 63 6f 6d   two records com
2aa80 70 61 72 65 20 65 71 75 61 6c 20 74 6f 0a 2a 2a  pare equal to.**
2aa90 20 65 61 63 68 20 6f 74 68 65 72 2e 20 20 4a 75   each other.  Ju
2aaa0 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 79  mp to P2 if they
2aab0 20 61 72 65 20 64 69 66 66 65 72 65 6e 74 2e 0a   are different..
2aac0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
2aad0 72 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 56 64  rCompare: {.  Vd
2aae0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
2aaf0 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 6e  int res;.  int n
2ab00 4b 65 79 43 6f 6c 3b 0a 0a 20 20 70 43 20 3d 20  KeyCol;..  pC = 
2ab10 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
2ab20 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  ];.  assert( isS
2ab30 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 61  orter(pC) );.  a
2ab40 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
2ab50 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
2ab60 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
2ab70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6e 4b 65 79 43  Op->p3];.  nKeyC
2ab80 6f 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a  ol = pOp->p4.i;.
2ab90 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 72 63 20    res = 0;.  rc 
2aba0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  = sqlite3VdbeSor
2abb0 74 65 72 43 6f 6d 70 61 72 65 28 70 43 2c 20 70  terCompare(pC, p
2abc0 49 6e 33 2c 20 6e 4b 65 79 43 6f 6c 2c 20 26 72  In3, nKeyCol, &r
2abd0 65 73 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  es);.  VdbeBranc
2abe0 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29  hTaken(res!=0,2)
2abf0 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
2ac00 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2ac10 72 72 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 20  rror;.  if( res 
2ac20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
2ac30 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 0a  2;.  break;.};..
2ac40 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65  /* Opcode: Sorte
2ac50 72 44 61 74 61 20 50 31 20 50 32 20 50 33 20 2a  rData P1 P2 P3 *
2ac60 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2ac70 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a  r[P2]=data.**.**
2ac80 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69   Write into regi
2ac90 73 74 65 72 20 50 32 20 74 68 65 20 63 75 72 72  ster P2 the curr
2aca0 65 6e 74 20 73 6f 72 74 65 72 20 64 61 74 61 20  ent sorter data 
2acb0 66 6f 72 20 73 6f 72 74 65 72 20 63 75 72 73 6f  for sorter curso
2acc0 72 20 50 31 2e 0a 2a 2a 20 54 68 65 6e 20 63 6c  r P1..** Then cl
2acd0 65 61 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 68  ear the column h
2ace0 65 61 64 65 72 20 63 61 63 68 65 20 6f 6e 20 63  eader cache on c
2acf0 75 72 73 6f 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  ursor P3..**.** 
2ad00 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6e  This opcode is n
2ad10 6f 72 6d 61 6c 6c 79 20 75 73 65 20 74 6f 20 6d  ormally use to m
2ad20 6f 76 65 20 61 20 72 65 63 6f 72 64 20 6f 75 74  ove a record out
2ad30 20 6f 66 20 74 68 65 20 73 6f 72 74 65 72 20 61   of the sorter a
2ad40 6e 64 20 69 6e 74 6f 0a 2a 2a 20 61 20 72 65 67  nd into.** a reg
2ad50 69 73 74 65 72 20 74 68 61 74 20 69 73 20 74 68  ister that is th
2ad60 65 20 73 6f 75 72 63 65 20 66 6f 72 20 61 20 70  e source for a p
2ad70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73  seudo-table curs
2ad80 6f 72 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  or created using
2ad90 0a 2a 2a 20 4f 70 65 6e 50 73 65 75 64 6f 2e 20  .** OpenPseudo. 
2ada0 20 54 68 61 74 20 70 73 65 75 64 6f 2d 74 61 62   That pseudo-tab
2adb0 6c 65 20 63 75 72 73 6f 72 20 69 73 20 74 68 65  le cursor is the
2adc0 20 6f 6e 65 20 74 68 61 74 20 69 73 20 69 64 65   one that is ide
2add0 6e 74 69 66 69 65 64 20 62 79 0a 2a 2a 20 70 61  ntified by.** pa
2ade0 72 61 6d 65 74 65 72 20 50 33 2e 20 20 43 6c 65  rameter P3.  Cle
2adf0 61 72 69 6e 67 20 74 68 65 20 50 33 20 63 6f 6c  aring the P3 col
2ae00 75 6d 6e 20 63 61 63 68 65 20 61 73 20 70 61 72  umn cache as par
2ae10 74 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65  t of this opcode
2ae20 20 73 61 76 65 73 0a 2a 2a 20 75 73 20 66 72 6f   saves.** us fro
2ae30 6d 20 68 61 76 69 6e 67 20 74 6f 20 69 73 73 75  m having to issu
2ae40 65 20 61 20 73 65 70 61 72 61 74 65 20 4e 75 6c  e a separate Nul
2ae50 6c 52 6f 77 20 69 6e 73 74 72 75 63 74 69 6f 6e  lRow instruction
2ae60 20 74 6f 20 63 6c 65 61 72 20 74 68 61 74 20 63   to clear that c
2ae70 61 63 68 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ache..*/.case OP
2ae80 5f 53 6f 72 74 65 72 44 61 74 61 3a 20 7b 0a 20  _SorterData: {. 
2ae90 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
2aea0 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ..  pOut = &aMem
2aeb0 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 43 20  [pOp->p2];.  pC 
2aec0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
2aed0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69  p1];.  assert( i
2aee0 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20  sSorter(pC) );. 
2aef0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
2af00 65 53 6f 72 74 65 72 52 6f 77 6b 65 79 28 70 43  eSorterRowkey(pC
2af10 2c 20 70 4f 75 74 29 3b 0a 20 20 61 73 73 65 72  , pOut);.  asser
2af20 74 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc!=SQLITE_OK
2af30 20 7c 7c 20 28 70 4f 75 74 2d 3e 66 6c 61 67 73   || (pOut->flags
2af40 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 20 29 3b 0a   & MEM_Blob) );.
2af50 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2af60 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
2af70 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
2af80 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
2af90 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2afa0 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  ;.  p->apCsr[pOp
2afb0 2d 3e 70 33 5d 2d 3e 63 61 63 68 65 53 74 61 74  ->p3]->cacheStat
2afc0 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
2afd0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
2afe0 20 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61 74 61   Opcode: RowData
2aff0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
2b000 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
2b010 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74  =data.**.** Writ
2b020 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
2b030 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20  P2 the complete 
2b040 72 6f 77 20 63 6f 6e 74 65 6e 74 20 66 6f 72 20  row content for 
2b050 74 68 65 20 72 6f 77 20 61 74 20 0a 2a 2a 20 77  the row at .** w
2b060 68 69 63 68 20 63 75 72 73 6f 72 20 50 31 20 69  hich cursor P1 i
2b070 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
2b080 74 69 6e 67 2e 0a 2a 2a 20 54 68 65 72 65 20 69  ting..** There i
2b090 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74  s no interpretat
2b0a0 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e  ion of the data.
2b0b0 20 20 0a 2a 2a 20 49 74 20 69 73 20 6a 75 73 74    .** It is just
2b0c0 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65   copied onto the
2b0d0 20 50 32 20 72 65 67 69 73 74 65 72 20 65 78 61   P2 register exa
2b0e0 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69  ctly as .** it i
2b0f0 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64  s found in the d
2b100 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a  atabase file..**
2b110 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31  .** If cursor P1
2b120 20 69 73 20 61 6e 20 69 6e 64 65 78 2c 20 74 68   is an index, th
2b130 65 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 69  en the content i
2b140 73 20 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65  s the key of the
2b150 20 72 6f 77 2e 0a 2a 2a 20 49 66 20 63 75 72 73   row..** If curs
2b160 6f 72 20 50 32 20 69 73 20 61 20 74 61 62 6c 65  or P2 is a table
2b170 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6e 74 65  , then the conte
2b180 6e 74 20 65 78 74 72 61 63 74 65 64 20 69 73 20  nt extracted is 
2b190 74 68 65 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20  the data..**.** 
2b1a0 49 66 20 74 68 65 20 50 31 20 63 75 72 73 6f 72  If the P1 cursor
2b1b0 20 6d 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e   must be pointin
2b1c0 67 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77  g to a valid row
2b1d0 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77   (not a NULL row
2b1e0 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74  ).** of a real t
2b1f0 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75  able, not a pseu
2b200 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  do-table..**.** 
2b210 49 66 20 50 33 21 3d 30 20 74 68 65 6e 20 74 68  If P3!=0 then th
2b220 69 73 20 6f 70 63 6f 64 65 20 69 73 20 61 6c 6c  is opcode is all
2b230 6f 77 65 64 20 74 6f 20 6d 61 6b 65 20 61 6e 20  owed to make an 
2b240 65 70 68 65 6d 65 72 61 6c 20 70 6f 69 6e 74 65  ephemeral pointe
2b250 72 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 64 61  r.** into the da
2b260 74 61 62 61 73 65 20 70 61 67 65 2e 20 20 54 68  tabase page.  Th
2b270 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  at means that th
2b280 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65  e content of the
2b290 20 6f 75 74 70 75 74 0a 2a 2a 20 72 65 67 69 73   output.** regis
2b2a0 74 65 72 20 77 69 6c 6c 20 62 65 20 69 6e 76 61  ter will be inva
2b2b0 6c 69 64 61 74 65 64 20 61 73 20 73 6f 6f 6e 20  lidated as soon 
2b2c0 61 73 20 74 68 65 20 63 75 72 73 6f 72 20 6d 6f  as the cursor mo
2b2d0 76 65 73 20 2d 20 69 6e 63 6c 75 64 69 6e 67 0a  ves - including.
2b2e0 2a 2a 20 6d 6f 76 65 73 20 63 61 75 73 65 64 20  ** moves caused 
2b2f0 62 79 20 6f 74 68 65 72 20 63 75 72 73 6f 72 73  by other cursors
2b300 20 74 68 61 74 20 22 73 61 76 65 22 20 74 68 65   that "save" the
2b310 20 63 75 72 72 65 6e 74 20 63 75 72 73 6f 72 73   current cursors
2b320 0a 2a 2a 20 70 6f 73 69 74 69 6f 6e 20 69 6e 20  .** position in 
2b330 6f 72 64 65 72 20 74 68 61 74 20 74 68 65 79 20  order that they 
2b340 63 61 6e 20 77 72 69 74 65 20 74 6f 20 74 68 65  can write to the
2b350 20 73 61 6d 65 20 74 61 62 6c 65 2e 20 20 49 66   same table.  If
2b360 20 50 33 3d 3d 30 0a 2a 2a 20 74 68 65 6e 20 61   P3==0.** then a
2b370 20 63 6f 70 79 20 6f 66 20 74 68 65 20 64 61 74   copy of the dat
2b380 61 20 69 73 20 6d 61 64 65 20 69 6e 74 6f 20 6d  a is made into m
2b390 65 6d 6f 72 79 2e 20 20 50 33 21 3d 30 20 69 73  emory.  P3!=0 is
2b3a0 20 66 61 73 74 65 72 2c 20 62 75 74 0a 2a 2a 20   faster, but.** 
2b3b0 50 33 3d 3d 30 20 69 73 20 73 61 66 65 72 2e 0a  P3==0 is safer..
2b3c0 2a 2a 0a 2a 2a 20 49 66 20 50 33 21 3d 30 20 74  **.** If P3!=0 t
2b3d0 68 65 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  hen the content 
2b3e0 6f 66 20 74 68 65 20 50 32 20 72 65 67 69 73 74  of the P2 regist
2b3f0 65 72 20 69 73 20 75 6e 73 75 69 74 61 62 6c 65  er is unsuitable
2b400 20 66 6f 72 20 75 73 65 0a 2a 2a 20 69 6e 20 4f   for use.** in O
2b410 50 5f 52 65 73 75 6c 74 20 61 6e 64 20 61 6e 79  P_Result and any
2b420 20 4f 50 5f 52 65 73 75 6c 74 20 77 69 6c 6c 20   OP_Result will 
2b430 69 6e 76 61 6c 69 64 61 74 65 20 74 68 65 20 50  invalidate the P
2b440 32 20 72 65 67 69 73 74 65 72 20 63 6f 6e 74 65  2 register conte
2b450 6e 74 2e 0a 2a 2a 20 54 68 65 20 50 32 20 72 65  nt..** The P2 re
2b460 67 69 73 74 65 72 20 63 6f 6e 74 65 6e 74 20 69  gister content i
2b470 73 20 69 6e 76 61 6c 69 64 61 74 65 64 20 62 79  s invalidated by
2b480 20 6f 70 63 6f 64 65 73 20 6c 69 6b 65 20 4f 50   opcodes like OP
2b490 5f 46 75 6e 63 74 69 6f 6e 20 6f 72 0a 2a 2a 20  _Function or.** 
2b4a0 62 79 20 61 6e 79 20 75 73 65 20 6f 66 20 61 6e  by any use of an
2b4b0 6f 74 68 65 72 20 63 75 72 73 6f 72 20 70 6f 69  other cursor poi
2b4c0 6e 74 69 6e 67 20 74 6f 20 74 68 65 20 73 61 6d  nting to the sam
2b4d0 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65  e table..*/.case
2b4e0 20 4f 50 5f 52 6f 77 44 61 74 61 3a 20 7b 0a 20   OP_RowData: {. 
2b4f0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
2b500 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
2b510 73 72 3b 0a 20 20 75 33 32 20 6e 3b 0a 0a 20 20  sr;.  u32 n;..  
2b520 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
2b530 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 0a  lease(p, pOp);..
2b540 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2b550 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
2b560 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
2b570 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
2b580 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2b590 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
2b5a0 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
2b5b0 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
2b5c0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73   );.  assert( is
2b5d0 53 6f 72 74 65 72 28 70 43 29 3d 3d 30 20 29 3b  Sorter(pC)==0 );
2b5e0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6e  .  assert( pC->n
2b5f0 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b 0a 20 20 61  ullRow==0 );.  a
2b600 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43  ssert( pC->uc.pC
2b610 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 70 43  ursor!=0 );.  pC
2b620 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75  rsr = pC->uc.pCu
2b630 72 73 6f 72 3b 0a 0a 20 20 2f 2a 20 54 68 65 20  rsor;..  /* The 
2b640 4f 50 5f 52 6f 77 44 61 74 61 20 6f 70 63 6f 64  OP_RowData opcod
2b650 65 73 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77  es always follow
2b660 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72   OP_NotExists or
2b670 0a 20 20 2a 2a 20 4f 50 5f 53 65 65 6b 52 6f 77  .  ** OP_SeekRow
2b680 69 64 20 6f 72 20 4f 50 5f 52 65 77 69 6e 64 2f  id or OP_Rewind/
2b690 4f 70 5f 4e 65 78 74 20 77 69 74 68 20 6e 6f 20  Op_Next with no 
2b6a0 69 6e 74 65 72 76 65 6e 69 6e 67 20 69 6e 73 74  intervening inst
2b6b0 72 75 63 74 69 6f 6e 73 0a 20 20 2a 2a 20 74 68  ructions.  ** th
2b6c0 61 74 20 6d 69 67 68 74 20 69 6e 76 61 6c 69 64  at might invalid
2b6d0 61 74 65 20 74 68 65 20 63 75 72 73 6f 72 2e 0a  ate the cursor..
2b6e0 20 20 2a 2a 20 49 66 20 74 68 69 73 20 77 68 65    ** If this whe
2b6f0 72 65 20 6e 6f 74 20 74 68 65 20 63 61 73 65 2c  re not the case,
2b700 20 6f 6e 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f   on of the follo
2b710 77 69 6e 67 20 61 73 73 65 72 74 28 29 73 0a 20  wing assert()s. 
2b720 20 2a 2a 20 77 6f 75 6c 64 20 66 61 69 6c 2e 20   ** would fail. 
2b730 20 53 68 6f 75 6c 64 20 74 68 69 73 20 65 76 65   Should this eve
2b740 72 20 63 68 61 6e 67 65 20 28 62 65 63 61 75 73  r change (becaus
2b750 65 20 6f 66 20 63 68 61 6e 67 65 73 20 69 6e 20  e of changes in 
2b760 74 68 65 20 63 6f 64 65 0a 20 20 2a 2a 20 67 65  the code.  ** ge
2b770 6e 65 72 61 74 6f 72 29 20 74 68 65 6e 20 74 68  nerator) then th
2b780 65 20 66 69 78 20 77 6f 75 6c 64 20 62 65 20 74  e fix would be t
2b790 6f 20 69 6e 73 65 72 74 20 61 20 63 61 6c 6c 20  o insert a call 
2b7a0 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56  to.  ** sqlite3V
2b7b0 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
2b7c0 29 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  )..  */.  assert
2b7d0 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
2b7e0 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73  veto==0 );.  ass
2b7f0 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
2b800 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70  eCursorIsValid(p
2b810 43 72 73 72 29 20 29 3b 0a 23 69 66 20 30 20 20  Crsr) );.#if 0  
2b820 2f 2a 20 4e 6f 74 20 72 65 71 75 69 72 65 64 20  /* Not required 
2b830 64 75 65 20 74 6f 20 74 68 65 20 70 72 65 76 69  due to the previ
2b840 6f 75 73 20 74 6f 20 61 73 73 65 72 74 28 29 20  ous to assert() 
2b850 73 74 61 74 65 6d 65 6e 74 73 20 2a 2f 0a 20 20  statements */.  
2b860 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
2b870 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29  CursorMoveto(pC)
2b880 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  ;.  if( rc!=SQLI
2b890 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
2b8a0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2b8b0 0a 23 65 6e 64 69 66 0a 0a 20 20 6e 20 3d 20 73  .#endif..  n = s
2b8c0 71 6c 69 74 65 33 42 74 72 65 65 50 61 79 6c 6f  qlite3BtreePaylo
2b8d0 61 64 53 69 7a 65 28 70 43 72 73 72 29 3b 0a 20  adSize(pCrsr);. 
2b8e0 20 69 66 28 20 6e 3e 28 75 33 32 29 64 62 2d 3e   if( n>(u32)db->
2b8f0 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
2b900 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
2b910 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
2b920 0a 20 20 7d 0a 20 20 74 65 73 74 63 61 73 65 28  .  }.  testcase(
2b930 20 6e 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20   n==0 );.  rc = 
2b940 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72  sqlite3VdbeMemFr
2b950 6f 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20 30  omBtree(pCrsr, 0
2b960 2c 20 6e 2c 20 70 4f 75 74 29 3b 0a 20 20 69 66  , n, pOut);.  if
2b970 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
2b980 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2b990 20 20 69 66 28 20 21 70 4f 70 2d 3e 70 33 20 29    if( !pOp->p3 )
2b9a0 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28   Deephemeralize(
2b9b0 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f  pOut);.  UPDATE_
2b9c0 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
2b9d0 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  t);.  REGISTER_T
2b9e0 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f  RACE(pOp->p2, pO
2b9f0 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
2ba00 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 69  ./* Opcode: Rowi
2ba10 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  d P1 P2 * * *.**
2ba20 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
2ba30 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 53 74 6f  =rowid.**.** Sto
2ba40 72 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  re in register P
2ba50 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69  2 an integer whi
2ba60 63 68 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66  ch is the key of
2ba70 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79   the table entry
2ba80 20 74 68 61 74 0a 2a 2a 20 50 31 20 69 73 20 63   that.** P1 is c
2ba90 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74  urrently point t
2baa0 6f 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20  o..**.** P1 can 
2bab0 62 65 20 65 69 74 68 65 72 20 61 6e 20 6f 72 64  be either an ord
2bac0 69 6e 61 72 79 20 74 61 62 6c 65 20 6f 72 20 61  inary table or a
2bad0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20   virtual table. 
2bae0 20 54 68 65 72 65 20 75 73 65 64 20 74 6f 0a 2a   There used to.*
2baf0 2a 20 62 65 20 61 20 73 65 70 61 72 61 74 65 20  * be a separate 
2bb00 4f 50 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64 65  OP_VRowid opcode
2bb10 20 66 6f 72 20 75 73 65 20 77 69 74 68 20 76 69   for use with vi
2bb20 72 74 75 61 6c 20 74 61 62 6c 65 73 2c 20 62 75  rtual tables, bu
2bb30 74 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70  t this.** one op
2bb40 63 6f 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66  code now works f
2bb50 6f 72 20 62 6f 74 68 20 74 61 62 6c 65 20 74 79  or both table ty
2bb60 70 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  pes..*/.case OP_
2bb70 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20  Rowid: {        
2bb80 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
2bb90 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
2bba0 20 2a 70 43 3b 0a 20 20 69 36 34 20 76 3b 0a 20   *pC;.  i64 v;. 
2bbb0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
2bbc0 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71  Vtab;.  const sq
2bbd0 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
2bbe0 6f 64 75 6c 65 3b 0a 0a 20 20 70 4f 75 74 20 3d  odule;..  pOut =
2bbf0 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
2bc00 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72  p, pOp);.  asser
2bc10 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
2bc20 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
2bc30 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
2bc40 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
2bc50 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
2bc60 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
2bc70 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52 54  ->eCurType!=CURT
2bc80 59 50 45 5f 50 53 45 55 44 4f 20 7c 7c 20 70 43  YPE_PSEUDO || pC
2bc90 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 69  ->nullRow );.  i
2bca0 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29  f( pC->nullRow )
2bcb0 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  {.    pOut->flag
2bcc0 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
2bcd0 20 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65    break;.  }else
2bce0 20 69 66 28 20 70 43 2d 3e 64 65 66 65 72 72 65   if( pC->deferre
2bcf0 64 4d 6f 76 65 74 6f 20 29 7b 0a 20 20 20 20 76  dMoveto ){.    v
2bd00 20 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72   = pC->movetoTar
2bd10 67 65 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  get;.#ifndef SQL
2bd20 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2bd30 54 41 42 4c 45 0a 20 20 7d 65 6c 73 65 20 69 66  TABLE.  }else if
2bd40 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
2bd50 43 55 52 54 59 50 45 5f 56 54 41 42 20 29 7b 0a  CURTYPE_VTAB ){.
2bd60 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
2bd70 75 63 2e 70 56 43 75 72 21 3d 30 20 29 3b 0a 20  uc.pVCur!=0 );. 
2bd80 20 20 20 70 56 74 61 62 20 3d 20 70 43 2d 3e 75     pVtab = pC->u
2bd90 63 2e 70 56 43 75 72 2d 3e 70 56 74 61 62 3b 0a  c.pVCur->pVtab;.
2bda0 20 20 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56      pModule = pV
2bdb0 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20  tab->pModule;.  
2bdc0 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c    assert( pModul
2bdd0 65 2d 3e 78 52 6f 77 69 64 20 29 3b 0a 20 20 20  e->xRowid );.   
2bde0 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
2bdf0 52 6f 77 69 64 28 70 43 2d 3e 75 63 2e 70 56 43  Rowid(pC->uc.pVC
2be00 75 72 2c 20 26 76 29 3b 0a 20 20 20 20 73 71 6c  ur, &v);.    sql
2be10 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72  ite3VtabImportEr
2be20 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rmsg(p, pVtab);.
2be30 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74      if( rc ) got
2be40 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2be50 72 72 6f 72 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  rror;.#endif /* 
2be60 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2be70 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 20 20 7d 65  UALTABLE */.  }e
2be80 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
2be90 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
2bea0 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
2beb0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
2bec0 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  uc.pCursor!=0 );
2bed0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
2bee0 33 56 64 62 65 43 75 72 73 6f 72 52 65 73 74 6f  3VdbeCursorResto
2bef0 72 65 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20  re(pC);.    if( 
2bf00 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
2bf10 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
2bf20 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f    if( pC->nullRo
2bf30 77 20 29 7b 0a 20 20 20 20 20 20 70 4f 75 74 2d  w ){.      pOut-
2bf40 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  >flags = MEM_Nul
2bf50 6c 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  l;.      break;.
2bf60 20 20 20 20 7d 0a 20 20 20 20 76 20 3d 20 73 71      }.    v = sq
2bf70 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65 67 65  lite3BtreeIntege
2bf80 72 4b 65 79 28 70 43 2d 3e 75 63 2e 70 43 75 72  rKey(pC->uc.pCur
2bf90 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  sor);.  }.  pOut
2bfa0 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65  ->u.i = v;.  bre
2bfb0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2bfc0 3a 20 4e 75 6c 6c 52 6f 77 20 50 31 20 2a 20 2a  : NullRow P1 * *
2bfd0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20   * *.**.** Move 
2bfe0 74 68 65 20 63 75 72 73 6f 72 20 50 31 20 74 6f  the cursor P1 to
2bff0 20 61 20 6e 75 6c 6c 20 72 6f 77 2e 20 20 41 6e   a null row.  An
2c000 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 65 72  y OP_Column oper
2c010 61 74 69 6f 6e 73 0a 2a 2a 20 74 68 61 74 20 6f  ations.** that o
2c020 63 63 75 72 20 77 68 69 6c 65 20 74 68 65 20 63  ccur while the c
2c030 75 72 73 6f 72 20 69 73 20 6f 6e 20 74 68 65 20  ursor is on the 
2c040 6e 75 6c 6c 20 72 6f 77 20 77 69 6c 6c 20 61 6c  null row will al
2c050 77 61 79 73 0a 2a 2a 20 77 72 69 74 65 20 61 20  ways.** write a 
2c060 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
2c070 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a 20 20 56 64  _NullRow: {.  Vd
2c080 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20  beCursor *pC;.. 
2c090 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
2c0a0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
2c0b0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
2c0c0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
2c0d0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2c0e0 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 2d 3e   pC!=0 );.  pC->
2c0f0 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70  nullRow = 1;.  p
2c100 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
2c110 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
2c120 69 66 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  if( pC->eCurType
2c130 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
2c140 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
2c150 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30  C->uc.pCursor!=0
2c160 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 42   );.    sqlite3B
2c170 74 72 65 65 43 6c 65 61 72 43 75 72 73 6f 72 28  treeClearCursor(
2c180 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b  pC->uc.pCursor);
2c190 0a 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49  .  }.#ifdef SQLI
2c1a0 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70  TE_DEBUG.  if( p
2c1b0 43 2d 3e 73 65 65 6b 4f 70 3d 3d 30 20 29 20 70  C->seekOp==0 ) p
2c1c0 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 4e  C->seekOp = OP_N
2c1d0 75 6c 6c 52 6f 77 3b 0a 23 65 6e 64 69 66 0a 20  ullRow;.#endif. 
2c1e0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2c1f0 63 6f 64 65 3a 20 53 65 65 6b 45 6e 64 20 50 31  code: SeekEnd P1
2c200 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50   * * * *.**.** P
2c210 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
2c220 31 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20  1 at the end of 
2c230 74 68 65 20 62 74 72 65 65 20 66 6f 72 20 74 68  the btree for th
2c240 65 20 70 75 72 70 6f 73 65 20 6f 66 0a 2a 2a 20  e purpose of.** 
2c250 61 70 70 65 6e 64 69 6e 67 20 61 20 6e 65 77 20  appending a new 
2c260 65 6e 74 72 79 20 6f 6e 74 6f 20 74 68 65 20 62  entry onto the b
2c270 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 74 20 69  tree..**.** It i
2c280 73 20 61 73 73 75 6d 65 64 20 74 68 61 74 20 74  s assumed that t
2c290 68 65 20 63 75 72 73 6f 72 20 69 73 20 75 73 65  he cursor is use
2c2a0 64 20 6f 6e 6c 79 20 66 6f 72 20 61 70 70 65 6e  d only for appen
2c2b0 64 69 6e 67 20 61 6e 64 20 73 6f 0a 2a 2a 20 69  ding and so.** i
2c2c0 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  f the cursor is 
2c2d0 76 61 6c 69 64 2c 20 74 68 65 6e 20 74 68 65 20  valid, then the 
2c2e0 63 75 72 73 6f 72 20 6d 75 73 74 20 61 6c 72 65  cursor must alre
2c2f0 61 64 79 20 62 65 20 70 6f 69 6e 74 69 6e 67 0a  ady be pointing.
2c300 2a 2a 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  ** at the end of
2c310 20 74 68 65 20 62 74 72 65 65 20 61 6e 64 20 73   the btree and s
2c320 6f 20 6e 6f 20 63 68 61 6e 67 65 73 20 61 72 65  o no changes are
2c330 20 6d 61 64 65 20 74 6f 0a 2a 2a 20 74 68 65 20   made to.** the 
2c340 63 75 72 73 6f 72 2e 0a 2a 2f 0a 2f 2a 20 4f 70  cursor..*/./* Op
2c350 63 6f 64 65 3a 20 4c 61 73 74 20 50 31 20 50 32  code: Last P1 P2
2c360 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
2c370 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65   next use of the
2c380 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e   Rowid or Column
2c390 20 6f 72 20 50 72 65 76 20 69 6e 73 74 72 75 63   or Prev instruc
2c3a0 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20  tion for P1 .** 
2c3b0 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68  will refer to th
2c3c0 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20  e last entry in 
2c3d0 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
2c3e0 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20  le or index..** 
2c3f0 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  If the table or 
2c400 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 61  index is empty a
2c410 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75  nd P2>0, then ju
2c420 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
2c430 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69  o P2..** If P2 i
2c440 73 20 30 20 6f 72 20 69 66 20 74 68 65 20 74 61  s 0 or if the ta
2c450 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
2c460 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20  not empty, fall 
2c470 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68  through.** to th
2c480 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74  e following inst
2c490 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ruction..**.** T
2c4a0 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65  his opcode leave
2c4b0 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e  s the cursor con
2c4c0 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20  figured to move 
2c4d0 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65 72  in reverse order
2c4e0 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e  ,.** from the en
2c4f0 64 20 74 6f 77 61 72 64 20 74 68 65 20 62 65 67  d toward the beg
2c500 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65  inning.  In othe
2c510 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72  r words, the cur
2c520 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67  sor is.** config
2c530 75 72 65 64 20 74 6f 20 75 73 65 20 50 72 65 76  ured to use Prev
2c540 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2f 0a 63  , not Next..*/.c
2c550 61 73 65 20 4f 50 5f 53 65 65 6b 45 6e 64 3a 0a  ase OP_SeekEnd:.
2c560 63 61 73 65 20 4f 50 5f 4c 61 73 74 3a 20 7b 20  case OP_Last: { 
2c570 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
2c580 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
2c590 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
2c5a0 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
2c5b0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
2c5c0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
2c5d0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
2c5e0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
2c5f0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2c600 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
2c610 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
2c620 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
2c630 52 45 45 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  REE );.  pCrsr =
2c640 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b   pC->uc.pCursor;
2c650 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 73  .  res = 0;.  as
2c660 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29  sert( pCrsr!=0 )
2c670 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
2c680 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b  DEBUG.  pC->seek
2c690 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  Op = pOp->opcode
2c6a0 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70  ;.#endif.  if( p
2c6b0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53  Op->opcode==OP_S
2c6c0 65 65 6b 45 6e 64 20 29 7b 0a 20 20 20 20 61 73  eekEnd ){.    as
2c6d0 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 30  sert( pOp->p2==0
2c6e0 20 29 3b 0a 20 20 20 20 70 43 2d 3e 73 65 65 6b   );.    pC->seek
2c6f0 52 65 73 75 6c 74 20 3d 20 2d 31 3b 0a 20 20 20  Result = -1;.   
2c700 20 69 66 28 20 73 71 6c 69 74 65 33 42 74 72 65   if( sqlite3Btre
2c710 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 4e 4e  eCursorIsValidNN
2c720 28 70 43 72 73 72 29 20 29 7b 0a 20 20 20 20 20  (pCrsr) ){.     
2c730 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
2c740 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  }.  rc = sqlite3
2c750 42 74 72 65 65 4c 61 73 74 28 70 43 72 73 72 2c  BtreeLast(pCrsr,
2c760 20 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6e 75   &res);.  pC->nu
2c770 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b  llRow = (u8)res;
2c780 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  .  pC->deferredM
2c790 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d  oveto = 0;.  pC-
2c7a0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
2c7b0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66  ACHE_STALE;.  if
2c7c0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
2c7d0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2c7e0 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3e 30 20    if( pOp->p2>0 
2c7f0 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  ){.    VdbeBranc
2c800 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29  hTaken(res!=0,2)
2c810 3b 0a 20 20 20 20 69 66 28 20 72 65 73 20 29 20  ;.    if( res ) 
2c820 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
2c830 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2c840 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 53 6d  ./* Opcode: IfSm
2c850 61 6c 6c 65 72 20 50 31 20 50 32 20 50 33 20 2a  aller P1 P2 P3 *
2c860 20 2a 0a 2a 2a 0a 2a 2a 20 45 73 74 69 6d 61 74   *.**.** Estimat
2c870 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
2c880 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c  rows in the tabl
2c890 65 20 50 31 2e 20 20 4a 75 6d 70 20 74 6f 20 50  e P1.  Jump to P
2c8a0 32 20 69 66 20 74 68 61 74 0a 2a 2a 20 65 73 74  2 if that.** est
2c8b0 69 6d 61 74 65 20 69 73 20 6c 65 73 73 20 74 68  imate is less th
2c8c0 61 6e 20 61 70 70 72 6f 78 69 6d 61 74 65 6c 79  an approximately
2c8d0 20 32 2a 2a 28 30 2e 31 2a 50 33 29 2e 0a 2a 2f   2**(0.1*P3)..*/
2c8e0 0a 63 61 73 65 20 4f 50 5f 49 66 53 6d 61 6c 6c  .case OP_IfSmall
2c8f0 65 72 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  er: {        /* 
2c900 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75  jump */.  VdbeCu
2c910 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
2c920 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69  rsor *pCrsr;.  i
2c930 6e 74 20 72 65 73 3b 0a 20 20 69 36 34 20 73 7a  nt res;.  i64 sz
2c940 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
2c950 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
2c960 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
2c970 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
2c980 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2c990 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
2c9a0 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70  pCrsr = pC->uc.p
2c9b0 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74  Cursor;.  assert
2c9c0 28 20 70 43 72 73 72 20 29 3b 0a 20 20 72 63 20  ( pCrsr );.  rc 
2c9d0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 69  = sqlite3BtreeFi
2c9e0 72 73 74 28 70 43 72 73 72 2c 20 26 72 65 73 29  rst(pCrsr, &res)
2c9f0 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
2ca00 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2ca10 72 72 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 3d  rror;.  if( res=
2ca20 3d 30 20 29 7b 0a 20 20 20 20 73 7a 20 3d 20 73  =0 ){.    sz = s
2ca30 71 6c 69 74 65 33 42 74 72 65 65 52 6f 77 43 6f  qlite3BtreeRowCo
2ca40 75 6e 74 45 73 74 28 70 43 72 73 72 29 3b 0a 20  untEst(pCrsr);. 
2ca50 20 20 20 69 66 28 20 41 4c 57 41 59 53 28 73 7a     if( ALWAYS(sz
2ca60 3e 3d 30 29 20 26 26 20 73 71 6c 69 74 65 33 4c  >=0) && sqlite3L
2ca70 6f 67 45 73 74 28 28 75 36 34 29 73 7a 29 3c 70  ogEst((u64)sz)<p
2ca80 4f 70 2d 3e 70 33 20 29 20 72 65 73 20 3d 20 31  Op->p3 ) res = 1
2ca90 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e  ;.  }.  VdbeBran
2caa0 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32  chTaken(res!=0,2
2cab0 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 20 67  );.  if( res ) g
2cac0 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
2cad0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20    break;.}.../* 
2cae0 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 53 6f  Opcode: SorterSo
2caf0 72 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  rt P1 P2 * * *.*
2cb00 2a 0a 2a 2a 20 41 66 74 65 72 20 61 6c 6c 20 72  *.** After all r
2cb10 65 63 6f 72 64 73 20 68 61 76 65 20 62 65 65 6e  ecords have been
2cb20 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74   inserted into t
2cb30 68 65 20 53 6f 72 74 65 72 20 6f 62 6a 65 63 74  he Sorter object
2cb40 0a 2a 2a 20 69 64 65 6e 74 69 66 69 65 64 20 62  .** identified b
2cb50 79 20 50 31 2c 20 69 6e 76 6f 6b 65 20 74 68 69  y P1, invoke thi
2cb60 73 20 6f 70 63 6f 64 65 20 74 6f 20 61 63 74 75  s opcode to actu
2cb70 61 6c 6c 79 20 64 6f 20 74 68 65 20 73 6f 72 74  ally do the sort
2cb80 69 6e 67 2e 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  ing..** Jump to 
2cb90 50 32 20 69 66 20 74 68 65 72 65 20 61 72 65 20  P2 if there are 
2cba0 6e 6f 20 72 65 63 6f 72 64 73 20 74 6f 20 62 65  no records to be
2cbb0 20 73 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54   sorted..**.** T
2cbc0 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 61 6e  his opcode is an
2cbd0 20 61 6c 69 61 73 20 66 6f 72 20 4f 50 5f 53 6f   alias for OP_So
2cbe0 72 74 20 61 6e 64 20 4f 50 5f 52 65 77 69 6e 64  rt and OP_Rewind
2cbf0 20 74 68 61 74 20 69 73 20 75 73 65 64 0a 2a 2a   that is used.**
2cc00 20 66 6f 72 20 53 6f 72 74 65 72 20 6f 62 6a 65   for Sorter obje
2cc10 63 74 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  cts..*/./* Opcod
2cc20 65 3a 20 53 6f 72 74 20 50 31 20 50 32 20 2a 20  e: Sort P1 P2 * 
2cc30 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  * *.**.** This o
2cc40 70 63 6f 64 65 20 64 6f 65 73 20 65 78 61 63 74  pcode does exact
2cc50 6c 79 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e  ly the same thin
2cc60 67 20 61 73 20 4f 50 5f 52 65 77 69 6e 64 20 65  g as OP_Rewind e
2cc70 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 69 74  xcept that.** it
2cc80 20 69 6e 63 72 65 6d 65 6e 74 73 20 61 6e 20 75   increments an u
2cc90 6e 64 6f 63 75 6d 65 6e 74 65 64 20 67 6c 6f 62  ndocumented glob
2cca0 61 6c 20 76 61 72 69 61 62 6c 65 20 75 73 65 64  al variable used
2ccb0 20 66 6f 72 20 74 65 73 74 69 6e 67 2e 0a 2a 2a   for testing..**
2ccc0 0a 2a 2a 20 53 6f 72 74 69 6e 67 20 69 73 20 61  .** Sorting is a
2ccd0 63 63 6f 6d 70 6c 69 73 68 65 64 20 62 79 20 77  ccomplished by w
2cce0 72 69 74 69 6e 67 20 72 65 63 6f 72 64 73 20 69  riting records i
2ccf0 6e 74 6f 20 61 20 73 6f 72 74 69 6e 67 20 69 6e  nto a sorting in
2cd00 64 65 78 2c 0a 2a 2a 20 74 68 65 6e 20 72 65 77  dex,.** then rew
2cd10 69 6e 64 69 6e 67 20 74 68 61 74 20 69 6e 64 65  inding that inde
2cd20 78 20 61 6e 64 20 70 6c 61 79 69 6e 67 20 69 74  x and playing it
2cd30 20 62 61 63 6b 20 66 72 6f 6d 20 62 65 67 69 6e   back from begin
2cd40 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e 64 2e 20  ning to.** end. 
2cd50 20 57 65 20 75 73 65 20 74 68 65 20 4f 50 5f 53   We use the OP_S
2cd60 6f 72 74 20 6f 70 63 6f 64 65 20 69 6e 73 74 65  ort opcode inste
2cd70 61 64 20 6f 66 20 4f 50 5f 52 65 77 69 6e 64 20  ad of OP_Rewind 
2cd80 74 6f 20 64 6f 20 74 68 65 0a 2a 2a 20 72 65 77  to do the.** rew
2cd90 69 6e 64 69 6e 67 20 73 6f 20 74 68 61 74 20 74  inding so that t
2cda0 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  he global variab
2cdb0 6c 65 20 77 69 6c 6c 20 62 65 20 69 6e 63 72 65  le will be incre
2cdc0 6d 65 6e 74 65 64 20 61 6e 64 0a 2a 2a 20 72 65  mented and.** re
2cdd0 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20 63  gression tests c
2cde0 61 6e 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65  an determine whe
2cdf0 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
2ce00 6f 70 74 69 6d 69 7a 65 72 20 69 73 0a 2a 2a 20  optimizer is.** 
2ce10 63 6f 72 72 65 63 74 6c 79 20 6f 70 74 69 6d 69  correctly optimi
2ce20 7a 69 6e 67 20 6f 75 74 20 73 6f 72 74 73 2e 0a  zing out sorts..
2ce30 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
2ce40 72 53 6f 72 74 3a 20 20 20 20 2f 2a 20 6a 75 6d  rSort:    /* jum
2ce50 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  p */.case OP_Sor
2ce60 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  t: {        /* j
2ce70 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  ump */.#ifdef SQ
2ce80 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69  LITE_TEST.  sqli
2ce90 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 2b 2b  te3_sort_count++
2cea0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72  ;.  sqlite3_sear
2ceb0 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65 6e 64  ch_count--;.#end
2cec0 69 66 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72  if.  p->aCounter
2ced0 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54  [SQLITE_STMTSTAT
2cee0 55 53 5f 53 4f 52 54 5d 2b 2b 3b 0a 20 20 2f 2a  US_SORT]++;.  /*
2cef0 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e   Fall through in
2cf00 74 6f 20 4f 50 5f 52 65 77 69 6e 64 20 2a 2f 0a  to OP_Rewind */.
2cf10 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 77  }./* Opcode: Rew
2cf20 69 6e 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ind P1 P2 * * *.
2cf30 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75  **.** The next u
2cf40 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20  se of the Rowid 
2cf50 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78  or Column or Nex
2cf60 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f  t instruction fo
2cf70 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65  r P1 .** will re
2cf80 66 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74  fer to the first
2cf90 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61   entry in the da
2cfa0 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
2cfb0 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65  index..** If the
2cfc0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
2cfd0 69 73 20 65 6d 70 74 79 2c 20 6a 75 6d 70 20 69  is empty, jump i
2cfe0 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
2cff0 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c  ..** If the tabl
2d000 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f  e or index is no
2d010 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68  t empty, fall th
2d020 72 6f 75 67 68 20 74 6f 20 74 68 65 20 66 6f 6c  rough to the fol
2d030 6c 6f 77 69 6e 67 20 0a 2a 2a 20 69 6e 73 74 72  lowing .** instr
2d040 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  uction..**.** Th
2d050 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73  is opcode leaves
2d060 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66   the cursor conf
2d070 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69  igured to move i
2d080 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c  n forward order,
2d090 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67  .** from the beg
2d0a0 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68  inning toward th
2d0b0 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72  e end.  In other
2d0c0 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73   words, the curs
2d0d0 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  or is.** configu
2d0e0 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c  red to use Next,
2d0f0 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2f 0a 63 61   not Prev..*/.ca
2d100 73 65 20 4f 50 5f 52 65 77 69 6e 64 3a 20 7b 20  se OP_Rewind: { 
2d110 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
2d120 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
2d130 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
2d140 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
2d150 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
2d160 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
2d170 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
2d180 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2d190 70 35 3d 3d 30 20 29 3b 0a 20 20 70 43 20 3d 20  p5==0 );.  pC = 
2d1a0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
2d1b0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
2d1c0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
2d1d0 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 28 70  isSorter(pC)==(p
2d1e0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53  Op->opcode==OP_S
2d1f0 6f 72 74 65 72 53 6f 72 74 29 20 29 3b 0a 20 20  orterSort) );.  
2d200 72 65 73 20 3d 20 31 3b 0a 23 69 66 64 65 66 20  res = 1;.#ifdef 
2d210 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70  SQLITE_DEBUG.  p
2d220 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 52  C->seekOp = OP_R
2d230 65 77 69 6e 64 3b 0a 23 65 6e 64 69 66 0a 20 20  ewind;.#endif.  
2d240 69 66 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  if( isSorter(pC)
2d250 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
2d260 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 52 65  ite3VdbeSorterRe
2d270 77 69 6e 64 28 70 43 2c 20 26 72 65 73 29 3b 0a  wind(pC, &res);.
2d280 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
2d290 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
2d2a0 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
2d2b0 20 29 3b 0a 20 20 20 20 70 43 72 73 72 20 3d 20   );.    pCrsr = 
2d2c0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a  pC->uc.pCursor;.
2d2d0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 72 73      assert( pCrs
2d2e0 72 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  r );.    rc = sq
2d2f0 6c 69 74 65 33 42 74 72 65 65 46 69 72 73 74 28  lite3BtreeFirst(
2d300 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20  pCrsr, &res);.  
2d310 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
2d320 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43  veto = 0;.    pC
2d330 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
2d340 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d  CACHE_STALE;.  }
2d350 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
2d360 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2d370 72 6f 72 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  ror;.  pC->nullR
2d380 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20  ow = (u8)res;.  
2d390 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
2d3a0 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e  0 && pOp->p2<p->
2d3b0 6e 4f 70 20 29 3b 0a 20 20 56 64 62 65 42 72 61  nOp );.  VdbeBra
2d3c0 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c  nchTaken(res!=0,
2d3d0 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 20  2);.  if( res ) 
2d3e0 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
2d3f0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2d400 4f 70 63 6f 64 65 3a 20 4e 65 78 74 20 50 31 20  Opcode: Next P1 
2d410 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
2d420 2a 20 41 64 76 61 6e 63 65 20 63 75 72 73 6f 72  * Advance cursor
2d430 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70   P1 so that it p
2d440 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6e 65 78  oints to the nex
2d450 74 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20  t key/data pair 
2d460 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20  in its.** table 
2d470 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68  or index.  If th
2d480 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20  ere are no more 
2d490 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20  key/value pairs 
2d4a0 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
2d4b0 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c  h.** to the foll
2d4c0 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f  owing instructio
2d4d0 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 63  n.  But if the c
2d4e0 75 72 73 6f 72 20 61 64 76 61 6e 63 65 20 77 61  ursor advance wa
2d4f0 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a  s successful,.**
2d500 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
2d510 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  y to P2..**.** T
2d520 68 65 20 4e 65 78 74 20 6f 70 63 6f 64 65 20 69  he Next opcode i
2d530 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 66 6f 6c  s only valid fol
2d540 6c 6f 77 69 6e 67 20 61 6e 20 53 65 65 6b 47 54  lowing an SeekGT
2d550 2c 20 53 65 65 6b 47 45 2c 20 6f 72 0a 2a 2a 20  , SeekGE, or.** 
2d560 4f 50 5f 52 65 77 69 6e 64 20 6f 70 63 6f 64 65  OP_Rewind opcode
2d570 20 75 73 65 64 20 74 6f 20 70 6f 73 69 74 69 6f   used to positio
2d580 6e 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 4e  n the cursor.  N
2d590 65 78 74 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77  ext is not allow
2d5a0 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77 20  ed.** to follow 
2d5b0 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20  SeekLT, SeekLE, 
2d5c0 6f 72 20 4f 50 5f 4c 61 73 74 2e 0a 2a 2a 0a 2a  or OP_Last..**.*
2d5d0 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20  * The P1 cursor 
2d5e0 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20 72 65  must be for a re
2d5f0 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20  al table, not a 
2d600 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 50  pseudo-table.  P
2d610 31 20 6d 75 73 74 20 68 61 76 65 0a 2a 2a 20 62  1 must have.** b
2d620 65 65 6e 20 6f 70 65 6e 65 64 20 70 72 69 6f 72  een opened prior
2d630 20 74 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20   to this opcode 
2d640 6f 72 20 74 68 65 20 70 72 6f 67 72 61 6d 20 77  or the program w
2d650 69 6c 6c 20 73 65 67 66 61 75 6c 74 2e 0a 2a 2a  ill segfault..**
2d660 0a 2a 2a 20 54 68 65 20 50 33 20 76 61 6c 75 65  .** The P3 value
2d670 20 69 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68   is a hint to th
2d680 65 20 62 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e  e btree implemen
2d690 74 61 74 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31  tation. If P3==1
2d6a0 2c 20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20  , that.** means 
2d6b0 50 31 20 69 73 20 61 6e 20 53 51 4c 20 69 6e 64  P1 is an SQL ind
2d6c0 65 78 20 61 6e 64 20 74 68 61 74 20 74 68 69 73  ex and that this
2d6d0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 75   instruction cou
2d6e0 6c 64 20 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20  ld have been.** 
2d6f0 6f 6d 69 74 74 65 64 20 69 66 20 74 68 61 74 20  omitted if that 
2d700 69 6e 64 65 78 20 68 61 64 20 62 65 65 6e 20 75  index had been u
2d710 6e 69 71 75 65 2e 20 20 50 33 20 69 73 20 75 73  nique.  P3 is us
2d720 75 61 6c 6c 79 20 30 2e 20 20 50 33 20 69 73 0a  ually 0.  P3 is.
2d730 2a 2a 20 61 6c 77 61 79 73 20 65 69 74 68 65 72  ** always either
2d740 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50   0 or 1..**.** P
2d750 34 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20 74  4 is always of t
2d760 79 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e 20  ype P4_ADVANCE. 
2d770 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69  The function poi
2d780 6e 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a  nter points to.*
2d790 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65  * sqlite3BtreeNe
2d7a0 78 74 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  xt()..**.** If P
2d7b0 35 20 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e  5 is positive an
2d7c0 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  d the jump is ta
2d7d0 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20  ken, then event 
2d7e0 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65  counter.** numbe
2d7f0 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72  r P5-1 in the pr
2d800 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
2d810 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e   is incremented.
2d820 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
2d830 20 50 72 65 76 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f   Prev.*/./* Opco
2d840 64 65 3a 20 50 72 65 76 20 50 31 20 50 32 20 50  de: Prev P1 P2 P
2d850 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 61  3 P4 P5.**.** Ba
2d860 63 6b 20 75 70 20 63 75 72 73 6f 72 20 50 31 20  ck up cursor P1 
2d870 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74  so that it point
2d880 73 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75  s to the previou
2d890 73 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20  s key/data pair 
2d8a0 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20  in its.** table 
2d8b0 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68  or index.  If th
2d8c0 65 72 65 20 69 73 20 6e 6f 20 70 72 65 76 69 6f  ere is no previo
2d8d0 75 73 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69  us key/value pai
2d8e0 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  rs then fall thr
2d8f0 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66  ough.** to the f
2d900 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63  ollowing instruc
2d910 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68  tion.  But if th
2d920 65 20 63 75 72 73 6f 72 20 62 61 63 6b 75 70 20  e cursor backup 
2d930 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a  was successful,.
2d940 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  ** jump immediat
2d950 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ely to P2..**.**
2d960 0a 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70 63  .** The Prev opc
2d970 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69  ode is only vali
2d980 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20 53  d following an S
2d990 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 6f  eekLT, SeekLE, o
2d9a0 72 0a 2a 2a 20 4f 50 5f 4c 61 73 74 20 6f 70 63  r.** OP_Last opc
2d9b0 6f 64 65 20 75 73 65 64 20 74 6f 20 70 6f 73 69  ode used to posi
2d9c0 74 69 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 2e  tion the cursor.
2d9d0 20 20 50 72 65 76 20 69 73 20 6e 6f 74 20 61 6c    Prev is not al
2d9e0 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c  lowed.** to foll
2d9f0 6f 77 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47  ow SeekGT, SeekG
2da00 45 2c 20 6f 72 20 4f 50 5f 52 65 77 69 6e 64 2e  E, or OP_Rewind.
2da10 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75  .**.** The P1 cu
2da20 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72  rsor must be for
2da30 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e   a real table, n
2da40 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  ot a pseudo-tabl
2da50 65 2e 20 20 49 66 20 50 31 20 69 73 0a 2a 2a 20  e.  If P1 is.** 
2da60 6e 6f 74 20 6f 70 65 6e 20 74 68 65 6e 20 74 68  not open then th
2da70 65 20 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e  e behavior is un
2da80 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54  defined..**.** T
2da90 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 61  he P3 value is a
2daa0 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74 72   hint to the btr
2dab0 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ee implementatio
2dac0 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68 61  n. If P3==1, tha
2dad0 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69 73  t.** means P1 is
2dae0 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61 6e   an SQL index an
2daf0 64 20 74 68 61 74 20 74 68 69 73 20 69 6e 73 74  d that this inst
2db00 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61  ruction could ha
2db10 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74  ve been.** omitt
2db20 65 64 20 69 66 20 74 68 61 74 20 69 6e 64 65 78  ed if that index
2db30 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75 65   had been unique
2db40 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c 79  .  P3 is usually
2db50 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c   0.  P3 is.** al
2db60 77 61 79 73 20 65 69 74 68 65 72 20 30 20 6f 72  ways either 0 or
2db70 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20   1..**.** P4 is 
2db80 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20 50  always of type P
2db90 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66  4_ADVANCE. The f
2dba0 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20  unction pointer 
2dbb0 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c  points to.** sql
2dbc0 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75  ite3BtreePreviou
2dbd0 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  s()..**.** If P5
2dbe0 20 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64   is positive and
2dbf0 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
2dc00 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63  en, then event c
2dc10 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72  ounter.** number
2dc20 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65   P5-1 in the pre
2dc30 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
2dc40 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a  is incremented..
2dc50 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  */./* Opcode: So
2dc60 72 74 65 72 4e 65 78 74 20 50 31 20 50 32 20 2a  rterNext P1 P2 *
2dc70 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73   * P5.**.** This
2dc80 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75   opcode works ju
2dc90 73 74 20 6c 69 6b 65 20 4f 50 5f 4e 65 78 74 20  st like OP_Next 
2dca0 65 78 63 65 70 74 20 74 68 61 74 20 50 31 20 6d  except that P1 m
2dcb0 75 73 74 20 62 65 20 61 0a 2a 2a 20 73 6f 72 74  ust be a.** sort
2dcc0 65 72 20 6f 62 6a 65 63 74 20 66 6f 72 20 77 68  er object for wh
2dcd0 69 63 68 20 74 68 65 20 4f 50 5f 53 6f 72 74 65  ich the OP_Sorte
2dce0 72 53 6f 72 74 20 6f 70 63 6f 64 65 20 68 61 73  rSort opcode has
2dcf0 20 62 65 65 6e 0a 2a 2a 20 69 6e 76 6f 6b 65 64   been.** invoked
2dd00 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 61  .  This opcode a
2dd10 64 76 61 6e 63 65 73 20 74 68 65 20 63 75 72 73  dvances the curs
2dd20 6f 72 20 74 6f 20 74 68 65 20 6e 65 78 74 20 73  or to the next s
2dd30 6f 72 74 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2c  orted.** record,
2dd40 20 6f 72 20 6a 75 6d 70 73 20 74 6f 20 50 32 20   or jumps to P2 
2dd50 69 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  if there are no 
2dd60 6d 6f 72 65 20 73 6f 72 74 65 64 20 72 65 63 6f  more sorted reco
2dd70 72 64 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  rds..*/.case OP_
2dd80 53 6f 72 74 65 72 4e 65 78 74 3a 20 7b 20 20 2f  SorterNext: {  /
2dd90 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65  * jump */.  Vdbe
2dda0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 70  Cursor *pC;..  p
2ddb0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
2ddc0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2ddd0 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b   isSorter(pC) );
2dde0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
2ddf0 64 62 65 53 6f 72 74 65 72 4e 65 78 74 28 64 62  dbeSorterNext(db
2de00 2c 20 70 43 29 3b 0a 20 20 67 6f 74 6f 20 6e 65  , pC);.  goto ne
2de10 78 74 5f 74 61 69 6c 3b 0a 63 61 73 65 20 4f 50  xt_tail;.case OP
2de20 5f 50 72 65 76 3a 20 20 20 20 20 20 20 20 20 20  _Prev:          
2de30 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
2de40 4f 50 5f 4e 65 78 74 3a 20 20 20 20 20 20 20 20  OP_Next:        
2de50 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61    /* jump */.  a
2de60 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
2de70 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
2de80 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
2de90 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 41 72 72  ert( pOp->p5<Arr
2dea0 61 79 53 69 7a 65 28 70 2d 3e 61 43 6f 75 6e 74  aySize(p->aCount
2deb0 65 72 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  er) );.  pC = p-
2dec0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
2ded0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
2dee0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
2def0 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
2df00 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
2df10 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
2df20 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
2df30 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
2df40 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 20 7c  pcode!=OP_Next |
2df50 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e  | pOp->p4.xAdvan
2df60 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65  ce==sqlite3Btree
2df70 4e 65 78 74 20 29 3b 0a 20 20 61 73 73 65 72 74  Next );.  assert
2df80 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f  ( pOp->opcode!=O
2df90 50 5f 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e 70  P_Prev || pOp->p
2dfa0 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69  4.xAdvance==sqli
2dfb0 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73  te3BtreePrevious
2dfc0 20 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4e 65   );..  /* The Ne
2dfd0 78 74 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c  xt opcode is onl
2dfe0 79 20 75 73 65 64 20 61 66 74 65 72 20 53 65 65  y used after See
2dff0 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20 52 65 77  kGT, SeekGE, Rew
2e000 69 6e 64 2c 20 61 6e 64 20 46 6f 75 6e 64 2e 0a  ind, and Found..
2e010 20 20 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70    ** The Prev op
2e020 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75 73 65  code is only use
2e030 64 20 61 66 74 65 72 20 53 65 65 6b 4c 54 2c 20  d after SeekLT, 
2e040 53 65 65 6b 4c 45 2c 20 61 6e 64 20 4c 61 73 74  SeekLE, and Last
2e050 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  . */.  assert( p
2e060 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e  Op->opcode!=OP_N
2e070 65 78 74 0a 20 20 20 20 20 20 20 7c 7c 20 70 43  ext.       || pC
2e080 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65  ->seekOp==OP_See
2e090 6b 47 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f  kGT || pC->seekO
2e0a0 70 3d 3d 4f 50 5f 53 65 65 6b 47 45 0a 20 20 20  p==OP_SeekGE.   
2e0b0 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f      || pC->seekO
2e0c0 70 3d 3d 4f 50 5f 52 65 77 69 6e 64 20 7c 7c 20  p==OP_Rewind || 
2e0d0 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 46  pC->seekOp==OP_F
2e0e0 6f 75 6e 64 0a 20 20 20 20 20 20 20 7c 7c 20 70  ound.       || p
2e0f0 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 4e 75  C->seekOp==OP_Nu
2e100 6c 6c 52 6f 77 7c 7c 20 70 43 2d 3e 73 65 65 6b  llRow|| pC->seek
2e110 4f 70 3d 3d 4f 50 5f 53 65 65 6b 52 6f 77 69 64  Op==OP_SeekRowid
2e120 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73  .       || pC->s
2e130 65 65 6b 4f 70 3d 3d 4f 50 5f 49 66 4e 6f 48 6f  eekOp==OP_IfNoHo
2e140 70 65 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  pe);.  assert( p
2e150 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50  Op->opcode!=OP_P
2e160 72 65 76 0a 20 20 20 20 20 20 20 7c 7c 20 70 43  rev.       || pC
2e170 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65  ->seekOp==OP_See
2e180 6b 4c 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f  kLT || pC->seekO
2e190 70 3d 3d 4f 50 5f 53 65 65 6b 4c 45 0a 20 20 20  p==OP_SeekLE.   
2e1a0 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f      || pC->seekO
2e1b0 70 3d 3d 4f 50 5f 4c 61 73 74 20 20 20 7c 7c 20  p==OP_Last   || 
2e1c0 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 49  pC->seekOp==OP_I
2e1d0 66 4e 6f 48 6f 70 65 0a 20 20 20 20 20 20 20 7c  fNoHope.       |
2e1e0 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50  | pC->seekOp==OP
2e1f0 5f 4e 75 6c 6c 52 6f 77 29 3b 0a 0a 20 20 72 63  _NullRow);..  rc
2e200 20 3d 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61   = pOp->p4.xAdva
2e210 6e 63 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  nce(pC->uc.pCurs
2e220 6f 72 2c 20 70 4f 70 2d 3e 70 33 29 3b 0a 6e 65  or, pOp->p3);.ne
2e230 78 74 5f 74 61 69 6c 3a 0a 20 20 70 43 2d 3e 63  xt_tail:.  pC->c
2e240 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
2e250 48 45 5f 53 54 41 4c 45 3b 0a 20 20 56 64 62 65  HE_STALE;.  Vdbe
2e260 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 63 3d 3d  BranchTaken(rc==
2e270 53 51 4c 49 54 45 5f 4f 4b 2c 32 29 3b 0a 20 20  SQLITE_OK,2);.  
2e280 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
2e290 4b 20 29 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c  K ){.    pC->nul
2e2a0 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70 2d  lRow = 0;.    p-
2e2b0 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e 70  >aCounter[pOp->p
2e2c0 35 5d 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c  5]++;.#ifdef SQL
2e2d0 49 54 45 5f 54 45 53 54 0a 20 20 20 20 73 71 6c  ITE_TEST.    sql
2e2e0 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e  ite3_search_coun
2e2f0 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  t++;.#endif.    
2e300 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f  goto jump_to_p2_
2e310 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e  and_check_for_in
2e320 74 65 72 72 75 70 74 3b 0a 20 20 7d 0a 20 20 69  terrupt;.  }.  i
2e330 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 44 4f  f( rc!=SQLITE_DO
2e340 4e 45 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  NE ) goto abort_
2e350 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
2e360 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
2e370 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
2e380 31 3b 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f  1;.  goto check_
2e390 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d  for_interrupt;.}
2e3a0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  ../* Opcode: Idx
2e3b0 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33 20  Insert P1 P2 P3 
2e3c0 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
2e3d0 73 3a 20 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a  s: key=r[P2].**.
2e3e0 2a 2a 20 52 65 67 69 73 74 65 72 20 50 32 20 68  ** Register P2 h
2e3f0 6f 6c 64 73 20 61 6e 20 53 51 4c 20 69 6e 64 65  olds an SQL inde
2e400 78 20 6b 65 79 20 6d 61 64 65 20 75 73 69 6e 67  x key made using
2e410 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f   the.** MakeReco
2e420 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e  rd instructions.
2e430 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 72    This opcode wr
2e440 69 74 65 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a  ites that key.**
2e450 20 69 6e 74 6f 20 74 68 65 20 69 6e 64 65 78 20   into the index 
2e460 50 31 2e 20 20 44 61 74 61 20 66 6f 72 20 74 68  P1.  Data for th
2e470 65 20 65 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a  e entry is nil..
2e480 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e  **.** If P4 is n
2e490 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74  ot zero, then it
2e4a0 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   is the number o
2e4b0 66 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20  f values in the 
2e4c0 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 6b 65 79 20  unpacked.** key 
2e4d0 6f 66 20 72 65 67 28 50 32 29 2e 20 20 49 6e 20  of reg(P2).  In 
2e4e0 74 68 61 74 20 63 61 73 65 2c 20 50 33 20 69 73  that case, P3 is
2e4f0 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68   the index of th
2e500 65 20 66 69 72 73 74 20 72 65 67 69 73 74 65 72  e first register
2e510 0a 2a 2a 20 66 6f 72 20 74 68 65 20 75 6e 70 61  .** for the unpa
2e520 63 6b 65 64 20 6b 65 79 2e 20 20 54 68 65 20 61  cked key.  The a
2e530 76 61 69 6c 61 62 69 6c 69 74 79 20 6f 66 20 74  vailability of t
2e540 68 65 20 75 6e 70 61 63 6b 65 64 20 6b 65 79 20  he unpacked key 
2e550 63 61 6e 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a  can sometimes.**
2e560 20 62 65 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74   be an optimizat
2e570 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  ion..**.** If P5
2e580 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f   has the OPFLAG_
2e590 41 50 50 45 4e 44 20 62 69 74 20 73 65 74 2c 20  APPEND bit set, 
2e5a0 74 68 61 74 20 69 73 20 61 20 68 69 6e 74 20 74  that is a hint t
2e5b0 6f 20 74 68 65 20 62 2d 74 72 65 65 20 6c 61 79  o the b-tree lay
2e5c0 65 72 0a 2a 2a 20 74 68 61 74 20 74 68 69 73 20  er.** that this 
2e5d0 69 6e 73 65 72 74 20 69 73 20 6c 69 6b 65 6c 79  insert is likely
2e5e0 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64   to be an append
2e5f0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61  ..**.** If P5 ha
2e600 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48  s the OPFLAG_NCH
2e610 41 4e 47 45 20 62 69 74 20 73 65 74 2c 20 74 68  ANGE bit set, th
2e620 65 6e 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f  en the change co
2e630 75 6e 74 65 72 20 69 73 0a 2a 2a 20 69 6e 63 72  unter is.** incr
2e640 65 6d 65 6e 74 65 64 20 62 79 20 74 68 69 73 20  emented by this 
2e650 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49 66  instruction.  If
2e660 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41   the OPFLAG_NCHA
2e670 4e 47 45 20 62 69 74 20 69 73 20 63 6c 65 61 72  NGE bit is clear
2e680 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63 68  ,.** then the ch
2e690 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20  ange counter is 
2e6a0 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2a 0a 2a 2a  unchanged..**.**
2e6b0 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 55   If the OPFLAG_U
2e6c0 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61  SESEEKRESULT fla
2e6d0 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20  g of P5 is set, 
2e6e0 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
2e6f0 6f 6e 20 6d 69 67 68 74 0a 2a 2a 20 72 75 6e 20  on might.** run 
2e700 66 61 73 74 65 72 20 62 79 20 61 76 6f 69 64 69  faster by avoidi
2e710 6e 67 20 61 6e 20 75 6e 6e 65 63 65 73 73 61 72  ng an unnecessar
2e720 79 20 73 65 65 6b 20 6f 6e 20 63 75 72 73 6f 72  y seek on cursor
2e730 20 50 31 2e 20 20 48 6f 77 65 76 65 72 2c 0a 2a   P1.  However,.*
2e740 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45  * the OPFLAG_USE
2e750 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20  SEEKRESULT flag 
2e760 6d 75 73 74 20 6f 6e 6c 79 20 62 65 20 73 65 74  must only be set
2e770 20 69 66 20 74 68 65 72 65 20 68 61 76 65 20 62   if there have b
2e780 65 65 6e 20 6e 6f 20 70 72 69 6f 72 0a 2a 2a 20  een no prior.** 
2e790 73 65 65 6b 73 20 6f 6e 20 74 68 65 20 63 75 72  seeks on the cur
2e7a0 73 6f 72 20 6f 72 20 69 66 20 74 68 65 20 6d 6f  sor or if the mo
2e7b0 73 74 20 72 65 63 65 6e 74 20 73 65 65 6b 20 75  st recent seek u
2e7c0 73 65 64 20 61 20 6b 65 79 20 65 71 75 69 76 61  sed a key equiva
2e7d0 6c 65 6e 74 0a 2a 2a 20 74 6f 20 50 32 2e 20 0a  lent.** to P2. .
2e7e0 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
2e7f0 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b  uction only work
2e800 73 20 66 6f 72 20 69 6e 64 69 63 65 73 2e 20 20  s for indices.  
2e810 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69  The equivalent i
2e820 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f  nstruction.** fo
2e830 72 20 74 61 62 6c 65 73 20 69 73 20 4f 50 5f 49  r tables is OP_I
2e840 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  nsert..*/./* Opc
2e850 6f 64 65 3a 20 53 6f 72 74 65 72 49 6e 73 65 72  ode: SorterInser
2e860 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
2e870 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
2e880 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73  [P2].**.** Regis
2e890 74 65 72 20 50 32 20 68 6f 6c 64 73 20 61 6e 20  ter P2 holds an 
2e8a0 53 51 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d 61  SQL index key ma
2e8b0 64 65 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  de using the.** 
2e8c0 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72  MakeRecord instr
2e8d0 75 63 74 69 6f 6e 73 2e 20 20 54 68 69 73 20 6f  uctions.  This o
2e8e0 70 63 6f 64 65 20 77 72 69 74 65 73 20 74 68 61  pcode writes tha
2e8f0 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74 68  t key.** into th
2e900 65 20 73 6f 72 74 65 72 20 50 31 2e 20 20 44 61  e sorter P1.  Da
2e910 74 61 20 66 6f 72 20 74 68 65 20 65 6e 74 72 79  ta for the entry
2e920 20 69 73 20 6e 69 6c 2e 0a 2a 2f 0a 63 61 73 65   is nil..*/.case
2e930 20 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74   OP_SorterInsert
2e940 3a 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a  :       /* in2 *
2e950 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 49 6e 73  /.case OP_IdxIns
2e960 65 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ert: {        /*
2e970 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75   in2 */.  VdbeCu
2e980 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 72 65  rsor *pC;.  Btre
2e990 65 50 61 79 6c 6f 61 64 20 78 3b 0a 0a 20 20 61  ePayload x;..  a
2e9a0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
2e9b0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
2e9c0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
2e9d0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
2e9e0 70 31 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  p1];.  sqlite3Vd
2e9f0 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e 74  beIncrWriteCount
2ea00 65 72 28 70 2c 20 70 43 29 3b 0a 20 20 61 73 73  er(p, pC);.  ass
2ea10 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
2ea20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72  assert( isSorter
2ea30 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f  (pC)==(pOp->opco
2ea40 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73  de==OP_SorterIns
2ea50 65 72 74 29 20 29 3b 0a 20 20 70 49 6e 32 20 3d  ert) );.  pIn2 =
2ea60 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
2ea70 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 32 2d  .  assert( pIn2-
2ea80 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f  >flags & MEM_Blo
2ea90 62 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  b );.  if( pOp->
2eaa0 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41  p5 & OPFLAG_NCHA
2eab0 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65  NGE ) p->nChange
2eac0 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  ++;.  assert( pC
2ead0 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
2eae0 59 50 45 5f 42 54 52 45 45 20 7c 7c 20 70 4f 70  YPE_BTREE || pOp
2eaf0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72  ->opcode==OP_Sor
2eb00 74 65 72 49 6e 73 65 72 74 20 29 3b 0a 20 20 61  terInsert );.  a
2eb10 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
2eb20 6c 65 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20  le==0 );.  rc = 
2eb30 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29  ExpandBlob(pIn2)
2eb40 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
2eb50 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2eb60 72 72 6f 72 3b 0a 20 20 69 66 28 20 70 4f 70 2d  rror;.  if( pOp-
2eb70 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74  >opcode==OP_Sort
2eb80 65 72 49 6e 73 65 72 74 20 29 7b 0a 20 20 20 20  erInsert ){.    
2eb90 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
2eba0 53 6f 72 74 65 72 57 72 69 74 65 28 70 43 2c 20  SorterWrite(pC, 
2ebb0 70 49 6e 32 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  pIn2);.  }else{.
2ebc0 20 20 20 20 78 2e 6e 4b 65 79 20 3d 20 70 49 6e      x.nKey = pIn
2ebd0 32 2d 3e 6e 3b 0a 20 20 20 20 78 2e 70 4b 65 79  2->n;.    x.pKey
2ebe0 20 3d 20 70 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20   = pIn2->z;.    
2ebf0 78 2e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 2b 20  x.aMem = aMem + 
2ec00 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 78 2e 6e  pOp->p3;.    x.n
2ec10 4d 65 6d 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e  Mem = (u16)pOp->
2ec20 70 34 2e 69 3b 0a 20 20 20 20 72 63 20 3d 20 73  p4.i;.    rc = s
2ec30 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65 72  qlite3BtreeInser
2ec40 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  t(pC->uc.pCursor
2ec50 2c 20 26 78 2c 0a 20 20 20 20 20 20 20 20 20 28  , &x,.         (
2ec60 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41  pOp->p5 & (OPFLA
2ec70 47 5f 41 50 50 45 4e 44 7c 4f 50 46 4c 41 47 5f  G_APPEND|OPFLAG_
2ec80 53 41 56 45 50 4f 53 49 54 49 4f 4e 29 29 2c 20  SAVEPOSITION)), 
2ec90 0a 20 20 20 20 20 20 20 20 28 28 70 4f 70 2d 3e  .        ((pOp->
2eca0 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53  p5 & OPFLAG_USES
2ecb0 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d  EEKRESULT) ? pC-
2ecc0 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29  >seekResult : 0)
2ecd0 0a 20 20 20 20 20 20 20 20 29 3b 0a 20 20 20 20  .        );.    
2ece0 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
2ecf0 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
2ed00 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
2ed10 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
2ed20 4c 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63  LE;.  }.  if( rc
2ed30 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
2ed40 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65  _to_error;.  bre
2ed50 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2ed60 3a 20 49 64 78 44 65 6c 65 74 65 20 50 31 20 50  : IdxDelete P1 P
2ed70 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
2ed80 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32 40 50  psis: key=r[P2@P
2ed90 33 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6e  3].**.** The con
2eda0 74 65 6e 74 20 6f 66 20 50 33 20 72 65 67 69 73  tent of P3 regis
2edb0 74 65 72 73 20 73 74 61 72 74 69 6e 67 20 61 74  ters starting at
2edc0 20 72 65 67 69 73 74 65 72 20 50 32 20 66 6f 72   register P2 for
2edd0 6d 0a 2a 2a 20 61 6e 20 75 6e 70 61 63 6b 65 64  m.** an unpacked
2ede0 20 69 6e 64 65 78 20 6b 65 79 2e 20 54 68 69 73   index key. This
2edf0 20 6f 70 63 6f 64 65 20 72 65 6d 6f 76 65 73 20   opcode removes 
2ee00 74 68 61 74 20 65 6e 74 72 79 20 66 72 6f 6d 20  that entry from 
2ee10 74 68 65 20 0a 2a 2a 20 69 6e 64 65 78 20 6f 70  the .** index op
2ee20 65 6e 65 64 20 62 79 20 63 75 72 73 6f 72 20 50  ened by cursor P
2ee30 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  1..*/.case OP_Id
2ee40 78 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56 64 62  xDelete: {.  Vdb
2ee50 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
2ee60 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
2ee70 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70    int res;.  Unp
2ee80 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a  ackedRecord r;..
2ee90 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2eea0 33 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  3>0 );.  assert(
2eeb0 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f   pOp->p2>0 && pO
2eec0 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 3c 3d 28  p->p2+pOp->p3<=(
2eed0 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
2eee0 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 61  Cursor)+1 );.  a
2eef0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
2ef00 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
2ef10 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
2ef20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
2ef30 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2ef40 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
2ef50 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
2ef60 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
2ef70 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e  .  sqlite3VdbeIn
2ef80 63 72 57 72 69 74 65 43 6f 75 6e 74 65 72 28 70  crWriteCounter(p
2ef90 2c 20 70 43 29 3b 0a 20 20 70 43 72 73 72 20 3d  , pC);.  pCrsr =
2efa0 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b   pC->uc.pCursor;
2efb0 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72  .  assert( pCrsr
2efc0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
2efd0 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20   pOp->p5==0 );. 
2efe0 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
2eff0 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72 2e  ->pKeyInfo;.  r.
2f000 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f  nField = (u16)pO
2f010 70 2d 3e 70 33 3b 0a 20 20 72 2e 64 65 66 61 75  p->p3;.  r.defau
2f020 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 72 2e 61  lt_rc = 0;.  r.a
2f030 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
2f040 3e 70 32 5d 3b 0a 20 20 72 63 20 3d 20 73 71 6c  >p2];.  rc = sql
2f050 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
2f060 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20 26  npacked(pCrsr, &
2f070 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a  r, 0, 0, &res);.
2f080 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
2f090 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2f0a0 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 3d 3d 30  or;.  if( res==0
2f0b0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
2f0c0 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65 28  ite3BtreeDelete(
2f0d0 70 43 72 73 72 2c 20 42 54 52 45 45 5f 41 55 58  pCrsr, BTREE_AUX
2f0e0 44 45 4c 45 54 45 29 3b 0a 20 20 20 20 69 66 28  DELETE);.    if(
2f0f0 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
2f100 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
2f110 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d   }.  assert( pC-
2f120 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
2f130 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68  =0 );.  pC->cach
2f140 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
2f150 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 73 65 65  STALE;.  pC->see
2f160 6b 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20 62  kResult = 0;.  b
2f170 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2f180 64 65 3a 20 44 65 66 65 72 72 65 64 53 65 65 6b  de: DeferredSeek
2f190 20 50 31 20 2a 20 50 33 20 50 34 20 2a 0a 2a 2a   P1 * P3 P4 *.**
2f1a0 20 53 79 6e 6f 70 73 69 73 3a 20 4d 6f 76 65 20   Synopsis: Move 
2f1b0 50 33 20 74 6f 20 50 31 2e 72 6f 77 69 64 20 69  P3 to P1.rowid i
2f1c0 66 20 6e 65 65 64 65 64 0a 2a 2a 0a 2a 2a 20 50  f needed.**.** P
2f1d0 31 20 69 73 20 61 6e 20 6f 70 65 6e 20 69 6e 64  1 is an open ind
2f1e0 65 78 20 63 75 72 73 6f 72 20 61 6e 64 20 50 33  ex cursor and P3
2f1f0 20 69 73 20 61 20 63 75 72 73 6f 72 20 6f 6e 20   is a cursor on 
2f200 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
2f210 67 0a 2a 2a 20 74 61 62 6c 65 2e 20 20 54 68 69  g.** table.  Thi
2f220 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 61 20  s opcode does a 
2f230 64 65 66 65 72 72 65 64 20 73 65 65 6b 20 6f 66  deferred seek of
2f240 20 74 68 65 20 50 33 20 74 61 62 6c 65 20 63 75   the P3 table cu
2f250 72 73 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20 72  rsor.** to the r
2f260 6f 77 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f  ow that correspo
2f270 6e 64 73 20 74 6f 20 74 68 65 20 63 75 72 72 65  nds to the curre
2f280 6e 74 20 72 6f 77 20 6f 66 20 50 31 2e 0a 2a 2a  nt row of P1..**
2f290 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 20 64 65  .** This is a de
2f2a0 66 65 72 72 65 64 20 73 65 65 6b 2e 20 20 4e 6f  ferred seek.  No
2f2b0 74 68 69 6e 67 20 61 63 74 75 61 6c 6c 79 20 68  thing actually h
2f2c0 61 70 70 65 6e 73 20 75 6e 74 69 6c 0a 2a 2a 20  appens until.** 
2f2d0 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 75 73  the cursor is us
2f2e0 65 64 20 74 6f 20 72 65 61 64 20 61 20 72 65 63  ed to read a rec
2f2f0 6f 72 64 2e 20 20 54 68 61 74 20 77 61 79 2c 20  ord.  That way, 
2f300 69 66 20 6e 6f 20 72 65 61 64 73 0a 2a 2a 20 6f  if no reads.** o
2f310 63 63 75 72 2c 20 6e 6f 20 75 6e 6e 65 63 65 73  ccur, no unneces
2f320 73 61 72 79 20 49 2f 4f 20 68 61 70 70 65 6e 73  sary I/O happens
2f330 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62  ..**.** P4 may b
2f340 65 20 61 6e 20 61 72 72 61 79 20 6f 66 20 69 6e  e an array of in
2f350 74 65 67 65 72 73 20 28 74 79 70 65 20 50 34 5f  tegers (type P4_
2f360 49 4e 54 41 52 52 41 59 29 20 63 6f 6e 74 61 69  INTARRAY) contai
2f370 6e 69 6e 67 0a 2a 2a 20 6f 6e 65 20 65 6e 74 72  ning.** one entr
2f380 79 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  y for each colum
2f390 6e 20 69 6e 20 74 68 65 20 50 33 20 74 61 62 6c  n in the P3 tabl
2f3a0 65 2e 20 20 49 66 20 61 72 72 61 79 20 65 6e 74  e.  If array ent
2f3b0 72 79 20 61 28 69 29 0a 2a 2a 20 69 73 20 6e 6f  ry a(i).** is no
2f3c0 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 72 65 61  n-zero, then rea
2f3d0 64 69 6e 67 20 63 6f 6c 75 6d 6e 20 61 28 69 29  ding column a(i)
2f3e0 2d 31 20 66 72 6f 6d 20 63 75 72 73 6f 72 20 50  -1 from cursor P
2f3f0 33 20 69 73 20 0a 2a 2a 20 65 71 75 69 76 61 6c  3 is .** equival
2f400 65 6e 74 20 74 6f 20 70 65 72 66 6f 72 6d 69 6e  ent to performin
2f410 67 20 74 68 65 20 64 65 66 65 72 72 65 64 20 73  g the deferred s
2f420 65 65 6b 20 61 6e 64 20 74 68 65 6e 20 72 65 61  eek and then rea
2f430 64 69 6e 67 20 63 6f 6c 75 6d 6e 20 69 20 0a 2a  ding column i .*
2f440 2a 20 66 72 6f 6d 20 50 31 2e 20 20 54 68 69 73  * from P1.  This
2f450 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
2f460 73 74 6f 72 65 64 20 69 6e 20 50 33 20 61 6e 64  stored in P3 and
2f470 20 75 73 65 64 20 74 6f 20 72 65 64 69 72 65 63   used to redirec
2f480 74 0a 2a 2a 20 72 65 61 64 73 20 61 67 61 69 6e  t.** reads again
2f490 73 74 20 50 33 20 6f 76 65 72 20 74 6f 20 50 31  st P3 over to P1
2f4a0 2c 20 74 68 75 73 20 70 6f 73 73 69 62 6c 79 20  , thus possibly 
2f4b0 61 76 6f 69 64 69 6e 67 20 74 68 65 20 6e 65 65  avoiding the nee
2f4c0 64 20 74 6f 0a 2a 2a 20 73 65 65 6b 20 61 6e 64  d to.** seek and
2f4d0 20 72 65 61 64 20 63 75 72 73 6f 72 20 50 33 2e   read cursor P3.
2f4e0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
2f4f0 64 78 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20  dxRowid P1 P2 * 
2f500 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
2f510 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a   r[P2]=rowid.**.
2f520 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65  ** Write into re
2f530 67 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74  gister P2 an int
2f540 65 67 65 72 20 77 68 69 63 68 20 69 73 20 74 68  eger which is th
2f550 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20  e last entry in 
2f560 74 68 65 20 72 65 63 6f 72 64 20 61 74 0a 2a 2a  the record at.**
2f570 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
2f580 69 6e 64 65 78 20 6b 65 79 20 70 6f 69 6e 74 65  index key pointe
2f590 64 20 74 6f 20 62 79 20 63 75 72 73 6f 72 20 50  d to by cursor P
2f5a0 31 2e 20 20 54 68 69 73 20 69 6e 74 65 67 65 72  1.  This integer
2f5b0 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 74 68   should be.** th
2f5c0 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74  e rowid of the t
2f5d0 61 62 6c 65 20 65 6e 74 72 79 20 74 6f 20 77 68  able entry to wh
2f5e0 69 63 68 20 74 68 69 73 20 69 6e 64 65 78 20 65  ich this index e
2f5f0 6e 74 72 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a  ntry points..**.
2f600 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 52 6f 77  ** See also: Row
2f610 69 64 2c 20 4d 61 6b 65 52 65 63 6f 72 64 2e 0a  id, MakeRecord..
2f620 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 66 65 72  */.case OP_Defer
2f630 72 65 64 53 65 65 6b 3a 0a 63 61 73 65 20 4f 50  redSeek:.case OP
2f640 5f 49 64 78 52 6f 77 69 64 3a 20 7b 20 20 20 20  _IdxRowid: {    
2f650 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
2f660 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
2f670 70 43 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pC;             
2f680 2f 2a 20 54 68 65 20 50 31 20 69 6e 64 65 78 20  /* The P1 index 
2f690 63 75 72 73 6f 72 20 2a 2f 0a 20 20 56 64 62 65  cursor */.  Vdbe
2f6a0 43 75 72 73 6f 72 20 2a 70 54 61 62 43 75 72 3b  Cursor *pTabCur;
2f6b0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50          /* The P
2f6c0 32 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20 28  2 table cursor (
2f6d0 4f 50 5f 44 65 66 65 72 72 65 64 53 65 65 6b 20  OP_DeferredSeek 
2f6e0 6f 6e 6c 79 29 20 2a 2f 0a 20 20 69 36 34 20 72  only) */.  i64 r
2f6f0 6f 77 69 64 3b 20 20 20 20 20 20 20 20 20 20 20  owid;           
2f700 20 20 20 20 20 20 20 2f 2a 20 52 6f 77 69 64 20         /* Rowid 
2f710 74 68 61 74 20 50 31 20 63 75 72 72 65 6e 74 20  that P1 current 
2f720 70 6f 69 6e 74 73 20 74 6f 20 2a 2f 0a 0a 20 20  points to */..  
2f730 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2f740 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
2f750 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
2f760 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
2f770 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2f780 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
2f790 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
2f7a0 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
2f7b0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
2f7c0 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  uc.pCursor!=0 );
2f7d0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
2f7e0 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 61  sTable==0 );.  a
2f7f0 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
2f800 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
2f810 20 20 61 73 73 65 72 74 28 20 21 70 43 2d 3e 6e    assert( !pC->n
2f820 75 6c 6c 52 6f 77 20 7c 7c 20 70 4f 70 2d 3e 6f  ullRow || pOp->o
2f830 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 52 6f 77  pcode==OP_IdxRow
2f840 69 64 20 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20  id );..  /* The 
2f850 49 64 78 52 6f 77 69 64 20 61 6e 64 20 53 65 65  IdxRowid and See
2f860 6b 20 6f 70 63 6f 64 65 73 20 61 72 65 20 63 6f  k opcodes are co
2f870 6d 62 69 6e 65 64 20 62 65 63 61 75 73 65 20 6f  mbined because o
2f880 66 20 74 68 65 20 63 6f 6d 6d 6f 6e 61 6c 69 74  f the commonalit
2f890 79 0a 20 20 2a 2a 20 6f 66 20 73 71 6c 69 74 65  y.  ** of sqlite
2f8a0 33 56 64 62 65 43 75 72 73 6f 72 52 65 73 74 6f  3VdbeCursorResto
2f8b0 72 65 28 29 20 61 6e 64 20 73 71 6c 69 74 65 33  re() and sqlite3
2f8c0 56 64 62 65 49 64 78 52 6f 77 69 64 28 29 2e 20  VdbeIdxRowid(). 
2f8d0 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  */.  rc = sqlite
2f8e0 33 56 64 62 65 43 75 72 73 6f 72 52 65 73 74 6f  3VdbeCursorResto
2f8f0 72 65 28 70 43 29 3b 0a 0a 20 20 2f 2a 20 73 71  re(pC);..  /* sq
2f900 6c 69 74 65 33 56 62 65 43 75 72 73 6f 72 52 65  lite3VbeCursorRe
2f910 73 74 6f 72 65 28 29 20 63 61 6e 20 6f 6e 6c 79  store() can only
2f920 20 66 61 69 6c 20 69 66 20 74 68 65 20 72 65 63   fail if the rec
2f930 6f 72 64 20 68 61 73 20 62 65 65 6e 20 64 65 6c  ord has been del
2f940 65 74 65 64 0a 20 20 2a 2a 20 6f 75 74 20 66 72  eted.  ** out fr
2f950 6f 6d 20 75 6e 64 65 72 20 74 68 65 20 63 75 72  om under the cur
2f960 73 6f 72 2e 20 20 54 68 61 74 20 77 69 6c 6c 20  sor.  That will 
2f970 6e 65 76 65 72 20 68 61 70 70 65 6e 73 20 66 6f  never happens fo
2f980 72 20 61 6e 20 49 64 78 52 6f 77 69 64 0a 20 20  r an IdxRowid.  
2f990 2a 2a 20 6f 72 20 53 65 65 6b 20 6f 70 63 6f 64  ** or Seek opcod
2f9a0 65 20 2a 2f 0a 20 20 69 66 28 20 4e 45 56 45 52  e */.  if( NEVER
2f9b0 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20  (rc!=SQLITE_OK) 
2f9c0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
2f9d0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 69 66  _to_error;..  if
2f9e0 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29  ( !pC->nullRow )
2f9f0 7b 0a 20 20 20 20 72 6f 77 69 64 20 3d 20 30 3b  {.    rowid = 0;
2fa00 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e    /* Not needed.
2fa10 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73    Only used to s
2fa20 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67  ilence a warning
2fa30 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71  . */.    rc = sq
2fa40 6c 69 74 65 33 56 64 62 65 49 64 78 52 6f 77 69  lite3VdbeIdxRowi
2fa50 64 28 64 62 2c 20 70 43 2d 3e 75 63 2e 70 43 75  d(db, pC->uc.pCu
2fa60 72 73 6f 72 2c 20 26 72 6f 77 69 64 29 3b 0a 20  rsor, &rowid);. 
2fa70 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
2fa80 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f  E_OK ){.      go
2fa90 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2faa0 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20  error;.    }.   
2fab0 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
2fac0 3d 3d 4f 50 5f 44 65 66 65 72 72 65 64 53 65 65  ==OP_DeferredSee
2fad0 6b 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  k ){.      asser
2fae0 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 26 26  t( pOp->p3>=0 &&
2faf0 20 70 4f 70 2d 3e 70 33 3c 70 2d 3e 6e 43 75 72   pOp->p3<p->nCur
2fb00 73 6f 72 20 29 3b 0a 20 20 20 20 20 20 70 54 61  sor );.      pTa
2fb10 62 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b  bCur = p->apCsr[
2fb20 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20  pOp->p3];.      
2fb30 61 73 73 65 72 74 28 20 70 54 61 62 43 75 72 21  assert( pTabCur!
2fb40 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  =0 );.      asse
2fb50 72 74 28 20 70 54 61 62 43 75 72 2d 3e 65 43 75  rt( pTabCur->eCu
2fb60 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
2fb70 54 52 45 45 20 29 3b 0a 20 20 20 20 20 20 61 73  TREE );.      as
2fb80 73 65 72 74 28 20 70 54 61 62 43 75 72 2d 3e 75  sert( pTabCur->u
2fb90 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  c.pCursor!=0 );.
2fba0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 54        assert( pT
2fbb0 61 62 43 75 72 2d 3e 69 73 54 61 62 6c 65 20 29  abCur->isTable )
2fbc0 3b 0a 20 20 20 20 20 20 70 54 61 62 43 75 72 2d  ;.      pTabCur-
2fbd0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20  >nullRow = 0;.  
2fbe0 20 20 20 20 70 54 61 62 43 75 72 2d 3e 6d 6f 76      pTabCur->mov
2fbf0 65 74 6f 54 61 72 67 65 74 20 3d 20 72 6f 77 69  etoTarget = rowi
2fc00 64 3b 0a 20 20 20 20 20 20 70 54 61 62 43 75 72  d;.      pTabCur
2fc10 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
2fc20 20 3d 20 31 3b 0a 20 20 20 20 20 20 61 73 73 65   = 1;.      asse
2fc30 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
2fc40 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 7c 7c 20  =P4_INTARRAY || 
2fc50 70 4f 70 2d 3e 70 34 2e 61 69 3d 3d 30 20 29 3b  pOp->p4.ai==0 );
2fc60 0a 20 20 20 20 20 20 70 54 61 62 43 75 72 2d 3e  .      pTabCur->
2fc70 61 41 6c 74 4d 61 70 20 3d 20 70 4f 70 2d 3e 70  aAltMap = pOp->p
2fc80 34 2e 61 69 3b 0a 20 20 20 20 20 20 70 54 61 62  4.ai;.      pTab
2fc90 43 75 72 2d 3e 70 41 6c 74 43 75 72 73 6f 72 20  Cur->pAltCursor 
2fca0 3d 20 70 43 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  = pC;.    }else{
2fcb0 0a 20 20 20 20 20 20 70 4f 75 74 20 3d 20 6f 75  .      pOut = ou
2fcc0 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
2fcd0 70 4f 70 29 3b 0a 20 20 20 20 20 20 70 4f 75 74  pOp);.      pOut
2fce0 2d 3e 75 2e 69 20 3d 20 72 6f 77 69 64 3b 0a 20  ->u.i = rowid;. 
2fcf0 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
2fd00 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
2fd10 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 52 6f 77  pcode==OP_IdxRow
2fd20 69 64 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  id );.    sqlite
2fd30 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
2fd40 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b  &aMem[pOp->p2]);
2fd50 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2fd60 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 47  ./* Opcode: IdxG
2fd70 45 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  E P1 P2 P3 P4 P5
2fd80 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
2fd90 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
2fda0 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72   The P4 register
2fdb0 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e   values beginnin
2fdc0 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61  g with P3 form a
2fdd0 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
2fde0 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d   .** key that om
2fdf0 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59 20  its the PRIMARY 
2fe00 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65 20 74 68  KEY.  Compare th
2fe10 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61  is key value aga
2fe20 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a  inst the index .
2fe30 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20 63 75  ** that P1 is cu
2fe40 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
2fe50 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68   to, ignoring th
2fe60 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72  e PRIMARY KEY or
2fe70 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c 64   ROWID .** field
2fe80 73 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2a  s at the end..**
2fe90 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e  .** If the P1 in
2fea0 64 65 78 20 65 6e 74 72 79 20 69 73 20 67 72 65  dex entry is gre
2feb0 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75  ater than or equ
2fec0 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61  al to the key va
2fed0 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70  lue.** then jump
2fee0 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72 77 69   to P2.  Otherwi
2fef0 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  se fall through 
2ff00 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
2ff10 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f  ruction..*/./* O
2ff20 70 63 6f 64 65 3a 20 49 64 78 47 54 20 50 31 20  pcode: IdxGT P1 
2ff30 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
2ff40 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
2ff50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20  3@P4].**.** The 
2ff60 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75  P4 register valu
2ff70 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  es beginning wit
2ff80 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70  h P3 form an unp
2ff90 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20  acked index .** 
2ffa0 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74  key that omits t
2ffb0 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 20  he PRIMARY KEY. 
2ffc0 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65   Compare this ke
2ffd0 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20  y value against 
2ffe0 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68  the index .** th
2fff0 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  at P1 is current
30000 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20  ly pointing to, 
30010 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49  ignoring the PRI
30020 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49  MARY KEY or ROWI
30030 44 20 0a 2a 2a 20 66 69 65 6c 64 73 20 61 74 20  D .** fields at 
30040 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49  the end..**.** I
30050 66 20 74 68 65 20 50 31 20 69 6e 64 65 78 20 65  f the P1 index e
30060 6e 74 72 79 20 69 73 20 67 72 65 61 74 65 72 20  ntry is greater 
30070 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c  than the key val
30080 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20  ue.** then jump 
30090 74 6f 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73  to P2.  Otherwis
300a0 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  e fall through t
300b0 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
300c0 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70  uction..*/./* Op
300d0 63 6f 64 65 3a 20 49 64 78 4c 54 20 50 31 20 50  code: IdxLT P1 P
300e0 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
300f0 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
30100 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  @P4].**.** The P
30110 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65  4 register value
30120 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
30130 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61   P3 form an unpa
30140 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b  cked index .** k
30150 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68  ey that omits th
30160 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72  e PRIMARY KEY or
30170 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65   ROWID.  Compare
30180 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20   this key value 
30190 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68 65 20 69  against.** the i
301a0 6e 64 65 78 20 74 68 61 74 20 50 31 20 69 73 20  ndex that P1 is 
301b0 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
301c0 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20  ng to, ignoring 
301d0 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
301e0 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e 20 74  or.** ROWID on t
301f0 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a  he P1 index..**.
30200 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64  ** If the P1 ind
30210 65 78 20 65 6e 74 72 79 20 69 73 20 6c 65 73 73  ex entry is less
30220 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61   than the key va
30230 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  lue then jump to
30240 20 50 32 2e 0a 2a 2a 20 4f 74 68 65 72 77 69 73   P2..** Otherwis
30250 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  e fall through t
30260 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
30270 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70  uction..*/./* Op
30280 63 6f 64 65 3a 20 49 64 78 4c 45 20 50 31 20 50  code: IdxLE P1 P
30290 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
302a0 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
302b0 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  @P4].**.** The P
302c0 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65  4 register value
302d0 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
302e0 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61   P3 form an unpa
302f0 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b  cked index .** k
30300 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68  ey that omits th
30310 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72  e PRIMARY KEY or
30320 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65   ROWID.  Compare
30330 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20   this key value 
30340 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68 65 20 69  against.** the i
30350 6e 64 65 78 20 74 68 61 74 20 50 31 20 69 73 20  ndex that P1 is 
30360 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
30370 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20  ng to, ignoring 
30380 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
30390 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e 20 74  or.** ROWID on t
303a0 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a  he P1 index..**.
303b0 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64  ** If the P1 ind
303c0 65 78 20 65 6e 74 72 79 20 69 73 20 6c 65 73 73  ex entry is less
303d0 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
303e0 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20  o the key value 
303f0 74 68 65 6e 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20  then jump.** to 
30400 50 32 2e 20 4f 74 68 65 72 77 69 73 65 20 66 61  P2. Otherwise fa
30410 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
30420 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
30430 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  on..*/.case OP_I
30440 64 78 4c 45 3a 20 20 20 20 20 20 20 20 20 20 2f  dxLE:          /
30450 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f  * jump */.case O
30460 50 5f 49 64 78 47 54 3a 20 20 20 20 20 20 20 20  P_IdxGT:        
30470 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73    /* jump */.cas
30480 65 20 4f 50 5f 49 64 78 4c 54 3a 20 20 20 20 20  e OP_IdxLT:     
30490 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
304a0 63 61 73 65 20 4f 50 5f 49 64 78 47 45 3a 20 20  case OP_IdxGE:  
304b0 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20  {       /* jump 
304c0 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
304d0 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  *pC;.  int res;.
304e0 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
304f0 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70   r;..  assert( p
30500 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
30510 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
30520 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
30530 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
30540 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
30550 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
30560 4f 72 64 65 72 65 64 20 29 3b 0a 20 20 61 73 73  Ordered );.  ass
30570 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
30580 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
30590 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
305a0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 29  ->uc.pCursor!=0)
305b0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
305c0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
305d0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
305e0 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70  Op->p5==0 || pOp
305f0 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 61 73 73  ->p5==1 );.  ass
30600 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
30610 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
30620 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d  r.pKeyInfo = pC-
30630 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72 2e 6e  >pKeyInfo;.  r.n
30640 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70  Field = (u16)pOp
30650 2d 3e 70 34 2e 69 3b 0a 20 20 69 66 28 20 70 4f  ->p4.i;.  if( pO
30660 70 2d 3e 6f 70 63 6f 64 65 3c 4f 50 5f 49 64 78  p->opcode<OP_Idx
30670 4c 54 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  LT ){.    assert
30680 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
30690 50 5f 49 64 78 4c 45 20 7c 7c 20 70 4f 70 2d 3e  P_IdxLE || pOp->
306a0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54  opcode==OP_IdxGT
306b0 20 29 3b 0a 20 20 20 20 72 2e 64 65 66 61 75 6c   );.    r.defaul
306c0 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20 7d 65 6c  t_rc = -1;.  }el
306d0 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
306e0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
306f0 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70  IdxGE || pOp->op
30700 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29  code==OP_IdxLT )
30710 3b 0a 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f  ;.    r.default_
30720 72 63 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 72 2e  rc = 0;.  }.  r.
30730 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  aMem = &aMem[pOp
30740 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51  ->p3];.#ifdef SQ
30750 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 7b 0a 20  LITE_DEBUG.  {. 
30760 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 66 6f     int i;.    fo
30770 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c  r(i=0; i<r.nFiel
30780 64 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61  d; i++){.      a
30790 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
307a0 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b  d(&r.aMem[i]) );
307b0 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f  .      REGISTER_
307c0 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2b 69 2c  TRACE(pOp->p3+i,
307d0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 2b 69   &aMem[pOp->p3+i
307e0 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  ]);.    }.  }.#e
307f0 6e 64 69 66 0a 20 20 72 65 73 20 3d 20 30 3b 20  ndif.  res = 0; 
30800 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20   /* Not needed. 
30810 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69   Only used to si
30820 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e  lence a warning.
30830 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   */.  rc = sqlit
30840 65 33 56 64 62 65 49 64 78 4b 65 79 43 6f 6d 70  e3VdbeIdxKeyComp
30850 61 72 65 28 64 62 2c 20 70 43 2c 20 26 72 2c 20  are(db, pC, &r, 
30860 26 72 65 73 29 3b 0a 20 20 61 73 73 65 72 74 28  &res);.  assert(
30870 20 28 4f 50 5f 49 64 78 4c 45 26 31 29 3d 3d 28   (OP_IdxLE&1)==(
30880 4f 50 5f 49 64 78 4c 54 26 31 29 20 26 26 20 28  OP_IdxLT&1) && (
30890 4f 50 5f 49 64 78 47 45 26 31 29 3d 3d 28 4f 50  OP_IdxGE&1)==(OP
308a0 5f 49 64 78 47 54 26 31 29 20 29 3b 0a 20 20 69  _IdxGT&1) );.  i
308b0 66 28 20 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 26  f( (pOp->opcode&
308c0 31 29 3d 3d 28 4f 50 5f 49 64 78 4c 54 26 31 29  1)==(OP_IdxLT&1)
308d0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
308e0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
308f0 49 64 78 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70  IdxLE || pOp->op
30900 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29  code==OP_IdxLT )
30910 3b 0a 20 20 20 20 72 65 73 20 3d 20 2d 72 65 73  ;.    res = -res
30920 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
30930 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
30940 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20  de==OP_IdxGE || 
30950 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
30960 49 64 78 47 54 20 29 3b 0a 20 20 20 20 72 65 73  IdxGT );.    res
30970 2b 2b 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72  ++;.  }.  VdbeBr
30980 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 3e 30 2c  anchTaken(res>0,
30990 32 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  2);.  if( rc ) g
309a0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
309b0 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 72 65  _error;.  if( re
309c0 73 3e 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  s>0 ) goto jump_
309d0 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a  to_p2;.  break;.
309e0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65  }../* Opcode: De
309f0 73 74 72 6f 79 20 50 31 20 50 32 20 50 33 20 2a  stroy P1 P2 P3 *
30a00 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20   *.**.** Delete 
30a10 61 6e 20 65 6e 74 69 72 65 20 64 61 74 61 62 61  an entire databa
30a20 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  se table or inde
30a30 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67  x whose root pag
30a40 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  e in the databas
30a50 65 0a 2a 2a 20 66 69 6c 65 20 69 73 20 67 69 76  e.** file is giv
30a60 65 6e 20 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20  en by P1..**.** 
30a70 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  The table being 
30a80 64 65 73 74 72 6f 79 65 64 20 69 73 20 69 6e 20  destroyed is in 
30a90 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
30aa0 65 20 66 69 6c 65 20 69 66 20 50 33 3d 3d 30 2e  e file if P3==0.
30ab0 20 20 49 66 0a 2a 2a 20 50 33 3d 3d 31 20 74 68    If.** P3==1 th
30ac0 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  en the table to 
30ad0 62 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74  be clear is in t
30ae0 68 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74  he auxiliary dat
30af0 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68  abase file.** th
30b00 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74  at is used to st
30b10 6f 72 65 20 74 61 62 6c 65 73 20 63 72 65 61 74  ore tables creat
30b20 65 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 54  e using CREATE T
30b30 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a  EMPORARY TABLE..
30b40 2a 2a 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43  **.** If AUTOVAC
30b50 55 55 4d 20 69 73 20 65 6e 61 62 6c 65 64 20 74  UUM is enabled t
30b60 68 65 6e 20 69 74 20 69 73 20 70 6f 73 73 69 62  hen it is possib
30b70 6c 65 20 74 68 61 74 20 61 6e 6f 74 68 65 72 20  le that another 
30b80 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6d 69 67  root page.** mig
30b90 68 74 20 62 65 20 6d 6f 76 65 64 20 69 6e 74 6f  ht be moved into
30ba0 20 74 68 65 20 6e 65 77 6c 79 20 64 65 6c 65 74   the newly delet
30bb0 65 64 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20  ed root page in 
30bc0 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 61 6c  order to keep al
30bd0 6c 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 73 20  l.** root pages 
30be0 63 6f 6e 74 69 67 75 6f 75 73 20 61 74 20 74 68  contiguous at th
30bf0 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74  e beginning of t
30c00 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68  he database.  Th
30c10 65 20 66 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c 75  e former.** valu
30c20 65 20 6f 66 20 74 68 65 20 72 6f 6f 74 20 70 61  e of the root pa
30c30 67 65 20 74 68 61 74 20 6d 6f 76 65 64 20 2d 20  ge that moved - 
30c40 69 74 73 20 76 61 6c 75 65 20 62 65 66 6f 72 65  its value before
30c50 20 74 68 65 20 6d 6f 76 65 20 6f 63 63 75 72 72   the move occurr
30c60 65 64 20 2d 0a 2a 2a 20 69 73 20 73 74 6f 72 65  ed -.** is store
30c70 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  d in register P2
30c80 2e 20 49 66 20 6e 6f 20 70 61 67 65 20 6d 6f 76  . If no page mov
30c90 65 6d 65 6e 74 20 77 61 73 20 72 65 71 75 69 72  ement was requir
30ca0 65 64 20 28 62 65 63 61 75 73 65 20 74 68 65 0a  ed (because the.
30cb0 2a 2a 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64  ** table being d
30cc0 72 6f 70 70 65 64 20 77 61 73 20 61 6c 72 65 61  ropped was alrea
30cd0 64 79 20 74 68 65 20 6c 61 73 74 20 6f 6e 65 20  dy the last one 
30ce0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 29  in the database)
30cf0 20 74 68 65 6e 20 61 20 0a 2a 2a 20 7a 65 72 6f   then a .** zero
30d00 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
30d10 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 41  gister P2.  If A
30d20 55 54 4f 56 41 43 55 55 4d 20 69 73 20 64 69 73  UTOVACUUM is dis
30d30 61 62 6c 65 64 20 74 68 65 6e 20 61 20 7a 65 72  abled then a zer
30d40 6f 20 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 20  o .** is stored 
30d50 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
30d60 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
30d70 65 20 74 68 72 6f 77 73 20 61 6e 20 65 72 72 6f  e throws an erro
30d80 72 20 69 66 20 74 68 65 72 65 20 61 72 65 20 61  r if there are a
30d90 6e 79 20 61 63 74 69 76 65 20 72 65 61 64 65 72  ny active reader
30da0 20 56 4d 73 20 77 68 65 6e 0a 2a 2a 20 69 74 20   VMs when.** it 
30db0 69 73 20 69 6e 76 6f 6b 65 64 2e 20 54 68 69 73  is invoked. This
30dc0 20 69 73 20 64 6f 6e 65 20 74 6f 20 61 76 6f 69   is done to avoi
30dd0 64 20 74 68 65 20 64 69 66 66 69 63 75 6c 74 79  d the difficulty
30de0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
30df0 20 0a 2a 2a 20 75 70 64 61 74 69 6e 67 20 65 78   .** updating ex
30e00 69 73 74 69 6e 67 20 63 75 72 73 6f 72 73 20 77  isting cursors w
30e10 68 65 6e 20 61 20 72 6f 6f 74 20 70 61 67 65 20  hen a root page 
30e20 69 73 20 6d 6f 76 65 64 20 69 6e 20 61 6e 20 41  is moved in an A
30e30 55 54 4f 56 41 43 55 55 4d 20 0a 2a 2a 20 64 61  UTOVACUUM .** da
30e40 74 61 62 61 73 65 2e 20 54 68 69 73 20 65 72 72  tabase. This err
30e50 6f 72 20 69 73 20 74 68 72 6f 77 6e 20 65 76 65  or is thrown eve
30e60 6e 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73  n if the databas
30e70 65 20 69 73 20 6e 6f 74 20 61 6e 20 41 55 54 4f  e is not an AUTO
30e80 56 41 43 55 55 4d 20 0a 2a 2a 20 64 62 20 69 6e  VACUUM .** db in
30e90 20 6f 72 64 65 72 20 74 6f 20 61 76 6f 69 64 20   order to avoid 
30ea0 69 6e 74 72 6f 64 75 63 69 6e 67 20 61 6e 20 69  introducing an i
30eb0 6e 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 62  ncompatibility b
30ec0 65 74 77 65 65 6e 20 61 75 74 6f 76 61 63 75 75  etween autovacuu
30ed0 6d 20 0a 2a 2a 20 61 6e 64 20 6e 6f 6e 2d 61 75  m .** and non-au
30ee0 74 6f 76 61 63 75 75 6d 20 6d 6f 64 65 73 2e 0a  tovacuum modes..
30ef0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
30f00 43 6c 65 61 72 0a 2a 2f 0a 63 61 73 65 20 4f 50  Clear.*/.case OP
30f10 5f 44 65 73 74 72 6f 79 3a 20 7b 20 20 20 20 20  _Destroy: {     
30f20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74  /* out2 */.  int
30f30 20 69 4d 6f 76 65 64 3b 0a 20 20 69 6e 74 20 69   iMoved;.  int i
30f40 44 62 3b 0a 0a 20 20 73 71 6c 69 74 65 33 56 64  Db;..  sqlite3Vd
30f50 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e 74  beIncrWriteCount
30f60 65 72 28 70 2c 20 30 29 3b 0a 20 20 61 73 73 65  er(p, 0);.  asse
30f70 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
30f80 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
30f90 70 4f 70 2d 3e 70 31 3e 31 20 29 3b 0a 20 20 70  pOp->p1>1 );.  p
30fa0 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
30fb0 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
30fc0 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
30fd0 4d 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28 20 64 62  M_Null;.  if( db
30fe0 2d 3e 6e 56 64 62 65 52 65 61 64 20 3e 20 64 62  ->nVdbeRead > db
30ff0 2d 3e 6e 56 44 65 73 74 72 6f 79 2b 31 20 29 7b  ->nVDestroy+1 ){
31000 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
31010 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 70 2d 3e  _LOCKED;.    p->
31020 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 4f 45  errorAction = OE
31030 5f 41 62 6f 72 74 3b 0a 20 20 20 20 67 6f 74 6f  _Abort;.    goto
31040 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
31050 72 6f 72 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ror;.  }else{.  
31060 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b    iDb = pOp->p3;
31070 0a 20 20 20 20 61 73 73 65 72 74 28 20 44 62 4d  .    assert( DbM
31080 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
31090 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 20 20  Mask, iDb) );.  
310a0 20 20 69 4d 6f 76 65 64 20 3d 20 30 3b 20 20 2f    iMoved = 0;  /
310b0 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f  * Not needed.  O
310c0 6e 6c 79 20 74 6f 20 73 69 6c 65 6e 63 65 20 61  nly to silence a
310d0 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20   warning. */.   
310e0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
310f0 65 65 44 72 6f 70 54 61 62 6c 65 28 64 62 2d 3e  eeDropTable(db->
31100 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 70 4f  aDb[iDb].pBt, pO
31110 70 2d 3e 70 31 2c 20 26 69 4d 6f 76 65 64 29 3b  p->p1, &iMoved);
31120 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
31130 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20   = MEM_Int;.    
31140 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 6f 76  pOut->u.i = iMov
31150 65 64 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29  ed;.    if( rc )
31160 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
31170 74 6f 5f 65 72 72 6f 72 3b 0a 23 69 66 6e 64 65  to_error;.#ifnde
31180 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
31190 54 4f 56 41 43 55 55 4d 0a 20 20 20 20 69 66 28  TOVACUUM.    if(
311a0 20 69 4d 6f 76 65 64 21 3d 30 20 29 7b 0a 20 20   iMoved!=0 ){.  
311b0 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6f 74 50      sqlite3RootP
311c0 61 67 65 4d 6f 76 65 64 28 64 62 2c 20 69 44 62  ageMoved(db, iDb
311d0 2c 20 69 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e 70  , iMoved, pOp->p
311e0 31 29 3b 0a 20 20 20 20 20 20 2f 2a 20 41 6c 6c  1);.      /* All
311f0 20 4f 50 5f 44 65 73 74 72 6f 79 20 6f 70 65 72   OP_Destroy oper
31200 61 74 69 6f 6e 73 20 6f 63 63 75 72 20 6f 6e 20  ations occur on 
31210 74 68 65 20 73 61 6d 65 20 62 74 72 65 65 20 2a  the same btree *
31220 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
31230 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75  resetSchemaOnFau
31240 6c 74 3d 3d 30 20 7c 7c 20 72 65 73 65 74 53 63  lt==0 || resetSc
31250 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 69 44 62  hemaOnFault==iDb
31260 2b 31 20 29 3b 0a 20 20 20 20 20 20 72 65 73 65  +1 );.      rese
31270 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d  tSchemaOnFault =
31280 20 69 44 62 2b 31 3b 0a 20 20 20 20 7d 0a 23 65   iDb+1;.    }.#e
31290 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ndif.  }.  break
312a0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
312b0 43 6c 65 61 72 20 50 31 20 50 32 20 50 33 0a 2a  Clear P1 P2 P3.*
312c0 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20  *.** Delete all 
312d0 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20  contents of the 
312e0 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
312f0 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f  r index whose ro
31300 6f 74 20 70 61 67 65 0a 2a 2a 20 69 6e 20 74 68  ot page.** in th
31310 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
31320 69 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e 20  is given by P1. 
31330 20 42 75 74 2c 20 75 6e 6c 69 6b 65 20 44 65 73   But, unlike Des
31340 74 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a 20  troy, do not.** 
31350 72 65 6d 6f 76 65 20 74 68 65 20 74 61 62 6c 65  remove the table
31360 20 6f 72 20 69 6e 64 65 78 20 66 72 6f 6d 20 74   or index from t
31370 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
31380 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c  ..**.** The tabl
31390 65 20 62 65 69 6e 67 20 63 6c 65 61 72 20 69 73  e being clear is
313a0 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   in the main dat
313b0 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 32  abase file if P2
313c0 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 32 3d 3d  ==0.  If.** P2==
313d0 31 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  1 then the table
313e0 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20   to be clear is 
313f0 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79  in the auxiliary
31400 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a   database file.*
31410 2a 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74  * that is used t
31420 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63  o store tables c
31430 72 65 61 74 65 20 75 73 69 6e 67 20 43 52 45 41  reate using CREA
31440 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42  TE TEMPORARY TAB
31450 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  LE..**.** If the
31460 20 50 33 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e   P3 value is non
31470 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20  -zero, then the 
31480 74 61 62 6c 65 20 72 65 66 65 72 72 65 64 20 74  table referred t
31490 6f 20 6d 75 73 74 20 62 65 20 61 6e 0a 2a 2a 20  o must be an.** 
314a0 69 6e 74 6b 65 79 20 74 61 62 6c 65 20 28 61 6e  intkey table (an
314b0 20 53 51 4c 20 74 61 62 6c 65 2c 20 6e 6f 74 20   SQL table, not 
314c0 61 6e 20 69 6e 64 65 78 29 2e 20 49 6e 20 74 68  an index). In th
314d0 69 73 20 63 61 73 65 20 74 68 65 20 72 6f 77 20  is case the row 
314e0 63 68 61 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e 74  change .** count
314f0 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
31500 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  by the number of
31510 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62   rows in the tab
31520 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64  le being cleared
31530 2e 20 0a 2a 2a 20 49 66 20 50 33 20 69 73 20 67  . .** If P3 is g
31540 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f  reater than zero
31550 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65  , then the value
31560 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
31570 74 65 72 20 50 33 20 69 73 0a 2a 2a 20 61 6c 73  ter P3 is.** als
31580 6f 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79  o incremented by
31590 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
315a0 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  ows in the table
315b0 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 0a   being cleared..
315c0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
315d0 44 65 73 74 72 6f 79 0a 2a 2f 0a 63 61 73 65 20  Destroy.*/.case 
315e0 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a 20 20 69 6e  OP_Clear: {.  in
315f0 74 20 6e 43 68 61 6e 67 65 3b 0a 20 0a 20 20 73  t nChange;. .  s
31600 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57 72  qlite3VdbeIncrWr
31610 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 30 29  iteCounter(p, 0)
31620 3b 0a 20 20 6e 43 68 61 6e 67 65 20 3d 20 30 3b  ;.  nChange = 0;
31630 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
31640 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61  adOnly==0 );.  a
31650 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
31660 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
31670 70 4f 70 2d 3e 70 32 29 20 29 3b 0a 20 20 72 63  pOp->p2) );.  rc
31680 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
31690 6c 65 61 72 54 61 62 6c 65 28 0a 20 20 20 20 20  learTable(.     
316a0 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32   db->aDb[pOp->p2
316b0 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20  ].pBt, pOp->p1, 
316c0 28 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61  (pOp->p3 ? &nCha
316d0 6e 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20  nge : 0).  );.  
316e0 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20  if( pOp->p3 ){. 
316f0 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d     p->nChange +=
31700 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 69 66   nChange;.    if
31710 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20  ( pOp->p3>0 ){. 
31720 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
31730 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f  IsValid(&aMem[pO
31740 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20  p->p3]) );.     
31750 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
31760 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  e(p, &aMem[pOp->
31770 70 33 5d 29 3b 0a 20 20 20 20 20 20 61 4d 65 6d  p3]);.      aMem
31780 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d  [pOp->p3].u.i +=
31790 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 7d 0a   nChange;.    }.
317a0 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67    }.  if( rc ) g
317b0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
317c0 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
317d0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
317e0 65 73 65 74 53 6f 72 74 65 72 20 50 31 20 2a 20  esetSorter P1 * 
317f0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65  * * *.**.** Dele
31800 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20  te all contents 
31810 66 72 6f 6d 20 74 68 65 20 65 70 68 65 6d 65 72  from the ephemer
31820 61 6c 20 74 61 62 6c 65 20 6f 72 20 73 6f 72 74  al table or sort
31830 65 72 0a 2a 2a 20 74 68 61 74 20 69 73 20 6f 70  er.** that is op
31840 65 6e 20 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e  en on cursor P1.
31850 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
31860 64 65 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f  de only works fo
31870 72 20 63 75 72 73 6f 72 73 20 75 73 65 64 20 66  r cursors used f
31880 6f 72 20 73 6f 72 74 69 6e 67 20 61 6e 64 0a 2a  or sorting and.*
31890 2a 20 6f 70 65 6e 65 64 20 77 69 74 68 20 4f 50  * opened with OP
318a0 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f  _OpenEphemeral o
318b0 72 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e 2e  r OP_SorterOpen.
318c0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65  .*/.case OP_Rese
318d0 74 53 6f 72 74 65 72 3a 20 7b 0a 20 20 56 64 62  tSorter: {.  Vdb
318e0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 0a 20  eCursor *pC;. . 
318f0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
31900 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
31910 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
31920 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
31930 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
31940 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20   pC!=0 );.  if( 
31950 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a  isSorter(pC) ){.
31960 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
31970 6f 72 74 65 72 52 65 73 65 74 28 64 62 2c 20 70  orterReset(db, p
31980 43 2d 3e 75 63 2e 70 53 6f 72 74 65 72 29 3b 0a  C->uc.pSorter);.
31990 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
319a0 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
319b0 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
319c0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
319d0 70 43 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 20  pC->isEphemeral 
319e0 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
319f0 74 65 33 42 74 72 65 65 43 6c 65 61 72 54 61 62  te3BtreeClearTab
31a00 6c 65 4f 66 43 75 72 73 6f 72 28 70 43 2d 3e 75  leOfCursor(pC->u
31a10 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  c.pCursor);.    
31a20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
31a30 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
31a40 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
31a50 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65  ../* Opcode: Cre
31a60 61 74 65 42 74 72 65 65 20 50 31 20 50 32 20 50  ateBtree P1 P2 P
31a70 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
31a80 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74 20 69 44  s: r[P2]=root iD
31a90 62 3d 50 31 20 66 6c 61 67 73 3d 50 33 0a 2a 2a  b=P1 flags=P3.**
31aa0 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e  .** Allocate a n
31ab0 65 77 20 62 2d 74 72 65 65 20 69 6e 20 74 68 65  ew b-tree in the
31ac0 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
31ad0 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20  ile if P1==0 or 
31ae0 69 6e 20 74 68 65 0a 2a 2a 20 54 45 4d 50 20 64  in the.** TEMP d
31af0 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
31b00 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61  P1==1 or in an a
31b10 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
31b20 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 54 68   if.** P1>1.  Th
31b30 65 20 50 33 20 61 72 67 75 6d 65 6e 74 20 6d 75  e P3 argument mu
31b40 73 74 20 62 65 20 31 20 28 42 54 52 45 45 5f 49  st be 1 (BTREE_I
31b50 4e 54 4b 45 59 29 20 66 6f 72 20 61 20 72 6f 77  NTKEY) for a row
31b60 69 64 20 74 61 62 6c 65 0a 2a 2a 20 69 74 20 6d  id table.** it m
31b70 75 73 74 20 62 65 20 32 20 28 42 54 52 45 45 5f  ust be 2 (BTREE_
31b80 42 4c 4f 42 4b 45 59 29 20 66 6f 72 20 61 6e 20  BLOBKEY) for an 
31b90 69 6e 64 65 78 20 6f 72 20 57 49 54 48 4f 55 54  index or WITHOUT
31ba0 20 52 4f 57 49 44 20 74 61 62 6c 65 2e 0a 2a 2a   ROWID table..**
31bb0 20 54 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e   The root page n
31bc0 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77  umber of the new
31bd0 20 62 2d 74 72 65 65 20 69 73 20 73 74 6f 72 65   b-tree is store
31be0 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  d in register P2
31bf0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65  ..*/.case OP_Cre
31c00 61 74 65 42 74 72 65 65 3a 20 7b 20 20 20 20 20  ateBtree: {     
31c10 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
31c20 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 44 62    int pgno;.  Db
31c30 20 2a 70 44 62 3b 0a 0a 20 20 73 71 6c 69 74 65   *pDb;..  sqlite
31c40 33 56 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f  3VdbeIncrWriteCo
31c50 75 6e 74 65 72 28 70 2c 20 30 29 3b 0a 20 20 70  unter(p, 0);.  p
31c60 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
31c70 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
31c80 70 67 6e 6f 20 3d 20 30 3b 0a 20 20 61 73 73 65  pgno = 0;.  asse
31c90 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d 42 54 52  rt( pOp->p3==BTR
31ca0 45 45 5f 49 4e 54 4b 45 59 20 7c 7c 20 70 4f 70  EE_INTKEY || pOp
31cb0 2d 3e 70 33 3d 3d 42 54 52 45 45 5f 42 4c 4f 42  ->p3==BTREE_BLOB
31cc0 4b 45 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28  KEY );.  assert(
31cd0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
31ce0 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
31cf0 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61  ;.  assert( DbMa
31d00 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
31d10 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b  ask, pOp->p1) );
31d20 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
31d30 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70  adOnly==0 );.  p
31d40 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f  Db = &db->aDb[pO
31d50 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
31d60 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b  ( pDb->pBt!=0 );
31d70 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
31d80 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28  treeCreateTable(
31d90 70 44 62 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c  pDb->pBt, &pgno,
31da0 20 70 4f 70 2d 3e 70 33 29 3b 0a 20 20 69 66 28   pOp->p3);.  if(
31db0 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
31dc0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
31dd0 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 67 6e   pOut->u.i = pgn
31de0 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  o;.  break;.}../
31df0 2a 20 4f 70 63 6f 64 65 3a 20 53 71 6c 45 78 65  * Opcode: SqlExe
31e00 63 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a  c * * * P4 *.**.
31e10 2a 2a 20 52 75 6e 20 74 68 65 20 53 51 4c 20 73  ** Run the SQL s
31e20 74 61 74 65 6d 65 6e 74 20 6f 72 20 73 74 61 74  tatement or stat
31e30 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65 64  ements specified
31e40 20 69 6e 20 74 68 65 20 50 34 20 73 74 72 69 6e   in the P4 strin
31e50 67 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 71  g..*/.case OP_Sq
31e60 6c 45 78 65 63 3a 20 7b 0a 20 20 73 71 6c 69 74  lExec: {.  sqlit
31e70 65 33 56 64 62 65 49 6e 63 72 57 72 69 74 65 43  e3VdbeIncrWriteC
31e80 6f 75 6e 74 65 72 28 70 2c 20 30 29 3b 0a 20 20  ounter(p, 0);.  
31e90 64 62 2d 3e 6e 53 71 6c 45 78 65 63 2b 2b 3b 0a  db->nSqlExec++;.
31ea0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65    rc = sqlite3_e
31eb0 78 65 63 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e  xec(db, pOp->p4.
31ec0 7a 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 64  z, 0, 0, 0);.  d
31ed0 62 2d 3e 6e 53 71 6c 45 78 65 63 2d 2d 3b 0a 20  b->nSqlExec--;. 
31ee0 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
31ef0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
31f00 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  r;.  break;.}../
31f10 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 73 65 53  * Opcode: ParseS
31f20 63 68 65 6d 61 20 50 31 20 2a 20 2a 20 50 34 20  chema P1 * * P4 
31f30 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 61 6e 64  *.**.** Read and
31f40 20 70 61 72 73 65 20 61 6c 6c 20 65 6e 74 72 69   parse all entri
31f50 65 73 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49  es from the SQLI
31f60 54 45 5f 4d 41 53 54 45 52 20 74 61 62 6c 65 20  TE_MASTER table 
31f70 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 0a 2a  of database P1.*
31f80 2a 20 74 68 61 74 20 6d 61 74 63 68 20 74 68 65  * that match the
31f90 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 50 34   WHERE clause P4
31fa0 2e 20 20 49 66 20 50 34 20 69 73 20 61 20 4e 55  .  If P4 is a NU
31fb0 4c 4c 20 70 6f 69 6e 74 65 72 2c 20 74 68 65 6e  LL pointer, then
31fc0 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20 73   the.** entire s
31fd0 63 68 65 6d 61 20 66 6f 72 20 50 31 20 69 73 20  chema for P1 is 
31fe0 72 65 70 61 72 73 65 64 2e 0a 2a 2a 0a 2a 2a 20  reparsed..**.** 
31ff0 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f  This opcode invo
32000 6b 65 73 20 74 68 65 20 70 61 72 73 65 72 20 74  kes the parser t
32010 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77 20 76  o create a new v
32020 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2c 0a  irtual machine,.
32030 2a 2a 20 74 68 65 6e 20 72 75 6e 73 20 74 68 65  ** then runs the
32040 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63   new virtual mac
32050 68 69 6e 65 2e 20 20 49 74 20 69 73 20 74 68 75  hine.  It is thu
32060 73 20 61 20 72 65 2d 65 6e 74 72 61 6e 74 20 6f  s a re-entrant o
32070 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  pcode..*/.case O
32080 50 5f 50 61 72 73 65 53 63 68 65 6d 61 3a 20 7b  P_ParseSchema: {
32090 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 63 6f  .  int iDb;.  co
320a0 6e 73 74 20 63 68 61 72 20 2a 7a 4d 61 73 74 65  nst char *zMaste
320b0 72 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b  r;.  char *zSql;
320c0 0a 20 20 49 6e 69 74 44 61 74 61 20 69 6e 69 74  .  InitData init
320d0 44 61 74 61 3b 0a 0a 20 20 2f 2a 20 41 6e 79 20  Data;..  /* Any 
320e0 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
320f0 6e 74 20 74 68 61 74 20 69 6e 76 6f 6b 65 73 20  nt that invokes 
32100 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c  this opcode will
32110 20 68 6f 6c 64 20 6d 75 74 65 78 65 73 0a 20 20   hold mutexes.  
32120 2a 2a 20 6f 6e 20 65 76 65 72 79 20 62 74 72 65  ** on every btre
32130 65 2e 20 20 54 68 69 73 20 69 73 20 61 20 70 72  e.  This is a pr
32140 65 72 65 71 75 69 73 69 74 65 20 66 6f 72 20 69  erequisite for i
32150 6e 76 6f 6b 69 6e 67 20 0a 20 20 2a 2a 20 73 71  nvoking .  ** sq
32160 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
32170 6b 28 29 2e 0a 20 20 2a 2f 0a 23 69 66 64 65 66  k()..  */.#ifdef
32180 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
32190 66 6f 72 28 69 44 62 3d 30 3b 20 69 44 62 3c 64  for(iDb=0; iDb<d
321a0 62 2d 3e 6e 44 62 3b 20 69 44 62 2b 2b 29 7b 0a  b->nDb; iDb++){.
321b0 20 20 20 20 61 73 73 65 72 74 28 20 69 44 62 3d      assert( iDb=
321c0 3d 31 20 7c 7c 20 73 71 6c 69 74 65 33 42 74 72  =1 || sqlite3Btr
321d0 65 65 48 6f 6c 64 73 4d 75 74 65 78 28 64 62 2d  eeHoldsMutex(db-
321e0 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 29 20 29  >aDb[iDb].pBt) )
321f0 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20  ;.  }.#endif..  
32200 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  iDb = pOp->p1;. 
32210 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
32220 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29  && iDb<db->nDb )
32230 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 48 61  ;.  assert( DbHa
32240 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20 69 44  sProperty(db, iD
32250 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64  b, DB_SchemaLoad
32260 65 64 29 20 29 3b 0a 0a 23 69 66 6e 64 65 66 20  ed) );..#ifndef 
32270 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45  SQLITE_OMIT_ALTE
32280 52 54 41 42 4c 45 0a 20 20 69 66 28 20 70 4f 70  RTABLE.  if( pOp
32290 2d 3e 70 34 2e 7a 3d 3d 30 20 29 7b 0a 20 20 20  ->p4.z==0 ){.   
322a0 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 43 6c   sqlite3SchemaCl
322b0 65 61 72 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d  ear(db->aDb[iDb]
322c0 2e 70 53 63 68 65 6d 61 29 3b 0a 20 20 20 20 64  .pSchema);.    d
322d0 62 2d 3e 6d 44 62 46 6c 61 67 73 20 26 3d 20 7e  b->mDbFlags &= ~
322e0 44 42 46 4c 41 47 5f 53 63 68 65 6d 61 4b 6e 6f  DBFLAG_SchemaKno
322f0 77 6e 4f 6b 3b 0a 20 20 20 20 72 63 20 3d 20 73  wnOk;.    rc = s
32300 71 6c 69 74 65 33 49 6e 69 74 4f 6e 65 28 64 62  qlite3InitOne(db
32310 2c 20 69 44 62 2c 20 26 70 2d 3e 7a 45 72 72 4d  , iDb, &p->zErrM
32320 73 67 2c 20 49 4e 49 54 46 4c 41 47 5f 41 6c 74  sg, INITFLAG_Alt
32330 65 72 54 61 62 6c 65 29 3b 0a 20 20 20 20 64 62  erTable);.    db
32340 2d 3e 6d 44 62 46 6c 61 67 73 20 7c 3d 20 44 42  ->mDbFlags |= DB
32350 46 4c 41 47 5f 53 63 68 65 6d 61 43 68 61 6e 67  FLAG_SchemaChang
32360 65 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65  e;.    p->expire
32370 64 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 0a 23  d = 0;.  }else.#
32380 65 6e 64 69 66 0a 20 20 7b 0a 20 20 20 20 7a 4d  endif.  {.    zM
32390 61 73 74 65 72 20 3d 20 4d 41 53 54 45 52 5f 4e  aster = MASTER_N
323a0 41 4d 45 3b 0a 20 20 20 20 69 6e 69 74 44 61 74  AME;.    initDat
323b0 61 2e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 69  a.db = db;.    i
323c0 6e 69 74 44 61 74 61 2e 69 44 62 20 3d 20 69 44  nitData.iDb = iD
323d0 62 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e  b;.    initData.
323e0 70 7a 45 72 72 4d 73 67 20 3d 20 26 70 2d 3e 7a  pzErrMsg = &p->z
323f0 45 72 72 4d 73 67 3b 0a 20 20 20 20 69 6e 69 74  ErrMsg;.    init
32400 44 61 74 61 2e 6d 49 6e 69 74 46 6c 61 67 73 20  Data.mInitFlags 
32410 3d 20 30 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20  = 0;.    zSql = 
32420 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64  sqlite3MPrintf(d
32430 62 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45 43  b,.       "SELEC
32440 54 2a 46 52 4f 4d 5c 22 25 77 5c 22 2e 25 73 20  T*FROM\"%w\".%s 
32450 57 48 45 52 45 20 25 73 20 4f 52 44 45 52 20 42  WHERE %s ORDER B
32460 59 20 72 6f 77 69 64 22 2c 0a 20 20 20 20 20 20  Y rowid",.      
32470 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 44   db->aDb[iDb].zD
32480 62 53 4e 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c  bSName, zMaster,
32490 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20   pOp->p4.z);.   
324a0 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a   if( zSql==0 ){.
324b0 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
324c0 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 3b 0a 20 20  E_NOMEM_BKPT;.  
324d0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61    }else{.      a
324e0 73 73 65 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e  ssert( db->init.
324f0 62 75 73 79 3d 3d 30 20 29 3b 0a 20 20 20 20 20  busy==0 );.     
32500 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d   db->init.busy =
32510 20 31 3b 0a 20 20 20 20 20 20 69 6e 69 74 44 61   1;.      initDa
32520 74 61 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f  ta.rc = SQLITE_O
32530 4b 3b 0a 20 20 20 20 20 20 69 6e 69 74 44 61 74  K;.      initDat
32540 61 2e 6e 49 6e 69 74 52 6f 77 20 3d 20 30 3b 0a  a.nInitRow = 0;.
32550 20 20 20 20 20 20 61 73 73 65 72 74 28 20 21 64        assert( !d
32560 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
32570 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  );.      rc = sq
32580 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20 7a  lite3_exec(db, z
32590 53 71 6c 2c 20 73 71 6c 69 74 65 33 49 6e 69 74  Sql, sqlite3Init
325a0 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44  Callback, &initD
325b0 61 74 61 2c 20 30 29 3b 0a 20 20 20 20 20 20 69  ata, 0);.      i
325c0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
325d0 20 29 20 72 63 20 3d 20 69 6e 69 74 44 61 74 61   ) rc = initData
325e0 2e 72 63 3b 0a 20 20 20 20 20 20 69 66 28 20 72  .rc;.      if( r
325f0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20  c==SQLITE_OK && 
32600 69 6e 69 74 44 61 74 61 2e 6e 49 6e 69 74 52 6f  initData.nInitRo
32610 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  w==0 ){.        
32620 2f 2a 20 54 68 65 20 4f 50 5f 50 61 72 73 65 53  /* The OP_ParseS
32630 63 68 65 6d 61 20 6f 70 63 6f 64 65 20 77 69 74  chema opcode wit
32640 68 20 61 20 6e 6f 6e 2d 4e 55 4c 4c 20 50 34 20  h a non-NULL P4 
32650 61 72 67 75 6d 65 6e 74 20 73 68 6f 75 6c 64 20  argument should 
32660 70 61 72 73 65 0a 20 20 20 20 20 20 20 20 2a 2a  parse.        **
32670 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 53 51   at least one SQ
32680 4c 20 73 74 61 74 65 6d 65 6e 74 2e 20 41 6e 79  L statement. Any
32690 20 6c 65 73 73 20 74 68 61 6e 20 74 68 61 74 20   less than that 
326a0 69 6e 64 69 63 61 74 65 73 20 74 68 61 74 0a 20  indicates that. 
326b0 20 20 20 20 20 20 20 2a 2a 20 74 68 65 20 73 71         ** the sq
326c0 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c  lite_master tabl
326d0 65 20 69 73 20 63 6f 72 72 75 70 74 2e 20 2a 2f  e is corrupt. */
326e0 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51  .        rc = SQ
326f0 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50  LITE_CORRUPT_BKP
32700 54 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  T;.      }.     
32710 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 4e 4e   sqlite3DbFreeNN
32720 28 64 62 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20  (db, zSql);.    
32730 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20    db->init.busy 
32740 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  = 0;.    }.  }. 
32750 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 73   if( rc ){.    s
32760 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63  qlite3ResetAllSc
32770 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f  hemasOfConnectio
32780 6e 28 64 62 29 3b 0a 20 20 20 20 69 66 28 20 72  n(db);.    if( r
32790 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20  c==SQLITE_NOMEM 
327a0 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f  ){.      goto no
327b0 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20  _mem;.    }.    
327c0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
327d0 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 62  o_error;.  }.  b
327e0 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20 21  reak;  .}..#if !
327f0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
32800 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 0a 2f 2a 20  MIT_ANALYZE)./* 
32810 4f 70 63 6f 64 65 3a 20 4c 6f 61 64 41 6e 61 6c  Opcode: LoadAnal
32820 79 73 69 73 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  ysis P1 * * * *.
32830 2a 2a 0a 2a 2a 20 52 65 61 64 20 74 68 65 20 73  **.** Read the s
32840 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c  qlite_stat1 tabl
32850 65 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 50  e for database P
32860 31 20 61 6e 64 20 6c 6f 61 64 20 74 68 65 20 63  1 and load the c
32870 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20 74 68 61  ontent.** of tha
32880 74 20 74 61 62 6c 65 20 69 6e 74 6f 20 74 68 65  t table into the
32890 20 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 20   internal index 
328a0 68 61 73 68 20 74 61 62 6c 65 2e 20 20 54 68 69  hash table.  Thi
328b0 73 20 77 69 6c 6c 20 63 61 75 73 65 0a 2a 2a 20  s will cause.** 
328c0 74 68 65 20 61 6e 61 6c 79 73 69 73 20 74 6f 20  the analysis to 
328d0 62 65 20 75 73 65 64 20 77 68 65 6e 20 70 72 65  be used when pre
328e0 70 61 72 69 6e 67 20 61 6c 6c 20 73 75 62 73 65  paring all subse
328f0 71 75 65 6e 74 20 71 75 65 72 69 65 73 2e 0a 2a  quent queries..*
32900 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f 61 64 41 6e  /.case OP_LoadAn
32910 61 6c 79 73 69 73 3a 20 7b 0a 20 20 61 73 73 65  alysis: {.  asse
32920 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
32930 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
32940 62 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  b );.  rc = sqli
32950 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28  te3AnalysisLoad(
32960 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20  db, pOp->p1);.  
32970 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
32980 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
32990 3b 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23  ;.  break;  .}.#
329a0 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65  endif /* !define
329b0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e  d(SQLITE_OMIT_AN
329c0 41 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70  ALYZE) */../* Op
329d0 63 6f 64 65 3a 20 44 72 6f 70 54 61 62 6c 65 20  code: DropTable 
329e0 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
329f0 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74  * Remove the int
32a00 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79  ernal (in-memory
32a10 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  ) data structure
32a20 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a  s that describe.
32a30 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d  ** the table nam
32a40 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73  ed P4 in databas
32a50 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63  e P1.  This is c
32a60 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74 61  alled after a ta
32a70 62 6c 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65  ble.** is droppe
32a80 64 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69  d from disk (usi
32a90 6e 67 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f  ng the Destroy o
32aa0 70 63 6f 64 65 29 20 69 6e 20 6f 72 64 65 72 20  pcode) in order 
32ab0 74 6f 20 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20  to keep .** the 
32ac0 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65  internal represe
32ad0 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  ntation of the.*
32ae0 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74  * schema consist
32af0 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73  ent with what is
32b00 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73   on disk..*/.cas
32b10 65 20 4f 50 5f 44 72 6f 70 54 61 62 6c 65 3a 20  e OP_DropTable: 
32b20 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 49  {.  sqlite3VdbeI
32b30 6e 63 72 57 72 69 74 65 43 6f 75 6e 74 65 72 28  ncrWriteCounter(
32b40 70 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33  p, 0);.  sqlite3
32b50 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
32b60 61 62 6c 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31  able(db, pOp->p1
32b70 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
32b80 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
32b90 6f 64 65 3a 20 44 72 6f 70 49 6e 64 65 78 20 50  ode: DropIndex P
32ba0 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
32bb0 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65   Remove the inte
32bc0 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29  rnal (in-memory)
32bd0 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73   data structures
32be0 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a   that describe.*
32bf0 2a 20 74 68 65 20 69 6e 64 65 78 20 6e 61 6d 65  * the index name
32c00 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65  d P4 in database
32c10 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61   P1.  This is ca
32c20 6c 6c 65 64 20 61 66 74 65 72 20 61 6e 20 69 6e  lled after an in
32c30 64 65 78 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65  dex.** is droppe
32c40 64 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69  d from disk (usi
32c50 6e 67 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f  ng the Destroy o
32c60 70 63 6f 64 65 29 0a 2a 2a 20 69 6e 20 6f 72 64  pcode).** in ord
32c70 65 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69  er to keep the i
32c80 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e  nternal represen
32c90 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  tation of the.**
32ca0 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65   schema consiste
32cb0 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20  nt with what is 
32cc0 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65  on disk..*/.case
32cd0 20 4f 50 5f 44 72 6f 70 49 6e 64 65 78 3a 20 7b   OP_DropIndex: {
32ce0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e  .  sqlite3VdbeIn
32cf0 63 72 57 72 69 74 65 43 6f 75 6e 74 65 72 28 70  crWriteCounter(p
32d00 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 55  , 0);.  sqlite3U
32d10 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e  nlinkAndDeleteIn
32d20 64 65 78 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  dex(db, pOp->p1,
32d30 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62   pOp->p4.z);.  b
32d40 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
32d50 64 65 3a 20 44 72 6f 70 54 72 69 67 67 65 72 20  de: DropTrigger 
32d60 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
32d70 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74  * Remove the int
32d80 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79  ernal (in-memory
32d90 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  ) data structure
32da0 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a  s that describe.
32db0 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72 20 6e  ** the trigger n
32dc0 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62  amed P4 in datab
32dd0 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73  ase P1.  This is
32de0 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20   called after a 
32df0 74 72 69 67 67 65 72 0a 2a 2a 20 69 73 20 64 72  trigger.** is dr
32e00 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73 6b 20  opped from disk 
32e10 28 75 73 69 6e 67 20 74 68 65 20 44 65 73 74 72  (using the Destr
32e20 6f 79 20 6f 70 63 6f 64 65 29 20 69 6e 20 6f 72  oy opcode) in or
32e30 64 65 72 20 74 6f 20 6b 65 65 70 20 0a 2a 2a 20  der to keep .** 
32e40 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70  the internal rep
32e50 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
32e60 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e  he.** schema con
32e70 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61  sistent with wha
32e80 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f  t is on disk..*/
32e90 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 72 69  .case OP_DropTri
32ea0 67 67 65 72 3a 20 7b 0a 20 20 73 71 6c 69 74 65  gger: {.  sqlite
32eb0 33 56 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f  3VdbeIncrWriteCo
32ec0 75 6e 74 65 72 28 70 2c 20 30 29 3b 0a 20 20 73  unter(p, 0);.  s
32ed0 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
32ee0 65 6c 65 74 65 54 72 69 67 67 65 72 28 64 62 2c  eleteTrigger(db,
32ef0 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
32f00 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  4.z);.  break;.}
32f10 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ...#ifndef SQLIT
32f20 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59  E_OMIT_INTEGRITY
32f30 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65  _CHECK./* Opcode
32f40 3a 20 49 6e 74 65 67 72 69 74 79 43 6b 20 50 31  : IntegrityCk P1
32f50 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
32f60 2a 2a 20 44 6f 20 61 6e 20 61 6e 61 6c 79 73 69  ** Do an analysi
32f70 73 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  s of the current
32f80 6c 79 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65  ly open database
32f90 2e 20 20 53 74 6f 72 65 20 69 6e 0a 2a 2a 20 72  .  Store in.** r
32fa0 65 67 69 73 74 65 72 20 50 31 20 74 68 65 20 74  egister P1 the t
32fb0 65 78 74 20 6f 66 20 61 6e 20 65 72 72 6f 72 20  ext of an error 
32fc0 6d 65 73 73 61 67 65 20 64 65 73 63 72 69 62 69  message describi
32fd0 6e 67 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e  ng any problems.
32fe0 0a 2a 2a 20 49 66 20 6e 6f 20 70 72 6f 62 6c 65  .** If no proble
32ff0 6d 73 20 61 72 65 20 66 6f 75 6e 64 2c 20 73 74  ms are found, st
33000 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 72 65  ore a NULL in re
33010 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a  gister P1..**.**
33020 20 54 68 65 20 72 65 67 69 73 74 65 72 20 50 33   The register P3
33030 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6c 65   contains one le
33040 73 73 20 74 68 61 6e 20 74 68 65 20 6d 61 78 69  ss than the maxi
33050 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 61 6c  mum number of al
33060 6c 6f 77 65 64 20 65 72 72 6f 72 73 2e 0a 2a 2a  lowed errors..**
33070 20 41 74 20 6d 6f 73 74 20 72 65 67 28 50 33 29   At most reg(P3)
33080 20 65 72 72 6f 72 73 20 77 69 6c 6c 20 62 65 20   errors will be 
33090 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e 20  reported..** In 
330a0 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
330b0 20 61 6e 61 6c 79 73 69 73 20 73 74 6f 70 73 20   analysis stops 
330c0 61 73 20 73 6f 6f 6e 20 61 73 20 72 65 67 28 50  as soon as reg(P
330d0 31 29 20 65 72 72 6f 72 73 20 61 72 65 20 0a 2a  1) errors are .*
330e0 2a 20 73 65 65 6e 2e 20 20 52 65 67 28 50 31 29  * seen.  Reg(P1)
330f0 20 69 73 20 75 70 64 61 74 65 64 20 77 69 74 68   is updated with
33100 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65   the number of e
33110 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 2e  rrors remaining.
33120 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20  .**.** The root 
33130 70 61 67 65 20 6e 75 6d 62 65 72 73 20 6f 66 20  page numbers of 
33140 61 6c 6c 20 74 61 62 6c 65 73 20 69 6e 20 74 68  all tables in th
33150 65 20 64 61 74 61 62 61 73 65 20 61 72 65 20 69  e database are i
33160 6e 74 65 67 65 72 73 0a 2a 2a 20 73 74 6f 72 65  ntegers.** store
33170 64 20 69 6e 20 50 34 5f 49 4e 54 41 52 52 41 59  d in P4_INTARRAY
33180 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a   argument..**.**
33190 20 49 66 20 50 35 20 69 73 20 6e 6f 74 20 7a 65   If P5 is not ze
331a0 72 6f 2c 20 74 68 65 20 63 68 65 63 6b 20 69 73  ro, the check is
331b0 20 64 6f 6e 65 20 6f 6e 20 74 68 65 20 61 75 78   done on the aux
331c0 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 0a  iliary database.
331d0 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74 20 74 68 65  ** file, not the
331e0 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
331f0 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ile..**.** This 
33200 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 74  opcode is used t
33210 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20  o implement the 
33220 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20  integrity_check 
33230 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20  pragma..*/.case 
33240 4f 50 5f 49 6e 74 65 67 72 69 74 79 43 6b 3a 20  OP_IntegrityCk: 
33250 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f 74 3b 20 20  {.  int nRoot;  
33260 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
33270 20 74 61 62 6c 65 73 20 74 6f 20 63 68 65 63 6b   tables to check
33280 2e 20 20 28 4e 75 6d 62 65 72 20 6f 66 20 72 6f  .  (Number of ro
33290 6f 74 20 70 61 67 65 73 2e 29 20 2a 2f 0a 20 20  ot pages.) */.  
332a0 69 6e 74 20 2a 61 52 6f 6f 74 3b 20 20 20 20 20  int *aRoot;     
332b0 2f 2a 20 41 72 72 61 79 20 6f 66 20 72 6f 6f 74  /* Array of root
332c0 70 61 67 65 20 6e 75 6d 62 65 72 73 20 66 6f 72  page numbers for
332d0 20 74 61 62 6c 65 73 20 74 6f 20 62 65 20 63 68   tables to be ch
332e0 65 63 6b 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  ecked */.  int n
332f0 45 72 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75  Err;       /* Nu
33300 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72  mber of errors r
33310 65 70 6f 72 74 65 64 20 2a 2f 0a 20 20 63 68 61  eported */.  cha
33320 72 20 2a 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20  r *z;        /* 
33330 54 65 78 74 20 6f 66 20 74 68 65 20 65 72 72 6f  Text of the erro
33340 72 20 72 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65  r report */.  Me
33350 6d 20 2a 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a  m *pnErr;     /*
33360 20 52 65 67 69 73 74 65 72 20 6b 65 65 70 69 6e   Register keepin
33370 67 20 74 72 61 63 6b 20 6f 66 20 65 72 72 6f 72  g track of error
33380 73 20 72 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 0a  s remaining */..
33390 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
333a0 52 65 61 64 65 72 20 29 3b 0a 20 20 6e 52 6f 6f  Reader );.  nRoo
333b0 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61  t = pOp->p2;.  a
333c0 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 61  Root = pOp->p4.a
333d0 69 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 52 6f  i;.  assert( nRo
333e0 6f 74 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74  ot>0 );.  assert
333f0 28 20 61 52 6f 6f 74 5b 30 5d 3d 3d 6e 52 6f 6f  ( aRoot[0]==nRoo
33400 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  t );.  assert( p
33410 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d  Op->p3>0 && pOp-
33420 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p3<=(p->nMem+1 
33430 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
33440 0a 20 20 70 6e 45 72 72 20 3d 20 26 61 4d 65 6d  .  pnErr = &aMem
33450 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73  [pOp->p3];.  ass
33460 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61  ert( (pnErr->fla
33470 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
33480 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
33490 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 28 4d  nErr->flags & (M
334a0 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
334b0 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d  )==0 );.  pIn1 =
334c0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
334d0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
334e0 70 35 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p5<db->nDb );.  
334f0 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
33500 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
33510 20 70 4f 70 2d 3e 70 35 29 20 29 3b 0a 20 20 7a   pOp->p5) );.  z
33520 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
33530 6e 74 65 67 72 69 74 79 43 68 65 63 6b 28 64 62  ntegrityCheck(db
33540 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 35 5d 2e 70  ->aDb[pOp->p5].p
33550 42 74 2c 20 26 61 52 6f 6f 74 5b 31 5d 2c 20 6e  Bt, &aRoot[1], n
33560 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20 20 20 20  Root,.          
33570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33580 20 20 20 20 20 20 20 28 69 6e 74 29 70 6e 45 72         (int)pnEr
33590 72 2d 3e 75 2e 69 2b 31 2c 20 26 6e 45 72 72 29  r->u.i+1, &nErr)
335a0 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
335b0 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b  emSetNull(pIn1);
335c0 0a 20 20 69 66 28 20 6e 45 72 72 3d 3d 30 20 29  .  if( nErr==0 )
335d0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 7a 3d  {.    assert( z=
335e0 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  =0 );.  }else if
335f0 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f  ( z==0 ){.    go
33600 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c  to no_mem;.  }el
33610 73 65 7b 0a 20 20 20 20 70 6e 45 72 72 2d 3e 75  se{.    pnErr->u
33620 2e 69 20 2d 3d 20 6e 45 72 72 2d 31 3b 0a 20 20  .i -= nErr-1;.  
33630 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
33640 53 65 74 53 74 72 28 70 49 6e 31 2c 20 7a 2c 20  SetStr(pIn1, z, 
33650 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c  -1, SQLITE_UTF8,
33660 20 73 71 6c 69 74 65 33 5f 66 72 65 65 29 3b 0a   sqlite3_free);.
33670 20 20 7d 0a 20 20 55 50 44 41 54 45 5f 4d 41 58    }.  UPDATE_MAX
33680 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b  _BLOBSIZE(pIn1);
33690 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  .  sqlite3VdbeCh
336a0 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 49 6e  angeEncoding(pIn
336b0 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  1, encoding);.  
336c0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
336d0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49  /* SQLITE_OMIT_I
336e0 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 20 2a  NTEGRITY_CHECK *
336f0 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  /../* Opcode: Ro
33700 77 53 65 74 41 64 64 20 50 31 20 50 32 20 2a 20  wSetAdd P1 P2 * 
33710 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
33720 20 72 6f 77 73 65 74 28 50 31 29 3d 72 5b 50 32   rowset(P1)=r[P2
33730 5d 0a 2a 2a 0a 2a 2a 20 49 6e 73 65 72 74 20 74  ].**.** Insert t
33740 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  he integer value
33750 20 68 65 6c 64 20 62 79 20 72 65 67 69 73 74 65   held by registe
33760 72 20 50 32 20 69 6e 74 6f 20 61 20 52 6f 77 53  r P2 into a RowS
33770 65 74 20 6f 62 6a 65 63 74 0a 2a 2a 20 68 65 6c  et object.** hel
33780 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  d in register P1
33790 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 61 73 73 65 72  ..**.** An asser
337a0 74 69 6f 6e 20 66 61 69 6c 73 20 69 66 20 50 32  tion fails if P2
337b0 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67   is not an integ
337c0 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  er..*/.case OP_R
337d0 6f 77 53 65 74 41 64 64 3a 20 7b 20 20 20 20 20  owSetAdd: {     
337e0 20 20 2f 2a 20 69 6e 31 2c 20 69 6e 32 20 2a 2f    /* in1, in2 */
337f0 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
33800 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32  pOp->p1];.  pIn2
33810 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
33820 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 49  ];.  assert( (pI
33830 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n2->flags & MEM_
33840 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 69 66 28  Int)!=0 );.  if(
33850 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
33860 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29 7b 0a  MEM_Blob)==0 ){.
33870 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56      if( sqlite3V
33880 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28  dbeMemSetRowSet(
33890 70 49 6e 31 29 20 29 20 67 6f 74 6f 20 6e 6f 5f  pIn1) ) goto no_
338a0 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  mem;.  }.  asser
338b0 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  t( sqlite3VdbeMe
338c0 6d 49 73 52 6f 77 53 65 74 28 70 49 6e 31 29 20  mIsRowSet(pIn1) 
338d0 29 3b 0a 20 20 73 71 6c 69 74 65 33 52 6f 77 53  );.  sqlite3RowS
338e0 65 74 49 6e 73 65 72 74 28 28 52 6f 77 53 65 74  etInsert((RowSet
338f0 2a 29 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e 32 2d  *)pIn1->z, pIn2-
33900 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  >u.i);.  break;.
33910 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  }../* Opcode: Ro
33920 77 53 65 74 52 65 61 64 20 50 31 20 50 32 20 50  wSetRead P1 P2 P
33930 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
33940 73 3a 20 72 5b 50 33 5d 3d 72 6f 77 73 65 74 28  s: r[P3]=rowset(
33950 50 31 29 0a 2a 2a 0a 2a 2a 20 45 78 74 72 61 63  P1).**.** Extrac
33960 74 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76  t the smallest v
33970 61 6c 75 65 20 66 72 6f 6d 20 74 68 65 20 52 6f  alue from the Ro
33980 77 53 65 74 20 6f 62 6a 65 63 74 20 69 6e 20 50  wSet object in P
33990 31 0a 2a 2a 20 61 6e 64 20 70 75 74 20 74 68 61  1.** and put tha
339a0 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67  t value into reg
339b0 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 4f 72 2c  ister P3..** Or,
339c0 20 69 66 20 52 6f 77 53 65 74 20 6f 62 6a 65 63   if RowSet objec
339d0 74 20 50 31 20 69 73 20 69 6e 69 74 69 61 6c 6c  t P1 is initiall
339e0 79 20 65 6d 70 74 79 2c 20 6c 65 61 76 65 20 50  y empty, leave P
339f0 33 0a 2a 2a 20 75 6e 63 68 61 6e 67 65 64 20 61  3.** unchanged a
33a00 6e 64 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72  nd jump to instr
33a10 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61  uction P2..*/.ca
33a20 73 65 20 4f 50 5f 52 6f 77 53 65 74 52 65 61 64  se OP_RowSetRead
33a30 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  : {       /* jum
33a40 70 2c 20 69 6e 31 2c 20 6f 75 74 33 20 2a 2f 0a  p, in1, out3 */.
33a50 20 20 69 36 34 20 76 61 6c 3b 0a 0a 20 20 70 49    i64 val;..  pI
33a60 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
33a70 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28  p1];.  assert( (
33a80 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
33a90 4d 5f 42 6c 6f 62 29 3d 3d 30 20 7c 7c 20 73 71  M_Blob)==0 || sq
33aa0 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 73 52 6f  lite3VdbeMemIsRo
33ab0 77 53 65 74 28 70 49 6e 31 29 20 29 3b 0a 20 20  wSet(pIn1) );.  
33ac0 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
33ad0 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20   & MEM_Blob)==0 
33ae0 0a 20 20 20 7c 7c 20 73 71 6c 69 74 65 33 52 6f  .   || sqlite3Ro
33af0 77 53 65 74 4e 65 78 74 28 28 52 6f 77 53 65 74  wSetNext((RowSet
33b00 2a 29 70 49 6e 31 2d 3e 7a 2c 20 26 76 61 6c 29  *)pIn1->z, &val)
33b10 3d 3d 30 0a 20 20 29 7b 0a 20 20 20 20 2f 2a 20  ==0.  ){.    /* 
33b20 54 68 65 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65  The boolean inde
33b30 78 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 20 20  x is empty */.  
33b40 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
33b50 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20  SetNull(pIn1);. 
33b60 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
33b70 65 6e 28 31 2c 32 29 3b 0a 20 20 20 20 67 6f 74  en(1,2);.    got
33b80 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64  o jump_to_p2_and
33b90 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72  _check_for_inter
33ba0 72 75 70 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  rupt;.  }else{. 
33bb0 20 20 20 2f 2a 20 41 20 76 61 6c 75 65 20 77 61     /* A value wa
33bc0 73 20 70 75 6c 6c 65 64 20 66 72 6f 6d 20 74 68  s pulled from th
33bd0 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 56  e index */.    V
33be0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30  dbeBranchTaken(0
33bf0 2c 32 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ,2);.    sqlite3
33c00 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28  VdbeMemSetInt64(
33c10 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20  &aMem[pOp->p3], 
33c20 76 61 6c 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f  val);.  }.  goto
33c30 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72   check_for_inter
33c40 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  rupt;.}../* Opco
33c50 64 65 3a 20 52 6f 77 53 65 74 54 65 73 74 20 50  de: RowSetTest P
33c60 31 20 50 32 20 50 33 20 50 34 0a 2a 2a 20 53 79  1 P2 P3 P4.** Sy
33c70 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 33 5d  nopsis: if r[P3]
33c80 20 69 6e 20 72 6f 77 73 65 74 28 50 31 29 20 67   in rowset(P1) g
33c90 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67  oto P2.**.** Reg
33ca0 69 73 74 65 72 20 50 33 20 69 73 20 61 73 73 75  ister P3 is assu
33cb0 6d 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 36 34  med to hold a 64
33cc0 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c  -bit integer val
33cd0 75 65 2e 20 49 66 20 72 65 67 69 73 74 65 72 20  ue. If register 
33ce0 50 31 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61  P1.** contains a
33cf0 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 61   RowSet object a
33d00 6e 64 20 74 68 61 74 20 52 6f 77 53 65 74 20 6f  nd that RowSet o
33d10 62 6a 65 63 74 20 63 6f 6e 74 61 69 6e 73 0a 2a  bject contains.*
33d20 2a 20 74 68 65 20 76 61 6c 75 65 20 68 65 6c 64  * the value held
33d30 20 69 6e 20 50 33 2c 20 6a 75 6d 70 20 74 6f 20   in P3, jump to 
33d40 72 65 67 69 73 74 65 72 20 50 32 2e 20 4f 74 68  register P2. Oth
33d50 65 72 77 69 73 65 2c 20 69 6e 73 65 72 74 20 74  erwise, insert t
33d60 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69 6e  he.** integer in
33d70 20 50 33 20 69 6e 74 6f 20 74 68 65 20 52 6f 77   P3 into the Row
33d80 53 65 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65  Set and continue
33d90 20 6f 6e 20 74 6f 20 74 68 65 0a 2a 2a 20 6e 65   on to the.** ne
33da0 78 74 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  xt opcode..**.**
33db0 20 54 68 65 20 52 6f 77 53 65 74 20 6f 62 6a 65   The RowSet obje
33dc0 63 74 20 69 73 20 6f 70 74 69 6d 69 7a 65 64 20  ct is optimized 
33dd0 66 6f 72 20 74 68 65 20 63 61 73 65 20 77 68 65  for the case whe
33de0 72 65 20 73 65 74 73 20 6f 66 20 69 6e 74 65 67  re sets of integ
33df0 65 72 73 0a 2a 2a 20 61 72 65 20 69 6e 73 65 72  ers.** are inser
33e00 74 65 64 20 69 6e 20 64 69 73 74 69 6e 63 74 20  ted in distinct 
33e10 70 68 61 73 65 73 2c 20 77 68 69 63 68 20 65 61  phases, which ea
33e20 63 68 20 73 65 74 20 63 6f 6e 74 61 69 6e 73 20  ch set contains 
33e30 6e 6f 20 64 75 70 6c 69 63 61 74 65 73 2e 0a 2a  no duplicates..*
33e40 2a 20 45 61 63 68 20 73 65 74 20 69 73 20 69 64  * Each set is id
33e50 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 75 6e  entified by a un
33e60 69 71 75 65 20 50 34 20 76 61 6c 75 65 2e 20 54  ique P4 value. T
33e70 68 65 20 66 69 72 73 74 20 73 65 74 0a 2a 2a 20  he first set.** 
33e80 6d 75 73 74 20 68 61 76 65 20 50 34 3d 3d 30 2c  must have P4==0,
33e90 20 74 68 65 20 66 69 6e 61 6c 20 73 65 74 20 6d   the final set m
33ea0 75 73 74 20 68 61 76 65 20 50 34 3d 3d 2d 31 2c  ust have P4==-1,
33eb0 20 61 6e 64 20 66 6f 72 20 61 6c 6c 20 6f 74 68   and for all oth
33ec0 65 72 20 73 65 74 73 0a 2a 2a 20 6d 75 73 74 20  er sets.** must 
33ed0 68 61 76 65 20 50 34 3e 30 2e 0a 2a 2a 0a 2a 2a  have P4>0..**.**
33ee0 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 6f 70 74   This allows opt
33ef0 69 6d 69 7a 61 74 69 6f 6e 73 3a 20 28 61 29 20  imizations: (a) 
33f00 77 68 65 6e 20 50 34 3d 3d 30 20 74 68 65 72 65  when P4==0 there
33f10 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 74   is no need to t
33f20 65 73 74 0a 2a 2a 20 74 68 65 20 52 6f 77 53 65  est.** the RowSe
33f30 74 20 6f 62 6a 65 63 74 20 66 6f 72 20 50 33 2c  t object for P3,
33f40 20 61 73 20 69 74 20 69 73 20 67 75 61 72 61 6e   as it is guaran
33f50 74 65 65 64 20 6e 6f 74 20 74 6f 20 63 6f 6e 74  teed not to cont
33f60 61 69 6e 20 69 74 2c 0a 2a 2a 20 28 62 29 20 77  ain it,.** (b) w
33f70 68 65 6e 20 50 34 3d 3d 2d 31 20 74 68 65 72 65  hen P4==-1 there
33f80 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 69   is no need to i
33f90 6e 73 65 72 74 20 74 68 65 20 76 61 6c 75 65 2c  nsert the value,
33fa0 20 61 73 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e   as it will.** n
33fb0 65 76 65 72 20 62 65 20 74 65 73 74 65 64 20 66  ever be tested f
33fc0 6f 72 2c 20 61 6e 64 20 28 63 29 20 77 68 65 6e  or, and (c) when
33fd0 20 61 20 76 61 6c 75 65 20 74 68 61 74 20 69 73   a value that is
33fe0 20 70 61 72 74 20 6f 66 20 73 65 74 20 58 20 69   part of set X i
33ff0 73 0a 2a 2a 20 69 6e 73 65 72 74 65 64 2c 20 74  s.** inserted, t
34000 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20  here is no need 
34010 74 6f 20 73 65 61 72 63 68 20 74 6f 20 73 65 65  to search to see
34020 20 69 66 20 74 68 65 20 73 61 6d 65 20 76 61 6c   if the same val
34030 75 65 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f  ue was.** previo
34040 75 73 6c 79 20 69 6e 73 65 72 74 65 64 20 61 73  usly inserted as
34050 20 70 61 72 74 20 6f 66 20 73 65 74 20 58 20 28   part of set X (
34060 6f 6e 6c 79 20 69 66 20 69 74 20 77 61 73 20 70  only if it was p
34070 72 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73  reviously.** ins
34080 65 72 74 65 64 20 61 73 20 70 61 72 74 20 6f 66  erted as part of
34090 20 73 6f 6d 65 20 6f 74 68 65 72 20 73 65 74 29   some other set)
340a0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
340b0 53 65 74 54 65 73 74 3a 20 7b 20 20 20 20 20 20  SetTest: {      
340c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
340d0 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  * jump, in1, in3
340e0 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 74 3b 0a   */.  int iSet;.
340f0 20 20 69 6e 74 20 65 78 69 73 74 73 3b 0a 0a 20    int exists;.. 
34100 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
34110 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d  p->p1];.  pIn3 =
34120 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
34130 0a 20 20 69 53 65 74 20 3d 20 70 4f 70 2d 3e 70  .  iSet = pOp->p
34140 34 2e 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70  4.i;.  assert( p
34150 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In3->flags&MEM_I
34160 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74  nt );..  /* If t
34170 68 65 72 65 20 69 73 20 61 6e 79 74 68 69 6e 67  here is anything
34180 20 6f 74 68 65 72 20 74 68 61 6e 20 61 20 72 6f   other than a ro
34190 77 73 65 74 20 6f 62 6a 65 63 74 20 69 6e 20 6d  wset object in m
341a0 65 6d 6f 72 79 20 63 65 6c 6c 20 50 31 2c 0a 20  emory cell P1,. 
341b0 20 2a 2a 20 64 65 6c 65 74 65 20 69 74 20 6e 6f   ** delete it no
341c0 77 20 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65  w and initialize
341d0 20 50 31 20 77 69 74 68 20 61 6e 20 65 6d 70 74   P1 with an empt
341e0 79 20 72 6f 77 73 65 74 0a 20 20 2a 2f 0a 20 20  y rowset.  */.  
341f0 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
34200 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20   & MEM_Blob)==0 
34210 29 7b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  ){.    if( sqlit
34220 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53  e3VdbeMemSetRowS
34230 65 74 28 70 49 6e 31 29 20 29 20 67 6f 74 6f 20  et(pIn1) ) goto 
34240 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61 73  no_mem;.  }.  as
34250 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64 62  sert( sqlite3Vdb
34260 65 4d 65 6d 49 73 52 6f 77 53 65 74 28 70 49 6e  eMemIsRowSet(pIn
34270 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  1) );.  assert( 
34280 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
34290 49 4e 54 33 32 20 29 3b 0a 20 20 61 73 73 65 72  INT32 );.  asser
342a0 74 28 20 69 53 65 74 3d 3d 2d 31 20 7c 7c 20 69  t( iSet==-1 || i
342b0 53 65 74 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20  Set>=0 );.  if( 
342c0 69 53 65 74 20 29 7b 0a 20 20 20 20 65 78 69 73  iSet ){.    exis
342d0 74 73 20 3d 20 73 71 6c 69 74 65 33 52 6f 77 53  ts = sqlite3RowS
342e0 65 74 54 65 73 74 28 28 52 6f 77 53 65 74 2a 29  etTest((RowSet*)
342f0 70 49 6e 31 2d 3e 7a 2c 20 69 53 65 74 2c 20 70  pIn1->z, iSet, p
34300 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 20 20 56  In3->u.i);.    V
34310 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 65  dbeBranchTaken(e
34320 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20  xists!=0,2);.   
34330 20 69 66 28 20 65 78 69 73 74 73 20 29 20 67 6f   if( exists ) go
34340 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
34350 20 7d 0a 20 20 69 66 28 20 69 53 65 74 3e 3d 30   }.  if( iSet>=0
34360 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52   ){.    sqlite3R
34370 6f 77 53 65 74 49 6e 73 65 72 74 28 28 52 6f 77  owSetInsert((Row
34380 53 65 74 2a 29 70 49 6e 31 2d 3e 7a 2c 20 70 49  Set*)pIn1->z, pI
34390 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20 20  n3->u.i);.  }.  
343a0 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64  break;.}...#ifnd
343b0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
343c0 52 49 47 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64  RIGGER../* Opcod
343d0 65 3a 20 50 72 6f 67 72 61 6d 20 50 31 20 50 32  e: Program P1 P2
343e0 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
343f0 45 78 65 63 75 74 65 20 74 68 65 20 74 72 69 67  Execute the trig
34400 67 65 72 20 70 72 6f 67 72 61 6d 20 70 61 73 73  ger program pass
34410 65 64 20 61 73 20 50 34 20 28 74 79 70 65 20 50  ed as P4 (type P
34420 34 5f 53 55 42 50 52 4f 47 52 41 4d 29 2e 20 0a  4_SUBPROGRAM). .
34430 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69 6e  **.** P1 contain
34440 73 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66  s the address of
34450 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c   the memory cell
34460 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74   that contains t
34470 68 65 20 66 69 72 73 74 20 6d 65 6d 6f 72 79 20  he first memory 
34480 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20 61  .** cell in an a
34490 72 72 61 79 20 6f 66 20 76 61 6c 75 65 73 20 75  rray of values u
344a0 73 65 64 20 61 73 20 61 72 67 75 6d 65 6e 74 73  sed as arguments
344b0 20 74 6f 20 74 68 65 20 73 75 62 2d 70 72 6f 67   to the sub-prog
344c0 72 61 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e 74  ram. P2 .** cont
344d0 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73  ains the address
344e0 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20 74   to jump to if t
344f0 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74  he sub-program t
34500 68 72 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45 20  hrows an IGNORE 
34510 0a 2a 2a 20 65 78 63 65 70 74 69 6f 6e 20 75 73  .** exception us
34520 69 6e 67 20 74 68 65 20 52 41 49 53 45 28 29 20  ing the RAISE() 
34530 66 75 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73 74  function. Regist
34540 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74  er P3 contains t
34550 68 65 20 61 64 64 72 65 73 73 20 0a 2a 2a 20 6f  he address .** o
34560 66 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  f a memory cell 
34570 69 6e 20 74 68 69 73 20 28 74 68 65 20 70 61 72  in this (the par
34580 65 6e 74 29 20 56 4d 20 74 68 61 74 20 69 73 20  ent) VM that is 
34590 75 73 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65  used to allocate
345a0 20 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20   the .** memory 
345b0 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20  required by the 
345c0 73 75 62 2d 76 64 62 65 20 61 74 20 72 75 6e 74  sub-vdbe at runt
345d0 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  ime..**.** P4 is
345e0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
345f0 65 20 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67 20  e VM containing 
34600 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
34610 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  ram..**.** If P5
34620 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
34630 65 6e 20 72 65 63 75 72 73 69 76 65 20 70 72 6f  en recursive pro
34640 67 72 61 6d 20 69 6e 76 6f 63 61 74 69 6f 6e 20  gram invocation 
34650 69 73 20 65 6e 61 62 6c 65 64 2e 0a 2a 2f 0a 63  is enabled..*/.c
34660 61 73 65 20 4f 50 5f 50 72 6f 67 72 61 6d 3a 20  ase OP_Program: 
34670 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
34680 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20   */.  int nMem; 
34690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
346a0 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72   Number of memor
346b0 79 20 72 65 67 69 73 74 65 72 73 20 66 6f 72 20  y registers for 
346c0 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20  sub-program */. 
346d0 20 69 6e 74 20 6e 42 79 74 65 3b 20 20 20 20 20   int nByte;     
346e0 20 20 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65           /* Byte
346f0 73 20 6f 66 20 72 75 6e 74 69 6d 65 20 73 70 61  s of runtime spa
34700 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  ce required for 
34710 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20  sub-program */. 
34720 20 4d 65 6d 20 2a 70 52 74 3b 20 20 20 20 20 20   Mem *pRt;      
34730 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
34740 73 74 65 72 20 74 6f 20 61 6c 6c 6f 63 61 74 65  ster to allocate
34750 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65 20 2a   runtime space *
34760 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20  /.  Mem *pMem;  
34770 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
34780 73 65 64 20 74 6f 20 69 74 65 72 61 74 65 20 74  sed to iterate t
34790 68 72 6f 75 67 68 20 6d 65 6d 6f 72 79 20 63 65  hrough memory ce
347a0 6c 6c 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 45  lls */.  Mem *pE
347b0 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nd;             
347c0 20 2f 2a 20 4c 61 73 74 20 6d 65 6d 6f 72 79 20   /* Last memory 
347d0 63 65 6c 6c 20 69 6e 20 6e 65 77 20 61 72 72 61  cell in new arra
347e0 79 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65  y */.  VdbeFrame
347f0 20 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 20 2f   *pFrame;      /
34800 2a 20 4e 65 77 20 76 64 62 65 20 66 72 61 6d 65  * New vdbe frame
34810 20 74 6f 20 65 78 65 63 75 74 65 20 69 6e 20 2a   to execute in *
34820 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a  /.  SubProgram *
34830 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 53  pProgram;   /* S
34840 75 62 2d 70 72 6f 67 72 61 6d 20 74 6f 20 65 78  ub-program to ex
34850 65 63 75 74 65 20 2a 2f 0a 20 20 76 6f 69 64 20  ecute */.  void 
34860 2a 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  *t;             
34870 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 69 64 65 6e     /* Token iden
34880 74 69 66 79 69 6e 67 20 74 72 69 67 67 65 72 20  tifying trigger 
34890 2a 2f 0a 0a 20 20 70 50 72 6f 67 72 61 6d 20 3d  */..  pProgram =
348a0 20 70 4f 70 2d 3e 70 34 2e 70 50 72 6f 67 72 61   pOp->p4.pProgra
348b0 6d 3b 0a 20 20 70 52 74 20 3d 20 26 61 4d 65 6d  m;.  pRt = &aMem
348c0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73  [pOp->p3];.  ass
348d0 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  ert( pProgram->n
348e0 4f 70 3e 30 20 29 3b 0a 20 20 0a 20 20 2f 2a 20  Op>0 );.  .  /* 
348f0 49 66 20 74 68 65 20 70 35 20 66 6c 61 67 20 69  If the p5 flag i
34900 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65  s clear, then re
34910 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69  cursive invocati
34920 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73 20 69  on of triggers i
34930 73 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64  s .  ** disabled
34940 20 66 6f 72 20 62 61 63 6b 77 61 72 64 73 20 63   for backwards c
34950 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 28 70 35  ompatibility (p5
34960 20 69 73 20 73 65 74 20 69 66 20 74 68 69 73 20   is set if this 
34970 73 75 62 2d 70 72 6f 67 72 61 6d 0a 20 20 2a 2a  sub-program.  **
34980 20 69 73 20 72 65 61 6c 6c 79 20 61 20 74 72 69   is really a tri
34990 67 67 65 72 2c 20 6e 6f 74 20 61 20 66 6f 72 65  gger, not a fore
349a0 69 67 6e 20 6b 65 79 20 61 63 74 69 6f 6e 2c 20  ign key action, 
349b0 61 6e 64 20 74 68 65 20 66 6c 61 67 20 73 65 74  and the flag set
349c0 0a 20 20 2a 2a 20 61 6e 64 20 63 6c 65 61 72 65  .  ** and cleare
349d0 64 20 62 79 20 74 68 65 20 22 50 52 41 47 4d 41  d by the "PRAGMA
349e0 20 72 65 63 75 72 73 69 76 65 5f 74 72 69 67 67   recursive_trigg
349f0 65 72 73 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20  ers" command is 
34a00 63 6c 65 61 72 29 2e 0a 20 20 2a 2a 20 0a 20 20  clear)..  ** .  
34a10 2a 2a 20 49 74 20 69 73 20 72 65 63 75 72 73 69  ** It is recursi
34a20 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66  ve invocation of
34a30 20 74 72 69 67 67 65 72 73 2c 20 61 74 20 74 68   triggers, at th
34a40 65 20 53 51 4c 20 6c 65 76 65 6c 2c 20 74 68 61  e SQL level, tha
34a50 74 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62  t is .  ** disab
34a60 6c 65 64 2e 20 49 6e 20 73 6f 6d 65 20 63 61 73  led. In some cas
34a70 65 73 20 61 20 73 69 6e 67 6c 65 20 74 72 69 67  es a single trig
34a80 67 65 72 20 6d 61 79 20 67 65 6e 65 72 61 74 65  ger may generate
34a90 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 0a   more than one .
34aa0 20 20 2a 2a 20 53 75 62 50 72 6f 67 72 61 6d 20    ** SubProgram 
34ab0 28 69 66 20 74 68 65 20 74 72 69 67 67 65 72 20  (if the trigger 
34ac0 6d 61 79 20 62 65 20 65 78 65 63 75 74 65 64 20  may be executed 
34ad0 77 69 74 68 20 6d 6f 72 65 20 74 68 61 6e 20 6f  with more than o
34ae0 6e 65 20 64 69 66 66 65 72 65 6e 74 20 0a 20 20  ne different .  
34af0 2a 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61  ** ON CONFLICT a
34b00 6c 67 6f 72 69 74 68 6d 29 2e 20 53 75 62 50 72  lgorithm). SubPr
34b10 6f 67 72 61 6d 20 73 74 72 75 63 74 75 72 65 73  ogram structures
34b20 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
34b30 20 61 0a 20 20 2a 2a 20 73 69 6e 67 6c 65 20 74   a.  ** single t
34b40 72 69 67 67 65 72 20 61 6c 6c 20 68 61 76 65 20  rigger all have 
34b50 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66  the same value f
34b60 6f 72 20 74 68 65 20 53 75 62 50 72 6f 67 72 61  or the SubProgra
34b70 6d 2e 74 6f 6b 65 6e 20 0a 20 20 2a 2a 20 76 61  m.token .  ** va
34b80 72 69 61 62 6c 65 2e 20 20 2a 2f 0a 20 20 69 66  riable.  */.  if
34b90 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20  ( pOp->p5 ){.   
34ba0 20 74 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74   t = pProgram->t
34bb0 6f 6b 65 6e 3b 0a 20 20 20 20 66 6f 72 28 70 46  oken;.    for(pF
34bc0 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20  rame=p->pFrame; 
34bd0 70 46 72 61 6d 65 20 26 26 20 70 46 72 61 6d 65  pFrame && pFrame
34be0 2d 3e 74 6f 6b 65 6e 21 3d 74 3b 20 70 46 72 61  ->token!=t; pFra
34bf0 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  me=pFrame->pPare
34c00 6e 74 29 3b 0a 20 20 20 20 69 66 28 20 70 46 72  nt);.    if( pFr
34c10 61 6d 65 20 29 20 62 72 65 61 6b 3b 0a 20 20 7d  ame ) break;.  }
34c20 0a 0a 20 20 69 66 28 20 70 2d 3e 6e 46 72 61 6d  ..  if( p->nFram
34c30 65 3e 3d 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  e>=db->aLimit[SQ
34c40 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47 47  LITE_LIMIT_TRIGG
34c50 45 52 5f 44 45 50 54 48 5d 20 29 7b 0a 20 20 20  ER_DEPTH] ){.   
34c60 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
34c70 4f 52 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  OR;.    sqlite3V
34c80 64 62 65 45 72 72 6f 72 28 70 2c 20 22 74 6f 6f  dbeError(p, "too
34c90 20 6d 61 6e 79 20 6c 65 76 65 6c 73 20 6f 66 20   many levels of 
34ca0 74 72 69 67 67 65 72 20 72 65 63 75 72 73 69 6f  trigger recursio
34cb0 6e 22 29 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62  n");.    goto ab
34cc0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
34cd0 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 67 69  ;.  }..  /* Regi
34ce0 73 74 65 72 20 70 52 74 20 69 73 20 75 73 65 64  ster pRt is used
34cf0 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 6d 65   to store the me
34d00 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 74 6f  mory required to
34d10 20 73 61 76 65 20 74 68 65 20 73 74 61 74 65 0a   save the state.
34d20 20 20 2a 2a 20 6f 66 20 74 68 65 20 63 75 72 72    ** of the curr
34d30 65 6e 74 20 70 72 6f 67 72 61 6d 2c 20 61 6e 64  ent program, and
34d40 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75   the memory requ
34d50 69 72 65 64 20 61 74 20 72 75 6e 74 69 6d 65 20  ired at runtime 
34d60 74 6f 20 65 78 65 63 75 74 65 0a 20 20 2a 2a 20  to execute.  ** 
34d70 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
34d80 72 61 6d 2e 20 49 66 20 74 68 69 73 20 74 72 69  ram. If this tri
34d90 67 67 65 72 20 68 61 73 20 62 65 65 6e 20 66 69  gger has been fi
34da0 72 65 64 20 62 65 66 6f 72 65 2c 20 74 68 65 6e  red before, then
34db0 20 70 52 74 20 0a 20 20 2a 2a 20 69 73 20 61 6c   pRt .  ** is al
34dc0 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 2e  ready allocated.
34dd0 20 4f 74 68 65 72 77 69 73 65 2c 20 69 74 20 6d   Otherwise, it m
34de0 75 73 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a  ust be initializ
34df0 65 64 2e 20 20 2a 2f 0a 20 20 69 66 28 20 28 70  ed.  */.  if( (p
34e00 52 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 42 6c  Rt->flags&MEM_Bl
34e10 6f 62 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a  ob)==0 ){.    /*
34e20 20 53 75 62 50 72 6f 67 72 61 6d 2e 6e 4d 65 6d   SubProgram.nMem
34e30 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e   is set to the n
34e40 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
34e50 63 65 6c 6c 73 20 75 73 65 64 20 62 79 20 74 68  cells used by th
34e60 65 20 0a 20 20 20 20 2a 2a 20 70 72 6f 67 72 61  e .    ** progra
34e70 6d 20 73 74 6f 72 65 64 20 69 6e 20 53 75 62 50  m stored in SubP
34e80 72 6f 67 72 61 6d 2e 61 4f 70 2e 20 41 73 20 77  rogram.aOp. As w
34e90 65 6c 6c 20 61 73 20 74 68 65 73 65 2c 20 6f 6e  ell as these, on
34ea0 65 20 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20  e memory.    ** 
34eb0 63 65 6c 6c 20 69 73 20 72 65 71 75 69 72 65 64  cell is required
34ec0 20 66 6f 72 20 65 61 63 68 20 63 75 72 73 6f 72   for each cursor
34ed0 20 75 73 65 64 20 62 79 20 74 68 65 20 70 72 6f   used by the pro
34ee0 67 72 61 6d 2e 20 53 65 74 20 6c 6f 63 61 6c 0a  gram. Set local.
34ef0 20 20 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 20      ** variable 
34f00 6e 4d 65 6d 20 28 61 6e 64 20 6c 61 74 65 72 2c  nMem (and later,
34f10 20 56 64 62 65 46 72 61 6d 65 2e 6e 43 68 69 6c   VdbeFrame.nChil
34f20 64 4d 65 6d 29 20 74 6f 20 74 68 69 73 20 76 61  dMem) to this va
34f30 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  lue..    */.    
34f40 6e 4d 65 6d 20 3d 20 70 50 72 6f 67 72 61 6d 2d  nMem = pProgram-
34f50 3e 6e 4d 65 6d 20 2b 20 70 50 72 6f 67 72 61 6d  >nMem + pProgram
34f60 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 61 73 73 65  ->nCsr;.    asse
34f70 72 74 28 20 6e 4d 65 6d 3e 30 20 29 3b 0a 20 20  rt( nMem>0 );.  
34f80 20 20 69 66 28 20 70 50 72 6f 67 72 61 6d 2d 3e    if( pProgram->
34f90 6e 43 73 72 3d 3d 30 20 29 20 6e 4d 65 6d 2b 2b  nCsr==0 ) nMem++
34fa0 3b 0a 20 20 20 20 6e 42 79 74 65 20 3d 20 52 4f  ;.    nByte = RO
34fb0 55 4e 44 38 28 73 69 7a 65 6f 66 28 56 64 62 65  UND8(sizeof(Vdbe
34fc0 46 72 61 6d 65 29 29 0a 20 20 20 20 20 20 20 20  Frame)).        
34fd0 20 20 20 20 20 20 2b 20 6e 4d 65 6d 20 2a 20 73        + nMem * s
34fe0 69 7a 65 6f 66 28 4d 65 6d 29 0a 20 20 20 20 20  izeof(Mem).     
34ff0 20 20 20 20 20 20 20 20 20 2b 20 70 50 72 6f 67           + pProg
35000 72 61 6d 2d 3e 6e 43 73 72 20 2a 20 73 69 7a 65  ram->nCsr * size
35010 6f 66 28 56 64 62 65 43 75 72 73 6f 72 2a 29 0a  of(VdbeCursor*).
35020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20                + 
35030 28 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 20 2b  (pProgram->nOp +
35040 20 37 29 2f 38 3b 0a 20 20 20 20 70 46 72 61 6d   7)/8;.    pFram
35050 65 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  e = sqlite3DbMal
35060 6c 6f 63 5a 65 72 6f 28 64 62 2c 20 6e 42 79 74  locZero(db, nByt
35070 65 29 3b 0a 20 20 20 20 69 66 28 20 21 70 46 72  e);.    if( !pFr
35080 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  ame ){.      got
35090 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a  o no_mem;.    }.
350a0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
350b0 65 6d 52 65 6c 65 61 73 65 28 70 52 74 29 3b 0a  emRelease(pRt);.
350c0 20 20 20 20 70 52 74 2d 3e 66 6c 61 67 73 20 3d      pRt->flags =
350d0 20 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 44 79   MEM_Blob|MEM_Dy
350e0 6e 3b 0a 20 20 20 20 70 52 74 2d 3e 7a 20 3d 20  n;.    pRt->z = 
350f0 28 63 68 61 72 2a 29 70 46 72 61 6d 65 3b 0a 20  (char*)pFrame;. 
35100 20 20 20 70 52 74 2d 3e 6e 20 3d 20 6e 42 79 74     pRt->n = nByt
35110 65 3b 0a 20 20 20 20 70 52 74 2d 3e 78 44 65 6c  e;.    pRt->xDel
35120 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 46 72   = sqlite3VdbeFr
35130 61 6d 65 4d 65 6d 44 65 6c 3b 0a 0a 20 20 20 20  ameMemDel;..    
35140 70 46 72 61 6d 65 2d 3e 76 20 3d 20 70 3b 0a 20  pFrame->v = p;. 
35150 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c     pFrame->nChil
35160 64 4d 65 6d 20 3d 20 6e 4d 65 6d 3b 0a 20 20 20  dMem = nMem;.   
35170 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43   pFrame->nChildC
35180 73 72 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  sr = pProgram->n
35190 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  Csr;.    pFrame-
351a0 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  >pc = (int)(pOp 
351b0 2d 20 61 4f 70 29 3b 0a 20 20 20 20 70 46 72 61  - aOp);.    pFra
351c0 6d 65 2d 3e 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d  me->aMem = p->aM
351d0 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  em;.    pFrame->
351e0 6e 4d 65 6d 20 3d 20 70 2d 3e 6e 4d 65 6d 3b 0a  nMem = p->nMem;.
351f0 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 70 43 73      pFrame->apCs
35200 72 20 3d 20 70 2d 3e 61 70 43 73 72 3b 0a 20 20  r = p->apCsr;.  
35210 20 20 70 46 72 61 6d 65 2d 3e 6e 43 75 72 73 6f    pFrame->nCurso
35220 72 20 3d 20 70 2d 3e 6e 43 75 72 73 6f 72 3b 0a  r = p->nCursor;.
35230 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4f 70 20      pFrame->aOp 
35240 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 70 46  = p->aOp;.    pF
35250 72 61 6d 65 2d 3e 6e 4f 70 20 3d 20 70 2d 3e 6e  rame->nOp = p->n
35260 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  Op;.    pFrame->
35270 74 6f 6b 65 6e 20 3d 20 70 50 72 6f 67 72 61 6d  token = pProgram
35280 2d 3e 74 6f 6b 65 6e 3b 0a 23 69 66 64 65 66 20  ->token;.#ifdef 
35290 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
352a0 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20  MT_SCANSTATUS.  
352b0 20 20 70 46 72 61 6d 65 2d 3e 61 6e 45 78 65 63    pFrame->anExec
352c0 20 3d 20 70 2d 3e 61 6e 45 78 65 63 3b 0a 23 65   = p->anExec;.#e
352d0 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
352e0 54 45 5f 44 45 42 55 47 0a 20 20 20 20 70 46 72  TE_DEBUG.    pFr
352f0 61 6d 65 2d 3e 69 46 72 61 6d 65 4d 61 67 69 63  ame->iFrameMagic
35300 20 3d 20 53 51 4c 49 54 45 5f 46 52 41 4d 45 5f   = SQLITE_FRAME_
35310 4d 41 47 49 43 3b 0a 23 65 6e 64 69 66 0a 0a 20  MAGIC;.#endif.. 
35320 20 20 20 70 45 6e 64 20 3d 20 26 56 64 62 65 46     pEnd = &VdbeF
35330 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b  rameMem(pFrame)[
35340 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65  pFrame->nChildMe
35350 6d 5d 3b 0a 20 20 20 20 66 6f 72 28 70 4d 65 6d  m];.    for(pMem
35360 3d 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46  =VdbeFrameMem(pF
35370 72 61 6d 65 29 3b 20 70 4d 65 6d 21 3d 70 45 6e  rame); pMem!=pEn
35380 64 3b 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20  d; pMem++){.    
35390 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20    pMem->flags = 
353a0 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20  MEM_Undefined;. 
353b0 20 20 20 20 20 70 4d 65 6d 2d 3e 64 62 20 3d 20       pMem->db = 
353c0 64 62 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  db;.    }.  }els
353d0 65 7b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20  e{.    pFrame = 
353e0 28 56 64 62 65 46 72 61 6d 65 2a 29 70 52 74 2d  (VdbeFrame*)pRt-
353f0 3e 7a 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  >z;.    assert( 
35400 70 52 74 2d 3e 78 44 65 6c 3d 3d 73 71 6c 69 74  pRt->xDel==sqlit
35410 65 33 56 64 62 65 46 72 61 6d 65 4d 65 6d 44 65  e3VdbeFrameMemDe
35420 6c 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  l );.    assert(
35430 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b   pProgram->nMem+
35440 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d  pProgram->nCsr==
35450 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65  pFrame->nChildMe
35460 6d 20 0a 20 20 20 20 20 20 20 20 7c 7c 20 28 70  m .        || (p
35470 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 30  Program->nCsr==0
35480 20 26 26 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d   && pProgram->nM
35490 65 6d 2b 31 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43  em+1==pFrame->nC
354a0 68 69 6c 64 4d 65 6d 29 20 29 3b 0a 20 20 20 20  hildMem) );.    
354b0 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d  assert( pProgram
354c0 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e  ->nCsr==pFrame->
354d0 6e 43 68 69 6c 64 43 73 72 20 29 3b 0a 20 20 20  nChildCsr );.   
354e0 20 61 73 73 65 72 74 28 20 28 69 6e 74 29 28 70   assert( (int)(p
354f0 4f 70 20 2d 20 61 4f 70 29 3d 3d 70 46 72 61 6d  Op - aOp)==pFram
35500 65 2d 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a 20 20  e->pc );.  }..  
35510 70 2d 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20 70  p->nFrame++;.  p
35520 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 20 3d  Frame->pParent =
35530 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 46   p->pFrame;.  pF
35540 72 61 6d 65 2d 3e 6c 61 73 74 52 6f 77 69 64 20  rame->lastRowid 
35550 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b  = db->lastRowid;
35560 0a 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 61 6e  .  pFrame->nChan
35570 67 65 20 3d 20 70 2d 3e 6e 43 68 61 6e 67 65 3b  ge = p->nChange;
35580 0a 20 20 70 46 72 61 6d 65 2d 3e 6e 44 62 43 68  .  pFrame->nDbCh
35590 61 6e 67 65 20 3d 20 70 2d 3e 64 62 2d 3e 6e 43  ange = p->db->nC
355a0 68 61 6e 67 65 3b 0a 20 20 61 73 73 65 72 74 28  hange;.  assert(
355b0 20 70 46 72 61 6d 65 2d 3e 70 41 75 78 44 61 74   pFrame->pAuxDat
355c0 61 3d 3d 30 20 29 3b 0a 20 20 70 46 72 61 6d 65  a==0 );.  pFrame
355d0 2d 3e 70 41 75 78 44 61 74 61 20 3d 20 70 2d 3e  ->pAuxData = p->
355e0 70 41 75 78 44 61 74 61 3b 0a 20 20 70 2d 3e 70  pAuxData;.  p->p
355f0 41 75 78 44 61 74 61 20 3d 20 30 3b 0a 20 20 70  AuxData = 0;.  p
35600 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20  ->nChange = 0;. 
35610 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46 72   p->pFrame = pFr
35620 61 6d 65 3b 0a 20 20 70 2d 3e 61 4d 65 6d 20 3d  ame;.  p->aMem =
35630 20 61 4d 65 6d 20 3d 20 56 64 62 65 46 72 61 6d   aMem = VdbeFram
35640 65 4d 65 6d 28 70 46 72 61 6d 65 29 3b 0a 20 20  eMem(pFrame);.  
35650 70 2d 3e 6e 4d 65 6d 20 3d 20 70 46 72 61 6d 65  p->nMem = pFrame
35660 2d 3e 6e 43 68 69 6c 64 4d 65 6d 3b 0a 20 20 70  ->nChildMem;.  p
35670 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 28 75 31 36  ->nCursor = (u16
35680 29 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43  )pFrame->nChildC
35690 73 72 3b 0a 20 20 70 2d 3e 61 70 43 73 72 20 3d  sr;.  p->apCsr =
356a0 20 28 56 64 62 65 43 75 72 73 6f 72 20 2a 2a 29   (VdbeCursor **)
356b0 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d 3b 0a  &aMem[p->nMem];.
356c0 20 20 70 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 20    pFrame->aOnce 
356d0 3d 20 28 75 38 2a 29 26 70 2d 3e 61 70 43 73 72  = (u8*)&p->apCsr
356e0 5b 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 5d  [pProgram->nCsr]
356f0 3b 0a 20 20 6d 65 6d 73 65 74 28 70 46 72 61 6d  ;.  memset(pFram
35700 65 2d 3e 61 4f 6e 63 65 2c 20 30 2c 20 28 70 50  e->aOnce, 0, (pP
35710 72 6f 67 72 61 6d 2d 3e 6e 4f 70 20 2b 20 37 29  rogram->nOp + 7)
35720 2f 38 29 3b 0a 20 20 70 2d 3e 61 4f 70 20 3d 20  /8);.  p->aOp = 
35730 61 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  aOp = pProgram->
35740 61 4f 70 3b 0a 20 20 70 2d 3e 6e 4f 70 20 3d 20  aOp;.  p->nOp = 
35750 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3b 0a 23  pProgram->nOp;.#
35760 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
35770 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41  BLE_STMT_SCANSTA
35780 54 55 53 0a 20 20 70 2d 3e 61 6e 45 78 65 63 20  TUS.  p->anExec 
35790 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64  = 0;.#endif.#ifd
357a0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
357b0 20 20 2f 2a 20 56 65 72 69 66 79 20 74 68 61 74    /* Verify that
357c0 20 73 65 63 6f 6e 64 20 61 6e 64 20 73 75 62 73   second and subs
357d0 65 71 75 65 6e 74 20 65 78 65 63 75 74 69 6f 6e  equent execution
357e0 73 20 6f 66 20 74 68 65 20 73 61 6d 65 20 74 72  s of the same tr
357f0 69 67 67 65 72 20 64 6f 20 6e 6f 74 0a 20 20 2a  igger do not.  *
35800 2a 20 74 72 79 20 74 6f 20 72 65 75 73 65 20 72  * try to reuse r
35810 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 66  egister values f
35820 72 6f 6d 20 74 68 65 20 66 69 72 73 74 20 75 73  rom the first us
35830 65 2e 20 2a 2f 0a 20 20 7b 0a 20 20 20 20 69 6e  e. */.  {.    in
35840 74 20 69 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  t i;.    for(i=0
35850 3b 20 69 3c 70 2d 3e 6e 4d 65 6d 3b 20 69 2b 2b  ; i<p->nMem; i++
35860 29 7b 0a 20 20 20 20 20 20 61 4d 65 6d 5b 69 5d  ){.      aMem[i]
35870 2e 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20 30 3b  .pScopyFrom = 0;
35880 20 20 2f 2a 20 50 72 65 76 65 6e 74 20 66 61 6c    /* Prevent fal
35890 73 65 2d 70 6f 73 69 74 69 76 65 20 41 62 6f 75  se-positive Abou
358a0 74 54 6f 43 68 61 6e 67 65 28 29 20 65 72 72 73  tToChange() errs
358b0 20 2a 2f 0a 20 20 20 20 20 20 61 4d 65 6d 5b 69   */.      aMem[i
358c0 5d 2e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 55  ].flags |= MEM_U
358d0 6e 64 65 66 69 6e 65 64 3b 20 2f 2a 20 43 61 75  ndefined; /* Cau
358e0 73 65 20 61 20 66 61 75 6c 74 20 69 66 20 74 68  se a fault if th
358f0 69 73 20 72 65 67 20 69 73 20 72 65 75 73 65 64  is reg is reused
35900 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65   */.    }.  }.#e
35910 6e 64 69 66 0a 20 20 70 4f 70 20 3d 20 26 61 4f  ndif.  pOp = &aO
35920 70 5b 2d 31 5d 3b 0a 20 20 67 6f 74 6f 20 63 68  p[-1];.  goto ch
35930 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70  eck_for_interrup
35940 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  t;.}../* Opcode:
35950 20 50 61 72 61 6d 20 50 31 20 50 32 20 2a 20 2a   Param P1 P2 * *
35960 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70   *.**.** This op
35970 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 65 76 65  code is only eve
35980 72 20 70 72 65 73 65 6e 74 20 69 6e 20 73 75 62  r present in sub
35990 2d 70 72 6f 67 72 61 6d 73 20 63 61 6c 6c 65 64  -programs called
359a0 20 76 69 61 20 74 68 65 20 0a 2a 2a 20 4f 50 5f   via the .** OP_
359b0 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74  Program instruct
359c0 69 6f 6e 2e 20 43 6f 70 79 20 61 20 76 61 6c 75  ion. Copy a valu
359d0 65 20 63 75 72 72 65 6e 74 6c 79 20 73 74 6f 72  e currently stor
359e0 65 64 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 0a  ed in a memory .
359f0 2a 2a 20 63 65 6c 6c 20 6f 66 20 74 68 65 20 63  ** cell of the c
35a00 61 6c 6c 69 6e 67 20 28 70 61 72 65 6e 74 29 20  alling (parent) 
35a10 66 72 61 6d 65 20 74 6f 20 63 65 6c 6c 20 50 32  frame to cell P2
35a20 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20   in the current 
35a30 66 72 61 6d 65 73 20 0a 2a 2a 20 61 64 64 72 65  frames .** addre
35a40 73 73 20 73 70 61 63 65 2e 20 54 68 69 73 20 69  ss space. This i
35a50 73 20 75 73 65 64 20 62 79 20 74 72 69 67 67 65  s used by trigge
35a60 72 20 70 72 6f 67 72 61 6d 73 20 74 6f 20 61 63  r programs to ac
35a70 63 65 73 73 20 74 68 65 20 6e 65 77 2e 2a 20 0a  cess the new.* .
35a80 2a 2a 20 61 6e 64 20 6f 6c 64 2e 2a 20 76 61 6c  ** and old.* val
35a90 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61  ues..**.** The a
35aa0 64 64 72 65 73 73 20 6f 66 20 74 68 65 20 63 65  ddress of the ce
35ab0 6c 6c 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74  ll in the parent
35ac0 20 66 72 61 6d 65 20 69 73 20 64 65 74 65 72 6d   frame is determ
35ad0 69 6e 65 64 20 62 79 20 61 64 64 69 6e 67 0a 2a  ined by adding.*
35ae0 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  * the value of t
35af0 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74  he P1 argument t
35b00 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  o the value of t
35b10 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74  he P1 argument t
35b20 6f 20 74 68 65 0a 2a 2a 20 63 61 6c 6c 69 6e 67  o the.** calling
35b30 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74   OP_Program inst
35b40 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
35b50 20 4f 50 5f 50 61 72 61 6d 3a 20 7b 20 20 20 20   OP_Param: {    
35b60 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
35b70 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70  /.  VdbeFrame *p
35b80 46 72 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a 70 49  Frame;.  Mem *pI
35b90 6e 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  n;.  pOut = out2
35ba0 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
35bb0 70 29 3b 0a 20 20 70 46 72 61 6d 65 20 3d 20 70  p);.  pFrame = p
35bc0 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 49 6e 20  ->pFrame;.  pIn 
35bd0 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b  = &pFrame->aMem[
35be0 70 4f 70 2d 3e 70 31 20 2b 20 70 46 72 61 6d 65  pOp->p1 + pFrame
35bf0 2d 3e 61 4f 70 5b 70 46 72 61 6d 65 2d 3e 70 63  ->aOp[pFrame->pc
35c00 5d 2e 70 31 5d 3b 20 20 20 0a 20 20 73 71 6c 69  ].p1];   .  sqli
35c10 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f  te3VdbeMemShallo
35c20 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 2c  wCopy(pOut, pIn,
35c30 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 62   MEM_Ephem);.  b
35c40 72 65 61 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20  reak;.}..#endif 
35c50 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /* #ifndef SQLIT
35c60 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 2a  E_OMIT_TRIGGER *
35c70 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
35c80 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
35c90 45 59 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b  EY./* Opcode: Fk
35ca0 43 6f 75 6e 74 65 72 20 50 31 20 50 32 20 2a 20  Counter P1 P2 * 
35cb0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
35cc0 20 66 6b 63 74 72 5b 50 31 5d 2b 3d 50 32 0a 2a   fkctr[P1]+=P2.*
35cd0 2a 0a 2a 2a 20 49 6e 63 72 65 6d 65 6e 74 20 61  *.** Increment a
35ce0 20 22 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75   "constraint cou
35cf0 6e 74 65 72 22 20 62 79 20 50 32 20 28 50 32 20  nter" by P2 (P2 
35d00 6d 61 79 20 62 65 20 6e 65 67 61 74 69 76 65 20  may be negative 
35d10 6f 72 20 70 6f 73 69 74 69 76 65 29 2e 0a 2a 2a  or positive)..**
35d20 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65   If P1 is non-ze
35d30 72 6f 2c 20 74 68 65 20 64 61 74 61 62 61 73 65  ro, the database
35d40 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e   constraint coun
35d50 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  ter is increment
35d60 65 64 20 0a 2a 2a 20 28 64 65 66 65 72 72 65 64  ed .** (deferred
35d70 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
35d80 73 74 72 61 69 6e 74 73 29 2e 20 4f 74 68 65 72  straints). Other
35d90 77 69 73 65 2c 20 69 66 20 50 31 20 69 73 20 7a  wise, if P1 is z
35da0 65 72 6f 2c 20 74 68 65 20 0a 2a 2a 20 73 74 61  ero, the .** sta
35db0 74 65 6d 65 6e 74 20 63 6f 75 6e 74 65 72 20 69  tement counter i
35dc0 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 69  s incremented (i
35dd0 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e  mmediate foreign
35de0 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
35df0 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b  )..*/.case OP_Fk
35e00 43 6f 75 6e 74 65 72 3a 20 7b 0a 20 20 69 66 28  Counter: {.  if(
35e10 20 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c   db->flags & SQL
35e20 49 54 45 5f 44 65 66 65 72 46 4b 73 20 29 7b 0a  ITE_DeferFKs ){.
35e30 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65      db->nDeferre
35e40 64 49 6d 6d 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d  dImmCons += pOp-
35e50 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  >p2;.  }else if(
35e60 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20   pOp->p1 ){.    
35e70 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
35e80 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  s += pOp->p2;.  
35e90 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 6e 46  }else{.    p->nF
35ea0 6b 43 6f 6e 73 74 72 61 69 6e 74 20 2b 3d 20 70  kConstraint += p
35eb0 4f 70 2d 3e 70 32 3b 0a 20 20 7d 0a 20 20 62 72  Op->p2;.  }.  br
35ec0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
35ed0 65 3a 20 46 6b 49 66 5a 65 72 6f 20 50 31 20 50  e: FkIfZero P1 P
35ee0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
35ef0 73 69 73 3a 20 69 66 20 66 6b 63 74 72 5b 50 31  sis: if fkctr[P1
35f00 5d 3d 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  ]==0 goto P2.**.
35f10 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 74  ** This opcode t
35f20 65 73 74 73 20 69 66 20 61 20 66 6f 72 65 69 67  ests if a foreig
35f30 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
35f40 2d 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72  -counter is curr
35f50 65 6e 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49  ently zero..** I
35f60 66 20 73 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e  f so, jump to in
35f70 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74  struction P2. Ot
35f80 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68  herwise, fall th
35f90 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
35fa0 74 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f  t .** instructio
35fb0 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69  n..**.** If P1 i
35fc0 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
35fd0 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
35fe0 65 6e 20 69 66 20 74 68 65 20 64 61 74 61 62 61  en if the databa
35ff0 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f  se constraint-co
36000 75 6e 74 65 72 0a 2a 2a 20 69 73 20 7a 65 72 6f  unter.** is zero
36010 20 28 74 68 65 20 6f 6e 65 20 74 68 61 74 20 63   (the one that c
36020 6f 75 6e 74 73 20 64 65 66 65 72 72 65 64 20 63  ounts deferred c
36030 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
36040 69 6f 6e 73 29 2e 20 49 66 20 50 31 20 69 73 0a  ions). If P1 is.
36050 2a 2a 20 7a 65 72 6f 2c 20 74 68 65 20 6a 75 6d  ** zero, the jum
36060 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68  p is taken if th
36070 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e 73  e statement cons
36080 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69  traint-counter i
36090 73 20 7a 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64  s zero.** (immed
360a0 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  iate foreign key
360b0 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
360c0 61 74 69 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65  ations)..*/.case
360d0 20 4f 50 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b 20   OP_FkIfZero: { 
360e0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
360f0 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  */.  if( pOp->p1
36100 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e   ){.    VdbeBran
36110 63 68 54 61 6b 65 6e 28 64 62 2d 3e 6e 44 65 66  chTaken(db->nDef
36120 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20  erredCons==0 && 
36130 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
36140 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20 20 20  Cons==0, 2);.   
36150 20 69 66 28 20 64 62 2d 3e 6e 44 65 66 65 72 72   if( db->nDeferr
36160 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d  edCons==0 && db-
36170 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
36180 73 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70  s==0 ) goto jump
36190 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b  _to_p2;.  }else{
361a0 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
361b0 61 6b 65 6e 28 70 2d 3e 6e 46 6b 43 6f 6e 73 74  aken(p->nFkConst
361c0 72 61 69 6e 74 3d 3d 30 20 26 26 20 64 62 2d 3e  raint==0 && db->
361d0 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
361e0 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69 66 28  ==0, 2);.    if(
361f0 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e   p->nFkConstrain
36200 74 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66  t==0 && db->nDef
36210 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20  erredImmCons==0 
36220 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
36230 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
36240 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e  }.#endif /* #ifn
36250 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
36260 46 4f 52 45 49 47 4e 5f 4b 45 59 20 2a 2f 0a 0a  FOREIGN_KEY */..
36270 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
36280 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
36290 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 65 6d  T./* Opcode: Mem
362a0 4d 61 78 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Max P1 P2 * * *.
362b0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
362c0 31 5d 3d 6d 61 78 28 72 5b 50 31 5d 2c 72 5b 50  1]=max(r[P1],r[P
362d0 32 5d 29 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  2]).**.** P1 is 
362e0 61 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 68  a register in th
362f0 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20  e root frame of 
36300 74 68 69 73 20 56 4d 20 28 74 68 65 20 72 6f 6f  this VM (the roo
36310 74 20 66 72 61 6d 65 20 69 73 0a 2a 2a 20 64 69  t frame is.** di
36320 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 74 68 65  fferent from the
36330 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65 20 69   current frame i
36340 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  f this instructi
36350 6f 6e 20 69 73 20 62 65 69 6e 67 20 65 78 65 63  on is being exec
36360 75 74 65 64 0a 2a 2a 20 77 69 74 68 69 6e 20 61  uted.** within a
36370 20 73 75 62 2d 70 72 6f 67 72 61 6d 29 2e 20 53   sub-program). S
36380 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  et the value of 
36390 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 74  register P1 to t
363a0 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 0a 2a  he maximum of .*
363b0 2a 20 69 74 73 20 63 75 72 72 65 6e 74 20 76 61  * its current va
363c0 6c 75 65 20 61 6e 64 20 74 68 65 20 76 61 6c 75  lue and the valu
363d0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
363e0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ..**.** This ins
363f0 74 72 75 63 74 69 6f 6e 20 74 68 72 6f 77 73 20  truction throws 
36400 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68 65 20  an error if the 
36410 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 73 20 6e  memory cell is n
36420 6f 74 20 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20  ot initially.** 
36430 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63  an integer..*/.c
36440 61 73 65 20 4f 50 5f 4d 65 6d 4d 61 78 3a 20 7b  ase OP_MemMax: {
36450 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a          /* in2 *
36460 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70  /.  VdbeFrame *p
36470 46 72 61 6d 65 3b 0a 20 20 69 66 28 20 70 2d 3e  Frame;.  if( p->
36480 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 66 6f  pFrame ){.    fo
36490 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61  r(pFrame=p->pFra
364a0 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72  me; pFrame->pPar
364b0 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61  ent; pFrame=pFra
364c0 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20  me->pParent);.  
364d0 20 20 70 49 6e 31 20 3d 20 26 70 46 72 61 6d 65    pIn1 = &pFrame
364e0 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b  ->aMem[pOp->p1];
364f0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49  .  }else{.    pI
36500 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
36510 70 31 5d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  p1];.  }.  asser
36520 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49  t( memIsValid(pI
36530 6e 31 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  n1) );.  sqlite3
36540 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
36550 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20  y(pIn1);.  pIn2 
36560 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
36570 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
36580 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
36590 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  2);.  if( pIn1->
365a0 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69 29 7b 0a  u.i<pIn2->u.i){.
365b0 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20      pIn1->u.i = 
365c0 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20  pIn2->u.i;.  }. 
365d0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
365e0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
365f0 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f  AUTOINCREMENT */
36600 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 50  ../* Opcode: IfP
36610 6f 73 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  os P1 P2 P3 * *.
36620 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
36630 72 5b 50 31 5d 3e 30 20 74 68 65 6e 20 72 5b 50  r[P1]>0 then r[P
36640 31 5d 2d 3d 50 33 2c 20 67 6f 74 6f 20 50 32 0a  1]-=P3, goto P2.
36650 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50  **.** Register P
36660 31 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 61  1 must contain a
36670 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 20 49 66  n integer..** If
36680 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65   the value of re
36690 67 69 73 74 65 72 20 50 31 20 69 73 20 31 20 6f  gister P1 is 1 o
366a0 72 20 67 72 65 61 74 65 72 2c 20 73 75 62 74 72  r greater, subtr
366b0 61 63 74 20 50 33 20 66 72 6f 6d 20 74 68 65 0a  act P3 from the.
366c0 2a 2a 20 76 61 6c 75 65 20 69 6e 20 50 31 20 61  ** value in P1 a
366d0 6e 64 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  nd jump to P2..*
366e0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 69 6e 69 74  *.** If the init
366f0 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 72 65 67  ial value of reg
36700 69 73 74 65 72 20 50 31 20 69 73 20 6c 65 73 73  ister P1 is less
36710 20 74 68 61 6e 20 31 2c 20 74 68 65 6e 20 74 68   than 1, then th
36720 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 75 6e  e.** value is un
36730 63 68 61 6e 67 65 64 20 61 6e 64 20 63 6f 6e 74  changed and cont
36740 72 6f 6c 20 70 61 73 73 65 73 20 74 68 72 6f 75  rol passes throu
36750 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
36760 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  nstruction..*/.c
36770 61 73 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20  ase OP_IfPos: { 
36780 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
36790 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
367a0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
367b0 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
367c0 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b  flags&MEM_Int );
367d0 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
367e0 65 6e 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 2c  en( pIn1->u.i>0,
367f0 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d   2);.  if( pIn1-
36800 3e 75 2e 69 3e 30 20 29 7b 0a 20 20 20 20 70 49  >u.i>0 ){.    pI
36810 6e 31 2d 3e 75 2e 69 20 2d 3d 20 70 4f 70 2d 3e  n1->u.i -= pOp->
36820 70 33 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d  p3;.    goto jum
36830 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62  p_to_p2;.  }.  b
36840 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
36850 64 65 3a 20 4f 66 66 73 65 74 4c 69 6d 69 74 20  de: OffsetLimit 
36860 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
36870 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
36880 31 5d 3e 30 20 74 68 65 6e 20 72 5b 50 32 5d 3d  1]>0 then r[P2]=
36890 72 5b 50 31 5d 2b 6d 61 78 28 30 2c 72 5b 50 33  r[P1]+max(0,r[P3
368a0 5d 29 20 65 6c 73 65 20 72 5b 50 32 5d 3d 28 2d  ]) else r[P2]=(-
368b0 31 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  1).**.** This op
368c0 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 61 20  code performs a 
368d0 63 6f 6d 6d 6f 6e 6c 79 20 75 73 65 64 20 63 6f  commonly used co
368e0 6d 70 75 74 61 74 69 6f 6e 20 61 73 73 6f 63 69  mputation associ
368f0 61 74 65 64 20 77 69 74 68 0a 2a 2a 20 4c 49 4d  ated with.** LIM
36900 49 54 20 61 6e 64 20 4f 46 46 53 45 54 20 70 72  IT and OFFSET pr
36910 6f 63 65 73 73 2e 20 20 72 5b 50 31 5d 20 68 6f  ocess.  r[P1] ho
36920 6c 64 73 20 74 68 65 20 6c 69 6d 69 74 20 63 6f  lds the limit co
36930 75 6e 74 65 72 2e 20 20 72 5b 50 33 5d 0a 2a 2a  unter.  r[P3].**
36940 20 68 6f 6c 64 73 20 74 68 65 20 6f 66 66 73 65   holds the offse
36950 74 20 63 6f 75 6e 74 65 72 2e 20 20 54 68 65 20  t counter.  The 
36960 6f 70 63 6f 64 65 20 63 6f 6d 70 75 74 65 73 20  opcode computes 
36970 74 68 65 20 63 6f 6d 62 69 6e 65 64 20 76 61 6c  the combined val
36980 75 65 0a 2a 2a 20 6f 66 20 74 68 65 20 4c 49 4d  ue.** of the LIM
36990 49 54 20 61 6e 64 20 4f 46 46 53 45 54 20 61 6e  IT and OFFSET an
369a0 64 20 73 74 6f 72 65 73 20 74 68 61 74 20 76 61  d stores that va
369b0 6c 75 65 20 69 6e 20 72 5b 50 32 5d 2e 20 20 54  lue in r[P2].  T
369c0 68 65 20 72 5b 50 32 5d 0a 2a 2a 20 76 61 6c 75  he r[P2].** valu
369d0 65 20 63 6f 6d 70 75 74 65 64 20 69 73 20 74 68  e computed is th
369e0 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  e total number o
369f0 66 20 72 6f 77 73 20 74 68 61 74 20 77 69 6c 6c  f rows that will
36a00 20 6e 65 65 64 20 74 6f 20 62 65 0a 2a 2a 20 76   need to be.** v
36a10 69 73 69 74 65 64 20 69 6e 20 6f 72 64 65 72 20  isited in order 
36a20 74 6f 20 63 6f 6d 70 6c 65 74 65 20 74 68 65 20  to complete the 
36a30 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  query..**.** If 
36a40 72 5b 50 33 5d 20 69 73 20 7a 65 72 6f 20 6f 72  r[P3] is zero or
36a50 20 6e 65 67 61 74 69 76 65 2c 20 74 68 61 74 20   negative, that 
36a60 6d 65 61 6e 73 20 74 68 65 72 65 20 69 73 20 6e  means there is n
36a70 6f 20 4f 46 46 53 45 54 0a 2a 2a 20 61 6e 64 20  o OFFSET.** and 
36a80 72 5b 50 32 5d 20 69 73 20 73 65 74 20 74 6f 20  r[P2] is set to 
36a90 62 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  be the value of 
36aa0 74 68 65 20 4c 49 4d 49 54 2c 20 72 5b 50 31 5d  the LIMIT, r[P1]
36ab0 2e 0a 2a 2a 0a 2a 2a 20 69 66 20 72 5b 50 31 5d  ..**.** if r[P1]
36ac0 20 69 73 20 7a 65 72 6f 20 6f 72 20 6e 65 67 61   is zero or nega
36ad0 74 69 76 65 2c 20 74 68 61 74 20 6d 65 61 6e 73  tive, that means
36ae0 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d   there is no LIM
36af0 49 54 0a 2a 2a 20 61 6e 64 20 72 5b 50 32 5d 20  IT.** and r[P2] 
36b00 69 73 20 73 65 74 20 74 6f 20 2d 31 2e 20 0a 2a  is set to -1. .*
36b10 2a 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20  *.** Otherwise, 
36b20 72 5b 50 32 5d 20 69 73 20 73 65 74 20 74 6f 20  r[P2] is set to 
36b30 74 68 65 20 73 75 6d 20 6f 66 20 72 5b 50 31 5d  the sum of r[P1]
36b40 20 61 6e 64 20 72 5b 50 33 5d 2e 0a 2a 2f 0a 63   and r[P3]..*/.c
36b50 61 73 65 20 4f 50 5f 4f 66 66 73 65 74 4c 69 6d  ase OP_OffsetLim
36b60 69 74 3a 20 7b 20 20 20 20 2f 2a 20 69 6e 31 2c  it: {    /* in1,
36b70 20 6f 75 74 32 2c 20 69 6e 33 20 2a 2f 0a 20 20   out2, in3 */.  
36b80 69 36 34 20 78 3b 0a 20 20 70 49 6e 31 20 3d 20  i64 x;.  pIn1 = 
36b90 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
36ba0 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
36bb0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 4f 75 74 20  Op->p3];.  pOut 
36bc0 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
36bd0 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65  (p, pOp);.  asse
36be0 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  rt( pIn1->flags 
36bf0 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61  & MEM_Int );.  a
36c00 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61  ssert( pIn3->fla
36c10 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a  gs & MEM_Int );.
36c20 20 20 78 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b    x = pIn1->u.i;
36c30 0a 20 20 69 66 28 20 78 3c 3d 30 20 7c 7c 20 73  .  if( x<=0 || s
36c40 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 26  qlite3AddInt64(&
36c50 78 2c 20 70 49 6e 33 2d 3e 75 2e 69 3e 30 3f 70  x, pIn3->u.i>0?p
36c60 49 6e 33 2d 3e 75 2e 69 3a 30 29 20 29 7b 0a 20  In3->u.i:0) ){. 
36c70 20 20 20 2f 2a 20 49 66 20 74 68 65 20 4c 49 4d     /* If the LIM
36c80 49 54 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  IT is less than 
36c90 6f 72 20 65 71 75 61 6c 20 74 6f 20 7a 65 72 6f  or equal to zero
36ca0 2c 20 6c 6f 6f 70 20 66 6f 72 65 76 65 72 2e 20  , loop forever. 
36cb0 20 54 68 69 73 0a 20 20 20 20 2a 2a 20 69 73 20   This.    ** is 
36cc0 64 6f 63 75 6d 65 6e 74 65 64 2e 20 20 42 75 74  documented.  But
36cd0 20 61 6c 73 6f 2c 20 69 66 20 74 68 65 20 4c 49   also, if the LI
36ce0 4d 49 54 2b 4f 46 46 53 45 54 20 65 78 63 65 65  MIT+OFFSET excee
36cf0 64 73 20 32 5e 36 33 20 74 68 65 6e 0a 20 20 20  ds 2^63 then.   
36d00 20 2a 2a 20 61 6c 73 6f 20 6c 6f 6f 70 20 66 6f   ** also loop fo
36d10 72 65 76 65 72 2e 20 20 54 68 69 73 20 69 73 20  rever.  This is 
36d20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 2e 20 20 49  undocumented.  I
36d30 6e 20 66 61 63 74 2c 20 6f 6e 65 20 63 6f 75 6c  n fact, one coul
36d40 64 20 61 72 67 75 65 0a 20 20 20 20 2a 2a 20 74  d argue.    ** t
36d50 68 61 74 20 74 68 65 20 6c 6f 6f 70 20 73 68 6f  hat the loop sho
36d60 75 6c 64 20 74 65 72 6d 69 6e 61 74 65 2e 20 20  uld terminate.  
36d70 42 75 74 20 61 73 73 75 6d 69 6e 67 20 31 20 62  But assuming 1 b
36d80 69 6c 6c 69 6f 6e 20 69 74 65 72 61 74 69 6f 6e  illion iteration
36d90 73 0a 20 20 20 20 2a 2a 20 70 65 72 20 73 65 63  s.    ** per sec
36da0 6f 6e 64 20 28 66 61 72 20 65 78 63 65 65 64 69  ond (far exceedi
36db0 6e 67 20 74 68 65 20 63 61 70 61 62 69 6c 69 74  ng the capabilit
36dc0 69 65 73 20 6f 66 20 61 6e 79 20 63 75 72 72 65  ies of any curre
36dd0 6e 74 20 68 61 72 64 77 61 72 65 29 0a 20 20 20  nt hardware).   
36de0 20 2a 2a 20 69 74 20 77 6f 75 6c 64 20 74 61 6b   ** it would tak
36df0 65 20 6e 65 61 72 6c 79 20 33 30 30 20 79 65 61  e nearly 300 yea
36e00 72 73 20 74 6f 20 61 63 74 75 61 6c 6c 79 20 72  rs to actually r
36e10 65 61 63 68 20 74 68 65 20 6c 69 6d 69 74 2e 20  each the limit. 
36e20 20 53 6f 0a 20 20 20 20 2a 2a 20 6c 6f 6f 70 69   So.    ** loopi
36e30 6e 67 20 66 6f 72 65 76 65 72 20 69 73 20 61 20  ng forever is a 
36e40 72 65 61 73 6f 6e 61 62 6c 65 20 61 70 70 72 6f  reasonable appro
36e50 78 69 6d 61 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20  ximation. */.   
36e60 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 2d 31 3b   pOut->u.i = -1;
36e70 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f  .  }else{.    pO
36e80 75 74 2d 3e 75 2e 69 20 3d 20 78 3b 0a 20 20 7d  ut->u.i = x;.  }
36e90 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
36ea0 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74 5a 65 72  Opcode: IfNotZer
36eb0 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  o P1 P2 * * *.**
36ec0 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b   Synopsis: if r[
36ed0 50 31 5d 21 3d 30 20 74 68 65 6e 20 72 5b 50 31  P1]!=0 then r[P1
36ee0 5d 2d 2d 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  ]--, goto P2.**.
36ef0 2a 2a 20 52 65 67 69 73 74 65 72 20 50 31 20 6d  ** Register P1 m
36f00 75 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69  ust contain an i
36f10 6e 74 65 67 65 72 2e 20 20 49 66 20 74 68 65 20  nteger.  If the 
36f20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
36f30 74 65 72 20 50 31 20 69 73 0a 2a 2a 20 69 6e 69  ter P1 is.** ini
36f40 74 69 61 6c 6c 79 20 67 72 65 61 74 65 72 20 74  tially greater t
36f50 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 64  han zero, then d
36f60 65 63 72 65 6d 65 6e 74 20 74 68 65 20 76 61 6c  ecrement the val
36f70 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
36f80 31 2e 0a 2a 2a 20 49 66 20 69 74 20 69 73 20 6e  1..** If it is n
36f90 6f 6e 2d 7a 65 72 6f 20 28 6e 65 67 61 74 69 76  on-zero (negativ
36fa0 65 20 6f 72 20 70 6f 73 69 74 69 76 65 29 20 61  e or positive) a
36fb0 6e 64 20 74 68 65 6e 20 61 6c 73 6f 20 6a 75 6d  nd then also jum
36fc0 70 20 74 6f 20 50 32 2e 20 20 0a 2a 2a 20 49 66  p to P2.  .** If
36fd0 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
36fe0 69 6e 69 74 69 61 6c 6c 79 20 7a 65 72 6f 2c 20  initially zero, 
36ff0 6c 65 61 76 65 20 69 74 20 75 6e 63 68 61 6e 67  leave it unchang
37000 65 64 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f  ed and fall thro
37010 75 67 68 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ugh..*/.case OP_
37020 49 66 4e 6f 74 5a 65 72 6f 3a 20 7b 20 20 20 20  IfNotZero: {    
37030 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
37040 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
37050 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
37060 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
37070 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  gs&MEM_Int );.  
37080 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
37090 70 49 6e 31 2d 3e 75 2e 69 3c 30 2c 20 32 29 3b  pIn1->u.i<0, 2);
370a0 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69  .  if( pIn1->u.i
370b0 20 29 7b 0a 20 20 20 20 20 69 66 28 20 70 49 6e   ){.     if( pIn
370c0 31 2d 3e 75 2e 69 3e 30 20 29 20 70 49 6e 31 2d  1->u.i>0 ) pIn1-
370d0 3e 75 2e 69 2d 2d 3b 0a 20 20 20 20 20 67 6f 74  >u.i--;.     got
370e0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
370f0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
37100 20 4f 70 63 6f 64 65 3a 20 44 65 63 72 4a 75 6d   Opcode: DecrJum
37110 70 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20  pZero P1 P2 * * 
37120 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
37130 66 20 28 2d 2d 72 5b 50 31 5d 29 3d 3d 30 20 67  f (--r[P1])==0 g
37140 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67  oto P2.**.** Reg
37150 69 73 74 65 72 20 50 31 20 6d 75 73 74 20 68 6f  ister P1 must ho
37160 6c 64 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  ld an integer.  
37170 44 65 63 72 65 6d 65 6e 74 20 74 68 65 20 76 61  Decrement the va
37180 6c 75 65 20 69 6e 20 50 31 0a 2a 2a 20 61 6e 64  lue in P1.** and
37190 20 6a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   jump to P2 if t
371a0 68 65 20 6e 65 77 20 76 61 6c 75 65 20 69 73 20  he new value is 
371b0 65 78 61 63 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2f  exactly zero..*/
371c0 0a 63 61 73 65 20 4f 50 5f 44 65 63 72 4a 75 6d  .case OP_DecrJum
371d0 70 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 2f 2a  pZero: {      /*
371e0 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
371f0 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
37200 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
37210 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn1->flags&MEM
37220 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49  _Int );.  if( pI
37230 6e 31 2d 3e 75 2e 69 3e 53 4d 41 4c 4c 45 53 54  n1->u.i>SMALLEST
37240 5f 49 4e 54 36 34 20 29 20 70 49 6e 31 2d 3e 75  _INT64 ) pIn1->u
37250 2e 69 2d 2d 3b 0a 20 20 56 64 62 65 42 72 61 6e  .i--;.  VdbeBran
37260 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e  chTaken(pIn1->u.
37270 69 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20  i==0, 2);.  if( 
37280 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 20 67  pIn1->u.i==0 ) g
37290 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
372a0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20    break;.}.../* 
372b0 4f 70 63 6f 64 65 3a 20 41 67 67 53 74 65 70 20  Opcode: AggStep 
372c0 2a 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  * P2 P3 P4 P5.**
372d0 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d   Synopsis: accum
372e0 3d 72 5b 50 33 5d 20 73 74 65 70 28 72 5b 50 32  =r[P3] step(r[P2
372f0 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63  @P5]).**.** Exec
37300 75 74 65 20 74 68 65 20 78 53 74 65 70 20 66 75  ute the xStep fu
37310 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67  nction for an ag
37320 67 72 65 67 61 74 65 2e 0a 2a 2a 20 54 68 65 20  gregate..** The 
37330 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20  function has P5 
37340 61 72 67 75 6d 65 6e 74 73 2e 20 20 50 34 20 69  arguments.  P4 i
37350 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
37360 68 65 20 0a 2a 2a 20 46 75 6e 63 44 65 66 20 73  he .** FuncDef s
37370 74 72 75 63 74 75 72 65 20 74 68 61 74 20 73 70  tructure that sp
37380 65 63 69 66 69 65 73 20 74 68 65 20 66 75 6e 63  ecifies the func
37390 74 69 6f 6e 2e 20 20 52 65 67 69 73 74 65 72 20  tion.  Register 
373a0 50 33 20 69 73 20 74 68 65 0a 2a 2a 20 61 63 63  P3 is the.** acc
373b0 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20  umulator..**.** 
373c0 54 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74 73  The P5 arguments
373d0 20 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20   are taken from 
373e0 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20  register P2 and 
373f0 69 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72  its.** successor
37400 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  s..*/./* Opcode:
37410 20 41 67 67 49 6e 76 65 72 73 65 20 2a 20 50 32   AggInverse * P2
37420 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
37430 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50  opsis: accum=r[P
37440 33 5d 20 69 6e 76 65 72 73 65 28 72 5b 50 32 40  3] inverse(r[P2@
37450 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75  P5]).**.** Execu
37460 74 65 20 74 68 65 20 78 49 6e 76 65 72 73 65 20  te the xInverse 
37470 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20  function for an 
37480 61 67 67 72 65 67 61 74 65 2e 0a 2a 2a 20 54 68  aggregate..** Th
37490 65 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50  e function has P
374a0 35 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 50 34  5 arguments.  P4
374b0 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
374c0 20 74 68 65 20 0a 2a 2a 20 46 75 6e 63 44 65 66   the .** FuncDef
374d0 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20   structure that 
374e0 73 70 65 63 69 66 69 65 73 20 74 68 65 20 66 75  specifies the fu
374f0 6e 63 74 69 6f 6e 2e 20 20 52 65 67 69 73 74 65  nction.  Registe
37500 72 20 50 33 20 69 73 20 74 68 65 0a 2a 2a 20 61  r P3 is the.** a
37510 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a  ccumulator..**.*
37520 2a 20 54 68 65 20 50 35 20 61 72 67 75 6d 65 6e  * The P5 argumen
37530 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66 72 6f  ts are taken fro
37540 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  m register P2 an
37550 64 20 69 74 73 0a 2a 2a 20 73 75 63 63 65 73 73  d its.** success
37560 6f 72 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ors..*/./* Opcod
37570 65 3a 20 41 67 67 53 74 65 70 31 20 50 31 20 50  e: AggStep1 P1 P
37580 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
37590 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b  nopsis: accum=r[
375a0 50 33 5d 20 73 74 65 70 28 72 5b 50 32 40 50 35  P3] step(r[P2@P5
375b0 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65  ]).**.** Execute
375c0 20 74 68 65 20 78 53 74 65 70 20 28 69 66 20 50   the xStep (if P
375d0 31 3d 3d 30 29 20 6f 72 20 78 49 6e 76 65 72 73  1==0) or xInvers
375e0 65 20 28 69 66 20 50 31 21 3d 30 29 20 66 75 6e  e (if P1!=0) fun
375f0 63 74 69 6f 6e 20 66 6f 72 20 61 6e 0a 2a 2a 20  ction for an.** 
37600 61 67 67 72 65 67 61 74 65 2e 20 20 54 68 65 20  aggregate.  The 
37610 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20  function has P5 
37620 61 72 67 75 6d 65 6e 74 73 2e 20 20 50 34 20 69  arguments.  P4 i
37630 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
37640 68 65 20 0a 2a 2a 20 46 75 6e 63 44 65 66 20 73  he .** FuncDef s
37650 74 72 75 63 74 75 72 65 20 74 68 61 74 20 73 70  tructure that sp
37660 65 63 69 66 69 65 73 20 74 68 65 20 66 75 6e 63  ecifies the func
37670 74 69 6f 6e 2e 20 20 52 65 67 69 73 74 65 72 20  tion.  Register 
37680 50 33 20 69 73 20 74 68 65 0a 2a 2a 20 61 63 63  P3 is the.** acc
37690 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20  umulator..**.** 
376a0 54 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74 73  The P5 arguments
376b0 20 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20   are taken from 
376c0 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20  register P2 and 
376d0 69 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72  its.** successor
376e0 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  s..**.** This op
376f0 63 6f 64 65 20 69 73 20 69 6e 69 74 69 61 6c 6c  code is initiall
37700 79 20 63 6f 64 65 64 20 61 73 20 4f 50 5f 41 67  y coded as OP_Ag
37710 67 53 74 65 70 30 2e 20 20 4f 6e 20 66 69 72 73  gStep0.  On firs
37720 74 20 65 76 61 6c 75 61 74 69 6f 6e 2c 0a 2a 2a  t evaluation,.**
37730 20 74 68 65 20 46 75 6e 63 44 65 66 20 73 74 6f   the FuncDef sto
37740 72 65 64 20 69 6e 20 50 34 20 69 73 20 63 6f 6e  red in P4 is con
37750 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 73  verted into an s
37760 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 61  qlite3_context a
37770 6e 64 0a 2a 2a 20 74 68 65 20 6f 70 63 6f 64 65  nd.** the opcode
37780 20 69 73 20 63 68 61 6e 67 65 64 2e 20 20 49 6e   is changed.  In
37790 20 74 68 69 73 20 77 61 79 2c 20 74 68 65 20 69   this way, the i
377a0 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 6f 66  nitialization of
377b0 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f   the.** sqlite3_
377c0 63 6f 6e 74 65 78 74 20 6f 6e 6c 79 20 68 61 70  context only hap
377d0 70 65 6e 73 20 6f 6e 63 65 2c 20 69 6e 73 74 65  pens once, inste
377e0 61 64 20 6f 66 20 6f 6e 20 65 61 63 68 20 63 61  ad of on each ca
377f0 6c 6c 20 74 6f 20 74 68 65 0a 2a 2a 20 73 74 65  ll to the.** ste
37800 70 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  p function..*/.c
37810 61 73 65 20 4f 50 5f 41 67 67 49 6e 76 65 72 73  ase OP_AggInvers
37820 65 3a 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74  e:.case OP_AggSt
37830 65 70 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20  ep: {.  int n;. 
37840 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
37850 20 2a 70 43 74 78 3b 0a 0a 20 20 61 73 73 65 72   *pCtx;..  asser
37860 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
37870 50 34 5f 46 55 4e 43 44 45 46 20 29 3b 0a 20 20  P4_FUNCDEF );.  
37880 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61  n = pOp->p5;.  a
37890 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
378a0 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d   && pOp->p3<=(p-
378b0 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
378c0 72 73 6f 72 29 20 29 3b 0a 20 20 61 73 73 65 72  rsor) );.  asser
378d0 74 28 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d  t( n==0 || (pOp-
378e0 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  >p2>0 && pOp->p2
378f0 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  +n<=(p->nMem+1 -
37900 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 29 20   p->nCursor)+1) 
37910 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
37920 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20  ->p3<pOp->p2 || 
37930 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32  pOp->p3>=pOp->p2
37940 2b 6e 20 29 3b 0a 20 20 70 43 74 78 20 3d 20 73  +n );.  pCtx = s
37950 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
37960 77 4e 4e 28 64 62 2c 20 6e 2a 73 69 7a 65 6f 66  wNN(db, n*sizeof
37970 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29  (sqlite3_value*)
37980 20 2b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   +.             
37990 20 20 28 73 69 7a 65 6f 66 28 70 43 74 78 5b 30    (sizeof(pCtx[0
379a0 5d 29 20 2b 20 73 69 7a 65 6f 66 28 4d 65 6d 29  ]) + sizeof(Mem)
379b0 20 2d 20 73 69 7a 65 6f 66 28 73 71 6c 69 74 65   - sizeof(sqlite
379c0 33 5f 76 61 6c 75 65 2a 29 29 29 3b 0a 20 20 69  3_value*)));.  i
379d0 66 28 20 70 43 74 78 3d 3d 30 20 29 20 67 6f 74  f( pCtx==0 ) got
379e0 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 74 78  o no_mem;.  pCtx
379f0 2d 3e 70 4d 65 6d 20 3d 20 30 3b 0a 20 20 70 43  ->pMem = 0;.  pC
37a00 74 78 2d 3e 70 4f 75 74 20 3d 20 28 4d 65 6d 2a  tx->pOut = (Mem*
37a10 29 26 28 70 43 74 78 2d 3e 61 72 67 76 5b 6e 5d  )&(pCtx->argv[n]
37a20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
37a30 4d 65 6d 49 6e 69 74 28 70 43 74 78 2d 3e 70 4f  MemInit(pCtx->pO
37a40 75 74 2c 20 64 62 2c 20 4d 45 4d 5f 4e 75 6c 6c  ut, db, MEM_Null
37a50 29 3b 0a 20 20 70 43 74 78 2d 3e 70 46 75 6e 63  );.  pCtx->pFunc
37a60 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63   = pOp->p4.pFunc
37a70 3b 0a 20 20 70 43 74 78 2d 3e 69 4f 70 20 3d 20  ;.  pCtx->iOp = 
37a80 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
37a90 3b 0a 20 20 70 43 74 78 2d 3e 70 56 64 62 65 20  ;.  pCtx->pVdbe 
37aa0 3d 20 70 3b 0a 20 20 70 43 74 78 2d 3e 73 6b 69  = p;.  pCtx->ski
37ab0 70 46 6c 61 67 20 3d 20 30 3b 0a 20 20 70 43 74  pFlag = 0;.  pCt
37ac0 78 2d 3e 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a  x->isError = 0;.
37ad0 20 20 70 43 74 78 2d 3e 61 72 67 63 20 3d 20 6e    pCtx->argc = n
37ae0 3b 0a 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20  ;.  pOp->p4type 
37af0 3d 20 50 34 5f 46 55 4e 43 43 54 58 3b 0a 20 20  = P4_FUNCCTX;.  
37b00 70 4f 70 2d 3e 70 34 2e 70 43 74 78 20 3d 20 70  pOp->p4.pCtx = p
37b10 43 74 78 3b 0a 0a 20 20 2f 2a 20 4f 50 5f 41 67  Ctx;..  /* OP_Ag
37b20 67 49 6e 76 65 72 73 65 20 6d 75 73 74 20 68 61  gInverse must ha
37b30 76 65 20 50 31 3d 3d 31 20 61 6e 64 20 4f 50 5f  ve P1==1 and OP_
37b40 41 67 67 53 74 65 70 20 6d 75 73 74 20 68 61 76  AggStep must hav
37b50 65 20 50 31 3d 3d 30 20 2a 2f 0a 20 20 61 73 73  e P1==0 */.  ass
37b60 65 72 74 28 20 70 4f 70 2d 3e 70 31 3d 3d 28 70  ert( pOp->p1==(p
37b70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41  Op->opcode==OP_A
37b80 67 67 49 6e 76 65 72 73 65 29 20 29 3b 0a 0a 20  ggInverse) );.. 
37b90 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f   pOp->opcode = O
37ba0 50 5f 41 67 67 53 74 65 70 31 3b 0a 20 20 2f 2a  P_AggStep1;.  /*
37bb0 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e   Fall through in
37bc0 74 6f 20 4f 50 5f 41 67 67 53 74 65 70 20 2a 2f  to OP_AggStep */
37bd0 0a 7d 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74  .}.case OP_AggSt
37be0 65 70 31 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a  ep1: {.  int i;.
37bf0 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
37c00 74 20 2a 70 43 74 78 3b 0a 20 20 4d 65 6d 20 2a  t *pCtx;.  Mem *
37c10 70 4d 65 6d 3b 0a 0a 20 20 61 73 73 65 72 74 28  pMem;..  assert(
37c20 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
37c30 5f 46 55 4e 43 43 54 58 20 29 3b 0a 20 20 70 43  _FUNCCTX );.  pC
37c40 74 78 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 43 74  tx = pOp->p4.pCt
37c50 78 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65  x;.  pMem = &aMe
37c60 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 0a 23 69 66  m[pOp->p3];..#if
37c70 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
37c80 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29  .  if( pOp->p1 )
37c90 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73  {.    /* This is
37ca0 20 61 6e 20 4f 50 5f 41 67 67 49 6e 76 65 72 73   an OP_AggInvers
37cb0 65 20 63 61 6c 6c 2e 20 20 56 65 72 69 66 79 20  e call.  Verify 
37cc0 74 68 61 74 20 78 53 74 65 70 20 68 61 73 20 61  that xStep has a
37cd0 6c 77 61 79 73 0a 20 20 20 20 2a 2a 20 62 65 65  lways.    ** bee
37ce0 6e 20 63 61 6c 6c 65 64 20 61 74 20 6c 65 61 73  n called at leas
37cf0 74 20 6f 6e 63 65 20 70 72 69 6f 72 20 74 6f 20  t once prior to 
37d00 61 6e 79 20 78 49 6e 76 65 72 73 65 20 63 61 6c  any xInverse cal
37d10 6c 2e 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74  l. */.    assert
37d20 28 20 70 4d 65 6d 2d 3e 75 54 65 6d 70 3d 3d 30  ( pMem->uTemp==0
37d30 78 31 31 32 32 65 30 65 33 20 29 3b 0a 20 20 7d  x1122e0e3 );.  }
37d40 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68 69  else{.    /* Thi
37d50 73 20 69 73 20 61 6e 20 4f 50 5f 41 67 67 53 74  s is an OP_AggSt
37d60 65 70 20 63 61 6c 6c 2e 20 20 4d 61 72 6b 20 69  ep call.  Mark i
37d70 74 20 61 73 20 73 75 63 68 2e 20 2a 2f 0a 20 20  t as such. */.  
37d80 20 20 70 4d 65 6d 2d 3e 75 54 65 6d 70 20 3d 20    pMem->uTemp = 
37d90 30 78 31 31 32 32 65 30 65 33 3b 0a 20 20 7d 0a  0x1122e0e3;.  }.
37da0 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 49 66 20  #endif..  /* If 
37db0 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73  this function is
37dc0 20 69 6e 73 69 64 65 20 6f 66 20 61 20 74 72 69   inside of a tri
37dd0 67 67 65 72 2c 20 74 68 65 20 72 65 67 69 73 74  gger, the regist
37de0 65 72 20 61 72 72 61 79 20 69 6e 20 61 4d 65 6d  er array in aMem
37df0 5b 5d 0a 20 20 2a 2a 20 6d 69 67 68 74 20 63 68  [].  ** might ch
37e00 61 6e 67 65 20 66 72 6f 6d 20 6f 6e 65 20 65 76  ange from one ev
37e10 61 6c 75 61 74 69 6f 6e 20 74 6f 20 74 68 65 20  aluation to the 
37e20 6e 65 78 74 2e 20 20 54 68 65 20 6e 65 78 74 20  next.  The next 
37e30 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 0a 20 20  block of code.  
37e40 2a 2a 20 63 68 65 63 6b 73 20 74 6f 20 73 65 65  ** checks to see
37e50 20 69 66 20 74 68 65 20 72 65 67 69 73 74 65 72   if the register
37e60 20 61 72 72 61 79 20 68 61 73 20 63 68 61 6e 67   array has chang
37e70 65 64 2c 20 61 6e 64 20 69 66 20 73 6f 20 69 74  ed, and if so it
37e80 0a 20 20 2a 2a 20 72 65 69 6e 69 74 69 61 6c 69  .  ** reinitiali
37e90 7a 65 73 20 74 68 65 20 72 65 6c 61 76 61 6e 74  zes the relavant
37ea0 20 70 61 72 74 73 20 6f 66 20 74 68 65 20 73 71   parts of the sq
37eb0 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62  lite3_context ob
37ec0 6a 65 63 74 20 2a 2f 0a 20 20 69 66 28 20 70 43  ject */.  if( pC
37ed0 74 78 2d 3e 70 4d 65 6d 20 21 3d 20 70 4d 65 6d  tx->pMem != pMem
37ee0 20 29 7b 0a 20 20 20 20 70 43 74 78 2d 3e 70 4d   ){.    pCtx->pM
37ef0 65 6d 20 3d 20 70 4d 65 6d 3b 0a 20 20 20 20 66  em = pMem;.    f
37f00 6f 72 28 69 3d 70 43 74 78 2d 3e 61 72 67 63 2d  or(i=pCtx->argc-
37f10 31 3b 20 69 3e 3d 30 3b 20 69 2d 2d 29 20 70 43  1; i>=0; i--) pC
37f20 74 78 2d 3e 61 72 67 76 5b 69 5d 20 3d 20 26 61  tx->argv[i] = &a
37f30 4d 65 6d 5b 70 4f 70 2d 3e 70 32 2b 69 5d 3b 0a  Mem[pOp->p2+i];.
37f40 20 20 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49    }..#ifdef SQLI
37f50 54 45 5f 44 45 42 55 47 0a 20 20 66 6f 72 28 69  TE_DEBUG.  for(i
37f60 3d 30 3b 20 69 3c 70 43 74 78 2d 3e 61 72 67 63  =0; i<pCtx->argc
37f70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65  ; i++){.    asse
37f80 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
37f90 43 74 78 2d 3e 61 72 67 76 5b 69 5d 29 20 29 3b  Ctx->argv[i]) );
37fa0 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
37fb0 41 43 45 28 70 4f 70 2d 3e 70 32 2b 69 2c 20 70  ACE(pOp->p2+i, p
37fc0 43 74 78 2d 3e 61 72 67 76 5b 69 5d 29 3b 0a 20  Ctx->argv[i]);. 
37fd0 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 70 4d 65   }.#endif..  pMe
37fe0 6d 2d 3e 6e 2b 2b 3b 0a 20 20 61 73 73 65 72 74  m->n++;.  assert
37ff0 28 20 70 43 74 78 2d 3e 70 4f 75 74 2d 3e 66 6c  ( pCtx->pOut->fl
38000 61 67 73 3d 3d 4d 45 4d 5f 4e 75 6c 6c 20 29 3b  ags==MEM_Null );
38010 0a 20 20 61 73 73 65 72 74 28 20 70 43 74 78 2d  .  assert( pCtx-
38020 3e 69 73 45 72 72 6f 72 3d 3d 30 20 29 3b 0a 20  >isError==0 );. 
38030 20 61 73 73 65 72 74 28 20 70 43 74 78 2d 3e 73   assert( pCtx->s
38040 6b 69 70 46 6c 61 67 3d 3d 30 20 29 3b 0a 23 69  kipFlag==0 );.#i
38050 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
38060 54 5f 57 49 4e 44 4f 57 46 55 4e 43 0a 20 20 69  T_WINDOWFUNC.  i
38070 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20  f( pOp->p1 ){.  
38080 20 20 28 70 43 74 78 2d 3e 70 46 75 6e 63 2d 3e    (pCtx->pFunc->
38090 78 49 6e 76 65 72 73 65 29 28 70 43 74 78 2c 70  xInverse)(pCtx,p
380a0 43 74 78 2d 3e 61 72 67 63 2c 70 43 74 78 2d 3e  Ctx->argc,pCtx->
380b0 61 72 67 76 29 3b 0a 20 20 7d 65 6c 73 65 0a 23  argv);.  }else.#
380c0 65 6e 64 69 66 0a 20 20 28 70 43 74 78 2d 3e 70  endif.  (pCtx->p
380d0 46 75 6e 63 2d 3e 78 53 46 75 6e 63 29 28 70 43  Func->xSFunc)(pC
380e0 74 78 2c 70 43 74 78 2d 3e 61 72 67 63 2c 70 43  tx,pCtx->argc,pC
380f0 74 78 2d 3e 61 72 67 76 29 3b 20 2f 2a 20 49 4d  tx->argv); /* IM
38100 50 3a 20 52 2d 32 34 35 30 35 2d 32 33 32 33 30  P: R-24505-23230
38110 20 2a 2f 0a 0a 20 20 69 66 28 20 70 43 74 78 2d   */..  if( pCtx-
38120 3e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20  >isError ){.    
38130 69 66 28 20 70 43 74 78 2d 3e 69 73 45 72 72 6f  if( pCtx->isErro
38140 72 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  r>0 ){.      sql
38150 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
38160 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76   "%s", sqlite3_v
38170 61 6c 75 65 5f 74 65 78 74 28 70 43 74 78 2d 3e  alue_text(pCtx->
38180 70 4f 75 74 29 29 3b 0a 20 20 20 20 20 20 72 63  pOut));.      rc
38190 20 3d 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72   = pCtx->isError
381a0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
381b0 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67 20 29  pCtx->skipFlag )
381c0 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
381d0 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d  pOp[-1].opcode==
381e0 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20  OP_CollSeq );.  
381f0 20 20 20 20 69 20 3d 20 70 4f 70 5b 2d 31 5d 2e      i = pOp[-1].
38200 70 31 3b 0a 20 20 20 20 20 20 69 66 28 20 69 20  p1;.      if( i 
38210 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ) sqlite3VdbeMem
38220 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 69  SetInt64(&aMem[i
38230 5d 2c 20 31 29 3b 0a 20 20 20 20 20 20 70 43 74  ], 1);.      pCt
38240 78 2d 3e 73 6b 69 70 46 6c 61 67 20 3d 20 30 3b  x->skipFlag = 0;
38250 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
38260 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
38270 28 70 43 74 78 2d 3e 70 4f 75 74 29 3b 0a 20 20  (pCtx->pOut);.  
38280 20 20 70 43 74 78 2d 3e 70 4f 75 74 2d 3e 66 6c    pCtx->pOut->fl
38290 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
382a0 20 20 20 20 70 43 74 78 2d 3e 69 73 45 72 72 6f      pCtx->isErro
382b0 72 20 3d 20 30 3b 0a 20 20 20 20 69 66 28 20 72  r = 0;.    if( r
382c0 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
382d0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
382e0 0a 20 20 61 73 73 65 72 74 28 20 70 43 74 78 2