/ Hex Artifact Content
Login

Artifact 18482b9a1ac73c62487dd034da342d464ab9b59cae2abfb4cb234ba8fa7ba16f:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 66  implements the f
01a0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 75 6e  unction that run
01b0: 73 20 74 68 65 0a 2a 2a 20 62 79 74 65 63 6f 64  s the.** bytecod
01c0: 65 20 6f 66 20 61 20 70 72 65 70 61 72 65 64 20  e of a prepared 
01d0: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
01e0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
01f0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
0200: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0210: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0220: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0230: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0240: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0250: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0260: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0270: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0280: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0290: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
02a0: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
02b0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
02c0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
02d0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
02e0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
02f0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
0300: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0310: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0320: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0330: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0340: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0350: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0360: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0370: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0380: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0390: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
03a0: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
03b0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
03c0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
03d0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
03e0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
03f0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
0400: 69 73 75 73 65 64 2e 20 20 41 20 73 68 61 6c 6c  isused.  A shall
0410: 6f 77 20 63 6f 70 79 20 6f 66 20 61 20 73 74 72  ow copy of a str
0420: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6a 75 73 74  ing or blob just
0430: 20 63 6f 70 69 65 73 20 61 0a 2a 2a 20 70 6f 69   copies a.** poi
0440: 6e 74 65 72 20 74 6f 20 74 68 65 20 73 74 72 69  nter to the stri
0450: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 6e 6f 74 20  ng or blob, not 
0460: 74 68 65 20 63 6f 6e 74 65 6e 74 2e 20 20 49 66  the content.  If
0470: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
0480: 20 69 73 20 63 68 61 6e 67 65 64 20 77 68 69 6c   is changed whil
0490: 65 20 74 68 65 20 63 6f 70 79 20 69 73 20 73 74  e the copy is st
04a0: 69 6c 6c 20 69 6e 20 75 73 65 2c 20 74 68 65 20  ill in use, the 
04b0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
04c0: 69 67 68 74 0a 2a 2a 20 62 65 20 63 68 61 6e 67  ight.** be chang
04d0: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
04e0: 72 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69  r the copy.  Thi
04f0: 73 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73  s macro verifies
0500: 20 74 68 61 74 20 6e 6f 74 68 69 6e 67 0a 2a 2a   that nothing.**
0510: 20 6c 69 6b 65 20 74 68 61 74 20 65 76 65 72 20   like that ever 
0520: 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 23 69 66 64  happens..*/.#ifd
0530: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
0540: 23 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75  # define memAbou
0550: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73  tToChange(P,M) s
0560: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f  qlite3VdbeMemAbo
0570: 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a  utToChange(P,M).
0580: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d  #else.# define m
0590: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
05a0: 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  P,M).#endif../*.
05b0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
05c0: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
05d0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
05e0: 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72  every time a cur
05f0: 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69  sor.** moves, ei
0600: 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53  ther by the OP_S
0610: 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20  eekXX, OP_Next, 
0620: 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64  or OP_Prev opcod
0630: 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a  es.  The test.**
0640: 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20   procedures use 
0650: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  this information
0660: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
0670: 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a  at indices are.*
0680: 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63  * working correc
0690: 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61  tly.  This varia
06a0: 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  ble has no funct
06b0: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
06c0: 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79  o.** help verify
06d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
06e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ration of the li
06f0: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0700: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0710: 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
0720: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0730: 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68  f../*.** When th
0740: 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  is global variab
0750: 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20  le is positive, 
0760: 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e  it gets decremen
0770: 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a  ted once before.
0780: 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74  ** each instruct
0790: 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e  ion in the VDBE.
07a0: 20 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65    When it reache
07b0: 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69  s zero, the u1.i
07c0: 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20  sInterrupted.** 
07d0: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
07e0: 69 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69  ite3 structure i
07f0: 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74  s set in order t
0800: 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e  o simulate an in
0810: 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54  terrupt..**.** T
0820: 68 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20  his facility is 
0830: 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
0840: 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20   purposes only. 
0850: 20 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e   It does not fun
0860: 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f  ction.** in an o
0870: 72 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a  rdinary build..*
0880: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
0890: 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33  TEST.int sqlite3
08a0: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
08b0: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
08c0: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f  .** The next glo
08d0: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20  bal variable is 
08e0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68  incremented each
08f0: 20 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72   type the OP_Sor
0900: 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  t opcode.** is e
0910: 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65  xecuted.  The te
0920: 73 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73  st procedures us
0930: 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69  e this informati
0940: 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  on to make sure 
0950: 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20  that.** sorting 
0960: 69 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20  is occurring or 
0970: 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74  not occurring at
0980: 20 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d   appropriate tim
0990: 65 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61  es.   This varia
09a0: 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75  ble.** has no fu
09b0: 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61  nction other tha
09c0: 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79  n to help verify
09d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
09e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  ration of the.**
09f0: 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66   library..*/.#if
0a00: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
0a10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74  int sqlite3_sort
0a20: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0a30: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65  if../*.** The ne
0a40: 78 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  xt global variab
0a50: 6c 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73  le records the s
0a60: 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65  ize of the large
0a70: 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f  st MEM_Blob.** o
0a80: 72 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68  r MEM_Str that h
0a90: 61 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20  as been used by 
0aa0: 61 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20  a VDBE opcode.  
0ab0: 54 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75  The test procedu
0ac0: 72 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20  res.** use this 
0ad0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d  information to m
0ae0: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
0af0: 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63  e zero-blob func
0b00: 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20  tionality.** is 
0b10: 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c  working correctl
0b20: 79 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  y.   This variab
0b30: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0b40: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0b50: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0b60: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0b70: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0b80: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0b90: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ba0: 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62  sqlite3_max_blob
0bb0: 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63  size = 0;.static
0bc0: 20 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42   void updateMaxB
0bd0: 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b  lobsize(Mem *p){
0be0: 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  .  if( (p->flags
0bf0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
0c00: 42 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e  Blob))!=0 && p->
0c10: 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c  n>sqlite3_max_bl
0c20: 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71  obsize ){.    sq
0c30: 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69  lite3_max_blobsi
0c40: 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d  ze = p->n;.  }.}
0c50: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
0c60: 68 69 73 20 6d 61 63 72 6f 20 65 76 61 6c 75 61  his macro evalua
0c70: 74 65 73 20 74 6f 20 74 72 75 65 20 69 66 20 65  tes to true if e
0c80: 69 74 68 65 72 20 74 68 65 20 75 70 64 61 74 65  ither the update
0c90: 20 68 6f 6f 6b 20 6f 72 20 74 68 65 20 70 72 65   hook or the pre
0ca0: 75 70 64 61 74 65 0a 2a 2a 20 68 6f 6f 6b 20 61  update.** hook a
0cb0: 72 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 64  re enabled for d
0cc0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 20  atabase connect 
0cd0: 44 42 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  DB..*/.#ifdef SQ
0ce0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
0cf0: 50 44 41 54 45 5f 48 4f 4f 4b 0a 23 20 64 65 66  PDATE_HOOK.# def
0d00: 69 6e 65 20 48 41 53 5f 55 50 44 41 54 45 5f 48  ine HAS_UPDATE_H
0d10: 4f 4f 4b 28 44 42 29 20 28 28 44 42 29 2d 3e 78  OOK(DB) ((DB)->x
0d20: 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  PreUpdateCallbac
0d30: 6b 7c 7c 28 44 42 29 2d 3e 78 55 70 64 61 74 65  k||(DB)->xUpdate
0d40: 43 61 6c 6c 62 61 63 6b 29 0a 23 65 6c 73 65 0a  Callback).#else.
0d50: 23 20 64 65 66 69 6e 65 20 48 41 53 5f 55 50 44  # define HAS_UPD
0d60: 41 54 45 5f 48 4f 4f 4b 28 44 42 29 20 28 28 44  ATE_HOOK(DB) ((D
0d70: 42 29 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  B)->xUpdateCallb
0d80: 61 63 6b 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ack).#endif../*.
0d90: 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62  ** The next glob
0da0: 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69  al variable is i
0db0: 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20  ncremented each 
0dc0: 74 69 6d 65 20 74 68 65 20 4f 50 5f 46 6f 75 6e  time the OP_Foun
0dd0: 64 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  d opcode.** is e
0de0: 78 65 63 75 74 65 64 2e 20 54 68 69 73 20 69 73  xecuted. This is
0df0: 20 75 73 65 64 20 74 6f 20 74 65 73 74 20 77 68   used to test wh
0e00: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
0e10: 20 66 6f 72 65 69 67 6e 20 6b 65 79 0a 2a 2a 20   foreign key.** 
0e20: 6f 70 65 72 61 74 69 6f 6e 20 69 6d 70 6c 65 6d  operation implem
0e30: 65 6e 74 65 64 20 75 73 69 6e 67 20 4f 50 5f 46  ented using OP_F
0e40: 6b 49 73 5a 65 72 6f 20 69 73 20 77 6f 72 6b 69  kIsZero is worki
0e50: 6e 67 2e 20 54 68 69 73 20 76 61 72 69 61 62 6c  ng. This variabl
0e60: 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e 63  e.** has no func
0e70: 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20  tion other than 
0e80: 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20 74  to help verify t
0e90: 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61  he correct opera
0ea0: 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 6c  tion of the.** l
0eb0: 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  ibrary..*/.#ifde
0ec0: 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e  f SQLITE_TEST.in
0ed0: 74 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f  t sqlite3_found_
0ee0: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0ef0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 61 20  f../*.** Test a 
0f00: 72 65 67 69 73 74 65 72 20 74 6f 20 73 65 65 20  register to see 
0f10: 69 66 20 69 74 20 65 78 63 65 65 64 73 20 74 68  if it exceeds th
0f20: 65 20 63 75 72 72 65 6e 74 20 6d 61 78 69 6d 75  e current maximu
0f30: 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20  m blob size..** 
0f40: 49 66 20 69 74 20 64 6f 65 73 2c 20 72 65 63 6f  If it does, reco
0f50: 72 64 20 74 68 65 20 6e 65 77 20 6d 61 78 69 6d  rd the new maxim
0f60: 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f  um blob size..*/
0f70: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
0f80: 49 54 45 5f 54 45 53 54 29 20 26 26 20 21 64 65  ITE_TEST) && !de
0f90: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 55 4e 54  fined(SQLITE_UNT
0fa0: 45 53 54 41 42 4c 45 29 0a 23 20 64 65 66 69 6e  ESTABLE).# defin
0fb0: 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f  e UPDATE_MAX_BLO
0fc0: 42 53 49 5a 45 28 50 29 20 20 75 70 64 61 74 65  BSIZE(P)  update
0fd0: 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50 29 0a 23  MaxBlobsize(P).#
0fe0: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 55 50  else.# define UP
0ff0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
1000: 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E(P).#endif../*.
1010: 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 56 44  ** Invoke the VD
1020: 42 45 20 63 6f 76 65 72 61 67 65 20 63 61 6c 6c  BE coverage call
1030: 62 61 63 6b 2c 20 69 66 20 74 68 61 74 20 63 61  back, if that ca
1040: 6c 6c 62 61 63 6b 20 69 73 20 64 65 66 69 6e 65  llback is define
1050: 64 2e 20 20 54 68 69 73 0a 2a 2a 20 66 65 61 74  d.  This.** feat
1060: 75 72 65 20 69 73 20 75 73 65 64 20 66 6f 72 20  ure is used for 
1070: 74 65 73 74 20 73 75 69 74 65 20 76 61 6c 69 64  test suite valid
1080: 61 74 69 6f 6e 20 6f 6e 6c 79 20 61 6e 64 20 64  ation only and d
1090: 6f 65 73 20 6e 6f 74 20 61 70 70 65 61 72 20 61  oes not appear a
10a0: 6e 0a 2a 2a 20 70 72 6f 64 75 63 74 69 6f 6e 20  n.** production 
10b0: 62 75 69 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 4d 20  builds..**.** M 
10c0: 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 62 65  is an integer be
10d0: 74 77 65 65 6e 20 32 20 61 6e 64 20 34 2e 20 20  tween 2 and 4.  
10e0: 32 20 69 6e 64 69 63 61 74 65 73 20 61 20 6f 72  2 indicates a or
10f0: 64 69 6e 61 72 79 20 74 77 6f 2d 77 61 79 0a 2a  dinary two-way.*
1100: 2a 20 62 72 61 6e 63 68 20 28 49 3d 30 20 6d 65  * branch (I=0 me
1110: 61 6e 73 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ans fall through
1120: 20 61 6e 64 20 49 3d 31 20 6d 65 61 6e 73 20 74   and I=1 means t
1130: 61 6b 65 6e 29 2e 20 20 33 20 69 6e 64 69 63 61  aken).  3 indica
1140: 74 65 73 0a 2a 2a 20 61 20 33 2d 77 61 79 20 62  tes.** a 3-way b
1150: 72 61 6e 63 68 20 77 68 65 72 65 20 74 68 65 20  ranch where the 
1160: 74 68 69 72 64 20 77 61 79 20 69 73 20 77 68 65  third way is whe
1170: 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 6f 70 65  n one of the ope
1180: 72 61 6e 64 73 20 69 73 0a 2a 2a 20 4e 55 4c 4c  rands is.** NULL
1190: 2e 20 20 34 20 69 6e 64 69 63 61 74 65 73 20 74  .  4 indicates t
11a0: 68 65 20 4f 50 5f 4a 75 6d 70 20 69 6e 73 74 72  he OP_Jump instr
11b0: 75 63 74 69 6f 6e 20 77 68 69 63 68 20 68 61 73  uction which has
11c0: 20 74 68 72 65 65 20 64 65 73 74 69 6e 61 74 69   three destinati
11d0: 6f 6e 73 0a 2a 2a 20 64 65 70 65 6e 64 69 6e 67  ons.** depending
11e0: 20 6f 6e 20 77 68 65 74 68 65 72 20 74 68 65 20   on whether the 
11f0: 66 69 72 73 74 20 6f 70 65 72 61 6e 64 20 69 73  first operand is
1200: 20 6c 65 73 73 20 74 68 61 6e 2c 20 65 71 75 61   less than, equa
1210: 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74 65 72  l to, or greater
1220: 0a 2a 2a 20 74 68 61 6e 20 74 68 65 20 73 65 63  .** than the sec
1230: 6f 6e 64 2e 20 0a 2a 2a 0a 2a 2a 20 69 53 72 63  ond. .**.** iSrc
1240: 4c 69 6e 65 20 69 73 20 74 68 65 20 73 6f 75 72  Line is the sour
1250: 63 65 20 63 6f 64 65 20 6c 69 6e 65 20 28 66 72  ce code line (fr
1260: 6f 6d 20 74 68 65 20 5f 5f 4c 49 4e 45 5f 5f 20  om the __LINE__ 
1270: 6d 61 63 72 6f 29 20 74 68 61 74 0a 2a 2a 20 67  macro) that.** g
1280: 65 6e 65 72 61 74 65 64 20 74 68 65 20 56 44 42  enerated the VDB
1290: 45 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f  E instruction co
12a0: 6d 62 69 6e 65 64 20 77 69 74 68 20 66 6c 61 67  mbined with flag
12b0: 20 62 69 74 73 2e 20 20 54 68 65 20 73 6f 75 72   bits.  The sour
12c0: 63 65 0a 2a 2a 20 63 6f 64 65 20 6c 69 6e 65 20  ce.** code line 
12d0: 6e 75 6d 62 65 72 20 69 73 20 69 6e 20 74 68 65  number is in the
12e0: 20 6c 6f 77 65 72 20 32 34 20 62 69 74 73 20 6f   lower 24 bits o
12f0: 66 20 69 53 72 63 4c 69 6e 65 20 61 6e 64 20 74  f iSrcLine and t
1300: 68 65 20 75 70 70 65 72 0a 2a 2a 20 38 20 62 79  he upper.** 8 by
1310: 74 65 73 20 61 72 65 20 66 6c 61 67 73 2e 20 20  tes are flags.  
1320: 54 68 65 20 6c 6f 77 65 72 20 74 68 72 65 65 20  The lower three 
1330: 62 69 74 73 20 6f 66 20 74 68 65 20 66 6c 61 67  bits of the flag
1340: 73 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20 76 61  s indicate.** va
1350: 6c 75 65 73 20 66 6f 72 20 49 20 74 68 61 74 20  lues for I that 
1360: 73 68 6f 75 6c 64 20 6e 65 76 65 72 20 6f 63 63  should never occ
1370: 75 72 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  ur.  For example
1380: 2c 20 69 66 20 74 68 65 20 62 72 61 6e 63 68 20  , if the branch 
1390: 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 74 61 6b  is.** always tak
13a0: 65 6e 2c 20 74 68 65 20 66 6c 61 67 73 20 73 68  en, the flags sh
13b0: 6f 75 6c 64 20 62 65 20 30 78 30 35 20 73 69 6e  ould be 0x05 sin
13c0: 63 65 20 74 68 65 20 66 61 6c 6c 2d 74 68 72 6f  ce the fall-thro
13d0: 75 67 68 20 61 6e 64 0a 2a 2a 20 61 6c 74 65 72  ugh and.** alter
13e0: 6e 61 74 65 20 62 72 61 6e 63 68 20 61 72 65 20  nate branch are 
13f0: 6e 65 76 65 72 20 74 61 6b 65 6e 2e 20 20 49 66  never taken.  If
1400: 20 61 20 62 72 61 6e 63 68 20 69 73 20 6e 65 76   a branch is nev
1410: 65 72 20 74 61 6b 65 6e 20 74 68 65 6e 0a 2a 2a  er taken then.**
1420: 20 66 6c 61 67 73 20 73 68 6f 75 6c 64 20 62 65   flags should be
1430: 20 30 78 30 36 20 73 69 6e 63 65 20 6f 6e 6c 79   0x06 since only
1440: 20 74 68 65 20 66 61 6c 6c 2d 74 68 72 6f 75 67   the fall-throug
1450: 68 20 61 70 70 72 6f 61 63 68 20 69 73 20 61 6c  h approach is al
1460: 6c 6f 77 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 69 74  lowed..**.** Bit
1470: 20 30 78 30 34 20 6f 66 20 74 68 65 20 66 6c 61   0x04 of the fla
1480: 67 73 20 69 6e 64 69 63 61 74 65 73 20 61 6e 20  gs indicates an 
1490: 4f 50 5f 4a 75 6d 70 20 6f 70 63 6f 64 65 20 74  OP_Jump opcode t
14a0: 68 61 74 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20 69  hat is only.** i
14b0: 6e 74 65 72 65 73 74 65 64 20 69 6e 20 65 71 75  nterested in equ
14c0: 61 6c 20 6f 72 20 6e 6f 74 2d 65 71 75 61 6c 2e  al or not-equal.
14d0: 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
14e0: 2c 20 49 3d 3d 30 20 61 6e 64 20 49 3d 3d 32 0a  , I==0 and I==2.
14f0: 2a 2a 20 73 68 6f 75 6c 64 20 62 65 20 74 72 65  ** should be tre
1500: 61 74 65 64 20 74 68 65 20 73 61 6d 65 2e 0a 2a  ated the same..*
1510: 2a 0a 2a 2a 20 53 69 6e 63 65 20 6f 6e 6c 79 20  *.** Since only 
1520: 61 20 6c 69 6e 65 20 6e 75 6d 62 65 72 20 69 73  a line number is
1530: 20 72 65 74 61 69 6e 65 64 2c 20 6e 6f 74 20 74   retained, not t
1540: 68 65 20 66 69 6c 65 6e 61 6d 65 2c 20 74 68 69  he filename, thi
1550: 73 20 6d 61 63 72 6f 0a 2a 2a 20 6f 6e 6c 79 20  s macro.** only 
1560: 77 6f 72 6b 73 20 66 6f 72 20 61 6d 61 6c 67 61  works for amalga
1570: 6d 61 74 69 6f 6e 20 62 75 69 6c 64 73 2e 20 20  mation builds.  
1580: 42 75 74 20 74 68 61 74 20 69 73 20 6f 6b 2c 20  But that is ok, 
1590: 73 69 6e 63 65 20 74 68 65 73 65 20 6d 61 63 72  since these macr
15a0: 6f 73 0a 2a 2a 20 73 68 6f 75 6c 64 20 62 65 20  os.** should be 
15b0: 6e 6f 2d 6f 70 73 20 65 78 63 65 70 74 20 66 6f  no-ops except fo
15c0: 72 20 73 70 65 63 69 61 6c 20 62 75 69 6c 64 73  r special builds
15d0: 20 75 73 65 64 20 74 6f 20 6d 65 61 73 75 72 65   used to measure
15e0: 20 74 65 73 74 20 63 6f 76 65 72 61 67 65 2e 0a   test coverage..
15f0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
1600: 53 51 4c 49 54 45 5f 56 44 42 45 5f 43 4f 56 45  SQLITE_VDBE_COVE
1610: 52 41 47 45 29 0a 23 20 64 65 66 69 6e 65 20 56  RAGE).# define V
1620: 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 49  dbeBranchTaken(I
1630: 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  ,M).#else.# defi
1640: 6e 65 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  ne VdbeBranchTak
1650: 65 6e 28 49 2c 4d 29 20 76 64 62 65 54 61 6b 65  en(I,M) vdbeTake
1660: 42 72 61 6e 63 68 28 70 4f 70 2d 3e 69 53 72 63  Branch(pOp->iSrc
1670: 4c 69 6e 65 2c 49 2c 4d 29 0a 20 20 73 74 61 74  Line,I,M).  stat
1680: 69 63 20 76 6f 69 64 20 76 64 62 65 54 61 6b 65  ic void vdbeTake
1690: 42 72 61 6e 63 68 28 75 33 32 20 69 53 72 63 4c  Branch(u32 iSrcL
16a0: 69 6e 65 2c 20 75 38 20 49 2c 20 75 38 20 4d 29  ine, u8 I, u8 M)
16b0: 7b 0a 20 20 20 20 75 38 20 6d 4e 65 76 65 72 3b  {.    u8 mNever;
16c0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 49 3c 3d  .    assert( I<=
16d0: 32 20 29 3b 20 20 2f 2a 20 30 3a 20 66 61 6c 6c  2 );  /* 0: fall
16e0: 20 74 68 72 6f 75 67 68 2c 20 20 31 3a 20 74 61   through,  1: ta
16f0: 6b 65 6e 2c 20 20 32 3a 20 61 6c 74 65 72 6e 61  ken,  2: alterna
1700: 74 65 20 74 61 6b 65 6e 20 2a 2f 0a 20 20 20 20  te taken */.    
1710: 61 73 73 65 72 74 28 20 4d 3c 3d 34 20 29 3b 20  assert( M<=4 ); 
1720: 20 2f 2a 20 32 3a 20 74 77 6f 2d 77 61 79 20 62   /* 2: two-way b
1730: 72 61 6e 63 68 2c 20 33 3a 20 74 68 72 65 65 2d  ranch, 3: three-
1740: 77 61 79 20 62 72 61 6e 63 68 2c 20 34 3a 20 4f  way branch, 4: O
1750: 50 5f 4a 75 6d 70 20 2a 2f 0a 20 20 20 20 61 73  P_Jump */.    as
1760: 73 65 72 74 28 20 49 3c 4d 20 29 3b 20 20 20 2f  sert( I<M );   /
1770: 2a 20 49 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20  * I can only be 
1780: 32 20 69 66 20 4d 20 69 73 20 33 20 6f 72 20 34  2 if M is 3 or 4
1790: 20 2a 2f 0a 20 20 20 20 2f 2a 20 54 72 61 6e 73   */.    /* Trans
17a0: 66 6f 72 6d 20 49 20 66 72 6f 6d 20 61 20 69 6e  form I from a in
17b0: 74 65 67 65 72 20 5b 30 2c 31 2c 32 5d 20 69 6e  teger [0,1,2] in
17c0: 74 6f 20 61 20 62 69 74 6d 61 73 6b 20 6f 66 20  to a bitmask of 
17d0: 5b 31 2c 32 2c 34 5d 20 2a 2f 0a 20 20 20 20 49  [1,2,4] */.    I
17e0: 20 3d 20 31 3c 3c 49 3b 0a 20 20 20 20 2f 2a 20   = 1<<I;.    /* 
17f0: 54 68 65 20 75 70 70 65 72 20 38 20 62 69 74 73  The upper 8 bits
1800: 20 6f 66 20 69 53 72 63 4c 69 6e 65 20 61 72 65   of iSrcLine are
1810: 20 66 6c 61 67 73 2e 20 20 54 68 65 20 6c 6f 77   flags.  The low
1820: 65 72 20 74 68 72 65 65 20 62 69 74 73 20 6f 66  er three bits of
1830: 0a 20 20 20 20 2a 2a 20 74 68 65 20 66 6c 61 67  .    ** the flag
1840: 73 20 69 6e 64 69 63 61 74 65 20 64 69 72 65 63  s indicate direc
1850: 74 69 6f 6e 73 20 74 68 61 74 20 74 68 65 20 62  tions that the b
1860: 72 61 6e 63 68 20 63 61 6e 20 6e 65 76 65 72 20  ranch can never 
1870: 67 6f 2e 20 20 49 66 0a 20 20 20 20 2a 2a 20 61  go.  If.    ** a
1880: 20 62 72 61 6e 63 68 20 72 65 61 6c 6c 79 20 64   branch really d
1890: 6f 65 73 20 67 6f 20 69 6e 20 6f 6e 65 20 6f 66  oes go in one of
18a0: 20 74 68 6f 73 65 20 64 69 72 65 63 74 69 6f 6e   those direction
18b0: 73 2c 20 61 73 73 65 72 74 20 72 69 67 68 74 0a  s, assert right.
18c0: 20 20 20 20 2a 2a 20 61 77 61 79 2e 20 2a 2f 0a      ** away. */.
18d0: 20 20 20 20 6d 4e 65 76 65 72 20 3d 20 69 53 72      mNever = iSr
18e0: 63 4c 69 6e 65 20 3e 3e 20 32 34 3b 0a 20 20 20  cLine >> 24;.   
18f0: 20 61 73 73 65 72 74 28 20 28 49 20 26 20 6d 4e   assert( (I & mN
1900: 65 76 65 72 29 3d 3d 30 20 29 3b 0a 20 20 20 20  ever)==0 );.    
1910: 69 66 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61  if( sqlite3Globa
1920: 6c 43 6f 6e 66 69 67 2e 78 56 64 62 65 42 72 61  lConfig.xVdbeBra
1930: 6e 63 68 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b  nch==0 ) return;
1940: 20 20 2f 2a 4e 4f 5f 54 45 53 54 2a 2f 0a 20 20    /*NO_TEST*/.  
1950: 20 20 49 20 7c 3d 20 6d 4e 65 76 65 72 3b 0a 20    I |= mNever;. 
1960: 20 20 20 69 66 28 20 4d 3d 3d 32 20 29 20 49 20     if( M==2 ) I 
1970: 7c 3d 20 30 78 30 34 3b 0a 20 20 20 20 69 66 28  |= 0x04;.    if(
1980: 20 4d 3d 3d 34 20 29 7b 0a 20 20 20 20 20 20 49   M==4 ){.      I
1990: 20 7c 3d 20 30 78 30 38 3b 0a 20 20 20 20 20 20   |= 0x08;.      
19a0: 69 66 28 20 28 6d 4e 65 76 65 72 26 30 78 30 38  if( (mNever&0x08
19b0: 29 21 3d 30 20 26 26 20 28 49 26 30 78 30 35 29  )!=0 && (I&0x05)
19c0: 21 3d 30 29 20 49 20 7c 3d 20 30 78 30 35 3b 20  !=0) I |= 0x05; 
19d0: 2f 2a 4e 4f 5f 54 45 53 54 2a 2f 0a 20 20 20 20  /*NO_TEST*/.    
19e0: 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 47 6c 6f  }.    sqlite3Glo
19f0: 62 61 6c 43 6f 6e 66 69 67 2e 78 56 64 62 65 42  balConfig.xVdbeB
1a00: 72 61 6e 63 68 28 73 71 6c 69 74 65 33 47 6c 6f  ranch(sqlite3Glo
1a10: 62 61 6c 43 6f 6e 66 69 67 2e 70 56 64 62 65 42  balConfig.pVdbeB
1a20: 72 61 6e 63 68 41 72 67 2c 0a 20 20 20 20 20 20  ranchArg,.      
1a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 53                iS
1a50: 72 63 4c 69 6e 65 26 30 78 66 66 66 66 66 66 2c  rcLine&0xffffff,
1a60: 20 49 2c 20 4d 29 3b 0a 20 20 7d 0a 23 65 6e 64   I, M);.  }.#end
1a70: 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72  if../*.** Conver
1a80: 74 20 74 68 65 20 67 69 76 65 6e 20 72 65 67 69  t the given regi
1a90: 73 74 65 72 20 69 6e 74 6f 20 61 20 73 74 72 69  ster into a stri
1aa0: 6e 67 20 69 66 20 69 74 20 69 73 6e 27 74 20 6f  ng if it isn't o
1ab0: 6e 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e 20 52  ne.** already. R
1ac0: 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69  eturn non-zero i
1ad0: 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69  f a malloc() fai
1ae0: 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ls..*/.#define S
1af0: 74 72 69 6e 67 69 66 79 28 50 2c 20 65 6e 63 29  tringify(P, enc)
1b00: 20 5c 0a 20 20 20 69 66 28 28 28 50 29 2d 3e 66   \.   if(((P)->f
1b10: 6c 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c 4d 45  lags&(MEM_Str|ME
1b20: 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26 20 73  M_Blob))==0 && s
1b30: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72  qlite3VdbeMemStr
1b40: 69 6e 67 69 66 79 28 50 2c 65 6e 63 2c 30 29 29  ingify(P,enc,0))
1b50: 20 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f 20 6e   \.     { goto n
1b60: 6f 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20  o_mem; }../*.** 
1b70: 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72  An ephemeral str
1b80: 69 6e 67 20 76 61 6c 75 65 20 28 73 69 67 6e 69  ing value (signi
1b90: 66 69 65 64 20 62 79 20 74 68 65 20 4d 45 4d 5f  fied by the MEM_
1ba0: 45 70 68 65 6d 20 66 6c 61 67 29 20 63 6f 6e 74  Ephem flag) cont
1bb0: 61 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e 74 65  ains.** a pointe
1bc0: 72 20 74 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c  r to a dynamical
1bd0: 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 74 72  ly allocated str
1be0: 69 6e 67 20 77 68 65 72 65 20 73 6f 6d 65 20 6f  ing where some o
1bf0: 74 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a 20 69  ther entity.** i
1c00: 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f  s responsible fo
1c10: 72 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74  r deallocating t
1c20: 68 61 74 20 73 74 72 69 6e 67 2e 20 20 42 65 63  hat string.  Bec
1c30: 61 75 73 65 20 74 68 65 20 72 65 67 69 73 74 65  ause the registe
1c40: 72 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 63 6f  r.** does not co
1c50: 6e 74 72 6f 6c 20 74 68 65 20 73 74 72 69 6e 67  ntrol the string
1c60: 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20 64 65  , it might be de
1c70: 6c 65 74 65 64 20 77 69 74 68 6f 75 74 20 74 68  leted without th
1c80: 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6b 6e  e register.** kn
1c90: 6f 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a 20  owing it..**.** 
1ca0: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 63 6f 6e  This routine con
1cb0: 76 65 72 74 73 20 61 6e 20 65 70 68 65 6d 65 72  verts an ephemer
1cc0: 61 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61  al string into a
1cd0: 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c   dynamically all
1ce0: 6f 63 61 74 65 64 0a 2a 2a 20 73 74 72 69 6e 67  ocated.** string
1cf0: 20 74 68 61 74 20 74 68 65 20 72 65 67 69 73 74   that the regist
1d00: 65 72 20 69 74 73 65 6c 66 20 63 6f 6e 74 72 6f  er itself contro
1d10: 6c 73 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  ls.  In other wo
1d20: 72 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76 65  rds, it.** conve
1d30: 72 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68 65 6d  rts an MEM_Ephem
1d40: 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20 73   string into a s
1d50: 74 72 69 6e 67 20 77 69 74 68 20 50 2e 7a 3d 3d  tring with P.z==
1d60: 50 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a 23 64  P.zMalloc..*/.#d
1d70: 65 66 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61  efine Deephemera
1d80: 6c 69 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28  lize(P) \.   if(
1d90: 20 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d   ((P)->flags&MEM
1da0: 5f 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20  _Ephem)!=0 \.   
1db0: 20 20 20 20 26 26 20 73 71 6c 69 74 65 33 56 64      && sqlite3Vd
1dc0: 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62  beMemMakeWriteab
1dd0: 6c 65 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f  le(P) ){ goto no
1de0: 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74 75 72  _mem;}../* Retur
1df0: 6e 20 74 72 75 65 20 69 66 20 74 68 65 20 63 75  n true if the cu
1e00: 72 73 6f 72 20 77 61 73 20 6f 70 65 6e 65 64 20  rsor was opened 
1e10: 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f 70 65  using the OP_Ope
1e20: 6e 53 6f 72 74 65 72 20 6f 70 63 6f 64 65 2e 20  nSorter opcode. 
1e30: 2a 2f 0a 23 64 65 66 69 6e 65 20 69 73 53 6f 72  */.#define isSor
1e40: 74 65 72 28 78 29 20 28 28 78 29 2d 3e 65 43 75  ter(x) ((x)->eCu
1e50: 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 53  rType==CURTYPE_S
1e60: 4f 52 54 45 52 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c  ORTER)../*.** Al
1e70: 6c 6f 63 61 74 65 20 56 64 62 65 43 75 72 73 6f  locate VdbeCurso
1e80: 72 20 6e 75 6d 62 65 72 20 69 43 75 72 2e 20 20  r number iCur.  
1e90: 52 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72  Return a pointer
1ea0: 20 74 6f 20 69 74 2e 20 20 52 65 74 75 72 6e 20   to it.  Return 
1eb0: 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20 72 75  NULL.** if we ru
1ec0: 6e 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 2e  n out of memory.
1ed0: 0a 2a 2f 0a 73 74 61 74 69 63 20 56 64 62 65 43  .*/.static VdbeC
1ee0: 75 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74 65 43  ursor *allocateC
1ef0: 75 72 73 6f 72 28 0a 20 20 56 64 62 65 20 2a 70  ursor(.  Vdbe *p
1f00: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
1f10: 2a 20 54 68 65 20 76 69 72 74 75 61 6c 20 6d 61  * The virtual ma
1f20: 63 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 69  chine */.  int i
1f30: 43 75 72 2c 20 20 20 20 20 20 20 20 20 20 20 20  Cur,            
1f40: 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65   /* Index of the
1f50: 20 6e 65 77 20 56 64 62 65 43 75 72 73 6f 72 20   new VdbeCursor 
1f60: 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 2c  */.  int nField,
1f70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1f80: 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69  mber of fields i
1f90: 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  n the table or i
1fa0: 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 44  ndex */.  int iD
1fb0: 62 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b,              
1fc0: 2f 2a 20 44 61 74 61 62 61 73 65 20 74 68 65 20  /* Database the 
1fd0: 63 75 72 73 6f 72 20 62 65 6c 6f 6e 67 73 20 74  cursor belongs t
1fe0: 6f 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20 20 75 38  o, or -1 */.  u8
1ff0: 20 65 43 75 72 54 79 70 65 20 20 20 20 20 20 20   eCurType       
2000: 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74      /* Type of t
2010: 68 65 20 6e 65 77 20 63 75 72 73 6f 72 20 2a 2f  he new cursor */
2020: 0a 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68  .){.  /* Find th
2030: 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68  e memory cell th
2040: 61 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20  at will be used 
2050: 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f  to store the blo
2060: 62 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a  b of memory.  **
2070: 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68   required for th
2080: 69 73 20 56 64 62 65 43 75 72 73 6f 72 20 73 74  is VdbeCursor st
2090: 72 75 63 74 75 72 65 2e 20 49 74 20 69 73 20 63  ructure. It is c
20a0: 6f 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65  onvenient to use
20b0: 20 61 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65   a .  ** vdbe me
20c0: 6d 6f 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e  mory cell to man
20d0: 61 67 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61  age the memory a
20e0: 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72  llocation requir
20f0: 65 64 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64  ed for a.  ** Vd
2100: 62 65 43 75 72 73 6f 72 20 73 74 72 75 63 74 75  beCursor structu
2110: 72 65 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f  re for the follo
2120: 77 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20  wing reasons:.  
2130: 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65  **.  **   * Some
2140: 74 69 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d  times cursor num
2150: 62 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f  bers are used fo
2160: 72 20 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69  r a couple of di
2170: 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20  fferent.  **    
2180: 20 70 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76   purposes in a v
2190: 64 62 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65  dbe program. The
21a0: 20 64 69 66 66 65 72 65 6e 74 20 75 73 65 73 20   different uses 
21b0: 6d 69 67 68 74 20 72 65 71 75 69 72 65 0a 20 20  might require.  
21c0: 2a 2a 20 20 20 20 20 64 69 66 66 65 72 65 6e 74  **     different
21d0: 20 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f   sized allocatio
21e0: 6e 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73  ns. Memory cells
21f0: 20 70 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c   provide growabl
2200: 65 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63  e.  **     alloc
2210: 61 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a  ations..  **.  *
2220: 2a 20 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67  *   * When using
2230: 20 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d   ENABLE_MEMORY_M
2240: 41 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72  ANAGEMENT, memor
2250: 79 20 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63  y cell buffers c
2260: 61 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66  an.  **     be f
2270: 72 65 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20  reed lazily via 
2280: 74 68 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65  the sqlite3_rele
2290: 61 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49  ase_memory() API
22a0: 2e 20 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20  . This.  **     
22b0: 6d 69 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75  minimizes the nu
22c0: 6d 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63  mber of malloc c
22d0: 61 6c 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65  alls made by the
22e0: 20 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20   system..  **.  
22f0: 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 63 65  ** The memory ce
2300: 6c 6c 20 66 6f 72 20 63 75 72 73 6f 72 20 30 20  ll for cursor 0 
2310: 69 73 20 61 4d 65 6d 5b 30 5d 2e 20 54 68 65 20  is aMem[0]. The 
2320: 72 65 73 74 20 61 72 65 20 61 6c 6c 6f 63 61 74  rest are allocat
2330: 65 64 20 66 72 6f 6d 0a 20 20 2a 2a 20 74 68 65  ed from.  ** the
2340: 20 74 6f 70 20 6f 66 20 74 68 65 20 72 65 67 69   top of the regi
2350: 73 74 65 72 20 73 70 61 63 65 2e 20 20 43 75 72  ster space.  Cur
2360: 73 6f 72 20 31 20 69 73 20 61 74 20 4d 65 6d 5b  sor 1 is at Mem[
2370: 70 2d 3e 6e 4d 65 6d 2d 31 5d 2e 0a 20 20 2a 2a  p->nMem-1]..  **
2380: 20 43 75 72 73 6f 72 20 32 20 69 73 20 61 74 20   Cursor 2 is at 
2390: 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 32 5d 2e 20  Mem[p->nMem-2]. 
23a0: 41 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20  And so forth..  
23b0: 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d  */.  Mem *pMem =
23c0: 20 69 43 75 72 3e 30 20 3f 20 26 70 2d 3e 61 4d   iCur>0 ? &p->aM
23d0: 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d  em[p->nMem-iCur]
23e0: 20 3a 20 70 2d 3e 61 4d 65 6d 3b 0a 0a 20 20 69   : p->aMem;..  i
23f0: 6e 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65  nt nByte;.  Vdbe
2400: 43 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b  Cursor *pCx = 0;
2410: 0a 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20  .  nByte = .    
2420: 20 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28    ROUND8(sizeof(
2430: 56 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32  VdbeCursor)) + 2
2440: 2a 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69  *sizeof(u32)*nFi
2450: 65 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 65 43  eld + .      (eC
2460: 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
2470: 42 54 52 45 45 3f 73 71 6c 69 74 65 33 42 74 72  BTREE?sqlite3Btr
2480: 65 65 43 75 72 73 6f 72 53 69 7a 65 28 29 3a 30  eeCursorSize():0
2490: 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 43  );..  assert( iC
24a0: 75 72 3e 3d 30 20 26 26 20 69 43 75 72 3c 70 2d  ur>=0 && iCur<p-
24b0: 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66  >nCursor );.  if
24c0: 28 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d  ( p->apCsr[iCur]
24d0: 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49   ){ /*OPTIMIZATI
24e0: 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20  ON-IF-FALSE*/.  
24f0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65    sqlite3VdbeFre
2500: 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70  eCursor(p, p->ap
2510: 43 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20  Csr[iCur]);.    
2520: 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d  p->apCsr[iCur] =
2530: 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53 51   0;.  }.  if( SQ
2540: 4c 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33  LITE_OK==sqlite3
2550: 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52  VdbeMemClearAndR
2560: 65 73 69 7a 65 28 70 4d 65 6d 2c 20 6e 42 79 74  esize(pMem, nByt
2570: 65 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70 43  e) ){.    p->apC
2580: 73 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20 3d  sr[iCur] = pCx =
2590: 20 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70 4d   (VdbeCursor*)pM
25a0: 65 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73 65  em->z;.    memse
25b0: 74 28 70 43 78 2c 20 30 2c 20 6f 66 66 73 65 74  t(pCx, 0, offset
25c0: 6f 66 28 56 64 62 65 43 75 72 73 6f 72 2c 70 41  of(VdbeCursor,pA
25d0: 6c 74 43 75 72 73 6f 72 29 29 3b 0a 20 20 20 20  ltCursor));.    
25e0: 70 43 78 2d 3e 65 43 75 72 54 79 70 65 20 3d 20  pCx->eCurType = 
25f0: 65 43 75 72 54 79 70 65 3b 0a 20 20 20 20 70 43  eCurType;.    pC
2600: 78 2d 3e 69 44 62 20 3d 20 69 44 62 3b 0a 20 20  x->iDb = iDb;.  
2610: 20 20 70 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20    pCx->nField = 
2620: 6e 46 69 65 6c 64 3b 0a 20 20 20 20 70 43 78 2d  nField;.    pCx-
2630: 3e 61 4f 66 66 73 65 74 20 3d 20 26 70 43 78 2d  >aOffset = &pCx-
2640: 3e 61 54 79 70 65 5b 6e 46 69 65 6c 64 5d 3b 0a  >aType[nField];.
2650: 20 20 20 20 69 66 28 20 65 43 75 72 54 79 70 65      if( eCurType
2660: 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
2670: 29 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e 75 63  ){.      pCx->uc
2680: 2e 70 43 75 72 73 6f 72 20 3d 20 28 42 74 43 75  .pCursor = (BtCu
2690: 72 73 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20  rsor*).         
26a0: 20 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38   &pMem->z[ROUND8
26b0: 28 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73  (sizeof(VdbeCurs
26c0: 6f 72 29 29 2b 32 2a 73 69 7a 65 6f 66 28 75 33  or))+2*sizeof(u3
26d0: 32 29 2a 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20  2)*nField];.    
26e0: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75    sqlite3BtreeCu
26f0: 72 73 6f 72 5a 65 72 6f 28 70 43 78 2d 3e 75 63  rsorZero(pCx->uc
2700: 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d  .pCursor);.    }
2710: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 70 43  .  }.  return pC
2720: 78 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20  x;.}../*.** Try 
2730: 74 6f 20 63 6f 6e 76 65 72 74 20 61 20 76 61 6c  to convert a val
2740: 75 65 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69  ue into a numeri
2750: 63 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  c representation
2760: 20 69 66 20 77 65 20 63 61 6e 0a 2a 2a 20 64 6f   if we can.** do
2770: 20 73 6f 20 77 69 74 68 6f 75 74 20 6c 6f 73 73   so without loss
2780: 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e   of information.
2790: 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
27a0: 2c 20 69 66 20 74 68 65 20 73 74 72 69 6e 67 0a  , if the string.
27b0: 2a 2a 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20 61 20  ** looks like a 
27c0: 6e 75 6d 62 65 72 2c 20 63 6f 6e 76 65 72 74 20  number, convert 
27d0: 69 74 20 69 6e 74 6f 20 61 20 6e 75 6d 62 65 72  it into a number
27e0: 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f  .  If it does no
27f0: 74 0a 2a 2a 20 6c 6f 6f 6b 20 6c 69 6b 65 20 61  t.** look like a
2800: 20 6e 75 6d 62 65 72 2c 20 6c 65 61 76 65 20 69   number, leave i
2810: 74 20 61 6c 6f 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49  t alone..**.** I
2820: 66 20 74 68 65 20 62 54 72 79 46 6f 72 49 6e 74  f the bTryForInt
2830: 20 66 6c 61 67 20 69 73 20 74 72 75 65 2c 20 74   flag is true, t
2840: 68 65 6e 20 65 78 74 72 61 20 65 66 66 6f 72 74  hen extra effort
2850: 20 69 73 20 6d 61 64 65 20 74 6f 20 67 69 76 65   is made to give
2860: 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 20 72  .** an integer r
2870: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20  epresentation.  
2880: 53 74 72 69 6e 67 73 20 74 68 61 74 20 6c 6f 6f  Strings that loo
2890: 6b 20 6c 69 6b 65 20 66 6c 6f 61 74 69 6e 67 20  k like floating 
28a0: 70 6f 69 6e 74 0a 2a 2a 20 76 61 6c 75 65 73 20  point.** values 
28b0: 62 75 74 20 77 68 69 63 68 20 68 61 76 65 20 6e  but which have n
28c0: 6f 20 66 72 61 63 74 69 6f 6e 61 6c 20 63 6f 6d  o fractional com
28d0: 70 6f 6e 65 6e 74 20 28 65 78 61 6d 70 6c 65 3a  ponent (example:
28e0: 20 27 34 38 2e 30 30 27 29 0a 2a 2a 20 77 69 6c   '48.00').** wil
28f0: 6c 20 68 61 76 65 20 61 20 4d 45 4d 5f 49 6e 74  l have a MEM_Int
2900: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2910: 77 68 65 6e 20 62 54 72 79 46 6f 72 49 6e 74 20  when bTryForInt 
2920: 69 73 20 74 72 75 65 2e 0a 2a 2a 0a 2a 2a 20 49  is true..**.** I
2930: 66 20 62 54 72 79 46 6f 72 49 6e 74 20 69 73 20  f bTryForInt is 
2940: 66 61 6c 73 65 2c 20 74 68 65 6e 20 69 66 20 74  false, then if t
2950: 68 65 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20  he input string 
2960: 63 6f 6e 74 61 69 6e 73 20 61 20 64 65 63 69 6d  contains a decim
2970: 61 6c 0a 2a 2a 20 70 6f 69 6e 74 20 6f 72 20 65  al.** point or e
2980: 78 70 6f 6e 65 6e 74 69 61 6c 20 6e 6f 74 61 74  xponential notat
2990: 69 6f 6e 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ion, the result 
29a0: 69 73 20 6f 6e 6c 79 20 4d 45 4d 5f 52 65 61 6c  is only MEM_Real
29b0: 2c 20 65 76 65 6e 0a 2a 2a 20 69 66 20 74 68 65  , even.** if the
29c0: 72 65 20 69 73 20 61 6e 20 65 78 61 63 74 20 69  re is an exact i
29d0: 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74  nteger represent
29e0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 71 75 61  ation of the qua
29f0: 6e 74 69 74 79 2e 0a 2a 2f 0a 73 74 61 74 69 63  ntity..*/.static
2a00: 20 76 6f 69 64 20 61 70 70 6c 79 4e 75 6d 65 72   void applyNumer
2a10: 69 63 41 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a  icAffinity(Mem *
2a20: 70 52 65 63 2c 20 69 6e 74 20 62 54 72 79 46 6f  pRec, int bTryFo
2a30: 72 49 6e 74 29 7b 0a 20 20 64 6f 75 62 6c 65 20  rInt){.  double 
2a40: 72 56 61 6c 75 65 3b 0a 20 20 69 36 34 20 69 56  rValue;.  i64 iV
2a50: 61 6c 75 65 3b 0a 20 20 75 38 20 65 6e 63 20 3d  alue;.  u8 enc =
2a60: 20 70 52 65 63 2d 3e 65 6e 63 3b 0a 20 20 61 73   pRec->enc;.  as
2a70: 73 65 72 74 28 20 28 70 52 65 63 2d 3e 66 6c 61  sert( (pRec->fla
2a80: 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
2a90: 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29  M_Int|MEM_Real))
2aa0: 3d 3d 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 69  ==MEM_Str );.  i
2ab0: 66 28 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70  f( sqlite3AtoF(p
2ac0: 52 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75 65 2c  Rec->z, &rValue,
2ad0: 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3d 3d   pRec->n, enc)==
2ae0: 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66  0 ) return;.  if
2af0: 28 20 30 3d 3d 73 71 6c 69 74 65 33 41 74 6f 69  ( 0==sqlite3Atoi
2b00: 36 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69 56 61  64(pRec->z, &iVa
2b10: 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 65 6e  lue, pRec->n, en
2b20: 63 29 20 29 7b 0a 20 20 20 20 70 52 65 63 2d 3e  c) ){.    pRec->
2b30: 75 2e 69 20 3d 20 69 56 61 6c 75 65 3b 0a 20 20  u.i = iValue;.  
2b40: 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d    pRec->flags |=
2b50: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 65 6c 73   MEM_Int;.  }els
2b60: 65 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75 2e 72  e{.    pRec->u.r
2b70: 20 3d 20 72 56 61 6c 75 65 3b 0a 20 20 20 20 70   = rValue;.    p
2b80: 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  Rec->flags |= ME
2b90: 4d 5f 52 65 61 6c 3b 0a 20 20 20 20 69 66 28 20  M_Real;.    if( 
2ba0: 62 54 72 79 46 6f 72 49 6e 74 20 29 20 73 71 6c  bTryForInt ) sql
2bb0: 69 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41  ite3VdbeIntegerA
2bc0: 66 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20  ffinity(pRec);. 
2bd0: 20 7d 0a 20 20 2f 2a 20 54 45 58 54 2d 3e 4e 55   }.  /* TEXT->NU
2be0: 4d 45 52 49 43 20 69 73 20 6d 61 6e 79 2d 3e 6f  MERIC is many->o
2bf0: 6e 65 2e 20 20 48 65 6e 63 65 2c 20 69 74 20 69  ne.  Hence, it i
2c00: 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 69  s important to i
2c10: 6e 76 61 6c 69 64 61 74 65 20 74 68 65 0a 20 20  nvalidate the.  
2c20: 2a 2a 20 73 74 72 69 6e 67 20 72 65 70 72 65 73  ** string repres
2c30: 65 6e 74 61 74 69 6f 6e 20 61 66 74 65 72 20 63  entation after c
2c40: 6f 6d 70 75 74 69 6e 67 20 61 20 6e 75 6d 65 72  omputing a numer
2c50: 69 63 20 65 71 75 69 76 61 6c 65 6e 74 2c 20 62  ic equivalent, b
2c60: 65 63 61 75 73 65 20 74 68 65 0a 20 20 2a 2a 20  ecause the.  ** 
2c70: 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74  string represent
2c80: 61 74 69 6f 6e 20 6d 69 67 68 74 20 6e 6f 74 20  ation might not 
2c90: 62 65 20 74 68 65 20 63 61 6e 6f 6e 69 63 61 6c  be the canonical
2ca0: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2cb0: 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 6e 75 6d  for the.  ** num
2cc0: 65 72 69 63 20 76 61 6c 75 65 2e 20 20 54 69 63  eric value.  Tic
2cd0: 6b 65 74 20 5b 33 34 33 36 33 34 39 34 32 64 64  ket [343634942dd
2ce0: 35 34 61 62 35 37 62 37 30 32 34 5d 20 32 30 31  54ab57b7024] 201
2cf0: 38 2d 30 31 2d 33 31 2e 20 2a 2f 0a 20 20 70 52  8-01-31. */.  pR
2d00: 65 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45  ec->flags &= ~ME
2d10: 4d 5f 53 74 72 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  M_Str;.}../*.** 
2d20: 50 72 6f 63 65 73 73 69 6e 67 20 69 73 20 64 65  Processing is de
2d30: 74 65 72 6d 69 6e 65 20 62 79 20 74 68 65 20 61  termine by the a
2d40: 66 66 69 6e 69 74 79 20 70 61 72 61 6d 65 74 65  ffinity paramete
2d50: 72 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f  r:.**.** SQLITE_
2d60: 41 46 46 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a 20  AFF_INTEGER:.** 
2d70: 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 3a  SQLITE_AFF_REAL:
2d80: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e  .** SQLITE_AFF_N
2d90: 55 4d 45 52 49 43 3a 0a 2a 2a 20 20 20 20 54 72  UMERIC:.**    Tr
2da0: 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 70 52 65  y to convert pRe
2db0: 63 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  c to an integer 
2dc0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
2dd0: 72 20 61 20 0a 2a 2a 20 20 20 20 66 6c 6f 61 74  r a .**    float
2de0: 69 6e 67 2d 70 6f 69 6e 74 20 72 65 70 72 65 73  ing-point repres
2df0: 65 6e 74 61 74 69 6f 6e 20 69 66 20 61 6e 20 69  entation if an i
2e00: 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74  nteger represent
2e10: 61 74 69 6f 6e 0a 2a 2a 20 20 20 20 69 73 20 6e  ation.**    is n
2e20: 6f 74 20 70 6f 73 73 69 62 6c 65 2e 20 20 4e 6f  ot possible.  No
2e30: 74 65 20 74 68 61 74 20 74 68 65 20 69 6e 74 65  te that the inte
2e40: 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69  ger representati
2e50: 6f 6e 20 69 73 0a 2a 2a 20 20 20 20 61 6c 77 61  on is.**    alwa
2e60: 79 73 20 70 72 65 66 65 72 72 65 64 2c 20 65 76  ys preferred, ev
2e70: 65 6e 20 69 66 20 74 68 65 20 61 66 66 69 6e 69  en if the affini
2e80: 74 79 20 69 73 20 52 45 41 4c 2c 20 62 65 63 61  ty is REAL, beca
2e90: 75 73 65 0a 2a 2a 20 20 20 20 61 6e 20 69 6e 74  use.**    an int
2ea0: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
2eb0: 69 6f 6e 20 69 73 20 6d 6f 72 65 20 73 70 61 63  ion is more spac
2ec0: 65 20 65 66 66 69 63 69 65 6e 74 20 6f 6e 20 64  e efficient on d
2ed0: 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54  isk..**.** SQLIT
2ee0: 45 5f 41 46 46 5f 54 45 58 54 3a 0a 2a 2a 20 20  E_AFF_TEXT:.**  
2ef0: 20 20 43 6f 6e 76 65 72 74 20 70 52 65 63 20 74    Convert pRec t
2f00: 6f 20 61 20 74 65 78 74 20 72 65 70 72 65 73 65  o a text represe
2f10: 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53  ntation..**.** S
2f20: 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 3a 0a  QLITE_AFF_BLOB:.
2f30: 2a 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20 20 70 52  **    No-op.  pR
2f40: 65 63 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e  ec is unchanged.
2f50: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
2f60: 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20  applyAffinity(. 
2f70: 20 4d 65 6d 20 2a 70 52 65 63 2c 20 20 20 20 20   Mem *pRec,     
2f80: 20 20 20 20 20 2f 2a 20 54 68 65 20 76 61 6c 75       /* The valu
2f90: 65 20 74 6f 20 61 70 70 6c 79 20 61 66 66 69 6e  e to apply affin
2fa0: 69 74 79 20 74 6f 20 2a 2f 0a 20 20 63 68 61 72  ity to */.  char
2fb0: 20 61 66 66 69 6e 69 74 79 2c 20 20 20 20 20 20   affinity,      
2fc0: 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20  /* The affinity 
2fd0: 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f  to be applied */
2fe0: 0a 20 20 75 38 20 65 6e 63 20 20 20 20 20 20 20  .  u8 enc       
2ff0: 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68         /* Use th
3000: 69 73 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67  is text encoding
3010: 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61 66 66   */.){.  if( aff
3020: 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41 46  inity>=SQLITE_AF
3030: 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20 20 20  F_NUMERIC ){.   
3040: 20 61 73 73 65 72 74 28 20 61 66 66 69 6e 69 74   assert( affinit
3050: 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  y==SQLITE_AFF_IN
3060: 54 45 47 45 52 20 7c 7c 20 61 66 66 69 6e 69 74  TEGER || affinit
3070: 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45  y==SQLITE_AFF_RE
3080: 41 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  AL.             
3090: 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c  || affinity==SQL
30a0: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20  ITE_AFF_NUMERIC 
30b0: 29 3b 0a 20 20 20 20 69 66 28 20 28 70 52 65 63  );.    if( (pRec
30c0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
30d0: 74 29 3d 3d 30 20 29 7b 20 2f 2a 4f 50 54 49 4d  t)==0 ){ /*OPTIM
30e0: 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45  IZATION-IF-FALSE
30f0: 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28 70 52  */.      if( (pR
3100: 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ec->flags & MEM_
3110: 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Real)==0 ){.    
3120: 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c      if( pRec->fl
3130: 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 29 20  ags & MEM_Str ) 
3140: 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69  applyNumericAffi
3150: 6e 69 74 79 28 70 52 65 63 2c 31 29 3b 0a 20 20  nity(pRec,1);.  
3160: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
3170: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e     sqlite3VdbeIn
3180: 74 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 52  tegerAffinity(pR
3190: 65 63 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ec);.      }.   
31a0: 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 61   }.  }else if( a
31b0: 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f  ffinity==SQLITE_
31c0: 41 46 46 5f 54 45 58 54 20 29 7b 0a 20 20 20 20  AFF_TEXT ){.    
31d0: 2f 2a 20 4f 6e 6c 79 20 61 74 74 65 6d 70 74 20  /* Only attempt 
31e0: 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74  the conversion t
31f0: 6f 20 54 45 58 54 20 69 66 20 74 68 65 72 65 20  o TEXT if there 
3200: 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72  is an integer or
3210: 20 72 65 61 6c 0a 20 20 20 20 2a 2a 20 72 65 70   real.    ** rep
3220: 72 65 73 65 6e 74 61 74 69 6f 6e 20 28 62 6c 6f  resentation (blo
3230: 62 20 61 6e 64 20 4e 55 4c 4c 20 64 6f 20 6e 6f  b and NULL do no
3240: 74 20 67 65 74 20 63 6f 6e 76 65 72 74 65 64 29  t get converted)
3250: 20 62 75 74 20 6e 6f 20 73 74 72 69 6e 67 0a 20   but no string. 
3260: 20 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61     ** representa
3270: 74 69 6f 6e 2e 20 20 49 74 20 77 6f 75 6c 64 20  tion.  It would 
3280: 62 65 20 68 61 72 6d 6c 65 73 73 20 74 6f 20 72  be harmless to r
3290: 65 70 65 61 74 20 74 68 65 20 63 6f 6e 76 65 72  epeat the conver
32a0: 73 69 6f 6e 20 69 66 20 0a 20 20 20 20 2a 2a 20  sion if .    ** 
32b0: 74 68 65 72 65 20 69 73 20 61 6c 72 65 61 64 79  there is already
32c0: 20 61 20 73 74 72 69 6e 67 20 72 65 70 2c 20 62   a string rep, b
32d0: 75 74 20 69 74 20 69 73 20 70 6f 69 6e 74 6c 65  ut it is pointle
32e0: 73 73 20 74 6f 20 77 61 73 74 65 20 74 68 6f 73  ss to waste thos
32f0: 65 0a 20 20 20 20 2a 2a 20 43 50 55 20 63 79 63  e.    ** CPU cyc
3300: 6c 65 73 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20  les. */.    if( 
3310: 30 3d 3d 28 70 52 65 63 2d 3e 66 6c 61 67 73 26  0==(pRec->flags&
3320: 4d 45 4d 5f 53 74 72 29 20 29 7b 20 2f 2a 4f 50  MEM_Str) ){ /*OP
3330: 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41  TIMIZATION-IF-FA
3340: 4c 53 45 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  LSE*/.      if( 
3350: 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 28 4d 45  (pRec->flags&(ME
3360: 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29  M_Real|MEM_Int))
3370: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
3380: 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67  te3VdbeMemString
3390: 69 66 79 28 70 52 65 63 2c 20 65 6e 63 2c 20 31  ify(pRec, enc, 1
33a0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
33b0: 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73  .    pRec->flags
33c0: 20 26 3d 20 7e 28 4d 45 4d 5f 52 65 61 6c 7c 4d   &= ~(MEM_Real|M
33d0: 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 7d 0a 0a  EM_Int);.  }.}..
33e0: 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e  /*.** Try to con
33f0: 76 65 72 74 20 74 68 65 20 74 79 70 65 20 6f 66  vert the type of
3400: 20 61 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75   a function argu
3410: 6d 65 6e 74 20 6f 72 20 61 20 72 65 73 75 6c 74  ment or a result
3420: 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 69 6e 74 6f 20   column.** into 
3430: 61 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73  a numeric repres
3440: 65 6e 74 61 74 69 6f 6e 2e 20 20 55 73 65 20 65  entation.  Use e
3450: 69 74 68 65 72 20 49 4e 54 45 47 45 52 20 6f 72  ither INTEGER or
3460: 20 52 45 41 4c 20 77 68 69 63 68 65 76 65 72 0a   REAL whichever.
3470: 2a 2a 20 69 73 20 61 70 70 72 6f 70 72 69 61 74  ** is appropriat
3480: 65 2e 20 20 42 75 74 20 6f 6e 6c 79 20 64 6f 20  e.  But only do 
3490: 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  the conversion i
34a0: 66 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65  f it is possible
34b0: 20 77 69 74 68 6f 75 74 0a 2a 2a 20 6c 6f 73 73   without.** loss
34c0: 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20   of information 
34d0: 61 6e 64 20 72 65 74 75 72 6e 20 74 68 65 20 72  and return the r
34e0: 65 76 69 73 65 64 20 74 79 70 65 20 6f 66 20 74  evised type of t
34f0: 68 65 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a  he argument..*/.
3500: 69 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  int sqlite3_valu
3510: 65 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65 28 73  e_numeric_type(s
3520: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56  qlite3_value *pV
3530: 61 6c 29 7b 0a 20 20 69 6e 74 20 65 54 79 70 65  al){.  int eType
3540: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
3550: 5f 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20 69  _type(pVal);.  i
3560: 66 28 20 65 54 79 70 65 3d 3d 53 51 4c 49 54 45  f( eType==SQLITE
3570: 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 4d 65 6d  _TEXT ){.    Mem
3580: 20 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70   *pMem = (Mem*)p
3590: 56 61 6c 3b 0a 20 20 20 20 61 70 70 6c 79 4e 75  Val;.    applyNu
35a0: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 4d  mericAffinity(pM
35b0: 65 6d 2c 20 30 29 3b 0a 20 20 20 20 65 54 79 70  em, 0);.    eTyp
35c0: 65 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  e = sqlite3_valu
35d0: 65 5f 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20  e_type(pVal);.  
35e0: 7d 0a 20 20 72 65 74 75 72 6e 20 65 54 79 70 65  }.  return eType
35f0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72  ;.}../*.** Expor
3600: 74 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61  ted version of a
3610: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20  pplyAffinity(). 
3620: 54 68 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f  This one works o
3630: 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  n sqlite3_value*
3640: 2c 20 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e  , .** not the in
3650: 74 65 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65  ternal Mem* type
3660: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
3670: 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e  3ValueApplyAffin
3680: 69 74 79 28 0a 20 20 73 71 6c 69 74 65 33 5f 76  ity(.  sqlite3_v
3690: 61 6c 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75  alue *pVal, .  u
36a0: 38 20 61 66 66 69 6e 69 74 79 2c 20 0a 20 20 75  8 affinity, .  u
36b0: 38 20 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79  8 enc.){.  apply
36c0: 41 66 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29  Affinity((Mem *)
36d0: 70 56 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20  pVal, affinity, 
36e0: 65 6e 63 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 70  enc);.}../*.** p
36f0: 4d 65 6d 20 63 75 72 72 65 6e 74 6c 79 20 6f 6e  Mem currently on
3700: 6c 79 20 68 6f 6c 64 73 20 61 20 73 74 72 69 6e  ly holds a strin
3710: 67 20 74 79 70 65 20 28 6f 72 20 6d 61 79 62 65  g type (or maybe
3720: 20 61 20 42 4c 4f 42 20 74 68 61 74 20 77 65 20   a BLOB that we 
3730: 63 61 6e 0a 2a 2a 20 69 6e 74 65 72 70 72 65 74  can.** interpret
3740: 20 61 73 20 61 20 73 74 72 69 6e 67 20 69 66 20   as a string if 
3750: 77 65 20 77 61 6e 74 20 74 6f 29 2e 20 20 43 6f  we want to).  Co
3760: 6d 70 75 74 65 20 69 74 73 20 63 6f 72 72 65 73  mpute its corres
3770: 70 6f 6e 64 69 6e 67 0a 2a 2a 20 6e 75 6d 65 72  ponding.** numer
3780: 69 63 20 74 79 70 65 2c 20 69 66 20 68 61 73 20  ic type, if has 
3790: 6f 6e 65 2e 20 20 53 65 74 20 74 68 65 20 70 4d  one.  Set the pM
37a0: 65 6d 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d  em->u.r and pMem
37b0: 2d 3e 75 2e 69 20 66 69 65 6c 64 73 0a 2a 2a 20  ->u.i fields.** 
37c0: 61 63 63 6f 72 64 69 6e 67 6c 79 2e 0a 2a 2f 0a  accordingly..*/.
37d0: 73 74 61 74 69 63 20 75 31 36 20 53 51 4c 49 54  static u16 SQLIT
37e0: 45 5f 4e 4f 49 4e 4c 49 4e 45 20 63 6f 6d 70 75  E_NOINLINE compu
37f0: 74 65 4e 75 6d 65 72 69 63 54 79 70 65 28 4d 65  teNumericType(Me
3800: 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 61 73 73 65  m *pMem){.  asse
3810: 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73  rt( (pMem->flags
3820: 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
3830: 52 65 61 6c 29 29 3d 3d 30 20 29 3b 0a 20 20 61  Real))==0 );.  a
3840: 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c  ssert( (pMem->fl
3850: 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d  ags & (MEM_Str|M
3860: 45 4d 5f 42 6c 6f 62 29 29 21 3d 30 20 29 3b 0a  EM_Blob))!=0 );.
3870: 20 20 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f    if( sqlite3Ato
3880: 46 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d  F(pMem->z, &pMem
3890: 2d 3e 75 2e 72 2c 20 70 4d 65 6d 2d 3e 6e 2c 20  ->u.r, pMem->n, 
38a0: 70 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 30 20 29 7b  pMem->enc)==0 ){
38b0: 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20  .    return 0;. 
38c0: 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33   }.  if( sqlite3
38d0: 41 74 6f 69 36 34 28 70 4d 65 6d 2d 3e 7a 2c 20  Atoi64(pMem->z, 
38e0: 26 70 4d 65 6d 2d 3e 75 2e 69 2c 20 70 4d 65 6d  &pMem->u.i, pMem
38f0: 2d 3e 6e 2c 20 70 4d 65 6d 2d 3e 65 6e 63 29 3d  ->n, pMem->enc)=
3900: 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  =0 ){.    return
3910: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20   MEM_Int;.  }.  
3920: 72 65 74 75 72 6e 20 4d 45 4d 5f 52 65 61 6c 3b  return MEM_Real;
3930: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  .}../*.** Return
3940: 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70   the numeric typ
3950: 65 20 66 6f 72 20 70 4d 65 6d 2c 20 65 69 74 68  e for pMem, eith
3960: 65 72 20 4d 45 4d 5f 49 6e 74 20 6f 72 20 4d 45  er MEM_Int or ME
3970: 4d 5f 52 65 61 6c 20 6f 72 20 62 6f 74 68 20 6f  M_Real or both o
3980: 72 0a 2a 2a 20 6e 6f 6e 65 2e 20 20 0a 2a 2a 0a  r.** none.  .**.
3990: 2a 2a 20 55 6e 6c 69 6b 65 20 61 70 70 6c 79 4e  ** Unlike applyN
39a0: 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 29  umericAffinity()
39b0: 2c 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 64  , this routine d
39c0: 6f 65 73 20 6e 6f 74 20 6d 6f 64 69 66 79 20 70  oes not modify p
39d0: 4d 65 6d 2d 3e 66 6c 61 67 73 2e 0a 2a 2a 20 42  Mem->flags..** B
39e0: 75 74 20 69 74 20 64 6f 65 73 20 73 65 74 20 70  ut it does set p
39f0: 4d 65 6d 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65  Mem->u.r and pMe
3a00: 6d 2d 3e 75 2e 69 20 61 70 70 72 6f 70 72 69 61  m->u.i appropria
3a10: 74 65 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  tely..*/.static 
3a20: 75 31 36 20 6e 75 6d 65 72 69 63 54 79 70 65 28  u16 numericType(
3a30: 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 66  Mem *pMem){.  if
3a40: 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20  ( pMem->flags & 
3a50: 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61  (MEM_Int|MEM_Rea
3a60: 6c 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  l) ){.    return
3a70: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28   pMem->flags & (
3a80: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
3a90: 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4d 65  );.  }.  if( pMe
3aa0: 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  m->flags & (MEM_
3ab0: 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b  Str|MEM_Blob) ){
3ac0: 0a 20 20 20 20 72 65 74 75 72 6e 20 63 6f 6d 70  .    return comp
3ad0: 75 74 65 4e 75 6d 65 72 69 63 54 79 70 65 28 70  uteNumericType(p
3ae0: 4d 65 6d 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75  Mem);.  }.  retu
3af0: 72 6e 20 30 3b 0a 7d 0a 0a 23 69 66 64 65 66 20  rn 0;.}..#ifdef 
3b00: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a  SQLITE_DEBUG./*.
3b10: 2a 2a 20 57 72 69 74 65 20 61 20 6e 69 63 65 20  ** Write a nice 
3b20: 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74  string represent
3b30: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e  ation of the con
3b40: 74 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d  tents of cell pM
3b50: 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65  em.** into buffe
3b60: 72 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e  r zBuf, length n
3b70: 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  Buf..*/.void sql
3b80: 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74  ite3VdbeMemPrett
3b90: 79 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d  yPrint(Mem *pMem
3ba0: 2c 20 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20  , char *zBuf){. 
3bb0: 20 63 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42   char *zCsr = zB
3bc0: 75 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d  uf;.  int f = pM
3bd0: 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74  em->flags;..  st
3be0: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
3bf0: 2a 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b  *const encnames[
3c00: 5d 20 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29  ] = {"(X)", "(8)
3c10: 22 2c 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31  ", "(16LE)", "(1
3c20: 36 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66  6BE)"};..  if( f
3c30: 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20  &MEM_Blob ){.   
3c40: 20 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72   int i;.    char
3c50: 20 63 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20   c;.    if( f & 
3c60: 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20  MEM_Dyn ){.     
3c70: 20 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20   c = 'z';.      
3c80: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
3c90: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68  M_Static|MEM_Eph
3ca0: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
3cb0: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3cc0: 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20  _Static ){.     
3cd0: 20 63 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20   c = 't';.      
3ce0: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
3cf0: 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29  M_Dyn|MEM_Ephem)
3d00: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
3d10: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70  e if( f & MEM_Ep
3d20: 68 65 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d  hem ){.      c =
3d30: 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65   'e';.      asse
3d40: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74  rt( (f & (MEM_St
3d50: 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d  atic|MEM_Dyn))==
3d60: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  0 );.    }else{.
3d70: 20 20 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20        c = 's';. 
3d80: 20 20 20 7d 0a 20 20 20 20 2a 28 7a 43 73 72 2b     }.    *(zCsr+
3d90: 2b 29 20 3d 20 63 3b 0a 20 20 20 20 73 71 6c 69  +) = c;.    sqli
3da0: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30  te3_snprintf(100
3db0: 2c 20 7a 43 73 72 2c 20 22 25 64 5b 22 2c 20 70  , zCsr, "%d[", p
3dc0: 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a 43 73  Mem->n);.    zCs
3dd0: 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  r += sqlite3Strl
3de0: 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20  en30(zCsr);.    
3df0: 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26  for(i=0; i<16 &&
3e00: 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29   i<pMem->n; i++)
3e10: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
3e20: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43  snprintf(100, zC
3e30: 73 72 2c 20 22 25 30 32 58 22 2c 20 28 28 69 6e  sr, "%02X", ((in
3e40: 74 29 70 4d 65 6d 2d 3e 7a 5b 69 5d 20 26 20 30  t)pMem->z[i] & 0
3e50: 78 46 46 29 29 3b 0a 20 20 20 20 20 20 7a 43 73  xFF));.      zCs
3e60: 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  r += sqlite3Strl
3e70: 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20  en30(zCsr);.    
3e80: 7d 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  }.    for(i=0; i
3e90: 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e  <16 && i<pMem->n
3ea0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 68  ; i++){.      ch
3eb0: 61 72 20 7a 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 69  ar z = pMem->z[i
3ec0: 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 3c 33  ];.      if( z<3
3ed0: 32 20 7c 7c 20 7a 3e 31 32 36 20 29 20 2a 7a 43  2 || z>126 ) *zC
3ee0: 73 72 2b 2b 20 3d 20 27 2e 27 3b 0a 20 20 20 20  sr++ = '.';.    
3ef0: 20 20 65 6c 73 65 20 2a 7a 43 73 72 2b 2b 20 3d    else *zCsr++ =
3f00: 20 7a 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a 28   z;.    }.    *(
3f10: 7a 43 73 72 2b 2b 29 20 3d 20 27 5d 27 3b 0a 20  zCsr++) = ']';. 
3f20: 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 5a     if( f & MEM_Z
3f30: 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ero ){.      sql
3f40: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
3f50: 30 2c 20 7a 43 73 72 2c 22 2b 25 64 7a 22 2c 70  0, zCsr,"+%dz",p
3f60: 4d 65 6d 2d 3e 75 2e 6e 5a 65 72 6f 29 3b 0a 20  Mem->u.nZero);. 
3f70: 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c       zCsr += sql
3f80: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73  ite3Strlen30(zCs
3f90: 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a 7a  r);.    }.    *z
3fa0: 43 73 72 20 3d 20 27 5c 30 27 3b 0a 20 20 7d 65  Csr = '\0';.  }e
3fb0: 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f  lse if( f & MEM_
3fc0: 53 74 72 20 29 7b 0a 20 20 20 20 69 6e 74 20 6a  Str ){.    int j
3fd0: 2c 20 6b 3b 0a 20 20 20 20 7a 42 75 66 5b 30 5d  , k;.    zBuf[0]
3fe0: 20 3d 20 27 20 27 3b 0a 20 20 20 20 69 66 28 20   = ' ';.    if( 
3ff0: 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20  f & MEM_Dyn ){. 
4000: 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27       zBuf[1] = '
4010: 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  z';.      assert
4020: 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74  ( (f & (MEM_Stat
4030: 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d  ic|MEM_Ephem))==
4040: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  0 );.    }else i
4050: 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74 69  f( f & MEM_Stati
4060: 63 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b  c ){.      zBuf[
4070: 31 5d 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20  1] = 't';.      
4080: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
4090: 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29  M_Dyn|MEM_Ephem)
40a0: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
40b0: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70  e if( f & MEM_Ep
40c0: 68 65 6d 20 29 7b 0a 20 20 20 20 20 20 7a 42 75  hem ){.      zBu
40d0: 66 5b 31 5d 20 3d 20 27 65 27 3b 0a 20 20 20 20  f[1] = 'e';.    
40e0: 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28    assert( (f & (
40f0: 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44  MEM_Static|MEM_D
4100: 79 6e 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  yn))==0 );.    }
4110: 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 42 75 66  else{.      zBuf
4120: 5b 31 5d 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d  [1] = 's';.    }
4130: 0a 20 20 20 20 6b 20 3d 20 32 3b 0a 20 20 20 20  .    k = 2;.    
4140: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
4150: 28 31 30 30 2c 20 26 7a 42 75 66 5b 6b 5d 2c 20  (100, &zBuf[k], 
4160: 22 25 64 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a  "%d", pMem->n);.
4170: 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65 33      k += sqlite3
4180: 53 74 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b 6b  Strlen30(&zBuf[k
4190: 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b  ]);.    zBuf[k++
41a0: 5d 20 3d 20 27 5b 27 3b 0a 20 20 20 20 66 6f 72  ] = '[';.    for
41b0: 28 6a 3d 30 3b 20 6a 3c 31 35 20 26 26 20 6a 3c  (j=0; j<15 && j<
41c0: 70 4d 65 6d 2d 3e 6e 3b 20 6a 2b 2b 29 7b 0a 20  pMem->n; j++){. 
41d0: 20 20 20 20 20 75 38 20 63 20 3d 20 70 4d 65 6d       u8 c = pMem
41e0: 2d 3e 7a 5b 6a 5d 3b 0a 20 20 20 20 20 20 69 66  ->z[j];.      if
41f0: 28 20 63 3e 3d 30 78 32 30 20 26 26 20 63 3c 30  ( c>=0x20 && c<0
4200: 78 37 66 20 29 7b 0a 20 20 20 20 20 20 20 20 7a  x7f ){.        z
4210: 42 75 66 5b 6b 2b 2b 5d 20 3d 20 63 3b 0a 20 20  Buf[k++] = c;.  
4220: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
4230: 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27     zBuf[k++] = '
4240: 2e 27 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  .';.      }.    
4250: 7d 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20  }.    zBuf[k++] 
4260: 3d 20 27 5d 27 3b 0a 20 20 20 20 73 71 6c 69 74  = ']';.    sqlit
4270: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
4280: 26 7a 42 75 66 5b 6b 5d 2c 20 65 6e 63 6e 61 6d  &zBuf[k], encnam
4290: 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a  es[pMem->enc]);.
42a0: 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65 33      k += sqlite3
42b0: 53 74 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b 6b  Strlen30(&zBuf[k
42c0: 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b  ]);.    zBuf[k++
42d0: 5d 20 3d 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e  ] = 0;.  }.}.#en
42e0: 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
42f0: 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 50  TE_DEBUG./*.** P
4300: 72 69 6e 74 20 74 68 65 20 76 61 6c 75 65 20 6f  rint the value o
4310: 66 20 61 20 72 65 67 69 73 74 65 72 20 66 6f 72  f a register for
4320: 20 74 72 61 63 69 6e 67 20 70 75 72 70 6f 73 65   tracing purpose
4330: 73 3a 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  s:.*/.static voi
4340: 64 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28  d memTracePrint(
4350: 4d 65 6d 20 2a 70 29 7b 0a 20 20 69 66 28 20 70  Mem *p){.  if( p
4360: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 55 6e  ->flags & MEM_Un
4370: 64 65 66 69 6e 65 64 20 29 7b 0a 20 20 20 20 70  defined ){.    p
4380: 72 69 6e 74 66 28 22 20 75 6e 64 65 66 69 6e 65  rintf(" undefine
4390: 64 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  d");.  }else if(
43a0: 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f   p->flags & MEM_
43b0: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70 72 69 6e  Null ){.    prin
43c0: 74 66 28 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45  tf(p->flags & ME
43d0: 4d 5f 5a 65 72 6f 20 3f 20 22 20 4e 55 4c 4c 2d  M_Zero ? " NULL-
43e0: 6e 6f 63 68 6e 67 22 20 3a 20 22 20 4e 55 4c 4c  nochng" : " NULL
43f0: 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  ");.  }else if( 
4400: 28 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  (p->flags & (MEM
4410: 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d  _Int|MEM_Str))==
4420: 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72  (MEM_Int|MEM_Str
4430: 29 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28  ) ){.    printf(
4440: 22 20 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75  " si:%lld", p->u
4450: 2e 69 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  .i);.  }else if(
4460: 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f   p->flags & MEM_
4470: 49 6e 74 20 29 7b 0a 20 20 20 20 70 72 69 6e 74  Int ){.    print
4480: 66 28 22 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e  f(" i:%lld", p->
4490: 75 2e 69 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  u.i);.#ifndef SQ
44a0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
44b0: 4e 47 5f 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65  NG_POINT.  }else
44c0: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
44d0: 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20  MEM_Real ){.    
44e0: 70 72 69 6e 74 66 28 22 20 72 3a 25 67 22 2c 20  printf(" r:%g", 
44f0: 70 2d 3e 75 2e 72 29 3b 0a 23 65 6e 64 69 66 0a  p->u.r);.#endif.
4500: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66    }else if( p->f
4510: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
4520: 74 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28  t ){.    printf(
4530: 22 20 28 72 6f 77 73 65 74 29 22 29 3b 0a 20 20  " (rowset)");.  
4540: 7d 65 6c 73 65 7b 0a 20 20 20 20 63 68 61 72 20  }else{.    char 
4550: 7a 42 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73  zBuf[200];.    s
4560: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65  qlite3VdbeMemPre
4570: 74 74 79 50 72 69 6e 74 28 70 2c 20 7a 42 75 66  ttyPrint(p, zBuf
4580: 29 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20  );.    printf(" 
4590: 25 73 22 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a  %s", zBuf);.  }.
45a0: 20 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26    if( p->flags &
45b0: 20 4d 45 4d 5f 53 75 62 74 79 70 65 20 29 20 70   MEM_Subtype ) p
45c0: 72 69 6e 74 66 28 22 20 73 75 62 74 79 70 65 3d  rintf(" subtype=
45d0: 30 78 25 30 32 78 22 2c 20 70 2d 3e 65 53 75 62  0x%02x", p->eSub
45e0: 74 79 70 65 29 3b 0a 7d 0a 73 74 61 74 69 63 20  type);.}.static 
45f0: 76 6f 69 64 20 72 65 67 69 73 74 65 72 54 72 61  void registerTra
4600: 63 65 28 69 6e 74 20 69 52 65 67 2c 20 4d 65 6d  ce(int iReg, Mem
4610: 20 2a 70 29 7b 0a 20 20 70 72 69 6e 74 66 28 22   *p){.  printf("
4620: 52 45 47 5b 25 64 5d 20 3d 20 22 2c 20 69 52 65  REG[%d] = ", iRe
4630: 67 29 3b 0a 20 20 6d 65 6d 54 72 61 63 65 50 72  g);.  memTracePr
4640: 69 6e 74 28 70 29 3b 0a 20 20 70 72 69 6e 74 66  int(p);.  printf
4650: 28 22 5c 6e 22 29 3b 0a 20 20 73 71 6c 69 74 65  ("\n");.  sqlite
4660: 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76  3VdbeCheckMemInv
4670: 61 72 69 61 6e 74 73 28 70 29 3b 0a 7d 0a 23 65  ariants(p);.}.#e
4680: 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
4690: 49 54 45 5f 44 45 42 55 47 0a 23 20 20 64 65 66  ITE_DEBUG.#  def
46a0: 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52 41  ine REGISTER_TRA
46b0: 43 45 28 52 2c 4d 29 20 69 66 28 64 62 2d 3e 66  CE(R,M) if(db->f
46c0: 6c 61 67 73 26 53 51 4c 49 54 45 5f 56 64 62 65  lags&SQLITE_Vdbe
46d0: 54 72 61 63 65 29 72 65 67 69 73 74 65 72 54 72  Trace)registerTr
46e0: 61 63 65 28 52 2c 4d 29 0a 23 65 6c 73 65 0a 23  ace(R,M).#else.#
46f0: 20 20 64 65 66 69 6e 65 20 52 45 47 49 53 54 45    define REGISTE
4700: 52 5f 54 52 41 43 45 28 52 2c 4d 29 0a 23 65 6e  R_TRACE(R,M).#en
4710: 64 69 66 0a 0a 0a 23 69 66 64 65 66 20 56 44 42  dif...#ifdef VDB
4720: 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a  E_PROFILE../* .*
4730: 2a 20 68 77 74 69 6d 65 2e 68 20 63 6f 6e 74 61  * hwtime.h conta
4740: 69 6e 73 20 69 6e 6c 69 6e 65 20 61 73 73 65 6d  ins inline assem
4750: 62 6c 65 72 20 63 6f 64 65 20 66 6f 72 20 69 6d  bler code for im
4760: 70 6c 65 6d 65 6e 74 69 6e 67 20 0a 2a 2a 20 68  plementing .** h
4770: 69 67 68 2d 70 65 72 66 6f 72 6d 61 6e 63 65 20  igh-performance 
4780: 74 69 6d 69 6e 67 20 72 6f 75 74 69 6e 65 73 2e  timing routines.
4790: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 68 77  .*/.#include "hw
47a0: 74 69 6d 65 2e 68 22 0a 0a 23 65 6e 64 69 66 0a  time.h"..#endif.
47b0: 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a  .#ifndef NDEBUG.
47c0: 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74  /*.** This funct
47d0: 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 63 61 6c 6c  ion is only call
47e0: 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61  ed from within a
47f0: 6e 20 61 73 73 65 72 74 28 29 20 65 78 70 72 65  n assert() expre
4800: 73 73 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63 68 65  ssion. It.** che
4810: 63 6b 73 20 74 68 61 74 20 74 68 65 20 73 71 6c  cks that the sql
4820: 69 74 65 33 2e 6e 54 72 61 6e 73 61 63 74 69 6f  ite3.nTransactio
4830: 6e 20 76 61 72 69 61 62 6c 65 20 69 73 20 63 6f  n variable is co
4840: 72 72 65 63 74 6c 79 20 73 65 74 20 74 6f 0a 2a  rrectly set to.*
4850: 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * the number of 
4860: 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  non-transaction 
4870: 73 61 76 65 70 6f 69 6e 74 73 20 63 75 72 72 65  savepoints curre
4880: 6e 74 6c 79 20 69 6e 20 74 68 65 20 0a 2a 2a 20  ntly in the .** 
4890: 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72  linked list star
48a0: 74 69 6e 67 20 61 74 20 73 71 6c 69 74 65 33 2e  ting at sqlite3.
48b0: 70 53 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a  pSavepoint..** .
48c0: 2a 2a 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20  ** Usage:.**.** 
48d0: 20 20 20 20 61 73 73 65 72 74 28 20 63 68 65 63      assert( chec
48e0: 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28  kSavepointCount(
48f0: 64 62 29 20 29 3b 0a 2a 2f 0a 73 74 61 74 69 63  db) );.*/.static
4900: 20 69 6e 74 20 63 68 65 63 6b 53 61 76 65 70 6f   int checkSavepo
4910: 69 6e 74 43 6f 75 6e 74 28 73 71 6c 69 74 65 33  intCount(sqlite3
4920: 20 2a 64 62 29 7b 0a 20 20 69 6e 74 20 6e 20 3d   *db){.  int n =
4930: 20 30 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20   0;.  Savepoint 
4940: 2a 70 3b 0a 20 20 66 6f 72 28 70 3d 64 62 2d 3e  *p;.  for(p=db->
4950: 70 53 61 76 65 70 6f 69 6e 74 3b 20 70 3b 20 70  pSavepoint; p; p
4960: 3d 70 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a  =p->pNext) n++;.
4970: 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 28 64 62    assert( n==(db
4980: 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64  ->nSavepoint + d
4990: 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
49a0: 53 61 76 65 70 6f 69 6e 74 29 20 29 3b 0a 20 20  Savepoint) );.  
49b0: 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64  return 1;.}.#end
49c0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  if../*.** Return
49d0: 20 74 68 65 20 72 65 67 69 73 74 65 72 20 6f 66   the register of
49e0: 20 70 4f 70 2d 3e 70 32 20 61 66 74 65 72 20 66   pOp->p2 after f
49f0: 69 72 73 74 20 70 72 65 70 61 72 69 6e 67 20 69  irst preparing i
4a00: 74 20 74 6f 20 62 65 0a 2a 2a 20 6f 76 65 72 77  t to be.** overw
4a10: 72 69 74 74 65 6e 20 77 69 74 68 20 61 6e 20 69  ritten with an i
4a20: 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2f  nteger value..*/
4a30: 0a 73 74 61 74 69 63 20 53 51 4c 49 54 45 5f 4e  .static SQLITE_N
4a40: 4f 49 4e 4c 49 4e 45 20 4d 65 6d 20 2a 6f 75 74  OINLINE Mem *out
4a50: 32 50 72 65 72 65 6c 65 61 73 65 57 69 74 68 43  2PrereleaseWithC
4a60: 6c 65 61 72 28 4d 65 6d 20 2a 70 4f 75 74 29 7b  lear(Mem *pOut){
4a70: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
4a80: 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
4a90: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
4aa0: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 72 65 74 75 72  MEM_Int;.  retur
4ab0: 6e 20 70 4f 75 74 3b 0a 7d 0a 73 74 61 74 69 63  n pOut;.}.static
4ac0: 20 4d 65 6d 20 2a 6f 75 74 32 50 72 65 72 65 6c   Mem *out2Prerel
4ad0: 65 61 73 65 28 56 64 62 65 20 2a 70 2c 20 56 64  ease(Vdbe *p, Vd
4ae0: 62 65 4f 70 20 2a 70 4f 70 29 7b 0a 20 20 4d 65  beOp *pOp){.  Me
4af0: 6d 20 2a 70 4f 75 74 3b 0a 20 20 61 73 73 65 72  m *pOut;.  asser
4b00: 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a  t( pOp->p2>0 );.
4b10: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
4b20: 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  2<=(p->nMem+1 - 
4b30: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
4b40: 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d   pOut = &p->aMem
4b50: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d  [pOp->p2];.  mem
4b60: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
4b70: 20 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 56 64   pOut);.  if( Vd
4b80: 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75  beMemDynamic(pOu
4b90: 74 29 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41  t) ){ /*OPTIMIZA
4ba0: 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a  TION-IF-FALSE*/.
4bb0: 20 20 20 20 72 65 74 75 72 6e 20 6f 75 74 32 50      return out2P
4bc0: 72 65 72 65 6c 65 61 73 65 57 69 74 68 43 6c 65  rereleaseWithCle
4bd0: 61 72 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73  ar(pOut);.  }els
4be0: 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  e{.    pOut->fla
4bf0: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
4c00: 20 20 72 65 74 75 72 6e 20 70 4f 75 74 3b 0a 20    return pOut;. 
4c10: 20 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65   }.}.../*.** Exe
4c20: 63 75 74 65 20 61 73 20 6d 75 63 68 20 6f 66 20  cute as much of 
4c30: 61 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20 61  a VDBE program a
4c40: 73 20 77 65 20 63 61 6e 2e 0a 2a 2a 20 54 68 69  s we can..** Thi
4c50: 73 20 69 73 20 74 68 65 20 63 6f 72 65 20 6f 66  s is the core of
4c60: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 2e   sqlite3_step().
4c70: 20 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65    .*/.int sqlite
4c80: 33 56 64 62 65 45 78 65 63 28 0a 20 20 56 64 62  3VdbeExec(.  Vdb
4c90: 65 20 2a 70 20 20 20 20 20 20 20 20 20 20 20 20  e *p            
4ca0: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56          /* The V
4cb0: 44 42 45 20 2a 2f 0a 29 7b 0a 20 20 4f 70 20 2a  DBE */.){.  Op *
4cc0: 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 20 20 20  aOp = p->aOp;   
4cd0: 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f         /* Copy o
4ce0: 66 20 70 2d 3e 61 4f 70 20 2a 2f 0a 20 20 4f 70  f p->aOp */.  Op
4cf0: 20 2a 70 4f 70 20 3d 20 61 4f 70 3b 20 20 20 20   *pOp = aOp;    
4d00: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72           /* Curr
4d10: 65 6e 74 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f  ent operation */
4d20: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
4d30: 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65  ITE_DEBUG) || de
4d40: 66 69 6e 65 64 28 56 44 42 45 5f 50 52 4f 46 49  fined(VDBE_PROFI
4d50: 4c 45 29 0a 20 20 4f 70 20 2a 70 4f 72 69 67 4f  LE).  Op *pOrigO
4d60: 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
4d70: 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20 70 4f 70   /* Value of pOp
4d80: 20 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74   at the top of t
4d90: 68 65 20 6c 6f 6f 70 20 2a 2f 0a 23 65 6e 64 69  he loop */.#endi
4da0: 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
4db0: 44 45 42 55 47 0a 20 20 69 6e 74 20 6e 45 78 74  DEBUG.  int nExt
4dc0: 72 61 44 65 6c 65 74 65 20 3d 20 30 3b 20 20 20  raDelete = 0;   
4dd0: 20 20 20 2f 2a 20 56 65 72 69 66 69 65 73 20 46     /* Verifies F
4de0: 4f 52 44 45 4c 45 54 45 20 61 6e 64 20 41 55 58  ORDELETE and AUX
4df0: 44 45 4c 45 54 45 20 66 6c 61 67 73 20 2a 2f 0a  DELETE flags */.
4e00: 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 72 63 20  #endif.  int rc 
4e10: 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20 20  = SQLITE_OK;    
4e20: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20      /* Value to 
4e30: 72 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c 69  return */.  sqli
4e40: 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62 3b  te3 *db = p->db;
4e50: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61         /* The da
4e60: 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 38 20 72  tabase */.  u8 r
4e70: 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c  esetSchemaOnFaul
4e80: 74 20 3d 20 30 3b 20 2f 2a 20 52 65 73 65 74 20  t = 0; /* Reset 
4e90: 73 63 68 65 6d 61 20 61 66 74 65 72 20 61 6e 20  schema after an 
4ea0: 65 72 72 6f 72 20 69 66 20 70 6f 73 69 74 69 76  error if positiv
4eb0: 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 6f 64 69  e */.  u8 encodi
4ec0: 6e 67 20 3d 20 45 4e 43 28 64 62 29 3b 20 20 20  ng = ENC(db);   
4ed0: 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
4ee0: 65 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20  e encoding */.  
4ef0: 69 6e 74 20 69 43 6f 6d 70 61 72 65 20 3d 20 30  int iCompare = 0
4f00: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65  ;          /* Re
4f10: 73 75 6c 74 20 6f 66 20 6c 61 73 74 20 63 6f 6d  sult of last com
4f20: 70 61 72 69 73 6f 6e 20 2a 2f 0a 20 20 75 6e 73  parison */.  uns
4f30: 69 67 6e 65 64 20 6e 56 6d 53 74 65 70 20 3d 20  igned nVmStep = 
4f40: 30 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  0;      /* Numbe
4f50: 72 20 6f 66 20 76 69 72 74 75 61 6c 20 6d 61 63  r of virtual mac
4f60: 68 69 6e 65 20 73 74 65 70 73 20 2a 2f 0a 23 69  hine steps */.#i
4f70: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
4f80: 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42  T_PROGRESS_CALLB
4f90: 41 43 4b 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e  ACK.  unsigned n
4fa0: 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 3b 20 20  ProgressLimit;  
4fb0: 20 2f 2a 20 49 6e 76 6f 6b 65 20 78 50 72 6f 67   /* Invoke xProg
4fc0: 72 65 73 73 28 29 20 77 68 65 6e 20 6e 56 6d 53  ress() when nVmS
4fd0: 74 65 70 20 72 65 61 63 68 65 73 20 74 68 69 73  tep reaches this
4fe0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d   */.#endif.  Mem
4ff0: 20 2a 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d   *aMem = p->aMem
5000: 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20  ;       /* Copy 
5010: 6f 66 20 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20  of p->aMem */.  
5020: 4d 65 6d 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20  Mem *pIn1 = 0;  
5030: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73             /* 1s
5040: 74 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20  t input operand 
5050: 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d  */.  Mem *pIn2 =
5060: 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   0;             
5070: 2f 2a 20 32 6e 64 20 69 6e 70 75 74 20 6f 70 65  /* 2nd input ope
5080: 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  rand */.  Mem *p
5090: 49 6e 33 20 3d 20 30 3b 20 20 20 20 20 20 20 20  In3 = 0;        
50a0: 20 20 20 20 20 2f 2a 20 33 72 64 20 69 6e 70 75       /* 3rd inpu
50b0: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d  t operand */.  M
50c0: 65 6d 20 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20  em *pOut = 0;   
50d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 75 74            /* Out
50e0: 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 23  put operand */.#
50f0: 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49  ifdef VDBE_PROFI
5100: 4c 45 0a 20 20 75 36 34 20 73 74 61 72 74 3b 20  LE.  u64 start; 
5110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5120: 2f 2a 20 43 50 55 20 63 6c 6f 63 6b 20 63 6f 75  /* CPU clock cou
5130: 6e 74 20 61 74 20 73 74 61 72 74 20 6f 66 20 6f  nt at start of o
5140: 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a  pcode */.#endif.
5150: 20 20 2f 2a 2a 2a 20 49 4e 53 45 52 54 20 53 54    /*** INSERT ST
5160: 41 43 4b 20 55 4e 49 4f 4e 20 48 45 52 45 20 2a  ACK UNION HERE *
5170: 2a 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70  **/..  assert( p
5180: 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41  ->magic==VDBE_MA
5190: 47 49 43 5f 52 55 4e 20 29 3b 20 20 2f 2a 20 73  GIC_RUN );  /* s
51a0: 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 76 65  qlite3_step() ve
51b0: 72 69 66 69 65 73 20 74 68 69 73 20 2a 2f 0a 20  rifies this */. 
51c0: 20 73 71 6c 69 74 65 33 56 64 62 65 45 6e 74 65   sqlite3VdbeEnte
51d0: 72 28 70 29 3b 0a 20 20 69 66 28 20 70 2d 3e 72  r(p);.  if( p->r
51e0: 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20  c==SQLITE_NOMEM 
51f0: 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68  ){.    /* This h
5200: 61 70 70 65 6e 73 20 69 66 20 61 20 6d 61 6c 6c  appens if a mall
5210: 6f 63 28 29 20 69 6e 73 69 64 65 20 61 20 63 61  oc() inside a ca
5220: 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 6f  ll to sqlite3_co
5230: 6c 75 6d 6e 5f 74 65 78 74 28 29 20 6f 72 0a 20  lumn_text() or. 
5240: 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f     ** sqlite3_co
5250: 6c 75 6d 6e 5f 74 65 78 74 31 36 28 29 20 66 61  lumn_text16() fa
5260: 69 6c 65 64 2e 20 20 2a 2f 0a 20 20 20 20 67 6f  iled.  */.    go
5270: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20  to no_mem;.  }. 
5280: 20 61 73 73 65 72 74 28 20 70 2d 3e 72 63 3d 3d   assert( p->rc==
5290: 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d  SQLITE_OK || (p-
52a0: 3e 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54  >rc&0xff)==SQLIT
52b0: 45 5f 42 55 53 59 20 29 3b 0a 20 20 61 73 73 65  E_BUSY );.  asse
52c0: 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
52d0: 20 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 21   || p->readOnly!
52e0: 3d 30 20 29 3b 0a 20 20 70 2d 3e 69 43 75 72 72  =0 );.  p->iCurr
52f0: 65 6e 74 54 69 6d 65 20 3d 20 30 3b 0a 20 20 61  entTime = 0;.  a
5300: 73 73 65 72 74 28 20 70 2d 3e 65 78 70 6c 61 69  ssert( p->explai
5310: 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d 3e 70 52 65  n==0 );.  p->pRe
5320: 73 75 6c 74 53 65 74 20 3d 20 30 3b 0a 20 20 64  sultSet = 0;.  d
5330: 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e 6e  b->busyHandler.n
5340: 42 75 73 79 20 3d 20 30 3b 0a 20 20 69 66 28 20  Busy = 0;.  if( 
5350: 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75  db->u1.isInterru
5360: 70 74 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72  pted ) goto abor
5370: 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75  t_due_to_interru
5380: 70 74 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  pt;.  sqlite3Vdb
5390: 65 49 4f 54 72 61 63 65 53 71 6c 28 70 29 3b 0a  eIOTraceSql(p);.
53a0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
53b0: 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c  MIT_PROGRESS_CAL
53c0: 4c 42 41 43 4b 0a 20 20 69 66 28 20 64 62 2d 3e  LBACK.  if( db->
53d0: 78 50 72 6f 67 72 65 73 73 20 29 7b 0a 20 20 20  xProgress ){.   
53e0: 20 75 33 32 20 69 50 72 69 6f 72 20 3d 20 70 2d   u32 iPrior = p-
53f0: 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45  >aCounter[SQLITE
5400: 5f 53 54 4d 54 53 54 41 54 55 53 5f 56 4d 5f 53  _STMTSTATUS_VM_S
5410: 54 45 50 5d 3b 0a 20 20 20 20 61 73 73 65 72 74  TEP];.    assert
5420: 28 20 30 20 3c 20 64 62 2d 3e 6e 50 72 6f 67 72  ( 0 < db->nProgr
5430: 65 73 73 4f 70 73 20 29 3b 0a 20 20 20 20 6e 50  essOps );.    nP
5440: 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 64  rogressLimit = d
5450: 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20  b->nProgressOps 
5460: 2d 20 28 69 50 72 69 6f 72 20 25 20 64 62 2d 3e  - (iPrior % db->
5470: 6e 50 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a 20  nProgressOps);. 
5480: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 50 72 6f   }else{.    nPro
5490: 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 30 78 66  gressLimit = 0xf
54a0: 66 66 66 66 66 66 66 3b 0a 20 20 7d 0a 23 65 6e  fffffff;.  }.#en
54b0: 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
54c0: 45 5f 44 45 42 55 47 0a 20 20 73 71 6c 69 74 65  E_DEBUG.  sqlite
54d0: 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c  3BeginBenignMall
54e0: 6f 63 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70  oc();.  if( p->p
54f0: 63 3d 3d 30 0a 20 20 20 26 26 20 28 70 2d 3e 64  c==0.   && (p->d
5500: 62 2d 3e 66 6c 61 67 73 20 26 20 28 53 51 4c 49  b->flags & (SQLI
5510: 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 7c 53  TE_VdbeListing|S
5520: 51 4c 49 54 45 5f 56 64 62 65 45 51 50 7c 53 51  QLITE_VdbeEQP|SQ
5530: 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 29 29  LITE_VdbeTrace))
5540: 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 69 6e 74  !=0.  ){.    int
5550: 20 69 3b 0a 20 20 20 20 69 6e 74 20 6f 6e 63 65   i;.    int once
5560: 20 3d 20 31 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 1;.    sqlite
5570: 33 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29  3VdbePrintSql(p)
5580: 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d  ;.    if( p->db-
5590: 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
55a0: 56 64 62 65 4c 69 73 74 69 6e 67 20 29 7b 0a 20  VdbeListing ){. 
55b0: 20 20 20 20 20 70 72 69 6e 74 66 28 22 56 44 42       printf("VDB
55c0: 45 20 50 72 6f 67 72 61 6d 20 4c 69 73 74 69 6e  E Program Listin
55d0: 67 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 66 6f  g:\n");.      fo
55e0: 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b  r(i=0; i<p->nOp;
55f0: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 73   i++){.        s
5600: 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f  qlite3VdbePrintO
5610: 70 28 73 74 64 6f 75 74 2c 20 69 2c 20 26 61 4f  p(stdout, i, &aO
5620: 70 5b 69 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20  p[i]);.      }. 
5630: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e     }.    if( p->
5640: 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
5650: 54 45 5f 56 64 62 65 45 51 50 20 29 7b 0a 20 20  TE_VdbeEQP ){.  
5660: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70      for(i=0; i<p
5670: 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20  ->nOp; i++){.   
5680: 20 20 20 20 20 69 66 28 20 61 4f 70 5b 69 5d 2e       if( aOp[i].
5690: 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61  opcode==OP_Expla
56a0: 69 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  in ){.          
56b0: 69 66 28 20 6f 6e 63 65 20 29 20 70 72 69 6e 74  if( once ) print
56c0: 66 28 22 56 44 42 45 20 51 75 65 72 79 20 50 6c  f("VDBE Query Pl
56d0: 61 6e 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20  an:\n");.       
56e0: 20 20 20 70 72 69 6e 74 66 28 22 25 73 5c 6e 22     printf("%s\n"
56f0: 2c 20 61 4f 70 5b 69 5d 2e 70 34 2e 7a 29 3b 0a  , aOp[i].p4.z);.
5700: 20 20 20 20 20 20 20 20 20 20 6f 6e 63 65 20 3d            once =
5710: 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20   0;.        }.  
5720: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
5730: 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73  if( p->db->flags
5740: 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72   & SQLITE_VdbeTr
5750: 61 63 65 20 29 20 20 70 72 69 6e 74 66 28 22 56  ace )  printf("V
5760: 44 42 45 20 54 72 61 63 65 3a 5c 6e 22 29 3b 0a  DBE Trace:\n");.
5770: 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 45 6e 64    }.  sqlite3End
5780: 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a  BenignMalloc();.
5790: 23 65 6e 64 69 66 0a 20 20 66 6f 72 28 70 4f 70  #endif.  for(pOp
57a0: 3d 26 61 4f 70 5b 70 2d 3e 70 63 5d 3b 20 31 3b  =&aOp[p->pc]; 1;
57b0: 20 70 4f 70 2b 2b 29 7b 0a 20 20 20 20 2f 2a 20   pOp++){.    /* 
57c0: 45 72 72 6f 72 73 20 61 72 65 20 64 65 74 65 63  Errors are detec
57d0: 74 65 64 20 62 79 20 69 6e 64 69 76 69 64 75 61  ted by individua
57e0: 6c 20 6f 70 63 6f 64 65 73 2c 20 77 69 74 68 20  l opcodes, with 
57f0: 61 6e 20 69 6d 6d 65 64 69 61 74 65 0a 20 20 20  an immediate.   
5800: 20 2a 2a 20 6a 75 6d 70 73 20 74 6f 20 61 62 6f   ** jumps to abo
5810: 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 2e  rt_due_to_error.
5820: 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20   */.    assert( 
5830: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
5840: 0a 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ..    assert( pO
5850: 70 3e 3d 61 4f 70 20 26 26 20 70 4f 70 3c 26 61  p>=aOp && pOp<&a
5860: 4f 70 5b 70 2d 3e 6e 4f 70 5d 29 3b 0a 23 69 66  Op[p->nOp]);.#if
5870: 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45  def VDBE_PROFILE
5880: 0a 20 20 20 20 73 74 61 72 74 20 3d 20 73 71 6c  .    start = sql
5890: 69 74 65 33 4e 50 72 6f 66 69 6c 65 43 6e 74 20  ite3NProfileCnt 
58a0: 3f 20 73 71 6c 69 74 65 33 4e 50 72 6f 66 69 6c  ? sqlite3NProfil
58b0: 65 43 6e 74 20 3a 20 73 71 6c 69 74 65 33 48 77  eCnt : sqlite3Hw
58c0: 74 69 6d 65 28 29 3b 0a 23 65 6e 64 69 66 0a 20  time();.#endif. 
58d0: 20 20 20 6e 56 6d 53 74 65 70 2b 2b 3b 0a 23 69     nVmStep++;.#i
58e0: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
58f0: 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54  LE_STMT_SCANSTAT
5900: 55 53 0a 20 20 20 20 69 66 28 20 70 2d 3e 61 6e  US.    if( p->an
5910: 45 78 65 63 20 29 20 70 2d 3e 61 6e 45 78 65 63  Exec ) p->anExec
5920: 5b 28 69 6e 74 29 28 70 4f 70 2d 61 4f 70 29 5d  [(int)(pOp-aOp)]
5930: 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20  ++;.#endif..    
5940: 2f 2a 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20 74 72  /* Only allow tr
5950: 61 63 69 6e 67 20 69 66 20 53 51 4c 49 54 45 5f  acing if SQLITE_
5960: 44 45 42 55 47 20 69 73 20 64 65 66 69 6e 65 64  DEBUG is defined
5970: 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20  ..    */.#ifdef 
5980: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
5990: 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26   if( db->flags &
59a0: 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63   SQLITE_VdbeTrac
59b0: 65 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  e ){.      sqlit
59c0: 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74  e3VdbePrintOp(st
59d0: 64 6f 75 74 2c 20 28 69 6e 74 29 28 70 4f 70 20  dout, (int)(pOp 
59e0: 2d 20 61 4f 70 29 2c 20 70 4f 70 29 3b 0a 20 20  - aOp), pOp);.  
59f0: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20    }.#endif.     
5a00: 20 0a 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b 20   ..    /* Check 
5a10: 74 6f 20 73 65 65 20 69 66 20 77 65 20 6e 65 65  to see if we nee
5a20: 64 20 74 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e  d to simulate an
5a30: 20 69 6e 74 65 72 72 75 70 74 2e 20 20 54 68 69   interrupt.  Thi
5a40: 73 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73 0a 20  s only happens. 
5a50: 20 20 20 2a 2a 20 69 66 20 77 65 20 68 61 76 65     ** if we have
5a60: 20 61 20 73 70 65 63 69 61 6c 20 74 65 73 74 20   a special test 
5a70: 62 75 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a 23 69  build..    */.#i
5a80: 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
5a90: 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
5aa0: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
5ab0: 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  >0 ){.      sqli
5ac0: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f  te3_interrupt_co
5ad0: 75 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 69 66 28  unt--;.      if(
5ae0: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
5af0: 70 74 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b 0a 20  pt_count==0 ){. 
5b00: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69         sqlite3_i
5b10: 6e 74 65 72 72 75 70 74 28 64 62 29 3b 0a 20 20  nterrupt(db);.  
5b20: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64      }.    }.#end
5b30: 69 66 0a 0a 20 20 20 20 2f 2a 20 53 61 6e 69 74  if..    /* Sanit
5b40: 79 20 63 68 65 63 6b 69 6e 67 20 6f 6e 20 6f 74  y checking on ot
5b50: 68 65 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a  her operands */.
5b60: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
5b70: 42 55 47 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  BUG.    {.      
5b80: 75 38 20 6f 70 50 72 6f 70 65 72 74 79 20 3d 20  u8 opProperty = 
5b90: 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f  sqlite3OpcodePro
5ba0: 70 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63 6f 64  perty[pOp->opcod
5bb0: 65 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 28 6f  e];.      if( (o
5bc0: 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c  pProperty & OPFL
5bd0: 47 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20 20  G_IN1)!=0 ){.   
5be0: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5bf0: 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p1>0 );.      
5c00: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5c10: 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  1<=(p->nMem+1 - 
5c20: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
5c30: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d         assert( m
5c40: 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b  emIsValid(&aMem[
5c50: 70 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a 20 20 20  pOp->p1]) );.   
5c60: 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
5c70: 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d  ite3VdbeCheckMem
5c80: 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d  Invariants(&aMem
5c90: 5b 70 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a 20 20  [pOp->p1]) );.  
5ca0: 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54        REGISTER_T
5cb0: 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 26 61  RACE(pOp->p1, &a
5cc0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20  Mem[pOp->p1]);. 
5cd0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
5ce0: 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f   (opProperty & O
5cf0: 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b 0a  PFLG_IN2)!=0 ){.
5d00: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
5d10: 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20  pOp->p2>0 );.   
5d20: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5d30: 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p2<=(p->nMem+1
5d40: 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
5d50: 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
5d60: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
5d70: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a  em[pOp->p2]) );.
5d80: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
5d90: 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
5da0: 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 26 61  MemInvariants(&a
5db0: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20 29 3b  Mem[pOp->p2]) );
5dc0: 0a 20 20 20 20 20 20 20 20 52 45 47 49 53 54 45  .        REGISTE
5dd0: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
5de0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29   &aMem[pOp->p2])
5df0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
5e00: 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20  if( (opProperty 
5e10: 26 20 4f 50 46 4c 47 5f 49 4e 33 29 21 3d 30 20  & OPFLG_IN3)!=0 
5e20: 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
5e30: 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
5e40: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
5e50: 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
5e60: 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
5e70: 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  ) );.        ass
5e80: 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
5e90: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20  &aMem[pOp->p3]) 
5ea0: 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
5eb0: 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  t( sqlite3VdbeCh
5ec0: 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73  eckMemInvariants
5ed0: 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29  (&aMem[pOp->p3])
5ee0: 20 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49   );.        REGI
5ef0: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
5f00: 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  p3, &aMem[pOp->p
5f10: 33 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  3]);.      }.   
5f20: 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72     if( (opProper
5f30: 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 29  ty & OPFLG_OUT2)
5f40: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61  !=0 ){.        a
5f50: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
5f60: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
5f70: 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d  rt( pOp->p2<=(p-
5f80: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
5f90: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20  rsor) );.       
5fa0: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
5fb0: 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  e(p, &aMem[pOp->
5fc0: 70 32 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  p2]);.      }.  
5fd0: 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65      if( (opPrope
5fe0: 72 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33  rty & OPFLG_OUT3
5ff0: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
6000: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
6010: 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  0 );.        ass
6020: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  ert( pOp->p3<=(p
6030: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
6040: 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20  ursor) );.      
6050: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
6060: 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ge(p, &aMem[pOp-
6070: 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20  >p3]);.      }. 
6080: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66 20     }.#endif.#if 
6090: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
60a0: 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
60b0: 28 56 44 42 45 5f 50 52 4f 46 49 4c 45 29 0a 20  (VDBE_PROFILE). 
60c0: 20 20 20 70 4f 72 69 67 4f 70 20 3d 20 70 4f 70     pOrigOp = pOp
60d0: 3b 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 20 20  ;.#endif.  .    
60e0: 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63  switch( pOp->opc
60f0: 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a  ode ){../*******
6100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6140: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68 61 74 20 66  ******.** What f
6150: 6f 6c 6c 6f 77 73 20 69 73 20 61 20 6d 61 73 73  ollows is a mass
6160: 69 76 65 20 73 77 69 74 63 68 20 73 74 61 74 65  ive switch state
6170: 6d 65 6e 74 20 77 68 65 72 65 20 65 61 63 68 20  ment where each 
6180: 63 61 73 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20  case implements 
6190: 61 0a 2a 2a 20 73 65 70 61 72 61 74 65 20 69 6e  a.** separate in
61a0: 73 74 72 75 63 74 69 6f 6e 20 69 6e 20 74 68 65  struction in the
61b0: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
61c0: 2e 20 20 49 66 20 77 65 20 66 6f 6c 6c 6f 77 20  .  If we follow 
61d0: 74 68 65 20 75 73 75 61 6c 0a 2a 2a 20 69 6e 64  the usual.** ind
61e0: 65 6e 74 61 74 69 6f 6e 20 63 6f 6e 76 65 6e 74  entation convent
61f0: 69 6f 6e 73 2c 20 65 61 63 68 20 63 61 73 65 20  ions, each case 
6200: 73 68 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e 74  should be indent
6210: 65 64 20 62 79 20 36 20 73 70 61 63 65 73 2e 20  ed by 6 spaces. 
6220: 20 42 75 74 0a 2a 2a 20 74 68 61 74 20 69 73 20   But.** that is 
6230: 61 20 6c 6f 74 20 6f 66 20 77 61 73 74 65 64 20  a lot of wasted 
6240: 73 70 61 63 65 20 6f 6e 20 74 68 65 20 6c 65 66  space on the lef
6250: 74 20 6d 61 72 67 69 6e 2e 20 20 53 6f 20 74 68  t margin.  So th
6260: 65 20 63 6f 64 65 20 77 69 74 68 69 6e 0a 2a 2a  e code within.**
6270: 20 74 68 65 20 73 77 69 74 63 68 20 73 74 61 74   the switch stat
6280: 65 6d 65 6e 74 20 77 69 6c 6c 20 62 72 65 61 6b  ement will break
6290: 20 77 69 74 68 20 63 6f 6e 76 65 6e 74 69 6f 6e   with convention
62a0: 20 61 6e 64 20 62 65 20 66 6c 75 73 68 2d 6c 65   and be flush-le
62b0: 66 74 2e 20 41 6e 6f 74 68 65 72 0a 2a 2a 20 62  ft. Another.** b
62c0: 69 67 20 63 6f 6d 6d 65 6e 74 20 28 73 69 6d 69  ig comment (simi
62d0: 6c 61 72 20 74 6f 20 74 68 69 73 20 6f 6e 65 29  lar to this one)
62e0: 20 77 69 6c 6c 20 6d 61 72 6b 20 74 68 65 20 70   will mark the p
62f0: 6f 69 6e 74 20 69 6e 20 74 68 65 20 63 6f 64 65  oint in the code
6300: 20 77 68 65 72 65 0a 2a 2a 20 77 65 20 74 72 61   where.** we tra
6310: 6e 73 69 74 69 6f 6e 20 62 61 63 6b 20 74 6f 20  nsition back to 
6320: 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74 69  normal indentati
6330: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f  on..**.** The fo
6340: 72 6d 61 74 74 69 6e 67 20 6f 66 20 65 61 63 68  rmatting of each
6350: 20 63 61 73 65 20 69 73 20 69 6d 70 6f 72 74 61   case is importa
6360: 6e 74 2e 20 20 54 68 65 20 6d 61 6b 65 66 69 6c  nt.  The makefil
6370: 65 20 66 6f 72 20 53 51 4c 69 74 65 0a 2a 2a 20  e for SQLite.** 
6380: 67 65 6e 65 72 61 74 65 73 20 74 77 6f 20 43 20  generates two C 
6390: 66 69 6c 65 73 20 22 6f 70 63 6f 64 65 73 2e 68  files "opcodes.h
63a0: 22 20 61 6e 64 20 22 6f 70 63 6f 64 65 73 2e 63  " and "opcodes.c
63b0: 22 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74 68  " by scanning th
63c0: 69 73 0a 2a 2a 20 66 69 6c 65 20 6c 6f 6f 6b 69  is.** file looki
63d0: 6e 67 20 66 6f 72 20 6c 69 6e 65 73 20 74 68 61  ng for lines tha
63e0: 74 20 62 65 67 69 6e 20 77 69 74 68 20 22 63 61  t begin with "ca
63f0: 73 65 20 4f 50 5f 22 2e 20 20 54 68 65 20 6f 70  se OP_".  The op
6400: 63 6f 64 65 73 2e 68 20 66 69 6c 65 73 0a 2a 2a  codes.h files.**
6410: 20 77 69 6c 6c 20 62 65 20 66 69 6c 6c 65 64 20   will be filled 
6420: 77 69 74 68 20 23 64 65 66 69 6e 65 73 20 74 68  with #defines th
6430: 61 74 20 67 69 76 65 20 75 6e 69 71 75 65 20 69  at give unique i
6440: 6e 74 65 67 65 72 20 76 61 6c 75 65 73 20 74 6f  nteger values to
6450: 20 65 61 63 68 0a 2a 2a 20 6f 70 63 6f 64 65 20   each.** opcode 
6460: 61 6e 64 20 74 68 65 20 6f 70 63 6f 64 65 73 2e  and the opcodes.
6470: 63 20 66 69 6c 65 20 69 73 20 66 69 6c 6c 65 64  c file is filled
6480: 20 77 69 74 68 20 61 6e 20 61 72 72 61 79 20 6f   with an array o
6490: 66 20 73 74 72 69 6e 67 73 20 77 68 65 72 65 0a  f strings where.
64a0: 2a 2a 20 65 61 63 68 20 73 74 72 69 6e 67 20 69  ** each string i
64b0: 73 20 74 68 65 20 73 79 6d 62 6f 6c 69 63 20 6e  s the symbolic n
64c0: 61 6d 65 20 66 6f 72 20 74 68 65 20 63 6f 72 72  ame for the corr
64d0: 65 73 70 6f 6e 64 69 6e 67 20 6f 70 63 6f 64 65  esponding opcode
64e0: 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 63 61 73  .  If the.** cas
64f0: 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 66  e statement is f
6500: 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6d  ollowed by a com
6510: 6d 65 6e 74 20 6f 66 20 74 68 65 20 66 6f 72 6d  ment of the form
6520: 20 22 2f 23 20 73 61 6d 65 20 61 73 20 2e 2e 2e   "/# same as ...
6530: 20 23 2f 22 0a 2a 2a 20 74 68 61 74 20 63 6f 6d   #/".** that com
6540: 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20  ment is used to 
6550: 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 70 61  determine the pa
6560: 72 74 69 63 75 6c 61 72 20 76 61 6c 75 65 20 6f  rticular value o
6570: 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 0a 2a 2a  f the opcode..**
6580: 0a 2a 2a 20 4f 74 68 65 72 20 6b 65 79 77 6f 72  .** Other keywor
6590: 64 73 20 69 6e 20 74 68 65 20 63 6f 6d 6d 65 6e  ds in the commen
65a0: 74 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20 65  t that follows e
65b0: 61 63 68 20 63 61 73 65 20 61 72 65 20 75 73 65  ach case are use
65c0: 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73 74 72 75 63  d to.** construc
65d0: 74 20 74 68 65 20 4f 50 46 4c 47 5f 49 4e 49 54  t the OPFLG_INIT
65e0: 49 41 4c 49 5a 45 52 20 76 61 6c 75 65 20 74 68  IALIZER value th
65f0: 61 74 20 69 6e 69 74 69 61 6c 69 7a 65 73 20 6f  at initializes o
6600: 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 2e  pcodeProperty[].
6610: 0a 2a 2a 20 4b 65 79 77 6f 72 64 73 20 69 6e 63  .** Keywords inc
6620: 6c 75 64 65 3a 20 69 6e 31 2c 20 69 6e 32 2c 20  lude: in1, in2, 
6630: 69 6e 33 2c 20 6f 75 74 32 2c 20 6f 75 74 33 2e  in3, out2, out3.
6640: 20 20 53 65 65 0a 2a 2a 20 74 68 65 20 6d 6b 6f    See.** the mko
6650: 70 63 6f 64 65 68 2e 61 77 6b 20 73 63 72 69 70  pcodeh.awk scrip
6660: 74 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  t for additional
6670: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a   information..**
6680: 0a 2a 2a 20 44 6f 63 75 6d 65 6e 74 61 74 69 6f  .** Documentatio
6690: 6e 20 61 62 6f 75 74 20 56 44 42 45 20 6f 70 63  n about VDBE opc
66a0: 6f 64 65 73 20 69 73 20 67 65 6e 65 72 61 74 65  odes is generate
66b0: 64 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74 68  d by scanning th
66c0: 69 73 20 66 69 6c 65 0a 2a 2a 20 66 6f 72 20 6c  is file.** for l
66d0: 69 6e 65 73 20 6f 66 20 74 68 61 74 20 63 6f 6e  ines of that con
66e0: 74 61 69 6e 20 22 4f 70 63 6f 64 65 3a 22 2e 20  tain "Opcode:". 
66f0: 20 54 68 61 74 20 6c 69 6e 65 20 61 6e 64 20 61   That line and a
6700: 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 0a 2a 2a  ll subsequent.**
6710: 20 63 6f 6d 6d 65 6e 74 20 6c 69 6e 65 73 20 61   comment lines a
6720: 72 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 67  re used in the g
6730: 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65  eneration of the
6740: 20 6f 70 63 6f 64 65 2e 68 74 6d 6c 20 64 6f 63   opcode.html doc
6750: 75 6d 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 66 69  umentation.** fi
6760: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 55 4d 4d 41 52  le..**.** SUMMAR
6770: 59 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 46 6f 72  Y:.**.**     For
6780: 6d 61 74 74 69 6e 67 20 69 73 20 69 6d 70 6f 72  matting is impor
6790: 74 61 6e 74 20 74 6f 20 73 63 72 69 70 74 73 20  tant to scripts 
67a0: 74 68 61 74 20 73 63 61 6e 20 74 68 69 73 20 66  that scan this f
67b0: 69 6c 65 2e 0a 2a 2a 20 20 20 20 20 44 6f 20 6e  ile..**     Do n
67c0: 6f 74 20 64 65 76 69 61 74 65 20 66 72 6f 6d 20  ot deviate from 
67d0: 74 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 73  the formatting s
67e0: 74 79 6c 65 20 63 75 72 72 65 6e 74 6c 79 20 69  tyle currently i
67f0: 6e 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a  n use..**.******
6800: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6810: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6820: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6830: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6840: 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63  *******/../* Opc
6850: 6f 64 65 3a 20 20 47 6f 74 6f 20 2a 20 50 32 20  ode:  Goto * P2 
6860: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6e 20 75  * * *.**.** An u
6870: 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 6a 75 6d  nconditional jum
6880: 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e  p to address P2.
6890: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 73  .** The next ins
68a0: 74 72 75 63 74 69 6f 6e 20 65 78 65 63 75 74 65  truction execute
68b0: 64 20 77 69 6c 6c 20 62 65 20 0a 2a 2a 20 74 68  d will be .** th
68c0: 65 20 6f 6e 65 20 61 74 20 69 6e 64 65 78 20 50  e one at index P
68d0: 32 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  2 from the begin
68e0: 6e 69 6e 67 20 6f 66 0a 2a 2a 20 74 68 65 20 70  ning of.** the p
68f0: 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 54 68  rogram..**.** Th
6900: 65 20 50 31 20 70 61 72 61 6d 65 74 65 72 20 69  e P1 parameter i
6910: 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 75  s not actually u
6920: 73 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f  sed by this opco
6930: 64 65 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 74  de.  However, it
6940: 0a 2a 2a 20 69 73 20 73 6f 6d 65 74 69 6d 65 73  .** is sometimes
6950: 20 73 65 74 20 74 6f 20 31 20 69 6e 73 74 65 61   set to 1 instea
6960: 64 20 6f 66 20 30 20 61 73 20 61 20 68 69 6e 74  d of 0 as a hint
6970: 20 74 6f 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d   to the command-
6980: 6c 69 6e 65 20 73 68 65 6c 6c 0a 2a 2a 20 74 68  line shell.** th
6990: 61 74 20 74 68 69 73 20 47 6f 74 6f 20 69 73 20  at this Goto is 
69a0: 74 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20 61 20  the bottom of a 
69b0: 6c 6f 6f 70 20 61 6e 64 20 74 68 61 74 20 74 68  loop and that th
69c0: 65 20 6c 69 6e 65 73 20 66 72 6f 6d 20 50 32 20  e lines from P2 
69d0: 64 6f 77 6e 0a 2a 2a 20 74 6f 20 74 68 65 20 63  down.** to the c
69e0: 75 72 72 65 6e 74 20 6c 69 6e 65 20 73 68 6f 75  urrent line shou
69f0: 6c 64 20 62 65 20 69 6e 64 65 6e 74 65 64 20 66  ld be indented f
6a00: 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75  or EXPLAIN outpu
6a10: 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f  t..*/.case OP_Go
6a20: 74 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  to: {           
6a30: 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 6a 75 6d    /* jump */.jum
6a40: 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63  p_to_p2_and_chec
6a50: 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3a  k_for_interrupt:
6a60: 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f  .  pOp = &aOp[pO
6a70: 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a 0a 20 20 2f  p->p2 - 1];..  /
6a80: 2a 20 4f 70 63 6f 64 65 73 20 74 68 61 74 20 61  * Opcodes that a
6a90: 72 65 20 75 73 65 64 20 61 73 20 74 68 65 20 62  re used as the b
6aa0: 6f 74 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70 20  ottom of a loop 
6ab0: 28 4f 50 5f 4e 65 78 74 2c 20 4f 50 5f 50 72 65  (OP_Next, OP_Pre
6ac0: 76 2c 0a 20 20 2a 2a 20 4f 50 5f 56 4e 65 78 74  v,.  ** OP_VNext
6ad0: 2c 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72 4e 65  , or OP_SorterNe
6ae0: 78 74 29 20 61 6c 6c 20 6a 75 6d 70 20 68 65 72  xt) all jump her
6af0: 65 20 75 70 6f 6e 0a 20 20 2a 2a 20 63 6f 6d 70  e upon.  ** comp
6b00: 6c 65 74 69 6f 6e 2e 20 20 43 68 65 63 6b 20 74  letion.  Check t
6b10: 6f 20 73 65 65 20 69 66 20 73 71 6c 69 74 65 33  o see if sqlite3
6b20: 5f 69 6e 74 65 72 72 75 70 74 28 29 20 68 61 73  _interrupt() has
6b30: 20 62 65 65 6e 20 63 61 6c 6c 65 64 0a 20 20 2a   been called.  *
6b40: 2a 20 6f 72 20 69 66 20 74 68 65 20 70 72 6f 67  * or if the prog
6b50: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 6e 65  ress callback ne
6b60: 65 64 73 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65  eds to be invoke
6b70: 64 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  d. .  **.  ** Th
6b80: 69 73 20 63 6f 64 65 20 75 73 65 73 20 75 6e 73  is code uses uns
6b90: 74 72 75 63 74 75 72 65 64 20 22 67 6f 74 6f 22  tructured "goto"
6ba0: 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e 64 20   statements and 
6bb0: 64 6f 65 73 20 6e 6f 74 20 6c 6f 6f 6b 20 63 6c  does not look cl
6bc0: 65 61 6e 2e 0a 20 20 2a 2a 20 42 75 74 20 74 68  ean..  ** But th
6bd0: 61 74 20 69 73 20 6e 6f 74 20 64 75 65 20 74 6f  at is not due to
6be0: 20 73 6c 6f 70 70 79 20 63 6f 64 69 6e 67 20 68   sloppy coding h
6bf0: 61 62 69 74 73 2e 20 54 68 65 20 63 6f 64 65 20  abits. The code 
6c00: 69 73 20 77 72 69 74 74 65 6e 20 74 68 69 73 0a  is written this.
6c10: 20 20 2a 2a 20 77 61 79 20 66 6f 72 20 70 65 72    ** way for per
6c20: 66 6f 72 6d 61 6e 63 65 2c 20 74 6f 20 61 76 6f  formance, to avo
6c30: 69 64 20 68 61 76 69 6e 67 20 74 6f 20 72 75 6e  id having to run
6c40: 20 74 68 65 20 69 6e 74 65 72 72 75 70 74 20 61   the interrupt a
6c50: 6e 64 20 70 72 6f 67 72 65 73 73 0a 20 20 2a 2a  nd progress.  **
6c60: 20 63 68 65 63 6b 73 20 6f 6e 20 65 76 65 72 79   checks on every
6c70: 20 6f 70 63 6f 64 65 2e 20 20 54 68 69 73 20 68   opcode.  This h
6c80: 65 6c 70 73 20 73 71 6c 69 74 65 33 5f 73 74 65  elps sqlite3_ste
6c90: 70 28 29 20 74 6f 20 72 75 6e 20 61 62 6f 75 74  p() to run about
6ca0: 20 31 2e 35 25 0a 20 20 2a 2a 20 66 61 73 74 65   1.5%.  ** faste
6cb0: 72 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 22  r according to "
6cc0: 76 61 6c 67 72 69 6e 64 20 2d 2d 74 6f 6f 6c 3d  valgrind --tool=
6cd0: 63 61 63 68 65 67 72 69 6e 64 22 20 2a 2f 0a 63  cachegrind" */.c
6ce0: 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
6cf0: 70 74 3a 0a 20 20 69 66 28 20 64 62 2d 3e 75 31  pt:.  if( db->u1
6d00: 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29  .isInterrupted )
6d10: 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
6d20: 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 23 69  to_interrupt;.#i
6d30: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
6d40: 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42  T_PROGRESS_CALLB
6d50: 41 43 4b 0a 20 20 2f 2a 20 43 61 6c 6c 20 74 68  ACK.  /* Call th
6d60: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
6d70: 61 63 6b 20 69 66 20 69 74 20 69 73 20 63 6f 6e  ack if it is con
6d80: 66 69 67 75 72 65 64 20 61 6e 64 20 74 68 65 20  figured and the 
6d90: 72 65 71 75 69 72 65 64 20 6e 75 6d 62 65 72 0a  required number.
6da0: 20 20 2a 2a 20 6f 66 20 56 44 42 45 20 6f 70 73    ** of VDBE ops
6db0: 20 68 61 76 65 20 62 65 65 6e 20 65 78 65 63 75   have been execu
6dc0: 74 65 64 20 28 65 69 74 68 65 72 20 73 69 6e 63  ted (either sinc
6dd0: 65 20 74 68 69 73 20 69 6e 76 6f 63 61 74 69 6f  e this invocatio
6de0: 6e 20 6f 66 0a 20 20 2a 2a 20 73 71 6c 69 74 65  n of.  ** sqlite
6df0: 33 56 64 62 65 45 78 65 63 28 29 20 6f 72 20 73  3VdbeExec() or s
6e00: 69 6e 63 65 20 6c 61 73 74 20 74 69 6d 65 20 74  ince last time t
6e10: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
6e20: 62 61 63 6b 20 77 61 73 20 63 61 6c 6c 65 64 29  back was called)
6e30: 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 70 72  ..  ** If the pr
6e40: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
6e50: 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f  returns non-zero
6e60: 2c 20 65 78 69 74 20 74 68 65 20 76 69 72 74 75  , exit the virtu
6e70: 61 6c 20 6d 61 63 68 69 6e 65 20 77 69 74 68 0a  al machine with.
6e80: 20 20 2a 2a 20 61 20 72 65 74 75 72 6e 20 63 6f    ** a return co
6e90: 64 65 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 2e  de SQLITE_ABORT.
6ea0: 0a 20 20 2a 2f 0a 20 20 69 66 28 20 6e 56 6d 53  .  */.  if( nVmS
6eb0: 74 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69  tep>=nProgressLi
6ec0: 6d 69 74 20 26 26 20 64 62 2d 3e 78 50 72 6f 67  mit && db->xProg
6ed0: 72 65 73 73 21 3d 30 20 29 7b 0a 20 20 20 20 61  ress!=0 ){.    a
6ee0: 73 73 65 72 74 28 20 64 62 2d 3e 6e 50 72 6f 67  ssert( db->nProg
6ef0: 72 65 73 73 4f 70 73 21 3d 30 20 29 3b 0a 20 20  ressOps!=0 );.  
6f00: 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74    nProgressLimit
6f10: 20 3d 20 6e 56 6d 53 74 65 70 20 2b 20 64 62 2d   = nVmStep + db-
6f20: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 2d 20  >nProgressOps - 
6f30: 28 6e 56 6d 53 74 65 70 25 64 62 2d 3e 6e 50 72  (nVmStep%db->nPr
6f40: 6f 67 72 65 73 73 4f 70 73 29 3b 0a 20 20 20 20  ogressOps);.    
6f50: 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73  if( db->xProgres
6f60: 73 28 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41  s(db->pProgressA
6f70: 72 67 29 20 29 7b 0a 20 20 20 20 20 20 72 63 20  rg) ){.      rc 
6f80: 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55  = SQLITE_INTERRU
6f90: 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61  PT;.      goto a
6fa0: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
6fb0: 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e  r;.    }.  }.#en
6fc0: 64 69 66 0a 20 20 0a 20 20 62 72 65 61 6b 3b 0a  dif.  .  break;.
6fd0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47  }../* Opcode:  G
6fe0: 6f 73 75 62 20 50 31 20 50 32 20 2a 20 2a 20 2a  osub P1 P2 * * *
6ff0: 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65  .**.** Write the
7000: 20 63 75 72 72 65 6e 74 20 61 64 64 72 65 73 73   current address
7010: 20 6f 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   onto register P
7020: 31 0a 2a 2a 20 61 6e 64 20 74 68 65 6e 20 6a 75  1.** and then ju
7030: 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32  mp to address P2
7040: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 73  ..*/.case OP_Gos
7050: 75 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ub: {           
7060: 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73   /* jump */.  as
7070: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
7080: 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e  && pOp->p1<=(p->
7090: 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
70a0: 73 6f 72 29 20 29 3b 0a 20 20 70 49 6e 31 20 3d  sor) );.  pIn1 =
70b0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
70c0: 0a 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d  .  assert( VdbeM
70d0: 65 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d  emDynamic(pIn1)=
70e0: 3d 30 20 29 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  =0 );.  memAbout
70f0: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31  ToChange(p, pIn1
7100: 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  );.  pIn1->flags
7110: 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 49   = MEM_Int;.  pI
7120: 6e 31 2d 3e 75 2e 69 20 3d 20 28 69 6e 74 29 28  n1->u.i = (int)(
7130: 70 4f 70 2d 61 4f 70 29 3b 0a 20 20 52 45 47 49  pOp-aOp);.  REGI
7140: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
7150: 70 31 2c 20 70 49 6e 31 29 3b 0a 0a 20 20 2f 2a  p1, pIn1);..  /*
7160: 20 4d 6f 73 74 20 6a 75 6d 70 20 6f 70 65 72 61   Most jump opera
7170: 74 69 6f 6e 73 20 64 6f 20 61 20 67 6f 74 6f 20  tions do a goto 
7180: 74 6f 20 74 68 69 73 20 73 70 6f 74 20 69 6e 20  to this spot in 
7190: 6f 72 64 65 72 20 74 6f 20 75 70 64 61 74 65 0a  order to update.
71a0: 20 20 2a 2a 20 74 68 65 20 70 4f 70 20 70 6f 69    ** the pOp poi
71b0: 6e 74 65 72 2e 20 2a 2f 0a 6a 75 6d 70 5f 74 6f  nter. */.jump_to
71c0: 5f 70 32 3a 0a 20 20 70 4f 70 20 3d 20 26 61 4f  _p2:.  pOp = &aO
71d0: 70 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a  p[pOp->p2 - 1];.
71e0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
71f0: 70 63 6f 64 65 3a 20 20 52 65 74 75 72 6e 20 50  pcode:  Return P
7200: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
7210: 4a 75 6d 70 20 74 6f 20 74 68 65 20 6e 65 78 74  Jump to the next
7220: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 66 74   instruction aft
7230: 65 72 20 74 68 65 20 61 64 64 72 65 73 73 20 69  er the address i
7240: 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20  n register P1.  
7250: 41 66 74 65 72 0a 2a 2a 20 74 68 65 20 6a 75 6d  After.** the jum
7260: 70 2c 20 72 65 67 69 73 74 65 72 20 50 31 20 62  p, register P1 b
7270: 65 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65 64  ecomes undefined
7280: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 74  ..*/.case OP_Ret
7290: 75 72 6e 3a 20 7b 20 20 20 20 20 20 20 20 20 20  urn: {          
72a0: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e   /* in1 */.  pIn
72b0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
72c0: 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1];.  assert( pI
72d0: 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49  n1->flags==MEM_I
72e0: 6e 74 20 29 3b 0a 20 20 70 4f 70 20 3d 20 26 61  nt );.  pOp = &a
72f0: 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20  Op[pIn1->u.i];. 
7300: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d   pIn1->flags = M
7310: 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20  EM_Undefined;.  
7320: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
7330: 6f 64 65 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69  ode: InitCorouti
7340: 6e 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ne P1 P2 P3 * *.
7350: 2a 2a 0a 2a 2a 20 53 65 74 20 75 70 20 72 65 67  **.** Set up reg
7360: 69 73 74 65 72 20 50 31 20 73 6f 20 74 68 61 74  ister P1 so that
7370: 20 69 74 20 77 69 6c 6c 20 59 69 65 6c 64 20 74   it will Yield t
7380: 6f 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 0a  o the coroutine.
7390: 2a 2a 20 6c 6f 63 61 74 65 64 20 61 74 20 61 64  ** located at ad
73a0: 64 72 65 73 73 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  dress P3..**.** 
73b0: 49 66 20 50 32 21 3d 30 20 74 68 65 6e 20 74 68  If P2!=0 then th
73c0: 65 20 63 6f 72 6f 75 74 69 6e 65 20 69 6d 70 6c  e coroutine impl
73d0: 65 6d 65 6e 74 61 74 69 6f 6e 20 69 6d 6d 65 64  ementation immed
73e0: 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 73 0a 2a  iately follows.*
73f0: 2a 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20  * this opcode.  
7400: 53 6f 20 6a 75 6d 70 20 6f 76 65 72 20 74 68 65  So jump over the
7410: 20 63 6f 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65   coroutine imple
7420: 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 0a 2a 2a 20  mentation to.** 
7430: 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 0a 2a  address P2..**.*
7440: 2a 20 53 65 65 20 61 6c 73 6f 3a 20 45 6e 64 43  * See also: EndC
7450: 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65  oroutine.*/.case
7460: 20 4f 50 5f 49 6e 69 74 43 6f 72 6f 75 74 69 6e   OP_InitCoroutin
7470: 65 3a 20 7b 20 20 20 20 20 2f 2a 20 6a 75 6d 70  e: {     /* jump
7480: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
7490: 70 2d 3e 70 31 3e 30 20 26 26 20 20 70 4f 70 2d  p->p1>0 &&  pOp-
74a0: 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p1<=(p->nMem+1 
74b0: 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
74c0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
74d0: 70 32 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 32  p2>=0 && pOp->p2
74e0: 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 61 73 73  <p->nOp );.  ass
74f0: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20  ert( pOp->p3>=0 
7500: 26 26 20 70 4f 70 2d 3e 70 33 3c 70 2d 3e 6e 4f  && pOp->p3<p->nO
7510: 70 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p );.  pOut = &a
7520: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
7530: 61 73 73 65 72 74 28 20 21 56 64 62 65 4d 65 6d  assert( !VdbeMem
7540: 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 20 29 3b  Dynamic(pOut) );
7550: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70  .  pOut->u.i = p
7560: 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a 20 20 70 4f  Op->p3 - 1;.  pO
7570: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
7580: 49 6e 74 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  Int;.  if( pOp->
7590: 70 32 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  p2 ) goto jump_t
75a0: 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  o_p2;.  break;.}
75b0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 45 6e  ../* Opcode:  En
75c0: 64 43 6f 72 6f 75 74 69 6e 65 20 50 31 20 2a 20  dCoroutine P1 * 
75d0: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  * * *.**.** The 
75e0: 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20 74  instruction at t
75f0: 68 65 20 61 64 64 72 65 73 73 20 69 6e 20 72 65  he address in re
7600: 67 69 73 74 65 72 20 50 31 20 69 73 20 61 20 59  gister P1 is a Y
7610: 69 65 6c 64 2e 0a 2a 2a 20 4a 75 6d 70 20 74 6f  ield..** Jump to
7620: 20 74 68 65 20 50 32 20 70 61 72 61 6d 65 74 65   the P2 paramete
7630: 72 20 6f 66 20 74 68 61 74 20 59 69 65 6c 64 2e  r of that Yield.
7640: 0a 2a 2a 20 41 66 74 65 72 20 74 68 65 20 6a 75  .** After the ju
7650: 6d 70 2c 20 72 65 67 69 73 74 65 72 20 50 31 20  mp, register P1 
7660: 62 65 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65  becomes undefine
7670: 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  d..**.** See als
7680: 6f 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65  o: InitCoroutine
7690: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6e 64 43  .*/.case OP_EndC
76a0: 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20 20 20  oroutine: {     
76b0: 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a        /* in1 */.
76c0: 20 20 56 64 62 65 4f 70 20 2a 70 43 61 6c 6c 65    VdbeOp *pCalle
76d0: 72 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  r;.  pIn1 = &aMe
76e0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
76f0: 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
7700: 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  s==MEM_Int );.  
7710: 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 75 2e  assert( pIn1->u.
7720: 69 3e 3d 30 20 26 26 20 70 49 6e 31 2d 3e 75 2e  i>=0 && pIn1->u.
7730: 69 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 43  i<p->nOp );.  pC
7740: 61 6c 6c 65 72 20 3d 20 26 61 4f 70 5b 70 49 6e  aller = &aOp[pIn
7750: 31 2d 3e 75 2e 69 5d 3b 0a 20 20 61 73 73 65 72  1->u.i];.  asser
7760: 74 28 20 70 43 61 6c 6c 65 72 2d 3e 6f 70 63 6f  t( pCaller->opco
7770: 64 65 3d 3d 4f 50 5f 59 69 65 6c 64 20 29 3b 0a  de==OP_Yield );.
7780: 20 20 61 73 73 65 72 74 28 20 70 43 61 6c 6c 65    assert( pCalle
7790: 72 2d 3e 70 32 3e 3d 30 20 26 26 20 70 43 61 6c  r->p2>=0 && pCal
77a0: 6c 65 72 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29  ler->p2<p->nOp )
77b0: 3b 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70  ;.  pOp = &aOp[p
77c0: 43 61 6c 6c 65 72 2d 3e 70 32 20 2d 20 31 5d 3b  Caller->p2 - 1];
77d0: 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d  .  pIn1->flags =
77e0: 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a   MEM_Undefined;.
77f0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
7800: 70 63 6f 64 65 3a 20 20 59 69 65 6c 64 20 50 31  pcode:  Yield P1
7810: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
7820: 53 77 61 70 20 74 68 65 20 70 72 6f 67 72 61 6d  Swap the program
7830: 20 63 6f 75 6e 74 65 72 20 77 69 74 68 20 74 68   counter with th
7840: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
7850: 74 65 72 20 50 31 2e 20 20 54 68 69 73 0a 2a 2a  ter P1.  This.**
7860: 20 68 61 73 20 74 68 65 20 65 66 66 65 63 74 20   has the effect 
7870: 6f 66 20 79 69 65 6c 64 69 6e 67 20 74 6f 20 61  of yielding to a
7880: 20 63 6f 72 6f 75 74 69 6e 65 2e 0a 2a 2a 0a 2a   coroutine..**.*
7890: 2a 20 49 66 20 74 68 65 20 63 6f 72 6f 75 74 69  * If the corouti
78a0: 6e 65 20 74 68 61 74 20 69 73 20 6c 61 75 6e 63  ne that is launc
78b0: 68 65 64 20 62 79 20 74 68 69 73 20 69 6e 73 74  hed by this inst
78c0: 72 75 63 74 69 6f 6e 20 65 6e 64 73 20 77 69 74  ruction ends wit
78d0: 68 0a 2a 2a 20 59 69 65 6c 64 20 6f 72 20 52 65  h.** Yield or Re
78e0: 74 75 72 6e 20 74 68 65 6e 20 63 6f 6e 74 69 6e  turn then contin
78f0: 75 65 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  ue to the next i
7900: 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74  nstruction.  But
7910: 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 72 6f 75   if.** the corou
7920: 74 69 6e 65 20 6c 61 75 6e 63 68 65 64 20 62 79  tine launched by
7930: 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
7940: 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20 45  n ends with.** E
7950: 6e 64 43 6f 72 6f 75 74 69 6e 65 2c 20 74 68 65  ndCoroutine, the
7960: 6e 20 6a 75 6d 70 20 74 6f 20 50 32 20 72 61 74  n jump to P2 rat
7970: 68 65 72 20 74 68 61 6e 20 63 6f 6e 74 69 6e 75  her than continu
7980: 69 6e 67 20 77 69 74 68 20 74 68 65 0a 2a 2a 20  ing with the.** 
7990: 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
79a0: 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
79b0: 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 0a  : InitCoroutine.
79c0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 59 69 65 6c 64  */.case OP_Yield
79d0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
79e0: 2a 20 69 6e 31 2c 20 6a 75 6d 70 20 2a 2f 0a 20  * in1, jump */. 
79f0: 20 69 6e 74 20 70 63 44 65 73 74 3b 0a 20 20 70   int pcDest;.  p
7a00: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
7a10: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
7a20: 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70  VdbeMemDynamic(p
7a30: 49 6e 31 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e  In1)==0 );.  pIn
7a40: 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  1->flags = MEM_I
7a50: 6e 74 3b 0a 20 20 70 63 44 65 73 74 20 3d 20 28  nt;.  pcDest = (
7a60: 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20  int)pIn1->u.i;. 
7a70: 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 28 69 6e   pIn1->u.i = (in
7a80: 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20  t)(pOp - aOp);. 
7a90: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
7aa0: 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a  pOp->p1, pIn1);.
7ab0: 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 63 44    pOp = &aOp[pcD
7ac0: 65 73 74 5d 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  est];.  break;.}
7ad0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61  ../* Opcode:  Ha
7ae0: 6c 74 49 66 4e 75 6c 6c 20 20 50 31 20 50 32 20  ltIfNull  P1 P2 
7af0: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
7b00: 70 73 69 73 3a 20 69 66 20 72 5b 50 33 5d 3d 6e  psis: if r[P3]=n
7b10: 75 6c 6c 20 68 61 6c 74 0a 2a 2a 0a 2a 2a 20 43  ull halt.**.** C
7b20: 68 65 63 6b 20 74 68 65 20 76 61 6c 75 65 20 69  heck the value i
7b30: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 20  n register P3.  
7b40: 49 66 20 69 74 20 69 73 20 4e 55 4c 4c 20 74 68  If it is NULL th
7b50: 65 6e 20 48 61 6c 74 20 75 73 69 6e 67 0a 2a 2a  en Halt using.**
7b60: 20 70 61 72 61 6d 65 74 65 72 20 50 31 2c 20 50   parameter P1, P
7b70: 32 2c 20 61 6e 64 20 50 34 20 61 73 20 69 66 20  2, and P4 as if 
7b80: 74 68 69 73 20 77 65 72 65 20 61 20 48 61 6c 74  this were a Halt
7b90: 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49   instruction.  I
7ba0: 66 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69  f the.** value i
7bb0: 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  n register P3 is
7bc0: 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   not NULL, then 
7bd0: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20  this routine is 
7be0: 61 20 6e 6f 2d 6f 70 2e 0a 2a 2a 20 54 68 65 20  a no-op..** The 
7bf0: 50 35 20 70 61 72 61 6d 65 74 65 72 20 73 68 6f  P5 parameter sho
7c00: 75 6c 64 20 62 65 20 31 2e 0a 2a 2f 0a 63 61 73  uld be 1..*/.cas
7c10: 65 20 4f 50 5f 48 61 6c 74 49 66 4e 75 6c 6c 3a  e OP_HaltIfNull:
7c20: 20 7b 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a   {      /* in3 *
7c30: 2f 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  /.  pIn3 = &aMem
7c40: 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65  [pOp->p3];.#ifde
7c50: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
7c60: 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 4f 45   if( pOp->p2==OE
7c70: 5f 41 62 6f 72 74 20 29 7b 20 73 71 6c 69 74 65  _Abort ){ sqlite
7c80: 33 56 64 62 65 41 73 73 65 72 74 41 62 6f 72 74  3VdbeAssertAbort
7c90: 61 62 6c 65 28 70 29 3b 20 7d 0a 23 65 6e 64 69  able(p); }.#endi
7ca0: 66 0a 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66  f.  if( (pIn3->f
7cb0: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
7cc0: 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f  ==0 ) break;.  /
7cd0: 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69  * Fall through i
7ce0: 6e 74 6f 20 4f 50 5f 48 61 6c 74 20 2a 2f 0a 7d  nto OP_Halt */.}
7cf0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61  ../* Opcode:  Ha
7d00: 6c 74 20 50 31 20 50 32 20 2a 20 50 34 20 50 35  lt P1 P2 * P4 P5
7d10: 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20 69 6d 6d 65  .**.** Exit imme
7d20: 64 69 61 74 65 6c 79 2e 20 20 41 6c 6c 20 6f 70  diately.  All op
7d30: 65 6e 20 63 75 72 73 6f 72 73 2c 20 65 74 63 20  en cursors, etc 
7d40: 61 72 65 20 63 6c 6f 73 65 64 0a 2a 2a 20 61 75  are closed.** au
7d50: 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2a 0a  tomatically..**.
7d60: 2a 2a 20 50 31 20 69 73 20 74 68 65 20 72 65 73  ** P1 is the res
7d70: 75 6c 74 20 63 6f 64 65 20 72 65 74 75 72 6e 65  ult code returne
7d80: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 65 78 65  d by sqlite3_exe
7d90: 63 28 29 2c 20 73 71 6c 69 74 65 33 5f 72 65 73  c(), sqlite3_res
7da0: 65 74 28 29 2c 0a 2a 2a 20 6f 72 20 73 71 6c 69  et(),.** or sqli
7db0: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29 2e 20  te3_finalize(). 
7dc0: 20 46 6f 72 20 61 20 6e 6f 72 6d 61 6c 20 68 61   For a normal ha
7dd0: 6c 74 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20  lt, this should 
7de0: 62 65 20 53 51 4c 49 54 45 5f 4f 4b 20 28 30 29  be SQLITE_OK (0)
7df0: 2e 0a 2a 2a 20 46 6f 72 20 65 72 72 6f 72 73 2c  ..** For errors,
7e00: 20 69 74 20 63 61 6e 20 62 65 20 73 6f 6d 65 20   it can be some 
7e10: 6f 74 68 65 72 20 76 61 6c 75 65 2e 20 20 49 66  other value.  If
7e20: 20 50 31 21 3d 30 20 74 68 65 6e 20 50 32 20 77   P1!=0 then P2 w
7e30: 69 6c 6c 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a  ill determine.**
7e40: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
7e50: 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20  to rollback the 
7e60: 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74  current transact
7e70: 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20 72 6f 6c  ion.  Do not rol
7e80: 6c 62 61 63 6b 0a 2a 2a 20 69 66 20 50 32 3d 3d  lback.** if P2==
7e90: 4f 45 5f 46 61 69 6c 2e 20 44 6f 20 74 68 65 20  OE_Fail. Do the 
7ea0: 72 6f 6c 6c 62 61 63 6b 20 69 66 20 50 32 3d 3d  rollback if P2==
7eb0: 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20 20 49 66  OE_Rollback.  If
7ec0: 20 50 32 3d 3d 4f 45 5f 41 62 6f 72 74 2c 0a 2a   P2==OE_Abort,.*
7ed0: 2a 20 74 68 65 6e 20 62 61 63 6b 20 6f 75 74 20  * then back out 
7ee0: 61 6c 6c 20 63 68 61 6e 67 65 73 20 74 68 61 74  all changes that
7ef0: 20 68 61 76 65 20 6f 63 63 75 72 72 65 64 20 64   have occurred d
7f00: 75 72 69 6e 67 20 74 68 69 73 20 65 78 65 63 75  uring this execu
7f10: 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 56  tion of the.** V
7f20: 44 42 45 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20  DBE, but do not 
7f30: 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61  rollback the tra
7f40: 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a  nsaction. .**.**
7f50: 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 6e 75   If P4 is not nu
7f60: 6c 6c 20 74 68 65 6e 20 69 74 20 69 73 20 61 6e  ll then it is an
7f70: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73   error message s
7f80: 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 50 35 20  tring..**.** P5 
7f90: 69 73 20 61 20 76 61 6c 75 65 20 62 65 74 77 65  is a value betwe
7fa0: 65 6e 20 30 20 61 6e 64 20 34 2c 20 69 6e 63 6c  en 0 and 4, incl
7fb0: 75 73 69 76 65 2c 20 74 68 61 74 20 6d 6f 64 69  usive, that modi
7fc0: 66 69 65 73 20 74 68 65 20 50 34 20 73 74 72 69  fies the P4 stri
7fd0: 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 30 3a 20  ng..**.**    0: 
7fe0: 20 28 6e 6f 20 63 68 61 6e 67 65 29 0a 2a 2a 20   (no change).** 
7ff0: 20 20 20 31 3a 20 20 4e 4f 54 20 4e 55 4c 4c 20     1:  NOT NULL 
8000: 63 6f 6e 74 72 61 69 6e 74 20 66 61 69 6c 65 64  contraint failed
8010: 3a 20 50 34 0a 2a 2a 20 20 20 20 32 3a 20 20 55  : P4.**    2:  U
8020: 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74  NIQUE constraint
8030: 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20   failed: P4.**  
8040: 20 20 33 3a 20 20 43 48 45 43 4b 20 63 6f 6e 73    3:  CHECK cons
8050: 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50  traint failed: P
8060: 34 0a 2a 2a 20 20 20 20 34 3a 20 20 46 4f 52 45  4.**    4:  FORE
8070: 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69  IGN KEY constrai
8080: 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a  nt failed: P4.**
8090: 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74  .** If P5 is not
80a0: 20 7a 65 72 6f 20 61 6e 64 20 50 34 20 69 73 20   zero and P4 is 
80b0: 4e 55 4c 4c 2c 20 74 68 65 6e 20 65 76 65 72 79  NULL, then every
80c0: 74 68 69 6e 67 20 61 66 74 65 72 20 74 68 65 20  thing after the 
80d0: 22 3a 22 20 69 73 0a 2a 2a 20 6f 6d 69 74 74 65  ":" is.** omitte
80e0: 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 69  d..**.** There i
80f0: 73 20 61 6e 20 69 6d 70 6c 69 65 64 20 22 48 61  s an implied "Ha
8100: 6c 74 20 30 20 30 20 30 22 20 69 6e 73 74 72 75  lt 0 0 0" instru
8110: 63 74 69 6f 6e 20 69 6e 73 65 72 74 65 64 20 61  ction inserted a
8120: 74 20 74 68 65 20 76 65 72 79 20 65 6e 64 20 6f  t the very end o
8130: 66 0a 2a 2a 20 65 76 65 72 79 20 70 72 6f 67 72  f.** every progr
8140: 61 6d 2e 20 20 53 6f 20 61 20 6a 75 6d 70 20 70  am.  So a jump p
8150: 61 73 74 20 74 68 65 20 6c 61 73 74 20 69 6e 73  ast the last ins
8160: 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68 65 20  truction of the 
8170: 70 72 6f 67 72 61 6d 0a 2a 2a 20 69 73 20 74 68  program.** is th
8180: 65 20 73 61 6d 65 20 61 73 20 65 78 65 63 75 74  e same as execut
8190: 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63 61 73  ing Halt..*/.cas
81a0: 65 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20 20 56  e OP_Halt: {.  V
81b0: 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
81c0: 3b 0a 20 20 69 6e 74 20 70 63 78 3b 0a 0a 20 20  ;.  int pcx;..  
81d0: 70 63 78 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  pcx = (int)(pOp 
81e0: 2d 20 61 4f 70 29 3b 0a 23 69 66 64 65 66 20 53  - aOp);.#ifdef S
81f0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66  QLITE_DEBUG.  if
8200: 28 20 70 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 41 62  ( pOp->p2==OE_Ab
8210: 6f 72 74 20 29 7b 20 73 71 6c 69 74 65 33 56 64  ort ){ sqlite3Vd
8220: 62 65 41 73 73 65 72 74 41 62 6f 72 74 61 62 6c  beAssertAbortabl
8230: 65 28 70 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20  e(p); }.#endif. 
8240: 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 53 51   if( pOp->p1==SQ
8250: 4c 49 54 45 5f 4f 4b 20 26 26 20 70 2d 3e 70 46  LITE_OK && p->pF
8260: 72 61 6d 65 20 29 7b 0a 20 20 20 20 2f 2a 20 48  rame ){.    /* H
8270: 61 6c 74 20 74 68 65 20 73 75 62 2d 70 72 6f 67  alt the sub-prog
8280: 72 61 6d 2e 20 52 65 74 75 72 6e 20 63 6f 6e 74  ram. Return cont
8290: 72 6f 6c 20 74 6f 20 74 68 65 20 70 61 72 65 6e  rol to the paren
82a0: 74 20 66 72 61 6d 65 2e 20 2a 2f 0a 20 20 20 20  t frame. */.    
82b0: 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61  pFrame = p->pFra
82c0: 6d 65 3b 0a 20 20 20 20 70 2d 3e 70 46 72 61 6d  me;.    p->pFram
82d0: 65 20 3d 20 70 46 72 61 6d 65 2d 3e 70 50 61 72  e = pFrame->pPar
82e0: 65 6e 74 3b 0a 20 20 20 20 70 2d 3e 6e 46 72 61  ent;.    p->nFra
82f0: 6d 65 2d 2d 3b 0a 20 20 20 20 73 71 6c 69 74 65  me--;.    sqlite
8300: 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73 28  3VdbeSetChanges(
8310: 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b  db, p->nChange);
8320: 0a 20 20 20 20 70 63 78 20 3d 20 73 71 6c 69 74  .    pcx = sqlit
8330: 65 33 56 64 62 65 46 72 61 6d 65 52 65 73 74 6f  e3VdbeFrameResto
8340: 72 65 28 70 46 72 61 6d 65 29 3b 0a 20 20 20 20  re(pFrame);.    
8350: 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 4f 45 5f  if( pOp->p2==OE_
8360: 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20 20 20  Ignore ){.      
8370: 2f 2a 20 49 6e 73 74 72 75 63 74 69 6f 6e 20 70  /* Instruction p
8380: 63 78 20 69 73 20 74 68 65 20 4f 50 5f 50 72 6f  cx is the OP_Pro
8390: 67 72 61 6d 20 74 68 61 74 20 69 6e 76 6f 6b 65  gram that invoke
83a0: 64 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61  d the sub-progra
83b0: 6d 20 0a 20 20 20 20 20 20 2a 2a 20 63 75 72 72  m .      ** curr
83c0: 65 6e 74 6c 79 20 62 65 69 6e 67 20 68 61 6c 74  ently being halt
83d0: 65 64 2e 20 49 66 20 74 68 65 20 70 32 20 69 6e  ed. If the p2 in
83e0: 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68 69  struction of thi
83f0: 73 20 4f 50 5f 48 61 6c 74 0a 20 20 20 20 20 20  s OP_Halt.      
8400: 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  ** instruction i
8410: 73 20 73 65 74 20 74 6f 20 4f 45 5f 49 67 6e 6f  s set to OE_Igno
8420: 72 65 2c 20 74 68 65 6e 20 74 68 65 20 73 75 62  re, then the sub
8430: 2d 70 72 6f 67 72 61 6d 20 69 73 20 74 68 72 6f  -program is thro
8440: 77 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 61 6e  wing.      ** an
8450: 20 49 47 4e 4f 52 45 20 65 78 63 65 70 74 69 6f   IGNORE exceptio
8460: 6e 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  n. In this case 
8470: 6a 75 6d 70 20 74 6f 20 74 68 65 20 61 64 64 72  jump to the addr
8480: 65 73 73 20 73 70 65 63 69 66 69 65 64 0a 20 20  ess specified.  
8490: 20 20 20 20 2a 2a 20 61 73 20 74 68 65 20 70 32      ** as the p2
84a0: 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e 67 20   of the calling 
84b0: 4f 50 5f 50 72 6f 67 72 61 6d 2e 20 20 2a 2f 0a  OP_Program.  */.
84c0: 20 20 20 20 20 20 70 63 78 20 3d 20 70 2d 3e 61        pcx = p->a
84d0: 4f 70 5b 70 63 78 5d 2e 70 32 2d 31 3b 0a 20 20  Op[pcx].p2-1;.  
84e0: 20 20 7d 0a 20 20 20 20 61 4f 70 20 3d 20 70 2d    }.    aOp = p-
84f0: 3e 61 4f 70 3b 0a 20 20 20 20 61 4d 65 6d 20 3d  >aOp;.    aMem =
8500: 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 4f   p->aMem;.    pO
8510: 70 20 3d 20 26 61 4f 70 5b 70 63 78 5d 3b 0a 20  p = &aOp[pcx];. 
8520: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
8530: 70 2d 3e 72 63 20 3d 20 70 4f 70 2d 3e 70 31 3b  p->rc = pOp->p1;
8540: 0a 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f  .  p->errorActio
8550: 6e 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 32 3b  n = (u8)pOp->p2;
8560: 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 78 3b 0a  .  p->pc = pcx;.
8570: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
8580: 35 3c 3d 34 20 29 3b 0a 20 20 69 66 28 20 70 2d  5<=4 );.  if( p-
8590: 3e 72 63 20 29 7b 0a 20 20 20 20 69 66 28 20 70  >rc ){.    if( p
85a0: 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20 20  Op->p5 ){.      
85b0: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61  static const cha
85c0: 72 20 2a 20 63 6f 6e 73 74 20 61 7a 54 79 70 65  r * const azType
85d0: 5b 5d 20 3d 20 7b 20 22 4e 4f 54 20 4e 55 4c 4c  [] = { "NOT NULL
85e0: 22 2c 20 22 55 4e 49 51 55 45 22 2c 20 22 43 48  ", "UNIQUE", "CH
85f0: 45 43 4b 22 2c 0a 20 20 20 20 20 20 20 20 20 20  ECK",.          
8600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8620: 20 20 20 22 46 4f 52 45 49 47 4e 20 4b 45 59 22     "FOREIGN KEY"
8630: 20 7d 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61   };.      testca
8640: 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29  se( pOp->p5==1 )
8650: 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65  ;.      testcase
8660: 28 20 70 4f 70 2d 3e 70 35 3d 3d 32 20 29 3b 0a  ( pOp->p5==2 );.
8670: 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
8680: 70 4f 70 2d 3e 70 35 3d 3d 33 20 29 3b 0a 20 20  pOp->p5==3 );.  
8690: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f      testcase( pO
86a0: 70 2d 3e 70 35 3d 3d 34 20 29 3b 0a 20 20 20 20  p->p5==4 );.    
86b0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
86c0: 6f 72 28 70 2c 20 22 25 73 20 63 6f 6e 73 74 72  or(p, "%s constr
86d0: 61 69 6e 74 20 66 61 69 6c 65 64 22 2c 20 61 7a  aint failed", az
86e0: 54 79 70 65 5b 70 4f 70 2d 3e 70 35 2d 31 5d 29  Type[pOp->p5-1])
86f0: 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d  ;.      if( pOp-
8700: 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 20 20 20  >p4.z ){.       
8710: 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71   p->zErrMsg = sq
8720: 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c  lite3MPrintf(db,
8730: 20 22 25 7a 3a 20 25 73 22 2c 20 70 2d 3e 7a 45   "%z: %s", p->zE
8740: 72 72 4d 73 67 2c 20 70 4f 70 2d 3e 70 34 2e 7a  rrMsg, pOp->p4.z
8750: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
8760: 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69  else{.      sqli
8770: 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
8780: 22 25 73 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  "%s", pOp->p4.z)
8790: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
87a0: 74 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c  te3_log(pOp->p1,
87b0: 20 22 61 62 6f 72 74 20 61 74 20 25 64 20 69 6e   "abort at %d in
87c0: 20 5b 25 73 5d 3a 20 25 73 22 2c 20 70 63 78 2c   [%s]: %s", pcx,
87d0: 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72   p->zSql, p->zEr
87e0: 72 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 72 63 20  rMsg);.  }.  rc 
87f0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c  = sqlite3VdbeHal
8800: 74 28 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20  t(p);.  assert( 
8810: 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  rc==SQLITE_BUSY 
8820: 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  || rc==SQLITE_OK
8830: 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45   || rc==SQLITE_E
8840: 52 52 4f 52 20 29 3b 0a 20 20 69 66 28 20 72 63  RROR );.  if( rc
8850: 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b  ==SQLITE_BUSY ){
8860: 0a 20 20 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c  .    p->rc = SQL
8870: 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73  ITE_BUSY;.  }els
8880: 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  e{.    assert( r
8890: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
88a0: 28 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d 53 51  (p->rc&0xff)==SQ
88b0: 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20  LITE_CONSTRAINT 
88c0: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  );.    assert( r
88d0: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
88e0: 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
88f0: 73 3e 30 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65  s>0 || db->nDefe
8900: 72 72 65 64 49 6d 6d 43 6f 6e 73 3e 30 20 29 3b  rredImmCons>0 );
8910: 0a 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 20  .    rc = p->rc 
8920: 3f 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 3a  ? SQLITE_ERROR :
8930: 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20   SQLITE_DONE;.  
8940: 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65  }.  goto vdbe_re
8950: 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  turn;.}../* Opco
8960: 64 65 3a 20 49 6e 74 65 67 65 72 20 50 31 20 50  de: Integer P1 P
8970: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
8980: 73 69 73 3a 20 72 5b 50 32 5d 3d 50 31 0a 2a 2a  sis: r[P2]=P1.**
8990: 0a 2a 2a 20 54 68 65 20 33 32 2d 62 69 74 20 69  .** The 32-bit i
89a0: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 31 20  nteger value P1 
89b0: 69 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20  is written into 
89c0: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
89d0: 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 65 72 3a  case OP_Integer:
89e0: 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75   {         /* ou
89f0: 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f  t2 */.  pOut = o
8a00: 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
8a10: 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75   pOp);.  pOut->u
8a20: 2e 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  .i = pOp->p1;.  
8a30: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
8a40: 6f 64 65 3a 20 49 6e 74 36 34 20 2a 20 50 32 20  ode: Int64 * P2 
8a50: 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
8a60: 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a  is: r[P2]=P4.**.
8a70: 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
8a80: 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20 69  er to a 64-bit i
8a90: 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2a  nteger value..**
8aa0: 20 57 72 69 74 65 20 74 68 61 74 20 76 61 6c 75   Write that valu
8ab0: 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
8ac0: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  P2..*/.case OP_I
8ad0: 6e 74 36 34 3a 20 7b 20 20 20 20 20 20 20 20 20  nt64: {         
8ae0: 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70    /* out2 */.  p
8af0: 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
8b00: 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
8b10: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
8b20: 70 49 36 34 21 3d 30 20 29 3b 0a 20 20 70 4f 75  pI64!=0 );.  pOu
8b30: 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e 70  t->u.i = *pOp->p
8b40: 34 2e 70 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b  4.pI64;.  break;
8b50: 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
8b60: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
8b70: 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65  _POINT./* Opcode
8b80: 3a 20 52 65 61 6c 20 2a 20 50 32 20 2a 20 50 34  : Real * P2 * P4
8b90: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
8ba0: 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50  r[P2]=P4.**.** P
8bb0: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
8bc0: 6f 20 61 20 36 34 2d 62 69 74 20 66 6c 6f 61 74  o a 64-bit float
8bd0: 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e  ing point value.
8be0: 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20 76  .** Write that v
8bf0: 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74  alue into regist
8c00: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
8c10: 50 5f 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20  P_Real: {       
8c20: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
8c30: 54 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74 32 20 2a  TK_FLOAT, out2 *
8c40: 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  /.  pOut = out2P
8c50: 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
8c60: 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  );.  pOut->flags
8c70: 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 61   = MEM_Real;.  a
8c80: 73 73 65 72 74 28 20 21 73 71 6c 69 74 65 33 49  ssert( !sqlite3I
8c90: 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e 70 52  sNaN(*pOp->p4.pR
8ca0: 65 61 6c 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  eal) );.  pOut->
8cb0: 75 2e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70  u.r = *pOp->p4.p
8cc0: 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Real;.  break;.}
8cd0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f  .#endif../* Opco
8ce0: 64 65 3a 20 53 74 72 69 6e 67 38 20 2a 20 50 32  de: String8 * P2
8cf0: 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
8d00: 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27 0a  sis: r[P2]='P4'.
8d10: 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20  **.** P4 points 
8d20: 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69 6e 61  to a nul termina
8d30: 74 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67  ted UTF-8 string
8d40: 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  . This opcode is
8d50: 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a   transformed .**
8d60: 20 69 6e 74 6f 20 61 20 53 74 72 69 6e 67 20 6f   into a String o
8d70: 70 63 6f 64 65 20 62 65 66 6f 72 65 20 69 74 20  pcode before it 
8d80: 69 73 20 65 78 65 63 75 74 65 64 20 66 6f 72 20  is executed for 
8d90: 74 68 65 20 66 69 72 73 74 20 74 69 6d 65 2e 20  the first time. 
8da0: 20 44 75 72 69 6e 67 0a 2a 2a 20 74 68 69 73 20   During.** this 
8db0: 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 2c 20  transformation, 
8dc0: 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 73 74  the length of st
8dd0: 72 69 6e 67 20 50 34 20 69 73 20 63 6f 6d 70 75  ring P4 is compu
8de0: 74 65 64 20 61 6e 64 20 73 74 6f 72 65 64 0a 2a  ted and stored.*
8df0: 2a 20 61 73 20 74 68 65 20 50 31 20 70 61 72 61  * as the P1 para
8e00: 6d 65 74 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f  meter..*/.case O
8e10: 50 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20 20 20  P_String8: {    
8e20: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
8e30: 54 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74 32 20  TK_STRING, out2 
8e40: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
8e50: 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70  ->p4.z!=0 );.  p
8e60: 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
8e70: 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
8e80: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50  pOp->opcode = OP
8e90: 5f 53 74 72 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e  _String;.  pOp->
8ea0: 70 31 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  p1 = sqlite3Strl
8eb0: 65 6e 33 30 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b  en30(pOp->p4.z);
8ec0: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
8ed0: 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 69 66  _OMIT_UTF16.  if
8ee0: 28 20 65 6e 63 6f 64 69 6e 67 21 3d 53 51 4c 49  ( encoding!=SQLI
8ef0: 54 45 5f 55 54 46 38 20 29 7b 0a 20 20 20 20 72  TE_UTF8 ){.    r
8f00: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
8f10: 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70  emSetStr(pOut, p
8f20: 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53 51  Op->p4.z, -1, SQ
8f30: 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54  LITE_UTF8, SQLIT
8f40: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 61  E_STATIC);.    a
8f50: 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
8f60: 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49  E_OK || rc==SQLI
8f70: 54 45 5f 54 4f 4f 42 49 47 20 29 3b 0a 20 20 20  TE_TOOBIG );.   
8f80: 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d   if( SQLITE_OK!=
8f90: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
8fa0: 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20  eEncoding(pOut, 
8fb0: 65 6e 63 6f 64 69 6e 67 29 20 29 20 67 6f 74 6f  encoding) ) goto
8fc0: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73 73   no_mem;.    ass
8fd0: 65 72 74 28 20 70 4f 75 74 2d 3e 73 7a 4d 61 6c  ert( pOut->szMal
8fe0: 6c 6f 63 3e 30 20 26 26 20 70 4f 75 74 2d 3e 7a  loc>0 && pOut->z
8ff0: 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74 2d 3e 7a 20  Malloc==pOut->z 
9000: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 56  );.    assert( V
9010: 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f  dbeMemDynamic(pO
9020: 75 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20 70 4f  ut)==0 );.    pO
9030: 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3d 20 30  ut->szMalloc = 0
9040: 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  ;.    pOut->flag
9050: 73 20 7c 3d 20 4d 45 4d 5f 53 74 61 74 69 63 3b  s |= MEM_Static;
9060: 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34  .    if( pOp->p4
9070: 74 79 70 65 3d 3d 50 34 5f 44 59 4e 41 4d 49 43  type==P4_DYNAMIC
9080: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
9090: 33 44 62 46 72 65 65 28 64 62 2c 20 70 4f 70 2d  3DbFree(db, pOp-
90a0: 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20 20  >p4.z);.    }.  
90b0: 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20    pOp->p4type = 
90c0: 50 34 5f 44 59 4e 41 4d 49 43 3b 0a 20 20 20 20  P4_DYNAMIC;.    
90d0: 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f 75 74  pOp->p4.z = pOut
90e0: 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 31  ->z;.    pOp->p1
90f0: 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20 7d 0a   = pOut->n;.  }.
9100: 20 20 74 65 73 74 63 61 73 65 28 20 72 63 3d 3d    testcase( rc==
9110: 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29 3b  SQLITE_TOOBIG );
9120: 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70 4f  .#endif.  if( pO
9130: 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d 69 74  p->p1>db->aLimit
9140: 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
9150: 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74  NGTH] ){.    got
9160: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
9170: 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
9180: 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 2f 2a 20 46  ITE_OK );.  /* F
9190: 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
91a0: 68 65 20 6e 65 78 74 20 63 61 73 65 2c 20 4f 50  he next case, OP
91b0: 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a  _String */.}.  .
91c0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e  /* Opcode: Strin
91d0: 67 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  g P1 P2 P3 P4 P5
91e0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
91f0: 50 32 5d 3d 27 50 34 27 20 28 6c 65 6e 3d 50 31  P2]='P4' (len=P1
9200: 29 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69  ).**.** The stri
9210: 6e 67 20 76 61 6c 75 65 20 50 34 20 6f 66 20 6c  ng value P4 of l
9220: 65 6e 67 74 68 20 50 31 20 28 62 79 74 65 73 29  ength P1 (bytes)
9230: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
9240: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
9250: 20 49 66 20 50 33 20 69 73 20 6e 6f 74 20 7a 65   If P3 is not ze
9260: 72 6f 20 61 6e 64 20 74 68 65 20 63 6f 6e 74 65  ro and the conte
9270: 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
9280: 33 20 69 73 20 65 71 75 61 6c 20 74 6f 20 50 35  3 is equal to P5
9290: 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 64 61  , then.** the da
92a0: 74 61 74 79 70 65 20 6f 66 20 74 68 65 20 72 65  tatype of the re
92b0: 67 69 73 74 65 72 20 50 32 20 69 73 20 63 6f 6e  gister P2 is con
92c0: 76 65 72 74 65 64 20 74 6f 20 42 4c 4f 42 2e 20  verted to BLOB. 
92d0: 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 0a   The content is.
92e0: 2a 2a 20 74 68 65 20 73 61 6d 65 20 73 65 71 75  ** the same sequ
92f0: 65 6e 63 65 20 6f 66 20 62 79 74 65 73 2c 20 69  ence of bytes, i
9300: 74 20 69 73 20 6d 65 72 65 6c 79 20 69 6e 74 65  t is merely inte
9310: 72 70 72 65 74 65 64 20 61 73 20 61 20 42 4c 4f  rpreted as a BLO
9320: 42 20 69 6e 73 74 65 61 64 0a 2a 2a 20 6f 66 20  B instead.** of 
9330: 61 20 73 74 72 69 6e 67 2c 20 61 73 20 69 66 20  a string, as if 
9340: 69 74 20 68 61 64 20 62 65 65 6e 20 43 41 53 54  it had been CAST
9350: 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
9360: 73 3a 0a 2a 2a 0a 2a 2a 20 69 66 28 20 50 33 21  s:.**.** if( P3!
9370: 3d 30 20 61 6e 64 20 72 65 67 5b 50 33 5d 3d 3d  =0 and reg[P3]==
9380: 50 35 20 29 20 72 65 67 5b 50 32 5d 20 3a 3d 20  P5 ) reg[P2] := 
9390: 43 41 53 54 28 72 65 67 5b 50 32 5d 20 61 73 20  CAST(reg[P2] as 
93a0: 42 4c 4f 42 29 0a 2a 2f 0a 63 61 73 65 20 4f 50  BLOB).*/.case OP
93b0: 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20 20 20 20  _String: {      
93c0: 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
93d0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
93e0: 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20  .z!=0 );.  pOut 
93f0: 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
9400: 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74  (p, pOp);.  pOut
9410: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74  ->flags = MEM_St
9420: 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d  r|MEM_Static|MEM
9430: 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a  _Term;.  pOut->z
9440: 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20   = pOp->p4.z;.  
9450: 70 4f 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70  pOut->n = pOp->p
9460: 31 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d  1;.  pOut->enc =
9470: 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44   encoding;.  UPD
9480: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
9490: 28 70 4f 75 74 29 3b 0a 23 69 66 6e 64 65 66 20  (pOut);.#ifndef 
94a0: 53 51 4c 49 54 45 5f 4c 49 4b 45 5f 44 4f 45 53  SQLITE_LIKE_DOES
94b0: 4e 54 5f 4d 41 54 43 48 5f 42 4c 4f 42 53 0a 20  NT_MATCH_BLOBS. 
94c0: 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29   if( pOp->p3>0 )
94d0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
94e0: 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p3<=(p->nMem+
94f0: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
9500: 29 3b 0a 20 20 20 20 70 49 6e 33 20 3d 20 26 61  );.    pIn3 = &a
9510: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
9520: 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e    assert( pIn3->
9530: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
9540: 29 3b 0a 20 20 20 20 69 66 28 20 70 49 6e 33 2d  );.    if( pIn3-
9550: 3e 75 2e 69 3d 3d 70 4f 70 2d 3e 70 35 20 29 20  >u.i==pOp->p5 ) 
9560: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
9570: 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 61 74 69  M_Blob|MEM_Stati
9580: 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 7d 0a  c|MEM_Term;.  }.
9590: 23 65 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b 0a  #endif.  break;.
95a0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75  }../* Opcode: Nu
95b0: 6c 6c 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ll P1 P2 P3 * *.
95c0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
95d0: 32 2e 2e 50 33 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a  2..P3]=NULL.**.*
95e0: 2a 20 57 72 69 74 65 20 61 20 4e 55 4c 4c 20 69  * Write a NULL i
95f0: 6e 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 32  nto registers P2
9600: 2e 20 20 49 66 20 50 33 20 67 72 65 61 74 65 72  .  If P3 greater
9610: 20 74 68 61 6e 20 50 32 2c 20 74 68 65 6e 20 61   than P2, then a
9620: 6c 73 6f 20 77 72 69 74 65 0a 2a 2a 20 4e 55 4c  lso write.** NUL
9630: 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  L into register 
9640: 50 33 20 61 6e 64 20 65 76 65 72 79 20 72 65 67  P3 and every reg
9650: 69 73 74 65 72 20 69 6e 20 62 65 74 77 65 65 6e  ister in between
9660: 20 50 32 20 61 6e 64 20 50 33 2e 20 20 49 66 20   P2 and P3.  If 
9670: 50 33 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68  P3.** is less th
9680: 61 6e 20 50 32 20 28 74 79 70 69 63 61 6c 6c 79  an P2 (typically
9690: 20 50 33 20 69 73 20 7a 65 72 6f 29 20 74 68 65   P3 is zero) the
96a0: 6e 20 6f 6e 6c 79 20 72 65 67 69 73 74 65 72 20  n only register 
96b0: 50 32 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20  P2 is.** set to 
96c0: 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  NULL..**.** If t
96d0: 68 65 20 50 31 20 76 61 6c 75 65 20 69 73 20 6e  he P1 value is n
96e0: 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 6c  on-zero, then al
96f0: 73 6f 20 73 65 74 20 74 68 65 20 4d 45 4d 5f 43  so set the MEM_C
9700: 6c 65 61 72 65 64 20 66 6c 61 67 20 73 6f 20 74  leared flag so t
9710: 68 61 74 0a 2a 2a 20 4e 55 4c 4c 20 76 61 6c 75  hat.** NULL valu
9720: 65 73 20 77 69 6c 6c 20 6e 6f 74 20 63 6f 6d 70  es will not comp
9730: 61 72 65 20 65 71 75 61 6c 20 65 76 65 6e 20 69  are equal even i
9740: 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  f SQLITE_NULLEQ 
9750: 69 73 20 73 65 74 20 6f 6e 0a 2a 2a 20 4f 50 5f  is set on.** OP_
9760: 4e 65 20 6f 72 20 4f 50 5f 45 71 2e 0a 2a 2f 0a  Ne or OP_Eq..*/.
9770: 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20  case OP_Null: { 
9780: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
9790: 32 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 0a  2 */.  int cnt;.
97a0: 20 20 75 31 36 20 6e 75 6c 6c 46 6c 61 67 3b 0a    u16 nullFlag;.
97b0: 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
97c0: 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
97d0: 0a 20 20 63 6e 74 20 3d 20 70 4f 70 2d 3e 70 33  .  cnt = pOp->p3
97e0: 2d 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65  -pOp->p2;.  asse
97f0: 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d  rt( pOp->p3<=(p-
9800: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
9810: 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 2d  rsor) );.  pOut-
9820: 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c 46 6c 61  >flags = nullFla
9830: 67 20 3d 20 70 4f 70 2d 3e 70 31 20 3f 20 28 4d  g = pOp->p1 ? (M
9840: 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 43 6c 65 61  EM_Null|MEM_Clea
9850: 72 65 64 29 20 3a 20 4d 45 4d 5f 4e 75 6c 6c 3b  red) : MEM_Null;
9860: 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 30 3b 0a  .  pOut->n = 0;.
9870: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
9880: 42 55 47 0a 20 20 70 4f 75 74 2d 3e 75 54 65 6d  BUG.  pOut->uTem
9890: 70 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20  p = 0;.#endif.  
98a0: 77 68 69 6c 65 28 20 63 6e 74 3e 30 20 29 7b 0a  while( cnt>0 ){.
98b0: 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20      pOut++;.    
98c0: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
98d0: 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 73  (p, pOut);.    s
98e0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
98f0: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20  Null(pOut);.    
9900: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75  pOut->flags = nu
9910: 6c 6c 46 6c 61 67 3b 0a 20 20 20 20 70 4f 75 74  llFlag;.    pOut
9920: 2d 3e 6e 20 3d 20 30 3b 0a 20 20 20 20 63 6e 74  ->n = 0;.    cnt
9930: 2d 2d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  --;.  }.  break;
9940: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
9950: 6f 66 74 4e 75 6c 6c 20 50 31 20 2a 20 2a 20 2a  oftNull P1 * * *
9960: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
9970: 72 5b 50 31 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a  r[P1]=NULL.**.**
9980: 20 53 65 74 20 72 65 67 69 73 74 65 72 20 50 31   Set register P1
9990: 20 74 6f 20 68 61 76 65 20 74 68 65 20 76 61 6c   to have the val
99a0: 75 65 20 4e 55 4c 4c 20 61 73 20 73 65 65 6e 20  ue NULL as seen 
99b0: 62 79 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65  by the OP_MakeRe
99c0: 63 6f 72 64 0a 2a 2a 20 69 6e 73 74 72 75 63 74  cord.** instruct
99d0: 69 6f 6e 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20  ion, but do not 
99e0: 66 72 65 65 20 61 6e 79 20 73 74 72 69 6e 67 20  free any string 
99f0: 6f 72 20 62 6c 6f 62 20 6d 65 6d 6f 72 79 20 61  or blob memory a
9a00: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a 2a  ssociated with.*
9a10: 2a 20 74 68 65 20 72 65 67 69 73 74 65 72 2c 20  * the register, 
9a20: 73 6f 20 74 68 61 74 20 69 66 20 74 68 65 20 76  so that if the v
9a30: 61 6c 75 65 20 77 61 73 20 61 20 73 74 72 69 6e  alue was a strin
9a40: 67 20 6f 72 20 62 6c 6f 62 20 74 68 61 74 20 77  g or blob that w
9a50: 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79  as.** previously
9a60: 20 63 6f 70 69 65 64 20 75 73 69 6e 67 20 4f 50   copied using OP
9a70: 5f 53 43 6f 70 79 2c 20 74 68 65 20 63 6f 70 69  _SCopy, the copi
9a80: 65 73 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75 65  es will continue
9a90: 20 74 6f 20 62 65 20 76 61 6c 69 64 2e 0a 2a 2f   to be valid..*/
9aa0: 0a 63 61 73 65 20 4f 50 5f 53 6f 66 74 4e 75 6c  .case OP_SoftNul
9ab0: 6c 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  l: {.  assert( p
9ac0: 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d  Op->p1>0 && pOp-
9ad0: 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p1<=(p->nMem+1 
9ae0: 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
9af0: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
9b00: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74  pOp->p1];.  pOut
9b10: 2d 3e 66 6c 61 67 73 20 3d 20 28 70 4f 75 74 2d  ->flags = (pOut-
9b20: 3e 66 6c 61 67 73 26 7e 28 4d 45 4d 5f 55 6e 64  >flags&~(MEM_Und
9b30: 65 66 69 6e 65 64 7c 4d 45 4d 5f 41 66 66 4d 61  efined|MEM_AffMa
9b40: 73 6b 29 29 7c 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  sk))|MEM_Null;. 
9b50: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
9b60: 63 6f 64 65 3a 20 42 6c 6f 62 20 50 31 20 50 32  code: Blob P1 P2
9b70: 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
9b80: 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 20 28 6c  sis: r[P2]=P4 (l
9b90: 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 50 34 20  en=P1).**.** P4 
9ba0: 70 6f 69 6e 74 73 20 74 6f 20 61 20 62 6c 6f 62  points to a blob
9bb0: 20 6f 66 20 64 61 74 61 20 50 31 20 62 79 74 65   of data P1 byte
9bc0: 73 20 6c 6f 6e 67 2e 20 20 53 74 6f 72 65 20 74  s long.  Store t
9bd0: 68 69 73 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20 72  his.** blob in r
9be0: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
9bf0: 61 73 65 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20  ase OP_Blob: {  
9c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9c10: 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73 65 72   out2 */.  asser
9c20: 74 28 20 70 4f 70 2d 3e 70 31 20 3c 3d 20 53 51  t( pOp->p1 <= SQ
9c30: 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 20  LITE_MAX_LENGTH 
9c40: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  );.  pOut = out2
9c50: 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
9c60: 70 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  p);.  sqlite3Vdb
9c70: 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c  eMemSetStr(pOut,
9c80: 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 4f 70 2d   pOp->p4.z, pOp-
9c90: 3e 70 31 2c 20 30 2c 20 30 29 3b 0a 20 20 70 4f  >p1, 0, 0);.  pO
9ca0: 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69  ut->enc = encodi
9cb0: 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  ng;.  UPDATE_MAX
9cc0: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
9cd0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
9ce0: 4f 70 63 6f 64 65 3a 20 56 61 72 69 61 62 6c 65  Opcode: Variable
9cf0: 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
9d00: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
9d10: 3d 70 61 72 61 6d 65 74 65 72 28 50 31 2c 50 34  =parameter(P1,P4
9d20: 29 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72  ).**.** Transfer
9d30: 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 62   the values of b
9d40: 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72 20 50  ound parameter P
9d50: 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  1 into register 
9d60: 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  P2.**.** If the 
9d70: 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 61 6d  parameter is nam
9d80: 65 64 2c 20 74 68 65 6e 20 69 74 73 20 6e 61 6d  ed, then its nam
9d90: 65 20 61 70 70 65 61 72 73 20 69 6e 20 50 34 2e  e appears in P4.
9da0: 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65  .** The P4 value
9db0: 20 69 73 20 75 73 65 64 20 62 79 20 73 71 6c 69   is used by sqli
9dc0: 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
9dd0: 65 72 5f 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63 61  er_name()..*/.ca
9de0: 73 65 20 4f 50 5f 56 61 72 69 61 62 6c 65 3a 20  se OP_Variable: 
9df0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
9e00: 6f 75 74 32 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  out2 */.  Mem *p
9e10: 56 61 72 3b 20 20 20 20 20 20 20 2f 2a 20 56 61  Var;       /* Va
9e20: 6c 75 65 20 62 65 69 6e 67 20 74 72 61 6e 73 66  lue being transf
9e30: 65 72 72 65 64 20 2a 2f 0a 0a 20 20 61 73 73 65  erred */..  asse
9e40: 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26  rt( pOp->p1>0 &&
9e50: 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 56 61   pOp->p1<=p->nVa
9e60: 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
9e70: 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20 7c 7c 20 70  Op->p4.z==0 || p
9e80: 4f 70 2d 3e 70 34 2e 7a 3d 3d 73 71 6c 69 74 65  Op->p4.z==sqlite
9e90: 33 56 4c 69 73 74 4e 75 6d 54 6f 4e 61 6d 65 28  3VListNumToName(
9ea0: 70 2d 3e 70 56 4c 69 73 74 2c 70 4f 70 2d 3e 70  p->pVList,pOp->p
9eb0: 31 29 20 29 3b 0a 20 20 70 56 61 72 20 3d 20 26  1) );.  pVar = &
9ec0: 70 2d 3e 61 56 61 72 5b 70 4f 70 2d 3e 70 31 20  p->aVar[pOp->p1 
9ed0: 2d 20 31 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69  - 1];.  if( sqli
9ee0: 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67  te3VdbeMemTooBig
9ef0: 28 70 56 61 72 29 20 29 7b 0a 20 20 20 20 67 6f  (pVar) ){.    go
9f00: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
9f10: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
9f20: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74  Op->p2];.  sqlit
9f30: 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
9f40: 43 6f 70 79 28 70 4f 75 74 2c 20 70 56 61 72 2c  Copy(pOut, pVar,
9f50: 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20   MEM_Static);.  
9f60: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
9f70: 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  IZE(pOut);.  bre
9f80: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
9f90: 3a 20 4d 6f 76 65 20 50 31 20 50 32 20 50 33 20  : Move P1 P2 P3 
9fa0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
9fb0: 20 72 5b 50 32 40 50 33 5d 3d 72 5b 50 31 40 50   r[P2@P3]=r[P1@P
9fc0: 33 5d 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68  3].**.** Move th
9fd0: 65 20 50 33 20 76 61 6c 75 65 73 20 69 6e 20 72  e P3 values in r
9fe0: 65 67 69 73 74 65 72 20 50 31 2e 2e 50 31 2b 50  egister P1..P1+P
9ff0: 33 2d 31 20 6f 76 65 72 20 69 6e 74 6f 0a 2a 2a  3-1 over into.**
a000: 20 72 65 67 69 73 74 65 72 73 20 50 32 2e 2e 50   registers P2..P
a010: 32 2b 50 33 2d 31 2e 20 20 52 65 67 69 73 74 65  2+P3-1.  Registe
a020: 72 73 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 61  rs P1..P1+P3-1 a
a030: 72 65 0a 2a 2a 20 6c 65 66 74 20 68 6f 6c 64 69  re.** left holdi
a040: 6e 67 20 61 20 4e 55 4c 4c 2e 20 20 49 74 20 69  ng a NULL.  It i
a050: 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 72  s an error for r
a060: 65 67 69 73 74 65 72 20 72 61 6e 67 65 73 0a 2a  egister ranges.*
a070: 2a 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 61 6e  * P1..P1+P3-1 an
a080: 64 20 50 32 2e 2e 50 32 2b 50 33 2d 31 20 74 6f  d P2..P2+P3-1 to
a090: 20 6f 76 65 72 6c 61 70 2e 20 20 49 74 20 69 73   overlap.  It is
a0a0: 20 61 6e 20 65 72 72 6f 72 0a 2a 2a 20 66 6f 72   an error.** for
a0b0: 20 50 33 20 74 6f 20 62 65 20 6c 65 73 73 20 74   P3 to be less t
a0c0: 68 61 6e 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f  han 1..*/.case O
a0d0: 50 5f 4d 6f 76 65 3a 20 7b 0a 20 20 69 6e 74 20  P_Move: {.  int 
a0e0: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
a0f0: 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74  Number of regist
a100: 65 72 73 20 6c 65 66 74 20 74 6f 20 63 6f 70 79  ers left to copy
a110: 20 2a 2f 0a 20 20 69 6e 74 20 70 31 3b 20 20 20   */.  int p1;   
a120: 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
a130: 65 72 20 74 6f 20 63 6f 70 79 20 66 72 6f 6d 20  er to copy from 
a140: 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20  */.  int p2;    
a150: 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
a160: 72 20 74 6f 20 63 6f 70 79 20 74 6f 20 2a 2f 0a  r to copy to */.
a170: 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  .  n = pOp->p3;.
a180: 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a    p1 = pOp->p1;.
a190: 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a    p2 = pOp->p2;.
a1a0: 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20 26 26    assert( n>0 &&
a1b0: 20 70 31 3e 30 20 26 26 20 70 32 3e 30 20 29 3b   p1>0 && p2>0 );
a1c0: 0a 20 20 61 73 73 65 72 74 28 20 70 31 2b 6e 3c  .  assert( p1+n<
a1d0: 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c 3d 70 31 20  =p2 || p2+n<=p1 
a1e0: 29 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  );..  pIn1 = &aM
a1f0: 65 6d 5b 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  em[p1];.  pOut =
a200: 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 64 6f   &aMem[p2];.  do
a210: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
a220: 75 74 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d  ut<=&aMem[(p->nM
a230: 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
a240: 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72  r)] );.    asser
a250: 74 28 20 70 49 6e 31 3c 3d 26 61 4d 65 6d 5b 28  t( pIn1<=&aMem[(
a260: 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
a270: 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20  Cursor)] );.    
a280: 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
a290: 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20  id(pIn1) );.    
a2a0: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
a2b0: 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 73  (p, pOut);.    s
a2c0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76  qlite3VdbeMemMov
a2d0: 65 28 70 4f 75 74 2c 20 70 49 6e 31 29 3b 0a 23  e(pOut, pIn1);.#
a2e0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
a2f0: 55 47 0a 20 20 20 20 69 66 28 20 70 4f 75 74 2d  UG.    if( pOut-
a300: 3e 70 53 63 6f 70 79 46 72 6f 6d 3e 3d 26 61 4d  >pScopyFrom>=&aM
a310: 65 6d 5b 70 31 5d 20 26 26 20 70 4f 75 74 2d 3e  em[p1] && pOut->
a320: 70 53 63 6f 70 79 46 72 6f 6d 3c 70 4f 75 74 20  pScopyFrom<pOut 
a330: 29 7b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 70  ){.      pOut->p
a340: 53 63 6f 70 79 46 72 6f 6d 20 2b 3d 20 70 4f 70  ScopyFrom += pOp
a350: 2d 3e 70 32 20 2d 20 70 31 3b 0a 20 20 20 20 7d  ->p2 - p1;.    }
a360: 0a 23 65 6e 64 69 66 0a 20 20 20 20 44 65 65 70  .#endif.    Deep
a370: 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29  hemeralize(pOut)
a380: 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
a390: 52 41 43 45 28 70 32 2b 2b 2c 20 70 4f 75 74 29  RACE(p2++, pOut)
a3a0: 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20  ;.    pIn1++;.  
a3b0: 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d 77 68 69    pOut++;.  }whi
a3c0: 6c 65 28 20 2d 2d 6e 20 29 3b 0a 20 20 62 72 65  le( --n );.  bre
a3d0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
a3e0: 3a 20 43 6f 70 79 20 50 31 20 50 32 20 50 33 20  : Copy P1 P2 P3 
a3f0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
a400: 20 72 5b 50 32 40 50 33 2b 31 5d 3d 72 5b 50 31   r[P2@P3+1]=r[P1
a410: 40 50 33 2b 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b  @P3+1].**.** Mak
a420: 65 20 61 20 63 6f 70 79 20 6f 66 20 72 65 67 69  e a copy of regi
a430: 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33 20  sters P1..P1+P3 
a440: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 73 20 50  into registers P
a450: 32 2e 2e 50 32 2b 50 33 2e 0a 2a 2a 0a 2a 2a 20  2..P2+P3..**.** 
a460: 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
a470: 20 6d 61 6b 65 73 20 61 20 64 65 65 70 20 63 6f   makes a deep co
a480: 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e  py of the value.
a490: 20 20 41 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a    A duplicate.**
a4a0: 20 69 73 20 6d 61 64 65 20 6f 66 20 61 6e 79 20   is made of any 
a4b0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 63  string or blob c
a4c0: 6f 6e 73 74 61 6e 74 2e 20 20 53 65 65 20 61 6c  onstant.  See al
a4d0: 73 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a  so OP_SCopy..*/.
a4e0: 63 61 73 65 20 4f 50 5f 43 6f 70 79 3a 20 7b 0a  case OP_Copy: {.
a4f0: 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20    int n;..  n = 
a500: 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 49 6e 31 20  pOp->p3;.  pIn1 
a510: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
a520: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
a530: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
a540: 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20  ert( pOut!=pIn1 
a550: 29 3b 0a 20 20 77 68 69 6c 65 28 20 31 20 29 7b  );.  while( 1 ){
a560: 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  .    memAboutToC
a570: 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
a580: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
a590: 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f  emShallowCopy(pO
a5a0: 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70  ut, pIn1, MEM_Ep
a5b0: 68 65 6d 29 3b 0a 20 20 20 20 44 65 65 70 68 65  hem);.    Deephe
a5c0: 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a  meralize(pOut);.
a5d0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
a5e0: 42 55 47 0a 20 20 20 20 70 4f 75 74 2d 3e 70 53  BUG.    pOut->pS
a5f0: 63 6f 70 79 46 72 6f 6d 20 3d 20 30 3b 0a 23 65  copyFrom = 0;.#e
a600: 6e 64 69 66 0a 20 20 20 20 52 45 47 49 53 54 45  ndif.    REGISTE
a610: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b  R_TRACE(pOp->p2+
a620: 70 4f 70 2d 3e 70 33 2d 6e 2c 20 70 4f 75 74 29  pOp->p3-n, pOut)
a630: 3b 0a 20 20 20 20 69 66 28 20 28 6e 2d 2d 29 3d  ;.    if( (n--)=
a640: 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20  =0 ) break;.    
a650: 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 70 49 6e 31  pOut++;.    pIn1
a660: 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ++;.  }.  break;
a670: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
a680: 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a  Copy P1 P2 * * *
a690: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
a6a0: 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  P2]=r[P1].**.** 
a6b0: 4d 61 6b 65 20 61 20 73 68 61 6c 6c 6f 77 20 63  Make a shallow c
a6c0: 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65 72 20  opy of register 
a6d0: 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  P1 into register
a6e0: 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
a6f0: 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65  instruction make
a700: 73 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79  s a shallow copy
a710: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20   of the value.  
a720: 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20  If the value.** 
a730: 69 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62  is a string or b
a740: 6c 6f 62 2c 20 74 68 65 6e 20 74 68 65 20 63 6f  lob, then the co
a750: 70 79 20 69 73 20 6f 6e 6c 79 20 61 20 70 6f 69  py is only a poi
a760: 6e 74 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6f  nter to the.** o
a770: 72 69 67 69 6e 61 6c 20 61 6e 64 20 68 65 6e 63  riginal and henc
a780: 65 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61  e if the origina
a790: 6c 20 63 68 61 6e 67 65 73 20 73 6f 20 77 69 6c  l changes so wil
a7a0: 6c 20 74 68 65 20 63 6f 70 79 2e 0a 2a 2a 20 57  l the copy..** W
a7b0: 6f 72 73 65 2c 20 69 66 20 74 68 65 20 6f 72 69  orse, if the ori
a7c0: 67 69 6e 61 6c 20 69 73 20 64 65 61 6c 6c 6f 63  ginal is dealloc
a7d0: 61 74 65 64 2c 20 74 68 65 20 63 6f 70 79 20 62  ated, the copy b
a7e0: 65 63 6f 6d 65 73 20 69 6e 76 61 6c 69 64 2e 0a  ecomes invalid..
a7f0: 2a 2a 20 54 68 75 73 20 74 68 65 20 70 72 6f 67  ** Thus the prog
a800: 72 61 6d 20 6d 75 73 74 20 67 75 61 72 61 6e 74  ram must guarant
a810: 65 65 20 74 68 61 74 20 74 68 65 20 6f 72 69 67  ee that the orig
a820: 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f 74 20 63 68  inal will not ch
a830: 61 6e 67 65 0a 2a 2a 20 64 75 72 69 6e 67 20 74  ange.** during t
a840: 68 65 20 6c 69 66 65 74 69 6d 65 20 6f 66 20 74  he lifetime of t
a850: 68 65 20 63 6f 70 79 2e 20 20 55 73 65 20 4f 50  he copy.  Use OP
a860: 5f 43 6f 70 79 20 74 6f 20 6d 61 6b 65 20 61 20  _Copy to make a 
a870: 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f 70 79  complete.** copy
a880: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 43 6f  ..*/.case OP_SCo
a890: 70 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  py: {           
a8a0: 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49   /* out2 */.  pI
a8b0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
a8c0: 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p1];.  pOut = &a
a8d0: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
a8e0: 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49  assert( pOut!=pI
a8f0: 6e 31 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  n1 );.  sqlite3V
a900: 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
a910: 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45  y(pOut, pIn1, ME
a920: 4d 5f 45 70 68 65 6d 29 3b 0a 23 69 66 64 65 66  M_Ephem);.#ifdef
a930: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
a940: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
a950: 20 3d 20 70 49 6e 31 3b 0a 20 20 70 4f 75 74 2d   = pIn1;.  pOut-
a960: 3e 6d 53 63 6f 70 79 46 6c 61 67 73 20 3d 20 70  >mScopyFlags = p
a970: 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a 23 65 6e 64  In1->flags;.#end
a980: 69 66 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  if.  break;.}../
a990: 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 43 6f 70  * Opcode: IntCop
a9a0: 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  y P1 P2 * * *.**
a9b0: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
a9c0: 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 72 61  =r[P1].**.** Tra
a9d0: 6e 73 66 65 72 20 74 68 65 20 69 6e 74 65 67 65  nsfer the intege
a9e0: 72 20 76 61 6c 75 65 20 68 65 6c 64 20 69 6e 20  r value held in 
a9f0: 72 65 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f  register P1 into
aa00: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
aa10: 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 6e 20 6f  .** This is an o
aa20: 70 74 69 6d 69 7a 65 64 20 76 65 72 73 69 6f 6e  ptimized version
aa30: 20 6f 66 20 53 43 6f 70 79 20 74 68 61 74 20 77   of SCopy that w
aa40: 6f 72 6b 73 20 6f 6e 6c 79 20 66 6f 72 20 69 6e  orks only for in
aa50: 74 65 67 65 72 0a 2a 2a 20 76 61 6c 75 65 73 2e  teger.** values.
aa60: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 43  .*/.case OP_IntC
aa70: 6f 70 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20  opy: {          
aa80: 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70    /* out2 */.  p
aa90: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
aaa0: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
aab0: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
aac0: 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20  EM_Int)!=0 );.  
aad0: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
aae0: 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33  ->p2];.  sqlite3
aaf0: 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28  VdbeMemSetInt64(
ab00: 70 4f 75 74 2c 20 70 49 6e 31 2d 3e 75 2e 69 29  pOut, pIn1->u.i)
ab10: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
ab20: 20 4f 70 63 6f 64 65 3a 20 52 65 73 75 6c 74 52   Opcode: ResultR
ab30: 6f 77 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ow P1 P2 * * *.*
ab40: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6f 75 74 70  * Synopsis: outp
ab50: 75 74 3d 72 5b 50 31 40 50 32 5d 0a 2a 2a 0a 2a  ut=r[P1@P2].**.*
ab60: 2a 20 54 68 65 20 72 65 67 69 73 74 65 72 73 20  * The registers 
ab70: 50 31 20 74 68 72 6f 75 67 68 20 50 31 2b 50 32  P1 through P1+P2
ab80: 2d 31 20 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e  -1 contain a sin
ab90: 67 6c 65 20 72 6f 77 20 6f 66 0a 2a 2a 20 72 65  gle row of.** re
aba0: 73 75 6c 74 73 2e 20 54 68 69 73 20 6f 70 63 6f  sults. This opco
abb0: 64 65 20 63 61 75 73 65 73 20 74 68 65 20 73 71  de causes the sq
abc0: 6c 69 74 65 33 5f 73 74 65 70 28 29 20 63 61 6c  lite3_step() cal
abd0: 6c 20 74 6f 20 74 65 72 6d 69 6e 61 74 65 0a 2a  l to terminate.*
abe0: 2a 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45  * with an SQLITE
abf0: 5f 52 4f 57 20 72 65 74 75 72 6e 20 63 6f 64 65  _ROW return code
ac00: 20 61 6e 64 20 69 74 20 73 65 74 73 20 75 70 20   and it sets up 
ac10: 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  the sqlite3_stmt
ac20: 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74 6f  .** structure to
ac30: 20 70 72 6f 76 69 64 65 20 61 63 63 65 73 73 20   provide access 
ac40: 74 6f 20 74 68 65 20 72 28 50 31 29 2e 2e 72 28  to the r(P1)..r(
ac50: 50 31 2b 50 32 2d 31 29 20 76 61 6c 75 65 73 20  P1+P2-1) values 
ac60: 61 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74  as.** the result
ac70: 20 72 6f 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50   row..*/.case OP
ac80: 5f 52 65 73 75 6c 74 52 6f 77 3a 20 7b 0a 20 20  _ResultRow: {.  
ac90: 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74  Mem *pMem;.  int
aca0: 20 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   i;.  assert( p-
acb0: 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70  >nResColumn==pOp
acc0: 2d 3e 70 32 20 29 3b 0a 20 20 61 73 73 65 72 74  ->p2 );.  assert
acd0: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20  ( pOp->p1>0 );. 
ace0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
acf0: 2b 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d  +pOp->p2<=(p->nM
ad00: 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
ad10: 72 29 2b 31 20 29 3b 0a 0a 23 69 66 6e 64 65 66  r)+1 );..#ifndef
ad20: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
ad30: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
ad40: 20 2f 2a 20 52 75 6e 20 74 68 65 20 70 72 6f 67   /* Run the prog
ad50: 72 65 73 73 20 63 6f 75 6e 74 65 72 20 6a 75 73  ress counter jus
ad60: 74 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69  t before returni
ad70: 6e 67 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64  ng..  */.  if( d
ad80: 62 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d 30 0a  b->xProgress!=0.
ad90: 20 20 20 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e     && nVmStep>=n
ada0: 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 0a 20  ProgressLimit . 
adb0: 20 20 26 26 20 64 62 2d 3e 78 50 72 6f 67 72 65    && db->xProgre
adc0: 73 73 28 64 62 2d 3e 70 50 72 6f 67 72 65 73 73  ss(db->pProgress
add0: 41 72 67 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20  Arg)!=0.  ){.   
ade0: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54   rc = SQLITE_INT
adf0: 45 52 52 55 50 54 3b 0a 20 20 20 20 67 6f 74 6f  ERRUPT;.    goto
ae00: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
ae10: 72 6f 72 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  ror;.  }.#endif.
ae20: 0a 20 20 2f 2a 20 49 66 20 74 68 69 73 20 73 74  .  /* If this st
ae30: 61 74 65 6d 65 6e 74 20 68 61 73 20 76 69 6f 6c  atement has viol
ae40: 61 74 65 64 20 69 6d 6d 65 64 69 61 74 65 20 66  ated immediate f
ae50: 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
ae60: 72 61 69 6e 74 73 2c 20 64 6f 0a 20 20 2a 2a 20  raints, do.  ** 
ae70: 6e 6f 74 20 72 65 74 75 72 6e 20 74 68 65 20 6e  not return the n
ae80: 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 6d 6f  umber of rows mo
ae90: 64 69 66 69 65 64 2e 20 41 6e 64 20 64 6f 20 6e  dified. And do n
aea0: 6f 74 20 52 45 4c 45 41 53 45 20 74 68 65 20 73  ot RELEASE the s
aeb0: 74 61 74 65 6d 65 6e 74 0a 20 20 2a 2a 20 74 72  tatement.  ** tr
aec0: 61 6e 73 61 63 74 69 6f 6e 2e 20 49 74 20 6e 65  ansaction. It ne
aed0: 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64  eds to be rolled
aee0: 20 62 61 63 6b 2e 20 20 2a 2f 0a 20 20 69 66 28   back.  */.  if(
aef0: 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 28 72 63 20   SQLITE_OK!=(rc 
af00: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  = sqlite3VdbeChe
af10: 63 6b 46 6b 28 70 2c 20 30 29 29 20 29 7b 0a 20  ckFk(p, 0)) ){. 
af20: 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 66     assert( db->f
af30: 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e  lags&SQLITE_Coun
af40: 74 52 6f 77 73 20 29 3b 0a 20 20 20 20 61 73 73  tRows );.    ass
af50: 65 72 74 28 20 70 2d 3e 75 73 65 73 53 74 6d 74  ert( p->usesStmt
af60: 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20 20 20 20 67  Journal );.    g
af70: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
af80: 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f  _error;.  }..  /
af90: 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  * If the SQLITE_
afa0: 43 6f 75 6e 74 52 6f 77 73 20 66 6c 61 67 20 69  CountRows flag i
afb0: 73 20 73 65 74 20 69 6e 20 73 71 6c 69 74 65 33  s set in sqlite3
afc0: 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
afd0: 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20 73 74 61 74  n .  ** DML stat
afe0: 65 6d 65 6e 74 73 20 69 6e 76 6f 6b 65 20 74 68  ements invoke th
aff0: 69 73 20 6f 70 63 6f 64 65 20 74 6f 20 72 65 74  is opcode to ret
b000: 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  urn the number o
b010: 66 20 72 6f 77 73 20 0a 20 20 2a 2a 20 6d 6f 64  f rows .  ** mod
b020: 69 66 69 65 64 20 74 6f 20 74 68 65 20 75 73 65  ified to the use
b030: 72 2e 20 54 68 69 73 20 69 73 20 74 68 65 20 6f  r. This is the o
b040: 6e 6c 79 20 77 61 79 20 74 68 61 74 20 61 20 56  nly way that a V
b050: 4d 20 74 68 61 74 0a 20 20 2a 2a 20 6f 70 65 6e  M that.  ** open
b060: 73 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72  s a statement tr
b070: 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 69 6e  ansaction may in
b080: 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65  voke this opcode
b090: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 63  ..  **.  ** In c
b0a0: 61 73 65 20 74 68 69 73 20 69 73 20 73 75 63 68  ase this is such
b0b0: 20 61 20 73 74 61 74 65 6d 65 6e 74 2c 20 63 6c   a statement, cl
b0c0: 6f 73 65 20 61 6e 79 20 73 74 61 74 65 6d 65 6e  ose any statemen
b0d0: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20  t transaction.  
b0e0: 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 74 68 69  ** opened by thi
b0f0: 73 20 56 4d 20 62 65 66 6f 72 65 20 72 65 74 75  s VM before retu
b100: 72 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c 20 74 6f  rning control to
b110: 20 74 68 65 20 75 73 65 72 2e 20 54 68 69 73 20   the user. This 
b120: 69 73 20 74 6f 0a 20 20 2a 2a 20 65 6e 73 75 72  is to.  ** ensur
b130: 65 20 74 68 61 74 20 73 74 61 74 65 6d 65 6e 74  e that statement
b140: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 72  -transactions ar
b150: 65 20 61 6c 77 61 79 73 20 6e 65 73 74 65 64 2c  e always nested,
b160: 20 6e 6f 74 20 6f 76 65 72 6c 61 70 70 69 6e 67   not overlapping
b170: 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 6f 70  ..  ** If the op
b180: 65 6e 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61  en statement-tra
b190: 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20  nsaction is not 
b1a0: 63 6c 6f 73 65 64 20 68 65 72 65 2c 20 74 68 65  closed here, the
b1b0: 6e 20 74 68 65 20 75 73 65 72 0a 20 20 2a 2a 20  n the user.  ** 
b1c0: 6d 61 79 20 73 74 65 70 20 61 6e 6f 74 68 65 72  may step another
b1d0: 20 56 4d 20 74 68 61 74 20 6f 70 65 6e 73 20 69   VM that opens i
b1e0: 74 73 20 6f 77 6e 20 73 74 61 74 65 6d 65 6e 74  ts own statement
b1f0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 54 68   transaction. Th
b200: 69 73 0a 20 20 2a 2a 20 6d 61 79 20 6c 65 61 64  is.  ** may lead
b210: 20 74 6f 20 6f 76 65 72 6c 61 70 70 69 6e 67 20   to overlapping 
b220: 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
b230: 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a  ctions..  **.  *
b240: 2a 20 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20  * The statement 
b250: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
b260: 65 76 65 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c  ever a top-level
b270: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 48   transaction.  H
b280: 65 6e 63 65 0a 20 20 2a 2a 20 74 68 65 20 52 45  ence.  ** the RE
b290: 4c 45 41 53 45 20 63 61 6c 6c 20 62 65 6c 6f 77  LEASE call below
b2a0: 20 63 61 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e   can never fail.
b2b0: 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
b2c0: 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30  p->iStatement==0
b2d0: 20 7c 7c 20 64 62 2d 3e 66 6c 61 67 73 26 53 51   || db->flags&SQ
b2e0: 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29  LITE_CountRows )
b2f0: 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
b300: 56 64 62 65 43 6c 6f 73 65 53 74 61 74 65 6d 65  VdbeCloseStateme
b310: 6e 74 28 70 2c 20 53 41 56 45 50 4f 49 4e 54 5f  nt(p, SAVEPOINT_
b320: 52 45 4c 45 41 53 45 29 3b 0a 20 20 61 73 73 65  RELEASE);.  asse
b330: 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
b340: 4b 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76 61 6c  K );..  /* Inval
b350: 69 64 61 74 65 20 61 6c 6c 20 65 70 68 65 6d 65  idate all epheme
b360: 72 61 6c 20 63 75 72 73 6f 72 20 72 6f 77 20 63  ral cursor row c
b370: 61 63 68 65 73 20 2a 2f 0a 20 20 70 2d 3e 63 61  aches */.  p->ca
b380: 63 68 65 43 74 72 20 3d 20 28 70 2d 3e 63 61 63  cheCtr = (p->cac
b390: 68 65 43 74 72 20 2b 20 32 29 7c 31 3b 0a 0a 20  heCtr + 2)|1;.. 
b3a0: 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68   /* Make sure th
b3b0: 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65  e results of the
b3c0: 20 63 75 72 72 65 6e 74 20 72 6f 77 20 61 72 65   current row are
b3d0: 20 5c 30 30 30 20 74 65 72 6d 69 6e 61 74 65 64   \000 terminated
b3e0: 0a 20 20 2a 2a 20 61 6e 64 20 68 61 76 65 20 61  .  ** and have a
b3f0: 6e 20 61 73 73 69 67 6e 65 64 20 74 79 70 65 2e  n assigned type.
b400: 20 20 54 68 65 20 72 65 73 75 6c 74 73 20 61 72    The results ar
b410: 65 20 64 65 2d 65 70 68 65 6d 65 72 61 6c 69 7a  e de-ephemeraliz
b420: 65 64 20 61 73 0a 20 20 2a 2a 20 61 20 73 69 64  ed as.  ** a sid
b430: 65 20 65 66 66 65 63 74 2e 0a 20 20 2a 2f 0a 20  e effect..  */. 
b440: 20 70 4d 65 6d 20 3d 20 70 2d 3e 70 52 65 73 75   pMem = p->pResu
b450: 6c 74 53 65 74 20 3d 20 26 61 4d 65 6d 5b 70 4f  ltSet = &aMem[pO
b460: 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 69 3d  p->p1];.  for(i=
b470: 30 3b 20 69 3c 70 4f 70 2d 3e 70 32 3b 20 69 2b  0; i<pOp->p2; i+
b480: 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  +){.    assert( 
b490: 6d 65 6d 49 73 56 61 6c 69 64 28 26 70 4d 65 6d  memIsValid(&pMem
b4a0: 5b 69 5d 29 20 29 3b 0a 20 20 20 20 44 65 65 70  [i]) );.    Deep
b4b0: 68 65 6d 65 72 61 6c 69 7a 65 28 26 70 4d 65 6d  hemeralize(&pMem
b4c0: 5b 69 5d 29 3b 0a 20 20 20 20 61 73 73 65 72 74  [i]);.    assert
b4d0: 28 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73  ( (pMem[i].flags
b4e0: 20 26 20 4d 45 4d 5f 45 70 68 65 6d 29 3d 3d 30   & MEM_Ephem)==0
b4f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20  .            || 
b500: 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26  (pMem[i].flags &
b510: 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c   (MEM_Str|MEM_Bl
b520: 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 73  ob))==0 );.    s
b530: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75 6c  qlite3VdbeMemNul
b540: 54 65 72 6d 69 6e 61 74 65 28 26 70 4d 65 6d 5b  Terminate(&pMem[
b550: 69 5d 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  i]);.    REGISTE
b560: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2b  R_TRACE(pOp->p1+
b570: 69 2c 20 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20  i, &pMem[i]);.  
b580: 7d 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c  }.  if( db->mall
b590: 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20  ocFailed ) goto 
b5a0: 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20 69 66 28 20 64  no_mem;..  if( d
b5b0: 62 2d 3e 6d 54 72 61 63 65 20 26 20 53 51 4c 49  b->mTrace & SQLI
b5c0: 54 45 5f 54 52 41 43 45 5f 52 4f 57 20 29 7b 0a  TE_TRACE_ROW ){.
b5d0: 20 20 20 20 64 62 2d 3e 78 54 72 61 63 65 28 53      db->xTrace(S
b5e0: 51 4c 49 54 45 5f 54 52 41 43 45 5f 52 4f 57 2c  QLITE_TRACE_ROW,
b5f0: 20 64 62 2d 3e 70 54 72 61 63 65 41 72 67 2c 20   db->pTraceArg, 
b600: 70 2c 20 30 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  p, 0);.  }..  /*
b610: 20 52 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 52   Return SQLITE_R
b620: 4f 57 0a 20 20 2a 2f 0a 20 20 70 2d 3e 70 63 20  OW.  */.  p->pc 
b630: 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f  = (int)(pOp - aO
b640: 70 29 20 2b 20 31 3b 0a 20 20 72 63 20 3d 20 53  p) + 1;.  rc = S
b650: 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20 67 6f 74  QLITE_ROW;.  got
b660: 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d  o vdbe_return;.}
b670: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6e  ../* Opcode: Con
b680: 63 61 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  cat P1 P2 P3 * *
b690: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
b6a0: 50 33 5d 3d 72 5b 50 32 5d 2b 72 5b 50 31 5d 0a  P3]=r[P2]+r[P1].
b6b0: 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 74 65  **.** Add the te
b6c0: 78 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  xt in register P
b6d0: 31 20 6f 6e 74 6f 20 74 68 65 20 65 6e 64 20 6f  1 onto the end o
b6e0: 66 20 74 68 65 20 74 65 78 74 20 69 6e 0a 2a 2a  f the text in.**
b6f0: 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64   register P2 and
b700: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
b710: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
b720: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 74  ..** If either t
b730: 68 65 20 50 31 20 6f 72 20 50 32 20 74 65 78 74  he P1 or P2 text
b740: 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 73   are NULL then s
b750: 74 6f 72 65 20 4e 55 4c 4c 20 69 6e 20 50 33 2e  tore NULL in P3.
b760: 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20 3d 20 50 32  .**.**   P3 = P2
b770: 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20   || P1.**.** It 
b780: 69 73 20 69 6c 6c 65 67 61 6c 20 66 6f 72 20 50  is illegal for P
b790: 31 20 61 6e 64 20 50 33 20 74 6f 20 62 65 20 74  1 and P3 to be t
b7a0: 68 65 20 73 61 6d 65 20 72 65 67 69 73 74 65 72  he same register
b7b0: 2e 20 53 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20  . Sometimes,.** 
b7c0: 69 66 20 50 33 20 69 73 20 74 68 65 20 73 61 6d  if P3 is the sam
b7d0: 65 20 72 65 67 69 73 74 65 72 20 61 73 20 50 32  e register as P2
b7e0: 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  , the implementa
b7f0: 74 69 6f 6e 20 69 73 20 61 62 6c 65 0a 2a 2a 20  tion is able.** 
b800: 74 6f 20 61 76 6f 69 64 20 61 20 6d 65 6d 63 70  to avoid a memcp
b810: 79 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  y()..*/.case OP_
b820: 43 6f 6e 63 61 74 3a 20 7b 20 20 20 20 20 20 20  Concat: {       
b830: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
b840: 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e 31 2c 20 69  K_CONCAT, in1, i
b850: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36  n2, out3 */.  i6
b860: 34 20 6e 42 79 74 65 3b 0a 0a 20 20 70 49 6e 31  4 nByte;..  pIn1
b870: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
b880: 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  ];.  pIn2 = &aMe
b890: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f  m[pOp->p2];.  pO
b8a0: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
b8b0: 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p3];.  assert( p
b8c0: 49 6e 31 21 3d 70 4f 75 74 20 29 3b 0a 20 20 69  In1!=pOut );.  i
b8d0: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
b8e0: 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26  | pIn2->flags) &
b8f0: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
b900: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
b910: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
b920: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69    break;.  }.  i
b930: 66 28 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49  f( ExpandBlob(pI
b940: 6e 31 29 20 7c 7c 20 45 78 70 61 6e 64 42 6c 6f  n1) || ExpandBlo
b950: 62 28 70 49 6e 32 29 20 29 20 67 6f 74 6f 20 6e  b(pIn2) ) goto n
b960: 6f 5f 6d 65 6d 3b 0a 20 20 53 74 72 69 6e 67 69  o_mem;.  Stringi
b970: 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e  fy(pIn1, encodin
b980: 67 29 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28  g);.  Stringify(
b990: 70 49 6e 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pIn2, encoding);
b9a0: 0a 20 20 6e 42 79 74 65 20 3d 20 70 49 6e 31 2d  .  nByte = pIn1-
b9b0: 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20  >n + pIn2->n;.  
b9c0: 69 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c  if( nByte>db->aL
b9d0: 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
b9e0: 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
b9f0: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
ba00: 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33   }.  if( sqlite3
ba10: 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74  VdbeMemGrow(pOut
ba20: 2c 20 28 69 6e 74 29 6e 42 79 74 65 2b 32 2c 20  , (int)nByte+2, 
ba30: 70 4f 75 74 3d 3d 70 49 6e 32 29 20 29 7b 0a 20  pOut==pIn2) ){. 
ba40: 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
ba50: 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70 65    }.  MemSetType
ba60: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 53  Flag(pOut, MEM_S
ba70: 74 72 29 3b 0a 20 20 69 66 28 20 70 4f 75 74 21  tr);.  if( pOut!
ba80: 3d 70 49 6e 32 20 29 7b 0a 20 20 20 20 6d 65 6d  =pIn2 ){.    mem
ba90: 63 70 79 28 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e  cpy(pOut->z, pIn
baa0: 32 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a  2->z, pIn2->n);.
bab0: 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70 4f    }.  memcpy(&pO
bac0: 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20  ut->z[pIn2->n], 
bad0: 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e  pIn1->z, pIn1->n
bae0: 29 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79  );.  pOut->z[nBy
baf0: 74 65 5d 3d 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a  te]=0;.  pOut->z
bb00: 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a 20  [nByte+1] = 0;. 
bb10: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20   pOut->flags |= 
bb20: 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74  MEM_Term;.  pOut
bb30: 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65  ->n = (int)nByte
bb40: 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  ;.  pOut->enc = 
bb50: 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41  encoding;.  UPDA
bb60: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
bb70: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
bb80: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64  }../* Opcode: Ad
bb90: 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
bba0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
bbb0: 5d 3d 72 5b 50 31 5d 2b 72 5b 50 32 5d 0a 2a 2a  ]=r[P1]+r[P2].**
bbc0: 0a 2a 2a 20 41 64 64 20 74 68 65 20 76 61 6c 75  .** Add the valu
bbd0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
bbe0: 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e   to the value in
bbf0: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20   register P2.** 
bc00: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
bc10: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
bc20: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
bc30: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
bc40: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
bc50: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
bc60: 65 3a 20 4d 75 6c 74 69 70 6c 79 20 50 31 20 50  e: Multiply P1 P
bc70: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
bc80: 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 31  psis: r[P3]=r[P1
bc90: 5d 2a 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 0a 2a 2a  ]*r[P2].**.**.**
bca0: 20 4d 75 6c 74 69 70 6c 79 20 74 68 65 20 76 61   Multiply the va
bcb0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
bcc0: 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65 20  P1 by the value 
bcd0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
bce0: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
bcf0: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
bd00: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
bd10: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
bd20: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
bd30: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
bd40: 6f 64 65 3a 20 53 75 62 74 72 61 63 74 20 50 31  ode: Subtract P1
bd50: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
bd60: 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b  nopsis: r[P3]=r[
bd70: 50 32 5d 2d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  P2]-r[P1].**.** 
bd80: 53 75 62 74 72 61 63 74 20 74 68 65 20 76 61 6c  Subtract the val
bd90: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
bda0: 31 20 66 72 6f 6d 20 74 68 65 20 76 61 6c 75 65  1 from the value
bdb0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a   in register P2.
bdc0: 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  ** and store the
bdd0: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
bde0: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
bdf0: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
be00: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
be10: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
be20: 63 6f 64 65 3a 20 44 69 76 69 64 65 20 50 31 20  code: Divide P1 
be30: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
be40: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50  opsis: r[P3]=r[P
be50: 32 5d 2f 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 44  2]/r[P1].**.** D
be60: 69 76 69 64 65 20 74 68 65 20 76 61 6c 75 65 20  ivide the value 
be70: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 62  in register P1 b
be80: 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  y the value in r
be90: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e  egister P2.** an
bea0: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
beb0: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
bec0: 33 20 28 50 33 3d 50 32 2f 50 31 29 2e 20 49 66  3 (P3=P2/P1). If
bed0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 0a 2a   the value in .*
bee0: 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  * register P1 is
bef0: 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20   zero, then the 
bf00: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20  result is NULL. 
bf10: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
bf20: 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65  is .** NULL, the
bf30: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
bf40: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .*/./* Opcode: R
bf50: 65 6d 61 69 6e 64 65 72 20 50 31 20 50 32 20 50  emainder P1 P2 P
bf60: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
bf70: 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 25 72  s: r[P3]=r[P2]%r
bf80: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75  [P1].**.** Compu
bf90: 74 65 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72  te the remainder
bfa0: 20 61 66 74 65 72 20 69 6e 74 65 67 65 72 20 72   after integer r
bfb0: 65 67 69 73 74 65 72 20 50 32 20 69 73 20 64 69  egister P2 is di
bfc0: 76 69 64 65 64 20 62 79 20 0a 2a 2a 20 72 65 67  vided by .** reg
bfd0: 69 73 74 65 72 20 50 31 20 61 6e 64 20 73 74 6f  ister P1 and sto
bfe0: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
bff0: 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 0a 2a   register P3. .*
c000: 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  * If the value i
c010: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
c020: 20 7a 65 72 6f 20 74 68 65 20 72 65 73 75 6c 74   zero the result
c030: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20   is NULL..** If 
c040: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
c050: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
c060: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  lt is NULL..*/.c
c070: 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20  ase OP_Add:     
c080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c090: 20 73 61 6d 65 20 61 73 20 54 4b 5f 50 4c 55 53   same as TK_PLUS
c0a0: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
c0b0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 75 62 74   */.case OP_Subt
c0c0: 72 61 63 74 3a 20 20 20 20 20 20 20 20 20 20 20  ract:           
c0d0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
c0e0: 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c 20 69 6e 32  _MINUS, in1, in2
c0f0: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
c100: 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 20  P_Multiply:     
c110: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
c120: 20 61 73 20 54 4b 5f 53 54 41 52 2c 20 69 6e 31   as TK_STAR, in1
c130: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
c140: 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 20  ase OP_Divide:  
c150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c160: 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 4c 41 53   same as TK_SLAS
c170: 48 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  H, in1, in2, out
c180: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6d  3 */.case OP_Rem
c190: 61 69 6e 64 65 72 3a 20 7b 20 20 20 20 20 20 20  ainder: {       
c1a0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
c1b0: 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c  K_REM, in1, in2,
c1c0: 20 6f 75 74 33 20 2a 2f 0a 20 20 63 68 61 72 20   out3 */.  char 
c1d0: 62 49 6e 74 69 6e 74 3b 20 20 20 2f 2a 20 53 74  bIntint;   /* St
c1e0: 61 72 74 65 64 20 6f 75 74 20 61 73 20 74 77 6f  arted out as two
c1f0: 20 69 6e 74 65 67 65 72 20 6f 70 65 72 61 6e 64   integer operand
c200: 73 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73  s */.  u16 flags
c210: 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d 62 69 6e  ;      /* Combin
c220: 65 64 20 4d 45 4d 5f 2a 20 66 6c 61 67 73 20 66  ed MEM_* flags f
c230: 72 6f 6d 20 62 6f 74 68 20 69 6e 70 75 74 73 20  rom both inputs 
c240: 2a 2f 0a 20 20 75 31 36 20 74 79 70 65 31 3b 20  */.  u16 type1; 
c250: 20 20 20 20 20 2f 2a 20 4e 75 6d 65 72 69 63 20       /* Numeric 
c260: 74 79 70 65 20 6f 66 20 6c 65 66 74 20 6f 70 65  type of left ope
c270: 72 61 6e 64 20 2a 2f 0a 20 20 75 31 36 20 74 79  rand */.  u16 ty
c280: 70 65 32 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  pe2;      /* Num
c290: 65 72 69 63 20 74 79 70 65 20 6f 66 20 72 69 67  eric type of rig
c2a0: 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ht operand */.  
c2b0: 69 36 34 20 69 41 3b 20 20 20 20 20 20 20 20 20  i64 iA;         
c2c0: 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65  /* Integer value
c2d0: 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64   of left operand
c2e0: 20 2a 2f 0a 20 20 69 36 34 20 69 42 3b 20 20 20   */.  i64 iB;   
c2f0: 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72        /* Integer
c300: 20 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20   value of right 
c310: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75  operand */.  dou
c320: 62 6c 65 20 72 41 3b 20 20 20 20 20 20 2f 2a 20  ble rA;      /* 
c330: 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 6c 65  Real value of le
c340: 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ft operand */.  
c350: 64 6f 75 62 6c 65 20 72 42 3b 20 20 20 20 20 20  double rB;      
c360: 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66  /* Real value of
c370: 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a   right operand *
c380: 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  /..  pIn1 = &aMe
c390: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 74 79  m[pOp->p1];.  ty
c3a0: 70 65 31 20 3d 20 6e 75 6d 65 72 69 63 54 79 70  pe1 = numericTyp
c3b0: 65 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20  e(pIn1);.  pIn2 
c3c0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
c3d0: 3b 0a 20 20 74 79 70 65 32 20 3d 20 6e 75 6d 65  ;.  type2 = nume
c3e0: 72 69 63 54 79 70 65 28 70 49 6e 32 29 3b 0a 20  ricType(pIn2);. 
c3f0: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
c400: 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 20  p->p3];.  flags 
c410: 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20  = pIn1->flags | 
c420: 70 49 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69  pIn2->flags;.  i
c430: 66 28 20 28 74 79 70 65 31 20 26 20 74 79 70 65  f( (type1 & type
c440: 32 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  2 & MEM_Int)!=0 
c450: 29 7b 0a 20 20 20 20 69 41 20 3d 20 70 49 6e 31  ){.    iA = pIn1
c460: 2d 3e 75 2e 69 3b 0a 20 20 20 20 69 42 20 3d 20  ->u.i;.    iB = 
c470: 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 62  pIn2->u.i;.    b
c480: 49 6e 74 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20  Intint = 1;.    
c490: 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63  switch( pOp->opc
c4a0: 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73  ode ){.      cas
c4b0: 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20  e OP_Add:       
c4c0: 69 66 28 20 73 71 6c 69 74 65 33 41 64 64 49 6e  if( sqlite3AddIn
c4d0: 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f  t64(&iB,iA) ) go
c4e0: 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65  to fp_math;  bre
c4f0: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
c500: 50 5f 53 75 62 74 72 61 63 74 3a 20 20 69 66 28  P_Subtract:  if(
c510: 20 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34   sqlite3SubInt64
c520: 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20  (&iB,iA) ) goto 
c530: 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b  fp_math;  break;
c540: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d  .      case OP_M
c550: 75 6c 74 69 70 6c 79 3a 20 20 69 66 28 20 73 71  ultiply:  if( sq
c560: 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 26 69  lite3MulInt64(&i
c570: 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f  B,iA) ) goto fp_
c580: 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20  math;  break;.  
c590: 20 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69      case OP_Divi
c5a0: 64 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66  de: {.        if
c5b0: 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61  ( iA==0 ) goto a
c5c0: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
c5d0: 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20  _is_null;.      
c5e0: 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 26 26 20    if( iA==-1 && 
c5f0: 69 42 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e 54  iB==SMALLEST_INT
c600: 36 34 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74  64 ) goto fp_mat
c610: 68 3b 0a 20 20 20 20 20 20 20 20 69 42 20 2f 3d  h;.        iB /=
c620: 20 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65   iA;.        bre
c630: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
c640: 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20    default: {.   
c650: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29       if( iA==0 )
c660: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
c670: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
c680: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
c690: 3d 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20  =-1 ) iA = 1;.  
c6a0: 20 20 20 20 20 20 69 42 20 25 3d 20 69 41 3b 0a        iB %= iA;.
c6b0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
c6c0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
c6d0: 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 42 3b   pOut->u.i = iB;
c6e0: 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
c6f0: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
c700: 74 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  t);.  }else if( 
c710: 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  (flags & MEM_Nul
c720: 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74  l)!=0 ){.    got
c730: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
c740: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 7d  ult_is_null;.  }
c750: 65 6c 73 65 7b 0a 20 20 20 20 62 49 6e 74 69 6e  else{.    bIntin
c760: 74 20 3d 20 30 3b 0a 66 70 5f 6d 61 74 68 3a 0a  t = 0;.fp_math:.
c770: 20 20 20 20 72 41 20 3d 20 73 71 6c 69 74 65 33      rA = sqlite3
c780: 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49  VdbeRealValue(pI
c790: 6e 31 29 3b 0a 20 20 20 20 72 42 20 3d 20 73 71  n1);.    rB = sq
c7a0: 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c  lite3VdbeRealVal
c7b0: 75 65 28 70 49 6e 32 29 3b 0a 20 20 20 20 73 77  ue(pIn2);.    sw
c7c0: 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  itch( pOp->opcod
c7d0: 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20  e ){.      case 
c7e0: 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20  OP_Add:         
c7f0: 72 42 20 2b 3d 20 72 41 3b 20 20 20 20 20 20 20  rB += rA;       
c800: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
c810: 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20  e OP_Subtract:  
c820: 20 20 72 42 20 2d 3d 20 72 41 3b 20 20 20 20 20    rB -= rA;     
c830: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
c840: 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a  ase OP_Multiply:
c850: 20 20 20 20 72 42 20 2a 3d 20 72 41 3b 20 20 20      rB *= rA;   
c860: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
c870: 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a   case OP_Divide:
c880: 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 28 64   {.        /* (d
c890: 6f 75 62 6c 65 29 30 20 49 6e 20 63 61 73 65 20  ouble)0 In case 
c8a0: 6f 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  of SQLITE_OMIT_F
c8b0: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e  LOATING_POINT...
c8c0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
c8d0: 72 41 3d 3d 28 64 6f 75 62 6c 65 29 30 20 29 20  rA==(double)0 ) 
c8e0: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
c8f0: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
c900: 20 20 20 20 20 20 20 20 72 42 20 2f 3d 20 72 41          rB /= rA
c910: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
c920: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64  .      }.      d
c930: 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20  efault: {.      
c940: 20 20 69 41 20 3d 20 28 69 36 34 29 72 41 3b 0a    iA = (i64)rA;.
c950: 20 20 20 20 20 20 20 20 69 42 20 3d 20 28 69 36          iB = (i6
c960: 34 29 72 42 3b 0a 20 20 20 20 20 20 20 20 69 66  4)rB;.        if
c970: 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61  ( iA==0 ) goto a
c980: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
c990: 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20  _is_null;.      
c9a0: 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29 20 69    if( iA==-1 ) i
c9b0: 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 72  A = 1;.        r
c9c0: 42 20 3d 20 28 64 6f 75 62 6c 65 29 28 69 42 20  B = (double)(iB 
c9d0: 25 20 69 41 29 3b 0a 20 20 20 20 20 20 20 20 62  % iA);.        b
c9e0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
c9f0: 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54    }.#ifdef SQLIT
ca00: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
ca10: 50 4f 49 4e 54 0a 20 20 20 20 70 4f 75 74 2d 3e  POINT.    pOut->
ca20: 75 2e 69 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65  u.i = rB;.    Me
ca30: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
ca40: 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 23 65 6c  t, MEM_Int);.#el
ca50: 73 65 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  se.    if( sqlit
ca60: 65 33 49 73 4e 61 4e 28 72 42 29 20 29 7b 0a 20  e3IsNaN(rB) ){. 
ca70: 20 20 20 20 20 67 6f 74 6f 20 61 72 69 74 68 6d       goto arithm
ca80: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
ca90: 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  ull;.    }.    p
caa0: 4f 75 74 2d 3e 75 2e 72 20 3d 20 72 42 3b 0a 20  Out->u.r = rB;. 
cab0: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
cac0: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 52 65 61 6c  g(pOut, MEM_Real
cad0: 29 3b 0a 20 20 20 20 69 66 28 20 28 28 74 79 70  );.    if( ((typ
cae0: 65 31 7c 74 79 70 65 32 29 26 4d 45 4d 5f 52 65  e1|type2)&MEM_Re
caf0: 61 6c 29 3d 3d 30 20 26 26 20 21 62 49 6e 74 69  al)==0 && !bInti
cb00: 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  nt ){.      sqli
cb10: 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66  te3VdbeIntegerAf
cb20: 66 69 6e 69 74 79 28 70 4f 75 74 29 3b 0a 20 20  finity(pOut);.  
cb30: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20    }.#endif.  }. 
cb40: 20 62 72 65 61 6b 3b 0a 0a 61 72 69 74 68 6d 65   break;..arithme
cb50: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
cb60: 6c 6c 3a 0a 20 20 73 71 6c 69 74 65 33 56 64 62  ll:.  sqlite3Vdb
cb70: 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
cb80: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
cb90: 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 6c 53 65  * Opcode: CollSe
cba0: 71 20 50 31 20 2a 20 2a 20 50 34 0a 2a 2a 0a 2a  q P1 * * P4.**.*
cbb0: 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
cbc0: 72 20 74 6f 20 61 20 43 6f 6c 6c 53 65 71 20 6f  r to a CollSeq o
cbd0: 62 6a 65 63 74 2e 20 49 66 20 74 68 65 20 6e 65  bject. If the ne
cbe0: 78 74 20 63 61 6c 6c 20 74 6f 20 61 20 75 73 65  xt call to a use
cbf0: 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6f 72  r function.** or
cc00: 20 61 67 67 72 65 67 61 74 65 20 63 61 6c 6c 73   aggregate calls
cc10: 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43   sqlite3GetFuncC
cc20: 6f 6c 6c 53 65 71 28 29 2c 20 74 68 69 73 20 63  ollSeq(), this c
cc30: 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
cc40: 65 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 72 65 74  e will.** be ret
cc50: 75 72 6e 65 64 2e 20 54 68 69 73 20 69 73 20 75  urned. This is u
cc60: 73 65 64 20 62 79 20 74 68 65 20 62 75 69 6c 74  sed by the built
cc70: 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d 61 78 28 29  -in min(), max()
cc80: 20 61 6e 64 20 6e 75 6c 6c 69 66 28 29 0a 2a 2a   and nullif().**
cc90: 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a   functions..**.*
cca0: 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 74 20 7a  * If P1 is not z
ccb0: 65 72 6f 2c 20 74 68 65 6e 20 69 74 20 69 73 20  ero, then it is 
ccc0: 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  a register that 
ccd0: 61 20 73 75 62 73 65 71 75 65 6e 74 20 6d 69 6e  a subsequent min
cce0: 28 29 20 6f 72 0a 2a 2a 20 6d 61 78 28 29 20 61  () or.** max() a
ccf0: 67 67 72 65 67 61 74 65 20 77 69 6c 6c 20 73 65  ggregate will se
cd00: 74 20 74 6f 20 31 20 69 66 20 74 68 65 20 63 75  t to 1 if the cu
cd10: 72 72 65 6e 74 20 72 6f 77 20 69 73 20 6e 6f 74  rrent row is not
cd20: 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20 6f 72 0a   the minimum or.
cd30: 2a 2a 20 6d 61 78 69 6d 75 6d 2e 20 20 54 68 65  ** maximum.  The
cd40: 20 50 31 20 72 65 67 69 73 74 65 72 20 69 73 20   P1 register is 
cd50: 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 30  initialized to 0
cd60: 20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75 63   by this instruc
cd70: 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  tion..**.** The 
cd80: 69 6e 74 65 72 66 61 63 65 20 75 73 65 64 20 62  interface used b
cd90: 79 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  y the implementa
cda0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 61 66 6f 72  tion of the afor
cdb0: 65 6d 65 6e 74 69 6f 6e 65 64 20 66 75 6e 63 74  ementioned funct
cdc0: 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65 74 72 69  ions.** to retri
cdd0: 65 76 65 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f  eve the collatio
cde0: 6e 20 73 65 71 75 65 6e 63 65 20 73 65 74 20 62  n sequence set b
cdf0: 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73  y this opcode is
ce00: 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 0a 2a   not available.*
ce10: 2a 20 70 75 62 6c 69 63 6c 79 2e 20 20 4f 6e 6c  * publicly.  Onl
ce20: 79 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74  y built-in funct
ce30: 69 6f 6e 73 20 68 61 76 65 20 61 63 63 65 73 73  ions have access
ce40: 20 74 6f 20 74 68 69 73 20 66 65 61 74 75 72 65   to this feature
ce50: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c  ..*/.case OP_Col
ce60: 6c 53 65 71 3a 20 7b 0a 20 20 61 73 73 65 72 74  lSeq: {.  assert
ce70: 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
ce80: 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 69  4_COLLSEQ );.  i
ce90: 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20  f( pOp->p1 ){.  
cea0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
ceb0: 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70  SetInt64(&aMem[p
cec0: 4f 70 2d 3e 70 31 5d 2c 20 30 29 3b 0a 20 20 7d  Op->p1], 0);.  }
ced0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
cee0: 4f 70 63 6f 64 65 3a 20 42 69 74 41 6e 64 20 50  Opcode: BitAnd P
cef0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
cf00: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72  ynopsis: r[P3]=r
cf10: 5b 50 31 5d 26 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  [P1]&r[P2].**.**
cf20: 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69   Take the bit-wi
cf30: 73 65 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61  se AND of the va
cf40: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
cf50: 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a   P1 and P2 and.*
cf60: 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  * store the resu
cf70: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
cf80: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
cf90: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
cfa0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
cfb0: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
cfc0: 20 42 69 74 4f 72 20 50 31 20 50 32 20 50 33 20   BitOr P1 P2 P3 
cfd0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
cfe0: 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 7c 72 5b 50   r[P3]=r[P1]|r[P
cff0: 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68  2].**.** Take th
d000: 65 20 62 69 74 2d 77 69 73 65 20 4f 52 20 6f 66  e bit-wise OR of
d010: 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72   the values in r
d020: 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50  egister P1 and P
d030: 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74  2 and.** store t
d040: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
d050: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
d060: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
d070: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
d080: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
d090: 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 4c 65 66  Opcode: ShiftLef
d0a0: 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
d0b0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
d0c0: 5d 3d 72 5b 50 32 5d 3c 3c 72 5b 50 31 5d 0a 2a  ]=r[P2]<<r[P1].*
d0d0: 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69  *.** Shift the i
d0e0: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20  nteger value in 
d0f0: 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 74  register P2 to t
d100: 68 65 20 6c 65 66 74 20 62 79 20 74 68 65 0a 2a  he left by the.*
d110: 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73  * number of bits
d120: 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68   specified by th
d130: 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67  e integer in reg
d140: 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f  ister P1..** Sto
d150: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
d160: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
d170: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
d180: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
d190: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
d1a0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66  ./* Opcode: Shif
d1b0: 74 52 69 67 68 74 20 50 31 20 50 32 20 50 33 20  tRight P1 P2 P3 
d1c0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
d1d0: 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3e 3e 72 5b   r[P3]=r[P2]>>r[
d1e0: 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20  P1].**.** Shift 
d1f0: 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  the integer valu
d200: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
d210: 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 62 79   to the right by
d220: 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f   the.** number o
d230: 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65 64  f bits specified
d240: 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72 20   by the integer 
d250: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
d260: 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65 73  ** Store the res
d270: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
d280: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
d290: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
d2a0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
d2b0: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42  LL..*/.case OP_B
d2c0: 69 74 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20  itAnd:          
d2d0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
d2e0: 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20 69 6e 31  s TK_BITAND, in1
d2f0: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
d300: 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20  ase OP_BitOr:   
d310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d320: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54  * same as TK_BIT
d330: 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  OR, in1, in2, ou
d340: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68  t3 */.case OP_Sh
d350: 69 66 74 4c 65 66 74 3a 20 20 20 20 20 20 20 20  iftLeft:        
d360: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
d370: 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69 6e 31 2c   TK_LSHIFT, in1,
d380: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
d390: 73 65 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74  se OP_ShiftRight
d3a0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
d3b0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 53 48 49   same as TK_RSHI
d3c0: 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  FT, in1, in2, ou
d3d0: 74 33 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 0a  t3 */.  i64 iA;.
d3e0: 20 20 75 36 34 20 75 41 3b 0a 20 20 69 36 34 20    u64 uA;.  i64 
d3f0: 69 42 3b 0a 20 20 75 38 20 6f 70 3b 0a 0a 20 20  iB;.  u8 op;..  
d400: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
d410: 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20  ->p1];.  pIn2 = 
d420: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
d430: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
d440: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28  Op->p3];.  if( (
d450: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49  pIn1->flags | pI
d460: 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d  n2->flags) & MEM
d470: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c  _Null ){.    sql
d480: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
d490: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72  ll(pOut);.    br
d4a0: 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 41 20 3d 20  eak;.  }.  iA = 
d4b0: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
d4c0: 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 69 42 20  lue(pIn2);.  iB 
d4d0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
d4e0: 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 6f  Value(pIn1);.  o
d4f0: 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b  p = pOp->opcode;
d500: 0a 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69  .  if( op==OP_Bi
d510: 74 41 6e 64 20 29 7b 0a 20 20 20 20 69 41 20 26  tAnd ){.    iA &
d520: 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66  = iB;.  }else if
d530: 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 4f 72 20 29  ( op==OP_BitOr )
d540: 7b 0a 20 20 20 20 69 41 20 7c 3d 20 69 42 3b 0a  {.    iA |= iB;.
d550: 20 20 7d 65 6c 73 65 20 69 66 28 20 69 42 21 3d    }else if( iB!=
d560: 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
d570: 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 52 69 67   op==OP_ShiftRig
d580: 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69  ht || op==OP_Shi
d590: 66 74 4c 65 66 74 20 29 3b 0a 0a 20 20 20 20 2f  ftLeft );..    /
d5a0: 2a 20 49 66 20 73 68 69 66 74 69 6e 67 20 62 79  * If shifting by
d5b0: 20 61 20 6e 65 67 61 74 69 76 65 20 61 6d 6f 75   a negative amou
d5c0: 6e 74 2c 20 73 68 69 66 74 20 69 6e 20 74 68 65  nt, shift in the
d5d0: 20 6f 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e   other direction
d5e0: 20 2a 2f 0a 20 20 20 20 69 66 28 20 69 42 3c 30   */.    if( iB<0
d5f0: 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
d600: 28 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3d  ( OP_ShiftRight=
d610: 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 2b 31 20  =OP_ShiftLeft+1 
d620: 29 3b 0a 20 20 20 20 20 20 6f 70 20 3d 20 32 2a  );.      op = 2*
d630: 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 2b 20 31  OP_ShiftLeft + 1
d640: 20 2d 20 6f 70 3b 0a 20 20 20 20 20 20 69 42 20   - op;.      iB 
d650: 3d 20 69 42 3e 28 2d 36 34 29 20 3f 20 2d 69 42  = iB>(-64) ? -iB
d660: 20 3a 20 36 34 3b 0a 20 20 20 20 7d 0a 0a 20 20   : 64;.    }..  
d670: 20 20 69 66 28 20 69 42 3e 3d 36 34 20 29 7b 0a    if( iB>=64 ){.
d680: 20 20 20 20 20 20 69 41 20 3d 20 28 69 41 3e 3d        iA = (iA>=
d690: 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66  0 || op==OP_Shif
d6a0: 74 4c 65 66 74 29 20 3f 20 30 20 3a 20 2d 31 3b  tLeft) ? 0 : -1;
d6b0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
d6c0: 20 20 6d 65 6d 63 70 79 28 26 75 41 2c 20 26 69    memcpy(&uA, &i
d6d0: 41 2c 20 73 69 7a 65 6f 66 28 75 41 29 29 3b 0a  A, sizeof(uA));.
d6e0: 20 20 20 20 20 20 69 66 28 20 6f 70 3d 3d 4f 50        if( op==OP
d6f0: 5f 53 68 69 66 74 4c 65 66 74 20 29 7b 0a 20 20  _ShiftLeft ){.  
d700: 20 20 20 20 20 20 75 41 20 3c 3c 3d 20 69 42 3b        uA <<= iB;
d710: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
d720: 20 20 20 20 20 20 75 41 20 3e 3e 3d 20 69 42 3b        uA >>= iB;
d730: 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 69 67 6e  .        /* Sign
d740: 2d 65 78 74 65 6e 64 20 6f 6e 20 61 20 72 69 67  -extend on a rig
d750: 68 74 20 73 68 69 66 74 20 6f 66 20 61 20 6e 65  ht shift of a ne
d760: 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20 2a 2f  gative number */
d770: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3c  .        if( iA<
d780: 30 20 29 20 75 41 20 7c 3d 20 28 28 28 28 75 36  0 ) uA |= ((((u6
d790: 34 29 30 78 66 66 66 66 66 66 66 66 29 3c 3c 33  4)0xffffffff)<<3
d7a0: 32 29 7c 30 78 66 66 66 66 66 66 66 66 29 20 3c  2)|0xffffffff) <
d7b0: 3c 20 28 36 34 2d 69 42 29 3b 0a 20 20 20 20 20  < (64-iB);.     
d7c0: 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28   }.      memcpy(
d7d0: 26 69 41 2c 20 26 75 41 2c 20 73 69 7a 65 6f 66  &iA, &uA, sizeof
d7e0: 28 69 41 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  (iA));.    }.  }
d7f0: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69  .  pOut->u.i = i
d800: 41 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  A;.  MemSetTypeF
d810: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
d820: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
d830: 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 49 6d  /* Opcode: AddIm
d840: 6d 20 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  m  P1 P2 * * *.*
d850: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31  * Synopsis: r[P1
d860: 5d 3d 72 5b 50 31 5d 2b 50 32 0a 2a 2a 20 0a 2a  ]=r[P1]+P2.** .*
d870: 2a 20 41 64 64 20 74 68 65 20 63 6f 6e 73 74 61  * Add the consta
d880: 6e 74 20 50 32 20 74 6f 20 74 68 65 20 76 61 6c  nt P2 to the val
d890: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
d8a0: 31 2e 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74  1..** The result
d8b0: 20 69 73 20 61 6c 77 61 79 73 20 61 6e 20 69 6e   is always an in
d8c0: 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20  teger..**.** To 
d8d0: 66 6f 72 63 65 20 61 6e 79 20 72 65 67 69 73 74  force any regist
d8e0: 65 72 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65  er to be an inte
d8f0: 67 65 72 2c 20 6a 75 73 74 20 61 64 64 20 30 2e  ger, just add 0.
d900: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 49  .*/.case OP_AddI
d910: 6d 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  mm: {           
d920: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e   /* in1 */.  pIn
d930: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
d940: 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  1];.  memAboutTo
d950: 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b  Change(p, pIn1);
d960: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
d970: 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31  mIntegerify(pIn1
d980: 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b  );.  pIn1->u.i +
d990: 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72 65  = pOp->p2;.  bre
d9a0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
d9b0: 3a 20 4d 75 73 74 42 65 49 6e 74 20 50 31 20 50  : MustBeInt P1 P
d9c0: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 46  2 * * *.** .** F
d9d0: 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69  orce the value i
d9e0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  n register P1 to
d9f0: 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2e 20   be an integer. 
da00: 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a   If the value.**
da10: 20 69 6e 20 50 31 20 69 73 20 6e 6f 74 20 61 6e   in P1 is not an
da20: 20 69 6e 74 65 67 65 72 20 61 6e 64 20 63 61 6e   integer and can
da30: 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64  not be converted
da40: 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72   into an integer
da50: 0a 2a 2a 20 77 69 74 68 6f 75 74 20 64 61 74 61  .** without data
da60: 20 6c 6f 73 73 2c 20 74 68 65 6e 20 6a 75 6d 70   loss, then jump
da70: 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
da80: 50 32 2c 20 6f 72 20 69 66 20 50 32 3d 3d 30 0a  P2, or if P2==0.
da90: 2a 2a 20 72 61 69 73 65 20 61 6e 20 53 51 4c 49  ** raise an SQLI
daa0: 54 45 5f 4d 49 53 4d 41 54 43 48 20 65 78 63 65  TE_MISMATCH exce
dab0: 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ption..*/.case O
dac0: 50 5f 4d 75 73 74 42 65 49 6e 74 3a 20 7b 20 20  P_MustBeInt: {  
dad0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
dae0: 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
daf0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
db00: 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  ];.  if( (pIn1->
db10: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
db20: 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70 70 6c 79  ==0 ){.    apply
db30: 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53  Affinity(pIn1, S
db40: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
db50: 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  C, encoding);.  
db60: 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
db70: 6e 28 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d  n((pIn1->flags&M
db80: 45 4d 5f 49 6e 74 29 3d 3d 30 2c 20 32 29 3b 0a  EM_Int)==0, 2);.
db90: 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66      if( (pIn1->f
dba0: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d  lags & MEM_Int)=
dbb0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  =0 ){.      if( 
dbc0: 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20  pOp->p2==0 ){.  
dbd0: 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
dbe0: 45 5f 4d 49 53 4d 41 54 43 48 3b 0a 20 20 20 20  E_MISMATCH;.    
dbf0: 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
dc00: 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
dc10: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
dc20: 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
dc30: 32 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  2;.      }.    }
dc40: 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70  .  }.  MemSetTyp
dc50: 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f  eFlag(pIn1, MEM_
dc60: 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Int);.  break;.}
dc70: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
dc80: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
dc90: 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  OINT./* Opcode: 
dca0: 52 65 61 6c 41 66 66 69 6e 69 74 79 20 50 31 20  RealAffinity P1 
dcb0: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66  * * * *.**.** If
dcc0: 20 72 65 67 69 73 74 65 72 20 50 31 20 68 6f 6c   register P1 hol
dcd0: 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 63 6f  ds an integer co
dce0: 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 72 65  nvert it to a re
dcf0: 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20  al value..**.** 
dd00: 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75  This opcode is u
dd10: 73 65 64 20 77 68 65 6e 20 65 78 74 72 61 63 74  sed when extract
dd20: 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ing information 
dd30: 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74 68  from a column th
dd40: 61 74 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20 61  at.** has REAL a
dd50: 66 66 69 6e 69 74 79 2e 20 20 53 75 63 68 20 63  ffinity.  Such c
dd60: 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61 79  olumn values may
dd70: 20 73 74 69 6c 6c 20 62 65 20 73 74 6f 72 65 64   still be stored
dd80: 20 61 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73 2c   as.** integers,
dd90: 20 66 6f 72 20 73 70 61 63 65 20 65 66 66 69 63   for space effic
dda0: 69 65 6e 63 79 2c 20 62 75 74 20 61 66 74 65 72  iency, but after
ddb0: 20 65 78 74 72 61 63 74 69 6f 6e 20 77 65 20 77   extraction we w
ddc0: 61 6e 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20 68  ant them.** to h
ddd0: 61 76 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c 20  ave only a real 
dde0: 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  value..*/.case O
ddf0: 50 5f 52 65 61 6c 41 66 66 69 6e 69 74 79 3a 20  P_RealAffinity: 
de00: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
de10: 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70     /* in1 */.  p
de20: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
de30: 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31  >p1];.  if( pIn1
de40: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
de50: 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  t ){.    sqlite3
de60: 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28 70  VdbeMemRealify(p
de70: 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  In1);.  }.  brea
de80: 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66  k;.}.#endif..#if
de90: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
dea0: 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  _CAST./* Opcode:
deb0: 20 43 61 73 74 20 50 31 20 50 32 20 2a 20 2a 20   Cast P1 P2 * * 
dec0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61  *.** Synopsis: a
ded0: 66 66 69 6e 69 74 79 28 72 5b 50 31 5d 29 0a 2a  ffinity(r[P1]).*
dee0: 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76  *.** Force the v
def0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
df00: 20 50 31 20 74 6f 20 62 65 20 74 68 65 20 74 79   P1 to be the ty
df10: 70 65 20 64 65 66 69 6e 65 64 20 62 79 20 50 32  pe defined by P2
df20: 2e 0a 2a 2a 20 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a  ..** .** <ul>.**
df30: 20 3c 6c 69 3e 20 50 32 3d 3d 27 41 27 20 26 72   <li> P2=='A' &r
df40: 61 72 72 3b 20 42 4c 4f 42 0a 2a 2a 20 3c 6c 69  arr; BLOB.** <li
df50: 3e 20 50 32 3d 3d 27 42 27 20 26 72 61 72 72 3b  > P2=='B' &rarr;
df60: 20 54 45 58 54 0a 2a 2a 20 3c 6c 69 3e 20 50 32   TEXT.** <li> P2
df70: 3d 3d 27 43 27 20 26 72 61 72 72 3b 20 4e 55 4d  =='C' &rarr; NUM
df80: 45 52 49 43 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d  ERIC.** <li> P2=
df90: 3d 27 44 27 20 26 72 61 72 72 3b 20 49 4e 54 45  ='D' &rarr; INTE
dfa0: 47 45 52 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d  GER.** <li> P2==
dfb0: 27 45 27 20 26 72 61 72 72 3b 20 52 45 41 4c 0a  'E' &rarr; REAL.
dfc0: 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20 41  ** </ul>.**.** A
dfd0: 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e   NULL value is n
dfe0: 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68  ot changed by th
dff0: 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20  is routine.  It 
e000: 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f  remains NULL..*/
e010: 0a 63 61 73 65 20 4f 50 5f 43 61 73 74 3a 20 7b  .case OP_Cast: {
e020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e030: 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 61 73    /* in1 */.  as
e040: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 53  sert( pOp->p2>=S
e050: 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20 26  QLITE_AFF_BLOB &
e060: 26 20 70 4f 70 2d 3e 70 32 3c 3d 53 51 4c 49 54  & pOp->p2<=SQLIT
e070: 45 5f 41 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20  E_AFF_REAL );.  
e080: 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
e090: 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  2==SQLITE_AFF_TE
e0a0: 58 54 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  XT );.  testcase
e0b0: 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  ( pOp->p2==SQLIT
e0c0: 45 5f 41 46 46 5f 42 4c 4f 42 20 29 3b 0a 20 20  E_AFF_BLOB );.  
e0d0: 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
e0e0: 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  2==SQLITE_AFF_NU
e0f0: 4d 45 52 49 43 20 29 3b 0a 20 20 74 65 73 74 63  MERIC );.  testc
e100: 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51  ase( pOp->p2==SQ
e110: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
e120: 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
e130: 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
e140: 41 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20 70 49  AFF_REAL );.  pI
e150: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
e160: 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p1];.  memAboutT
e170: 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29  oChange(p, pIn1)
e180: 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42  ;.  rc = ExpandB
e190: 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c  lob(pIn1);.  sql
e1a0: 69 74 65 33 56 64 62 65 4d 65 6d 43 61 73 74 28  ite3VdbeMemCast(
e1b0: 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 65  pIn1, pOp->p2, e
e1c0: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44 41  ncoding);.  UPDA
e1d0: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
e1e0: 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 72 63 20  pIn1);.  if( rc 
e1f0: 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
e200: 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65  _to_error;.  bre
e210: 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
e220: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54  SQLITE_OMIT_CAST
e230: 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
e240: 45 71 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Eq P1 P2 P3 P4 P
e250: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49  5.** Synopsis: I
e260: 46 20 72 5b 50 33 5d 3d 3d 72 5b 50 31 5d 0a 2a  F r[P3]==r[P1].*
e270: 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68 65  *.** Compare the
e280: 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
e290: 74 65 72 20 50 31 20 61 6e 64 20 50 33 2e 20 20  ter P1 and P3.  
e2a0: 49 66 20 72 65 67 28 50 33 29 3d 3d 72 65 67 28  If reg(P3)==reg(
e2b0: 50 31 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70  P1) then.** jump
e2c0: 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e 20   to address P2. 
e2d0: 20 4f 72 20 69 66 20 74 68 65 20 53 51 4c 49 54   Or if the SQLIT
e2e0: 45 5f 53 54 4f 52 45 50 32 20 66 6c 61 67 20 69  E_STOREP2 flag i
e2f0: 73 20 73 65 74 20 69 6e 20 50 35 2c 20 74 68 65  s set in P5, the
e300: 6e 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72  n.** store the r
e310: 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69  esult of compari
e320: 73 6f 6e 20 69 6e 20 72 65 67 69 73 74 65 72 20  son in register 
e330: 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51  P2..**.** The SQ
e340: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f  LITE_AFF_MASK po
e350: 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74  rtion of P5 must
e360: 20 62 65 20 61 6e 20 61 66 66 69 6e 69 74 79 20   be an affinity 
e370: 63 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53  character -.** S
e380: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20  QLITE_AFF_TEXT, 
e390: 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47  SQLITE_AFF_INTEG
e3a0: 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ER, and so forth
e3b0: 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 69 73 20  . An attempt is 
e3c0: 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72  made .** to coer
e3d0: 63 65 20 62 6f 74 68 20 69 6e 70 75 74 73 20 61  ce both inputs a
e3e0: 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 69 73  ccording to this
e3f0: 20 61 66 66 69 6e 69 74 79 20 62 65 66 6f 72 65   affinity before
e400: 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73   the.** comparis
e410: 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49 66 20 74  on is made. If t
e420: 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41  he SQLITE_AFF_MA
e430: 53 4b 20 69 73 20 30 78 30 30 2c 20 74 68 65 6e  SK is 0x00, then
e440: 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69   numeric.** affi
e450: 6e 69 74 79 20 69 73 20 75 73 65 64 2e 20 4e 6f  nity is used. No
e460: 74 65 20 74 68 61 74 20 74 68 65 20 61 66 66 69  te that the affi
e470: 6e 69 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73  nity conversions
e480: 20 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62   are stored.** b
e490: 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e 70  ack into the inp
e4a0: 75 74 20 72 65 67 69 73 74 65 72 73 20 50 31 20  ut registers P1 
e4b0: 61 6e 64 20 50 33 2e 20 20 53 6f 20 74 68 69 73  and P3.  So this
e4c0: 20 6f 70 63 6f 64 65 20 63 61 6e 20 63 61 75 73   opcode can caus
e4d0: 65 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e 74 20  e.** persistent 
e4e0: 63 68 61 6e 67 65 73 20 74 6f 20 72 65 67 69 73  changes to regis
e4f0: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 0a  ters P1 and P3..
e500: 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63  **.** Once any c
e510: 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61 76 65 20  onversions have 
e520: 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64  taken place, and
e530: 20 6e 65 69 74 68 65 72 20 76 61 6c 75 65 20 69   neither value i
e540: 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20  s NULL, .** the 
e550: 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61  values are compa
e560: 72 65 64 2e 20 49 66 20 62 6f 74 68 20 76 61 6c  red. If both val
e570: 75 65 73 20 61 72 65 20 62 6c 6f 62 73 20 74 68  ues are blobs th
e580: 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a  en memcmp() is.*
e590: 2a 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d  * used to determ
e5a0: 69 6e 65 20 74 68 65 20 72 65 73 75 6c 74 73 20  ine the results 
e5b0: 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  of the compariso
e5c0: 6e 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75  n.  If both valu
e5d0: 65 73 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c 20  es.** are text, 
e5e0: 74 68 65 6e 20 74 68 65 20 61 70 70 72 6f 70 72  then the appropr
e5f0: 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66  iate collating f
e600: 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65  unction specifie
e610: 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20 75 73  d in.** P4 is us
e620: 65 64 20 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d  ed to do the com
e630: 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 50 34 20  parison.  If P4 
e640: 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64  is not specified
e650: 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28   then.** memcmp(
e660: 29 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d  ) is used to com
e670: 70 61 72 65 20 74 65 78 74 20 73 74 72 69 6e 67  pare text string
e680: 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65  .  If both value
e690: 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63  s are.** numeric
e6a0: 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65 72 69 63  , then a numeric
e6b0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 75   comparison is u
e6c0: 73 65 64 2e 20 49 66 20 74 68 65 20 74 77 6f 20  sed. If the two 
e6d0: 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66  values.** are of
e6e0: 20 64 69 66 66 65 72 65 6e 74 20 74 79 70 65 73   different types
e6f0: 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72 73 20 61  , then numbers a
e700: 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65  re considered le
e710: 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e  ss than.** strin
e720: 67 73 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61  gs and strings a
e730: 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65  re considered le
e740: 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a  ss than blobs..*
e750: 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e  *.** If SQLITE_N
e760: 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69 6e 20  ULLEQ is set in 
e770: 50 35 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  P5 then the resu
e780: 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e  lt of comparison
e790: 20 69 73 20 61 6c 77 61 79 73 20 65 69 74 68 65   is always eithe
e7a0: 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66 61 6c  r.** true or fal
e7b0: 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65 72 20  se and is never 
e7c0: 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20 6f  NULL.  If both o
e7d0: 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c  perands are NULL
e7e0: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
e7f0: 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  .** of compariso
e800: 6e 20 69 73 20 74 72 75 65 2e 20 20 49 66 20 65  n is true.  If e
e810: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
e820: 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72   NULL then the r
e830: 65 73 75 6c 74 20 69 73 20 66 61 6c 73 65 2e 0a  esult is false..
e840: 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20 6f 70  ** If neither op
e850: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68  erand is NULL th
e860: 65 20 72 65 73 75 6c 74 20 69 73 20 74 68 65 20  e result is the 
e870: 73 61 6d 65 20 61 73 20 69 74 20 77 6f 75 6c 64  same as it would
e880: 20 62 65 20 69 66 0a 2a 2a 20 74 68 65 20 53 51   be if.** the SQ
e890: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67  LITE_NULLEQ flag
e8a0: 20 77 65 72 65 20 6f 6d 69 74 74 65 64 20 66 72   were omitted fr
e8b0: 6f 6d 20 50 35 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  om P5..**.** If 
e8c0: 62 6f 74 68 20 53 51 4c 49 54 45 5f 53 54 4f 52  both SQLITE_STOR
e8d0: 45 50 32 20 61 6e 64 20 53 51 4c 49 54 45 5f 4b  EP2 and SQLITE_K
e8e0: 45 45 50 4e 55 4c 4c 20 66 6c 61 67 73 20 61 72  EEPNULL flags ar
e8f0: 65 20 73 65 74 20 74 68 65 6e 20 74 68 65 0a 2a  e set then the.*
e900: 2a 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 5b 50  * content of r[P
e910: 32 5d 20 69 73 20 6f 6e 6c 79 20 63 68 61 6e 67  2] is only chang
e920: 65 64 20 69 66 20 74 68 65 20 6e 65 77 20 76 61  ed if the new va
e930: 6c 75 65 20 69 73 20 4e 55 4c 4c 20 6f 72 20 30  lue is NULL or 0
e940: 20 28 66 61 6c 73 65 29 2e 0a 2a 2a 20 49 6e 20   (false)..** In 
e950: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 61 20 70  other words, a p
e960: 72 69 6f 72 20 72 5b 50 32 5d 20 76 61 6c 75 65  rior r[P2] value
e970: 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 6f 76 65   will not be ove
e980: 72 77 72 69 74 74 65 6e 20 62 79 20 31 20 28 74  rwritten by 1 (t
e990: 72 75 65 29 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  rue)..*/./* Opco
e9a0: 64 65 3a 20 4e 65 20 50 31 20 50 32 20 50 33 20  de: Ne P1 P2 P3 
e9b0: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
e9c0: 73 3a 20 49 46 20 72 5b 50 33 5d 21 3d 72 5b 50  s: IF r[P3]!=r[P
e9d0: 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  1].**.** This wo
e9e0: 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68  rks just like th
e9f0: 65 20 45 71 20 6f 70 63 6f 64 65 20 65 78 63 65  e Eq opcode exce
ea00: 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70  pt that the jump
ea10: 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20   is taken if.** 
ea20: 74 68 65 20 6f 70 65 72 61 6e 64 73 20 69 6e 20  the operands in 
ea30: 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64  registers P1 and
ea40: 20 50 33 20 61 72 65 20 6e 6f 74 20 65 71 75 61   P3 are not equa
ea50: 6c 2e 20 20 53 65 65 20 74 68 65 20 45 71 20 6f  l.  See the Eq o
ea60: 70 63 6f 64 65 20 66 6f 72 0a 2a 2a 20 61 64 64  pcode for.** add
ea70: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
ea80: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 62 6f  ion..**.** If bo
ea90: 74 68 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50  th SQLITE_STOREP
eaa0: 32 20 61 6e 64 20 53 51 4c 49 54 45 5f 4b 45 45  2 and SQLITE_KEE
eab0: 50 4e 55 4c 4c 20 66 6c 61 67 73 20 61 72 65 20  PNULL flags are 
eac0: 73 65 74 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20  set then the.** 
ead0: 63 6f 6e 74 65 6e 74 20 6f 66 20 72 5b 50 32 5d  content of r[P2]
eae0: 20 69 73 20 6f 6e 6c 79 20 63 68 61 6e 67 65 64   is only changed
eaf0: 20 69 66 20 74 68 65 20 6e 65 77 20 76 61 6c 75   if the new valu
eb00: 65 20 69 73 20 4e 55 4c 4c 20 6f 72 20 31 20 28  e is NULL or 1 (
eb10: 74 72 75 65 29 2e 0a 2a 2a 20 49 6e 20 6f 74 68  true)..** In oth
eb20: 65 72 20 77 6f 72 64 73 2c 20 61 20 70 72 69 6f  er words, a prio
eb30: 72 20 72 5b 50 32 5d 20 76 61 6c 75 65 20 77 69  r r[P2] value wi
eb40: 6c 6c 20 6e 6f 74 20 62 65 20 6f 76 65 72 77 72  ll not be overwr
eb50: 69 74 74 65 6e 20 62 79 20 30 20 28 66 61 6c 73  itten by 0 (fals
eb60: 65 29 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  e)..*/./* Opcode
eb70: 3a 20 4c 74 20 50 31 20 50 32 20 50 33 20 50 34  : Lt P1 P2 P3 P4
eb80: 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
eb90: 20 49 46 20 72 5b 50 33 5d 3c 72 5b 50 31 5d 0a   IF r[P3]<r[P1].
eba0: 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68  **.** Compare th
ebb0: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
ebc0: 73 74 65 72 20 50 31 20 61 6e 64 20 50 33 2e 20  ster P1 and P3. 
ebd0: 20 49 66 20 72 65 67 28 50 33 29 3c 72 65 67 28   If reg(P3)<reg(
ebe0: 50 31 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70  P1) then.** jump
ebf0: 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e 20   to address P2. 
ec00: 20 4f 72 20 69 66 20 74 68 65 20 53 51 4c 49 54   Or if the SQLIT
ec10: 45 5f 53 54 4f 52 45 50 32 20 66 6c 61 67 20 69  E_STOREP2 flag i
ec20: 73 20 73 65 74 20 69 6e 20 50 35 20 73 74 6f 72  s set in P5 stor
ec30: 65 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20  e.** the result 
ec40: 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 28 30  of comparison (0
ec50: 20 6f 72 20 31 20 6f 72 20 4e 55 4c 4c 29 20 69   or 1 or NULL) i
ec60: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
ec70: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51  .**.** If the SQ
ec80: 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20  LITE_JUMPIFNULL 
ec90: 62 69 74 20 6f 66 20 50 35 20 69 73 20 73 65 74  bit of P5 is set
eca0: 20 61 6e 64 20 65 69 74 68 65 72 20 72 65 67 28   and either reg(
ecb0: 50 31 29 20 6f 72 0a 2a 2a 20 72 65 67 28 50 33  P1) or.** reg(P3
ecc0: 29 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74  ) is NULL then t
ecd0: 68 65 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  he take the jump
ece0: 2e 20 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  .  If the SQLITE
ecf0: 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 0a 2a 2a 20  _JUMPIFNULL .** 
ed00: 62 69 74 20 69 73 20 63 6c 65 61 72 20 74 68 65  bit is clear the
ed10: 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 69  n fall through i
ed20: 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64  f either operand
ed30: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20   is NULL..**.** 
ed40: 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  The SQLITE_AFF_M
ed50: 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66 20 50  ASK portion of P
ed60: 35 20 6d 75 73 74 20 62 65 20 61 6e 20 61 66 66  5 must be an aff
ed70: 69 6e 69 74 79 20 63 68 61 72 61 63 74 65 72 20  inity character 
ed80: 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f  -.** SQLITE_AFF_
ed90: 54 45 58 54 2c 20 53 51 4c 49 54 45 5f 41 46 46  TEXT, SQLITE_AFF
eda0: 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64 20 73 6f  _INTEGER, and so
edb0: 20 66 6f 72 74 68 2e 20 41 6e 20 61 74 74 65 6d   forth. An attem
edc0: 70 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a 20 74  pt is made .** t
edd0: 6f 20 63 6f 65 72 63 65 20 62 6f 74 68 20 69 6e  o coerce both in
ede0: 70 75 74 73 20 61 63 63 6f 72 64 69 6e 67 20 74  puts according t
edf0: 6f 20 74 68 69 73 20 61 66 66 69 6e 69 74 79 20  o this affinity 
ee00: 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20 63 6f  before the.** co
ee10: 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d 61 64 65  mparison is made
ee20: 2e 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  . If the SQLITE_
ee30: 41 46 46 5f 4d 41 53 4b 20 69 73 20 30 78 30 30  AFF_MASK is 0x00
ee40: 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69 63 0a 2a  , then numeric.*
ee50: 2a 20 61 66 66 69 6e 69 74 79 20 69 73 20 75 73  * affinity is us
ee60: 65 64 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 68  ed. Note that th
ee70: 65 20 61 66 66 69 6e 69 74 79 20 63 6f 6e 76 65  e affinity conve
ee80: 72 73 69 6f 6e 73 20 61 72 65 20 73 74 6f 72 65  rsions are store
ee90: 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f 20 74  d.** back into t
eea0: 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65  he input registe
eeb0: 72 73 20 50 31 20 61 6e 64 20 50 33 2e 20 20 53  rs P1 and P3.  S
eec0: 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20 63 61  o this opcode ca
eed0: 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65 72 73 69  n cause.** persi
eee0: 73 74 65 6e 74 20 63 68 61 6e 67 65 73 20 74 6f  stent changes to
eef0: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
ef00: 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65  d P3..**.** Once
ef10: 20 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73   any conversions
ef20: 20 68 61 76 65 20 74 61 6b 65 6e 20 70 6c 61 63   have taken plac
ef30: 65 2c 20 61 6e 64 20 6e 65 69 74 68 65 72 20 76  e, and neither v
ef40: 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a  alue is NULL, .*
ef50: 2a 20 74 68 65 20 76 61 6c 75 65 73 20 61 72 65  * the values are
ef60: 20 63 6f 6d 70 61 72 65 64 2e 20 49 66 20 62 6f   compared. If bo
ef70: 74 68 20 76 61 6c 75 65 73 20 61 72 65 20 62 6c  th values are bl
ef80: 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d 70 28  obs then memcmp(
ef90: 29 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20  ) is.** used to 
efa0: 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 72 65  determine the re
efb0: 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63 6f 6d  sults of the com
efc0: 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 62 6f 74  parison.  If bot
efd0: 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20  h values.** are 
efe0: 74 65 78 74 2c 20 74 68 65 6e 20 74 68 65 20 61  text, then the a
eff0: 70 70 72 6f 70 72 69 61 74 65 20 63 6f 6c 6c 61  ppropriate colla
f000: 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73 70  ting function sp
f010: 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20 50 34  ecified in.** P4
f020: 20 69 73 20 20 75 73 65 64 20 74 6f 20 64 6f 20   is  used to do 
f030: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
f040: 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 73 70   If P4 is not sp
f050: 65 63 69 66 69 65 64 20 74 68 65 6e 0a 2a 2a 20  ecified then.** 
f060: 6d 65 6d 63 6d 70 28 29 20 69 73 20 75 73 65 64  memcmp() is used
f070: 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78 74   to compare text
f080: 20 73 74 72 69 6e 67 2e 20 20 49 66 20 62 6f 74   string.  If bot
f090: 68 20 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20  h values are.** 
f0a0: 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e 20 61 20  numeric, then a 
f0b0: 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61 72 69 73  numeric comparis
f0c0: 6f 6e 20 69 73 20 75 73 65 64 2e 20 49 66 20 74  on is used. If t
f0d0: 68 65 20 74 77 6f 20 76 61 6c 75 65 73 0a 2a 2a  he two values.**
f0e0: 20 61 72 65 20 6f 66 20 64 69 66 66 65 72 65 6e   are of differen
f0f0: 74 20 74 79 70 65 73 2c 20 74 68 65 6e 20 6e 75  t types, then nu
f100: 6d 62 65 72 73 20 61 72 65 20 63 6f 6e 73 69 64  mbers are consid
f110: 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e 0a 2a  ered less than.*
f120: 2a 20 73 74 72 69 6e 67 73 20 61 6e 64 20 73 74  * strings and st
f130: 72 69 6e 67 73 20 61 72 65 20 63 6f 6e 73 69 64  rings are consid
f140: 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e 20 62  ered less than b
f150: 6c 6f 62 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  lobs..*/./* Opco
f160: 64 65 3a 20 4c 65 20 50 31 20 50 32 20 50 33 20  de: Le P1 P2 P3 
f170: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
f180: 73 3a 20 49 46 20 72 5b 50 33 5d 3c 3d 72 5b 50  s: IF r[P3]<=r[P
f190: 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  1].**.** This wo
f1a0: 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68  rks just like th
f1b0: 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65  e Lt opcode exce
f1c0: 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70  pt that the jump
f1d0: 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20   is taken if.** 
f1e0: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
f1f0: 65 67 69 73 74 65 72 20 50 33 20 69 73 20 6c 65  egister P3 is le
f200: 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
f210: 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   to the content 
f220: 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  of.** register P
f230: 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f  1.  See the Lt o
f240: 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
f250: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
f260: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
f270: 47 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Gt P1 P2 P3 P4 P
f280: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49  5.** Synopsis: I
f290: 46 20 72 5b 50 33 5d 3e 72 5b 50 31 5d 0a 2a 2a  F r[P3]>r[P1].**
f2a0: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
f2b0: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20  ust like the Lt 
f2c0: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
f2d0: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
f2e0: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63  aken if.** the c
f2f0: 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
f300: 65 72 20 50 33 20 69 73 20 67 72 65 61 74 65 72  er P3 is greater
f310: 20 74 68 61 6e 20 74 68 65 20 63 6f 6e 74 65 6e   than the conten
f320: 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72  t of.** register
f330: 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74   P1.  See the Lt
f340: 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69   opcode for addi
f350: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
f360: 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  on..*/./* Opcode
f370: 3a 20 47 65 20 50 31 20 50 32 20 50 33 20 50 34  : Ge P1 P2 P3 P4
f380: 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
f390: 20 49 46 20 72 5b 50 33 5d 3e 3d 72 5b 50 31 5d   IF r[P3]>=r[P1]
f3a0: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
f3b0: 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20  s just like the 
f3c0: 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74  Lt opcode except
f3d0: 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69   that the jump i
f3e0: 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68  s taken if.** th
f3f0: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67  e content of reg
f400: 69 73 74 65 72 20 50 33 20 69 73 20 67 72 65 61  ister P3 is grea
f410: 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ter than or equa
f420: 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74  l to the content
f430: 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20   of.** register 
f440: 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20  P1.  See the Lt 
f450: 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74  opcode for addit
f460: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
f470: 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 71  n..*/.case OP_Eq
f480: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
f490: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 45 51  /* same as TK_EQ
f4a0: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
f4b0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 3a 20   */.case OP_Ne: 
f4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
f4d0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 45 2c 20   same as TK_NE, 
f4e0: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
f4f0: 2f 0a 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20  /.case OP_Lt:   
f500: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
f510: 61 6d 65 20 61 73 20 54 4b 5f 4c 54 2c 20 6a 75  ame as TK_LT, ju
f520: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
f530: 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 20  case OP_Le:     
f540: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
f550: 65 20 61 73 20 54 4b 5f 4c 45 2c 20 6a 75 6d 70  e as TK_LE, jump
f560: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61  , in1, in3 */.ca
f570: 73 65 20 4f 50 5f 47 74 3a 20 20 20 20 20 20 20  se OP_Gt:       
f580: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
f590: 61 73 20 54 4b 5f 47 54 2c 20 6a 75 6d 70 2c 20  as TK_GT, jump, 
f5a0: 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  in1, in3 */.case
f5b0: 20 4f 50 5f 47 65 3a 20 7b 20 20 20 20 20 20 20   OP_Ge: {       
f5c0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
f5d0: 20 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20 69 6e   TK_GE, jump, in
f5e0: 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20  1, in3 */.  int 
f5f0: 72 65 73 2c 20 72 65 73 32 3b 20 20 20 20 20 20  res, res2;      
f600: 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 74 68 65  /* Result of the
f610: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 70   comparison of p
f620: 49 6e 31 20 61 67 61 69 6e 73 74 20 70 49 6e 33  In1 against pIn3
f630: 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e   */.  char affin
f640: 69 74 79 3b 20 20 20 20 20 20 2f 2a 20 41 66 66  ity;      /* Aff
f650: 69 6e 69 74 79 20 74 6f 20 75 73 65 20 66 6f 72  inity to use for
f660: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 2a 2f 0a 20   comparison */. 
f670: 20 75 31 36 20 66 6c 61 67 73 31 3b 20 20 20 20   u16 flags1;    
f680: 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20       /* Copy of 
f690: 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66  initial value of
f6a0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 2a 2f 0a   pIn1->flags */.
f6b0: 20 20 75 31 36 20 66 6c 61 67 73 33 3b 20 20 20    u16 flags3;   
f6c0: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
f6d0: 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f   initial value o
f6e0: 66 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 2a 2f  f pIn3->flags */
f6f0: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
f700: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e  [pOp->p1];.  pIn
f710: 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
f720: 33 5d 3b 0a 20 20 66 6c 61 67 73 31 20 3d 20 70  3];.  flags1 = p
f730: 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a 20 20 66 6c  In1->flags;.  fl
f740: 61 67 73 33 20 3d 20 70 49 6e 33 2d 3e 66 6c 61  ags3 = pIn3->fla
f750: 67 73 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73  gs;.  if( (flags
f760: 31 20 7c 20 66 6c 61 67 73 33 29 26 4d 45 4d 5f  1 | flags3)&MEM_
f770: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 2f 2a 20 4f  Null ){.    /* O
f780: 6e 65 20 6f 72 20 62 6f 74 68 20 6f 70 65 72 61  ne or both opera
f790: 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 2a 2f 0a  nds are NULL */.
f7a0: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20      if( pOp->p5 
f7b0: 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  & SQLITE_NULLEQ 
f7c0: 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 53  ){.      /* If S
f7d0: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20  QLITE_NULLEQ is 
f7e0: 73 65 74 20 28 77 68 69 63 68 20 77 69 6c 6c 20  set (which will 
f7f0: 6f 6e 6c 79 20 68 61 70 70 65 6e 20 69 66 20 74  only happen if t
f800: 68 65 20 6f 70 65 72 61 74 6f 72 20 69 73 0a 20  he operator is. 
f810: 20 20 20 20 20 2a 2a 20 4f 50 5f 45 71 20 6f 72       ** OP_Eq or
f820: 20 4f 50 5f 4e 65 29 20 74 68 65 6e 20 74 61 6b   OP_Ne) then tak
f830: 65 20 74 68 65 20 6a 75 6d 70 20 6f 72 20 6e 6f  e the jump or no
f840: 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77  t depending on w
f850: 68 65 74 68 65 72 0a 20 20 20 20 20 20 2a 2a 20  hether.      ** 
f860: 6f 72 20 6e 6f 74 20 62 6f 74 68 20 6f 70 65 72  or not both oper
f870: 61 6e 64 73 20 61 72 65 20 6e 75 6c 6c 2e 0a 20  ands are null.. 
f880: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73       */.      as
f890: 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
f8a0: 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20 70 4f 70 2d  e==OP_Eq || pOp-
f8b0: 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29  >opcode==OP_Ne )
f8c0: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
f8d0: 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 43 6c  (flags1 & MEM_Cl
f8e0: 65 61 72 65 64 29 3d 3d 30 20 29 3b 0a 20 20 20  eared)==0 );.   
f8f0: 20 20 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d     assert( (pOp-
f900: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d  >p5 & SQLITE_JUM
f910: 50 49 46 4e 55 4c 4c 29 3d 3d 30 20 29 3b 0a 20  PIFNULL)==0 );. 
f920: 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 31       if( (flags1
f930: 26 66 6c 61 67 73 33 26 4d 45 4d 5f 4e 75 6c 6c  &flags3&MEM_Null
f940: 29 21 3d 30 0a 20 20 20 20 20 20 20 26 26 20 28  )!=0.       && (
f950: 66 6c 61 67 73 33 26 4d 45 4d 5f 43 6c 65 61 72  flags3&MEM_Clear
f960: 65 64 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a  ed)==0.      ){.
f970: 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b          res = 0;
f980: 20 20 2f 2a 20 4f 70 65 72 61 6e 64 73 20 61 72    /* Operands ar
f990: 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20  e equal */.     
f9a0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
f9b0: 72 65 73 20 3d 20 31 3b 20 20 2f 2a 20 4f 70 65  res = 1;  /* Ope
f9c0: 72 61 6e 64 73 20 61 72 65 20 6e 6f 74 20 65 71  rands are not eq
f9d0: 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 0a 20  ual */.      }. 
f9e0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
f9f0: 2f 2a 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  /* SQLITE_NULLEQ
fa00: 20 69 73 20 63 6c 65 61 72 20 61 6e 64 20 61 74   is clear and at
fa10: 20 6c 65 61 73 74 20 6f 6e 65 20 6f 70 65 72 61   least one opera
fa20: 6e 64 20 69 73 20 4e 55 4c 4c 2c 0a 20 20 20 20  nd is NULL,.    
fa30: 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 72 65    ** then the re
fa40: 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 4e  sult is always N
fa50: 55 4c 4c 2e 0a 20 20 20 20 20 20 2a 2a 20 54 68  ULL..      ** Th
fa60: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
fa70: 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55  if the SQLITE_JU
fa80: 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 69 73 20  MPIFNULL bit is 
fa90: 73 65 74 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  set..      */.  
faa0: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20      if( pOp->p5 
fab0: 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  & SQLITE_STOREP2
fac0: 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4f 75 74   ){.        pOut
fad0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
fae0: 5d 3b 0a 20 20 20 20 20 20 20 20 69 43 6f 6d 70  ];.        iComp
faf0: 61 72 65 20 3d 20 31 3b 20 20 20 20 2f 2a 20 4f  are = 1;    /* O
fb00: 70 65 72 61 6e 64 73 20 61 72 65 20 6e 6f 74 20  perands are not 
fb10: 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 20  equal */.       
fb20: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
fb30: 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  e(p, pOut);.    
fb40: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
fb50: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c  ag(pOut, MEM_Nul
fb60: 6c 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49  l);.        REGI
fb70: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
fb80: 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20  p2, pOut);.     
fb90: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
fba0: 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
fbb0: 32 2c 33 29 3b 0a 20 20 20 20 20 20 20 20 69 66  2,3);.        if
fbc0: 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
fbd0: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 29 7b  TE_JUMPIFNULL ){
fbe0: 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
fbf0: 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20  jump_to_p2;.    
fc00: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
fc10: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
fc20: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
fc30: 20 4e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64   Neither operand
fc40: 20 69 73 20 4e 55 4c 4c 2e 20 20 44 6f 20 61 20   is NULL.  Do a 
fc50: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 2a 2f 0a 20  comparison. */. 
fc60: 20 20 20 61 66 66 69 6e 69 74 79 20 3d 20 70 4f     affinity = pO
fc70: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 41  p->p5 & SQLITE_A
fc80: 46 46 5f 4d 41 53 4b 3b 0a 20 20 20 20 69 66 28  FF_MASK;.    if(
fc90: 20 61 66 66 69 6e 69 74 79 3e 3d 53 51 4c 49 54   affinity>=SQLIT
fca0: 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 7b  E_AFF_NUMERIC ){
fcb0: 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67  .      if( (flag
fcc0: 73 31 20 7c 20 66 6c 61 67 73 33 29 26 4d 45 4d  s1 | flags3)&MEM
fcd0: 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20 20 20  _Str ){.        
fce0: 69 66 28 20 28 66 6c 61 67 73 31 20 26 20 28 4d  if( (flags1 & (M
fcf0: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c  EM_Int|MEM_Real|
fd00: 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53  MEM_Str))==MEM_S
fd10: 74 72 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  tr ){.          
fd20: 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69  applyNumericAffi
fd30: 6e 69 74 79 28 70 49 6e 31 2c 30 29 3b 0a 20 20  nity(pIn1,0);.  
fd40: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
fd50: 66 6c 61 67 73 33 3d 3d 70 49 6e 33 2d 3e 66 6c  flags3==pIn3->fl
fd60: 61 67 73 20 29 3b 0a 20 20 20 20 20 20 20 20 20  ags );.         
fd70: 20 2f 2a 20 74 65 73 74 63 61 73 65 28 20 66 6c   /* testcase( fl
fd80: 61 67 73 33 21 3d 70 49 6e 33 2d 3e 66 6c 61 67  ags3!=pIn3->flag
fd90: 73 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 2a  s );.          *
fda0: 2a 20 74 68 69 73 20 75 73 65 64 20 74 6f 20 62  * this used to b
fdb0: 65 20 70 6f 73 73 69 62 6c 65 20 77 69 74 68 20  e possible with 
fdc0: 70 49 6e 31 3d 3d 70 49 6e 33 2c 20 62 75 74 20  pIn1==pIn3, but 
fdd0: 6e 6f 74 20 73 69 6e 63 65 0a 20 20 20 20 20 20  not since.      
fde0: 20 20 20 20 2a 2a 20 74 68 65 20 63 6f 6c 75 6d      ** the colum
fdf0: 6e 20 63 61 63 68 65 20 77 61 73 20 72 65 6d 6f  n cache was remo
fe00: 76 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  ved.  The follow
fe10: 69 6e 67 20 61 73 73 69 67 6e 6d 65 6e 74 0a 20  ing assignment. 
fe20: 20 20 20 20 20 20 20 20 20 2a 2a 20 69 73 20 65           ** is e
fe30: 73 73 65 6e 74 69 61 6c 6c 79 20 61 20 6e 6f 2d  ssentially a no-
fe40: 6f 70 2e 20 20 42 75 74 2c 20 69 74 20 70 72 6f  op.  But, it pro
fe50: 76 69 64 65 73 20 64 65 66 65 6e 73 65 2d 69 6e  vides defense-in
fe60: 2d 64 65 70 74 68 0a 20 20 20 20 20 20 20 20 20  -depth.         
fe70: 20 2a 2a 20 69 6e 20 63 61 73 65 20 6f 75 72 20   ** in case our 
fe80: 61 6e 61 6c 79 73 69 73 20 69 73 20 69 6e 63 6f  analysis is inco
fe90: 72 72 65 63 74 2c 20 73 6f 20 69 74 20 69 73 20  rrect, so it is 
fea0: 6c 65 66 74 20 69 6e 2e 20 2a 2f 0a 20 20 20 20  left in. */.    
feb0: 20 20 20 20 20 20 66 6c 61 67 73 33 20 3d 20 70        flags3 = p
fec0: 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 20 20  In3->flags;.    
fed0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
fee0: 28 20 28 66 6c 61 67 73 33 20 26 20 28 4d 45 4d  ( (flags3 & (MEM
fef0: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45  _Int|MEM_Real|ME
ff00: 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72  M_Str))==MEM_Str
ff10: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61 70   ){.          ap
ff20: 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  plyNumericAffini
ff30: 74 79 28 70 49 6e 33 2c 30 29 3b 0a 20 20 20 20  ty(pIn3,0);.    
ff40: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
ff50: 20 20 20 20 2f 2a 20 48 61 6e 64 6c 65 20 74 68      /* Handle th
ff60: 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 6f 66  e common case of
ff70: 20 69 6e 74 65 67 65 72 20 63 6f 6d 70 61 72 69   integer compari
ff80: 73 6f 6e 20 68 65 72 65 2c 20 61 73 20 61 6e 0a  son here, as an.
ff90: 20 20 20 20 20 20 2a 2a 20 6f 70 74 69 6d 69 7a        ** optimiz
ffa0: 61 74 69 6f 6e 2c 20 74 6f 20 61 76 6f 69 64 20  ation, to avoid 
ffb0: 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65  a call to sqlite
ffc0: 33 4d 65 6d 43 6f 6d 70 61 72 65 28 29 20 2a 2f  3MemCompare() */
ffd0: 0a 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 31  .      if( (pIn1
ffe0: 2d 3e 66 6c 61 67 73 20 26 20 70 49 6e 33 2d 3e  ->flags & pIn3->
fff0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
10000 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69  !=0 ){.        i
10010 66 28 20 70 49 6e 33 2d 3e 75 2e 69 20 3e 20 70  f( pIn3->u.i > p
10020 49 6e 31 2d 3e 75 2e 69 20 29 7b 20 72 65 73 20  In1->u.i ){ res 
10030 3d 20 2b 31 3b 20 67 6f 74 6f 20 63 6f 6d 70 61  = +1; goto compa
10040 72 65 5f 6f 70 3b 20 7d 0a 20 20 20 20 20 20 20  re_op; }.       
10050 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 69 20 3c   if( pIn3->u.i <
10060 20 70 49 6e 31 2d 3e 75 2e 69 20 29 7b 20 72 65   pIn1->u.i ){ re
10070 73 20 3d 20 2d 31 3b 20 67 6f 74 6f 20 63 6f 6d  s = -1; goto com
10080 70 61 72 65 5f 6f 70 3b 20 7d 0a 20 20 20 20 20  pare_op; }.     
10090 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20     res = 0;.    
100a0 20 20 20 20 67 6f 74 6f 20 63 6f 6d 70 61 72 65      goto compare
100b0 5f 6f 70 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  _op;.      }.   
100c0 20 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69 6e   }else if( affin
100d0 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
100e0 54 45 58 54 20 29 7b 0a 20 20 20 20 20 20 69 66  TEXT ){.      if
100f0 28 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f  ( (flags1 & MEM_
10100 53 74 72 29 3d 3d 30 20 26 26 20 28 66 6c 61 67  Str)==0 && (flag
10110 73 31 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  s1 & (MEM_Int|ME
10120 4d 5f 52 65 61 6c 29 29 21 3d 30 20 29 7b 0a 20  M_Real))!=0 ){. 
10130 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28         testcase(
10140 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
10150 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 20 20  EM_Int );.      
10160 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 31    testcase( pIn1
10170 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ->flags & MEM_Re
10180 61 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71  al );.        sq
10190 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69  lite3VdbeMemStri
101a0 6e 67 69 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f  ngify(pIn1, enco
101b0 64 69 6e 67 2c 20 31 29 3b 0a 20 20 20 20 20 20  ding, 1);.      
101c0 20 20 74 65 73 74 63 61 73 65 28 20 28 66 6c 61    testcase( (fla
101d0 67 73 31 26 4d 45 4d 5f 44 79 6e 29 20 21 3d 20  gs1&MEM_Dyn) != 
101e0 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pIn1->flags&MEM
101f0 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20 20 20 20  _Dyn) );.       
10200 20 66 6c 61 67 73 31 20 3d 20 28 70 49 6e 31 2d   flags1 = (pIn1-
10210 3e 66 6c 61 67 73 20 26 20 7e 4d 45 4d 5f 54 79  >flags & ~MEM_Ty
10220 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67 73  peMask) | (flags
10230 31 20 26 20 4d 45 4d 5f 54 79 70 65 4d 61 73 6b  1 & MEM_TypeMask
10240 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
10250 74 28 20 70 49 6e 31 21 3d 70 49 6e 33 20 29 3b  t( pIn1!=pIn3 );
10260 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
10270 66 28 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d  f( (flags3 & MEM
10280 5f 53 74 72 29 3d 3d 30 20 26 26 20 28 66 6c 61  _Str)==0 && (fla
10290 67 73 33 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d  gs3 & (MEM_Int|M
102a0 45 4d 5f 52 65 61 6c 29 29 21 3d 30 20 29 7b 0a  EM_Real))!=0 ){.
102b0 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65          testcase
102c0 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20  ( pIn3->flags & 
102d0 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 20  MEM_Int );.     
102e0 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e     testcase( pIn
102f0 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  3->flags & MEM_R
10300 65 61 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 73  eal );.        s
10310 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72  qlite3VdbeMemStr
10320 69 6e 67 69 66 79 28 70 49 6e 33 2c 20 65 6e 63  ingify(pIn3, enc
10330 6f 64 69 6e 67 2c 20 31 29 3b 0a 20 20 20 20 20  oding, 1);.     
10340 20 20 20 74 65 73 74 63 61 73 65 28 20 28 66 6c     testcase( (fl
10350 61 67 73 33 26 4d 45 4d 5f 44 79 6e 29 20 21 3d  ags3&MEM_Dyn) !=
10360 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45   (pIn3->flags&ME
10370 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20 20 20  M_Dyn) );.      
10380 20 20 66 6c 61 67 73 33 20 3d 20 28 70 49 6e 33    flags3 = (pIn3
10390 2d 3e 66 6c 61 67 73 20 26 20 7e 4d 45 4d 5f 54  ->flags & ~MEM_T
103a0 79 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67  ypeMask) | (flag
103b0 73 33 20 26 20 4d 45 4d 5f 54 79 70 65 4d 61 73  s3 & MEM_TypeMas
103c0 6b 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  k);.      }.    
103d0 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  }.    assert( pO
103e0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f  p->p4type==P4_CO
103f0 4c 4c 53 45 51 20 7c 7c 20 70 4f 70 2d 3e 70 34  LLSEQ || pOp->p4
10400 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20 20 20  .pColl==0 );.   
10410 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 4d 65   res = sqlite3Me
10420 6d 43 6f 6d 70 61 72 65 28 70 49 6e 33 2c 20 70  mCompare(pIn3, p
10430 49 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f  In1, pOp->p4.pCo
10440 6c 6c 29 3b 0a 20 20 7d 0a 63 6f 6d 70 61 72 65  ll);.  }.compare
10450 5f 6f 70 3a 0a 20 20 2f 2a 20 41 74 20 74 68 69  _op:.  /* At thi
10460 73 20 70 6f 69 6e 74 2c 20 72 65 73 20 69 73 20  s point, res is 
10470 6e 65 67 61 74 69 76 65 2c 20 7a 65 72 6f 2c 20  negative, zero, 
10480 6f 72 20 70 6f 73 69 74 69 76 65 20 69 66 20 72  or positive if r
10490 65 67 5b 50 31 5d 20 69 73 0a 20 20 2a 2a 20 6c  eg[P1] is.  ** l
104a0 65 73 73 20 74 68 61 6e 2c 20 65 71 75 61 6c 20  ess than, equal 
104b0 74 6f 2c 20 6f 72 20 67 72 65 61 74 65 72 20 74  to, or greater t
104c0 68 61 6e 20 72 65 67 5b 50 33 5d 2c 20 72 65 73  han reg[P3], res
104d0 70 65 63 74 69 76 65 6c 79 2e 20 20 43 6f 6d 70  pectively.  Comp
104e0 75 74 65 0a 20 20 2a 2a 20 74 68 65 20 61 6e 73  ute.  ** the ans
104f0 77 65 72 20 74 6f 20 74 68 69 73 20 6f 70 65 72  wer to this oper
10500 61 74 6f 72 20 69 6e 20 72 65 73 32 2c 20 64 65  ator in res2, de
10510 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 61 74 20  pending on what 
10520 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 20  the comparison. 
10530 20 2a 2a 20 6f 70 65 72 61 74 6f 72 20 61 63 74   ** operator act
10540 75 61 6c 6c 79 20 69 73 2e 20 20 54 68 65 20 6e  ually is.  The n
10550 65 78 74 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64  ext block of cod
10560 65 20 64 65 70 65 6e 64 73 20 6f 6e 20 74 68 65  e depends on the
10570 20 66 61 63 74 0a 20 20 2a 2a 20 74 68 61 74 20   fact.  ** that 
10580 74 68 65 20 36 20 63 6f 6d 70 61 72 69 73 6f 6e  the 6 comparison
10590 20 6f 70 65 72 61 74 6f 72 73 20 61 72 65 20 63   operators are c
105a0 6f 6e 73 65 63 75 74 69 76 65 20 69 6e 74 65 67  onsecutive integ
105b0 65 72 73 20 69 6e 20 74 68 69 73 0a 20 20 2a 2a  ers in this.  **
105c0 20 6f 72 64 65 72 3a 20 20 4e 45 2c 20 45 51 2c   order:  NE, EQ,
105d0 20 47 54 2c 20 4c 45 2c 20 4c 54 2c 20 47 45 20   GT, LE, LT, GE 
105e0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f  */.  assert( OP_
105f0 45 71 3d 3d 4f 50 5f 4e 65 2b 31 20 29 3b 20 61  Eq==OP_Ne+1 ); a
10600 73 73 65 72 74 28 20 4f 50 5f 47 74 3d 3d 4f 50  ssert( OP_Gt==OP
10610 5f 4e 65 2b 32 20 29 3b 20 61 73 73 65 72 74 28  _Ne+2 ); assert(
10620 20 4f 50 5f 4c 65 3d 3d 4f 50 5f 4e 65 2b 33 20   OP_Le==OP_Ne+3 
10630 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f  );.  assert( OP_
10640 4c 74 3d 3d 4f 50 5f 4e 65 2b 34 20 29 3b 20 61  Lt==OP_Ne+4 ); a
10650 73 73 65 72 74 28 20 4f 50 5f 47 65 3d 3d 4f 50  ssert( OP_Ge==OP
10660 5f 4e 65 2b 35 20 29 3b 0a 20 20 69 66 28 20 72  _Ne+5 );.  if( r
10670 65 73 3c 30 20 29 7b 20 20 20 20 20 20 20 20 20  es<0 ){         
10680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
10690 2a 20 6e 65 2c 20 65 71 2c 20 67 74 2c 20 6c 65  * ne, eq, gt, le
106a0 2c 20 6c 74 2c 20 67 65 20 2a 2f 0a 20 20 20 20  , lt, ge */.    
106b0 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73  static const uns
106c0 69 67 6e 65 64 20 63 68 61 72 20 61 4c 54 62 5b  igned char aLTb[
106d0 5d 20 3d 20 7b 20 31 2c 20 20 30 2c 20 20 30 2c  ] = { 1,  0,  0,
106e0 20 20 31 2c 20 20 31 2c 20 20 30 20 7d 3b 0a 20    1,  1,  0 };. 
106f0 20 20 20 72 65 73 32 20 3d 20 61 4c 54 62 5b 70     res2 = aLTb[p
10700 4f 70 2d 3e 6f 70 63 6f 64 65 20 2d 20 4f 50 5f  Op->opcode - OP_
10710 4e 65 5d 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  Ne];.  }else if(
10720 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 73   res==0 ){.    s
10730 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69  tatic const unsi
10740 67 6e 65 64 20 63 68 61 72 20 61 45 51 62 5b 5d  gned char aEQb[]
10750 20 3d 20 7b 20 30 2c 20 20 31 2c 20 20 30 2c 20   = { 0,  1,  0, 
10760 20 31 2c 20 20 30 2c 20 20 31 20 7d 3b 0a 20 20   1,  0,  1 };.  
10770 20 20 72 65 73 32 20 3d 20 61 45 51 62 5b 70 4f    res2 = aEQb[pO
10780 70 2d 3e 6f 70 63 6f 64 65 20 2d 20 4f 50 5f 4e  p->opcode - OP_N
10790 65 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  e];.  }else{.   
107a0 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e   static const un
107b0 73 69 67 6e 65 64 20 63 68 61 72 20 61 47 54 62  signed char aGTb
107c0 5b 5d 20 3d 20 7b 20 31 2c 20 20 30 2c 20 20 31  [] = { 1,  0,  1
107d0 2c 20 20 30 2c 20 20 30 2c 20 20 31 20 7d 3b 0a  ,  0,  0,  1 };.
107e0 20 20 20 20 72 65 73 32 20 3d 20 61 47 54 62 5b      res2 = aGTb[
107f0 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 2d 20 4f 50  pOp->opcode - OP
10800 5f 4e 65 5d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  _Ne];.  }..  /* 
10810 55 6e 64 6f 20 61 6e 79 20 63 68 61 6e 67 65 73  Undo any changes
10820 20 6d 61 64 65 20 62 79 20 61 70 70 6c 79 41 66   made by applyAf
10830 66 69 6e 69 74 79 28 29 20 74 6f 20 74 68 65 20  finity() to the 
10840 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 2e  input registers.
10850 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28 70   */.  assert( (p
10860 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
10870 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61 67 73 31  _Dyn) == (flags1
10880 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20   & MEM_Dyn) );. 
10890 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 66   pIn1->flags = f
108a0 6c 61 67 73 31 3b 0a 20 20 61 73 73 65 72 74 28  lags1;.  assert(
108b0 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
108c0 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61  MEM_Dyn) == (fla
108d0 67 73 33 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29  gs3 & MEM_Dyn) )
108e0 3b 0a 20 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  ;.  pIn3->flags 
108f0 3d 20 66 6c 61 67 73 33 3b 0a 0a 20 20 69 66 28  = flags3;..  if(
10900 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
10910 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20  E_STOREP2 ){.   
10920 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
10930 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 69 43 6f 6d  p->p2];.    iCom
10940 70 61 72 65 20 3d 20 72 65 73 3b 0a 20 20 20 20  pare = res;.    
10950 69 66 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 53  if( (pOp->p5 & S
10960 51 4c 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 29 21  QLITE_KEEPNULL)!
10970 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 54  =0 ){.      /* T
10980 68 65 20 4b 45 45 50 4e 55 4c 4c 20 66 6c 61 67  he KEEPNULL flag
10990 20 70 72 65 76 65 6e 74 73 20 4f 50 5f 45 71 20   prevents OP_Eq 
109a0 66 72 6f 6d 20 6f 76 65 72 77 72 69 74 69 6e 67  from overwriting
109b0 20 61 20 4e 55 4c 4c 20 77 69 74 68 20 31 0a 20   a NULL with 1. 
109c0 20 20 20 20 20 2a 2a 20 61 6e 64 20 70 72 65 76       ** and prev
109d0 65 6e 74 73 20 4f 50 5f 4e 65 20 66 72 6f 6d 20  ents OP_Ne from 
109e0 6f 76 65 72 77 72 69 74 69 6e 67 20 4e 55 4c 4c  overwriting NULL
109f0 20 77 69 74 68 20 30 2e 20 20 54 68 69 73 20 66   with 0.  This f
10a00 6c 61 67 0a 20 20 20 20 20 20 2a 2a 20 69 73 20  lag.      ** is 
10a10 6f 6e 6c 79 20 75 73 65 64 20 69 6e 20 63 6f 6e  only used in con
10a20 74 65 78 74 73 20 77 68 65 72 65 20 65 69 74 68  texts where eith
10a30 65 72 3a 0a 20 20 20 20 20 20 2a 2a 20 20 20 28  er:.      **   (
10a40 31 29 20 6f 70 3d 3d 4f 50 5f 45 71 20 26 26 20  1) op==OP_Eq && 
10a50 28 72 5b 50 32 5d 3d 3d 4e 55 4c 4c 20 7c 7c 20  (r[P2]==NULL || 
10a60 72 5b 50 32 5d 3d 3d 30 29 0a 20 20 20 20 20 20  r[P2]==0).      
10a70 2a 2a 20 20 20 28 32 29 20 6f 70 3d 3d 4f 50 5f  **   (2) op==OP_
10a80 4e 65 20 26 26 20 28 72 5b 50 32 5d 3d 3d 4e 55  Ne && (r[P2]==NU
10a90 4c 4c 20 7c 7c 20 72 5b 50 32 5d 3d 3d 31 29 0a  LL || r[P2]==1).
10aa0 20 20 20 20 20 20 2a 2a 20 54 68 65 72 65 66 6f        ** Therefo
10ab0 72 65 20 69 74 20 69 73 20 6e 6f 74 20 6e 65 63  re it is not nec
10ac0 65 73 73 61 72 79 20 74 6f 20 63 68 65 63 6b 20  essary to check 
10ad0 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
10ae0 5b 50 32 5d 20 66 6f 72 0a 20 20 20 20 20 20 2a  [P2] for.      *
10af0 2a 20 4e 55 4c 4c 2e 20 2a 2f 0a 20 20 20 20 20  * NULL. */.     
10b00 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
10b10 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 7c 7c 20 70  code==OP_Ne || p
10b20 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45  Op->opcode==OP_E
10b30 71 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  q );.      asser
10b40 74 28 20 72 65 73 32 3d 3d 30 20 7c 7c 20 72 65  t( res2==0 || re
10b50 73 32 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 74  s2==1 );.      t
10b60 65 73 74 63 61 73 65 28 20 72 65 73 32 3d 3d 30  estcase( res2==0
10b70 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   && pOp->opcode=
10b80 3d 4f 50 5f 45 71 20 29 3b 0a 20 20 20 20 20 20  =OP_Eq );.      
10b90 74 65 73 74 63 61 73 65 28 20 72 65 73 32 3d 3d  testcase( res2==
10ba0 31 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  1 && pOp->opcode
10bb0 3d 3d 4f 50 5f 45 71 20 29 3b 0a 20 20 20 20 20  ==OP_Eq );.     
10bc0 20 74 65 73 74 63 61 73 65 28 20 72 65 73 32 3d   testcase( res2=
10bd0 3d 30 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f 64  =0 && pOp->opcod
10be0 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20 20  e==OP_Ne );.    
10bf0 20 20 74 65 73 74 63 61 73 65 28 20 72 65 73 32    testcase( res2
10c00 3d 3d 31 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f  ==1 && pOp->opco
10c10 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20  de==OP_Ne );.   
10c20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 63     if( (pOp->opc
10c30 6f 64 65 3d 3d 4f 50 5f 45 71 29 3d 3d 72 65 73  ode==OP_Eq)==res
10c40 32 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d  2 ) break;.    }
10c50 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  .    memAboutToC
10c60 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
10c70 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
10c80 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
10c90 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  );.    pOut->u.i
10ca0 20 3d 20 72 65 73 32 3b 0a 20 20 20 20 52 45 47   = res2;.    REG
10cb0 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
10cc0 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 7d 65  >p2, pOut);.  }e
10cd0 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61  lse{.    VdbeBra
10ce0 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c  nchTaken(res!=0,
10cf0 20 28 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49   (pOp->p5 & SQLI
10d00 54 45 5f 4e 55 4c 4c 45 51 29 3f 32 3a 33 29 3b  TE_NULLEQ)?2:3);
10d10 0a 20 20 20 20 69 66 28 20 72 65 73 32 20 29 7b  .    if( res2 ){
10d20 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  .      goto jump
10d30 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20  _to_p2;.    }.  
10d40 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
10d50 20 4f 70 63 6f 64 65 3a 20 45 6c 73 65 4e 6f 74   Opcode: ElseNot
10d60 45 71 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  Eq * P2 * * *.**
10d70 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
10d80 6d 75 73 74 20 69 6d 6d 65 64 69 61 74 65 6c 79  must immediately
10d90 20 66 6f 6c 6c 6f 77 20 61 6e 20 4f 50 5f 4c 74   follow an OP_Lt
10da0 20 6f 72 20 4f 50 5f 47 74 20 63 6f 6d 70 61 72   or OP_Gt compar
10db0 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 0a 2a  ison operator..*
10dc0 2a 20 49 66 20 72 65 73 75 6c 74 20 6f 66 20 61  * If result of a
10dd0 6e 20 4f 50 5f 45 71 20 63 6f 6d 70 61 72 69 73  n OP_Eq comparis
10de0 6f 6e 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 74  on on the same t
10df0 77 6f 20 6f 70 65 72 61 6e 64 73 0a 2a 2a 20 77  wo operands.** w
10e00 6f 75 6c 64 20 68 61 76 65 20 62 65 20 4e 55 4c  ould have be NUL
10e10 4c 20 6f 72 20 66 61 6c 73 65 20 28 30 29 2c 20  L or false (0), 
10e20 74 68 65 6e 20 74 68 65 6e 20 6a 75 6d 70 20 74  then then jump t
10e30 6f 20 50 32 2e 20 0a 2a 2a 20 49 66 20 74 68 65  o P2. .** If the
10e40 20 72 65 73 75 6c 74 20 6f 66 20 61 6e 20 4f 50   result of an OP
10e50 5f 45 71 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  _Eq comparison o
10e60 6e 20 74 68 65 20 74 77 6f 20 70 72 65 76 69 6f  n the two previo
10e70 75 73 20 6f 70 65 72 61 6e 64 73 0a 2a 2a 20 77  us operands.** w
10e80 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e 20 74  ould have been t
10e90 72 75 65 20 28 31 29 2c 20 74 68 65 6e 20 66 61  rue (1), then fa
10ea0 6c 6c 20 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a 63  ll through..*/.c
10eb0 61 73 65 20 4f 50 5f 45 6c 73 65 4e 6f 74 45 71  ase OP_ElseNotEq
10ec0 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 73 61 6d  : {       /* sam
10ed0 65 20 61 73 20 54 4b 5f 45 53 43 41 50 45 2c 20  e as TK_ESCAPE, 
10ee0 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74  jump */.  assert
10ef0 28 20 70 4f 70 3e 61 4f 70 20 29 3b 0a 20 20 61  ( pOp>aOp );.  a
10f00 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f  ssert( pOp[-1].o
10f10 70 63 6f 64 65 3d 3d 4f 50 5f 4c 74 20 7c 7c 20  pcode==OP_Lt || 
10f20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d  pOp[-1].opcode==
10f30 4f 50 5f 47 74 20 29 3b 0a 20 20 61 73 73 65 72  OP_Gt );.  asser
10f40 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 35 20 26 20  t( pOp[-1].p5 & 
10f50 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29  SQLITE_STOREP2 )
10f60 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
10f70 6b 65 6e 28 69 43 6f 6d 70 61 72 65 21 3d 30 2c  ken(iCompare!=0,
10f80 20 32 29 3b 0a 20 20 69 66 28 20 69 43 6f 6d 70   2);.  if( iComp
10f90 61 72 65 21 3d 30 20 29 20 67 6f 74 6f 20 6a 75  are!=0 ) goto ju
10fa0 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61  mp_to_p2;.  brea
10fb0 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.}.../* Opcode
10fc0 3a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20 2a 20  : Permutation * 
10fd0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 53  * * P4 *.**.** S
10fe0 65 74 20 74 68 65 20 70 65 72 6d 75 74 61 74 69  et the permutati
10ff0 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 4f  on used by the O
11000 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61 74  P_Compare operat
11010 6f 72 20 69 6e 20 74 68 65 20 6e 65 78 74 0a 2a  or in the next.*
11020 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  * instruction.  
11030 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20  The permutation 
11040 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  is stored in the
11050 20 50 34 20 6f 70 65 72 61 6e 64 2e 0a 2a 2a 0a   P4 operand..**.
11060 2a 2a 20 54 68 65 20 70 65 72 6d 75 74 61 74 69  ** The permutati
11070 6f 6e 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64  on is only valid
11080 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 20   until the next 
11090 4f 50 5f 43 6f 6d 70 61 72 65 20 74 68 61 74 20  OP_Compare that 
110a0 68 61 73 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41  has.** the OPFLA
110b0 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20 73 65  G_PERMUTE bit se
110c0 74 20 69 6e 20 50 35 2e 20 54 79 70 69 63 61 6c  t in P5. Typical
110d0 6c 79 20 74 68 65 20 4f 50 5f 50 65 72 6d 75 74  ly the OP_Permut
110e0 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 0a 2a 2a  ation should .**
110f0 20 6f 63 63 75 72 20 69 6d 6d 65 64 69 61 74 65   occur immediate
11100 6c 79 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20  ly prior to the 
11110 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2a 0a 2a  OP_Compare..**.*
11120 2a 20 54 68 65 20 66 69 72 73 74 20 69 6e 74 65  * The first inte
11130 67 65 72 20 69 6e 20 74 68 65 20 50 34 20 69 6e  ger in the P4 in
11140 74 65 67 65 72 20 61 72 72 61 79 20 69 73 20 74  teger array is t
11150 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65  he length of the
11160 20 61 72 72 61 79 0a 2a 2a 20 61 6e 64 20 64 6f   array.** and do
11170 65 73 20 6e 6f 74 20 62 65 63 6f 6d 65 20 70 61  es not become pa
11180 72 74 20 6f 66 20 74 68 65 20 70 65 72 6d 75 74  rt of the permut
11190 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ation..*/.case O
111a0 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 3a 20 7b  P_Permutation: {
111b0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
111c0 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52  p4type==P4_INTAR
111d0 52 41 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28  RAY );.  assert(
111e0 20 70 4f 70 2d 3e 70 34 2e 61 69 20 29 3b 0a 20   pOp->p4.ai );. 
111f0 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e   assert( pOp[1].
11200 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6d 70 61  opcode==OP_Compa
11210 72 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  re );.  assert( 
11220 70 4f 70 5b 31 5d 2e 70 35 20 26 20 4f 50 46 4c  pOp[1].p5 & OPFL
11230 41 47 5f 50 45 52 4d 55 54 45 20 29 3b 0a 20 20  AG_PERMUTE );.  
11240 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
11250 6f 64 65 3a 20 43 6f 6d 70 61 72 65 20 50 31 20  ode: Compare P1 
11260 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
11270 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 40 50 33  ynopsis: r[P1@P3
11280 5d 20 3c 2d 3e 20 72 5b 50 32 40 50 33 5d 0a 2a  ] <-> r[P2@P3].*
11290 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 77 6f  *.** Compare two
112a0 20 76 65 63 74 6f 72 73 20 6f 66 20 72 65 67 69   vectors of regi
112b0 73 74 65 72 73 20 69 6e 20 72 65 67 28 50 31 29  sters in reg(P1)
112c0 2e 2e 72 65 67 28 50 31 2b 50 33 2d 31 29 20 28  ..reg(P1+P3-1) (
112d0 63 61 6c 6c 20 74 68 69 73 0a 2a 2a 20 76 65 63  call this.** vec
112e0 74 6f 72 20 22 41 22 29 20 61 6e 64 20 69 6e 20  tor "A") and in 
112f0 72 65 67 28 50 32 29 2e 2e 72 65 67 28 50 32 2b  reg(P2)..reg(P2+
11300 50 33 2d 31 29 20 28 22 42 22 29 2e 20 20 53 61  P3-1) ("B").  Sa
11310 76 65 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  ve the result of
11320 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73  .** the comparis
11330 6f 6e 20 66 6f 72 20 75 73 65 20 62 79 20 74 68  on for use by th
11340 65 20 6e 65 78 74 20 4f 50 5f 4a 75 6d 70 20 69  e next OP_Jump i
11350 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 49  nstruct..**.** I
11360 66 20 50 35 20 68 61 73 20 74 68 65 20 4f 50 46  f P5 has the OPF
11370 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20  LAG_PERMUTE bit 
11380 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 6f 72  set, then the or
11390 64 65 72 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  der of compariso
113a0 6e 20 69 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e  n is.** determin
113b0 65 64 20 62 79 20 74 68 65 20 6d 6f 73 74 20 72  ed by the most r
113c0 65 63 65 6e 74 20 4f 50 5f 50 65 72 6d 75 74 61  ecent OP_Permuta
113d0 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 20 20  tion operator.  
113e0 49 66 20 74 68 65 0a 2a 2a 20 4f 50 46 4c 41 47  If the.** OPFLAG
113f0 5f 50 45 52 4d 55 54 45 20 62 69 74 20 69 73 20  _PERMUTE bit is 
11400 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65 67 69  clear, then regi
11410 73 74 65 72 20 61 72 65 20 63 6f 6d 70 61 72 65  ster are compare
11420 64 20 69 6e 20 73 65 71 75 65 6e 74 69 61 6c 0a  d in sequential.
11430 2a 2a 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20  ** order..**.** 
11440 50 34 20 69 73 20 61 20 4b 65 79 49 6e 66 6f 20  P4 is a KeyInfo 
11450 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 64  structure that d
11460 65 66 69 6e 65 73 20 63 6f 6c 6c 61 74 69 6e 67  efines collating
11470 20 73 65 71 75 65 6e 63 65 73 20 61 6e 64 20 73   sequences and s
11480 6f 72 74 0a 2a 2a 20 6f 72 64 65 72 73 20 66 6f  ort.** orders fo
11490 72 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  r the comparison
114a0 2e 20 20 54 68 65 20 70 65 72 6d 75 74 61 74 69  .  The permutati
114b0 6f 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 72 65  on applies to re
114c0 67 69 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e  gisters.** only.
114d0 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 65 6c    The KeyInfo el
114e0 65 6d 65 6e 74 73 20 61 72 65 20 75 73 65 64 20  ements are used 
114f0 73 65 71 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a  sequentially..**
11500 0a 2a 2a 20 54 68 65 20 63 6f 6d 70 61 72 69 73  .** The comparis
11510 6f 6e 20 69 73 20 61 20 73 6f 72 74 20 63 6f 6d  on is a sort com
11520 70 61 72 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c  parison, so NULL
11530 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 2c  s compare equal,
11540 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72 65 20 6c 65  .** NULLs are le
11550 73 73 20 74 68 61 6e 20 6e 75 6d 62 65 72 73 2c  ss than numbers,
11560 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6c 65 73   numbers are les
11570 73 20 74 68 61 6e 20 73 74 72 69 6e 67 73 2c 0a  s than strings,.
11580 2a 2a 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61  ** and strings a
11590 72 65 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f  re less than blo
115a0 62 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  bs..*/.case OP_C
115b0 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 69 6e 74 20  ompare: {.  int 
115c0 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e  n;.  int i;.  in
115d0 74 20 70 31 3b 0a 20 20 69 6e 74 20 70 32 3b 0a  t p1;.  int p2;.
115e0 20 20 63 6f 6e 73 74 20 4b 65 79 49 6e 66 6f 20    const KeyInfo 
115f0 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74  *pKeyInfo;.  int
11600 20 69 64 78 3b 0a 20 20 43 6f 6c 6c 53 65 71 20   idx;.  CollSeq 
11610 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f  *pColl;    /* Co
11620 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
11630 20 74 6f 20 75 73 65 20 6f 6e 20 74 68 69 73 20   to use on this 
11640 74 65 72 6d 20 2a 2f 0a 20 20 69 6e 74 20 62 52  term */.  int bR
11650 65 76 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ev;          /* 
11660 54 72 75 65 20 66 6f 72 20 44 45 53 43 45 4e 44  True for DESCEND
11670 49 4e 47 20 73 6f 72 74 20 6f 72 64 65 72 20 2a  ING sort order *
11680 2f 0a 20 20 69 6e 74 20 2a 61 50 65 72 6d 75 74  /.  int *aPermut
11690 65 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 70 65  e;     /* The pe
116a0 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 0a 20 20  rmutation */..  
116b0 69 66 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f  if( (pOp->p5 & O
116c0 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 29 3d 3d  PFLAG_PERMUTE)==
116d0 30 20 29 7b 0a 20 20 20 20 61 50 65 72 6d 75 74  0 ){.    aPermut
116e0 65 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a  e = 0;.  }else{.
116f0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e      assert( pOp>
11700 61 4f 70 20 29 3b 0a 20 20 20 20 61 73 73 65 72  aOp );.    asser
11710 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64  t( pOp[-1].opcod
11720 65 3d 3d 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f  e==OP_Permutatio
11730 6e 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  n );.    assert(
11740 20 70 4f 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d   pOp[-1].p4type=
11750 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a  =P4_INTARRAY );.
11760 20 20 20 20 61 50 65 72 6d 75 74 65 20 3d 20 70      aPermute = p
11770 4f 70 5b 2d 31 5d 2e 70 34 2e 61 69 20 2b 20 31  Op[-1].p4.ai + 1
11780 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 61 50  ;.    assert( aP
11790 65 72 6d 75 74 65 21 3d 30 20 29 3b 0a 20 20 7d  ermute!=0 );.  }
117a0 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  .  n = pOp->p3;.
117b0 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70    pKeyInfo = pOp
117c0 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20  ->p4.pKeyInfo;. 
117d0 20 61 73 73 65 72 74 28 20 6e 3e 30 20 29 3b 0a   assert( n>0 );.
117e0 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e    assert( pKeyIn
117f0 66 6f 21 3d 30 20 29 3b 0a 20 20 70 31 20 3d 20  fo!=0 );.  p1 = 
11800 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20  pOp->p1;.  p2 = 
11810 70 4f 70 2d 3e 70 32 3b 0a 23 69 66 64 65 66 20  pOp->p2;.#ifdef 
11820 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69  SQLITE_DEBUG.  i
11830 66 28 20 61 50 65 72 6d 75 74 65 20 29 7b 0a 20  f( aPermute ){. 
11840 20 20 20 69 6e 74 20 6b 2c 20 6d 78 20 3d 20 30     int k, mx = 0
11850 3b 0a 20 20 20 20 66 6f 72 28 6b 3d 30 3b 20 6b  ;.    for(k=0; k
11860 3c 6e 3b 20 6b 2b 2b 29 20 69 66 28 20 61 50 65  <n; k++) if( aPe
11870 72 6d 75 74 65 5b 6b 5d 3e 6d 78 20 29 20 6d 78  rmute[k]>mx ) mx
11880 20 3d 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3b 0a   = aPermute[k];.
11890 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 30      assert( p1>0
118a0 20 26 26 20 70 31 2b 6d 78 3c 3d 28 70 2d 3e 6e   && p1+mx<=(p->n
118b0 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
118c0 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20 61 73 73  or)+1 );.    ass
118d0 65 72 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b  ert( p2>0 && p2+
118e0 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  mx<=(p->nMem+1 -
118f0 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29   p->nCursor)+1 )
11900 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
11910 73 73 65 72 74 28 20 70 31 3e 30 20 26 26 20 70  ssert( p1>0 && p
11920 31 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  1+n<=(p->nMem+1 
11930 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  - p->nCursor)+1 
11940 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
11950 32 3e 30 20 26 26 20 70 32 2b 6e 3c 3d 28 70 2d  2>0 && p2+n<=(p-
11960 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
11970 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 0a 23  rsor)+1 );.  }.#
11980 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
11990 44 45 42 55 47 20 2a 2f 0a 20 20 66 6f 72 28 69  DEBUG */.  for(i
119a0 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20  =0; i<n; i++){. 
119b0 20 20 20 69 64 78 20 3d 20 61 50 65 72 6d 75 74     idx = aPermut
119c0 65 20 3f 20 61 50 65 72 6d 75 74 65 5b 69 5d 20  e ? aPermute[i] 
119d0 3a 20 69 3b 0a 20 20 20 20 61 73 73 65 72 74 28  : i;.    assert(
119e0 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65   memIsValid(&aMe
119f0 6d 5b 70 31 2b 69 64 78 5d 29 20 29 3b 0a 20 20  m[p1+idx]) );.  
11a00 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
11a10 61 6c 69 64 28 26 61 4d 65 6d 5b 70 32 2b 69 64  alid(&aMem[p2+id
11a20 78 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53  x]) );.    REGIS
11a30 54 45 52 5f 54 52 41 43 45 28 70 31 2b 69 64 78  TER_TRACE(p1+idx
11a40 2c 20 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29  , &aMem[p1+idx])
11a50 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
11a60 52 41 43 45 28 70 32 2b 69 64 78 2c 20 26 61 4d  RACE(p2+idx, &aM
11a70 65 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a 20 20 20  em[p2+idx]);.   
11a80 20 61 73 73 65 72 74 28 20 69 3c 70 4b 65 79 49   assert( i<pKeyI
11a90 6e 66 6f 2d 3e 6e 4b 65 79 46 69 65 6c 64 20 29  nfo->nKeyField )
11aa0 3b 0a 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70 4b  ;.    pColl = pK
11ab0 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d  eyInfo->aColl[i]
11ac0 3b 0a 20 20 20 20 62 52 65 76 20 3d 20 70 4b 65  ;.    bRev = pKe
11ad0 79 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64 65  yInfo->aSortOrde
11ae0 72 5b 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61  r[i];.    iCompa
11af0 72 65 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43  re = sqlite3MemC
11b00 6f 6d 70 61 72 65 28 26 61 4d 65 6d 5b 70 31 2b  ompare(&aMem[p1+
11b10 69 64 78 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b 69  idx], &aMem[p2+i
11b20 64 78 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20  dx], pColl);.   
11b30 20 69 66 28 20 69 43 6f 6d 70 61 72 65 20 29 7b   if( iCompare ){
11b40 0a 20 20 20 20 20 20 69 66 28 20 62 52 65 76 20  .      if( bRev 
11b50 29 20 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69 43  ) iCompare = -iC
11b60 6f 6d 70 61 72 65 3b 0a 20 20 20 20 20 20 62 72  ompare;.      br
11b70 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  eak;.    }.  }. 
11b80 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
11b90 63 6f 64 65 3a 20 4a 75 6d 70 20 50 31 20 50 32  code: Jump P1 P2
11ba0 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75   P3 * *.**.** Ju
11bb0 6d 70 20 74 6f 20 74 68 65 20 69 6e 73 74 72 75  mp to the instru
11bc0 63 74 69 6f 6e 20 61 74 20 61 64 64 72 65 73 73  ction at address
11bd0 20 50 31 2c 20 50 32 2c 20 6f 72 20 50 33 20 64   P1, P2, or P3 d
11be0 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74  epending on whet
11bf0 68 65 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 6f  her.** in the mo
11c00 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f 6d  st recent OP_Com
11c10 70 61 72 65 20 69 6e 73 74 72 75 63 74 69 6f 6e  pare instruction
11c20 20 74 68 65 20 50 31 20 76 65 63 74 6f 72 20 77   the P1 vector w
11c30 61 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20  as less than.** 
11c40 65 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65  equal to, or gre
11c50 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 50 32  ater than the P2
11c60 20 76 65 63 74 6f 72 2c 20 72 65 73 70 65 63 74   vector, respect
11c70 69 76 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ively..*/.case O
11c80 50 5f 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20 20  P_Jump: {       
11c90 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
11ca0 0a 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3c  .  if( iCompare<
11cb0 30 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61  0 ){.    VdbeBra
11cc0 6e 63 68 54 61 6b 65 6e 28 30 2c 34 29 3b 20 70  nchTaken(0,4); p
11cd0 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70  Op = &aOp[pOp->p
11ce0 31 20 2d 20 31 5d 3b 0a 20 20 7d 65 6c 73 65 20  1 - 1];.  }else 
11cf0 69 66 28 20 69 43 6f 6d 70 61 72 65 3d 3d 30 20  if( iCompare==0 
11d00 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  ){.    VdbeBranc
11d10 68 54 61 6b 65 6e 28 31 2c 34 29 3b 20 70 4f 70  hTaken(1,4); pOp
11d20 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20   = &aOp[pOp->p2 
11d30 2d 20 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  - 1];.  }else{. 
11d40 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
11d50 65 6e 28 32 2c 34 29 3b 20 70 4f 70 20 3d 20 26  en(2,4); pOp = &
11d60 61 4f 70 5b 70 4f 70 2d 3e 70 33 20 2d 20 31 5d  aOp[pOp->p3 - 1]
11d70 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
11d80 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64  ../* Opcode: And
11d90 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
11da0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
11db0 3d 28 72 5b 50 31 5d 20 26 26 20 72 5b 50 32 5d  =(r[P1] && r[P2]
11dc0 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  ).**.** Take the
11dd0 20 6c 6f 67 69 63 61 6c 20 41 4e 44 20 6f 66 20   logical AND of 
11de0 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
11df0 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
11e00 32 20 61 6e 64 0a 2a 2a 20 77 72 69 74 65 20 74  2 and.** write t
11e10 68 65 20 72 65 73 75 6c 74 20 69 6e 74 6f 20 72  he result into r
11e20 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a  egister P3..**.*
11e30 2a 20 49 66 20 65 69 74 68 65 72 20 50 31 20 6f  * If either P1 o
11e40 72 20 50 32 20 69 73 20 30 20 28 66 61 6c 73 65  r P2 is 0 (false
11e50 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  ) then the resul
11e60 74 20 69 73 20 30 20 65 76 65 6e 20 69 66 0a 2a  t is 0 even if.*
11e70 2a 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75  * the other inpu
11e80 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55  t is NULL.  A NU
11e90 4c 4c 20 61 6e 64 20 74 72 75 65 20 6f 72 20 74  LL and true or t
11ea0 77 6f 20 4e 55 4c 4c 73 20 67 69 76 65 0a 2a 2a  wo NULLs give.**
11eb0 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a   a NULL output..
11ec0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 72  */./* Opcode: Or
11ed0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
11ee0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
11ef0 3d 28 72 5b 50 31 5d 20 7c 7c 20 72 5b 50 32 5d  =(r[P1] || r[P2]
11f00 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  ).**.** Take the
11f10 20 6c 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20 74   logical OR of t
11f20 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
11f30 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20  ister P1 and P2 
11f40 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65  and.** store the
11f50 20 61 6e 73 77 65 72 20 69 6e 20 72 65 67 69 73   answer in regis
11f60 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P3..**.** If
11f70 20 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32   either P1 or P2
11f80 20 69 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75   is nonzero (tru
11f90 65 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  e) then the resu
11fa0 6c 74 20 69 73 20 31 20 28 74 72 75 65 29 0a 2a  lt is 1 (true).*
11fb0 2a 20 65 76 65 6e 20 69 66 20 74 68 65 20 6f 74  * even if the ot
11fc0 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
11fd0 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66  L.  A NULL and f
11fe0 61 6c 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c  alse or two NULL
11ff0 73 0a 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c  s.** give a NULL
12000 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65   output..*/.case
12010 20 4f 50 5f 41 6e 64 3a 20 20 20 20 20 20 20 20   OP_And:        
12020 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
12030 20 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e   TK_AND, in1, in
12040 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
12050 4f 50 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20 20  OP_Or: {        
12060 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
12070 54 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c  TK_OR, in1, in2,
12080 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76   out3 */.  int v
12090 31 3b 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 70  1;    /* Left op
120a0 65 72 61 6e 64 3a 20 20 30 3d 3d 46 41 4c 53 45  erand:  0==FALSE
120b0 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e  , 1==TRUE, 2==UN
120c0 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f  KNOWN or NULL */
120d0 0a 20 20 69 6e 74 20 76 32 3b 20 20 20 20 2f 2a  .  int v2;    /*
120e0 20 52 69 67 68 74 20 6f 70 65 72 61 6e 64 3a 20   Right operand: 
120f0 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55  0==FALSE, 1==TRU
12100 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72  E, 2==UNKNOWN or
12110 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 76 31 20 3d   NULL */..  v1 =
12120 20 73 71 6c 69 74 65 33 56 64 62 65 42 6f 6f 6c   sqlite3VdbeBool
12130 65 61 6e 56 61 6c 75 65 28 26 61 4d 65 6d 5b 70  eanValue(&aMem[p
12140 4f 70 2d 3e 70 31 5d 2c 20 32 29 3b 0a 20 20 76  Op->p1], 2);.  v
12150 32 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 42  2 = sqlite3VdbeB
12160 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 26 61 4d 65  ooleanValue(&aMe
12170 6d 5b 70 4f 70 2d 3e 70 32 5d 2c 20 32 29 3b 0a  m[pOp->p2], 2);.
12180 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
12190 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20 20 20  e==OP_And ){.   
121a0 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e   static const un
121b0 73 69 67 6e 65 64 20 63 68 61 72 20 61 6e 64 5f  signed char and_
121c0 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 30  logic[] = { 0, 0
121d0 2c 20 30 2c 20 30 2c 20 31 2c 20 32 2c 20 30 2c  , 0, 0, 1, 2, 0,
121e0 20 32 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20   2, 2 };.    v1 
121f0 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b 76 31 2a 33  = and_logic[v1*3
12200 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  +v2];.  }else{. 
12210 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
12220 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6f 72  unsigned char or
12230 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20  _logic[] = { 0, 
12240 31 2c 20 32 2c 20 31 2c 20 31 2c 20 31 2c 20 32  1, 2, 1, 1, 1, 2
12250 2c 20 31 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31  , 1, 2 };.    v1
12260 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b 76 31 2a 33   = or_logic[v1*3
12270 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  +v2];.  }.  pOut
12280 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
12290 5d 3b 0a 20 20 69 66 28 20 76 31 3d 3d 32 20 29  ];.  if( v1==2 )
122a0 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  {.    MemSetType
122b0 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e  Flag(pOut, MEM_N
122c0 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ull);.  }else{. 
122d0 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76     pOut->u.i = v
122e0 31 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  1;.    MemSetTyp
122f0 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
12300 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  Int);.  }.  brea
12310 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
12320 20 49 73 54 72 75 65 20 50 31 20 50 32 20 50 33   IsTrue P1 P2 P3
12330 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
12340 73 3a 20 72 5b 50 32 5d 20 3d 20 63 6f 61 6c 65  s: r[P2] = coale
12350 73 63 65 28 72 5b 50 31 5d 3d 3d 54 52 55 45 2c  sce(r[P1]==TRUE,
12360 50 33 29 20 5e 20 50 34 0a 2a 2a 0a 2a 2a 20 54  P3) ^ P4.**.** T
12370 68 69 73 20 6f 70 63 6f 64 65 20 69 6d 70 6c 65  his opcode imple
12380 6d 65 6e 74 73 20 74 68 65 20 49 53 20 54 52 55  ments the IS TRU
12390 45 2c 20 49 53 20 46 41 4c 53 45 2c 20 49 53 20  E, IS FALSE, IS 
123a0 4e 4f 54 20 54 52 55 45 2c 20 61 6e 64 0a 2a 2a  NOT TRUE, and.**
123b0 20 49 53 20 4e 4f 54 20 46 41 4c 53 45 20 6f 70   IS NOT FALSE op
123c0 65 72 61 74 6f 72 73 2e 0a 2a 2a 0a 2a 2a 20 49  erators..**.** I
123d0 6e 74 65 72 70 72 65 74 20 74 68 65 20 76 61 6c  nterpret the val
123e0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
123f0 31 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76  1 as a boolean v
12400 61 6c 75 65 2e 20 20 53 74 6f 72 65 20 74 68 61  alue.  Store tha
12410 74 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20 28 61 20  t.** boolean (a 
12420 30 20 6f 72 20 31 29 20 69 6e 20 72 65 67 69 73  0 or 1) in regis
12430 74 65 72 20 50 32 2e 20 20 4f 72 20 69 66 20 74  ter P2.  Or if t
12440 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
12450 73 74 65 72 20 50 31 20 69 73 20 0a 2a 2a 20 4e  ster P1 is .** N
12460 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 50 33  ULL, then the P3
12470 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
12480 67 69 73 74 65 72 20 50 32 2e 20 20 49 6e 76 65  gister P2.  Inve
12490 72 74 20 74 68 65 20 61 6e 73 77 65 72 20 69 66  rt the answer if
124a0 20 50 34 0a 2a 2a 20 69 73 20 31 2e 0a 2a 2a 0a   P4.** is 1..**.
124b0 2a 2a 20 54 68 65 20 6c 6f 67 69 63 20 69 73 20  ** The logic is 
124c0 73 75 6d 6d 61 72 69 7a 65 64 20 6c 69 6b 65 20  summarized like 
124d0 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 3c 75 6c 3e  this:.**.** <ul>
124e0 20 0a 2a 2a 20 3c 6c 69 3e 20 49 66 20 50 33 3d   .** <li> If P3=
124f0 3d 30 20 61 6e 64 20 50 34 3d 3d 30 20 20 74 68  =0 and P4==0  th
12500 65 6e 20 20 72 5b 50 32 5d 20 3a 3d 20 72 5b 50  en  r[P2] := r[P
12510 31 5d 20 49 53 20 54 52 55 45 0a 2a 2a 20 3c 6c  1] IS TRUE.** <l
12520 69 3e 20 49 66 20 50 33 3d 3d 31 20 61 6e 64 20  i> If P3==1 and 
12530 50 34 3d 3d 31 20 20 74 68 65 6e 20 20 72 5b 50  P4==1  then  r[P
12540 32 5d 20 3a 3d 20 72 5b 50 31 5d 20 49 53 20 46  2] := r[P1] IS F
12550 41 4c 53 45 0a 2a 2a 20 3c 6c 69 3e 20 49 66 20  ALSE.** <li> If 
12560 50 33 3d 3d 30 20 61 6e 64 20 50 34 3d 3d 31 20  P3==0 and P4==1 
12570 20 74 68 65 6e 20 20 72 5b 50 32 5d 20 3a 3d 20   then  r[P2] := 
12580 72 5b 50 31 5d 20 49 53 20 4e 4f 54 20 54 52 55  r[P1] IS NOT TRU
12590 45 0a 2a 2a 20 3c 6c 69 3e 20 49 66 20 50 33 3d  E.** <li> If P3=
125a0 3d 31 20 61 6e 64 20 50 34 3d 3d 30 20 20 74 68  =1 and P4==0  th
125b0 65 6e 20 20 72 5b 50 32 5d 20 3a 3d 20 72 5b 50  en  r[P2] := r[P
125c0 31 5d 20 49 53 20 4e 4f 54 20 46 41 4c 53 45 0a  1] IS NOT FALSE.
125d0 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2f 0a 63 61 73 65  ** </ul>.*/.case
125e0 20 4f 50 5f 49 73 54 72 75 65 3a 20 7b 20 20 20   OP_IsTrue: {   
125f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
12600 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73  n1, out2 */.  as
12610 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
12620 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
12630 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
12640 2e 69 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34  .i==0 || pOp->p4
12650 2e 69 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72  .i==1 );.  asser
12660 74 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 7c 7c  t( pOp->p3==0 ||
12670 20 70 4f 70 2d 3e 70 33 3d 3d 31 20 29 3b 0a 20   pOp->p3==1 );. 
12680 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
12690 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f  etInt64(&aMem[pO
126a0 70 2d 3e 70 32 5d 2c 0a 20 20 20 20 20 20 73 71  p->p2],.      sq
126b0 6c 69 74 65 33 56 64 62 65 42 6f 6f 6c 65 61 6e  lite3VdbeBoolean
126c0 56 61 6c 75 65 28 26 61 4d 65 6d 5b 70 4f 70 2d  Value(&aMem[pOp-
126d0 3e 70 31 5d 2c 20 70 4f 70 2d 3e 70 33 29 20 5e  >p1], pOp->p3) ^
126e0 20 70 4f 70 2d 3e 70 34 2e 69 29 3b 0a 20 20 62   pOp->p4.i);.  b
126f0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
12700 64 65 3a 20 4e 6f 74 20 50 31 20 50 32 20 2a 20  de: Not P1 P2 * 
12710 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
12720 20 72 5b 50 32 5d 3d 20 21 72 5b 50 31 5d 0a 2a   r[P2]= !r[P1].*
12730 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
12740 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
12750 73 74 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f  ster P1 as a boo
12760 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f  lean value.  Sto
12770 72 65 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61  re the.** boolea
12780 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 20  n complement in 
12790 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66  register P2.  If
127a0 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
127b0 67 69 73 74 65 72 20 50 31 20 69 73 20 0a 2a 2a  gister P1 is .**
127c0 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 61 20 4e 55   NULL, then a NU
127d0 4c 4c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  LL is stored in 
127e0 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  P2..*/.case OP_N
127f0 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ot: {           
12800 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
12810 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74  TK_NOT, in1, out
12820 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  2 */.  pIn1 = &a
12830 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
12840 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
12850 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p2];.  if( (pI
12860 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
12870 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Null)==0 ){.    
12880 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
12890 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 21 73 71  tInt64(pOut, !sq
128a0 6c 69 74 65 33 56 64 62 65 42 6f 6f 6c 65 61 6e  lite3VdbeBoolean
128b0 56 61 6c 75 65 28 70 49 6e 31 2c 30 29 29 3b 0a  Value(pIn1,0));.
128c0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c    }else{.    sql
128d0 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
128e0 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d 0a 20 20  ll(pOut);.  }.  
128f0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
12900 6f 64 65 3a 20 42 69 74 4e 6f 74 20 50 31 20 50  ode: BitNot P1 P
12910 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
12920 73 69 73 3a 20 72 5b 50 32 5d 3d 20 7e 72 5b 50  sis: r[P2]= ~r[P
12930 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  1].**.** Interpr
12940 65 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  et the content o
12950 66 20 72 65 67 69 73 74 65 72 20 50 31 20 61 73  f register P1 as
12960 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 53 74   an integer.  St
12970 6f 72 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d  ore the.** ones-
12980 63 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74 68  complement of th
12990 65 20 50 31 20 76 61 6c 75 65 20 69 6e 74 6f 20  e P1 value into 
129a0 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66  register P2.  If
129b0 20 50 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e   P1 holds.** a N
129c0 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 61  ULL then store a
129d0 20 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a   NULL in P2..*/.
129e0 63 61 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20  case OP_BitNot: 
129f0 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {             /*
12a00 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e   same as TK_BITN
12a10 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f  OT, in1, out2 */
12a20 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
12a30 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74  pOp->p1];.  pOut
12a40 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
12a50 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  ];.  sqlite3Vdbe
12a60 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29  MemSetNull(pOut)
12a70 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
12a80 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
12a90 3d 3d 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d  ==0 ){.    pOut-
12aa0 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
12ab0 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  ;.    pOut->u.i 
12ac0 3d 20 7e 73 71 6c 69 74 65 33 56 64 62 65 49 6e  = ~sqlite3VdbeIn
12ad0 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20  tValue(pIn1);.  
12ae0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
12af0 20 4f 70 63 6f 64 65 3a 20 4f 6e 63 65 20 50 31   Opcode: Once P1
12b00 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
12b10 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  Fall through to 
12b20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
12b30 74 69 6f 6e 20 74 68 65 20 66 69 72 73 74 20 74  tion the first t
12b40 69 6d 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20  ime this opcode 
12b50 69 73 0a 2a 2a 20 65 6e 63 6f 75 6e 74 65 72 65  is.** encountere
12b60 64 20 6f 6e 20 65 61 63 68 20 69 6e 76 6f 63 61  d on each invoca
12b70 74 69 6f 6e 20 6f 66 20 74 68 65 20 62 79 74 65  tion of the byte
12b80 2d 63 6f 64 65 20 70 72 6f 67 72 61 6d 2e 20 20  -code program.  
12b90 4a 75 6d 70 20 74 6f 20 50 32 0a 2a 2a 20 6f 6e  Jump to P2.** on
12ba0 20 74 68 65 20 73 65 63 6f 6e 64 20 61 6e 64 20   the second and 
12bb0 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20 65  all subsequent e
12bc0 6e 63 6f 75 6e 74 65 72 73 20 64 75 72 69 6e 67  ncounters during
12bd0 20 74 68 65 20 73 61 6d 65 20 69 6e 76 6f 63 61   the same invoca
12be0 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 6f 70 2d  tion..**.** Top-
12bf0 6c 65 76 65 6c 20 70 72 6f 67 72 61 6d 73 20 64  level programs d
12c00 65 74 65 72 6d 69 6e 65 20 66 69 72 73 74 20 69  etermine first i
12c10 6e 76 6f 63 61 74 69 6f 6e 20 62 79 20 63 6f 6d  nvocation by com
12c20 70 61 72 69 6e 67 20 74 68 65 20 50 31 0a 2a 2a  paring the P1.**
12c30 20 6f 70 65 72 61 6e 64 20 61 67 61 69 6e 73 74   operand against
12c40 20 74 68 65 20 50 31 20 6f 70 65 72 61 6e 64 20   the P1 operand 
12c50 6f 6e 20 74 68 65 20 4f 50 5f 49 6e 69 74 20 6f  on the OP_Init o
12c60 70 63 6f 64 65 20 61 74 20 74 68 65 20 62 65 67  pcode at the beg
12c70 69 6e 6e 69 6e 67 0a 2a 2a 20 6f 66 20 74 68 65  inning.** of the
12c80 20 70 72 6f 67 72 61 6d 2e 20 20 49 66 20 74 68   program.  If th
12c90 65 20 50 31 20 76 61 6c 75 65 73 20 64 69 66 66  e P1 values diff
12ca0 65 72 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  er, then fall th
12cb0 72 6f 75 67 68 20 61 6e 64 20 6d 61 6b 65 0a 2a  rough and make.*
12cc0 2a 20 74 68 65 20 50 31 20 6f 66 20 74 68 69 73  * the P1 of this
12cd0 20 6f 70 63 6f 64 65 20 65 71 75 61 6c 20 74 6f   opcode equal to
12ce0 20 74 68 65 20 50 31 20 6f 66 20 4f 50 5f 49 6e   the P1 of OP_In
12cf0 69 74 2e 20 20 49 66 20 50 31 20 76 61 6c 75 65  it.  If P1 value
12d00 73 20 61 72 65 0a 2a 2a 20 74 68 65 20 73 61 6d  s are.** the sam
12d10 65 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20  e then take the 
12d20 6a 75 6d 70 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20  jump..**.** For 
12d30 73 75 62 70 72 6f 67 72 61 6d 73 2c 20 74 68 65  subprograms, the
12d40 72 65 20 69 73 20 61 20 62 69 74 6d 61 73 6b 20  re is a bitmask 
12d50 69 6e 20 74 68 65 20 56 64 62 65 46 72 61 6d 65  in the VdbeFrame
12d60 20 74 68 61 74 20 64 65 74 65 72 6d 69 6e 65 73   that determines
12d70 0a 2a 2a 20 77 68 65 74 68 65 72 20 6f 72 20 6e  .** whether or n
12d80 6f 74 20 74 68 65 20 6a 75 6d 70 20 73 68 6f 75  ot the jump shou
12d90 6c 64 20 62 65 20 74 61 6b 65 6e 2e 20 20 54 68  ld be taken.  Th
12da0 65 20 62 69 74 6d 61 73 6b 20 69 73 20 6e 65 63  e bitmask is nec
12db0 65 73 73 61 72 79 0a 2a 2a 20 62 65 63 61 75 73  essary.** becaus
12dc0 65 20 74 68 65 20 73 65 6c 66 2d 61 6c 74 65 72  e the self-alter
12dd0 69 6e 67 20 63 6f 64 65 20 74 72 69 63 6b 20 64  ing code trick d
12de0 6f 65 73 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 72  oes not work for
12df0 20 72 65 63 75 72 73 69 76 65 0a 2a 2a 20 74 72   recursive.** tr
12e00 69 67 67 65 72 73 2e 0a 2a 2f 0a 63 61 73 65 20  iggers..*/.case 
12e10 4f 50 5f 4f 6e 63 65 3a 20 7b 20 20 20 20 20 20  OP_Once: {      
12e20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
12e30 2f 0a 20 20 75 33 32 20 69 41 64 64 72 3b 20 20  /.  u32 iAddr;  
12e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
12e50 20 41 64 64 72 65 73 73 20 6f 66 20 74 68 69 73   Address of this
12e60 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 2a 2f 0a   instruction */.
12e70 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 4f 70    assert( p->aOp
12e80 5b 30 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  [0].opcode==OP_I
12e90 6e 69 74 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e  nit );.  if( p->
12ea0 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 69 41  pFrame ){.    iA
12eb0 64 64 72 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  ddr = (int)(pOp 
12ec0 2d 20 70 2d 3e 61 4f 70 29 3b 0a 20 20 20 20 69  - p->aOp);.    i
12ed0 66 28 20 28 70 2d 3e 70 46 72 61 6d 65 2d 3e 61  f( (p->pFrame->a
12ee0 4f 6e 63 65 5b 69 41 64 64 72 2f 38 5d 20 26 20  Once[iAddr/8] & 
12ef0 28 31 3c 3c 28 69 41 64 64 72 20 26 20 37 29 29  (1<<(iAddr & 7))
12f00 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 56 64  )!=0 ){.      Vd
12f10 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c  beBranchTaken(1,
12f20 20 32 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20   2);.      goto 
12f30 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20  jump_to_p2;.    
12f40 7d 0a 20 20 20 20 70 2d 3e 70 46 72 61 6d 65 2d  }.    p->pFrame-
12f50 3e 61 4f 6e 63 65 5b 69 41 64 64 72 2f 38 5d 20  >aOnce[iAddr/8] 
12f60 7c 3d 20 31 3c 3c 28 69 41 64 64 72 20 26 20 37  |= 1<<(iAddr & 7
12f70 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
12f80 69 66 28 20 70 2d 3e 61 4f 70 5b 30 5d 2e 70 31  if( p->aOp[0].p1
12f90 3d 3d 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20  ==pOp->p1 ){.   
12fa0 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
12fb0 65 6e 28 31 2c 20 32 29 3b 0a 20 20 20 20 20 20  en(1, 2);.      
12fc0 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
12fd0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 56 64 62  .    }.  }.  Vdb
12fe0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c 20  eBranchTaken(0, 
12ff0 32 29 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d 20  2);.  pOp->p1 = 
13000 70 2d 3e 61 4f 70 5b 30 5d 2e 70 31 3b 0a 20 20  p->aOp[0].p1;.  
13010 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
13020 6f 64 65 3a 20 49 66 20 50 31 20 50 32 20 50 33  ode: If P1 P2 P3
13030 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
13040 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
13050 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
13060 31 20 69 73 20 74 72 75 65 2e 20 20 54 68 65 20  1 is true.  The 
13070 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73  value.** is cons
13080 69 64 65 72 65 64 20 74 72 75 65 20 69 66 20 69  idered true if i
13090 74 20 69 73 20 6e 75 6d 65 72 69 63 20 61 6e 64  t is numeric and
130a0 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 49 66 20 74   non-zero.  If t
130b0 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50  he value.** in P
130c0 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74  1 is NULL then t
130d0 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20  ake the jump if 
130e0 61 6e 64 20 6f 6e 6c 79 20 69 66 20 50 33 20 69  and only if P3 i
130f0 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 63  s non-zero..*/.c
13100 61 73 65 20 4f 50 5f 49 66 3a 20 20 7b 20 20 20  ase OP_If:  {   
13110 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
13120 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e  ump, in1 */.  in
13130 74 20 63 3b 0a 20 20 63 20 3d 20 73 71 6c 69 74  t c;.  c = sqlit
13140 65 33 56 64 62 65 42 6f 6f 6c 65 61 6e 56 61 6c  e3VdbeBooleanVal
13150 75 65 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  ue(&aMem[pOp->p1
13160 5d 2c 20 70 4f 70 2d 3e 70 33 29 3b 0a 20 20 56  ], pOp->p3);.  V
13170 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 63  dbeBranchTaken(c
13180 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 63  !=0, 2);.  if( c
13190 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
131a0 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  p2;.  break;.}..
131b0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74  /* Opcode: IfNot
131c0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
131d0 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  .** Jump to P2 i
131e0 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
131f0 65 67 69 73 74 65 72 20 50 31 20 69 73 20 46 61  egister P1 is Fa
13200 6c 73 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a  lse.  The value.
13210 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  ** is considered
13220 20 66 61 6c 73 65 20 69 66 20 69 74 20 68 61 73   false if it has
13230 20 61 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65   a numeric value
13240 20 6f 66 20 7a 65 72 6f 2e 20 20 49 66 20 74 68   of zero.  If th
13250 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31  e value.** in P1
13260 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61   is NULL then ta
13270 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61  ke the jump if a
13280 6e 64 20 6f 6e 6c 79 20 69 66 20 50 33 20 69 73  nd only if P3 is
13290 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 63 61   non-zero..*/.ca
132a0 73 65 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b 20 20  se OP_IfNot: {  
132b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
132c0 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20  p, in1 */.  int 
132d0 63 3b 0a 20 20 63 20 3d 20 21 73 71 6c 69 74 65  c;.  c = !sqlite
132e0 33 56 64 62 65 42 6f 6f 6c 65 61 6e 56 61 6c 75  3VdbeBooleanValu
132f0 65 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  e(&aMem[pOp->p1]
13300 2c 20 21 70 4f 70 2d 3e 70 33 29 3b 0a 20 20 56  , !pOp->p3);.  V
13310 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 63  dbeBranchTaken(c
13320 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 63  !=0, 2);.  if( c
13330 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
13340 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  p2;.  break;.}..
13350 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 4e 75 6c  /* Opcode: IsNul
13360 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  l P1 P2 * * *.**
13370 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b   Synopsis: if r[
13380 50 31 5d 3d 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50  P1]==NULL goto P
13390 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  2.**.** Jump to 
133a0 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20  P2 if the value 
133b0 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
133c0 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
133d0 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20 20  OP_IsNull: {    
133e0 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
133f0 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75  as TK_ISNULL, ju
13400 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
13410 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
13420 31 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68  1];.  VdbeBranch
13430 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c  Taken( (pIn1->fl
13440 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21  ags & MEM_Null)!
13450 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28 70  =0, 2);.  if( (p
13460 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
13470 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20  _Null)!=0 ){.   
13480 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
13490 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
134a0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  ../* Opcode: Not
134b0 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a  Null P1 P2 * * *
134c0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
134d0 20 72 5b 50 31 5d 21 3d 4e 55 4c 4c 20 67 6f 74   r[P1]!=NULL got
134e0 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20  o P2.**.** Jump 
134f0 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
13500 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
13510 31 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20  1 is not NULL.  
13520 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 4e  .*/.case OP_NotN
13530 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ull: {          
13540 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
13550 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69  NOTNULL, jump, i
13560 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
13570 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
13580 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
13590 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
135a0 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 2c 20 32   MEM_Null)==0, 2
135b0 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
135c0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
135d0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f  )==0 ){.    goto
135e0 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
135f0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
13600 4f 70 63 6f 64 65 3a 20 49 66 4e 75 6c 6c 52 6f  Opcode: IfNullRo
13610 77 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  w P1 P2 P3 * *.*
13620 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 50  * Synopsis: if P
13630 31 2e 6e 75 6c 6c 52 6f 77 20 74 68 65 6e 20 72  1.nullRow then r
13640 5b 50 33 5d 3d 4e 55 4c 4c 2c 20 67 6f 74 6f 20  [P3]=NULL, goto 
13650 50 32 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74  P2.**.** Check t
13660 68 65 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20  he cursor P1 to 
13670 73 65 65 20 69 66 20 69 74 20 69 73 20 63 75 72  see if it is cur
13680 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20  rently pointing 
13690 61 74 20 61 20 4e 55 4c 4c 20 72 6f 77 2e 0a 2a  at a NULL row..*
136a0 2a 20 49 66 20 69 74 20 69 73 2c 20 74 68 65 6e  * If it is, then
136b0 20 73 65 74 20 72 65 67 69 73 74 65 72 20 50 33   set register P3
136c0 20 74 6f 20 4e 55 4c 4c 20 61 6e 64 20 6a 75 6d   to NULL and jum
136d0 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
136e0 20 50 32 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73   P2..** If P1 is
136f0 20 6e 6f 74 20 6f 6e 20 61 20 4e 55 4c 4c 20 72   not on a NULL r
13700 6f 77 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  ow, then fall th
13710 72 6f 75 67 68 20 77 69 74 68 6f 75 74 20 6d 61  rough without ma
13720 6b 69 6e 67 20 61 6e 79 0a 2a 2a 20 63 68 61 6e  king any.** chan
13730 67 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ges..*/.case OP_
13740 49 66 4e 75 6c 6c 52 6f 77 3a 20 7b 20 20 20 20  IfNullRow: {    
13750 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
13760 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
13770 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
13780 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
13790 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72  assert( p->apCsr
137a0 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a  [pOp->p1]!=0 );.
137b0 20 20 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 70    if( p->apCsr[p
137c0 4f 70 2d 3e 70 31 5d 2d 3e 6e 75 6c 6c 52 6f 77  Op->p1]->nullRow
137d0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
137e0 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 61 4d  dbeMemSetNull(aM
137f0 65 6d 20 2b 20 70 4f 70 2d 3e 70 33 29 3b 0a 20  em + pOp->p3);. 
13800 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
13810 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
13820 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .}..#ifdef SQLIT
13830 45 5f 45 4e 41 42 4c 45 5f 4f 46 46 53 45 54 5f  E_ENABLE_OFFSET_
13840 53 51 4c 5f 46 55 4e 43 0a 2f 2a 20 4f 70 63 6f  SQL_FUNC./* Opco
13850 64 65 3a 20 4f 66 66 73 65 74 20 50 31 20 50 32  de: Offset P1 P2
13860 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
13870 73 69 73 3a 20 72 5b 50 33 5d 20 3d 20 73 71 6c  sis: r[P3] = sql
13880 69 74 65 5f 6f 66 66 73 65 74 28 50 31 29 0a 2a  ite_offset(P1).*
13890 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72 65  *.** Store in re
138a0 67 69 73 74 65 72 20 72 5b 50 33 5d 20 74 68 65  gister r[P3] the
138b0 20 62 79 74 65 20 6f 66 66 73 65 74 20 69 6e 74   byte offset int
138c0 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  o the database f
138d0 69 6c 65 20 74 68 61 74 20 69 73 20 74 68 65 0a  ile that is the.
138e0 2a 2a 20 73 74 61 72 74 20 6f 66 20 74 68 65 20  ** start of the 
138f0 70 61 79 6c 6f 61 64 20 66 6f 72 20 74 68 65 20  payload for the 
13900 72 65 63 6f 72 64 20 61 74 20 77 68 69 63 68 20  record at which 
13910 74 68 61 74 20 63 75 72 73 6f 72 20 50 31 20 69  that cursor P1 i
13920 73 20 63 75 72 72 65 6e 74 6c 79 0a 2a 2a 20 70  s currently.** p
13930 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 50  ointing..**.** P
13940 32 20 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  2 is the column 
13950 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20 61  number for the a
13960 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 73  rgument to the s
13970 71 6c 69 74 65 5f 6f 66 66 73 65 74 28 29 20 66  qlite_offset() f
13980 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 20 54 68 69 73  unction..** This
13990 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 6e 6f 74   opcode does not
139a0 20 75 73 65 20 50 32 20 69 74 73 65 6c 66 2c 20   use P2 itself, 
139b0 62 75 74 20 74 68 65 20 50 32 20 76 61 6c 75 65  but the P2 value
139c0 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65 0a   is used by the.
139d0 2a 2a 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f  ** code generato
139e0 72 2e 20 20 54 68 65 20 50 31 2c 20 50 32 2c 20  r.  The P1, P2, 
139f0 61 6e 64 20 50 33 20 6f 70 65 72 61 6e 64 73 20  and P3 operands 
13a00 74 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20 61  to this opcode a
13a10 72 65 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61  re the.** same a
13a20 73 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 2e  s for OP_Column.
13a30 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
13a40 64 65 20 69 73 20 6f 6e 6c 79 20 61 76 61 69 6c  de is only avail
13a50 61 62 6c 65 20 69 66 20 53 51 4c 69 74 65 20 69  able if SQLite i
13a60 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20  s compiled with 
13a70 74 68 65 0a 2a 2a 20 2d 44 53 51 4c 49 54 45 5f  the.** -DSQLITE_
13a80 45 4e 41 42 4c 45 5f 4f 46 46 53 45 54 5f 53 51  ENABLE_OFFSET_SQ
13a90 4c 5f 46 55 4e 43 20 6f 70 74 69 6f 6e 2e 0a 2a  L_FUNC option..*
13aa0 2f 0a 63 61 73 65 20 4f 50 5f 4f 66 66 73 65 74  /.case OP_Offset
13ab0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  : {          /* 
13ac0 6f 75 74 33 20 2a 2f 0a 20 20 56 64 62 65 43 75  out3 */.  VdbeCu
13ad0 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20  rsor *pC;    /* 
13ae0 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20  The VDBE cursor 
13af0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
13b00 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
13b10 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
13b20 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
13b30 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75  [pOp->p1];.  pOu
13b40 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  t = &p->aMem[pOp
13b50 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 4e 45 56  ->p3];.  if( NEV
13b60 45 52 28 70 43 3d 3d 30 29 20 7c 7c 20 70 43 2d  ER(pC==0) || pC-
13b70 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52 54 59  >eCurType!=CURTY
13b80 50 45 5f 42 54 52 45 45 20 29 7b 0a 20 20 20 20  PE_BTREE ){.    
13b90 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
13ba0 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d  tNull(pOut);.  }
13bb0 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65  else{.    sqlite
13bc0 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
13bd0 28 70 4f 75 74 2c 20 73 71 6c 69 74 65 33 42 74  (pOut, sqlite3Bt
13be0 72 65 65 4f 66 66 73 65 74 28 70 43 2d 3e 75 63  reeOffset(pC->uc
13bf0 2e 70 43 75 72 73 6f 72 29 29 3b 0a 20 20 7d 0a  .pCursor));.  }.
13c00 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
13c10 66 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42  f /* SQLITE_ENAB
13c20 4c 45 5f 4f 46 46 53 45 54 5f 53 51 4c 5f 46 55  LE_OFFSET_SQL_FU
13c30 4e 43 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  NC */../* Opcode
13c40 3a 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50  : Column P1 P2 P
13c50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
13c60 73 69 73 3a 20 72 5b 50 33 5d 3d 50 58 0a 2a 2a  sis: r[P3]=PX.**
13c70 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68  .** Interpret th
13c80 65 20 64 61 74 61 20 74 68 61 74 20 63 75 72 73  e data that curs
13c90 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 20  or P1 points to 
13ca0 61 73 20 61 20 73 74 72 75 63 74 75 72 65 20 62  as a structure b
13cb0 75 69 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 74 68  uilt using.** th
13cc0 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73  e MakeRecord ins
13cd0 74 72 75 63 74 69 6f 6e 2e 20 20 28 53 65 65 20  truction.  (See 
13ce0 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 6f  the MakeRecord o
13cf0 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
13d00 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74  onal.** informat
13d10 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 66 6f  ion about the fo
13d20 72 6d 61 74 20 6f 66 20 74 68 65 20 64 61 74 61  rmat of the data
13d30 2e 29 20 20 45 78 74 72 61 63 74 20 74 68 65 20  .)  Extract the 
13d40 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a 20  P2-th column.** 
13d50 66 72 6f 6d 20 74 68 69 73 20 72 65 63 6f 72 64  from this record
13d60 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20  .  If there are 
13d70 6c 65 73 73 20 74 68 61 74 20 28 50 32 2b 31 29  less that (P2+1)
13d80 20 0a 2a 2a 20 76 61 6c 75 65 73 20 69 6e 20 74   .** values in t
13d90 68 65 20 72 65 63 6f 72 64 2c 20 65 78 74 72 61  he record, extra
13da0 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  ct a NULL..**.**
13db0 20 54 68 65 20 76 61 6c 75 65 20 65 78 74 72 61   The value extra
13dc0 63 74 65 64 20 69 73 20 73 74 6f 72 65 64 20 69  cted is stored i
13dd0 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
13de0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 72 65 63 6f  *.** If the reco
13df0 72 64 20 63 6f 6e 74 61 69 6e 73 20 66 65 77 65  rd contains fewe
13e00 72 20 74 68 61 6e 20 50 32 20 66 69 65 6c 64 73  r than P2 fields
13e10 2c 20 74 68 65 6e 20 65 78 74 72 61 63 74 20 61  , then extract a
13e20 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20 69   NULL.  Or,.** i
13e30 66 20 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e  f the P4 argumen
13e40 74 20 69 73 20 61 20 50 34 5f 4d 45 4d 20 75 73  t is a P4_MEM us
13e50 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  e the value of t
13e60 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20 61  he P4 argument a
13e70 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 2e  s.** the result.
13e80 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
13e90 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45 20  FLAG_CLEARCACHE 
13ea0 62 69 74 20 69 73 20 73 65 74 20 6f 6e 20 50 35  bit is set on P5
13eb0 20 61 6e 64 20 50 31 20 69 73 20 61 20 70 73 65   and P1 is a pse
13ec0 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72  udo-table cursor
13ed0 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63 61  ,.** then the ca
13ee0 63 68 65 20 6f 66 20 74 68 65 20 63 75 72 73 6f  che of the curso
13ef0 72 20 69 73 20 72 65 73 65 74 20 70 72 69 6f 72  r is reset prior
13f00 20 74 6f 20 65 78 74 72 61 63 74 69 6e 67 20 74   to extracting t
13f10 68 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 54 68  he column..** Th
13f20 65 20 66 69 72 73 74 20 4f 50 5f 43 6f 6c 75 6d  e first OP_Colum
13f30 6e 20 61 67 61 69 6e 73 74 20 61 20 70 73 65 75  n against a pseu
13f40 64 6f 2d 74 61 62 6c 65 20 61 66 74 65 72 20 74  do-table after t
13f50 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
13f60 63 6f 6e 74 65 6e 74 0a 2a 2a 20 72 65 67 69 73  content.** regis
13f70 74 65 72 20 68 61 73 20 63 68 61 6e 67 65 64 20  ter has changed 
13f80 73 68 6f 75 6c 64 20 68 61 76 65 20 74 68 69 73  should have this
13f90 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20   bit set..**.** 
13fa0 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 45  If the OPFLAG_LE
13fb0 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c  NGTHARG and OPFL
13fc0 41 47 5f 54 59 50 45 4f 46 41 52 47 20 62 69 74  AG_TYPEOFARG bit
13fd0 73 20 61 72 65 20 73 65 74 20 6f 6e 20 50 35 20  s are set on P5 
13fe0 74 68 65 6e 0a 2a 2a 20 74 68 65 20 72 65 73 75  then.** the resu
13ff0 6c 74 20 69 73 20 67 75 61 72 61 6e 74 65 65 64  lt is guaranteed
14000 20 74 6f 20 6f 6e 6c 79 20 62 65 20 75 73 65 64   to only be used
14010 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74   as the argument
14020 20 6f 66 20 61 20 6c 65 6e 67 74 68 28 29 0a 2a   of a length().*
14030 2a 20 6f 72 20 74 79 70 65 6f 66 28 29 20 66 75  * or typeof() fu
14040 6e 63 74 69 6f 6e 2c 20 72 65 73 70 65 63 74 69  nction, respecti
14050 76 65 6c 79 2e 20 20 54 68 65 20 6c 6f 61 64 69  vely.  The loadi
14060 6e 67 20 6f 66 20 6c 61 72 67 65 20 62 6c 6f 62  ng of large blob
14070 73 20 63 61 6e 20 62 65 0a 2a 2a 20 73 6b 69 70  s can be.** skip
14080 70 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29  ped for length()
14090 20 61 6e 64 20 61 6c 6c 20 63 6f 6e 74 65 6e 74   and all content
140a0 20 6c 6f 61 64 69 6e 67 20 63 61 6e 20 62 65 20   loading can be 
140b0 73 6b 69 70 70 65 64 20 66 6f 72 20 74 79 70 65  skipped for type
140c0 6f 66 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  of()..*/.case OP
140d0 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 69 6e 74  _Column: {.  int
140e0 20 70 32 3b 20 20 20 20 20 20 20 20 20 20 20 20   p2;            
140f0 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  /* column number
14100 20 74 6f 20 72 65 74 72 69 65 76 65 20 2a 2f 0a   to retrieve */.
14110 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
14120 3b 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45  ;    /* The VDBE
14130 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 42 74 43   cursor */.  BtC
14140 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 20 20 20  ursor *pCrsr;   
14150 2f 2a 20 54 68 65 20 42 54 72 65 65 20 63 75 72  /* The BTree cur
14160 73 6f 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f  sor */.  u32 *aO
14170 66 66 73 65 74 3b 20 20 20 20 20 20 2f 2a 20 61  ffset;      /* a
14180 4f 66 66 73 65 74 5b 69 5d 20 69 73 20 6f 66 66  Offset[i] is off
14190 73 65 74 20 74 6f 20 73 74 61 72 74 20 6f 66 20  set to start of 
141a0 64 61 74 61 20 66 6f 72 20 69 2d 74 68 20 63 6f  data for i-th co
141b0 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6c 65  lumn */.  int le
141c0 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
141d0 54 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68  The length of th
141e0 65 20 73 65 72 69 61 6c 69 7a 65 64 20 64 61 74  e serialized dat
141f0 61 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  a for the column
14200 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20   */.  int i;    
14210 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70           /* Loop
14220 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4d 65   counter */.  Me
14230 6d 20 2a 70 44 65 73 74 3b 20 20 20 20 20 20 20  m *pDest;       
14240 20 2f 2a 20 57 68 65 72 65 20 74 6f 20 77 72 69   /* Where to wri
14250 74 65 20 74 68 65 20 65 78 74 72 61 63 74 65 64  te the extracted
14260 20 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20   value */.  Mem 
14270 73 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f  sMem;          /
14280 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68  * For storing th
14290 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64  e record being d
142a0 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73  ecoded */.  cons
142b0 74 20 75 38 20 2a 7a 44 61 74 61 3b 20 20 20 2f  t u8 *zData;   /
142c0 2a 20 50 61 72 74 20 6f 66 20 74 68 65 20 72 65  * Part of the re
142d0 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64  cord being decod
142e0 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38  ed */.  const u8
142f0 20 2a 7a 48 64 72 3b 20 20 20 20 2f 2a 20 4e 65   *zHdr;    /* Ne
14300 78 74 20 75 6e 70 61 72 73 65 64 20 62 79 74 65  xt unparsed byte
14310 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 2a   of the header *
14320 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 45  /.  const u8 *zE
14330 6e 64 48 64 72 3b 20 2f 2a 20 50 6f 69 6e 74 65  ndHdr; /* Pointe
14340 72 20 74 6f 20 66 69 72 73 74 20 62 79 74 65 20  r to first byte 
14350 61 66 74 65 72 20 74 68 65 20 68 65 61 64 65 72  after the header
14360 20 2a 2f 0a 20 20 75 36 34 20 6f 66 66 73 65 74   */.  u64 offset
14370 36 34 3b 20 20 20 20 20 20 2f 2a 20 36 34 2d 62  64;      /* 64-b
14380 69 74 20 6f 66 66 73 65 74 20 2a 2f 0a 20 20 75  it offset */.  u
14390 33 32 20 74 3b 20 20 20 20 20 20 20 20 20 20 20  32 t;           
143a0 20 20 2f 2a 20 41 20 74 79 70 65 20 63 6f 64 65    /* A type code
143b0 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64   from the record
143c0 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 4d 65 6d   header */.  Mem
143d0 20 2a 70 52 65 67 3b 20 20 20 20 20 20 20 20 20   *pReg;         
143e0 2f 2a 20 50 73 65 75 64 6f 54 61 62 6c 65 20 69  /* PseudoTable i
143f0 6e 70 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f  nput register */
14400 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ..  pC = p->apCs
14410 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 32  r[pOp->p1];.  p2
14420 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 0a 20 20 2f   = pOp->p2;..  /
14430 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20  * If the cursor 
14440 63 61 63 68 65 20 69 73 20 73 74 61 6c 65 20 28  cache is stale (
14450 6d 65 61 6e 69 6e 67 20 69 74 20 69 73 20 6e 6f  meaning it is no
14460 74 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  t currently poin
14470 74 20 61 74 0a 20 20 2a 2a 20 74 68 65 20 63 6f  t at.  ** the co
14480 72 72 65 63 74 20 72 6f 77 29 20 74 68 65 6e 20  rrect row) then 
14490 62 72 69 6e 67 20 69 74 20 75 70 2d 74 6f 2d 64  bring it up-to-d
144a0 61 74 65 20 62 79 20 64 6f 69 6e 67 20 74 68 65  ate by doing the
144b0 20 6e 65 63 65 73 73 61 72 79 20 0a 20 20 2a 2a   necessary .  **
144c0 20 42 2d 54 72 65 65 20 73 65 65 6b 2e 20 2a 2f   B-Tree seek. */
144d0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
144e0 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
144f0 26 70 43 2c 20 26 70 32 29 3b 0a 20 20 69 66 28  &pC, &p2);.  if(
14500 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
14510 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a  _due_to_error;..
14520 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
14530 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
14540 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
14550 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 44  nCursor) );.  pD
14560 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  est = &aMem[pOp-
14570 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p3];.  memAbout
14580 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73  ToChange(p, pDes
14590 74 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  t);.  assert( pO
145a0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
145b0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
145c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
145d0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
145e0 32 3c 70 43 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a  2<pC->nField );.
145f0 20 20 61 4f 66 66 73 65 74 20 3d 20 70 43 2d 3e    aOffset = pC->
14600 61 4f 66 66 73 65 74 3b 0a 20 20 61 73 73 65 72  aOffset;.  asser
14610 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21  t( pC->eCurType!
14620 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20 29 3b  =CURTYPE_VTAB );
14630 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
14640 43 75 72 54 79 70 65 21 3d 43 55 52 54 59 50 45  CurType!=CURTYPE
14650 5f 50 53 45 55 44 4f 20 7c 7c 20 70 43 2d 3e 6e  _PSEUDO || pC->n
14660 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 61 73 73 65  ullRow );.  asse
14670 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
14680 21 3d 43 55 52 54 59 50 45 5f 53 4f 52 54 45 52  !=CURTYPE_SORTER
14690 20 29 3b 0a 0a 20 20 69 66 28 20 70 43 2d 3e 63   );..  if( pC->c
146a0 61 63 68 65 53 74 61 74 75 73 21 3d 70 2d 3e 63  acheStatus!=p->c
146b0 61 63 68 65 43 74 72 20 29 7b 20 20 20 20 20 20  acheCtr ){      
146c0 20 20 20 20 20 20 20 20 20 20 2f 2a 4f 50 54 49            /*OPTI
146d0 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53  MIZATION-IF-FALS
146e0 45 2a 2f 0a 20 20 20 20 69 66 28 20 70 43 2d 3e  E*/.    if( pC->
146f0 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20  nullRow ){.     
14700 20 69 66 28 20 70 43 2d 3e 65 43 75 72 54 79 70   if( pC->eCurTyp
14710 65 3d 3d 43 55 52 54 59 50 45 5f 50 53 45 55 44  e==CURTYPE_PSEUD
14720 4f 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  O ){.        /* 
14730 46 6f 72 20 74 68 65 20 73 70 65 63 69 61 6c 20  For the special 
14740 63 61 73 65 20 6f 66 20 61 73 20 70 73 65 75 64  case of as pseud
14750 6f 2d 63 75 72 73 6f 72 2c 20 74 68 65 20 73 65  o-cursor, the se
14760 65 6b 52 65 73 75 6c 74 20 66 69 65 6c 64 0a 20  ekResult field. 
14770 20 20 20 20 20 20 20 2a 2a 20 69 64 65 6e 74 69         ** identi
14780 66 69 65 73 20 74 68 65 20 72 65 67 69 73 74 65  fies the registe
14790 72 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65  r that holds the
147a0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 20 20 20   record */.     
147b0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 73     assert( pC->s
147c0 65 65 6b 52 65 73 75 6c 74 3e 30 20 29 3b 0a 20  eekResult>0 );. 
147d0 20 20 20 20 20 20 20 70 52 65 67 20 3d 20 26 61         pReg = &a
147e0 4d 65 6d 5b 70 43 2d 3e 73 65 65 6b 52 65 73 75  Mem[pC->seekResu
147f0 6c 74 5d 3b 0a 20 20 20 20 20 20 20 20 61 73 73  lt];.        ass
14800 65 72 74 28 20 70 52 65 67 2d 3e 66 6c 61 67 73  ert( pReg->flags
14810 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20   & MEM_Blob );. 
14820 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d         assert( m
14830 65 6d 49 73 56 61 6c 69 64 28 70 52 65 67 29 20  emIsValid(pReg) 
14840 29 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 70  );.        pC->p
14850 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d  ayloadSize = pC-
14860 3e 73 7a 52 6f 77 20 3d 20 70 52 65 67 2d 3e 6e  >szRow = pReg->n
14870 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52  ;.        pC->aR
14880 6f 77 20 3d 20 28 75 38 2a 29 70 52 65 67 2d 3e  ow = (u8*)pReg->
14890 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  z;.      }else{.
148a0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
148b0 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44  dbeMemSetNull(pD
148c0 65 73 74 29 3b 0a 20 20 20 20 20 20 20 20 67 6f  est);.        go
148d0 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  to op_column_out
148e0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
148f0 6c 73 65 7b 0a 20 20 20 20 20 20 70 43 72 73 72  lse{.      pCrsr
14900 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f   = pC->uc.pCurso
14910 72 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  r;.      assert(
14920 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
14930 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
14940 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43        assert( pC
14950 72 73 72 20 29 3b 0a 20 20 20 20 20 20 61 73 73  rsr );.      ass
14960 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
14970 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70  eCursorIsValid(p
14980 43 72 73 72 29 20 29 3b 0a 20 20 20 20 20 20 70  Crsr) );.      p
14990 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d  C->payloadSize =
149a0 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 79   sqlite3BtreePay
149b0 6c 6f 61 64 53 69 7a 65 28 70 43 72 73 72 29 3b  loadSize(pCrsr);
149c0 0a 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20  .      pC->aRow 
149d0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61  = sqlite3BtreePa
149e0 79 6c 6f 61 64 46 65 74 63 68 28 70 43 72 73 72  yloadFetch(pCrsr
149f0 2c 20 26 70 43 2d 3e 73 7a 52 6f 77 29 3b 0a 20  , &pC->szRow);. 
14a00 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d       assert( pC-
14a10 3e 73 7a 52 6f 77 3c 3d 70 43 2d 3e 70 61 79 6c  >szRow<=pC->payl
14a20 6f 61 64 53 69 7a 65 20 29 3b 0a 20 20 20 20 20  oadSize );.     
14a30 20 61 73 73 65 72 74 28 20 70 43 2d 3e 73 7a 52   assert( pC->szR
14a40 6f 77 3c 3d 36 35 35 33 36 20 29 3b 20 20 2f 2a  ow<=65536 );  /*
14a50 20 4d 61 78 69 6d 75 6d 20 70 61 67 65 20 73 69   Maximum page si
14a60 7a 65 20 69 73 20 36 34 4b 69 42 20 2a 2f 0a 20  ze is 64KiB */. 
14a70 20 20 20 20 20 69 66 28 20 70 43 2d 3e 70 61 79       if( pC->pay
14a80 6c 6f 61 64 53 69 7a 65 20 3e 20 28 75 33 32 29  loadSize > (u32)
14a90 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
14aa0 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
14ab0 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  ){.        goto 
14ac0 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 20 20 7d  too_big;.      }
14ad0 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 63  .    }.    pC->c
14ae0 61 63 68 65 53 74 61 74 75 73 20 3d 20 70 2d 3e  acheStatus = p->
14af0 63 61 63 68 65 43 74 72 3b 0a 20 20 20 20 70 43  cacheCtr;.    pC
14b00 2d 3e 69 48 64 72 4f 66 66 73 65 74 20 3d 20 67  ->iHdrOffset = g
14b10 65 74 56 61 72 69 6e 74 33 32 28 70 43 2d 3e 61  etVarint32(pC->a
14b20 52 6f 77 2c 20 61 4f 66 66 73 65 74 5b 30 5d 29  Row, aOffset[0])
14b30 3b 0a 20 20 20 20 70 43 2d 3e 6e 48 64 72 50 61  ;.    pC->nHdrPa
14b40 72 73 65 64 20 3d 20 30 3b 0a 0a 0a 20 20 20 20  rsed = 0;...    
14b50 69 66 28 20 70 43 2d 3e 73 7a 52 6f 77 3c 61 4f  if( pC->szRow<aO
14b60 66 66 73 65 74 5b 30 5d 20 29 7b 20 20 20 20 20  ffset[0] ){     
14b70 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d   /*OPTIMIZATION-
14b80 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20 20  IF-FALSE*/.     
14b90 20 2f 2a 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65   /* pC->aRow doe
14ba0 73 20 6e 6f 74 20 68 61 76 65 20 74 6f 20 68 6f  s not have to ho
14bb0 6c 64 20 74 68 65 20 65 6e 74 69 72 65 20 72 6f  ld the entire ro
14bc0 77 2c 20 62 75 74 20 69 74 20 64 6f 65 73 20 61  w, but it does a
14bd0 74 20 6c 65 61 73 74 0a 20 20 20 20 20 20 2a 2a  t least.      **
14be0 20 6e 65 65 64 20 74 6f 20 63 6f 76 65 72 20 74   need to cover t
14bf0 68 65 20 68 65 61 64 65 72 20 6f 66 20 74 68 65  he header of the
14c00 20 72 65 63 6f 72 64 2e 20 20 49 66 20 70 43 2d   record.  If pC-
14c10 3e 61 52 6f 77 20 64 6f 65 73 20 6e 6f 74 20 63  >aRow does not c
14c20 6f 6e 74 61 69 6e 0a 20 20 20 20 20 20 2a 2a 20  ontain.      ** 
14c30 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 68 65 61  the complete hea
14c40 64 65 72 2c 20 74 68 65 6e 20 73 65 74 20 69 74  der, then set it
14c50 20 74 6f 20 7a 65 72 6f 2c 20 66 6f 72 63 69 6e   to zero, forcin
14c60 67 20 74 68 65 20 68 65 61 64 65 72 20 74 6f 20  g the header to 
14c70 62 65 0a 20 20 20 20 20 20 2a 2a 20 64 79 6e 61  be.      ** dyna
14c80 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65  mically allocate
14c90 64 2e 20 2a 2f 0a 20 20 20 20 20 20 70 43 2d 3e  d. */.      pC->
14ca0 61 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20 20  aRow = 0;.      
14cb0 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 30 3b 0a 0a  pC->szRow = 0;..
14cc0 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75        /* Make su
14cd0 72 65 20 61 20 63 6f 72 72 75 70 74 20 64 61 74  re a corrupt dat
14ce0 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20 67 69  abase has not gi
14cf0 76 65 6e 20 75 73 20 61 6e 20 6f 76 65 72 73 69  ven us an oversi
14d00 7a 65 20 68 65 61 64 65 72 2e 0a 20 20 20 20 20  ze header..     
14d10 20 2a 2a 20 44 6f 20 74 68 69 73 20 6e 6f 77 20   ** Do this now 
14d20 74 6f 20 61 76 6f 69 64 20 61 6e 20 6f 76 65 72  to avoid an over
14d30 73 69 7a 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  size memory allo
14d40 63 61 74 69 6f 6e 2e 0a 20 20 20 20 20 20 2a 2a  cation..      **
14d50 0a 20 20 20 20 20 20 2a 2a 20 54 79 70 65 20 65  .      ** Type e
14d60 6e 74 72 69 65 73 20 63 61 6e 20 62 65 20 62 65  ntries can be be
14d70 74 77 65 65 6e 20 31 20 61 6e 64 20 35 20 62 79  tween 1 and 5 by
14d80 74 65 73 20 65 61 63 68 2e 20 20 42 75 74 20 34  tes each.  But 4
14d90 20 61 6e 64 20 35 20 62 79 74 65 0a 20 20 20 20   and 5 byte.    
14da0 20 20 2a 2a 20 74 79 70 65 73 20 75 73 65 20 73    ** types use s
14db0 6f 20 6d 75 63 68 20 64 61 74 61 20 73 70 61 63  o much data spac
14dc0 65 20 74 68 61 74 20 74 68 65 72 65 20 63 61 6e  e that there can
14dd0 20 6f 6e 6c 79 20 62 65 20 34 30 39 36 20 61 6e   only be 4096 an
14de0 64 20 33 32 20 6f 66 0a 20 20 20 20 20 20 2a 2a  d 32 of.      **
14df0 20 74 68 65 6d 2c 20 72 65 73 70 65 63 74 69 76   them, respectiv
14e00 65 6c 79 2e 20 20 53 6f 20 74 68 65 20 6d 61 78  ely.  So the max
14e10 69 6d 75 6d 20 68 65 61 64 65 72 20 6c 65 6e 67  imum header leng
14e20 74 68 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20  th results from 
14e30 61 0a 20 20 20 20 20 20 2a 2a 20 33 2d 62 79 74  a.      ** 3-byt
14e40 65 20 74 79 70 65 20 66 6f 72 20 65 61 63 68 20  e type for each 
14e50 6f 66 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f  of the maximum o
14e60 66 20 33 32 37 36 38 20 63 6f 6c 75 6d 6e 73 20  f 32768 columns 
14e70 70 6c 75 73 20 74 68 72 65 65 0a 20 20 20 20 20  plus three.     
14e80 20 2a 2a 20 65 78 74 72 61 20 62 79 74 65 73 20   ** extra bytes 
14e90 66 6f 72 20 74 68 65 20 68 65 61 64 65 72 20 6c  for the header l
14ea0 65 6e 67 74 68 20 69 74 73 65 6c 66 2e 20 20 33  ength itself.  3
14eb0 32 37 36 38 2a 33 20 2b 20 33 20 3d 20 39 38 33  2768*3 + 3 = 983
14ec0 30 37 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  07..      */.   
14ed0 20 20 20 69 66 28 20 61 4f 66 66 73 65 74 5b 30     if( aOffset[0
14ee0 5d 20 3e 20 39 38 33 30 37 20 7c 7c 20 61 4f 66  ] > 98307 || aOf
14ef0 66 73 65 74 5b 30 5d 20 3e 20 70 43 2d 3e 70 61  fset[0] > pC->pa
14f00 79 6c 6f 61 64 53 69 7a 65 20 29 7b 0a 20 20 20  yloadSize ){.   
14f10 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
14f20 75 6d 6e 5f 63 6f 72 72 75 70 74 3b 0a 20 20 20  umn_corrupt;.   
14f30 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
14f40 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73        /* This is
14f50 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e   an optimization
14f60 2e 20 20 42 79 20 73 6b 69 70 70 69 6e 67 20 6f  .  By skipping o
14f70 76 65 72 20 74 68 65 20 66 69 72 73 74 20 66 65  ver the first fe
14f80 77 20 74 65 73 74 73 0a 20 20 20 20 20 20 2a 2a  w tests.      **
14f90 20 28 65 78 3a 20 70 43 2d 3e 6e 48 64 72 50 61   (ex: pC->nHdrPa
14fa0 72 73 65 64 3c 3d 70 32 29 20 69 6e 20 74 68 65  rsed<=p2) in the
14fb0 20 6e 65 78 74 20 73 65 63 74 69 6f 6e 2c 20 77   next section, w
14fc0 65 20 61 63 68 69 65 76 65 20 61 0a 20 20 20 20  e achieve a.    
14fd0 20 20 2a 2a 20 6d 65 61 73 75 72 61 62 6c 65 20    ** measurable 
14fe0 70 65 72 66 6f 72 6d 61 6e 63 65 20 67 61 69 6e  performance gain
14ff0 2e 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20  ..      **.     
15000 20 2a 2a 20 54 68 69 73 20 62 72 61 6e 63 68 20   ** This branch 
15010 69 73 20 74 61 6b 65 6e 20 65 76 65 6e 20 69 66  is taken even if
15020 20 61 4f 66 66 73 65 74 5b 30 5d 3d 3d 30 2e 20   aOffset[0]==0. 
15030 20 53 75 63 68 20 61 20 72 65 63 6f 72 64 20 69   Such a record i
15040 73 20 6e 65 76 65 72 0a 20 20 20 20 20 20 2a 2a  s never.      **
15050 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 53 51   generated by SQ
15060 4c 69 74 65 2c 20 61 6e 64 20 63 6f 75 6c 64 20  Lite, and could 
15070 62 65 20 63 6f 6e 73 69 64 65 72 65 64 20 63 6f  be considered co
15080 72 72 75 70 74 69 6f 6e 2c 20 62 75 74 20 77 65  rruption, but we
15090 0a 20 20 20 20 20 20 2a 2a 20 61 63 63 65 70 74  .      ** accept
150a0 20 69 74 20 66 6f 72 20 68 69 73 74 6f 72 69 63   it for historic
150b0 61 6c 20 72 65 61 73 6f 6e 73 2e 20 20 57 68 65  al reasons.  Whe
150c0 6e 20 61 4f 66 66 73 65 74 5b 30 5d 3d 3d 30 2c  n aOffset[0]==0,
150d0 20 74 68 65 20 63 6f 64 65 20 74 68 69 73 0a 20   the code this. 
150e0 20 20 20 20 20 2a 2a 20 62 72 61 6e 63 68 20 6a       ** branch j
150f0 75 6d 70 73 20 74 6f 20 72 65 61 64 73 20 70 61  umps to reads pa
15100 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  st the end of th
15110 65 20 72 65 63 6f 72 64 2c 20 62 75 74 20 6e 65  e record, but ne
15120 76 65 72 20 6d 6f 72 65 0a 20 20 20 20 20 20 2a  ver more.      *
15130 2a 20 74 68 61 6e 20 61 20 66 65 77 20 62 79 74  * than a few byt
15140 65 73 2e 20 20 45 76 65 6e 20 69 66 20 74 68 65  es.  Even if the
15150 20 72 65 63 6f 72 64 20 6f 63 63 75 72 73 20 61   record occurs a
15160 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
15170 20 70 61 67 65 0a 20 20 20 20 20 20 2a 2a 20 63   page.      ** c
15180 6f 6e 74 65 6e 74 20 61 72 65 61 2c 20 74 68 65  ontent area, the
15190 20 22 70 61 67 65 20 68 65 61 64 65 72 22 20 63   "page header" c
151a0 6f 6d 65 73 20 61 66 74 65 72 20 74 68 65 20 70  omes after the p
151b0 61 67 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20  age content and 
151c0 73 6f 0a 20 20 20 20 20 20 2a 2a 20 74 68 69 73  so.      ** this
151d0 20 6f 76 65 72 72 65 61 64 20 69 73 20 68 61 72   overread is har
151e0 6d 6c 65 73 73 2e 20 20 53 69 6d 69 6c 61 72 20  mless.  Similar 
151f0 6f 76 65 72 72 65 61 64 73 20 63 61 6e 20 6f 63  overreads can oc
15200 63 75 72 20 66 6f 72 20 61 20 63 6f 72 72 75 70  cur for a corrup
15210 74 0a 20 20 20 20 20 20 2a 2a 20 64 61 74 61 62  t.      ** datab
15220 61 73 65 20 66 69 6c 65 2e 0a 20 20 20 20 20 20  ase file..      
15230 2a 2f 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d  */.      zData =
15240 20 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 20   pC->aRow;.     
15250 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 48 64   assert( pC->nHd
15260 72 50 61 72 73 65 64 3c 3d 70 32 20 29 3b 20 20  rParsed<=p2 );  
15270 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 64 69 74         /* Condit
15280 69 6f 6e 61 6c 20 73 6b 69 70 70 65 64 20 2a 2f  ional skipped */
15290 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
152a0 20 61 4f 66 66 73 65 74 5b 30 5d 3d 3d 30 20 29   aOffset[0]==0 )
152b0 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f  ;.      goto op_
152c0 63 6f 6c 75 6d 6e 5f 72 65 61 64 5f 68 65 61 64  column_read_head
152d0 65 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20  er;.    }.  }.. 
152e0 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 74   /* Make sure at
152f0 20 6c 65 61 73 74 20 74 68 65 20 66 69 72 73 74   least the first
15300 20 70 32 2b 31 20 65 6e 74 72 69 65 73 20 6f 66   p2+1 entries of
15310 20 74 68 65 20 68 65 61 64 65 72 20 68 61 76 65   the header have
15320 20 62 65 65 6e 0a 20 20 2a 2a 20 70 61 72 73 65   been.  ** parse
15330 64 20 61 6e 64 20 76 61 6c 69 64 20 69 6e 66 6f  d and valid info
15340 72 6d 61 74 69 6f 6e 20 69 73 20 69 6e 20 61 4f  rmation is in aO
15350 66 66 73 65 74 5b 5d 20 61 6e 64 20 70 43 2d 3e  ffset[] and pC->
15360 61 54 79 70 65 5b 5d 2e 0a 20 20 2a 2f 0a 20 20  aType[]..  */.  
15370 69 66 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73  if( pC->nHdrPars
15380 65 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20 2f 2a  ed<=p2 ){.    /*
15390 20 49 66 20 74 68 65 72 65 20 69 73 20 6d 6f 72   If there is mor
153a0 65 20 68 65 61 64 65 72 20 61 76 61 69 6c 61 62  e header availab
153b0 6c 65 20 66 6f 72 20 70 61 72 73 69 6e 67 20 69  le for parsing i
153c0 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20 74 72  n the record, tr
153d0 79 0a 20 20 20 20 2a 2a 20 74 6f 20 65 78 74 72  y.    ** to extr
153e0 61 63 74 20 61 64 64 69 74 69 6f 6e 61 6c 20 66  act additional f
153f0 69 65 6c 64 73 20 75 70 20 74 68 72 6f 75 67 68  ields up through
15400 20 74 68 65 20 70 32 2b 31 2d 74 68 20 66 69 65   the p2+1-th fie
15410 6c 64 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  ld .    */.    i
15420 66 28 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65  f( pC->iHdrOffse
15430 74 3c 61 4f 66 66 73 65 74 5b 30 5d 20 29 7b 0a  t<aOffset[0] ){.
15440 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75        /* Make su
15450 72 65 20 7a 44 61 74 61 20 70 6f 69 6e 74 73 20  re zData points 
15460 74 6f 20 65 6e 6f 75 67 68 20 6f 66 20 74 68 65  to enough of the
15470 20 72 65 63 6f 72 64 20 74 6f 20 63 6f 76 65 72   record to cover
15480 20 74 68 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a   the header. */.
15490 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52        if( pC->aR
154a0 6f 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ow==0 ){.       
154b0 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30   memset(&sMem, 0
154c0 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b  , sizeof(sMem));
154d0 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
154e0 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d  lite3VdbeMemFrom
154f0 42 74 72 65 65 28 70 43 2d 3e 75 63 2e 70 43 75  Btree(pC->uc.pCu
15500 72 73 6f 72 2c 20 30 2c 20 61 4f 66 66 73 65 74  rsor, 0, aOffset
15510 5b 30 5d 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20  [0], &sMem);.   
15520 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
15530 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
15540 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
15550 3b 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20  ;.        zData 
15560 3d 20 28 75 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20  = (u8*)sMem.z;. 
15570 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
15580 20 20 20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e      zData = pC->
15590 61 52 6f 77 3b 0a 20 20 20 20 20 20 7d 0a 20 20  aRow;.      }.  
155a0 0a 20 20 20 20 20 20 2f 2a 20 46 69 6c 6c 20 69  .      /* Fill i
155b0 6e 20 70 43 2d 3e 61 54 79 70 65 5b 69 5d 20 61  n pC->aType[i] a
155c0 6e 64 20 61 4f 66 66 73 65 74 5b 69 5d 20 76 61  nd aOffset[i] va
155d0 6c 75 65 73 20 74 68 72 6f 75 67 68 20 74 68 65  lues through the
155e0 20 70 32 2d 74 68 20 66 69 65 6c 64 2e 20 2a 2f   p2-th field. */
155f0 0a 20 20 20 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72  .    op_column_r
15600 65 61 64 5f 68 65 61 64 65 72 3a 0a 20 20 20 20  ead_header:.    
15610 20 20 69 20 3d 20 70 43 2d 3e 6e 48 64 72 50 61    i = pC->nHdrPa
15620 72 73 65 64 3b 0a 20 20 20 20 20 20 6f 66 66 73  rsed;.      offs
15630 65 74 36 34 20 3d 20 61 4f 66 66 73 65 74 5b 69  et64 = aOffset[i
15640 5d 3b 0a 20 20 20 20 20 20 7a 48 64 72 20 3d 20  ];.      zHdr = 
15650 7a 44 61 74 61 20 2b 20 70 43 2d 3e 69 48 64 72  zData + pC->iHdr
15660 4f 66 66 73 65 74 3b 0a 20 20 20 20 20 20 7a 45  Offset;.      zE
15670 6e 64 48 64 72 20 3d 20 7a 44 61 74 61 20 2b 20  ndHdr = zData + 
15680 61 4f 66 66 73 65 74 5b 30 5d 3b 0a 20 20 20 20  aOffset[0];.    
15690 20 20 74 65 73 74 63 61 73 65 28 20 7a 48 64 72    testcase( zHdr
156a0 3e 3d 7a 45 6e 64 48 64 72 20 29 3b 0a 20 20 20  >=zEndHdr );.   
156b0 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20 69     do{.        i
156c0 66 28 20 28 74 20 3d 20 7a 48 64 72 5b 30 5d 29  f( (t = zHdr[0])
156d0 3c 30 78 38 30 20 29 7b 0a 20 20 20 20 20 20 20  <0x80 ){.       
156e0 20 20 20 7a 48 64 72 2b 2b 3b 0a 20 20 20 20 20     zHdr++;.     
156f0 20 20 20 20 20 6f 66 66 73 65 74 36 34 20 2b 3d       offset64 +=
15700 20 73 71 6c 69 74 65 33 56 64 62 65 4f 6e 65 42   sqlite3VdbeOneB
15710 79 74 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e  yteSerialTypeLen
15720 28 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  (t);.        }el
15730 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 7a 48  se{.          zH
15740 64 72 20 2b 3d 20 73 71 6c 69 74 65 33 47 65 74  dr += sqlite3Get
15750 56 61 72 69 6e 74 33 32 28 7a 48 64 72 2c 20 26  Varint32(zHdr, &
15760 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6f 66  t);.          of
15770 66 73 65 74 36 34 20 2b 3d 20 73 71 6c 69 74 65  fset64 += sqlite
15780 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c  3VdbeSerialTypeL
15790 65 6e 28 74 29 3b 0a 20 20 20 20 20 20 20 20 7d  en(t);.        }
157a0 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 54 79  .        pC->aTy
157b0 70 65 5b 69 2b 2b 5d 20 3d 20 74 3b 0a 20 20 20  pe[i++] = t;.   
157c0 20 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20       aOffset[i] 
157d0 3d 20 28 75 33 32 29 28 6f 66 66 73 65 74 36 34  = (u32)(offset64
157e0 20 26 20 30 78 66 66 66 66 66 66 66 66 29 3b 0a   & 0xffffffff);.
157f0 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20 69 3c        }while( i<
15800 3d 70 32 20 26 26 20 7a 48 64 72 3c 7a 45 6e 64  =p2 && zHdr<zEnd
15810 48 64 72 20 29 3b 0a 0a 20 20 20 20 20 20 2f 2a  Hdr );..      /*
15820 20 54 68 65 20 72 65 63 6f 72 64 20 69 73 20 63   The record is c
15830 6f 72 72 75 70 74 20 69 66 20 61 6e 79 20 6f 66  orrupt if any of
15840 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   the following a
15850 72 65 20 74 72 75 65 3a 0a 20 20 20 20 20 20 2a  re true:.      *
15860 2a 20 28 31 29 20 74 68 65 20 62 79 74 65 73 20  * (1) the bytes 
15870 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 65 78  of the header ex
15880 74 65 6e 64 20 70 61 73 74 20 74 68 65 20 64 65  tend past the de
15890 63 6c 61 72 65 64 20 68 65 61 64 65 72 20 73 69  clared header si
158a0 7a 65 0a 20 20 20 20 20 20 2a 2a 20 28 32 29 20  ze.      ** (2) 
158b0 74 68 65 20 65 6e 74 69 72 65 20 68 65 61 64 65  the entire heade
158c0 72 20 77 61 73 20 75 73 65 64 20 62 75 74 20 6e  r was used but n
158d0 6f 74 20 61 6c 6c 20 64 61 74 61 20 77 61 73 20  ot all data was 
158e0 75 73 65 64 0a 20 20 20 20 20 20 2a 2a 20 28 33  used.      ** (3
158f0 29 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  ) the end of the
15900 20 64 61 74 61 20 65 78 74 65 6e 64 73 20 62 65   data extends be
15910 79 6f 6e 64 20 74 68 65 20 65 6e 64 20 6f 66 20  yond the end of 
15920 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 20 20  the record..    
15930 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28    */.      if( (
15940 7a 48 64 72 3e 3d 7a 45 6e 64 48 64 72 20 26 26  zHdr>=zEndHdr &&
15950 20 28 7a 48 64 72 3e 7a 45 6e 64 48 64 72 20 7c   (zHdr>zEndHdr |
15960 7c 20 6f 66 66 73 65 74 36 34 21 3d 70 43 2d 3e  | offset64!=pC->
15970 70 61 79 6c 6f 61 64 53 69 7a 65 29 29 0a 20 20  payloadSize)).  
15980 20 20 20 20 20 7c 7c 20 28 6f 66 66 73 65 74 36       || (offset6
15990 34 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53  4 > pC->payloadS
159a0 69 7a 65 29 0a 20 20 20 20 20 20 29 7b 0a 20 20  ize).      ){.  
159b0 20 20 20 20 20 20 69 66 28 20 61 4f 66 66 73 65        if( aOffse
159c0 74 5b 30 5d 3d 3d 30 20 29 7b 0a 20 20 20 20 20  t[0]==0 ){.     
159d0 20 20 20 20 20 69 20 3d 20 30 3b 0a 20 20 20 20       i = 0;.    
159e0 20 20 20 20 20 20 7a 48 64 72 20 3d 20 7a 45 6e        zHdr = zEn
159f0 64 48 64 72 3b 0a 20 20 20 20 20 20 20 20 7d 65  dHdr;.        }e
15a00 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 69  lse{.          i
15a10 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29  f( pC->aRow==0 )
15a20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
15a30 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20  elease(&sMem);. 
15a40 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70           goto op
15a50 5f 63 6f 6c 75 6d 6e 5f 63 6f 72 72 75 70 74 3b  _column_corrupt;
15a60 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
15a70 20 7d 0a 0a 20 20 20 20 20 20 70 43 2d 3e 6e 48   }..      pC->nH
15a80 64 72 50 61 72 73 65 64 20 3d 20 69 3b 0a 20 20  drParsed = i;.  
15a90 20 20 20 20 70 43 2d 3e 69 48 64 72 4f 66 66 73      pC->iHdrOffs
15aa0 65 74 20 3d 20 28 75 33 32 29 28 7a 48 64 72 20  et = (u32)(zHdr 
15ab0 2d 20 7a 44 61 74 61 29 3b 0a 20 20 20 20 20 20  - zData);.      
15ac0 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20  if( pC->aRow==0 
15ad0 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ) sqlite3VdbeMem
15ae0 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a  Release(&sMem);.
15af0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
15b00 20 74 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 0a 20   t = 0;.    }.. 
15b10 20 20 20 2f 2a 20 49 66 20 61 66 74 65 72 20 74     /* If after t
15b20 72 79 69 6e 67 20 74 6f 20 65 78 74 72 61 63 74  rying to extract
15b30 20 6e 65 77 20 65 6e 74 72 69 65 73 20 66 72 6f   new entries fro
15b40 6d 20 74 68 65 20 68 65 61 64 65 72 2c 20 6e 48  m the header, nH
15b50 64 72 50 61 72 73 65 64 20 69 73 0a 20 20 20 20  drParsed is.    
15b60 2a 2a 20 73 74 69 6c 6c 20 6e 6f 74 20 75 70 20  ** still not up 
15b70 74 6f 20 70 32 2c 20 74 68 61 74 20 6d 65 61 6e  to p2, that mean
15b80 73 20 74 68 61 74 20 74 68 65 20 72 65 63 6f 72  s that the recor
15b90 64 20 68 61 73 20 66 65 77 65 72 20 74 68 61 6e  d has fewer than
15ba0 20 70 32 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d   p2.    ** colum
15bb0 6e 73 2e 20 20 53 6f 20 74 68 65 20 72 65 73 75  ns.  So the resu
15bc0 6c 74 20 77 69 6c 6c 20 62 65 20 65 69 74 68 65  lt will be eithe
15bd0 72 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61  r the default va
15be0 6c 75 65 20 6f 72 20 61 20 4e 55 4c 4c 2e 0a 20  lue or a NULL.. 
15bf0 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 43     */.    if( pC
15c00 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32  ->nHdrParsed<=p2
15c10 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f   ){.      if( pO
15c20 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45  p->p4type==P4_ME
15c30 4d 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  M ){.        sql
15c40 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
15c50 6f 77 43 6f 70 79 28 70 44 65 73 74 2c 20 70 4f  owCopy(pDest, pO
15c60 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f  p->p4.pMem, MEM_
15c70 53 74 61 74 69 63 29 3b 0a 20 20 20 20 20 20 7d  Static);.      }
15c80 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71  else{.        sq
15c90 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
15ca0 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20  ull(pDest);.    
15cb0 20 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f    }.      goto o
15cc0 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20  p_column_out;.  
15cd0 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
15ce0 20 74 20 3d 20 70 43 2d 3e 61 54 79 70 65 5b 70   t = pC->aType[p
15cf0 32 5d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 45 78  2];.  }..  /* Ex
15d00 74 72 61 63 74 20 74 68 65 20 63 6f 6e 74 65 6e  tract the conten
15d10 74 20 66 6f 72 20 74 68 65 20 70 32 2b 31 2d 74  t for the p2+1-t
15d20 68 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f 6e 74 72  h column.  Contr
15d30 6f 6c 20 63 61 6e 20 6f 6e 6c 79 0a 20 20 2a 2a  ol can only.  **
15d40 20 72 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e   reach this poin
15d50 74 20 69 66 20 61 4f 66 66 73 65 74 5b 70 32 5d  t if aOffset[p2]
15d60 2c 20 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d 2c  , aOffset[p2+1],
15d70 20 61 6e 64 20 70 43 2d 3e 61 54 79 70 65 5b 70   and pC->aType[p
15d80 32 5d 20 61 72 65 0a 20 20 2a 2a 20 61 6c 6c 20  2] are.  ** all 
15d90 76 61 6c 69 64 2e 0a 20 20 2a 2f 0a 20 20 61 73  valid..  */.  as
15da0 73 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e 48 64  sert( p2<pC->nHd
15db0 72 50 61 72 73 65 64 20 29 3b 0a 20 20 61 73 73  rParsed );.  ass
15dc0 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
15dd0 4f 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  OK );.  assert( 
15de0 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
15df0 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 70 44  MemInvariants(pD
15e00 65 73 74 29 20 29 3b 0a 20 20 69 66 28 20 56 64  est) );.  if( Vd
15e10 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 44 65  beMemDynamic(pDe
15e20 73 74 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  st) ){.    sqlit
15e30 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
15e40 28 70 44 65 73 74 29 3b 0a 20 20 7d 0a 20 20 61  (pDest);.  }.  a
15e50 73 73 65 72 74 28 20 74 3d 3d 70 43 2d 3e 61 54  ssert( t==pC->aT
15e60 79 70 65 5b 70 32 5d 20 29 3b 0a 20 20 69 66 28  ype[p2] );.  if(
15e70 20 70 43 2d 3e 73 7a 52 6f 77 3e 3d 61 4f 66 66   pC->szRow>=aOff
15e80 73 65 74 5b 70 32 2b 31 5d 20 29 7b 0a 20 20 20  set[p2+1] ){.   
15e90 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65 20   /* This is the 
15ea0 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 68 65 72  common case wher
15eb0 65 20 74 68 65 20 64 65 73 69 72 65 64 20 63 6f  e the desired co
15ec0 6e 74 65 6e 74 20 66 69 74 73 20 6f 6e 20 74 68  ntent fits on th
15ed0 65 20 6f 72 69 67 69 6e 61 6c 0a 20 20 20 20 2a  e original.    *
15ee0 2a 20 70 61 67 65 20 2d 20 77 68 65 72 65 20 74  * page - where t
15ef0 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 20 6e 6f  he content is no
15f00 74 20 6f 6e 20 61 6e 20 6f 76 65 72 66 6c 6f 77  t on an overflow
15f10 20 70 61 67 65 20 2a 2f 0a 20 20 20 20 7a 44 61   page */.    zDa
15f20 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77 20 2b 20  ta = pC->aRow + 
15f30 61 4f 66 66 73 65 74 5b 70 32 5d 3b 0a 20 20 20  aOffset[p2];.   
15f40 20 69 66 28 20 74 3c 31 32 20 29 7b 0a 20 20 20   if( t<12 ){.   
15f50 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
15f60 72 69 61 6c 47 65 74 28 7a 44 61 74 61 2c 20 74  rialGet(zData, t
15f70 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 65  , pDest);.    }e
15f80 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66  lse{.      /* If
15f90 20 74 68 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75   the column valu
15fa0 65 20 69 73 20 61 20 73 74 72 69 6e 67 2c 20 77  e is a string, w
15fb0 65 20 6e 65 65 64 20 61 20 70 65 72 73 69 73 74  e need a persist
15fc0 65 6e 74 20 76 61 6c 75 65 2c 20 6e 6f 74 0a 20  ent value, not. 
15fd0 20 20 20 20 20 2a 2a 20 61 20 4d 45 4d 5f 45 70       ** a MEM_Ep
15fe0 68 65 6d 20 76 61 6c 75 65 2e 20 20 54 68 69 73  hem value.  This
15ff0 20 62 72 61 6e 63 68 20 69 73 20 61 20 66 61 73   branch is a fas
16000 74 20 73 68 6f 72 74 2d 63 75 74 20 74 68 61 74  t short-cut that
16010 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74 0a 20   is equivalent. 
16020 20 20 20 20 20 2a 2a 20 74 6f 20 63 61 6c 6c 69       ** to calli
16030 6e 67 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  ng sqlite3VdbeSe
16040 72 69 61 6c 47 65 74 28 29 20 61 6e 64 20 73 71  rialGet() and sq
16050 6c 69 74 65 33 56 64 62 65 44 65 65 70 68 65 6d  lite3VdbeDeephem
16060 65 72 61 6c 69 7a 65 28 29 2e 0a 20 20 20 20 20  eralize()..     
16070 20 2a 2f 0a 20 20 20 20 20 20 73 74 61 74 69 63   */.      static
16080 20 63 6f 6e 73 74 20 75 31 36 20 61 46 6c 61 67   const u16 aFlag
16090 5b 5d 20 3d 20 7b 20 4d 45 4d 5f 42 6c 6f 62 2c  [] = { MEM_Blob,
160a0 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 54 65 72   MEM_Str|MEM_Ter
160b0 6d 20 7d 3b 0a 20 20 20 20 20 20 70 44 65 73 74  m };.      pDest
160c0 2d 3e 6e 20 3d 20 6c 65 6e 20 3d 20 28 74 2d 31  ->n = len = (t-1
160d0 32 29 2f 32 3b 0a 20 20 20 20 20 20 70 44 65 73  2)/2;.      pDes
160e0 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e  t->enc = encodin
160f0 67 3b 0a 20 20 20 20 20 20 69 66 28 20 70 44 65  g;.      if( pDe
16100 73 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3c 20 6c  st->szMalloc < l
16110 65 6e 2b 32 20 29 7b 0a 20 20 20 20 20 20 20 20  en+2 ){.        
16120 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 3d 20 4d  pDest->flags = M
16130 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 20  EM_Null;.       
16140 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
16150 4d 65 6d 47 72 6f 77 28 70 44 65 73 74 2c 20 6c  MemGrow(pDest, l
16160 65 6e 2b 32 2c 20 30 29 20 29 20 67 6f 74 6f 20  en+2, 0) ) goto 
16170 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 65  no_mem;.      }e
16180 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 44 65  lse{.        pDe
16190 73 74 2d 3e 7a 20 3d 20 70 44 65 73 74 2d 3e 7a  st->z = pDest->z
161a0 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 20 20 7d 0a  Malloc;.      }.
161b0 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70 44 65        memcpy(pDe
161c0 73 74 2d 3e 7a 2c 20 7a 44 61 74 61 2c 20 6c 65  st->z, zData, le
161d0 6e 29 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d  n);.      pDest-
161e0 3e 7a 5b 6c 65 6e 5d 20 3d 20 30 3b 0a 20 20 20  >z[len] = 0;.   
161f0 20 20 20 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 2b     pDest->z[len+
16200 31 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 44  1] = 0;.      pD
16210 65 73 74 2d 3e 66 6c 61 67 73 20 3d 20 61 46 6c  est->flags = aFl
16220 61 67 5b 74 26 31 5d 3b 0a 20 20 20 20 7d 0a 20  ag[t&1];.    }. 
16230 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 44 65 73   }else{.    pDes
16240 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e  t->enc = encodin
16250 67 3b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 62  g;.    /* This b
16260 72 61 6e 63 68 20 68 61 70 70 65 6e 73 20 6f 6e  ranch happens on
16270 6c 79 20 77 68 65 6e 20 63 6f 6e 74 65 6e 74 20  ly when content 
16280 69 73 20 6f 6e 20 6f 76 65 72 66 6c 6f 77 20 70  is on overflow p
16290 61 67 65 73 20 2a 2f 0a 20 20 20 20 69 66 28 20  ages */.    if( 
162a0 28 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46  ((pOp->p5 & (OPF
162b0 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 7c 4f 50  LAG_LENGTHARG|OP
162c0 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29 29  FLAG_TYPEOFARG))
162d0 21 3d 30 0a 20 20 20 20 20 20 20 20 20 20 26 26  !=0.          &&
162e0 20 28 28 74 3e 3d 31 32 20 26 26 20 28 74 26 31   ((t>=12 && (t&1
162f0 29 3d 3d 30 29 20 7c 7c 20 28 70 4f 70 2d 3e 70  )==0) || (pOp->p
16300 35 20 26 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  5 & OPFLAG_TYPEO
16310 46 41 52 47 29 21 3d 30 29 29 0a 20 20 20 20 20  FARG)!=0)).     
16320 7c 7c 20 28 6c 65 6e 20 3d 20 73 71 6c 69 74 65  || (len = sqlite
16330 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c  3VdbeSerialTypeL
16340 65 6e 28 74 29 29 3d 3d 30 0a 20 20 20 20 29 7b  en(t))==0.    ){
16350 0a 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 6e  .      /* Conten
16360 74 20 69 73 20 69 72 72 65 6c 65 76 61 6e 74 20  t is irrelevant 
16370 66 6f 72 0a 20 20 20 20 20 20 2a 2a 20 20 20 20  for.      **    
16380 31 2e 20 74 68 65 20 74 79 70 65 6f 66 28 29 20  1. the typeof() 
16390 66 75 6e 63 74 69 6f 6e 2c 0a 20 20 20 20 20 20  function,.      
163a0 2a 2a 20 20 20 20 32 2e 20 74 68 65 20 6c 65 6e  **    2. the len
163b0 67 74 68 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  gth(X) function 
163c0 69 66 20 58 20 69 73 20 61 20 62 6c 6f 62 2c 20  if X is a blob, 
163d0 61 6e 64 0a 20 20 20 20 20 20 2a 2a 20 20 20 20  and.      **    
163e0 33 2e 20 69 66 20 74 68 65 20 63 6f 6e 74 65 6e  3. if the conten
163f0 74 20 6c 65 6e 67 74 68 20 69 73 20 7a 65 72 6f  t length is zero
16400 2e 0a 20 20 20 20 20 20 2a 2a 20 53 6f 20 77 65  ..      ** So we
16410 20 6d 69 67 68 74 20 61 73 20 77 65 6c 6c 20 75   might as well u
16420 73 65 20 62 6f 67 75 73 20 63 6f 6e 74 65 6e 74  se bogus content
16430 20 72 61 74 68 65 72 20 74 68 61 6e 20 72 65 61   rather than rea
16440 64 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 63 6f  ding.      ** co
16450 6e 74 65 6e 74 20 66 72 6f 6d 20 64 69 73 6b 2e  ntent from disk.
16460 20 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20   .      **.     
16470 20 2a 2a 20 41 6c 74 68 6f 75 67 68 20 73 71 6c   ** Although sql
16480 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65  ite3VdbeSerialGe
16490 74 28 29 20 6d 61 79 20 72 65 61 64 20 61 74 20  t() may read at 
164a0 6d 6f 73 74 20 38 20 62 79 74 65 73 20 66 72 6f  most 8 bytes fro
164b0 6d 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 62  m the.      ** b
164c0 75 66 66 65 72 20 70 61 73 73 65 64 20 74 6f 20  uffer passed to 
164d0 69 74 2c 20 64 65 62 75 67 67 69 6e 67 20 66 75  it, debugging fu
164e0 6e 63 74 69 6f 6e 20 56 64 62 65 4d 65 6d 50 72  nction VdbeMemPr
164f0 65 74 74 79 50 72 69 6e 74 28 29 20 6d 61 79 0a  ettyPrint() may.
16500 20 20 20 20 20 20 2a 2a 20 72 65 61 64 20 75 70        ** read up
16510 20 74 6f 20 31 36 2e 20 53 6f 20 31 36 20 62 79   to 16. So 16 by
16520 74 65 73 20 6f 66 20 62 6f 67 75 73 20 63 6f 6e  tes of bogus con
16530 74 65 6e 74 20 69 73 20 73 75 70 70 6c 69 65 64  tent is supplied
16540 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
16550 20 73 74 61 74 69 63 20 75 38 20 61 5a 65 72 6f   static u8 aZero
16560 5b 31 36 5d 3b 20 20 2f 2a 20 54 68 69 73 20 69  [16];  /* This i
16570 73 20 74 68 65 20 62 6f 67 75 73 20 63 6f 6e 74  s the bogus cont
16580 65 6e 74 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c  ent */.      sql
16590 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65  ite3VdbeSerialGe
165a0 74 28 61 5a 65 72 6f 2c 20 74 2c 20 70 44 65 73  t(aZero, t, pDes
165b0 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  t);.    }else{. 
165c0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
165d0 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65  3VdbeMemFromBtre
165e0 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  e(pC->uc.pCursor
165f0 2c 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 6c  , aOffset[p2], l
16600 65 6e 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20  en, pDest);.    
16610 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
16620 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
16630 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
16640 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
16650 53 65 72 69 61 6c 47 65 74 28 28 63 6f 6e 73 74  SerialGet((const
16660 20 75 38 2a 29 70 44 65 73 74 2d 3e 7a 2c 20 74   u8*)pDest->z, t
16670 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20  , pDest);.      
16680 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 3d 20  pDest->flags &= 
16690 7e 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20 20 20 20  ~MEM_Ephem;.    
166a0 7d 0a 20 20 7d 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e  }.  }..op_column
166b0 5f 6f 75 74 3a 0a 20 20 55 50 44 41 54 45 5f 4d  _out:.  UPDATE_M
166c0 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73  AX_BLOBSIZE(pDes
166d0 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  t);.  REGISTER_T
166e0 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44  RACE(pOp->p3, pD
166f0 65 73 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 0a  est);.  break;..
16700 6f 70 5f 63 6f 6c 75 6d 6e 5f 63 6f 72 72 75 70  op_column_corrup
16710 74 3a 0a 20 20 69 66 28 20 61 4f 70 5b 30 5d 2e  t:.  if( aOp[0].
16720 70 33 3e 30 20 29 7b 0a 20 20 20 20 70 4f 70 20  p3>0 ){.    pOp 
16730 3d 20 26 61 4f 70 5b 61 4f 70 5b 30 5d 2e 70 33  = &aOp[aOp[0].p3
16740 2d 31 5d 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  -1];.    break;.
16750 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20    }else{.    rc 
16760 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  = SQLITE_CORRUPT
16770 5f 42 4b 50 54 3b 0a 20 20 20 20 67 6f 74 6f 20  _BKPT;.    goto 
16780 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
16790 6f 72 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 20 4f 70  or;.  }.}../* Op
167a0 63 6f 64 65 3a 20 41 66 66 69 6e 69 74 79 20 50  code: Affinity P
167b0 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  1 P2 * P4 *.** S
167c0 79 6e 6f 70 73 69 73 3a 20 61 66 66 69 6e 69 74  ynopsis: affinit
167d0 79 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a  y(r[P1@P2]).**.*
167e0 2a 20 41 70 70 6c 79 20 61 66 66 69 6e 69 74 69  * Apply affiniti
167f0 65 73 20 74 6f 20 61 20 72 61 6e 67 65 20 6f 66  es to a range of
16800 20 50 32 20 72 65 67 69 73 74 65 72 73 20 73 74   P2 registers st
16810 61 72 74 69 6e 67 20 77 69 74 68 20 50 31 2e 0a  arting with P1..
16820 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 73 74  **.** P4 is a st
16830 72 69 6e 67 20 74 68 61 74 20 69 73 20 50 32 20  ring that is P2 
16840 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e  characters long.
16850 20 54 68 65 20 4e 2d 74 68 20 63 68 61 72 61 63   The N-th charac
16860 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74  ter of the.** st
16870 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74  ring indicates t
16880 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  he column affini
16890 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62  ty that should b
168a0 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 4e  e used for the N
168b0 2d 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65  -th.** memory ce
168c0 6c 6c 20 69 6e 20 74 68 65 20 72 61 6e 67 65 2e  ll in the range.
168d0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 66 66 69  .*/.case OP_Affi
168e0 6e 69 74 79 3a 20 7b 0a 20 20 63 6f 6e 73 74 20  nity: {.  const 
168f0 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b  char *zAffinity;
16900 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69     /* The affini
16910 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64  ty to be applied
16920 20 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e 69 74 79   */..  zAffinity
16930 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20   = pOp->p4.z;.  
16940 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74  assert( zAffinit
16950 79 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  y!=0 );.  assert
16960 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
16970 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69   assert( zAffini
16980 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29  ty[pOp->p2]==0 )
16990 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
169a0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 64 6f 7b  [pOp->p1];.  do{
169b0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e  .    assert( pIn
169c0 31 20 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b 28 70  1 <= &p->aMem[(p
169d0 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
169e0 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61  ursor)] );.    a
169f0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
16a00 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 61  d(pIn1) );.    a
16a10 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e  pplyAffinity(pIn
16a20 31 2c 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b  1, *(zAffinity++
16a30 29 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  ), encoding);.  
16a40 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 77 68 69    pIn1++;.  }whi
16a50 6c 65 28 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d  le( zAffinity[0]
16a60 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   );.  break;.}..
16a70 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 6b 65 52  /* Opcode: MakeR
16a80 65 63 6f 72 64 20 50 31 20 50 32 20 50 33 20 50  ecord P1 P2 P3 P
16a90 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
16aa0 20 72 5b 50 33 5d 3d 6d 6b 72 65 63 28 72 5b 50   r[P3]=mkrec(r[P
16ab0 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 43 6f 6e  1@P2]).**.** Con
16ac0 76 65 72 74 20 50 32 20 72 65 67 69 73 74 65 72  vert P2 register
16ad0 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
16ae0 20 50 31 20 69 6e 74 6f 20 74 68 65 20 5b 72 65   P1 into the [re
16af0 63 6f 72 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20  cord format].** 
16b00 75 73 65 20 61 73 20 61 20 64 61 74 61 20 72 65  use as a data re
16b10 63 6f 72 64 20 69 6e 20 61 20 64 61 74 61 62 61  cord in a databa
16b20 73 65 20 74 61 62 6c 65 20 6f 72 20 61 73 20 61  se table or as a
16b30 20 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e   key.** in an in
16b40 64 65 78 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c  dex.  The OP_Col
16b50 75 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20 64  umn opcode can d
16b60 65 63 6f 64 65 20 74 68 65 20 72 65 63 6f 72 64  ecode the record
16b70 20 6c 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34   later..**.** P4
16b80 20 6d 61 79 20 62 65 20 61 20 73 74 72 69 6e 67   may be a string
16b90 20 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72   that is P2 char
16ba0 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68  acters long.  Th
16bb0 65 20 4e 2d 74 68 20 63 68 61 72 61 63 74 65 72  e N-th character
16bc0 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e   of the.** strin
16bd0 67 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20  g indicates the 
16be0 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20  column affinity 
16bf0 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75  that should be u
16c00 73 65 64 20 66 6f 72 20 74 68 65 20 4e 2d 74 68  sed for the N-th
16c10 0a 2a 2a 20 66 69 65 6c 64 20 6f 66 20 74 68 65  .** field of the
16c20 20 69 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a   index key..**.*
16c30 2a 20 54 68 65 20 6d 61 70 70 69 6e 67 20 66 72  * The mapping fr
16c40 6f 6d 20 63 68 61 72 61 63 74 65 72 20 74 6f 20  om character to 
16c50 61 66 66 69 6e 69 74 79 20 69 73 20 67 69 76 65  affinity is give
16c60 6e 20 62 79 20 74 68 65 20 53 51 4c 49 54 45 5f  n by the SQLITE_
16c70 41 46 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64  AFF_.** macros d
16c80 65 66 69 6e 65 64 20 69 6e 20 73 71 6c 69 74 65  efined in sqlite
16c90 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  Int.h..**.** If 
16ca0 50 34 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  P4 is NULL then 
16cb0 61 6c 6c 20 69 6e 64 65 78 20 66 69 65 6c 64 73  all index fields
16cc0 20 68 61 76 65 20 74 68 65 20 61 66 66 69 6e 69   have the affini
16cd0 74 79 20 42 4c 4f 42 2e 0a 2a 2f 0a 63 61 73 65  ty BLOB..*/.case
16ce0 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20   OP_MakeRecord: 
16cf0 7b 0a 20 20 75 38 20 2a 7a 4e 65 77 52 65 63 6f  {.  u8 *zNewReco
16d00 72 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 20  rd;        /* A 
16d10 62 75 66 66 65 72 20 74 6f 20 68 6f 6c 64 20 74  buffer to hold t
16d20 68 65 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  he data for the 
16d30 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  new record */.  
16d40 4d 65 6d 20 2a 70 52 65 63 3b 20 20 20 20 20 20  Mem *pRec;      
16d50 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65         /* The ne
16d60 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 75 36  w record */.  u6
16d70 34 20 6e 44 61 74 61 3b 20 20 20 20 20 20 20 20  4 nData;        
16d80 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
16d90 66 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 20  f bytes of data 
16da0 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  space */.  int n
16db0 48 64 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Hdr;            
16dc0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
16dd0 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 20 73  ytes of header s
16de0 70 61 63 65 20 2a 2f 0a 20 20 69 36 34 20 6e 42  pace */.  i64 nB
16df0 79 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  yte;            
16e00 20 2f 2a 20 44 61 74 61 20 73 70 61 63 65 20 72   /* Data space r
16e10 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73  equired for this
16e20 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34   record */.  i64
16e30 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 20   nZero;         
16e40 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
16e50 20 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20 74   zero bytes at t
16e60 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65  he end of the re
16e70 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  cord */.  int nV
16e80 61 72 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  arint;          
16e90 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
16ea0 74 65 73 20 69 6e 20 61 20 76 61 72 69 6e 74 20  tes in a varint 
16eb0 2a 2f 0a 20 20 75 33 32 20 73 65 72 69 61 6c 5f  */.  u32 serial_
16ec0 74 79 70 65 3b 20 20 20 20 20 20 20 2f 2a 20 54  type;       /* T
16ed0 79 70 65 20 66 69 65 6c 64 20 2a 2f 0a 20 20 4d  ype field */.  M
16ee0 65 6d 20 2a 70 44 61 74 61 30 3b 20 20 20 20 20  em *pData0;     
16ef0 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 66        /* First f
16f00 69 65 6c 64 20 74 6f 20 62 65 20 63 6f 6d 62 69  ield to be combi
16f10 6e 65 64 20 69 6e 74 6f 20 74 68 65 20 72 65 63  ned into the rec
16f20 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c  ord */.  Mem *pL
16f30 61 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ast;            
16f40 2f 2a 20 4c 61 73 74 20 66 69 65 6c 64 20 6f 66  /* Last field of
16f50 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
16f60 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20   int nField;    
16f70 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
16f80 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74  r of fields in t
16f90 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 63  he record */.  c
16fa0 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20  har *zAffinity; 
16fb0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66        /* The aff
16fc0 69 6e 69 74 79 20 73 74 72 69 6e 67 20 66 6f 72  inity string for
16fd0 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
16fe0 20 69 6e 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74   int file_format
16ff0 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 6c 65 20  ;       /* File 
17000 66 6f 72 6d 61 74 20 74 6f 20 75 73 65 20 66 6f  format to use fo
17010 72 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20  r encoding */.  
17020 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20  int i;          
17030 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20         /* Space 
17040 75 73 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f  used in zNewReco
17050 72 64 5b 5d 20 68 65 61 64 65 72 20 2a 2f 0a 20  rd[] header */. 
17060 20 69 6e 74 20 6a 3b 20 20 20 20 20 20 20 20 20   int j;         
17070 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65          /* Space
17080 20 75 73 65 64 20 69 6e 20 7a 4e 65 77 52 65 63   used in zNewRec
17090 6f 72 64 5b 5d 20 63 6f 6e 74 65 6e 74 20 2a 2f  ord[] content */
170a0 0a 20 20 75 33 32 20 6c 65 6e 3b 20 20 20 20 20  .  u32 len;     
170b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e            /* Len
170c0 67 74 68 20 6f 66 20 61 20 66 69 65 6c 64 20 2a  gth of a field *
170d0 2f 0a 0a 20 20 2f 2a 20 41 73 73 75 6d 69 6e 67  /..  /* Assuming
170e0 20 74 68 65 20 72 65 63 6f 72 64 20 63 6f 6e 74   the record cont
170f0 61 69 6e 73 20 4e 20 66 69 65 6c 64 73 2c 20 74  ains N fields, t
17100 68 65 20 72 65 63 6f 72 64 20 66 6f 72 6d 61 74  he record format
17110 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65   looks.  ** like
17120 20 74 68 69 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a   this:.  **.  **
17130 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   ---------------
17140 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17150 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17160 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17170 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c  ---------.  ** |
17180 20 68 64 72 2d 73 69 7a 65 20 7c 20 74 79 70 65   hdr-size | type
17190 20 30 20 7c 20 74 79 70 65 20 31 20 7c 20 2e 2e   0 | type 1 | ..
171a0 2e 20 7c 20 74 79 70 65 20 4e 2d 31 20 7c 20 64  . | type N-1 | d
171b0 61 74 61 30 20 7c 20 2e 2e 2e 20 7c 20 64 61 74  ata0 | ... | dat
171c0 61 20 4e 2d 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d  a N-1 | .  ** --
171d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
171e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
171f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17200 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17210 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20 20 2a 2a  ------.  **.  **
17220 20 44 61 74 61 28 30 29 20 69 73 20 74 61 6b 65   Data(0) is take
17230 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20  n from register 
17240 50 31 2e 20 20 44 61 74 61 28 31 29 20 63 6f 6d  P1.  Data(1) com
17250 65 73 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72  es from register
17260 20 50 31 2b 31 0a 20 20 2a 2a 20 61 6e 64 20 73   P1+1.  ** and s
17270 6f 20 66 6f 72 74 68 2e 0a 20 20 2a 2a 0a 20 20  o forth..  **.  
17280 2a 2a 20 45 61 63 68 20 74 79 70 65 20 66 69 65  ** Each type fie
17290 6c 64 20 69 73 20 61 20 76 61 72 69 6e 74 20 72  ld is a varint r
172a0 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20  epresenting the 
172b0 73 65 72 69 61 6c 20 74 79 70 65 20 6f 66 20 74  serial type of t
172c0 68 65 20 0a 20 20 2a 2a 20 63 6f 72 72 65 73 70  he .  ** corresp
172d0 6f 6e 64 69 6e 67 20 64 61 74 61 20 65 6c 65 6d  onding data elem
172e0 65 6e 74 20 28 73 65 65 20 73 71 6c 69 74 65 33  ent (see sqlite3
172f0 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28 29  VdbeSerialType()
17300 29 2e 20 54 68 65 0a 20 20 2a 2a 20 68 64 72 2d  ). The.  ** hdr-
17310 73 69 7a 65 20 66 69 65 6c 64 20 69 73 20 61 6c  size field is al
17320 73 6f 20 61 20 76 61 72 69 6e 74 20 77 68 69 63  so a varint whic
17330 68 20 69 73 20 74 68 65 20 6f 66 66 73 65 74 20  h is the offset 
17340 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
17350 6e 67 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 72  ng.  ** of the r
17360 65 63 6f 72 64 20 74 6f 20 64 61 74 61 30 2e 0a  ecord to data0..
17370 20 20 2a 2f 0a 20 20 6e 44 61 74 61 20 3d 20 30    */.  nData = 0
17380 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
17390 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
173a0 64 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20  data space */.  
173b0 6e 48 64 72 20 3d 20 30 3b 20 20 20 20 20 20 20  nHdr = 0;       
173c0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
173d0 62 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 20  bytes of header 
173e0 73 70 61 63 65 20 2a 2f 0a 20 20 6e 5a 65 72 6f  space */.  nZero
173f0 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
17400 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20   Number of zero 
17410 62 79 74 65 73 20 61 74 20 74 68 65 20 65 6e 64  bytes at the end
17420 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a   of the record *
17430 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70  /.  nField = pOp
17440 2d 3e 70 31 3b 0a 20 20 7a 41 66 66 69 6e 69 74  ->p1;.  zAffinit
17450 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  y = pOp->p4.z;. 
17460 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e   assert( nField>
17470 30 20 26 26 20 70 4f 70 2d 3e 70 32 3e 30 20 26  0 && pOp->p2>0 &
17480 26 20 70 4f 70 2d 3e 70 32 2b 6e 46 69 65 6c 64  & pOp->p2+nField
17490 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
174a0 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
174b0 20 20 70 44 61 74 61 30 20 3d 20 26 61 4d 65 6d    pData0 = &aMem
174c0 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69 65  [nField];.  nFie
174d0 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  ld = pOp->p2;.  
174e0 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30 5b  pLast = &pData0[
174f0 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c  nField-1];.  fil
17500 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d 69  e_format = p->mi
17510 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74  nWriteFileFormat
17520 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e 74 69 66 79  ;..  /* Identify
17530 20 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69   the output regi
17540 73 74 65 72 20 2a 2f 0a 20 20 61 73 73 65 72 74  ster */.  assert
17550 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70  ( pOp->p3<pOp->p
17560 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f  1 || pOp->p3>=pO
17570 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b  p->p1+pOp->p2 );
17580 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
17590 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41  pOp->p3];.  memA
175a0 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
175b0 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 41 70 70  pOut);..  /* App
175c0 6c 79 20 74 68 65 20 72 65 71 75 65 73 74 65 64  ly the requested
175d0 20 61 66 66 69 6e 69 74 79 20 74 6f 20 61 6c 6c   affinity to all
175e0 20 69 6e 70 75 74 73 0a 20 20 2a 2f 0a 20 20 61   inputs.  */.  a
175f0 73 73 65 72 74 28 20 70 44 61 74 61 30 3c 3d 70  ssert( pData0<=p
17600 4c 61 73 74 20 29 3b 0a 20 20 69 66 28 20 7a 41  Last );.  if( zA
17610 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 70  ffinity ){.    p
17620 52 65 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20  Rec = pData0;.  
17630 20 20 64 6f 7b 0a 20 20 20 20 20 20 61 70 70 6c    do{.      appl
17640 79 41 66 66 69 6e 69 74 79 28 70 52 65 63 2b 2b  yAffinity(pRec++
17650 2c 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29  , *(zAffinity++)
17660 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
17670 20 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69     assert( zAffi
17680 6e 69 74 79 5b 30 5d 3d 3d 30 20 7c 7c 20 70 52  nity[0]==0 || pR
17690 65 63 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 20  ec<=pLast );.   
176a0 20 7d 77 68 69 6c 65 28 20 7a 41 66 66 69 6e 69   }while( zAffini
176b0 74 79 5b 30 5d 20 29 3b 0a 20 20 7d 0a 0a 23 69  ty[0] );.  }..#i
176c0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
176d0 4c 45 5f 4e 55 4c 4c 5f 54 52 49 4d 0a 20 20 2f  LE_NULL_TRIM.  /
176e0 2a 20 4e 55 4c 4c 73 20 63 61 6e 20 62 65 20 73  * NULLs can be s
176f0 61 66 65 6c 79 20 74 72 69 6d 6d 65 64 20 66 72  afely trimmed fr
17700 6f 6d 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  om the end of th
17710 65 20 72 65 63 6f 72 64 2c 20 61 73 20 6c 6f 6e  e record, as lon
17720 67 20 61 73 0a 20 20 2a 2a 20 61 73 20 74 68 65  g as.  ** as the
17730 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 69   schema format i
17740 73 20 32 20 6f 72 20 6d 6f 72 65 20 61 6e 64 20  s 2 or more and 
17750 6e 6f 6e 65 20 6f 66 20 74 68 65 20 6f 6d 69 74  none of the omit
17760 74 65 64 20 63 6f 6c 75 6d 6e 73 0a 20 20 2a 2a  ted columns.  **
17770 20 68 61 76 65 20 61 20 6e 6f 6e 2d 4e 55 4c 4c   have a non-NULL
17780 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 2e 20   default value. 
17790 20 41 6c 73 6f 2c 20 74 68 65 20 72 65 63 6f 72   Also, the recor
177a0 64 20 6d 75 73 74 20 62 65 20 6c 65 66 74 20 77  d must be left w
177b0 69 74 68 0a 20 20 2a 2a 20 61 74 20 6c 65 61 73  ith.  ** at leas
177c0 74 20 6f 6e 65 20 66 69 65 6c 64 2e 20 20 49 66  t one field.  If
177d0 20 50 35 3e 30 20 74 68 65 6e 20 69 74 20 77 69   P5>0 then it wi
177e0 6c 6c 20 62 65 20 6f 6e 65 20 6d 6f 72 65 20 74  ll be one more t
177f0 68 61 6e 20 74 68 65 0a 20 20 2a 2a 20 69 6e 64  han the.  ** ind
17800 65 78 20 6f 66 20 74 68 65 20 72 69 67 68 74 2d  ex of the right-
17810 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20 77 69 74 68  most column with
17820 20 61 20 6e 6f 6e 2d 4e 55 4c 4c 20 64 65 66 61   a non-NULL defa
17830 75 6c 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 69  ult value */.  i
17840 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20  f( pOp->p5 ){.  
17850 20 20 77 68 69 6c 65 28 20 28 70 4c 61 73 74 2d    while( (pLast-
17860 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
17870 6c 29 21 3d 30 20 26 26 20 6e 46 69 65 6c 64 3e  l)!=0 && nField>
17880 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20  pOp->p5 ){.     
17890 20 70 4c 61 73 74 2d 2d 3b 0a 20 20 20 20 20 20   pLast--;.      
178a0 6e 46 69 65 6c 64 2d 2d 3b 0a 20 20 20 20 7d 0a  nField--;.    }.
178b0 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a    }.#endif..  /*
178c0 20 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20 74 68   Loop through th
178d0 65 20 65 6c 65 6d 65 6e 74 73 20 74 68 61 74 20  e elements that 
178e0 77 69 6c 6c 20 6d 61 6b 65 20 75 70 20 74 68 65  will make up the
178f0 20 72 65 63 6f 72 64 20 74 6f 20 66 69 67 75 72   record to figur
17900 65 0a 20 20 2a 2a 20 6f 75 74 20 68 6f 77 20 6d  e.  ** out how m
17910 75 63 68 20 73 70 61 63 65 20 69 73 20 72 65 71  uch space is req
17920 75 69 72 65 64 20 66 6f 72 20 74 68 65 20 6e 65  uired for the ne
17930 77 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20  w record..  */. 
17940 20 70 52 65 63 20 3d 20 70 4c 61 73 74 3b 0a 20   pRec = pLast;. 
17950 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72 74 28   do{.    assert(
17960 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65 63   memIsValid(pRec
17970 29 20 29 3b 0a 20 20 20 20 73 65 72 69 61 6c 5f  ) );.    serial_
17980 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64  type = sqlite3Vd
17990 62 65 53 65 72 69 61 6c 54 79 70 65 28 70 52 65  beSerialType(pRe
179a0 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 2c 20  c, file_format, 
179b0 26 6c 65 6e 29 3b 0a 20 20 20 20 69 66 28 20 70  &len);.    if( p
179c0 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Rec->flags & MEM
179d0 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 69  _Zero ){.      i
179e0 66 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d  f( serial_type==
179f0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  0 ){.        /* 
17a00 56 61 6c 75 65 73 20 77 69 74 68 20 4d 45 4d 5f  Values with MEM_
17a10 4e 75 6c 6c 20 61 6e 64 20 4d 45 4d 5f 5a 65 72  Null and MEM_Zer
17a20 6f 20 61 72 65 20 63 72 65 61 74 65 64 20 62 79  o are created by
17a30 20 78 43 6f 6c 75 6d 6e 20 76 69 72 74 75 61 6c   xColumn virtual
17a40 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 61 62 6c  .        ** tabl
17a50 65 20 6d 65 74 68 6f 64 73 20 74 68 61 74 20 6e  e methods that n
17a60 65 76 65 72 20 69 6e 76 6f 6b 65 20 73 71 6c 69  ever invoke sqli
17a70 74 65 33 5f 72 65 73 75 6c 74 5f 78 78 78 78 78  te3_result_xxxxx
17a80 28 29 20 77 68 69 6c 65 0a 20 20 20 20 20 20 20  () while.       
17a90 20 2a 2a 20 63 6f 6d 70 75 74 69 6e 67 20 61 6e   ** computing an
17aa0 20 75 6e 63 68 61 6e 67 69 6e 67 20 63 6f 6c 75   unchanging colu
17ab0 6d 6e 20 76 61 6c 75 65 20 69 6e 20 61 6e 20 55  mn value in an U
17ac0 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e  PDATE statement.
17ad0 0a 20 20 20 20 20 20 20 20 2a 2a 20 47 69 76 65  .        ** Give
17ae0 20 73 75 63 68 20 76 61 6c 75 65 73 20 61 20 73   such values a s
17af0 70 65 63 69 61 6c 20 69 6e 74 65 72 6e 61 6c 2d  pecial internal-
17b00 75 73 65 2d 6f 6e 6c 79 20 73 65 72 69 61 6c 2d  use-only serial-
17b10 74 79 70 65 20 6f 66 20 31 30 0a 20 20 20 20 20  type of 10.     
17b20 20 20 20 2a 2a 20 73 6f 20 74 68 61 74 20 74 68     ** so that th
17b30 65 79 20 63 61 6e 20 62 65 20 70 61 73 73 65 64  ey can be passed
17b40 20 74 68 72 6f 75 67 68 20 74 6f 20 78 55 70 64   through to xUpd
17b50 61 74 65 20 61 6e 64 20 68 61 76 65 0a 20 20 20  ate and have.   
17b60 20 20 20 20 20 2a 2a 20 61 20 74 72 75 65 20 73       ** a true s
17b70 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 6e 6f 63  qlite3_value_noc
17b80 68 61 6e 67 65 28 29 2e 20 2a 2f 0a 20 20 20 20  hange(). */.    
17b90 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
17ba0 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f 4e 4f 43 48  >p5==OPFLAG_NOCH
17bb0 4e 47 5f 4d 41 47 49 43 20 7c 7c 20 43 4f 52 52  NG_MAGIC || CORR
17bc0 55 50 54 5f 44 42 20 29 3b 0a 20 20 20 20 20 20  UPT_DB );.      
17bd0 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20    serial_type = 
17be0 31 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  10;.      }else 
17bf0 69 66 28 20 6e 44 61 74 61 20 29 7b 0a 20 20 20  if( nData ){.   
17c00 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
17c10 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f  VdbeMemExpandBlo
17c20 62 28 70 52 65 63 29 20 29 20 67 6f 74 6f 20 6e  b(pRec) ) goto n
17c30 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 65 6c  o_mem;.      }el
17c40 73 65 7b 0a 20 20 20 20 20 20 20 20 6e 5a 65 72  se{.        nZer
17c50 6f 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65  o += pRec->u.nZe
17c60 72 6f 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e 20  ro;.        len 
17c70 2d 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f  -= pRec->u.nZero
17c80 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
17c90 20 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c 65 6e      nData += len
17ca0 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20  ;.    testcase( 
17cb0 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32 37  serial_type==127
17cc0 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65   );.    testcase
17cd0 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31  ( serial_type==1
17ce0 32 38 20 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b  28 );.    nHdr +
17cf0 3d 20 73 65 72 69 61 6c 5f 74 79 70 65 3c 3d 31  = serial_type<=1
17d00 32 37 20 3f 20 31 20 3a 20 73 71 6c 69 74 65 33  27 ? 1 : sqlite3
17d10 56 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61 6c  VarintLen(serial
17d20 5f 74 79 70 65 29 3b 0a 20 20 20 20 70 52 65 63  _type);.    pRec
17d30 2d 3e 75 54 65 6d 70 20 3d 20 73 65 72 69 61 6c  ->uTemp = serial
17d40 5f 74 79 70 65 3b 0a 20 20 20 20 69 66 28 20 70  _type;.    if( p
17d50 52 65 63 3d 3d 70 44 61 74 61 30 20 29 20 62 72  Rec==pData0 ) br
17d60 65 61 6b 3b 0a 20 20 20 20 70 52 65 63 2d 2d 3b  eak;.    pRec--;
17d70 0a 20 20 7d 77 68 69 6c 65 28 31 29 3b 0a 0a 20  .  }while(1);.. 
17d80 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a   /* EVIDENCE-OF:
17d90 20 52 2d 32 32 35 36 34 2d 31 31 36 34 37 20 54   R-22564-11647 T
17da0 68 65 20 68 65 61 64 65 72 20 62 65 67 69 6e 73  he header begins
17db0 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 76   with a single v
17dc0 61 72 69 6e 74 0a 20 20 2a 2a 20 77 68 69 63 68  arint.  ** which
17dd0 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20   determines the 
17de0 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  total number of 
17df0 62 79 74 65 73 20 69 6e 20 74 68 65 20 68 65 61  bytes in the hea
17e00 64 65 72 2e 20 54 68 65 20 76 61 72 69 6e 74 0a  der. The varint.
17e10 20 20 2a 2a 20 76 61 6c 75 65 20 69 73 20 74 68    ** value is th
17e20 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 68 65  e size of the he
17e30 61 64 65 72 20 69 6e 20 62 79 74 65 73 20 69 6e  ader in bytes in
17e40 63 6c 75 64 69 6e 67 20 74 68 65 20 73 69 7a 65  cluding the size
17e50 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 69 74 73   varint.  ** its
17e60 65 6c 66 2e 20 2a 2f 0a 20 20 74 65 73 74 63 61  elf. */.  testca
17e70 73 65 28 20 6e 48 64 72 3d 3d 31 32 36 20 29 3b  se( nHdr==126 );
17e80 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 48 64  .  testcase( nHd
17e90 72 3d 3d 31 32 37 20 29 3b 0a 20 20 69 66 28 20  r==127 );.  if( 
17ea0 6e 48 64 72 3c 3d 31 32 36 20 29 7b 0a 20 20 20  nHdr<=126 ){.   
17eb0 20 2f 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63   /* The common c
17ec0 61 73 65 20 2a 2f 0a 20 20 20 20 6e 48 64 72 20  ase */.    nHdr 
17ed0 2b 3d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  += 1;.  }else{. 
17ee0 20 20 20 2f 2a 20 52 61 72 65 20 63 61 73 65 20     /* Rare case 
17ef0 6f 66 20 61 20 72 65 61 6c 6c 79 20 6c 61 72 67  of a really larg
17f00 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 20 20  e header */.    
17f10 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c 69 74 65  nVarint = sqlite
17f20 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29  3VarintLen(nHdr)
17f30 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 6e 56  ;.    nHdr += nV
17f40 61 72 69 6e 74 3b 0a 20 20 20 20 69 66 28 20 6e  arint;.    if( n
17f50 56 61 72 69 6e 74 3c 73 71 6c 69 74 65 33 56 61  Varint<sqlite3Va
17f60 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 20 29 20  rintLen(nHdr) ) 
17f70 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42  nHdr++;.  }.  nB
17f80 79 74 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61  yte = nHdr+nData
17f90 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 2b 6e 5a  ;.  if( nByte+nZ
17fa0 65 72 6f 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  ero>db->aLimit[S
17fb0 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
17fc0 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  TH] ){.    goto 
17fd0 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20  too_big;.  }..  
17fe0 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65  /* Make sure the
17ff0 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72   output register
18000 20 68 61 73 20 61 20 62 75 66 66 65 72 20 6c 61   has a buffer la
18010 72 67 65 20 65 6e 6f 75 67 68 20 74 6f 20 73 74  rge enough to st
18020 6f 72 65 20 0a 20 20 2a 2a 20 74 68 65 20 6e 65  ore .  ** the ne
18030 77 20 72 65 63 6f 72 64 2e 20 54 68 65 20 6f 75  w record. The ou
18040 74 70 75 74 20 72 65 67 69 73 74 65 72 20 28 70  tput register (p
18050 4f 70 2d 3e 70 33 29 20 69 73 20 6e 6f 74 20 61  Op->p3) is not a
18060 6c 6c 6f 77 65 64 20 74 6f 0a 20 20 2a 2a 20 62  llowed to.  ** b
18070 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 70  e one of the inp
18080 75 74 20 72 65 67 69 73 74 65 72 73 20 28 62 65  ut registers (be
18090 63 61 75 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77  cause the follow
180a0 69 6e 67 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a  ing call to.  **
180b0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43   sqlite3VdbeMemC
180c0 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28 29 20  learAndResize() 
180d0 63 6f 75 6c 64 20 63 6c 6f 62 62 65 72 20 74 68  could clobber th
180e0 65 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20 69  e value before i
180f0 74 20 69 73 20 75 73 65 64 29 2e 0a 20 20 2a 2f  t is used)..  */
18100 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
18110 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65 73  beMemClearAndRes
18120 69 7a 65 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e  ize(pOut, (int)n
18130 42 79 74 65 29 20 29 7b 0a 20 20 20 20 67 6f 74  Byte) ){.    got
18140 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
18150 7a 4e 65 77 52 65 63 6f 72 64 20 3d 20 28 75 38  zNewRecord = (u8
18160 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f   *)pOut->z;..  /
18170 2a 20 57 72 69 74 65 20 74 68 65 20 72 65 63 6f  * Write the reco
18180 72 64 20 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56  rd */.  i = putV
18190 61 72 69 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f  arint32(zNewReco
181a0 72 64 2c 20 6e 48 64 72 29 3b 0a 20 20 6a 20 3d  rd, nHdr);.  j =
181b0 20 6e 48 64 72 3b 0a 20 20 61 73 73 65 72 74 28   nHdr;.  assert(
181c0 20 70 44 61 74 61 30 3c 3d 70 4c 61 73 74 20 29   pData0<=pLast )
181d0 3b 0a 20 20 70 52 65 63 20 3d 20 70 44 61 74 61  ;.  pRec = pData
181e0 30 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 73 65 72  0;.  do{.    ser
181f0 69 61 6c 5f 74 79 70 65 20 3d 20 70 52 65 63 2d  ial_type = pRec-
18200 3e 75 54 65 6d 70 3b 0a 20 20 20 20 2f 2a 20 45  >uTemp;.    /* E
18210 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 30 36  VIDENCE-OF: R-06
18220 35 32 39 2d 34 37 33 36 32 20 46 6f 6c 6c 6f 77  529-47362 Follow
18230 69 6e 67 20 74 68 65 20 73 69 7a 65 20 76 61 72  ing the size var
18240 69 6e 74 20 61 72 65 20 6f 6e 65 20 6f 72 20 6d  int are one or m
18250 6f 72 65 0a 20 20 20 20 2a 2a 20 61 64 64 69 74  ore.    ** addit
18260 69 6f 6e 61 6c 20 76 61 72 69 6e 74 73 2c 20 6f  ional varints, o
18270 6e 65 20 70 65 72 20 63 6f 6c 75 6d 6e 2e 20 2a  ne per column. *
18280 2f 0a 20 20 20 20 69 20 2b 3d 20 70 75 74 56 61  /.    i += putVa
18290 72 69 6e 74 33 32 28 26 7a 4e 65 77 52 65 63 6f  rint32(&zNewReco
182a0 72 64 5b 69 5d 2c 20 73 65 72 69 61 6c 5f 74 79  rd[i], serial_ty
182b0 70 65 29 3b 20 20 20 20 20 20 20 20 20 20 20 20  pe);            
182c0 2f 2a 20 73 65 72 69 61 6c 20 74 79 70 65 20 2a  /* serial type *
182d0 2f 0a 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43  /.    /* EVIDENC
182e0 45 2d 4f 46 3a 20 52 2d 36 34 35 33 36 2d 35 31  E-OF: R-64536-51
182f0 37 32 38 20 54 68 65 20 76 61 6c 75 65 73 20 66  728 The values f
18300 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69  or each column i
18310 6e 20 74 68 65 20 72 65 63 6f 72 64 0a 20 20 20  n the record.   
18320 20 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20   ** immediately 
18330 66 6f 6c 6c 6f 77 20 74 68 65 20 68 65 61 64 65  follow the heade
18340 72 2e 20 2a 2f 0a 20 20 20 20 6a 20 2b 3d 20 73  r. */.    j += s
18350 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
18360 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b  Put(&zNewRecord[
18370 6a 5d 2c 20 70 52 65 63 2c 20 73 65 72 69 61 6c  j], pRec, serial
18380 5f 74 79 70 65 29 3b 20 2f 2a 20 63 6f 6e 74 65  _type); /* conte
18390 6e 74 20 2a 2f 0a 20 20 7d 77 68 69 6c 65 28 20  nt */.  }while( 
183a0 28 2b 2b 70 52 65 63 29 3c 3d 70 4c 61 73 74 20  (++pRec)<=pLast 
183b0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3d 3d  );.  assert( i==
183c0 6e 48 64 72 20 29 3b 0a 20 20 61 73 73 65 72 74  nHdr );.  assert
183d0 28 20 6a 3d 3d 6e 42 79 74 65 20 29 3b 0a 0a 20  ( j==nByte );.. 
183e0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
183f0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28  >0 && pOp->p3<=(
18400 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
18410 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75  Cursor) );.  pOu
18420 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74  t->n = (int)nByt
18430 65 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  e;.  pOut->flags
18440 20 3d 20 4d 45 4d 5f 42 6c 6f 62 3b 0a 20 20 69   = MEM_Blob;.  i
18450 66 28 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20  f( nZero ){.    
18460 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20  pOut->u.nZero = 
18470 6e 5a 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74 2d  nZero;.    pOut-
18480 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65  >flags |= MEM_Ze
18490 72 6f 3b 0a 20 20 7d 0a 20 20 52 45 47 49 53 54  ro;.  }.  REGIST
184a0 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
184b0 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54  , pOut);.  UPDAT
184c0 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
184d0 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
184e0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 75  ../* Opcode: Cou
184f0 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  nt P1 P2 * * *.*
18500 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
18510 5d 3d 63 6f 75 6e 74 28 29 0a 2a 2a 0a 2a 2a 20  ]=count().**.** 
18520 53 74 6f 72 65 20 74 68 65 20 6e 75 6d 62 65 72  Store the number
18530 20 6f 66 20 65 6e 74 72 69 65 73 20 28 61 6e 20   of entries (an 
18540 69 6e 74 65 67 65 72 20 76 61 6c 75 65 29 20 69  integer value) i
18550 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  n the table or i
18560 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65 64 20  ndex .** opened 
18570 62 79 20 63 75 72 73 6f 72 20 50 31 20 69 6e 20  by cursor P1 in 
18580 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2f 0a 23  register P2.*/.#
18590 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
185a0 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a 63 61  IT_BTREECOUNT.ca
185b0 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20 20  se OP_Count: {  
185c0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
185d0 2f 0a 20 20 69 36 34 20 6e 45 6e 74 72 79 3b 0a  /.  i64 nEntry;.
185e0 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
185f0 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  r;..  assert( p-
18600 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d  >apCsr[pOp->p1]-
18610 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
18620 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43  PE_BTREE );.  pC
18630 72 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  rsr = p->apCsr[p
18640 4f 70 2d 3e 70 31 5d 2d 3e 75 63 2e 70 43 75 72  Op->p1]->uc.pCur
18650 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70  sor;.  assert( p
18660 43 72 73 72 20 29 3b 0a 20 20 6e 45 6e 74 72 79  Crsr );.  nEntry
18670 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65   = 0;  /* Not ne
18680 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64  eded.  Only used
18690 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61   to silence a wa
186a0 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20 3d  rning. */.  rc =
186b0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6f 75   sqlite3BtreeCou
186c0 6e 74 28 70 43 72 73 72 2c 20 26 6e 45 6e 74 72  nt(pCrsr, &nEntr
186d0 79 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  y);.  if( rc ) g
186e0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
186f0 5f 65 72 72 6f 72 3b 0a 20 20 70 4f 75 74 20 3d  _error;.  pOut =
18700 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
18710 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d  p, pOp);.  pOut-
18720 3e 75 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20  >u.i = nEntry;. 
18730 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
18740 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76  ../* Opcode: Sav
18750 65 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50 34  epoint P1 * * P4
18760 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72   *.**.** Open, r
18770 65 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61  elease or rollba
18780 63 6b 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74  ck the savepoint
18790 20 6e 61 6d 65 64 20 62 79 20 70 61 72 61 6d 65   named by parame
187a0 74 65 72 20 50 34 2c 20 64 65 70 65 6e 64 69 6e  ter P4, dependin
187b0 67 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75  g.** on the valu
187c0 65 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e  e of P1. To open
187d0 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74   a new savepoint
187e0 2c 20 50 31 3d 3d 30 2e 20 54 6f 20 72 65 6c 65  , P1==0. To rele
187f0 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e 0a  ase (commit) an.
18800 2a 2a 20 65 78 69 73 74 69 6e 67 20 73 61 76 65  ** existing save
18810 70 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f 72  point, P1==1, or
18820 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20   to rollback an 
18830 65 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69  existing savepoi
18840 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73  nt P1==2..*/.cas
18850 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20  e OP_Savepoint: 
18860 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20  {.  int p1;     
18870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18880 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20      /* Value of 
18890 50 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  P1 operand */.  
188a0 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
188b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188c0 2f 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76 65 70  /* Name of savep
188d0 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e  oint */.  int nN
188e0 61 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74  ame;.  Savepoint
188f0 20 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65 70 6f   *pNew;.  Savepo
18900 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b  int *pSavepoint;
18910 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 54  .  Savepoint *pT
18920 6d 70 3b 0a 20 20 69 6e 74 20 69 53 61 76 65 70  mp;.  int iSavep
18930 6f 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69 3b 0a  oint;.  int ii;.
18940 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  .  p1 = pOp->p1;
18950 0a 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e  .  zName = pOp->
18960 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73 65  p4.z;..  /* Asse
18970 72 74 20 74 68 61 74 20 74 68 65 20 70 31 20 70  rt that the p1 p
18980 61 72 61 6d 65 74 65 72 20 69 73 20 76 61 6c 69  arameter is vali
18990 64 2e 20 41 6c 73 6f 20 74 68 61 74 20 69 66 20  d. Also that if 
189a0 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e  there is no open
189b0 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f  .  ** transactio
189c0 6e 2c 20 74 68 65 6e 20 74 68 65 72 65 20 63 61  n, then there ca
189d0 6e 6e 6f 74 20 62 65 20 61 6e 79 20 73 61 76 65  nnot be any save
189e0 70 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20 20  points. .  */.  
189f0 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76  assert( db->pSav
18a00 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d  epoint==0 || db-
18a10 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29  >autoCommit==0 )
18a20 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 3d 3d  ;.  assert( p1==
18a30 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 7c  SAVEPOINT_BEGIN|
18a40 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52  |p1==SAVEPOINT_R
18a50 45 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56 45  ELEASE||p1==SAVE
18a60 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29  POINT_ROLLBACK )
18a70 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  ;.  assert( db->
18a80 70 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64 62  pSavepoint || db
18a90 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
18aa0 61 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20  avepoint==0 );. 
18ab0 20 61 73 73 65 72 74 28 20 63 68 65 63 6b 53 61   assert( checkSa
18ac0 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29  vepointCount(db)
18ad0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
18ae0 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 0a 20  >bIsReader );.. 
18af0 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49   if( p1==SAVEPOI
18b00 4e 54 5f 42 45 47 49 4e 20 29 7b 0a 20 20 20 20  NT_BEGIN ){.    
18b10 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72 69  if( db->nVdbeWri
18b20 74 65 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a  te>0 ){.      /*
18b30 20 41 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74   A new savepoint
18b40 20 63 61 6e 6e 6f 74 20 62 65 20 63 72 65 61 74   cannot be creat
18b50 65 64 20 69 66 20 74 68 65 72 65 20 61 72 65 20  ed if there are 
18b60 61 63 74 69 76 65 20 77 72 69 74 65 20 0a 20 20  active write .  
18b70 20 20 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74      ** statement
18b80 73 20 28 69 2e 65 2e 20 6f 70 65 6e 20 72 65 61  s (i.e. open rea
18b90 64 2f 77 72 69 74 65 20 69 6e 63 72 65 6d 65 6e  d/write incremen
18ba0 74 61 6c 20 62 6c 6f 62 20 68 61 6e 64 6c 65 73  tal blob handles
18bb0 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  )..      */.    
18bc0 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
18bd0 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 6f 70  or(p, "cannot op
18be0 65 6e 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 53  en savepoint - S
18bf0 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  QL statements in
18c00 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20   progress");.   
18c10 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42     rc = SQLITE_B
18c20 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  USY;.    }else{.
18c30 20 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71        nName = sq
18c40 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e  lite3Strlen30(zN
18c50 61 6d 65 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53  ame);..#ifndef S
18c60 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
18c70 41 4c 54 41 42 4c 45 0a 20 20 20 20 20 20 2f 2a  ALTABLE.      /*
18c80 20 54 68 69 73 20 63 61 6c 6c 20 69 73 20 4f 6b   This call is Ok
18c90 20 65 76 65 6e 20 69 66 20 74 68 69 73 20 73 61   even if this sa
18ca0 76 65 70 6f 69 6e 74 20 69 73 20 61 63 74 75 61  vepoint is actua
18cb0 6c 6c 79 20 61 20 74 72 61 6e 73 61 63 74 69 6f  lly a transactio
18cc0 6e 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70  n.      ** savep
18cd0 6f 69 6e 74 20 28 61 6e 64 20 74 68 65 72 65 66  oint (and theref
18ce0 6f 72 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20 70  ore should not p
18cf0 72 6f 6d 70 74 20 78 53 61 76 65 70 6f 69 6e 74  rompt xSavepoint
18d00 28 29 29 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 20  ()) callbacks.. 
18d10 20 20 20 20 20 2a 2a 20 49 66 20 74 68 69 73 20       ** If this 
18d20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  is a transaction
18d30 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67   savepoint being
18d40 20 6f 70 65 6e 65 64 2c 20 69 74 20 69 73 20 67   opened, it is g
18d50 75 61 72 61 6e 74 65 65 64 0a 20 20 20 20 20 20  uaranteed.      
18d60 2a 2a 20 74 68 61 74 20 74 68 65 20 64 62 2d 3e  ** that the db->
18d70 61 56 54 72 61 6e 73 5b 5d 20 61 72 72 61 79 20  aVTrans[] array 
18d80 69 73 20 65 6d 70 74 79 2e 20 20 2a 2f 0a 20 20  is empty.  */.  
18d90 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
18da0 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c  autoCommit==0 ||
18db0 20 64 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30 20   db->nVTrans==0 
18dc0 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  );.      rc = sq
18dd0 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
18de0 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e 54  nt(db, SAVEPOINT
18df0 5f 42 45 47 49 4e 2c 0a 20 20 20 20 20 20 20 20  _BEGIN,.        
18e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e10 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61          db->nSta
18e20 74 65 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61 76 65  tement+db->nSave
18e30 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 69 66  point);.      if
18e40 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
18e50 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
18e60 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69  _to_error;.#endi
18e70 66 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72 65 61  f..      /* Crea
18e80 74 65 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69  te a new savepoi
18e90 6e 74 20 73 74 72 75 63 74 75 72 65 2e 20 2a 2f  nt structure. */
18ea0 0a 20 20 20 20 20 20 70 4e 65 77 20 3d 20 73 71  .      pNew = sq
18eb0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
18ec0 4e 4e 28 64 62 2c 20 73 69 7a 65 6f 66 28 53 61  NN(db, sizeof(Sa
18ed0 76 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31  vepoint)+nName+1
18ee0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4e 65  );.      if( pNe
18ef0 77 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4e 65  w ){.        pNe
18f00 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63 68 61 72  w->zName = (char
18f10 20 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a 20 20 20   *)&pNew[1];.   
18f20 20 20 20 20 20 6d 65 6d 63 70 79 28 70 4e 65 77       memcpy(pNew
18f30 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20  ->zName, zName, 
18f40 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 0a 20  nName+1);.    . 
18f50 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65         /* If the
18f60 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20 74 72  re is no open tr
18f70 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20  ansaction, then 
18f80 6d 61 72 6b 20 74 68 69 73 20 61 73 20 61 20 73  mark this as a s
18f90 70 65 63 69 61 6c 0a 20 20 20 20 20 20 20 20 2a  pecial.        *
18fa0 2a 20 22 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  * "transaction s
18fb0 61 76 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20  avepoint". */.  
18fc0 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 75        if( db->au
18fd0 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20  toCommit ){.    
18fe0 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
18ff0 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20 20  mmit = 0;.      
19000 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61      db->isTransa
19010 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d  ctionSavepoint =
19020 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73   1;.        }els
19030 65 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  e{.          db-
19040 3e 6e 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20  >nSavepoint++;. 
19050 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20         }..      
19060 20 20 2f 2a 20 4c 69 6e 6b 20 74 68 65 20 6e 65    /* Link the ne
19070 77 20 73 61 76 65 70 6f 69 6e 74 20 69 6e 74 6f  w savepoint into
19080 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
19090 6e 64 6c 65 27 73 20 6c 69 73 74 2e 20 2a 2f 0a  ndle's list. */.
190a0 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 70 4e          pNew->pN
190b0 65 78 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70  ext = db->pSavep
190c0 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62  oint;.        db
190d0 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70  ->pSavepoint = p
190e0 4e 65 77 3b 0a 20 20 20 20 20 20 20 20 70 4e 65  New;.        pNe
190f0 77 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  w->nDeferredCons
19100 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64   = db->nDeferred
19110 43 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20 70 4e  Cons;.        pN
19120 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  ew->nDeferredImm
19130 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65  Cons = db->nDefe
19140 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20  rredImmCons;.   
19150 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c     }.    }.  }el
19160 73 65 7b 0a 20 20 20 20 69 53 61 76 65 70 6f 69  se{.    iSavepoi
19170 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20  nt = 0;..    /* 
19180 46 69 6e 64 20 74 68 65 20 6e 61 6d 65 64 20 73  Find the named s
19190 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 74 68 65  avepoint. If the
191a0 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20 73 61  re is no such sa
191b0 76 65 70 6f 69 6e 74 2c 20 74 68 65 6e 20 61 6e  vepoint, then an
191c0 0a 20 20 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72  .    ** an error
191d0 20 69 73 20 72 65 74 75 72 6e 65 64 20 74 6f 20   is returned to 
191e0 74 68 65 20 75 73 65 72 2e 20 20 2a 2f 0a 20 20  the user.  */.  
191f0 20 20 66 6f 72 28 0a 20 20 20 20 20 20 70 53 61    for(.      pSa
19200 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 70 53  vepoint = db->pS
19210 61 76 65 70 6f 69 6e 74 3b 20 0a 20 20 20 20 20  avepoint; .     
19220 20 70 53 61 76 65 70 6f 69 6e 74 20 26 26 20 73   pSavepoint && s
19230 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 70 53  qlite3StrICmp(pS
19240 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c  avepoint->zName,
19250 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 70   zName);.      p
19260 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76  Savepoint = pSav
19270 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a 20 20  epoint->pNext.  
19280 20 20 29 7b 0a 20 20 20 20 20 20 69 53 61 76 65    ){.      iSave
19290 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20  point++;.    }. 
192a0 20 20 20 69 66 28 20 21 70 53 61 76 65 70 6f 69     if( !pSavepoi
192b0 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  nt ){.      sqli
192c0 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
192d0 22 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69  "no such savepoi
192e0 6e 74 3a 20 25 73 22 2c 20 7a 4e 61 6d 65 29 3b  nt: %s", zName);
192f0 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
19300 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 65  TE_ERROR;.    }e
19310 6c 73 65 20 69 66 28 20 64 62 2d 3e 6e 56 64 62  lse if( db->nVdb
19320 65 57 72 69 74 65 3e 30 20 26 26 20 70 31 3d 3d  eWrite>0 && p1==
19330 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
19340 45 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 74  E ){.      /* It
19350 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65   is not possible
19360 20 74 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d   to release (com
19370 6d 69 74 29 20 61 20 73 61 76 65 70 6f 69 6e 74  mit) a savepoint
19380 20 69 66 20 74 68 65 72 65 20 61 72 65 20 0a 20   if there are . 
19390 20 20 20 20 20 2a 2a 20 61 63 74 69 76 65 20 77       ** active w
193a0 72 69 74 65 20 73 74 61 74 65 6d 65 6e 74 73 2e  rite statements.
193b0 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
193c0 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
193d0 28 70 2c 20 22 63 61 6e 6e 6f 74 20 72 65 6c 65  (p, "cannot rele
193e0 61 73 65 20 73 61 76 65 70 6f 69 6e 74 20 2d 20  ase savepoint - 
193f0 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
19400 20 20 20 20 20 20 20 20 20 20 20 20 22 53 51 4c              "SQL
19410 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70   statements in p
19420 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20  rogress");.     
19430 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
19440 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 0a 20  Y;.    }else{.. 
19450 20 20 20 20 20 2f 2a 20 44 65 74 65 72 6d 69 6e       /* Determin
19460 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  e whether or not
19470 20 74 68 69 73 20 69 73 20 61 20 74 72 61 6e 73   this is a trans
19480 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74  action savepoint
19490 2e 20 49 66 20 73 6f 2c 0a 20 20 20 20 20 20 2a  . If so,.      *
194a0 2a 20 61 6e 64 20 74 68 69 73 20 69 73 20 61 20  * and this is a 
194b0 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2c  RELEASE command,
194c0 20 74 68 65 6e 20 74 68 65 20 63 75 72 72 65 6e   then the curren
194d0 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 0a 20  t transaction . 
194e0 20 20 20 20 20 2a 2a 20 69 73 20 63 6f 6d 6d 69       ** is commi
194f0 74 74 65 64 2e 20 0a 20 20 20 20 20 20 2a 2f 0a  tted. .      */.
19500 20 20 20 20 20 20 69 6e 74 20 69 73 54 72 61 6e        int isTran
19510 73 61 63 74 69 6f 6e 20 3d 20 70 53 61 76 65 70  saction = pSavep
19520 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30 20 26  oint->pNext==0 &
19530 26 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74  & db->isTransact
19540 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20  ionSavepoint;.  
19550 20 20 20 20 69 66 28 20 69 73 54 72 61 6e 73 61      if( isTransa
19560 63 74 69 6f 6e 20 26 26 20 70 31 3d 3d 53 41 56  ction && p1==SAV
19570 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29  EPOINT_RELEASE )
19580 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 72  {.        if( (r
19590 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
195a0 68 65 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53  heckFk(p, 1))!=S
195b0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
195c0 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
195d0 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20  return;.        
195e0 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75  }.        db->au
195f0 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20  toCommit = 1;.  
19600 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
19610 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51  3VdbeHalt(p)==SQ
19620 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
19630 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 28         p->pc = (
19640 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b  int)(pOp - aOp);
19650 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61  .          db->a
19660 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20  utoCommit = 0;. 
19670 20 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d           p->rc =
19680 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
19690 59 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  Y;.          got
196a0 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
196b0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
196c0 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
196d0 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b  onSavepoint = 0;
196e0 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 70 2d  .        rc = p-
196f0 3e 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  >rc;.      }else
19700 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 73  {.        int is
19710 53 63 68 65 6d 61 43 68 61 6e 67 65 3b 0a 20 20  SchemaChange;.  
19720 20 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74        iSavepoint
19730 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e   = db->nSavepoin
19740 74 20 2d 20 69 53 61 76 65 70 6f 69 6e 74 20 2d  t - iSavepoint -
19750 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20   1;.        if( 
19760 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f  p1==SAVEPOINT_RO
19770 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20 20 20  LLBACK ){.      
19780 20 20 20 20 69 73 53 63 68 65 6d 61 43 68 61 6e      isSchemaChan
19790 67 65 20 3d 20 28 64 62 2d 3e 6d 44 62 46 6c 61  ge = (db->mDbFla
197a0 67 73 20 26 20 44 42 46 4c 41 47 5f 53 63 68 65  gs & DBFLAG_Sche
197b0 6d 61 43 68 61 6e 67 65 29 21 3d 30 3b 0a 20 20  maChange)!=0;.  
197c0 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30          for(ii=0
197d0 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69  ; ii<db->nDb; ii
197e0 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ++){.           
197f0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
19800 65 65 54 72 69 70 41 6c 6c 43 75 72 73 6f 72 73  eeTripAllCursors
19810 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74  (db->aDb[ii].pBt
19820 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
19830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19840 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f           SQLITE_
19850 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 2c 0a  ABORT_ROLLBACK,.
19860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19880 20 20 20 20 20 20 20 69 73 53 63 68 65 6d 61 43         isSchemaC
19890 68 61 6e 67 65 3d 3d 30 29 3b 0a 20 20 20 20 20  hange==0);.     
198a0 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
198b0 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20  QLITE_OK ) goto 
198c0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
198d0 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  or;.          }.
198e0 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
198f0 20 20 20 20 20 20 20 20 20 69 73 53 63 68 65 6d           isSchem
19900 61 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 20  aChange = 0;.   
19910 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 66       }.        f
19920 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e  or(ii=0; ii<db->
19930 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20  nDb; ii++){.    
19940 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
19950 65 33 42 74 72 65 65 53 61 76 65 70 6f 69 6e 74  e3BtreeSavepoint
19960 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74  (db->aDb[ii].pBt
19970 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74  , p1, iSavepoint
19980 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  );.          if(
19990 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
199a0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 6f  {.            go
199b0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
199c0 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20  error;.         
199d0 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
199e0 20 20 20 20 20 69 66 28 20 69 73 53 63 68 65 6d       if( isSchem
199f0 61 43 68 61 6e 67 65 20 29 7b 0a 20 20 20 20 20  aChange ){.     
19a00 20 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69       sqlite3Expi
19a10 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d  rePreparedStatem
19a20 65 6e 74 73 28 64 62 2c 20 30 29 3b 0a 20 20 20  ents(db, 0);.   
19a30 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65         sqlite3Re
19a40 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43  setAllSchemasOfC
19a50 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20  onnection(db);. 
19a60 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6d 44 62           db->mDb
19a70 46 6c 61 67 73 20 7c 3d 20 44 42 46 4c 41 47 5f  Flags |= DBFLAG_
19a80 53 63 68 65 6d 61 43 68 61 6e 67 65 3b 0a 20 20  SchemaChange;.  
19a90 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
19aa0 20 20 0a 20 20 20 20 20 20 2f 2a 20 52 65 67 61    .      /* Rega
19ab0 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65  rdless of whethe
19ac0 72 20 74 68 69 73 20 69 73 20 61 20 52 45 4c 45  r this is a RELE
19ad0 41 53 45 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c  ASE or ROLLBACK,
19ae0 20 64 65 73 74 72 6f 79 20 61 6c 6c 20 0a 20 20   destroy all .  
19af0 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74      ** savepoint
19b00 73 20 6e 65 73 74 65 64 20 69 6e 73 69 64 65 20  s nested inside 
19b10 6f 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74  of the savepoint
19b20 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20   being operated 
19b30 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20 20 77 68 69  on. */.      whi
19b40 6c 65 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  le( db->pSavepoi
19b50 6e 74 21 3d 70 53 61 76 65 70 6f 69 6e 74 20 29  nt!=pSavepoint )
19b60 7b 0a 20 20 20 20 20 20 20 20 70 54 6d 70 20 3d  {.        pTmp =
19b70 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b   db->pSavepoint;
19b80 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61  .        db->pSa
19b90 76 65 70 6f 69 6e 74 20 3d 20 70 54 6d 70 2d 3e  vepoint = pTmp->
19ba0 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73  pNext;.        s
19bb0 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
19bc0 20 70 54 6d 70 29 3b 0a 20 20 20 20 20 20 20 20   pTmp);.        
19bd0 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d  db->nSavepoint--
19be0 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
19bf0 20 2f 2a 20 49 66 20 69 74 20 69 73 20 61 20 52   /* If it is a R
19c00 45 4c 45 41 53 45 2c 20 74 68 65 6e 20 64 65 73  ELEASE, then des
19c10 74 72 6f 79 20 74 68 65 20 73 61 76 65 70 6f 69  troy the savepoi
19c20 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65  nt being operate
19c30 64 20 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 74  d on .      ** t
19c40 6f 6f 2e 20 49 66 20 69 74 20 69 73 20 61 20 52  oo. If it is a R
19c50 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20 74 68 65 6e  OLLBACK TO, then
19c60 20 73 65 74 20 74 68 65 20 6e 75 6d 62 65 72 20   set the number 
19c70 6f 66 20 64 65 66 65 72 72 65 64 20 0a 20 20 20  of deferred .   
19c80 20 20 20 2a 2a 20 63 6f 6e 73 74 72 61 69 6e 74     ** constraint
19c90 20 76 69 6f 6c 61 74 69 6f 6e 73 20 70 72 65 73   violations pres
19ca0 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61 62  ent in the datab
19cb0 61 73 65 20 74 6f 20 74 68 65 20 76 61 6c 75 65  ase to the value
19cc0 20 73 74 6f 72 65 64 0a 20 20 20 20 20 20 2a 2a   stored.      **
19cd0 20 77 68 65 6e 20 74 68 65 20 73 61 76 65 70 6f   when the savepo
19ce0 69 6e 74 20 77 61 73 20 63 72 65 61 74 65 64 2e  int was created.
19cf0 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70    */.      if( p
19d00 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  1==SAVEPOINT_REL
19d10 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20  EASE ){.        
19d20 61 73 73 65 72 74 28 20 70 53 61 76 65 70 6f 69  assert( pSavepoi
19d30 6e 74 3d 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69  nt==db->pSavepoi
19d40 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62  nt );.        db
19d50 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70  ->pSavepoint = p
19d60 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74  Savepoint->pNext
19d70 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
19d80 33 44 62 46 72 65 65 28 64 62 2c 20 70 53 61 76  3DbFree(db, pSav
19d90 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20  epoint);.       
19da0 20 69 66 28 20 21 69 73 54 72 61 6e 73 61 63 74   if( !isTransact
19db0 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ion ){.         
19dc0 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d   db->nSavepoint-
19dd0 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  -;.        }.   
19de0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
19df0 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43    db->nDeferredC
19e00 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f 69 6e 74  ons = pSavepoint
19e10 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b  ->nDeferredCons;
19e20 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 44 65  .        db->nDe
19e30 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20  ferredImmCons = 
19e40 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66  pSavepoint->nDef
19e50 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20  erredImmCons;.  
19e60 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 69 66 28      }..      if(
19e70 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20   !isTransaction 
19e80 7c 7c 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  || p1==SAVEPOINT
19e90 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20  _ROLLBACK ){.   
19ea0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
19eb0 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64  3VtabSavepoint(d
19ec0 62 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e  b, p1, iSavepoin
19ed0 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  t);.        if( 
19ee0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
19ef0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
19f00 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
19f10 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28  .    }.  }.  if(
19f20 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
19f30 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a  _due_to_error;..
19f40 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
19f50 70 63 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69  pcode: AutoCommi
19f60 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
19f70 0a 2a 2a 20 53 65 74 20 74 68 65 20 64 61 74 61  .** Set the data
19f80 62 61 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74  base auto-commit
19f90 20 66 6c 61 67 20 74 6f 20 50 31 20 28 31 20 6f   flag to P1 (1 o
19fa0 72 20 30 29 2e 20 49 66 20 50 32 20 69 73 20 74  r 0). If P2 is t
19fb0 72 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63  rue, roll.** bac
19fc0 6b 20 61 6e 79 20 63 75 72 72 65 6e 74 6c 79 20  k any currently 
19fd0 61 63 74 69 76 65 20 62 74 72 65 65 20 74 72 61  active btree tra
19fe0 6e 73 61 63 74 69 6f 6e 73 2e 20 49 66 20 74 68  nsactions. If th
19ff0 65 72 65 20 61 72 65 20 61 6e 79 20 61 63 74 69  ere are any acti
1a000 76 65 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72 74  ve.** VMs (apart
1a010 20 66 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c   from this one),
1a020 20 74 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b   then a ROLLBACK
1a030 20 66 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49   fails.  A COMMI
1a040 54 20 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68  T fails if.** th
1a050 65 72 65 20 61 72 65 20 61 63 74 69 76 65 20 77  ere are active w
1a060 72 69 74 69 6e 67 20 56 4d 73 20 6f 72 20 61 63  riting VMs or ac
1a070 74 69 76 65 20 56 4d 73 20 74 68 61 74 20 75 73  tive VMs that us
1a080 65 20 73 68 61 72 65 64 20 63 61 63 68 65 2e 0a  e shared cache..
1a090 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
1a0a0 75 63 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68  uction causes th
1a0b0 65 20 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f  e VM to halt..*/
1a0c0 0a 63 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d  .case OP_AutoCom
1a0d0 6d 69 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65 73  mit: {.  int des
1a0e0 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a  iredAutoCommit;.
1a0f0 20 20 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b 3b    int iRollback;
1a100 0a 0a 20 20 64 65 73 69 72 65 64 41 75 74 6f 43  ..  desiredAutoC
1a110 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b  ommit = pOp->p1;
1a120 0a 20 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20 70  .  iRollback = p
1a130 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74  Op->p2;.  assert
1a140 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  ( desiredAutoCom
1a150 6d 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72 65  mit==1 || desire
1a160 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29  dAutoCommit==0 )
1a170 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65 73 69  ;.  assert( desi
1a180 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31  redAutoCommit==1
1a190 20 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d 30   || iRollback==0
1a1a0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62   );.  assert( db
1a1b0 2d 3e 6e 56 64 62 65 41 63 74 69 76 65 3e 30 20  ->nVdbeActive>0 
1a1c0 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73 74 20  );  /* At least 
1a1d0 74 68 69 73 20 6f 6e 65 20 56 4d 20 69 73 20 61  this one VM is a
1a1e0 63 74 69 76 65 20 2a 2f 0a 20 20 61 73 73 65 72  ctive */.  asser
1a1f0 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
1a200 29 3b 0a 0a 20 20 69 66 28 20 64 65 73 69 72 65  );..  if( desire
1a210 64 41 75 74 6f 43 6f 6d 6d 69 74 21 3d 64 62 2d  dAutoCommit!=db-
1a220 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20  >autoCommit ){. 
1a230 20 20 20 69 66 28 20 69 52 6f 6c 6c 62 61 63 6b     if( iRollback
1a240 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
1a250 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  ( desiredAutoCom
1a260 6d 69 74 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20  mit==1 );.      
1a270 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41  sqlite3RollbackA
1a280 6c 6c 28 64 62 2c 20 53 51 4c 49 54 45 5f 41 42  ll(db, SQLITE_AB
1a290 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 29 3b 0a 20  ORT_ROLLBACK);. 
1a2a0 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d       db->autoCom
1a2b0 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c  mit = 1;.    }el
1a2c0 73 65 20 69 66 28 20 64 65 73 69 72 65 64 41 75  se if( desiredAu
1a2d0 74 6f 43 6f 6d 6d 69 74 20 26 26 20 64 62 2d 3e  toCommit && db->
1a2e0 6e 56 64 62 65 57 72 69 74 65 3e 30 20 29 7b 0a  nVdbeWrite>0 ){.
1a2f0 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73        /* If this
1a300 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70   instruction imp
1a310 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d 49 54  lements a COMMIT
1a320 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61   and other VMs a
1a330 72 65 20 77 72 69 74 69 6e 67 0a 20 20 20 20 20  re writing.     
1a340 20 2a 2a 20 72 65 74 75 72 6e 20 61 6e 20 65 72   ** return an er
1a350 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74  ror indicating t
1a360 68 61 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d  hat the other VM
1a370 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20  s must complete 
1a380 66 69 72 73 74 2e 20 0a 20 20 20 20 20 20 2a 2f  first. .      */
1a390 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
1a3a0 62 65 45 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e  beError(p, "cann
1a3b0 6f 74 20 63 6f 6d 6d 69 74 20 74 72 61 6e 73 61  ot commit transa
1a3c0 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20  ction - ".      
1a3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3e0 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65      "SQL stateme
1a3f0 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22  nts in progress"
1a400 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  );.      rc = SQ
1a410 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20  LITE_BUSY;.     
1a420 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1a430 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65  to_error;.    }e
1a440 6c 73 65 20 69 66 28 20 28 72 63 20 3d 20 73 71  lse if( (rc = sq
1a450 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b  lite3VdbeCheckFk
1a460 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f  (p, 1))!=SQLITE_
1a470 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  OK ){.      goto
1a480 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
1a490 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64    }else{.      d
1a4a0 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
1a4b0 28 75 38 29 64 65 73 69 72 65 64 41 75 74 6f 43  (u8)desiredAutoC
1a4c0 6f 6d 6d 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20  ommit;.    }.   
1a4d0 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
1a4e0 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f  Halt(p)==SQLITE_
1a4f0 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 70 2d  BUSY ){.      p-
1a500 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  >pc = (int)(pOp 
1a510 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20 20 64 62  - aOp);.      db
1a520 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28  ->autoCommit = (
1a530 75 38 29 28 31 2d 64 65 73 69 72 65 64 41 75 74  u8)(1-desiredAut
1a540 6f 43 6f 6d 6d 69 74 29 3b 0a 20 20 20 20 20 20  oCommit);.      
1a550 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c  p->rc = rc = SQL
1a560 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20  ITE_BUSY;.      
1a570 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
1a580 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65  ;.    }.    asse
1a590 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65  rt( db->nStateme
1a5a0 6e 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c  nt==0 );.    sql
1a5b0 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69  ite3CloseSavepoi
1a5c0 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 69 66 28  nts(db);.    if(
1a5d0 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f   p->rc==SQLITE_O
1a5e0 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  K ){.      rc = 
1a5f0 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 20  SQLITE_DONE;.   
1a600 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63   }else{.      rc
1a610 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
1a620 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20  .    }.    goto 
1a630 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 7d  vdbe_return;.  }
1a640 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65  else{.    sqlite
1a650 33 56 64 62 65 45 72 72 6f 72 28 70 2c 0a 20 20  3VdbeError(p,.  
1a660 20 20 20 20 20 20 28 21 64 65 73 69 72 65 64 41        (!desiredA
1a670 75 74 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e  utoCommit)?"cann
1a680 6f 74 20 73 74 61 72 74 20 61 20 74 72 61 6e 73  ot start a trans
1a690 61 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 61 20  action within a 
1a6a0 74 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20  transaction":(. 
1a6b0 20 20 20 20 20 20 20 28 69 52 6f 6c 6c 62 61 63         (iRollbac
1a6c0 6b 29 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62  k)?"cannot rollb
1a6d0 61 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63  ack - no transac
1a6e0 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 3a  tion is active":
1a6f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a700 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d      "cannot comm
1a710 69 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74  it - no transact
1a720 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 29 29  ion is active"))
1a730 3b 0a 20 20 20 20 20 20 20 20 20 0a 20 20 20 20  ;.         .    
1a740 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
1a750 52 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  R;.    goto abor
1a760 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1a770 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
1a780 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 6e 73  /* Opcode: Trans
1a790 61 63 74 69 6f 6e 20 50 31 20 50 32 20 50 33 20  action P1 P2 P3 
1a7a0 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 65 67 69  P4 P5.**.** Begi
1a7b0 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  n a transaction 
1a7c0 6f 6e 20 64 61 74 61 62 61 73 65 20 50 31 20 69  on database P1 i
1a7d0 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  f a transaction 
1a7e0 69 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 0a 2a  is not already.*
1a7f0 2a 20 61 63 74 69 76 65 2e 0a 2a 2a 20 49 66 20  * active..** If 
1a800 50 32 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  P2 is non-zero, 
1a810 74 68 65 6e 20 61 20 77 72 69 74 65 2d 74 72 61  then a write-tra
1a820 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72  nsaction is star
1a830 74 65 64 2c 20 6f 72 20 69 66 20 61 20 0a 2a 2a  ted, or if a .**
1a840 20 72 65 61 64 2d 74 72 61 6e 73 61 63 74 69 6f   read-transactio
1a850 6e 20 69 73 20 61 6c 72 65 61 64 79 20 61 63 74  n is already act
1a860 69 76 65 2c 20 69 74 20 69 73 20 75 70 67 72 61  ive, it is upgra
1a870 64 65 64 20 74 6f 20 61 20 77 72 69 74 65 2d 74  ded to a write-t
1a880 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2a 20 49  ransaction..** I
1a890 66 20 50 32 20 69 73 20 7a 65 72 6f 2c 20 74 68  f P2 is zero, th
1a8a0 65 6e 20 61 20 72 65 61 64 2d 74 72 61 6e 73 61  en a read-transa
1a8b0 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64  ction is started
1a8c0 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68  ..**.** P1 is th
1a8d0 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64  e index of the d
1a8e0 61 74 61 62 61 73 65 20 66 69 6c 65 20 6f 6e 20  atabase file on 
1a8f0 77 68 69 63 68 20 74 68 65 20 74 72 61 6e 73 61  which the transa
1a900 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 73 74 61 72  ction is.** star
1a910 74 65 64 2e 20 20 49 6e 64 65 78 20 30 20 69 73  ted.  Index 0 is
1a920 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
1a930 73 65 20 66 69 6c 65 20 61 6e 64 20 69 6e 64 65  se file and inde
1a940 78 20 31 20 69 73 20 74 68 65 0a 2a 2a 20 66 69  x 1 is the.** fi
1a950 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70  le used for temp
1a960 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20 49  orary tables.  I
1a970 6e 64 69 63 65 73 20 6f 66 20 32 20 6f 72 20 6d  ndices of 2 or m
1a980 6f 72 65 20 61 72 65 20 75 73 65 64 20 66 6f 72  ore are used for
1a990 0a 2a 2a 20 61 74 74 61 63 68 65 64 20 64 61 74  .** attached dat
1a9a0 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  abases..**.** If
1a9b0 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63   a write-transac
1a9c0 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 20  tion is started 
1a9d0 61 6e 64 20 74 68 65 20 56 64 62 65 2e 75 73 65  and the Vdbe.use
1a9e0 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 66 6c 61  sStmtJournal fla
1a9f0 67 20 69 73 0a 2a 2a 20 74 72 75 65 20 28 74 68  g is.** true (th
1aa00 69 73 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  is flag is set i
1aa10 66 20 74 68 65 20 56 64 62 65 20 6d 61 79 20 6d  f the Vdbe may m
1aa20 6f 64 69 66 79 20 6d 6f 72 65 20 74 68 61 6e 20  odify more than 
1aa30 6f 6e 65 20 72 6f 77 20 61 6e 64 20 6d 61 79 0a  one row and may.
1aa40 2a 2a 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52  ** throw an ABOR
1aa50 54 20 65 78 63 65 70 74 69 6f 6e 29 2c 20 61 20  T exception), a 
1aa60 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
1aa70 63 74 69 6f 6e 20 6d 61 79 20 61 6c 73 6f 20 62  ction may also b
1aa80 65 20 6f 70 65 6e 65 64 2e 0a 2a 2a 20 4d 6f 72  e opened..** Mor
1aa90 65 20 73 70 65 63 69 66 69 63 61 6c 6c 79 2c 20  e specifically, 
1aaa0 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  a statement tran
1aab0 73 61 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e 65  saction is opene
1aac0 64 20 69 66 66 20 74 68 65 20 64 61 74 61 62 61  d iff the databa
1aad0 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e  se.** connection
1aae0 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 6e 6f   is currently no
1aaf0 74 20 69 6e 20 61 75 74 6f 63 6f 6d 6d 69 74 20  t in autocommit 
1ab00 6d 6f 64 65 2c 20 6f 72 20 69 66 20 74 68 65 72  mode, or if ther
1ab10 65 20 61 72 65 20 6f 74 68 65 72 0a 2a 2a 20 61  e are other.** a
1ab20 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74 73  ctive statements
1ab30 2e 20 41 20 73 74 61 74 65 6d 65 6e 74 20 74 72  . A statement tr
1ab40 61 6e 73 61 63 74 69 6f 6e 20 61 6c 6c 6f 77 73  ansaction allows
1ab50 20 74 68 65 20 63 68 61 6e 67 65 73 20 6d 61 64   the changes mad
1ab60 65 20 62 79 20 74 68 69 73 0a 2a 2a 20 56 44 42  e by this.** VDB
1ab70 45 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62  E to be rolled b
1ab80 61 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72  ack after an err
1ab90 6f 72 20 77 69 74 68 6f 75 74 20 68 61 76 69 6e  or without havin
1aba0 67 20 74 6f 20 72 6f 6c 6c 20 62 61 63 6b 20 74  g to roll back t
1abb0 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20 74 72 61  he.** entire tra
1abc0 6e 73 61 63 74 69 6f 6e 2e 20 49 66 20 6e 6f 20  nsaction. If no 
1abd0 65 72 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74  error is encount
1abe0 65 72 65 64 2c 20 74 68 65 20 73 74 61 74 65 6d  ered, the statem
1abf0 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  ent transaction.
1ac00 2a 2a 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69  ** will automati
1ac10 63 61 6c 6c 79 20 63 6f 6d 6d 69 74 20 77 68 65  cally commit whe
1ac20 6e 20 74 68 65 20 56 44 42 45 20 68 61 6c 74 73  n the VDBE halts
1ac30 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30  ..**.** If P5!=0
1ac40 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64   then this opcod
1ac50 65 20 61 6c 73 6f 20 63 68 65 63 6b 73 20 74 68  e also checks th
1ac60 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20  e schema cookie 
1ac70 61 67 61 69 6e 73 74 20 50 33 0a 2a 2a 20 61 6e  against P3.** an
1ac80 64 20 74 68 65 20 73 63 68 65 6d 61 20 67 65 6e  d the schema gen
1ac90 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20  eration counter 
1aca0 61 67 61 69 6e 73 74 20 50 34 2e 0a 2a 2a 20 54  against P4..** T
1acb0 68 65 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65  he cookie change
1acc0 73 20 69 74 73 20 76 61 6c 75 65 20 77 68 65 6e  s its value when
1acd0 65 76 65 72 20 74 68 65 20 64 61 74 61 62 61 73  ever the databas
1ace0 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73  e schema changes
1acf0 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74  ..** This operat
1ad00 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 64  ion is used to d
1ad10 65 74 65 63 74 20 77 68 65 6e 20 74 68 61 74 20  etect when that 
1ad20 74 68 65 20 63 6f 6f 6b 69 65 20 68 61 73 20 63  the cookie has c
1ad30 68 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 74 68  hanged.** and th
1ad40 61 74 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  at the current p
1ad50 72 6f 63 65 73 73 20 6e 65 65 64 73 20 74 6f 20  rocess needs to 
1ad60 72 65 72 65 61 64 20 74 68 65 20 73 63 68 65 6d  reread the schem
1ad70 61 2e 20 20 49 66 20 74 68 65 20 73 63 68 65 6d  a.  If the schem
1ad80 61 0a 2a 2a 20 63 6f 6f 6b 69 65 20 69 6e 20 50  a.** cookie in P
1ad90 33 20 64 69 66 66 65 72 73 20 66 72 6f 6d 20 74  3 differs from t
1ada0 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  he schema cookie
1adb0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
1adc0 20 68 65 61 64 65 72 20 6f 72 0a 2a 2a 20 69 66   header or.** if
1add0 20 74 68 65 20 73 63 68 65 6d 61 20 67 65 6e 65   the schema gene
1ade0 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 69  ration counter i
1adf0 6e 20 50 34 20 64 69 66 66 65 72 73 20 66 72 6f  n P4 differs fro
1ae00 6d 20 74 68 65 20 63 75 72 72 65 6e 74 0a 2a 2a  m the current.**
1ae10 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e   generation coun
1ae20 74 65 72 2c 20 74 68 65 6e 20 61 6e 20 53 51 4c  ter, then an SQL
1ae30 49 54 45 5f 53 43 48 45 4d 41 20 65 72 72 6f 72  ITE_SCHEMA error
1ae40 20 69 73 20 72 61 69 73 65 64 20 61 6e 64 20 65   is raised and e
1ae50 78 65 63 75 74 69 6f 6e 0a 2a 2a 20 68 61 6c 74  xecution.** halt
1ae60 73 2e 20 20 54 68 65 20 73 71 6c 69 74 65 33 5f  s.  The sqlite3_
1ae70 73 74 65 70 28 29 20 77 72 61 70 70 65 72 20 66  step() wrapper f
1ae80 75 6e 63 74 69 6f 6e 20 6d 69 67 68 74 20 74 68  unction might th
1ae90 65 6e 20 72 65 70 72 65 70 61 72 65 20 74 68 65  en reprepare the
1aea0 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 61 6e  .** statement an
1aeb0 64 20 72 65 72 75 6e 20 69 74 20 66 72 6f 6d 20  d rerun it from 
1aec0 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 0a 2a  the beginning..*
1aed0 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61 6e 73 61  /.case OP_Transa
1aee0 63 74 69 6f 6e 3a 20 7b 0a 20 20 42 74 72 65 65  ction: {.  Btree
1aef0 20 2a 70 42 74 3b 0a 20 20 69 6e 74 20 69 4d 65   *pBt;.  int iMe
1af00 74 61 20 3d 20 30 3b 0a 0a 20 20 61 73 73 65 72  ta = 0;..  asser
1af10 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
1af20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
1af30 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 7c 7c 20 70  readOnly==0 || p
1af40 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20 20 61  Op->p2==0 );.  a
1af50 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1af60 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
1af70 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
1af80 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
1af90 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e  btreeMask, pOp->
1afa0 70 31 29 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  p1) );.  if( pOp
1afb0 2d 3e 70 32 20 26 26 20 28 64 62 2d 3e 66 6c 61  ->p2 && (db->fla
1afc0 67 73 20 26 20 53 51 4c 49 54 45 5f 51 75 65 72  gs & SQLITE_Quer
1afd0 79 4f 6e 6c 79 29 21 3d 30 20 29 7b 0a 20 20 20  yOnly)!=0 ){.   
1afe0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 45 41   rc = SQLITE_REA
1aff0 44 4f 4e 4c 59 3b 0a 20 20 20 20 67 6f 74 6f 20  DONLY;.    goto 
1b000 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1b010 6f 72 3b 0a 20 20 7d 0a 20 20 70 42 74 20 3d 20  or;.  }.  pBt = 
1b020 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
1b030 2e 70 42 74 3b 0a 0a 20 20 69 66 28 20 70 42 74  .pBt;..  if( pBt
1b040 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
1b050 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 54 72  ite3BtreeBeginTr
1b060 61 6e 73 28 70 42 74 2c 20 70 4f 70 2d 3e 70 32  ans(pBt, pOp->p2
1b070 2c 20 26 69 4d 65 74 61 29 3b 0a 20 20 20 20 74  , &iMeta);.    t
1b080 65 73 74 63 61 73 65 28 20 72 63 3d 3d 53 51 4c  estcase( rc==SQL
1b090 49 54 45 5f 42 55 53 59 5f 53 4e 41 50 53 48 4f  ITE_BUSY_SNAPSHO
1b0a0 54 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73  T );.    testcas
1b0b0 65 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  e( rc==SQLITE_BU
1b0c0 53 59 5f 52 45 43 4f 56 45 52 59 20 29 3b 0a 20  SY_RECOVERY );. 
1b0d0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
1b0e0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 69 66  E_OK ){.      if
1b0f0 28 20 28 72 63 26 30 78 66 66 29 3d 3d 53 51 4c  ( (rc&0xff)==SQL
1b100 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20  ITE_BUSY ){.    
1b110 20 20 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74      p->pc = (int
1b120 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20  )(pOp - aOp);.  
1b130 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63        p->rc = rc
1b140 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76  ;.        goto v
1b150 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
1b160 20 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20 61    }.      goto a
1b170 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1b180 72 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66  r;.    }..    if
1b190 28 20 70 4f 70 2d 3e 70 32 20 26 26 20 70 2d 3e  ( pOp->p2 && p->
1b1a0 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20  usesStmtJournal 
1b1b0 0a 20 20 20 20 20 26 26 20 28 64 62 2d 3e 61 75  .     && (db->au
1b1c0 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64  toCommit==0 || d
1b1d0 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31 29 20  b->nVdbeRead>1) 
1b1e0 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 61 73  .    ){.      as
1b1f0 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
1b200 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29  eeIsInTrans(pBt)
1b210 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d   );.      if( p-
1b220 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29  >iStatement==0 )
1b230 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
1b240 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74  ( db->nStatement
1b250 3e 3d 30 20 26 26 20 64 62 2d 3e 6e 53 61 76 65  >=0 && db->nSave
1b260 70 6f 69 6e 74 3e 3d 30 20 29 3b 0a 20 20 20 20  point>=0 );.    
1b270 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65      db->nStateme
1b280 6e 74 2b 2b 3b 20 0a 20 20 20 20 20 20 20 20 70  nt++; .        p
1b290 2d 3e 69 53 74 61 74 65 6d 65 6e 74 20 3d 20 64  ->iStatement = d
1b2a0 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20  b->nSavepoint + 
1b2b0 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3b 0a  db->nStatement;.
1b2c0 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 72        }..      r
1b2d0 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53  c = sqlite3VtabS
1b2e0 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 53 41 56  avepoint(db, SAV
1b2f0 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 20 70 2d  EPOINT_BEGIN, p-
1b300 3e 69 53 74 61 74 65 6d 65 6e 74 2d 31 29 3b 0a  >iStatement-1);.
1b310 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
1b320 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
1b330 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1b340 74 72 65 65 42 65 67 69 6e 53 74 6d 74 28 70 42  treeBeginStmt(pB
1b350 74 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74  t, p->iStatement
1b360 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  );.      }..    
1b370 20 20 2f 2a 20 53 74 6f 72 65 20 74 68 65 20 63    /* Store the c
1b380 75 72 72 65 6e 74 20 76 61 6c 75 65 20 6f 66 20  urrent value of 
1b390 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
1b3a0 64 6c 65 73 20 64 65 66 65 72 72 65 64 20 63 6f  dles deferred co
1b3b0 6e 73 74 72 61 69 6e 74 0a 20 20 20 20 20 20 2a  nstraint.      *
1b3c0 2a 20 63 6f 75 6e 74 65 72 2e 20 49 66 20 74 68  * counter. If th
1b3d0 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  e statement tran
1b3e0 73 61 63 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f  saction needs to
1b3f0 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2c   be rolled back,
1b400 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 76 61  .      ** the va
1b410 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 75 6e  lue of this coun
1b420 74 65 72 20 6e 65 65 64 73 20 74 6f 20 62 65 20  ter needs to be 
1b430 72 65 73 74 6f 72 65 64 20 74 6f 6f 2e 20 20 2a  restored too.  *
1b440 2f 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74  /.      p->nStmt
1b450 44 65 66 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44  DefCons = db->nD
1b460 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20  eferredCons;.   
1b470 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 49 6d     p->nStmtDefIm
1b480 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66  mCons = db->nDef
1b490 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20  erredImmCons;.  
1b4a0 20 20 7d 0a 20 20 7d 0a 20 20 61 73 73 65 72 74    }.  }.  assert
1b4b0 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20  ( pOp->p5==0 || 
1b4c0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
1b4d0 49 4e 54 33 32 20 29 3b 0a 20 20 69 66 28 20 70  INT32 );.  if( p
1b4e0 4f 70 2d 3e 70 35 0a 20 20 20 26 26 20 28 69 4d  Op->p5.   && (iM
1b4f0 65 74 61 21 3d 70 4f 70 2d 3e 70 33 0a 20 20 20  eta!=pOp->p3.   
1b500 20 20 20 7c 7c 20 64 62 2d 3e 61 44 62 5b 70 4f     || db->aDb[pO
1b510 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e  p->p1].pSchema->
1b520 69 47 65 6e 65 72 61 74 69 6f 6e 21 3d 70 4f 70  iGeneration!=pOp
1b530 2d 3e 70 34 2e 69 29 0a 20 20 29 7b 0a 20 20 20  ->p4.i).  ){.   
1b540 20 2f 2a 0a 20 20 20 20 2a 2a 20 49 4d 50 4c 45   /*.    ** IMPLE
1b550 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d  MENTATION-OF: R-
1b560 30 33 31 38 39 2d 35 31 31 33 35 20 41 73 20 65  03189-51135 As e
1b570 61 63 68 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  ach SQL statemen
1b580 74 20 72 75 6e 73 2c 20 74 68 65 20 73 63 68 65  t runs, the sche
1b590 6d 61 0a 20 20 20 20 2a 2a 20 76 65 72 73 69 6f  ma.    ** versio
1b5a0 6e 20 69 73 20 63 68 65 63 6b 65 64 20 74 6f 20  n is checked to 
1b5b0 65 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20  ensure that the 
1b5c0 73 63 68 65 6d 61 20 68 61 73 20 6e 6f 74 20 63  schema has not c
1b5d0 68 61 6e 67 65 64 20 73 69 6e 63 65 20 74 68 65  hanged since the
1b5e0 0a 20 20 20 20 2a 2a 20 53 51 4c 20 73 74 61 74  .    ** SQL stat
1b5f0 65 6d 65 6e 74 20 77 61 73 20 70 72 65 70 61 72  ement was prepar
1b600 65 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73  ed..    */.    s
1b610 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
1b620 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20   p->zErrMsg);.  
1b630 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73    p->zErrMsg = s
1b640 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28 64  qlite3DbStrDup(d
1b650 62 2c 20 22 64 61 74 61 62 61 73 65 20 73 63 68  b, "database sch
1b660 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64 22  ema has changed"
1b670 29 3b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65  );.    /* If the
1b680 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20 66   schema-cookie f
1b690 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
1b6a0 20 66 69 6c 65 20 6d 61 74 63 68 65 73 20 74 68   file matches th
1b6b0 65 20 63 6f 6f 6b 69 65 20 0a 20 20 20 20 2a 2a  e cookie .    **
1b6c0 20 73 74 6f 72 65 64 20 77 69 74 68 20 74 68 65   stored with the
1b6d0 20 69 6e 2d 6d 65 6d 6f 72 79 20 72 65 70 72 65   in-memory repre
1b6e0 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
1b6f0 20 73 63 68 65 6d 61 2c 20 64 6f 0a 20 20 20 20   schema, do.    
1b700 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61 64 20 74 68  ** not reload th
1b710 65 20 73 63 68 65 6d 61 20 66 72 6f 6d 20 74 68  e schema from th
1b720 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
1b730 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 49  .    **.    ** I
1b740 66 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 73  f virtual-tables
1b750 20 61 72 65 20 69 6e 20 75 73 65 2c 20 74 68 69   are in use, thi
1b760 73 20 69 73 20 6e 6f 74 20 6a 75 73 74 20 61 6e  s is not just an
1b770 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 20   optimization.. 
1b780 20 20 20 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d 74     ** Often, v-t
1b790 61 62 6c 65 73 20 73 74 6f 72 65 20 74 68 65 69  ables store thei
1b7a0 72 20 64 61 74 61 20 69 6e 20 6f 74 68 65 72 20  r data in other 
1b7b0 53 51 4c 69 74 65 20 74 61 62 6c 65 73 2c 20 77  SQLite tables, w
1b7c0 68 69 63 68 0a 20 20 20 20 2a 2a 20 61 72 65 20  hich.    ** are 
1b7d0 71 75 65 72 69 65 64 20 66 72 6f 6d 20 77 69 74  queried from wit
1b7e0 68 69 6e 20 78 4e 65 78 74 28 29 20 61 6e 64 20  hin xNext() and 
1b7f0 6f 74 68 65 72 20 76 2d 74 61 62 6c 65 20 6d 65  other v-table me
1b800 74 68 6f 64 73 20 75 73 69 6e 67 0a 20 20 20 20  thods using.    
1b810 2a 2a 20 70 72 65 70 61 72 65 64 20 71 75 65 72  ** prepared quer
1b820 69 65 73 2e 20 49 66 20 73 75 63 68 20 61 20 71  ies. If such a q
1b830 75 65 72 79 20 69 73 20 6f 75 74 2d 6f 66 2d 64  uery is out-of-d
1b840 61 74 65 2c 20 77 65 20 64 6f 20 6e 6f 74 20 77  ate, we do not w
1b850 61 6e 74 20 74 6f 0a 20 20 20 20 2a 2a 20 64 69  ant to.    ** di
1b860 73 63 61 72 64 20 74 68 65 20 64 61 74 61 62 61  scard the databa
1b870 73 65 20 73 63 68 65 6d 61 2c 20 61 73 20 74 68  se schema, as th
1b880 65 20 75 73 65 72 20 63 6f 64 65 20 69 6d 70 6c  e user code impl
1b890 65 6d 65 6e 74 69 6e 67 20 74 68 65 0a 20 20 20  ementing the.   
1b8a0 20 2a 2a 20 76 2d 74 61 62 6c 65 20 77 6f 75 6c   ** v-table woul
1b8b0 64 20 68 61 76 65 20 74 6f 20 62 65 20 72 65 61  d have to be rea
1b8c0 64 79 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  dy for the sqlit
1b8d0 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72  e3_vtab structur
1b8e0 65 20 69 74 73 65 6c 66 0a 20 20 20 20 2a 2a 20  e itself.    ** 
1b8f0 74 6f 20 62 65 20 69 6e 76 61 6c 69 64 61 74 65  to be invalidate
1b900 64 20 77 68 65 6e 65 76 65 72 20 73 71 6c 69 74  d whenever sqlit
1b910 65 33 5f 73 74 65 70 28 29 20 69 73 20 63 61 6c  e3_step() is cal
1b920 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  led from within 
1b930 0a 20 20 20 20 2a 2a 20 61 20 76 2d 74 61 62 6c  .    ** a v-tabl
1b940 65 20 6d 65 74 68 6f 64 2e 0a 20 20 20 20 2a 2f  e method..    */
1b950 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62  .    if( db->aDb
1b960 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d  [pOp->p1].pSchem
1b970 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65  a->schema_cookie
1b980 21 3d 69 4d 65 74 61 20 29 7b 0a 20 20 20 20 20  !=iMeta ){.     
1b990 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65   sqlite3ResetOne
1b9a0 53 63 68 65 6d 61 28 64 62 2c 20 70 4f 70 2d 3e  Schema(db, pOp->
1b9b0 70 31 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  p1);.    }.    p
1b9c0 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a 20  ->expired = 1;. 
1b9d0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 53     rc = SQLITE_S
1b9e0 43 48 45 4d 41 3b 0a 20 20 7d 0a 20 20 69 66 28  CHEMA;.  }.  if(
1b9f0 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
1ba00 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1ba10 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1ba20 63 6f 64 65 3a 20 52 65 61 64 43 6f 6f 6b 69 65  code: ReadCookie
1ba30 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
1ba40 0a 2a 2a 20 52 65 61 64 20 63 6f 6f 6b 69 65 20  .** Read cookie 
1ba50 6e 75 6d 62 65 72 20 50 33 20 66 72 6f 6d 20 64  number P3 from d
1ba60 61 74 61 62 61 73 65 20 50 31 20 61 6e 64 20 77  atabase P1 and w
1ba70 72 69 74 65 20 69 74 20 69 6e 74 6f 20 72 65 67  rite it into reg
1ba80 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 50 33 3d  ister P2..** P3=
1ba90 3d 31 20 69 73 20 74 68 65 20 73 63 68 65 6d 61  =1 is the schema
1baa0 20 76 65 72 73 69 6f 6e 2e 20 20 50 33 3d 3d 32   version.  P3==2
1bab0 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
1bac0 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d 3d   format..** P3==
1bad0 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d 65  3 is the recomme
1bae0 6e 64 65 64 20 70 61 67 65 72 20 63 61 63 68 65  nded pager cache
1baf0 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f   size, and so fo
1bb00 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a  rth.  P1==0 is.*
1bb10 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  * the main datab
1bb20 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d  ase file and P1=
1bb30 3d 31 20 69 73 20 74 68 65 20 64 61 74 61 62 61  =1 is the databa
1bb40 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20  se file used to 
1bb50 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61  store.** tempora
1bb60 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a  ry tables..**.**
1bb70 20 54 68 65 72 65 20 6d 75 73 74 20 62 65 20 61   There must be a
1bb80 20 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e 20 74 68   read-lock on th
1bb90 65 20 64 61 74 61 62 61 73 65 20 28 65 69 74 68  e database (eith
1bba0 65 72 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  er a transaction
1bbb0 0a 2a 2a 20 6d 75 73 74 20 62 65 20 73 74 61 72  .** must be star
1bbc0 74 65 64 20 6f 72 20 74 68 65 72 65 20 6d 75 73  ted or there mus
1bbd0 74 20 62 65 20 61 6e 20 6f 70 65 6e 20 63 75 72  t be an open cur
1bbe0 73 6f 72 29 20 62 65 66 6f 72 65 0a 2a 2a 20 65  sor) before.** e
1bbf0 78 65 63 75 74 69 6e 67 20 74 68 69 73 20 69 6e  xecuting this in
1bc00 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
1bc10 73 65 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65  se OP_ReadCookie
1bc20 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
1bc30 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69    /* out2 */.  i
1bc40 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20  nt iMeta;.  int 
1bc50 69 44 62 3b 0a 20 20 69 6e 74 20 69 43 6f 6f 6b  iDb;.  int iCook
1bc60 69 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  ie;..  assert( p
1bc70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20  ->bIsReader );. 
1bc80 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a   iDb = pOp->p1;.
1bc90 20 20 69 43 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d    iCookie = pOp-
1bca0 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 70  >p3;.  assert( p
1bcb0 4f 70 2d 3e 70 33 3c 53 51 4c 49 54 45 5f 4e 5f  Op->p3<SQLITE_N_
1bcc0 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20  BTREE_META );.  
1bcd0 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26  assert( iDb>=0 &
1bce0 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b  & iDb<db->nDb );
1bcf0 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61  .  assert( db->a
1bd00 44 62 5b 69 44 62 5d 2e 70 42 74 21 3d 30 20 29  Db[iDb].pBt!=0 )
1bd10 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61  ;.  assert( DbMa
1bd20 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
1bd30 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 0a 20 20  ask, iDb) );..  
1bd40 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d  sqlite3BtreeGetM
1bd50 65 74 61 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d  eta(db->aDb[iDb]
1bd60 2e 70 42 74 2c 20 69 43 6f 6f 6b 69 65 2c 20 28  .pBt, iCookie, (
1bd70 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20  u32 *)&iMeta);. 
1bd80 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
1bd90 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
1bda0 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d    pOut->u.i = iM
1bdb0 65 74 61 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  eta;.  break;.}.
1bdc0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 74 43  ./* Opcode: SetC
1bdd0 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a  ookie P1 P2 P3 *
1bde0 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74   *.**.** Write t
1bdf0 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  he integer value
1be00 20 50 33 20 69 6e 74 6f 20 63 6f 6f 6b 69 65 20   P3 into cookie 
1be10 6e 75 6d 62 65 72 20 50 32 20 6f 66 20 64 61 74  number P2 of dat
1be20 61 62 61 73 65 20 50 31 2e 0a 2a 2a 20 50 32 3d  abase P1..** P2=
1be30 3d 31 20 69 73 20 74 68 65 20 73 63 68 65 6d 61  =1 is the schema
1be40 20 76 65 72 73 69 6f 6e 2e 20 20 50 32 3d 3d 32   version.  P2==2
1be50 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
1be60 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 32 3d 3d   format..** P2==
1be70 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d 65  3 is the recomme
1be80 6e 64 65 64 20 70 61 67 65 72 20 63 61 63 68 65  nded pager cache
1be90 20 0a 2a 2a 20 73 69 7a 65 2c 20 61 6e 64 20 73   .** size, and s
1bea0 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20  o forth.  P1==0 
1beb0 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  is the main data
1bec0 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31  base file and P1
1bed0 3d 3d 31 20 69 73 20 74 68 65 20 0a 2a 2a 20 64  ==1 is the .** d
1bee0 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65  atabase file use
1bef0 64 20 74 6f 20 73 74 6f 72 65 20 74 65 6d 70 6f  d to store tempo
1bf00 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a  rary tables..**.
1bf10 2a 2a 20 41 20 74 72 61 6e 73 61 63 74 69 6f 6e  ** A transaction
1bf20 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65 64   must be started
1bf30 20 62 65 66 6f 72 65 20 65 78 65 63 75 74 69 6e   before executin
1bf40 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a  g this opcode..*
1bf50 2f 0a 63 61 73 65 20 4f 50 5f 53 65 74 43 6f 6f  /.case OP_SetCoo
1bf60 6b 69 65 3a 20 7b 0a 20 20 44 62 20 2a 70 44 62  kie: {.  Db *pDb
1bf70 3b 0a 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  ;..  sqlite3Vdbe
1bf80 49 6e 63 72 57 72 69 74 65 43 6f 75 6e 74 65 72  IncrWriteCounter
1bf90 28 70 2c 20 30 29 3b 0a 20 20 61 73 73 65 72 74  (p, 0);.  assert
1bfa0 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c 49 54 45  ( pOp->p2<SQLITE
1bfb0 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b  _N_BTREE_META );
1bfc0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1bfd0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1bfe0 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
1bff0 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
1c000 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70  (p->btreeMask, p
1c010 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73  Op->p1) );.  ass
1c020 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
1c030 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26  ==0 );.  pDb = &
1c040 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
1c050 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44 62 2d  ;.  assert( pDb-
1c060 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73  >pBt!=0 );.  ass
1c070 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65  ert( sqlite3Sche
1c080 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20  maMutexHeld(db, 
1c090 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a 20  pOp->p1, 0) );. 
1c0a0 20 2f 2a 20 53 65 65 20 6e 6f 74 65 20 61 62 6f   /* See note abo
1c0b0 75 74 20 69 6e 64 65 78 20 73 68 69 66 74 69 6e  ut index shiftin
1c0c0 67 20 6f 6e 20 4f 50 5f 52 65 61 64 43 6f 6f 6b  g on OP_ReadCook
1c0d0 69 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c  ie */.  rc = sql
1c0e0 69 74 65 33 42 74 72 65 65 55 70 64 61 74 65 4d  ite3BtreeUpdateM
1c0f0 65 74 61 28 70 44 62 2d 3e 70 42 74 2c 20 70 4f  eta(pDb->pBt, pO
1c100 70 2d 3e 70 32 2c 20 70 4f 70 2d 3e 70 33 29 3b  p->p2, pOp->p3);
1c110 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d  .  if( pOp->p2==
1c120 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52  BTREE_SCHEMA_VER
1c130 53 49 4f 4e 20 29 7b 0a 20 20 20 20 2f 2a 20 57  SION ){.    /* W
1c140 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20 63  hen the schema c
1c150 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 2c 20 72  ookie changes, r
1c160 65 63 6f 72 64 20 74 68 65 20 6e 65 77 20 63 6f  ecord the new co
1c170 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c 6c 79 20  okie internally 
1c180 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68  */.    pDb->pSch
1c190 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b  ema->schema_cook
1c1a0 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  ie = pOp->p3;.  
1c1b0 20 20 64 62 2d 3e 6d 44 62 46 6c 61 67 73 20 7c    db->mDbFlags |
1c1c0 3d 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61 43  = DBFLAG_SchemaC
1c1d0 68 61 6e 67 65 3b 0a 20 20 7d 65 6c 73 65 20 69  hange;.  }else i
1c1e0 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45  f( pOp->p2==BTRE
1c1f0 45 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 29 7b  E_FILE_FORMAT ){
1c200 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72 64 20 63  .    /* Record c
1c210 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20 66 69  hanges in the fi
1c220 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a 20 20 20  le format */.   
1c230 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66   pDb->pSchema->f
1c240 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 4f 70  ile_format = pOp
1c250 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 69 66 28 20  ->p3;.  }.  if( 
1c260 70 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20 20  pOp->p1==1 ){.  
1c270 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20    /* Invalidate 
1c280 61 6c 6c 20 70 72 65 70 61 72 65 64 20 73 74 61  all prepared sta
1c290 74 65 6d 65 6e 74 73 20 77 68 65 6e 65 76 65 72  tements whenever
1c2a0 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
1c2b0 73 65 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d 61  se.    ** schema
1c2c0 20 69 73 20 63 68 61 6e 67 65 64 2e 20 20 54 69   is changed.  Ti
1c2d0 63 6b 65 74 20 23 31 36 34 34 20 2a 2f 0a 20 20  cket #1644 */.  
1c2e0 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50    sqlite3ExpireP
1c2f0 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
1c300 73 28 64 62 2c 20 30 29 3b 0a 20 20 20 20 70 2d  s(db, 0);.    p-
1c310 3e 65 78 70 69 72 65 64 20 3d 20 30 3b 0a 20 20  >expired = 0;.  
1c320 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  }.  if( rc ) got
1c330 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1c340 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
1c350 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  ../* Opcode: Ope
1c360 6e 52 65 61 64 20 50 31 20 50 32 20 50 33 20 50  nRead P1 P2 P3 P
1c370 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
1c380 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33  : root=P2 iDb=P3
1c390 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65  .**.** Open a re
1c3a0 61 64 2d 6f 6e 6c 79 20 63 75 72 73 6f 72 20 66  ad-only cursor f
1c3b0 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  or the database 
1c3c0 74 61 62 6c 65 20 77 68 6f 73 65 20 72 6f 6f 74  table whose root
1c3d0 20 70 61 67 65 20 69 73 0a 2a 2a 20 50 32 20 69   page is.** P2 i
1c3e0 6e 20 61 20 64 61 74 61 62 61 73 65 20 66 69 6c  n a database fil
1c3f0 65 2e 20 20 54 68 65 20 64 61 74 61 62 61 73 65  e.  The database
1c400 20 66 69 6c 65 20 69 73 20 64 65 74 65 72 6d 69   file is determi
1c410 6e 65 64 20 62 79 20 50 33 2e 20 0a 2a 2a 20 50  ned by P3. .** P
1c420 33 3d 3d 30 20 6d 65 61 6e 73 20 74 68 65 20 6d  3==0 means the m
1c430 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 50 33  ain database, P3
1c440 3d 3d 31 20 6d 65 61 6e 73 20 74 68 65 20 64 61  ==1 means the da
1c450 74 61 62 61 73 65 20 75 73 65 64 20 66 6f 72 20  tabase used for 
1c460 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61  .** temporary ta
1c470 62 6c 65 73 2c 20 61 6e 64 20 50 33 3e 31 20 6d  bles, and P3>1 m
1c480 65 61 6e 73 20 75 73 65 64 20 74 68 65 20 63 6f  eans used the co
1c490 72 72 65 73 70 6f 6e 64 69 6e 67 20 61 74 74 61  rresponding atta
1c4a0 63 68 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65  ched.** database
1c4b0 2e 20 20 47 69 76 65 20 74 68 65 20 6e 65 77 20  .  Give the new 
1c4c0 63 75 72 73 6f 72 20 61 6e 20 69 64 65 6e 74 69  cursor an identi
1c4d0 66 69 65 72 20 6f 66 20 50 31 2e 20 20 54 68 65  fier of P1.  The
1c4e0 20 50 31 0a 2a 2a 20 76 61 6c 75 65 73 20 6e 65   P1.** values ne
1c4f0 65 64 20 6e 6f 74 20 62 65 20 63 6f 6e 74 69 67  ed not be contig
1c500 75 6f 75 73 20 62 75 74 20 61 6c 6c 20 50 31 20  uous but all P1 
1c510 76 61 6c 75 65 73 20 73 68 6f 75 6c 64 20 62 65  values should be
1c520 20 73 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73 2e   small integers.
1c530 0a 2a 2a 20 49 74 20 69 73 20 61 6e 20 65 72 72  .** It is an err
1c540 6f 72 20 66 6f 72 20 50 31 20 74 6f 20 62 65 20  or for P1 to be 
1c550 6e 65 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20  negative..**.** 
1c560 41 6c 6c 6f 77 65 64 20 50 35 20 62 69 74 73 3a  Allowed P5 bits:
1c570 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69 3e  .** <ul>.** <li>
1c580 20 20 3c 62 3e 30 78 30 32 20 4f 50 46 4c 41 47    <b>0x02 OPFLAG
1c590 5f 53 45 45 4b 45 51 3c 2f 62 3e 3a 20 54 68 69  _SEEKEQ</b>: Thi
1c5a0 73 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 6f 6e  s cursor will on
1c5b0 6c 79 20 62 65 20 75 73 65 64 20 66 6f 72 0a 2a  ly be used for.*
1c5c0 2a 20 20 20 20 20 20 20 65 71 75 61 6c 69 74 79  *       equality
1c5d0 20 6c 6f 6f 6b 75 70 73 20 28 69 6d 70 6c 65 6d   lookups (implem
1c5e0 65 6e 74 65 64 20 61 73 20 61 20 70 61 69 72 20  ented as a pair 
1c5f0 6f 66 20 6f 70 63 6f 64 65 73 20 4f 50 5f 53 65  of opcodes OP_Se
1c600 65 6b 47 45 2f 4f 50 5f 49 64 78 47 54 0a 2a 2a  ekGE/OP_IdxGT.**
1c610 20 20 20 20 20 20 20 6f 66 20 4f 50 5f 53 65 65         of OP_See
1c620 6b 4c 45 2f 4f 50 5f 49 64 78 47 54 29 0a 2a 2a  kLE/OP_IdxGT).**
1c630 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20 54 68 65   </ul>.**.** The
1c640 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65   P4 value may be
1c650 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67   either an integ
1c660 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72  er (P4_INT32) or
1c670 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a   a pointer to.**
1c680 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63   a KeyInfo struc
1c690 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f  ture (P4_KEYINFO
1c6a0 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70 6f  ). If it is a po
1c6b0 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e  inter to a KeyIn
1c6c0 66 6f 20 0a 2a 2a 20 6f 62 6a 65 63 74 2c 20 74  fo .** object, t
1c6d0 68 65 6e 20 74 61 62 6c 65 20 62 65 69 6e 67 20  hen table being 
1c6e0 6f 70 65 6e 65 64 20 6d 75 73 74 20 62 65 20 61  opened must be a
1c6f0 6e 20 5b 69 6e 64 65 78 20 62 2d 74 72 65 65 5d  n [index b-tree]
1c700 20 77 68 65 72 65 20 74 68 65 0a 2a 2a 20 4b 65   where the.** Ke
1c710 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20 64 65 66  yInfo object def
1c720 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65 6e 74  ines the content
1c730 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a   and collating .
1c740 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74  ** sequence of t
1c750 68 61 74 20 69 6e 64 65 78 20 62 2d 74 72 65 65  hat index b-tree
1c760 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20  . Otherwise, if 
1c770 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  P4 is an integer
1c780 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 74 68 65 6e   .** value, then
1c790 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
1c7a0 20 6f 70 65 6e 65 64 20 6d 75 73 74 20 62 65 20   opened must be 
1c7b0 61 20 5b 74 61 62 6c 65 20 62 2d 74 72 65 65 5d  a [table b-tree]
1c7c0 20 77 69 74 68 20 61 0a 2a 2a 20 6e 75 6d 62 65   with a.** numbe
1c7d0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 6e 6f 20  r of columns no 
1c7e0 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 76 61  less than the va
1c7f0 6c 75 65 20 6f 66 20 50 34 2e 0a 2a 2a 0a 2a 2a  lue of P4..**.**
1c800 20 53 65 65 20 61 6c 73 6f 3a 20 4f 70 65 6e 57   See also: OpenW
1c810 72 69 74 65 2c 20 52 65 6f 70 65 6e 49 64 78 0a  rite, ReopenIdx.
1c820 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  */./* Opcode: Re
1c830 6f 70 65 6e 49 64 78 20 50 31 20 50 32 20 50 33  openIdx P1 P2 P3
1c840 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
1c850 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d  is: root=P2 iDb=
1c860 50 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 65 6f  P3.**.** The Reo
1c870 70 65 6e 49 64 78 20 6f 70 63 6f 64 65 20 77 6f  penIdx opcode wo
1c880 72 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f 70 65 6e  rks like OP_Open
1c890 52 65 61 64 20 65 78 63 65 70 74 20 74 68 61 74  Read except that
1c8a0 20 69 74 20 66 69 72 73 74 0a 2a 2a 20 63 68 65   it first.** che
1c8b0 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20 74 68  cks to see if th
1c8c0 65 20 63 75 72 73 6f 72 20 6f 6e 20 50 31 20 69  e cursor on P1 i
1c8d0 73 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 20 6f  s already open o
1c8e0 6e 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 62 2d  n the same.** b-
1c8f0 74 72 65 65 20 61 6e 64 20 69 66 20 69 74 20 69  tree and if it i
1c900 73 20 74 68 69 73 20 6f 70 63 6f 64 65 20 62 65  s this opcode be
1c910 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 20 20  comes a no-op.  
1c920 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 0a  In other words,.
1c930 2a 2a 20 69 66 20 74 68 65 20 63 75 72 73 6f 72  ** if the cursor
1c940 20 69 73 20 61 6c 72 65 61 64 79 20 6f 70 65 6e   is already open
1c950 2c 20 64 6f 20 6e 6f 74 20 72 65 6f 70 65 6e 20  , do not reopen 
1c960 69 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 65  it..**.** The Re
1c970 6f 70 65 6e 49 64 78 20 6f 70 63 6f 64 65 20 6d  openIdx opcode m
1c980 61 79 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20  ay only be used 
1c990 77 69 74 68 20 50 35 3d 3d 30 20 6f 72 20 50 35  with P5==0 or P5
1c9a0 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 0a  ==OPFLAG_SEEKEQ.
1c9b0 2a 2a 20 61 6e 64 20 77 69 74 68 20 50 34 20 62  ** and with P4 b
1c9c0 65 69 6e 67 20 61 20 50 34 5f 4b 45 59 49 4e 46  eing a P4_KEYINF
1c9d0 4f 20 6f 62 6a 65 63 74 2e 20 20 46 75 72 74 68  O object.  Furth
1c9e0 65 72 6d 6f 72 65 2c 20 74 68 65 20 50 33 20 76  ermore, the P3 v
1c9f0 61 6c 75 65 20 6d 75 73 74 0a 2a 2a 20 62 65 20  alue must.** be 
1ca00 74 68 65 20 73 61 6d 65 20 61 73 20 65 76 65 72  the same as ever
1ca10 79 20 6f 74 68 65 72 20 52 65 6f 70 65 6e 49 64  y other ReopenId
1ca20 78 20 6f 72 20 4f 70 65 6e 52 65 61 64 20 66 6f  x or OpenRead fo
1ca30 72 20 74 68 65 20 73 61 6d 65 20 63 75 72 73 6f  r the same curso
1ca40 72 0a 2a 2a 20 6e 75 6d 62 65 72 2e 0a 2a 2a 0a  r.** number..**.
1ca50 2a 2a 20 41 6c 6c 6f 77 65 64 20 50 35 20 62 69  ** Allowed P5 bi
1ca60 74 73 3a 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c  ts:.** <ul>.** <
1ca70 6c 69 3e 20 20 3c 62 3e 30 78 30 32 20 4f 50 46  li>  <b>0x02 OPF
1ca80 4c 41 47 5f 53 45 45 4b 45 51 3c 2f 62 3e 3a 20  LAG_SEEKEQ</b>: 
1ca90 54 68 69 73 20 63 75 72 73 6f 72 20 77 69 6c 6c  This cursor will
1caa0 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 66 6f   only be used fo
1cab0 72 0a 2a 2a 20 20 20 20 20 20 20 65 71 75 61 6c  r.**       equal
1cac0 69 74 79 20 6c 6f 6f 6b 75 70 73 20 28 69 6d 70  ity lookups (imp
1cad0 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20 70 61  lemented as a pa
1cae0 69 72 20 6f 66 20 6f 70 63 6f 64 65 73 20 4f 50  ir of opcodes OP
1caf0 5f 53 65 65 6b 47 45 2f 4f 50 5f 49 64 78 47 54  _SeekGE/OP_IdxGT
1cb00 0a 2a 2a 20 20 20 20 20 20 20 6f 66 20 4f 50 5f  .**       of OP_
1cb10 53 65 65 6b 4c 45 2f 4f 50 5f 49 64 78 47 54 29  SeekLE/OP_IdxGT)
1cb20 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20  .** </ul>.**.** 
1cb30 53 65 65 20 61 6c 73 6f 3a 20 4f 50 5f 4f 70 65  See also: OP_Ope
1cb40 6e 52 65 61 64 2c 20 4f 50 5f 4f 70 65 6e 57 72  nRead, OP_OpenWr
1cb50 69 74 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ite.*/./* Opcode
1cb60 3a 20 4f 70 65 6e 57 72 69 74 65 20 50 31 20 50  : OpenWrite P1 P
1cb70 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
1cb80 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20  nopsis: root=P2 
1cb90 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65  iDb=P3.**.** Ope
1cba0 6e 20 61 20 72 65 61 64 2f 77 72 69 74 65 20 63  n a read/write c
1cbb0 75 72 73 6f 72 20 6e 61 6d 65 64 20 50 31 20 6f  ursor named P1 o
1cbc0 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  n the table or i
1cbd0 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 0a  ndex whose root.
1cbe0 2a 2a 20 70 61 67 65 20 69 73 20 50 32 20 28 6f  ** page is P2 (o
1cbf0 72 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67  r whose root pag
1cc00 65 20 69 73 20 68 65 6c 64 20 69 6e 20 72 65 67  e is held in reg
1cc10 69 73 74 65 72 20 50 32 20 69 66 20 74 68 65 0a  ister P2 if the.
1cc20 2a 2a 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45  ** OPFLAG_P2ISRE
1cc30 47 20 62 69 74 20 69 73 20 73 65 74 20 69 6e 20  G bit is set in 
1cc40 50 35 20 2d 20 73 65 65 20 62 65 6c 6f 77 29 2e  P5 - see below).
1cc50 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61  .**.** The P4 va
1cc60 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74 68 65  lue may be eithe
1cc70 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34  r an integer (P4
1cc80 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69  _INT32) or a poi
1cc90 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79  nter to.** a Key
1cca0 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 28  Info structure (
1ccb0 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20  P4_KEYINFO). If 
1ccc0 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  it is a pointer 
1ccd0 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a  to a KeyInfo .**
1cce0 20 6f 62 6a 65 63 74 2c 20 74 68 65 6e 20 74 61   object, then ta
1ccf0 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 6e 65 64  ble being opened
1cd00 20 6d 75 73 74 20 62 65 20 61 6e 20 5b 69 6e 64   must be an [ind
1cd10 65 78 20 62 2d 74 72 65 65 5d 20 77 68 65 72 65  ex b-tree] where
1cd20 20 74 68 65 0a 2a 2a 20 4b 65 79 49 6e 66 6f 20   the.** KeyInfo 
1cd30 6f 62 6a 65 63 74 20 64 65 66 69 6e 65 73 20 74  object defines t
1cd40 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63  he content and c
1cd50 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71  ollating .** seq
1cd60 75 65 6e 63 65 20 6f 66 20 74 68 61 74 20 69 6e  uence of that in
1cd70 64 65 78 20 62 2d 74 72 65 65 2e 20 4f 74 68 65  dex b-tree. Othe
1cd80 72 77 69 73 65 2c 20 69 66 20 50 34 20 69 73 20  rwise, if P4 is 
1cd90 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76  an integer .** v
1cda0 61 6c 75 65 2c 20 74 68 65 6e 20 74 68 65 20 74  alue, then the t
1cdb0 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 6e 65  able being opene
1cdc0 64 20 6d 75 73 74 20 62 65 20 61 20 5b 74 61 62  d must be a [tab
1cdd0 6c 65 20 62 2d 74 72 65 65 5d 20 77 69 74 68 20  le b-tree] with 
1cde0 61 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 63  a.** number of c
1cdf0 6f 6c 75 6d 6e 73 20 6e 6f 20 6c 65 73 73 20 74  olumns no less t
1ce00 68 61 6e 20 74 68 65 20 76 61 6c 75 65 20 6f 66  han the value of
1ce10 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 77   P4..**.** Allow
1ce20 65 64 20 50 35 20 62 69 74 73 3a 0a 2a 2a 20 3c  ed P5 bits:.** <
1ce30 75 6c 3e 0a 2a 2a 20 3c 6c 69 3e 20 20 3c 62 3e  ul>.** <li>  <b>
1ce40 30 78 30 32 20 4f 50 46 4c 41 47 5f 53 45 45 4b  0x02 OPFLAG_SEEK
1ce50 45 51 3c 2f 62 3e 3a 20 54 68 69 73 20 63 75 72  EQ</b>: This cur
1ce60 73 6f 72 20 77 69 6c 6c 20 6f 6e 6c 79 20 62 65  sor will only be
1ce70 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 20 20 20   used for.**    
1ce80 20 20 20 65 71 75 61 6c 69 74 79 20 6c 6f 6f 6b     equality look
1ce90 75 70 73 20 28 69 6d 70 6c 65 6d 65 6e 74 65 64  ups (implemented
1cea0 20 61 73 20 61 20 70 61 69 72 20 6f 66 20 6f 70   as a pair of op
1ceb0 63 6f 64 65 73 20 4f 50 5f 53 65 65 6b 47 45 2f  codes OP_SeekGE/
1cec0 4f 50 5f 49 64 78 47 54 0a 2a 2a 20 20 20 20 20  OP_IdxGT.**     
1ced0 20 20 6f 66 20 4f 50 5f 53 65 65 6b 4c 45 2f 4f    of OP_SeekLE/O
1cee0 50 5f 49 64 78 47 54 29 0a 2a 2a 20 3c 6c 69 3e  P_IdxGT).** <li>
1cef0 20 20 3c 62 3e 30 78 30 38 20 4f 50 46 4c 41 47    <b>0x08 OPFLAG
1cf00 5f 46 4f 52 44 45 4c 45 54 45 3c 2f 62 3e 3a 20  _FORDELETE</b>: 
1cf10 54 68 69 73 20 63 75 72 73 6f 72 20 69 73 20 75  This cursor is u
1cf20 73 65 64 20 6f 6e 6c 79 20 74 6f 20 73 65 65 6b  sed only to seek
1cf30 0a 2a 2a 20 20 20 20 20 20 20 61 6e 64 20 73 75  .**       and su
1cf40 62 73 65 71 75 65 6e 74 6c 79 20 64 65 6c 65 74  bsequently delet
1cf50 65 20 65 6e 74 72 69 65 73 20 69 6e 20 61 6e 20  e entries in an 
1cf60 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 54 68  index btree.  Th
1cf70 69 73 20 69 73 20 61 0a 2a 2a 20 20 20 20 20 20  is is a.**      
1cf80 20 68 69 6e 74 20 74 6f 20 74 68 65 20 73 74 6f   hint to the sto
1cf90 72 61 67 65 20 65 6e 67 69 6e 65 20 74 68 61 74  rage engine that
1cfa0 20 74 68 65 20 73 74 6f 72 61 67 65 20 65 6e 67   the storage eng
1cfb0 69 6e 65 20 69 73 20 61 6c 6c 6f 77 65 64 20 74  ine is allowed t
1cfc0 6f 0a 2a 2a 20 20 20 20 20 20 20 69 67 6e 6f 72  o.**       ignor
1cfd0 65 2e 20 20 54 68 65 20 68 69 6e 74 20 69 73 20  e.  The hint is 
1cfe0 6e 6f 74 20 75 73 65 64 20 62 79 20 74 68 65 20  not used by the 
1cff0 6f 66 66 69 63 69 61 6c 20 53 51 4c 69 74 65 20  official SQLite 
1d000 62 2a 74 72 65 65 20 73 74 6f 72 61 67 65 0a 2a  b*tree storage.*
1d010 2a 20 20 20 20 20 20 20 65 6e 67 69 6e 65 2c 20  *       engine, 
1d020 62 75 74 20 69 73 20 75 73 65 64 20 62 79 20 43  but is used by C
1d030 4f 4d 44 42 32 2e 0a 2a 2a 20 3c 6c 69 3e 20 20  OMDB2..** <li>  
1d040 3c 62 3e 30 78 31 30 20 4f 50 46 4c 41 47 5f 50  <b>0x10 OPFLAG_P
1d050 32 49 53 52 45 47 3c 2f 62 3e 3a 20 55 73 65 20  2ISREG</b>: Use 
1d060 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
1d070 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 20 20  egister P2.**   
1d080 20 20 20 20 61 73 20 74 68 65 20 72 6f 6f 74 20      as the root 
1d090 70 61 67 65 2c 20 6e 6f 74 20 74 68 65 20 76 61  page, not the va
1d0a0 6c 75 65 20 6f 66 20 50 32 20 69 74 73 65 6c 66  lue of P2 itself
1d0b0 2e 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a  ..** </ul>.**.**
1d0c0 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
1d0d0 6e 20 77 6f 72 6b 73 20 6c 69 6b 65 20 4f 70 65  n works like Ope
1d0e0 6e 52 65 61 64 20 65 78 63 65 70 74 20 74 68 61  nRead except tha
1d0f0 74 20 69 74 20 6f 70 65 6e 73 20 74 68 65 20 63  t it opens the c
1d100 75 72 73 6f 72 0a 2a 2a 20 69 6e 20 72 65 61 64  ursor.** in read
1d110 2f 77 72 69 74 65 20 6d 6f 64 65 2e 0a 2a 2a 0a  /write mode..**.
1d120 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4f 50 5f  ** See also: OP_
1d130 4f 70 65 6e 52 65 61 64 2c 20 4f 50 5f 52 65 6f  OpenRead, OP_Reo
1d140 70 65 6e 49 64 78 0a 2a 2f 0a 63 61 73 65 20 4f  penIdx.*/.case O
1d150 50 5f 52 65 6f 70 65 6e 49 64 78 3a 20 7b 0a 20  P_ReopenIdx: {. 
1d160 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20 4b   int nField;.  K
1d170 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f  eyInfo *pKeyInfo
1d180 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 69 6e  ;.  int p2;.  in
1d190 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 77 72 46  t iDb;.  int wrF
1d1a0 6c 61 67 3b 0a 20 20 42 74 72 65 65 20 2a 70 58  lag;.  Btree *pX
1d1b0 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
1d1c0 70 43 75 72 3b 0a 20 20 44 62 20 2a 70 44 62 3b  pCur;.  Db *pDb;
1d1d0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
1d1e0 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70  >p5==0 || pOp->p
1d1f0 35 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51  5==OPFLAG_SEEKEQ
1d200 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1d210 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45  p->p4type==P4_KE
1d220 59 49 4e 46 4f 20 29 3b 0a 20 20 70 43 75 72 20  YINFO );.  pCur 
1d230 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1d240 70 31 5d 3b 0a 20 20 69 66 28 20 70 43 75 72 20  p1];.  if( pCur 
1d250 26 26 20 70 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f  && pCur->pgnoRoo
1d260 74 3d 3d 28 75 33 32 29 70 4f 70 2d 3e 70 32 20  t==(u32)pOp->p2 
1d270 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
1d280 43 75 72 2d 3e 69 44 62 3d 3d 70 4f 70 2d 3e 70  Cur->iDb==pOp->p
1d290 33 20 29 3b 20 20 20 20 20 20 2f 2a 20 47 75 61  3 );      /* Gua
1d2a0 72 61 6e 74 65 65 64 20 62 79 20 74 68 65 20 63  ranteed by the c
1d2b0 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f  ode generator */
1d2c0 0a 20 20 20 20 67 6f 74 6f 20 6f 70 65 6e 5f 63  .    goto open_c
1d2d0 75 72 73 6f 72 5f 73 65 74 5f 68 69 6e 74 73 3b  ursor_set_hints;
1d2e0 0a 20 20 7d 0a 20 20 2f 2a 20 49 66 20 74 68 65  .  }.  /* If the
1d2f0 20 63 75 72 73 6f 72 20 69 73 20 6e 6f 74 20 63   cursor is not c
1d300 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 6f 72  urrently open or
1d310 20 69 73 20 6f 70 65 6e 20 6f 6e 20 61 20 64 69   is open on a di
1d320 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20 69 6e 64  fferent.  ** ind
1d330 65 78 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  ex, then fall th
1d340 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 4f 70  rough into OP_Op
1d350 65 6e 52 65 61 64 20 74 6f 20 66 6f 72 63 65 20  enRead to force 
1d360 61 20 72 65 6f 70 65 6e 20 2a 2f 0a 63 61 73 65  a reopen */.case
1d370 20 4f 50 5f 4f 70 65 6e 52 65 61 64 3a 0a 63 61   OP_OpenRead:.ca
1d380 73 65 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65 3a  se OP_OpenWrite:
1d390 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
1d3a0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e  >opcode==OP_Open
1d3b0 57 72 69 74 65 20 7c 7c 20 70 4f 70 2d 3e 70 35  Write || pOp->p5
1d3c0 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d  ==0 || pOp->p5==
1d3d0 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b  OPFLAG_SEEKEQ );
1d3e0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49  .  assert( p->bI
1d3f0 73 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73 73  sReader );.  ass
1d400 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
1d410 3d 3d 4f 50 5f 4f 70 65 6e 52 65 61 64 20 7c 7c  ==OP_OpenRead ||
1d420 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
1d430 5f 52 65 6f 70 65 6e 49 64 78 0a 20 20 20 20 20  _ReopenIdx.     
1d440 20 20 20 20 20 7c 7c 20 70 2d 3e 72 65 61 64 4f       || p->readO
1d450 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 69 66 28  nly==0 );..  if(
1d460 20 70 2d 3e 65 78 70 69 72 65 64 3d 3d 31 20 29   p->expired==1 )
1d470 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
1d480 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b  E_ABORT_ROLLBACK
1d490 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74  ;.    goto abort
1d4a0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1d4b0 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20 3d 20 30   }..  nField = 0
1d4c0 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 30  ;.  pKeyInfo = 0
1d4d0 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32  ;.  p2 = pOp->p2
1d4e0 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70  ;.  iDb = pOp->p
1d4f0 33 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62  3;.  assert( iDb
1d500 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e  >=0 && iDb<db->n
1d510 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
1d520 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
1d530 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b  reeMask, iDb) );
1d540 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44  .  pDb = &db->aD
1d550 62 5b 69 44 62 5d 3b 0a 20 20 70 58 20 3d 20 70  b[iDb];.  pX = p
1d560 44 62 2d 3e 70 42 74 3b 0a 20 20 61 73 73 65 72  Db->pBt;.  asser
1d570 74 28 20 70 58 21 3d 30 20 29 3b 0a 20 20 69 66  t( pX!=0 );.  if
1d580 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
1d590 50 5f 4f 70 65 6e 57 72 69 74 65 20 29 7b 0a 20  P_OpenWrite ){. 
1d5a0 20 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41     assert( OPFLA
1d5b0 47 5f 46 4f 52 44 45 4c 45 54 45 3d 3d 42 54 52  G_FORDELETE==BTR
1d5c0 45 45 5f 46 4f 52 44 45 4c 45 54 45 20 29 3b 0a  EE_FORDELETE );.
1d5d0 20 20 20 20 77 72 46 6c 61 67 20 3d 20 42 54 52      wrFlag = BTR
1d5e0 45 45 5f 57 52 43 53 52 20 7c 20 28 70 4f 70 2d  EE_WRCSR | (pOp-
1d5f0 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 46 4f 52  >p5 & OPFLAG_FOR
1d600 44 45 4c 45 54 45 29 3b 0a 20 20 20 20 61 73 73  DELETE);.    ass
1d610 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65  ert( sqlite3Sche
1d620 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20  maMutexHeld(db, 
1d630 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 69  iDb, 0) );.    i
1d640 66 28 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d  f( pDb->pSchema-
1d650 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3c 20 70  >file_format < p
1d660 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
1d670 72 6d 61 74 20 29 7b 0a 20 20 20 20 20 20 70 2d  rmat ){.      p-
1d680 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72  >minWriteFileFor
1d690 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53 63 68 65  mat = pDb->pSche
1d6a0 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3b  ma->file_format;
1d6b0 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
1d6c0 20 20 20 20 77 72 46 6c 61 67 20 3d 20 30 3b 0a      wrFlag = 0;.
1d6d0 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70    }.  if( pOp->p
1d6e0 35 20 26 20 4f 50 46 4c 41 47 5f 50 32 49 53 52  5 & OPFLAG_P2ISR
1d6f0 45 47 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  EG ){.    assert
1d700 28 20 70 32 3e 30 20 29 3b 0a 20 20 20 20 61 73  ( p2>0 );.    as
1d710 73 65 72 74 28 20 70 32 3c 3d 28 70 2d 3e 6e 4d  sert( p2<=(p->nM
1d720 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
1d730 72 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  r) );.    assert
1d740 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
1d750 50 5f 4f 70 65 6e 57 72 69 74 65 20 29 3b 0a 20  P_OpenWrite );. 
1d760 20 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b     pIn2 = &aMem[
1d770 70 32 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  p2];.    assert(
1d780 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 32   memIsValid(pIn2
1d790 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ) );.    assert(
1d7a0 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20   (pIn2->flags & 
1d7b0 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20  MEM_Int)!=0 );. 
1d7c0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
1d7d0 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32  mIntegerify(pIn2
1d7e0 29 3b 0a 20 20 20 20 70 32 20 3d 20 28 69 6e 74  );.    p2 = (int
1d7f0 29 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20  )pIn2->u.i;.    
1d800 2f 2a 20 54 68 65 20 70 32 20 76 61 6c 75 65 20  /* The p2 value 
1d810 61 6c 77 61 79 73 20 63 6f 6d 65 73 20 66 72 6f  always comes fro
1d820 6d 20 61 20 70 72 69 6f 72 20 4f 50 5f 43 72 65  m a prior OP_Cre
1d830 61 74 65 42 74 72 65 65 20 6f 70 63 6f 64 65 20  ateBtree opcode 
1d840 61 6e 64 0a 20 20 20 20 2a 2a 20 74 68 61 74 20  and.    ** that 
1d850 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61  opcode will alwa
1d860 79 73 20 73 65 74 20 74 68 65 20 70 32 20 76 61  ys set the p2 va
1d870 6c 75 65 20 74 6f 20 32 20 6f 72 20 6d 6f 72 65  lue to 2 or more
1d880 20 6f 72 20 65 6c 73 65 20 66 61 69 6c 2e 0a 20   or else fail.. 
1d890 20 20 20 2a 2a 20 49 66 20 74 68 65 72 65 20 77     ** If there w
1d8a0 65 72 65 20 61 20 66 61 69 6c 75 72 65 2c 20 74  ere a failure, t
1d8b0 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74  he prepared stat
1d8c0 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68 61 76 65  ement would have
1d8d0 20 68 61 6c 74 65 64 0a 20 20 20 20 2a 2a 20 62   halted.    ** b
1d8e0 65 66 6f 72 65 20 72 65 61 63 68 69 6e 67 20 74  efore reaching t
1d8f0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  his instruction.
1d900 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20   */.    assert( 
1d910 70 32 3e 3d 32 20 29 3b 0a 20 20 7d 0a 20 20 69  p2>=2 );.  }.  i
1d920 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
1d930 50 34 5f 4b 45 59 49 4e 46 4f 20 29 7b 0a 20 20  P4_KEYINFO ){.  
1d940 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70    pKeyInfo = pOp
1d950 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20  ->p4.pKeyInfo;. 
1d960 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49     assert( pKeyI
1d970 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62  nfo->enc==ENC(db
1d980 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ) );.    assert(
1d990 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64   pKeyInfo->db==d
1d9a0 62 20 29 3b 0a 20 20 20 20 6e 46 69 65 6c 64 20  b );.    nField 
1d9b0 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 41 6c 6c  = pKeyInfo->nAll
1d9c0 46 69 65 6c 64 3b 0a 20 20 7d 65 6c 73 65 20 69  Field;.  }else i
1d9d0 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
1d9e0 50 34 5f 49 4e 54 33 32 20 29 7b 0a 20 20 20 20  P4_INT32 ){.    
1d9f0 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34  nField = pOp->p4
1da00 2e 69 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  .i;.  }.  assert
1da10 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a  ( pOp->p1>=0 );.
1da20 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64    assert( nField
1da30 3e 3d 30 20 29 3b 0a 20 20 74 65 73 74 63 61 73  >=0 );.  testcas
1da40 65 28 20 6e 46 69 65 6c 64 3d 3d 30 20 29 3b 20  e( nField==0 ); 
1da50 20 2f 2a 20 54 61 62 6c 65 20 77 69 74 68 20 49   /* Table with I
1da60 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
1da70 45 59 20 61 6e 64 20 6e 6f 74 68 69 6e 67 20 65  EY and nothing e
1da80 6c 73 65 20 2a 2f 0a 20 20 70 43 75 72 20 3d 20  lse */.  pCur = 
1da90 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
1daa0 2c 20 70 4f 70 2d 3e 70 31 2c 20 6e 46 69 65 6c  , pOp->p1, nFiel
1dab0 64 2c 20 69 44 62 2c 20 43 55 52 54 59 50 45 5f  d, iDb, CURTYPE_
1dac0 42 54 52 45 45 29 3b 0a 20 20 69 66 28 20 70 43  BTREE);.  if( pC
1dad0 75 72 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  ur==0 ) goto no_
1dae0 6d 65 6d 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c  mem;.  pCur->nul
1daf0 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 75 72  lRow = 1;.  pCur
1db00 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 31 3b  ->isOrdered = 1;
1db10 0a 20 20 70 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f  .  pCur->pgnoRoo
1db20 74 20 3d 20 70 32 3b 0a 23 69 66 64 65 66 20 53  t = p2;.#ifdef S
1db30 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43  QLITE_DEBUG.  pC
1db40 75 72 2d 3e 77 72 46 6c 61 67 20 3d 20 77 72 46  ur->wrFlag = wrF
1db50 6c 61 67 3b 0a 23 65 6e 64 69 66 0a 20 20 72 63  lag;.#endif.  rc
1db60 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
1db70 75 72 73 6f 72 28 70 58 2c 20 70 32 2c 20 77 72  ursor(pX, p2, wr
1db80 46 6c 61 67 2c 20 70 4b 65 79 49 6e 66 6f 2c 20  Flag, pKeyInfo, 
1db90 70 43 75 72 2d 3e 75 63 2e 70 43 75 72 73 6f 72  pCur->uc.pCursor
1dba0 29 3b 0a 20 20 70 43 75 72 2d 3e 70 4b 65 79 49  );.  pCur->pKeyI
1dbb0 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a  nfo = pKeyInfo;.
1dbc0 20 20 2f 2a 20 53 65 74 20 74 68 65 20 56 64 62    /* Set the Vdb
1dbd0 65 43 75 72 73 6f 72 2e 69 73 54 61 62 6c 65 20  eCursor.isTable 
1dbe0 76 61 72 69 61 62 6c 65 2e 20 50 72 65 76 69 6f  variable. Previo
1dbf0 75 73 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 20  us versions of. 
1dc00 20 2a 2a 20 53 51 4c 69 74 65 20 75 73 65 64 20   ** SQLite used 
1dc10 74 6f 20 63 68 65 63 6b 20 69 66 20 74 68 65 20  to check if the 
1dc20 72 6f 6f 74 2d 70 61 67 65 20 66 6c 61 67 73 20  root-page flags 
1dc30 77 65 72 65 20 73 61 6e 65 20 61 74 20 74 68 69  were sane at thi
1dc40 73 20 70 6f 69 6e 74 0a 20 20 2a 2a 20 61 6e 64  s point.  ** and
1dc50 20 72 65 70 6f 72 74 20 64 61 74 61 62 61 73 65   report database
1dc60 20 63 6f 72 72 75 70 74 69 6f 6e 20 69 66 20 74   corruption if t
1dc70 68 65 79 20 77 65 72 65 20 6e 6f 74 2c 20 62 75  hey were not, bu
1dc80 74 20 74 68 69 73 20 63 68 65 63 6b 20 68 61 73  t this check has
1dc90 0a 20 20 2a 2a 20 73 69 6e 63 65 20 6d 6f 76 65  .  ** since move
1dca0 64 20 69 6e 74 6f 20 74 68 65 20 62 74 72 65 65  d into the btree
1dcb0 20 6c 61 79 65 72 2e 20 20 2a 2f 20 20 0a 20 20   layer.  */  .  
1dcc0 70 43 75 72 2d 3e 69 73 54 61 62 6c 65 20 3d 20  pCur->isTable = 
1dcd0 70 4f 70 2d 3e 70 34 74 79 70 65 21 3d 50 34 5f  pOp->p4type!=P4_
1dce0 4b 45 59 49 4e 46 4f 3b 0a 0a 6f 70 65 6e 5f 63  KEYINFO;..open_c
1dcf0 75 72 73 6f 72 5f 73 65 74 5f 68 69 6e 74 73 3a  ursor_set_hints:
1dd00 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41  .  assert( OPFLA
1dd10 47 5f 42 55 4c 4b 43 53 52 3d 3d 42 54 52 45 45  G_BULKCSR==BTREE
1dd20 5f 42 55 4c 4b 4c 4f 41 44 20 29 3b 0a 20 20 61  _BULKLOAD );.  a
1dd30 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 53 45  ssert( OPFLAG_SE
1dd40 45 4b 45 51 3d 3d 42 54 52 45 45 5f 53 45 45 4b  EKEQ==BTREE_SEEK
1dd50 5f 45 51 20 29 3b 0a 20 20 74 65 73 74 63 61 73  _EQ );.  testcas
1dd60 65 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  e( pOp->p5 & OPF
1dd70 4c 41 47 5f 42 55 4c 4b 43 53 52 20 29 3b 0a 23  LAG_BULKCSR );.#
1dd80 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
1dd90 42 4c 45 5f 43 55 52 53 4f 52 5f 48 49 4e 54 53  BLE_CURSOR_HINTS
1dda0 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70  .  testcase( pOp
1ddb0 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f 53 45  ->p2 & OPFLAG_SE
1ddc0 45 4b 45 51 20 29 3b 0a 23 65 6e 64 69 66 0a 20  EKEQ );.#endif. 
1ddd0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
1dde0 73 6f 72 48 69 6e 74 46 6c 61 67 73 28 70 43 75  sorHintFlags(pCu
1ddf0 72 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 0a 20  r->uc.pCursor,. 
1de00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70                (p
1de20 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41 47  Op->p5 & (OPFLAG
1de30 5f 42 55 4c 4b 43 53 52 7c 4f 50 46 4c 41 47 5f  _BULKCSR|OPFLAG_
1de40 53 45 45 4b 45 51 29 29 29 3b 0a 20 20 69 66 28  SEEKEQ)));.  if(
1de50 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
1de60 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1de70 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1de80 63 6f 64 65 3a 20 4f 70 65 6e 44 75 70 20 50 31  code: OpenDup P1
1de90 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
1dea0 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f  Open a new curso
1deb0 72 20 50 31 20 74 68 61 74 20 70 6f 69 6e 74 73  r P1 that points
1dec0 20 74 6f 20 74 68 65 20 73 61 6d 65 20 65 70 68   to the same eph
1ded0 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 61 73 0a  emeral table as.
1dee0 2a 2a 20 63 75 72 73 6f 72 20 50 32 2e 20 20 54  ** cursor P2.  T
1def0 68 65 20 50 32 20 63 75 72 73 6f 72 20 6d 75 73  he P2 cursor mus
1df00 74 20 68 61 76 65 20 62 65 65 6e 20 6f 70 65 6e  t have been open
1df10 65 64 20 62 79 20 61 20 70 72 69 6f 72 20 4f 50  ed by a prior OP
1df20 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 0a 2a  _OpenEphemeral.*
1df30 2a 20 6f 70 63 6f 64 65 2e 20 20 4f 6e 6c 79 20  * opcode.  Only 
1df40 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72  ephemeral cursor
1df50 73 20 6d 61 79 20 62 65 20 64 75 70 6c 69 63 61  s may be duplica
1df60 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 44 75 70 6c 69  ted..**.** Dupli
1df70 63 61 74 65 20 65 70 68 65 6d 65 72 61 6c 20 63  cate ephemeral c
1df80 75 72 73 6f 72 73 20 61 72 65 20 75 73 65 64 20  ursors are used 
1df90 66 6f 72 20 73 65 6c 66 2d 6a 6f 69 6e 73 20 6f  for self-joins o
1dfa0 66 20 6d 61 74 65 72 69 61 6c 69 7a 65 64 20 76  f materialized v
1dfb0 69 65 77 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  iews..*/.case OP
1dfc0 5f 4f 70 65 6e 44 75 70 3a 20 7b 0a 20 20 56 64  _OpenDup: {.  Vd
1dfd0 62 65 43 75 72 73 6f 72 20 2a 70 4f 72 69 67 3b  beCursor *pOrig;
1dfe0 20 20 20 20 2f 2a 20 54 68 65 20 6f 72 69 67 69      /* The origi
1dff0 6e 61 6c 20 63 75 72 73 6f 72 20 74 6f 20 62 65  nal cursor to be
1e000 20 64 75 70 6c 69 63 61 74 65 64 20 2a 2f 0a 20   duplicated */. 
1e010 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78   VdbeCursor *pCx
1e020 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65  ;      /* The ne
1e030 77 20 63 75 72 73 6f 72 20 2a 2f 0a 0a 20 20 70  w cursor */..  p
1e040 4f 72 69 67 20 3d 20 70 2d 3e 61 70 43 73 72 5b  Orig = p->apCsr[
1e050 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
1e060 72 74 28 20 70 4f 72 69 67 2d 3e 70 42 74 78 21  rt( pOrig->pBtx!
1e070 3d 30 20 29 3b 20 20 2f 2a 20 4f 6e 6c 79 20 65  =0 );  /* Only e
1e080 70 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72 73  phemeral cursors
1e090 20 63 61 6e 20 62 65 20 64 75 70 6c 69 63 61 74   can be duplicat
1e0a0 65 64 20 2a 2f 0a 0a 20 20 70 43 78 20 3d 20 61  ed */..  pCx = a
1e0b0 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c  llocateCursor(p,
1e0c0 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 72 69 67 2d   pOp->p1, pOrig-
1e0d0 3e 6e 46 69 65 6c 64 2c 20 2d 31 2c 20 43 55 52  >nField, -1, CUR
1e0e0 54 59 50 45 5f 42 54 52 45 45 29 3b 0a 20 20 69  TYPE_BTREE);.  i
1e0f0 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f  f( pCx==0 ) goto
1e100 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e   no_mem;.  pCx->
1e110 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70  nullRow = 1;.  p
1e120 43 78 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 20  Cx->isEphemeral 
1e130 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 70 4b 65 79  = 1;.  pCx->pKey
1e140 49 6e 66 6f 20 3d 20 70 4f 72 69 67 2d 3e 70 4b  Info = pOrig->pK
1e150 65 79 49 6e 66 6f 3b 0a 20 20 70 43 78 2d 3e 69  eyInfo;.  pCx->i
1e160 73 54 61 62 6c 65 20 3d 20 70 4f 72 69 67 2d 3e  sTable = pOrig->
1e170 69 73 54 61 62 6c 65 3b 0a 20 20 72 63 20 3d 20  isTable;.  rc = 
1e180 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
1e190 6f 72 28 70 4f 72 69 67 2d 3e 70 42 74 78 2c 20  or(pOrig->pBtx, 
1e1a0 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20 42 54 52  MASTER_ROOT, BTR
1e1b0 45 45 5f 57 52 43 53 52 2c 0a 20 20 20 20 20 20  EE_WRCSR,.      
1e1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e1d0 20 20 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66      pCx->pKeyInf
1e1e0 6f 2c 20 70 43 78 2d 3e 75 63 2e 70 43 75 72 73  o, pCx->uc.pCurs
1e1f0 6f 72 29 3b 0a 20 20 2f 2a 20 54 68 65 20 73 71  or);.  /* The sq
1e200 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
1e210 28 29 20 72 6f 75 74 69 6e 65 20 63 61 6e 20 6f  () routine can o
1e220 6e 6c 79 20 66 61 69 6c 20 66 6f 72 20 74 68 65  nly fail for the
1e230 20 66 69 72 73 74 20 63 75 72 73 6f 72 0a 20 20   first cursor.  
1e240 2a 2a 20 6f 70 65 6e 65 64 20 66 6f 72 20 61 20  ** opened for a 
1e250 64 61 74 61 62 61 73 65 2e 20 20 53 69 6e 63 65  database.  Since
1e260 20 74 68 65 72 65 20 69 73 20 61 6c 72 65 61 64   there is alread
1e270 79 20 61 6e 20 6f 70 65 6e 20 63 75 72 73 6f 72  y an open cursor
1e280 20 77 68 65 6e 20 74 68 69 73 0a 20 20 2a 2a 20   when this.  ** 
1e290 6f 70 63 6f 64 65 20 69 73 20 72 75 6e 2c 20 74  opcode is run, t
1e2a0 68 65 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  he sqlite3BtreeC
1e2b0 75 72 73 6f 72 28 29 20 63 61 6e 6e 6f 74 20 66  ursor() cannot f
1e2c0 61 69 6c 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ail */.  assert(
1e2d0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
1e2e0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f  ;.  break;.}.../
1e2f0 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 45 70  * Opcode: OpenEp
1e300 68 65 6d 65 72 61 6c 20 50 31 20 50 32 20 2a 20  hemeral P1 P2 * 
1e310 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
1e320 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a  s: nColumn=P2.**
1e330 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63  .** Open a new c
1e340 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20 74 72  ursor P1 to a tr
1e350 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 2e 0a 2a  ansient table..*
1e360 2a 20 54 68 65 20 63 75 72 73 6f 72 20 69 73 20  * The cursor is 
1e370 61 6c 77 61 79 73 20 6f 70 65 6e 65 64 20 72 65  always opened re
1e380 61 64 2f 77 72 69 74 65 20 65 76 65 6e 20 69 66  ad/write even if
1e390 20 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61   .** the main da
1e3a0 74 61 62 61 73 65 20 69 73 20 72 65 61 64 2d 6f  tabase is read-o
1e3b0 6e 6c 79 2e 20 20 54 68 65 20 65 70 68 65 6d 65  nly.  The epheme
1e3c0 72 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 69 73 20  ral.** table is 
1e3d0 64 65 6c 65 74 65 64 20 61 75 74 6f 6d 61 74 69  deleted automati
1e3e0 63 61 6c 6c 79 20 77 68 65 6e 20 74 68 65 20 63  cally when the c
1e3f0 75 72 73 6f 72 20 69 73 20 63 6c 6f 73 65 64 2e  ursor is closed.
1e400 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65  .**.** P2 is the
1e410 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
1e420 6e 73 20 69 6e 20 74 68 65 20 65 70 68 65 6d 65  ns in the epheme
1e430 72 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68  ral table..** Th
1e440 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 73 20  e cursor points 
1e450 74 6f 20 61 20 42 54 72 65 65 20 74 61 62 6c 65  to a BTree table
1e460 20 69 66 20 50 34 3d 3d 30 20 61 6e 64 20 74 6f   if P4==0 and to
1e470 20 61 20 42 54 72 65 65 20 69 6e 64 65 78 0a 2a   a BTree index.*
1e480 2a 20 69 66 20 50 34 20 69 73 20 6e 6f 74 20 30  * if P4 is not 0
1e490 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  .  If P4 is not 
1e4a0 4e 55 4c 4c 2c 20 69 74 20 70 6f 69 6e 74 73 20  NULL, it points 
1e4b0 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72  to a KeyInfo str
1e4c0 75 63 74 75 72 65 0a 2a 2a 20 74 68 61 74 20 64  ucture.** that d
1e4d0 65 66 69 6e 65 73 20 74 68 65 20 66 6f 72 6d 61  efines the forma
1e4e0 74 20 6f 66 20 6b 65 79 73 20 69 6e 20 74 68 65  t of keys in the
1e4f0 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68   index..**.** Th
1e500 65 20 50 35 20 70 61 72 61 6d 65 74 65 72 20 63  e P5 parameter c
1e510 61 6e 20 62 65 20 61 20 6d 61 73 6b 20 6f 66 20  an be a mask of 
1e520 74 68 65 20 42 54 52 45 45 5f 2a 20 66 6c 61 67  the BTREE_* flag
1e530 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20 69 6e 20  s defined.** in 
1e540 62 74 72 65 65 2e 68 2e 20 20 54 68 65 73 65 20  btree.h.  These 
1e550 66 6c 61 67 73 20 63 6f 6e 74 72 6f 6c 20 61 73  flags control as
1e560 70 65 63 74 73 20 6f 66 20 74 68 65 20 6f 70 65  pects of the ope
1e570 72 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65  ration of.** the
1e580 20 62 74 72 65 65 2e 20 20 54 68 65 20 42 54 52   btree.  The BTR
1e590 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20  EE_OMIT_JOURNAL 
1e5a0 61 6e 64 20 42 54 52 45 45 5f 53 49 4e 47 4c 45  and BTREE_SINGLE
1e5b0 20 66 6c 61 67 73 20 61 72 65 0a 2a 2a 20 61 64   flags are.** ad
1e5c0 64 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ded automaticall
1e5d0 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  y..*/./* Opcode:
1e5e0 20 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78 20 50   OpenAutoindex P
1e5f0 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  1 P2 * P4 *.** S
1e600 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e  ynopsis: nColumn
1e610 3d 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  =P2.**.** This o
1e620 70 63 6f 64 65 20 77 6f 72 6b 73 20 74 68 65 20  pcode works the 
1e630 73 61 6d 65 20 61 73 20 4f 50 5f 4f 70 65 6e 45  same as OP_OpenE
1e640 70 68 65 6d 65 72 61 6c 2e 20 20 49 74 20 68 61  phemeral.  It ha
1e650 73 20 61 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74  s a.** different
1e660 20 6e 61 6d 65 20 74 6f 20 64 69 73 74 69 6e 67   name to disting
1e670 75 69 73 68 20 69 74 73 20 75 73 65 2e 20 20 54  uish its use.  T
1e680 61 62 6c 65 73 20 63 72 65 61 74 65 64 20 75 73  ables created us
1e690 69 6e 67 0a 2a 2a 20 62 79 20 74 68 69 73 20 6f  ing.** by this o
1e6a0 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73  pcode will be us
1e6b0 65 64 20 66 6f 72 20 61 75 74 6f 6d 61 74 69 63  ed for automatic
1e6c0 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74 72 61  ally created tra
1e6d0 6e 73 69 65 6e 74 0a 2a 2a 20 69 6e 64 69 63 65  nsient.** indice
1e6e0 73 20 69 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f 0a 63  s in joins..*/.c
1e6f0 61 73 65 20 4f 50 5f 4f 70 65 6e 41 75 74 6f 69  ase OP_OpenAutoi
1e700 6e 64 65 78 3a 20 0a 63 61 73 65 20 4f 50 5f 4f  ndex: .case OP_O
1e710 70 65 6e 45 70 68 65 6d 65 72 61 6c 3a 20 7b 0a  penEphemeral: {.
1e720 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1e730 78 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b  x;.  KeyInfo *pK
1e740 65 79 49 6e 66 6f 3b 0a 0a 20 20 73 74 61 74 69  eyInfo;..  stati
1e750 63 20 63 6f 6e 73 74 20 69 6e 74 20 76 66 73 46  c const int vfsF
1e760 6c 61 67 73 20 3d 20 0a 20 20 20 20 20 20 53 51  lags = .      SQ
1e770 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57 52  LITE_OPEN_READWR
1e780 49 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49  ITE |.      SQLI
1e790 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20 7c  TE_OPEN_CREATE |
1e7a0 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
1e7b0 45 4e 5f 45 58 43 4c 55 53 49 56 45 20 7c 0a 20  EN_EXCLUSIVE |. 
1e7c0 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
1e7d0 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f 53 45 20 7c  _DELETEONCLOSE |
1e7e0 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
1e7f0 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f 44 42 3b  EN_TRANSIENT_DB;
1e800 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1e810 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  p1>=0 );.  asser
1e820 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b  t( pOp->p2>=0 );
1e830 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74  .  pCx = allocat
1e840 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e  eCursor(p, pOp->
1e850 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c  p1, pOp->p2, -1,
1e860 20 43 55 52 54 59 50 45 5f 42 54 52 45 45 29 3b   CURTYPE_BTREE);
1e870 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20  .  if( pCx==0 ) 
1e880 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
1e890 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  Cx->nullRow = 1;
1e8a0 0a 20 20 70 43 78 2d 3e 69 73 45 70 68 65 6d 65  .  pCx->isEpheme
1e8b0 72 61 6c 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20  ral = 1;.  rc = 
1e8c0 73 71 6c 69 74 65 33 42 74 72 65 65 4f 70 65 6e  sqlite3BtreeOpen
1e8d0 28 64 62 2d 3e 70 56 66 73 2c 20 30 2c 20 64 62  (db->pVfs, 0, db
1e8e0 2c 20 26 70 43 78 2d 3e 70 42 74 78 2c 20 0a 20  , &pCx->pBtx, . 
1e8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e900 20 20 20 20 20 20 20 42 54 52 45 45 5f 4f 4d 49         BTREE_OMI
1e910 54 5f 4a 4f 55 52 4e 41 4c 20 7c 20 42 54 52 45  T_JOURNAL | BTRE
1e920 45 5f 53 49 4e 47 4c 45 20 7c 20 70 4f 70 2d 3e  E_SINGLE | pOp->
1e930 70 35 2c 20 76 66 73 46 6c 61 67 73 29 3b 0a 20  p5, vfsFlags);. 
1e940 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
1e950 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  OK ){.    rc = s
1e960 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e  qlite3BtreeBegin
1e970 54 72 61 6e 73 28 70 43 78 2d 3e 70 42 74 78 2c  Trans(pCx->pBtx,
1e980 20 31 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 69 66   1, 0);.  }.  if
1e990 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1e9a0 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 61 20 74  ){.    /* If a t
1e9b0 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 69  ransient index i
1e9c0 73 20 72 65 71 75 69 72 65 64 2c 20 63 72 65 61  s required, crea
1e9d0 74 65 20 69 74 20 62 79 20 63 61 6c 6c 69 6e 67  te it by calling
1e9e0 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 42  .    ** sqlite3B
1e9f0 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28  treeCreateTable(
1ea00 29 20 77 69 74 68 20 74 68 65 20 42 54 52 45 45  ) with the BTREE
1ea10 5f 42 4c 4f 42 4b 45 59 20 66 6c 61 67 20 62 65  _BLOBKEY flag be
1ea20 66 6f 72 65 0a 20 20 20 20 2a 2a 20 6f 70 65 6e  fore.    ** open
1ea30 69 6e 67 20 69 74 2e 20 49 66 20 61 20 74 72 61  ing it. If a tra
1ea40 6e 73 69 65 6e 74 20 74 61 62 6c 65 20 69 73 20  nsient table is 
1ea50 72 65 71 75 69 72 65 64 2c 20 6a 75 73 74 20 75  required, just u
1ea60 73 65 20 74 68 65 0a 20 20 20 20 2a 2a 20 61 75  se the.    ** au
1ea70 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61  tomatically crea
1ea80 74 65 64 20 74 61 62 6c 65 20 77 69 74 68 20 72  ted table with r
1ea90 6f 6f 74 2d 70 61 67 65 20 31 20 28 61 6e 20 42  oot-page 1 (an B
1eaa0 4c 4f 42 5f 49 4e 54 4b 45 59 20 74 61 62 6c 65  LOB_INTKEY table
1eab0 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  )..    */.    if
1eac0 28 20 28 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f  ( (pCx->pKeyInfo
1ead0 20 3d 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f   = pKeyInfo = pO
1eae0 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 29 21  p->p4.pKeyInfo)!
1eaf0 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  =0 ){.      int 
1eb00 70 67 6e 6f 3b 0a 20 20 20 20 20 20 61 73 73 65  pgno;.      asse
1eb10 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
1eb20 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20  =P4_KEYINFO );. 
1eb30 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1eb40 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62 6c  3BtreeCreateTabl
1eb50 65 28 70 43 78 2d 3e 70 42 74 78 2c 20 26 70 67  e(pCx->pBtx, &pg
1eb60 6e 6f 2c 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45  no, BTREE_BLOBKE
1eb70 59 20 7c 20 70 4f 70 2d 3e 70 35 29 3b 20 0a 20  Y | pOp->p5); . 
1eb80 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
1eb90 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
1eba0 20 20 61 73 73 65 72 74 28 20 70 67 6e 6f 3d 3d    assert( pgno==
1ebb0 4d 41 53 54 45 52 5f 52 4f 4f 54 2b 31 20 29 3b  MASTER_ROOT+1 );
1ebc0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1ebd0 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64   pKeyInfo->db==d
1ebe0 62 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  b );.        ass
1ebf0 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65  ert( pKeyInfo->e
1ec00 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20  nc==ENC(db) );. 
1ec10 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
1ec20 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70  te3BtreeCursor(p
1ec30 43 78 2d 3e 70 42 74 78 2c 20 70 67 6e 6f 2c 20  Cx->pBtx, pgno, 
1ec40 42 54 52 45 45 5f 57 52 43 53 52 2c 0a 20 20 20  BTREE_WRCSR,.   
1ec50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec60 20 20 20 20 20 20 20 20 20 20 20 20 20 70 4b 65               pKe
1ec70 79 49 6e 66 6f 2c 20 70 43 78 2d 3e 75 63 2e 70  yInfo, pCx->uc.p
1ec80 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 7d  Cursor);.      }
1ec90 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61  .      pCx->isTa
1eca0 62 6c 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c  ble = 0;.    }el
1ecb0 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  se{.      rc = s
1ecc0 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
1ecd0 72 28 70 43 78 2d 3e 70 42 74 78 2c 20 4d 41 53  r(pCx->pBtx, MAS
1ece0 54 45 52 5f 52 4f 4f 54 2c 20 42 54 52 45 45 5f  TER_ROOT, BTREE_
1ecf0 57 52 43 53 52 2c 0a 20 20 20 20 20 20 20 20 20  WRCSR,.         
1ed00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed10 20 20 20 20 20 30 2c 20 70 43 78 2d 3e 75 63 2e       0, pCx->uc.
1ed20 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20  pCursor);.      
1ed30 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31  pCx->isTable = 1
1ed40 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
1ed50 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
1ed60 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1ed70 20 20 70 43 78 2d 3e 69 73 4f 72 64 65 72 65 64    pCx->isOrdered
1ed80 20 3d 20 28 70 4f 70 2d 3e 70 35 21 3d 42 54 52   = (pOp->p5!=BTR
1ed90 45 45 5f 55 4e 4f 52 44 45 52 45 44 29 3b 0a 20  EE_UNORDERED);. 
1eda0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1edb0 63 6f 64 65 3a 20 53 6f 72 74 65 72 4f 70 65 6e  code: SorterOpen
1edc0 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
1edd0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
1ede0 20 77 6f 72 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f   works like OP_O
1edf0 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 65 78 63  penEphemeral exc
1ee00 65 70 74 20 74 68 61 74 20 69 74 20 6f 70 65 6e  ept that it open
1ee10 73 0a 2a 2a 20 61 20 74 72 61 6e 73 69 65 6e 74  s.** a transient
1ee20 20 69 6e 64 65 78 20 74 68 61 74 20 69 73 20 73   index that is s
1ee30 70 65 63 69 66 69 63 61 6c 6c 79 20 64 65 73 69  pecifically desi
1ee40 67 6e 65 64 20 74 6f 20 73 6f 72 74 20 6c 61 72  gned to sort lar
1ee50 67 65 0a 2a 2a 20 74 61 62 6c 65 73 20 75 73 69  ge.** tables usi
1ee60 6e 67 20 61 6e 20 65 78 74 65 72 6e 61 6c 20 6d  ng an external m
1ee70 65 72 67 65 2d 73 6f 72 74 20 61 6c 67 6f 72 69  erge-sort algori
1ee80 74 68 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 72  thm..**.** If ar
1ee90 67 75 6d 65 6e 74 20 50 33 20 69 73 20 6e 6f 6e  gument P3 is non
1eea0 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74 20 69  -zero, then it i
1eeb0 6e 64 69 63 61 74 65 73 20 74 68 61 74 20 74 68  ndicates that th
1eec0 65 20 73 6f 72 74 65 72 20 6d 61 79 0a 2a 2a 20  e sorter may.** 
1eed0 61 73 73 75 6d 65 20 74 68 61 74 20 61 20 73 74  assume that a st
1eee0 61 62 6c 65 20 73 6f 72 74 20 63 6f 6e 73 69 64  able sort consid
1eef0 65 72 69 6e 67 20 74 68 65 20 66 69 72 73 74 20  ering the first 
1ef00 50 33 20 66 69 65 6c 64 73 20 6f 66 20 65 61 63  P3 fields of eac
1ef10 68 0a 2a 2a 20 6b 65 79 20 69 73 20 73 75 66 66  h.** key is suff
1ef20 69 63 69 65 6e 74 20 74 6f 20 70 72 6f 64 75 63  icient to produc
1ef30 65 20 74 68 65 20 72 65 71 75 69 72 65 64 20 72  e the required r
1ef40 65 73 75 6c 74 73 2e 0a 2a 2f 0a 63 61 73 65 20  esults..*/.case 
1ef50 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e 3a 20 7b  OP_SorterOpen: {
1ef60 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1ef70 43 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  Cx;..  assert( p
1ef80 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61  Op->p1>=0 );.  a
1ef90 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d  ssert( pOp->p2>=
1efa0 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c  0 );.  pCx = all
1efb0 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70  ocateCursor(p, p
1efc0 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c  Op->p1, pOp->p2,
1efd0 20 2d 31 2c 20 43 55 52 54 59 50 45 5f 53 4f 52   -1, CURTYPE_SOR
1efe0 54 45 52 29 3b 0a 20 20 69 66 28 20 70 43 78 3d  TER);.  if( pCx=
1eff0 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
1f000 3b 0a 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66  ;.  pCx->pKeyInf
1f010 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79  o = pOp->p4.pKey
1f020 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20  Info;.  assert( 
1f030 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 64  pCx->pKeyInfo->d
1f040 62 3d 3d 64 62 20 29 3b 0a 20 20 61 73 73 65 72  b==db );.  asser
1f050 74 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f  t( pCx->pKeyInfo
1f060 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29  ->enc==ENC(db) )
1f070 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
1f080 56 64 62 65 53 6f 72 74 65 72 49 6e 69 74 28 64  VdbeSorterInit(d
1f090 62 2c 20 70 4f 70 2d 3e 70 33 2c 20 70 43 78 29  b, pOp->p3, pCx)
1f0a0 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
1f0b0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1f0c0 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
1f0d0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71  ../* Opcode: Seq
1f0e0 75 65 6e 63 65 54 65 73 74 20 50 31 20 50 32 20  uenceTest P1 P2 
1f0f0 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
1f100 73 3a 20 69 66 28 20 63 75 72 73 6f 72 5b 50 31  s: if( cursor[P1
1f110 5d 2e 63 74 72 2b 2b 20 29 20 70 63 20 3d 20 50  ].ctr++ ) pc = P
1f120 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  2.**.** P1 is a 
1f130 73 6f 72 74 65 72 20 63 75 72 73 6f 72 2e 20 49  sorter cursor. I
1f140 66 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 63  f the sequence c
1f150 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72 65 6e  ounter is curren
1f160 74 6c 79 20 7a 65 72 6f 2c 20 6a 75 6d 70 0a 2a  tly zero, jump.*
1f170 2a 20 74 6f 20 50 32 2e 20 52 65 67 61 72 64 6c  * to P2. Regardl
1f180 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f  ess of whether o
1f190 72 20 6e 6f 74 20 74 68 65 20 6a 75 6d 70 20 69  r not the jump i
1f1a0 73 20 74 61 6b 65 6e 2c 20 69 6e 63 72 65 6d 65  s taken, increme
1f1b0 6e 74 20 74 68 65 0a 2a 2a 20 74 68 65 20 73 65  nt the.** the se
1f1c0 71 75 65 6e 63 65 20 76 61 6c 75 65 2e 0a 2a 2f  quence value..*/
1f1d0 0a 63 61 73 65 20 4f 50 5f 53 65 71 75 65 6e 63  .case OP_Sequenc
1f1e0 65 54 65 73 74 3a 20 7b 0a 20 20 56 64 62 65 43  eTest: {.  VdbeC
1f1f0 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 61 73 73  ursor *pC;.  ass
1f200 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1f210 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1f220 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
1f230 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1f240 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  ];.  assert( isS
1f250 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 69  orter(pC) );.  i
1f260 66 28 20 28 70 43 2d 3e 73 65 71 43 6f 75 6e 74  f( (pC->seqCount
1f270 2b 2b 29 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f  ++)==0 ){.    go
1f280 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
1f290 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
1f2a0 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 50 73  * Opcode: OpenPs
1f2b0 65 75 64 6f 20 50 31 20 50 32 20 50 33 20 2a 20  eudo P1 P2 P3 * 
1f2c0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 50  *.** Synopsis: P
1f2d0 33 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 72 5b 50  3 columns in r[P
1f2e0 32 5d 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20  2].**.** Open a 
1f2f0 6e 65 77 20 63 75 72 73 6f 72 20 74 68 61 74 20  new cursor that 
1f300 70 6f 69 6e 74 73 20 74 6f 20 61 20 66 61 6b 65  points to a fake
1f310 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74   table that cont
1f320 61 69 6e 73 20 61 20 73 69 6e 67 6c 65 0a 2a 2a  ains a single.**
1f330 20 72 6f 77 20 6f 66 20 64 61 74 61 2e 20 20 54   row of data.  T
1f340 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68  he content of th
1f350 61 74 20 6f 6e 65 20 72 6f 77 20 69 73 20 74 68  at one row is th
1f360 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 6d 65 6d  e content of mem
1f370 6f 72 79 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  ory.** register 
1f380 50 32 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  P2.  In other wo
1f390 72 64 73 2c 20 63 75 72 73 6f 72 20 50 31 20 62  rds, cursor P1 b
1f3a0 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61 73 20  ecomes an alias 
1f3b0 66 6f 72 20 74 68 65 20 0a 2a 2a 20 4d 45 4d 5f  for the .** MEM_
1f3c0 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 20 63 6f 6e  Blob content con
1f3d0 74 61 69 6e 65 64 20 69 6e 20 72 65 67 69 73 74  tained in regist
1f3e0 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 20 70  er P2..**.** A p
1f3f0 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 72 65 61  seudo-table crea
1f400 74 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f  ted by this opco
1f410 64 65 20 69 73 20 75 73 65 64 20 74 6f 20 68 6f  de is used to ho
1f420 6c 64 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72  ld a single.** r
1f430 6f 77 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 74  ow output from t
1f440 68 65 20 73 6f 72 74 65 72 20 73 6f 20 74 68 61  he sorter so tha
1f450 74 20 74 68 65 20 72 6f 77 20 63 61 6e 20 62 65  t the row can be
1f460 20 64 65 63 6f 6d 70 6f 73 65 64 20 69 6e 74 6f   decomposed into
1f470 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c 20 63  .** individual c
1f480 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20 74 68 65  olumns using the
1f490 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64   OP_Column opcod
1f4a0 65 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d  e.  The OP_Colum
1f4b0 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 74  n opcode.** is t
1f4c0 68 65 20 6f 6e 6c 79 20 63 75 72 73 6f 72 20 6f  he only cursor o
1f4d0 70 63 6f 64 65 20 74 68 61 74 20 77 6f 72 6b 73  pcode that works
1f4e0 20 77 69 74 68 20 61 20 70 73 65 75 64 6f 2d 74   with a pseudo-t
1f4f0 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69  able..**.** P3 i
1f500 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
1f510 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65  fields in the re
1f520 63 6f 72 64 73 20 74 68 61 74 20 77 69 6c 6c 20  cords that will 
1f530 62 65 20 73 74 6f 72 65 64 20 62 79 0a 2a 2a 20  be stored by.** 
1f540 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  the pseudo-table
1f550 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ..*/.case OP_Ope
1f560 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20 56 64 62  nPseudo: {.  Vdb
1f570 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20  eCursor *pCx;.. 
1f580 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1f590 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  >=0 );.  assert(
1f5a0 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 29 3b 0a 20   pOp->p3>=0 );. 
1f5b0 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43   pCx = allocateC
1f5c0 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31  ursor(p, pOp->p1
1f5d0 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c 20 43  , pOp->p3, -1, C
1f5e0 55 52 54 59 50 45 5f 50 53 45 55 44 4f 29 3b 0a  URTYPE_PSEUDO);.
1f5f0 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67    if( pCx==0 ) g
1f600 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
1f610 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  x->nullRow = 1;.
1f620 20 20 70 43 78 2d 3e 73 65 65 6b 52 65 73 75 6c    pCx->seekResul
1f630 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70  t = pOp->p2;.  p
1f640 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b  Cx->isTable = 1;
1f650 0a 20 20 2f 2a 20 47 69 76 65 20 74 68 69 73 20  .  /* Give this 
1f660 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 20 61 20  pseudo-cursor a 
1f670 66 61 6b 65 20 42 74 43 75 72 73 6f 72 20 70 6f  fake BtCursor po
1f680 69 6e 74 65 72 20 73 6f 20 74 68 61 74 20 70 43  inter so that pC
1f690 78 0a 20 20 2a 2a 20 63 61 6e 20 62 65 20 73 61  x.  ** can be sa
1f6a0 66 65 6c 79 20 70 61 73 73 65 64 20 74 6f 20 73  fely passed to s
1f6b0 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
1f6c0 4d 6f 76 65 74 6f 28 29 2e 20 20 54 68 69 73 20  Moveto().  This 
1f6d0 61 76 6f 69 64 73 20 61 20 74 65 73 74 0a 20 20  avoids a test.  
1f6e0 2a 2a 20 66 6f 72 20 70 43 78 2d 3e 65 43 75 72  ** for pCx->eCur
1f6f0 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
1f700 52 45 45 20 69 6e 73 69 64 65 20 6f 66 20 73 71  REE inside of sq
1f710 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
1f720 6f 76 65 74 6f 28 29 0a 20 20 2a 2a 20 77 68 69  oveto().  ** whi
1f730 63 68 20 69 73 20 61 20 70 65 72 66 6f 72 6d 61  ch is a performa
1f740 6e 63 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  nce optimization
1f750 20 2a 2f 0a 20 20 70 43 78 2d 3e 75 63 2e 70 43   */.  pCx->uc.pC
1f760 75 72 73 6f 72 20 3d 20 73 71 6c 69 74 65 33 42  ursor = sqlite3B
1f770 74 72 65 65 46 61 6b 65 56 61 6c 69 64 43 75 72  treeFakeValidCur
1f780 73 6f 72 28 29 3b 0a 20 20 61 73 73 65 72 74 28  sor();.  assert(
1f790 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20   pOp->p5==0 );. 
1f7a0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1f7b0 63 6f 64 65 3a 20 43 6c 6f 73 65 20 50 31 20 2a  code: Close P1 *
1f7c0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f   * * *.**.** Clo
1f7d0 73 65 20 61 20 63 75 72 73 6f 72 20 70 72 65 76  se a cursor prev
1f7e0 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 61 73  iously opened as
1f7f0 20 50 31 2e 20 20 49 66 20 50 31 20 69 73 20 6e   P1.  If P1 is n
1f800 6f 74 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20  ot.** currently 
1f810 6f 70 65 6e 2c 20 74 68 69 73 20 69 6e 73 74 72  open, this instr
1f820 75 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f  uction is a no-o
1f830 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c  p..*/.case OP_Cl
1f840 6f 73 65 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  ose: {.  assert(
1f850 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1f860 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1f870 72 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  r );.  sqlite3Vd
1f880 62 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c 20  beFreeCursor(p, 
1f890 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1f8a0 5d 29 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70  ]);.  p->apCsr[p
1f8b0 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b 0a 20 20 62  Op->p1] = 0;.  b
1f8c0 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 64 65 66 20  reak;.}..#ifdef 
1f8d0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f  SQLITE_ENABLE_CO
1f8e0 4c 55 4d 4e 5f 55 53 45 44 5f 4d 41 53 4b 0a 2f  LUMN_USED_MASK./
1f8f0 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e  * Opcode: Column
1f900 73 55 73 65 64 20 50 31 20 2a 20 2a 20 50 34 20  sUsed P1 * * P4 
1f910 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  *.**.** This opc
1f920 6f 64 65 20 28 77 68 69 63 68 20 6f 6e 6c 79 20  ode (which only 
1f930 65 78 69 73 74 73 20 69 66 20 53 51 4c 69 74 65  exists if SQLite
1f940 20 77 61 73 20 63 6f 6d 70 69 6c 65 64 20 77 69   was compiled wi
1f950 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41  th.** SQLITE_ENA
1f960 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 55 53 45 44 5f  BLE_COLUMN_USED_
1f970 4d 41 53 4b 29 20 69 64 65 6e 74 69 66 69 65 73  MASK) identifies
1f980 20 77 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20 6f   which columns o
1f990 66 20 74 68 65 0a 2a 2a 20 74 61 62 6c 65 20 6f  f the.** table o
1f9a0 72 20 69 6e 64 65 78 20 66 6f 72 20 63 75 72 73  r index for curs
1f9b0 6f 72 20 50 31 20 61 72 65 20 75 73 65 64 2e 20  or P1 are used. 
1f9c0 20 50 34 20 69 73 20 61 20 36 34 2d 62 69 74 20   P4 is a 64-bit 
1f9d0 69 6e 74 65 67 65 72 0a 2a 2a 20 28 50 34 5f 49  integer.** (P4_I
1f9e0 4e 54 36 34 29 20 69 6e 20 77 68 69 63 68 20 74  NT64) in which t
1f9f0 68 65 20 66 69 72 73 74 20 36 33 20 62 69 74 73  he first 63 bits
1fa00 20 61 72 65 20 6f 6e 65 20 66 6f 72 20 65 61 63   are one for eac
1fa10 68 20 6f 66 20 74 68 65 0a 2a 2a 20 66 69 72 73  h of the.** firs
1fa20 74 20 36 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  t 63 columns of 
1fa30 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
1fa40 65 78 20 74 68 61 74 20 61 72 65 20 61 63 74 75  ex that are actu
1fa50 61 6c 6c 79 20 75 73 65 64 0a 2a 2a 20 62 79 20  ally used.** by 
1fa60 74 68 65 20 63 75 72 73 6f 72 2e 20 20 54 68 65  the cursor.  The
1fa70 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20   high-order bit 
1fa80 69 73 20 73 65 74 20 69 66 20 61 6e 79 20 63 6f  is set if any co
1fa90 6c 75 6d 6e 20 61 66 74 65 72 0a 2a 2a 20 74 68  lumn after.** th
1faa0 65 20 36 34 74 68 20 69 73 20 75 73 65 64 2e 0a  e 64th is used..
1fab0 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d  */.case OP_Colum
1fac0 6e 73 55 73 65 64 3a 20 7b 0a 20 20 56 64 62 65  nsUsed: {.  Vdbe
1fad0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 70 43  Cursor *pC;.  pC
1fae0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1faf0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
1fb00 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
1fb10 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
1fb20 20 70 43 2d 3e 6d 61 73 6b 55 73 65 64 20 3d 20   pC->maskUsed = 
1fb30 2a 28 75 36 34 2a 29 70 4f 70 2d 3e 70 34 2e 70  *(u64*)pOp->p4.p
1fb40 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  I64;.  break;.}.
1fb50 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64  #endif../* Opcod
1fb60 65 3a 20 53 65 65 6b 47 45 20 50 31 20 50 32 20  e: SeekGE P1 P2 
1fb70 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
1fb80 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
1fb90 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f  ].**.** If curso
1fba0 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
1fbb0 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
1fbc0 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
1fbd0 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
1fbe0 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69   use the value i
1fbf0 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  n register P3 as
1fc00 20 74 68 65 20 6b 65 79 2e 20 20 49 66 20 63 75   the key.  If cu
1fc10 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a  rsor P1 refers .
1fc20 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64  ** to an SQL ind
1fc30 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74  ex, then P3 is t
1fc40 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61  he first in an a
1fc50 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73  rray of P4 regis
1fc60 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72  ters .** that ar
1fc70 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70  e used as an unp
1fc80 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
1fc90 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69   .**.** Repositi
1fca0 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  on cursor P1 so 
1fcb0 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20  that  it points 
1fcc0 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20  to the smallest 
1fcd0 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69  entry that .** i
1fce0 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  s greater than o
1fcf0 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
1fd00 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65  ey value. If the
1fd10 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
1fd20 73 20 0a 2a 2a 20 67 72 65 61 74 65 72 20 74 68  s .** greater th
1fd30 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
1fd40 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73  he key and P2 is
1fd50 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
1fd60 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  jump to P2..**.*
1fd70 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20  * If the cursor 
1fd80 50 31 20 77 61 73 20 6f 70 65 6e 65 64 20 75 73  P1 was opened us
1fd90 69 6e 67 20 74 68 65 20 4f 50 46 4c 41 47 5f 53  ing the OPFLAG_S
1fda0 45 45 4b 45 51 20 66 6c 61 67 2c 20 74 68 65 6e  EEKEQ flag, then
1fdb0 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20   this.** opcode 
1fdc0 77 69 6c 6c 20 61 6c 77 61 79 73 20 6c 61 6e 64  will always land
1fdd0 20 6f 6e 20 61 20 72 65 63 6f 72 64 20 74 68 61   on a record tha
1fde0 74 20 65 71 75 61 6c 6c 79 20 65 71 75 61 6c 73  t equally equals
1fdf0 20 74 68 65 20 6b 65 79 2c 20 6f 72 0a 2a 2a 20   the key, or.** 
1fe00 65 6c 73 65 20 6a 75 6d 70 20 69 6d 6d 65 64 69  else jump immedi
1fe10 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 57 68  ately to P2.  Wh
1fe20 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  en the cursor is
1fe30 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 2c 20   OPFLAG_SEEKEQ, 
1fe40 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20 6d  this.** opcode m
1fe50 75 73 74 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20  ust be followed 
1fe60 62 79 20 61 6e 20 49 64 78 4c 45 20 6f 70 63 6f  by an IdxLE opco
1fe70 64 65 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  de with the same
1fe80 20 61 72 67 75 6d 65 6e 74 73 2e 0a 2a 2a 20 54   arguments..** T
1fe90 68 65 20 49 64 78 4c 45 20 6f 70 63 6f 64 65 20  he IdxLE opcode 
1fea0 77 69 6c 6c 20 62 65 20 73 6b 69 70 70 65 64 20  will be skipped 
1feb0 69 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20 73  if this opcode s
1fec0 75 63 63 65 65 64 73 2c 20 62 75 74 20 74 68 65  ucceeds, but the
1fed0 0a 2a 2a 20 49 64 78 4c 45 20 6f 70 63 6f 64 65  .** IdxLE opcode
1fee0 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 6f 6e   will be used on
1fef0 20 73 75 62 73 65 71 75 65 6e 74 20 6c 6f 6f 70   subsequent loop
1ff00 20 69 74 65 72 61 74 69 6f 6e 73 2e 0a 2a 2a 0a   iterations..**.
1ff10 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
1ff20 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
1ff30 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d   configured to m
1ff40 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f  ove in forward o
1ff50 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68  rder,.** from th
1ff60 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61  e beginning towa
1ff70 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20  rd the end.  In 
1ff80 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
1ff90 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f   cursor is.** co
1ffa0 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20  nfigured to use 
1ffb0 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a  Next, not Prev..
1ffc0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1ffd0 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
1ffe0 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 74 2c   SeekLt, SeekGt,
1fff0 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70   SeekLe.*/./* Op
20000 63 6f 64 65 3a 20 53 65 65 6b 47 54 20 50 31 20  code: SeekGT P1 
20010 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
20020 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
20030 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  @P4].**.** If cu
20040 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
20050 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
20060 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
20070 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
20080 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75  .** use the valu
20090 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
200a0 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75   as a key. If cu
200b0 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a  rsor P1 refers .
200c0 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64  ** to an SQL ind
200d0 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74  ex, then P3 is t
200e0 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61  he first in an a
200f0 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73  rray of P4 regis
20100 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72  ters .** that ar
20110 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70  e used as an unp
20120 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
20130 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69   .**.** Repositi
20140 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  on cursor P1 so 
20150 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20  that  it points 
20160 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20  to the smallest 
20170 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69  entry that .** i
20180 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74  s greater than t
20190 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
201a0 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
201b0 63 6f 72 64 73 20 67 72 65 61 74 65 72 20 74 68  cords greater th
201c0 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61  an .** the key a
201d0 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72  nd P2 is not zer
201e0 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  o, then jump to 
201f0 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  P2..**.** This o
20200 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65  pcode leaves the
20210 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72   cursor configur
20220 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f  ed to move in fo
20230 72 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20  rward order,.** 
20240 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
20250 6e 67 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e  ng toward the en
20260 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  d.  In other wor
20270 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69  ds, the cursor i
20280 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20  s.** configured 
20290 74 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74  to use Next, not
202a0 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65   Prev..**.** See
202b0 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
202c0 74 46 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c 20  tFound, SeekLt, 
202d0 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a  SeekGe, SeekLe.*
202e0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65  /./* Opcode: See
202f0 6b 4c 54 20 50 31 20 50 32 20 50 33 20 50 34 20  kLT P1 P2 P3 P4 
20300 2a 20 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  * .** Synopsis: 
20310 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
20320 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  ** If cursor P1 
20330 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c  refers to an SQL
20340 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74   table (B-Tree t
20350 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72  hat uses integer
20360 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20   keys), .** use 
20370 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
20380 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65  ister P3 as a ke
20390 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  y. If cursor P1 
203a0 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e  refers .** to an
203b0 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e   SQL index, then
203c0 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
203d0 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20   in an array of 
203e0 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a  P4 registers .**
203f0 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
20400 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  s an unpacked in
20410 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20  dex key. .**.** 
20420 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f  Reposition curso
20430 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74  r P1 so that  it
20440 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c   points to the l
20450 61 72 67 65 73 74 20 65 6e 74 72 79 20 74 68 61  argest entry tha
20460 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68  t .** is less th
20470 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  an the key value
20480 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e  . If there are n
20490 6f 20 72 65 63 6f 72 64 73 20 6c 65 73 73 20 74  o records less t
204a0 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20  han .** the key 
204b0 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65  and P2 is not ze
204c0 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  ro, then jump to
204d0 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
204e0 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68  opcode leaves th
204f0 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75  e cursor configu
20500 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72  red to move in r
20510 65 76 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a  everse order,.**
20520 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f   from the end to
20530 77 61 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69  ward the beginni
20540 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  ng.  In other wo
20550 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20  rds, the cursor 
20560 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64  is.** configured
20570 20 74 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f   to use Prev, no
20580 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 53 65  t Next..**.** Se
20590 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
205a0 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 47 74 2c  otFound, SeekGt,
205b0 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a   SeekGe, SeekLe.
205c0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  */./* Opcode: Se
205d0 65 6b 4c 45 20 50 31 20 50 32 20 50 33 20 50 34  ekLE P1 P2 P3 P4
205e0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
205f0 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
20600 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  ** If cursor P1 
20610 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c  refers to an SQL
20620 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74   table (B-Tree t
20630 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72  hat uses integer
20640 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20   keys), .** use 
20650 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
20660 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65  ister P3 as a ke
20670 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  y. If cursor P1 
20680 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e  refers .** to an
20690 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e   SQL index, then
206a0 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
206b0 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20   in an array of 
206c0 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a  P4 registers .**
206d0 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
206e0 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  s an unpacked in
206f0 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20  dex key. .**.** 
20700 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f  Reposition curso
20710 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20  r P1 so that it 
20720 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61  points to the la
20730 72 67 65 73 74 20 65 6e 74 72 79 20 74 68 61 74  rgest entry that
20740 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61   .** is less tha
20750 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
20760 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20  e key value. If 
20770 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63  there are no rec
20780 6f 72 64 73 20 0a 2a 2a 20 6c 65 73 73 20 74 68  ords .** less th
20790 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
207a0 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73  he key and P2 is
207b0 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
207c0 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  jump to P2..**.*
207d0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65  * This opcode le
207e0 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
207f0 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f  configured to mo
20800 76 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72  ve in reverse or
20810 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65  der,.** from the
20820 20 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20   end toward the 
20830 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f  beginning.  In o
20840 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
20850 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e  cursor is.** con
20860 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 50  figured to use P
20870 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a  rev, not Next..*
20880 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 75 72 73  *.** If the curs
20890 6f 72 20 50 31 20 77 61 73 20 6f 70 65 6e 65 64  or P1 was opened
208a0 20 75 73 69 6e 67 20 74 68 65 20 4f 50 46 4c 41   using the OPFLA
208b0 47 5f 53 45 45 4b 45 51 20 66 6c 61 67 2c 20 74  G_SEEKEQ flag, t
208c0 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f  hen this.** opco
208d0 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 6c  de will always l
208e0 61 6e 64 20 6f 6e 20 61 20 72 65 63 6f 72 64 20  and on a record 
208f0 74 68 61 74 20 65 71 75 61 6c 6c 79 20 65 71 75  that equally equ
20900 61 6c 73 20 74 68 65 20 6b 65 79 2c 20 6f 72 0a  als the key, or.
20910 2a 2a 20 65 6c 73 65 20 6a 75 6d 70 20 69 6d 6d  ** else jump imm
20920 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20  ediately to P2. 
20930 20 57 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72   When the cursor
20940 20 69 73 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45   is OPFLAG_SEEKE
20950 51 2c 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64  Q, this.** opcod
20960 65 20 6d 75 73 74 20 62 65 20 66 6f 6c 6c 6f 77  e must be follow
20970 65 64 20 62 79 20 61 6e 20 49 64 78 47 45 20 6f  ed by an IdxGE o
20980 70 63 6f 64 65 20 77 69 74 68 20 74 68 65 20 73  pcode with the s
20990 61 6d 65 20 61 72 67 75 6d 65 6e 74 73 2e 0a 2a  ame arguments..*
209a0 2a 20 54 68 65 20 49 64 78 47 45 20 6f 70 63 6f  * The IdxGE opco
209b0 64 65 20 77 69 6c 6c 20 62 65 20 73 6b 69 70 70  de will be skipp
209c0 65 64 20 69 66 20 74 68 69 73 20 6f 70 63 6f 64  ed if this opcod
209d0 65 20 73 75 63 63 65 65 64 73 2c 20 62 75 74 20  e succeeds, but 
209e0 74 68 65 0a 2a 2a 20 49 64 78 47 45 20 6f 70 63  the.** IdxGE opc
209f0 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64  ode will be used
20a00 20 6f 6e 20 73 75 62 73 65 71 75 65 6e 74 20 6c   on subsequent l
20a10 6f 6f 70 20 69 74 65 72 61 74 69 6f 6e 73 2e 0a  oop iterations..
20a20 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
20a30 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
20a40 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c   SeekGt, SeekGe,
20a50 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20   SeekLt.*/.case 
20a60 4f 50 5f 53 65 65 6b 4c 54 3a 20 20 20 20 20 20  OP_SeekLT:      
20a70 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 2c     /* jump, in3,
20a80 20 67 72 6f 75 70 20 2a 2f 0a 63 61 73 65 20 4f   group */.case O
20a90 50 5f 53 65 65 6b 4c 45 3a 20 20 20 20 20 20 20  P_SeekLE:       
20aa0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 2c 20    /* jump, in3, 
20ab0 67 72 6f 75 70 20 2a 2f 0a 63 61 73 65 20 4f 50  group */.case OP
20ac0 5f 53 65 65 6b 47 45 3a 20 20 20 20 20 20 20 20  _SeekGE:        
20ad0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 2c 20 67   /* jump, in3, g
20ae0 72 6f 75 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  roup */.case OP_
20af0 53 65 65 6b 47 54 3a 20 7b 20 20 20 20 20 20 20  SeekGT: {       
20b00 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 2c 20 67 72  /* jump, in3, gr
20b10 6f 75 70 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73  oup */.  int res
20b20 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43  ;           /* C
20b30 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73 75 6c 74  omparison result
20b40 20 2a 2f 0a 20 20 69 6e 74 20 6f 63 3b 20 20 20   */.  int oc;   
20b50 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f           /* Opco
20b60 64 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  de */.  VdbeCurs
20b70 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68  or *pC;    /* Th
20b80 65 20 63 75 72 73 6f 72 20 74 6f 20 73 65 65 6b  e cursor to seek
20b90 20 2a 2f 0a 20 20 55 6e 70 61 63 6b 65 64 52 65   */.  UnpackedRe
20ba0 63 6f 72 64 20 72 3b 20 20 2f 2a 20 54 68 65 20  cord r;  /* The 
20bb0 6b 65 79 20 74 6f 20 73 65 65 6b 20 66 6f 72 20  key to seek for 
20bc0 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b  */.  int nField;
20bd0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
20be0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 6f 72 20  r of columns or 
20bf0 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 6b 65  fields in the ke
20c00 79 20 2a 2f 0a 20 20 69 36 34 20 69 4b 65 79 3b  y */.  i64 iKey;
20c10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
20c20 20 72 6f 77 69 64 20 77 65 20 61 72 65 20 74 6f   rowid we are to
20c30 20 73 65 65 6b 20 74 6f 20 2a 2f 0a 20 20 69 6e   seek to */.  in
20c40 74 20 65 71 4f 6e 6c 79 3b 20 20 20 20 20 20 20  t eqOnly;       
20c50 20 2f 2a 20 4f 6e 6c 79 20 69 6e 74 65 72 65 73   /* Only interes
20c60 74 65 64 20 69 6e 20 3d 3d 20 72 65 73 75 6c 74  ted in == result
20c70 73 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20  s */..  assert( 
20c80 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
20c90 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
20ca0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
20cb0 70 2d 3e 70 32 21 3d 30 20 29 3b 0a 20 20 70 43  p->p2!=0 );.  pC
20cc0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
20cd0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
20ce0 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
20cf0 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
20d00 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
20d10 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53  ;.  assert( OP_S
20d20 65 65 6b 4c 45 20 3d 3d 20 4f 50 5f 53 65 65 6b  eekLE == OP_Seek
20d30 4c 54 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74  LT+1 );.  assert
20d40 28 20 4f 50 5f 53 65 65 6b 47 45 20 3d 3d 20 4f  ( OP_SeekGE == O
20d50 50 5f 53 65 65 6b 4c 54 2b 32 20 29 3b 0a 20 20  P_SeekLT+2 );.  
20d60 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47  assert( OP_SeekG
20d70 54 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 33  T == OP_SeekLT+3
20d80 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
20d90 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20  ->isOrdered );. 
20da0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e   assert( pC->uc.
20db0 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
20dc0 6f 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  oc = pOp->opcode
20dd0 3b 0a 20 20 65 71 4f 6e 6c 79 20 3d 20 30 3b 0a  ;.  eqOnly = 0;.
20de0 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
20df0 30 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  0;.#ifdef SQLITE
20e00 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65  _DEBUG.  pC->see
20e10 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64  kOp = pOp->opcod
20e20 65 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28  e;.#endif..  if(
20e30 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a   pC->isTable ){.
20e40 20 20 20 20 2f 2a 20 54 68 65 20 42 54 52 45 45      /* The BTREE
20e50 5f 53 45 45 4b 5f 45 51 20 66 6c 61 67 20 69 73  _SEEK_EQ flag is
20e60 20 6f 6e 6c 79 20 73 65 74 20 6f 6e 20 69 6e 64   only set on ind
20e70 65 78 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20  ex cursors */.  
20e80 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
20e90 33 42 74 72 65 65 43 75 72 73 6f 72 48 61 73 48  3BtreeCursorHasH
20ea0 69 6e 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  int(pC->uc.pCurs
20eb0 6f 72 2c 20 42 54 52 45 45 5f 53 45 45 4b 5f 45  or, BTREE_SEEK_E
20ec0 51 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 20 20  Q)==0.          
20ed0 20 20 20 20 7c 7c 20 43 4f 52 52 55 50 54 5f 44      || CORRUPT_D
20ee0 42 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65  B );..    /* The
20ef0 20 69 6e 70 75 74 20 76 61 6c 75 65 20 69 6e 20   input value in 
20f00 50 33 20 6d 69 67 68 74 20 62 65 20 6f 66 20 61  P3 might be of a
20f10 6e 79 20 74 79 70 65 3a 20 69 6e 74 65 67 65 72  ny type: integer
20f20 2c 20 72 65 61 6c 2c 20 73 74 72 69 6e 67 2c 0a  , real, string,.
20f30 20 20 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f 72 20      ** blob, or 
20f40 4e 55 4c 4c 2e 20 20 42 75 74 20 69 74 20 6e 65  NULL.  But it ne
20f50 65 64 73 20 74 6f 20 62 65 20 61 6e 20 69 6e 74  eds to be an int
20f60 65 67 65 72 20 62 65 66 6f 72 65 20 77 65 20 63  eger before we c
20f70 61 6e 20 64 6f 0a 20 20 20 20 2a 2a 20 74 68 65  an do.    ** the
20f80 20 73 65 65 6b 2c 20 73 6f 20 63 6f 6e 76 65 72   seek, so conver
20f90 74 20 69 74 2e 20 2a 2f 0a 20 20 20 20 70 49 6e  t it. */.    pIn
20fa0 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
20fb0 33 5d 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e  3];.    if( (pIn
20fc0 33 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  3->flags & (MEM_
20fd0 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d  Int|MEM_Real|MEM
20fe0 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20  _Str))==MEM_Str 
20ff0 29 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 4e 75  ){.      applyNu
21000 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49  mericAffinity(pI
21010 6e 33 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20  n3, 0);.    }.  
21020 20 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33    iKey = sqlite3
21030 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
21040 33 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 74  3);..    /* If t
21050 68 65 20 50 33 20 76 61 6c 75 65 20 63 6f 75 6c  he P3 value coul
21060 64 20 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74  d not be convert
21070 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67  ed into an integ
21080 65 72 20 77 69 74 68 6f 75 74 0a 20 20 20 20 2a  er without.    *
21090 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d  * loss of inform
210a0 61 74 69 6f 6e 2c 20 74 68 65 6e 20 73 70 65 63  ation, then spec
210b0 69 61 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 69  ial processing i
210c0 73 20 72 65 71 75 69 72 65 64 2e 2e 2e 20 2a 2f  s required... */
210d0 0a 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e  .    if( (pIn3->
210e0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
210f0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ==0 ){.      if(
21100 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
21110 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a  MEM_Real)==0 ){.
21120 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68          /* If th
21130 65 20 50 33 20 76 61 6c 75 65 20 63 61 6e 6e 6f  e P3 value canno
21140 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69  t be converted i
21150 6e 74 6f 20 61 6e 79 20 6b 69 6e 64 20 6f 66 20  nto any kind of 
21160 61 20 6e 75 6d 62 65 72 2c 0a 20 20 20 20 20 20  a number,.      
21170 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 73 65    ** then the se
21180 65 6b 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62  ek is not possib
21190 6c 65 2c 20 73 6f 20 6a 75 6d 70 20 74 6f 20 50  le, so jump to P
211a0 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 56 64 62  2 */.        Vdb
211b0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32  eBranchTaken(1,2
211c0 29 3b 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f  ); goto jump_to_
211d0 70 32 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  p2;.        brea
211e0 6b 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  k;.      }..    
211f0 20 20 2f 2a 20 49 66 20 74 68 65 20 61 70 70 72    /* If the appr
21200 6f 78 69 6d 61 74 69 6f 6e 20 69 4b 65 79 20 69  oximation iKey i
21210 73 20 6c 61 72 67 65 72 20 74 68 61 6e 20 74 68  s larger than th
21220 65 20 61 63 74 75 61 6c 20 72 65 61 6c 20 73 65  e actual real se
21230 61 72 63 68 0a 20 20 20 20 20 20 2a 2a 20 74 65  arch.      ** te
21240 72 6d 2c 20 73 75 62 73 74 69 74 75 74 65 20 3e  rm, substitute >
21250 3d 20 66 6f 72 20 3e 20 61 6e 64 20 3c 20 66 6f  = for > and < fo
21260 72 20 3c 3d 2e 20 65 2e 67 2e 20 69 66 20 74 68  r <=. e.g. if th
21270 65 20 73 65 61 72 63 68 20 74 65 72 6d 0a 20 20  e search term.  
21280 20 20 20 20 2a 2a 20 69 73 20 34 2e 39 20 61 6e      ** is 4.9 an
21290 64 20 74 68 65 20 69 6e 74 65 67 65 72 20 61 70  d the integer ap
212a0 70 72 6f 78 69 6d 61 74 69 6f 6e 20 35 3a 0a 20  proximation 5:. 
212b0 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a       **.      **
212c0 20 20 20 20 20 20 20 20 28 78 20 3e 20 20 34 2e          (x >  4.
212d0 39 29 20 20 20 20 2d 3e 20 20 20 20 20 28 78 20  9)    ->     (x 
212e0 3e 3d 20 35 29 0a 20 20 20 20 20 20 2a 2a 20 20  >= 5).      **  
212f0 20 20 20 20 20 20 28 78 20 3c 3d 20 34 2e 39 29        (x <= 4.9)
21300 20 20 20 20 2d 3e 20 20 20 20 20 28 78 20 3c 20      ->     (x < 
21310 20 35 29 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20   5).      */.   
21320 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 72     if( pIn3->u.r
21330 3c 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 7b  <(double)iKey ){
21340 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
21350 20 4f 50 5f 53 65 65 6b 47 45 3d 3d 28 4f 50 5f   OP_SeekGE==(OP_
21360 53 65 65 6b 47 54 2d 31 29 20 29 3b 0a 20 20 20  SeekGT-1) );.   
21370 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f       assert( OP_
21380 53 65 65 6b 4c 54 3d 3d 28 4f 50 5f 53 65 65 6b  SeekLT==(OP_Seek
21390 4c 45 2d 31 29 20 29 3b 0a 20 20 20 20 20 20 20  LE-1) );.       
213a0 20 61 73 73 65 72 74 28 20 28 4f 50 5f 53 65 65   assert( (OP_See
213b0 6b 4c 45 20 26 20 30 78 30 30 30 31 29 3d 3d 28  kLE & 0x0001)==(
213c0 4f 50 5f 53 65 65 6b 47 54 20 26 20 30 78 30 30  OP_SeekGT & 0x00
213d0 30 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 69  01) );.        i
213e0 66 28 20 28 6f 63 20 26 20 30 78 30 30 30 31 29  f( (oc & 0x0001)
213f0 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 20 26 20 30  ==(OP_SeekGT & 0
21400 78 30 30 30 31 29 20 29 20 6f 63 2d 2d 3b 0a 20  x0001) ) oc--;. 
21410 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a       }..      /*
21420 20 49 66 20 74 68 65 20 61 70 70 72 6f 78 69 6d   If the approxim
21430 61 74 69 6f 6e 20 69 4b 65 79 20 69 73 20 73 6d  ation iKey is sm
21440 61 6c 6c 65 72 20 74 68 61 6e 20 74 68 65 20 61  aller than the a
21450 63 74 75 61 6c 20 72 65 61 6c 20 73 65 61 72 63  ctual real searc
21460 68 0a 20 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c  h.      ** term,
21470 20 73 75 62 73 74 69 74 75 74 65 20 3c 3d 20 66   substitute <= f
21480 6f 72 20 3c 20 61 6e 64 20 3e 20 66 6f 72 20 3e  or < and > for >
21490 3d 2e 20 20 2a 2f 0a 20 20 20 20 20 20 65 6c 73  =.  */.      els
214a0 65 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 72 3e  e if( pIn3->u.r>
214b0 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 7b 0a  (double)iKey ){.
214c0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
214d0 4f 50 5f 53 65 65 6b 4c 45 3d 3d 28 4f 50 5f 53  OP_SeekLE==(OP_S
214e0 65 65 6b 4c 54 2b 31 29 20 29 3b 0a 20 20 20 20  eekLT+1) );.    
214f0 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53      assert( OP_S
21500 65 65 6b 47 54 3d 3d 28 4f 50 5f 53 65 65 6b 47  eekGT==(OP_SeekG
21510 45 2b 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20  E+1) );.        
21520 61 73 73 65 72 74 28 20 28 4f 50 5f 53 65 65 6b  assert( (OP_Seek
21530 4c 54 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f  LT & 0x0001)==(O
21540 50 5f 53 65 65 6b 47 45 20 26 20 30 78 30 30 30  P_SeekGE & 0x000
21550 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66  1) );.        if
21560 28 20 28 6f 63 20 26 20 30 78 30 30 30 31 29 3d  ( (oc & 0x0001)=
21570 3d 28 4f 50 5f 53 65 65 6b 4c 54 20 26 20 30 78  =(OP_SeekLT & 0x
21580 30 30 30 31 29 20 29 20 6f 63 2b 2b 3b 0a 20 20  0001) ) oc++;.  
21590 20 20 20 20 7d 0a 20 20 20 20 7d 20 0a 20 20 20      }.    } .   
215a0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
215b0 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
215c0 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
215d0 20 30 2c 20 28 75 36 34 29 69 4b 65 79 2c 20 30   0, (u64)iKey, 0
215e0 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d  , &res);.    pC-
215f0 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20  >movetoTarget = 
21600 69 4b 65 79 3b 20 20 2f 2a 20 55 73 65 64 20 62  iKey;  /* Used b
21610 79 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 20  y OP_Delete */. 
21620 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
21630 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f  E_OK ){.      go
21640 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
21650 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d  error;.    }.  }
21660 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 46 6f 72  else{.    /* For
21670 20 61 20 63 75 72 73 6f 72 20 77 69 74 68 20 74   a cursor with t
21680 68 65 20 42 54 52 45 45 5f 53 45 45 4b 5f 45 51  he BTREE_SEEK_EQ
21690 20 68 69 6e 74 2c 20 6f 6e 6c 79 20 74 68 65 20   hint, only the 
216a0 4f 50 5f 53 65 65 6b 47 45 20 61 6e 64 0a 20 20  OP_SeekGE and.  
216b0 20 20 2a 2a 20 4f 50 5f 53 65 65 6b 4c 45 20 6f    ** OP_SeekLE o
216c0 70 63 6f 64 65 73 20 61 72 65 20 61 6c 6c 6f 77  pcodes are allow
216d0 65 64 2c 20 61 6e 64 20 74 68 65 73 65 20 6d 75  ed, and these mu
216e0 73 74 20 62 65 20 69 6d 6d 65 64 69 61 74 65 6c  st be immediatel
216f0 79 20 66 6f 6c 6c 6f 77 65 64 0a 20 20 20 20 2a  y followed.    *
21700 2a 20 62 79 20 61 6e 20 4f 50 5f 49 64 78 47 54  * by an OP_IdxGT
21710 20 6f 72 20 4f 50 5f 49 64 78 4c 54 20 6f 70 63   or OP_IdxLT opc
21720 6f 64 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ode, respectivel
21730 79 2c 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  y, with the same
21740 20 6b 65 79 2e 0a 20 20 20 20 2a 2f 0a 20 20 20   key..    */.   
21750 20 69 66 28 20 73 71 6c 69 74 65 33 42 74 72 65   if( sqlite3Btre
21760 65 43 75 72 73 6f 72 48 61 73 48 69 6e 74 28 70  eCursorHasHint(p
21770 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 42  C->uc.pCursor, B
21780 54 52 45 45 5f 53 45 45 4b 5f 45 51 29 20 29 7b  TREE_SEEK_EQ) ){
21790 0a 20 20 20 20 20 20 65 71 4f 6e 6c 79 20 3d 20  .      eqOnly = 
217a0 31 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  1;.      assert(
217b0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
217c0 5f 53 65 65 6b 47 45 20 7c 7c 20 70 4f 70 2d 3e  _SeekGE || pOp->
217d0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 4c  opcode==OP_SeekL
217e0 45 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  E );.      asser
217f0 74 28 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65  t( pOp[1].opcode
21800 3d 3d 4f 50 5f 49 64 78 4c 54 20 7c 7c 20 70 4f  ==OP_IdxLT || pO
21810 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  p[1].opcode==OP_
21820 49 64 78 47 54 20 29 3b 0a 20 20 20 20 20 20 61  IdxGT );.      a
21830 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 31  ssert( pOp[1].p1
21840 3d 3d 70 4f 70 5b 30 5d 2e 70 31 20 29 3b 0a 20  ==pOp[0].p1 );. 
21850 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
21860 5b 31 5d 2e 70 32 3d 3d 70 4f 70 5b 30 5d 2e 70  [1].p2==pOp[0].p
21870 32 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  2 );.      asser
21880 74 28 20 70 4f 70 5b 31 5d 2e 70 33 3d 3d 70 4f  t( pOp[1].p3==pO
21890 70 5b 30 5d 2e 70 33 20 29 3b 0a 20 20 20 20 20  p[0].p3 );.     
218a0 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e   assert( pOp[1].
218b0 70 34 2e 69 3d 3d 70 4f 70 5b 30 5d 2e 70 34 2e  p4.i==pOp[0].p4.
218c0 69 20 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  i );.    }..    
218d0 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34  nField = pOp->p4
218e0 2e 69 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  .i;.    assert( 
218f0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
21900 49 4e 54 33 32 20 29 3b 0a 20 20 20 20 61 73 73  INT32 );.    ass
21910 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 29 3b  ert( nField>0 );
21920 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20  .    r.pKeyInfo 
21930 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a  = pC->pKeyInfo;.
21940 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28      r.nField = (
21950 75 31 36 29 6e 46 69 65 6c 64 3b 0a 0a 20 20 20  u16)nField;..   
21960 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 6c 69 6e   /* The next lin
21970 65 20 6f 66 20 63 6f 64 65 20 63 6f 6d 70 75 74  e of code comput
21980 65 73 20 61 73 20 66 6f 6c 6c 6f 77 73 2c 20 6f  es as follows, o
21990 6e 6c 79 20 66 61 73 74 65 72 3a 0a 20 20 20 20  nly faster:.    
219a0 2a 2a 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f  **   if( oc==OP_
219b0 53 65 65 6b 47 54 20 7c 7c 20 6f 63 3d 3d 4f 50  SeekGT || oc==OP
219c0 5f 53 65 65 6b 4c 45 20 29 7b 0a 20 20 20 20 2a  _SeekLE ){.    *
219d0 2a 20 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f  *     r.default_
219e0 72 63 20 3d 20 2d 31 3b 0a 20 20 20 20 2a 2a 20  rc = -1;.    ** 
219f0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2a 2a 20    }else{.    ** 
21a00 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63      r.default_rc
21a10 20 3d 20 2b 31 3b 0a 20 20 20 20 2a 2a 20 20 20   = +1;.    **   
21a20 7d 0a 20 20 20 20 2a 2f 0a 20 20 20 20 72 2e 64  }.    */.    r.d
21a30 65 66 61 75 6c 74 5f 72 63 20 3d 20 28 28 31 20  efault_rc = ((1 
21a40 26 20 28 6f 63 20 2d 20 4f 50 5f 53 65 65 6b 4c  & (oc - OP_SeekL
21a50 54 29 29 20 3f 20 2d 31 20 3a 20 2b 31 29 3b 0a  T)) ? -1 : +1);.
21a60 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d      assert( oc!=
21a70 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20 72 2e 64  OP_SeekGT || r.d
21a80 65 66 61 75 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b  efault_rc==-1 );
21a90 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21  .    assert( oc!
21aa0 3d 4f 50 5f 53 65 65 6b 4c 45 20 7c 7c 20 72 2e  =OP_SeekLE || r.
21ab0 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2d 31 20 29  default_rc==-1 )
21ac0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63  ;.    assert( oc
21ad0 21 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20 72  !=OP_SeekGE || r
21ae0 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2b 31 20  .default_rc==+1 
21af0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f  );.    assert( o
21b00 63 21 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20  c!=OP_SeekLT || 
21b10 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2b 31  r.default_rc==+1
21b20 20 29 3b 0a 0a 20 20 20 20 72 2e 61 4d 65 6d 20   );..    r.aMem 
21b30 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
21b40 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
21b50 44 45 42 55 47 0a 20 20 20 20 7b 20 69 6e 74 20  DEBUG.    { int 
21b60 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e  i; for(i=0; i<r.
21b70 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73  nField; i++) ass
21b80 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
21b90 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d  &r.aMem[i]) ); }
21ba0 0a 23 65 6e 64 69 66 0a 20 20 20 20 72 2e 65 71  .#endif.    r.eq
21bb0 53 65 65 6e 20 3d 20 30 3b 0a 20 20 20 20 72 63  Seen = 0;.    rc
21bc0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
21bd0 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
21be0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 72  ->uc.pCursor, &r
21bf0 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20  , 0, 0, &res);. 
21c00 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
21c10 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f  E_OK ){.      go
21c20 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
21c30 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20  error;.    }.   
21c40 20 69 66 28 20 65 71 4f 6e 6c 79 20 26 26 20 72   if( eqOnly && r
21c50 2e 65 71 53 65 65 6e 3d 3d 30 20 29 7b 0a 20 20  .eqSeen==0 ){.  
21c60 20 20 20 20 61 73 73 65 72 74 28 20 72 65 73 21      assert( res!
21c70 3d 30 20 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f  =0 );.      goto
21c80 20 73 65 65 6b 5f 6e 6f 74 5f 66 6f 75 6e 64 3b   seek_not_found;
21c90 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 2d  .    }.  }.  pC-
21ca0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
21cb0 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 0;.  pC->cache
21cc0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
21cd0 54 41 4c 45 3b 0a 23 69 66 64 65 66 20 53 51 4c  TALE;.#ifdef SQL
21ce0 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74  ITE_TEST.  sqlit
21cf0 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b  e3_search_count+
21d00 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20  +;.#endif.  if( 
21d10 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47 45 20 29 7b  oc>=OP_SeekGE ){
21d20 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50    assert( oc==OP
21d30 5f 53 65 65 6b 47 45 20 7c 7c 20 6f 63 3d 3d 4f  _SeekGE || oc==O
21d40 50 5f 53 65 65 6b 47 54 20 29 3b 0a 20 20 20 20  P_SeekGT );.    
21d50 69 66 28 20 72 65 73 3c 30 20 7c 7c 20 28 72 65  if( res<0 || (re
21d60 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53  s==0 && oc==OP_S
21d70 65 65 6b 47 54 29 20 29 7b 0a 20 20 20 20 20 20  eekGT) ){.      
21d80 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 72  res = 0;.      r
21d90 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
21da0 4e 65 78 74 28 70 43 2d 3e 75 63 2e 70 43 75 72  Next(pC->uc.pCur
21db0 73 6f 72 2c 20 30 29 3b 0a 20 20 20 20 20 20 69  sor, 0);.      i
21dc0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
21dd0 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
21de0 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20  rc==SQLITE_DONE 
21df0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20  ){.          rc 
21e00 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20  = SQLITE_OK;.   
21e10 20 20 20 20 20 20 20 72 65 73 20 3d 20 31 3b 0a         res = 1;.
21e20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
21e30 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62           goto ab
21e40 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
21e50 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
21e60 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20    }.    }else{. 
21e70 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20       res = 0;.  
21e80 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
21e90 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f   assert( oc==OP_
21ea0 53 65 65 6b 4c 54 20 7c 7c 20 6f 63 3d 3d 4f 50  SeekLT || oc==OP
21eb0 5f 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20 69  _SeekLE );.    i
21ec0 66 28 20 72 65 73 3e 30 20 7c 7c 20 28 72 65 73  f( res>0 || (res
21ed0 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65  ==0 && oc==OP_Se
21ee0 65 6b 4c 54 29 20 29 7b 0a 20 20 20 20 20 20 72  ekLT) ){.      r
21ef0 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 63  es = 0;.      rc
21f00 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
21f10 72 65 76 69 6f 75 73 28 70 43 2d 3e 75 63 2e 70  revious(pC->uc.p
21f20 43 75 72 73 6f 72 2c 20 30 29 3b 0a 20 20 20 20  Cursor, 0);.    
21f30 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
21f40 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 69  _OK ){.        i
21f50 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f  f( rc==SQLITE_DO
21f60 4e 45 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  NE ){.          
21f70 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
21f80 20 20 20 20 20 20 20 20 20 20 72 65 73 20 3d 20            res = 
21f90 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  1;.        }else
21fa0 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  {.          goto
21fb0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
21fc0 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ror;.        }. 
21fd0 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
21fe0 7b 0a 20 20 20 20 20 20 2f 2a 20 72 65 73 20 6d  {.      /* res m
21ff0 69 67 68 74 20 62 65 20 6e 65 67 61 74 69 76 65  ight be negative
22000 20 62 65 63 61 75 73 65 20 74 68 65 20 74 61 62   because the tab
22010 6c 65 20 69 73 20 65 6d 70 74 79 2e 20 20 43 68  le is empty.  Ch
22020 65 63 6b 20 74 6f 0a 20 20 20 20 20 20 2a 2a 20  eck to.      ** 
22030 73 65 65 20 69 66 20 74 68 69 73 20 69 73 20 74  see if this is t
22040 68 65 20 63 61 73 65 2e 0a 20 20 20 20 20 20 2a  he case..      *
22050 2f 0a 20 20 20 20 20 20 72 65 73 20 3d 20 73 71  /.      res = sq
22060 6c 69 74 65 33 42 74 72 65 65 45 6f 66 28 70 43  lite3BtreeEof(pC
22070 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20  ->uc.pCursor);. 
22080 20 20 20 7d 0a 20 20 7d 0a 73 65 65 6b 5f 6e 6f     }.  }.seek_no
22090 74 5f 66 6f 75 6e 64 3a 0a 20 20 61 73 73 65 72  t_found:.  asser
220a0 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a  t( pOp->p2>0 );.
220b0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
220c0 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69  n(res!=0,2);.  i
220d0 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 67 6f  f( res ){.    go
220e0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
220f0 20 7d 65 6c 73 65 20 69 66 28 20 65 71 4f 6e 6c   }else if( eqOnl
22100 79 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  y ){.    assert(
22110 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d   pOp[1].opcode==
22120 4f 50 5f 49 64 78 4c 54 20 7c 7c 20 70 4f 70 5b  OP_IdxLT || pOp[
22130 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  1].opcode==OP_Id
22140 78 47 54 20 29 3b 0a 20 20 20 20 70 4f 70 2b 2b  xGT );.    pOp++
22150 3b 20 2f 2a 20 53 6b 69 70 20 74 68 65 20 4f 50  ; /* Skip the OP
22160 5f 49 64 78 4c 74 20 6f 72 20 4f 50 5f 49 64 78  _IdxLt or OP_Idx
22170 47 54 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20  GT that follows 
22180 2a 2f 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  */.  }.  break;.
22190 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
221a0 65 6b 48 69 74 20 50 31 20 50 32 20 2a 20 2a 20  ekHit P1 P2 * * 
221b0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 73  *.** Synopsis: s
221c0 65 65 6b 48 69 74 3d 50 32 0a 2a 2a 0a 2a 2a 20  eekHit=P2.**.** 
221d0 53 65 74 20 74 68 65 20 73 65 65 6b 48 69 74 20  Set the seekHit 
221e0 66 6c 61 67 20 6f 6e 20 63 75 72 73 6f 72 20 50  flag on cursor P
221f0 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69  1 to the value i
22200 6e 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73 65 65  n P2..** The see
22210 6b 48 69 74 20 66 6c 61 67 20 69 73 20 75 73 65  kHit flag is use
22220 64 20 62 79 20 74 68 65 20 49 66 4e 6f 48 6f 70  d by the IfNoHop
22230 65 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  e opcode..**.** 
22240 50 31 20 6d 75 73 74 20 62 65 20 61 20 76 61 6c  P1 must be a val
22250 69 64 20 62 2d 74 72 65 65 20 63 75 72 73 6f 72  id b-tree cursor
22260 2e 20 20 50 32 20 6d 75 73 74 20 62 65 20 61 20  .  P2 must be a 
22270 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2c 0a 2a  boolean value,.*
22280 2a 20 65 69 74 68 65 72 20 30 20 6f 72 20 31 2e  * either 0 or 1.
22290 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b  .*/.case OP_Seek
222a0 48 69 74 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  Hit: {.  VdbeCur
222b0 73 6f 72 20 2a 70 43 3b 0a 20 20 61 73 73 65 72  sor *pC;.  asser
222c0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
222d0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
222e0 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
222f0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
22300 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
22310 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
22320 70 2d 3e 70 32 3d 3d 30 20 7c 7c 20 70 4f 70 2d  p->p2==0 || pOp-
22330 3e 70 32 3d 3d 31 20 29 3b 0a 20 20 70 43 2d 3e  >p2==1 );.  pC->
22340 73 65 65 6b 48 69 74 20 3d 20 70 4f 70 2d 3e 70  seekHit = pOp->p
22350 32 20 26 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a  2 & 1;.  break;.
22360 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6f  }../* Opcode: Fo
22370 75 6e 64 20 50 31 20 50 32 20 50 33 20 50 34 20  und P1 P2 P3 P4 
22380 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  *.** Synopsis: k
22390 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
223a0 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20  * If P4==0 then 
223b0 72 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64  register P3 hold
223c0 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75  s a blob constru
223d0 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f  cted by MakeReco
223e0 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20  rd.  If.** P4>0 
223f0 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
22400 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66   is the first of
22410 20 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68   P4 registers th
22420 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  at form an unpac
22430 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a  ked.** record..*
22440 2a 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69  *.** Cursor P1 i
22450 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74  s on an index bt
22460 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65 63  ree.  If the rec
22470 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20 62  ord identified b
22480 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69  y P3 and P4.** i
22490 73 20 61 20 70 72 65 66 69 78 20 6f 66 20 61 6e  s a prefix of an
224a0 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68  y entry in P1 th
224b0 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64  en a jump is mad
224c0 65 20 74 6f 20 50 32 20 61 6e 64 0a 2a 2a 20 50  e to P2 and.** P
224d0 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69  1 is left pointi
224e0 6e 67 20 61 74 20 74 68 65 20 6d 61 74 63 68 69  ng at the matchi
224f0 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20  ng entry..**.** 
22500 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c  This operation l
22510 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
22520 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65 72   in a state wher
22530 65 20 69 74 20 63 61 6e 20 62 65 0a 2a 2a 20 61  e it can be.** a
22540 64 76 61 6e 63 65 64 20 69 6e 20 74 68 65 20 66  dvanced in the f
22550 6f 72 77 61 72 64 20 64 69 72 65 63 74 69 6f 6e  orward direction
22560 2e 20 20 54 68 65 20 4e 65 78 74 20 69 6e 73 74  .  The Next inst
22570 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20 77 6f 72  ruction will wor
22580 6b 2c 0a 2a 2a 20 62 75 74 20 6e 6f 74 20 74 68  k,.** but not th
22590 65 20 50 72 65 76 20 69 6e 73 74 72 75 63 74 69  e Prev instructi
225a0 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  on..**.** See al
225b0 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f  so: NotFound, No
225c0 43 6f 6e 66 6c 69 63 74 2c 20 4e 6f 74 45 78 69  Conflict, NotExi
225d0 73 74 73 2e 20 53 65 65 6b 47 65 0a 2a 2f 0a 2f  sts. SeekGe.*/./
225e0 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 46 6f 75  * Opcode: NotFou
225f0 6e 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  nd P1 P2 P3 P4 *
22600 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
22610 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
22620 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72   If P4==0 then r
22630 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73  egister P3 holds
22640 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63   a blob construc
22650 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72  ted by MakeRecor
22660 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74  d.  If.** P4>0 t
22670 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
22680 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66 20  is the first of 
22690 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68 61  P4 registers tha
226a0 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  t form an unpack
226b0 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a  ed.** record..**
226c0 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69   .** Cursor P1 i
226d0 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74  s on an index bt
226e0 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65 63  ree.  If the rec
226f0 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20 62  ord identified b
22700 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69  y P3 and P4.** i
22710 73 20 6e 6f 74 20 74 68 65 20 70 72 65 66 69 78  s not the prefix
22720 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e   of any entry in
22730 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20   P1 then a jump 
22740 69 73 20 6d 61 64 65 20 74 6f 20 50 32 2e 20 20  is made to P2.  
22750 49 66 20 50 31 20 0a 2a 2a 20 64 6f 65 73 20 63  If P1 .** does c
22760 6f 6e 74 61 69 6e 20 61 6e 20 65 6e 74 72 79 20  ontain an entry 
22770 77 68 6f 73 65 20 70 72 65 66 69 78 20 6d 61 74  whose prefix mat
22780 63 68 65 73 20 74 68 65 20 50 33 2f 50 34 20 72  ches the P3/P4 r
22790 65 63 6f 72 64 20 74 68 65 6e 20 63 6f 6e 74 72  ecord then contr
227a0 6f 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74 68 72 6f  ol.** falls thro
227b0 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
227c0 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 6e 64 20  instruction and 
227d0 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74  P1 is left point
227e0 69 6e 67 20 61 74 20 74 68 65 0a 2a 2a 20 6d 61  ing at the.** ma
227f0 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a  tching entry..**
22800 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69  .** This operati
22810 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  on leaves the cu
22820 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20  rsor in a state 
22830 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20  where it cannot 
22840 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69  be.** advanced i
22850 6e 20 65 69 74 68 65 72 20 64 69 72 65 63 74 69  n either directi
22860 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  on.  In other wo
22870 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e  rds, the Next an
22880 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63 6f 64 65  d Prev.** opcode
22890 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b 20 61 66  s do not work af
228a0 74 65 72 20 74 68 69 73 20 6f 70 65 72 61 74 69  ter this operati
228b0 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  on..**.** See al
228c0 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78  so: Found, NotEx
228d0 69 73 74 73 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74  ists, NoConflict
228e0 2c 20 49 66 4e 6f 48 6f 70 65 0a 2a 2f 0a 2f 2a  , IfNoHope.*/./*
228f0 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 48 6f 70   Opcode: IfNoHop
22900 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  e P1 P2 P3 P4 *.
22910 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
22920 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
22930 52 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74  Register P3 is t
22940 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72  he first of P4 r
22950 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f  egisters that fo
22960 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a  rm an unpacked.*
22970 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20  * record..**.** 
22980 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20  Cursor P1 is on 
22990 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20  an index btree. 
229a0 20 49 66 20 74 68 65 20 73 65 65 6b 48 69 74 20   If the seekHit 
229b0 66 6c 61 67 20 69 73 20 73 65 74 20 6f 6e 20 50  flag is set on P
229c0 31 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 69 73 20  1, then.** this 
229d0 6f 70 63 6f 64 65 20 69 73 20 61 20 6e 6f 2d 6f  opcode is a no-o
229e0 70 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 73  p.  But if the s
229f0 65 65 6b 48 69 74 20 66 6c 61 67 20 6f 66 20 50  eekHit flag of P
22a00 31 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e  1 is clear, then
22a10 0a 2a 2a 20 63 68 65 63 6b 20 74 6f 20 73 65 65  .** check to see
22a20 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 79   if there is any
22a30 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68 61   entry in P1 tha
22a40 74 20 6d 61 74 63 68 65 73 20 74 68 65 0a 2a 2a  t matches the.**
22a50 20 70 72 65 66 69 78 20 69 64 65 6e 74 69 66 69   prefix identifi
22a60 65 64 20 62 79 20 50 33 20 61 6e 64 20 50 34 2e  ed by P3 and P4.
22a70 20 20 49 66 20 6e 6f 20 65 6e 74 72 79 20 6d 61    If no entry ma
22a80 74 63 68 65 73 20 74 68 65 20 70 72 65 66 69 78  tches the prefix
22a90 2c 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 50 32 2e  ,.** jump to P2.
22aa0 20 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c    Otherwise fall
22ab0 20 74 68 72 6f 75 67 68 2e 0a 2a 2a 0a 2a 2a 20   through..**.** 
22ac0 54 68 69 73 20 6f 70 63 6f 64 65 20 62 65 68 61  This opcode beha
22ad0 76 65 73 20 6c 69 6b 65 20 4f 50 5f 4e 6f 74 46  ves like OP_NotF
22ae0 6f 75 6e 64 20 69 66 20 74 68 65 20 73 65 65 6b  ound if the seek
22af0 48 69 74 0a 2a 2a 20 66 6c 61 67 20 69 73 20 63  Hit.** flag is c
22b00 6c 65 61 72 20 61 6e 64 20 69 74 20 62 65 68 61  lear and it beha
22b10 76 65 73 20 6c 69 6b 65 20 4f 50 5f 4e 6f 6f 70  ves like OP_Noop
22b20 20 69 66 20 74 68 65 20 73 65 65 6b 48 69 74 20   if the seekHit 
22b30 66 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a 2a 0a  flag is set..**.
22b40 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
22b50 73 20 75 73 65 64 20 69 6e 20 49 4e 20 63 6c 61  s used in IN cla
22b60 75 73 65 20 70 72 6f 63 65 73 73 69 6e 67 20 66  use processing f
22b70 6f 72 20 61 20 6d 75 6c 74 69 2d 63 6f 6c 75 6d  or a multi-colum
22b80 6e 20 6b 65 79 2e 0a 2a 2a 20 49 66 20 61 6e 20  n key..** If an 
22b90 49 4e 20 63 6c 61 75 73 65 20 69 73 20 61 74 74  IN clause is att
22ba0 61 63 68 65 64 20 74 6f 20 61 6e 20 65 6c 65 6d  ached to an elem
22bb0 65 6e 74 20 6f 66 20 74 68 65 20 6b 65 79 20 6f  ent of the key o
22bc0 74 68 65 72 20 74 68 61 6e 20 74 68 65 0a 2a 2a  ther than the.**
22bd0 20 6c 65 66 74 2d 6d 6f 73 74 20 65 6c 65 6d 65   left-most eleme
22be0 6e 74 2c 20 61 6e 64 20 69 66 20 74 68 65 72 65  nt, and if there
22bf0 20 61 72 65 20 6e 6f 20 6d 61 74 63 68 65 73 20   are no matches 
22c00 6f 6e 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  on the most rece
22c10 6e 74 0a 2a 2a 20 73 65 65 6b 20 6f 76 65 72 20  nt.** seek over 
22c20 74 68 65 20 77 68 6f 6c 65 20 6b 65 79 2c 20 74  the whole key, t
22c30 68 65 6e 20 69 74 20 6d 69 67 68 74 20 62 65 20  hen it might be 
22c40 74 68 61 74 20 6f 6e 65 20 6f 66 20 74 68 65 20  that one of the 
22c50 6b 65 79 20 65 6c 65 6d 65 6e 74 0a 2a 2a 20 74  key element.** t
22c60 6f 20 74 68 65 20 6c 65 66 74 20 69 73 20 70 72  o the left is pr
22c70 6f 68 69 62 69 74 69 6e 67 20 61 20 6d 61 74 63  ohibiting a matc
22c80 68 2c 20 61 6e 64 20 68 65 6e 63 65 20 74 68 65  h, and hence the
22c90 72 65 20 69 73 20 22 6e 6f 20 68 6f 70 65 22 20  re is "no hope" 
22ca0 6f 66 0a 2a 2a 20 61 6e 79 20 6d 61 74 63 68 20  of.** any match 
22cb0 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 68 6f  regardless of ho
22cc0 77 20 6d 61 6e 79 20 49 4e 20 63 6c 61 75 73 65  w many IN clause
22cd0 20 65 6c 65 6d 65 6e 74 73 20 61 72 65 20 63 68   elements are ch
22ce0 65 63 6b 65 64 2e 0a 2a 2a 20 49 6e 20 73 75 63  ecked..** In suc
22cf0 68 20 61 20 63 61 73 65 2c 20 77 65 20 61 62 61  h a case, we aba
22d00 6e 64 6f 6e 20 74 68 65 20 49 4e 20 63 6c 61 75  ndon the IN clau
22d10 73 65 20 73 65 61 72 63 68 20 65 61 72 6c 79 2c  se search early,
22d20 20 75 73 69 6e 67 20 74 68 69 73 0a 2a 2a 20 6f   using this.** o
22d30 70 63 6f 64 65 2e 20 20 54 68 65 20 6f 70 63 6f  pcode.  The opco
22d40 64 65 20 6e 61 6d 65 20 63 6f 6d 65 73 20 66 72  de name comes fr
22d50 6f 6d 20 74 68 65 20 66 61 63 74 20 74 68 61 74  om the fact that
22d60 20 74 68 65 0a 2a 2a 20 6a 75 6d 70 20 69 73 20   the.** jump is 
22d70 74 61 6b 65 6e 20 69 66 20 74 68 65 72 65 20 69  taken if there i
22d80 73 20 22 6e 6f 20 68 6f 70 65 22 20 6f 66 20 61  s "no hope" of a
22d90 63 68 69 65 76 69 6e 67 20 61 20 6d 61 74 63 68  chieving a match
22da0 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
22db0 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b  : NotFound, Seek
22dc0 48 69 74 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  Hit.*/./* Opcode
22dd0 3a 20 4e 6f 43 6f 6e 66 6c 69 63 74 20 50 31 20  : NoConflict P1 
22de0 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
22df0 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
22e00 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  @P4].**.** If P4
22e10 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  ==0 then registe
22e20 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f  r P3 holds a blo
22e30 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  b constructed by
22e40 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66   MakeRecord.  If
22e50 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65  .** P4>0 then re
22e60 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65  gister P3 is the
22e70 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67   first of P4 reg
22e80 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d  isters that form
22e90 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20   an unpacked.** 
22ea0 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43  record..** .** C
22eb0 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61  ursor P1 is on a
22ec0 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20  n index btree.  
22ed0 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64  If the record id
22ee0 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61  entified by P3 a
22ef0 6e 64 20 50 34 0a 2a 2a 20 63 6f 6e 74 61 69 6e  nd P4.** contain
22f00 73 20 61 6e 79 20 4e 55 4c 4c 20 76 61 6c 75 65  s any NULL value
22f10 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  , jump immediate
22f20 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20 61 6c  ly to P2.  If al
22f30 6c 20 74 65 72 6d 73 20 6f 66 20 74 68 65 0a 2a  l terms of the.*
22f40 2a 20 72 65 63 6f 72 64 20 61 72 65 20 6e 6f 74  * record are not
22f50 2d 4e 55 4c 4c 20 74 68 65 6e 20 61 20 63 68 65  -NULL then a che
22f60 63 6b 20 69 73 20 64 6f 6e 65 20 74 6f 20 64 65  ck is done to de
22f70 74 65 72 6d 69 6e 65 20 69 66 20 61 6e 79 20 72  termine if any r
22f80 6f 77 20 69 6e 20 74 68 65 0a 2a 2a 20 50 31 20  ow in the.** P1 
22f90 69 6e 64 65 78 20 62 74 72 65 65 20 68 61 73 20  index btree has 
22fa0 61 20 6d 61 74 63 68 69 6e 67 20 6b 65 79 20 70  a matching key p
22fb0 72 65 66 69 78 2e 20 20 49 66 20 74 68 65 72 65  refix.  If there
22fc0 20 61 72 65 20 6e 6f 20 6d 61 74 63 68 65 73 2c   are no matches,
22fd0 20 6a 75 6d 70 0a 2a 2a 20 69 6d 6d 65 64 69 61   jump.** immedia
22fe0 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20  tely to P2.  If 
22ff0 74 68 65 72 65 20 69 73 20 61 20 6d 61 74 63 68  there is a match
23000 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 61  , fall through a
23010 6e 64 20 6c 65 61 76 65 20 74 68 65 20 50 31 0a  nd leave the P1.
23020 2a 2a 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69  ** cursor pointi
23030 6e 67 20 74 6f 20 74 68 65 20 6d 61 74 63 68 69  ng to the matchi
23040 6e 67 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 54 68  ng row..**.** Th
23050 69 73 20 6f 70 63 6f 64 65 20 69 73 20 73 69 6d  is opcode is sim
23060 69 6c 61 72 20 74 6f 20 4f 50 5f 4e 6f 74 46 6f  ilar to OP_NotFo
23070 75 6e 64 20 77 69 74 68 20 74 68 65 20 65 78 63  und with the exc
23080 65 70 74 69 6f 6e 73 20 74 68 61 74 20 74 68 65  eptions that the
23090 0a 2a 2a 20 62 72 61 6e 63 68 20 69 73 20 61 6c  .** branch is al
230a0 77 61 79 73 20 74 61 6b 65 6e 20 69 66 20 61 6e  ways taken if an
230b0 79 20 70 61 72 74 20 6f 66 20 74 68 65 20 73 65  y part of the se
230c0 61 72 63 68 20 6b 65 79 20 69 6e 70 75 74 20 69  arch key input i
230d0 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68  s NULL..**.** Th
230e0 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61  is operation lea
230f0 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 69  ves the cursor i
23100 6e 20 61 20 73 74 61 74 65 20 77 68 65 72 65 20  n a state where 
23110 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20  it cannot be.** 
23120 61 64 76 61 6e 63 65 64 20 69 6e 20 65 69 74 68  advanced in eith
23130 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49  er direction.  I
23140 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
23150 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76  he Next and Prev
23160 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f 20 6e  .** opcodes do n
23170 6f 74 20 77 6f 72 6b 20 61 66 74 65 72 20 74 68  ot work after th
23180 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a  is operation..**
23190 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f  .** See also: No
231a0 74 46 6f 75 6e 64 2c 20 46 6f 75 6e 64 2c 20 4e  tFound, Found, N
231b0 6f 74 45 78 69 73 74 73 0a 2a 2f 0a 63 61 73 65  otExists.*/.case
231c0 20 4f 50 5f 49 66 4e 6f 48 6f 70 65 3a 20 7b 20   OP_IfNoHope: { 
231d0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
231e0 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
231f0 20 2a 70 43 3b 0a 20 20 61 73 73 65 72 74 28 20   *pC;.  assert( 
23200 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
23210 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
23220 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
23230 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
23240 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
23250 0a 20 20 69 66 28 20 70 43 2d 3e 73 65 65 6b 48  .  if( pC->seekH
23260 69 74 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a  it ) break;.  /*
23270 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e   Fall through in
23280 74 6f 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 2a  to OP_NotFound *
23290 2f 0a 7d 0a 63 61 73 65 20 4f 50 5f 4e 6f 43 6f  /.}.case OP_NoCo
232a0 6e 66 6c 69 63 74 3a 20 20 20 20 20 2f 2a 20 6a  nflict:     /* j
232b0 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
232c0 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20 20   OP_NotFound:   
232d0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
232e0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6f 75 6e   */.case OP_Foun
232f0 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  d: {        /* j
23300 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e  ump, in3 */.  in
23310 74 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 3b  t alreadyExists;
23320 0a 20 20 69 6e 74 20 74 61 6b 65 4a 75 6d 70 3b  .  int takeJump;
23330 0a 20 20 69 6e 74 20 69 69 3b 0a 20 20 56 64 62  .  int ii;.  Vdb
23340 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
23350 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b  nt res;.  Unpack
23360 65 64 52 65 63 6f 72 64 20 2a 70 46 72 65 65 3b  edRecord *pFree;
23370 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
23380 64 20 2a 70 49 64 78 4b 65 79 3b 0a 20 20 55 6e  d *pIdxKey;.  Un
23390 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a  packedRecord r;.
233a0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
233b0 45 53 54 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f  EST.  if( pOp->o
233c0 70 63 6f 64 65 21 3d 4f 50 5f 4e 6f 43 6f 6e 66  pcode!=OP_NoConf
233d0 6c 69 63 74 20 29 20 73 71 6c 69 74 65 33 5f 66  lict ) sqlite3_f
233e0 6f 75 6e 64 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65  ound_count++;.#e
233f0 6e 64 69 66 0a 0a 20 20 61 73 73 65 72 74 28 20  ndif..  assert( 
23400 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
23410 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
23420 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
23430 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
23440 54 33 32 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  T32 );.  pC = p-
23450 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
23460 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
23470 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54   );.#ifdef SQLIT
23480 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65  E_DEBUG.  pC->se
23490 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f  ekOp = pOp->opco
234a0 64 65 3b 0a 23 65 6e 64 69 66 0a 20 20 70 49 6e  de;.#endif.  pIn
234b0 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
234c0 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  3];.  assert( pC
234d0 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
234e0 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61  YPE_BTREE );.  a
234f0 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43  ssert( pC->uc.pC
23500 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73  ursor!=0 );.  as
23510 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
23520 65 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f  e==0 );.  if( pO
23530 70 2d 3e 70 34 2e 69 3e 30 20 29 7b 0a 20 20 20  p->p4.i>0 ){.   
23540 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
23550 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20  ->pKeyInfo;.    
23560 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29  r.nField = (u16)
23570 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 72  pOp->p4.i;.    r
23580 2e 61 4d 65 6d 20 3d 20 70 49 6e 33 3b 0a 23 69  .aMem = pIn3;.#i
23590 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
235a0 47 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20  G.    for(ii=0; 
235b0 69 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 69 2b  ii<r.nField; ii+
235c0 2b 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  +){.      assert
235d0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e  ( memIsValid(&r.
235e0 61 4d 65 6d 5b 69 69 5d 29 20 29 3b 0a 20 20 20  aMem[ii]) );.   
235f0 20 20 20 61 73 73 65 72 74 28 20 28 72 2e 61 4d     assert( (r.aM
23600 65 6d 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d  em[ii].flags & M
23610 45 4d 5f 5a 65 72 6f 29 3d 3d 30 20 7c 7c 20 72  EM_Zero)==0 || r
23620 2e 61 4d 65 6d 5b 69 69 5d 2e 6e 3d 3d 30 20 29  .aMem[ii].n==0 )
23630 3b 0a 20 20 20 20 20 20 69 66 28 20 69 69 20 29  ;.      if( ii )
23640 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
23650 70 4f 70 2d 3e 70 33 2b 69 69 2c 20 26 72 2e 61  pOp->p3+ii, &r.a
23660 4d 65 6d 5b 69 69 5d 29 3b 0a 20 20 20 20 7d 0a  Mem[ii]);.    }.
23670 23 65 6e 64 69 66 0a 20 20 20 20 70 49 64 78 4b  #endif.    pIdxK
23680 65 79 20 3d 20 26 72 3b 0a 20 20 20 20 70 46 72  ey = &r;.    pFr
23690 65 65 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b  ee = 0;.  }else{
236a0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e  .    assert( pIn
236b0 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42  3->flags & MEM_B
236c0 6c 6f 62 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  lob );.    rc = 
236d0 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29  ExpandBlob(pIn3)
236e0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  ;.    assert( rc
236f0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72  ==SQLITE_OK || r
23700 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20  c==SQLITE_NOMEM 
23710 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20  );.    if( rc ) 
23720 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
23730 20 70 46 72 65 65 20 3d 20 70 49 64 78 4b 65 79   pFree = pIdxKey
23740 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 6c   = sqlite3VdbeAl
23750 6c 6f 63 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  locUnpackedRecor
23760 64 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 29 3b  d(pC->pKeyInfo);
23770 0a 20 20 20 20 69 66 28 20 70 49 64 78 4b 65 79  .    if( pIdxKey
23780 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
23790 6d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  m;.    sqlite3Vd
237a0 62 65 52 65 63 6f 72 64 55 6e 70 61 63 6b 28 70  beRecordUnpack(p
237b0 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 70 49 6e  C->pKeyInfo, pIn
237c0 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c 20 70  3->n, pIn3->z, p
237d0 49 64 78 4b 65 79 29 3b 0a 20 20 7d 0a 20 20 70  IdxKey);.  }.  p
237e0 49 64 78 4b 65 79 2d 3e 64 65 66 61 75 6c 74 5f  IdxKey->default_
237f0 72 63 20 3d 20 30 3b 0a 20 20 74 61 6b 65 4a 75  rc = 0;.  takeJu
23800 6d 70 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f  mp = 0;.  if( pO
23810 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f  p->opcode==OP_No
23820 43 6f 6e 66 6c 69 63 74 20 29 7b 0a 20 20 20 20  Conflict ){.    
23830 2f 2a 20 46 6f 72 20 74 68 65 20 4f 50 5f 4e 6f  /* For the OP_No
23840 43 6f 6e 66 6c 69 63 74 20 6f 70 63 6f 64 65 2c  Conflict opcode,
23850 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69   take the jump i
23860 66 20 61 6e 79 20 6f 66 20 74 68 65 0a 20 20 20  f any of the.   
23870 20 2a 2a 20 69 6e 70 75 74 20 66 69 65 6c 64 73   ** input fields
23880 20 61 72 65 20 4e 55 4c 4c 2c 20 73 69 6e 63 65   are NULL, since
23890 20 61 6e 79 20 6b 65 79 20 77 69 74 68 20 61 20   any key with a 
238a0 4e 55 4c 4c 20 77 69 6c 6c 20 6e 6f 74 0a 20 20  NULL will not.  
238b0 20 20 2a 2a 20 63 6f 6e 66 6c 69 63 74 20 2a 2f    ** conflict */
238c0 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69  .    for(ii=0; i
238d0 69 3c 70 49 64 78 4b 65 79 2d 3e 6e 46 69 65 6c  i<pIdxKey->nFiel
238e0 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20  d; ii++){.      
238f0 69 66 28 20 70 49 64 78 4b 65 79 2d 3e 61 4d 65  if( pIdxKey->aMe
23900 6d 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45  m[ii].flags & ME
23910 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 20 20  M_Null ){.      
23920 20 20 74 61 6b 65 4a 75 6d 70 20 3d 20 31 3b 0a    takeJump = 1;.
23930 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
23940 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
23950 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
23960 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
23970 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  ed(pC->uc.pCurso
23980 72 2c 20 70 49 64 78 4b 65 79 2c 20 30 2c 20 30  r, pIdxKey, 0, 0
23990 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20 70  , &res);.  if( p
239a0 46 72 65 65 20 29 20 73 71 6c 69 74 65 33 44 62  Free ) sqlite3Db
239b0 46 72 65 65 4e 4e 28 64 62 2c 20 70 46 72 65 65  FreeNN(db, pFree
239c0 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  );.  if( rc!=SQL
239d0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 67 6f  ITE_OK ){.    go
239e0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
239f0 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 43 2d  error;.  }.  pC-
23a00 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 72 65  >seekResult = re
23a10 73 3b 0a 20 20 61 6c 72 65 61 64 79 45 78 69 73  s;.  alreadyExis
23a20 74 73 20 3d 20 28 72 65 73 3d 3d 30 29 3b 0a 20  ts = (res==0);. 
23a30 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31   pC->nullRow = 1
23a40 2d 61 6c 72 65 61 64 79 45 78 69 73 74 73 3b 0a  -alreadyExists;.
23a50 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
23a60 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  veto = 0;.  pC->
23a70 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
23a80 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28  CHE_STALE;.  if(
23a90 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
23aa0 5f 46 6f 75 6e 64 20 29 7b 0a 20 20 20 20 56 64  _Found ){.    Vd
23ab0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 61 6c  beBranchTaken(al
23ac0 72 65 61 64 79 45 78 69 73 74 73 21 3d 30 2c 32  readyExists!=0,2
23ad0 29 3b 0a 20 20 20 20 69 66 28 20 61 6c 72 65 61  );.    if( alrea
23ae0 64 79 45 78 69 73 74 73 20 29 20 67 6f 74 6f 20  dyExists ) goto 
23af0 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65  jump_to_p2;.  }e
23b00 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61  lse{.    VdbeBra
23b10 6e 63 68 54 61 6b 65 6e 28 74 61 6b 65 4a 75 6d  nchTaken(takeJum
23b20 70 7c 7c 61 6c 72 65 61 64 79 45 78 69 73 74 73  p||alreadyExists
23b30 3d 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20  ==0,2);.    if( 
23b40 74 61 6b 65 4a 75 6d 70 20 7c 7c 20 21 61 6c 72  takeJump || !alr
23b50 65 61 64 79 45 78 69 73 74 73 20 29 20 67 6f 74  eadyExists ) got
23b60 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
23b70 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
23b80 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 52 6f 77   Opcode: SeekRow
23b90 69 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  id P1 P2 P3 * *.
23ba0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74  ** Synopsis: int
23bb0 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20  key=r[P3].**.** 
23bc0 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  P1 is the index 
23bd0 6f 66 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e  of a cursor open
23be0 20 6f 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   on an SQL table
23bf0 20 62 74 72 65 65 20 28 77 69 74 68 20 69 6e 74   btree (with int
23c00 65 67 65 72 0a 2a 2a 20 6b 65 79 73 29 2e 20 20  eger.** keys).  
23c10 49 66 20 72 65 67 69 73 74 65 72 20 50 33 20 64  If register P3 d
23c20 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20  oes not contain 
23c30 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 69 66  an integer or if
23c40 20 50 31 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20   P1 does not.** 
23c50 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f 72 64  contain a record
23c60 20 77 69 74 68 20 72 6f 77 69 64 20 50 33 20 74   with rowid P3 t
23c70 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  hen jump immedia
23c80 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 0a 2a 2a  tely to P2.  .**
23c90 20 4f 72 2c 20 69 66 20 50 32 20 69 73 20 30 2c   Or, if P2 is 0,
23ca0 20 72 61 69 73 65 20 61 6e 20 53 51 4c 49 54 45   raise an SQLITE
23cb0 5f 43 4f 52 52 55 50 54 20 65 72 72 6f 72 2e 20  _CORRUPT error. 
23cc0 49 66 20 50 31 20 64 6f 65 73 20 63 6f 6e 74 61  If P1 does conta
23cd0 69 6e 0a 2a 2a 20 61 20 72 65 63 6f 72 64 20 77  in.** a record w
23ce0 69 74 68 20 72 6f 77 69 64 20 50 33 20 74 68 65  ith rowid P3 the
23cf0 6e 20 0a 2a 2a 20 6c 65 61 76 65 20 74 68 65 20  n .** leave the 
23d00 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20  cursor pointing 
23d10 61 74 20 74 68 61 74 20 72 65 63 6f 72 64 20 61  at that record a
23d20 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  nd fall through 
23d30 74 6f 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69  to the next.** i
23d40 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
23d50 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 45 78 69 73  * The OP_NotExis
23d60 74 73 20 6f 70 63 6f 64 65 20 70 65 72 66 6f 72  ts opcode perfor
23d70 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72  ms the same oper
23d80 61 74 69 6f 6e 2c 20 62 75 74 20 77 69 74 68 20  ation, but with 
23d90 4f 50 5f 4e 6f 74 45 78 69 73 74 73 0a 2a 2a 20  OP_NotExists.** 
23da0 74 68 65 20 50 33 20 72 65 67 69 73 74 65 72 20  the P3 register 
23db0 6d 75 73 74 20 62 65 20 67 75 61 72 61 6e 74 65  must be guarante
23dc0 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 61 6e  ed to contain an
23dd0 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20   integer value. 
23de0 20 57 69 74 68 20 74 68 69 73 0a 2a 2a 20 6f 70   With this.** op
23df0 63 6f 64 65 2c 20 72 65 67 69 73 74 65 72 20 50  code, register P
23e00 33 20 6d 69 67 68 74 20 6e 6f 74 20 63 6f 6e 74  3 might not cont
23e10 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a  ain an integer..
23e20 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f 74  **.** The OP_Not
23e30 46 6f 75 6e 64 20 6f 70 63 6f 64 65 20 70 65 72  Found opcode per
23e40 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f  forms the same o
23e50 70 65 72 61 74 69 6f 6e 20 6f 6e 20 69 6e 64 65  peration on inde
23e60 78 20 62 74 72 65 65 73 0a 2a 2a 20 28 77 69 74  x btrees.** (wit
23e70 68 20 61 72 62 69 74 72 61 72 79 20 6d 75 6c 74  h arbitrary mult
23e80 69 2d 76 61 6c 75 65 20 6b 65 79 73 29 2e 0a 2a  i-value keys)..*
23e90 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
23ea0 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
23eb0 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68  or in a state wh
23ec0 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65  ere it cannot be
23ed0 20 61 64 76 61 6e 63 65 64 0a 2a 2a 20 69 6e 20   advanced.** in 
23ee0 65 69 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e  either direction
23ef0 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
23f00 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20  s, the Next and 
23f10 50 72 65 76 20 6f 70 63 6f 64 65 73 20 77 69 6c  Prev opcodes wil
23f20 6c 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20 66 6f  l.** not work fo
23f30 6c 6c 6f 77 69 6e 67 20 74 68 69 73 20 6f 70 63  llowing this opc
23f40 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ode..**.** See a
23f50 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
23f60 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74  ound, NoConflict
23f70 2c 20 53 65 65 6b 52 6f 77 69 64 0a 2a 2f 0a 2f  , SeekRowid.*/./
23f80 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 45 78 69  * Opcode: NotExi
23f90 73 74 73 20 50 31 20 50 32 20 50 33 20 2a 20 2a  sts P1 P2 P3 * *
23fa0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e  .** Synopsis: in
23fb0 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a  tkey=r[P3].**.**
23fc0 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78   P1 is the index
23fd0 20 6f 66 20 61 20 63 75 72 73 6f 72 20 6f 70 65   of a cursor ope
23fe0 6e 20 6f 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c  n on an SQL tabl
23ff0 65 20 62 74 72 65 65 20 28 77 69 74 68 20 69 6e  e btree (with in
24000 74 65 67 65 72 0a 2a 2a 20 6b 65 79 73 29 2e 20  teger.** keys). 
24010 20 50 33 20 69 73 20 61 6e 20 69 6e 74 65 67 65   P3 is an intege
24020 72 20 72 6f 77 69 64 2e 20 20 49 66 20 50 31 20  r rowid.  If P1 
24030 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e  does not contain
24040 20 61 20 72 65 63 6f 72 64 20 77 69 74 68 0a 2a   a record with.*
24050 2a 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20  * rowid P3 then 
24060 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
24070 20 74 6f 20 50 32 2e 20 20 4f 72 2c 20 69 66 20   to P2.  Or, if 
24080 50 32 20 69 73 20 30 2c 20 72 61 69 73 65 20 61  P2 is 0, raise a
24090 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 43 4f 52 52  n.** SQLITE_CORR
240a0 55 50 54 20 65 72 72 6f 72 2e 20 49 66 20 50 31  UPT error. If P1
240b0 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 20   does contain a 
240c0 72 65 63 6f 72 64 20 77 69 74 68 20 72 6f 77 69  record with rowi
240d0 64 20 50 33 20 74 68 65 6e 20 0a 2a 2a 20 6c 65  d P3 then .** le
240e0 61 76 65 20 74 68 65 20 63 75 72 73 6f 72 20 70  ave the cursor p
240f0 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 61 74 20  ointing at that 
24100 72 65 63 6f 72 64 20 61 6e 64 20 66 61 6c 6c 20  record and fall 
24110 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
24120 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69  ext.** instructi
24130 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50  on..**.** The OP
24140 5f 53 65 65 6b 52 6f 77 69 64 20 6f 70 63 6f 64  _SeekRowid opcod
24150 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73  e performs the s
24160 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75  ame operation bu
24170 74 20 61 6c 73 6f 20 61 6c 6c 6f 77 73 20 74 68  t also allows th
24180 65 0a 2a 2a 20 50 33 20 72 65 67 69 73 74 65 72  e.** P3 register
24190 20 74 6f 20 63 6f 6e 74 61 69 6e 20 61 20 6e 6f   to contain a no
241a0 6e 2d 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2c  n-integer value,
241b0 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20 74   in which case t
241c0 68 65 20 6a 75 6d 70 20 69 73 0a 2a 2a 20 61 6c  he jump is.** al
241d0 77 61 79 73 20 74 61 6b 65 6e 2e 20 20 54 68 69  ways taken.  Thi
241e0 73 20 6f 70 63 6f 64 65 20 72 65 71 75 69 72 65  s opcode require
241f0 73 20 74 68 61 74 20 50 33 20 61 6c 77 61 79 73  s that P3 always
24200 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65   contain an inte
24210 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f  ger..**.** The O
24220 50 5f 4e 6f 74 46 6f 75 6e 64 20 6f 70 63 6f 64  P_NotFound opcod
24230 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73  e performs the s
24240 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e  ame operation on
24250 20 69 6e 64 65 78 20 62 74 72 65 65 73 0a 2a 2a   index btrees.**
24260 20 28 77 69 74 68 20 61 72 62 69 74 72 61 72 79   (with arbitrary
24270 20 6d 75 6c 74 69 2d 76 61 6c 75 65 20 6b 65 79   multi-value key
24280 73 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  s)..**.** This o
24290 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65  pcode leaves the
242a0 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61   cursor in a sta
242b0 74 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e  te where it cann
242c0 6f 74 20 62 65 20 61 64 76 61 6e 63 65 64 0a 2a  ot be advanced.*
242d0 2a 20 69 6e 20 65 69 74 68 65 72 20 64 69 72 65  * in either dire
242e0 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72  ction.  In other
242f0 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74   words, the Next
24300 20 61 6e 64 20 50 72 65 76 20 6f 70 63 6f 64 65   and Prev opcode
24310 73 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 77 6f  s will.** not wo
24320 72 6b 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 69  rk following thi
24330 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  s opcode..**.** 
24340 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
24350 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e   NotFound, NoCon
24360 66 6c 69 63 74 2c 20 53 65 65 6b 52 6f 77 69 64  flict, SeekRowid
24370 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b  .*/.case OP_Seek
24380 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20  Rowid: {        
24390 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
243a0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
243b0 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
243c0 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
243d0 20 20 75 36 34 20 69 4b 65 79 3b 0a 0a 20 20 70    u64 iKey;..  p
243e0 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
243f0 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p3];.  if( (pIn
24400 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  3->flags & MEM_I
24410 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a  nt)==0 ){.    /*
24420 20 4d 61 6b 65 20 73 75 72 65 20 70 49 6e 33 2d   Make sure pIn3-
24430 3e 75 2e 69 20 63 6f 6e 74 61 69 6e 73 20 61 20  >u.i contains a 
24440 76 61 6c 69 64 20 69 6e 74 65 67 65 72 20 72 65  valid integer re
24450 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 0a  presentation of.
24460 20 20 20 20 2a 2a 20 74 68 65 20 6b 65 79 20 76      ** the key v
24470 61 6c 75 65 2c 20 62 75 74 20 64 6f 20 6e 6f 74  alue, but do not
24480 20 63 68 61 6e 67 65 20 74 68 65 20 64 61 74 61   change the data
24490 74 79 70 65 20 6f 66 20 74 68 65 20 72 65 67 69  type of the regi
244a0 73 74 65 72 2c 20 61 73 0a 20 20 20 20 2a 2a 20  ster, as.    ** 
244b0 6f 74 68 65 72 20 70 61 72 74 73 20 6f 66 20 74  other parts of t
244c0 68 65 20 70 65 72 70 61 72 65 64 20 73 74 61 74  he perpared stat
244d0 65 6d 65 6e 74 20 6d 69 67 68 74 20 62 65 20 64  ement might be d
244e0 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 0a  epending on the.
244f0 20 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 20 64      ** current d
24500 61 74 61 74 79 70 65 2e 20 2a 2f 0a 20 20 20 20  atatype. */.    
24510 75 31 36 20 6f 72 69 67 46 6c 61 67 73 20 3d 20  u16 origFlags = 
24520 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 20  pIn3->flags;.   
24530 20 69 6e 74 20 69 73 4e 6f 74 49 6e 74 3b 0a 20   int isNotInt;. 
24540 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
24550 28 70 49 6e 33 2c 20 53 51 4c 49 54 45 5f 41 46  (pIn3, SQLITE_AF
24560 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e 63 6f 64  F_NUMERIC, encod
24570 69 6e 67 29 3b 0a 20 20 20 20 69 73 4e 6f 74 49  ing);.    isNotI
24580 6e 74 20 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67  nt = (pIn3->flag
24590 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 3b  s & MEM_Int)==0;
245a0 0a 20 20 20 20 70 49 6e 33 2d 3e 66 6c 61 67 73  .    pIn3->flags
245b0 20 3d 20 6f 72 69 67 46 6c 61 67 73 3b 0a 20 20   = origFlags;.  
245c0 20 20 69 66 28 20 69 73 4e 6f 74 49 6e 74 20 29    if( isNotInt )
245d0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
245e0 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c 20  ;.  }.  /* Fall 
245f0 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f  through into OP_
24600 4e 6f 74 45 78 69 73 74 73 20 2a 2f 0a 63 61 73  NotExists */.cas
24610 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 3a 20  e OP_NotExists: 
24620 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
24630 2c 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33 20  , in3 */.  pIn3 
24640 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
24650 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e  ;.  assert( (pIn
24660 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  3->flags & MEM_I
24670 6e 74 29 21 3d 30 20 7c 7c 20 70 4f 70 2d 3e 6f  nt)!=0 || pOp->o
24680 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 52 6f  pcode==OP_SeekRo
24690 77 69 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28  wid );.  assert(
246a0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
246b0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
246c0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
246d0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
246e0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
246f0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
24700 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b  DEBUG.  pC->seek
24710 4f 70 20 3d 20 4f 50 5f 53 65 65 6b 52 6f 77 69  Op = OP_SeekRowi
24720 64 3b 0a 23 65 6e 64 69 66 0a 20 20 61 73 73 65  d;.#endif.  asse
24730 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
24740 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
24750 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
24760 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43  PE_BTREE );.  pC
24770 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75  rsr = pC->uc.pCu
24780 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20  rsor;.  assert( 
24790 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 72 65  pCrsr!=0 );.  re
247a0 73 20 3d 20 30 3b 0a 20 20 69 4b 65 79 20 3d 20  s = 0;.  iKey = 
247b0 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 72 63 20  pIn3->u.i;.  rc 
247c0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
247d0 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72  vetoUnpacked(pCr
247e0 73 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c 20  sr, 0, iKey, 0, 
247f0 26 72 65 73 29 3b 0a 20 20 61 73 73 65 72 74 28  &res);.  assert(
24800 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc==SQLITE_OK |
24810 7c 20 72 65 73 3d 3d 30 20 29 3b 0a 20 20 70 43  | res==0 );.  pC
24820 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d  ->movetoTarget =
24830 20 69 4b 65 79 3b 20 20 2f 2a 20 55 73 65 64 20   iKey;  /* Used 
24840 62 79 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a  by OP_Delete */.
24850 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
24860 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  0;.  pC->cacheSt
24870 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
24880 4c 45 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72  LE;.  pC->deferr
24890 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
248a0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
248b0 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 70 43 2d  res!=0,2);.  pC-
248c0 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 72 65  >seekResult = re
248d0 73 3b 0a 20 20 69 66 28 20 72 65 73 21 3d 30 20  s;.  if( res!=0 
248e0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  ){.    assert( r
248f0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a  c==SQLITE_OK );.
24900 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d      if( pOp->p2=
24910 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  =0 ){.      rc =
24920 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
24930 42 4b 50 54 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  BKPT;.    }else{
24940 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  .      goto jump
24950 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20  _to_p2;.    }.  
24960 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  }.  if( rc ) got
24970 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
24980 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
24990 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71  ../* Opcode: Seq
249a0 75 65 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20  uence P1 P2 * * 
249b0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
249c0 5b 50 32 5d 3d 63 75 72 73 6f 72 5b 50 31 5d 2e  [P2]=cursor[P1].
249d0 63 74 72 2b 2b 0a 2a 2a 0a 2a 2a 20 46 69 6e 64  ctr++.**.** Find
249e0 20 74 68 65 20 6e 65 78 74 20 61 76 61 69 6c 61   the next availa
249f0 62 6c 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d  ble sequence num
24a00 62 65 72 20 66 6f 72 20 63 75 72 73 6f 72 20 50  ber for cursor P
24a10 31 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20  1..** Write the 
24a20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20  sequence number 
24a30 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
24a40 2e 0a 2a 2a 20 54 68 65 20 73 65 71 75 65 6e 63  ..** The sequenc
24a50 65 20 6e 75 6d 62 65 72 20 6f 6e 20 74 68 65 20  e number on the 
24a60 63 75 72 73 6f 72 20 69 73 20 69 6e 63 72 65 6d  cursor is increm
24a70 65 6e 74 65 64 20 61 66 74 65 72 20 74 68 69 73  ented after this
24a80 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  .** instruction.
24a90 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65    .*/.case OP_Se
24aa0 71 75 65 6e 63 65 3a 20 7b 20 20 20 20 20 20 20  quence: {       
24ab0 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
24ac0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
24ad0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
24ae0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
24af0 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b  ssert( p->apCsr[
24b00 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a 20  pOp->p1]!=0 );. 
24b10 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73   assert( p->apCs
24b20 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 65 43 75 72  r[pOp->p1]->eCur
24b30 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f 56 54  Type!=CURTYPE_VT
24b40 41 42 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f  AB );.  pOut = o
24b50 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
24b60 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75   pOp);.  pOut->u
24b70 2e 69 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  .i = p->apCsr[pO
24b80 70 2d 3e 70 31 5d 2d 3e 73 65 71 43 6f 75 6e 74  p->p1]->seqCount
24b90 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  ++;.  break;.}..
24ba0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 77 52  ./* Opcode: NewR
24bb0 6f 77 69 64 20 50 31 20 50 32 20 50 33 20 2a 20  owid P1 P2 P3 * 
24bc0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
24bd0 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a  [P2]=rowid.**.**
24be0 20 47 65 74 20 61 20 6e 65 77 20 69 6e 74 65 67   Get a new integ
24bf0 65 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  er record number
24c00 20 28 61 2e 6b 2e 61 20 22 72 6f 77 69 64 22 29   (a.k.a "rowid")
24c10 20 75 73 65 64 20 61 73 20 74 68 65 20 6b 65 79   used as the key
24c20 20 74 6f 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20   to a table..** 
24c30 54 68 65 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  The record numbe
24c40 72 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75  r is not previou
24c50 73 6c 79 20 75 73 65 64 20 61 73 20 61 20 6b 65  sly used as a ke
24c60 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  y in the databas
24c70 65 0a 2a 2a 20 74 61 62 6c 65 20 74 68 61 74 20  e.** table that 
24c80 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73  cursor P1 points
24c90 20 74 6f 2e 20 20 54 68 65 20 6e 65 77 20 72 65   to.  The new re
24ca0 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20 77  cord number is w
24cb0 72 69 74 74 65 6e 0a 2a 2a 20 77 72 69 74 74 65  ritten.** writte
24cc0 6e 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  n to register P2
24cd0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e 30 20  ..**.** If P3>0 
24ce0 74 68 65 6e 20 50 33 20 69 73 20 61 20 72 65 67  then P3 is a reg
24cf0 69 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f  ister in the roo
24d00 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20  t frame of this 
24d10 56 44 42 45 20 74 68 61 74 20 68 6f 6c 64 73 20  VDBE that holds 
24d20 0a 2a 2a 20 74 68 65 20 6c 61 72 67 65 73 74 20  .** the largest 
24d30 70 72 65 76 69 6f 75 73 6c 79 20 67 65 6e 65 72  previously gener
24d40 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62  ated record numb
24d50 65 72 2e 20 4e 6f 20 6e 65 77 20 72 65 63 6f 72  er. No new recor
24d60 64 20 6e 75 6d 62 65 72 73 20 61 72 65 0a 2a 2a  d numbers are.**
24d70 20 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20 6c   allowed to be l
24d80 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 76 61  ess than this va
24d90 6c 75 65 2e 20 57 68 65 6e 20 74 68 69 73 20 76  lue. When this v
24da0 61 6c 75 65 20 72 65 61 63 68 65 73 20 69 74 73  alue reaches its
24db0 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a 2a 20 61 6e   maximum, .** an
24dc0 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20 65 72 72   SQLITE_FULL err
24dd0 6f 72 20 69 73 20 67 65 6e 65 72 61 74 65 64 2e  or is generated.
24de0 20 54 68 65 20 50 33 20 72 65 67 69 73 74 65 72   The P3 register
24df0 20 69 73 20 75 70 64 61 74 65 64 20 77 69 74 68   is updated with
24e00 20 74 68 65 20 27 0a 2a 2a 20 67 65 6e 65 72 61   the '.** genera
24e10 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  ted record numbe
24e20 72 2e 20 54 68 69 73 20 50 33 20 6d 65 63 68 61  r. This P3 mecha
24e30 6e 69 73 6d 20 69 73 20 75 73 65 64 20 74 6f 20  nism is used to 
24e40 68 65 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 20 74  help implement t
24e50 68 65 0a 2a 2a 20 41 55 54 4f 49 4e 43 52 45 4d  he.** AUTOINCREM
24e60 45 4e 54 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a  ENT feature..*/.
24e70 63 61 73 65 20 4f 50 5f 4e 65 77 52 6f 77 69 64  case OP_NewRowid
24e80 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
24e90 20 6f 75 74 32 20 2a 2f 0a 20 20 69 36 34 20 76   out2 */.  i64 v
24ea0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24eb0 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 6f 77    /* The new row
24ec0 69 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  id */.  VdbeCurs
24ed0 6f 72 20 2a 70 43 3b 20 20 20 20 20 20 20 20 2f  or *pC;        /
24ee0 2a 20 43 75 72 73 6f 72 20 6f 66 20 74 61 62 6c  * Cursor of tabl
24ef0 65 20 74 6f 20 67 65 74 20 74 68 65 20 6e 65 77  e to get the new
24f00 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 6e 74 20   rowid */.  int 
24f10 72 65 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  res;            
24f20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20     /* Result of 
24f30 61 6e 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c  an sqlite3BtreeL
24f40 61 73 74 28 29 20 2a 2f 0a 20 20 69 6e 74 20 63  ast() */.  int c
24f50 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
24f60 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 74 6f 20    /* Counter to 
24f70 6c 69 6d 69 74 20 74 68 65 20 6e 75 6d 62 65 72  limit the number
24f80 20 6f 66 20 73 65 61 72 63 68 65 73 20 2a 2f 0a   of searches */.
24f90 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20    Mem *pMem;    
24fa0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
24fb0 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 6c 61 72  ster holding lar
24fc0 67 65 73 74 20 72 6f 77 69 64 20 66 6f 72 20 41  gest rowid for A
24fd0 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a  UTOINCREMENT */.
24fe0 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
24ff0 61 6d 65 3b 20 20 20 20 20 2f 2a 20 52 6f 6f 74  ame;     /* Root
25000 20 66 72 61 6d 65 20 6f 66 20 56 44 42 45 20 2a   frame of VDBE *
25010 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a 20 20 72 65  /..  v = 0;.  re
25020 73 20 3d 20 30 3b 0a 20 20 70 4f 75 74 20 3d 20  s = 0;.  pOut = 
25030 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
25040 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74  , pOp);.  assert
25050 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
25060 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
25070 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
25080 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
25090 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
250a0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
250b0 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61 73  >isTable );.  as
250c0 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
250d0 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
250e0 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  E );.  assert( p
250f0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30  C->uc.pCursor!=0
25100 20 29 3b 0a 20 20 7b 0a 20 20 20 20 2f 2a 20 54   );.  {.    /* T
25110 68 65 20 6e 65 78 74 20 72 6f 77 69 64 20 6f 72  he next rowid or
25120 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28   record number (
25130 64 69 66 66 65 72 65 6e 74 20 74 65 72 6d 73 20  different terms 
25140 66 6f 72 20 74 68 65 20 73 61 6d 65 0a 20 20 20  for the same.   
25150 20 2a 2a 20 74 68 69 6e 67 29 20 69 73 20 6f 62   ** thing) is ob
25160 74 61 69 6e 65 64 20 69 6e 20 61 20 74 77 6f 2d  tained in a two-
25170 73 74 65 70 20 61 6c 67 6f 72 69 74 68 6d 2e 0a  step algorithm..
25180 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 46 69      **.    ** Fi
25190 72 73 74 20 77 65 20 61 74 74 65 6d 70 74 20 74  rst we attempt t
251a0 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 72 67 65  o find the large
251b0 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69  st existing rowi
251c0 64 20 61 6e 64 20 61 64 64 20 6f 6e 65 0a 20 20  d and add one.  
251d0 20 20 2a 2a 20 74 6f 20 74 68 61 74 2e 20 20 42    ** to that.  B
251e0 75 74 20 69 66 20 74 68 65 20 6c 61 72 67 65 73  ut if the larges
251f0 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64  t existing rowid
25200 20 69 73 20 61 6c 72 65 61 64 79 20 74 68 65 20   is already the 
25210 6d 61 78 69 6d 75 6d 0a 20 20 20 20 2a 2a 20 70  maximum.    ** p
25220 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65 72 2c  ositive integer,
25230 20 77 65 20 68 61 76 65 20 74 6f 20 66 61 6c 6c   we have to fall
25240 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
25250 73 65 63 6f 6e 64 0a 20 20 20 20 2a 2a 20 70 72  second.    ** pr
25260 6f 62 61 62 69 6c 69 73 74 69 63 20 61 6c 67 6f  obabilistic algo
25270 72 69 74 68 6d 0a 20 20 20 20 2a 2a 0a 20 20 20  rithm.    **.   
25280 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 61   ** The second a
25290 6c 67 6f 72 69 74 68 6d 20 69 73 20 74 6f 20 73  lgorithm is to s
252a0 65 6c 65 63 74 20 61 20 72 6f 77 69 64 20 61 74  elect a rowid at
252b0 20 72 61 6e 64 6f 6d 20 61 6e 64 20 73 65 65 20   random and see 
252c0 69 66 0a 20 20 20 20 2a 2a 20 69 74 20 61 6c 72  if.    ** it alr
252d0 65 61 64 79 20 65 78 69 73 74 73 20 69 6e 20 74  eady exists in t
252e0 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20 69 74  he table.  If it
252f0 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c   does not exist,
25300 20 77 65 20 68 61 76 65 0a 20 20 20 20 2a 2a 20   we have.    ** 
25310 73 75 63 63 65 65 64 65 64 2e 20 20 49 66 20 74  succeeded.  If t
25320 68 65 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20  he random rowid 
25330 64 6f 65 73 20 65 78 69 73 74 2c 20 77 65 20 73  does exist, we s
25340 65 6c 65 63 74 20 61 20 6e 65 77 20 6f 6e 65 0a  elect a new one.
25350 20 20 20 20 2a 2a 20 61 6e 64 20 74 72 79 20 61      ** and try a
25360 67 61 69 6e 2c 20 75 70 20 74 6f 20 31 30 30 20  gain, up to 100 
25370 74 69 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a 20 20  times..    */.  
25380 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
25390 54 61 62 6c 65 20 29 3b 0a 0a 23 69 66 64 65 66  Table );..#ifdef
253a0 20 53 51 4c 49 54 45 5f 33 32 42 49 54 5f 52 4f   SQLITE_32BIT_RO
253b0 57 49 44 0a 23 20 20 20 64 65 66 69 6e 65 20 4d  WID.#   define M
253c0 41 58 5f 52 4f 57 49 44 20 30 78 37 66 66 66 66  AX_ROWID 0x7ffff
253d0 66 66 66 0a 23 65 6c 73 65 0a 20 20 20 20 2f 2a  fff.#else.    /*
253e0 20 53 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 20   Some compilers 
253f0 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 63  complain about c
25400 6f 6e 73 74 61 6e 74 73 20 6f 66 20 74 68 65 20  onstants of the 
25410 66 6f 72 6d 20 30 78 37 66 66 66 66 66 66 66 66  form 0x7ffffffff
25420 66 66 66 66 66 66 66 2e 0a 20 20 20 20 2a 2a 20  fffffff..    ** 
25430 4f 74 68 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20  Others complain 
25440 61 62 6f 75 74 20 30 78 37 66 66 66 66 66 66 66  about 0x7fffffff
25450 66 66 66 66 66 66 66 66 66 4c 4c 2e 20 20 54 68  fffffffffLL.  Th
25460 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
25470 6f 20 73 65 65 6d 73 0a 20 20 20 20 2a 2a 20 74  o seems.    ** t
25480 6f 20 70 72 6f 76 69 64 65 20 74 68 65 20 63 6f  o provide the co
25490 6e 73 74 61 6e 74 20 77 68 69 6c 65 20 6d 61 6b  nstant while mak
254a0 69 6e 67 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72  ing all compiler
254b0 73 20 68 61 70 70 79 2e 0a 20 20 20 20 2a 2f 0a  s happy..    */.
254c0 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52  #   define MAX_R
254d0 4f 57 49 44 20 20 28 69 36 34 29 28 20 28 28 28  OWID  (i64)( (((
254e0 75 36 34 29 30 78 37 66 66 66 66 66 66 66 29 3c  u64)0x7fffffff)<
254f0 3c 33 32 29 20 7c 20 28 75 36 34 29 30 78 66 66  <32) | (u64)0xff
25500 66 66 66 66 66 66 20 29 0a 23 65 6e 64 69 66 0a  ffffff ).#endif.
25510 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e 75 73  .    if( !pC->us
25520 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a  eRandomRowid ){.
25530 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
25540 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 2d 3e  e3BtreeLast(pC->
25550 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 72 65 73  uc.pCursor, &res
25560 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
25570 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
25580 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
25590 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
255a0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
255b0 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 20 20   res ){.        
255c0 76 20 3d 20 31 3b 20 20 20 2f 2a 20 49 4d 50 3a  v = 1;   /* IMP:
255d0 20 52 2d 36 31 39 31 34 2d 34 38 30 37 34 20 2a   R-61914-48074 *
255e0 2f 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  /.      }else{. 
255f0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73         assert( s
25600 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
25610 72 49 73 56 61 6c 69 64 28 70 43 2d 3e 75 63 2e  rIsValid(pC->uc.
25620 70 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  pCursor) );.    
25630 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33 42      v = sqlite3B
25640 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70  treeIntegerKey(p
25650 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a  C->uc.pCursor);.
25660 20 20 20 20 20 20 20 20 69 66 28 20 76 3e 3d 4d          if( v>=M
25670 41 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20 20  AX_ROWID ){.    
25680 20 20 20 20 20 20 70 43 2d 3e 75 73 65 52 61 6e        pC->useRan
25690 64 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a 20 20  domRowid = 1;.  
256a0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
256b0 20 20 20 20 20 20 20 76 2b 2b 3b 20 20 20 2f 2a         v++;   /*
256c0 20 49 4d 50 3a 20 52 2d 32 39 35 33 38 2d 33 34   IMP: R-29538-34
256d0 39 38 37 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d  987 */.        }
256e0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a  .      }.    }..
256f0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
25700 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
25710 54 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  T.    if( pOp->p
25720 33 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 73  3 ){.      /* As
25730 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20  sert that P3 is 
25740 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63  a valid memory c
25750 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73  ell. */.      as
25760 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
25770 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e  );.      if( p->
25780 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20 20  pFrame ){.      
25790 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e    for(pFrame=p->
257a0 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e  pFrame; pFrame->
257b0 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d  pParent; pFrame=
257c0 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29  pFrame->pParent)
257d0 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73  ;.        /* Ass
257e0 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61  ert that P3 is a
257f0 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65   valid memory ce
25800 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61  ll. */.        a
25810 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d  ssert( pOp->p3<=
25820 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29 3b 0a  pFrame->nMem );.
25830 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26          pMem = &
25840 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70  pFrame->aMem[pOp
25850 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 7d 65 6c  ->p3];.      }el
25860 73 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41  se{.        /* A
25870 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73  ssert that P3 is
25880 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20   a valid memory 
25890 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20  cell. */.       
258a0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
258b0 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
258c0 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
258d0 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 61 4d        pMem = &aM
258e0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
258f0 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43       memAboutToC
25900 68 61 6e 67 65 28 70 2c 20 70 4d 65 6d 29 3b 0a  hange(p, pMem);.
25910 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73        }.      as
25920 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
25930 28 70 4d 65 6d 29 20 29 3b 0a 0a 20 20 20 20 20  (pMem) );..     
25940 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
25950 70 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a  pOp->p3, pMem);.
25960 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
25970 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
25980 4d 65 6d 29 3b 0a 20 20 20 20 20 20 61 73 73 65  Mem);.      asse
25990 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73  rt( (pMem->flags
259a0 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
259b0 3b 20 20 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f  ;  /* mem(P3) ho
259c0 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 2a  lds an integer *
259d0 2f 0a 20 20 20 20 20 20 69 66 28 20 70 4d 65 6d  /.      if( pMem
259e0 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49 44  ->u.i==MAX_ROWID
259f0 20 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f   || pC->useRando
25a00 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20  mRowid ){.      
25a10 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55    rc = SQLITE_FU
25a20 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d  LL;   /* IMP: R-
25a30 31 37 38 31 37 2d 30 30 36 33 30 20 2a 2f 0a 20  17817-00630 */. 
25a40 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
25a50 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
25a60 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
25a70 28 20 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31 20  ( v<pMem->u.i+1 
25a80 29 7b 0a 20 20 20 20 20 20 20 20 76 20 3d 20 70  ){.        v = p
25a90 4d 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20 20  Mem->u.i + 1;.  
25aa0 20 20 20 20 7d 0a 20 20 20 20 20 20 70 4d 65 6d      }.      pMem
25ab0 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20 7d  ->u.i = v;.    }
25ac0 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20  .#endif.    if( 
25ad0 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
25ae0 69 64 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  id ){.      /* I
25af0 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46  MPLEMENTATION-OF
25b00 3a 20 52 2d 30 37 36 37 37 2d 34 31 38 38 31 20  : R-07677-41881 
25b10 49 66 20 74 68 65 20 6c 61 72 67 65 73 74 20 52  If the largest R
25b20 4f 57 49 44 20 69 73 20 65 71 75 61 6c 20 74 6f  OWID is equal to
25b30 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61   the.      ** la
25b40 72 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20 69  rgest possible i
25b50 6e 74 65 67 65 72 20 28 39 32 32 33 33 37 32 30  nteger (92233720
25b60 33 36 38 35 34 37 37 35 38 30 37 29 20 74 68 65  36854775807) the
25b70 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 20  n the database. 
25b80 20 20 20 20 20 2a 2a 20 65 6e 67 69 6e 65 20 73       ** engine s
25b90 74 61 72 74 73 20 70 69 63 6b 69 6e 67 20 70 6f  tarts picking po
25ba0 73 69 74 69 76 65 20 63 61 6e 64 69 64 61 74 65  sitive candidate
25bb0 20 52 4f 57 49 44 73 20 61 74 20 72 61 6e 64 6f   ROWIDs at rando
25bc0 6d 20 75 6e 74 69 6c 0a 20 20 20 20 20 20 2a 2a  m until.      **
25bd0 20 69 74 20 66 69 6e 64 73 20 6f 6e 65 20 74 68   it finds one th
25be0 61 74 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f  at is not previo
25bf0 75 73 6c 79 20 75 73 65 64 2e 20 2a 2f 0a 20 20  usly used. */.  
25c00 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
25c10 3e 70 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 57 65  >p3==0 );  /* We
25c20 20 63 61 6e 6e 6f 74 20 62 65 20 69 6e 20 72 61   cannot be in ra
25c30 6e 64 6f 6d 20 72 6f 77 69 64 20 6d 6f 64 65 20  ndom rowid mode 
25c40 69 66 20 74 68 69 73 20 69 73 0a 20 20 20 20 20  if this is.     
25c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c60 20 20 20 20 20 20 20 20 2a 2a 20 61 6e 20 41 55          ** an AU
25c70 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c  TOINCREMENT tabl
25c80 65 2e 20 2a 2f 0a 20 20 20 20 20 20 63 6e 74 20  e. */.      cnt 
25c90 3d 20 30 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20  = 0;.      do{. 
25ca0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72         sqlite3_r
25cb0 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a 65 6f 66  andomness(sizeof
25cc0 28 76 29 2c 20 26 76 29 3b 0a 20 20 20 20 20 20  (v), &v);.      
25cd0 20 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57 49    v &= (MAX_ROWI
25ce0 44 3e 3e 31 29 3b 20 76 2b 2b 3b 20 20 2f 2a 20  D>>1); v++;  /* 
25cf0 45 6e 73 75 72 65 20 74 68 61 74 20 76 20 69 73  Ensure that v is
25d00 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65   greater than ze
25d10 72 6f 20 2a 2f 0a 20 20 20 20 20 20 7d 77 68 69  ro */.      }whi
25d20 6c 65 28 20 20 28 28 72 63 20 3d 20 73 71 6c 69  le(  ((rc = sqli
25d30 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
25d40 70 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43  packed(pC->uc.pC
25d50 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 76  ursor, 0, (u64)v
25d60 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
25d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d90 20 20 20 30 2c 20 26 72 65 73 29 29 3d 3d 53 51     0, &res))==SQ
25da0 4c 49 54 45 5f 4f 4b 29 0a 20 20 20 20 20 20 20  LITE_OK).       
25db0 20 20 20 20 20 26 26 20 28 72 65 73 3d 3d 30 29       && (res==0)
25dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20  .            && 
25dd0 28 2b 2b 63 6e 74 3c 31 30 30 29 29 3b 0a 20 20  (++cnt<100));.  
25de0 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74      if( rc ) got
25df0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
25e00 72 72 6f 72 3b 0a 20 20 20 20 20 20 69 66 28 20  rror;.      if( 
25e10 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  res==0 ){.      
25e20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55    rc = SQLITE_FU
25e30 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d  LL;   /* IMP: R-
25e40 33 38 32 31 39 2d 35 33 30 30 32 20 2a 2f 0a 20  38219-53002 */. 
25e50 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
25e60 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
25e70 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73        }.      as
25e80 73 65 72 74 28 20 76 3e 30 20 29 3b 20 20 2f 2a  sert( v>0 );  /*
25e90 20 45 56 3a 20 52 2d 34 30 38 31 32 2d 30 33 35   EV: R-40812-035
25ea0 37 30 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20  70 */.    }.    
25eb0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
25ec0 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e  to = 0;.    pC->
25ed0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
25ee0 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20  CHE_STALE;.  }. 
25ef0 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a   pOut->u.i = v;.
25f00 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
25f10 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 20 50 31  pcode: Insert P1
25f20 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
25f30 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79  Synopsis: intkey
25f40 3d 72 5b 50 33 5d 20 64 61 74 61 3d 72 5b 50 32  =r[P3] data=r[P2
25f50 5d 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 6e  ].**.** Write an
25f60 20 65 6e 74 72 79 20 69 6e 74 6f 20 74 68 65 20   entry into the 
25f70 74 61 62 6c 65 20 6f 66 20 63 75 72 73 6f 72 20  table of cursor 
25f80 50 31 2e 20 20 41 20 6e 65 77 20 65 6e 74 72 79  P1.  A new entry
25f90 20 69 73 0a 2a 2a 20 63 72 65 61 74 65 64 20 69   is.** created i
25fa0 66 20 69 74 20 64 6f 65 73 6e 27 74 20 61 6c 72  f it doesn't alr
25fb0 65 61 64 79 20 65 78 69 73 74 20 6f 72 20 74 68  eady exist or th
25fc0 65 20 64 61 74 61 20 66 6f 72 20 61 6e 20 65 78  e data for an ex
25fd0 69 73 74 69 6e 67 0a 2a 2a 20 65 6e 74 72 79 20  isting.** entry 
25fe0 69 73 20 6f 76 65 72 77 72 69 74 74 65 6e 2e 20  is overwritten. 
25ff0 20 54 68 65 20 64 61 74 61 20 69 73 20 74 68 65   The data is the
26000 20 76 61 6c 75 65 20 4d 45 4d 5f 42 6c 6f 62 20   value MEM_Blob 
26010 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
26020 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 32 2e  er.** number P2.
26030 20 54 68 65 20 6b 65 79 20 69 73 20 73 74 6f 72   The key is stor
26040 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
26050 33 2e 20 54 68 65 20 6b 65 79 20 6d 75 73 74 0a  3. The key must.
26060 2a 2a 20 62 65 20 61 20 4d 45 4d 5f 49 6e 74 2e  ** be a MEM_Int.
26070 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
26080 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61  FLAG_NCHANGE fla
26090 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20  g of P5 is set, 
260a0 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61  then the row cha
260b0 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20  nge count is.** 
260c0 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68  incremented (oth
260d0 65 72 77 69 73 65 20 6e 6f 74 29 2e 20 20 49 66  erwise not).  If
260e0 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54   the OPFLAG_LAST
260f0 52 4f 57 49 44 20 66 6c 61 67 20 6f 66 20 50 35  ROWID flag of P5
26100 20 69 73 20 73 65 74 2c 0a 2a 2a 20 74 68 65 6e   is set,.** then
26110 20 72 6f 77 69 64 20 69 73 20 73 74 6f 72 65 64   rowid is stored
26120 20 66 6f 72 20 73 75 62 73 65 71 75 65 6e 74 20   for subsequent 
26130 72 65 74 75 72 6e 20 62 79 20 74 68 65 0a 2a 2a  return by the.**
26140 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e   sqlite3_last_in
26150 73 65 72 74 5f 72 6f 77 69 64 28 29 20 66 75 6e  sert_rowid() fun
26160 63 74 69 6f 6e 20 28 6f 74 68 65 72 77 69 73 65  ction (otherwise
26170 20 69 74 20 69 73 20 75 6e 6d 6f 64 69 66 69 65   it is unmodifie
26180 64 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  d)..**.** If the
26190 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
261a0 45 53 55 4c 54 20 66 6c 61 67 20 6f 66 20 50 35  ESULT flag of P5
261b0 20 69 73 20 73 65 74 2c 20 74 68 65 20 69 6d 70   is set, the imp
261c0 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69 67 68  lementation migh
261d0 74 0a 2a 2a 20 72 75 6e 20 66 61 73 74 65 72 20  t.** run faster 
261e0 62 79 20 61 76 6f 69 64 69 6e 67 20 61 6e 20 75  by avoiding an u
261f0 6e 6e 65 63 65 73 73 61 72 79 20 73 65 65 6b 20  nnecessary seek 
26200 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e 20 20 48  on cursor P1.  H
26210 6f 77 65 76 65 72 2c 0a 2a 2a 20 74 68 65 20 4f  owever,.** the O
26220 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
26230 55 4c 54 20 66 6c 61 67 20 6d 75 73 74 20 6f 6e  ULT flag must on
26240 6c 79 20 62 65 20 73 65 74 20 69 66 20 74 68 65  ly be set if the
26250 72 65 20 68 61 76 65 20 62 65 65 6e 20 6e 6f 20  re have been no 
26260 70 72 69 6f 72 0a 2a 2a 20 73 65 65 6b 73 20 6f  prior.** seeks o
26270 6e 20 74 68 65 20 63 75 72 73 6f 72 20 6f 72 20  n the cursor or 
26280 69 66 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  if the most rece
26290 6e 74 20 73 65 65 6b 20 75 73 65 64 20 61 20 6b  nt seek used a k
262a0 65 79 20 65 71 75 61 6c 20 74 6f 20 50 33 2e 0a  ey equal to P3..
262b0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
262c0 4c 41 47 5f 49 53 55 50 44 41 54 45 20 66 6c 61  LAG_ISUPDATE fla
262d0 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74  g is set, then t
262e0 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 70 61  his opcode is pa
262f0 72 74 20 6f 66 20 61 6e 0a 2a 2a 20 55 50 44 41  rt of an.** UPDA
26300 54 45 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 4f  TE operation.  O
26310 74 68 65 72 77 69 73 65 20 28 69 66 20 74 68 65  therwise (if the
26320 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 29 20   flag is clear) 
26330 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65  then this opcode
26340 0a 2a 2a 20 69 73 20 70 61 72 74 20 6f 66 20 61  .** is part of a
26350 6e 20 49 4e 53 45 52 54 20 6f 70 65 72 61 74 69  n INSERT operati
26360 6f 6e 2e 20 20 54 68 65 20 64 69 66 66 65 72 65  on.  The differe
26370 6e 63 65 20 69 73 20 6f 6e 6c 79 20 69 6d 70 6f  nce is only impo
26380 72 74 61 6e 74 20 74 6f 0a 2a 2a 20 74 68 65 20  rtant to.** the 
26390 75 70 64 61 74 65 20 68 6f 6f 6b 2e 0a 2a 2a 0a  update hook..**.
263a0 2a 2a 20 50 61 72 61 6d 65 74 65 72 20 50 34 20  ** Parameter P4 
263b0 6d 61 79 20 70 6f 69 6e 74 20 74 6f 20 61 20 54  may point to a T
263c0 61 62 6c 65 20 73 74 72 75 63 74 75 72 65 2c 20  able structure, 
263d0 6f 72 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 20  or may be NULL. 
263e0 49 66 20 69 74 20 69 73 20 0a 2a 2a 20 6e 6f 74  If it is .** not
263f0 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20   NULL, then the 
26400 75 70 64 61 74 65 2d 68 6f 6f 6b 20 28 73 71 6c  update-hook (sql
26410 69 74 65 33 2e 78 55 70 64 61 74 65 43 61 6c 6c  ite3.xUpdateCall
26420 62 61 63 6b 29 20 69 73 20 69 6e 76 6f 6b 65 64  back) is invoked
26430 20 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   .** following a
26440 20 73 75 63 63 65 73 73 66 75 6c 20 69 6e 73 65   successful inse
26450 72 74 2e 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e 49  rt..**.** (WARNI
26460 4e 47 2f 54 4f 44 4f 3a 20 49 66 20 50 31 20 69  NG/TODO: If P1 i
26470 73 20 61 20 70 73 65 75 64 6f 2d 63 75 72 73 6f  s a pseudo-curso
26480 72 20 61 6e 64 20 50 32 20 69 73 20 64 79 6e 61  r and P2 is dyna
26490 6d 69 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63  mically.** alloc
264a0 61 74 65 64 2c 20 74 68 65 6e 20 6f 77 6e 65 72  ated, then owner
264b0 73 68 69 70 20 6f 66 20 50 32 20 69 73 20 74 72  ship of P2 is tr
264c0 61 6e 73 66 65 72 72 65 64 20 74 6f 20 74 68 65  ansferred to the
264d0 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 0a 2a   pseudo-cursor.*
264e0 2a 20 61 6e 64 20 72 65 67 69 73 74 65 72 20 50  * and register P
264f0 32 20 62 65 63 6f 6d 65 73 20 65 70 68 65 6d 65  2 becomes epheme
26500 72 61 6c 2e 20 20 49 66 20 74 68 65 20 63 75 72  ral.  If the cur
26510 73 6f 72 20 69 73 20 63 68 61 6e 67 65 64 2c 20  sor is changed, 
26520 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20  the.** value of 
26530 72 65 67 69 73 74 65 72 20 50 32 20 77 69 6c 6c  register P2 will
26540 20 74 68 65 6e 20 63 68 61 6e 67 65 2e 20 20 4d   then change.  M
26550 61 6b 65 20 73 75 72 65 20 74 68 69 73 20 64 6f  ake sure this do
26560 65 73 20 6e 6f 74 0a 2a 2a 20 63 61 75 73 65 20  es not.** cause 
26570 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 29 0a 2a  any problems.).*
26580 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
26590 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73  ction only works
265a0 20 6f 6e 20 74 61 62 6c 65 73 2e 20 20 54 68 65   on tables.  The
265b0 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74   equivalent inst
265c0 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 69  ruction.** for i
265d0 6e 64 69 63 65 73 20 69 73 20 4f 50 5f 49 64 78  ndices is OP_Idx
265e0 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70  Insert..*/./* Op
265f0 63 6f 64 65 3a 20 49 6e 73 65 72 74 49 6e 74 20  code: InsertInt 
26600 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
26610 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b  * Synopsis: intk
26620 65 79 3d 50 33 20 64 61 74 61 3d 72 5b 50 32 5d  ey=P3 data=r[P2]
26630 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
26640 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65 20 4f  s exactly like O
26650 50 5f 49 6e 73 65 72 74 20 65 78 63 65 70 74 20  P_Insert except 
26660 74 68 61 74 20 74 68 65 20 6b 65 79 20 69 73 20  that the key is 
26670 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 76  the.** integer v
26680 61 6c 75 65 20 50 33 2c 20 6e 6f 74 20 74 68 65  alue P3, not the
26690 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 69 6e   value of the in
266a0 74 65 67 65 72 20 73 74 6f 72 65 64 20 69 6e 20  teger stored in 
266b0 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a  register P3..*/.
266c0 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 3a 20  case OP_Insert: 
266d0 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 49  .case OP_InsertI
266e0 6e 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 44 61  nt: {.  Mem *pDa
266f0 74 61 3b 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d  ta;       /* MEM
26700 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 64 61   cell holding da
26710 74 61 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72  ta for the recor
26720 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64  d to be inserted
26730 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4b 65 79 3b   */.  Mem *pKey;
26740 20 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63          /* MEM c
26750 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 6b 65 79 20  ell holding key 
26760 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
26770 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
26780 2a 70 43 3b 20 20 20 2f 2a 20 43 75 72 73 6f 72  *pC;   /* Cursor
26790 20 74 6f 20 74 61 62 6c 65 20 69 6e 74 6f 20 77   to table into w
267a0 68 69 63 68 20 69 6e 73 65 72 74 20 69 73 20 77  hich insert is w
267b0 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20  ritten */.  int 
267c0 73 65 65 6b 52 65 73 75 6c 74 3b 20 20 20 2f 2a  seekResult;   /*
267d0 20 52 65 73 75 6c 74 20 6f 66 20 70 72 69 6f 72   Result of prior
267e0 20 73 65 65 6b 20 6f 72 20 30 20 69 66 20 6e 6f   seek or 0 if no
267f0 20 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66   USESEEKRESULT f
26800 6c 61 67 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  lag */.  const c
26810 68 61 72 20 2a 7a 44 62 3b 20 20 2f 2a 20 64 61  har *zDb;  /* da
26820 74 61 62 61 73 65 20 6e 61 6d 65 20 2d 20 75 73  tabase name - us
26830 65 64 20 62 79 20 74 68 65 20 75 70 64 61 74 65  ed by the update
26840 20 68 6f 6f 6b 20 2a 2f 0a 20 20 54 61 62 6c 65   hook */.  Table
26850 20 2a 70 54 61 62 3b 20 20 20 20 20 20 2f 2a 20   *pTab;      /* 
26860 54 61 62 6c 65 20 73 74 72 75 63 74 75 72 65 20  Table structure 
26870 2d 20 75 73 65 64 20 62 79 20 75 70 64 61 74 65  - used by update
26880 20 61 6e 64 20 70 72 65 2d 75 70 64 61 74 65 20   and pre-update 
26890 68 6f 6f 6b 73 20 2a 2f 0a 20 20 42 74 72 65 65  hooks */.  Btree
268a0 50 61 79 6c 6f 61 64 20 78 3b 20 20 20 2f 2a 20  Payload x;   /* 
268b0 50 61 79 6c 6f 61 64 20 74 6f 20 62 65 20 69 6e  Payload to be in
268c0 73 65 72 74 65 64 20 2a 2f 0a 0a 20 20 70 44 61  serted */..  pDa
268d0 74 61 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ta = &aMem[pOp->
268e0 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p2];.  assert( p
268f0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
26900 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
26910 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d  );.  assert( mem
26920 49 73 56 61 6c 69 64 28 70 44 61 74 61 29 20 29  IsValid(pData) )
26930 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
26940 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
26950 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
26960 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
26970 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
26980 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74  TREE );.  assert
26990 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  ( pC->uc.pCursor
269a0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
269b0 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c   (pOp->p5 & OPFL
269c0 41 47 5f 49 53 4e 4f 4f 50 29 20 7c 7c 20 70 43  AG_ISNOOP) || pC
269d0 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61  ->isTable );.  a
269e0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
269f0 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20 7c 7c 20  pe==P4_TABLE || 
26a00 70 4f 70 2d 3e 70 34 74 79 70 65 3e 3d 50 34 5f  pOp->p4type>=P4_
26a10 53 54 41 54 49 43 20 29 3b 0a 20 20 52 45 47 49  STATIC );.  REGI
26a20 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
26a30 70 32 2c 20 70 44 61 74 61 29 3b 0a 20 20 73 71  p2, pData);.  sq
26a40 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57 72 69  lite3VdbeIncrWri
26a50 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 70 43 29  teCounter(p, pC)
26a60 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  ;..  if( pOp->op
26a70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 20  code==OP_Insert 
26a80 29 7b 0a 20 20 20 20 70 4b 65 79 20 3d 20 26 61  ){.    pKey = &a
26a90 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
26aa0 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 2d 3e    assert( pKey->
26ab0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
26ac0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  );.    assert( m
26ad0 65 6d 49 73 56 61 6c 69 64 28 70 4b 65 79 29 20  emIsValid(pKey) 
26ae0 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
26af0 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
26b00 4b 65 79 29 3b 0a 20 20 20 20 78 2e 6e 4b 65 79  Key);.    x.nKey
26b10 20 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20 20   = pKey->u.i;.  
26b20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
26b30 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
26b40 4f 50 5f 49 6e 73 65 72 74 49 6e 74 20 29 3b 0a  OP_InsertInt );.
26b50 20 20 20 20 78 2e 6e 4b 65 79 20 3d 20 70 4f 70      x.nKey = pOp
26b60 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  ->p3;.  }..  if(
26b70 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
26b80 5f 54 41 42 4c 45 20 26 26 20 48 41 53 5f 55 50  _TABLE && HAS_UP
26b90 44 41 54 45 5f 48 4f 4f 4b 28 64 62 29 20 29 7b  DATE_HOOK(db) ){
26ba0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
26bb0 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20 7a  >iDb>=0 );.    z
26bc0 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d  Db = db->aDb[pC-
26bd0 3e 69 44 62 5d 2e 7a 44 62 53 4e 61 6d 65 3b 0a  >iDb].zDbSName;.
26be0 20 20 20 20 70 54 61 62 20 3d 20 70 4f 70 2d 3e      pTab = pOp->
26bf0 70 34 2e 70 54 61 62 3b 0a 20 20 20 20 61 73 73  p4.pTab;.    ass
26c00 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 20 26 20  ert( (pOp->p5 & 
26c10 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 29 20 7c  OPFLAG_ISNOOP) |
26c20 7c 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29  | HasRowid(pTab)
26c30 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   );.  }else{.   
26c40 20 70 54 61 62 20 3d 20 30 3b 0a 20 20 20 20 7a   pTab = 0;.    z
26c50 44 62 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20  Db = 0;  /* Not 
26c60 6e 65 65 64 65 64 2e 20 20 53 69 6c 65 6e 63 65  needed.  Silence
26c70 20 61 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e   a compiler warn
26c80 69 6e 67 2e 20 2a 2f 0a 20 20 7d 0a 0a 23 69 66  ing. */.  }..#if
26c90 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
26ca0 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b  E_PREUPDATE_HOOK
26cb0 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
26cc0 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b   pre-update hook
26cd0 2c 20 69 66 20 61 6e 79 20 2a 2f 0a 20 20 69 66  , if any */.  if
26ce0 28 20 70 54 61 62 20 29 7b 0a 20 20 20 20 69 66  ( pTab ){.    if
26cf0 28 20 64 62 2d 3e 78 50 72 65 55 70 64 61 74 65  ( db->xPreUpdate
26d00 43 61 6c 6c 62 61 63 6b 20 26 26 20 21 28 70 4f  Callback && !(pO
26d10 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49  p->p5 & OPFLAG_I
26d20 53 55 50 44 41 54 45 29 20 29 7b 0a 20 20 20 20  SUPDATE) ){.    
26d30 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 65    sqlite3VdbePre
26d40 55 70 64 61 74 65 48 6f 6f 6b 28 70 2c 20 70 43  UpdateHook(p, pC
26d50 2c 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 2c  , SQLITE_INSERT,
26d60 20 7a 44 62 2c 20 70 54 61 62 2c 20 78 2e 6e 4b   zDb, pTab, x.nK
26d70 65 79 2c 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 20  ey,pOp->p2);.   
26d80 20 7d 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78   }.    if( db->x
26d90 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 3d 3d  UpdateCallback==
26da0 30 20 7c 7c 20 70 54 61 62 2d 3e 61 43 6f 6c 3d  0 || pTab->aCol=
26db0 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 50  =0 ){.      /* P
26dc0 72 65 76 65 6e 74 20 70 6f 73 74 2d 75 70 64 61  revent post-upda
26dd0 74 65 20 68 6f 6f 6b 20 66 72 6f 6d 20 72 75 6e  te hook from run
26de0 6e 69 6e 67 20 69 6e 20 63 61 73 65 73 20 77 68  ning in cases wh
26df0 65 6e 20 69 74 20 73 68 6f 75 6c 64 20 6e 6f 74  en it should not
26e00 20 2a 2f 0a 20 20 20 20 20 20 70 54 61 62 20 3d   */.      pTab =
26e10 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   0;.    }.  }.  
26e20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50  if( pOp->p5 & OP
26e30 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 29 20 62 72  FLAG_ISNOOP ) br
26e40 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 69  eak;.#endif..  i
26e50 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  f( pOp->p5 & OPF
26e60 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d  LAG_NCHANGE ) p-
26e70 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66  >nChange++;.  if
26e80 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ( pOp->p5 & OPFL
26e90 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 29 20 64  AG_LASTROWID ) d
26ea0 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 78  b->lastRowid = x
26eb0 2e 6e 4b 65 79 3b 0a 20 20 61 73 73 65 72 74 28  .nKey;.  assert(
26ec0 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20   pData->flags & 
26ed0 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74  (MEM_Blob|MEM_St
26ee0 72 29 20 29 3b 0a 20 20 78 2e 70 44 61 74 61 20  r) );.  x.pData 
26ef0 3d 20 70 44 61 74 61 2d 3e 7a 3b 0a 20 20 78 2e  = pData->z;.  x.
26f00 6e 44 61 74 61 20 3d 20 70 44 61 74 61 2d 3e 6e  nData = pData->n
26f10 3b 0a 20 20 73 65 65 6b 52 65 73 75 6c 74 20 3d  ;.  seekResult =
26f20 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46   ((pOp->p5 & OPF
26f30 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
26f40 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73  T) ? pC->seekRes
26f50 75 6c 74 20 3a 20 30 29 3b 0a 20 20 69 66 28 20  ult : 0);.  if( 
26f60 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d  pData->flags & M
26f70 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 78  EM_Zero ){.    x
26f80 2e 6e 5a 65 72 6f 20 3d 20 70 44 61 74 61 2d 3e  .nZero = pData->
26f90 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73 65  u.nZero;.  }else
26fa0 7b 0a 20 20 20 20 78 2e 6e 5a 65 72 6f 20 3d 20  {.    x.nZero = 
26fb0 30 3b 0a 20 20 7d 0a 20 20 78 2e 70 4b 65 79 20  0;.  }.  x.pKey 
26fc0 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  = 0;.  rc = sqli
26fd0 74 65 33 42 74 72 65 65 49 6e 73 65 72 74 28 70  te3BtreeInsert(p
26fe0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26  C->uc.pCursor, &
26ff0 78 2c 0a 20 20 20 20 20 20 28 70 4f 70 2d 3e 70  x,.      (pOp->p
27000 35 20 26 20 28 4f 50 46 4c 41 47 5f 41 50 50 45  5 & (OPFLAG_APPE
27010 4e 44 7c 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f  ND|OPFLAG_SAVEPO
27020 53 49 54 49 4f 4e 29 29 2c 20 73 65 65 6b 52 65  SITION)), seekRe
27030 73 75 6c 74 0a 20 20 29 3b 0a 20 20 70 43 2d 3e  sult.  );.  pC->
27040 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
27050 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   0;.  pC->cacheS
27060 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
27070 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  ALE;..  /* Invok
27080 65 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  e the update-hoo
27090 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a  k if required. *
270a0 2f 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  /.  if( rc ) got
270b0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
270c0 72 72 6f 72 3b 0a 20 20 69 66 28 20 70 54 61 62  rror;.  if( pTab
270d0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
270e0 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  db->xUpdateCallb
270f0 61 63 6b 21 3d 30 20 29 3b 0a 20 20 20 20 61 73  ack!=0 );.    as
27100 73 65 72 74 28 20 70 54 61 62 2d 3e 61 43 6f 6c  sert( pTab->aCol
27110 21 3d 30 20 29 3b 0a 20 20 20 20 64 62 2d 3e 78  !=0 );.    db->x
27120 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64  UpdateCallback(d
27130 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 0a 20  b->pUpdateArg,. 
27140 20 20 20 20 20 20 20 20 20 20 28 70 4f 70 2d 3e            (pOp->
27150 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50  p5 & OPFLAG_ISUP
27160 44 41 54 45 29 20 3f 20 53 51 4c 49 54 45 5f 55  DATE) ? SQLITE_U
27170 50 44 41 54 45 20 3a 20 53 51 4c 49 54 45 5f 49  PDATE : SQLITE_I
27180 4e 53 45 52 54 2c 0a 20 20 20 20 20 20 20 20 20  NSERT,.         
27190 20 20 7a 44 62 2c 20 70 54 61 62 2d 3e 7a 4e 61    zDb, pTab->zNa
271a0 6d 65 2c 20 78 2e 6e 4b 65 79 29 3b 0a 20 20 7d  me, x.nKey);.  }
271b0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
271c0 4f 70 63 6f 64 65 3a 20 44 65 6c 65 74 65 20 50  Opcode: Delete P
271d0 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
271e0 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68 65 20 72  .** Delete the r
271f0 65 63 6f 72 64 20 61 74 20 77 68 69 63 68 20 74  ecord at which t
27200 68 65 20 50 31 20 63 75 72 73 6f 72 20 69 73 20  he P1 cursor is 
27210 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
27220 6e 67 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ng..**.** If the
27230 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49   OPFLAG_SAVEPOSI
27240 54 49 4f 4e 20 62 69 74 20 6f 66 20 74 68 65 20  TION bit of the 
27250 50 35 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  P5 parameter is 
27260 73 65 74 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65  set, then.** the
27270 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65 20   cursor will be 
27280 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74  left pointing at
27290 20 20 65 69 74 68 65 72 20 74 68 65 20 6e 65 78    either the nex
272a0 74 20 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75  t or the previou
272b0 73 0a 2a 2a 20 72 65 63 6f 72 64 20 69 6e 20 74  s.** record in t
272c0 68 65 20 74 61 62 6c 65 2e 20 49 66 20 69 74 20  he table. If it 
272d0 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67  is left pointing
272e0 20 61 74 20 74 68 65 20 6e 65 78 74 20 72 65 63   at the next rec
272f0 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65  ord, then.** the
27300 20 6e 65 78 74 20 4e 65 78 74 20 69 6e 73 74 72   next Next instr
27310 75 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61  uction will be a
27320 20 6e 6f 2d 6f 70 2e 20 41 73 20 61 20 72 65 73   no-op. As a res
27330 75 6c 74 2c 20 69 6e 20 74 68 69 73 20 63 61 73  ult, in this cas
27340 65 0a 2a 2a 20 69 74 20 69 73 20 6f 6b 20 74 6f  e.** it is ok to
27350 20 64 65 6c 65 74 65 20 61 20 72 65 63 6f 72 64   delete a record
27360 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 4e   from within a N
27370 65 78 74 20 6c 6f 6f 70 2e 20 49 66 20 0a 2a 2a  ext loop. If .**
27380 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49   OPFLAG_SAVEPOSI
27390 54 49 4f 4e 20 62 69 74 20 6f 66 20 50 35 20 69  TION bit of P5 i
273a0 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 74 68  s clear, then th
273b0 65 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65  e cursor will be
273c0 0a 2a 2a 20 6c 65 66 74 20 69 6e 20 61 6e 20 75  .** left in an u
273d0 6e 64 65 66 69 6e 65 64 20 73 74 61 74 65 2e 0a  ndefined state..
273e0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
273f0 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20 62 69  LAG_AUXDELETE bi
27400 74 20 69 73 20 73 65 74 20 6f 6e 20 50 35 2c 20  t is set on P5, 
27410 74 68 61 74 20 69 6e 64 69 63 61 74 65 73 20 74  that indicates t
27420 68 61 74 20 74 68 69 73 0a 2a 2a 20 64 65 6c 65  hat this.** dele
27430 74 65 20 6f 6e 65 20 6f 66 20 73 65 76 65 72 61  te one of severa
27440 6c 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  l associated wit
27450 68 20 64 65 6c 65 74 69 6e 67 20 61 20 74 61 62  h deleting a tab
27460 6c 65 20 72 6f 77 20 61 6e 64 20 61 6c 6c 20 69  le row and all i
27470 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65 64  ts.** associated
27480 20 69 6e 64 65 78 20 65 6e 74 72 69 65 73 2e 20   index entries. 
27490 20 45 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66 20   Exactly one of 
274a0 74 68 6f 73 65 20 64 65 6c 65 74 65 73 20 69 73  those deletes is
274b0 20 74 68 65 20 22 70 72 69 6d 61 72 79 22 0a 2a   the "primary".*
274c0 2a 20 64 65 6c 65 74 65 2e 20 20 54 68 65 20 6f  * delete.  The o
274d0 74 68 65 72 73 20 61 72 65 20 61 6c 6c 20 6f 6e  thers are all on
274e0 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54   OPFLAG_FORDELET
274f0 45 20 63 75 72 73 6f 72 73 20 6f 72 20 65 6c 73  E cursors or els
27500 65 20 61 72 65 0a 2a 2a 20 6d 61 72 6b 65 64 20  e are.** marked 
27510 77 69 74 68 20 74 68 65 20 41 55 58 44 45 4c 45  with the AUXDELE
27520 54 45 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 49  TE flag..**.** I
27530 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48  f the OPFLAG_NCH
27540 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 32 20  ANGE flag of P2 
27550 28 4e 42 3a 20 50 32 20 6e 6f 74 20 50 35 29 20  (NB: P2 not P5) 
27560 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65  is set, then the
27570 20 72 6f 77 0a 2a 2a 20 63 68 61 6e 67 65 20 63   row.** change c
27580 6f 75 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e  ount is incremen
27590 74 65 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e  ted (otherwise n
275a0 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75  ot)..**.** P1 mu
275b0 73 74 20 6e 6f 74 20 62 65 20 70 73 65 75 64 6f  st not be pseudo
275c0 2d 74 61 62 6c 65 2e 20 20 49 74 20 68 61 73 20  -table.  It has 
275d0 74 6f 20 62 65 20 61 20 72 65 61 6c 20 74 61 62  to be a real tab
275e0 6c 65 20 77 69 74 68 0a 2a 2a 20 6d 75 6c 74 69  le with.** multi
275f0 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20  ple rows..**.** 
27600 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c  If P4 is not NUL
27610 4c 20 74 68 65 6e 20 69 74 20 70 6f 69 6e 74 73  L then it points
27620 20 74 6f 20 61 20 54 61 62 6c 65 20 6f 62 6a 65   to a Table obje
27630 63 74 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  ct. In this case
27640 20 65 69 74 68 65 72 20 0a 2a 2a 20 74 68 65 20   either .** the 
27650 75 70 64 61 74 65 20 6f 72 20 70 72 65 2d 75 70  update or pre-up
27660 64 61 74 65 20 68 6f 6f 6b 2c 20 6f 72 20 62 6f  date hook, or bo
27670 74 68 2c 20 6d 61 79 20 62 65 20 69 6e 76 6f 6b  th, may be invok
27680 65 64 2e 20 54 68 65 20 50 31 20 63 75 72 73 6f  ed. The P1 curso
27690 72 20 6d 75 73 74 0a 2a 2a 20 68 61 76 65 20 62  r must.** have b
276a0 65 65 6e 20 70 6f 73 69 74 69 6f 6e 65 64 20 75  een positioned u
276b0 73 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64  sing OP_NotFound
276c0 20 70 72 69 6f 72 20 74 6f 20 69 6e 76 6f 6b 69   prior to invoki
276d0 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69  ng this opcode i
276e0 6e 20 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 2e  n .** this case.
276f0 20 53 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 69   Specifically, i
27700 66 20 6f 6e 65 20 69 73 20 63 6f 6e 66 69 67 75  f one is configu
27710 72 65 64 2c 20 74 68 65 20 70 72 65 2d 75 70 64  red, the pre-upd
27720 61 74 65 20 68 6f 6f 6b 20 69 73 20 0a 2a 2a 20  ate hook is .** 
27730 69 6e 76 6f 6b 65 64 20 69 66 20 50 34 20 69 73  invoked if P4 is
27740 20 6e 6f 74 20 4e 55 4c 4c 2e 20 54 68 65 20 75   not NULL. The u
27750 70 64 61 74 65 2d 68 6f 6f 6b 20 69 73 20 69 6e  pdate-hook is in
27760 76 6f 6b 65 64 20 69 66 20 6f 6e 65 20 69 73 20  voked if one is 
27770 63 6f 6e 66 69 67 75 72 65 64 2c 20 0a 2a 2a 20  configured, .** 
27780 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20  P4 is not NULL, 
27790 61 6e 64 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e  and the OPFLAG_N
277a0 43 48 41 4e 47 45 20 66 6c 61 67 20 69 73 20 73  CHANGE flag is s
277b0 65 74 20 69 6e 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  et in P2..**.** 
277c0 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 49 53  If the OPFLAG_IS
277d0 55 50 44 41 54 45 20 66 6c 61 67 20 69 73 20 73  UPDATE flag is s
277e0 65 74 20 69 6e 20 50 32 2c 20 74 68 65 6e 20 50  et in P2, then P
277f0 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61  3 contains the a
27800 64 64 72 65 73 73 0a 2a 2a 20 6f 66 20 74 68 65  ddress.** of the
27810 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61   memory cell tha
27820 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 76  t contains the v
27830 61 6c 75 65 20 74 68 61 74 20 74 68 65 20 72 6f  alue that the ro
27840 77 69 64 20 6f 66 20 74 68 65 20 72 6f 77 20 77  wid of the row w
27850 69 6c 6c 0a 2a 2a 20 62 65 20 73 65 74 20 74 6f  ill.** be set to
27860 20 62 79 20 74 68 65 20 75 70 64 61 74 65 2e 0a   by the update..
27870 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 6c 65 74  */.case OP_Delet
27880 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  e: {.  VdbeCurso
27890 72 20 2a 70 43 3b 0a 20 20 63 6f 6e 73 74 20 63  r *pC;.  const c
278a0 68 61 72 20 2a 7a 44 62 3b 0a 20 20 54 61 62 6c  har *zDb;.  Tabl
278b0 65 20 2a 70 54 61 62 3b 0a 20 20 69 6e 74 20 6f  e *pTab;.  int o
278c0 70 66 6c 61 67 73 3b 0a 0a 20 20 6f 70 66 6c 61  pflags;..  opfla
278d0 67 73 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  gs = pOp->p2;.  
278e0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
278f0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
27900 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
27910 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
27920 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
27930 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
27940 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
27950 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
27960 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
27970 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  uc.pCursor!=0 );
27980 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64  .  assert( pC->d
27990 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
279a0 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   );.  sqlite3Vdb
279b0 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e 74 65  eIncrWriteCounte
279c0 72 28 70 2c 20 70 43 29 3b 0a 0a 23 69 66 64 65  r(p, pC);..#ifde
279d0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
279e0 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
279f0 3d 3d 50 34 5f 54 41 42 4c 45 20 26 26 20 48 61  ==P4_TABLE && Ha
27a00 73 52 6f 77 69 64 28 70 4f 70 2d 3e 70 34 2e 70  sRowid(pOp->p4.p
27a10 54 61 62 29 20 26 26 20 70 4f 70 2d 3e 70 35 3d  Tab) && pOp->p5=
27a20 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  =0 ){.    /* If 
27a30 70 35 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20  p5 is zero, the 
27a40 73 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20 74  seek operation t
27a50 68 61 74 20 70 6f 73 69 74 69 6f 6e 65 64 20 74  hat positioned t
27a60 68 65 20 63 75 72 73 6f 72 20 70 72 69 6f 72 20  he cursor prior 
27a70 74 6f 0a 20 20 20 20 2a 2a 20 4f 50 5f 44 65 6c  to.    ** OP_Del
27a80 65 74 65 20 77 69 6c 6c 20 68 61 76 65 20 61 6c  ete will have al
27a90 73 6f 20 73 65 74 20 74 68 65 20 70 43 2d 3e 6d  so set the pC->m
27aa0 6f 76 65 74 6f 54 61 72 67 65 74 20 66 69 65 6c  ovetoTarget fiel
27ab0 64 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20 6f  d to the rowid o
27ac0 66 0a 20 20 20 20 2a 2a 20 74 68 65 20 72 6f 77  f.    ** the row
27ad0 20 74 68 61 74 20 69 73 20 62 65 69 6e 67 20 64   that is being d
27ae0 65 6c 65 74 65 64 20 2a 2f 0a 20 20 20 20 69 36  eleted */.    i6
27af0 34 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33  4 iKey = sqlite3
27b00 42 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28  BtreeIntegerKey(
27b10 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b  pC->uc.pCursor);
27b20 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
27b30 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3d 3d 69  >movetoTarget==i
27b40 4b 65 79 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  Key );.  }.#endi
27b50 66 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 75  f..  /* If the u
27b60 70 64 61 74 65 2d 68 6f 6f 6b 20 6f 72 20 70 72  pdate-hook or pr
27b70 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20 77 69  e-update-hook wi
27b80 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 73  ll be invoked, s
27b90 65 74 20 7a 44 62 20 74 6f 0a 20 20 2a 2a 20 74  et zDb to.  ** t
27ba0 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64  he name of the d
27bb0 62 20 74 6f 20 70 61 73 73 20 61 73 20 74 6f 20  b to pass as to 
27bc0 69 74 2e 20 41 6c 73 6f 20 73 65 74 20 6c 6f 63  it. Also set loc
27bd0 61 6c 20 70 54 61 62 20 74 6f 20 61 20 63 6f 70  al pTab to a cop
27be0 79 0a 20 20 2a 2a 20 6f 66 20 70 34 2e 70 54 61  y.  ** of p4.pTa
27bf0 62 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 70  b. Finally, if p
27c00 35 20 69 73 20 74 72 75 65 2c 20 69 6e 64 69 63  5 is true, indic
27c10 61 74 69 6e 67 20 74 68 61 74 20 74 68 69 73 20  ating that this 
27c20 63 75 72 73 6f 72 20 77 61 73 0a 20 20 2a 2a 20  cursor was.  ** 
27c30 6c 61 73 74 20 6d 6f 76 65 64 20 77 69 74 68 20  last moved with 
27c40 4f 50 5f 4e 65 78 74 20 6f 72 20 4f 50 5f 50 72  OP_Next or OP_Pr
27c50 65 76 2c 20 6e 6f 74 20 53 65 65 6b 20 6f 72 20  ev, not Seek or 
27c60 4e 6f 74 46 6f 75 6e 64 2c 20 73 65 74 20 0a 20  NotFound, set . 
27c70 20 2a 2a 20 56 64 62 65 43 75 72 73 6f 72 2e 6d   ** VdbeCursor.m
27c80 6f 76 65 74 6f 54 61 72 67 65 74 20 74 6f 20 74  ovetoTarget to t
27c90 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 69 64  he current rowid
27ca0 2e 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d  .  */.  if( pOp-
27cb0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c  >p4type==P4_TABL
27cc0 45 20 26 26 20 48 41 53 5f 55 50 44 41 54 45 5f  E && HAS_UPDATE_
27cd0 48 4f 4f 4b 28 64 62 29 20 29 7b 0a 20 20 20 20  HOOK(db) ){.    
27ce0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e  assert( pC->iDb>
27cf0 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  =0 );.    assert
27d00 28 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 21 3d  ( pOp->p4.pTab!=
27d10 30 20 29 3b 0a 20 20 20 20 7a 44 62 20 3d 20 64  0 );.    zDb = d
27d20 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e  b->aDb[pC->iDb].
27d30 7a 44 62 53 4e 61 6d 65 3b 0a 20 20 20 20 70 54  zDbSName;.    pT
27d40 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 54 61  ab = pOp->p4.pTa
27d50 62 3b 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d  b;.    if( (pOp-
27d60 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 53 41 56  >p5 & OPFLAG_SAV
27d70 45 50 4f 53 49 54 49 4f 4e 29 21 3d 30 20 26 26  EPOSITION)!=0 &&
27d80 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a   pC->isTable ){.
27d90 20 20 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f        pC->moveto
27da0 54 61 72 67 65 74 20 3d 20 73 71 6c 69 74 65 33  Target = sqlite3
27db0 42 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28  BtreeIntegerKey(
27dc0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b  pC->uc.pCursor);
27dd0 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
27de0 20 20 20 20 7a 44 62 20 3d 20 30 3b 20 20 20 2f      zDb = 0;   /
27df0 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 53  * Not needed.  S
27e00 69 6c 65 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65  ilence a compile
27e10 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20  r warning. */.  
27e20 20 20 70 54 61 62 20 3d 20 30 3b 20 20 2f 2a 20    pTab = 0;  /* 
27e30 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 53 69 6c  Not needed.  Sil
27e40 65 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65 72 20  ence a compiler 
27e50 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 7d 0a  warning. */.  }.
27e60 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
27e70 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f  NABLE_PREUPDATE_
27e80 48 4f 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65  HOOK.  /* Invoke
27e90 20 74 68 65 20 70 72 65 2d 75 70 64 61 74 65 2d   the pre-update-
27ea0 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64  hook if required
27eb0 2e 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78  . */.  if( db->x
27ec0 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  PreUpdateCallbac
27ed0 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 70 54 61  k && pOp->p4.pTa
27ee0 62 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  b ){.    assert(
27ef0 20 21 28 6f 70 66 6c 61 67 73 20 26 20 4f 50 46   !(opflags & OPF
27f00 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20 0a 20  LAG_ISUPDATE) . 
27f10 20 20 20 20 20 20 20 20 7c 7c 20 48 61 73 52 6f          || HasRo
27f20 77 69 64 28 70 54 61 62 29 3d 3d 30 20 0a 20 20  wid(pTab)==0 .  
27f30 20 20 20 20 20 20 20 7c 7c 20 28 61 4d 65 6d 5b         || (aMem[
27f40 70 4f 70 2d 3e 70 33 5d 2e 66 6c 61 67 73 20 26  pOp->p3].flags &
27f50 20 4d 45 4d 5f 49 6e 74 29 20 0a 20 20 20 20 29   MEM_Int) .    )
27f60 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
27f70 65 50 72 65 55 70 64 61 74 65 48 6f 6f 6b 28 70  ePreUpdateHook(p
27f80 2c 20 70 43 2c 0a 20 20 20 20 20 20 20 20 28 6f  , pC,.        (o
27f90 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f  pflags & OPFLAG_
27fa0 49 53 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49  ISUPDATE) ? SQLI
27fb0 54 45 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49  TE_UPDATE : SQLI
27fc0 54 45 5f 44 45 4c 45 54 45 2c 20 0a 20 20 20 20  TE_DELETE, .    
27fd0 20 20 20 20 7a 44 62 2c 20 70 54 61 62 2c 20 70      zDb, pTab, p
27fe0 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 2c  C->movetoTarget,
27ff0 0a 20 20 20 20 20 20 20 20 70 4f 70 2d 3e 70 33  .        pOp->p3
28000 0a 20 20 20 20 29 3b 0a 20 20 7d 0a 20 20 69 66  .    );.  }.  if
28010 28 20 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c  ( opflags & OPFL
28020 41 47 5f 49 53 4e 4f 4f 50 20 29 20 62 72 65 61  AG_ISNOOP ) brea
28030 6b 3b 0a 23 65 6e 64 69 66 0a 20 0a 20 20 2f 2a  k;.#endif. .  /*
28040 20 4f 6e 6c 79 20 66 6c 61 67 73 20 74 68 61 74   Only flags that
28050 20 63 61 6e 20 62 65 20 73 65 74 20 61 72 65 20   can be set are 
28060 53 41 56 45 50 4f 49 53 54 49 4f 4e 20 61 6e 64  SAVEPOISTION and
28070 20 41 55 58 44 45 4c 45 54 45 20 2a 2f 20 0a 20   AUXDELETE */ . 
28080 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70   assert( (pOp->p
28090 35 20 26 20 7e 28 4f 50 46 4c 41 47 5f 53 41 56  5 & ~(OPFLAG_SAV
280a0 45 50 4f 53 49 54 49 4f 4e 7c 4f 50 46 4c 41 47  EPOSITION|OPFLAG
280b0 5f 41 55 58 44 45 4c 45 54 45 29 29 3d 3d 30 20  _AUXDELETE))==0 
280c0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46  );.  assert( OPF
280d0 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e  LAG_SAVEPOSITION
280e0 3d 3d 42 54 52 45 45 5f 53 41 56 45 50 4f 53 49  ==BTREE_SAVEPOSI
280f0 54 49 4f 4e 20 29 3b 0a 20 20 61 73 73 65 72 74  TION );.  assert
28100 28 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45  ( OPFLAG_AUXDELE
28110 54 45 3d 3d 42 54 52 45 45 5f 41 55 58 44 45 4c  TE==BTREE_AUXDEL
28120 45 54 45 20 29 3b 0a 0a 23 69 66 64 65 66 20 53  ETE );..#ifdef S
28130 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66  QLITE_DEBUG.  if
28140 28 20 70 2d 3e 70 46 72 61 6d 65 3d 3d 30 20 29  ( p->pFrame==0 )
28150 7b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73  {.    if( pC->is
28160 45 70 68 65 6d 65 72 61 6c 3d 3d 30 0a 20 20 20  Ephemeral==0.   
28170 20 20 20 20 20 26 26 20 28 70 4f 70 2d 3e 70 35       && (pOp->p5
28180 20 26 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c   & OPFLAG_AUXDEL
28190 45 54 45 29 3d 3d 30 0a 20 20 20 20 20 20 20 20  ETE)==0.        
281a0 26 26 20 28 70 43 2d 3e 77 72 46 6c 61 67 20 26  && (pC->wrFlag &
281b0 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54   OPFLAG_FORDELET
281c0 45 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20  E)==0.      ){. 
281d0 20 20 20 20 20 6e 45 78 74 72 61 44 65 6c 65 74       nExtraDelet
281e0 65 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  e++;.    }.    i
281f0 66 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46  f( pOp->p2 & OPF
28200 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 7b 0a 20  LAG_NCHANGE ){. 
28210 20 20 20 20 20 6e 45 78 74 72 61 44 65 6c 65 74       nExtraDelet
28220 65 2d 2d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23  e--;.    }.  }.#
28230 65 6e 64 69 66 0a 0a 20 20 72 63 20 3d 20 73 71  endif..  rc = sq
28240 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65  lite3BtreeDelete
28250 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
28260 20 70 4f 70 2d 3e 70 35 29 3b 0a 20 20 70 43 2d   pOp->p5);.  pC-
28270 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
28280 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43  ACHE_STALE;.  pC
28290 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 30  ->seekResult = 0
282a0 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
282b0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
282c0 72 72 6f 72 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f  rror;..  /* Invo
282d0 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f  ke the update-ho
282e0 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20  ok if required. 
282f0 2a 2f 0a 20 20 69 66 28 20 6f 70 66 6c 61 67 73  */.  if( opflags
28300 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47   & OPFLAG_NCHANG
28310 45 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61  E ){.    p->nCha
28320 6e 67 65 2b 2b 3b 0a 20 20 20 20 69 66 28 20 64  nge++;.    if( d
28330 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
28340 63 6b 20 26 26 20 48 61 73 52 6f 77 69 64 28 70  ck && HasRowid(p
28350 54 61 62 29 20 29 7b 0a 20 20 20 20 20 20 64 62  Tab) ){.      db
28360 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
28370 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67  k(db->pUpdateArg
28380 2c 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c  , SQLITE_DELETE,
28390 20 7a 44 62 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d   zDb, pTab->zNam
283a0 65 2c 0a 20 20 20 20 20 20 20 20 20 20 70 43 2d  e,.          pC-
283b0 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 29 3b 0a  >movetoTarget);.
283c0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43        assert( pC
283d0 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20  ->iDb>=0 );.    
283e0 7d 0a 20 20 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a  }.  }..  break;.
283f0 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73  }./* Opcode: Res
28400 65 74 43 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a 20  etCount * * * * 
28410 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75  *.**.** The valu
28420 65 20 6f 66 20 74 68 65 20 63 68 61 6e 67 65 20  e of the change 
28430 63 6f 75 6e 74 65 72 20 69 73 20 63 6f 70 69 65  counter is copie
28440 64 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  d to the databas
28450 65 20 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e  e handle.** chan
28460 67 65 20 63 6f 75 6e 74 65 72 20 28 72 65 74 75  ge counter (retu
28470 72 6e 65 64 20 62 79 20 73 75 62 73 65 71 75 65  rned by subseque
28480 6e 74 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69  nt calls to sqli
28490 74 65 33 5f 63 68 61 6e 67 65 73 28 29 29 2e 0a  te3_changes())..
284a0 2a 2a 20 54 68 65 6e 20 74 68 65 20 56 4d 73 20  ** Then the VMs 
284b0 69 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67 65 20  internal change 
284c0 63 6f 75 6e 74 65 72 20 72 65 73 65 74 73 20 74  counter resets t
284d0 6f 20 30 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20  o 0..** This is 
284e0 75 73 65 64 20 62 79 20 74 72 69 67 67 65 72 20  used by trigger 
284f0 70 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73  programs..*/.cas
28500 65 20 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74 3a  e OP_ResetCount:
28510 20 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65   {.  sqlite3Vdbe
28520 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70  SetChanges(db, p
28530 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 70 2d  ->nChange);.  p-
28540 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20  >nChange = 0;.  
28550 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
28560 6f 64 65 3a 20 53 6f 72 74 65 72 43 6f 6d 70 61  ode: SorterCompa
28570 72 65 20 50 31 20 50 32 20 50 33 20 50 34 0a 2a  re P1 P2 P3 P4.*
28580 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 6b  * Synopsis: if k
28590 65 79 28 50 31 29 21 3d 74 72 69 6d 28 72 5b 50  ey(P1)!=trim(r[P
285a0 33 5d 2c 50 34 29 20 67 6f 74 6f 20 50 32 0a 2a  3],P4) goto P2.*
285b0 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 73 6f 72  *.** P1 is a sor
285c0 74 65 72 20 63 75 72 73 6f 72 2e 20 54 68 69 73  ter cursor. This
285d0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 6d   instruction com
285e0 70 61 72 65 73 20 61 20 70 72 65 66 69 78 20 6f  pares a prefix o
285f0 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20  f the.** record 
28600 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65 72  blob in register
28610 20 50 33 20 61 67 61 69 6e 73 74 20 61 20 70 72   P3 against a pr
28620 65 66 69 78 20 6f 66 20 74 68 65 20 65 6e 74 72  efix of the entr
28630 79 20 74 68 61 74 20 0a 2a 2a 20 74 68 65 20 73  y that .** the s
28640 6f 72 74 65 72 20 63 75 72 73 6f 72 20 63 75 72  orter cursor cur
28650 72 65 6e 74 6c 79 20 70 6f 69 6e 74 73 20 74 6f  rently points to
28660 2e 20 20 4f 6e 6c 79 20 74 68 65 20 66 69 72 73  .  Only the firs
28670 74 20 50 34 20 66 69 65 6c 64 73 0a 2a 2a 20 6f  t P4 fields.** o
28680 66 20 72 5b 50 33 5d 20 61 6e 64 20 74 68 65 20  f r[P3] and the 
28690 73 6f 72 74 65 72 20 72 65 63 6f 72 64 20 61 72  sorter record ar
286a0 65 20 63 6f 6d 70 61 72 65 64 2e 0a 2a 2a 0a 2a  e compared..**.*
286b0 2a 20 49 66 20 65 69 74 68 65 72 20 50 33 20 6f  * If either P3 o
286c0 72 20 74 68 65 20 73 6f 72 74 65 72 20 63 6f 6e  r the sorter con
286d0 74 61 69 6e 73 20 61 20 4e 55 4c 4c 20 69 6e 20  tains a NULL in 
286e0 6f 6e 65 20 6f 66 20 74 68 65 69 72 20 73 69 67  one of their sig
286f0 6e 69 66 69 63 61 6e 74 0a 2a 2a 20 66 69 65 6c  nificant.** fiel
28700 64 73 20 28 6e 6f 74 20 63 6f 75 6e 74 69 6e 67  ds (not counting
28710 20 74 68 65 20 50 34 20 66 69 65 6c 64 73 20 61   the P4 fields a
28720 74 20 74 68 65 20 65 6e 64 20 77 68 69 63 68 20  t the end which 
28730 61 72 65 20 69 67 6e 6f 72 65 64 29 20 74 68 65  are ignored) the
28740 6e 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69  n.** the compari
28750 73 6f 6e 20 69 73 20 61 73 73 75 6d 65 64 20 74  son is assumed t
28760 6f 20 62 65 20 65 71 75 61 6c 2e 0a 2a 2a 0a 2a  o be equal..**.*
28770 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  * Fall through t
28780 6f 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  o next instructi
28790 6f 6e 20 69 66 20 74 68 65 20 74 77 6f 20 72 65  on if the two re
287a0 63 6f 72 64 73 20 63 6f 6d 70 61 72 65 20 65 71  cords compare eq
287b0 75 61 6c 20 74 6f 0a 2a 2a 20 65 61 63 68 20 6f  ual to.** each o
287c0 74 68 65 72 2e 20 20 4a 75 6d 70 20 74 6f 20 50  ther.  Jump to P
287d0 32 20 69 66 20 74 68 65 79 20 61 72 65 20 64 69  2 if they are di
287e0 66 66 65 72 65 6e 74 2e 0a 2a 2f 0a 63 61 73 65  fferent..*/.case
287f0 20 4f 50 5f 53 6f 72 74 65 72 43 6f 6d 70 61 72   OP_SorterCompar
28800 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  e: {.  VdbeCurso
28810 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73  r *pC;.  int res
28820 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 43 6f 6c 3b  ;.  int nKeyCol;
28830 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ..  pC = p->apCs
28840 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
28850 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
28860 43 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  C) );.  assert( 
28870 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
28880 49 4e 54 33 32 20 29 3b 0a 20 20 70 49 6e 33 20  INT32 );.  pIn3 
28890 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
288a0 3b 0a 20 20 6e 4b 65 79 43 6f 6c 20 3d 20 70 4f  ;.  nKeyCol = pO
288b0 70 2d 3e 70 34 2e 69 3b 0a 20 20 72 65 73 20 3d  p->p4.i;.  res =
288c0 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   0;.  rc = sqlit
288d0 65 33 56 64 62 65 53 6f 72 74 65 72 43 6f 6d 70  e3VdbeSorterComp
288e0 61 72 65 28 70 43 2c 20 70 49 6e 33 2c 20 6e 4b  are(pC, pIn3, nK
288f0 65 79 43 6f 6c 2c 20 26 72 65 73 29 3b 0a 20 20  eyCol, &res);.  
28900 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
28910 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28  res!=0,2);.  if(
28920 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
28930 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
28940 20 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20   if( res ) goto 
28950 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72  jump_to_p2;.  br
28960 65 61 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63 6f  eak;.};../* Opco
28970 64 65 3a 20 53 6f 72 74 65 72 44 61 74 61 20 50  de: SorterData P
28980 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
28990 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64  ynopsis: r[P2]=d
289a0 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  ata.**.** Write 
289b0 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
289c0 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 6f 72   the current sor
289d0 74 65 72 20 64 61 74 61 20 66 6f 72 20 73 6f 72  ter data for sor
289e0 74 65 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a  ter cursor P1..*
289f0 2a 20 54 68 65 6e 20 63 6c 65 61 72 20 74 68 65  * Then clear the
28a00 20 63 6f 6c 75 6d 6e 20 68 65 61 64 65 72 20 63   column header c
28a10 61 63 68 65 20 6f 6e 20 63 75 72 73 6f 72 20 50  ache on cursor P
28a20 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  3..**.** This op
28a30 63 6f 64 65 20 69 73 20 6e 6f 72 6d 61 6c 6c 79  code is normally
28a40 20 75 73 65 20 74 6f 20 6d 6f 76 65 20 61 20 72   use to move a r
28a50 65 63 6f 72 64 20 6f 75 74 20 6f 66 20 74 68 65  ecord out of the
28a60 20 73 6f 72 74 65 72 20 61 6e 64 20 69 6e 74 6f   sorter and into
28a70 0a 2a 2a 20 61 20 72 65 67 69 73 74 65 72 20 74  .** a register t
28a80 68 61 74 20 69 73 20 74 68 65 20 73 6f 75 72 63  hat is the sourc
28a90 65 20 66 6f 72 20 61 20 70 73 65 75 64 6f 2d 74  e for a pseudo-t
28aa0 61 62 6c 65 20 63 75 72 73 6f 72 20 63 72 65 61  able cursor crea
28ab0 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20 4f 70 65  ted using.** Ope
28ac0 6e 50 73 65 75 64 6f 2e 20 20 54 68 61 74 20 70  nPseudo.  That p
28ad0 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73  seudo-table curs
28ae0 6f 72 20 69 73 20 74 68 65 20 6f 6e 65 20 74 68  or is the one th
28af0 61 74 20 69 73 20 69 64 65 6e 74 69 66 69 65 64  at is identified
28b00 20 62 79 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72   by.** parameter
28b10 20 50 33 2e 20 20 43 6c 65 61 72 69 6e 67 20 74   P3.  Clearing t
28b20 68 65 20 50 33 20 63 6f 6c 75 6d 6e 20 63 61 63  he P3 column cac
28b30 68 65 20 61 73 20 70 61 72 74 20 6f 66 20 74 68  he as part of th
28b40 69 73 20 6f 70 63 6f 64 65 20 73 61 76 65 73 0a  is opcode saves.
28b50 2a 2a 20 75 73 20 66 72 6f 6d 20 68 61 76 69 6e  ** us from havin
28b60 67 20 74 6f 20 69 73 73 75 65 20 61 20 73 65 70  g to issue a sep
28b70 61 72 61 74 65 20 4e 75 6c 6c 52 6f 77 20 69 6e  arate NullRow in
28b80 73 74 72 75 63 74 69 6f 6e 20 74 6f 20 63 6c 65  struction to cle
28b90 61 72 20 74 68 61 74 20 63 61 63 68 65 2e 0a 2a  ar that cache..*
28ba0 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
28bb0 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75  Data: {.  VdbeCu
28bc0 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 70 4f 75  rsor *pC;..  pOu
28bd0 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
28be0 32 5d 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70  2];.  pC = p->ap
28bf0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
28c00 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72  assert( isSorter
28c10 28 70 43 29 20 29 3b 0a 20 20 72 63 20 3d 20 73  (pC) );.  rc = s
28c20 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
28c30 52 6f 77 6b 65 79 28 70 43 2c 20 70 4f 75 74 29  Rowkey(pC, pOut)
28c40 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 21 3d  ;.  assert( rc!=
28c50 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 4f  SQLITE_OK || (pO
28c60 75 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ut->flags & MEM_
28c70 42 6c 6f 62 29 20 29 3b 0a 20 20 61 73 73 65 72  Blob) );.  asser
28c80 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
28c90 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
28ca0 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 72 63 20  sor );.  if( rc 
28cb0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
28cc0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 2d 3e  _to_error;.  p->
28cd0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 33 5d 2d 3e  apCsr[pOp->p3]->
28ce0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
28cf0 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 62 72 65  CHE_STALE;.  bre
28d00 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
28d10 3a 20 52 6f 77 44 61 74 61 20 50 31 20 50 32 20  : RowData P1 P2 
28d20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
28d30 69 73 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a  is: r[P2]=data.*
28d40 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20  *.** Write into 
28d50 72 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20  register P2 the 
28d60 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20 63 6f 6e  complete row con
28d70 74 65 6e 74 20 66 6f 72 20 74 68 65 20 72 6f 77  tent for the row
28d80 20 61 74 20 0a 2a 2a 20 77 68 69 63 68 20 63 75   at .** which cu
28d90 72 73 6f 72 20 50 31 20 69 73 20 63 75 72 72 65  rsor P1 is curre
28da0 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a  ntly pointing..*
28db0 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e  * There is no in
28dc0 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20  terpretation of 
28dd0 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 49  the data.  .** I
28de0 74 20 69 73 20 6a 75 73 74 20 63 6f 70 69 65 64  t is just copied
28df0 20 6f 6e 74 6f 20 74 68 65 20 50 32 20 72 65 67   onto the P2 reg
28e00 69 73 74 65 72 20 65 78 61 63 74 6c 79 20 61 73  ister exactly as
28e10 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64   .** it is found
28e20 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
28e30 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   file..**.** If 
28e40 63 75 72 73 6f 72 20 50 31 20 69 73 20 61 6e 20  cursor P1 is an 
28e50 69 6e 64 65 78 2c 20 74 68 65 6e 20 74 68 65 20  index, then the 
28e60 63 6f 6e 74 65 6e 74 20 69 73 20 74 68 65 20 6b  content is the k
28e70 65 79 20 6f 66 20 74 68 65 20 72 6f 77 2e 0a 2a  ey of the row..*
28e80 2a 20 49 66 20 63 75 72 73 6f 72 20 50 32 20 69  * If cursor P2 i
28e90 73 20 61 20 74 61 62 6c 65 2c 20 74 68 65 6e 20  s a table, then 
28ea0 74 68 65 20 63 6f 6e 74 65 6e 74 20 65 78 74 72  the content extr
28eb0 61 63 74 65 64 20 69 73 20 74 68 65 20 64 61 74  acted is the dat
28ec0 61 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  a..**.** If the 
28ed0 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62  P1 cursor must b
28ee0 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20  e pointing to a 
28ef0 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61  valid row (not a
28f00 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66   NULL row).** of
28f10 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e   a real table, n
28f20 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  ot a pseudo-tabl
28f30 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 21 3d  e..**.** If P3!=
28f40 30 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f  0 then this opco
28f50 64 65 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f  de is allowed to
28f60 20 6d 61 6b 65 20 61 6e 20 65 70 68 65 6d 65 72   make an ephemer
28f70 61 6c 20 70 6f 69 6e 74 65 72 0a 2a 2a 20 69 6e  al pointer.** in
28f80 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
28f90 70 61 67 65 2e 20 20 54 68 61 74 20 6d 65 61 6e  page.  That mean
28fa0 73 20 74 68 61 74 20 74 68 65 20 63 6f 6e 74 65  s that the conte
28fb0 6e 74 20 6f 66 20 74 68 65 20 6f 75 74 70 75 74  nt of the output
28fc0 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 77 69 6c  .** register wil
28fd0 6c 20 62 65 20 69 6e 76 61 6c 69 64 61 74 65 64  l be invalidated
28fe0 20 61 73 20 73 6f 6f 6e 20 61 73 20 74 68 65 20   as soon as the 
28ff0 63 75 72 73 6f 72 20 6d 6f 76 65 73 20 2d 20 69  cursor moves - i
29000 6e 63 6c 75 64 69 6e 67 0a 2a 2a 20 6d 6f 76 65  ncluding.** move
29010 73 20 63 61 75 73 65 64 20 62 79 20 6f 74 68 65  s caused by othe
29020 72 20 63 75 72 73 6f 72 73 20 74 68 61 74 20 22  r cursors that "
29030 73 61 76 65 22 20 74 68 65 20 63 75 72 72 65 6e  save" the curren
29040 74 20 63 75 72 73 6f 72 73 0a 2a 2a 20 70 6f 73  t cursors.** pos
29050 69 74 69 6f 6e 20 69 6e 20 6f 72 64 65 72 20 74  ition in order t
29060 68 61 74 20 74 68 65 79 20 63 61 6e 20 77 72 69  hat they can wri
29070 74 65 20 74 6f 20 74 68 65 20 73 61 6d 65 20 74  te to the same t
29080 61 62 6c 65 2e 20 20 49 66 20 50 33 3d 3d 30 0a  able.  If P3==0.
29090 2a 2a 20 74 68 65 6e 20 61 20 63 6f 70 79 20 6f  ** then a copy o
290a0 66 20 74 68 65 20 64 61 74 61 20 69 73 20 6d 61  f the data is ma
290b0 64 65 20 69 6e 74 6f 20 6d 65 6d 6f 72 79 2e 20  de into memory. 
290c0 20 50 33 21 3d 30 20 69 73 20 66 61 73 74 65 72   P3!=0 is faster
290d0 2c 20 62 75 74 0a 2a 2a 20 50 33 3d 3d 30 20 69  , but.** P3==0 i
290e0 73 20 73 61 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49  s safer..**.** I
290f0 66 20 50 33 21 3d 30 20 74 68 65 6e 20 74 68 65  f P3!=0 then the
29100 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20   content of the 
29110 50 32 20 72 65 67 69 73 74 65 72 20 69 73 20 75  P2 register is u
29120 6e 73 75 69 74 61 62 6c 65 20 66 6f 72 20 75 73  nsuitable for us
29130 65 0a 2a 2a 20 69 6e 20 4f 50 5f 52 65 73 75 6c  e.** in OP_Resul
29140 74 20 61 6e 64 20 61 6e 79 20 4f 50 5f 52 65 73  t and any OP_Res
29150 75 6c 74 20 77 69 6c 6c 20 69 6e 76 61 6c 69 64  ult will invalid
29160 61 74 65 20 74 68 65 20 50 32 20 72 65 67 69 73  ate the P2 regis
29170 74 65 72 20 63 6f 6e 74 65 6e 74 2e 0a 2a 2a 20  ter content..** 
29180 54 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20  The P2 register 
29190 63 6f 6e 74 65 6e 74 20 69 73 20 69 6e 76 61 6c  content is inval
291a0 69 64 61 74 65 64 20 62 79 20 6f 70 63 6f 64 65  idated by opcode
291b0 73 20 6c 69 6b 65 20 4f 50 5f 46 75 6e 63 74 69  s like OP_Functi
291c0 6f 6e 20 6f 72 0a 2a 2a 20 62 79 20 61 6e 79 20  on or.** by any 
291d0 75 73 65 20 6f 66 20 61 6e 6f 74 68 65 72 20 63  use of another c
291e0 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74  ursor pointing t
291f0 6f 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65  o the same table
29200 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
29210 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75  Data: {.  VdbeCu
29220 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
29230 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 75  rsor *pCrsr;.  u
29240 33 32 20 6e 3b 0a 0a 20 20 70 4f 75 74 20 3d 20  32 n;..  pOut = 
29250 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
29260 2c 20 70 4f 70 29 3b 0a 0a 20 20 61 73 73 65 72  , pOp);..  asser
29270 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
29280 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
29290 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
292a0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
292b0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
292c0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
292d0 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
292e0 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61  YPE_BTREE );.  a
292f0 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28  ssert( isSorter(
29300 70 43 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  pC)==0 );.  asse
29310 72 74 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d  rt( pC->nullRow=
29320 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
29330 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d  pC->uc.pCursor!=
29340 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  0 );.  pCrsr = p
29350 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 0a  C->uc.pCursor;..
29360 20 20 2f 2a 20 54 68 65 20 4f 50 5f 52 6f 77 44    /* The OP_RowD
29370 61 74 61 20 6f 70 63 6f 64 65 73 20 61 6c 77 61  ata opcodes alwa
29380 79 73 20 66 6f 6c 6c 6f 77 20 4f 50 5f 4e 6f 74  ys follow OP_Not
29390 45 78 69 73 74 73 20 6f 72 0a 20 20 2a 2a 20 4f  Exists or.  ** O
293a0 50 5f 53 65 65 6b 52 6f 77 69 64 20 6f 72 20 4f  P_SeekRowid or O
293b0 50 5f 52 65 77 69 6e 64 2f 4f 70 5f 4e 65 78 74  P_Rewind/Op_Next
293c0 20 77 69 74 68 20 6e 6f 20 69 6e 74 65 72 76 65   with no interve
293d0 6e 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e  ning instruction
293e0 73 0a 20 20 2a 2a 20 74 68 61 74 20 6d 69 67 68  s.  ** that migh
293f0 74 20 69 6e 76 61 6c 69 64 61 74 65 20 74 68 65  t invalidate the
29400 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2a 20 49 66   cursor..  ** If
29410 20 74 68 69 73 20 77 68 65 72 65 20 6e 6f 74 20   this where not 
29420 74 68 65 20 63 61 73 65 2c 20 6f 6e 20 6f 66 20  the case, on of 
29430 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 73  the following as
29440 73 65 72 74 28 29 73 0a 20 20 2a 2a 20 77 6f 75  sert()s.  ** wou
29450 6c 64 20 66 61 69 6c 2e 20 20 53 68 6f 75 6c 64  ld fail.  Should
29460 20 74 68 69 73 20 65 76 65 72 20 63 68 61 6e 67   this ever chang
29470 65 20 28 62 65 63 61 75 73 65 20 6f 66 20 63 68  e (because of ch
29480 61 6e 67 65 73 20 69 6e 20 74 68 65 20 63 6f 64  anges in the cod
29490 65 0a 20 20 2a 2a 20 67 65 6e 65 72 61 74 6f 72  e.  ** generator
294a0 29 20 74 68 65 6e 20 74 68 65 20 66 69 78 20 77  ) then the fix w
294b0 6f 75 6c 64 20 62 65 20 74 6f 20 69 6e 73 65 72  ould be to inser
294c0 74 20 61 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a  t a call to.  **
294d0 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
294e0 6f 72 4d 6f 76 65 74 6f 28 29 2e 0a 20 20 2a 2f  orMoveto()..  */
294f0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64  .  assert( pC->d
29500 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
29510 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71   );.  assert( sq
29520 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
29530 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20 29  IsValid(pCrsr) )
29540 3b 0a 23 69 66 20 30 20 20 2f 2a 20 4e 6f 74 20  ;.#if 0  /* Not 
29550 72 65 71 75 69 72 65 64 20 64 75 65 20 74 6f 20  required due to 
29560 74 68 65 20 70 72 65 76 69 6f 75 73 20 74 6f 20  the previous to 
29570 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
29580 6e 74 73 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  nts */.  rc = sq
29590 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
295a0 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28  oveto(pC);.  if(
295b0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
295c0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
295d0 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66  to_error;.#endif
295e0 0a 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 42  ..  n = sqlite3B
295f0 74 72 65 65 50 61 79 6c 6f 61 64 53 69 7a 65 28  treePayloadSize(
29600 70 43 72 73 72 29 3b 0a 20 20 69 66 28 20 6e 3e  pCrsr);.  if( n>
29610 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b  (u32)db->aLimit[
29620 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
29630 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f  GTH] ){.    goto
29640 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
29650 74 65 73 74 63 61 73 65 28 20 6e 3d 3d 30 20 29  testcase( n==0 )
29660 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
29670 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65  VdbeMemFromBtree
29680 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f  (pCrsr, 0, n, pO
29690 75 74 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  ut);.  if( rc ) 
296a0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
296b0 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 21  o_error;.  if( !
296c0 70 4f 70 2d 3e 70 33 20 29 20 44 65 65 70 68 65  pOp->p3 ) Deephe
296d0 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a  meralize(pOut);.
296e0 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
296f0 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 52  BSIZE(pOut);.  R
29700 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
29710 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20  p->p2, pOut);.  
29720 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
29730 6f 64 65 3a 20 52 6f 77 69 64 20 50 31 20 50 32  ode: Rowid P1 P2
29740 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
29750 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a  is: r[P2]=rowid.
29760 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72  **.** Store in r
29770 65 67 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e  egister P2 an in
29780 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20 74  teger which is t
29790 68 65 20 6b 65 79 20 6f 66 20 74 68 65 20 74 61  he key of the ta
297a0 62 6c 65 20 65 6e 74 72 79 20 74 68 61 74 0a 2a  ble entry that.*
297b0 2a 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c  * P1 is currentl
297c0 79 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a  y point to..**.*
297d0 2a 20 50 31 20 63 61 6e 20 62 65 20 65 69 74 68  * P1 can be eith
297e0 65 72 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 74  er an ordinary t
297f0 61 62 6c 65 20 6f 72 20 61 20 76 69 72 74 75 61  able or a virtua
29800 6c 20 74 61 62 6c 65 2e 20 20 54 68 65 72 65 20  l table.  There 
29810 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 61 20  used to.** be a 
29820 73 65 70 61 72 61 74 65 20 4f 50 5f 56 52 6f 77  separate OP_VRow
29830 69 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 75 73  id opcode for us
29840 65 20 77 69 74 68 20 76 69 72 74 75 61 6c 20 74  e with virtual t
29850 61 62 6c 65 73 2c 20 62 75 74 20 74 68 69 73 0a  ables, but this.
29860 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64 65 20 6e 6f  ** one opcode no
29870 77 20 77 6f 72 6b 73 20 66 6f 72 20 62 6f 74 68  w works for both
29880 20 74 61 62 6c 65 20 74 79 70 65 73 2e 0a 2a 2f   table types..*/
29890 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69 64 3a 20  .case OP_Rowid: 
298a0 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
298b0 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56    /* out2 */.  V
298c0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
298d0 20 69 36 34 20 76 3b 0a 20 20 73 71 6c 69 74 65   i64 v;.  sqlite
298e0 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
298f0 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
29900 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
29910 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
29920 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
29930 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
29940 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
29950 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
29960 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
29970 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
29980 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
29990 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
299a0 79 70 65 21 3d 43 55 52 54 59 50 45 5f 50 53 45  ype!=CURTYPE_PSE
299b0 55 44 4f 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52  UDO || pC->nullR
299c0 6f 77 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e  ow );.  if( pC->
299d0 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 70  nullRow ){.    p
299e0 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
299f0 5f 4e 75 6c 6c 3b 0a 20 20 20 20 62 72 65 61 6b  _Null;.    break
29a00 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43  ;.  }else if( pC
29a10 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
29a20 20 29 7b 0a 20 20 20 20 76 20 3d 20 70 43 2d 3e   ){.    v = pC->
29a30 6d 6f 76 65 74 6f 54 61 72 67 65 74 3b 0a 23 69  movetoTarget;.#i
29a40 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
29a50 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
29a60 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 65   }else if( pC->e
29a70 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
29a80 5f 56 54 41 42 20 29 7b 0a 20 20 20 20 61 73 73  _VTAB ){.    ass
29a90 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 56 43 75  ert( pC->uc.pVCu
29aa0 72 21 3d 30 20 29 3b 0a 20 20 20 20 70 56 74 61  r!=0 );.    pVta
29ab0 62 20 3d 20 70 43 2d 3e 75 63 2e 70 56 43 75 72  b = pC->uc.pVCur
29ac0 2d 3e 70 56 74 61 62 3b 0a 20 20 20 20 70 4d 6f  ->pVtab;.    pMo
29ad0 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d  dule = pVtab->pM
29ae0 6f 64 75 6c 65 3b 0a 20 20 20 20 61 73 73 65 72  odule;.    asser
29af0 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77  t( pModule->xRow
29b00 69 64 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70  id );.    rc = p
29b10 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 28 70  Module->xRowid(p
29b20 43 2d 3e 75 63 2e 70 56 43 75 72 2c 20 26 76 29  C->uc.pVCur, &v)
29b30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74 61  ;.    sqlite3Vta
29b40 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c  bImportErrmsg(p,
29b50 20 70 56 74 61 62 29 3b 0a 20 20 20 20 69 66 28   pVtab);.    if(
29b60 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
29b70 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23  _due_to_error;.#
29b80 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
29b90 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
29ba0 45 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  E */.  }else{.  
29bb0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
29bc0 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
29bd0 42 54 52 45 45 20 29 3b 0a 20 20 20 20 61 73 73  BTREE );.    ass
29be0 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72  ert( pC->uc.pCur
29bf0 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 72 63  sor!=0 );.    rc
29c00 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
29c10 72 73 6f 72 52 65 73 74 6f 72 65 28 70 43 29 3b  rsorRestore(pC);
29c20 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f  .    if( rc ) go
29c30 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
29c40 65 72 72 6f 72 3b 0a 20 20 20 20 69 66 28 20 70  error;.    if( p
29c50 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  C->nullRow ){.  
29c60 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
29c70 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20  = MEM_Null;.    
29c80 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
29c90 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33 42 74     v = sqlite3Bt
29ca0 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70 43  reeIntegerKey(pC
29cb0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20  ->uc.pCursor);. 
29cc0 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d   }.  pOut->u.i =
29cd0 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   v;.  break;.}..
29ce0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 52  /* Opcode: NullR
29cf0 6f 77 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  ow P1 * * * *.**
29d00 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 63 75 72  .** Move the cur
29d10 73 6f 72 20 50 31 20 74 6f 20 61 20 6e 75 6c 6c  sor P1 to a null
29d20 20 72 6f 77 2e 20 20 41 6e 79 20 4f 50 5f 43 6f   row.  Any OP_Co
29d30 6c 75 6d 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a  lumn operations.
29d40 2a 2a 20 74 68 61 74 20 6f 63 63 75 72 20 77 68  ** that occur wh
29d50 69 6c 65 20 74 68 65 20 63 75 72 73 6f 72 20 69  ile the cursor i
29d60 73 20 6f 6e 20 74 68 65 20 6e 75 6c 6c 20 72 6f  s on the null ro
29d70 77 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a  w will always.**
29d80 20 77 72 69 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a   write a NULL..*
29d90 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f  /.case OP_NullRo
29da0 77 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  w: {.  VdbeCurso
29db0 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74  r *pC;..  assert
29dc0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
29dd0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
29de0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
29df0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
29e00 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
29e10 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  );.  pC->nullRow
29e20 20 3d 20 31 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 1;.  pC->cach
29e30 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
29e40 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 43 2d  STALE;.  if( pC-
29e50 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
29e60 50 45 5f 42 54 52 45 45 20 29 7b 0a 20 20 20 20  PE_BTREE ){.    
29e70 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70  assert( pC->uc.p
29e80 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20  Cursor!=0 );.   
29e90 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65   sqlite3BtreeCle
29ea0 61 72 43 75 72 73 6f 72 28 70 43 2d 3e 75 63 2e  arCursor(pC->uc.
29eb0 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 23 69  pCursor);.  }.#i
29ec0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
29ed0 47 0a 20 20 69 66 28 20 70 43 2d 3e 73 65 65 6b  G.  if( pC->seek
29ee0 4f 70 3d 3d 30 20 29 20 70 43 2d 3e 73 65 65 6b  Op==0 ) pC->seek
29ef0 4f 70 20 3d 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3b  Op = OP_NullRow;
29f00 0a 23 65 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b  .#endif.  break;
29f10 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
29f20 65 65 6b 45 6e 64 20 50 31 20 2a 20 2a 20 2a 20  eekEnd P1 * * * 
29f30 2a 0a 2a 2a 0a 2a 2a 20 50 6f 73 69 74 69 6f 6e  *.**.** Position
29f40 20 63 75 72 73 6f 72 20 50 31 20 61 74 20 74 68   cursor P1 at th
29f50 65 20 65 6e 64 20 6f 66 20 74 68 65 20 62 74 72  e end of the btr
29f60 65 65 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f  ee for the purpo
29f70 73 65 20 6f 66 0a 2a 2a 20 61 70 70 65 6e 64 69  se of.** appendi
29f80 6e 67 20 61 20 6e 65 77 20 65 6e 74 72 79 20 6f  ng a new entry o
29f90 6e 74 6f 20 74 68 65 20 62 74 72 65 65 2e 0a 2a  nto the btree..*
29fa0 2a 0a 2a 2a 20 49 74 20 69 73 20 61 73 73 75 6d  *.** It is assum
29fb0 65 64 20 74 68 61 74 20 74 68 65 20 63 75 72 73  ed that the curs
29fc0 6f 72 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20  or is used only 
29fd0 66 6f 72 20 61 70 70 65 6e 64 69 6e 67 20 61 6e  for appending an
29fe0 64 20 73 6f 0a 2a 2a 20 69 66 20 74 68 65 20 63  d so.** if the c
29ff0 75 72 73 6f 72 20 69 73 20 76 61 6c 69 64 2c 20  ursor is valid, 
2a000 74 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20  then the cursor 
2a010 6d 75 73 74 20 61 6c 72 65 61 64 79 20 62 65 20  must already be 
2a020 70 6f 69 6e 74 69 6e 67 0a 2a 2a 20 61 74 20 74  pointing.** at t
2a030 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 62 74  he end of the bt
2a040 72 65 65 20 61 6e 64 20 73 6f 20 6e 6f 20 63 68  ree and so no ch
2a050 61 6e 67 65 73 20 61 72 65 20 6d 61 64 65 20 74  anges are made t
2a060 6f 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 2e  o.** the cursor.
2a070 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  .*/./* Opcode: L
2a080 61 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ast P1 P2 * * *.
2a090 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75  **.** The next u
2a0a0 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20  se of the Rowid 
2a0b0 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 50 72 65  or Column or Pre
2a0c0 76 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f  v instruction fo
2a0d0 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65  r P1 .** will re
2a0e0 66 65 72 20 74 6f 20 74 68 65 20 6c 61 73 74 20  fer to the last 
2a0f0 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61 74  entry in the dat
2a100 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69  abase table or i
2a110 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20  ndex..** If the 
2a120 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69  table or index i
2a130 73 20 65 6d 70 74 79 20 61 6e 64 20 50 32 3e 30  s empty and P2>0
2a140 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65  , then jump imme
2a150 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
2a160 2a 20 49 66 20 50 32 20 69 73 20 30 20 6f 72 20  * If P2 is 0 or 
2a170 69 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  if the table or 
2a180 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70  index is not emp
2a190 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ty, fall through
2a1a0 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  .** to the follo
2a1b0 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e  wing instruction
2a1c0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
2a1d0 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
2a1e0 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64  ursor configured
2a1f0 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65   to move in reve
2a200 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72  rse order,.** fr
2a210 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72  om the end towar
2a220 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e  d the beginning.
2a230 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
2a240 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a  , the cursor is.
2a250 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  ** configured to
2a260 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e   use Prev, not N
2a270 65 78 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ext..*/.case OP_
2a280 53 65 65 6b 45 6e 64 3a 0a 63 61 73 65 20 4f 50  SeekEnd:.case OP
2a290 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20 20 20 20  _Last: {        
2a2a0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62  /* jump */.  Vdb
2a2b0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
2a2c0 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
2a2d0 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73    int res;..  as
2a2e0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
2a2f0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
2a300 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
2a310 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
2a320 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
2a330 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
2a340 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
2a350 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
2a360 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63    pCrsr = pC->uc
2a370 2e 70 43 75 72 73 6f 72 3b 0a 20 20 72 65 73 20  .pCursor;.  res 
2a380 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70  = 0;.  assert( p
2a390 43 72 73 72 21 3d 30 20 29 3b 0a 23 69 66 64 65  Crsr!=0 );.#ifde
2a3a0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
2a3b0 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f   pC->seekOp = pO
2a3c0 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69  p->opcode;.#endi
2a3d0 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  f.  if( pOp->opc
2a3e0 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 45 6e 64 20  ode==OP_SeekEnd 
2a3f0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
2a400 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20 20 20  Op->p2==0 );.   
2a410 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20   pC->seekResult 
2a420 3d 20 2d 31 3b 0a 20 20 20 20 69 66 28 20 73 71  = -1;.    if( sq
2a430 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
2a440 49 73 56 61 6c 69 64 4e 4e 28 70 43 72 73 72 29  IsValidNN(pCrsr)
2a450 20 29 7b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b   ){.      break;
2a460 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 63 20  .    }.  }.  rc 
2a470 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61  = sqlite3BtreeLa
2a480 73 74 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b  st(pCrsr, &res);
2a490 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
2a4a0 20 28 75 38 29 72 65 73 3b 0a 20 20 70 43 2d 3e   (u8)res;.  pC->
2a4b0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
2a4c0 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   0;.  pC->cacheS
2a4d0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
2a4e0 41 4c 45 3b 0a 20 20 69 66 28 20 72 63 20 29 20  ALE;.  if( rc ) 
2a4f0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2a500 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 70  o_error;.  if( p
2a510 4f 70 2d 3e 70 32 3e 30 20 29 7b 0a 20 20 20 20  Op->p2>0 ){.    
2a520 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
2a530 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69  res!=0,2);.    i
2a540 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75  f( res ) goto ju
2a550 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
2a560 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2a570 6f 64 65 3a 20 49 66 53 6d 61 6c 6c 65 72 20 50  ode: IfSmaller P
2a580 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
2a590 2a 20 45 73 74 69 6d 61 74 65 20 74 68 65 20 6e  * Estimate the n
2a5a0 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
2a5b0 20 74 68 65 20 74 61 62 6c 65 20 50 31 2e 20 20   the table P1.  
2a5c0 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
2a5d0 61 74 0a 2a 2a 20 65 73 74 69 6d 61 74 65 20 69  at.** estimate i
2a5e0 73 20 6c 65 73 73 20 74 68 61 6e 20 61 70 70 72  s less than appr
2a5f0 6f 78 69 6d 61 74 65 6c 79 20 32 2a 2a 28 30 2e  oximately 2**(0.
2a600 31 2a 50 33 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  1*P3)..*/.case O
2a610 50 5f 49 66 53 6d 61 6c 6c 65 72 3a 20 7b 20 20  P_IfSmaller: {  
2a620 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
2a630 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
2a640 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
2a650 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  Crsr;.  int res;
2a660 0a 20 20 69 36 34 20 73 7a 3b 0a 0a 20 20 61 73  .  i64 sz;..  as
2a670 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
2a680 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
2a690 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
2a6a0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
2a6b0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
2a6c0 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  !=0 );.  pCrsr =
2a6d0 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b   pC->uc.pCursor;
2a6e0 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72  .  assert( pCrsr
2a6f0 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
2a700 65 33 42 74 72 65 65 46 69 72 73 74 28 70 43 72  e3BtreeFirst(pCr
2a710 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28  sr, &res);.  if(
2a720 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
2a730 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
2a740 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20   if( res==0 ){. 
2a750 20 20 20 73 7a 20 3d 20 73 71 6c 69 74 65 33 42     sz = sqlite3B
2a760 74 72 65 65 52 6f 77 43 6f 75 6e 74 45 73 74 28  treeRowCountEst(
2a770 70 43 72 73 72 29 3b 0a 20 20 20 20 69 66 28 20  pCrsr);.    if( 
2a780 41 4c 57 41 59 53 28 73 7a 3e 3d 30 29 20 26 26  ALWAYS(sz>=0) &&
2a790 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 28 28   sqlite3LogEst((
2a7a0 75 36 34 29 73 7a 29 3c 70 4f 70 2d 3e 70 33 20  u64)sz)<pOp->p3 
2a7b0 29 20 72 65 73 20 3d 20 31 3b 0a 20 20 7d 0a 20  ) res = 1;.  }. 
2a7c0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
2a7d0 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66  (res!=0,2);.  if
2a7e0 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d  ( res ) goto jum
2a7f0 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b  p_to_p2;.  break
2a800 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ;.}.../* Opcode:
2a810 20 53 6f 72 74 65 72 53 6f 72 74 20 50 31 20 50   SorterSort P1 P
2a820 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 66  2 * * *.**.** Af
2a830 74 65 72 20 61 6c 6c 20 72 65 63 6f 72 64 73 20  ter all records 
2a840 68 61 76 65 20 62 65 65 6e 20 69 6e 73 65 72 74  have been insert
2a850 65 64 20 69 6e 74 6f 20 74 68 65 20 53 6f 72 74  ed into the Sort
2a860 65 72 20 6f 62 6a 65 63 74 0a 2a 2a 20 69 64 65  er object.** ide
2a870 6e 74 69 66 69 65 64 20 62 79 20 50 31 2c 20 69  ntified by P1, i
2a880 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64  nvoke this opcod
2a890 65 20 74 6f 20 61 63 74 75 61 6c 6c 79 20 64 6f  e to actually do
2a8a0 20 74 68 65 20 73 6f 72 74 69 6e 67 2e 0a 2a 2a   the sorting..**
2a8b0 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
2a8c0 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f  here are no reco
2a8d0 72 64 73 20 74 6f 20 62 65 20 73 6f 72 74 65 64  rds to be sorted
2a8e0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
2a8f0 6f 64 65 20 69 73 20 61 6e 20 61 6c 69 61 73 20  ode is an alias 
2a900 66 6f 72 20 4f 50 5f 53 6f 72 74 20 61 6e 64 20  for OP_Sort and 
2a910 4f 50 5f 52 65 77 69 6e 64 20 74 68 61 74 20 69  OP_Rewind that i
2a920 73 20 75 73 65 64 0a 2a 2a 20 66 6f 72 20 53 6f  s used.** for So
2a930 72 74 65 72 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f  rter objects..*/
2a940 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74  ./* Opcode: Sort
2a950 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
2a960 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64  ** This opcode d
2a970 6f 65 73 20 65 78 61 63 74 6c 79 20 74 68 65 20  oes exactly the 
2a980 73 61 6d 65 20 74 68 69 6e 67 20 61 73 20 4f 50  same thing as OP
2a990 5f 52 65 77 69 6e 64 20 65 78 63 65 70 74 20 74  _Rewind except t
2a9a0 68 61 74 0a 2a 2a 20 69 74 20 69 6e 63 72 65 6d  hat.** it increm
2a9b0 65 6e 74 73 20 61 6e 20 75 6e 64 6f 63 75 6d 65  ents an undocume
2a9c0 6e 74 65 64 20 67 6c 6f 62 61 6c 20 76 61 72 69  nted global vari
2a9d0 61 62 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65  able used for te
2a9e0 73 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72  sting..**.** Sor
2a9f0 74 69 6e 67 20 69 73 20 61 63 63 6f 6d 70 6c 69  ting is accompli
2aa00 73 68 65 64 20 62 79 20 77 72 69 74 69 6e 67 20  shed by writing 
2aa10 72 65 63 6f 72 64 73 20 69 6e 74 6f 20 61 20 73  records into a s
2aa20 6f 72 74 69 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a  orting index,.**
2aa30 20 74 68 65 6e 20 72 65 77 69 6e 64 69 6e 67 20   then rewinding 
2aa40 74 68 61 74 20 69 6e 64 65 78 20 61 6e 64 20 70  that index and p
2aa50 6c 61 79 69 6e 67 20 69 74 20 62 61 63 6b 20 66  laying it back f
2aa60 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f  rom beginning to
2aa70 0a 2a 2a 20 65 6e 64 2e 20 20 57 65 20 75 73 65  .** end.  We use
2aa80 20 74 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63   the OP_Sort opc
2aa90 6f 64 65 20 69 6e 73 74 65 61 64 20 6f 66 20 4f  ode instead of O
2aaa0 50 5f 52 65 77 69 6e 64 20 74 6f 20 64 6f 20 74  P_Rewind to do t
2aab0 68 65 0a 2a 2a 20 72 65 77 69 6e 64 69 6e 67 20  he.** rewinding 
2aac0 73 6f 20 74 68 61 74 20 74 68 65 20 67 6c 6f 62  so that the glob
2aad0 61 6c 20 76 61 72 69 61 62 6c 65 20 77 69 6c 6c  al variable will
2aae0 20 62 65 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   be incremented 
2aaf0 61 6e 64 0a 2a 2a 20 72 65 67 72 65 73 73 69 6f  and.** regressio
2ab00 6e 20 74 65 73 74 73 20 63 61 6e 20 64 65 74 65  n tests can dete
2ab10 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72  rmine whether or
2ab20 20 6e 6f 74 20 74 68 65 20 6f 70 74 69 6d 69 7a   not the optimiz
2ab30 65 72 20 69 73 0a 2a 2a 20 63 6f 72 72 65 63 74  er is.** correct
2ab40 6c 79 20 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75  ly optimizing ou
2ab50 74 20 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73 65  t sorts..*/.case
2ab60 20 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74 3a 20   OP_SorterSort: 
2ab70 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61     /* jump */.ca
2ab80 73 65 20 4f 50 5f 53 6f 72 74 3a 20 7b 20 20 20  se OP_Sort: {   
2ab90 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
2aba0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
2abb0 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73 6f 72  ST.  sqlite3_sor
2abc0 74 5f 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c  t_count++;.  sql
2abd0 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e  ite3_search_coun
2abe0 74 2d 2d 3b 0a 23 65 6e 64 69 66 0a 20 20 70 2d  t--;.#endif.  p-
2abf0 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45  >aCounter[SQLITE
2ac00 5f 53 54 4d 54 53 54 41 54 55 53 5f 53 4f 52 54  _STMTSTATUS_SORT
2ac10 5d 2b 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74  ]++;.  /* Fall t
2ac20 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 52  hrough into OP_R
2ac30 65 77 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70  ewind */.}./* Op
2ac40 63 6f 64 65 3a 20 52 65 77 69 6e 64 20 50 31 20  code: Rewind P1 
2ac50 50 32 20 2a 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20  P2 * * P5.**.** 
2ac60 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66 20  The next use of 
2ac70 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c  the Rowid or Col
2ac80 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69 6e 73 74  umn or Next inst
2ac90 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a  ruction for P1 .
2aca0 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f  ** will refer to
2acb0 20 74 68 65 20 66 69 72 73 74 20 65 6e 74 72 79   the first entry
2acc0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
2acd0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
2ace0 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65  .** If the table
2acf0 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70   or index is emp
2ad00 74 79 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  ty, jump immedia
2ad10 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49  tely to P2..** I
2ad20 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
2ad30 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74  ndex is not empt
2ad40 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  y, fall through 
2ad50 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
2ad60 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e   .** instruction
2ad70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  ..**.** If P5 is
2ad80 20 6e 6f 6e 2d 7a 65 72 6f 20 61 6e 64 20 74 68   non-zero and th
2ad90 65 20 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 65  e table is not e
2ada0 6d 70 74 79 2c 20 74 68 65 6e 20 74 68 65 20 22  mpty, then the "
2adb0 73 6b 69 70 2d 6e 65 78 74 22 0a 2a 2a 20 66 6c  skip-next".** fl
2adc0 61 67 20 69 73 20 73 65 74 20 6f 6e 20 74 68 65  ag is set on the
2add0 20 63 75 72 73 6f 72 20 73 6f 20 74 68 61 74 20   cursor so that 
2ade0 74 68 65 20 6e 65 78 74 20 4f 50 5f 4e 65 78 74  the next OP_Next
2adf0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 0a 2a 2a   instruction .**
2ae00 20 65 78 65 63 75 74 65 64 20 6f 6e 20 69 74 20   executed on it 
2ae10 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2a 0a 2a  is a no-op..**.*
2ae20 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65  * This opcode le
2ae30 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
2ae40 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f  configured to mo
2ae50 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72  ve in forward or
2ae60 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65  der,.** from the
2ae70 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72   beginning towar
2ae80 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f  d the end.  In o
2ae90 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
2aea0 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e  cursor is.** con
2aeb0 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e  figured to use N
2aec0 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a  ext, not Prev..*
2aed0 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77 69 6e 64  /.case OP_Rewind
2aee0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
2aef0 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  mp */.  VdbeCurs
2af00 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
2af10 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
2af20 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28   res;..  assert(
2af30 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
2af40 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
2af50 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
2af60 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
2af70 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
2af80 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f  ;.  assert( isSo
2af90 72 74 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e  rter(pC)==(pOp->
2afa0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65  opcode==OP_Sorte
2afb0 72 53 6f 72 74 29 20 29 3b 0a 20 20 72 65 73 20  rSort) );.  res 
2afc0 3d 20 31 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  = 1;.#ifdef SQLI
2afd0 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73  TE_DEBUG.  pC->s
2afe0 65 65 6b 4f 70 20 3d 20 4f 50 5f 52 65 77 69 6e  eekOp = OP_Rewin
2aff0 64 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20  d;.#endif.  if( 
2b000 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a  isSorter(pC) ){.
2b010 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2b020 56 64 62 65 53 6f 72 74 65 72 52 65 77 69 6e 64  VdbeSorterRewind
2b030 28 70 43 2c 20 26 72 65 73 29 3b 0a 20 20 7d 65  (pC, &res);.  }e
2b040 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
2b050 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
2b060 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
2b070 20 20 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e      pCrsr = pC->
2b080 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 20 20  uc.pCursor;.    
2b090 61 73 73 65 72 74 28 20 70 43 72 73 72 20 29 3b  assert( pCrsr );
2b0a0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
2b0b0 33 42 74 72 65 65 46 69 72 73 74 28 70 43 72 73  3BtreeFirst(pCrs
2b0c0 72 2c 20 26 72 65 73 29 3b 0a 23 69 66 6e 64 65  r, &res);.#ifnde
2b0d0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49  f SQLITE_OMIT_WI
2b0e0 4e 44 4f 57 46 55 4e 43 0a 20 20 20 20 69 66 28  NDOWFUNC.    if(
2b0f0 20 70 4f 70 2d 3e 70 35 20 29 20 73 71 6c 69 74   pOp->p5 ) sqlit
2b100 65 33 42 74 72 65 65 53 6b 69 70 4e 65 78 74 28  e3BtreeSkipNext(
2b110 70 43 72 73 72 29 3b 0a 23 65 6e 64 69 66 0a 20  pCrsr);.#endif. 
2b120 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d     pC->deferredM
2b130 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70  oveto = 0;.    p
2b140 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
2b150 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
2b160 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  }.  if( rc ) got
2b170 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2b180 72 72 6f 72 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c  rror;.  pC->null
2b190 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20  Row = (u8)res;. 
2b1a0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
2b1b0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d  >0 && pOp->p2<p-
2b1c0 3e 6e 4f 70 20 29 3b 0a 20 20 56 64 62 65 42 72  >nOp );.  VdbeBr
2b1d0 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30  anchTaken(res!=0
2b1e0 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29  ,2);.  if( res )
2b1f0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
2b200 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
2b210 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74 20 50 31   Opcode: Next P1
2b220 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
2b230 2a 2a 20 41 64 76 61 6e 63 65 20 63 75 72 73 6f  ** Advance curso
2b240 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20  r P1 so that it 
2b250 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6e 65  points to the ne
2b260 78 74 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72  xt key/data pair
2b270 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65   in its.** table
2b280 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74   or index.  If t
2b290 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65  here are no more
2b2a0 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73   key/value pairs
2b2b0 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75   then fall throu
2b2c0 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c  gh.** to the fol
2b2d0 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69  lowing instructi
2b2e0 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65 20  on.  But if the 
2b2f0 63 75 72 73 6f 72 20 61 64 76 61 6e 63 65 20 77  cursor advance w
2b300 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a  as successful,.*
2b310 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  * jump immediate
2b320 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ly to P2..**.** 
2b330 54 68 65 20 4e 65 78 74 20 6f 70 63 6f 64 65 20  The Next opcode 
2b340 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 66 6f  is only valid fo
2b350 6c 6c 6f 77 69 6e 67 20 61 6e 20 53 65 65 6b 47  llowing an SeekG
2b360 54 2c 20 53 65 65 6b 47 45 2c 20 6f 72 0a 2a 2a  T, SeekGE, or.**
2b370 20 4f 50 5f 52 65 77 69 6e 64 20 6f 70 63 6f 64   OP_Rewind opcod
2b380 65 20 75 73 65 64 20 74 6f 20 70 6f 73 69 74 69  e used to positi
2b390 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20  on the cursor.  
2b3a0 4e 65 78 74 20 69 73 20 6e 6f 74 20 61 6c 6c 6f  Next is not allo
2b3b0 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77  wed.** to follow
2b3c0 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c   SeekLT, SeekLE,
2b3d0 20 6f 72 20 4f 50 5f 4c 61 73 74 2e 0a 2a 2a 0a   or OP_Last..**.
2b3e0 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f 72  ** The P1 cursor
2b3f0 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20 72   must be for a r
2b400 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61  eal table, not a
2b410 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20   pseudo-table.  
2b420 50 31 20 6d 75 73 74 20 68 61 76 65 0a 2a 2a 20  P1 must have.** 
2b430 62 65 65 6e 20 6f 70 65 6e 65 64 20 70 72 69 6f  been opened prio
2b440 72 20 74 6f 20 74 68 69 73 20 6f 70 63 6f 64 65  r to this opcode
2b450 20 6f 72 20 74 68 65 20 70 72 6f 67 72 61 6d 20   or the program 
2b460 77 69 6c 6c 20 73 65 67 66 61 75 6c 74 2e 0a 2a  will segfault..*
2b470 2a 0a 2a 2a 20 54 68 65 20 50 33 20 76 61 6c 75  *.** The P3 valu
2b480 65 20 69 73 20 61 20 68 69 6e 74 20 74 6f 20 74  e is a hint to t
2b490 68 65 20 62 74 72 65 65 20 69 6d 70 6c 65 6d 65  he btree impleme
2b4a0 6e 74 61 74 69 6f 6e 2e 20 49 66 20 50 33 3d 3d  ntation. If P3==
2b4b0 31 2c 20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e 73  1, that.** means
2b4c0 20 50 31 20 69 73 20 61 6e 20 53 51 4c 20 69 6e   P1 is an SQL in
2b4d0 64 65 78 20 61 6e 64 20 74 68 61 74 20 74 68 69  dex and that thi
2b4e0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f  s instruction co
2b4f0 75 6c 64 20 68 61 76 65 20 62 65 65 6e 0a 2a 2a  uld have been.**
2b500 20 6f 6d 69 74 74 65 64 20 69 66 20 74 68 61 74   omitted if that
2b510 20 69 6e 64 65 78 20 68 61 64 20 62 65 65 6e 20   index had been 
2b520 75 6e 69 71 75 65 2e 20 20 50 33 20 69 73 20 75  unique.  P3 is u
2b530 73 75 61 6c 6c 79 20 30 2e 20 20 50 33 20 69 73  sually 0.  P3 is
2b540 0a 2a 2a 20 61 6c 77 61 79 73 20 65 69 74 68 65  .** always eithe
2b550 72 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20  r 0 or 1..**.** 
2b560 50 34 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20  P4 is always of 
2b570 74 79 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e  type P4_ADVANCE.
2b580 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f   The function po
2b590 69 6e 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a  inter points to.
2b5a0 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e  ** sqlite3BtreeN
2b5b0 65 78 74 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ext()..**.** If 
2b5c0 50 35 20 69 73 20 70 6f 73 69 74 69 76 65 20 61  P5 is positive a
2b5d0 6e 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  nd the jump is t
2b5e0 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74  aken, then event
2b5f0 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62   counter.** numb
2b600 65 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70  er P5-1 in the p
2b610 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
2b620 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
2b630 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
2b640 3a 20 50 72 65 76 0a 2a 2f 0a 2f 2a 20 4f 70 63  : Prev.*/./* Opc
2b650 6f 64 65 3a 20 50 72 65 76 20 50 31 20 50 32 20  ode: Prev P1 P2 
2b660 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42  P3 P4 P5.**.** B
2b670 61 63 6b 20 75 70 20 63 75 72 73 6f 72 20 50 31  ack up cursor P1
2b680 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
2b690 74 73 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f  ts to the previo
2b6a0 75 73 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72  us key/data pair
2b6b0 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65   in its.** table
2b6c0 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74   or index.  If t
2b6d0 68 65 72 65 20 69 73 20 6e 6f 20 70 72 65 76 69  here is no previ
2b6e0 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65 20 70 61  ous key/value pa
2b6f0 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  irs then fall th
2b700 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
2b710 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
2b720 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74  ction.  But if t
2b730 68 65 20 63 75 72 73 6f 72 20 62 61 63 6b 75 70  he cursor backup
2b740 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c   was successful,
2b750 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  .** jump immedia
2b760 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  tely to P2..**.*
2b770 2a 0a 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70  *.** The Prev op
2b780 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c  code is only val
2b790 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20  id following an 
2b7a0 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20  SeekLT, SeekLE, 
2b7b0 6f 72 0a 2a 2a 20 4f 50 5f 4c 61 73 74 20 6f 70  or.** OP_Last op
2b7c0 63 6f 64 65 20 75 73 65 64 20 74 6f 20 70 6f 73  code used to pos
2b7d0 69 74 69 6f 6e 20 74 68 65 20 63 75 72 73 6f 72  ition the cursor
2b7e0 2e 20 20 50 72 65 76 20 69 73 20 6e 6f 74 20 61  .  Prev is not a
2b7f0 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c  llowed.** to fol
2b800 6c 6f 77 20 53 65 65 6b 47 54 2c 20 53 65 65 6b  low SeekGT, Seek
2b810 47 45 2c 20 6f 72 20 4f 50 5f 52 65 77 69 6e 64  GE, or OP_Rewind
2b820 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63  ..**.** The P1 c
2b830 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f  ursor must be fo
2b840 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20  r a real table, 
2b850 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  not a pseudo-tab
2b860 6c 65 2e 20 20 49 66 20 50 31 20 69 73 0a 2a 2a  le.  If P1 is.**
2b870 20 6e 6f 74 20 6f 70 65 6e 20 74 68 65 6e 20 74   not open then t
2b880 68 65 20 62 65 68 61 76 69 6f 72 20 69 73 20 75  he behavior is u
2b890 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20  ndefined..**.** 
2b8a0 54 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20  The P3 value is 
2b8b0 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74  a hint to the bt
2b8c0 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ree implementati
2b8d0 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68  on. If P3==1, th
2b8e0 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69  at.** means P1 i
2b8f0 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61  s an SQL index a
2b900 6e 64 20 74 68 61 74 20 74 68 69 73 20 69 6e 73  nd that this ins
2b910 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68  truction could h
2b920 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74  ave been.** omit
2b930 74 65 64 20 69 66 20 74 68 61 74 20 69 6e 64 65  ted if that inde
2b940 78 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75  x had been uniqu
2b950 65 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c  e.  P3 is usuall
2b960 79 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61  y 0.  P3 is.** a
2b970 6c 77 61 79 73 20 65 69 74 68 65 72 20 30 20 6f  lways either 0 o
2b980 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  r 1..**.** P4 is
2b990 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20   always of type 
2b9a0 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20  P4_ADVANCE. The 
2b9b0 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  function pointer
2b9c0 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71   points to.** sq
2b9d0 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f  lite3BtreePrevio
2b9e0 75 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  us()..**.** If P
2b9f0 35 20 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e  5 is positive an
2ba00 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  d the jump is ta
2ba10 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20  ken, then event 
2ba20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65  counter.** numbe
2ba30 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72  r P5-1 in the pr
2ba40 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
2ba50 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e   is incremented.
2ba60 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
2ba70 6f 72 74 65 72 4e 65 78 74 20 50 31 20 50 32 20  orterNext P1 P2 
2ba80 2a 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69  * * P5.**.** Thi
2ba90 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a  s opcode works j
2baa0 75 73 74 20 6c 69 6b 65 20 4f 50 5f 4e 65 78 74  ust like OP_Next
2bab0 20 65 78 63 65 70 74 20 74 68 61 74 20 50 31 20   except that P1 
2bac0 6d 75 73 74 20 62 65 20 61 0a 2a 2a 20 73 6f 72  must be a.** sor
2bad0 74 65 72 20 6f 62 6a 65 63 74 20 66 6f 72 20 77  ter object for w
2bae0 68 69 63 68 20 74 68 65 20 4f 50 5f 53 6f 72 74  hich the OP_Sort
2baf0 65 72 53 6f 72 74 20 6f 70 63 6f 64 65 20 68 61  erSort opcode ha
2bb00 73 20 62 65 65 6e 0a 2a 2a 20 69 6e 76 6f 6b 65  s been.** invoke
2bb10 64 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20  d.  This opcode 
2bb20 61 64 76 61 6e 63 65 73 20 74 68 65 20 63 75 72  advances the cur
2bb30 73 6f 72 20 74 6f 20 74 68 65 20 6e 65 78 74 20  sor to the next 
2bb40 73 6f 72 74 65 64 0a 2a 2a 20 72 65 63 6f 72 64  sorted.** record
2bb50 2c 20 6f 72 20 6a 75 6d 70 73 20 74 6f 20 50 32  , or jumps to P2
2bb60 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   if there are no
2bb70 20 6d 6f 72 65 20 73 6f 72 74 65 64 20 72 65 63   more sorted rec
2bb80 6f 72 64 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ords..*/.case OP
2bb90 5f 53 6f 72 74 65 72 4e 65 78 74 3a 20 7b 20 20  _SorterNext: {  
2bba0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62  /* jump */.  Vdb
2bbb0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20  eCursor *pC;..  
2bbc0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
2bbd0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2bbe0 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29  ( isSorter(pC) )
2bbf0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
2bc00 56 64 62 65 53 6f 72 74 65 72 4e 65 78 74 28 64  VdbeSorterNext(d
2bc10 62 2c 20 70 43 29 3b 0a 20 20 67 6f 74 6f 20 6e  b, pC);.  goto n
2bc20 65 78 74 5f 74 61 69 6c 3b 0a 63 61 73 65 20 4f  ext_tail;.case O
2bc30 50 5f 50 72 65 76 3a 20 20 20 20 20 20 20 20 20  P_Prev:         
2bc40 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65   /* jump */.case
2bc50 20 4f 50 5f 4e 65 78 74 3a 20 20 20 20 20 20 20   OP_Next:       
2bc60 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
2bc70 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2bc80 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
2bc90 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
2bca0 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 41 72  sert( pOp->p5<Ar
2bcb0 72 61 79 53 69 7a 65 28 70 2d 3e 61 43 6f 75 6e  raySize(p->aCoun
2bcc0 74 65 72 29 20 29 3b 0a 20 20 70 43 20 3d 20 70  ter) );.  pC = p
2bcd0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
2bce0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
2bcf0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
2bd00 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
2bd10 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  o==0 );.  assert
2bd20 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
2bd30 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
2bd40 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2bd50 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 20  opcode!=OP_Next 
2bd60 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61  || pOp->p4.xAdva
2bd70 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65  nce==sqlite3Btre
2bd80 65 4e 65 78 74 20 29 3b 0a 20 20 61 73 73 65 72  eNext );.  asser
2bd90 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
2bda0 4f 50 5f 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e  OP_Prev || pOp->
2bdb0 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c  p4.xAdvance==sql
2bdc0 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75  ite3BtreePreviou
2bdd0 73 20 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4e  s );..  /* The N
2bde0 65 78 74 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e  ext opcode is on
2bdf0 6c 79 20 75 73 65 64 20 61 66 74 65 72 20 53 65  ly used after Se
2be00 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20 52 65  ekGT, SeekGE, Re
2be10 77 69 6e 64 2c 20 61 6e 64 20 46 6f 75 6e 64 2e  wind, and Found.
2be20 0a 20 20 2a 2a 20 54 68 65 20 50 72 65 76 20 6f  .  ** The Prev o
2be30 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75 73  pcode is only us
2be40 65 64 20 61 66 74 65 72 20 53 65 65 6b 4c 54 2c  ed after SeekLT,
2be50 20 53 65 65 6b 4c 45 2c 20 61 6e 64 20 4c 61 73   SeekLE, and Las
2be60 74 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  t. */.  assert( 
2be70 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
2be80 4e 65 78 74 0a 20 20 20 20 20 20 20 7c 7c 20 70  Next.       || p
2be90 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65  C->seekOp==OP_Se
2bea0 65 6b 47 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b  ekGT || pC->seek
2beb0 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47 45 0a 20 20  Op==OP_SeekGE.  
2bec0 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b       || pC->seek
2bed0 4f 70 3d 3d 4f 50 5f 52 65 77 69 6e 64 20 7c 7c  Op==OP_Rewind ||
2bee0 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f   pC->seekOp==OP_
2bef0 46 6f 75 6e 64 20 0a 20 20 20 20 20 20 20 7c 7c  Found .       ||
2bf00 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f   pC->seekOp==OP_
2bf10 4e 75 6c 6c 52 6f 77 29 3b 0a 20 20 61 73 73 65  NullRow);.  asse
2bf20 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21  rt( pOp->opcode!
2bf30 3d 4f 50 5f 50 72 65 76 0a 20 20 20 20 20 20 20  =OP_Prev.       
2bf40 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f  || pC->seekOp==O
2bf50 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 70 43 2d 3e  P_SeekLT || pC->
2bf60 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c  seekOp==OP_SeekL
2bf70 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e  E.       || pC->
2bf80 73 65 65 6b 4f 70 3d 3d 4f 50 5f 4c 61 73 74 20  seekOp==OP_Last 
2bf90 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73  .       || pC->s
2bfa0 65 65 6b 4f 70 3d 3d 4f 50 5f 4e 75 6c 6c 52 6f  eekOp==OP_NullRo
2bfb0 77 29 3b 0a 0a 20 20 72 63 20 3d 20 70 4f 70 2d  w);..  rc = pOp-
2bfc0 3e 70 34 2e 78 41 64 76 61 6e 63 65 28 70 43 2d  >p4.xAdvance(pC-
2bfd0 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 70 4f 70  >uc.pCursor, pOp
2bfe0 2d 3e 70 33 29 3b 0a 6e 65 78 74 5f 74 61 69 6c  ->p3);.next_tail
2bff0 3a 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  :.  pC->cacheSta
2c000 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
2c010 45 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  E;.  VdbeBranchT
2c020 61 6b 65 6e 28 72 63 3d 3d 53 51 4c 49 54 45 5f  aken(rc==SQLITE_
2c030 4f 4b 2c 32 29 3b 0a 20 20 69 66 28 20 72 63 3d  OK,2);.  if( rc=
2c040 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
2c050 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
2c060 30 3b 0a 20 20 20 20 70 2d 3e 61 43 6f 75 6e 74  0;.    p->aCount
2c070 65 72 5b 70 4f 70 2d 3e 70 35 5d 2b 2b 3b 0a 23  er[pOp->p5]++;.#
2c080 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
2c090 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 65  T.    sqlite3_se
2c0a0 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65  arch_count++;.#e
2c0b0 6e 64 69 66 0a 20 20 20 20 67 6f 74 6f 20 6a 75  ndif.    goto ju
2c0c0 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65  mp_to_p2_and_che
2c0d0 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74  ck_for_interrupt
2c0e0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 21 3d  ;.  }.  if( rc!=
2c0f0 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 20 67 6f  SQLITE_DONE ) go
2c100 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2c110 65 72 72 6f 72 3b 0a 20 20 72 63 20 3d 20 53 51  error;.  rc = SQ
2c120 4c 49 54 45 5f 4f 4b 3b 0a 20 20 70 43 2d 3e 6e  LITE_OK;.  pC->n
2c130 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 67 6f  ullRow = 1;.  go
2c140 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  to check_for_int
2c150 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70  errupt;.}../* Op
2c160 63 6f 64 65 3a 20 49 64 78 49 6e 73 65 72 74 20  code: IdxInsert 
2c170 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
2c180 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
2c190 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69  r[P2].**.** Regi
2c1a0 73 74 65 72 20 50 32 20 68 6f 6c 64 73 20 61 6e  ster P2 holds an
2c1b0 20 53 51 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d   SQL index key m
2c1c0 61 64 65 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  ade using the.**
2c1d0 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74   MakeRecord inst
2c1e0 72 75 63 74 69 6f 6e 73 2e 20 20 54 68 69 73 20  ructions.  This 
2c1f0 6f 70 63 6f 64 65 20 77 72 69 74 65 73 20 74 68  opcode writes th
2c200 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74  at key.** into t
2c210 68 65 20 69 6e 64 65 78 20 50 31 2e 20 20 44 61  he index P1.  Da
2c220 74 61 20 66 6f 72 20 74 68 65 20 65 6e 74 72 79  ta for the entry
2c230 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 49   is nil..**.** I
2c240 66 20 50 34 20 69 73 20 6e 6f 74 20 7a 65 72 6f  f P4 is not zero
2c250 2c 20 74 68 65 6e 20 69 74 20 69 73 20 74 68 65  , then it is the
2c260 20 6e 75 6d 62 65 72 20 6f 66 20 76 61 6c 75 65   number of value
2c270 73 20 69 6e 20 74 68 65 20 75 6e 70 61 63 6b 65  s in the unpacke
2c280 64 0a 2a 2a 20 6b 65 79 20 6f 66 20 72 65 67 28  d.** key of reg(
2c290 50 32 29 2e 20 20 49 6e 20 74 68 61 74 20 63 61  P2).  In that ca
2c2a0 73 65 2c 20 50 33 20 69 73 20 74 68 65 20 69 6e  se, P3 is the in
2c2b0 64 65 78 20 6f 66 20 74 68 65 20 66 69 72 73 74  dex of the first
2c2c0 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 66 6f 72   register.** for
2c2d0 20 74 68 65 20 75 6e 70 61 63 6b 65 64 20 6b 65   the unpacked ke
2c2e0 79 2e 20 20 54 68 65 20 61 76 61 69 6c 61 62 69  y.  The availabi
2c2f0 6c 69 74 79 20 6f 66 20 74 68 65 20 75 6e 70 61  lity of the unpa
2c300 63 6b 65 64 20 6b 65 79 20 63 61 6e 20 73 6f 6d  cked key can som
2c310 65 74 69 6d 65 73 0a 2a 2a 20 62 65 20 61 6e 20  etimes.** be an 
2c320 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 2a 2a  optimization..**
2c330 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74 68  .** If P5 has th
2c340 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20  e OPFLAG_APPEND 
2c350 62 69 74 20 73 65 74 2c 20 74 68 61 74 20 69 73  bit set, that is
2c360 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62   a hint to the b
2c370 2d 74 72 65 65 20 6c 61 79 65 72 0a 2a 2a 20 74  -tree layer.** t
2c380 68 61 74 20 74 68 69 73 20 69 6e 73 65 72 74 20  hat this insert 
2c390 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20  is likely to be 
2c3a0 61 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a  an append..**.**
2c3b0 20 49 66 20 50 35 20 68 61 73 20 74 68 65 20 4f   If P5 has the O
2c3c0 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 62 69  PFLAG_NCHANGE bi
2c3d0 74 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20  t set, then the 
2c3e0 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69  change counter i
2c3f0 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64  s.** incremented
2c400 20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75 63   by this instruc
2c410 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 20 4f 50  tion.  If the OP
2c420 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 62 69 74  FLAG_NCHANGE bit
2c430 20 69 73 20 63 6c 65 61 72 2c 0a 2a 2a 20 74 68   is clear,.** th
2c440 65 6e 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f  en the change co
2c450 75 6e 74 65 72 20 69 73 20 75 6e 63 68 61 6e 67  unter is unchang
2c460 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ed..**.** If the
2c470 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
2c480 45 53 55 4c 54 20 66 6c 61 67 20 6f 66 20 50 35  ESULT flag of P5
2c490 20 69 73 20 73 65 74 2c 20 74 68 65 20 69 6d 70   is set, the imp
2c4a0 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69 67 68  lementation migh
2c4b0 74 0a 2a 2a 20 72 75 6e 20 66 61 73 74 65 72 20  t.** run faster 
2c4c0 62 79 20 61 76 6f 69 64 69 6e 67 20 61 6e 20 75  by avoiding an u
2c4d0 6e 6e 65 63 65 73 73 61 72 79 20 73 65 65 6b 20  nnecessary seek 
2c4e0 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e 20 20 48  on cursor P1.  H
2c4f0 6f 77 65 76 65 72 2c 0a 2a 2a 20 74 68 65 20 4f  owever,.** the O
2c500 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
2c510 55 4c 54 20 66 6c 61 67 20 6d 75 73 74 20 6f 6e  ULT flag must on
2c520 6c 79 20 62 65 20 73 65 74 20 69 66 20 74 68 65  ly be set if the
2c530 72 65 20 68 61 76 65 20 62 65 65 6e 20 6e 6f 20  re have been no 
2c540 70 72 69 6f 72 0a 2a 2a 20 73 65 65 6b 73 20 6f  prior.** seeks o
2c550 6e 20 74 68 65 20 63 75 72 73 6f 72 20 6f 72 20  n the cursor or 
2c560 69 66 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  if the most rece
2c570 6e 74 20 73 65 65 6b 20 75 73 65 64 20 61 20 6b  nt seek used a k
2c580 65 79 20 65 71 75 69 76 61 6c 65 6e 74 0a 2a 2a  ey equivalent.**
2c590 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 54   to P2. .**.** T
2c5a0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
2c5b0 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 69  only works for i
2c5c0 6e 64 69 63 65 73 2e 20 20 54 68 65 20 65 71 75  ndices.  The equ
2c5d0 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74  ivalent instruct
2c5e0 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65  ion.** for table
2c5f0 73 20 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a  s is OP_Insert..
2c600 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  */./* Opcode: So
2c610 72 74 65 72 49 6e 73 65 72 74 20 50 31 20 50 32  rterInsert P1 P2
2c620 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
2c630 69 73 3a 20 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a  is: key=r[P2].**
2c640 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 32 20  .** Register P2 
2c650 68 6f 6c 64 73 20 61 6e 20 53 51 4c 20 69 6e 64  holds an SQL ind
2c660 65 78 20 6b 65 79 20 6d 61 64 65 20 75 73 69 6e  ex key made usin
2c670 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52 65 63  g the.** MakeRec
2c680 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 73  ord instructions
2c690 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  .  This opcode w
2c6a0 72 69 74 65 73 20 74 68 61 74 20 6b 65 79 0a 2a  rites that key.*
2c6b0 2a 20 69 6e 74 6f 20 74 68 65 20 73 6f 72 74 65  * into the sorte
2c6c0 72 20 50 31 2e 20 20 44 61 74 61 20 66 6f 72 20  r P1.  Data for 
2c6d0 74 68 65 20 65 6e 74 72 79 20 69 73 20 6e 69 6c  the entry is nil
2c6e0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
2c6f0 74 65 72 49 6e 73 65 72 74 3a 20 20 20 20 20 20  terInsert:      
2c700 20 2f 2a 20 69 6e 32 20 2a 2f 0a 63 61 73 65 20   /* in2 */.case 
2c710 4f 50 5f 49 64 78 49 6e 73 65 72 74 3a 20 7b 20  OP_IdxInsert: { 
2c720 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f         /* in2 */
2c730 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
2c740 43 3b 0a 20 20 42 74 72 65 65 50 61 79 6c 6f 61  C;.  BtreePayloa
2c750 64 20 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  d x;..  assert( 
2c760 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
2c770 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
2c780 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
2c790 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
2c7a0 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57  sqlite3VdbeIncrW
2c7b0 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 70  riteCounter(p, p
2c7c0 43 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  C);.  assert( pC
2c7d0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
2c7e0 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 28   isSorter(pC)==(
2c7f0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2c800 53 6f 72 74 65 72 49 6e 73 65 72 74 29 20 29 3b  SorterInsert) );
2c810 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
2c820 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
2c830 72 74 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20  rt( pIn2->flags 
2c840 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20  & MEM_Blob );.  
2c850 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50  if( pOp->p5 & OP
2c860 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70  FLAG_NCHANGE ) p
2c870 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 61  ->nChange++;.  a
2c880 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
2c890 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
2c8a0 45 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  EE || pOp->opcod
2c8b0 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65  e==OP_SorterInse
2c8c0 72 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  rt );.  assert( 
2c8d0 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29  pC->isTable==0 )
2c8e0 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42  ;.  rc = ExpandB
2c8f0 6c 6f 62 28 70 49 6e 32 29 3b 0a 20 20 69 66 28  lob(pIn2);.  if(
2c900 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
2c910 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
2c920 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
2c930 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72  ==OP_SorterInser
2c940 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  t ){.    rc = sq
2c950 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 57  lite3VdbeSorterW
2c960 72 69 74 65 28 70 43 2c 20 70 49 6e 32 29 3b 0a  rite(pC, pIn2);.
2c970 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 78 2e 6e    }else{.    x.n
2c980 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20  Key = pIn2->n;. 
2c990 20 20 20 78 2e 70 4b 65 79 20 3d 20 70 49 6e 32     x.pKey = pIn2
2c9a0 2d 3e 7a 3b 0a 20 20 20 20 78 2e 61 4d 65 6d 20  ->z;.    x.aMem 
2c9b0 3d 20 61 4d 65 6d 20 2b 20 70 4f 70 2d 3e 70 33  = aMem + pOp->p3
2c9c0 3b 0a 20 20 20 20 78 2e 6e 4d 65 6d 20 3d 20 28  ;.    x.nMem = (
2c9d0 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  u16)pOp->p4.i;. 
2c9e0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
2c9f0 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d 3e 75  treeInsert(pC->u
2ca00 63 2e 70 43 75 72 73 6f 72 2c 20 26 78 2c 0a 20  c.pCursor, &x,. 
2ca10 20 20 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35          (pOp->p5
2ca20 20 26 20 28 4f 50 46 4c 41 47 5f 41 50 50 45 4e   & (OPFLAG_APPEN
2ca30 44 7c 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53  D|OPFLAG_SAVEPOS
2ca40 49 54 49 4f 4e 29 29 2c 20 0a 20 20 20 20 20 20  ITION)), .      
2ca50 20 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50    ((pOp->p5 & OP
2ca60 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
2ca70 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65  LT) ? pC->seekRe
2ca80 73 75 6c 74 20 3a 20 30 29 0a 20 20 20 20 20 20  sult : 0).      
2ca90 20 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28    );.    assert(
2caa0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
2cab0 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43  eto==0 );.    pC
2cac0 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
2cad0 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d  CACHE_STALE;.  }
2cae0 0a 20 20 69 66 28 20 72 63 29 20 67 6f 74 6f 20  .  if( rc) goto 
2caf0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2cb00 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  or;.  break;.}..
2cb10 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 44 65  /* Opcode: IdxDe
2cb20 6c 65 74 65 20 50 31 20 50 32 20 50 33 20 2a 20  lete P1 P2 P3 * 
2cb30 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  *.** Synopsis: k
2cb40 65 79 3d 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a  ey=r[P2@P3].**.*
2cb50 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * The content of
2cb60 20 50 33 20 72 65 67 69 73 74 65 72 73 20 73 74   P3 registers st
2cb70 61 72 74 69 6e 67 20 61 74 20 72 65 67 69 73 74  arting at regist
2cb80 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e  er P2 form.** an
2cb90 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
2cba0 6b 65 79 2e 20 54 68 69 73 20 6f 70 63 6f 64 65  key. This opcode
2cbb0 20 72 65 6d 6f 76 65 73 20 74 68 61 74 20 65 6e   removes that en
2cbc0 74 72 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a 2a  try from the .**
2cbd0 20 69 6e 64 65 78 20 6f 70 65 6e 65 64 20 62 79   index opened by
2cbe0 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63   cursor P1..*/.c
2cbf0 61 73 65 20 4f 50 5f 49 64 78 44 65 6c 65 74 65  ase OP_IdxDelete
2cc00 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
2cc10 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
2cc20 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72   *pCrsr;.  int r
2cc30 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  es;.  UnpackedRe
2cc40 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72  cord r;..  asser
2cc50 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
2cc60 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2cc70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 70  2>0 && pOp->p2+p
2cc80 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
2cc90 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
2cca0 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  +1 );.  assert( 
2ccb0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
2ccc0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
2ccd0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
2cce0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
2ccf0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
2cd00 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
2cd10 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
2cd20 5f 42 54 52 45 45 20 29 3b 0a 20 20 73 71 6c 69  _BTREE );.  sqli
2cd30 74 65 33 56 64 62 65 49 6e 63 72 57 72 69 74 65  te3VdbeIncrWrite
2cd40 43 6f 75 6e 74 65 72 28 70 2c 20 70 43 29 3b 0a  Counter(p, pC);.
2cd50 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63    pCrsr = pC->uc
2cd60 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65  .pCursor;.  asse
2cd70 72 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a  rt( pCrsr!=0 );.
2cd80 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2cd90 35 3d 3d 30 20 29 3b 0a 20 20 72 2e 70 4b 65 79  5==0 );.  r.pKey
2cda0 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49  Info = pC->pKeyI
2cdb0 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20  nfo;.  r.nField 
2cdc0 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 33 3b 0a  = (u16)pOp->p3;.
2cdd0 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d    r.default_rc =
2cde0 20 30 3b 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26   0;.  r.aMem = &
2cdf0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
2ce00 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2ce10 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
2ce20 28 70 43 72 73 72 2c 20 26 72 2c 20 30 2c 20 30  (pCrsr, &r, 0, 0
2ce30 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20 72  , &res);.  if( r
2ce40 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
2ce50 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69  ue_to_error;.  i
2ce60 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20  f( res==0 ){.   
2ce70 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2ce80 65 65 44 65 6c 65 74 65 28 70 43 72 73 72 2c 20  eeDelete(pCrsr, 
2ce90 42 54 52 45 45 5f 41 55 58 44 45 4c 45 54 45 29  BTREE_AUXDELETE)
2cea0 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67  ;.    if( rc ) g
2ceb0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2cec0 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 61 73  _error;.  }.  as
2ced0 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
2cee0 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
2cef0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
2cf00 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
2cf10 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74    pC->seekResult
2cf20 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = 0;.  break;.}
2cf30 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 66  ../* Opcode: Def
2cf40 65 72 72 65 64 53 65 65 6b 20 50 31 20 2a 20 50  erredSeek P1 * P
2cf50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
2cf60 69 73 3a 20 4d 6f 76 65 20 50 33 20 74 6f 20 50  is: Move P3 to P
2cf70 31 2e 72 6f 77 69 64 20 69 66 20 6e 65 65 64 65  1.rowid if neede
2cf80 64 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 6e  d.**.** P1 is an
2cf90 20 6f 70 65 6e 20 69 6e 64 65 78 20 63 75 72 73   open index curs
2cfa0 6f 72 20 61 6e 64 20 50 33 20 69 73 20 61 20 63  or and P3 is a c
2cfb0 75 72 73 6f 72 20 6f 6e 20 74 68 65 20 63 6f 72  ursor on the cor
2cfc0 72 65 73 70 6f 6e 64 69 6e 67 0a 2a 2a 20 74 61  responding.** ta
2cfd0 62 6c 65 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ble.  This opcod
2cfe0 65 20 64 6f 65 73 20 61 20 64 65 66 65 72 72 65  e does a deferre
2cff0 64 20 73 65 65 6b 20 6f 66 20 74 68 65 20 50 33  d seek of the P3
2d000 20 74 61 62 6c 65 20 63 75 72 73 6f 72 0a 2a 2a   table cursor.**
2d010 20 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61 74   to the row that
2d020 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
2d030 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20  the current row 
2d040 6f 66 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  of P1..**.** Thi
2d050 73 20 69 73 20 61 20 64 65 66 65 72 72 65 64 20  s is a deferred 
2d060 73 65 65 6b 2e 20 20 4e 6f 74 68 69 6e 67 20 61  seek.  Nothing a
2d070 63 74 75 61 6c 6c 79 20 68 61 70 70 65 6e 73 20  ctually happens 
2d080 75 6e 74 69 6c 0a 2a 2a 20 74 68 65 20 63 75 72  until.** the cur
2d090 73 6f 72 20 69 73 20 75 73 65 64 20 74 6f 20 72  sor is used to r
2d0a0 65 61 64 20 61 20 72 65 63 6f 72 64 2e 20 20 54  ead a record.  T
2d0b0 68 61 74 20 77 61 79 2c 20 69 66 20 6e 6f 20 72  hat way, if no r
2d0c0 65 61 64 73 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e  eads.** occur, n
2d0d0 6f 20 75 6e 6e 65 63 65 73 73 61 72 79 20 49 2f  o unnecessary I/
2d0e0 4f 20 68 61 70 70 65 6e 73 2e 0a 2a 2a 0a 2a 2a  O happens..**.**
2d0f0 20 50 34 20 6d 61 79 20 62 65 20 61 6e 20 61 72   P4 may be an ar
2d100 72 61 79 20 6f 66 20 69 6e 74 65 67 65 72 73 20  ray of integers 
2d110 28 74 79 70 65 20 50 34 5f 49 4e 54 41 52 52 41  (type P4_INTARRA
2d120 59 29 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 2a 2a  Y) containing.**
2d130 20 6f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65   one entry for e
2d140 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  ach column in th
2d150 65 20 50 33 20 74 61 62 6c 65 2e 20 20 49 66 20  e P3 table.  If 
2d160 61 72 72 61 79 20 65 6e 74 72 79 20 61 28 69 29  array entry a(i)
2d170 0a 2a 2a 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c  .** is non-zero,
2d180 20 74 68 65 6e 20 72 65 61 64 69 6e 67 20 63 6f   then reading co
2d190 6c 75 6d 6e 20 61 28 69 29 2d 31 20 66 72 6f 6d  lumn a(i)-1 from
2d1a0 20 63 75 72 73 6f 72 20 50 33 20 69 73 20 0a 2a   cursor P3 is .*
2d1b0 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20  * equivalent to 
2d1c0 70 65 72 66 6f 72 6d 69 6e 67 20 74 68 65 20 64  performing the d
2d1d0 65 66 65 72 72 65 64 20 73 65 65 6b 20 61 6e 64  eferred seek and
2d1e0 20 74 68 65 6e 20 72 65 61 64 69 6e 67 20 63 6f   then reading co
2d1f0 6c 75 6d 6e 20 69 20 0a 2a 2a 20 66 72 6f 6d 20  lumn i .** from 
2d200 50 31 2e 20 20 54 68 69 73 20 69 6e 66 6f 72 6d  P1.  This inform
2d210 61 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20  ation is stored 
2d220 69 6e 20 50 33 20 61 6e 64 20 75 73 65 64 20 74  in P3 and used t
2d230 6f 20 72 65 64 69 72 65 63 74 0a 2a 2a 20 72 65  o redirect.** re
2d240 61 64 73 20 61 67 61 69 6e 73 74 20 50 33 20 6f  ads against P3 o
2d250 76 65 72 20 74 6f 20 50 31 2c 20 74 68 75 73 20  ver to P1, thus 
2d260 70 6f 73 73 69 62 6c 79 20 61 76 6f 69 64 69 6e  possibly avoidin
2d270 67 20 74 68 65 20 6e 65 65 64 20 74 6f 0a 2a 2a  g the need to.**
2d280 20 73 65 65 6b 20 61 6e 64 20 72 65 61 64 20 63   seek and read c
2d290 75 72 73 6f 72 20 50 33 2e 0a 2a 2f 0a 2f 2a 20  ursor P3..*/./* 
2d2a0 4f 70 63 6f 64 65 3a 20 49 64 78 52 6f 77 69 64  Opcode: IdxRowid
2d2b0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
2d2c0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
2d2d0 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 57 72 69 74  rowid.**.** Writ
2d2e0 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
2d2f0 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68  P2 an integer wh
2d300 69 63 68 20 69 73 20 74 68 65 20 6c 61 73 74 20  ich is the last 
2d310 65 6e 74 72 79 20 69 6e 20 74 68 65 20 72 65 63  entry in the rec
2d320 6f 72 64 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e  ord at.** the en
2d330 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b  d of the index k
2d340 65 79 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79  ey pointed to by
2d350 20 63 75 72 73 6f 72 20 50 31 2e 20 20 54 68 69   cursor P1.  Thi
2d360 73 20 69 6e 74 65 67 65 72 20 73 68 6f 75 6c 64  s integer should
2d370 20 62 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64   be.** the rowid
2d380 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e   of the table en
2d390 74 72 79 20 74 6f 20 77 68 69 63 68 20 74 68 69  try to which thi
2d3a0 73 20 69 6e 64 65 78 20 65 6e 74 72 79 20 70 6f  s index entry po
2d3b0 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  ints..**.** See 
2d3c0 61 6c 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b  also: Rowid, Mak
2d3d0 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65  eRecord..*/.case
2d3e0 20 4f 50 5f 44 65 66 65 72 72 65 64 53 65 65 6b   OP_DeferredSeek
2d3f0 3a 0a 63 61 73 65 20 4f 50 5f 49 64 78 52 6f 77  :.case OP_IdxRow
2d400 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  id: {           
2d410 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62  /* out2 */.  Vdb
2d420 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20  eCursor *pC;    
2d430 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
2d440 50 31 20 69 6e 64 65 78 20 63 75 72 73 6f 72 20  P1 index cursor 
2d450 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
2d460 2a 70 54 61 62 43 75 72 3b 20 20 20 20 20 20 20  *pTabCur;       
2d470 20 2f 2a 20 54 68 65 20 50 32 20 74 61 62 6c 65   /* The P2 table
2d480 20 63 75 72 73 6f 72 20 28 4f 50 5f 44 65 66 65   cursor (OP_Defe
2d490 72 72 65 64 53 65 65 6b 20 6f 6e 6c 79 29 20 2a  rredSeek only) *
2d4a0 2f 0a 20 20 69 36 34 20 72 6f 77 69 64 3b 20 20  /.  i64 rowid;  
2d4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d4c0 2f 2a 20 52 6f 77 69 64 20 74 68 61 74 20 50 31  /* Rowid that P1
2d4d0 20 63 75 72 72 65 6e 74 20 70 6f 69 6e 74 73 20   current points 
2d4e0 74 6f 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28  to */..  assert(
2d4f0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
2d500 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
2d510 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
2d520 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
2d530 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
2d540 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
2d550 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
2d560 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
2d570 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72  ert( pC->uc.pCur
2d580 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  sor!=0 );.  asse
2d590 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  rt( pC->isTable=
2d5a0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
2d5b0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
2d5c0 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  to==0 );.  asser
2d5d0 74 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  t( !pC->nullRow 
2d5e0 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
2d5f0 4f 50 5f 49 64 78 52 6f 77 69 64 20 29 3b 0a 0a  OP_IdxRowid );..
2d600 20 20 2f 2a 20 54 68 65 20 49 64 78 52 6f 77 69    /* The IdxRowi
2d610 64 20 61 6e 64 20 53 65 65 6b 20 6f 70 63 6f 64  d and Seek opcod
2d620 65 73 20 61 72 65 20 63 6f 6d 62 69 6e 65 64 20  es are combined 
2d630 62 65 63 61 75 73 65 20 6f 66 20 74 68 65 20 63  because of the c
2d640 6f 6d 6d 6f 6e 61 6c 69 74 79 0a 20 20 2a 2a 20  ommonality.  ** 
2d650 6f 66 20 73 71 6c 69 74 65 33 56 64 62 65 43 75  of sqlite3VdbeCu
2d660 72 73 6f 72 52 65 73 74 6f 72 65 28 29 20 61 6e  rsorRestore() an
2d670 64 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78  d sqlite3VdbeIdx
2d680 52 6f 77 69 64 28 29 2e 20 2a 2f 0a 20 20 72 63  Rowid(). */.  rc
2d690 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
2d6a0 72 73 6f 72 52 65 73 74 6f 72 65 28 70 43 29 3b  rsorRestore(pC);
2d6b0 0a 0a 20 20 2f 2a 20 73 71 6c 69 74 65 33 56 62  ..  /* sqlite3Vb
2d6c0 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 29  eCursorRestore()
2d6d0 20 63 61 6e 20 6f 6e 6c 79 20 66 61 69 6c 20 69   can only fail i
2d6e0 66 20 74 68 65 20 72 65 63 6f 72 64 20 68 61 73  f the record has
2d6f0 20 62 65 65 6e 20 64 65 6c 65 74 65 64 0a 20 20   been deleted.  
2d700 2a 2a 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ** out from unde
2d710 72 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 54  r the cursor.  T
2d720 68 61 74 20 77 69 6c 6c 20 6e 65 76 65 72 20 68  hat will never h
2d730 61 70 70 65 6e 73 20 66 6f 72 20 61 6e 20 49 64  appens for an Id
2d740 78 52 6f 77 69 64 0a 20 20 2a 2a 20 6f 72 20 53  xRowid.  ** or S
2d750 65 65 6b 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20  eek opcode */.  
2d760 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51  if( NEVER(rc!=SQ
2d770 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20  LITE_OK) ) goto 
2d780 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2d790 6f 72 3b 0a 0a 20 20 69 66 28 20 21 70 43 2d 3e  or;..  if( !pC->
2d7a0 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 72  nullRow ){.    r
2d7b0 6f 77 69 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f  owid = 0;  /* No
2d7c0 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20  t needed.  Only 
2d7d0 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20  used to silence 
2d7e0 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20  a warning. */.  
2d7f0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
2d800 62 65 49 64 78 52 6f 77 69 64 28 64 62 2c 20 70  beIdxRowid(db, p
2d810 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26  C->uc.pCursor, &
2d820 72 6f 77 69 64 29 3b 0a 20 20 20 20 69 66 28 20  rowid);.    if( 
2d830 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
2d840 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
2d850 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2d860 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 4f      }.    if( pO
2d870 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 44 65  p->opcode==OP_De
2d880 66 65 72 72 65 64 53 65 65 6b 20 29 7b 0a 20 20  ferredSeek ){.  
2d890 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
2d8a0 3e 70 33 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p3>=0 && pOp->p
2d8b0 33 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  3<p->nCursor );.
2d8c0 20 20 20 20 20 20 70 54 61 62 43 75 72 20 3d 20        pTabCur = 
2d8d0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 33  p->apCsr[pOp->p3
2d8e0 5d 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ];.      assert(
2d8f0 20 70 54 61 62 43 75 72 21 3d 30 20 29 3b 0a 20   pTabCur!=0 );. 
2d900 20 20 20 20 20 61 73 73 65 72 74 28 20 70 54 61       assert( pTa
2d910 62 43 75 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d  bCur->eCurType==
2d920 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
2d930 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
2d940 54 61 62 43 75 72 2d 3e 75 63 2e 70 43 75 72 73  TabCur->uc.pCurs
2d950 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 61  or!=0 );.      a
2d960 73 73 65 72 74 28 20 70 54 61 62 43 75 72 2d 3e  ssert( pTabCur->
2d970 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 20  isTable );.     
2d980 20 70 54 61 62 43 75 72 2d 3e 6e 75 6c 6c 52 6f   pTabCur->nullRo
2d990 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 54 61  w = 0;.      pTa
2d9a0 62 43 75 72 2d 3e 6d 6f 76 65 74 6f 54 61 72 67  bCur->movetoTarg
2d9b0 65 74 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20  et = rowid;.    
2d9c0 20 20 70 54 61 62 43 75 72 2d 3e 64 65 66 65 72    pTabCur->defer
2d9d0 72 65 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20  redMoveto = 1;. 
2d9e0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
2d9f0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
2da00 41 52 52 41 59 20 7c 7c 20 70 4f 70 2d 3e 70 34  ARRAY || pOp->p4
2da10 2e 61 69 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  .ai==0 );.      
2da20 70 54 61 62 43 75 72 2d 3e 61 41 6c 74 4d 61 70  pTabCur->aAltMap
2da30 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20   = pOp->p4.ai;. 
2da40 20 20 20 20 20 70 54 61 62 43 75 72 2d 3e 70 41       pTabCur->pA
2da50 6c 74 43 75 72 73 6f 72 20 3d 20 70 43 3b 0a 20  ltCursor = pC;. 
2da60 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2da70 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
2da80 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
2da90 20 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d       pOut->u.i =
2daa0 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20   rowid;.    }.  
2dab0 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
2dac0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
2dad0 4f 50 5f 49 64 78 52 6f 77 69 64 20 29 3b 0a 20  OP_IdxRowid );. 
2dae0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2daf0 6d 53 65 74 4e 75 6c 6c 28 26 61 4d 65 6d 5b 70  mSetNull(&aMem[p
2db00 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 7d 0a 20 20  Op->p2]);.  }.  
2db10 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2db20 6f 64 65 3a 20 49 64 78 47 45 20 50 31 20 50 32  ode: IdxGE P1 P2
2db30 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
2db40 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
2db50 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34  P4].**.** The P4
2db60 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73   register values
2db70 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
2db80 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  P3 form an unpac
2db90 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65  ked index .** ke
2dba0 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65  y that omits the
2dbb0 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 20 20 43   PRIMARY KEY.  C
2dbc0 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
2dbd0 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68  value against th
2dbe0 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74  e index .** that
2dbf0 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
2dc00 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
2dc10 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41  noring the PRIMA
2dc20 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 20  RY KEY or ROWID 
2dc30 0a 2a 2a 20 66 69 65 6c 64 73 20 61 74 20 74 68  .** fields at th
2dc40 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  e end..**.** If 
2dc50 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74  the P1 index ent
2dc60 72 79 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ry is greater th
2dc70 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
2dc80 68 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20  he key value.** 
2dc90 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
2dca0 20 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c    Otherwise fall
2dcb0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
2dcc0 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
2dcd0 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
2dce0 49 64 78 47 54 20 50 31 20 50 32 20 50 33 20 50  IdxGT P1 P2 P3 P
2dcf0 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
2dd00 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
2dd10 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69  *.** The P4 regi
2dd20 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69  ster values begi
2dd30 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f  nning with P3 fo
2dd40 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  rm an unpacked i
2dd50 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61  ndex .** key tha
2dd60 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d  t omits the PRIM
2dd70 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72  ARY KEY.  Compar
2dd80 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65  e this key value
2dd90 20 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64   against the ind
2dda0 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69  ex .** that P1 i
2ddb0 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
2ddc0 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e  ting to, ignorin
2ddd0 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  g the PRIMARY KE
2dde0 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66  Y or ROWID .** f
2ddf0 69 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64  ields at the end
2de00 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
2de10 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73  1 index entry is
2de20 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68   greater than th
2de30 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74  e key value.** t
2de40 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20  hen jump to P2. 
2de50 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20   Otherwise fall 
2de60 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
2de70 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
2de80 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
2de90 64 78 4c 54 20 50 31 20 50 32 20 50 33 20 50 34  dxLT P1 P2 P3 P4
2dea0 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
2deb0 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
2dec0 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
2ded0 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
2dee0 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
2def0 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
2df00 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
2df10 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41   omits the PRIMA
2df20 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e  RY KEY or ROWID.
2df30 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b    Compare this k
2df40 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74  ey value against
2df50 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 74 68  .** the index th
2df60 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  at P1 is current
2df70 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20  ly pointing to, 
2df80 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49  ignoring the PRI
2df90 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52  MARY KEY or.** R
2dfa0 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69  OWID on the P1 i
2dfb0 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ndex..**.** If t
2dfc0 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72  he P1 index entr
2dfd0 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74  y is less than t
2dfe0 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65  he key value the
2dff0 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
2e000 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20   Otherwise fall 
2e010 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
2e020 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
2e030 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
2e040 64 78 4c 45 20 50 31 20 50 32 20 50 33 20 50 34  dxLE P1 P2 P3 P4
2e050 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
2e060 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
2e070 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
2e080 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
2e090 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
2e0a0 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
2e0b0 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
2e0c0 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41   omits the PRIMA
2e0d0 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e  RY KEY or ROWID.
2e0e0 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b    Compare this k
2e0f0 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74  ey value against
2e100 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 74 68  .** the index th
2e110 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  at P1 is current
2e120 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20  ly pointing to, 
2e130 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49  ignoring the PRI
2e140 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52  MARY KEY or.** R
2e150 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69  OWID on the P1 i
2e160 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ndex..**.** If t
2e170 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72  he P1 index entr
2e180 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f  y is less than o
2e190 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
2e1a0 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75  ey value then ju
2e1b0 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 4f 74 68  mp.** to P2. Oth
2e1c0 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f  erwise fall thro
2e1d0 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
2e1e0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
2e1f0 63 61 73 65 20 4f 50 5f 49 64 78 4c 45 3a 20 20  case OP_IdxLE:  
2e200 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
2e210 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 54  */.case OP_IdxGT
2e220 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
2e230 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  mp */.case OP_Id
2e240 78 4c 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a  xLT:          /*
2e250 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50   jump */.case OP
2e260 5f 49 64 78 47 45 3a 20 20 7b 20 20 20 20 20 20  _IdxGE:  {      
2e270 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64   /* jump */.  Vd
2e280 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
2e290 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63  int res;.  Unpac
2e2a0 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20  kedRecord r;..  
2e2b0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2e2c0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
2e2d0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
2e2e0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
2e2f0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2e300 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
2e310 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64  t( pC->isOrdered
2e320 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
2e330 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
2e340 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61  YPE_BTREE );.  a
2e350 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43  ssert( pC->uc.pC
2e360 75 72 73 6f 72 21 3d 30 29 3b 0a 20 20 61 73 73  ursor!=0);.  ass
2e370 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
2e380 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
2e390 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d  assert( pOp->p5=
2e3a0 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31  =0 || pOp->p5==1
2e3b0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
2e3c0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
2e3d0 54 33 32 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49  T32 );.  r.pKeyI
2e3e0 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e  nfo = pC->pKeyIn
2e3f0 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d  fo;.  r.nField =
2e400 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b   (u16)pOp->p4.i;
2e410 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
2e420 64 65 3c 4f 50 5f 49 64 78 4c 54 20 29 7b 0a 20  de<OP_IdxLT ){. 
2e430 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
2e440 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45  opcode==OP_IdxLE
2e450 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
2e460 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20  =OP_IdxGT );.   
2e470 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20   r.default_rc = 
2e480 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  -1;.  }else{.   
2e490 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
2e4a0 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c  code==OP_IdxGE |
2e4b0 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
2e4c0 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20 20 72  P_IdxLT );.    r
2e4d0 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b  .default_rc = 0;
2e4e0 0a 20 20 7d 0a 20 20 72 2e 61 4d 65 6d 20 3d 20  .  }.  r.aMem = 
2e4f0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
2e500 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
2e510 42 55 47 0a 20 20 7b 0a 20 20 20 20 69 6e 74 20  BUG.  {.    int 
2e520 69 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  i;.    for(i=0; 
2e530 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29  i<r.nField; i++)
2e540 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
2e550 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d  memIsValid(&r.aM
2e560 65 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20 20 20  em[i]) );.      
2e570 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
2e580 4f 70 2d 3e 70 33 2b 69 2c 20 26 61 4d 65 6d 5b  Op->p3+i, &aMem[
2e590 70 4f 70 2d 3e 70 33 2b 69 5d 29 3b 0a 20 20 20  pOp->p3+i]);.   
2e5a0 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20   }.  }.#endif.  
2e5b0 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74  res = 0;  /* Not
2e5c0 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75   needed.  Only u
2e5d0 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61  sed to silence a
2e5e0 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72   warning. */.  r
2e5f0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  c = sqlite3VdbeI
2e600 64 78 4b 65 79 43 6f 6d 70 61 72 65 28 64 62 2c  dxKeyCompare(db,
2e610 20 70 43 2c 20 26 72 2c 20 26 72 65 73 29 3b 0a   pC, &r, &res);.
2e620 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f 49 64    assert( (OP_Id
2e630 78 4c 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78 4c  xLE&1)==(OP_IdxL
2e640 54 26 31 29 20 26 26 20 28 4f 50 5f 49 64 78 47  T&1) && (OP_IdxG
2e650 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78 47 54 26  E&1)==(OP_IdxGT&
2e660 31 29 20 29 3b 0a 20 20 69 66 28 20 28 70 4f 70  1) );.  if( (pOp
2e670 2d 3e 6f 70 63 6f 64 65 26 31 29 3d 3d 28 4f 50  ->opcode&1)==(OP
2e680 5f 49 64 78 4c 54 26 31 29 20 29 7b 0a 20 20 20  _IdxLT&1) ){.   
2e690 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
2e6a0 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c  code==OP_IdxLE |
2e6b0 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
2e6c0 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20 20 72  P_IdxLT );.    r
2e6d0 65 73 20 3d 20 2d 72 65 73 3b 0a 20 20 7d 65 6c  es = -res;.  }el
2e6e0 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
2e6f0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2e700 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70  IdxGE || pOp->op
2e710 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29  code==OP_IdxGT )
2e720 3b 0a 20 20 20 20 72 65 73 2b 2b 3b 0a 20 20 7d  ;.    res++;.  }
2e730 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
2e740 65 6e 28 72 65 73 3e 30 2c 32 29 3b 0a 20 20 69  en(res>0,2);.  i
2e750 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
2e760 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2e770 0a 20 20 69 66 28 20 72 65 73 3e 30 20 29 20 67  .  if( res>0 ) g
2e780 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
2e790 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2e7a0 70 63 6f 64 65 3a 20 44 65 73 74 72 6f 79 20 50  pcode: Destroy P
2e7b0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
2e7c0 2a 20 44 65 6c 65 74 65 20 61 6e 20 65 6e 74 69  * Delete an enti
2e7d0 72 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  re database tabl
2e7e0 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65  e or index whose
2e7f0 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 74 68   root page in th
2e800 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69  e database.** fi
2e810 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79 20 50  le is given by P
2e820 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62  1..**.** The tab
2e830 6c 65 20 62 65 69 6e 67 20 64 65 73 74 72 6f 79  le being destroy
2e840 65 64 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69  ed is in the mai
2e850 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
2e860 69 66 20 50 33 3d 3d 30 2e 20 20 49 66 0a 2a 2a  if P3==0.  If.**
2e870 20 50 33 3d 3d 31 20 74 68 65 6e 20 74 68 65 20   P3==1 then the 
2e880 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61  table to be clea
2e890 72 20 69 73 20 69 6e 20 74 68 65 20 61 75 78 69  r is in the auxi
2e8a0 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66  liary database f
2e8b0 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75  ile.** that is u
2e8c0 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62  sed to store tab
2e8d0 6c 65 73 20 63 72 65 61 74 65 20 75 73 69 6e 67  les create using
2e8e0 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52   CREATE TEMPORAR
2e8f0 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49  Y TABLE..**.** I
2e900 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20  f AUTOVACUUM is 
2e910 65 6e 61 62 6c 65 64 20 74 68 65 6e 20 69 74 20  enabled then it 
2e920 69 73 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74  is possible that
2e930 20 61 6e 6f 74 68 65 72 20 72 6f 6f 74 20 70 61   another root pa
2e940 67 65 0a 2a 2a 20 6d 69 67 68 74 20 62 65 20 6d  ge.** might be m
2e950 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20 6e 65  oved into the ne
2e960 77 6c 79 20 64 65 6c 65 74 65 64 20 72 6f 6f 74  wly deleted root
2e970 20 70 61 67 65 20 69 6e 20 6f 72 64 65 72 20 74   page in order t
2e980 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20 72 6f  o keep all.** ro
2e990 6f 74 20 70 61 67 65 73 20 63 6f 6e 74 69 67 75  ot pages contigu
2e9a0 6f 75 73 20 61 74 20 74 68 65 20 62 65 67 69 6e  ous at the begin
2e9b0 6e 69 6e 67 20 6f 66 20 74 68 65 20 64 61 74 61  ning of the data
2e9c0 62 61 73 65 2e 20 20 54 68 65 20 66 6f 72 6d 65  base.  The forme
2e9d0 72 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 74 68  r.** value of th
2e9e0 65 20 72 6f 6f 74 20 70 61 67 65 20 74 68 61 74  e root page that
2e9f0 20 6d 6f 76 65 64 20 2d 20 69 74 73 20 76 61 6c   moved - its val
2ea00 75 65 20 62 65 66 6f 72 65 20 74 68 65 20 6d 6f  ue before the mo
2ea10 76 65 20 6f 63 63 75 72 72 65 64 20 2d 0a 2a 2a  ve occurred -.**
2ea20 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
2ea30 67 69 73 74 65 72 20 50 32 2e 20 49 66 20 6e 6f  gister P2. If no
2ea40 20 70 61 67 65 20 6d 6f 76 65 6d 65 6e 74 20 77   page movement w
2ea50 61 73 20 72 65 71 75 69 72 65 64 20 28 62 65 63  as required (bec
2ea60 61 75 73 65 20 74 68 65 0a 2a 2a 20 74 61 62 6c  ause the.** tabl
2ea70 65 20 62 65 69 6e 67 20 64 72 6f 70 70 65 64 20  e being dropped 
2ea80 77 61 73 20 61 6c 72 65 61 64 79 20 74 68 65 20  was already the 
2ea90 6c 61 73 74 20 6f 6e 65 20 69 6e 20 74 68 65 20  last one in the 
2eaa0 64 61 74 61 62 61 73 65 29 20 74 68 65 6e 20 61  database) then a
2eab0 20 0a 2a 2a 20 7a 65 72 6f 20 69 73 20 73 74 6f   .** zero is sto
2eac0 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
2ead0 50 32 2e 20 20 49 66 20 41 55 54 4f 56 41 43 55  P2.  If AUTOVACU
2eae0 55 4d 20 69 73 20 64 69 73 61 62 6c 65 64 20 74  UM is disabled t
2eaf0 68 65 6e 20 61 20 7a 65 72 6f 20 0a 2a 2a 20 69  hen a zero .** i
2eb00 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
2eb10 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  ster P2..**.** T
2eb20 68 69 73 20 6f 70 63 6f 64 65 20 74 68 72 6f 77  his opcode throw
2eb30 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68  s an error if th
2eb40 65 72 65 20 61 72 65 20 61 6e 79 20 61 63 74 69  ere are any acti
2eb50 76 65 20 72 65 61 64 65 72 20 56 4d 73 20 77 68  ve reader VMs wh
2eb60 65 6e 0a 2a 2a 20 69 74 20 69 73 20 69 6e 76 6f  en.** it is invo
2eb70 6b 65 64 2e 20 54 68 69 73 20 69 73 20 64 6f 6e  ked. This is don
2eb80 65 20 74 6f 20 61 76 6f 69 64 20 74 68 65 20 64  e to avoid the d
2eb90 69 66 66 69 63 75 6c 74 79 20 61 73 73 6f 63 69  ifficulty associ
2eba0 61 74 65 64 20 77 69 74 68 20 0a 2a 2a 20 75 70  ated with .** up
2ebb0 64 61 74 69 6e 67 20 65 78 69 73 74 69 6e 67 20  dating existing 
2ebc0 63 75 72 73 6f 72 73 20 77 68 65 6e 20 61 20 72  cursors when a r
2ebd0 6f 6f 74 20 70 61 67 65 20 69 73 20 6d 6f 76 65  oot page is move
2ebe0 64 20 69 6e 20 61 6e 20 41 55 54 4f 56 41 43 55  d in an AUTOVACU
2ebf0 55 4d 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e  UM .** database.
2ec00 20 54 68 69 73 20 65 72 72 6f 72 20 69 73 20 74   This error is t
2ec10 68 72 6f 77 6e 20 65 76 65 6e 20 69 66 20 74 68  hrown even if th
2ec20 65 20 64 61 74 61 62 61 73 65 20 69 73 20 6e 6f  e database is no
2ec30 74 20 61 6e 20 41 55 54 4f 56 41 43 55 55 4d 20  t an AUTOVACUUM 
2ec40 0a 2a 2a 20 64 62 20 69 6e 20 6f 72 64 65 72 20  .** db in order 
2ec50 74 6f 20 61 76 6f 69 64 20 69 6e 74 72 6f 64 75  to avoid introdu
2ec60 63 69 6e 67 20 61 6e 20 69 6e 63 6f 6d 70 61 74  cing an incompat
2ec70 69 62 69 6c 69 74 79 20 62 65 74 77 65 65 6e 20  ibility between 
2ec80 61 75 74 6f 76 61 63 75 75 6d 20 0a 2a 2a 20 61  autovacuum .** a
2ec90 6e 64 20 6e 6f 6e 2d 61 75 74 6f 76 61 63 75 75  nd non-autovacuu
2eca0 6d 20 6d 6f 64 65 73 2e 0a 2a 2a 0a 2a 2a 20 53  m modes..**.** S
2ecb0 65 65 20 61 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a  ee also: Clear.*
2ecc0 2f 0a 63 61 73 65 20 4f 50 5f 44 65 73 74 72 6f  /.case OP_Destro
2ecd0 79 3a 20 7b 20 20 20 20 20 2f 2a 20 6f 75 74 32  y: {     /* out2
2ece0 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f 76 65 64   */.  int iMoved
2ecf0 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 0a 20 20  ;.  int iDb;..  
2ed00 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57  sqlite3VdbeIncrW
2ed10 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 30  riteCounter(p, 0
2ed20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
2ed30 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
2ed40 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
2ed50 3e 31 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f  >1 );.  pOut = o
2ed60 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
2ed70 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66   pOp);.  pOut->f
2ed80 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
2ed90 0a 20 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65  .  if( db->nVdbe
2eda0 52 65 61 64 20 3e 20 64 62 2d 3e 6e 56 44 65 73  Read > db->nVDes
2edb0 74 72 6f 79 2b 31 20 29 7b 0a 20 20 20 20 72 63  troy+1 ){.    rc
2edc0 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44   = SQLITE_LOCKED
2edd0 3b 0a 20 20 20 20 70 2d 3e 65 72 72 6f 72 41 63  ;.    p->errorAc
2ede0 74 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72 74 3b  tion = OE_Abort;
2edf0 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f  .    goto abort_
2ee00 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
2ee10 7d 65 6c 73 65 7b 0a 20 20 20 20 69 44 62 20 3d  }else{.    iDb =
2ee20 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 61 73   pOp->p3;.    as
2ee30 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
2ee40 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69  (p->btreeMask, i
2ee50 44 62 29 20 29 3b 0a 20 20 20 20 69 4d 6f 76 65  Db) );.    iMove
2ee60 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e  d = 0;  /* Not n
2ee70 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 74 6f 20  eeded.  Only to 
2ee80 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e  silence a warnin
2ee90 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73  g. */.    rc = s
2eea0 71 6c 69 74 65 33 42 74 72 65 65 44 72 6f 70 54  qlite3BtreeDropT
2eeb0 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44 62  able(db->aDb[iDb
2eec0 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20  ].pBt, pOp->p1, 
2eed0 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20 70 4f  &iMoved);.    pO
2eee0 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
2eef0 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  Int;.    pOut->u
2ef00 2e 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 20 20 20  .i = iMoved;.   
2ef10 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
2ef20 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
2ef30 72 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  r;.#ifndef SQLIT
2ef40 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55  E_OMIT_AUTOVACUU
2ef50 4d 0a 20 20 20 20 69 66 28 20 69 4d 6f 76 65 64  M.    if( iMoved
2ef60 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  !=0 ){.      sql
2ef70 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65  ite3RootPageMove
2ef80 64 28 64 62 2c 20 69 44 62 2c 20 69 4d 6f 76 65  d(db, iDb, iMove
2ef90 64 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20  d, pOp->p1);.   
2efa0 20 20 20 2f 2a 20 41 6c 6c 20 4f 50 5f 44 65 73     /* All OP_Des
2efb0 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73 20  troy operations 
2efc0 6f 63 63 75 72 20 6f 6e 20 74 68 65 20 73 61 6d  occur on the sam
2efd0 65 20 62 74 72 65 65 20 2a 2f 0a 20 20 20 20 20  e btree */.     
2efe0 20 61 73 73 65 72 74 28 20 72 65 73 65 74 53 63   assert( resetSc
2eff0 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 30 20 7c  hemaOnFault==0 |
2f000 7c 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46  | resetSchemaOnF
2f010 61 75 6c 74 3d 3d 69 44 62 2b 31 20 29 3b 0a 20  ault==iDb+1 );. 
2f020 20 20 20 20 20 72 65 73 65 74 53 63 68 65 6d 61       resetSchema
2f030 4f 6e 46 61 75 6c 74 20 3d 20 69 44 62 2b 31 3b  OnFault = iDb+1;
2f040 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  .    }.#endif.  
2f050 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
2f060 20 4f 70 63 6f 64 65 3a 20 43 6c 65 61 72 20 50   Opcode: Clear P
2f070 31 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65  1 P2 P3.**.** De
2f080 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74  lete all content
2f090 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  s of the databas
2f0a0 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
2f0b0 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65   whose root page
2f0c0 0a 2a 2a 20 69 6e 20 74 68 65 20 64 61 74 61 62  .** in the datab
2f0d0 61 73 65 20 66 69 6c 65 20 69 73 20 67 69 76 65  ase file is give
2f0e0 6e 20 62 79 20 50 31 2e 20 20 42 75 74 2c 20 75  n by P1.  But, u
2f0f0 6e 6c 69 6b 65 20 44 65 73 74 72 6f 79 2c 20 64  nlike Destroy, d
2f100 6f 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65 20  o not.** remove 
2f110 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
2f120 65 78 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ex from the data
2f130 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a  base file..**.**
2f140 20 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   The table being
2f150 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65   clear is in the
2f160 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
2f170 69 6c 65 20 69 66 20 50 32 3d 3d 30 2e 20 20 49  ile if P2==0.  I
2f180 66 0a 2a 2a 20 50 32 3d 3d 31 20 74 68 65 6e 20  f.** P2==1 then 
2f190 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20  the table to be 
2f1a0 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20  clear is in the 
2f1b0 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
2f1c0 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20  se file.** that 
2f1d0 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
2f1e0 20 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75   tables create u
2f1f0 73 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50  sing CREATE TEMP
2f200 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a  ORARY TABLE..**.
2f210 2a 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c  ** If the P3 val
2f220 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  ue is non-zero, 
2f230 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 72  then the table r
2f240 65 66 65 72 72 65 64 20 74 6f 20 6d 75 73 74 20  eferred to must 
2f250 62 65 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20  be an.** intkey 
2f260 74 61 62 6c 65 20 28 61 6e 20 53 51 4c 20 74 61  table (an SQL ta
2f270 62 6c 65 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65  ble, not an inde
2f280 78 29 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  x). In this case
2f290 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20   the row change 
2f2a0 0a 2a 2a 20 63 6f 75 6e 74 20 69 73 20 69 6e 63  .** count is inc
2f2b0 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20  remented by the 
2f2c0 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
2f2d0 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  n the table bein
2f2e0 67 20 63 6c 65 61 72 65 64 2e 20 0a 2a 2a 20 49  g cleared. .** I
2f2f0 66 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20  f P3 is greater 
2f300 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20  than zero, then 
2f310 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64  the value stored
2f320 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
2f330 69 73 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63 72 65  is.** also incre
2f340 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75  mented by the nu
2f350 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20  mber of rows in 
2f360 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
2f370 63 6c 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53  cleared..**.** S
2f380 65 65 20 61 6c 73 6f 3a 20 44 65 73 74 72 6f 79  ee also: Destroy
2f390 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 65 61  .*/.case OP_Clea
2f3a0 72 3a 20 7b 0a 20 20 69 6e 74 20 6e 43 68 61 6e  r: {.  int nChan
2f3b0 67 65 3b 0a 20 0a 20 20 73 71 6c 69 74 65 33 56  ge;. .  sqlite3V
2f3c0 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e  dbeIncrWriteCoun
2f3d0 74 65 72 28 70 2c 20 30 29 3b 0a 20 20 6e 43 68  ter(p, 0);.  nCh
2f3e0 61 6e 67 65 20 3d 20 30 3b 0a 20 20 61 73 73 65  ange = 0;.  asse
2f3f0 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
2f400 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
2f410 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
2f420 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 32  reeMask, pOp->p2
2f430 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ) );.  rc = sqli
2f440 74 65 33 42 74 72 65 65 43 6c 65 61 72 54 61 62  te3BtreeClearTab
2f450 6c 65 28 0a 20 20 20 20 20 20 64 62 2d 3e 61 44  le(.      db->aD
2f460 62 5b 70 4f 70 2d 3e 70 32 5d 2e 70 42 74 2c 20  b[pOp->p2].pBt, 
2f470 70 4f 70 2d 3e 70 31 2c 20 28 70 4f 70 2d 3e 70  pOp->p1, (pOp->p
2f480 33 20 3f 20 26 6e 43 68 61 6e 67 65 20 3a 20 30  3 ? &nChange : 0
2f490 29 0a 20 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  ).  );.  if( pOp
2f4a0 2d 3e 70 33 20 29 7b 0a 20 20 20 20 70 2d 3e 6e  ->p3 ){.    p->n
2f4b0 43 68 61 6e 67 65 20 2b 3d 20 6e 43 68 61 6e 67  Change += nChang
2f4c0 65 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  e;.    if( pOp->
2f4d0 70 33 3e 30 20 29 7b 0a 20 20 20 20 20 20 61 73  p3>0 ){.      as
2f4e0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
2f4f0 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29  (&aMem[pOp->p3])
2f500 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f   );.      memAbo
2f510 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61  utToChange(p, &a
2f520 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20  Mem[pOp->p3]);. 
2f530 20 20 20 20 20 61 4d 65 6d 5b 70 4f 70 2d 3e 70       aMem[pOp->p
2f540 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43 68 61 6e 67  3].u.i += nChang
2f550 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69  e;.    }.  }.  i
2f560 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
2f570 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2f580 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2f590 4f 70 63 6f 64 65 3a 20 52 65 73 65 74 53 6f 72  Opcode: ResetSor
2f5a0 74 65 72 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ter P1 * * * *.*
2f5b0 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20  *.** Delete all 
2f5c0 63 6f 6e 74 65 6e 74 73 20 66 72 6f 6d 20 74 68  contents from th
2f5d0 65 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c  e ephemeral tabl
2f5e0 65 20 6f 72 20 73 6f 72 74 65 72 0a 2a 2a 20 74  e or sorter.** t
2f5f0 68 61 74 20 69 73 20 6f 70 65 6e 20 6f 6e 20 63  hat is open on c
2f600 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20  ursor P1..**.** 
2f610 54 68 69 73 20 6f 70 63 6f 64 65 20 6f 6e 6c 79  This opcode only
2f620 20 77 6f 72 6b 73 20 66 6f 72 20 63 75 72 73 6f   works for curso
2f630 72 73 20 75 73 65 64 20 66 6f 72 20 73 6f 72 74  rs used for sort
2f640 69 6e 67 20 61 6e 64 0a 2a 2a 20 6f 70 65 6e 65  ing and.** opene
2f650 64 20 77 69 74 68 20 4f 50 5f 4f 70 65 6e 45 70  d with OP_OpenEp
2f660 68 65 6d 65 72 61 6c 20 6f 72 20 4f 50 5f 53 6f  hemeral or OP_So
2f670 72 74 65 72 4f 70 65 6e 2e 0a 2a 2f 0a 63 61 73  rterOpen..*/.cas
2f680 65 20 4f 50 5f 52 65 73 65 74 53 6f 72 74 65 72  e OP_ResetSorter
2f690 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
2f6a0 20 2a 70 43 3b 0a 20 0a 20 20 61 73 73 65 72 74   *pC;. .  assert
2f6b0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
2f6c0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
2f6d0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
2f6e0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
2f6f0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
2f700 29 3b 0a 20 20 69 66 28 20 69 73 53 6f 72 74 65  );.  if( isSorte
2f710 72 28 70 43 29 20 29 7b 0a 20 20 20 20 73 71 6c  r(pC) ){.    sql
2f720 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 52 65  ite3VdbeSorterRe
2f730 73 65 74 28 64 62 2c 20 70 43 2d 3e 75 63 2e 70  set(db, pC->uc.p
2f740 53 6f 72 74 65 72 29 3b 0a 20 20 7d 65 6c 73 65  Sorter);.  }else
2f750 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
2f760 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
2f770 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 20  YPE_BTREE );.   
2f780 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 45   assert( pC->isE
2f790 70 68 65 6d 65 72 61 6c 20 29 3b 0a 20 20 20 20  phemeral );.    
2f7a0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
2f7b0 65 43 6c 65 61 72 54 61 62 6c 65 4f 66 43 75 72  eClearTableOfCur
2f7c0 73 6f 72 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  sor(pC->uc.pCurs
2f7d0 6f 72 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20  or);.    if( rc 
2f7e0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
2f7f0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20  _to_error;.  }. 
2f800 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2f810 63 6f 64 65 3a 20 43 72 65 61 74 65 42 74 72 65  code: CreateBtre
2f820 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
2f830 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
2f840 5d 3d 72 6f 6f 74 20 69 44 62 3d 50 31 20 66 6c  ]=root iDb=P1 fl
2f850 61 67 73 3d 50 33 0a 2a 2a 0a 2a 2a 20 41 6c 6c  ags=P3.**.** All
2f860 6f 63 61 74 65 20 61 20 6e 65 77 20 62 2d 74 72  ocate a new b-tr
2f870 65 65 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64  ee in the main d
2f880 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
2f890 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a  P1==0 or in the.
2f8a0 2a 2a 20 54 45 4d 50 20 64 61 74 61 62 61 73 65  ** TEMP database
2f8b0 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f   file if P1==1 o
2f8c0 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64  r in an attached
2f8d0 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20   database if.** 
2f8e0 50 31 3e 31 2e 20 20 54 68 65 20 50 33 20 61 72  P1>1.  The P3 ar
2f8f0 67 75 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 31  gument must be 1
2f900 20 28 42 54 52 45 45 5f 49 4e 54 4b 45 59 29 20   (BTREE_INTKEY) 
2f910 66 6f 72 20 61 20 72 6f 77 69 64 20 74 61 62 6c  for a rowid tabl
2f920 65 0a 2a 2a 20 69 74 20 6d 75 73 74 20 62 65 20  e.** it must be 
2f930 32 20 28 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59  2 (BTREE_BLOBKEY
2f940 29 20 66 6f 72 20 61 6e 20 69 6e 64 65 78 20 6f  ) for an index o
2f950 72 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20  r WITHOUT ROWID 
2f960 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 6f  table..** The ro
2f970 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f  ot page number o
2f980 66 20 74 68 65 20 6e 65 77 20 62 2d 74 72 65 65  f the new b-tree
2f990 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
2f9a0 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61  gister P2..*/.ca
2f9b0 73 65 20 4f 50 5f 43 72 65 61 74 65 42 74 72 65  se OP_CreateBtre
2f9c0 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a  e: {          /*
2f9d0 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 70   out2 */.  int p
2f9e0 67 6e 6f 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a  gno;.  Db *pDb;.
2f9f0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e  .  sqlite3VdbeIn
2fa00 63 72 57 72 69 74 65 43 6f 75 6e 74 65 72 28 70  crWriteCounter(p
2fa10 2c 20 30 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f  , 0);.  pOut = o
2fa20 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
2fa30 20 70 4f 70 29 3b 0a 20 20 70 67 6e 6f 20 3d 20   pOp);.  pgno = 
2fa40 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  0;.  assert( pOp
2fa50 2d 3e 70 33 3d 3d 42 54 52 45 45 5f 49 4e 54 4b  ->p3==BTREE_INTK
2fa60 45 59 20 7c 7c 20 70 4f 70 2d 3e 70 33 3d 3d 42  EY || pOp->p3==B
2fa70 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 29 3b 0a  TREE_BLOBKEY );.
2fa80 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2fa90 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
2faa0 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
2fab0 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
2fac0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f  p->btreeMask, pO
2fad0 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65  p->p1) );.  asse
2fae0 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
2faf0 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64  =0 );.  pDb = &d
2fb00 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b  b->aDb[pOp->p1];
2fb10 0a 20 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e  .  assert( pDb->
2fb20 70 42 74 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d  pBt!=0 );.  rc =
2fb30 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65   sqlite3BtreeCre
2fb40 61 74 65 54 61 62 6c 65 28 70 44 62 2d 3e 70 42  ateTable(pDb->pB
2fb50 74 2c 20 26 70 67 6e 6f 2c 20 70 4f 70 2d 3e 70  t, &pgno, pOp->p
2fb60 33 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  3);.  if( rc ) g
2fb70 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2fb80 5f 65 72 72 6f 72 3b 0a 20 20 70 4f 75 74 2d 3e  _error;.  pOut->
2fb90 75 2e 69 20 3d 20 70 67 6e 6f 3b 0a 20 20 62 72  u.i = pgno;.  br
2fba0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2fbb0 65 3a 20 53 71 6c 45 78 65 63 20 2a 20 2a 20 2a  e: SqlExec * * *
2fbc0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 75 6e 20   P4 *.**.** Run 
2fbd0 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
2fbe0 74 20 6f 72 20 73 74 61 74 65 6d 65 6e 74 73 20  t or statements 
2fbf0 73 70 65 63 69 66 69 65 64 20 69 6e 20 74 68 65  specified in the
2fc00 20 50 34 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 63   P4 string..*/.c
2fc10 61 73 65 20 4f 50 5f 53 71 6c 45 78 65 63 3a 20  ase OP_SqlExec: 
2fc20 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 49  {.  sqlite3VdbeI
2fc30 6e 63 72 57 72 69 74 65 43 6f 75 6e 74 65 72 28  ncrWriteCounter(
2fc40 70 2c 20 30 29 3b 0a 20 20 64 62 2d 3e 6e 53 71  p, 0);.  db->nSq
2fc50 6c 45 78 65 63 2b 2b 3b 0a 20 20 72 63 20 3d 20  lExec++;.  rc = 
2fc60 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c  sqlite3_exec(db,
2fc70 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 30 2c 20 30   pOp->p4.z, 0, 0
2fc80 2c 20 30 29 3b 0a 20 20 64 62 2d 3e 6e 53 71 6c  , 0);.  db->nSql
2fc90 45 78 65 63 2d 2d 3b 0a 20 20 69 66 28 20 72 63  Exec--;.  if( rc
2fca0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
2fcb0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
2fcc0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2fcd0 65 3a 20 50 61 72 73 65 53 63 68 65 6d 61 20 50  e: ParseSchema P
2fce0 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
2fcf0 20 52 65 61 64 20 61 6e 64 20 70 61 72 73 65 20   Read and parse 
2fd00 61 6c 6c 20 65 6e 74 72 69 65 73 20 66 72 6f 6d  all entries from
2fd10 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 41 53 54   the SQLITE_MAST
2fd20 45 52 20 74 61 62 6c 65 20 6f 66 20 64 61 74 61  ER table of data
2fd30 62 61 73 65 20 50 31 0a 2a 2a 20 74 68 61 74 20  base P1.** that 
2fd40 6d 61 74 63 68 20 74 68 65 20 57 48 45 52 45 20  match the WHERE 
2fd50 63 6c 61 75 73 65 20 50 34 2e 20 20 49 66 20 50  clause P4.  If P
2fd60 34 20 69 73 20 61 20 4e 55 4c 4c 20 70 6f 69 6e  4 is a NULL poin
2fd70 74 65 72 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a  ter, then the.**
2fd80 20 65 6e 74 69 72 65 20 73 63 68 65 6d 61 20 66   entire schema f
2fd90 6f 72 20 50 31 20 69 73 20 72 65 70 61 72 73 65  or P1 is reparse
2fda0 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  d..**.** This op
2fdb0 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65  code invokes the
2fdc0 20 70 61 72 73 65 72 20 74 6f 20 63 72 65 61 74   parser to creat
2fdd0 65 20 61 20 6e 65 77 20 76 69 72 74 75 61 6c 20  e a new virtual 
2fde0 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e  machine,.** then
2fdf0 20 72 75 6e 73 20 74 68 65 20 6e 65 77 20 76 69   runs the new vi
2fe00 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20  rtual machine.  
2fe10 49 74 20 69 73 20 74 68 75 73 20 61 20 72 65 2d  It is thus a re-
2fe20 65 6e 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a  entrant opcode..
2fe30 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 73 65  */.case OP_Parse
2fe40 53 63 68 65 6d 61 3a 20 7b 0a 20 20 69 6e 74 20  Schema: {.  int 
2fe50 69 44 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  iDb;.  const cha
2fe60 72 20 2a 7a 4d 61 73 74 65 72 3b 0a 20 20 63 68  r *zMaster;.  ch
2fe70 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69 74  ar *zSql;.  Init
2fe80 44 61 74 61 20 69 6e 69 74 44 61 74 61 3b 0a 0a  Data initData;..
2fe90 20 20 2f 2a 20 41 6e 79 20 70 72 65 70 61 72 65    /* Any prepare
2fea0 64 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74  d statement that
2feb0 20 69 6e 76 6f 6b 65 73 20 74 68 69 73 20 6f 70   invokes this op
2fec0 63 6f 64 65 20 77 69 6c 6c 20 68 6f 6c 64 20 6d  code will hold m
2fed0 75 74 65 78 65 73 0a 20 20 2a 2a 20 6f 6e 20 65  utexes.  ** on e
2fee0 76 65 72 79 20 62 74 72 65 65 2e 20 20 54 68 69  very btree.  Thi
2fef0 73 20 69 73 20 61 20 70 72 65 72 65 71 75 69 73  s is a prerequis
2ff00 69 74 65 20 66 6f 72 20 69 6e 76 6f 6b 69 6e 67  ite for invoking
2ff10 20 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 49 6e   .  ** sqlite3In
2ff20 69 74 43 61 6c 6c 62 61 63 6b 28 29 2e 0a 20 20  itCallback()..  
2ff30 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
2ff40 5f 44 45 42 55 47 0a 20 20 66 6f 72 28 69 44 62  _DEBUG.  for(iDb
2ff50 3d 30 3b 20 69 44 62 3c 64 62 2d 3e 6e 44 62 3b  =0; iDb<db->nDb;
2ff60 20 69 44 62 2b 2b 29 7b 0a 20 20 20 20 61 73 73   iDb++){.    ass
2ff70 65 72 74 28 20 69 44 62 3d 3d 31 20 7c 7c 20 73  ert( iDb==1 || s
2ff80 71 6c 69 74 65 33 42 74 72 65 65 48 6f 6c 64 73  qlite3BtreeHolds
2ff90 4d 75 74 65 78 28 64 62 2d 3e 61 44 62 5b 69 44  Mutex(db->aDb[iD
2ffa0 62 5d 2e 70 42 74 29 20 29 3b 0a 20 20 7d 0a 23  b].pBt) );.  }.#
2ffb0 65 6e 64 69 66 0a 0a 20 20 69 44 62 20 3d 20 70  endif..  iDb = p
2ffc0 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74  Op->p1;.  assert
2ffd0 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c  ( iDb>=0 && iDb<
2ffe0 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
2fff0 65 72 74 28 20 44 62 48 61 73 50 72 6f 70 65 72  ert( DbHasProper
30000 74 79 28 64 62 2c 20 69 44 62 2c 20 44 42 5f 53  ty(db, iDb, DB_S
30010 63 68 65 6d 61 4c 6f 61 64 65 64 29 20 29 3b 0a  chemaLoaded) );.
30020 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
30030 4f 4d 49 54 5f 41 4c 54 45 52 54 41 42 4c 45 0a  OMIT_ALTERTABLE.
30040 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d    if( pOp->p4.z=
30050 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
30060 33 53 63 68 65 6d 61 43 6c 65 61 72 28 64 62 2d  3SchemaClear(db-
30070 3e 61 44 62 5b 69 44 62 5d 2e 70 53 63 68 65 6d  >aDb[iDb].pSchem
30080 61 29 3b 0a 20 20 20 20 64 62 2d 3e 6d 44 62 46  a);.    db->mDbF
30090 6c 61 67 73 20 26 3d 20 7e 44 42 46 4c 41 47 5f  lags &= ~DBFLAG_
300a0 53 63 68 65 6d 61 4b 6e 6f 77 6e 4f 6b 3b 0a 20  SchemaKnownOk;. 
300b0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 49     rc = sqlite3I
300c0 6e 69 74 4f 6e 65 28 64 62 2c 20 69 44 62 2c 20  nitOne(db, iDb, 
300d0 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 49 4e 49  &p->zErrMsg, INI
300e0 54 46 4c 41 47 5f 41 6c 74 65 72 54 61 62 6c 65  TFLAG_AlterTable
300f0 29 3b 0a 20 20 20 20 64 62 2d 3e 6d 44 62 46 6c  );.    db->mDbFl
30100 61 67 73 20 7c 3d 20 44 42 46 4c 41 47 5f 53 63  ags |= DBFLAG_Sc
30110 68 65 6d 61 43 68 61 6e 67 65 3b 0a 20 20 7d 65  hemaChange;.  }e
30120 6c 73 65 0a 23 65 6e 64 69 66 0a 20 20 7b 0a 20  lse.#endif.  {. 
30130 20 20 20 7a 4d 61 73 74 65 72 20 3d 20 4d 41 53     zMaster = MAS
30140 54 45 52 5f 4e 41 4d 45 3b 0a 20 20 20 20 69 6e  TER_NAME;.    in
30150 69 74 44 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a  itData.db = db;.
30160 20 20 20 20 69 6e 69 74 44 61 74 61 2e 69 44 62      initData.iDb
30170 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 20 20   = pOp->p1;.    
30180 69 6e 69 74 44 61 74 61 2e 70 7a 45 72 72 4d 73  initData.pzErrMs
30190 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73 67 3b  g = &p->zErrMsg;
301a0 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69  .    zSql = sqli
301b0 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a 20  te3MPrintf(db,. 
301c0 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e 61        "SELECT na
301d0 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73 71  me, rootpage, sq
301e0 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25 73 20 57  l FROM '%q'.%s W
301f0 48 45 52 45 20 25 73 20 4f 52 44 45 52 20 42 59  HERE %s ORDER BY
30200 20 72 6f 77 69 64 22 2c 0a 20 20 20 20 20 20 20   rowid",.       
30210 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 44 62  db->aDb[iDb].zDb
30220 53 4e 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20  SName, zMaster, 
30230 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20  pOp->p4.z);.    
30240 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20  if( zSql==0 ){. 
30250 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
30260 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 3b 0a 20 20 20  _NOMEM_BKPT;.   
30270 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73   }else{.      as
30280 73 65 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e 62  sert( db->init.b
30290 75 73 79 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  usy==0 );.      
302a0 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20  db->init.busy = 
302b0 31 3b 0a 20 20 20 20 20 20 69 6e 69 74 44 61 74  1;.      initDat
302c0 61 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b  a.rc = SQLITE_OK
302d0 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
302e0 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65  !db->mallocFaile
302f0 64 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  d );.      rc = 
30300 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c  sqlite3_exec(db,
30310 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33 49 6e   zSql, sqlite3In
30320 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e 69  itCallback, &ini
30330 74 44 61 74 61 2c 20 30 29 3b 0a 20 20 20 20 20  tData, 0);.     
30340 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
30350 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69 74 44 61  OK ) rc = initDa
30360 74 61 2e 72 63 3b 0a 20 20 20 20 20 20 73 71 6c  ta.rc;.      sql
30370 69 74 65 33 44 62 46 72 65 65 4e 4e 28 64 62 2c  ite3DbFreeNN(db,
30380 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 64 62   zSql);.      db
30390 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b  ->init.busy = 0;
303a0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28  .    }.  }.  if(
303b0 20 72 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74   rc ){.    sqlit
303c0 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61  e3ResetAllSchema
303d0 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62  sOfConnection(db
303e0 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  );.    if( rc==S
303f0 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20  QLITE_NOMEM ){. 
30400 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d       goto no_mem
30410 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f  ;.    }.    goto
30420 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
30430 72 6f 72 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ror;.  }.  break
30440 3b 20 20 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69  ;  .}..#if !defi
30450 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
30460 41 4e 41 4c 59 5a 45 29 0a 2f 2a 20 4f 70 63 6f  ANALYZE)./* Opco
30470 64 65 3a 20 4c 6f 61 64 41 6e 61 6c 79 73 69 73  de: LoadAnalysis
30480 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
30490 2a 20 52 65 61 64 20 74 68 65 20 73 71 6c 69 74  * Read the sqlit
304a0 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20 66 6f  e_stat1 table fo
304b0 72 20 64 61 74 61 62 61 73 65 20 50 31 20 61 6e  r database P1 an
304c0 64 20 6c 6f 61 64 20 74 68 65 20 63 6f 6e 74 65  d load the conte
304d0 6e 74 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61  nt.** of that ta
304e0 62 6c 65 20 69 6e 74 6f 20 74 68 65 20 69 6e 74  ble into the int
304f0 65 72 6e 61 6c 20 69 6e 64 65 78 20 68 61 73 68  ernal index hash
30500 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 77 69   table.  This wi
30510 6c 6c 20 63 61 75 73 65 0a 2a 2a 20 74 68 65 20  ll cause.** the 
30520 61 6e 61 6c 79 73 69 73 20 74 6f 20 62 65 20 75  analysis to be u
30530 73 65 64 20 77 68 65 6e 20 70 72 65 70 61 72 69  sed when prepari
30540 6e 67 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e  ng all subsequen
30550 74 20 71 75 65 72 69 65 73 2e 0a 2a 2f 0a 63 61  t queries..*/.ca
30560 73 65 20 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79 73  se OP_LoadAnalys
30570 69 73 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20  is: {.  assert( 
30580 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
30590 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
305a0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 41  .  rc = sqlite3A
305b0 6e 61 6c 79 73 69 73 4c 6f 61 64 28 64 62 2c 20  nalysisLoad(db, 
305c0 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 69 66 28 20  pOp->p1);.  if( 
305d0 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
305e0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
305f0 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64 69  break;  .}.#endi
30600 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51  f /* !defined(SQ
30610 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a  LITE_OMIT_ANALYZ
30620 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  E) */../* Opcode
30630 3a 20 44 72 6f 70 54 61 62 6c 65 20 50 31 20 2a  : DropTable P1 *
30640 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   * P4 *.**.** Re
30650 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61  move the interna
30660 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61  l (in-memory) da
30670 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68  ta structures th
30680 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74  at describe.** t
30690 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 50  he table named P
306a0 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  4 in database P1
306b0 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65  .  This is calle
306c0 64 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 0a  d after a table.
306d0 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66 72  ** is dropped fr
306e0 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74  om disk (using t
306f0 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64  he Destroy opcod
30700 65 29 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b  e) in order to k
30710 65 65 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65  eep .** the inte
30720 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74  rnal representat
30730 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63  ion of the.** sc
30740 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20  hema consistent 
30750 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20  with what is on 
30760 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  disk..*/.case OP
30770 5f 44 72 6f 70 54 61 62 6c 65 3a 20 7b 0a 20 20  _DropTable: {.  
30780 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57  sqlite3VdbeIncrW
30790 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 30  riteCounter(p, 0
307a0 29 3b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69  );.  sqlite3Unli
307b0 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65  nkAndDeleteTable
307c0 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
307d0 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61  p->p4.z);.  brea
307e0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
307f0 20 44 72 6f 70 49 6e 64 65 78 20 50 31 20 2a 20   DropIndex P1 * 
30800 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d  * P4 *.**.** Rem
30810 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  ove the internal
30820 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74   (in-memory) dat
30830 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61  a structures tha
30840 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68  t describe.** th
30850 65 20 69 6e 64 65 78 20 6e 61 6d 65 64 20 50 34  e index named P4
30860 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e   in database P1.
30870 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64    This is called
30880 20 61 66 74 65 72 20 61 6e 20 69 6e 64 65 78 0a   after an index.
30890 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66 72  ** is dropped fr
308a0 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74  om disk (using t
308b0 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64  he Destroy opcod
308c0 65 29 0a 2a 2a 20 69 6e 20 6f 72 64 65 72 20 74  e).** in order t
308d0 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72  o keep the inter
308e0 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69  nal representati
308f0 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68  on of the.** sch
30900 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77  ema consistent w
30910 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64  ith what is on d
30920 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  isk..*/.case OP_
30930 44 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73  DropIndex: {.  s
30940 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57 72  qlite3VdbeIncrWr
30950 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 30 29  iteCounter(p, 0)
30960 3b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  ;.  sqlite3Unlin
30970 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28  kAndDeleteIndex(
30980 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  db, pOp->p1, pOp
30990 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b  ->p4.z);.  break
309a0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
309b0 44 72 6f 70 54 72 69 67 67 65 72 20 50 31 20 2a  DropTrigger P1 *
309c0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   * P4 *.**.** Re
309d0 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61  move the interna
309e0 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61  l (in-memory) da
309f0 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68  ta structures th
30a00 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74  at describe.** t
30a10 68 65 20 74 72 69 67 67 65 72 20 6e 61 6d 65 64  he trigger named
30a20 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20   P4 in database 
30a30 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c  P1.  This is cal
30a40 6c 65 64 20 61 66 74 65 72 20 61 20 74 72 69 67  led after a trig
30a50 67 65 72 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65  ger.** is droppe
30a60 64 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69  d from disk (usi
30a70 6e 67 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f  ng the Destroy o
30a80 70 63 6f 64 65 29 20 69 6e 20 6f 72 64 65 72 20  pcode) in order 
30a90 74 6f 20 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20  to keep .** the 
30aa0 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65  internal represe
30ab0 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  ntation of the.*
30ac0 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74  * schema consist
30ad0 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73  ent with what is
30ae0 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73   on disk..*/.cas
30af0 65 20 4f 50 5f 44 72 6f 70 54 72 69 67 67 65 72  e OP_DropTrigger
30b00 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  : {.  sqlite3Vdb
30b10 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e 74 65  eIncrWriteCounte
30b20 72 28 70 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74  r(p, 0);.  sqlit
30b30 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
30b40 65 54 72 69 67 67 65 72 28 64 62 2c 20 70 4f 70  eTrigger(db, pOp
30b50 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ->p1, pOp->p4.z)
30b60 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23  ;.  break;.}...#
30b70 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
30b80 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  IT_INTEGRITY_CHE
30b90 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  CK./* Opcode: In
30ba0 74 65 67 72 69 74 79 43 6b 20 50 31 20 50 32 20  tegrityCk P1 P2 
30bb0 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 44  P3 P4 P5.**.** D
30bc0 6f 20 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66  o an analysis of
30bd0 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 6f   the currently o
30be0 70 65 6e 20 64 61 74 61 62 61 73 65 2e 20 20 53  pen database.  S
30bf0 74 6f 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73  tore in.** regis
30c00 74 65 72 20 50 31 20 74 68 65 20 74 65 78 74 20  ter P1 the text 
30c10 6f 66 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73  of an error mess
30c20 61 67 65 20 64 65 73 63 72 69 62 69 6e 67 20 61  age describing a
30c30 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20  ny problems..** 
30c40 49 66 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61  If no problems a
30c50 72 65 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20  re found, store 
30c60 61 20 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73 74  a NULL in regist
30c70 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  er P1..**.** The
30c80 20 72 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e   register P3 con
30c90 74 61 69 6e 73 20 6f 6e 65 20 6c 65 73 73 20 74  tains one less t
30ca0 68 61 6e 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  han the maximum 
30cb0 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 77 65  number of allowe
30cc0 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41 74 20  d errors..** At 
30cd0 6d 6f 73 74 20 72 65 67 28 50 33 29 20 65 72 72  most reg(P3) err
30ce0 6f 72 73 20 77 69 6c 6c 20 62 65 20 72 65 70 6f  ors will be repo
30cf0 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65  rted..** In othe
30d00 72 20 77 6f 72 64 73 2c 20 74 68 65 20 61 6e 61  r words, the ana
30d10 6c 79 73 69 73 20 73 74 6f 70 73 20 61 73 20 73  lysis stops as s
30d20 6f 6f 6e 20 61 73 20 72 65 67 28 50 31 29 20 65  oon as reg(P1) e
30d30 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20 73 65  rrors are .** se
30d40 65 6e 2e 20 20 52 65 67 28 50 31 29 20 69 73 20  en.  Reg(P1) is 
30d50 75 70 64 61 74 65 64 20 77 69 74 68 20 74 68 65  updated with the
30d60 20 6e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72   number of error
30d70 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a  s remaining..**.
30d80 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61 67 65  ** The root page
30d90 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c 6c 20   numbers of all 
30da0 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20 64 61  tables in the da
30db0 74 61 62 61 73 65 20 61 72 65 20 69 6e 74 65 67  tabase are integ
30dc0 65 72 73 0a 2a 2a 20 73 74 6f 72 65 64 20 69 6e  ers.** stored in
30dd0 20 50 34 5f 49 4e 54 41 52 52 41 59 20 61 72 67   P4_INTARRAY arg
30de0 75 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ument..**.** If 
30df0 50 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P5 is not zero, 
30e00 74 68 65 20 63 68 65 63 6b 20 69 73 20 64 6f 6e  the check is don
30e10 65 20 6f 6e 20 74 68 65 20 61 75 78 69 6c 69 61  e on the auxilia
30e20 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66  ry database.** f
30e30 69 6c 65 2c 20 6e 6f 74 20 74 68 65 20 6d 61 69  ile, not the mai
30e40 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  n database file.
30e50 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
30e60 64 65 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d  de is used to im
30e70 70 6c 65 6d 65 6e 74 20 74 68 65 20 69 6e 74 65  plement the inte
30e80 67 72 69 74 79 5f 63 68 65 63 6b 20 70 72 61 67  grity_check prag
30e90 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ma..*/.case OP_I
30ea0 6e 74 65 67 72 69 74 79 43 6b 3a 20 7b 0a 20 20  ntegrityCk: {.  
30eb0 69 6e 74 20 6e 52 6f 6f 74 3b 20 20 20 20 20 20  int nRoot;      
30ec0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62  /* Number of tab
30ed0 6c 65 73 20 74 6f 20 63 68 65 63 6b 2e 20 20 28  les to check.  (
30ee0 4e 75 6d 62 65 72 20 6f 66 20 72 6f 6f 74 20 70  Number of root p
30ef0 61 67 65 73 2e 29 20 2a 2f 0a 20 20 69 6e 74 20  ages.) */.  int 
30f00 2a 61 52 6f 6f 74 3b 20 20 20 20 20 2f 2a 20 41  *aRoot;     /* A
30f10 72 72 61 79 20 6f 66 20 72 6f 6f 74 70 61 67 65  rray of rootpage
30f20 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 74 61 62   numbers for tab
30f30 6c 65 73 20 74 6f 20 62 65 20 63 68 65 63 6b 65  les to be checke
30f40 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b  d */.  int nErr;
30f50 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
30f60 20 6f 66 20 65 72 72 6f 72 73 20 72 65 70 6f 72   of errors repor
30f70 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ted */.  char *z
30f80 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74  ;        /* Text
30f90 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20 72 65   of the error re
30fa0 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  port */.  Mem *p
30fb0 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20 52 65 67  nErr;     /* Reg
30fc0 69 73 74 65 72 20 6b 65 65 70 69 6e 67 20 74 72  ister keeping tr
30fd0 61 63 6b 20 6f 66 20 65 72 72 6f 72 73 20 72 65  ack of errors re
30fe0 6d 61 69 6e 69 6e 67 20 2a 2f 0a 0a 20 20 61 73  maining */..  as
30ff0 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
31000 65 72 20 29 3b 0a 20 20 6e 52 6f 6f 74 20 3d 20  er );.  nRoot = 
31010 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 52 6f 6f 74  pOp->p2;.  aRoot
31020 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20   = pOp->p4.ai;. 
31030 20 61 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30   assert( nRoot>0
31040 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 61 52   );.  assert( aR
31050 6f 6f 74 5b 30 5d 3d 3d 6e 52 6f 6f 74 20 29 3b  oot[0]==nRoot );
31060 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
31070 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
31080 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
31090 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70  >nCursor) );.  p
310a0 6e 45 72 72 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  nErr = &aMem[pOp
310b0 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p3];.  assert(
310c0 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26   (pnErr->flags &
310d0 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a   MEM_Int)!=0 );.
310e0 20 20 61 73 73 65 72 74 28 20 28 70 6e 45 72 72    assert( (pnErr
310f0 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ->flags & (MEM_S
31100 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30  tr|MEM_Blob))==0
31110 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   );.  pIn1 = &aM
31120 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
31130 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 64  ssert( pOp->p5<d
31140 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
31150 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
31160 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70  ->btreeMask, pOp
31170 2d 3e 70 35 29 20 29 3b 0a 20 20 7a 20 3d 20 73  ->p5) );.  z = s
31180 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65 67  qlite3BtreeInteg
31190 72 69 74 79 43 68 65 63 6b 28 64 62 2d 3e 61 44  rityCheck(db->aD
311a0 62 5b 70 4f 70 2d 3e 70 35 5d 2e 70 42 74 2c 20  b[pOp->p5].pBt, 
311b0 26 61 52 6f 6f 74 5b 31 5d 2c 20 6e 52 6f 6f 74  &aRoot[1], nRoot
311c0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
311d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
311e0 20 20 20 28 69 6e 74 29 70 6e 45 72 72 2d 3e 75     (int)pnErr->u
311f0 2e 69 2b 31 2c 20 26 6e 45 72 72 29 3b 0a 20 20  .i+1, &nErr);.  
31200 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
31210 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 69  tNull(pIn1);.  i
31220 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a 20 20  f( nErr==0 ){.  
31230 20 20 61 73 73 65 72 74 28 20 7a 3d 3d 30 20 29    assert( z==0 )
31240 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 3d  ;.  }else if( z=
31250 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e  =0 ){.    goto n
31260 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b 0a  o_mem;.  }else{.
31270 20 20 20 20 70 6e 45 72 72 2d 3e 75 2e 69 20 2d      pnErr->u.i -
31280 3d 20 6e 45 72 72 2d 31 3b 0a 20 20 20 20 73 71  = nErr-1;.    sq
31290 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53  lite3VdbeMemSetS
312a0 74 72 28 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20  tr(pIn1, z, -1, 
312b0 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 73 71 6c  SQLITE_UTF8, sql
312c0 69 74 65 33 5f 66 72 65 65 29 3b 0a 20 20 7d 0a  ite3_free);.  }.
312d0 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
312e0 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 73  BSIZE(pIn1);.  s
312f0 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
31300 45 6e 63 6f 64 69 6e 67 28 70 49 6e 31 2c 20 65  Encoding(pIn1, e
31310 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65 61  ncoding);.  brea
31320 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
31330 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47  QLITE_OMIT_INTEG
31340 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f  RITY_CHECK */../
31350 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74  * Opcode: RowSet
31360 41 64 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Add P1 P2 * * *.
31370 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 77  ** Synopsis: row
31380 73 65 74 28 50 31 29 3d 72 5b 50 32 5d 0a 2a 2a  set(P1)=r[P2].**
31390 0a 2a 2a 20 49 6e 73 65 72 74 20 74 68 65 20 69  .** Insert the i
313a0 6e 74 65 67 65 72 20 76 61 6c 75 65 20 68 65 6c  nteger value hel
313b0 64 20 62 79 20 72 65 67 69 73 74 65 72 20 50 32  d by register P2
313c0 20 69 6e 74 6f 20 61 20 52 6f 77 53 65 74 20 6f   into a RowSet o
313d0 62 6a 65 63 74 0a 2a 2a 20 68 65 6c 64 20 69 6e  bject.** held in
313e0 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
313f0 0a 2a 2a 20 41 6e 20 61 73 73 65 72 74 69 6f 6e  .** An assertion
31400 20 66 61 69 6c 73 20 69 66 20 50 32 20 69 73 20   fails if P2 is 
31410 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a  not an integer..
31420 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65  */.case OP_RowSe
31430 74 41 64 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a  tAdd: {       /*
31440 20 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20 20 70   in1, in2 */.  p
31450 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
31460 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26  >p1];.  pIn2 = &
31470 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
31480 20 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e   assert( (pIn2->
31490 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
314a0 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70 49  !=0 );.  if( (pI
314b0 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
314c0 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20  RowSet)==0 ){.  
314d0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
314e0 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29 3b  SetRowSet(pIn1);
314f0 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  .    if( (pIn1->
31500 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53  flags & MEM_RowS
31510 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  et)==0 ) goto no
31520 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  _mem;.  }.  sqli
31530 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28  te3RowSetInsert(
31540 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c  pIn1->u.pRowSet,
31550 20 70 49 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20 62   pIn2->u.i);.  b
31560 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
31570 64 65 3a 20 52 6f 77 53 65 74 52 65 61 64 20 50  de: RowSetRead P
31580 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
31590 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72  ynopsis: r[P3]=r
315a0 6f 77 73 65 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20  owset(P1).**.** 
315b0 45 78 74 72 61 63 74 20 74 68 65 20 73 6d 61 6c  Extract the smal
315c0 6c 65 73 74 20 76 61 6c 75 65 20 66 72 6f 6d 20  lest value from 
315d0 74 68 65 20 52 6f 77 53 65 74 20 6f 62 6a 65 63  the RowSet objec
315e0 74 20 69 6e 20 50 31 0a 2a 2a 20 61 6e 64 20 70  t in P1.** and p
315f0 75 74 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e  ut that value in
31600 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  to register P3..
31610 2a 2a 20 4f 72 2c 20 69 66 20 52 6f 77 53 65 74  ** Or, if RowSet
31620 20 6f 62 6a 65 63 74 20 50 31 20 69 73 20 69 6e   object P1 is in
31630 69 74 69 61 6c 6c 79 20 65 6d 70 74 79 2c 20 6c  itially empty, l
31640 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e 63 68 61  eave P3.** uncha
31650 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70 20 74 6f  nged and jump to
31660 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e   instruction P2.
31670 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53  .*/.case OP_RowS
31680 65 74 52 65 61 64 3a 20 7b 20 20 20 20 20 20 20  etRead: {       
31690 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 6f 75  /* jump, in1, ou
316a0 74 33 20 2a 2f 0a 20 20 69 36 34 20 76 61 6c 3b  t3 */.  i64 val;
316b0 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
316c0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
316d0 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
316e0 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 0a  MEM_RowSet)==0 .
316f0 20 20 20 7c 7c 20 73 71 6c 69 74 65 33 52 6f 77     || sqlite3Row
31700 53 65 74 4e 65 78 74 28 70 49 6e 31 2d 3e 75 2e  SetNext(pIn1->u.
31710 70 52 6f 77 53 65 74 2c 20 26 76 61 6c 29 3d 3d  pRowSet, &val)==
31720 30 0a 20 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  0.  ){.    /* Th
31730 65 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20  e boolean index 
31740 69 73 20 65 6d 70 74 79 20 2a 2f 0a 20 20 20 20  is empty */.    
31750 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
31760 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 20  tNull(pIn1);.   
31770 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
31780 28 31 2c 32 29 3b 0a 20 20 20 20 67 6f 74 6f 20  (1,2);.    goto 
31790 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63  jump_to_p2_and_c
317a0 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
317b0 70 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  pt;.  }else{.   
317c0 20 2f 2a 20 41 20 76 61 6c 75 65 20 77 61 73 20   /* A value was 
317d0 70 75 6c 6c 65 64 20 66 72 6f 6d 20 74 68 65 20  pulled from the 
317e0 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 56 64 62  index */.    Vdb
317f0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c 32  eBranchTaken(0,2
31800 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
31810 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61  beMemSetInt64(&a
31820 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76 61  Mem[pOp->p3], va
31830 6c 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63  l);.  }.  goto c
31840 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
31850 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  pt;.}../* Opcode
31860 3a 20 52 6f 77 53 65 74 54 65 73 74 20 50 31 20  : RowSetTest P1 
31870 50 32 20 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f  P2 P3 P4.** Syno
31880 70 73 69 73 3a 20 69 66 20 72 5b 50 33 5d 20 69  psis: if r[P3] i
31890 6e 20 72 6f 77 73 65 74 28 50 31 29 20 67 6f 74  n rowset(P1) got
318a0 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73  o P2.**.** Regis
318b0 74 65 72 20 50 33 20 69 73 20 61 73 73 75 6d 65  ter P3 is assume
318c0 64 20 74 6f 20 68 6f 6c 64 20 61 20 36 34 2d 62  d to hold a 64-b
318d0 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  it integer value
318e0 2e 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31  . If register P1
318f0 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20 52  .** contains a R
31900 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 61 6e 64  owSet object and
31910 20 74 68 61 74 20 52 6f 77 53 65 74 20 6f 62 6a   that RowSet obj
31920 65 63 74 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20  ect contains.** 
31930 74 68 65 20 76 61 6c 75 65 20 68 65 6c 64 20 69  the value held i
31940 6e 20 50 33 2c 20 6a 75 6d 70 20 74 6f 20 72 65  n P3, jump to re
31950 67 69 73 74 65 72 20 50 32 2e 20 4f 74 68 65 72  gister P2. Other
31960 77 69 73 65 2c 20 69 6e 73 65 72 74 20 74 68 65  wise, insert the
31970 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69 6e 20 50  .** integer in P
31980 33 20 69 6e 74 6f 20 74 68 65 20 52 6f 77 53 65  3 into the RowSe
31990 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20 6f  t and continue o
319a0 6e 20 74 6f 20 74 68 65 0a 2a 2a 20 6e 65 78 74  n to the.** next
319b0 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54   opcode..**.** T
319c0 68 65 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74  he RowSet object
319d0 20 69 73 20 6f 70 74 69 6d 69 7a 65 64 20 66 6f   is optimized fo
319e0 72 20 74 68 65 20 63 61 73 65 20 77 68 65 72 65  r the case where
319f0 20 73 65 74 73 20 6f 66 20 69 6e 74 65 67 65 72   sets of integer
31a00 73 0a 2a 2a 20 61 72 65 20 69 6e 73 65 72 74 65  s.** are inserte
31a10 64 20 69 6e 20 64 69 73 74 69 6e 63 74 20 70 68  d in distinct ph
31a20 61 73 65 73 2c 20 77 68 69 63 68 20 65 61 63 68  ases, which each
31a30 20 73 65 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f   set contains no
31a40 20 64 75 70 6c 69 63 61 74 65 73 2e 0a 2a 2a 20   duplicates..** 
31a50 45 61 63 68 20 73 65 74 20 69 73 20 69 64 65 6e  Each set is iden
31a60 74 69 66 69 65 64 20 62 79 20 61 20 75 6e 69 71  tified by a uniq
31a70 75 65 20 50 34 20 76 61 6c 75 65 2e 20 54 68 65  ue P4 value. The
31a80 20 66 69 72 73 74 20 73 65 74 0a 2a 2a 20 6d 75   first set.** mu
31a90 73 74 20 68 61 76 65 20 50 34 3d 3d 30 2c 20 74  st have P4==0, t
31aa0 68 65 20 66 69 6e 61 6c 20 73 65 74 20 6d 75 73  he final set mus
31ab0 74 20 68 61 76 65 20 50 34 3d 3d 2d 31 2c 20 61  t have P4==-1, a
31ac0 6e 64 20 66 6f 72 20 61 6c 6c 20 6f 74 68 65 72  nd for all other
31ad0 20 73 65 74 73 0a 2a 2a 20 6d 75 73 74 20 68 61   sets.** must ha
31ae0 76 65 20 50 34 3e 30 2e 0a 2a 2a 0a 2a 2a 20 54  ve P4>0..**.** T
31af0 68 69 73 20 61 6c 6c 6f 77 73 20 6f 70 74 69 6d  his allows optim
31b00 69 7a 61 74 69 6f 6e 73 3a 20 28 61 29 20 77 68  izations: (a) wh
31b10 65 6e 20 50 34 3d 3d 30 20 74 68 65 72 65 20 69  en P4==0 there i
31b20 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 74 65 73  s no need to tes
31b30 74 0a 2a 2a 20 74 68 65 20 52 6f 77 53 65 74 20  t.** the RowSet 
31b40 6f 62 6a 65 63 74 20 66 6f 72 20 50 33 2c 20 61  object for P3, a
31b50 73 20 69 74 20 69 73 20 67 75 61 72 61 6e 74 65  s it is guarante
31b60 65 64 20 6e 6f 74 20 74 6f 20 63 6f 6e 74 61 69  ed not to contai
31b70 6e 20 69 74 2c 0a 2a 2a 20 28 62 29 20 77 68 65  n it,.** (b) whe
31b80 6e 20 50 34 3d 3d 2d 31 20 74 68 65 72 65 20 69  n P4==-1 there i
31b90 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 69 6e 73  s no need to ins
31ba0 65 72 74 20 74 68 65 20 76 61 6c 75 65 2c 20 61  ert the value, a
31bb0 73 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76  s it will.** nev
31bc0 65 72 20 62 65 20 74 65 73 74 65 64 20 66 6f 72  er be tested for
31bd0 2c 20 61 6e 64 20 28 63 29 20 77 68 65 6e 20 61  , and (c) when a
31be0 20 76 61 6c 75 65 20 74 68 61 74 20 69 73 20 70   value that is p
31bf0 61 72 74 20 6f 66 20 73 65 74 20 58 20 69 73 0a  art of set X is.
31c00 2a 2a 20 69 6e 73 65 72 74 65 64 2c 20 74 68 65  ** inserted, the
31c10 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f  re is no need to
31c20 20 73 65 61 72 63 68 20 74 6f 20 73 65 65 20 69   search to see i
31c30 66 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65  f the same value
31c40 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73   was.** previous
31c50 6c 79 20 69 6e 73 65 72 74 65 64 20 61 73 20 70  ly inserted as p
31c60 61 72 74 20 6f 66 20 73 65 74 20 58 20 28 6f 6e  art of set X (on
31c70 6c 79 20 69 66 20 69 74 20 77 61 73 20 70 72 65  ly if it was pre
31c80 76 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73 65 72  viously.** inser
31c90 74 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 73  ted as part of s
31ca0 6f 6d 65 20 6f 74 68 65 72 20 73 65 74 29 2e 0a  ome other set)..
31cb0 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65  */.case OP_RowSe
31cc0 74 54 65 73 74 3a 20 7b 20 20 20 20 20 20 20 20  tTest: {        
31cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
31ce0 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
31cf0 2f 0a 20 20 69 6e 74 20 69 53 65 74 3b 0a 20 20  /.  int iSet;.  
31d00 69 6e 74 20 65 78 69 73 74 73 3b 0a 0a 20 20 70  int exists;..  p
31d10 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
31d20 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26  >p1];.  pIn3 = &
31d30 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
31d40 20 69 53 65 74 20 3d 20 70 4f 70 2d 3e 70 34 2e   iSet = pOp->p4.
31d50 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  i;.  assert( pIn
31d60 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  3->flags&MEM_Int
31d70 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65   );..  /* If the
31d80 72 65 20 69 73 20 61 6e 79 74 68 69 6e 67 20 6f  re is anything o
31d90 74 68 65 72 20 74 68 61 6e 20 61 20 72 6f 77 73  ther than a rows
31da0 65 74 20 6f 62 6a 65 63 74 20 69 6e 20 6d 65 6d  et object in mem
31db0 6f 72 79 20 63 65 6c 6c 20 50 31 2c 0a 20 20 2a  ory cell P1,.  *
31dc0 2a 20 64 65 6c 65 74 65 20 69 74 20 6e 6f 77 20  * delete it now 
31dd0 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65 20 50  and initialize P
31de0 31 20 77 69 74 68 20 61 6e 20 65 6d 70 74 79 20  1 with an empty 
31df0 72 6f 77 73 65 74 0a 20 20 2a 2f 0a 20 20 69 66  rowset.  */.  if
31e00 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
31e10 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20   MEM_RowSet)==0 
31e20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
31e30 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70  beMemSetRowSet(p
31e40 49 6e 31 29 3b 0a 20 20 20 20 69 66 28 20 28 70  In1);.    if( (p
31e50 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
31e60 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 20 67 6f  _RowSet)==0 ) go
31e70 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a  to no_mem;.  }..
31e80 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
31e90 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
31ea0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 53 65  );.  assert( iSe
31eb0 74 3d 3d 2d 31 20 7c 7c 20 69 53 65 74 3e 3d 30  t==-1 || iSet>=0
31ec0 20 29 3b 0a 20 20 69 66 28 20 69 53 65 74 20 29   );.  if( iSet )
31ed0 7b 0a 20 20 20 20 65 78 69 73 74 73 20 3d 20 73  {.    exists = s
31ee0 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74  qlite3RowSetTest
31ef0 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74  (pIn1->u.pRowSet
31f00 2c 20 69 53 65 74 2c 20 70 49 6e 33 2d 3e 75 2e  , iSet, pIn3->u.
31f10 69 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e  i);.    VdbeBran
31f20 63 68 54 61 6b 65 6e 28 65 78 69 73 74 73 21 3d  chTaken(exists!=
31f30 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 65 78  0,2);.    if( ex
31f40 69 73 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70  ists ) goto jump
31f50 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 69 66  _to_p2;.  }.  if
31f60 28 20 69 53 65 74 3e 3d 30 20 29 7b 0a 20 20 20  ( iSet>=0 ){.   
31f70 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e   sqlite3RowSetIn
31f80 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f  sert(pIn1->u.pRo
31f90 77 53 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29  wSet, pIn3->u.i)
31fa0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
31fb0 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ...#ifndef SQLIT
31fc0 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 0a  E_OMIT_TRIGGER..
31fd0 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 6f 67 72  /* Opcode: Progr
31fe0 61 6d 20 50 31 20 50 32 20 50 33 20 50 34 20 50  am P1 P2 P3 P4 P
31ff0 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20  5.**.** Execute 
32000 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
32010 72 61 6d 20 70 61 73 73 65 64 20 61 73 20 50 34  ram passed as P4
32020 20 28 74 79 70 65 20 50 34 5f 53 55 42 50 52 4f   (type P4_SUBPRO
32030 47 52 41 4d 29 2e 20 0a 2a 2a 0a 2a 2a 20 50 31  GRAM). .**.** P1
32040 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64   contains the ad
32050 64 72 65 73 73 20 6f 66 20 74 68 65 20 6d 65 6d  dress of the mem
32060 6f 72 79 20 63 65 6c 6c 20 74 68 61 74 20 63 6f  ory cell that co
32070 6e 74 61 69 6e 73 20 74 68 65 20 66 69 72 73 74  ntains the first
32080 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c   memory .** cell
32090 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20   in an array of 
320a0 76 61 6c 75 65 73 20 75 73 65 64 20 61 73 20 61  values used as a
320b0 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20  rguments to the 
320c0 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20 50 32 20  sub-program. P2 
320d0 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  .** contains the
320e0 20 61 64 64 72 65 73 73 20 74 6f 20 6a 75 6d 70   address to jump
320f0 20 74 6f 20 69 66 20 74 68 65 20 73 75 62 2d 70   to if the sub-p
32100 72 6f 67 72 61 6d 20 74 68 72 6f 77 73 20 61 6e  rogram throws an
32110 20 49 47 4e 4f 52 45 20 0a 2a 2a 20 65 78 63 65   IGNORE .** exce
32120 70 74 69 6f 6e 20 75 73 69 6e 67 20 74 68 65 20  ption using the 
32130 52 41 49 53 45 28 29 20 66 75 6e 63 74 69 6f 6e  RAISE() function
32140 2e 20 52 65 67 69 73 74 65 72 20 50 33 20 63 6f  . Register P3 co
32150 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65  ntains the addre
32160 73 73 20 0a 2a 2a 20 6f 66 20 61 20 6d 65 6d 6f  ss .** of a memo
32170 72 79 20 63 65 6c 6c 20 69 6e 20 74 68 69 73 20  ry cell in this 
32180 28 74 68 65 20 70 61 72 65 6e 74 29 20 56 4d 20  (the parent) VM 
32190 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20  that is used to 
321a0 61 6c 6c 6f 63 61 74 65 20 74 68 65 20 0a 2a 2a  allocate the .**
321b0 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64   memory required
321c0 20 62 79 20 74 68 65 20 73 75 62 2d 76 64 62 65   by the sub-vdbe
321d0 20 61 74 20 72 75 6e 74 69 6d 65 2e 0a 2a 2a 0a   at runtime..**.
321e0 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
321f0 65 72 20 74 6f 20 74 68 65 20 56 4d 20 63 6f 6e  er to the VM con
32200 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67  taining the trig
32210 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a  ger program..**.
32220 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d  ** If P5 is non-
32230 7a 65 72 6f 2c 20 74 68 65 6e 20 72 65 63 75 72  zero, then recur
32240 73 69 76 65 20 70 72 6f 67 72 61 6d 20 69 6e 76  sive program inv
32250 6f 63 61 74 69 6f 6e 20 69 73 20 65 6e 61 62 6c  ocation is enabl
32260 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  ed..*/.case OP_P
32270 72 6f 67 72 61 6d 3a 20 7b 20 20 20 20 20 20 20  rogram: {       
32280 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e   /* jump */.  in
32290 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  t nMem;         
322a0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
322b0 6f 66 20 6d 65 6d 6f 72 79 20 72 65 67 69 73 74  of memory regist
322c0 65 72 73 20 66 6f 72 20 73 75 62 2d 70 72 6f 67  ers for sub-prog
322d0 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79  ram */.  int nBy
322e0 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  te;             
322f0 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 72 75 6e   /* Bytes of run
32300 74 69 6d 65 20 73 70 61 63 65 20 72 65 71 75 69  time space requi
32310 72 65 64 20 66 6f 72 20 73 75 62 2d 70 72 6f 67  red for sub-prog
32320 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52  ram */.  Mem *pR
32330 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
32340 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20   /* Register to 
32350 61 6c 6c 6f 63 61 74 65 20 72 75 6e 74 69 6d 65  allocate runtime
32360 20 73 70 61 63 65 20 2a 2f 0a 20 20 4d 65 6d 20   space */.  Mem 
32370 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20  *pMem;          
32380 20 20 20 20 2f 2a 20 55 73 65 64 20 74 6f 20 69      /* Used to i
32390 74 65 72 61 74 65 20 74 68 72 6f 75 67 68 20 6d  terate through m
323a0 65 6d 6f 72 79 20 63 65 6c 6c 73 20 2a 2f 0a 20  emory cells */. 
323b0 20 4d 65 6d 20 2a 70 45 6e 64 3b 20 20 20 20 20   Mem *pEnd;     
323c0 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74           /* Last
323d0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20   memory cell in 
323e0 6e 65 77 20 61 72 72 61 79 20 2a 2f 0a 20 20 56  new array */.  V
323f0 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
32400 3b 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 76 64  ;      /* New vd
32410 62 65 20 66 72 61 6d 65 20 74 6f 20 65 78 65 63  be frame to exec
32420 75 74 65 20 69 6e 20 2a 2f 0a 20 20 53 75 62 50  ute in */.  SubP
32430 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d  rogram *pProgram
32440 3b 20 20 20 2f 2a 20 53 75 62 2d 70 72 6f 67 72  ;   /* Sub-progr
32450 61 6d 20 74 6f 20 65 78 65 63 75 74 65 20 2a 2f  am to execute */
32460 0a 20 20 76 6f 69 64 20 2a 74 3b 20 20 20 20 20  .  void *t;     
32470 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f             /* To
32480 6b 65 6e 20 69 64 65 6e 74 69 66 79 69 6e 67 20  ken identifying 
32490 74 72 69 67 67 65 72 20 2a 2f 0a 0a 20 20 70 50  trigger */..  pP
324a0 72 6f 67 72 61 6d 20 3d 20 70 4f 70 2d 3e 70 34  rogram = pOp->p4
324b0 2e 70 50 72 6f 67 72 61 6d 3b 0a 20 20 70 52 74  .pProgram;.  pRt
324c0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
324d0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 50 72  ];.  assert( pPr
324e0 6f 67 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a  ogram->nOp>0 );.
324f0 20 20 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 70    .  /* If the p
32500 35 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 2c  5 flag is clear,
32510 20 74 68 65 6e 20 72 65 63 75 72 73 69 76 65 20   then recursive 
32520 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72  invocation of tr
32530 69 67 67 65 72 73 20 69 73 20 0a 20 20 2a 2a 20  iggers is .  ** 
32540 64 69 73 61 62 6c 65 64 20 66 6f 72 20 62 61 63  disabled for bac
32550 6b 77 61 72 64 73 20 63 6f 6d 70 61 74 69 62 69  kwards compatibi
32560 6c 69 74 79 20 28 70 35 20 69 73 20 73 65 74 20  lity (p5 is set 
32570 69 66 20 74 68 69 73 20 73 75 62 2d 70 72 6f 67  if this sub-prog
32580 72 61 6d 0a 20 20 2a 2a 20 69 73 20 72 65 61 6c  ram.  ** is real
32590 6c 79 20 61 20 74 72 69 67 67 65 72 2c 20 6e 6f  ly a trigger, no
325a0 74 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  t a foreign key 
325b0 61 63 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65 20  action, and the 
325c0 66 6c 61 67 20 73 65 74 0a 20 20 2a 2a 20 61 6e  flag set.  ** an
325d0 64 20 63 6c 65 61 72 65 64 20 62 79 20 74 68 65  d cleared by the
325e0 20 22 50 52 41 47 4d 41 20 72 65 63 75 72 73 69   "PRAGMA recursi
325f0 76 65 5f 74 72 69 67 67 65 72 73 22 20 63 6f 6d  ve_triggers" com
32600 6d 61 6e 64 20 69 73 20 63 6c 65 61 72 29 2e 0a  mand is clear)..
32610 20 20 2a 2a 20 0a 20 20 2a 2a 20 49 74 20 69 73    ** .  ** It is
32620 20 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63   recursive invoc
32630 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72  ation of trigger
32640 73 2c 20 61 74 20 74 68 65 20 53 51 4c 20 6c 65  s, at the SQL le
32650 76 65 6c 2c 20 74 68 61 74 20 69 73 20 0a 20 20  vel, that is .  
32660 2a 2a 20 64 69 73 61 62 6c 65 64 2e 20 49 6e 20  ** disabled. In 
32670 73 6f 6d 65 20 63 61 73 65 73 20 61 20 73 69 6e  some cases a sin
32680 67 6c 65 20 74 72 69 67 67 65 72 20 6d 61 79 20  gle trigger may 
32690 67 65 6e 65 72 61 74 65 20 6d 6f 72 65 20 74 68  generate more th
326a0 61 6e 20 6f 6e 65 20 0a 20 20 2a 2a 20 53 75 62  an one .  ** Sub
326b0 50 72 6f 67 72 61 6d 20 28 69 66 20 74 68 65 20  Program (if the 
326c0 74 72 69 67 67 65 72 20 6d 61 79 20 62 65 20 65  trigger may be e
326d0 78 65 63 75 74 65 64 20 77 69 74 68 20 6d 6f 72  xecuted with mor
326e0 65 20 74 68 61 6e 20 6f 6e 65 20 64 69 66 66 65  e than one diffe
326f0 72 65 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f  rent .  ** ON CO
32700 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d  NFLICT algorithm
32710 29 2e 20 53 75 62 50 72 6f 67 72 61 6d 20 73 74  ). SubProgram st
32720 72 75 63 74 75 72 65 73 20 61 73 73 6f 63 69 61  ructures associa
32730 74 65 64 20 77 69 74 68 20 61 0a 20 20 2a 2a 20  ted with a.  ** 
32740 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20 61  single trigger a
32750 6c 6c 20 68 61 76 65 20 74 68 65 20 73 61 6d 65  ll have the same
32760 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 53   value for the S
32770 75 62 50 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20  ubProgram.token 
32780 0a 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 2e 20  .  ** variable. 
32790 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   */.  if( pOp->p
327a0 35 20 29 7b 0a 20 20 20 20 74 20 3d 20 70 50 72  5 ){.    t = pPr
327b0 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20  ogram->token;.  
327c0 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e    for(pFrame=p->
327d0 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 20 26  pFrame; pFrame &
327e0 26 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21  & pFrame->token!
327f0 3d 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d  =t; pFrame=pFram
32800 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20  e->pParent);.   
32810 20 69 66 28 20 70 46 72 61 6d 65 20 29 20 62 72   if( pFrame ) br
32820 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  eak;.  }..  if( 
32830 70 2d 3e 6e 46 72 61 6d 65 3e 3d 64 62 2d 3e 61  p->nFrame>=db->a
32840 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
32850 49 54 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48  IT_TRIGGER_DEPTH
32860 5d 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  ] ){.    rc = SQ
32870 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20  LITE_ERROR;.    
32880 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
32890 28 70 2c 20 22 74 6f 6f 20 6d 61 6e 79 20 6c 65  (p, "too many le
328a0 76 65 6c 73 20 6f 66 20 74 72 69 67 67 65 72 20  vels of trigger 
328b0 72 65 63 75 72 73 69 6f 6e 22 29 3b 0a 20 20 20  recursion");.   
328c0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
328d0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20  to_error;.  }.. 
328e0 20 2f 2a 20 52 65 67 69 73 74 65 72 20 70 52 74   /* Register pRt
328f0 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
32900 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65 71  e the memory req
32910 75 69 72 65 64 20 74 6f 20 73 61 76 65 20 74 68  uired to save th
32920 65 20 73 74 61 74 65 0a 20 20 2a 2a 20 6f 66 20  e state.  ** of 
32930 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 67  the current prog
32940 72 61 6d 2c 20 61 6e 64 20 74 68 65 20 6d 65 6d  ram, and the mem
32950 6f 72 79 20 72 65 71 75 69 72 65 64 20 61 74 20  ory required at 
32960 72 75 6e 74 69 6d 65 20 74 6f 20 65 78 65 63 75  runtime to execu
32970 74 65 0a 20 20 2a 2a 20 74 68 65 20 74 72 69 67  te.  ** the trig
32980 67 65 72 20 70 72 6f 67 72 61 6d 2e 20 49 66 20  ger program. If 
32990 74 68 69 73 20 74 72 69 67 67 65 72 20 68 61 73  this trigger has
329a0 20 62 65 65 6e 20 66 69 72 65 64 20 62 65 66 6f   been fired befo
329b0 72 65 2c 20 74 68 65 6e 20 70 52 74 20 0a 20 20  re, then pRt .  
329c0 2a 2a 20 69 73 20 61 6c 72 65 61 64 79 20 61 6c  ** is already al
329d0 6c 6f 63 61 74 65 64 2e 20 4f 74 68 65 72 77 69  located. Otherwi
329e0 73 65 2c 20 69 74 20 6d 75 73 74 20 62 65 20 69  se, it must be i
329f0 6e 69 74 69 61 6c 69 7a 65 64 2e 20 20 2a 2f 0a  nitialized.  */.
32a00 20 20 69 66 28 20 28 70 52 74 2d 3e 66 6c 61 67    if( (pRt->flag
32a10 73 26 4d 45 4d 5f 46 72 61 6d 65 29 3d 3d 30 20  s&MEM_Frame)==0 
32a20 29 7b 0a 20 20 20 20 2f 2a 20 53 75 62 50 72 6f  ){.    /* SubPro
32a30 67 72 61 6d 2e 6e 4d 65 6d 20 69 73 20 73 65 74  gram.nMem is set
32a40 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   to the number o
32a50 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75  f memory cells u
32a60 73 65 64 20 62 79 20 74 68 65 20 0a 20 20 20 20  sed by the .    
32a70 2a 2a 20 70 72 6f 67 72 61 6d 20 73 74 6f 72 65  ** program store
32a80 64 20 69 6e 20 53 75 62 50 72 6f 67 72 61 6d 2e  d in SubProgram.
32a90 61 4f 70 2e 20 41 73 20 77 65 6c 6c 20 61 73 20  aOp. As well as 
32aa0 74 68 65 73 65 2c 20 6f 6e 65 20 6d 65 6d 6f 72  these, one memor
32ab0 79 0a 20 20 20 20 2a 2a 20 63 65 6c 6c 20 69 73  y.    ** cell is
32ac0 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 65 61   required for ea
32ad0 63 68 20 63 75 72 73 6f 72 20 75 73 65 64 20 62  ch cursor used b
32ae0 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 53  y the program. S
32af0 65 74 20 6c 6f 63 61 6c 0a 20 20 20 20 2a 2a 20  et local.    ** 
32b00 76 61 72 69 61 62 6c 65 20 6e 4d 65 6d 20 28 61  variable nMem (a
32b10 6e 64 20 6c 61 74 65 72 2c 20 56 64 62 65 46 72  nd later, VdbeFr
32b20 61 6d 65 2e 6e 43 68 69 6c 64 4d 65 6d 29 20 74  ame.nChildMem) t
32b30 6f 20 74 68 69 73 20 76 61 6c 75 65 2e 0a 20 20  o this value..  
32b40 20 20 2a 2f 0a 20 20 20 20 6e 4d 65 6d 20 3d 20    */.    nMem = 
32b50 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 20 2b  pProgram->nMem +
32b60 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b   pProgram->nCsr;
32b70 0a 20 20 20 20 61 73 73 65 72 74 28 20 6e 4d 65  .    assert( nMe
32b80 6d 3e 30 20 29 3b 0a 20 20 20 20 69 66 28 20 70  m>0 );.    if( p
32b90 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 30  Program->nCsr==0
32ba0 20 29 20 6e 4d 65 6d 2b 2b 3b 0a 20 20 20 20 6e   ) nMem++;.    n
32bb0 42 79 74 65 20 3d 20 52 4f 55 4e 44 38 28 73 69  Byte = ROUND8(si
32bc0 7a 65 6f 66 28 56 64 62 65 46 72 61 6d 65 29 29  zeof(VdbeFrame))
32bd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b  .              +
32be0 20 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f 66 28 4d   nMem * sizeof(M
32bf0 65 6d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  em).            
32c00 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43    + pProgram->nC
32c10 73 72 20 2a 20 73 69 7a 65 6f 66 28 56 64 62 65  sr * sizeof(Vdbe
32c20 43 75 72 73 6f 72 2a 29 0a 20 20 20 20 20 20 20  Cursor*).       
32c30 20 20 20 20 20 20 20 2b 20 28 70 50 72 6f 67 72         + (pProgr
32c40 61 6d 2d 3e 6e 4f 70 20 2b 20 37 29 2f 38 3b 0a  am->nOp + 7)/8;.
32c50 20 20 20 20 70 46 72 61 6d 65 20 3d 20 73 71 6c      pFrame = sql
32c60 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f  ite3DbMallocZero
32c70 28 64 62 2c 20 6e 42 79 74 65 29 3b 0a 20 20 20  (db, nByte);.   
32c80 20 69 66 28 20 21 70 46 72 61 6d 65 20 29 7b 0a   if( !pFrame ){.
32c90 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65        goto no_me
32ca0 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  m;.    }.    sql
32cb0 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
32cc0 73 65 28 70 52 74 29 3b 0a 20 20 20 20 70 52 74  se(pRt);.    pRt
32cd0 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 46 72  ->flags = MEM_Fr
32ce0 61 6d 65 3b 0a 20 20 20 20 70 52 74 2d 3e 75 2e  ame;.    pRt->u.
32cf0 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b  pFrame = pFrame;
32d00 0a 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 76 20  ..    pFrame->v 
32d10 3d 20 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  = p;.    pFrame-
32d20 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d 20 6e 4d 65  >nChildMem = nMe
32d30 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e  m;.    pFrame->n
32d40 43 68 69 6c 64 43 73 72 20 3d 20 70 50 72 6f 67  ChildCsr = pProg
32d50 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 70  ram->nCsr;.    p
32d60 46 72 61 6d 65 2d 3e 70 63 20 3d 20 28 69 6e 74  Frame->pc = (int
32d70 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20  )(pOp - aOp);.  
32d80 20 20 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d    pFrame->aMem =
32d90 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 46   p->aMem;.    pF
32da0 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e  rame->nMem = p->
32db0 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65  nMem;.    pFrame
32dc0 2d 3e 61 70 43 73 72 20 3d 20 70 2d 3e 61 70 43  ->apCsr = p->apC
32dd0 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  sr;.    pFrame->
32de0 6e 43 75 72 73 6f 72 20 3d 20 70 2d 3e 6e 43 75  nCursor = p->nCu
32df0 72 73 6f 72 3b 0a 20 20 20 20 70 46 72 61 6d 65  rsor;.    pFrame
32e00 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a  ->aOp = p->aOp;.
32e10 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 70 20      pFrame->nOp 
32e20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70 46  = p->nOp;.    pF
32e30 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50  rame->token = pP
32e40 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 23  rogram->token;.#
32e50 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
32e60 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41  BLE_STMT_SCANSTA
32e70 54 55 53 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  TUS.    pFrame->
32e80 61 6e 45 78 65 63 20 3d 20 70 2d 3e 61 6e 45 78  anExec = p->anEx
32e90 65 63 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20  ec;.#endif..    
32ea0 70 45 6e 64 20 3d 20 26 56 64 62 65 46 72 61 6d  pEnd = &VdbeFram
32eb0 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 70 46 72  eMem(pFrame)[pFr
32ec0 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b  ame->nChildMem];
32ed0 0a 20 20 20 20 66 6f 72 28 70 4d 65 6d 3d 56 64  .    for(pMem=Vd
32ee0 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d  beFrameMem(pFram
32ef0 65 29 3b 20 70 4d 65 6d 21 3d 70 45 6e 64 3b 20  e); pMem!=pEnd; 
32f00 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 20 20 70  pMem++){.      p
32f10 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Mem->flags = MEM
32f20 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 20 20  _Undefined;.    
32f30 20 20 70 4d 65 6d 2d 3e 64 62 20 3d 20 64 62 3b    pMem->db = db;
32f40 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
32f50 20 20 20 20 70 46 72 61 6d 65 20 3d 20 70 52 74      pFrame = pRt
32f60 2d 3e 75 2e 70 46 72 61 6d 65 3b 0a 20 20 20 20  ->u.pFrame;.    
32f70 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d  assert( pProgram
32f80 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72 61 6d 2d  ->nMem+pProgram-
32f90 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e  >nCsr==pFrame->n
32fa0 43 68 69 6c 64 4d 65 6d 20 0a 20 20 20 20 20 20  ChildMem .      
32fb0 20 20 7c 7c 20 28 70 50 72 6f 67 72 61 6d 2d 3e    || (pProgram->
32fc0 6e 43 73 72 3d 3d 30 20 26 26 20 70 50 72 6f 67  nCsr==0 && pProg
32fd0 72 61 6d 2d 3e 6e 4d 65 6d 2b 31 3d 3d 70 46 72  ram->nMem+1==pFr
32fe0 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 29 20  ame->nChildMem) 
32ff0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
33000 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70  Program->nCsr==p
33010 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72  Frame->nChildCsr
33020 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
33030 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
33040 3d 3d 70 46 72 61 6d 65 2d 3e 70 63 20 29 3b 0a  ==pFrame->pc );.
33050 20 20 7d 0a 0a 20 20 70 2d 3e 6e 46 72 61 6d 65    }..  p->nFrame
33060 2b 2b 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70 50  ++;.  pFrame->pP
33070 61 72 65 6e 74 20 3d 20 70 2d 3e 70 46 72 61 6d  arent = p->pFram
33080 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6c 61 73  e;.  pFrame->las
33090 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73  tRowid = db->las
330a0 74 52 6f 77 69 64 3b 0a 20 20 70 46 72 61 6d 65  tRowid;.  pFrame
330b0 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 70 2d 3e 6e  ->nChange = p->n
330c0 43 68 61 6e 67 65 3b 0a 20 20 70 46 72 61 6d 65  Change;.  pFrame
330d0 2d 3e 6e 44 62 43 68 61 6e 67 65 20 3d 20 70 2d  ->nDbChange = p-
330e0 3e 64 62 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20  >db->nChange;.  
330f0 61 73 73 65 72 74 28 20 70 46 72 61 6d 65 2d 3e  assert( pFrame->
33100 70 41 75 78 44 61 74 61 3d 3d 30 20 29 3b 0a 20  pAuxData==0 );. 
33110 20 70 46 72 61 6d 65 2d 3e 70 41 75 78 44 61 74   pFrame->pAuxDat
33120 61 20 3d 20 70 2d 3e 70 41 75 78 44 61 74 61 3b  a = p->pAuxData;
33130 0a 20 20 70 2d 3e 70 41 75 78 44 61 74 61 20 3d  .  p->pAuxData =
33140 20 30 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65   0;.  p->nChange
33150 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d   = 0;.  p->pFram
33160 65 20 3d 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d  e = pFrame;.  p-
33170 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d 20 56  >aMem = aMem = V
33180 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61  dbeFrameMem(pFra
33190 6d 65 29 3b 0a 20 20 70 2d 3e 6e 4d 65 6d 20 3d  me);.  p->nMem =
331a0 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d   pFrame->nChildM
331b0 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72 73 6f 72  em;.  p->nCursor
331c0 20 3d 20 28 75 31 36 29 70 46 72 61 6d 65 2d 3e   = (u16)pFrame->
331d0 6e 43 68 69 6c 64 43 73 72 3b 0a 20 20 70 2d 3e  nChildCsr;.  p->
331e0 61 70 43 73 72 20 3d 20 28 56 64 62 65 43 75 72  apCsr = (VdbeCur
331f0 73 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b 70 2d 3e  sor **)&aMem[p->
33200 6e 4d 65 6d 5d 3b 0a 20 20 70 46 72 61 6d 65 2d  nMem];.  pFrame-
33210 3e 61 4f 6e 63 65 20 3d 20 28 75 38 2a 29 26 70  >aOnce = (u8*)&p
33220 2d 3e 61 70 43 73 72 5b 70 50 72 6f 67 72 61 6d  ->apCsr[pProgram
33230 2d 3e 6e 43 73 72 5d 3b 0a 20 20 6d 65 6d 73 65  ->nCsr];.  memse
33240 74 28 70 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 2c  t(pFrame->aOnce,
33250 20 30 2c 20 28 70 50 72 6f 67 72 61 6d 2d 3e 6e   0, (pProgram->n
33260 4f 70 20 2b 20 37 29 2f 38 29 3b 0a 20 20 70 2d  Op + 7)/8);.  p-
33270 3e 61 4f 70 20 3d 20 61 4f 70 20 3d 20 70 50 72  >aOp = aOp = pPr
33280 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d  ogram->aOp;.  p-
33290 3e 6e 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d  >nOp = pProgram-
332a0 3e 6e 4f 70 3b 0a 23 69 66 64 65 66 20 53 51 4c  >nOp;.#ifdef SQL
332b0 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f  ITE_ENABLE_STMT_
332c0 53 43 41 4e 53 54 41 54 55 53 0a 20 20 70 2d 3e  SCANSTATUS.  p->
332d0 61 6e 45 78 65 63 20 3d 20 30 3b 0a 23 65 6e 64  anExec = 0;.#end
332e0 69 66 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b  if.  pOp = &aOp[
332f0 2d 31 5d 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d  -1];..  break;.}
33300 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72  ../* Opcode: Par
33310 61 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  am P1 P2 * * *.*
33320 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
33330 20 69 73 20 6f 6e 6c 79 20 65 76 65 72 20 70 72   is only ever pr
33340 65 73 65 6e 74 20 69 6e 20 73 75 62 2d 70 72 6f  esent in sub-pro
33350 67 72 61 6d 73 20 63 61 6c 6c 65 64 20 76 69 61  grams called via
33360 20 74 68 65 20 0a 2a 2a 20 4f 50 5f 50 72 6f 67   the .** OP_Prog
33370 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ram instruction.
33380 20 43 6f 70 79 20 61 20 76 61 6c 75 65 20 63 75   Copy a value cu
33390 72 72 65 6e 74 6c 79 20 73 74 6f 72 65 64 20 69  rrently stored i
333a0 6e 20 61 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63  n a memory .** c
333b0 65 6c 6c 20 6f 66 20 74 68 65 20 63 61 6c 6c 69  ell of the calli
333c0 6e 67 20 28 70 61 72 65 6e 74 29 20 66 72 61 6d  ng (parent) fram
333d0 65 20 74 6f 20 63 65 6c 6c 20 50 32 20 69 6e 20  e to cell P2 in 
333e0 74 68 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d  the current fram
333f0 65 73 20 0a 2a 2a 20 61 64 64 72 65 73 73 20 73  es .** address s
33400 70 61 63 65 2e 20 54 68 69 73 20 69 73 20 75 73  pace. This is us
33410 65 64 20 62 79 20 74 72 69 67 67 65 72 20 70 72  ed by trigger pr
33420 6f 67 72 61 6d 73 20 74 6f 20 61 63 63 65 73 73  ograms to access
33430 20 74 68 65 20 6e 65 77 2e 2a 20 0a 2a 2a 20 61   the new.* .** a
33440 6e 64 20 6f 6c 64 2e 2a 20 76 61 6c 75 65 73 2e  nd old.* values.
33450 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 64 64 72 65  .**.** The addre
33460 73 73 20 6f 66 20 74 68 65 20 63 65 6c 6c 20 69  ss of the cell i
33470 6e 20 74 68 65 20 70 61 72 65 6e 74 20 66 72 61  n the parent fra
33480 6d 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  me is determined
33490 20 62 79 20 61 64 64 69 6e 67 0a 2a 2a 20 74 68   by adding.** th
334a0 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50  e value of the P
334b0 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  1 argument to th
334c0 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50  e value of the P
334d0 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  1 argument to th
334e0 65 0a 2a 2a 20 63 61 6c 6c 69 6e 67 20 4f 50 5f  e.** calling OP_
334f0 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74  Program instruct
33500 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
33510 50 61 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20  Param: {        
33520 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
33530 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d  VdbeFrame *pFram
33540 65 3b 0a 20 20 4d 65 6d 20 2a 70 49 6e 3b 0a 20  e;.  Mem *pIn;. 
33550 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
33560 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
33570 20 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46    pFrame = p->pF
33580 72 61 6d 65 3b 0a 20 20 70 49 6e 20 3d 20 26 70  rame;.  pIn = &p
33590 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d  Frame->aMem[pOp-
335a0 3e 70 31 20 2b 20 70 46 72 61 6d 65 2d 3e 61 4f  >p1 + pFrame->aO
335b0 70 5b 70 46 72 61 6d 65 2d 3e 70 63 5d 2e 70 31  p[pFrame->pc].p1
335c0 5d 3b 20 20 20 0a 20 20 73 71 6c 69 74 65 33 56  ];   .  sqlite3V
335d0 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
335e0 79 28 70 4f 75 74 2c 20 70 49 6e 2c 20 4d 45 4d  y(pOut, pIn, MEM
335f0 5f 45 70 68 65 6d 29 3b 0a 20 20 62 72 65 61 6b  _Ephem);.  break
33600 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 23  ;.}..#endif /* #
33610 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
33620 49 54 5f 54 52 49 47 47 45 52 20 2a 2f 0a 0a 23  IT_TRIGGER */..#
33630 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
33640 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 2f  IT_FOREIGN_KEY./
33650 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 43 6f 75 6e  * Opcode: FkCoun
33660 74 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ter P1 P2 * * *.
33670 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 66 6b 63  ** Synopsis: fkc
33680 74 72 5b 50 31 5d 2b 3d 50 32 0a 2a 2a 0a 2a 2a  tr[P1]+=P2.**.**
33690 20 49 6e 63 72 65 6d 65 6e 74 20 61 20 22 63 6f   Increment a "co
336a0 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72  nstraint counter
336b0 22 20 62 79 20 50 32 20 28 50 32 20 6d 61 79 20  " by P2 (P2 may 
336c0 62 65 20 6e 65 67 61 74 69 76 65 20 6f 72 20 70  be negative or p
336d0 6f 73 69 74 69 76 65 29 2e 0a 2a 2a 20 49 66 20  ositive)..** If 
336e0 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  P1 is non-zero, 
336f0 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
33700 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 20  straint counter 
33710 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 0a  is incremented .
33720 2a 2a 20 28 64 65 66 65 72 72 65 64 20 66 6f 72  ** (deferred for
33730 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
33740 69 6e 74 73 29 2e 20 4f 74 68 65 72 77 69 73 65  ints). Otherwise
33750 2c 20 69 66 20 50 31 20 69 73 20 7a 65 72 6f 2c  , if P1 is zero,
33760 20 74 68 65 20 0a 2a 2a 20 73 74 61 74 65 6d 65   the .** stateme
33770 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e  nt counter is in
33780 63 72 65 6d 65 6e 74 65 64 20 28 69 6d 6d 65 64  cremented (immed
33790 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  iate foreign key
337a0 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 0a 2a   constraints)..*
337b0 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 43 6f 75 6e  /.case OP_FkCoun
337c0 74 65 72 3a 20 7b 0a 20 20 69 66 28 20 64 62 2d  ter: {.  if( db-
337d0 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
337e0 44 65 66 65 72 46 4b 73 20 29 7b 0a 20 20 20 20  DeferFKs ){.    
337f0 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
33800 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b  Cons += pOp->p2;
33810 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70  .  }else if( pOp
33820 2d 3e 70 31 20 29 7b 0a 20 20 20 20 64 62 2d 3e  ->p1 ){.    db->
33830 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 2b 3d  nDeferredCons +=
33840 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73   pOp->p2;.  }els
33850 65 7b 0a 20 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e  e{.    p->nFkCon
33860 73 74 72 61 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e  straint += pOp->
33870 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
33880 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46  .}../* Opcode: F
33890 6b 49 66 5a 65 72 6f 20 50 31 20 50 32 20 2a 20  kIfZero P1 P2 * 
338a0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
338b0 20 69 66 20 66 6b 63 74 72 5b 50 31 5d 3d 3d 30   if fkctr[P1]==0
338c0 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54   goto P2.**.** T
338d0 68 69 73 20 6f 70 63 6f 64 65 20 74 65 73 74 73  his opcode tests
338e0 20 69 66 20 61 20 66 6f 72 65 69 67 6e 20 6b 65   if a foreign ke
338f0 79 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75  y constraint-cou
33900 6e 74 65 72 20 69 73 20 63 75 72 72 65 6e 74 6c  nter is currentl
33910 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66 20 73 6f  y zero..** If so
33920 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75  , jump to instru
33930 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77  ction P2. Otherw
33940 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  ise, fall throug
33950 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 0a 2a  h to the next .*
33960 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  * instruction..*
33970 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f  *.** If P1 is no
33980 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65  n-zero, then the
33990 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
339a0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  f the database c
339b0 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65  onstraint-counte
339c0 72 0a 2a 2a 20 69 73 20 7a 65 72 6f 20 28 74 68  r.** is zero (th
339d0 65 20 6f 6e 65 20 74 68 61 74 20 63 6f 75 6e 74  e one that count
339e0 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74  s deferred const
339f0 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73  raint violations
33a00 29 2e 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 7a  ). If P1 is.** z
33a10 65 72 6f 2c 20 74 68 65 20 6a 75 6d 70 20 69 73  ero, the jump is
33a20 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 73 74   taken if the st
33a30 61 74 65 6d 65 6e 74 20 63 6f 6e 73 74 72 61 69  atement constrai
33a40 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20 7a 65  nt-counter is ze
33a50 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69 61 74 65  ro.** (immediate
33a60 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
33a70 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
33a80 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ns)..*/.case OP_
33a90 46 6b 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20  FkIfZero: {     
33aa0 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
33ab0 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a   if( pOp->p1 ){.
33ac0 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
33ad0 6b 65 6e 28 64 62 2d 3e 6e 44 65 66 65 72 72 65  ken(db->nDeferre
33ae0 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e  dCons==0 && db->
33af0 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
33b00 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69 66 28  ==0, 2);.    if(
33b10 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
33b20 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65  ns==0 && db->nDe
33b30 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30  ferredImmCons==0
33b40 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
33b50 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  p2;.  }else{.   
33b60 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
33b70 28 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e  (p->nFkConstrain
33b80 74 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66  t==0 && db->nDef
33b90 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c  erredImmCons==0,
33ba0 20 32 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e   2);.    if( p->
33bb0 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30  nFkConstraint==0
33bc0 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65   && db->nDeferre
33bd0 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 67 6f  dImmCons==0 ) go
33be0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
33bf0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
33c00 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20  ndif /* #ifndef 
33c10 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
33c20 49 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e  IGN_KEY */..#ifn
33c30 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
33c40 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a  AUTOINCREMENT./*
33c50 20 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61 78 20   Opcode: MemMax 
33c60 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
33c70 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 6d  ynopsis: r[P1]=m
33c80 61 78 28 72 5b 50 31 5d 2c 72 5b 50 32 5d 29 0a  ax(r[P1],r[P2]).
33c90 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 72 65  **.** P1 is a re
33ca0 67 69 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f  gister in the ro
33cb0 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73  ot frame of this
33cc0 20 56 4d 20 28 74 68 65 20 72 6f 6f 74 20 66 72   VM (the root fr
33cd0 61 6d 65 20 69 73 0a 2a 2a 20 64 69 66 66 65 72  ame is.** differ
33ce0 65 6e 74 20 66 72 6f 6d 20 74 68 65 20 63 75 72  ent from the cur
33cf0 72 65 6e 74 20 66 72 61 6d 65 20 69 66 20 74 68  rent frame if th
33d00 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
33d10 73 20 62 65 69 6e 67 20 65 78 65 63 75 74 65 64  s being executed
33d20 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 73 75 62  .** within a sub
33d30 2d 70 72 6f 67 72 61 6d 29 2e 20 53 65 74 20 74  -program). Set t
33d40 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69  he value of regi
33d50 73 74 65 72 20 50 31 20 74 6f 20 74 68 65 20 6d  ster P1 to the m
33d60 61 78 69 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69 74  aximum of .** it
33d70 73 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20  s current value 
33d80 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e  and the value in
33d90 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
33da0 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
33db0 74 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e 20 65  tion throws an e
33dc0 72 72 6f 72 20 69 66 20 74 68 65 20 6d 65 6d 6f  rror if the memo
33dd0 72 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69  ry cell is not i
33de0 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69  nitially.** an i
33df0 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20  nteger..*/.case 
33e00 4f 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20  OP_MemMax: {    
33e10 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20      /* in2 */.  
33e20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d  VdbeFrame *pFram
33e30 65 3b 0a 20 20 69 66 28 20 70 2d 3e 70 46 72 61  e;.  if( p->pFra
33e40 6d 65 20 29 7b 0a 20 20 20 20 66 6f 72 28 70 46  me ){.    for(pF
33e50 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20  rame=p->pFrame; 
33e60 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b  pFrame->pParent;
33e70 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e   pFrame=pFrame->
33e80 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 70 49  pParent);.    pI
33e90 6e 31 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d  n1 = &pFrame->aM
33ea0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d  em[pOp->p1];.  }
33eb0 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31 20 3d  else{.    pIn1 =
33ec0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
33ed0 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 6d  .  }.  assert( m
33ee0 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20  emIsValid(pIn1) 
33ef0 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
33f00 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
33f10 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  n1);.  pIn2 = &a
33f20 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
33f30 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
33f40 74 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a  tegerify(pIn2);.
33f50 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c    if( pIn1->u.i<
33f60 70 49 6e 32 2d 3e 75 2e 69 29 7b 0a 20 20 20 20  pIn2->u.i){.    
33f70 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 49 6e 32  pIn1->u.i = pIn2
33f80 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 62 72 65  ->u.i;.  }.  bre
33f90 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
33fa0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
33fb0 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a  INCREMENT */../*
33fc0 20 4f 70 63 6f 64 65 3a 20 49 66 50 6f 73 20 50   Opcode: IfPos P
33fd0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
33fe0 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31  ynopsis: if r[P1
33ff0 5d 3e 30 20 74 68 65 6e 20 72 5b 50 31 5d 2d 3d  ]>0 then r[P1]-=
34000 50 33 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  P3, goto P2.**.*
34010 2a 20 52 65 67 69 73 74 65 72 20 50 31 20 6d 75  * Register P1 mu
34020 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  st contain an in
34030 74 65 67 65 72 2e 0a 2a 2a 20 49 66 20 74 68 65  teger..** If the
34040 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
34050 65 72 20 50 31 20 69 73 20 31 20 6f 72 20 67 72  er P1 is 1 or gr
34060 65 61 74 65 72 2c 20 73 75 62 74 72 61 63 74 20  eater, subtract 
34070 50 33 20 66 72 6f 6d 20 74 68 65 0a 2a 2a 20 76  P3 from the.** v
34080 61 6c 75 65 20 69 6e 20 50 31 20 61 6e 64 20 6a  alue in P1 and j
34090 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
340a0 20 49 66 20 74 68 65 20 69 6e 69 74 69 61 6c 20   If the initial 
340b0 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
340c0 72 20 50 31 20 69 73 20 6c 65 73 73 20 74 68 61  r P1 is less tha
340d0 6e 20 31 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a  n 1, then the.**
340e0 20 76 61 6c 75 65 20 69 73 20 75 6e 63 68 61 6e   value is unchan
340f0 67 65 64 20 61 6e 64 20 63 6f 6e 74 72 6f 6c 20  ged and control 
34100 70 61 73 73 65 73 20 74 68 72 6f 75 67 68 20 74  passes through t
34110 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
34120 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
34130 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20 20 20 20  OP_IfPos: {     
34140 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
34150 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
34160 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
34170 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
34180 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56  s&MEM_Int );.  V
34190 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 20  dbeBranchTaken( 
341a0 70 49 6e 31 2d 3e 75 2e 69 3e 30 2c 20 32 29 3b  pIn1->u.i>0, 2);
341b0 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69  .  if( pIn1->u.i
341c0 3e 30 20 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e  >0 ){.    pIn1->
341d0 75 2e 69 20 2d 3d 20 70 4f 70 2d 3e 70 33 3b 0a  u.i -= pOp->p3;.
341e0 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
341f0 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  _p2;.  }.  break
34200 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
34210 4f 66 66 73 65 74 4c 69 6d 69 74 20 50 31 20 50  OffsetLimit P1 P
34220 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
34230 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 30  psis: if r[P1]>0
34240 20 74 68 65 6e 20 72 5b 50 32 5d 3d 72 5b 50 31   then r[P2]=r[P1
34250 5d 2b 6d 61 78 28 30 2c 72 5b 50 33 5d 29 20 65  ]+max(0,r[P3]) e
34260 6c 73 65 20 72 5b 50 32 5d 3d 28 2d 31 29 0a 2a  lse r[P2]=(-1).*
34270 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
34280 20 70 65 72 66 6f 72 6d 73 20 61 20 63 6f 6d 6d   performs a comm
34290 6f 6e 6c 79 20 75 73 65 64 20 63 6f 6d 70 75 74  only used comput
342a0 61 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64  ation associated
342b0 20 77 69 74 68 0a 2a 2a 20 4c 49 4d 49 54 20 61   with.** LIMIT a
342c0 6e 64 20 4f 46 46 53 45 54 20 70 72 6f 63 65 73  nd OFFSET proces
342d0 73 2e 20 20 72 5b 50 31 5d 20 68 6f 6c 64 73 20  s.  r[P1] holds 
342e0 74 68 65 20 6c 69 6d 69 74 20 63 6f 75 6e 74 65  the limit counte
342f0 72 2e 20 20 72 5b 50 33 5d 0a 2a 2a 20 68 6f 6c  r.  r[P3].** hol
34300 64 73 20 74 68 65 20 6f 66 66 73 65 74 20 63 6f  ds the offset co
34310 75 6e 74 65 72 2e 20 20 54 68 65 20 6f 70 63 6f  unter.  The opco
34320 64 65 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20  de computes the 
34330 63 6f 6d 62 69 6e 65 64 20 76 61 6c 75 65 0a 2a  combined value.*
34340 2a 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 61  * of the LIMIT a
34350 6e 64 20 4f 46 46 53 45 54 20 61 6e 64 20 73 74  nd OFFSET and st
34360 6f 72 65 73 20 74 68 61 74 20 76 61 6c 75 65 20  ores that value 
34370 69 6e 20 72 5b 50 32 5d 2e 20 20 54 68 65 20 72  in r[P2].  The r
34380 5b 50 32 5d 0a 2a 2a 20 76 61 6c 75 65 20 63 6f  [P2].** value co
34390 6d 70 75 74 65 64 20 69 73 20 74 68 65 20 74 6f  mputed is the to
343a0 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  tal number of ro
343b0 77 73 20 74 68 61 74 20 77 69 6c 6c 20 6e 65 65  ws that will nee
343c0 64 20 74 6f 20 62 65 0a 2a 2a 20 76 69 73 69 74  d to be.** visit
343d0 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63  ed in order to c
343e0 6f 6d 70 6c 65 74 65 20 74 68 65 20 71 75 65 72  omplete the quer
343f0 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 72 5b 50 33  y..**.** If r[P3
34400 5d 20 69 73 20 7a 65 72 6f 20 6f 72 20 6e 65 67  ] is zero or neg
34410 61 74 69 76 65 2c 20 74 68 61 74 20 6d 65 61 6e  ative, that mean
34420 73 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4f 46  s there is no OF
34430 46 53 45 54 0a 2a 2a 20 61 6e 64 20 72 5b 50 32  FSET.** and r[P2
34440 5d 20 69 73 20 73 65 74 20 74 6f 20 62 65 20 74  ] is set to be t
34450 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
34460 4c 49 4d 49 54 2c 20 72 5b 50 31 5d 2e 0a 2a 2a  LIMIT, r[P1]..**
34470 0a 2a 2a 20 69 66 20 72 5b 50 31 5d 20 69 73 20  .** if r[P1] is 
34480 7a 65 72 6f 20 6f 72 20 6e 65 67 61 74 69 76 65  zero or negative
34490 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 65  , that means the
344a0 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 0a 2a  re is no LIMIT.*
344b0 2a 20 61 6e 64 20 72 5b 50 32 5d 20 69 73 20 73  * and r[P2] is s
344c0 65 74 20 74 6f 20 2d 31 2e 20 0a 2a 2a 0a 2a 2a  et to -1. .**.**
344d0 20 4f 74 68 65 72 77 69 73 65 2c 20 72 5b 50 32   Otherwise, r[P2
344e0 5d 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  ] is set to the 
344f0 73 75 6d 20 6f 66 20 72 5b 50 31 5d 20 61 6e 64  sum of r[P1] and
34500 20 72 5b 50 33 5d 2e 0a 2a 2f 0a 63 61 73 65 20   r[P3]..*/.case 
34510 4f 50 5f 4f 66 66 73 65 74 4c 69 6d 69 74 3a 20  OP_OffsetLimit: 
34520 7b 20 20 20 20 2f 2a 20 69 6e 31 2c 20 6f 75 74  {    /* in1, out
34530 32 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 36 34 20  2, in3 */.  i64 
34540 78 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  x;.  pIn1 = &aMe
34550 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49  m[pOp->p1];.  pI
34560 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
34570 70 33 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75  p3];.  pOut = ou
34580 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
34590 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20  pOp);.  assert( 
345a0 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
345b0 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72  M_Int );.  asser
345c0 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  t( pIn3->flags &
345d0 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 78 20   MEM_Int );.  x 
345e0 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 69  = pIn1->u.i;.  i
345f0 66 28 20 78 3c 3d 30 20 7c 7c 20 73 71 6c 69 74  f( x<=0 || sqlit
34600 65 33 41 64 64 49 6e 74 36 34 28 26 78 2c 20 70  e3AddInt64(&x, p
34610 49 6e 33 2d 3e 75 2e 69 3e 30 3f 70 49 6e 33 2d  In3->u.i>0?pIn3-
34620 3e 75 2e 69 3a 30 29 20 29 7b 0a 20 20 20 20 2f  >u.i:0) ){.    /
34630 2a 20 49 66 20 74 68 65 20 4c 49 4d 49 54 20 69  * If the LIMIT i
34640 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65  s less than or e
34650 71 75 61 6c 20 74 6f 20 7a 65 72 6f 2c 20 6c 6f  qual to zero, lo
34660 6f 70 20 66 6f 72 65 76 65 72 2e 20 20 54 68 69  op forever.  Thi
34670 73 0a 20 20 20 20 2a 2a 20 69 73 20 64 6f 63 75  s.    ** is docu
34680 6d 65 6e 74 65 64 2e 20 20 42 75 74 20 61 6c 73  mented.  But als
34690 6f 2c 20 69 66 20 74 68 65 20 4c 49 4d 49 54 2b  o, if the LIMIT+
346a0 4f 46 46 53 45 54 20 65 78 63 65 65 64 73 20 32  OFFSET exceeds 2
346b0 5e 36 33 20 74 68 65 6e 0a 20 20 20 20 2a 2a 20  ^63 then.    ** 
346c0 61 6c 73 6f 20 6c 6f 6f 70 20 66 6f 72 65 76 65  also loop foreve
346d0 72 2e 20 20 54 68 69 73 20 69 73 20 75 6e 64 6f  r.  This is undo
346e0 63 75 6d 65 6e 74 65 64 2e 20 20 49 6e 20 66 61  cumented.  In fa
346f0 63 74 2c 20 6f 6e 65 20 63 6f 75 6c 64 20 61 72  ct, one could ar
34700 67 75 65 0a 20 20 20 20 2a 2a 20 74 68 61 74 20  gue.    ** that 
34710 74 68 65 20 6c 6f 6f 70 20 73 68 6f 75 6c 64 20  the loop should 
34720 74 65 72 6d 69 6e 61 74 65 2e 20 20 42 75 74 20  terminate.  But 
34730 61 73 73 75 6d 69 6e 67 20 31 20 62 69 6c 6c 69  assuming 1 billi
34740 6f 6e 20 69 74 65 72 61 74 69 6f 6e 73 0a 20 20  on iterations.  
34750 20 20 2a 2a 20 70 65 72 20 73 65 63 6f 6e 64 20    ** per second 
34760 28 66 61 72 20 65 78 63 65 65 64 69 6e 67 20 74  (far exceeding t
34770 68 65 20 63 61 70 61 62 69 6c 69 74 69 65 73 20  he capabilities 
34780 6f 66 20 61 6e 79 20 63 75 72 72 65 6e 74 20 68  of any current h
34790 61 72 64 77 61 72 65 29 0a 20 20 20 20 2a 2a 20  ardware).    ** 
347a0 69 74 20 77 6f 75 6c 64 20 74 61 6b 65 20 6e 65  it would take ne
347b0 61 72 6c 79 20 33 30 30 20 79 65 61 72 73 20 74  arly 300 years t
347c0 6f 20 61 63 74 75 61 6c 6c 79 20 72 65 61 63 68  o actually reach
347d0 20 74 68 65 20 6c 69 6d 69 74 2e 20 20 53 6f 0a   the limit.  So.
347e0 20 20 20 20 2a 2a 20 6c 6f 6f 70 69 6e 67 20 66      ** looping f
347f0 6f 72 65 76 65 72 20 69 73 20 61 20 72 65 61 73  orever is a reas
34800 6f 6e 61 62 6c 65 20 61 70 70 72 6f 78 69 6d 61  onable approxima
34810 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 70 4f 75  tion. */.    pOu
34820 74 2d 3e 75 2e 69 20 3d 20 2d 31 3b 0a 20 20 7d  t->u.i = -1;.  }
34830 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e  else{.    pOut->
34840 75 2e 69 20 3d 20 78 3b 0a 20 20 7d 0a 20 20 62  u.i = x;.  }.  b
34850 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
34860 64 65 3a 20 49 66 4e 6f 74 5a 65 72 6f 20 50 31  de: IfNotZero P1
34870 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
34880 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21  opsis: if r[P1]!
34890 3d 30 20 74 68 65 6e 20 72 5b 50 31 5d 2d 2d 2c  =0 then r[P1]--,
348a0 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52   goto P2.**.** R
348b0 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74 20  egister P1 must 
348c0 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67  contain an integ
348d0 65 72 2e 20 20 49 66 20 74 68 65 20 63 6f 6e 74  er.  If the cont
348e0 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
348f0 50 31 20 69 73 0a 2a 2a 20 69 6e 69 74 69 61 6c  P1 is.** initial
34900 6c 79 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  ly greater than 
34910 7a 65 72 6f 2c 20 74 68 65 6e 20 64 65 63 72 65  zero, then decre
34920 6d 65 6e 74 20 74 68 65 20 76 61 6c 75 65 20 69  ment the value i
34930 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
34940 2a 20 49 66 20 69 74 20 69 73 20 6e 6f 6e 2d 7a  * If it is non-z
34950 65 72 6f 20 28 6e 65 67 61 74 69 76 65 20 6f 72  ero (negative or
34960 20 70 6f 73 69 74 69 76 65 29 20 61 6e 64 20 74   positive) and t
34970 68 65 6e 20 61 6c 73 6f 20 6a 75 6d 70 20 74 6f  hen also jump to
34980 20 50 32 2e 20 20 0a 2a 2a 20 49 66 20 72 65 67   P2.  .** If reg
34990 69 73 74 65 72 20 50 31 20 69 73 20 69 6e 69 74  ister P1 is init
349a0 69 61 6c 6c 79 20 7a 65 72 6f 2c 20 6c 65 61 76  ially zero, leav
349b0 65 20 69 74 20 75 6e 63 68 61 6e 67 65 64 20 61  e it unchanged a
349c0 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 2e  nd fall through.
349d0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f  .*/.case OP_IfNo
349e0 74 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20 20  tZero: {        
349f0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
34a00 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
34a10 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
34a20 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d  t( pIn1->flags&M
34a30 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64 62 65  EM_Int );.  Vdbe
34a40 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49 6e 31  BranchTaken(pIn1
34a50 2d 3e 75 2e 69 3c 30 2c 20 32 29 3b 0a 20 20 69  ->u.i<0, 2);.  i
34a60 66 28 20 70 49 6e 31 2d 3e 75 2e 69 20 29 7b 0a  f( pIn1->u.i ){.
34a70 20 20 20 20 20 69 66 28 20 70 49 6e 31 2d 3e 75       if( pIn1->u
34a80 2e 69 3e 30 20 29 20 70 49 6e 31 2d 3e 75 2e 69  .i>0 ) pIn1->u.i
34a90 2d 2d 3b 0a 20 20 20 20 20 67 6f 74 6f 20 6a 75  --;.     goto ju
34aa0 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
34ab0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
34ac0 6f 64 65 3a 20 44 65 63 72 4a 75 6d 70 5a 65 72  ode: DecrJumpZer
34ad0 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  o P1 P2 * * *.**
34ae0 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 28 2d   Synopsis: if (-
34af0 2d 72 5b 50 31 5d 29 3d 3d 30 20 67 6f 74 6f 20  -r[P1])==0 goto 
34b00 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65  P2.**.** Registe
34b10 72 20 50 31 20 6d 75 73 74 20 68 6f 6c 64 20 61  r P1 must hold a
34b20 6e 20 69 6e 74 65 67 65 72 2e 20 20 44 65 63 72  n integer.  Decr
34b30 65 6d 65 6e 74 20 74 68 65 20 76 61 6c 75 65 20  ement the value 
34b40 69 6e 20 50 31 0a 2a 2a 20 61 6e 64 20 6a 75 6d  in P1.** and jum
34b50 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 6e  p to P2 if the n
34b60 65 77 20 76 61 6c 75 65 20 69 73 20 65 78 61 63  ew value is exac
34b70 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73  tly zero..*/.cas
34b80 65 20 4f 50 5f 44 65 63 72 4a 75 6d 70 5a 65 72  e OP_DecrJumpZer
34b90 6f 3a 20 7b 20 20 20 20 20 20 2f 2a 20 6a 75 6d  o: {      /* jum
34ba0 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
34bb0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
34bc0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
34bd0 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  1->flags&MEM_Int
34be0 20 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e   );.  if( pIn1->
34bf0 75 2e 69 3e 53 4d 41 4c 4c 45 53 54 5f 49 4e 54  u.i>SMALLEST_INT
34c00 36 34 20 29 20 70 49 6e 31 2d 3e 75 2e 69 2d 2d  64 ) pIn1->u.i--
34c10 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
34c20 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30  ken(pIn1->u.i==0
34c30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31  , 2);.  if( pIn1
34c40 2d 3e 75 2e 69 3d 3d 30 20 29 20 67 6f 74 6f 20  ->u.i==0 ) goto 
34c50 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72  jump_to_p2;.  br
34c60 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f  eak;.}.../* Opco
34c70 64 65 3a 20 41 67 67 53 74 65 70 20 2a 20 50 32  de: AggStep * P2
34c80 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
34c90 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50  opsis: accum=r[P
34ca0 33 5d 20 73 74 65 70 28 72 5b 50 32 40 50 35 5d  3] step(r[P2@P5]
34cb0 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20  ).**.** Execute 
34cc0 74 68 65 20 78 53 74 65 70 20 66 75 6e 63 74 69  the xStep functi
34cd0 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67  on for an aggreg
34ce0 61 74 65 2e 0a 2a 2a 20 54 68 65 20 66 75 6e 63  ate..** The func
34cf0 74 69 6f 6e 20 68 61 73 20 50 35 20 61 72 67 75  tion has P5 argu
34d00 6d 65 6e 74 73 2e 20 20 50 34 20 69 73 20 61 20  ments.  P4 is a 
34d10 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 0a  pointer to the .
34d20 2a 2a 20 46 75 6e 63 44 65 66 20 73 74 72 75 63  ** FuncDef struc
34d30 74 75 72 65 20 74 68 61 74 20 73 70 65 63 69 66  ture that specif
34d40 69 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  ies the function
34d50 2e 20 20 52 65 67 69 73 74 65 72 20 50 33 20 69  .  Register P3 i
34d60 73 20 74 68 65 0a 2a 2a 20 61 63 63 75 6d 75 6c  s the.** accumul
34d70 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ator..**.** The 
34d80 50 35 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  P5 arguments are
34d90 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69   taken from regi
34da0 73 74 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a  ster P2 and its.
34db0 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a  ** successors..*
34dc0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67  /./* Opcode: Agg
34dd0 49 6e 76 65 72 73 65 20 2a 20 50 32 20 50 33 20  Inverse * P2 P3 
34de0 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
34df0 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20 69  s: accum=r[P3] i
34e00 6e 76 65 72 73 65 28 72 5b 50 32 40 50 35 5d 29  nverse(r[P2@P5])
34e10 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74  .**.** Execute t
34e20 68 65 20 78 49 6e 76 65 72 73 65 20 66 75 6e 63  he xInverse func
34e30 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72  tion for an aggr
34e40 65 67 61 74 65 2e 0a 2a 2a 20 54 68 65 20 66 75  egate..** The fu
34e50 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20 61 72  nction has P5 ar
34e60 67 75 6d 65 6e 74 73 2e 20 20 50 34 20 69 73 20  guments.  P4 is 
34e70 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
34e80 20 0a 2a 2a 20 46 75 6e 63 44 65 66 20 73 74 72   .** FuncDef str
34e90 75 63 74 75 72 65 20 74 68 61 74 20 73 70 65 63  ucture that spec
34ea0 69 66 69 65 73 20 74 68 65 20 66 75 6e 63 74 69  ifies the functi
34eb0 6f 6e 2e 20 20 52 65 67 69 73 74 65 72 20 50 33  on.  Register P3
34ec0 20 69 73 20 74 68 65 0a 2a 2a 20 61 63 63 75 6d   is the.** accum
34ed0 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68  ulator..**.** Th
34ee0 65 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20 61  e P5 arguments a
34ef0 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65  re taken from re
34f00 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 69 74  gister P2 and it
34f10 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e  s.** successors.
34f20 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .*/./* Opcode: A
34f30 67 67 53 74 65 70 31 20 50 31 20 50 32 20 50 33  ggStep1 P1 P2 P3
34f40 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
34f50 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20  is: accum=r[P3] 
34f60 73 74 65 70 28 72 5b 50 32 40 50 35 5d 29 0a 2a  step(r[P2@P5]).*
34f70 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65  *.** Execute the
34f80 20 78 53 74 65 70 20 28 69 66 20 50 31 3d 3d 30   xStep (if P1==0
34f90 29 20 6f 72 20 78 49 6e 76 65 72 73 65 20 28 69  ) or xInverse (i
34fa0 66 20 50 31 21 3d 30 29 20 66 75 6e 63 74 69 6f  f P1!=0) functio
34fb0 6e 20 66 6f 72 20 61 6e 0a 2a 2a 20 61 67 67 72  n for an.** aggr
34fc0 65 67 61 74 65 2e 20 20 54 68 65 20 66 75 6e 63  egate.  The func
34fd0 74 69 6f 6e 20 68 61 73 20 50 35 20 61 72 67 75  tion has P5 argu
34fe0 6d 65 6e 74 73 2e 20 20 50 34 20 69 73 20 61 20  ments.  P4 is a 
34ff0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 0a  pointer to the .
35000 2a 2a 20 46 75 6e 63 44 65 66 20 73 74 72 75 63  ** FuncDef struc
35010 74 75 72 65 20 74 68 61 74 20 73 70 65 63 69 66  ture that specif
35020 69 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  ies the function
35030 2e 20 20 52 65 67 69 73 74 65 72 20 50 33 20 69  .  Register P3 i
35040 73 20 74 68 65 0a 2a 2a 20 61 63 63 75 6d 75 6c  s the.** accumul
35050 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ator..**.** The 
35060 50 35 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  P5 arguments are
35070 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69   taken from regi
35080 73 74 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a  ster P2 and its.
35090 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a  ** successors..*
350a0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
350b0 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 63 6f   is initially co
350c0 64 65 64 20 61 73 20 4f 50 5f 41 67 67 53 74 65  ded as OP_AggSte
350d0 70 30 2e 20 20 4f 6e 20 66 69 72 73 74 20 65 76  p0.  On first ev
350e0 61 6c 75 61 74 69 6f 6e 2c 0a 2a 2a 20 74 68 65  aluation,.** the
350f0 20 46 75 6e 63 44 65 66 20 73 74 6f 72 65 64 20   FuncDef stored 
35100 69 6e 20 50 34 20 69 73 20 63 6f 6e 76 65 72 74  in P4 is convert
35110 65 64 20 69 6e 74 6f 20 61 6e 20 73 71 6c 69 74  ed into an sqlit
35120 65 33 5f 63 6f 6e 74 65 78 74 20 61 6e 64 0a 2a  e3_context and.*
35130 2a 20 74 68 65 20 6f 70 63 6f 64 65 20 69 73 20  * the opcode is 
35140 63 68 61 6e 67 65 64 2e 20 20 49 6e 20 74 68 69  changed.  In thi
35150 73 20 77 61 79 2c 20 74 68 65 20 69 6e 69 74 69  s way, the initi
35160 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 20 74 68 65  alization of the
35170 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  .** sqlite3_cont
35180 65 78 74 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73  ext only happens
35190 20 6f 6e 63 65 2c 20 69 6e 73 74 65 61 64 20 6f   once, instead o
351a0 66 20 6f 6e 20 65 61 63 68 20 63 61 6c 6c 20 74  f on each call t
351b0 6f 20 74 68 65 0a 2a 2a 20 73 74 65 70 20 66 75  o the.** step fu
351c0 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  nction..*/.case 
351d0 4f 50 5f 41 67 67 49 6e 76 65 72 73 65 3a 0a 63  OP_AggInverse:.c
351e0 61 73 65 20 4f 50 5f 41 67 67 53 74 65 70 3a 20  ase OP_AggStep: 
351f0 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 73 71 6c  {.  int n;.  sql
35200 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43  ite3_context *pC
35210 74 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  tx;..  assert( p
35220 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46  Op->p4type==P4_F
35230 55 4e 43 44 45 46 20 29 3b 0a 20 20 6e 20 3d 20  UNCDEF );.  n = 
35240 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65 72  pOp->p5;.  asser
35250 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
35260 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
35270 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
35280 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  ) );.  assert( n
35290 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e  ==0 || (pOp->p2>
352a0 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d  0 && pOp->p2+n<=
352b0 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
352c0 6e 43 75 72 73 6f 72 29 2b 31 29 20 29 3b 0a 20  nCursor)+1) );. 
352d0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
352e0 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d  <pOp->p2 || pOp-
352f0 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29  >p3>=pOp->p2+n )
35300 3b 0a 20 20 70 43 74 78 20 3d 20 73 71 6c 69 74  ;.  pCtx = sqlit
35310 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28  e3DbMallocRawNN(
35320 64 62 2c 20 6e 2a 73 69 7a 65 6f 66 28 73 71 6c  db, n*sizeof(sql
35330 69 74 65 33 5f 76 61 6c 75 65 2a 29 20 2b 0a 20  ite3_value*) +. 
35340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73                (s
35350 69 7a 65 6f 66 28 70 43 74 78 5b 30 5d 29 20 2b  izeof(pCtx[0]) +
35360 20 73 69 7a 65 6f 66 28 4d 65 6d 29 20 2d 20 73   sizeof(Mem) - s
35370 69 7a 65 6f 66 28 73 71 6c 69 74 65 33 5f 76 61  izeof(sqlite3_va
35380 6c 75 65 2a 29 29 29 3b 0a 20 20 69 66 28 20 70  lue*)));.  if( p
35390 43 74 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  Ctx==0 ) goto no
353a0 5f 6d 65 6d 3b 0a 20 20 70 43 74 78 2d 3e 70 4d  _mem;.  pCtx->pM
353b0 65 6d 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d 3e  em = 0;.  pCtx->
353c0 70 4f 75 74 20 3d 20 28 4d 65 6d 2a 29 26 28 70  pOut = (Mem*)&(p
353d0 43 74 78 2d 3e 61 72 67 76 5b 6e 5d 29 3b 0a 20  Ctx->argv[n]);. 
353e0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
353f0 6e 69 74 28 70 43 74 78 2d 3e 70 4f 75 74 2c 20  nit(pCtx->pOut, 
35400 64 62 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  db, MEM_Null);. 
35410 20 70 43 74 78 2d 3e 70 46 75 6e 63 20 3d 20 70   pCtx->pFunc = p
35420 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20  Op->p4.pFunc;.  
35430 70 43 74 78 2d 3e 69 4f 70 20 3d 20 28 69 6e 74  pCtx->iOp = (int
35440 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20  )(pOp - aOp);.  
35450 70 43 74 78 2d 3e 70 56 64 62 65 20 3d 20 70 3b  pCtx->pVdbe = p;
35460 0a 20 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61  .  pCtx->skipFla
35470 67 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d 3e 69  g = 0;.  pCtx->i
35480 73 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20 70 43  sError = 0;.  pC
35490 74 78 2d 3e 61 72 67 63 20 3d 20 6e 3b 0a 20 20  tx->argc = n;.  
354a0 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20 50 34  pOp->p4type = P4
354b0 5f 46 55 4e 43 43 54 58 3b 0a 20 20 70 4f 70 2d  _FUNCCTX;.  pOp-
354c0 3e 70 34 2e 70 43 74 78 20 3d 20 70 43 74 78 3b  >p4.pCtx = pCtx;
354d0 0a 0a 20 20 2f 2a 20 4f 50 5f 41 67 67 49 6e 76  ..  /* OP_AggInv
354e0 65 72 73 65 20 6d 75 73 74 20 68 61 76 65 20 50  erse must have P
354f0 31 3d 3d 31 20 61 6e 64 20 4f 50 5f 41 67 67 53  1==1 and OP_AggS
35500 74 65 70 20 6d 75 73 74 20 68 61 76 65 20 50 31  tep must have P1
35510 3d 3d 30 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ==0 */.  assert(
35520 20 70 4f 70 2d 3e 70 31 3d 3d 28 70 4f 70 2d 3e   pOp->p1==(pOp->
35530 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 67 67 49 6e  opcode==OP_AggIn
35540 76 65 72 73 65 29 20 29 3b 0a 0a 20 20 70 4f 70  verse) );..  pOp
35550 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 41 67  ->opcode = OP_Ag
35560 67 53 74 65 70 31 3b 0a 20 20 2f 2a 20 46 61 6c  gStep1;.  /* Fal
35570 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f  l through into O
35580 50 5f 41 67 67 53 74 65 70 20 2a 2f 0a 7d 0a 63  P_AggStep */.}.c
35590 61 73 65 20 4f 50 5f 41 67 67 53 74 65 70 31 3a  ase OP_AggStep1:
355a0 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73 71   {.  int i;.  sq
355b0 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70  lite3_context *p
355c0 43 74 78 3b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  Ctx;.  Mem *pMem
355d0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
355e0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e  ->p4type==P4_FUN
355f0 43 43 54 58 20 29 3b 0a 20 20 70 43 74 78 20 3d  CCTX );.  pCtx =
35600 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78 3b 0a 20   pOp->p4.pCtx;. 
35610 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f   pMem = &aMem[pO
35620 70 2d 3e 70 33 5d 3b 0a 0a 23 69 66 64 65 66 20  p->p3];..#ifdef 
35630 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69  SQLITE_DEBUG.  i
35640 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20  f( pOp->p1 ){.  
35650 20 20 2f 2a 20 54 68 69 73 20 69 73 20 61 6e 20    /* This is an 
35660 4f 50 5f 41 67 67 49 6e 76 65 72 73 65 20 63 61  OP_AggInverse ca
35670 6c 6c 2e 20 20 56 65 72 69 66 79 20 74 68 61 74  ll.  Verify that
35680 20 78 53 74 65 70 20 68 61 73 20 61 6c 77 61 79   xStep has alway
35690 73 0a 20 20 20 20 2a 2a 20 62 65 65 6e 20 63 61  s.    ** been ca
356a0 6c 6c 65 64 20 61 74 20 6c 65 61 73 74 20 6f 6e  lled at least on
356b0 63 65 20 70 72 69 6f 72 20 74 6f 20 61 6e 79 20  ce prior to any 
356c0 78 49 6e 76 65 72 73 65 20 63 61 6c 6c 2e 20 2a  xInverse call. *
356d0 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4d  /.    assert( pM
356e0 65 6d 2d 3e 75 54 65 6d 70 3d 3d 30 78 31 31 32  em->uTemp==0x112
356f0 32 65 30 65 33 20 29 3b 0a 20 20 7d 65 6c 73 65  2e0e3 );.  }else
35700 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73  {.    /* This is
35710 20 61 6e 20 4f 50 5f 41 67 67 53 74 65 70 20 63   an OP_AggStep c
35720 61 6c 6c 2e 20 20 4d 61 72 6b 20 69 74 20 61 73  all.  Mark it as
35730 20 73 75 63 68 2e 20 2a 2f 0a 20 20 20 20 70 4d   such. */.    pM
35740 65 6d 2d 3e 75 54 65 6d 70 20 3d 20 30 78 31 31  em->uTemp = 0x11
35750 32 32 65 30 65 33 3b 0a 20 20 7d 0a 23 65 6e 64  22e0e3;.  }.#end
35760 69 66 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73  if..  /* If this
35770 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e 73   function is ins
35780 69 64 65 20 6f 66 20 61 20 74 72 69 67 67 65 72  ide of a trigger
35790 2c 20 74 68 65 20 72 65 67 69 73 74 65 72 20 61  , the register a
357a0 72 72 61 79 20 69 6e 20 61 4d 65 6d 5b 5d 0a 20  rray in aMem[]. 
357b0 20 2a 2a 20 6d 69 67 68 74 20 63 68 61 6e 67 65   ** might change
357c0 20 66 72 6f 6d 20 6f 6e 65 20 65 76 61 6c 75 61   from one evalua
357d0 74 69 6f 6e 20 74 6f 20 74 68 65 20 6e 65 78 74  tion to the next
357e0 2e 20 20 54 68 65 20 6e 65 78 74 20 62 6c 6f 63  .  The next bloc
357f0 6b 20 6f 66 20 63 6f 64 65 0a 20 20 2a 2a 20 63  k of code.  ** c
35800 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20  hecks to see if 
35810 74 68 65 20 72 65 67 69 73 74 65 72 20 61 72 72  the register arr
35820 61 79 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20  ay has changed, 
35830 61 6e 64 20 69 66 20 73 6f 20 69 74 0a 20 20 2a  and if so it.  *
35840 2a 20 72 65 69 6e 69 74 69 61 6c 69 7a 65 73 20  * reinitializes 
35850 74 68 65 20 72 65 6c 61 76 61 6e 74 20 70 61 72  the relavant par
35860 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  ts of the sqlite
35870 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63 74  3_context object
35880 20 2a 2f 0a 20 20 69 66 28 20 70 43 74 78 2d 3e   */.  if( pCtx->
35890 70 4d 65 6d 20 21 3d 20 70 4d 65 6d 20 29 7b 0a  pMem != pMem ){.
358a0 20 20 20 20 70 43 74 78 2d 3e 70 4d 65 6d 20 3d      pCtx->pMem =
358b0 20 70 4d 65 6d 3b 0a 20 20 20 20 66 6f 72 28 69   pMem;.    for(i
358c0 3d 70 43 74 78 2d 3e 61 72 67 63 2d 31 3b 20 69  =pCtx->argc-1; i
358d0 3e 3d 30 3b 20 69 2d 2d 29 20 70 43 74 78 2d 3e  >=0; i--) pCtx->
358e0 61 72 67 76 5b 69 5d 20 3d 20 26 61 4d 65 6d 5b  argv[i] = &aMem[
358f0 70 4f 70 2d 3e 70 32 2b 69 5d 3b 0a 20 20 7d 0a  pOp->p2+i];.  }.
35900 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
35910 45 42 55 47 0a 20 20 66 6f 72 28 69 3d 30 3b 20  EBUG.  for(i=0; 
35920 69 3c 70 43 74 78 2d 3e 61 72 67 63 3b 20 69 2b  i<pCtx->argc; i+
35930 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  +){.    assert( 
35940 6d 65 6d 49 73 56 61 6c 69 64 28 70 43 74 78 2d  memIsValid(pCtx-
35950 3e 61 72 67 76 5b 69 5d 29 20 29 3b 0a 20 20 20  >argv[i]) );.   
35960 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
35970 70 4f 70 2d 3e 70 32 2b 69 2c 20 70 43 74 78 2d  pOp->p2+i, pCtx-
35980 3e 61 72 67 76 5b 69 5d 29 3b 0a 20 20 7d 0a 23  >argv[i]);.  }.#
35990 65 6e 64 69 66 0a 0a 20 20 70 4d 65 6d 2d 3e 6e  endif..  pMem->n
359a0 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  ++;.  assert( pC
359b0 74 78 2d 3e 70 4f 75 74 2d 3e 66 6c 61 67 73 3d  tx->pOut->flags=
359c0 3d 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 61  =MEM_Null );.  a
359d0 73 73 65 72 74 28 20 70 43 74 78 2d 3e 69 73 45  ssert( pCtx->isE
359e0 72 72 6f 72 3d 3d 30 20 29 3b 0a 20 20 61 73 73  rror==0 );.  ass
359f0 65 72 74 28 20 70 43 74 78 2d 3e 73 6b 69 70 46  ert( pCtx->skipF
35a00 6c 61 67 3d 3d 30 20 29 3b 0a 23 69 66 6e 64 65  lag==0 );.#ifnde
35a10 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49  f SQLITE_OMIT_WI
35a20 4e 44 4f 57 46 55 4e 43 0a 20 20 69 66 28 20 70  NDOWFUNC.  if( p
35a30 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 28 70  Op->p1 ){.    (p
35a40 43 74 78 2d 3e 70 46 75 6e 63 2d 3e 78 49 6e 76  Ctx->pFunc->xInv
35a50 65 72 73 65 29 28 70 43 74 78 2c 70 43 74 78 2d  erse)(pCtx,pCtx-
35a60 3e 61 72 67 63 2c 70 43 74 78 2d 3e 61 72 67 76  >argc,pCtx->argv
35a70 29 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69  );.  }else.#endi
35a80 66 0a 20 20 28 70 43 74 78 2d 3e 70 46 75 6e 63  f.  (pCtx->pFunc
35a90 2d 3e 78 53 46 75 6e 63 29 28 70 43 74 78 2c 70  ->xSFunc)(pCtx,p
35aa0 43 74 78 2d 3e 61 72 67 63 2c 70 43 74 78 2d 3e  Ctx->argc,pCtx->
35ab0 61 72 67 76 29 3b 20 2f 2a 20 49 4d 50 3a 20 52  argv); /* IMP: R
35ac0 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a  -24505-23230 */.
35ad0 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 69 73 45  .  if( pCtx->isE
35ae0 72 72 6f 72 20 29 7b 0a 20 20 20 20 69 66 28 20  rror ){.    if( 
35af0 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 3e 30 20  pCtx->isError>0 
35b00 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
35b10 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73  VdbeError(p, "%s
35b20 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ", sqlite3_value
35b30 5f 74 65 78 74 28 70 43 74 78 2d 3e 70 4f 75 74  _text(pCtx->pOut
35b40 29 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 70  ));.      rc = p
35b50 43 74 78 2d 3e 69 73 45 72 72 6f 72 3b 0a 20 20  Ctx->isError;.  
35b60 20 20 7d 0a 20 20 20 20 69 66 28 20 70 43 74 78    }.    if( pCtx
35b70 2d 3e 73 6b 69 70 46 6c 61 67 20 29 7b 0a 20 20  ->skipFlag ){.  
35b80 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
35b90 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43  -1].opcode==OP_C
35ba0 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20 20 20  ollSeq );.      
35bb0 69 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 31 3b 0a  i = pOp[-1].p1;.
35bc0 20 20 20 20 20 20 69 66 28 20 69 20 29 20 73 71        if( i ) sq
35bd0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49  lite3VdbeMemSetI
35be0 6e 74 36 34 28 26 61 4d 65 6d 5b 69 5d 2c 20 31  nt64(&aMem[i], 1
35bf0 29 3b 0a 20 20 20 20 20 20 70 43 74 78 2d 3e 73  );.      pCtx->s
35c00 6b 69 70 46 6c 61 67 20 3d 20 30 3b 0a 20 20 20  kipFlag = 0;.   
35c10 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64   }.    sqlite3Vd
35c20 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70 43 74  beMemRelease(pCt
35c30 78 2d 3e 70 4f 75 74 29 3b 0a 20 20 20 20 70 43  x->pOut);.    pC
35c40 74 78 2d 3e 70 4f 75 74 2d 3e 66 6c 61 67 73 20  tx->pOut->flags 
35c50 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20  = MEM_Null;.    
35c60 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 20 3d 20  pCtx->isError = 
35c70 30 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20  0;.    if( rc ) 
35c80 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
35c90 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 61  o_error;.  }.  a
35ca0 73 73 65 72 74 28 20 70 43 74 78 2d 3e 70 4f 75  ssert( pCtx->pOu
35cb0 74 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 4e 75  t->flags==MEM_Nu
35cc0 6c 6c 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ll );.  assert( 
35cd0 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67 3d 3d  pCtx->skipFlag==
35ce0 30 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  0 );.  break;.}.
35cf0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 46  ./* Opcode: AggF
35d00 69 6e 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20  inal P1 P2 * P4 
35d10 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61  *.** Synopsis: a
35d20 63 63 75 6d 3d 72 5b 50 31 5d 20 4e 3d 50 32 0a  ccum=r[P1] N=P2.
35d30 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20  **.** P1 is the 
35d40 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20  memory location 
35d50 74 68 61 74 20 69 73 20 74 68 65 20 61 63 63 75  that is the accu
35d60 6d 75 6c 61 74 6f 72 20 66 6f 72 20 61 6e 20 61  mulator for an a
35d70 67 67 72 65 67 61 74 65 0a 2a 2a 20 6f 72 20 77  ggregate.** or w
35d80 69 6e 64 6f 77 20 66 75 6e 63 74 69 6f 6e 2e 20  indow function. 
35d90 20 45 78 65 63 75 74 65 20 74 68 65 20 66 69 6e   Execute the fin
35da0 61 6c 69 7a 65 72 20 66 75 6e 63 74 69 6f 6e 20  alizer function 
35db0 0a 2a 2a 20 66 6f 72 20 61 6e 20 61 67 67 72 65  .** for an aggre
35dc0 67 61 74 65 20 61 6e 64 20 73 74 6f 72 65 20 74  gate and store t
35dd0 68 65 20 72 65 73 75 6c 74 20 69 6e 20 50 31 2e  he result in P1.
35de0 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65  .**.** P2 is the
35df0 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
35e00 65 6e 74 73 20 74 68 61 74 20 74 68 65 20 73 74  ents that the st
35e10 65 70 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65  ep function take
35e20 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69 73 20 61  s and.** P4 is a
35e30 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
35e40 46 75 6e 63 44 65 66 20 66 6f 72 20 74 68 69 73  FuncDef for this
35e50 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20   function.  The 
35e60 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 69  P2.** argument i
35e70 73 20 6e 6f 74 20 75 73 65 64 20 62 79 20 74 68  s not used by th
35e80 69 73 20 6f 70 63 6f 64 65 2e 20 20 49 74 20 69  is opcode.  It i
35e90 73 20 6f 6e 6c 79 20 74 68 65 72 65 20 74 6f 20  s only there to 
35ea0 64 69 73 61 6d 62 69 67 75 61 74 65 0a 2a 2a 20  disambiguate.** 
35eb0 66 75 6e 63 74 69 6f 6e 73 20 74 68 61 74 20 63  functions that c
35ec0 61 6e 20 74 61 6b 65 20 76 61 72 79 69 6e 67 20  an take varying 
35ed0 6e 75 6d 62 65 72 73 20 6f 66 20 61 72 67 75 6d  numbers of argum
35ee0 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a 20 50 34  ents.  The.** P4
35ef0 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6e 6c   argument is onl
35f00 79 20 6e 65 65 64 65 64 20 66 6f 72 20 74 68 65  y needed for the
35f10 20 63 61 73 65 20 77 68 65 72 65 0a 2a 2a 20 74   case where.** t
35f20 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e  he step function
35f30 20 77 61 73 20 6e 6f 74 20 70 72 65 76 69 6f 75   was not previou
35f40 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 2f  sly called..*/./
35f50 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 56 61 6c  * Opcode: AggVal
35f60 75 65 20 2a 20 50 32 20 50 33 20 50 34 20 2a 0a  ue * P2 P3 P4 *.
35f70 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
35f80 33 5d 3d 76 61 6c 75 65 20 4e 3d 50 32 0a 2a 2a  3]=value N=P2.**
35f90 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78  .** Invoke the x
35fa0 56 61 6c 75 65 28 29 20 66 75 6e 63 74 69 6f 6e  Value() function
35fb0 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
35fc0 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
35fd0 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69  r P3..**.** P2 i
35fe0 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
35ff0 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 74  arguments that t
36000 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e  he step function
36010 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34   takes and.** P4
36020 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
36030 20 74 68 65 20 46 75 6e 63 44 65 66 20 66 6f 72   the FuncDef for
36040 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20   this function. 
36050 20 54 68 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d   The P2.** argum
36060 65 6e 74 20 69 73 20 6e 6f 74 20 75 73 65 64 20  ent is not used 
36070 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20  by this opcode. 
36080 20 49 74 20 69 73 20 6f 6e 6c 79 20 74 68 65 72   It is only ther
36090 65 20 74 6f 20 64 69 73 61 6d 62 69 67 75 61 74  e to disambiguat
360a0 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74  e.** functions t
360b0 68 61 74 20 63 61 6e 20 74 61 6b 65 20 76 61 72  hat can take var
360c0 79 69 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66 20  ying numbers of 
360d0 61 72 67 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a  arguments.  The.
360e0 2a 2a 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69  ** P4 argument i
360f0 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f  s only needed fo
36100 72 20 74 68 65 20 63 61 73 65 20 77 68 65 72 65  r the case where
36110 0a 2a 2a 20 74 68 65 20 73 74 65 70 20 66 75 6e  .** the step fun
36120 63 74 69 6f 6e 20 77 61 73 20 6e 6f 74 20 70 72  ction was not pr
36130 65 76 69 6f 75 73 6c 79 20 63 61 6c 6c 65 64 2e  eviously called.
36140 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 56  .*/.case OP_AggV
36150 61 6c 75 65 3a 0a 63 61 73 65 20 4f 50 5f 41 67  alue:.case OP_Ag
36160 67 46 69 6e 61 6c 3a 20 7b 0a 20 20 4d 65 6d 20  gFinal: {.  Mem 
36170 2a 70 4d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28  *pMem;.  assert(
36180 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f   pOp->p1>0 && pO
36190 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p1<=(p->nMem+
361a0 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
361b0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
361c0 2d 3e 70 33 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  ->p3==0 || pOp->
361d0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 67 67 56 61  opcode==OP_AggVa
361e0 6c 75 65 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20  lue );.  pMem = 
361f0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
36200 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d    assert( (pMem-
36210 3e 66 6c 61 67 73 20 26 20 7e 28 4d 45 4d 5f 4e  >flags & ~(MEM_N
36220 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d 30  ull|MEM_Agg))==0
36230 20 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   );.#ifndef SQLI
36240 54 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55  TE_OMIT_WINDOWFU
36250 4e 43 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33  NC.  if( pOp->p3
36260 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
36270 69 74 65 33 56 64 62 65 4d 65 6d 41 67 67 56 61  ite3VdbeMemAggVa
36280 6c 75 65 28 70 4d 65 6d 2c 20 26 61 4d 65 6d 5b  lue(pMem, &aMem[
36290 70 4f 70 2d 3e 70 33 5d 2c 20 70 4f 70 2d 3e 70  pOp->p3], pOp->p
362a0 34 2e 70 46 75 6e 63 29 3b 0a 20 20 20 20 70 4d  4.pFunc);.    pM
362b0 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
362c0 70 33 5d 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e  p3];.  }else.#en
362d0 64 69 66 0a 20 20 7b 0a 20 20 20 20 72 63 20 3d  dif.  {.    rc =
362e0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46   sqlite3VdbeMemF
362f0 69 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c 20 70 4f  inalize(pMem, pO
36300 70 2d 3e 70 34 2e 70 46 75 6e 63 29 3b 0a 20 20  p->p4.pFunc);.  
36310 7d 0a 20 20 0a 20 20 69 66 28 20 72 63 20 29 7b  }.  .  if( rc ){
36320 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
36330 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 73  Error(p, "%s", s
36340 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
36350 74 28 70 4d 65 6d 29 29 3b 0a 20 20 20 20 67 6f  t(pMem));.    go
36360 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
36370 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71 6c  error;.  }.  sql
36380 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
36390 63 6f 64 69 6e 67 28 70 4d 65 6d 2c 20 65 6e 63  coding(pMem, enc
363a0 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44 41 54 45  oding);.  UPDATE
363b0 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4d  _MAX_BLOBSIZE(pM
363c0 65 6d 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  em);.  if( sqlit
363d0 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28  e3VdbeMemTooBig(
363e0 70 4d 65 6d 29 20 29 7b 0a 20 20 20 20 67 6f 74  pMem) ){.    got
363f0 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
36400 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64   break;.}..#ifnd
36410 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
36420 41 4c 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 68  AL./* Opcode: Ch
36430 65 63 6b 70 6f 69 6e 74 20 50 31 20 50 32 20 50  eckpoint P1 P2 P
36440 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63  3 * *.**.** Chec
36450 6b 70 6f 69 6e 74 20 64 61 74 61 62 61 73 65 20  kpoint database 
36460 50 31 2e 20 54 68 69 73 20 69 73 20 61 20 6e 6f  P1. This is a no
36470 2d 6f 70 20 69 66 20 50 31 20 69 73 20 6e 6f 74  -op if P1 is not
36480 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 0a 2a 2a   currently in.**
36490 20 57 41 4c 20 6d 6f 64 65 2e 20 50 61 72 61 6d   WAL mode. Param
364a0 65 74 65 72 20 50 32 20 69 73 20 6f 6e 65 20 6f  eter P2 is one o
364b0 66 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f  f SQLITE_CHECKPO
364c0 49 4e 54 5f 50 41 53 53 49 56 45 2c 20 46 55 4c  INT_PASSIVE, FUL
364d0 4c 2c 0a 2a 2a 20 52 45 53 54 41 52 54 2c 20 6f  L,.** RESTART, o
364e0 72 20 54 52 55 4e 43 41 54 45 2e 20 20 57 72 69  r TRUNCATE.  Wri
364f0 74 65 20 31 20 6f 72 20 30 20 69 6e 74 6f 20 6d  te 1 or 0 into m
36500 65 6d 5b 50 33 5d 20 69 66 20 74 68 65 20 63 68  em[P3] if the ch
36510 65 63 6b 70 6f 69 6e 74 20 72 65 74 75 72 6e 73  eckpoint returns
36520 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20  .** SQLITE_BUSY 
36530 6f 72 20 6e 6f 74 2c 20 72 65 73 70 65 63 74 69  or not, respecti
36540 76 65 6c 79 2e 20 20 57 72 69 74 65 20 74 68 65  vely.  Write the
36550 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
36560 20 69 6e 20 74 68 65 0a 2a 2a 20 57 41 4c 20 61   in the.** WAL a
36570 66 74 65 72 20 74 68 65 20 63 68 65 63 6b 70 6f  fter the checkpo
36580 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b  int into mem[P3+
36590 31 5d 20 61 6e 64 20 74 68 65 20 6e 75 6d 62 65  1] and the numbe
365a0 72 20 6f 66 20 70 61 67 65 73 0a 2a 2a 20 69 6e  r of pages.** in
365b0 20 74 68 65 20 57 41 4c 20 74 68 61 74 20 68 61   the WAL that ha
365c0 76 65 20 62 65 65 6e 20 63 68 65 63 6b 70 6f 69  ve been checkpoi
365d0 6e 74 65 64 20 61 66 74 65 72 20 74 68 65 20 63  nted after the c
365e0 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a 20 63 6f 6d  heckpoint.** com
365f0 70 6c 65 74 65 73 20 69 6e 74 6f 20 6d 65 6d 5b  pletes into mem[
36600 50 33 2b 32 5d 2e 20 20 48 6f 77 65 76 65 72 20  P3+2].  However 
36610 6f 6e 20 61 6e 20 65 72 72 6f 72 2c 20 6d 65 6d  on an error, mem
36620 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a 2a 20 6d 65  [P3+1] and.** me
36630 6d 5b 50 33 2b 32 5d 20 61 72 65 20 69 6e 69 74  m[P3+2] are init
36640 69 61 6c 69 7a 65 64 20 74 6f 20 2d 31 2e 0a 2a  ialized to -1..*
36650 2f 0a 63 61 73 65 20 4f 50 5f 43 68 65 63 6b 70  /.case OP_Checkp
36660 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 69 3b  oint: {.  int i;
36670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36680 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
36690 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69  p counter */.  i
366a0 6e 74 20 61 52 65 73 5b 33 5d 3b 20 20 20 20 20  nt aRes[3];     
366b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
366c0 2a 20 52 65 73 75 6c 74 73 20 2a 2f 0a 20 20 4d  * Results */.  M
366d0 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20  em *pMem;       
366e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
366f0 2a 20 57 72 69 74 65 20 72 65 73 75 6c 74 73 20  * Write results 
36700 68 65 72 65 20 2a 2f 0a 0a 20 20 61 73 73 65 72  here */..  asser
36710 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
36720 30 20 29 3b 0a 20 20 61 52 65 73 5b 30 5d 20 3d  0 );.  aRes[0] =
36730 20 30 3b 0a 20 20 61 52 65 73 5b 31 5d 20 3d 20   0;.  aRes[1] = 
36740 61 52 65 73 5b 32 5d 20 3d 20 2d 31 3b 0a 20 20  aRes[2] = -1;.  
36750 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d  assert( pOp->p2=
36760 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49  =SQLITE_CHECKPOI
36770 4e 54 5f 50 41 53 53 49 56 45 0a 20 20 20 20 20  NT_PASSIVE.     
36780 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51    || pOp->p2==SQ
36790 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f  LITE_CHECKPOINT_
367a0 46 55 4c 4c 0a 20 20 20 20 20 20 20 7c 7c 20 70  FULL.       || p
367b0 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43  Op->p2==SQLITE_C
367c0 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53 54 41 52  HECKPOINT_RESTAR
367d0 54 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d  T.       || pOp-
367e0 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43  >p2==SQLITE_CHEC
367f0 4b 50 4f 49 4e 54 5f 54 52 55 4e 43 41 54 45 0a  KPOINT_TRUNCATE.
36800 20 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69    );.  rc = sqli
36810 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 64 62  te3Checkpoint(db
36820 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
36830 70 32 2c 20 26 61 52 65 73 5b 31 5d 2c 20 26 61  p2, &aRes[1], &a
36840 52 65 73 5b 32 5d 29 3b 0a 20 20 69 66 28 20 72  Res[2]);.  if( r
36850 63 20 29 7b 0a 20 20 20 20 69 66 28 20 72 63 21  c ){.    if( rc!
36860 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 20 67  =SQLITE_BUSY ) g
36870 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
36880 5f 65 72 72 6f 72 3b 0a 20 20 20 20 72 63 20 3d  _error;.    rc =
36890 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20   SQLITE_OK;.    
368a0 61 52 65 73 5b 30 5d 20 3d 20 31 3b 0a 20 20 7d  aRes[0] = 1;.  }
368b0 0a 20 20 66 6f 72 28 69 3d 30 2c 20 70 4d 65 6d  .  for(i=0, pMem
368c0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
368d0 5d 3b 20 69 3c 33 3b 20 69 2b 2b 2c 20 70 4d 65  ]; i<3; i++, pMe
368e0 6d 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  m++){.    sqlite
368f0 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
36900 28 70 4d 65 6d 2c 20 28 69 36 34 29 61 52 65 73  (pMem, (i64)aRes
36910 5b 69 5d 29 3b 0a 20 20 7d 20 20 20 20 0a 20 20  [i]);.  }    .  
36920 62 72 65 61 6b 3b 0a 7d 3b 20 20 0a 23 65 6e 64  break;.};  .#end
36930 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
36940 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 0a 2f  TE_OMIT_PRAGMA./
36950 2a 20 4f 70 63 6f 64 65 3a 20 4a 6f 75 72 6e 61  * Opcode: Journa
36960 6c 4d 6f 64 65 20 50 31 20 50 32 20 50 33 20 2a  lMode P1 P2 P3 *
36970 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65 20   *.**.** Change 
36980 74 68 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65  the journal mode
36990 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 20   of database P1 
369a0 74 6f 20 50 33 2e 20 50 33 20 6d 75 73 74 20 62  to P3. P3 must b
369b0 65 20 6f 6e 65 20 6f 66 20 74 68 65 0a 2a 2a 20  e one of the.** 
369c0 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
369d0 45 5f 58 58 58 20 76 61 6c 75 65 73 2e 20 49 66  E_XXX values. If
369e0 20 63 68 61 6e 67 69 6e 67 20 62 65 74 77 65 65   changing betwee
369f0 6e 20 74 68 65 20 76 61 72 69 6f 75 73 20 72 6f  n the various ro
36a00 6c 6c 62 61 63 6b 0a 2a 2a 20 6d 6f 64 65 73 20  llback.** modes 
36a10 28 64 65 6c 65 74 65 2c 20 74 72 75 6e 63 61 74  (delete, truncat
36a20 65 2c 20 70 65 72 73 69 73 74 2c 20 6f 66 66 20  e, persist, off 
36a30 61 6e 64 20 6d 65 6d 6f 72 79 29 2c 20 74 68 69  and memory), thi
36a40 73 20 69 73 20 61 20 73 69 6d 70 6c 65 0a 2a 2a  s is a simple.**
36a50 20 6f 70 65 72 61 74 69 6f 6e 2e 20 4e 6f 20 49   operation. No I
36a60 4f 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a  O is required..*
36a70 2a 0a 2a 2a 20 49 66 20 63 68 61 6e 67 69 6e 67  *.** If changing
36a80 20 69 6e 74 6f 20 6f 72 20 6f 75 74 20 6f 66 20   into or out of 
36a90 57 41 4c 20 6d 6f 64 65 20 74 68 65 20 70 72 6f  WAL mode the pro
36aa0 63 65 64 75 72 65 20 69 73 20 6d 6f 72 65 20 63  cedure is more c
36ab0 6f 6d 70 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a  omplicated..**.*
36ac0 2a 20 57 72 69 74 65 20 61 20 73 74 72 69 6e 67  * Write a string
36ad0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
36ae0 66 69 6e 61 6c 20 6a 6f 75 72 6e 61 6c 2d 6d 6f  final journal-mo
36af0 64 65 20 74 6f 20 72 65 67 69 73 74 65 72 20 50  de to register P
36b00 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 6f  2..*/.case OP_Jo
36b10 75 72 6e 61 6c 4d 6f 64 65 3a 20 7b 20 20 20 20  urnalMode: {    
36b20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 42 74 72  /* out2 */.  Btr
36b30 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20 20  ee *pBt;        
36b40 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
36b50 42 74 72 65 65 20 74 6f 20 63 68 61 6e 67 65 20  Btree to change 
36b60 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20  journal mode of 
36b70 2a 2f 0a 20 20 50 61 67 65 72 20 2a 70 50 61 67  */.  Pager *pPag
36b80 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  er;             
36b90 20 20 20 20 20 2f 2a 20 50 61 67 65 72 20 61 73       /* Pager as
36ba0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 70 42  sociated with pB
36bb0 74 20 2a 2f 0a 20 20 69 6e 74 20 65 4e 65 77 3b  t */.  int eNew;
36bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36bd0 20 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 6a 6f         /* New jo
36be0 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20 20  urnal mode */.  
36bf0 69 6e 74 20 65 4f 6c 64 3b 20 20 20 20 20 20 20  int eOld;       
36c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36c10 2f 2a 20 54 68 65 20 6f 6c 64 20 6a 6f 75 72 6e  /* The old journ
36c20 61 6c 20 6d 6f 64 65 20 2a 2f 0a 23 69 66 6e 64  al mode */.#ifnd
36c30 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
36c40 41 4c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  AL.  const char 
36c50 2a 7a 46 69 6c 65 6e 61 6d 65 3b 20 20 20 20 20  *zFilename;     
36c60 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
36c70 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 66 6f  database file fo
36c80 72 20 70 50 61 67 65 72 20 2a 2f 0a 23 65 6e 64  r pPager */.#end
36c90 69 66 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74  if..  pOut = out
36ca0 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
36cb0 4f 70 29 3b 0a 20 20 65 4e 65 77 20 3d 20 70 4f  Op);.  eNew = pO
36cc0 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28  p->p3;.  assert(
36cd0 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
36ce0 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c 45 54 45 20  RNALMODE_DELETE 
36cf0 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
36d00 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
36d10 44 45 5f 54 52 55 4e 43 41 54 45 20 0a 20 20 20  DE_TRUNCATE .   
36d20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
36d30 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50  ER_JOURNALMODE_P
36d40 45 52 53 49 53 54 20 0a 20 20 20 20 20 20 20 7c  ERSIST .       |
36d50 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
36d60 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 0a 20 20  URNALMODE_OFF.  
36d70 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
36d80 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
36d90 4d 45 4d 4f 52 59 0a 20 20 20 20 20 20 20 7c 7c  MEMORY.       ||
36da0 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
36db0 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20  RNALMODE_WAL.   
36dc0 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
36dd0 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51  ER_JOURNALMODE_Q
36de0 55 45 52 59 0a 20 20 29 3b 0a 20 20 61 73 73 65  UERY.  );.  asse
36df0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
36e00 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
36e10 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  b );.  assert( p
36e20 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
36e30 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44  ..  pBt = db->aD
36e40 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a  b[pOp->p1].pBt;.
36e50 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74    pPager = sqlit
36e60 65 33 42 74 72 65 65 50 61 67 65 72 28 70 42 74  e3BtreePager(pBt
36e70 29 3b 0a 20 20 65 4f 6c 64 20 3d 20 73 71 6c 69  );.  eOld = sqli
36e80 74 65 33 50 61 67 65 72 47 65 74 4a 6f 75 72 6e  te3PagerGetJourn
36e90 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 3b 0a  alMode(pPager);.
36ea0 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41 47 45    if( eNew==PAGE
36eb0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55  R_JOURNALMODE_QU
36ec0 45 52 59 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c  ERY ) eNew = eOl
36ed0 64 3b 0a 20 20 69 66 28 20 21 73 71 6c 69 74 65  d;.  if( !sqlite
36ee0 33 50 61 67 65 72 4f 6b 54 6f 43 68 61 6e 67 65  3PagerOkToChange
36ef0 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67  JournalMode(pPag
36f00 65 72 29 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c  er) ) eNew = eOl
36f10 64 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  d;..#ifndef SQLI
36f20 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 7a 46  TE_OMIT_WAL.  zF
36f30 69 6c 65 6e 61 6d 65 20 3d 20 73 71 6c 69 74 65  ilename = sqlite
36f40 33 50 61 67 65 72 46 69 6c 65 6e 61 6d 65 28 70  3PagerFilename(p
36f50 50 61 67 65 72 2c 20 31 29 3b 0a 0a 20 20 2f 2a  Pager, 1);..  /*
36f60 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 61 20   Do not allow a 
36f70 74 72 61 6e 73 69 74 69 6f 6e 20 74 6f 20 6a 6f  transition to jo
36f80 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 20 66  urnal_mode=WAL f
36f90 6f 72 20 61 20 64 61 74 61 62 61 73 65 0a 20 20  or a database.  
36fa0 2a 2a 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20  ** in temporary 
36fb0 73 74 6f 72 61 67 65 20 6f 72 20 69 66 20 74 68  storage or if th
36fc0 65 20 56 46 53 20 64 6f 65 73 20 6e 6f 74 20 73  e VFS does not s
36fd0 75 70 70 6f 72 74 20 73 68 61 72 65 64 20 6d 65  upport shared me
36fe0 6d 6f 72 79 20 0a 20 20 2a 2f 0a 20 20 69 66 28  mory .  */.  if(
36ff0 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
37000 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20  RNALMODE_WAL.   
37010 26 26 20 28 73 71 6c 69 74 65 33 53 74 72 6c 65  && (sqlite3Strle
37020 6e 33 30 28 7a 46 69 6c 65 6e 61 6d 65 29 3d 3d  n30(zFilename)==
37030 30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  0           /* T
37040 65 6d 70 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20  emp file */.    
37050 20 20 20 7c 7c 20 21 73 71 6c 69 74 65 33 50 61     || !sqlite3Pa
37060 67 65 72 57 61 6c 53 75 70 70 6f 72 74 65 64 28  gerWalSupported(
37070 70 50 61 67 65 72 29 29 20 20 20 2f 2a 20 4e 6f  pPager))   /* No
37080 20 73 68 61 72 65 64 2d 6d 65 6d 6f 72 79 20 73   shared-memory s
37090 75 70 70 6f 72 74 20 2a 2f 0a 20 20 29 7b 0a 20  upport */.  ){. 
370a0 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a     eNew = eOld;.
370b0 20 20 7d 0a 0a 20 20 69 66 28 20 28 65 4e 65 77    }..  if( (eNew
370c0 21 3d 65 4f 6c 64 29 0a 20 20 20 26 26 20 28 65  !=eOld).   && (e
370d0 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  Old==PAGER_JOURN
370e0 41 4c 4d 4f 44 45 5f 57 41 4c 20 7c 7c 20 65 4e  ALMODE_WAL || eN
370f0 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
37100 4c 4d 4f 44 45 5f 57 41 4c 29 0a 20 20 29 7b 0a  LMODE_WAL).  ){.
37110 20 20 20 20 69 66 28 20 21 64 62 2d 3e 61 75 74      if( !db->aut
37120 6f 43 6f 6d 6d 69 74 20 7c 7c 20 64 62 2d 3e 6e  oCommit || db->n
37130 56 64 62 65 52 65 61 64 3e 31 20 29 7b 0a 20 20  VdbeRead>1 ){.  
37140 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
37150 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 73 71 6c  ERROR;.      sql
37160 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
37170 0a 20 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e  .          "cann
37180 6f 74 20 63 68 61 6e 67 65 20 25 73 20 77 61 6c  ot change %s wal
37190 20 6d 6f 64 65 20 66 72 6f 6d 20 77 69 74 68 69   mode from withi
371a0 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22  n a transaction"
371b0 2c 0a 20 20 20 20 20 20 20 20 20 20 28 65 4e 65  ,.          (eNe
371c0 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
371d0 4d 4f 44 45 5f 57 41 4c 20 3f 20 22 69 6e 74 6f  MODE_WAL ? "into
371e0 22 20 3a 20 22 6f 75 74 20 6f 66 22 29 0a 20 20  " : "out of").  
371f0 20 20 20 20 29 3b 0a 20 20 20 20 20 20 67 6f 74      );.      got
37200 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
37210 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  rror;.    }else{
37220 0a 20 0a 20 20 20 20 20 20 69 66 28 20 65 4f 6c  . .      if( eOl
37230 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  d==PAGER_JOURNAL
37240 4d 4f 44 45 5f 57 41 4c 20 29 7b 0a 20 20 20 20  MODE_WAL ){.    
37250 20 20 20 20 2f 2a 20 49 66 20 6c 65 61 76 69 6e      /* If leavin
37260 67 20 57 41 4c 20 6d 6f 64 65 2c 20 63 6c 6f 73  g WAL mode, clos
37270 65 20 74 68 65 20 6c 6f 67 20 66 69 6c 65 2e 20  e the log file. 
37280 49 66 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74  If successful, t
37290 68 65 20 63 61 6c 6c 0a 20 20 20 20 20 20 20 20  he call.        
372a0 2a 2a 20 74 6f 20 50 61 67 65 72 43 6c 6f 73 65  ** to PagerClose
372b0 57 61 6c 28 29 20 63 68 65 63 6b 70 6f 69 6e 74  Wal() checkpoint
372c0 73 20 61 6e 64 20 64 65 6c 65 74 65 73 20 74 68  s and deletes th
372d0 65 20 77 72 69 74 65 2d 61 68 65 61 64 2d 6c 6f  e write-ahead-lo
372e0 67 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 66 69  g .        ** fi
372f0 6c 65 2e 20 41 6e 20 45 58 43 4c 55 53 49 56 45  le. An EXCLUSIVE
37300 20 6c 6f 63 6b 20 6d 61 79 20 73 74 69 6c 6c 20   lock may still 
37310 62 65 20 68 65 6c 64 20 6f 6e 20 74 68 65 20 64  be held on the d
37320 61 74 61 62 61 73 65 20 66 69 6c 65 20 0a 20 20  atabase file .  
37330 20 20 20 20 20 20 2a 2a 20 61 66 74 65 72 20 61        ** after a
37340 20 73 75 63 63 65 73 73 66 75 6c 20 72 65 74 75   successful retu
37350 72 6e 2e 20 0a 20 20 20 20 20 20 20 20 2a 2f 0a  rn. .        */.
37360 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
37370 69 74 65 33 50 61 67 65 72 43 6c 6f 73 65 57 61  ite3PagerCloseWa
37380 6c 28 70 50 61 67 65 72 2c 20 64 62 29 3b 0a 20  l(pPager, db);. 
37390 20 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53         if( rc==S
373a0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
373b0 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 67        sqlite3Pag
373c0 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65  erSetJournalMode
373d0 28 70 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a  (pPager, eNew);.
373e0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
373f0 7d 65 6c 73 65 20 69 66 28 20 65 4f 6c 64 3d 3d  }else if( eOld==
37400 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
37410 45 5f 4d 45 4d 4f 52 59 20 29 7b 0a 20 20 20 20  E_MEMORY ){.    
37420 20 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 74 72      /* Cannot tr
37430 61 6e 73 69 74 69 6f 6e 20 64 69 72 65 63 74 6c  ansition directl
37440 79 20 66 72 6f 6d 20 4d 45 4d 4f 52 59 20 74 6f  y from MEMORY to
37450 20 57 41 4c 2e 20 20 55 73 65 20 6d 6f 64 65 20   WAL.  Use mode 
37460 4f 46 46 0a 20 20 20 20 20 20 20 20 2a 2a 20 61  OFF.        ** a
37470 73 20 61 6e 20 69 6e 74 65 72 6d 65 64 69 61 74  s an intermediat
37480 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 73 71 6c  e */.        sql
37490 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72  ite3PagerSetJour
374a0 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20  nalMode(pPager, 
374b0 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
374c0 45 5f 4f 46 46 29 3b 0a 20 20 20 20 20 20 7d 0a  E_OFF);.      }.
374d0 20 20 0a 20 20 20 20 20 20 2f 2a 20 4f 70 65 6e    .      /* Open
374e0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f   a transaction o
374f0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
37500 69 6c 65 2e 20 52 65 67 61 72 64 6c 65 73 73 20  ile. Regardless 
37510 6f 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 0a 20  of the journal. 
37520 20 20 20 20 20 2a 2a 20 6d 6f 64 65 2c 20 74 68       ** mode, th
37530 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61  is transaction a
37540 6c 77 61 79 73 20 75 73 65 73 20 61 20 72 6f 6c  lways uses a rol
37550 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a 20  lback journal.. 
37560 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73       */.      as
37570 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
37580 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29  eeIsInTrans(pBt)
37590 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28  ==0 );.      if(
375a0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
375b0 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  {.        rc = s
375c0 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 56 65  qlite3BtreeSetVe
375d0 72 73 69 6f 6e 28 70 42 74 2c 20 28 65 4e 65 77  rsion(pBt, (eNew
375e0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
375f0 4f 44 45 5f 57 41 4c 20 3f 20 32 20 3a 20 31 29  ODE_WAL ? 2 : 1)
37600 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
37610 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 69  .  }.#endif /* i
37620 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
37630 54 5f 57 41 4c 20 2a 2f 0a 0a 20 20 69 66 28 20  T_WAL */..  if( 
37640 72 63 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64  rc ) eNew = eOld
37650 3b 0a 20 20 65 4e 65 77 20 3d 20 73 71 6c 69 74  ;.  eNew = sqlit
37660 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61  e3PagerSetJourna
37670 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e  lMode(pPager, eN
37680 65 77 29 3b 0a 0a 20 20 70 4f 75 74 2d 3e 66 6c  ew);..  pOut->fl
37690 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45  ags = MEM_Str|ME
376a0 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72  M_Static|MEM_Ter
376b0 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 28  m;.  pOut->z = (
376c0 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33 4a 6f  char *)sqlite3Jo
376d0 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65 4e  urnalModename(eN
376e0 65 77 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  ew);.  pOut->n =
376f0 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
37700 28 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 70 4f 75  (pOut->z);.  pOu
37710 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f  t->enc = SQLITE_
37720 55 54 46 38 3b 0a 20 20 73 71 6c 69 74 65 33 56  UTF8;.  sqlite3V
37730 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
37740 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67  g(pOut, encoding
37750 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
37760 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
37770 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a  error;.  break;.
37780 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  };.#endif /* SQL
37790 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 20  ITE_OMIT_PRAGMA 
377a0 2a 2f 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  */..#if !defined
377b0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 41 43  (SQLITE_OMIT_VAC
377c0 55 55 4d 29 20 26 26 20 21 64 65 66 69 6e 65 64  UUM) && !defined
377d0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54  (SQLITE_OMIT_ATT
377e0 41 43 48 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ACH)./* Opcode: 
377f0 56 61 63 75 75 6d 20 50 31 20 2a 20 2a 20 2a 20  Vacuum P1 * * * 
37800 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d 20 74  *.**.** Vacuum t
37810 68 65 20 65 6e 74 69 72 65 20 64 61 74 61 62 61  he entire databa
37820 73 65 20 50 31 2e 20 20 50 31 20 69 73 20 30 20  se P1.  P1 is 0 
37830 66 6f 72 20 22 6d 61 69 6e 22 2c 20 61 6e 64 20  for "main", and 
37840 32 20 6f 72 20 6d 6f 72 65 0a 2a 2a 20 66 6f 72  2 or more.** for
37850 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74   an attached dat
37860 61 62 61 73 65 2e 20 20 54 68 65 20 22 74 65 6d  abase.  The "tem
37870 70 22 20 64 61 74 61 62 61 73 65 20 6d 61 79 20  p" database may 
37880 6e 6f 74 20 62 65 20 76 61 63 75 75 6d 65 64 2e  not be vacuumed.
37890 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 63 75  .*/.case OP_Vacu
378a0 75 6d 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20  um: {.  assert( 
378b0 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
378c0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
378d0 52 75 6e 56 61 63 75 75 6d 28 26 70 2d 3e 7a 45  RunVacuum(&p->zE
378e0 72 72 4d 73 67 2c 20 64 62 2c 20 70 4f 70 2d 3e  rrMsg, db, pOp->
378f0 70 31 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  p1);.  if( rc ) 
37900 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
37910 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b  o_error;.  break
37920 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  ;.}.#endif..#if 
37930 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
37940 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 29  OMIT_AUTOVACUUM)
37950 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 63 72  ./* Opcode: Incr
37960 56 61 63 75 75 6d 20 50 31 20 50 32 20 2a 20 2a  Vacuum P1 P2 * *
37970 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72 6d   *.**.** Perform
37980 20 61 20 73 69 6e 67 6c 65 20 73 74 65 70 20 6f   a single step o
37990 66 20 74 68 65 20 69 6e 63 72 65 6d 65 6e 74 61  f the incrementa
379a0 6c 20 76 61 63 75 75 6d 20 70 72 6f 63 65 64 75  l vacuum procedu
379b0 72 65 20 6f 6e 0a 2a 2a 20 74 68 65 20 50 31 20  re on.** the P1 
379c0 64 61 74 61 62 61 73 65 2e 20 49 66 20 74 68 65  database. If the
379d0 20 76 61 63 75 75 6d 20 68 61 73 20 66 69 6e 69   vacuum has fini
379e0 73 68 65 64 2c 20 6a 75 6d 70 20 74 6f 20 69 6e  shed, jump to in
379f0 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 50 32 2e  struction.** P2.
37a00 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c   Otherwise, fall
37a10 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
37a20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
37a30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 63  ..*/.case OP_Inc
37a40 72 56 61 63 75 75 6d 3a 20 7b 20 20 20 20 20 20  rVacuum: {      
37a50 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 42    /* jump */.  B
37a60 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73  tree *pBt;..  as
37a70 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
37a80 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
37a90 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
37aa0 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
37ab0 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70  treeMask, pOp->p
37ac0 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  1) );.  assert( 
37ad0 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
37ae0 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44  ;.  pBt = db->aD
37af0 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a  b[pOp->p1].pBt;.
37b00 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
37b10 72 65 65 49 6e 63 72 56 61 63 75 75 6d 28 70 42  reeIncrVacuum(pB
37b20 74 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68  t);.  VdbeBranch
37b30 54 61 6b 65 6e 28 72 63 3d 3d 53 51 4c 49 54 45  Taken(rc==SQLITE
37b40 5f 44 4f 4e 45 2c 32 29 3b 0a 20 20 69 66 28 20  _DONE,2);.  if( 
37b50 72 63 20 29 7b 0a 20 20 20 20 69 66 28 20 72 63  rc ){.    if( rc
37b60 21 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 20  !=SQLITE_DONE ) 
37b70 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
37b80 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 72 63 20  o_error;.    rc 
37b90 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20  = SQLITE_OK;.   
37ba0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
37bb0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
37bc0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f  .#endif../* Opco
37bd0 64 65 3a 20 45 78 70 69 72 65 20 50 31 20 50 32  de: Expire P1 P2
37be0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75   * * *.**.** Cau
37bf0 73 65 20 70 72 65 63 6f 6d 70 69 6c 65 64 20 73  se precompiled s
37c00 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 65 78 70  tatements to exp
37c10 69 72 65 2e 20 20 57 68 65 6e 20 61 6e 20 65 78  ire.  When an ex
37c20 70 69 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a  pired statement.
37c30 2a 2a 20 69 73 20 65 78 65 63 75 74 65 64 20 75  ** is executed u
37c40 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 73 74 65  sing sqlite3_ste
37c50 70 28 29 20 69 74 20 77 69 6c 6c 20 65 69 74 68  p() it will eith
37c60 65 72 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  er automatically
37c70 0a 2a 2a 20 72 65 70 72 65 70 61 72 65 20 69 74  .** reprepare it
37c80 73 65 6c 66 20 28 69 66 20 69 74 20 77 61 73 20  self (if it was 
37c90 6f 72 69 67 69 6e 61 6c 6c 79 20 63 72 65 61 74  originally creat
37ca0 65 64 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33  ed using sqlite3
37cb0 5f 70 72 65 70 61 72 65 5f 76 32 28 29 29 0a 2a  _prepare_v2()).*
37cc0 2a 20 6f 72 20 69 74 20 77 69 6c 6c 20 66 61 69  * or it will fai
37cd0 6c 20 77 69 74 68 20 53 51 4c 49 54 45 5f 53 43  l with SQLITE_SC
37ce0 48 45 4d 41 2e 0a 2a 2a 20 0a 2a 2a 20 49 66 20  HEMA..** .** If 
37cf0 50 31 20 69 73 20 30 2c 20 74 68 65 6e 20 61 6c  P1 is 0, then al
37d00 6c 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  l SQL statements
37d10 20 62 65 63 6f 6d 65 20 65 78 70 69 72 65 64 2e   become expired.
37d20 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65   If P1 is non-ze
37d30 72 6f 2c 0a 2a 2a 20 74 68 65 6e 20 6f 6e 6c 79  ro,.** then only
37d40 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 65   the currently e
37d50 78 65 63 75 74 69 6e 67 20 73 74 61 74 65 6d 65  xecuting stateme
37d60 6e 74 20 69 73 20 65 78 70 69 72 65 64 2e 0a 2a  nt is expired..*
37d70 2a 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 30 2c  *.** If P2 is 0,
37d80 20 74 68 65 6e 20 53 51 4c 20 73 74 61 74 65 6d   then SQL statem
37d90 65 6e 74 73 20 61 72 65 20 65 78 70 69 72 65 64  ents are expired
37da0 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 49   immediately.  I
37db0 66 20 50 32 20 69 73 20 31 2c 0a 2a 2a 20 74 68  f P2 is 1,.** th
37dc0 65 6e 20 72 75 6e 6e 69 6e 67 20 53 51 4c 20 73  en running SQL s
37dd0 74 61 74 65 6d 65 6e 74 73 20 61 72 65 20 61 6c  tatements are al
37de0 6c 6f 77 65 64 20 74 6f 20 63 6f 6e 74 69 6e 75  lowed to continu
37df0 65 20 74 6f 20 72 75 6e 20 74 6f 20 63 6f 6d 70  e to run to comp
37e00 6c 65 74 69 6f 6e 2e 0a 2a 2a 20 54 68 65 20 50  letion..** The P
37e10 32 3d 3d 31 20 63 61 73 65 20 6f 63 63 75 72 73  2==1 case occurs
37e20 20 77 68 65 6e 20 61 20 43 52 45 41 54 45 20 49   when a CREATE I
37e30 4e 44 45 58 20 6f 72 20 73 69 6d 69 6c 61 72 20  NDEX or similar 
37e40 73 63 68 65 6d 61 20 63 68 61 6e 67 65 20 68 61  schema change ha
37e50 70 70 65 6e 73 0a 2a 2a 20 74 68 61 74 20 6d 69  ppens.** that mi
37e60 67 68 74 20 68 65 6c 70 20 74 68 65 20 73 74 61  ght help the sta
37e70 74 65 6d 65 6e 74 20 72 75 6e 20 66 61 73 74 65  tement run faste
37e80 72 20 62 75 74 20 77 68 69 63 68 20 64 6f 65 73  r but which does
37e90 20 6e 6f 74 20 61 66 66 65 63 74 20 74 68 65 0a   not affect the.
37ea0 2a 2a 20 63 6f 72 72 65 63 74 6e 65 73 73 20 6f  ** correctness o
37eb0 66 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a 2f 0a  f operation..*/.
37ec0 63 61 73 65 20 4f 50 5f 45 78 70 69 72 65 3a 20  case OP_Expire: 
37ed0 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  {.  assert( pOp-
37ee0 3e 70 32 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70  >p2==0 || pOp->p
37ef0 32 3d 3d 31 20 29 3b 0a 20 20 69 66 28 20 21 70  2==1 );.  if( !p
37f00 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71  Op->p1 ){.    sq
37f10 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
37f20 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62  redStatements(db
37f30 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 7d 65  , pOp->p2);.  }e
37f40 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 65 78 70 69  lse{.    p->expi
37f50 72 65 64 20 3d 20 70 4f 70 2d 3e 70 32 2b 31 3b  red = pOp->p2+1;
37f60 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
37f70 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
37f80 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48  OMIT_SHARED_CACH
37f90 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 61 62  E./* Opcode: Tab
37fa0 6c 65 4c 6f 63 6b 20 50 31 20 50 32 20 50 33 20  leLock P1 P2 P3 
37fb0 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
37fc0 3a 20 69 44 62 3d 50 31 20 72 6f 6f 74 3d 50 32  : iDb=P1 root=P2
37fd0 20 77 72 69 74 65 3d 50 33 0a 2a 2a 0a 2a 2a 20   write=P3.**.** 
37fe0 4f 62 74 61 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e  Obtain a lock on
37ff0 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61   a particular ta
38000 62 6c 65 2e 20 54 68 69 73 20 69 6e 73 74 72 75  ble. This instru
38010 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73  ction is only us
38020 65 64 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 73  ed when.** the s
38030 68 61 72 65 64 2d 63 61 63 68 65 20 66 65 61 74  hared-cache feat
38040 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64 2e 20  ure is enabled. 
38050 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65  .**.** P1 is the
38060 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61   index of the da
38070 74 61 62 61 73 65 20 69 6e 20 73 71 6c 69 74 65  tabase in sqlite
38080 33 2e 61 44 62 5b 5d 20 6f 66 20 74 68 65 20 64  3.aDb[] of the d
38090 61 74 61 62 61 73 65 0a 2a 2a 20 6f 6e 20 77 68  atabase.** on wh
380a0 69 63 68 20 74 68 65 20 6c 6f 63 6b 20 69 73 20  ich the lock is 
380b0 61 63 71 75 69 72 65 64 2e 20 20 41 20 72 65 61  acquired.  A rea
380c0 64 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65  dlock is obtaine
380d0 64 20 69 66 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a  d if P3==0 or.**
380e0 20 61 20 77 72 69 74 65 20 6c 6f 63 6b 20 69 66   a write lock if
380f0 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32   P3==1..**.** P2
38100 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 72 6f   contains the ro
38110 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 74  ot-page of the t
38120 61 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a  able to lock..**
38130 0a 2a 2a 20 50 34 20 63 6f 6e 74 61 69 6e 73 20  .** P4 contains 
38140 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
38150 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62   name of the tab
38160 6c 65 20 62 65 69 6e 67 20 6c 6f 63 6b 65 64 2e  le being locked.
38170 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a   This is only.**
38180 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74   used to generat
38190 65 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  e an error messa
381a0 67 65 20 69 66 20 74 68 65 20 6c 6f 63 6b 20 63  ge if the lock c
381b0 61 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69 6e 65  annot be obtaine
381c0 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 61  d..*/.case OP_Ta
381d0 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20 75 38 20  bleLock: {.  u8 
381e0 69 73 57 72 69 74 65 4c 6f 63 6b 20 3d 20 28 75  isWriteLock = (u
381f0 38 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 66 28  8)pOp->p3;.  if(
38200 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 7c 7c 20   isWriteLock || 
38210 30 3d 3d 28 64 62 2d 3e 66 6c 61 67 73 26 53 51  0==(db->flags&SQ
38220 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69  LITE_ReadUncommi
38230 74 29 20 29 7b 0a 20 20 20 20 69 6e 74 20 70 31  t) ){.    int p1
38240 20 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a 20 20 20   = pOp->p1; .   
38250 20 61 73 73 65 72 74 28 20 70 31 3e 3d 30 20 26   assert( p1>=0 &
38260 26 20 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  & p1<db->nDb );.
38270 20 20 20 20 61 73 73 65 72 74 28 20 44 62 4d 61      assert( DbMa
38280 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
38290 61 73 6b 2c 20 70 31 29 20 29 3b 0a 20 20 20 20  ask, p1) );.    
382a0 61 73 73 65 72 74 28 20 69 73 57 72 69 74 65 4c  assert( isWriteL
382b0 6f 63 6b 3d 3d 30 20 7c 7c 20 69 73 57 72 69 74  ock==0 || isWrit
382c0 65 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20 20 20  eLock==1 );.    
382d0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
382e0 65 4c 6f 63 6b 54 61 62 6c 65 28 64 62 2d 3e 61  eLockTable(db->a
382f0 44 62 5b 70 31 5d 2e 70 42 74 2c 20 70 4f 70 2d  Db[p1].pBt, pOp-
38300 3e 70 32 2c 20 69 73 57 72 69 74 65 4c 6f 63 6b  >p2, isWriteLock
38310 29 3b 0a 20 20 20 20 69 66 2