/ Hex Artifact Content
Login

Artifact 7f43ed8e055a4290535d2e4520d33f0ac6cc00ef76a0c099e4c6bd85be74a6b9:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 66  implements the f
01a0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 75 6e  unction that run
01b0: 73 20 74 68 65 0a 2a 2a 20 62 79 74 65 63 6f 64  s the.** bytecod
01c0: 65 20 6f 66 20 61 20 70 72 65 70 61 72 65 64 20  e of a prepared 
01d0: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
01e0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
01f0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
0200: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0210: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0220: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0230: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0240: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0250: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0260: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0270: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0280: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0290: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
02a0: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
02b0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
02c0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
02d0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
02e0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
02f0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
0300: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0310: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0320: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0330: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0340: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0350: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0360: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0370: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0380: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0390: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
03a0: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
03b0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
03c0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
03d0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
03e0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
03f0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
0400: 69 73 75 73 65 64 2e 20 20 41 20 73 68 61 6c 6c  isused.  A shall
0410: 6f 77 20 63 6f 70 79 20 6f 66 20 61 20 73 74 72  ow copy of a str
0420: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6a 75 73 74  ing or blob just
0430: 20 63 6f 70 69 65 73 20 61 0a 2a 2a 20 70 6f 69   copies a.** poi
0440: 6e 74 65 72 20 74 6f 20 74 68 65 20 73 74 72 69  nter to the stri
0450: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 6e 6f 74 20  ng or blob, not 
0460: 74 68 65 20 63 6f 6e 74 65 6e 74 2e 20 20 49 66  the content.  If
0470: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
0480: 20 69 73 20 63 68 61 6e 67 65 64 20 77 68 69 6c   is changed whil
0490: 65 20 74 68 65 20 63 6f 70 79 20 69 73 20 73 74  e the copy is st
04a0: 69 6c 6c 20 69 6e 20 75 73 65 2c 20 74 68 65 20  ill in use, the 
04b0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
04c0: 69 67 68 74 0a 2a 2a 20 62 65 20 63 68 61 6e 67  ight.** be chang
04d0: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
04e0: 72 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69  r the copy.  Thi
04f0: 73 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73  s macro verifies
0500: 20 74 68 61 74 20 6e 6f 74 68 69 6e 67 0a 2a 2a   that nothing.**
0510: 20 6c 69 6b 65 20 74 68 61 74 20 65 76 65 72 20   like that ever 
0520: 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 23 69 66 64  happens..*/.#ifd
0530: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
0540: 23 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75  # define memAbou
0550: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73  tToChange(P,M) s
0560: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f  qlite3VdbeMemAbo
0570: 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a  utToChange(P,M).
0580: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d  #else.# define m
0590: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
05a0: 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  P,M).#endif../*.
05b0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
05c0: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
05d0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
05e0: 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72  every time a cur
05f0: 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69  sor.** moves, ei
0600: 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53  ther by the OP_S
0610: 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20  eekXX, OP_Next, 
0620: 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64  or OP_Prev opcod
0630: 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a  es.  The test.**
0640: 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20   procedures use 
0650: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  this information
0660: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
0670: 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a  at indices are.*
0680: 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63  * working correc
0690: 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61  tly.  This varia
06a0: 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  ble has no funct
06b0: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
06c0: 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79  o.** help verify
06d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
06e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ration of the li
06f0: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0700: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0710: 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
0720: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0730: 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68  f../*.** When th
0740: 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  is global variab
0750: 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20  le is positive, 
0760: 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e  it gets decremen
0770: 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a  ted once before.
0780: 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74  ** each instruct
0790: 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e  ion in the VDBE.
07a0: 20 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65    When it reache
07b0: 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69  s zero, the u1.i
07c0: 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20  sInterrupted.** 
07d0: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
07e0: 69 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69  ite3 structure i
07f0: 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74  s set in order t
0800: 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e  o simulate an in
0810: 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54  terrupt..**.** T
0820: 68 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20  his facility is 
0830: 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
0840: 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20   purposes only. 
0850: 20 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e   It does not fun
0860: 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f  ction.** in an o
0870: 72 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a  rdinary build..*
0880: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
0890: 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33  TEST.int sqlite3
08a0: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
08b0: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
08c0: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f  .** The next glo
08d0: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20  bal variable is 
08e0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68  incremented each
08f0: 20 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72   type the OP_Sor
0900: 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  t opcode.** is e
0910: 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65  xecuted.  The te
0920: 73 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73  st procedures us
0930: 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69  e this informati
0940: 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  on to make sure 
0950: 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20  that.** sorting 
0960: 69 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20  is occurring or 
0970: 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74  not occurring at
0980: 20 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d   appropriate tim
0990: 65 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61  es.   This varia
09a0: 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75  ble.** has no fu
09b0: 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61  nction other tha
09c0: 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79  n to help verify
09d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
09e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  ration of the.**
09f0: 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66   library..*/.#if
0a00: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
0a10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74  int sqlite3_sort
0a20: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0a30: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65  if../*.** The ne
0a40: 78 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  xt global variab
0a50: 6c 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73  le records the s
0a60: 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65  ize of the large
0a70: 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f  st MEM_Blob.** o
0a80: 72 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68  r MEM_Str that h
0a90: 61 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20  as been used by 
0aa0: 61 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20  a VDBE opcode.  
0ab0: 54 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75  The test procedu
0ac0: 72 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20  res.** use this 
0ad0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d  information to m
0ae0: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
0af0: 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63  e zero-blob func
0b00: 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20  tionality.** is 
0b10: 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c  working correctl
0b20: 79 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  y.   This variab
0b30: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0b40: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0b50: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0b60: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0b70: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0b80: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0b90: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ba0: 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62  sqlite3_max_blob
0bb0: 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63  size = 0;.static
0bc0: 20 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42   void updateMaxB
0bd0: 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b  lobsize(Mem *p){
0be0: 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  .  if( (p->flags
0bf0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
0c00: 42 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e  Blob))!=0 && p->
0c10: 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c  n>sqlite3_max_bl
0c20: 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71  obsize ){.    sq
0c30: 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69  lite3_max_blobsi
0c40: 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d  ze = p->n;.  }.}
0c50: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
0c60: 68 69 73 20 6d 61 63 72 6f 20 65 76 61 6c 75 61  his macro evalua
0c70: 74 65 73 20 74 6f 20 74 72 75 65 20 69 66 20 65  tes to true if e
0c80: 69 74 68 65 72 20 74 68 65 20 75 70 64 61 74 65  ither the update
0c90: 20 68 6f 6f 6b 20 6f 72 20 74 68 65 20 70 72 65   hook or the pre
0ca0: 75 70 64 61 74 65 0a 2a 2a 20 68 6f 6f 6b 20 61  update.** hook a
0cb0: 72 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 64  re enabled for d
0cc0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 20  atabase connect 
0cd0: 44 42 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  DB..*/.#ifdef SQ
0ce0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
0cf0: 50 44 41 54 45 5f 48 4f 4f 4b 0a 23 20 64 65 66  PDATE_HOOK.# def
0d00: 69 6e 65 20 48 41 53 5f 55 50 44 41 54 45 5f 48  ine HAS_UPDATE_H
0d10: 4f 4f 4b 28 44 42 29 20 28 28 44 42 29 2d 3e 78  OOK(DB) ((DB)->x
0d20: 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  PreUpdateCallbac
0d30: 6b 7c 7c 28 44 42 29 2d 3e 78 55 70 64 61 74 65  k||(DB)->xUpdate
0d40: 43 61 6c 6c 62 61 63 6b 29 0a 23 65 6c 73 65 0a  Callback).#else.
0d50: 23 20 64 65 66 69 6e 65 20 48 41 53 5f 55 50 44  # define HAS_UPD
0d60: 41 54 45 5f 48 4f 4f 4b 28 44 42 29 20 28 28 44  ATE_HOOK(DB) ((D
0d70: 42 29 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  B)->xUpdateCallb
0d80: 61 63 6b 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ack).#endif../*.
0d90: 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62  ** The next glob
0da0: 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69  al variable is i
0db0: 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20  ncremented each 
0dc0: 74 69 6d 65 20 74 68 65 20 4f 50 5f 46 6f 75 6e  time the OP_Foun
0dd0: 64 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  d opcode.** is e
0de0: 78 65 63 75 74 65 64 2e 20 54 68 69 73 20 69 73  xecuted. This is
0df0: 20 75 73 65 64 20 74 6f 20 74 65 73 74 20 77 68   used to test wh
0e00: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
0e10: 20 66 6f 72 65 69 67 6e 20 6b 65 79 0a 2a 2a 20   foreign key.** 
0e20: 6f 70 65 72 61 74 69 6f 6e 20 69 6d 70 6c 65 6d  operation implem
0e30: 65 6e 74 65 64 20 75 73 69 6e 67 20 4f 50 5f 46  ented using OP_F
0e40: 6b 49 73 5a 65 72 6f 20 69 73 20 77 6f 72 6b 69  kIsZero is worki
0e50: 6e 67 2e 20 54 68 69 73 20 76 61 72 69 61 62 6c  ng. This variabl
0e60: 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e 63  e.** has no func
0e70: 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20  tion other than 
0e80: 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20 74  to help verify t
0e90: 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61  he correct opera
0ea0: 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 6c  tion of the.** l
0eb0: 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  ibrary..*/.#ifde
0ec0: 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e  f SQLITE_TEST.in
0ed0: 74 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f  t sqlite3_found_
0ee0: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0ef0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 61 20  f../*.** Test a 
0f00: 72 65 67 69 73 74 65 72 20 74 6f 20 73 65 65 20  register to see 
0f10: 69 66 20 69 74 20 65 78 63 65 65 64 73 20 74 68  if it exceeds th
0f20: 65 20 63 75 72 72 65 6e 74 20 6d 61 78 69 6d 75  e current maximu
0f30: 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20  m blob size..** 
0f40: 49 66 20 69 74 20 64 6f 65 73 2c 20 72 65 63 6f  If it does, reco
0f50: 72 64 20 74 68 65 20 6e 65 77 20 6d 61 78 69 6d  rd the new maxim
0f60: 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f  um blob size..*/
0f70: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
0f80: 49 54 45 5f 54 45 53 54 29 20 26 26 20 21 64 65  ITE_TEST) && !de
0f90: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 55 4e 54  fined(SQLITE_UNT
0fa0: 45 53 54 41 42 4c 45 29 0a 23 20 64 65 66 69 6e  ESTABLE).# defin
0fb0: 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f  e UPDATE_MAX_BLO
0fc0: 42 53 49 5a 45 28 50 29 20 20 75 70 64 61 74 65  BSIZE(P)  update
0fd0: 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50 29 0a 23  MaxBlobsize(P).#
0fe0: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 55 50  else.# define UP
0ff0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
1000: 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E(P).#endif../*.
1010: 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 56 44  ** Invoke the VD
1020: 42 45 20 63 6f 76 65 72 61 67 65 20 63 61 6c 6c  BE coverage call
1030: 62 61 63 6b 2c 20 69 66 20 74 68 61 74 20 63 61  back, if that ca
1040: 6c 6c 62 61 63 6b 20 69 73 20 64 65 66 69 6e 65  llback is define
1050: 64 2e 20 20 54 68 69 73 0a 2a 2a 20 66 65 61 74  d.  This.** feat
1060: 75 72 65 20 69 73 20 75 73 65 64 20 66 6f 72 20  ure is used for 
1070: 74 65 73 74 20 73 75 69 74 65 20 76 61 6c 69 64  test suite valid
1080: 61 74 69 6f 6e 20 6f 6e 6c 79 20 61 6e 64 20 64  ation only and d
1090: 6f 65 73 20 6e 6f 74 20 61 70 70 65 61 72 20 61  oes not appear a
10a0: 6e 0a 2a 2a 20 70 72 6f 64 75 63 74 69 6f 6e 20  n.** production 
10b0: 62 75 69 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 4d 20  builds..**.** M 
10c0: 69 73 20 74 68 65 20 74 79 70 65 20 6f 66 20 62  is the type of b
10d0: 72 61 6e 63 68 2e 20 20 49 20 69 73 20 74 68 65  ranch.  I is the
10e0: 20 64 69 72 65 63 74 69 6f 6e 20 74 61 6b 65 6e   direction taken
10f0: 20 66 6f 72 20 74 68 69 73 20 69 6e 73 74 61 6e   for this instan
1100: 63 65 20 6f 66 0a 2a 2a 20 74 68 65 20 62 72 61  ce of.** the bra
1110: 6e 63 68 2e 0a 2a 2a 0a 2a 2a 20 20 20 4d 3a 20  nch..**.**   M: 
1120: 32 20 2d 20 74 77 6f 2d 77 61 79 20 62 72 61 6e  2 - two-way bran
1130: 63 68 20 28 49 3d 30 3a 20 66 61 6c 6c 2d 74 68  ch (I=0: fall-th
1140: 72 75 20 20 20 31 3a 20 6a 75 6d 70 20 20 20 20  ru   1: jump    
1150: 20 20 20 20 20 20 20 20 20 20 20 20 29 0a 2a 2a              ).**
1160: 20 20 20 20 20 20 33 20 2d 20 74 77 6f 2d 77 61        3 - two-wa
1170: 79 20 2b 20 4e 55 4c 4c 20 28 49 3d 30 3a 20 66  y + NULL (I=0: f
1180: 61 6c 6c 2d 74 68 72 75 20 20 20 31 3a 20 6a 75  all-thru   1: ju
1190: 6d 70 20 20 20 20 20 20 32 3a 20 4e 55 4c 4c 20  mp      2: NULL 
11a0: 20 20 29 0a 2a 2a 20 20 20 20 20 20 34 20 2d 20    ).**      4 - 
11b0: 4f 50 5f 4a 75 6d 70 20 20 20 20 20 20 20 20 28  OP_Jump        (
11c0: 49 3d 30 3a 20 6a 75 6d 70 20 70 31 20 20 20 20  I=0: jump p1    
11d0: 20 31 3a 20 6a 75 6d 70 20 70 32 20 20 20 32 3a   1: jump p2   2:
11e0: 20 6a 75 6d 70 20 70 33 29 0a 2a 2a 0a 2a 2a 20   jump p3).**.** 
11f0: 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
1200: 69 66 20 4d 20 69 73 20 32 2c 20 74 68 65 6e 20  if M is 2, then 
1210: 49 20 69 73 20 65 69 74 68 65 72 20 30 20 28 66  I is either 0 (f
1220: 6f 72 20 66 61 6c 6c 2d 74 68 72 6f 75 67 68 29  or fall-through)
1230: 20 6f 72 0a 2a 2a 20 31 20 28 66 6f 72 20 77 68   or.** 1 (for wh
1240: 65 6e 20 74 68 65 20 62 72 61 6e 63 68 20 69 73  en the branch is
1250: 20 74 61 6b 65 6e 29 2e 20 20 49 66 20 4d 20 69   taken).  If M i
1260: 73 20 33 2c 20 74 68 65 20 49 20 69 73 20 30 20  s 3, the I is 0 
1270: 66 6f 72 20 61 6e 0a 2a 2a 20 6f 72 64 69 6e 61  for an.** ordina
1280: 72 79 20 66 61 6c 6c 2d 74 68 72 6f 75 67 68 2c  ry fall-through,
1290: 20 49 20 69 73 20 31 20 69 66 20 74 68 65 20 62   I is 1 if the b
12a0: 72 61 6e 63 68 20 77 61 73 20 74 61 6b 65 6e 2c  ranch was taken,
12b0: 20 61 6e 64 20 49 20 69 73 20 32 20 0a 2a 2a 20   and I is 2 .** 
12c0: 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  if the result of
12d0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 4e   comparison is N
12e0: 55 4c 4c 2e 20 20 46 6f 72 20 4d 3d 33 2c 20 49  ULL.  For M=3, I
12f0: 3d 32 20 74 68 65 20 6a 75 6d 70 20 6d 61 79 20  =2 the jump may 
1300: 6f 72 0a 2a 2a 20 6d 61 79 20 6e 6f 74 20 62 65  or.** may not be
1310: 20 74 61 6b 65 6e 2c 20 64 65 70 65 6e 64 69 6e   taken, dependin
1320: 67 20 6f 6e 20 74 68 65 20 53 51 4c 49 54 45 5f  g on the SQLITE_
1330: 4a 55 4d 50 49 46 4e 55 4c 4c 20 66 6c 61 67 73  JUMPIFNULL flags
1340: 20 69 6e 20 70 35 2e 0a 2a 2a 20 57 68 65 6e 20   in p5..** When 
1350: 4d 20 69 73 20 34 2c 20 74 68 61 74 20 6d 65 61  M is 4, that mea
1360: 6e 73 20 74 68 61 74 20 61 6e 20 4f 50 5f 4a 75  ns that an OP_Ju
1370: 6d 70 20 69 73 20 62 65 69 6e 67 20 72 75 6e 2e  mp is being run.
1380: 20 20 49 20 69 73 20 30 2c 20 31 2c 20 6f 72 20    I is 0, 1, or 
1390: 32 0a 2a 2a 20 64 65 70 65 6e 64 69 6e 67 20 6f  2.** depending o
13a0: 6e 20 69 66 20 74 68 65 20 6f 70 65 72 61 6e 64  n if the operand
13b0: 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 2c  s are less than,
13c0: 20 65 71 75 61 6c 2c 20 6f 72 20 67 72 65 61 74   equal, or great
13d0: 65 72 20 74 68 61 6e 2e 0a 2a 2a 0a 2a 2a 20 69  er than..**.** i
13e0: 53 72 63 4c 69 6e 65 20 69 73 20 74 68 65 20 73  SrcLine is the s
13f0: 6f 75 72 63 65 20 63 6f 64 65 20 6c 69 6e 65 20  ource code line 
1400: 28 66 72 6f 6d 20 74 68 65 20 5f 5f 4c 49 4e 45  (from the __LINE
1410: 5f 5f 20 6d 61 63 72 6f 29 20 74 68 61 74 0a 2a  __ macro) that.*
1420: 2a 20 67 65 6e 65 72 61 74 65 64 20 74 68 65 20  * generated the 
1430: 56 44 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e  VDBE instruction
1440: 20 63 6f 6d 62 69 6e 65 64 20 77 69 74 68 20 66   combined with f
1450: 6c 61 67 20 62 69 74 73 2e 20 20 54 68 65 20 73  lag bits.  The s
1460: 6f 75 72 63 65 0a 2a 2a 20 63 6f 64 65 20 6c 69  ource.** code li
1470: 6e 65 20 6e 75 6d 62 65 72 20 69 73 20 69 6e 20  ne number is in 
1480: 74 68 65 20 6c 6f 77 65 72 20 32 34 20 62 69 74  the lower 24 bit
1490: 73 20 6f 66 20 69 53 72 63 4c 69 6e 65 20 61 6e  s of iSrcLine an
14a0: 64 20 74 68 65 20 75 70 70 65 72 0a 2a 2a 20 38  d the upper.** 8
14b0: 20 62 79 74 65 73 20 61 72 65 20 66 6c 61 67 73   bytes are flags
14c0: 2e 20 20 54 68 65 20 6c 6f 77 65 72 20 74 68 72  .  The lower thr
14d0: 65 65 20 62 69 74 73 20 6f 66 20 74 68 65 20 66  ee bits of the f
14e0: 6c 61 67 73 20 69 6e 64 69 63 61 74 65 0a 2a 2a  lags indicate.**
14f0: 20 76 61 6c 75 65 73 20 66 6f 72 20 49 20 74 68   values for I th
1500: 61 74 20 73 68 6f 75 6c 64 20 6e 65 76 65 72 20  at should never 
1510: 6f 63 63 75 72 2e 20 20 46 6f 72 20 65 78 61 6d  occur.  For exam
1520: 70 6c 65 2c 20 69 66 20 74 68 65 20 62 72 61 6e  ple, if the bran
1530: 63 68 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20  ch is.** always 
1540: 74 61 6b 65 6e 2c 20 74 68 65 20 66 6c 61 67 73  taken, the flags
1550: 20 73 68 6f 75 6c 64 20 62 65 20 30 78 30 35 20   should be 0x05 
1560: 73 69 6e 63 65 20 74 68 65 20 66 61 6c 6c 2d 74  since the fall-t
1570: 68 72 6f 75 67 68 20 61 6e 64 0a 2a 2a 20 61 6c  hrough and.** al
1580: 74 65 72 6e 61 74 65 20 62 72 61 6e 63 68 20 61  ternate branch a
1590: 72 65 20 6e 65 76 65 72 20 74 61 6b 65 6e 2e 20  re never taken. 
15a0: 20 49 66 20 61 20 62 72 61 6e 63 68 20 69 73 20   If a branch is 
15b0: 6e 65 76 65 72 20 74 61 6b 65 6e 20 74 68 65 6e  never taken then
15c0: 0a 2a 2a 20 66 6c 61 67 73 20 73 68 6f 75 6c 64  .** flags should
15d0: 20 62 65 20 30 78 30 36 20 73 69 6e 63 65 20 6f   be 0x06 since o
15e0: 6e 6c 79 20 74 68 65 20 66 61 6c 6c 2d 74 68 72  nly the fall-thr
15f0: 6f 75 67 68 20 61 70 70 72 6f 61 63 68 20 69 73  ough approach is
1600: 20 61 6c 6c 6f 77 65 64 2e 0a 2a 2a 0a 2a 2a 20   allowed..**.** 
1610: 42 69 74 20 30 78 30 38 20 6f 66 20 74 68 65 20  Bit 0x08 of the 
1620: 66 6c 61 67 73 20 69 6e 64 69 63 61 74 65 73 20  flags indicates 
1630: 61 6e 20 4f 50 5f 4a 75 6d 70 20 6f 70 63 6f 64  an OP_Jump opcod
1640: 65 20 74 68 61 74 20 69 73 20 6f 6e 6c 79 0a 2a  e that is only.*
1650: 2a 20 69 6e 74 65 72 65 73 74 65 64 20 69 6e 20  * interested in 
1660: 65 71 75 61 6c 20 6f 72 20 6e 6f 74 2d 65 71 75  equal or not-equ
1670: 61 6c 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  al.  In other wo
1680: 72 64 73 2c 20 49 3d 3d 30 20 61 6e 64 20 49 3d  rds, I==0 and I=
1690: 3d 32 0a 2a 2a 20 73 68 6f 75 6c 64 20 62 65 20  =2.** should be 
16a0: 74 72 65 61 74 65 64 20 61 73 20 65 71 75 69 76  treated as equiv
16b0: 61 6c 65 6e 74 0a 2a 2a 0a 2a 2a 20 53 69 6e 63  alent.**.** Sinc
16c0: 65 20 6f 6e 6c 79 20 61 20 6c 69 6e 65 20 6e 75  e only a line nu
16d0: 6d 62 65 72 20 69 73 20 72 65 74 61 69 6e 65 64  mber is retained
16e0: 2c 20 6e 6f 74 20 74 68 65 20 66 69 6c 65 6e 61  , not the filena
16f0: 6d 65 2c 20 74 68 69 73 20 6d 61 63 72 6f 0a 2a  me, this macro.*
1700: 2a 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72  * only works for
1710: 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 20 62 75   amalgamation bu
1720: 69 6c 64 73 2e 20 20 42 75 74 20 74 68 61 74 20  ilds.  But that 
1730: 69 73 20 6f 6b 2c 20 73 69 6e 63 65 20 74 68 65  is ok, since the
1740: 73 65 20 6d 61 63 72 6f 73 0a 2a 2a 20 73 68 6f  se macros.** sho
1750: 75 6c 64 20 62 65 20 6e 6f 2d 6f 70 73 20 65 78  uld be no-ops ex
1760: 63 65 70 74 20 66 6f 72 20 73 70 65 63 69 61 6c  cept for special
1770: 20 62 75 69 6c 64 73 20 75 73 65 64 20 74 6f 20   builds used to 
1780: 6d 65 61 73 75 72 65 20 74 65 73 74 20 63 6f 76  measure test cov
1790: 65 72 61 67 65 2e 0a 2a 2f 0a 23 69 66 20 21 64  erage..*/.#if !d
17a0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 56 44  efined(SQLITE_VD
17b0: 42 45 5f 43 4f 56 45 52 41 47 45 29 0a 23 20 64  BE_COVERAGE).# d
17c0: 65 66 69 6e 65 20 56 64 62 65 42 72 61 6e 63 68  efine VdbeBranch
17d0: 54 61 6b 65 6e 28 49 2c 4d 29 0a 23 65 6c 73 65  Taken(I,M).#else
17e0: 0a 23 20 64 65 66 69 6e 65 20 56 64 62 65 42 72  .# define VdbeBr
17f0: 61 6e 63 68 54 61 6b 65 6e 28 49 2c 4d 29 20 76  anchTaken(I,M) v
1800: 64 62 65 54 61 6b 65 42 72 61 6e 63 68 28 70 4f  dbeTakeBranch(pO
1810: 70 2d 3e 69 53 72 63 4c 69 6e 65 2c 49 2c 4d 29  p->iSrcLine,I,M)
1820: 0a 20 20 73 74 61 74 69 63 20 76 6f 69 64 20 76  .  static void v
1830: 64 62 65 54 61 6b 65 42 72 61 6e 63 68 28 75 33  dbeTakeBranch(u3
1840: 32 20 69 53 72 63 4c 69 6e 65 2c 20 75 38 20 49  2 iSrcLine, u8 I
1850: 2c 20 75 38 20 4d 29 7b 0a 20 20 20 20 75 38 20  , u8 M){.    u8 
1860: 6d 4e 65 76 65 72 3b 0a 20 20 20 20 61 73 73 65  mNever;.    asse
1870: 72 74 28 20 49 3c 3d 32 20 29 3b 20 20 2f 2a 20  rt( I<=2 );  /* 
1880: 30 3a 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 2c  0: fall through,
1890: 20 20 31 3a 20 74 61 6b 65 6e 2c 20 20 32 3a 20    1: taken,  2: 
18a0: 61 6c 74 65 72 6e 61 74 65 20 74 61 6b 65 6e 20  alternate taken 
18b0: 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 4d  */.    assert( M
18c0: 3c 3d 34 20 29 3b 20 20 2f 2a 20 32 3a 20 74 77  <=4 );  /* 2: tw
18d0: 6f 2d 77 61 79 20 62 72 61 6e 63 68 2c 20 33 3a  o-way branch, 3:
18e0: 20 74 68 72 65 65 2d 77 61 79 20 62 72 61 6e 63   three-way branc
18f0: 68 2c 20 34 3a 20 4f 50 5f 4a 75 6d 70 20 2a 2f  h, 4: OP_Jump */
1900: 0a 20 20 20 20 61 73 73 65 72 74 28 20 49 3c 4d  .    assert( I<M
1910: 20 29 3b 20 20 20 2f 2a 20 49 20 63 61 6e 20 6f   );   /* I can o
1920: 6e 6c 79 20 62 65 20 32 20 69 66 20 4d 20 69 73  nly be 2 if M is
1930: 20 33 20 6f 72 20 34 20 2a 2f 0a 20 20 20 20 2f   3 or 4 */.    /
1940: 2a 20 54 72 61 6e 73 66 6f 72 6d 20 49 20 66 72  * Transform I fr
1950: 6f 6d 20 61 20 69 6e 74 65 67 65 72 20 5b 30 2c  om a integer [0,
1960: 31 2c 32 5d 20 69 6e 74 6f 20 61 20 62 69 74 6d  1,2] into a bitm
1970: 61 73 6b 20 6f 66 20 5b 31 2c 32 2c 34 5d 20 2a  ask of [1,2,4] *
1980: 2f 0a 20 20 20 20 49 20 3d 20 31 3c 3c 49 3b 0a  /.    I = 1<<I;.
1990: 20 20 20 20 2f 2a 20 54 68 65 20 75 70 70 65 72      /* The upper
19a0: 20 38 20 62 69 74 73 20 6f 66 20 69 53 72 63 4c   8 bits of iSrcL
19b0: 69 6e 65 20 61 72 65 20 66 6c 61 67 73 2e 20 20  ine are flags.  
19c0: 54 68 65 20 6c 6f 77 65 72 20 74 68 72 65 65 20  The lower three 
19d0: 62 69 74 73 20 6f 66 0a 20 20 20 20 2a 2a 20 74  bits of.    ** t
19e0: 68 65 20 66 6c 61 67 73 20 69 6e 64 69 63 61 74  he flags indicat
19f0: 65 20 64 69 72 65 63 74 69 6f 6e 73 20 74 68 61  e directions tha
1a00: 74 20 74 68 65 20 62 72 61 6e 63 68 20 63 61 6e  t the branch can
1a10: 20 6e 65 76 65 72 20 67 6f 2e 20 20 49 66 0a 20   never go.  If. 
1a20: 20 20 20 2a 2a 20 61 20 62 72 61 6e 63 68 20 72     ** a branch r
1a30: 65 61 6c 6c 79 20 64 6f 65 73 20 67 6f 20 69 6e  eally does go in
1a40: 20 6f 6e 65 20 6f 66 20 74 68 6f 73 65 20 64 69   one of those di
1a50: 72 65 63 74 69 6f 6e 73 2c 20 61 73 73 65 72 74  rections, assert
1a60: 20 72 69 67 68 74 0a 20 20 20 20 2a 2a 20 61 77   right.    ** aw
1a70: 61 79 2e 20 2a 2f 0a 20 20 20 20 6d 4e 65 76 65  ay. */.    mNeve
1a80: 72 20 3d 20 69 53 72 63 4c 69 6e 65 20 3e 3e 20  r = iSrcLine >> 
1a90: 32 34 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  24;.    assert( 
1aa0: 28 49 20 26 20 6d 4e 65 76 65 72 29 3d 3d 30 20  (I & mNever)==0 
1ab0: 29 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  );.    if( sqlit
1ac0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
1ad0: 56 64 62 65 42 72 61 6e 63 68 3d 3d 30 20 29 20  VdbeBranch==0 ) 
1ae0: 72 65 74 75 72 6e 3b 20 20 2f 2a 4e 4f 5f 54 45  return;  /*NO_TE
1af0: 53 54 2a 2f 0a 20 20 20 20 2f 2a 20 49 6e 76 6f  ST*/.    /* Invo
1b00: 6b 65 20 74 68 65 20 62 72 61 6e 63 68 20 63 6f  ke the branch co
1b10: 76 65 72 61 67 65 20 63 61 6c 6c 62 61 63 6b 20  verage callback 
1b20: 77 69 74 68 20 74 68 72 65 65 20 61 72 67 75 6d  with three argum
1b30: 65 6e 74 73 3a 0a 20 20 20 20 2a 2a 20 20 20 20  ents:.    **    
1b40: 69 53 72 63 4c 69 6e 65 20 2d 20 74 68 65 20 6c  iSrcLine - the l
1b50: 69 6e 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  ine number of th
1b60: 65 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 29  e VdbeCoverage()
1b70: 20 6d 61 63 72 6f 2c 20 77 69 74 68 0a 20 20 20   macro, with.   
1b80: 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20   **             
1b90: 20 20 66 6c 61 67 73 20 72 65 6d 6f 76 65 64 2e    flags removed.
1ba0: 0a 20 20 20 20 2a 2a 20 20 20 20 49 20 20 20 20  .    **    I    
1bb0: 20 20 20 20 2d 20 4d 61 73 6b 20 6f 66 20 62 69      - Mask of bi
1bc0: 74 73 20 30 78 30 37 20 69 6e 64 69 63 61 74 69  ts 0x07 indicati
1bd0: 6e 67 20 77 68 69 63 68 20 63 61 73 65 73 20 61  ng which cases a
1be0: 72 65 20 61 72 65 0a 20 20 20 20 2a 2a 20 20 20  re are.    **   
1bf0: 20 20 20 20 20 20 20 20 20 20 20 20 66 75 6c 66              fulf
1c00: 69 6c 6c 65 64 20 62 79 20 74 68 69 73 20 69 6e  illed by this in
1c10: 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 6a 75  stance of the ju
1c20: 6d 70 2e 20 20 30 78 30 31 20 6d 65 61 6e 73 0a  mp.  0x01 means.
1c30: 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20      **          
1c40: 20 20 20 20 20 66 61 6c 6c 2d 74 68 72 75 2c 20       fall-thru, 
1c50: 30 78 30 32 20 6d 65 61 6e 73 20 74 61 6b 65 6e  0x02 means taken
1c60: 2c 20 30 78 30 34 20 6d 65 61 6e 73 20 4e 55 4c  , 0x04 means NUL
1c70: 4c 2e 20 20 41 6e 79 0a 20 20 20 20 2a 2a 20 20  L.  Any.    **  
1c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70               imp
1c90: 6f 73 73 69 62 6c 65 20 63 61 73 65 73 20 28 65  ossible cases (e
1ca0: 78 3a 20 69 66 20 74 68 65 20 63 6f 6d 70 61 72  x: if the compar
1cb0: 69 73 6f 6e 20 69 73 20 6e 65 76 65 72 20 4e 55  ison is never NU
1cc0: 4c 4c 29 0a 20 20 20 20 2a 2a 20 20 20 20 20 20  LL).    **      
1cd0: 20 20 20 20 20 20 20 20 20 61 72 65 20 66 69 6c           are fil
1ce0: 6c 65 64 20 69 6e 20 61 75 74 6f 6d 61 74 69 63  led in automatic
1cf0: 61 6c 6c 79 20 73 6f 20 74 68 61 74 20 74 68 65  ally so that the
1d00: 20 63 6f 76 65 72 61 67 65 0a 20 20 20 20 2a 2a   coverage.    **
1d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d                 m
1d20: 65 61 73 75 72 65 6d 65 6e 74 20 6c 6f 67 69 63  easurement logic
1d30: 20 64 6f 65 73 20 6e 6f 74 20 66 6c 61 67 20 74   does not flag t
1d40: 68 6f 73 65 20 69 6d 70 6f 73 73 69 62 6c 65 20  hose impossible 
1d50: 63 61 73 65 73 0a 20 20 20 20 2a 2a 20 20 20 20  cases.    **    
1d60: 20 20 20 20 20 20 20 20 20 20 20 61 73 20 6d 69             as mi
1d70: 73 73 65 64 20 63 6f 76 65 72 61 67 65 2e 0a 20  ssed coverage.. 
1d80: 20 20 20 2a 2a 20 20 20 20 4d 20 20 20 20 20 20     **    M      
1d90: 20 20 2d 20 54 79 70 65 20 6f 66 20 6a 75 6d 70    - Type of jump
1da0: 2e 20 20 53 61 6d 65 20 61 73 20 4d 20 61 72 67  .  Same as M arg
1db0: 75 6d 65 6e 74 20 61 62 6f 76 65 0a 20 20 20 20  ument above.    
1dc0: 2a 2f 0a 20 20 20 20 49 20 7c 3d 20 6d 4e 65 76  */.    I |= mNev
1dd0: 65 72 3b 0a 20 20 20 20 69 66 28 20 4d 3d 3d 32  er;.    if( M==2
1de0: 20 29 20 49 20 7c 3d 20 30 78 30 34 3b 0a 20 20   ) I |= 0x04;.  
1df0: 20 20 69 66 28 20 4d 3d 3d 34 20 29 7b 0a 20 20    if( M==4 ){.  
1e00: 20 20 20 20 49 20 7c 3d 20 30 78 30 38 3b 0a 20      I |= 0x08;. 
1e10: 20 20 20 20 20 69 66 28 20 28 6d 4e 65 76 65 72       if( (mNever
1e20: 26 30 78 30 38 29 21 3d 30 20 26 26 20 28 49 26  &0x08)!=0 && (I&
1e30: 30 78 30 35 29 21 3d 30 29 20 49 20 7c 3d 20 30  0x05)!=0) I |= 0
1e40: 78 30 35 3b 20 2f 2a 4e 4f 5f 54 45 53 54 2a 2f  x05; /*NO_TEST*/
1e50: 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
1e60: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
1e70: 56 64 62 65 42 72 61 6e 63 68 28 73 71 6c 69 74  VdbeBranch(sqlit
1e80: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70  e3GlobalConfig.p
1e90: 56 64 62 65 42 72 61 6e 63 68 41 72 67 2c 0a 20  VdbeBranchArg,. 
1ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec0: 20 20 20 69 53 72 63 4c 69 6e 65 26 30 78 66 66     iSrcLine&0xff
1ed0: 66 66 66 66 2c 20 49 2c 20 4d 29 3b 0a 20 20 7d  ffff, I, M);.  }
1ee0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
1ef0: 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69  n ephemeral stri
1f00: 6e 67 20 76 61 6c 75 65 20 28 73 69 67 6e 69 66  ng value (signif
1f10: 69 65 64 20 62 79 20 74 68 65 20 4d 45 4d 5f 45  ied by the MEM_E
1f20: 70 68 65 6d 20 66 6c 61 67 29 20 63 6f 6e 74 61  phem flag) conta
1f30: 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72  ins.** a pointer
1f40: 20 74 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c   to a dynamicall
1f50: 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 74 72 69  y allocated stri
1f60: 6e 67 20 77 68 65 72 65 20 73 6f 6d 65 20 6f 74  ng where some ot
1f70: 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a 20 69 73  her entity.** is
1f80: 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72   responsible for
1f90: 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68   deallocating th
1fa0: 61 74 20 73 74 72 69 6e 67 2e 20 20 42 65 63 61  at string.  Beca
1fb0: 75 73 65 20 74 68 65 20 72 65 67 69 73 74 65 72  use the register
1fc0: 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e  .** does not con
1fd0: 74 72 6f 6c 20 74 68 65 20 73 74 72 69 6e 67 2c  trol the string,
1fe0: 20 69 74 20 6d 69 67 68 74 20 62 65 20 64 65 6c   it might be del
1ff0: 65 74 65 64 20 77 69 74 68 6f 75 74 20 74 68 65  eted without the
2000: 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6b 6e 6f   register.** kno
2010: 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54  wing it..**.** T
2020: 68 69 73 20 72 6f 75 74 69 6e 65 20 63 6f 6e 76  his routine conv
2030: 65 72 74 73 20 61 6e 20 65 70 68 65 6d 65 72 61  erts an ephemera
2040: 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20  l string into a 
2050: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
2060: 63 61 74 65 64 0a 2a 2a 20 73 74 72 69 6e 67 20  cated.** string 
2070: 74 68 61 74 20 74 68 65 20 72 65 67 69 73 74 65  that the registe
2080: 72 20 69 74 73 65 6c 66 20 63 6f 6e 74 72 6f 6c  r itself control
2090: 73 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  s.  In other wor
20a0: 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76 65 72  ds, it.** conver
20b0: 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68 65 6d 20  ts an MEM_Ephem 
20c0: 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20 73 74  string into a st
20d0: 72 69 6e 67 20 77 69 74 68 20 50 2e 7a 3d 3d 50  ring with P.z==P
20e0: 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a 23 64 65  .zMalloc..*/.#de
20f0: 66 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61 6c  fine Deephemeral
2100: 69 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28 20  ize(P) \.   if( 
2110: 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  ((P)->flags&MEM_
2120: 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20 20  Ephem)!=0 \.    
2130: 20 20 20 26 26 20 73 71 6c 69 74 65 33 56 64 62     && sqlite3Vdb
2140: 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c  eMemMakeWriteabl
2150: 65 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f 5f  e(P) ){ goto no_
2160: 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74 75 72 6e  mem;}../* Return
2170: 20 74 72 75 65 20 69 66 20 74 68 65 20 63 75 72   true if the cur
2180: 73 6f 72 20 77 61 73 20 6f 70 65 6e 65 64 20 75  sor was opened u
2190: 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f 70 65 6e  sing the OP_Open
21a0: 53 6f 72 74 65 72 20 6f 70 63 6f 64 65 2e 20 2a  Sorter opcode. *
21b0: 2f 0a 23 64 65 66 69 6e 65 20 69 73 53 6f 72 74  /.#define isSort
21c0: 65 72 28 78 29 20 28 28 78 29 2d 3e 65 43 75 72  er(x) ((x)->eCur
21d0: 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 53 4f  Type==CURTYPE_SO
21e0: 52 54 45 52 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  RTER)../*.** All
21f0: 6f 63 61 74 65 20 56 64 62 65 43 75 72 73 6f 72  ocate VdbeCursor
2200: 20 6e 75 6d 62 65 72 20 69 43 75 72 2e 20 20 52   number iCur.  R
2210: 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72 20  eturn a pointer 
2220: 74 6f 20 69 74 2e 20 20 52 65 74 75 72 6e 20 4e  to it.  Return N
2230: 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20 72 75 6e  ULL.** if we run
2240: 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 2e 0a   out of memory..
2250: 2a 2f 0a 73 74 61 74 69 63 20 56 64 62 65 43 75  */.static VdbeCu
2260: 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74 65 43 75  rsor *allocateCu
2270: 72 73 6f 72 28 0a 20 20 56 64 62 65 20 2a 70 2c  rsor(.  Vdbe *p,
2280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2290: 20 54 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   The virtual mac
22a0: 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 69 43  hine */.  int iC
22b0: 75 72 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ur,             
22c0: 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65 20  /* Index of the 
22d0: 6e 65 77 20 56 64 62 65 43 75 72 73 6f 72 20 2a  new VdbeCursor *
22e0: 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 2c 20  /.  int nField, 
22f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
2300: 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e  ber of fields in
2310: 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
2320: 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62  dex */.  int iDb
2330: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
2340: 2a 20 44 61 74 61 62 61 73 65 20 74 68 65 20 63  * Database the c
2350: 75 72 73 6f 72 20 62 65 6c 6f 6e 67 73 20 74 6f  ursor belongs to
2360: 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20 20 75 38 20  , or -1 */.  u8 
2370: 65 43 75 72 54 79 70 65 20 20 20 20 20 20 20 20  eCurType        
2380: 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68     /* Type of th
2390: 65 20 6e 65 77 20 63 75 72 73 6f 72 20 2a 2f 0a  e new cursor */.
23a0: 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65  ){.  /* Find the
23b0: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61   memory cell tha
23c0: 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74  t will be used t
23d0: 6f 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62  o store the blob
23e0: 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20   of memory.  ** 
23f0: 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69  required for thi
2400: 73 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72  s VdbeCursor str
2410: 75 63 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f  ucture. It is co
2420: 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20  nvenient to use 
2430: 61 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d  a .  ** vdbe mem
2440: 6f 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61  ory cell to mana
2450: 67 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c  ge the memory al
2460: 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65  location require
2470: 64 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62  d for a.  ** Vdb
2480: 65 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72  eCursor structur
2490: 65 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77  e for the follow
24a0: 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a  ing reasons:.  *
24b0: 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74  *.  **   * Somet
24c0: 69 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62  imes cursor numb
24d0: 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72  ers are used for
24e0: 20 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66   a couple of dif
24f0: 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20  ferent.  **     
2500: 70 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64  purposes in a vd
2510: 62 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20  be program. The 
2520: 64 69 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d  different uses m
2530: 69 67 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a  ight require.  *
2540: 2a 20 20 20 20 20 64 69 66 66 65 72 65 6e 74 20  *     different 
2550: 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e  sized allocation
2560: 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  s. Memory cells 
2570: 70 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65  provide growable
2580: 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61  .  **     alloca
2590: 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  tions..  **.  **
25a0: 20 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20     * When using 
25b0: 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41  ENABLE_MEMORY_MA
25c0: 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79  NAGEMENT, memory
25d0: 20 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61   cell buffers ca
25e0: 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72  n.  **     be fr
25f0: 65 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74  eed lazily via t
2600: 68 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61  he sqlite3_relea
2610: 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e  se_memory() API.
2620: 20 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d   This.  **     m
2630: 69 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d  inimizes the num
2640: 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61  ber of malloc ca
2650: 6c 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65 20  lls made by the 
2660: 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a  system..  **.  *
2670: 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  * The memory cel
2680: 6c 20 66 6f 72 20 63 75 72 73 6f 72 20 30 20 69  l for cursor 0 i
2690: 73 20 61 4d 65 6d 5b 30 5d 2e 20 54 68 65 20 72  s aMem[0]. The r
26a0: 65 73 74 20 61 72 65 20 61 6c 6c 6f 63 61 74 65  est are allocate
26b0: 64 20 66 72 6f 6d 0a 20 20 2a 2a 20 74 68 65 20  d from.  ** the 
26c0: 74 6f 70 20 6f 66 20 74 68 65 20 72 65 67 69 73  top of the regis
26d0: 74 65 72 20 73 70 61 63 65 2e 20 20 43 75 72 73  ter space.  Curs
26e0: 6f 72 20 31 20 69 73 20 61 74 20 4d 65 6d 5b 70  or 1 is at Mem[p
26f0: 2d 3e 6e 4d 65 6d 2d 31 5d 2e 0a 20 20 2a 2a 20  ->nMem-1]..  ** 
2700: 43 75 72 73 6f 72 20 32 20 69 73 20 61 74 20 4d  Cursor 2 is at M
2710: 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 32 5d 2e 20 41  em[p->nMem-2]. A
2720: 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20 2a  nd so forth..  *
2730: 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20  /.  Mem *pMem = 
2740: 69 43 75 72 3e 30 20 3f 20 26 70 2d 3e 61 4d 65  iCur>0 ? &p->aMe
2750: 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d 20  m[p->nMem-iCur] 
2760: 3a 20 70 2d 3e 61 4d 65 6d 3b 0a 0a 20 20 69 6e  : p->aMem;..  in
2770: 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65 43  t nByte;.  VdbeC
2780: 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b 0a  ursor *pCx = 0;.
2790: 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20 20    nByte = .     
27a0: 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56   ROUND8(sizeof(V
27b0: 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32 2a  dbeCursor)) + 2*
27c0: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
27d0: 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 65 43 75  ld + .      (eCu
27e0: 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
27f0: 54 52 45 45 3f 73 71 6c 69 74 65 33 42 74 72 65  TREE?sqlite3Btre
2800: 65 43 75 72 73 6f 72 53 69 7a 65 28 29 3a 30 29  eCursorSize():0)
2810: 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 43 75  ;..  assert( iCu
2820: 72 3e 3d 30 20 26 26 20 69 43 75 72 3c 70 2d 3e  r>=0 && iCur<p->
2830: 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28  nCursor );.  if(
2840: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20   p->apCsr[iCur] 
2850: 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f  ){ /*OPTIMIZATIO
2860: 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20  N-IF-FALSE*/.   
2870: 20 2f 2a 20 42 65 66 6f 72 65 20 63 61 6c 6c 69   /* Before calli
2880: 6e 67 20 73 71 6c 69 74 65 33 56 64 62 65 46 72  ng sqlite3VdbeFr
2890: 65 65 43 75 72 73 6f 72 28 29 2c 20 65 6e 73 75  eeCursor(), ensu
28a0: 72 65 20 74 68 65 20 69 73 45 70 68 65 6d 65 72  re the isEphemer
28b0: 61 6c 20 66 6c 61 67 0a 20 20 20 20 2a 2a 20 69  al flag.    ** i
28c0: 73 20 63 6c 65 61 72 2e 20 4f 74 68 65 72 77 69  s clear. Otherwi
28d0: 73 65 2c 20 69 66 20 74 68 69 73 20 69 73 20 61  se, if this is a
28e0: 6e 20 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73  n ephemeral curs
28f0: 6f 72 20 63 72 65 61 74 65 64 20 62 79 20 0a 20  or created by . 
2900: 20 20 20 2a 2a 20 4f 50 5f 4f 70 65 6e 44 75 70     ** OP_OpenDup
2910: 2c 20 74 68 65 20 63 75 72 73 6f 72 20 77 69 6c  , the cursor wil
2920: 6c 20 6e 6f 74 20 62 65 20 63 6c 6f 73 65 64 20  l not be closed 
2930: 61 6e 64 20 77 69 6c 6c 20 73 74 69 6c 6c 20 62  and will still b
2940: 65 20 70 61 72 74 0a 20 20 20 20 2a 2a 20 6f 66  e part.    ** of
2950: 20 61 20 42 74 53 68 61 72 65 64 2e 70 43 75 72   a BtShared.pCur
2960: 73 6f 72 20 6c 69 73 74 2e 20 20 2a 2f 0a 20 20  sor list.  */.  
2970: 20 20 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 69    if( p->apCsr[i
2980: 43 75 72 5d 2d 3e 70 42 74 78 3d 3d 30 20 29 20  Cur]->pBtx==0 ) 
2990: 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 2d 3e  p->apCsr[iCur]->
29a0: 69 73 45 70 68 65 6d 65 72 61 6c 20 3d 20 30 3b  isEphemeral = 0;
29b0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
29c0: 46 72 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d  FreeCursor(p, p-
29d0: 3e 61 70 43 73 72 5b 69 43 75 72 5d 29 3b 0a 20  >apCsr[iCur]);. 
29e0: 20 20 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72     p->apCsr[iCur
29f0: 5d 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28  ] = 0;.  }.  if(
2a00: 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69   SQLITE_OK==sqli
2a10: 74 65 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41  te3VdbeMemClearA
2a20: 6e 64 52 65 73 69 7a 65 28 70 4d 65 6d 2c 20 6e  ndResize(pMem, n
2a30: 42 79 74 65 29 20 29 7b 0a 20 20 20 20 70 2d 3e  Byte) ){.    p->
2a40: 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20 70 43  apCsr[iCur] = pC
2a50: 78 20 3d 20 28 56 64 62 65 43 75 72 73 6f 72 2a  x = (VdbeCursor*
2a60: 29 70 4d 65 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65  )pMem->z;.    me
2a70: 6d 73 65 74 28 70 43 78 2c 20 30 2c 20 6f 66 66  mset(pCx, 0, off
2a80: 73 65 74 6f 66 28 56 64 62 65 43 75 72 73 6f 72  setof(VdbeCursor
2a90: 2c 70 41 6c 74 43 75 72 73 6f 72 29 29 3b 0a 20  ,pAltCursor));. 
2aa0: 20 20 20 70 43 78 2d 3e 65 43 75 72 54 79 70 65     pCx->eCurType
2ab0: 20 3d 20 65 43 75 72 54 79 70 65 3b 0a 20 20 20   = eCurType;.   
2ac0: 20 70 43 78 2d 3e 69 44 62 20 3d 20 69 44 62 3b   pCx->iDb = iDb;
2ad0: 0a 20 20 20 20 70 43 78 2d 3e 6e 46 69 65 6c 64  .    pCx->nField
2ae0: 20 3d 20 6e 46 69 65 6c 64 3b 0a 20 20 20 20 70   = nField;.    p
2af0: 43 78 2d 3e 61 4f 66 66 73 65 74 20 3d 20 26 70  Cx->aOffset = &p
2b00: 43 78 2d 3e 61 54 79 70 65 5b 6e 46 69 65 6c 64  Cx->aType[nField
2b10: 5d 3b 0a 20 20 20 20 69 66 28 20 65 43 75 72 54  ];.    if( eCurT
2b20: 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
2b30: 45 45 20 29 7b 0a 20 20 20 20 20 20 70 43 78 2d  EE ){.      pCx-
2b40: 3e 75 63 2e 70 43 75 72 73 6f 72 20 3d 20 28 42  >uc.pCursor = (B
2b50: 74 43 75 72 73 6f 72 2a 29 0a 20 20 20 20 20 20  tCursor*).      
2b60: 20 20 20 20 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55      &pMem->z[ROU
2b70: 4e 44 38 28 73 69 7a 65 6f 66 28 56 64 62 65 43  ND8(sizeof(VdbeC
2b80: 75 72 73 6f 72 29 29 2b 32 2a 73 69 7a 65 6f 66  ursor))+2*sizeof
2b90: 28 75 33 32 29 2a 6e 46 69 65 6c 64 5d 3b 0a 20  (u32)*nField];. 
2ba0: 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65       sqlite3Btre
2bb0: 65 43 75 72 73 6f 72 5a 65 72 6f 28 70 43 78 2d  eCursorZero(pCx-
2bc0: 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20  >uc.pCursor);.  
2bd0: 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e    }.  }.  return
2be0: 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54   pCx;.}../*.** T
2bf0: 68 65 20 73 74 72 69 6e 67 20 69 6e 20 70 52 65  he string in pRe
2c00: 63 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6c 6f  c is known to lo
2c10: 6f 6b 20 6c 69 6b 65 20 61 6e 20 69 6e 74 65 67  ok like an integ
2c20: 65 72 20 61 6e 64 20 74 6f 20 68 61 76 65 20 61  er and to have a
2c30: 0a 2a 2a 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  .** floating poi
2c40: 6e 74 20 76 61 6c 75 65 20 6f 66 20 72 56 61 6c  nt value of rVal
2c50: 75 65 2e 20 20 52 65 74 75 72 6e 20 74 72 75 65  ue.  Return true
2c60: 20 61 6e 64 20 73 65 74 20 2a 70 69 56 61 6c 75   and set *piValu
2c70: 65 20 74 6f 20 74 68 65 0a 2a 2a 20 69 6e 74 65  e to the.** inte
2c80: 67 65 72 20 76 61 6c 75 65 20 69 66 20 74 68 65  ger value if the
2c90: 20 73 74 72 69 6e 67 20 69 73 20 69 6e 20 72 61   string is in ra
2ca0: 6e 67 65 20 74 6f 20 62 65 20 61 6e 20 69 6e 74  nge to be an int
2cb0: 65 67 65 72 2e 20 20 4f 74 68 65 72 77 69 73 65  eger.  Otherwise
2cc0: 2c 0a 2a 2a 20 72 65 74 75 72 6e 20 66 61 6c 73  ,.** return fals
2cd0: 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  e..*/.static int
2ce0: 20 61 6c 73 6f 41 6e 49 6e 74 28 4d 65 6d 20 2a   alsoAnInt(Mem *
2cf0: 70 52 65 63 2c 20 64 6f 75 62 6c 65 20 72 56 61  pRec, double rVa
2d00: 6c 75 65 2c 20 69 36 34 20 2a 70 69 56 61 6c 75  lue, i64 *piValu
2d10: 65 29 7b 0a 20 20 69 36 34 20 69 56 61 6c 75 65  e){.  i64 iValue
2d20: 20 3d 20 28 64 6f 75 62 6c 65 29 72 56 61 6c 75   = (double)rValu
2d30: 65 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  e;.  if( sqlite3
2d40: 52 65 61 6c 53 61 6d 65 41 73 49 6e 74 28 72 56  RealSameAsInt(rV
2d50: 61 6c 75 65 2c 69 56 61 6c 75 65 29 20 29 7b 0a  alue,iValue) ){.
2d60: 20 20 20 20 2a 70 69 56 61 6c 75 65 20 3d 20 69      *piValue = i
2d70: 56 61 6c 75 65 3b 0a 20 20 20 20 72 65 74 75 72  Value;.    retur
2d80: 6e 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  n 1;.  }.  retur
2d90: 6e 20 30 3d 3d 73 71 6c 69 74 65 33 41 74 6f 69  n 0==sqlite3Atoi
2da0: 36 34 28 70 52 65 63 2d 3e 7a 2c 20 70 69 56 61  64(pRec->z, piVa
2db0: 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 70 52  lue, pRec->n, pR
2dc0: 65 63 2d 3e 65 6e 63 29 3b 0a 7d 0a 0a 2f 2a 0a  ec->enc);.}../*.
2dd0: 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72  ** Try to conver
2de0: 74 20 61 20 76 61 6c 75 65 20 69 6e 74 6f 20 61  t a value into a
2df0: 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65   numeric represe
2e00: 6e 74 61 74 69 6f 6e 20 69 66 20 77 65 20 63 61  ntation if we ca
2e10: 6e 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74 68 6f  n.** do so witho
2e20: 75 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72  ut loss of infor
2e30: 6d 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65  mation.  In othe
2e40: 72 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20  r words, if the 
2e50: 73 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20  string.** looks 
2e60: 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 63  like a number, c
2e70: 6f 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20 61  onvert it into a
2e80: 20 6e 75 6d 62 65 72 2e 20 20 49 66 20 69 74 20   number.  If it 
2e90: 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b  does not.** look
2ea0: 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20   like a number, 
2eb0: 6c 65 61 76 65 20 69 74 20 61 6c 6f 6e 65 2e 0a  leave it alone..
2ec0: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 62 54 72  **.** If the bTr
2ed0: 79 46 6f 72 49 6e 74 20 66 6c 61 67 20 69 73 20  yForInt flag is 
2ee0: 74 72 75 65 2c 20 74 68 65 6e 20 65 78 74 72 61  true, then extra
2ef0: 20 65 66 66 6f 72 74 20 69 73 20 6d 61 64 65 20   effort is made 
2f00: 74 6f 20 67 69 76 65 0a 2a 2a 20 61 6e 20 69 6e  to give.** an in
2f10: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
2f20: 74 69 6f 6e 2e 20 20 53 74 72 69 6e 67 73 20 74  tion.  Strings t
2f30: 68 61 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20 66 6c  hat look like fl
2f40: 6f 61 74 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20  oating point.** 
2f50: 76 61 6c 75 65 73 20 62 75 74 20 77 68 69 63 68  values but which
2f60: 20 68 61 76 65 20 6e 6f 20 66 72 61 63 74 69 6f   have no fractio
2f70: 6e 61 6c 20 63 6f 6d 70 6f 6e 65 6e 74 20 28 65  nal component (e
2f80: 78 61 6d 70 6c 65 3a 20 27 34 38 2e 30 30 27 29  xample: '48.00')
2f90: 0a 2a 2a 20 77 69 6c 6c 20 68 61 76 65 20 61 20  .** will have a 
2fa0: 4d 45 4d 5f 49 6e 74 20 72 65 70 72 65 73 65 6e  MEM_Int represen
2fb0: 74 61 74 69 6f 6e 20 77 68 65 6e 20 62 54 72 79  tation when bTry
2fc0: 46 6f 72 49 6e 74 20 69 73 20 74 72 75 65 2e 0a  ForInt is true..
2fd0: 2a 2a 0a 2a 2a 20 49 66 20 62 54 72 79 46 6f 72  **.** If bTryFor
2fe0: 49 6e 74 20 69 73 20 66 61 6c 73 65 2c 20 74 68  Int is false, th
2ff0: 65 6e 20 69 66 20 74 68 65 20 69 6e 70 75 74 20  en if the input 
3000: 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 73 20  string contains 
3010: 61 20 64 65 63 69 6d 61 6c 0a 2a 2a 20 70 6f 69  a decimal.** poi
3020: 6e 74 20 6f 72 20 65 78 70 6f 6e 65 6e 74 69 61  nt or exponentia
3030: 6c 20 6e 6f 74 61 74 69 6f 6e 2c 20 74 68 65 20  l notation, the 
3040: 72 65 73 75 6c 74 20 69 73 20 6f 6e 6c 79 20 4d  result is only M
3050: 45 4d 5f 52 65 61 6c 2c 20 65 76 65 6e 0a 2a 2a  EM_Real, even.**
3060: 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20   if there is an 
3070: 65 78 61 63 74 20 69 6e 74 65 67 65 72 20 72 65  exact integer re
3080: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
3090: 74 68 65 20 71 75 61 6e 74 69 74 79 2e 0a 2a 2f  the quantity..*/
30a0: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61 70 70  .static void app
30b0: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
30c0: 79 28 4d 65 6d 20 2a 70 52 65 63 2c 20 69 6e 74  y(Mem *pRec, int
30d0: 20 62 54 72 79 46 6f 72 49 6e 74 29 7b 0a 20 20   bTryForInt){.  
30e0: 64 6f 75 62 6c 65 20 72 56 61 6c 75 65 3b 0a 20  double rValue;. 
30f0: 20 75 38 20 65 6e 63 20 3d 20 70 52 65 63 2d 3e   u8 enc = pRec->
3100: 65 6e 63 3b 0a 20 20 69 6e 74 20 72 63 3b 0a 20  enc;.  int rc;. 
3110: 20 61 73 73 65 72 74 28 20 28 70 52 65 63 2d 3e   assert( (pRec->
3120: 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72  flags & (MEM_Str
3130: 7c 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61  |MEM_Int|MEM_Rea
3140: 6c 7c 4d 45 4d 5f 49 6e 74 52 65 61 6c 29 29 3d  l|MEM_IntReal))=
3150: 3d 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 72 63  =MEM_Str );.  rc
3160: 20 3d 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70   = sqlite3AtoF(p
3170: 52 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75 65 2c  Rec->z, &rValue,
3180: 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3b 0a   pRec->n, enc);.
3190: 20 20 69 66 28 20 72 63 3c 3d 30 20 29 20 72 65    if( rc<=0 ) re
31a0: 74 75 72 6e 3b 0a 20 20 69 66 28 20 72 63 3d 3d  turn;.  if( rc==
31b0: 31 20 26 26 20 61 6c 73 6f 41 6e 49 6e 74 28 70  1 && alsoAnInt(p
31c0: 52 65 63 2c 20 72 56 61 6c 75 65 2c 20 26 70 52  Rec, rValue, &pR
31d0: 65 63 2d 3e 75 2e 69 29 20 29 7b 0a 20 20 20 20  ec->u.i) ){.    
31e0: 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d  pRec->flags |= M
31f0: 45 4d 5f 49 6e 74 3b 0a 20 20 7d 65 6c 73 65 7b  EM_Int;.  }else{
3200: 0a 20 20 20 20 70 52 65 63 2d 3e 75 2e 72 20 3d  .    pRec->u.r =
3210: 20 72 56 61 6c 75 65 3b 0a 20 20 20 20 70 52 65   rValue;.    pRe
3220: 63 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f  c->flags |= MEM_
3230: 52 65 61 6c 3b 0a 20 20 20 20 69 66 28 20 62 54  Real;.    if( bT
3240: 72 79 46 6f 72 49 6e 74 20 29 20 73 71 6c 69 74  ryForInt ) sqlit
3250: 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66 66  e3VdbeIntegerAff
3260: 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20 7d  inity(pRec);.  }
3270: 0a 20 20 2f 2a 20 54 45 58 54 2d 3e 4e 55 4d 45  .  /* TEXT->NUME
3280: 52 49 43 20 69 73 20 6d 61 6e 79 2d 3e 6f 6e 65  RIC is many->one
3290: 2e 20 20 48 65 6e 63 65 2c 20 69 74 20 69 73 20  .  Hence, it is 
32a0: 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 69 6e 76  important to inv
32b0: 61 6c 69 64 61 74 65 20 74 68 65 0a 20 20 2a 2a  alidate the.  **
32c0: 20 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e   string represen
32d0: 74 61 74 69 6f 6e 20 61 66 74 65 72 20 63 6f 6d  tation after com
32e0: 70 75 74 69 6e 67 20 61 20 6e 75 6d 65 72 69 63  puting a numeric
32f0: 20 65 71 75 69 76 61 6c 65 6e 74 2c 20 62 65 63   equivalent, bec
3300: 61 75 73 65 20 74 68 65 0a 20 20 2a 2a 20 73 74  ause the.  ** st
3310: 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74  ring representat
3320: 69 6f 6e 20 6d 69 67 68 74 20 6e 6f 74 20 62 65  ion might not be
3330: 20 74 68 65 20 63 61 6e 6f 6e 69 63 61 6c 20 72   the canonical r
3340: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 66 6f  epresentation fo
3350: 72 20 74 68 65 0a 20 20 2a 2a 20 6e 75 6d 65 72  r the.  ** numer
3360: 69 63 20 76 61 6c 75 65 2e 20 20 54 69 63 6b 65  ic value.  Ticke
3370: 74 20 5b 33 34 33 36 33 34 39 34 32 64 64 35 34  t [343634942dd54
3380: 61 62 35 37 62 37 30 32 34 5d 20 32 30 31 38 2d  ab57b7024] 2018-
3390: 30 31 2d 33 31 2e 20 2a 2f 0a 20 20 70 52 65 63  01-31. */.  pRec
33a0: 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f  ->flags &= ~MEM_
33b0: 53 74 72 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72  Str;.}../*.** Pr
33c0: 6f 63 65 73 73 69 6e 67 20 69 73 20 64 65 74 65  ocessing is dete
33d0: 72 6d 69 6e 65 20 62 79 20 74 68 65 20 61 66 66  rmine by the aff
33e0: 69 6e 69 74 79 20 70 61 72 61 6d 65 74 65 72 3a  inity parameter:
33f0: 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46  .**.** SQLITE_AF
3400: 46 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a 20 53 51  F_INTEGER:.** SQ
3410: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 3a 0a 2a  LITE_AFF_REAL:.*
3420: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  * SQLITE_AFF_NUM
3430: 45 52 49 43 3a 0a 2a 2a 20 20 20 20 54 72 79 20  ERIC:.**    Try 
3440: 74 6f 20 63 6f 6e 76 65 72 74 20 70 52 65 63 20  to convert pRec 
3450: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65  to an integer re
3460: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 72 20  presentation or 
3470: 61 20 0a 2a 2a 20 20 20 20 66 6c 6f 61 74 69 6e  a .**    floatin
3480: 67 2d 70 6f 69 6e 74 20 72 65 70 72 65 73 65 6e  g-point represen
3490: 74 61 74 69 6f 6e 20 69 66 20 61 6e 20 69 6e 74  tation if an int
34a0: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
34b0: 69 6f 6e 0a 2a 2a 20 20 20 20 69 73 20 6e 6f 74  ion.**    is not
34c0: 20 70 6f 73 73 69 62 6c 65 2e 20 20 4e 6f 74 65   possible.  Note
34d0: 20 74 68 61 74 20 74 68 65 20 69 6e 74 65 67 65   that the intege
34e0: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
34f0: 20 69 73 0a 2a 2a 20 20 20 20 61 6c 77 61 79 73   is.**    always
3500: 20 70 72 65 66 65 72 72 65 64 2c 20 65 76 65 6e   preferred, even
3510: 20 69 66 20 74 68 65 20 61 66 66 69 6e 69 74 79   if the affinity
3520: 20 69 73 20 52 45 41 4c 2c 20 62 65 63 61 75 73   is REAL, becaus
3530: 65 0a 2a 2a 20 20 20 20 61 6e 20 69 6e 74 65 67  e.**    an integ
3540: 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  er representatio
3550: 6e 20 69 73 20 6d 6f 72 65 20 73 70 61 63 65 20  n is more space 
3560: 65 66 66 69 63 69 65 6e 74 20 6f 6e 20 64 69 73  efficient on dis
3570: 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f  k..**.** SQLITE_
3580: 41 46 46 5f 54 45 58 54 3a 0a 2a 2a 20 20 20 20  AFF_TEXT:.**    
3590: 43 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20  Convert pRec to 
35a0: 61 20 74 65 78 74 20 72 65 70 72 65 73 65 6e 74  a text represent
35b0: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c  ation..**.** SQL
35c0: 49 54 45 5f 41 46 46 5f 42 4c 4f 42 3a 0a 2a 2a  ITE_AFF_BLOB:.**
35d0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45   SQLITE_AFF_NONE
35e0: 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20 20  :.**    No-op.  
35f0: 70 52 65 63 20 69 73 20 75 6e 63 68 61 6e 67 65  pRec is unchange
3600: 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  d..*/.static voi
3610: 64 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28  d applyAffinity(
3620: 0a 20 20 4d 65 6d 20 2a 70 52 65 63 2c 20 20 20  .  Mem *pRec,   
3630: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76 61         /* The va
3640: 6c 75 65 20 74 6f 20 61 70 70 6c 79 20 61 66 66  lue to apply aff
3650: 69 6e 69 74 79 20 74 6f 20 2a 2f 0a 20 20 63 68  inity to */.  ch
3660: 61 72 20 61 66 66 69 6e 69 74 79 2c 20 20 20 20  ar affinity,    
3670: 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
3680: 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20  y to be applied 
3690: 2a 2f 0a 20 20 75 38 20 65 6e 63 20 20 20 20 20  */.  u8 enc     
36a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20           /* Use 
36b0: 74 68 69 73 20 74 65 78 74 20 65 6e 63 6f 64 69  this text encodi
36c0: 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61  ng */.){.  if( a
36d0: 66 66 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f  ffinity>=SQLITE_
36e0: 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20  AFF_NUMERIC ){. 
36f0: 20 20 20 61 73 73 65 72 74 28 20 61 66 66 69 6e     assert( affin
3700: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
3710: 49 4e 54 45 47 45 52 20 7c 7c 20 61 66 66 69 6e  INTEGER || affin
3720: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
3730: 52 45 41 4c 0a 20 20 20 20 20 20 20 20 20 20 20  REAL.           
3740: 20 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53    || affinity==S
3750: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
3760: 43 20 29 3b 0a 20 20 20 20 69 66 28 20 28 70 52  C );.    if( (pR
3770: 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ec->flags & MEM_
3780: 49 6e 74 29 3d 3d 30 20 29 7b 20 2f 2a 4f 50 54  Int)==0 ){ /*OPT
3790: 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c  IMIZATION-IF-FAL
37a0: 53 45 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28  SE*/.      if( (
37b0: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pRec->flags & ME
37c0: 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20  M_Real)==0 ){.  
37d0: 20 20 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e        if( pRec->
37e0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20  flags & MEM_Str 
37f0: 29 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66  ) applyNumericAf
3800: 66 69 6e 69 74 79 28 70 52 65 63 2c 31 29 3b 0a  finity(pRec,1);.
3810: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
3820: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
3830: 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79 28  IntegerAffinity(
3840: 70 52 65 63 29 3b 0a 20 20 20 20 20 20 7d 0a 20  pRec);.      }. 
3850: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28     }.  }else if(
3860: 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54   affinity==SQLIT
3870: 45 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a 20 20  E_AFF_TEXT ){.  
3880: 20 20 2f 2a 20 4f 6e 6c 79 20 61 74 74 65 6d 70    /* Only attemp
3890: 74 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e  t the conversion
38a0: 20 74 6f 20 54 45 58 54 20 69 66 20 74 68 65 72   to TEXT if ther
38b0: 65 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  e is an integer 
38c0: 6f 72 20 72 65 61 6c 0a 20 20 20 20 2a 2a 20 72  or real.    ** r
38d0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 28 62  epresentation (b
38e0: 6c 6f 62 20 61 6e 64 20 4e 55 4c 4c 20 64 6f 20  lob and NULL do 
38f0: 6e 6f 74 20 67 65 74 20 63 6f 6e 76 65 72 74 65  not get converte
3900: 64 29 20 62 75 74 20 6e 6f 20 73 74 72 69 6e 67  d) but no string
3910: 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73 65 6e  .    ** represen
3920: 74 61 74 69 6f 6e 2e 20 20 49 74 20 77 6f 75 6c  tation.  It woul
3930: 64 20 62 65 20 68 61 72 6d 6c 65 73 73 20 74 6f  d be harmless to
3940: 20 72 65 70 65 61 74 20 74 68 65 20 63 6f 6e 76   repeat the conv
3950: 65 72 73 69 6f 6e 20 69 66 20 0a 20 20 20 20 2a  ersion if .    *
3960: 2a 20 74 68 65 72 65 20 69 73 20 61 6c 72 65 61  * there is alrea
3970: 64 79 20 61 20 73 74 72 69 6e 67 20 72 65 70 2c  dy a string rep,
3980: 20 62 75 74 20 69 74 20 69 73 20 70 6f 69 6e 74   but it is point
3990: 6c 65 73 73 20 74 6f 20 77 61 73 74 65 20 74 68  less to waste th
39a0: 6f 73 65 0a 20 20 20 20 2a 2a 20 43 50 55 20 63  ose.    ** CPU c
39b0: 79 63 6c 65 73 2e 20 2a 2f 0a 20 20 20 20 69 66  ycles. */.    if
39c0: 28 20 30 3d 3d 28 70 52 65 63 2d 3e 66 6c 61 67  ( 0==(pRec->flag
39d0: 73 26 4d 45 4d 5f 53 74 72 29 20 29 7b 20 2f 2a  s&MEM_Str) ){ /*
39e0: 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d  OPTIMIZATION-IF-
39f0: 46 41 4c 53 45 2a 2f 0a 20 20 20 20 20 20 69 66  FALSE*/.      if
3a00: 28 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 28  ( (pRec->flags&(
3a10: 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74  MEM_Real|MEM_Int
3a20: 7c 4d 45 4d 5f 49 6e 74 52 65 61 6c 29 29 20 29  |MEM_IntReal)) )
3a30: 7b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61  {.        testca
3a40: 73 65 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20  se( pRec->flags 
3a50: 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20  & MEM_Int );.   
3a60: 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70       testcase( p
3a70: 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Rec->flags & MEM
3a80: 5f 52 65 61 6c 20 29 3b 0a 20 20 20 20 20 20 20  _Real );.       
3a90: 20 74 65 73 74 63 61 73 65 28 20 70 52 65 63 2d   testcase( pRec-
3aa0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
3ab0: 52 65 61 6c 20 29 3b 0a 20 20 20 20 20 20 20 20  Real );.        
3ac0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74  sqlite3VdbeMemSt
3ad0: 72 69 6e 67 69 66 79 28 70 52 65 63 2c 20 65 6e  ringify(pRec, en
3ae0: 63 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20  c, 1);.      }. 
3af0: 20 20 20 7d 0a 20 20 20 20 70 52 65 63 2d 3e 66     }.    pRec->f
3b00: 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 52 65  lags &= ~(MEM_Re
3b10: 61 6c 7c 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 49  al|MEM_Int|MEM_I
3b20: 6e 74 52 65 61 6c 29 3b 0a 20 20 7d 0a 7d 0a 0a  ntReal);.  }.}..
3b30: 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e  /*.** Try to con
3b40: 76 65 72 74 20 74 68 65 20 74 79 70 65 20 6f 66  vert the type of
3b50: 20 61 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75   a function argu
3b60: 6d 65 6e 74 20 6f 72 20 61 20 72 65 73 75 6c 74  ment or a result
3b70: 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 69 6e 74 6f 20   column.** into 
3b80: 61 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73  a numeric repres
3b90: 65 6e 74 61 74 69 6f 6e 2e 20 20 55 73 65 20 65  entation.  Use e
3ba0: 69 74 68 65 72 20 49 4e 54 45 47 45 52 20 6f 72  ither INTEGER or
3bb0: 20 52 45 41 4c 20 77 68 69 63 68 65 76 65 72 0a   REAL whichever.
3bc0: 2a 2a 20 69 73 20 61 70 70 72 6f 70 72 69 61 74  ** is appropriat
3bd0: 65 2e 20 20 42 75 74 20 6f 6e 6c 79 20 64 6f 20  e.  But only do 
3be0: 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  the conversion i
3bf0: 66 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65  f it is possible
3c00: 20 77 69 74 68 6f 75 74 0a 2a 2a 20 6c 6f 73 73   without.** loss
3c10: 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20   of information 
3c20: 61 6e 64 20 72 65 74 75 72 6e 20 74 68 65 20 72  and return the r
3c30: 65 76 69 73 65 64 20 74 79 70 65 20 6f 66 20 74  evised type of t
3c40: 68 65 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a  he argument..*/.
3c50: 69 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  int sqlite3_valu
3c60: 65 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65 28 73  e_numeric_type(s
3c70: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56  qlite3_value *pV
3c80: 61 6c 29 7b 0a 20 20 69 6e 74 20 65 54 79 70 65  al){.  int eType
3c90: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
3ca0: 5f 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20 69  _type(pVal);.  i
3cb0: 66 28 20 65 54 79 70 65 3d 3d 53 51 4c 49 54 45  f( eType==SQLITE
3cc0: 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 4d 65 6d  _TEXT ){.    Mem
3cd0: 20 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70   *pMem = (Mem*)p
3ce0: 56 61 6c 3b 0a 20 20 20 20 61 70 70 6c 79 4e 75  Val;.    applyNu
3cf0: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 4d  mericAffinity(pM
3d00: 65 6d 2c 20 30 29 3b 0a 20 20 20 20 65 54 79 70  em, 0);.    eTyp
3d10: 65 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  e = sqlite3_valu
3d20: 65 5f 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20  e_type(pVal);.  
3d30: 7d 0a 20 20 72 65 74 75 72 6e 20 65 54 79 70 65  }.  return eType
3d40: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72  ;.}../*.** Expor
3d50: 74 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61  ted version of a
3d60: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20  pplyAffinity(). 
3d70: 54 68 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f  This one works o
3d80: 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  n sqlite3_value*
3d90: 2c 20 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e  , .** not the in
3da0: 74 65 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65  ternal Mem* type
3db0: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
3dc0: 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e  3ValueApplyAffin
3dd0: 69 74 79 28 0a 20 20 73 71 6c 69 74 65 33 5f 76  ity(.  sqlite3_v
3de0: 61 6c 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75  alue *pVal, .  u
3df0: 38 20 61 66 66 69 6e 69 74 79 2c 20 0a 20 20 75  8 affinity, .  u
3e00: 38 20 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79  8 enc.){.  apply
3e10: 41 66 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29  Affinity((Mem *)
3e20: 70 56 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20  pVal, affinity, 
3e30: 65 6e 63 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 70  enc);.}../*.** p
3e40: 4d 65 6d 20 63 75 72 72 65 6e 74 6c 79 20 6f 6e  Mem currently on
3e50: 6c 79 20 68 6f 6c 64 73 20 61 20 73 74 72 69 6e  ly holds a strin
3e60: 67 20 74 79 70 65 20 28 6f 72 20 6d 61 79 62 65  g type (or maybe
3e70: 20 61 20 42 4c 4f 42 20 74 68 61 74 20 77 65 20   a BLOB that we 
3e80: 63 61 6e 0a 2a 2a 20 69 6e 74 65 72 70 72 65 74  can.** interpret
3e90: 20 61 73 20 61 20 73 74 72 69 6e 67 20 69 66 20   as a string if 
3ea0: 77 65 20 77 61 6e 74 20 74 6f 29 2e 20 20 43 6f  we want to).  Co
3eb0: 6d 70 75 74 65 20 69 74 73 20 63 6f 72 72 65 73  mpute its corres
3ec0: 70 6f 6e 64 69 6e 67 0a 2a 2a 20 6e 75 6d 65 72  ponding.** numer
3ed0: 69 63 20 74 79 70 65 2c 20 69 66 20 68 61 73 20  ic type, if has 
3ee0: 6f 6e 65 2e 20 20 53 65 74 20 74 68 65 20 70 4d  one.  Set the pM
3ef0: 65 6d 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d  em->u.r and pMem
3f00: 2d 3e 75 2e 69 20 66 69 65 6c 64 73 0a 2a 2a 20  ->u.i fields.** 
3f10: 61 63 63 6f 72 64 69 6e 67 6c 79 2e 0a 2a 2f 0a  accordingly..*/.
3f20: 73 74 61 74 69 63 20 75 31 36 20 53 51 4c 49 54  static u16 SQLIT
3f30: 45 5f 4e 4f 49 4e 4c 49 4e 45 20 63 6f 6d 70 75  E_NOINLINE compu
3f40: 74 65 4e 75 6d 65 72 69 63 54 79 70 65 28 4d 65  teNumericType(Me
3f50: 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 6e 74 20  m *pMem){.  int 
3f60: 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e  rc;.  sqlite3_in
3f70: 74 36 34 20 69 78 3b 0a 20 20 61 73 73 65 72 74  t64 ix;.  assert
3f80: 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
3f90: 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65   (MEM_Int|MEM_Re
3fa0: 61 6c 7c 4d 45 4d 5f 49 6e 74 52 65 61 6c 29 29  al|MEM_IntReal))
3fb0: 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
3fc0: 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20   (pMem->flags & 
3fd0: 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f  (MEM_Str|MEM_Blo
3fe0: 62 29 29 21 3d 30 20 29 3b 0a 20 20 45 78 70 61  b))!=0 );.  Expa
3ff0: 6e 64 42 6c 6f 62 28 70 4d 65 6d 29 3b 0a 20 20  ndBlob(pMem);.  
4000: 72 63 20 3d 20 73 71 6c 69 74 65 33 41 74 6f 46  rc = sqlite3AtoF
4010: 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d  (pMem->z, &pMem-
4020: 3e 75 2e 72 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70  >u.r, pMem->n, p
4030: 4d 65 6d 2d 3e 65 6e 63 29 3b 0a 20 20 69 66 28  Mem->enc);.  if(
4040: 20 72 63 3c 3d 30 20 29 7b 0a 20 20 20 20 69 66   rc<=0 ){.    if
4050: 28 20 72 63 3d 3d 30 20 26 26 20 73 71 6c 69 74  ( rc==0 && sqlit
4060: 65 33 41 74 6f 69 36 34 28 70 4d 65 6d 2d 3e 7a  e3Atoi64(pMem->z
4070: 2c 20 26 69 78 2c 20 70 4d 65 6d 2d 3e 6e 2c 20  , &ix, pMem->n, 
4080: 70 4d 65 6d 2d 3e 65 6e 63 29 3c 3d 31 20 29 7b  pMem->enc)<=1 ){
4090: 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 69  .      pMem->u.i
40a0: 20 3d 20 69 78 3b 0a 20 20 20 20 20 20 72 65 74   = ix;.      ret
40b0: 75 72 6e 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20  urn MEM_Int;.   
40c0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 65   }else{.      re
40d0: 74 75 72 6e 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20  turn MEM_Real;. 
40e0: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28     }.  }else if(
40f0: 20 72 63 3d 3d 31 20 26 26 20 73 71 6c 69 74 65   rc==1 && sqlite
4100: 33 41 74 6f 69 36 34 28 70 4d 65 6d 2d 3e 7a 2c  3Atoi64(pMem->z,
4110: 20 26 69 78 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70   &ix, pMem->n, p
4120: 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a  Mem->enc)==0 ){.
4130: 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d 20      pMem->u.i = 
4140: 69 78 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 4d  ix;.    return M
4150: 45 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20 72 65  EM_Int;.  }.  re
4160: 74 75 72 6e 20 4d 45 4d 5f 52 65 61 6c 3b 0a 7d  turn MEM_Real;.}
4170: 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
4180: 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20  he numeric type 
4190: 66 6f 72 20 70 4d 65 6d 2c 20 65 69 74 68 65 72  for pMem, either
41a0: 20 4d 45 4d 5f 49 6e 74 20 6f 72 20 4d 45 4d 5f   MEM_Int or MEM_
41b0: 52 65 61 6c 20 6f 72 20 62 6f 74 68 20 6f 72 0a  Real or both or.
41c0: 2a 2a 20 6e 6f 6e 65 2e 20 20 0a 2a 2a 0a 2a 2a  ** none.  .**.**
41d0: 20 55 6e 6c 69 6b 65 20 61 70 70 6c 79 4e 75 6d   Unlike applyNum
41e0: 65 72 69 63 41 66 66 69 6e 69 74 79 28 29 2c 20  ericAffinity(), 
41f0: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 64 6f 65  this routine doe
4200: 73 20 6e 6f 74 20 6d 6f 64 69 66 79 20 70 4d 65  s not modify pMe
4210: 6d 2d 3e 66 6c 61 67 73 2e 0a 2a 2a 20 42 75 74  m->flags..** But
4220: 20 69 74 20 64 6f 65 73 20 73 65 74 20 70 4d 65   it does set pMe
4230: 6d 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d 2d  m->u.r and pMem-
4240: 3e 75 2e 69 20 61 70 70 72 6f 70 72 69 61 74 65  >u.i appropriate
4250: 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75 31  ly..*/.static u1
4260: 36 20 6e 75 6d 65 72 69 63 54 79 70 65 28 4d 65  6 numericType(Me
4270: 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 66 28 20  m *pMem){.  if( 
4280: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
4290: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c  EM_Int|MEM_Real|
42a0: 4d 45 4d 5f 49 6e 74 52 65 61 6c 29 20 29 7b 0a  MEM_IntReal) ){.
42b0: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4d      testcase( pM
42c0: 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  em->flags & MEM_
42d0: 49 6e 74 20 29 3b 0a 20 20 20 20 74 65 73 74 63  Int );.    testc
42e0: 61 73 65 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73  ase( pMem->flags
42f0: 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20   & MEM_Real );. 
4300: 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4d 65     testcase( pMe
4310: 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  m->flags & MEM_I
4320: 6e 74 52 65 61 6c 20 29 3b 0a 20 20 20 20 72 65  ntReal );.    re
4330: 74 75 72 6e 20 70 4d 65 6d 2d 3e 66 6c 61 67 73  turn pMem->flags
4340: 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
4350: 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 52 65 61 6c  Real|MEM_IntReal
4360: 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4d 65  );.  }.  if( pMe
4370: 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  m->flags & (MEM_
4380: 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b  Str|MEM_Blob) ){
4390: 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70  .    testcase( p
43a0: 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Mem->flags & MEM
43b0: 5f 53 74 72 20 29 3b 0a 20 20 20 20 74 65 73 74  _Str );.    test
43c0: 63 61 73 65 28 20 70 4d 65 6d 2d 3e 66 6c 61 67  case( pMem->flag
43d0: 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a  s & MEM_Blob );.
43e0: 20 20 20 20 72 65 74 75 72 6e 20 63 6f 6d 70 75      return compu
43f0: 74 65 4e 75 6d 65 72 69 63 54 79 70 65 28 70 4d  teNumericType(pM
4400: 65 6d 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  em);.  }.  retur
4410: 6e 20 30 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53  n 0;.}..#ifdef S
4420: 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a  QLITE_DEBUG./*.*
4430: 2a 20 57 72 69 74 65 20 61 20 6e 69 63 65 20 73  * Write a nice s
4440: 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61  tring representa
4450: 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 74  tion of the cont
4460: 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d 65  ents of cell pMe
4470: 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65 72  m.** into buffer
4480: 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e 42   zBuf, length nB
4490: 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  uf..*/.void sqli
44a0: 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79  te3VdbeMemPretty
44b0: 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c  Print(Mem *pMem,
44c0: 20 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20 20   char *zBuf){.  
44d0: 63 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42 75  char *zCsr = zBu
44e0: 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d 65  f;.  int f = pMe
44f0: 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74 61  m->flags;..  sta
4500: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
4510: 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b 5d  const encnames[]
4520: 20 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29 22   = {"(X)", "(8)"
4530: 2c 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31 36  , "(16LE)", "(16
4540: 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66 26  BE)"};..  if( f&
4550: 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20 20  MEM_Blob ){.    
4560: 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20  int i;.    char 
4570: 63 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d  c;.    if( f & M
4580: 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20  EM_Dyn ){.      
4590: 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61  c = 'z';.      a
45a0: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
45b0: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65  _Static|MEM_Ephe
45c0: 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  m))==0 );.    }e
45d0: 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f  lse if( f & MEM_
45e0: 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20  Static ){.      
45f0: 63 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61  c = 't';.      a
4600: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
4610: 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29  _Dyn|MEM_Ephem))
4620: 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==0 );.    }else
4630: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68   if( f & MEM_Eph
4640: 65 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  em ){.      c = 
4650: 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'e';.      asser
4660: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
4670: 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30  tic|MEM_Dyn))==0
4680: 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   );.    }else{. 
4690: 20 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20 20       c = 's';.  
46a0: 20 20 7d 0a 20 20 20 20 2a 28 7a 43 73 72 2b 2b    }.    *(zCsr++
46b0: 29 20 3d 20 63 3b 0a 20 20 20 20 2a 28 7a 43 73  ) = c;.    *(zCs
46c0: 72 2b 2b 29 20 3d 20 27 78 27 3b 0a 20 20 20 20  r++) = 'x';.    
46d0: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
46e0: 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 64 5b  (100, zCsr, "%d[
46f0: 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20  ", pMem->n);.   
4700: 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33   zCsr += sqlite3
4710: 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a  Strlen30(zCsr);.
4720: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 32      for(i=0; i<2
4730: 35 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20  5 && i<pMem->n; 
4740: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  i++){.      sqli
4750: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30  te3_snprintf(100
4760: 2c 20 7a 43 73 72 2c 20 22 25 30 32 58 22 2c 20  , zCsr, "%02X", 
4770: 28 28 69 6e 74 29 70 4d 65 6d 2d 3e 7a 5b 69 5d  ((int)pMem->z[i]
4780: 20 26 20 30 78 46 46 29 29 3b 0a 20 20 20 20 20   & 0xFF));.     
4790: 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33   zCsr += sqlite3
47a0: 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a  Strlen30(zCsr);.
47b0: 20 20 20 20 7d 0a 20 20 20 20 2a 7a 43 73 72 2b      }.    *zCsr+
47c0: 2b 20 3d 20 27 7c 27 3b 0a 20 20 20 20 66 6f 72  + = '|';.    for
47d0: 28 69 3d 30 3b 20 69 3c 32 35 20 26 26 20 69 3c  (i=0; i<25 && i<
47e0: 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20  pMem->n; i++){. 
47f0: 20 20 20 20 20 63 68 61 72 20 7a 20 3d 20 70 4d       char z = pM
4800: 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20 20 20 20  em->z[i];.      
4810: 69 66 28 20 7a 3c 33 32 20 7c 7c 20 7a 3e 31 32  if( z<32 || z>12
4820: 36 20 29 20 2a 7a 43 73 72 2b 2b 20 3d 20 27 2e  6 ) *zCsr++ = '.
4830: 27 3b 0a 20 20 20 20 20 20 65 6c 73 65 20 2a 7a  ';.      else *z
4840: 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20 20 20 7d  Csr++ = z;.    }
4850: 0a 20 20 20 20 2a 28 7a 43 73 72 2b 2b 29 20 3d  .    *(zCsr++) =
4860: 20 27 5d 27 3b 0a 20 20 20 20 69 66 28 20 66 20   ']';.    if( f 
4870: 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20  & MEM_Zero ){.  
4880: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
4890: 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 22  intf(100, zCsr,"
48a0: 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a  +%dz",pMem->u.nZ
48b0: 65 72 6f 29 3b 0a 20 20 20 20 20 20 7a 43 73 72  ero);.      zCsr
48c0: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
48d0: 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d  n30(zCsr);.    }
48e0: 0a 20 20 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30  .    *zCsr = '\0
48f0: 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 66  ';.  }else if( f
4900: 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20   & MEM_Str ){.  
4910: 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20    int j, k;.    
4920: 7a 42 75 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20  zBuf[0] = ' ';. 
4930: 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44     if( f & MEM_D
4940: 79 6e 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66  yn ){.      zBuf
4950: 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20  [1] = 'z';.     
4960: 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d   assert( (f & (M
4970: 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70  EM_Static|MEM_Ep
4980: 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  hem))==0 );.    
4990: 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45  }else if( f & ME
49a0: 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20  M_Static ){.    
49b0: 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b    zBuf[1] = 't';
49c0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
49d0: 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d  f & (MEM_Dyn|MEM
49e0: 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20  _Ephem))==0 );. 
49f0: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26     }else if( f &
4a00: 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20   MEM_Ephem ){.  
4a10: 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65      zBuf[1] = 'e
4a20: 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ';.      assert(
4a30: 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69   (f & (MEM_Stati
4a40: 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29  c|MEM_Dyn))==0 )
4a50: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
4a60: 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27     zBuf[1] = 's'
4a70: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20  ;.    }.    k = 
4a80: 32 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  2;.    sqlite3_s
4a90: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 26 7a 42  nprintf(100, &zB
4aa0: 75 66 5b 6b 5d 2c 20 22 25 64 22 2c 20 70 4d 65  uf[k], "%d", pMe
4ab0: 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d 20  m->n);.    k += 
4ac0: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
4ad0: 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a  &zBuf[k]);.    z
4ae0: 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a  Buf[k++] = '[';.
4af0: 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 32      for(j=0; j<2
4b00: 35 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20  5 && j<pMem->n; 
4b10: 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 75 38 20 63  j++){.      u8 c
4b20: 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20   = pMem->z[j];. 
4b30: 20 20 20 20 20 69 66 28 20 63 3e 3d 30 78 32 30       if( c>=0x20
4b40: 20 26 26 20 63 3c 30 78 37 66 20 29 7b 0a 20 20   && c<0x7f ){.  
4b50: 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20        zBuf[k++] 
4b60: 3d 20 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  = c;.      }else
4b70: 7b 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b  {.        zBuf[k
4b80: 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20  ++] = '.';.     
4b90: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a 42 75   }.    }.    zBu
4ba0: 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20  f[k++] = ']';.  
4bb0: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
4bc0: 74 66 28 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c  tf(100,&zBuf[k],
4bd0: 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e   encnames[pMem->
4be0: 65 6e 63 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20  enc]);.    k += 
4bf0: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
4c00: 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a  &zBuf[k]);.    z
4c10: 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20  Buf[k++] = 0;.  
4c20: 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  }.}.#endif..#ifd
4c30: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
4c40: 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20  /*.** Print the 
4c50: 76 61 6c 75 65 20 6f 66 20 61 20 72 65 67 69 73  value of a regis
4c60: 74 65 72 20 66 6f 72 20 74 72 61 63 69 6e 67 20  ter for tracing 
4c70: 70 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61  purposes:.*/.sta
4c80: 74 69 63 20 76 6f 69 64 20 6d 65 6d 54 72 61 63  tic void memTrac
4c90: 65 50 72 69 6e 74 28 4d 65 6d 20 2a 70 29 7b 0a  ePrint(Mem *p){.
4ca0: 20 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26    if( p->flags &
4cb0: 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 20 29   MEM_Undefined )
4cc0: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 75  {.    printf(" u
4cd0: 6e 64 65 66 69 6e 65 64 22 29 3b 0a 20 20 7d 65  ndefined");.  }e
4ce0: 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73  lse if( p->flags
4cf0: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
4d00: 20 20 20 70 72 69 6e 74 66 28 70 2d 3e 66 6c 61     printf(p->fla
4d10: 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 3f 20  gs & MEM_Zero ? 
4d20: 22 20 4e 55 4c 4c 2d 6e 6f 63 68 6e 67 22 20 3a  " NULL-nochng" :
4d30: 20 22 20 4e 55 4c 4c 22 29 3b 0a 20 20 7d 65 6c   " NULL");.  }el
4d40: 73 65 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  se if( (p->flags
4d50: 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
4d60: 53 74 72 29 29 3d 3d 28 4d 45 4d 5f 49 6e 74 7c  Str))==(MEM_Int|
4d70: 4d 45 4d 5f 53 74 72 29 20 29 7b 0a 20 20 20 20  MEM_Str) ){.    
4d80: 70 72 69 6e 74 66 28 22 20 73 69 3a 25 6c 6c 64  printf(" si:%lld
4d90: 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65  ", p->u.i);.  }e
4da0: 6c 73 65 20 69 66 28 20 28 70 2d 3e 66 6c 61 67  lse if( (p->flag
4db0: 73 20 26 20 28 4d 45 4d 5f 49 6e 74 52 65 61 6c  s & (MEM_IntReal
4dc0: 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 70 72 69  ))!=0 ){.    pri
4dd0: 6e 74 66 28 22 20 69 72 3a 25 6c 6c 64 22 2c 20  ntf(" ir:%lld", 
4de0: 70 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65 6c 73 65  p->u.i);.  }else
4df0: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
4e00: 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 70  MEM_Int ){.    p
4e10: 72 69 6e 74 66 28 22 20 69 3a 25 6c 6c 64 22 2c  rintf(" i:%lld",
4e20: 20 70 2d 3e 75 2e 69 29 3b 0a 23 69 66 6e 64 65   p->u.i);.#ifnde
4e30: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
4e40: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 7d  OATING_POINT.  }
4e50: 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67  else if( p->flag
4e60: 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a  s & MEM_Real ){.
4e70: 20 20 20 20 70 72 69 6e 74 66 28 22 20 72 3a 25      printf(" r:%
4e80: 2e 31 37 67 22 2c 20 70 2d 3e 75 2e 72 29 3b 0a  .17g", p->u.r);.
4e90: 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73 65 20 69  #endif.  }else i
4ea0: 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
4eb0: 6d 49 73 52 6f 77 53 65 74 28 70 29 20 29 7b 0a  mIsRowSet(p) ){.
4ec0: 20 20 20 20 70 72 69 6e 74 66 28 22 20 28 72 6f      printf(" (ro
4ed0: 77 73 65 74 29 22 29 3b 0a 20 20 7d 65 6c 73 65  wset)");.  }else
4ee0: 7b 0a 20 20 20 20 63 68 61 72 20 7a 42 75 66 5b  {.    char zBuf[
4ef0: 32 30 30 5d 3b 0a 20 20 20 20 73 71 6c 69 74 65  200];.    sqlite
4f00: 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72  3VdbeMemPrettyPr
4f10: 69 6e 74 28 70 2c 20 7a 42 75 66 29 3b 0a 20 20  int(p, zBuf);.  
4f20: 20 20 70 72 69 6e 74 66 28 22 20 25 73 22 2c 20    printf(" %s", 
4f30: 7a 42 75 66 29 3b 0a 20 20 7d 0a 20 20 69 66 28  zBuf);.  }.  if(
4f40: 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f   p->flags & MEM_
4f50: 53 75 62 74 79 70 65 20 29 20 70 72 69 6e 74 66  Subtype ) printf
4f60: 28 22 20 73 75 62 74 79 70 65 3d 30 78 25 30 32  (" subtype=0x%02
4f70: 78 22 2c 20 70 2d 3e 65 53 75 62 74 79 70 65 29  x", p->eSubtype)
4f80: 3b 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20  ;.}.static void 
4f90: 72 65 67 69 73 74 65 72 54 72 61 63 65 28 69 6e  registerTrace(in
4fa0: 74 20 69 52 65 67 2c 20 4d 65 6d 20 2a 70 29 7b  t iReg, Mem *p){
4fb0: 0a 20 20 70 72 69 6e 74 66 28 22 52 45 47 5b 25  .  printf("REG[%
4fc0: 64 5d 20 3d 20 22 2c 20 69 52 65 67 29 3b 0a 20  d] = ", iReg);. 
4fd0: 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28 70   memTracePrint(p
4fe0: 29 3b 0a 20 20 70 72 69 6e 74 66 28 22 5c 6e 22  );.  printf("\n"
4ff0: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
5000: 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e  CheckMemInvarian
5010: 74 73 28 70 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a  ts(p);.}.#endif.
5020: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
5030: 45 42 55 47 0a 23 20 20 64 65 66 69 6e 65 20 52  EBUG.#  define R
5040: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c  EGISTER_TRACE(R,
5050: 4d 29 20 69 66 28 64 62 2d 3e 66 6c 61 67 73 26  M) if(db->flags&
5060: 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65  SQLITE_VdbeTrace
5070: 29 72 65 67 69 73 74 65 72 54 72 61 63 65 28 52  )registerTrace(R
5080: 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66  ,M).#else.#  def
5090: 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52 41  ine REGISTER_TRA
50a0: 43 45 28 52 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a  CE(R,M).#endif..
50b0: 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
50c0: 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77 74  FILE../* .** hwt
50d0: 69 6d 65 2e 68 20 63 6f 6e 74 61 69 6e 73 20 69  ime.h contains i
50e0: 6e 6c 69 6e 65 20 61 73 73 65 6d 62 6c 65 72 20  nline assembler 
50f0: 63 6f 64 65 20 66 6f 72 20 69 6d 70 6c 65 6d 65  code for impleme
5100: 6e 74 69 6e 67 20 0a 2a 2a 20 68 69 67 68 2d 70  nting .** high-p
5110: 65 72 66 6f 72 6d 61 6e 63 65 20 74 69 6d 69 6e  erformance timin
5120: 67 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 23  g routines..*/.#
5130: 69 6e 63 6c 75 64 65 20 22 68 77 74 69 6d 65 2e  include "hwtime.
5140: 68 22 0a 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  h"..#endif..#ifn
5150: 64 65 66 20 4e 44 45 42 55 47 0a 2f 2a 0a 2a 2a  def NDEBUG./*.**
5160: 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69   This function i
5170: 73 20 6f 6e 6c 79 20 63 61 6c 6c 65 64 20 66 72  s only called fr
5180: 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20 61 73 73  om within an ass
5190: 65 72 74 28 29 20 65 78 70 72 65 73 73 69 6f 6e  ert() expression
51a0: 2e 20 49 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74  . It.** checks t
51b0: 68 61 74 20 74 68 65 20 73 71 6c 69 74 65 33 2e  hat the sqlite3.
51c0: 6e 54 72 61 6e 73 61 63 74 69 6f 6e 20 76 61 72  nTransaction var
51d0: 69 61 62 6c 65 20 69 73 20 63 6f 72 72 65 63 74  iable is correct
51e0: 6c 79 20 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65  ly set to.** the
51f0: 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74   number of non-t
5200: 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70  ransaction savep
5210: 6f 69 6e 74 73 20 63 75 72 72 65 6e 74 6c 79 20  oints currently 
5220: 69 6e 20 74 68 65 20 0a 2a 2a 20 6c 69 6e 6b 65  in the .** linke
5230: 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20  d list starting 
5240: 61 74 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65  at sqlite3.pSave
5250: 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20 55 73  point..** .** Us
5260: 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61  age:.**.**     a
5270: 73 73 65 72 74 28 20 63 68 65 63 6b 53 61 76 65  ssert( checkSave
5280: 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29  pointCount(db) )
5290: 3b 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ;.*/.static int 
52a0: 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f  checkSavepointCo
52b0: 75 6e 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29  unt(sqlite3 *db)
52c0: 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 30 3b 0a 20  {.  int n = 0;. 
52d0: 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 3b 0a 20   Savepoint *p;. 
52e0: 20 66 6f 72 28 70 3d 64 62 2d 3e 70 53 61 76 65   for(p=db->pSave
52f0: 70 6f 69 6e 74 3b 20 70 3b 20 70 3d 70 2d 3e 70  point; p; p=p->p
5300: 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20 20 61 73 73  Next) n++;.  ass
5310: 65 72 74 28 20 6e 3d 3d 28 64 62 2d 3e 6e 53 61  ert( n==(db->nSa
5320: 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 69 73  vepoint + db->is
5330: 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
5340: 6f 69 6e 74 29 20 29 3b 0a 20 20 72 65 74 75 72  oint) );.  retur
5350: 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  n 1;.}.#endif../
5360: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
5370: 72 65 67 69 73 74 65 72 20 6f 66 20 70 4f 70 2d  register of pOp-
5380: 3e 70 32 20 61 66 74 65 72 20 66 69 72 73 74 20  >p2 after first 
5390: 70 72 65 70 61 72 69 6e 67 20 69 74 20 74 6f 20  preparing it to 
53a0: 62 65 0a 2a 2a 20 6f 76 65 72 77 72 69 74 74 65  be.** overwritte
53b0: 6e 20 77 69 74 68 20 61 6e 20 69 6e 74 65 67 65  n with an intege
53c0: 72 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74  r value..*/.stat
53d0: 69 63 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49  ic SQLITE_NOINLI
53e0: 4e 45 20 4d 65 6d 20 2a 6f 75 74 32 50 72 65 72  NE Mem *out2Prer
53f0: 65 6c 65 61 73 65 57 69 74 68 43 6c 65 61 72 28  eleaseWithClear(
5400: 4d 65 6d 20 2a 70 4f 75 74 29 7b 0a 20 20 73 71  Mem *pOut){.  sq
5410: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
5420: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 70 4f 75  ull(pOut);.  pOu
5430: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  t->flags = MEM_I
5440: 6e 74 3b 0a 20 20 72 65 74 75 72 6e 20 70 4f 75  nt;.  return pOu
5450: 74 3b 0a 7d 0a 73 74 61 74 69 63 20 4d 65 6d 20  t;.}.static Mem 
5460: 2a 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28  *out2Prerelease(
5470: 56 64 62 65 20 2a 70 2c 20 56 64 62 65 4f 70 20  Vdbe *p, VdbeOp 
5480: 2a 70 4f 70 29 7b 0a 20 20 4d 65 6d 20 2a 70 4f  *pOp){.  Mem *pO
5490: 75 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  ut;.  assert( pO
54a0: 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 61 73 73  p->p2>0 );.  ass
54b0: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70  ert( pOp->p2<=(p
54c0: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
54d0: 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74  ursor) );.  pOut
54e0: 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
54f0: 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p2];.  memAbout
5500: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
5510: 29 3b 0a 20 20 69 66 28 20 56 64 62 65 4d 65 6d  );.  if( VdbeMem
5520: 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 20 29 7b  Dynamic(pOut) ){
5530: 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d   /*OPTIMIZATION-
5540: 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20 72  IF-FALSE*/.    r
5550: 65 74 75 72 6e 20 6f 75 74 32 50 72 65 72 65 6c  eturn out2Prerel
5560: 65 61 73 65 57 69 74 68 43 6c 65 61 72 28 70 4f  easeWithClear(pO
5570: 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ut);.  }else{.  
5580: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
5590: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 72 65 74  MEM_Int;.    ret
55a0: 75 72 6e 20 70 4f 75 74 3b 0a 20 20 7d 0a 7d 0a  urn pOut;.  }.}.
55b0: 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20  ../*.** Execute 
55c0: 61 73 20 6d 75 63 68 20 6f 66 20 61 20 56 44 42  as much of a VDB
55d0: 45 20 70 72 6f 67 72 61 6d 20 61 73 20 77 65 20  E program as we 
55e0: 63 61 6e 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20  can..** This is 
55f0: 74 68 65 20 63 6f 72 65 20 6f 66 20 73 71 6c 69  the core of sqli
5600: 74 65 33 5f 73 74 65 70 28 29 2e 20 20 0a 2a 2f  te3_step().  .*/
5610: 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65  .int sqlite3Vdbe
5620: 45 78 65 63 28 0a 20 20 56 64 62 65 20 2a 70 20  Exec(.  Vdbe *p 
5630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5640: 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 2a     /* The VDBE *
5650: 2f 0a 29 7b 0a 20 20 4f 70 20 2a 61 4f 70 20 3d  /.){.  Op *aOp =
5660: 20 70 2d 3e 61 4f 70 3b 20 20 20 20 20 20 20 20   p->aOp;        
5670: 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e    /* Copy of p->
5680: 61 4f 70 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70  aOp */.  Op *pOp
5690: 20 3d 20 61 4f 70 3b 20 20 20 20 20 20 20 20 20   = aOp;         
56a0: 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f      /* Current o
56b0: 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 20  peration */.#if 
56c0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
56d0: 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
56e0: 28 56 44 42 45 5f 50 52 4f 46 49 4c 45 29 0a 20  (VDBE_PROFILE). 
56f0: 20 4f 70 20 2a 70 4f 72 69 67 4f 70 3b 20 20 20   Op *pOrigOp;   
5700: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
5710: 61 6c 75 65 20 6f 66 20 70 4f 70 20 61 74 20 74  alue of pOp at t
5720: 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20 6c 6f  he top of the lo
5730: 6f 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  op */.#endif.#if
5740: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
5750: 0a 20 20 69 6e 74 20 6e 45 78 74 72 61 44 65 6c  .  int nExtraDel
5760: 65 74 65 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a  ete = 0;      /*
5770: 20 56 65 72 69 66 69 65 73 20 46 4f 52 44 45 4c   Verifies FORDEL
5780: 45 54 45 20 61 6e 64 20 41 55 58 44 45 4c 45 54  ETE and AUXDELET
5790: 45 20 66 6c 61 67 73 20 2a 2f 0a 23 65 6e 64 69  E flags */.#endi
57a0: 66 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c  f.  int rc = SQL
57b0: 49 54 45 5f 4f 4b 3b 20 20 20 20 20 20 20 20 2f  ITE_OK;        /
57c0: 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72  * Value to retur
57d0: 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  n */.  sqlite3 *
57e0: 64 62 20 3d 20 70 2d 3e 64 62 3b 20 20 20 20 20  db = p->db;     
57f0: 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
5800: 65 20 2a 2f 0a 20 20 75 38 20 72 65 73 65 74 53  e */.  u8 resetS
5810: 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 30  chemaOnFault = 0
5820: 3b 20 2f 2a 20 52 65 73 65 74 20 73 63 68 65 6d  ; /* Reset schem
5830: 61 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72  a after an error
5840: 20 69 66 20 70 6f 73 69 74 69 76 65 20 2a 2f 0a   if positive */.
5850: 20 20 75 38 20 65 6e 63 6f 64 69 6e 67 20 3d 20    u8 encoding = 
5860: 45 4e 43 28 64 62 29 3b 20 20 20 20 20 2f 2a 20  ENC(db);     /* 
5870: 54 68 65 20 64 61 74 61 62 61 73 65 20 65 6e 63  The database enc
5880: 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69  oding */.  int i
5890: 43 6f 6d 70 61 72 65 20 3d 20 30 3b 20 20 20 20  Compare = 0;    
58a0: 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20        /* Result 
58b0: 6f 66 20 6c 61 73 74 20 63 6f 6d 70 61 72 69 73  of last comparis
58c0: 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  on */.  unsigned
58d0: 20 6e 56 6d 53 74 65 70 20 3d 20 30 3b 20 20 20   nVmStep = 0;   
58e0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
58f0: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20  virtual machine 
5900: 73 74 65 70 73 20 2a 2f 0a 23 69 66 6e 64 65 66  steps */.#ifndef
5910: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
5920: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
5930: 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72   unsigned nProgr
5940: 65 73 73 4c 69 6d 69 74 3b 20 20 20 2f 2a 20 49  essLimit;   /* I
5950: 6e 76 6f 6b 65 20 78 50 72 6f 67 72 65 73 73 28  nvoke xProgress(
5960: 29 20 77 68 65 6e 20 6e 56 6d 53 74 65 70 20 72  ) when nVmStep r
5970: 65 61 63 68 65 73 20 74 68 69 73 20 2a 2f 0a 23  eaches this */.#
5980: 65 6e 64 69 66 0a 20 20 4d 65 6d 20 2a 61 4d 65  endif.  Mem *aMe
5990: 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20 20 20 20  m = p->aMem;    
59a0: 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d     /* Copy of p-
59b0: 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a  >aMem */.  Mem *
59c0: 70 49 6e 31 20 3d 20 30 3b 20 20 20 20 20 20 20  pIn1 = 0;       
59d0: 20 20 20 20 20 20 2f 2a 20 31 73 74 20 69 6e 70        /* 1st inp
59e0: 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ut operand */.  
59f0: 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30 3b 20 20  Mem *pIn2 = 0;  
5a00: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 6e             /* 2n
5a10: 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20  d input operand 
5a20: 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 33 20 3d  */.  Mem *pIn3 =
5a30: 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   0;             
5a40: 2f 2a 20 33 72 64 20 69 6e 70 75 74 20 6f 70 65  /* 3rd input ope
5a50: 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  rand */.  Mem *p
5a60: 4f 75 74 20 3d 20 30 3b 20 20 20 20 20 20 20 20  Out = 0;        
5a70: 20 20 20 20 20 2f 2a 20 4f 75 74 70 75 74 20 6f       /* Output o
5a80: 70 65 72 61 6e 64 20 2a 2f 0a 23 69 66 64 65 66  perand */.#ifdef
5a90: 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20   VDBE_PROFILE.  
5aa0: 75 36 34 20 73 74 61 72 74 3b 20 20 20 20 20 20  u64 start;      
5ab0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 50             /* CP
5ac0: 55 20 63 6c 6f 63 6b 20 63 6f 75 6e 74 20 61 74  U clock count at
5ad0: 20 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65   start of opcode
5ae0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 2f 2a 2a   */.#endif.  /**
5af0: 2a 20 49 4e 53 45 52 54 20 53 54 41 43 4b 20 55  * INSERT STACK U
5b00: 4e 49 4f 4e 20 48 45 52 45 20 2a 2a 2a 2f 0a 0a  NION HERE ***/..
5b10: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6d 61 67    assert( p->mag
5b20: 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52  ic==VDBE_MAGIC_R
5b30: 55 4e 20 29 3b 20 20 2f 2a 20 73 71 6c 69 74 65  UN );  /* sqlite
5b40: 33 5f 73 74 65 70 28 29 20 76 65 72 69 66 69 65  3_step() verifie
5b50: 73 20 74 68 69 73 20 2a 2f 0a 20 20 73 71 6c 69  s this */.  sqli
5b60: 74 65 33 56 64 62 65 45 6e 74 65 72 28 70 29 3b  te3VdbeEnter(p);
5b70: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
5b80: 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41  OMIT_PROGRESS_CA
5b90: 4c 4c 42 41 43 4b 0a 20 20 69 66 28 20 64 62 2d  LLBACK.  if( db-
5ba0: 3e 78 50 72 6f 67 72 65 73 73 20 29 7b 0a 20 20  >xProgress ){.  
5bb0: 20 20 75 33 32 20 69 50 72 69 6f 72 20 3d 20 70    u32 iPrior = p
5bc0: 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54  ->aCounter[SQLIT
5bd0: 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 56 4d 5f  E_STMTSTATUS_VM_
5be0: 53 54 45 50 5d 3b 0a 20 20 20 20 61 73 73 65 72  STEP];.    asser
5bf0: 74 28 20 30 20 3c 20 64 62 2d 3e 6e 50 72 6f 67  t( 0 < db->nProg
5c00: 72 65 73 73 4f 70 73 20 29 3b 0a 20 20 20 20 6e  ressOps );.    n
5c10: 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20  ProgressLimit = 
5c20: 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73  db->nProgressOps
5c30: 20 2d 20 28 69 50 72 69 6f 72 20 25 20 64 62 2d   - (iPrior % db-
5c40: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a  >nProgressOps);.
5c50: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 50 72    }else{.    nPr
5c60: 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 30 78  ogressLimit = 0x
5c70: 66 66 66 66 66 66 66 66 3b 0a 20 20 7d 0a 23 65  ffffffff;.  }.#e
5c80: 6e 64 69 66 0a 20 20 69 66 28 20 70 2d 3e 72 63  ndif.  if( p->rc
5c90: 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29  ==SQLITE_NOMEM )
5ca0: 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61  {.    /* This ha
5cb0: 70 70 65 6e 73 20 69 66 20 61 20 6d 61 6c 6c 6f  ppens if a mallo
5cc0: 63 28 29 20 69 6e 73 69 64 65 20 61 20 63 61 6c  c() inside a cal
5cd0: 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 6f 6c  l to sqlite3_col
5ce0: 75 6d 6e 5f 74 65 78 74 28 29 20 6f 72 0a 20 20  umn_text() or.  
5cf0: 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c    ** sqlite3_col
5d00: 75 6d 6e 5f 74 65 78 74 31 36 28 29 20 66 61 69  umn_text16() fai
5d10: 6c 65 64 2e 20 20 2a 2f 0a 20 20 20 20 67 6f 74  led.  */.    got
5d20: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
5d30: 61 73 73 65 72 74 28 20 70 2d 3e 72 63 3d 3d 53  assert( p->rc==S
5d40: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e  QLITE_OK || (p->
5d50: 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45  rc&0xff)==SQLITE
5d60: 5f 42 55 53 59 20 29 3b 0a 20 20 61 73 73 65 72  _BUSY );.  asser
5d70: 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
5d80: 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 21 3d  || p->readOnly!=
5d90: 30 20 29 3b 0a 20 20 70 2d 3e 69 43 75 72 72 65  0 );.  p->iCurre
5da0: 6e 74 54 69 6d 65 20 3d 20 30 3b 0a 20 20 61 73  ntTime = 0;.  as
5db0: 73 65 72 74 28 20 70 2d 3e 65 78 70 6c 61 69 6e  sert( p->explain
5dc0: 3d 3d 30 20 29 3b 0a 20 20 70 2d 3e 70 52 65 73  ==0 );.  p->pRes
5dd0: 75 6c 74 53 65 74 20 3d 20 30 3b 0a 20 20 64 62  ultSet = 0;.  db
5de0: 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e 6e 42  ->busyHandler.nB
5df0: 75 73 79 20 3d 20 30 3b 0a 20 20 69 66 28 20 64  usy = 0;.  if( d
5e00: 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70  b->u1.isInterrup
5e10: 74 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  ted ) goto abort
5e20: 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70  _due_to_interrup
5e30: 74 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  t;.  sqlite3Vdbe
5e40: 49 4f 54 72 61 63 65 53 71 6c 28 70 29 3b 0a 23  IOTraceSql(p);.#
5e50: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
5e60: 55 47 0a 20 20 73 71 6c 69 74 65 33 42 65 67 69  UG.  sqlite3Begi
5e70: 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b  nBenignMalloc();
5e80: 0a 20 20 69 66 28 20 70 2d 3e 70 63 3d 3d 30 0a  .  if( p->pc==0.
5e90: 20 20 20 26 26 20 28 70 2d 3e 64 62 2d 3e 66 6c     && (p->db->fl
5ea0: 61 67 73 20 26 20 28 53 51 4c 49 54 45 5f 56 64  ags & (SQLITE_Vd
5eb0: 62 65 4c 69 73 74 69 6e 67 7c 53 51 4c 49 54 45  beListing|SQLITE
5ec0: 5f 56 64 62 65 45 51 50 7c 53 51 4c 49 54 45 5f  _VdbeEQP|SQLITE_
5ed0: 56 64 62 65 54 72 61 63 65 29 29 21 3d 30 0a 20  VdbeTrace))!=0. 
5ee0: 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20   ){.    int i;. 
5ef0: 20 20 20 69 6e 74 20 6f 6e 63 65 20 3d 20 31 3b     int once = 1;
5f00: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
5f10: 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20  PrintSql(p);.   
5f20: 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67   if( p->db->flag
5f30: 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 4c  s & SQLITE_VdbeL
5f40: 69 73 74 69 6e 67 20 29 7b 0a 20 20 20 20 20 20  isting ){.      
5f50: 70 72 69 6e 74 66 28 22 56 44 42 45 20 50 72 6f  printf("VDBE Pro
5f60: 67 72 61 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e 22  gram Listing:\n"
5f70: 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30  );.      for(i=0
5f80: 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29  ; i<p->nOp; i++)
5f90: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
5fa0: 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64  3VdbePrintOp(std
5fb0: 6f 75 74 2c 20 69 2c 20 26 61 4f 70 5b 69 5d 29  out, i, &aOp[i])
5fc0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
5fd0: 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66      if( p->db->f
5fe0: 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64  lags & SQLITE_Vd
5ff0: 62 65 45 51 50 20 29 7b 0a 20 20 20 20 20 20 66  beEQP ){.      f
6000: 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70  or(i=0; i<p->nOp
6010: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
6020: 69 66 28 20 61 4f 70 5b 69 5d 2e 6f 70 63 6f 64  if( aOp[i].opcod
6030: 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29 7b  e==OP_Explain ){
6040: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6f  .          if( o
6050: 6e 63 65 20 29 20 70 72 69 6e 74 66 28 22 56 44  nce ) printf("VD
6060: 42 45 20 51 75 65 72 79 20 50 6c 61 6e 3a 5c 6e  BE Query Plan:\n
6070: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70 72  ");.          pr
6080: 69 6e 74 66 28 22 25 73 5c 6e 22 2c 20 61 4f 70  intf("%s\n", aOp
6090: 5b 69 5d 2e 70 34 2e 7a 29 3b 0a 20 20 20 20 20  [i].p4.z);.     
60a0: 20 20 20 20 20 6f 6e 63 65 20 3d 20 30 3b 0a 20       once = 0;. 
60b0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
60c0: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70  .    }.    if( p
60d0: 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51  ->db->flags & SQ
60e0: 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 29  LITE_VdbeTrace )
60f0: 20 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 54    printf("VDBE T
6100: 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 7d 0a 20  race:\n");.  }. 
6110: 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67   sqlite3EndBenig
6120: 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64 69  nMalloc();.#endi
6130: 66 0a 20 20 66 6f 72 28 70 4f 70 3d 26 61 4f 70  f.  for(pOp=&aOp
6140: 5b 70 2d 3e 70 63 5d 3b 20 31 3b 20 70 4f 70 2b  [p->pc]; 1; pOp+
6150: 2b 29 7b 0a 20 20 20 20 2f 2a 20 45 72 72 6f 72  +){.    /* Error
6160: 73 20 61 72 65 20 64 65 74 65 63 74 65 64 20 62  s are detected b
6170: 79 20 69 6e 64 69 76 69 64 75 61 6c 20 6f 70 63  y individual opc
6180: 6f 64 65 73 2c 20 77 69 74 68 20 61 6e 20 69 6d  odes, with an im
6190: 6d 65 64 69 61 74 65 0a 20 20 20 20 2a 2a 20 6a  mediate.    ** j
61a0: 75 6d 70 73 20 74 6f 20 61 62 6f 72 74 5f 64 75  umps to abort_du
61b0: 65 5f 74 6f 5f 65 72 72 6f 72 2e 20 2a 2f 0a 20  e_to_error. */. 
61c0: 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
61d0: 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 0a 20 20 20  QLITE_OK );..   
61e0: 20 61 73 73 65 72 74 28 20 70 4f 70 3e 3d 61 4f   assert( pOp>=aO
61f0: 70 20 26 26 20 70 4f 70 3c 26 61 4f 70 5b 70 2d  p && pOp<&aOp[p-
6200: 3e 6e 4f 70 5d 29 3b 0a 23 69 66 64 65 66 20 56  >nOp]);.#ifdef V
6210: 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20  DBE_PROFILE.    
6220: 73 74 61 72 74 20 3d 20 73 71 6c 69 74 65 33 4e  start = sqlite3N
6230: 50 72 6f 66 69 6c 65 43 6e 74 20 3f 20 73 71 6c  ProfileCnt ? sql
6240: 69 74 65 33 4e 50 72 6f 66 69 6c 65 43 6e 74 20  ite3NProfileCnt 
6250: 3a 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28  : sqlite3Hwtime(
6260: 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 6e 56  );.#endif.    nV
6270: 6d 53 74 65 70 2b 2b 3b 0a 23 69 66 64 65 66 20  mStep++;.#ifdef 
6280: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
6290: 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20  MT_SCANSTATUS.  
62a0: 20 20 69 66 28 20 70 2d 3e 61 6e 45 78 65 63 20    if( p->anExec 
62b0: 29 20 70 2d 3e 61 6e 45 78 65 63 5b 28 69 6e 74  ) p->anExec[(int
62c0: 29 28 70 4f 70 2d 61 4f 70 29 5d 2b 2b 3b 0a 23  )(pOp-aOp)]++;.#
62d0: 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 4f 6e  endif..    /* On
62e0: 6c 79 20 61 6c 6c 6f 77 20 74 72 61 63 69 6e 67  ly allow tracing
62f0: 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47   if SQLITE_DEBUG
6300: 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20 20   is defined..   
6310: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
6320: 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20  E_DEBUG.    if( 
6330: 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
6340: 54 45 5f 56 64 62 65 54 72 61 63 65 20 29 7b 0a  TE_VdbeTrace ){.
6350: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
6360: 65 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c  ePrintOp(stdout,
6370: 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
6380: 29 2c 20 70 4f 70 29 3b 0a 20 20 20 20 7d 0a 23  ), pOp);.    }.#
6390: 65 6e 64 69 66 0a 20 20 20 20 20 20 0a 0a 20 20  endif.      ..  
63a0: 20 20 2f 2a 20 43 68 65 63 6b 20 74 6f 20 73 65    /* Check to se
63b0: 65 20 69 66 20 77 65 20 6e 65 65 64 20 74 6f 20  e if we need to 
63c0: 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e 74 65  simulate an inte
63d0: 72 72 75 70 74 2e 20 20 54 68 69 73 20 6f 6e 6c  rrupt.  This onl
63e0: 79 20 68 61 70 70 65 6e 73 0a 20 20 20 20 2a 2a  y happens.    **
63f0: 20 69 66 20 77 65 20 68 61 76 65 20 61 20 73 70   if we have a sp
6400: 65 63 69 61 6c 20 74 65 73 74 20 62 75 69 6c 64  ecial test build
6410: 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20  ..    */.#ifdef 
6420: 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20  SQLITE_TEST.    
6430: 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65  if( sqlite3_inte
6440: 72 72 75 70 74 5f 63 6f 75 6e 74 3e 30 20 29 7b  rrupt_count>0 ){
6450: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69  .      sqlite3_i
6460: 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 2d 2d  nterrupt_count--
6470: 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  ;.      if( sqli
6480: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f  te3_interrupt_co
6490: 75 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  unt==0 ){.      
64a0: 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72    sqlite3_interr
64b0: 75 70 74 28 64 62 29 3b 0a 20 20 20 20 20 20 7d  upt(db);.      }
64c0: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  .    }.#endif.. 
64d0: 20 20 20 2f 2a 20 53 61 6e 69 74 79 20 63 68 65     /* Sanity che
64e0: 63 6b 69 6e 67 20 6f 6e 20 6f 74 68 65 72 20 6f  cking on other o
64f0: 70 65 72 61 6e 64 73 20 2a 2f 0a 23 69 66 64 65  perands */.#ifde
6500: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
6510: 20 20 20 7b 0a 20 20 20 20 20 20 75 38 20 6f 70     {.      u8 op
6520: 50 72 6f 70 65 72 74 79 20 3d 20 73 71 6c 69 74  Property = sqlit
6530: 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74 79  e3OpcodeProperty
6540: 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 5d 3b 0a 20  [pOp->opcode];. 
6550: 20 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70       if( (opProp
6560: 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 31  erty & OPFLG_IN1
6570: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
6580: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
6590: 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  0 );.        ass
65a0: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 28 70  ert( pOp->p1<=(p
65b0: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
65c0: 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20  ursor) );.      
65d0: 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
65e0: 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  alid(&aMem[pOp->
65f0: 70 31 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20  p1]) );.        
6600: 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56  assert( sqlite3V
6610: 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72  dbeCheckMemInvar
6620: 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d  iants(&aMem[pOp-
6630: 3e 70 31 5d 29 20 29 3b 0a 20 20 20 20 20 20 20  >p1]) );.       
6640: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
6650: 70 4f 70 2d 3e 70 31 2c 20 26 61 4d 65 6d 5b 70  pOp->p1, &aMem[p
6660: 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 20 20 20 20  Op->p1]);.      
6670: 7d 0a 20 20 20 20 20 20 69 66 28 20 28 6f 70 50  }.      if( (opP
6680: 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f  roperty & OPFLG_
6690: 49 4e 32 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  IN2)!=0 ){.     
66a0: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
66b0: 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20  p2>0 );.        
66c0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c  assert( pOp->p2<
66d0: 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
66e0: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
66f0: 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
6700: 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f  IsValid(&aMem[pO
6710: 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20  p->p2]) );.     
6720: 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
6730: 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e  e3VdbeCheckMemIn
6740: 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70  variants(&aMem[p
6750: 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20  Op->p2]) );.    
6760: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
6770: 43 45 28 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65  CE(pOp->p2, &aMe
6780: 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20  m[pOp->p2]);.   
6790: 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28     }.      if( (
67a0: 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46  opProperty & OPF
67b0: 4c 47 5f 49 4e 33 29 21 3d 30 20 29 7b 0a 20 20  LG_IN3)!=0 ){.  
67c0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
67d0: 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20  p->p3>0 );.     
67e0: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
67f0: 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p3<=(p->nMem+1 -
6800: 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
6810: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
6820: 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
6830: 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20  [pOp->p3]) );.  
6840: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
6850: 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65  lite3VdbeCheckMe
6860: 6d 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65  mInvariants(&aMe
6870: 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20  m[pOp->p3]) );. 
6880: 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f         REGISTER_
6890: 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 26  TRACE(pOp->p3, &
68a0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a  aMem[pOp->p3]);.
68b0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
68c0: 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20  ( (opProperty & 
68d0: 4f 50 46 4c 47 5f 4f 55 54 32 29 21 3d 30 20 29  OPFLG_OUT2)!=0 )
68e0: 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
68f0: 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
6900: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
6910: 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p2<=(p->nMem
6920: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
6930: 20 29 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 41   );.        memA
6940: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
6950: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b  &aMem[pOp->p2]);
6960: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
6970: 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26  f( (opProperty &
6980: 20 4f 50 46 4c 47 5f 4f 55 54 33 29 21 3d 30 20   OPFLG_OUT3)!=0 
6990: 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
69a0: 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
69b0: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
69c0: 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
69d0: 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
69e0: 29 20 29 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d  ) );.        mem
69f0: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
6a00: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29   &aMem[pOp->p3])
6a10: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
6a20: 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
6a30: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
6a40: 20 7c 7c 20 64 65 66 69 6e 65 64 28 56 44 42 45   || defined(VDBE
6a50: 5f 50 52 4f 46 49 4c 45 29 0a 20 20 20 20 70 4f  _PROFILE).    pO
6a60: 72 69 67 4f 70 20 3d 20 70 4f 70 3b 0a 23 65 6e  rigOp = pOp;.#en
6a70: 64 69 66 0a 20 20 0a 20 20 20 20 73 77 69 74 63  dif.  .    switc
6a80: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
6a90: 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  {../************
6aa0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6ab0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6ac0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6ad0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6ae0: 2a 0a 2a 2a 20 57 68 61 74 20 66 6f 6c 6c 6f 77  *.** What follow
6af0: 73 20 69 73 20 61 20 6d 61 73 73 69 76 65 20 73  s is a massive s
6b00: 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20  witch statement 
6b10: 77 68 65 72 65 20 65 61 63 68 20 63 61 73 65 20  where each case 
6b20: 69 6d 70 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a 20  implements a.** 
6b30: 73 65 70 61 72 61 74 65 20 69 6e 73 74 72 75 63  separate instruc
6b40: 74 69 6f 6e 20 69 6e 20 74 68 65 20 76 69 72 74  tion in the virt
6b50: 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 66  ual machine.  If
6b60: 20 77 65 20 66 6f 6c 6c 6f 77 20 74 68 65 20 75   we follow the u
6b70: 73 75 61 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61 74  sual.** indentat
6b80: 69 6f 6e 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c  ion conventions,
6b90: 20 65 61 63 68 20 63 61 73 65 20 73 68 6f 75 6c   each case shoul
6ba0: 64 20 62 65 20 69 6e 64 65 6e 74 65 64 20 62 79  d be indented by
6bb0: 20 36 20 73 70 61 63 65 73 2e 20 20 42 75 74 0a   6 spaces.  But.
6bc0: 2a 2a 20 74 68 61 74 20 69 73 20 61 20 6c 6f 74  ** that is a lot
6bd0: 20 6f 66 20 77 61 73 74 65 64 20 73 70 61 63 65   of wasted space
6be0: 20 6f 6e 20 74 68 65 20 6c 65 66 74 20 6d 61 72   on the left mar
6bf0: 67 69 6e 2e 20 20 53 6f 20 74 68 65 20 63 6f 64  gin.  So the cod
6c00: 65 20 77 69 74 68 69 6e 0a 2a 2a 20 74 68 65 20  e within.** the 
6c10: 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74  switch statement
6c20: 20 77 69 6c 6c 20 62 72 65 61 6b 20 77 69 74 68   will break with
6c30: 20 63 6f 6e 76 65 6e 74 69 6f 6e 20 61 6e 64 20   convention and 
6c40: 62 65 20 66 6c 75 73 68 2d 6c 65 66 74 2e 20 41  be flush-left. A
6c50: 6e 6f 74 68 65 72 0a 2a 2a 20 62 69 67 20 63 6f  nother.** big co
6c60: 6d 6d 65 6e 74 20 28 73 69 6d 69 6c 61 72 20 74  mment (similar t
6c70: 6f 20 74 68 69 73 20 6f 6e 65 29 20 77 69 6c 6c  o this one) will
6c80: 20 6d 61 72 6b 20 74 68 65 20 70 6f 69 6e 74 20   mark the point 
6c90: 69 6e 20 74 68 65 20 63 6f 64 65 20 77 68 65 72  in the code wher
6ca0: 65 0a 2a 2a 20 77 65 20 74 72 61 6e 73 69 74 69  e.** we transiti
6cb0: 6f 6e 20 62 61 63 6b 20 74 6f 20 6e 6f 72 6d 61  on back to norma
6cc0: 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a  l indentation..*
6cd0: 2a 0a 2a 2a 20 54 68 65 20 66 6f 72 6d 61 74 74  *.** The formatt
6ce0: 69 6e 67 20 6f 66 20 65 61 63 68 20 63 61 73 65  ing of each case
6cf0: 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 20 20   is important.  
6d00: 54 68 65 20 6d 61 6b 65 66 69 6c 65 20 66 6f 72  The makefile for
6d10: 20 53 51 4c 69 74 65 0a 2a 2a 20 67 65 6e 65 72   SQLite.** gener
6d20: 61 74 65 73 20 74 77 6f 20 43 20 66 69 6c 65 73  ates two C files
6d30: 20 22 6f 70 63 6f 64 65 73 2e 68 22 20 61 6e 64   "opcodes.h" and
6d40: 20 22 6f 70 63 6f 64 65 73 2e 63 22 20 62 79 20   "opcodes.c" by 
6d50: 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 0a 2a 2a  scanning this.**
6d60: 20 66 69 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f   file looking fo
6d70: 72 20 6c 69 6e 65 73 20 74 68 61 74 20 62 65 67  r lines that beg
6d80: 69 6e 20 77 69 74 68 20 22 63 61 73 65 20 4f 50  in with "case OP
6d90: 5f 22 2e 20 20 54 68 65 20 6f 70 63 6f 64 65 73  _".  The opcodes
6da0: 2e 68 20 66 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c  .h files.** will
6db0: 20 62 65 20 66 69 6c 6c 65 64 20 77 69 74 68 20   be filled with 
6dc0: 23 64 65 66 69 6e 65 73 20 74 68 61 74 20 67 69  #defines that gi
6dd0: 76 65 20 75 6e 69 71 75 65 20 69 6e 74 65 67 65  ve unique intege
6de0: 72 20 76 61 6c 75 65 73 20 74 6f 20 65 61 63 68  r values to each
6df0: 0a 2a 2a 20 6f 70 63 6f 64 65 20 61 6e 64 20 74  .** opcode and t
6e00: 68 65 20 6f 70 63 6f 64 65 73 2e 63 20 66 69 6c  he opcodes.c fil
6e10: 65 20 69 73 20 66 69 6c 6c 65 64 20 77 69 74 68  e is filled with
6e20: 20 61 6e 20 61 72 72 61 79 20 6f 66 20 73 74 72   an array of str
6e30: 69 6e 67 73 20 77 68 65 72 65 0a 2a 2a 20 65 61  ings where.** ea
6e40: 63 68 20 73 74 72 69 6e 67 20 69 73 20 74 68 65  ch string is the
6e50: 20 73 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 66   symbolic name f
6e60: 6f 72 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  or the correspon
6e70: 64 69 6e 67 20 6f 70 63 6f 64 65 2e 20 20 49 66  ding opcode.  If
6e80: 20 74 68 65 0a 2a 2a 20 63 61 73 65 20 73 74 61   the.** case sta
6e90: 74 65 6d 65 6e 74 20 69 73 20 66 6f 6c 6c 6f 77  tement is follow
6ea0: 65 64 20 62 79 20 61 20 63 6f 6d 6d 65 6e 74 20  ed by a comment 
6eb0: 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 2f 23 20  of the form "/# 
6ec0: 73 61 6d 65 20 61 73 20 2e 2e 2e 20 23 2f 22 0a  same as ... #/".
6ed0: 2a 2a 20 74 68 61 74 20 63 6f 6d 6d 65 6e 74 20  ** that comment 
6ee0: 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72  is used to deter
6ef0: 6d 69 6e 65 20 74 68 65 20 70 61 72 74 69 63 75  mine the particu
6f00: 6c 61 72 20 76 61 6c 75 65 20 6f 66 20 74 68 65  lar value of the
6f10: 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f   opcode..**.** O
6f20: 74 68 65 72 20 6b 65 79 77 6f 72 64 73 20 69 6e  ther keywords in
6f30: 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74 68 61   the comment tha
6f40: 74 20 66 6f 6c 6c 6f 77 73 20 65 61 63 68 20 63  t follows each c
6f50: 61 73 65 20 61 72 65 20 75 73 65 64 20 74 6f 0a  ase are used to.
6f60: 2a 2a 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65  ** construct the
6f70: 20 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49 5a   OPFLG_INITIALIZ
6f80: 45 52 20 76 61 6c 75 65 20 74 68 61 74 20 69 6e  ER value that in
6f90: 69 74 69 61 6c 69 7a 65 73 20 6f 70 63 6f 64 65  itializes opcode
6fa0: 50 72 6f 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b  Property[]..** K
6fb0: 65 79 77 6f 72 64 73 20 69 6e 63 6c 75 64 65 3a  eywords include:
6fc0: 20 69 6e 31 2c 20 69 6e 32 2c 20 69 6e 33 2c 20   in1, in2, in3, 
6fd0: 6f 75 74 32 2c 20 6f 75 74 33 2e 20 20 53 65 65  out2, out3.  See
6fe0: 0a 2a 2a 20 74 68 65 20 6d 6b 6f 70 63 6f 64 65  .** the mkopcode
6ff0: 68 2e 61 77 6b 20 73 63 72 69 70 74 20 66 6f 72  h.awk script for
7000: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
7010: 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44  rmation..**.** D
7020: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 62 6f  ocumentation abo
7030: 75 74 20 56 44 42 45 20 6f 70 63 6f 64 65 73 20  ut VDBE opcodes 
7040: 69 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20  is generated by 
7050: 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 20 66 69  scanning this fi
7060: 6c 65 0a 2a 2a 20 66 6f 72 20 6c 69 6e 65 73 20  le.** for lines 
7070: 6f 66 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 20  of that contain 
7080: 22 4f 70 63 6f 64 65 3a 22 2e 20 20 54 68 61 74  "Opcode:".  That
7090: 20 6c 69 6e 65 20 61 6e 64 20 61 6c 6c 20 73 75   line and all su
70a0: 62 73 65 71 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d  bsequent.** comm
70b0: 65 6e 74 20 6c 69 6e 65 73 20 61 72 65 20 75 73  ent lines are us
70c0: 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61  ed in the genera
70d0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70 63 6f  tion of the opco
70e0: 64 65 2e 68 74 6d 6c 20 64 6f 63 75 6d 65 6e 74  de.html document
70f0: 61 74 69 6f 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a  ation.** file..*
7100: 2a 0a 2a 2a 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a  *.** SUMMARY:.**
7110: 0a 2a 2a 20 20 20 20 20 46 6f 72 6d 61 74 74 69  .**     Formatti
7120: 6e 67 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20  ng is important 
7130: 74 6f 20 73 63 72 69 70 74 73 20 74 68 61 74 20  to scripts that 
7140: 73 63 61 6e 20 74 68 69 73 20 66 69 6c 65 2e 0a  scan this file..
7150: 2a 2a 20 20 20 20 20 44 6f 20 6e 6f 74 20 64 65  **     Do not de
7160: 76 69 61 74 65 20 66 72 6f 6d 20 74 68 65 20 66  viate from the f
7170: 6f 72 6d 61 74 74 69 6e 67 20 73 74 79 6c 65 20  ormatting style 
7180: 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65  currently in use
7190: 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..**.***********
71a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
71b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
71c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
71d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
71e0: 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  **/../* Opcode: 
71f0: 20 47 6f 74 6f 20 2a 20 50 32 20 2a 20 2a 20 2a   Goto * P2 * * *
7200: 0a 2a 2a 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64  .**.** An uncond
7210: 69 74 69 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f 20  itional jump to 
7220: 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 20 54  address P2..** T
7230: 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
7240: 69 6f 6e 20 65 78 65 63 75 74 65 64 20 77 69 6c  ion executed wil
7250: 6c 20 62 65 20 0a 2a 2a 20 74 68 65 20 6f 6e 65  l be .** the one
7260: 20 61 74 20 69 6e 64 65 78 20 50 32 20 66 72 6f   at index P2 fro
7270: 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  m the beginning 
7280: 6f 66 0a 2a 2a 20 74 68 65 20 70 72 6f 67 72 61  of.** the progra
7290: 6d 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20  m..**.** The P1 
72a0: 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74  parameter is not
72b0: 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64 20 62   actually used b
72c0: 79 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20  y this opcode.  
72d0: 48 6f 77 65 76 65 72 2c 20 69 74 0a 2a 2a 20 69  However, it.** i
72e0: 73 20 73 6f 6d 65 74 69 6d 65 73 20 73 65 74 20  s sometimes set 
72f0: 74 6f 20 31 20 69 6e 73 74 65 61 64 20 6f 66 20  to 1 instead of 
7300: 30 20 61 73 20 61 20 68 69 6e 74 20 74 6f 20 74  0 as a hint to t
7310: 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20  he command-line 
7320: 73 68 65 6c 6c 0a 2a 2a 20 74 68 61 74 20 74 68  shell.** that th
7330: 69 73 20 47 6f 74 6f 20 69 73 20 74 68 65 20 62  is Goto is the b
7340: 6f 74 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70 20  ottom of a loop 
7350: 61 6e 64 20 74 68 61 74 20 74 68 65 20 6c 69 6e  and that the lin
7360: 65 73 20 66 72 6f 6d 20 50 32 20 64 6f 77 6e 0a  es from P2 down.
7370: 2a 2a 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e  ** to the curren
7380: 74 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 62 65  t line should be
7390: 20 69 6e 64 65 6e 74 65 64 20 66 6f 72 20 45 58   indented for EX
73a0: 50 4c 41 49 4e 20 6f 75 74 70 75 74 2e 0a 2a 2f  PLAIN output..*/
73b0: 0a 63 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b  .case OP_Goto: {
73c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
73d0: 6a 75 6d 70 20 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f  jump */.jump_to_
73e0: 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72  p2_and_check_for
73f0: 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 70 4f  _interrupt:.  pO
7400: 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32  p = &aOp[pOp->p2
7410: 20 2d 20 31 5d 3b 0a 0a 20 20 2f 2a 20 4f 70 63   - 1];..  /* Opc
7420: 6f 64 65 73 20 74 68 61 74 20 61 72 65 20 75 73  odes that are us
7430: 65 64 20 61 73 20 74 68 65 20 62 6f 74 74 6f 6d  ed as the bottom
7440: 20 6f 66 20 61 20 6c 6f 6f 70 20 28 4f 50 5f 4e   of a loop (OP_N
7450: 65 78 74 2c 20 4f 50 5f 50 72 65 76 2c 0a 20 20  ext, OP_Prev,.  
7460: 2a 2a 20 4f 50 5f 56 4e 65 78 74 2c 20 6f 72 20  ** OP_VNext, or 
7470: 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74 29 20 61  OP_SorterNext) a
7480: 6c 6c 20 6a 75 6d 70 20 68 65 72 65 20 75 70 6f  ll jump here upo
7490: 6e 0a 20 20 2a 2a 20 63 6f 6d 70 6c 65 74 69 6f  n.  ** completio
74a0: 6e 2e 20 20 43 68 65 63 6b 20 74 6f 20 73 65 65  n.  Check to see
74b0: 20 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65   if sqlite3_inte
74c0: 72 72 75 70 74 28 29 20 68 61 73 20 62 65 65 6e  rrupt() has been
74d0: 20 63 61 6c 6c 65 64 0a 20 20 2a 2a 20 6f 72 20   called.  ** or 
74e0: 69 66 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  if the progress 
74f0: 63 61 6c 6c 62 61 63 6b 20 6e 65 65 64 73 20 74  callback needs t
7500: 6f 20 62 65 20 69 6e 76 6f 6b 65 64 2e 20 0a 20  o be invoked. . 
7510: 20 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20 63 6f   **.  ** This co
7520: 64 65 20 75 73 65 73 20 75 6e 73 74 72 75 63 74  de uses unstruct
7530: 75 72 65 64 20 22 67 6f 74 6f 22 20 73 74 61 74  ured "goto" stat
7540: 65 6d 65 6e 74 73 20 61 6e 64 20 64 6f 65 73 20  ements and does 
7550: 6e 6f 74 20 6c 6f 6f 6b 20 63 6c 65 61 6e 2e 0a  not look clean..
7560: 20 20 2a 2a 20 42 75 74 20 74 68 61 74 20 69 73    ** But that is
7570: 20 6e 6f 74 20 64 75 65 20 74 6f 20 73 6c 6f 70   not due to slop
7580: 70 79 20 63 6f 64 69 6e 67 20 68 61 62 69 74 73  py coding habits
7590: 2e 20 54 68 65 20 63 6f 64 65 20 69 73 20 77 72  . The code is wr
75a0: 69 74 74 65 6e 20 74 68 69 73 0a 20 20 2a 2a 20  itten this.  ** 
75b0: 77 61 79 20 66 6f 72 20 70 65 72 66 6f 72 6d 61  way for performa
75c0: 6e 63 65 2c 20 74 6f 20 61 76 6f 69 64 20 68 61  nce, to avoid ha
75d0: 76 69 6e 67 20 74 6f 20 72 75 6e 20 74 68 65 20  ving to run the 
75e0: 69 6e 74 65 72 72 75 70 74 20 61 6e 64 20 70 72  interrupt and pr
75f0: 6f 67 72 65 73 73 0a 20 20 2a 2a 20 63 68 65 63  ogress.  ** chec
7600: 6b 73 20 6f 6e 20 65 76 65 72 79 20 6f 70 63 6f  ks on every opco
7610: 64 65 2e 20 20 54 68 69 73 20 68 65 6c 70 73 20  de.  This helps 
7620: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 74  sqlite3_step() t
7630: 6f 20 72 75 6e 20 61 62 6f 75 74 20 31 2e 35 25  o run about 1.5%
7640: 0a 20 20 2a 2a 20 66 61 73 74 65 72 20 61 63 63  .  ** faster acc
7650: 6f 72 64 69 6e 67 20 74 6f 20 22 76 61 6c 67 72  ording to "valgr
7660: 69 6e 64 20 2d 2d 74 6f 6f 6c 3d 63 61 63 68 65  ind --tool=cache
7670: 67 72 69 6e 64 22 20 2a 2f 0a 63 68 65 63 6b 5f  grind" */.check_
7680: 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20  for_interrupt:. 
7690: 20 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e   if( db->u1.isIn
76a0: 74 65 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f  terrupted ) goto
76b0: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e   abort_due_to_in
76c0: 74 65 72 72 75 70 74 3b 0a 23 69 66 6e 64 65 66  terrupt;.#ifndef
76d0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
76e0: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
76f0: 20 2f 2a 20 43 61 6c 6c 20 74 68 65 20 70 72 6f   /* Call the pro
7700: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 69  gress callback i
7710: 66 20 69 74 20 69 73 20 63 6f 6e 66 69 67 75 72  f it is configur
7720: 65 64 20 61 6e 64 20 74 68 65 20 72 65 71 75 69  ed and the requi
7730: 72 65 64 20 6e 75 6d 62 65 72 0a 20 20 2a 2a 20  red number.  ** 
7740: 6f 66 20 56 44 42 45 20 6f 70 73 20 68 61 76 65  of VDBE ops have
7750: 20 62 65 65 6e 20 65 78 65 63 75 74 65 64 20 28   been executed (
7760: 65 69 74 68 65 72 20 73 69 6e 63 65 20 74 68 69  either since thi
7770: 73 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a  s invocation of.
7780: 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65    ** sqlite3Vdbe
7790: 45 78 65 63 28 29 20 6f 72 20 73 69 6e 63 65 20  Exec() or since 
77a0: 6c 61 73 74 20 74 69 6d 65 20 74 68 65 20 70 72  last time the pr
77b0: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
77c0: 77 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20 20 2a  was called)..  *
77d0: 2a 20 49 66 20 74 68 65 20 70 72 6f 67 72 65 73  * If the progres
77e0: 73 20 63 61 6c 6c 62 61 63 6b 20 72 65 74 75 72  s callback retur
77f0: 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78 69  ns non-zero, exi
7800: 74 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61  t the virtual ma
7810: 63 68 69 6e 65 20 77 69 74 68 0a 20 20 2a 2a 20  chine with.  ** 
7820: 61 20 72 65 74 75 72 6e 20 63 6f 64 65 20 53 51  a return code SQ
7830: 4c 49 54 45 5f 41 42 4f 52 54 2e 0a 20 20 2a 2f  LITE_ABORT..  */
7840: 0a 20 20 77 68 69 6c 65 28 20 6e 56 6d 53 74 65  .  while( nVmSte
7850: 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69  p>=nProgressLimi
7860: 74 20 26 26 20 64 62 2d 3e 78 50 72 6f 67 72 65  t && db->xProgre
7870: 73 73 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73  ss!=0 ){.    ass
7880: 65 72 74 28 20 64 62 2d 3e 6e 50 72 6f 67 72 65  ert( db->nProgre
7890: 73 73 4f 70 73 21 3d 30 20 29 3b 0a 20 20 20 20  ssOps!=0 );.    
78a0: 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 2b  nProgressLimit +
78b0: 3d 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f  = db->nProgressO
78c0: 70 73 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e  ps;.    if( db->
78d0: 78 50 72 6f 67 72 65 73 73 28 64 62 2d 3e 70 50  xProgress(db->pP
78e0: 72 6f 67 72 65 73 73 41 72 67 29 20 29 7b 0a 20  rogressArg) ){. 
78f0: 20 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69       nProgressLi
7900: 6d 69 74 20 3d 20 30 78 66 66 66 66 66 66 66 66  mit = 0xffffffff
7910: 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  ;.      rc = SQL
7920: 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20  ITE_INTERRUPT;. 
7930: 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
7940: 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
7950: 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20    }.  }.#endif. 
7960: 20 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a   .  break;.}../*
7970: 20 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75 62 20   Opcode:  Gosub 
7980: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
7990: 2a 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72  * Write the curr
79a0: 65 6e 74 20 61 64 64 72 65 73 73 20 6f 6e 74 6f  ent address onto
79b0: 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20   register P1.** 
79c0: 61 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  and then jump to
79d0: 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a   address P2..*/.
79e0: 63 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b  case OP_Gosub: {
79f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
7a00: 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ump */.  assert(
7a10: 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f   pOp->p1>0 && pO
7a20: 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p1<=(p->nMem+
7a30: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
7a40: 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  );.  pIn1 = &aMe
7a50: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
7a60: 73 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e  sert( VdbeMemDyn
7a70: 61 6d 69 63 28 70 49 6e 31 29 3d 3d 30 20 29 3b  amic(pIn1)==0 );
7a80: 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
7a90: 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20  nge(p, pIn1);.  
7aa0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pIn1->flags = ME
7ab0: 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e 75  M_Int;.  pIn1->u
7ac0: 2e 69 20 3d 20 28 69 6e 74 29 28 70 4f 70 2d 61  .i = (int)(pOp-a
7ad0: 4f 70 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  Op);.  REGISTER_
7ae0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70  TRACE(pOp->p1, p
7af0: 49 6e 31 29 3b 0a 0a 20 20 2f 2a 20 4d 6f 73 74  In1);..  /* Most
7b00: 20 6a 75 6d 70 20 6f 70 65 72 61 74 69 6f 6e 73   jump operations
7b10: 20 64 6f 20 61 20 67 6f 74 6f 20 74 6f 20 74 68   do a goto to th
7b20: 69 73 20 73 70 6f 74 20 69 6e 20 6f 72 64 65 72  is spot in order
7b30: 20 74 6f 20 75 70 64 61 74 65 0a 20 20 2a 2a 20   to update.  ** 
7b40: 74 68 65 20 70 4f 70 20 70 6f 69 6e 74 65 72 2e  the pOp pointer.
7b50: 20 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f 70 32 3a 0a   */.jump_to_p2:.
7b60: 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70    pOp = &aOp[pOp
7b70: 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 62 72 65  ->p2 - 1];.  bre
7b80: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
7b90: 3a 20 20 52 65 74 75 72 6e 20 50 31 20 2a 20 2a  :  Return P1 * *
7ba0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
7bb0: 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
7bc0: 72 75 63 74 69 6f 6e 20 61 66 74 65 72 20 74 68  ruction after th
7bd0: 65 20 61 64 64 72 65 73 73 20 69 6e 20 72 65 67  e address in reg
7be0: 69 73 74 65 72 20 50 31 2e 20 20 41 66 74 65 72  ister P1.  After
7bf0: 0a 2a 2a 20 74 68 65 20 6a 75 6d 70 2c 20 72 65  .** the jump, re
7c00: 67 69 73 74 65 72 20 50 31 20 62 65 63 6f 6d 65  gister P1 become
7c10: 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a  s undefined..*/.
7c20: 63 61 73 65 20 4f 50 5f 52 65 74 75 72 6e 3a 20  case OP_Return: 
7c30: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69  {           /* i
7c40: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
7c50: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
7c60: 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
7c70: 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b  lags==MEM_Int );
7c80: 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 49  .  pOp = &aOp[pI
7c90: 6e 31 2d 3e 75 2e 69 5d 3b 0a 20 20 70 49 6e 31  n1->u.i];.  pIn1
7ca0: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e  ->flags = MEM_Un
7cb0: 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b  defined;.  break
7cc0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
7cd0: 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 20 50 31  InitCoroutine P1
7ce0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
7cf0: 20 53 65 74 20 75 70 20 72 65 67 69 73 74 65 72   Set up register
7d00: 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 77   P1 so that it w
7d10: 69 6c 6c 20 59 69 65 6c 64 20 74 6f 20 74 68 65  ill Yield to the
7d20: 20 63 6f 72 6f 75 74 69 6e 65 0a 2a 2a 20 6c 6f   coroutine.** lo
7d30: 63 61 74 65 64 20 61 74 20 61 64 64 72 65 73 73  cated at address
7d40: 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32   P3..**.** If P2
7d50: 21 3d 30 20 74 68 65 6e 20 74 68 65 20 63 6f 72  !=0 then the cor
7d60: 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74  outine implement
7d70: 61 74 69 6f 6e 20 69 6d 6d 65 64 69 61 74 65 6c  ation immediatel
7d80: 79 20 66 6f 6c 6c 6f 77 73 0a 2a 2a 20 74 68 69  y follows.** thi
7d90: 73 20 6f 70 63 6f 64 65 2e 20 20 53 6f 20 6a 75  s opcode.  So ju
7da0: 6d 70 20 6f 76 65 72 20 74 68 65 20 63 6f 72 6f  mp over the coro
7db0: 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 61  utine implementa
7dc0: 74 69 6f 6e 20 74 6f 0a 2a 2a 20 61 64 64 72 65  tion to.** addre
7dd0: 73 73 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  ss P2..**.** See
7de0: 20 61 6c 73 6f 3a 20 45 6e 64 43 6f 72 6f 75 74   also: EndCorout
7df0: 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ine.*/.case OP_I
7e00: 6e 69 74 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20  nitCoroutine: { 
7e10: 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
7e20: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
7e30: 3e 30 20 26 26 20 20 70 4f 70 2d 3e 70 31 3c 3d  >0 &&  pOp->p1<=
7e40: 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
7e50: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 61 73  nCursor) );.  as
7e60: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30  sert( pOp->p2>=0
7e70: 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e   && pOp->p2<p->n
7e80: 4f 70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Op );.  assert( 
7e90: 70 4f 70 2d 3e 70 33 3e 3d 30 20 26 26 20 70 4f  pOp->p3>=0 && pO
7ea0: 70 2d 3e 70 33 3c 70 2d 3e 6e 4f 70 20 29 3b 0a  p->p3<p->nOp );.
7eb0: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
7ec0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
7ed0: 74 28 20 21 56 64 62 65 4d 65 6d 44 79 6e 61 6d  t( !VdbeMemDynam
7ee0: 69 63 28 70 4f 75 74 29 20 29 3b 0a 20 20 70 4f  ic(pOut) );.  pO
7ef0: 75 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70  ut->u.i = pOp->p
7f00: 33 20 2d 20 31 3b 0a 20 20 70 4f 75 74 2d 3e 66  3 - 1;.  pOut->f
7f10: 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
7f20: 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 29 20    if( pOp->p2 ) 
7f30: 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
7f40: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
7f50: 4f 70 63 6f 64 65 3a 20 20 45 6e 64 43 6f 72 6f  Opcode:  EndCoro
7f60: 75 74 69 6e 65 20 50 31 20 2a 20 2a 20 2a 20 2a  utine P1 * * * *
7f70: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 73 74 72  .**.** The instr
7f80: 75 63 74 69 6f 6e 20 61 74 20 74 68 65 20 61 64  uction at the ad
7f90: 64 72 65 73 73 20 69 6e 20 72 65 67 69 73 74 65  dress in registe
7fa0: 72 20 50 31 20 69 73 20 61 20 59 69 65 6c 64 2e  r P1 is a Yield.
7fb0: 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20  .** Jump to the 
7fc0: 50 32 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20  P2 parameter of 
7fd0: 74 68 61 74 20 59 69 65 6c 64 2e 0a 2a 2a 20 41  that Yield..** A
7fe0: 66 74 65 72 20 74 68 65 20 6a 75 6d 70 2c 20 72  fter the jump, r
7ff0: 65 67 69 73 74 65 72 20 50 31 20 62 65 63 6f 6d  egister P1 becom
8000: 65 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a  es undefined..**
8010: 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e  .** See also: In
8020: 69 74 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63  itCoroutine.*/.c
8030: 61 73 65 20 4f 50 5f 45 6e 64 43 6f 72 6f 75 74  ase OP_EndCorout
8040: 69 6e 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ine: {          
8050: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 56 64 62   /* in1 */.  Vdb
8060: 65 4f 70 20 2a 70 43 61 6c 6c 65 72 3b 0a 20 20  eOp *pCaller;.  
8070: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
8080: 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
8090: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45   pIn1->flags==ME
80a0: 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72  M_Int );.  asser
80b0: 74 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 3d 30 20  t( pIn1->u.i>=0 
80c0: 26 26 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 2d 3e  && pIn1->u.i<p->
80d0: 6e 4f 70 20 29 3b 0a 20 20 70 43 61 6c 6c 65 72  nOp );.  pCaller
80e0: 20 3d 20 26 61 4f 70 5b 70 49 6e 31 2d 3e 75 2e   = &aOp[pIn1->u.
80f0: 69 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  i];.  assert( pC
8100: 61 6c 6c 65 72 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  aller->opcode==O
8110: 50 5f 59 69 65 6c 64 20 29 3b 0a 20 20 61 73 73  P_Yield );.  ass
8120: 65 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e 70 32  ert( pCaller->p2
8130: 3e 3d 30 20 26 26 20 70 43 61 6c 6c 65 72 2d 3e  >=0 && pCaller->
8140: 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70  p2<p->nOp );.  p
8150: 4f 70 20 3d 20 26 61 4f 70 5b 70 43 61 6c 6c 65  Op = &aOp[pCalle
8160: 72 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 70 49  r->p2 - 1];.  pI
8170: 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  n1->flags = MEM_
8180: 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65  Undefined;.  bre
8190: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
81a0: 3a 20 20 59 69 65 6c 64 20 50 31 20 50 32 20 2a  :  Yield P1 P2 *
81b0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20   * *.**.** Swap 
81c0: 74 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e  the program coun
81d0: 74 65 72 20 77 69 74 68 20 74 68 65 20 76 61 6c  ter with the val
81e0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
81f0: 31 2e 20 20 54 68 69 73 0a 2a 2a 20 68 61 73 20  1.  This.** has 
8200: 74 68 65 20 65 66 66 65 63 74 20 6f 66 20 79 69  the effect of yi
8210: 65 6c 64 69 6e 67 20 74 6f 20 61 20 63 6f 72 6f  elding to a coro
8220: 75 74 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  utine..**.** If 
8230: 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 74 68  the coroutine th
8240: 61 74 20 69 73 20 6c 61 75 6e 63 68 65 64 20 62  at is launched b
8250: 79 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  y this instructi
8260: 6f 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20  on ends with.** 
8270: 59 69 65 6c 64 20 6f 72 20 52 65 74 75 72 6e 20  Yield or Return 
8280: 74 68 65 6e 20 63 6f 6e 74 69 6e 75 65 20 74 6f  then continue to
8290: 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
82a0: 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 0a 2a  ction.  But if.*
82b0: 2a 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20  * the coroutine 
82c0: 6c 61 75 6e 63 68 65 64 20 62 79 20 74 68 69 73  launched by this
82d0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e 64   instruction end
82e0: 73 20 77 69 74 68 0a 2a 2a 20 45 6e 64 43 6f 72  s with.** EndCor
82f0: 6f 75 74 69 6e 65 2c 20 74 68 65 6e 20 6a 75 6d  outine, then jum
8300: 70 20 74 6f 20 50 32 20 72 61 74 68 65 72 20 74  p to P2 rather t
8310: 68 61 6e 20 63 6f 6e 74 69 6e 75 69 6e 67 20 77  han continuing w
8320: 69 74 68 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20  ith the.** next 
8330: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
8340: 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69  ** See also: Ini
8350: 74 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61  tCoroutine.*/.ca
8360: 73 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 20 20  se OP_Yield: {  
8370: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
8380: 2c 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20  , jump */.  int 
8390: 70 63 44 65 73 74 3b 0a 20 20 70 49 6e 31 20 3d  pcDest;.  pIn1 =
83a0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
83b0: 0a 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d  .  assert( VdbeM
83c0: 65 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d  emDynamic(pIn1)=
83d0: 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c  =0 );.  pIn1->fl
83e0: 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
83f0: 20 70 63 44 65 73 74 20 3d 20 28 69 6e 74 29 70   pcDest = (int)p
8400: 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e 31  In1->u.i;.  pIn1
8410: 2d 3e 75 2e 69 20 3d 20 28 69 6e 74 29 28 70 4f  ->u.i = (int)(pO
8420: 70 20 2d 20 61 4f 70 29 3b 0a 20 20 52 45 47 49  p - aOp);.  REGI
8430: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
8440: 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 4f 70  p1, pIn1);.  pOp
8450: 20 3d 20 26 61 4f 70 5b 70 63 44 65 73 74 5d 3b   = &aOp[pcDest];
8460: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
8470: 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74 49 66 4e  Opcode:  HaltIfN
8480: 75 6c 6c 20 20 50 31 20 50 32 20 50 33 20 50 34  ull  P1 P2 P3 P4
8490: 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
84a0: 20 69 66 20 72 5b 50 33 5d 3d 6e 75 6c 6c 20 68   if r[P3]=null h
84b0: 61 6c 74 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20  alt.**.** Check 
84c0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
84d0: 69 73 74 65 72 20 50 33 2e 20 20 49 66 20 69 74  ister P3.  If it
84e0: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 48 61   is NULL then Ha
84f0: 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 70 61 72 61  lt using.** para
8500: 6d 65 74 65 72 20 50 31 2c 20 50 32 2c 20 61 6e  meter P1, P2, an
8510: 64 20 50 34 20 61 73 20 69 66 20 74 68 69 73 20  d P4 as if this 
8520: 77 65 72 65 20 61 20 48 61 6c 74 20 69 6e 73 74  were a Halt inst
8530: 72 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65  ruction.  If the
8540: 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20 72 65 67  .** value in reg
8550: 69 73 74 65 72 20 50 33 20 69 73 20 6e 6f 74 20  ister P3 is not 
8560: 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 69 73 20  NULL, then this 
8570: 72 6f 75 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d  routine is a no-
8580: 6f 70 2e 0a 2a 2a 20 54 68 65 20 50 35 20 70 61  op..** The P5 pa
8590: 72 61 6d 65 74 65 72 20 73 68 6f 75 6c 64 20 62  rameter should b
85a0: 65 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  e 1..*/.case OP_
85b0: 48 61 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20 20 20  HaltIfNull: {   
85c0: 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 70     /* in3 */.  p
85d0: 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
85e0: 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c  >p3];.#ifdef SQL
85f0: 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20  ITE_DEBUG.  if( 
8600: 70 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 41 62 6f 72  pOp->p2==OE_Abor
8610: 74 20 29 7b 20 73 71 6c 69 74 65 33 56 64 62 65  t ){ sqlite3Vdbe
8620: 41 73 73 65 72 74 41 62 6f 72 74 61 62 6c 65 28  AssertAbortable(
8630: 70 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 69  p); }.#endif.  i
8640: 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  f( (pIn3->flags 
8650: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
8660: 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c   break;.  /* Fal
8670: 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f  l through into O
8680: 50 5f 48 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20  P_Halt */.}../* 
8690: 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74 20 50 31  Opcode:  Halt P1
86a0: 20 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a 0a 2a   P2 * P4 P5.**.*
86b0: 2a 20 45 78 69 74 20 69 6d 6d 65 64 69 61 74 65  * Exit immediate
86c0: 6c 79 2e 20 20 41 6c 6c 20 6f 70 65 6e 20 63 75  ly.  All open cu
86d0: 72 73 6f 72 73 2c 20 65 74 63 20 61 72 65 20 63  rsors, etc are c
86e0: 6c 6f 73 65 64 0a 2a 2a 20 61 75 74 6f 6d 61 74  losed.** automat
86f0: 69 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31  ically..**.** P1
8700: 20 69 73 20 74 68 65 20 72 65 73 75 6c 74 20 63   is the result c
8710: 6f 64 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  ode returned by 
8720: 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 2c 20  sqlite3_exec(), 
8730: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 29 2c  sqlite3_reset(),
8740: 0a 2a 2a 20 6f 72 20 73 71 6c 69 74 65 33 5f 66  .** or sqlite3_f
8750: 69 6e 61 6c 69 7a 65 28 29 2e 20 20 46 6f 72 20  inalize().  For 
8760: 61 20 6e 6f 72 6d 61 6c 20 68 61 6c 74 2c 20 74  a normal halt, t
8770: 68 69 73 20 73 68 6f 75 6c 64 20 62 65 20 53 51  his should be SQ
8780: 4c 49 54 45 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20  LITE_OK (0)..** 
8790: 46 6f 72 20 65 72 72 6f 72 73 2c 20 69 74 20 63  For errors, it c
87a0: 61 6e 20 62 65 20 73 6f 6d 65 20 6f 74 68 65 72  an be some other
87b0: 20 76 61 6c 75 65 2e 20 20 49 66 20 50 31 21 3d   value.  If P1!=
87c0: 30 20 74 68 65 6e 20 50 32 20 77 69 6c 6c 20 64  0 then P2 will d
87d0: 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74  etermine.** whet
87e0: 68 65 72 20 6f 72 20 6e 6f 74 20 74 6f 20 72 6f  her or not to ro
87f0: 6c 6c 62 61 63 6b 20 74 68 65 20 63 75 72 72 65  llback the curre
8800: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  nt transaction. 
8810: 20 44 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b   Do not rollback
8820: 0a 2a 2a 20 69 66 20 50 32 3d 3d 4f 45 5f 46 61  .** if P2==OE_Fa
8830: 69 6c 2e 20 44 6f 20 74 68 65 20 72 6f 6c 6c 62  il. Do the rollb
8840: 61 63 6b 20 69 66 20 50 32 3d 3d 4f 45 5f 52 6f  ack if P2==OE_Ro
8850: 6c 6c 62 61 63 6b 2e 20 20 49 66 20 50 32 3d 3d  llback.  If P2==
8860: 4f 45 5f 41 62 6f 72 74 2c 0a 2a 2a 20 74 68 65  OE_Abort,.** the
8870: 6e 20 62 61 63 6b 20 6f 75 74 20 61 6c 6c 20 63  n back out all c
8880: 68 61 6e 67 65 73 20 74 68 61 74 20 68 61 76 65  hanges that have
8890: 20 6f 63 63 75 72 72 65 64 20 64 75 72 69 6e 67   occurred during
88a0: 20 74 68 69 73 20 65 78 65 63 75 74 69 6f 6e 20   this execution 
88b0: 6f 66 20 74 68 65 0a 2a 2a 20 56 44 42 45 2c 20  of the.** VDBE, 
88c0: 62 75 74 20 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62  but do not rollb
88d0: 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74  ack the transact
88e0: 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50  ion. .**.** If P
88f0: 34 20 69 73 20 6e 6f 74 20 6e 75 6c 6c 20 74 68  4 is not null th
8900: 65 6e 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f  en it is an erro
8910: 72 20 6d 65 73 73 61 67 65 20 73 74 72 69 6e 67  r message string
8920: 2e 0a 2a 2a 0a 2a 2a 20 50 35 20 69 73 20 61 20  ..**.** P5 is a 
8930: 76 61 6c 75 65 20 62 65 74 77 65 65 6e 20 30 20  value between 0 
8940: 61 6e 64 20 34 2c 20 69 6e 63 6c 75 73 69 76 65  and 4, inclusive
8950: 2c 20 74 68 61 74 20 6d 6f 64 69 66 69 65 73 20  , that modifies 
8960: 74 68 65 20 50 34 20 73 74 72 69 6e 67 2e 0a 2a  the P4 string..*
8970: 2a 0a 2a 2a 20 20 20 20 30 3a 20 20 28 6e 6f 20  *.**    0:  (no 
8980: 63 68 61 6e 67 65 29 0a 2a 2a 20 20 20 20 31 3a  change).**    1:
8990: 20 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 74 72    NOT NULL contr
89a0: 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a  aint failed: P4.
89b0: 2a 2a 20 20 20 20 32 3a 20 20 55 4e 49 51 55 45  **    2:  UNIQUE
89c0: 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c   constraint fail
89d0: 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20 33 3a 20  ed: P4.**    3: 
89e0: 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e   CHECK constrain
89f0: 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20  t failed: P4.** 
8a00: 20 20 20 34 3a 20 20 46 4f 52 45 49 47 4e 20 4b     4:  FOREIGN K
8a10: 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61  EY constraint fa
8a20: 69 6c 65 64 3a 20 50 34 0a 2a 2a 0a 2a 2a 20 49  iled: P4.**.** I
8a30: 66 20 50 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f  f P5 is not zero
8a40: 20 61 6e 64 20 50 34 20 69 73 20 4e 55 4c 4c 2c   and P4 is NULL,
8a50: 20 74 68 65 6e 20 65 76 65 72 79 74 68 69 6e 67   then everything
8a60: 20 61 66 74 65 72 20 74 68 65 20 22 3a 22 20 69   after the ":" i
8a70: 73 0a 2a 2a 20 6f 6d 69 74 74 65 64 2e 0a 2a 2a  s.** omitted..**
8a80: 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 61 6e 20  .** There is an 
8a90: 69 6d 70 6c 69 65 64 20 22 48 61 6c 74 20 30 20  implied "Halt 0 
8aa0: 30 20 30 22 20 69 6e 73 74 72 75 63 74 69 6f 6e  0 0" instruction
8ab0: 20 69 6e 73 65 72 74 65 64 20 61 74 20 74 68 65   inserted at the
8ac0: 20 76 65 72 79 20 65 6e 64 20 6f 66 0a 2a 2a 20   very end of.** 
8ad0: 65 76 65 72 79 20 70 72 6f 67 72 61 6d 2e 20 20  every program.  
8ae0: 53 6f 20 61 20 6a 75 6d 70 20 70 61 73 74 20 74  So a jump past t
8af0: 68 65 20 6c 61 73 74 20 69 6e 73 74 72 75 63 74  he last instruct
8b00: 69 6f 6e 20 6f 66 20 74 68 65 20 70 72 6f 67 72  ion of the progr
8b10: 61 6d 0a 2a 2a 20 69 73 20 74 68 65 20 73 61 6d  am.** is the sam
8b20: 65 20 61 73 20 65 78 65 63 75 74 69 6e 67 20 48  e as executing H
8b30: 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  alt..*/.case OP_
8b40: 48 61 6c 74 3a 20 7b 0a 20 20 56 64 62 65 46 72  Halt: {.  VdbeFr
8b50: 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69  ame *pFrame;.  i
8b60: 6e 74 20 70 63 78 3b 0a 0a 20 20 70 63 78 20 3d  nt pcx;..  pcx =
8b70: 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
8b80: 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
8b90: 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70 4f 70  _DEBUG.  if( pOp
8ba0: 2d 3e 70 32 3d 3d 4f 45 5f 41 62 6f 72 74 20 29  ->p2==OE_Abort )
8bb0: 7b 20 73 71 6c 69 74 65 33 56 64 62 65 41 73 73  { sqlite3VdbeAss
8bc0: 65 72 74 41 62 6f 72 74 61 62 6c 65 28 70 29 3b  ertAbortable(p);
8bd0: 20 7d 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20   }.#endif.  if( 
8be0: 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c 49 54 45 5f  pOp->p1==SQLITE_
8bf0: 4f 4b 20 26 26 20 70 2d 3e 70 46 72 61 6d 65 20  OK && p->pFrame 
8c00: 29 7b 0a 20 20 20 20 2f 2a 20 48 61 6c 74 20 74  ){.    /* Halt t
8c10: 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20  he sub-program. 
8c20: 52 65 74 75 72 6e 20 63 6f 6e 74 72 6f 6c 20 74  Return control t
8c30: 6f 20 74 68 65 20 70 61 72 65 6e 74 20 66 72 61  o the parent fra
8c40: 6d 65 2e 20 2a 2f 0a 20 20 20 20 70 46 72 61 6d  me. */.    pFram
8c50: 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20  e = p->pFrame;. 
8c60: 20 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70     p->pFrame = p
8c70: 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 0a  Frame->pParent;.
8c80: 20 20 20 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b      p->nFrame--;
8c90: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
8ca0: 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70  SetChanges(db, p
8cb0: 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 20 20  ->nChange);.    
8cc0: 70 63 78 20 3d 20 73 71 6c 69 74 65 33 56 64 62  pcx = sqlite3Vdb
8cd0: 65 46 72 61 6d 65 52 65 73 74 6f 72 65 28 70 46  eFrameRestore(pF
8ce0: 72 61 6d 65 29 3b 0a 20 20 20 20 69 66 28 20 70  rame);.    if( p
8cf0: 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72  Op->p2==OE_Ignor
8d00: 65 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 6e  e ){.      /* In
8d10: 73 74 72 75 63 74 69 6f 6e 20 70 63 78 20 69 73  struction pcx is
8d20: 20 74 68 65 20 4f 50 5f 50 72 6f 67 72 61 6d 20   the OP_Program 
8d30: 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 65  that invoked the
8d40: 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 0a 20 20   sub-program .  
8d50: 20 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 6c 79      ** currently
8d60: 20 62 65 69 6e 67 20 68 61 6c 74 65 64 2e 20 49   being halted. I
8d70: 66 20 74 68 65 20 70 32 20 69 6e 73 74 72 75 63  f the p2 instruc
8d80: 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 4f 50 5f  tion of this OP_
8d90: 48 61 6c 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e  Halt.      ** in
8da0: 73 74 72 75 63 74 69 6f 6e 20 69 73 20 73 65 74  struction is set
8db0: 20 74 6f 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 74   to OE_Ignore, t
8dc0: 68 65 6e 20 74 68 65 20 73 75 62 2d 70 72 6f 67  hen the sub-prog
8dd0: 72 61 6d 20 69 73 20 74 68 72 6f 77 69 6e 67 0a  ram is throwing.
8de0: 20 20 20 20 20 20 2a 2a 20 61 6e 20 49 47 4e 4f        ** an IGNO
8df0: 52 45 20 65 78 63 65 70 74 69 6f 6e 2e 20 49 6e  RE exception. In
8e00: 20 74 68 69 73 20 63 61 73 65 20 6a 75 6d 70 20   this case jump 
8e10: 74 6f 20 74 68 65 20 61 64 64 72 65 73 73 20 73  to the address s
8e20: 70 65 63 69 66 69 65 64 0a 20 20 20 20 20 20 2a  pecified.      *
8e30: 2a 20 61 73 20 74 68 65 20 70 32 20 6f 66 20 74  * as the p2 of t
8e40: 68 65 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72  he calling OP_Pr
8e50: 6f 67 72 61 6d 2e 20 20 2a 2f 0a 20 20 20 20 20  ogram.  */.     
8e60: 20 70 63 78 20 3d 20 70 2d 3e 61 4f 70 5b 70 63   pcx = p->aOp[pc
8e70: 78 5d 2e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20  x].p2-1;.    }. 
8e80: 20 20 20 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b     aOp = p->aOp;
8e90: 0a 20 20 20 20 61 4d 65 6d 20 3d 20 70 2d 3e 61  .    aMem = p->a
8ea0: 4d 65 6d 3b 0a 20 20 20 20 70 4f 70 20 3d 20 26  Mem;.    pOp = &
8eb0: 61 4f 70 5b 70 63 78 5d 3b 0a 20 20 20 20 62 72  aOp[pcx];.    br
8ec0: 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 2d 3e 72 63  eak;.  }.  p->rc
8ed0: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 2d   = pOp->p1;.  p-
8ee0: 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28  >errorAction = (
8ef0: 75 38 29 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 2d  u8)pOp->p2;.  p-
8f00: 3e 70 63 20 3d 20 70 63 78 3b 0a 20 20 61 73 73  >pc = pcx;.  ass
8f10: 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 3d 34 20  ert( pOp->p5<=4 
8f20: 29 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 20 29  );.  if( p->rc )
8f30: 7b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  {.    if( pOp->p
8f40: 35 20 29 7b 0a 20 20 20 20 20 20 73 74 61 74 69  5 ){.      stati
8f50: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 63  c const char * c
8f60: 6f 6e 73 74 20 61 7a 54 79 70 65 5b 5d 20 3d 20  onst azType[] = 
8f70: 7b 20 22 4e 4f 54 20 4e 55 4c 4c 22 2c 20 22 55  { "NOT NULL", "U
8f80: 4e 49 51 55 45 22 2c 20 22 43 48 45 43 4b 22 2c  NIQUE", "CHECK",
8f90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 46                "F
8fc0: 4f 52 45 49 47 4e 20 4b 45 59 22 20 7d 3b 0a 20  OREIGN KEY" };. 
8fd0: 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70       testcase( p
8fe0: 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 20  Op->p5==1 );.   
8ff0: 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70     testcase( pOp
9000: 2d 3e 70 35 3d 3d 32 20 29 3b 0a 20 20 20 20 20  ->p5==2 );.     
9010: 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
9020: 70 35 3d 3d 33 20 29 3b 0a 20 20 20 20 20 20 74  p5==3 );.      t
9030: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35  estcase( pOp->p5
9040: 3d 3d 34 20 29 3b 0a 20 20 20 20 20 20 73 71 6c  ==4 );.      sql
9050: 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
9060: 20 22 25 73 20 63 6f 6e 73 74 72 61 69 6e 74 20   "%s constraint 
9070: 66 61 69 6c 65 64 22 2c 20 61 7a 54 79 70 65 5b  failed", azType[
9080: 70 4f 70 2d 3e 70 35 2d 31 5d 29 3b 0a 20 20 20  pOp->p5-1]);.   
9090: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a     if( pOp->p4.z
90a0: 20 29 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 7a   ){.        p->z
90b0: 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33  ErrMsg = sqlite3
90c0: 4d 50 72 69 6e 74 66 28 64 62 2c 20 22 25 7a 3a  MPrintf(db, "%z:
90d0: 20 25 73 22 2c 20 70 2d 3e 7a 45 72 72 4d 73 67   %s", p->zErrMsg
90e0: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
90f0: 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
9100: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
9110: 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c  beError(p, "%s",
9120: 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20   pOp->p4.z);.   
9130: 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6c   }.    sqlite3_l
9140: 6f 67 28 70 4f 70 2d 3e 70 31 2c 20 22 61 62 6f  og(pOp->p1, "abo
9150: 72 74 20 61 74 20 25 64 20 69 6e 20 5b 25 73 5d  rt at %d in [%s]
9160: 3a 20 25 73 22 2c 20 70 63 78 2c 20 70 2d 3e 7a  : %s", pcx, p->z
9170: 53 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29  Sql, p->zErrMsg)
9180: 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  ;.  }.  rc = sql
9190: 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b  ite3VdbeHalt(p);
91a0: 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53  .  assert( rc==S
91b0: 51 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20 72 63  QLITE_BUSY || rc
91c0: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72  ==SQLITE_OK || r
91d0: 63 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52 20  c==SQLITE_ERROR 
91e0: 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
91f0: 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20  ITE_BUSY ){.    
9200: 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 42  p->rc = SQLITE_B
9210: 55 53 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  USY;.  }else{.  
9220: 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
9230: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72  LITE_OK || (p->r
9240: 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f  c&0xff)==SQLITE_
9250: 43 4f 4e 53 54 52 41 49 4e 54 20 29 3b 0a 20 20  CONSTRAINT );.  
9260: 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
9270: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6e  LITE_OK || db->n
9280: 44 65 66 65 72 72 65 64 43 6f 6e 73 3e 30 20 7c  DeferredCons>0 |
9290: 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  | db->nDeferredI
92a0: 6d 6d 43 6f 6e 73 3e 30 20 29 3b 0a 20 20 20 20  mmCons>0 );.    
92b0: 72 63 20 3d 20 70 2d 3e 72 63 20 3f 20 53 51 4c  rc = p->rc ? SQL
92c0: 49 54 45 5f 45 52 52 4f 52 20 3a 20 53 51 4c 49  ITE_ERROR : SQLI
92d0: 54 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67  TE_DONE;.  }.  g
92e0: 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
92f0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
9300: 6e 74 65 67 65 72 20 50 31 20 50 32 20 2a 20 2a  nteger P1 P2 * *
9310: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
9320: 72 5b 50 32 5d 3d 50 31 0a 2a 2a 0a 2a 2a 20 54  r[P2]=P1.**.** T
9330: 68 65 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65  he 32-bit intege
9340: 72 20 76 61 6c 75 65 20 50 31 20 69 73 20 77 72  r value P1 is wr
9350: 69 74 74 65 6e 20 69 6e 74 6f 20 72 65 67 69 73  itten into regis
9360: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
9370: 4f 50 5f 49 6e 74 65 67 65 72 3a 20 7b 20 20 20  OP_Integer: {   
9380: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
9390: 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
93a0: 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
93b0: 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
93c0: 70 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61 6b  pOp->p1;.  break
93d0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
93e0: 49 6e 74 36 34 20 2a 20 50 32 20 2a 20 50 34 20  Int64 * P2 * P4 
93f0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
9400: 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34  [P2]=P4.**.** P4
9410: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
9420: 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65   a 64-bit intege
9430: 72 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74  r value..** Writ
9440: 65 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74  e that value int
9450: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
9460: 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 36 34 3a  /.case OP_Int64:
9470: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
9480: 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d  out2 */.  pOut =
9490: 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
94a0: 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72  p, pOp);.  asser
94b0: 74 28 20 70 4f 70 2d 3e 70 34 2e 70 49 36 34 21  t( pOp->p4.pI64!
94c0: 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  =0 );.  pOut->u.
94d0: 69 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 49 36  i = *pOp->p4.pI6
94e0: 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23  4;.  break;.}..#
94f0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
9500: 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
9510: 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61  T./* Opcode: Rea
9520: 6c 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a  l * P2 * P4 *.**
9530: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
9540: 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  =P4.**.** P4 is 
9550: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36  a pointer to a 6
9560: 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67 20 70  4-bit floating p
9570: 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a 20 57  oint value..** W
9580: 72 69 74 65 20 74 68 61 74 20 76 61 6c 75 65 20  rite that value 
9590: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
95a0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61  ..*/.case OP_Rea
95b0: 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  l: {            
95c0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 46 4c  /* same as TK_FL
95d0: 4f 41 54 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70  OAT, out2 */.  p
95e0: 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
95f0: 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
9600: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
9610: 4d 5f 52 65 61 6c 3b 0a 20 20 61 73 73 65 72 74  M_Real;.  assert
9620: 28 20 21 73 71 6c 69 74 65 33 49 73 4e 61 4e 28  ( !sqlite3IsNaN(
9630: 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 29 20  *pOp->p4.pReal) 
9640: 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 72 20 3d  );.  pOut->u.r =
9650: 20 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 3b   *pOp->p4.pReal;
9660: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
9670: 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  if../* Opcode: S
9680: 74 72 69 6e 67 38 20 2a 20 50 32 20 2a 20 50 34  tring8 * P2 * P4
9690: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
96a0: 72 5b 50 32 5d 3d 27 50 34 27 0a 2a 2a 0a 2a 2a  r[P2]='P4'.**.**
96b0: 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20   P4 points to a 
96c0: 6e 75 6c 20 74 65 72 6d 69 6e 61 74 65 64 20 55  nul terminated U
96d0: 54 46 2d 38 20 73 74 72 69 6e 67 2e 20 54 68 69  TF-8 string. Thi
96e0: 73 20 6f 70 63 6f 64 65 20 69 73 20 74 72 61 6e  s opcode is tran
96f0: 73 66 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e 74 6f  sformed .** into
9700: 20 61 20 53 74 72 69 6e 67 20 6f 70 63 6f 64 65   a String opcode
9710: 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 65 78   before it is ex
9720: 65 63 75 74 65 64 20 66 6f 72 20 74 68 65 20 66  ecuted for the f
9730: 69 72 73 74 20 74 69 6d 65 2e 20 20 44 75 72 69  irst time.  Duri
9740: 6e 67 0a 2a 2a 20 74 68 69 73 20 74 72 61 6e 73  ng.** this trans
9750: 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 6c  formation, the l
9760: 65 6e 67 74 68 20 6f 66 20 73 74 72 69 6e 67 20  ength of string 
9770: 50 34 20 69 73 20 63 6f 6d 70 75 74 65 64 20 61  P4 is computed a
9780: 6e 64 20 73 74 6f 72 65 64 0a 2a 2a 20 61 73 20  nd stored.** as 
9790: 74 68 65 20 50 31 20 70 61 72 61 6d 65 74 65 72  the P1 parameter
97a0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72  ..*/.case OP_Str
97b0: 69 6e 67 38 3a 20 7b 20 20 20 20 20 20 20 20 20  ing8: {         
97c0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54  /* same as TK_ST
97d0: 52 49 4e 47 2c 20 6f 75 74 32 20 2a 2f 0a 20 20  RING, out2 */.  
97e0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
97f0: 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20 3d  z!=0 );.  pOut =
9800: 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
9810: 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 70 2d 3e  p, pOp);.  pOp->
9820: 70 31 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  p1 = sqlite3Strl
9830: 65 6e 33 30 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b  en30(pOp->p4.z);
9840: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
9850: 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 69 66  _OMIT_UTF16.  if
9860: 28 20 65 6e 63 6f 64 69 6e 67 21 3d 53 51 4c 49  ( encoding!=SQLI
9870: 54 45 5f 55 54 46 38 20 29 7b 0a 20 20 20 20 72  TE_UTF8 ){.    r
9880: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
9890: 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70  emSetStr(pOut, p
98a0: 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53 51  Op->p4.z, -1, SQ
98b0: 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54  LITE_UTF8, SQLIT
98c0: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 61  E_STATIC);.    a
98d0: 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
98e0: 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49  E_OK || rc==SQLI
98f0: 54 45 5f 54 4f 4f 42 49 47 20 29 3b 0a 20 20 20  TE_TOOBIG );.   
9900: 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 74   if( rc ) goto t
9910: 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 69 66 28 20  oo_big;.    if( 
9920: 53 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69 74  SQLITE_OK!=sqlit
9930: 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
9940: 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64  ding(pOut, encod
9950: 69 6e 67 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  ing) ) goto no_m
9960: 65 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  em;.    assert( 
9970: 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 3e 30  pOut->szMalloc>0
9980: 20 26 26 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f   && pOut->zMallo
9990: 63 3d 3d 70 4f 75 74 2d 3e 7a 20 29 3b 0a 20 20  c==pOut->z );.  
99a0: 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65    assert( VdbeMe
99b0: 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 3d 3d  mDynamic(pOut)==
99c0: 30 20 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 73  0 );.    pOut->s
99d0: 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20  zMalloc = 0;.   
99e0: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20   pOut->flags |= 
99f0: 4d 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20 20  MEM_Static;.    
9a00: 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  if( pOp->p4type=
9a10: 3d 50 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20  =P4_DYNAMIC ){. 
9a20: 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
9a30: 65 65 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a  ee(db, pOp->p4.z
9a40: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 70  );.    }.    pOp
9a50: 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 44 59  ->p4type = P4_DY
9a60: 4e 41 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e  NAMIC;.    pOp->
9a70: 70 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a  p4.z = pOut->z;.
9a80: 20 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f      pOp->p1 = pO
9a90: 75 74 2d 3e 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69  ut->n;.  }.#endi
9aa0: 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e  f.  if( pOp->p1>
9ab0: 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
9ac0: 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
9ad0: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
9ae0: 62 69 67 3b 0a 20 20 7d 0a 20 20 70 4f 70 2d 3e  big;.  }.  pOp->
9af0: 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72 69  opcode = OP_Stri
9b00: 6e 67 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63  ng;.  assert( rc
9b10: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20  ==SQLITE_OK );. 
9b20: 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
9b30: 20 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61 73   to the next cas
9b40: 65 2c 20 4f 50 5f 53 74 72 69 6e 67 20 2a 2f 0a  e, OP_String */.
9b50: 7d 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  }.  ./* Opcode: 
9b60: 53 74 72 69 6e 67 20 50 31 20 50 32 20 50 33 20  String P1 P2 P3 
9b70: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
9b80: 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27 20 28 6c  s: r[P2]='P4' (l
9b90: 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 54 68 65  en=P1).**.** The
9ba0: 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20 50 34   string value P4
9bb0: 20 6f 66 20 6c 65 6e 67 74 68 20 50 31 20 28 62   of length P1 (b
9bc0: 79 74 65 73 29 20 69 73 20 73 74 6f 72 65 64 20  ytes) is stored 
9bd0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
9be0: 2a 2a 0a 2a 2a 20 49 66 20 50 33 20 69 73 20 6e  **.** If P3 is n
9bf0: 6f 74 20 7a 65 72 6f 20 61 6e 64 20 74 68 65 20  ot zero and the 
9c00: 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
9c10: 74 65 72 20 50 33 20 69 73 20 65 71 75 61 6c 20  ter P3 is equal 
9c20: 74 6f 20 50 35 2c 20 74 68 65 6e 0a 2a 2a 20 74  to P5, then.** t
9c30: 68 65 20 64 61 74 61 74 79 70 65 20 6f 66 20 74  he datatype of t
9c40: 68 65 20 72 65 67 69 73 74 65 72 20 50 32 20 69  he register P2 i
9c50: 73 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 42  s converted to B
9c60: 4c 4f 42 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e  LOB.  The conten
9c70: 74 20 69 73 0a 2a 2a 20 74 68 65 20 73 61 6d 65  t is.** the same
9c80: 20 73 65 71 75 65 6e 63 65 20 6f 66 20 62 79 74   sequence of byt
9c90: 65 73 2c 20 69 74 20 69 73 20 6d 65 72 65 6c 79  es, it is merely
9ca0: 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
9cb0: 61 20 42 4c 4f 42 20 69 6e 73 74 65 61 64 0a 2a  a BLOB instead.*
9cc0: 2a 20 6f 66 20 61 20 73 74 72 69 6e 67 2c 20 61  * of a string, a
9cd0: 73 20 69 66 20 69 74 20 68 61 64 20 62 65 65 6e  s if it had been
9ce0: 20 43 41 53 54 2e 20 20 49 6e 20 6f 74 68 65 72   CAST.  In other
9cf0: 20 77 6f 72 64 73 3a 0a 2a 2a 0a 2a 2a 20 69 66   words:.**.** if
9d00: 28 20 50 33 21 3d 30 20 61 6e 64 20 72 65 67 5b  ( P3!=0 and reg[
9d10: 50 33 5d 3d 3d 50 35 20 29 20 72 65 67 5b 50 32  P3]==P5 ) reg[P2
9d20: 5d 20 3a 3d 20 43 41 53 54 28 72 65 67 5b 50 32  ] := CAST(reg[P2
9d30: 5d 20 61 73 20 42 4c 4f 42 29 0a 2a 2f 0a 63 61  ] as BLOB).*/.ca
9d40: 73 65 20 4f 50 5f 53 74 72 69 6e 67 3a 20 7b 20  se OP_String: { 
9d50: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
9d60: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
9d70: 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20  p->p4.z!=0 );.  
9d80: 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
9d90: 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
9da0: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
9db0: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69  EM_Str|MEM_Stati
9dc0: 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f  c|MEM_Term;.  pO
9dd0: 75 74 2d 3e 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e  ut->z = pOp->p4.
9de0: 7a 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 70  z;.  pOut->n = p
9df0: 4f 70 2d 3e 70 31 3b 0a 20 20 70 4f 75 74 2d 3e  Op->p1;.  pOut->
9e00: 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a  enc = encoding;.
9e10: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
9e20: 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 23 69 66  BSIZE(pOut);.#if
9e30: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4c 49 4b 45  ndef SQLITE_LIKE
9e40: 5f 44 4f 45 53 4e 54 5f 4d 41 54 43 48 5f 42 4c  _DOESNT_MATCH_BL
9e50: 4f 42 53 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  OBS.  if( pOp->p
9e60: 33 3e 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72  3>0 ){.    asser
9e70: 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  t( pOp->p3<=(p->
9e80: 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
9e90: 73 6f 72 29 20 29 3b 0a 20 20 20 20 70 49 6e 33  sor) );.    pIn3
9ea0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
9eb0: 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ];.    assert( p
9ec0: 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
9ed0: 5f 49 6e 74 20 29 3b 0a 20 20 20 20 69 66 28 20  _Int );.    if( 
9ee0: 70 49 6e 33 2d 3e 75 2e 69 3d 3d 70 4f 70 2d 3e  pIn3->u.i==pOp->
9ef0: 70 35 20 29 20 70 4f 75 74 2d 3e 66 6c 61 67 73  p5 ) pOut->flags
9f00: 20 3d 20 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f   = MEM_Blob|MEM_
9f10: 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b  Static|MEM_Term;
9f20: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 62 72  .  }.#endif.  br
9f30: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
9f40: 65 3a 20 4e 75 6c 6c 20 50 31 20 50 32 20 50 33  e: Null P1 P2 P3
9f50: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
9f60: 3a 20 72 5b 50 32 2e 2e 50 33 5d 3d 4e 55 4c 4c  : r[P2..P3]=NULL
9f70: 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 4e  .**.** Write a N
9f80: 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ULL into registe
9f90: 72 73 20 50 32 2e 20 20 49 66 20 50 33 20 67 72  rs P2.  If P3 gr
9fa0: 65 61 74 65 72 20 74 68 61 6e 20 50 32 2c 20 74  eater than P2, t
9fb0: 68 65 6e 20 61 6c 73 6f 20 77 72 69 74 65 0a 2a  hen also write.*
9fc0: 2a 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69  * NULL into regi
9fd0: 73 74 65 72 20 50 33 20 61 6e 64 20 65 76 65 72  ster P3 and ever
9fe0: 79 20 72 65 67 69 73 74 65 72 20 69 6e 20 62 65  y register in be
9ff0: 74 77 65 65 6e 20 50 32 20 61 6e 64 20 50 33 2e  tween P2 and P3.
a000: 20 20 49 66 20 50 33 0a 2a 2a 20 69 73 20 6c 65    If P3.** is le
a010: 73 73 20 74 68 61 6e 20 50 32 20 28 74 79 70 69  ss than P2 (typi
a020: 63 61 6c 6c 79 20 50 33 20 69 73 20 7a 65 72 6f  cally P3 is zero
a030: 29 20 74 68 65 6e 20 6f 6e 6c 79 20 72 65 67 69  ) then only regi
a040: 73 74 65 72 20 50 32 20 69 73 0a 2a 2a 20 73 65  ster P2 is.** se
a050: 74 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  t to NULL..**.**
a060: 20 49 66 20 74 68 65 20 50 31 20 76 61 6c 75 65   If the P1 value
a070: 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
a080: 65 6e 20 61 6c 73 6f 20 73 65 74 20 74 68 65 20  en also set the 
a090: 4d 45 4d 5f 43 6c 65 61 72 65 64 20 66 6c 61 67  MEM_Cleared flag
a0a0: 20 73 6f 20 74 68 61 74 0a 2a 2a 20 4e 55 4c 4c   so that.** NULL
a0b0: 20 76 61 6c 75 65 73 20 77 69 6c 6c 20 6e 6f 74   values will not
a0c0: 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20 65   compare equal e
a0d0: 76 65 6e 20 69 66 20 53 51 4c 49 54 45 5f 4e 55  ven if SQLITE_NU
a0e0: 4c 4c 45 51 20 69 73 20 73 65 74 20 6f 6e 0a 2a  LLEQ is set on.*
a0f0: 2a 20 4f 50 5f 4e 65 20 6f 72 20 4f 50 5f 45 71  * OP_Ne or OP_Eq
a100: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c  ..*/.case OP_Nul
a110: 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  l: {           /
a120: 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20  * out2 */.  int 
a130: 63 6e 74 3b 0a 20 20 75 31 36 20 6e 75 6c 6c 46  cnt;.  u16 nullF
a140: 6c 61 67 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75  lag;.  pOut = ou
a150: 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
a160: 70 4f 70 29 3b 0a 20 20 63 6e 74 20 3d 20 70 4f  pOp);.  cnt = pO
a170: 70 2d 3e 70 33 2d 70 4f 70 2d 3e 70 32 3b 0a 20  p->p3-pOp->p2;. 
a180: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
a190: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
a1a0: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
a1b0: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75  pOut->flags = nu
a1c0: 6c 6c 46 6c 61 67 20 3d 20 70 4f 70 2d 3e 70 31  llFlag = pOp->p1
a1d0: 20 3f 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d   ? (MEM_Null|MEM
a1e0: 5f 43 6c 65 61 72 65 64 29 20 3a 20 4d 45 4d 5f  _Cleared) : MEM_
a1f0: 4e 75 6c 6c 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20  Null;.  pOut->n 
a200: 3d 20 30 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  = 0;.#ifdef SQLI
a210: 54 45 5f 44 45 42 55 47 0a 20 20 70 4f 75 74 2d  TE_DEBUG.  pOut-
a220: 3e 75 54 65 6d 70 20 3d 20 30 3b 0a 23 65 6e 64  >uTemp = 0;.#end
a230: 69 66 0a 20 20 77 68 69 6c 65 28 20 63 6e 74 3e  if.  while( cnt>
a240: 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b  0 ){.    pOut++;
a250: 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  .    memAboutToC
a260: 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
a270: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
a280: 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
a290: 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
a2a0: 20 3d 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 20   = nullFlag;.   
a2b0: 20 70 4f 75 74 2d 3e 6e 20 3d 20 30 3b 0a 20 20   pOut->n = 0;.  
a2c0: 20 20 63 6e 74 2d 2d 3b 0a 20 20 7d 0a 20 20 62    cnt--;.  }.  b
a2d0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
a2e0: 64 65 3a 20 53 6f 66 74 4e 75 6c 6c 20 50 31 20  de: SoftNull P1 
a2f0: 2a 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  * * * *.** Synop
a300: 73 69 73 3a 20 72 5b 50 31 5d 3d 4e 55 4c 4c 0a  sis: r[P1]=NULL.
a310: 2a 2a 0a 2a 2a 20 53 65 74 20 72 65 67 69 73 74  **.** Set regist
a320: 65 72 20 50 31 20 74 6f 20 68 61 76 65 20 74 68  er P1 to have th
a330: 65 20 76 61 6c 75 65 20 4e 55 4c 4c 20 61 73 20  e value NULL as 
a340: 73 65 65 6e 20 62 79 20 74 68 65 20 4f 50 5f 4d  seen by the OP_M
a350: 61 6b 65 52 65 63 6f 72 64 0a 2a 2a 20 69 6e 73  akeRecord.** ins
a360: 74 72 75 63 74 69 6f 6e 2c 20 62 75 74 20 64 6f  truction, but do
a370: 20 6e 6f 74 20 66 72 65 65 20 61 6e 79 20 73 74   not free any st
a380: 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d 65 6d  ring or blob mem
a390: 6f 72 79 20 61 73 73 6f 63 69 61 74 65 64 20 77  ory associated w
a3a0: 69 74 68 0a 2a 2a 20 74 68 65 20 72 65 67 69 73  ith.** the regis
a3b0: 74 65 72 2c 20 73 6f 20 74 68 61 74 20 69 66 20  ter, so that if 
a3c0: 74 68 65 20 76 61 6c 75 65 20 77 61 73 20 61 20  the value was a 
a3d0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74  string or blob t
a3e0: 68 61 74 20 77 61 73 0a 2a 2a 20 70 72 65 76 69  hat was.** previ
a3f0: 6f 75 73 6c 79 20 63 6f 70 69 65 64 20 75 73 69  ously copied usi
a400: 6e 67 20 4f 50 5f 53 43 6f 70 79 2c 20 74 68 65  ng OP_SCopy, the
a410: 20 63 6f 70 69 65 73 20 77 69 6c 6c 20 63 6f 6e   copies will con
a420: 74 69 6e 75 65 20 74 6f 20 62 65 20 76 61 6c 69  tinue to be vali
a430: 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  d..*/.case OP_So
a440: 66 74 4e 75 6c 6c 3a 20 7b 0a 20 20 61 73 73 65  ftNull: {.  asse
a450: 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26  rt( pOp->p1>0 &&
a460: 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d   pOp->p1<=(p->nM
a470: 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
a480: 72 29 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26  r) );.  pOut = &
a490: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
a4a0: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 28   pOut->flags = (
a4b0: 70 4f 75 74 2d 3e 66 6c 61 67 73 26 7e 28 4d 45  pOut->flags&~(ME
a4c0: 4d 5f 55 6e 64 65 66 69 6e 65 64 7c 4d 45 4d 5f  M_Undefined|MEM_
a4d0: 41 66 66 4d 61 73 6b 29 29 7c 4d 45 4d 5f 4e 75  AffMask))|MEM_Nu
a4e0: 6c 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  ll;.  break;.}..
a4f0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 6c 6f 62 20  /* Opcode: Blob 
a500: 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20  P1 P2 * P4 *.** 
a510: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
a520: 50 34 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a  P4 (len=P1).**.*
a530: 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61  * P4 points to a
a540: 20 62 6c 6f 62 20 6f 66 20 64 61 74 61 20 50 31   blob of data P1
a550: 20 62 79 74 65 73 20 6c 6f 6e 67 2e 20 20 53 74   bytes long.  St
a560: 6f 72 65 20 74 68 69 73 0a 2a 2a 20 62 6c 6f 62  ore this.** blob
a570: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
a580: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 6c 6f 62  .*/.case OP_Blob
a590: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
a5a0: 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
a5b0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 20  assert( pOp->p1 
a5c0: 3c 3d 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45  <= SQLITE_MAX_LE
a5d0: 4e 47 54 48 20 29 3b 0a 20 20 70 4f 75 74 20 3d  NGTH );.  pOut =
a5e0: 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
a5f0: 70 2c 20 70 4f 70 29 3b 0a 20 20 73 71 6c 69 74  p, pOp);.  sqlit
a600: 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28  e3VdbeMemSetStr(
a610: 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c  pOut, pOp->p4.z,
a620: 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30 29 3b   pOp->p1, 0, 0);
a630: 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65  .  pOut->enc = e
a640: 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54  ncoding;.  UPDAT
a650: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
a660: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
a670: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 72  ../* Opcode: Var
a680: 69 61 62 6c 65 20 50 31 20 50 32 20 2a 20 50 34  iable P1 P2 * P4
a690: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
a6a0: 72 5b 50 32 5d 3d 70 61 72 61 6d 65 74 65 72 28  r[P2]=parameter(
a6b0: 50 31 2c 50 34 29 0a 2a 2a 0a 2a 2a 20 54 72 61  P1,P4).**.** Tra
a6c0: 6e 73 66 65 72 20 74 68 65 20 76 61 6c 75 65 73  nsfer the values
a6d0: 20 6f 66 20 62 6f 75 6e 64 20 70 61 72 61 6d 65   of bound parame
a6e0: 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69  ter P1 into regi
a6f0: 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66  ster P2.**.** If
a700: 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 20 69   the parameter i
a710: 73 20 6e 61 6d 65 64 2c 20 74 68 65 6e 20 69 74  s named, then it
a720: 73 20 6e 61 6d 65 20 61 70 70 65 61 72 73 20 69  s name appears i
a730: 6e 20 50 34 2e 0a 2a 2a 20 54 68 65 20 50 34 20  n P4..** The P4 
a740: 76 61 6c 75 65 20 69 73 20 75 73 65 64 20 62 79  value is used by
a750: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61   sqlite3_bind_pa
a760: 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 29 2e 0a  rameter_name()..
a770: 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 72 69 61  */.case OP_Varia
a780: 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ble: {          
a790: 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 4d    /* out2 */.  M
a7a0: 65 6d 20 2a 70 56 61 72 3b 20 20 20 20 20 20 20  em *pVar;       
a7b0: 2f 2a 20 56 61 6c 75 65 20 62 65 69 6e 67 20 74  /* Value being t
a7c0: 72 61 6e 73 66 65 72 72 65 64 20 2a 2f 0a 0a 20  ransferred */.. 
a7d0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
a7e0: 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70  >0 && pOp->p1<=p
a7f0: 2d 3e 6e 56 61 72 20 29 3b 0a 20 20 61 73 73 65  ->nVar );.  asse
a800: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30  rt( pOp->p4.z==0
a810: 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 73   || pOp->p4.z==s
a820: 71 6c 69 74 65 33 56 4c 69 73 74 4e 75 6d 54 6f  qlite3VListNumTo
a830: 4e 61 6d 65 28 70 2d 3e 70 56 4c 69 73 74 2c 70  Name(p->pVList,p
a840: 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 70 56 61  Op->p1) );.  pVa
a850: 72 20 3d 20 26 70 2d 3e 61 56 61 72 5b 70 4f 70  r = &p->aVar[pOp
a860: 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20 20 69 66 28  ->p1 - 1];.  if(
a870: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54   sqlite3VdbeMemT
a880: 6f 6f 42 69 67 28 70 56 61 72 29 20 29 7b 0a 20  ooBig(pVar) ){. 
a890: 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
a8a0: 0a 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26 61  .  }.  pOut = &a
a8b0: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
a8c0: 69 66 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d  if( VdbeMemDynam
a8d0: 69 63 28 70 4f 75 74 29 20 29 20 73 71 6c 69 74  ic(pOut) ) sqlit
a8e0: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
a8f0: 28 70 4f 75 74 29 3b 0a 20 20 6d 65 6d 63 70 79  (pOut);.  memcpy
a900: 28 70 4f 75 74 2c 20 70 56 61 72 2c 20 4d 45 4d  (pOut, pVar, MEM
a910: 43 45 4c 4c 53 49 5a 45 29 3b 0a 20 20 70 4f 75  CELLSIZE);.  pOu
a920: 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45  t->flags &= ~(ME
a930: 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29  M_Dyn|MEM_Ephem)
a940: 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
a950: 7c 3d 20 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  |= MEM_Static|ME
a960: 4d 5f 46 72 6f 6d 42 69 6e 64 3b 0a 20 20 55 50  M_FromBind;.  UP
a970: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
a980: 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  E(pOut);.  break
a990: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
a9a0: 4d 6f 76 65 20 50 31 20 50 32 20 50 33 20 2a 20  Move P1 P2 P3 * 
a9b0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
a9c0: 5b 50 32 40 50 33 5d 3d 72 5b 50 31 40 50 33 5d  [P2@P3]=r[P1@P3]
a9d0: 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20  .**.** Move the 
a9e0: 50 33 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  P3 values in reg
a9f0: 69 73 74 65 72 20 50 31 2e 2e 50 31 2b 50 33 2d  ister P1..P1+P3-
aa00: 31 20 6f 76 65 72 20 69 6e 74 6f 0a 2a 2a 20 72  1 over into.** r
aa10: 65 67 69 73 74 65 72 73 20 50 32 2e 2e 50 32 2b  egisters P2..P2+
aa20: 50 33 2d 31 2e 20 20 52 65 67 69 73 74 65 72 73  P3-1.  Registers
aa30: 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 61 72 65   P1..P1+P3-1 are
aa40: 0a 2a 2a 20 6c 65 66 74 20 68 6f 6c 64 69 6e 67  .** left holding
aa50: 20 61 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20   a NULL.  It is 
aa60: 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 72 65 67  an error for reg
aa70: 69 73 74 65 72 20 72 61 6e 67 65 73 0a 2a 2a 20  ister ranges.** 
aa80: 50 31 2e 2e 50 31 2b 50 33 2d 31 20 61 6e 64 20  P1..P1+P3-1 and 
aa90: 50 32 2e 2e 50 32 2b 50 33 2d 31 20 74 6f 20 6f  P2..P2+P3-1 to o
aaa0: 76 65 72 6c 61 70 2e 20 20 49 74 20 69 73 20 61  verlap.  It is a
aab0: 6e 20 65 72 72 6f 72 0a 2a 2a 20 66 6f 72 20 50  n error.** for P
aac0: 33 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61  3 to be less tha
aad0: 6e 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  n 1..*/.case OP_
aae0: 4d 6f 76 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b  Move: {.  int n;
aaf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
ab00: 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72  mber of register
ab10: 73 20 6c 65 66 74 20 74 6f 20 63 6f 70 79 20 2a  s left to copy *
ab20: 2f 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20  /.  int p1;     
ab30: 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
ab40: 20 74 6f 20 63 6f 70 79 20 66 72 6f 6d 20 2a 2f   to copy from */
ab50: 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20  .  int p2;      
ab60: 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
ab70: 74 6f 20 63 6f 70 79 20 74 6f 20 2a 2f 0a 0a 20  to copy to */.. 
ab80: 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20   n = pOp->p3;.  
ab90: 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  p1 = pOp->p1;.  
aba0: 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  p2 = pOp->p2;.  
abb0: 61 73 73 65 72 74 28 20 6e 3e 30 20 26 26 20 70  assert( n>0 && p
abc0: 31 3e 30 20 26 26 20 70 32 3e 30 20 29 3b 0a 20  1>0 && p2>0 );. 
abd0: 20 61 73 73 65 72 74 28 20 70 31 2b 6e 3c 3d 70   assert( p1+n<=p
abe0: 32 20 7c 7c 20 70 32 2b 6e 3c 3d 70 31 20 29 3b  2 || p2+n<=p1 );
abf0: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
ac00: 5b 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  [p1];.  pOut = &
ac10: 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 64 6f 7b 0a  aMem[p2];.  do{.
ac20: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 75 74      assert( pOut
ac30: 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d  <=&aMem[(p->nMem
ac40: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
ac50: 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ] );.    assert(
ac60: 20 70 49 6e 31 3c 3d 26 61 4d 65 6d 5b 28 70 2d   pIn1<=&aMem[(p-
ac70: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
ac80: 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73  rsor)] );.    as
ac90: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
aca0: 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 6d 65  (pIn1) );.    me
acb0: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
acc0: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 73 71 6c  , pOut);.    sql
acd0: 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28  ite3VdbeMemMove(
ace0: 70 4f 75 74 2c 20 70 49 6e 31 29 3b 0a 23 69 66  pOut, pIn1);.#if
acf0: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
ad00: 0a 20 20 20 20 69 66 28 20 70 4f 75 74 2d 3e 70  .    if( pOut->p
ad10: 53 63 6f 70 79 46 72 6f 6d 3e 3d 26 61 4d 65 6d  ScopyFrom>=&aMem
ad20: 5b 70 31 5d 20 26 26 20 70 4f 75 74 2d 3e 70 53  [p1] && pOut->pS
ad30: 63 6f 70 79 46 72 6f 6d 3c 70 4f 75 74 20 29 7b  copyFrom<pOut ){
ad40: 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 70 53 63  .      pOut->pSc
ad50: 6f 70 79 46 72 6f 6d 20 2b 3d 20 70 4f 70 2d 3e  opyFrom += pOp->
ad60: 70 32 20 2d 20 70 31 3b 0a 20 20 20 20 7d 0a 23  p2 - p1;.    }.#
ad70: 65 6e 64 69 66 0a 20 20 20 20 44 65 65 70 68 65  endif.    Deephe
ad80: 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a  meralize(pOut);.
ad90: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
ada0: 43 45 28 70 32 2b 2b 2c 20 70 4f 75 74 29 3b 0a  CE(p2++, pOut);.
adb0: 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 20 20      pIn1++;.    
adc0: 70 4f 75 74 2b 2b 3b 0a 20 20 7d 77 68 69 6c 65  pOut++;.  }while
add0: 28 20 2d 2d 6e 20 29 3b 0a 20 20 62 72 65 61 6b  ( --n );.  break
ade0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
adf0: 43 6f 70 79 20 50 31 20 50 32 20 50 33 20 2a 20  Copy P1 P2 P3 * 
ae00: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
ae10: 5b 50 32 40 50 33 2b 31 5d 3d 72 5b 50 31 40 50  [P2@P3+1]=r[P1@P
ae20: 33 2b 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20  3+1].**.** Make 
ae30: 61 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74  a copy of regist
ae40: 65 72 73 20 50 31 2e 2e 50 31 2b 50 33 20 69 6e  ers P1..P1+P3 in
ae50: 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 32 2e  to registers P2.
ae60: 2e 50 32 2b 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68  .P2+P3..**.** Th
ae70: 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d  is instruction m
ae80: 61 6b 65 73 20 61 20 64 65 65 70 20 63 6f 70 79  akes a deep copy
ae90: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20   of the value.  
aea0: 41 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 69  A duplicate.** i
aeb0: 73 20 6d 61 64 65 20 6f 66 20 61 6e 79 20 73 74  s made of any st
aec0: 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 63 6f 6e  ring or blob con
aed0: 73 74 61 6e 74 2e 20 20 53 65 65 20 61 6c 73 6f  stant.  See also
aee0: 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61   OP_SCopy..*/.ca
aef0: 73 65 20 4f 50 5f 43 6f 70 79 3a 20 7b 0a 20 20  se OP_Copy: {.  
af00: 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f  int n;..  n = pO
af10: 70 2d 3e 70 33 3b 0a 20 20 70 49 6e 31 20 3d 20  p->p3;.  pIn1 = 
af20: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
af30: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
af40: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
af50: 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b  t( pOut!=pIn1 );
af60: 0a 20 20 77 68 69 6c 65 28 20 31 20 29 7b 0a 20  .  while( 1 ){. 
af70: 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
af80: 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20  nge(p, pOut);.  
af90: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
afa0: 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74  ShallowCopy(pOut
afb0: 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65  , pIn1, MEM_Ephe
afc0: 6d 29 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65  m);.    Deepheme
afd0: 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 23 69  ralize(pOut);.#i
afe0: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
aff0: 47 0a 20 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f  G.    pOut->pSco
b000: 70 79 46 72 6f 6d 20 3d 20 30 3b 0a 23 65 6e 64  pyFrom = 0;.#end
b010: 69 66 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  if.    REGISTER_
b020: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 70 4f  TRACE(pOp->p2+pO
b030: 70 2d 3e 70 33 2d 6e 2c 20 70 4f 75 74 29 3b 0a  p->p3-n, pOut);.
b040: 20 20 20 20 69 66 28 20 28 6e 2d 2d 29 3d 3d 30      if( (n--)==0
b050: 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 70 4f   ) break;.    pO
b060: 75 74 2b 2b 3b 0a 20 20 20 20 70 49 6e 31 2b 2b  ut++;.    pIn1++
b070: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
b080: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 43 6f  ../* Opcode: SCo
b090: 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  py P1 P2 * * *.*
b0a0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
b0b0: 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61  ]=r[P1].**.** Ma
b0c0: 6b 65 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70  ke a shallow cop
b0d0: 79 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  y of register P1
b0e0: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
b0f0: 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  2..**.** This in
b100: 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20  struction makes 
b110: 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f  a shallow copy o
b120: 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20 49 66  f the value.  If
b130: 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   the value.** is
b140: 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f   a string or blo
b150: 62 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 70 79  b, then the copy
b160: 20 69 73 20 6f 6e 6c 79 20 61 20 70 6f 69 6e 74   is only a point
b170: 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6f 72 69  er to the.** ori
b180: 67 69 6e 61 6c 20 61 6e 64 20 68 65 6e 63 65 20  ginal and hence 
b190: 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  if the original 
b1a0: 63 68 61 6e 67 65 73 20 73 6f 20 77 69 6c 6c 20  changes so will 
b1b0: 74 68 65 20 63 6f 70 79 2e 0a 2a 2a 20 57 6f 72  the copy..** Wor
b1c0: 73 65 2c 20 69 66 20 74 68 65 20 6f 72 69 67 69  se, if the origi
b1d0: 6e 61 6c 20 69 73 20 64 65 61 6c 6c 6f 63 61 74  nal is deallocat
b1e0: 65 64 2c 20 74 68 65 20 63 6f 70 79 20 62 65 63  ed, the copy bec
b1f0: 6f 6d 65 73 20 69 6e 76 61 6c 69 64 2e 0a 2a 2a  omes invalid..**
b200: 20 54 68 75 73 20 74 68 65 20 70 72 6f 67 72 61   Thus the progra
b210: 6d 20 6d 75 73 74 20 67 75 61 72 61 6e 74 65 65  m must guarantee
b220: 20 74 68 61 74 20 74 68 65 20 6f 72 69 67 69 6e   that the origin
b230: 61 6c 20 77 69 6c 6c 20 6e 6f 74 20 63 68 61 6e  al will not chan
b240: 67 65 0a 2a 2a 20 64 75 72 69 6e 67 20 74 68 65  ge.** during the
b250: 20 6c 69 66 65 74 69 6d 65 20 6f 66 20 74 68 65   lifetime of the
b260: 20 63 6f 70 79 2e 20 20 55 73 65 20 4f 50 5f 43   copy.  Use OP_C
b270: 6f 70 79 20 74 6f 20 6d 61 6b 65 20 61 20 63 6f  opy to make a co
b280: 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f 70 79 2e 0a  mplete.** copy..
b290: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 43 6f 70 79  */.case OP_SCopy
b2a0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
b2b0: 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31  * out2 */.  pIn1
b2c0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
b2d0: 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
b2e0: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
b2f0: 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31  sert( pOut!=pIn1
b300: 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   );.  sqlite3Vdb
b310: 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28  eMemShallowCopy(
b320: 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f  pOut, pIn1, MEM_
b330: 45 70 68 65 6d 29 3b 0a 23 69 66 64 65 66 20 53  Ephem);.#ifdef S
b340: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 4f  QLITE_DEBUG.  pO
b350: 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d  ut->pScopyFrom =
b360: 20 70 49 6e 31 3b 0a 20 20 70 4f 75 74 2d 3e 6d   pIn1;.  pOut->m
b370: 53 63 6f 70 79 46 6c 61 67 73 20 3d 20 70 49 6e  ScopyFlags = pIn
b380: 31 2d 3e 66 6c 61 67 73 3b 0a 23 65 6e 64 69 66  1->flags;.#endif
b390: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
b3a0: 4f 70 63 6f 64 65 3a 20 49 6e 74 43 6f 70 79 20  Opcode: IntCopy 
b3b0: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
b3c0: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
b3d0: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73  [P1].**.** Trans
b3e0: 66 65 72 20 74 68 65 20 69 6e 74 65 67 65 72 20  fer the integer 
b3f0: 76 61 6c 75 65 20 68 65 6c 64 20 69 6e 20 72 65  value held in re
b400: 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72  gister P1 into r
b410: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
b420: 2a 20 54 68 69 73 20 69 73 20 61 6e 20 6f 70 74  * This is an opt
b430: 69 6d 69 7a 65 64 20 76 65 72 73 69 6f 6e 20 6f  imized version o
b440: 66 20 53 43 6f 70 79 20 74 68 61 74 20 77 6f 72  f SCopy that wor
b450: 6b 73 20 6f 6e 6c 79 20 66 6f 72 20 69 6e 74 65  ks only for inte
b460: 67 65 72 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a  ger.** values..*
b470: 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 43 6f 70  /.case OP_IntCop
b480: 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  y: {            
b490: 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e  /* out2 */.  pIn
b4a0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
b4b0: 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  1];.  assert( (p
b4c0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
b4d0: 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 70 4f  _Int)!=0 );.  pO
b4e0: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
b4f0: 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  p2];.  sqlite3Vd
b500: 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f  beMemSetInt64(pO
b510: 75 74 2c 20 70 49 6e 31 2d 3e 75 2e 69 29 3b 0a  ut, pIn1->u.i);.
b520: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
b530: 70 63 6f 64 65 3a 20 52 65 73 75 6c 74 52 6f 77  pcode: ResultRow
b540: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
b550: 53 79 6e 6f 70 73 69 73 3a 20 6f 75 74 70 75 74  Synopsis: output
b560: 3d 72 5b 50 31 40 50 32 5d 0a 2a 2a 0a 2a 2a 20  =r[P1@P2].**.** 
b570: 54 68 65 20 72 65 67 69 73 74 65 72 73 20 50 31  The registers P1
b580: 20 74 68 72 6f 75 67 68 20 50 31 2b 50 32 2d 31   through P1+P2-1
b590: 20 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e 67 6c   contain a singl
b5a0: 65 20 72 6f 77 20 6f 66 0a 2a 2a 20 72 65 73 75  e row of.** resu
b5b0: 6c 74 73 2e 20 54 68 69 73 20 6f 70 63 6f 64 65  lts. This opcode
b5c0: 20 63 61 75 73 65 73 20 74 68 65 20 73 71 6c 69   causes the sqli
b5d0: 74 65 33 5f 73 74 65 70 28 29 20 63 61 6c 6c 20  te3_step() call 
b5e0: 74 6f 20 74 65 72 6d 69 6e 61 74 65 0a 2a 2a 20  to terminate.** 
b5f0: 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 52  with an SQLITE_R
b600: 4f 57 20 72 65 74 75 72 6e 20 63 6f 64 65 20 61  OW return code a
b610: 6e 64 20 69 74 20 73 65 74 73 20 75 70 20 74 68  nd it sets up th
b620: 65 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 0a 2a  e sqlite3_stmt.*
b630: 2a 20 73 74 72 75 63 74 75 72 65 20 74 6f 20 70  * structure to p
b640: 72 6f 76 69 64 65 20 61 63 63 65 73 73 20 74 6f  rovide access to
b650: 20 74 68 65 20 72 28 50 31 29 2e 2e 72 28 50 31   the r(P1)..r(P1
b660: 2b 50 32 2d 31 29 20 76 61 6c 75 65 73 20 61 73  +P2-1) values as
b670: 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20 72  .** the result r
b680: 6f 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  ow..*/.case OP_R
b690: 65 73 75 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d 65  esultRow: {.  Me
b6a0: 6d 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74 20 69  m *pMem;.  int i
b6b0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6e  ;.  assert( p->n
b6c0: 52 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e  ResColumn==pOp->
b6d0: 70 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  p2 );.  assert( 
b6e0: 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61  pOp->p1>0 );.  a
b6f0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 2b 70  ssert( pOp->p1+p
b700: 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p2<=(p->nMem
b710: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
b720: 2b 31 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74  +1 );..  /* If t
b730: 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20 68 61  his statement ha
b740: 73 20 76 69 6f 6c 61 74 65 64 20 69 6d 6d 65 64  s violated immed
b750: 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  iate foreign key
b760: 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20 64 6f   constraints, do
b770: 0a 20 20 2a 2a 20 6e 6f 74 20 72 65 74 75 72 6e  .  ** not return
b780: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
b790: 6f 77 73 20 6d 6f 64 69 66 69 65 64 2e 20 41 6e  ows modified. An
b7a0: 64 20 64 6f 20 6e 6f 74 20 52 45 4c 45 41 53 45  d do not RELEASE
b7b0: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 20   the statement. 
b7c0: 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e   ** transaction.
b7d0: 20 49 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20   It needs to be 
b7e0: 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 2a 2f  rolled back.  */
b7f0: 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b  .  if( SQLITE_OK
b800: 21 3d 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56  !=(rc = sqlite3V
b810: 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 30 29  dbeCheckFk(p, 0)
b820: 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ) ){.    assert(
b830: 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54   db->flags&SQLIT
b840: 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20  E_CountRows );. 
b850: 20 20 20 61 73 73 65 72 74 28 20 70 2d 3e 75 73     assert( p->us
b860: 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b  esStmtJournal );
b870: 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f  .    goto abort_
b880: 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
b890: 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 53  }..  /* If the S
b8a0: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
b8b0: 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 73  flag is set in s
b8c0: 71 6c 69 74 65 33 2e 66 6c 61 67 73 20 6d 61 73  qlite3.flags mas
b8d0: 6b 2c 20 74 68 65 6e 20 0a 20 20 2a 2a 20 44 4d  k, then .  ** DM
b8e0: 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 76  L statements inv
b8f0: 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20  oke this opcode 
b900: 74 6f 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75  to return the nu
b910: 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 0a 20 20  mber of rows .  
b920: 2a 2a 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 74  ** modified to t
b930: 68 65 20 75 73 65 72 2e 20 54 68 69 73 20 69 73  he user. This is
b940: 20 74 68 65 20 6f 6e 6c 79 20 77 61 79 20 74 68   the only way th
b950: 61 74 20 61 20 56 4d 20 74 68 61 74 0a 20 20 2a  at a VM that.  *
b960: 2a 20 6f 70 65 6e 73 20 61 20 73 74 61 74 65 6d  * opens a statem
b970: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
b980: 6d 61 79 20 69 6e 76 6f 6b 65 20 74 68 69 73 20  may invoke this 
b990: 6f 70 63 6f 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a  opcode..  **.  *
b9a0: 2a 20 49 6e 20 63 61 73 65 20 74 68 69 73 20 69  * In case this i
b9b0: 73 20 73 75 63 68 20 61 20 73 74 61 74 65 6d 65  s such a stateme
b9c0: 6e 74 2c 20 63 6c 6f 73 65 20 61 6e 79 20 73 74  nt, close any st
b9d0: 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
b9e0: 69 6f 6e 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20  ion.  ** opened 
b9f0: 62 79 20 74 68 69 73 20 56 4d 20 62 65 66 6f 72  by this VM befor
ba00: 65 20 72 65 74 75 72 6e 69 6e 67 20 63 6f 6e 74  e returning cont
ba10: 72 6f 6c 20 74 6f 20 74 68 65 20 75 73 65 72 2e  rol to the user.
ba20: 20 54 68 69 73 20 69 73 20 74 6f 0a 20 20 2a 2a   This is to.  **
ba30: 20 65 6e 73 75 72 65 20 74 68 61 74 20 73 74 61   ensure that sta
ba40: 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69  tement-transacti
ba50: 6f 6e 73 20 61 72 65 20 61 6c 77 61 79 73 20 6e  ons are always n
ba60: 65 73 74 65 64 2c 20 6e 6f 74 20 6f 76 65 72 6c  ested, not overl
ba70: 61 70 70 69 6e 67 2e 0a 20 20 2a 2a 20 49 66 20  apping..  ** If 
ba80: 74 68 65 20 6f 70 65 6e 20 73 74 61 74 65 6d 65  the open stateme
ba90: 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  nt-transaction i
baa0: 73 20 6e 6f 74 20 63 6c 6f 73 65 64 20 68 65 72  s not closed her
bab0: 65 2c 20 74 68 65 6e 20 74 68 65 20 75 73 65 72  e, then the user
bac0: 0a 20 20 2a 2a 20 6d 61 79 20 73 74 65 70 20 61  .  ** may step a
bad0: 6e 6f 74 68 65 72 20 56 4d 20 74 68 61 74 20 6f  nother VM that o
bae0: 70 65 6e 73 20 69 74 73 20 6f 77 6e 20 73 74 61  pens its own sta
baf0: 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
bb00: 6f 6e 2e 20 54 68 69 73 0a 20 20 2a 2a 20 6d 61  on. This.  ** ma
bb10: 79 20 6c 65 61 64 20 74 6f 20 6f 76 65 72 6c 61  y lead to overla
bb20: 70 70 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20  pping statement 
bb30: 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 0a 20 20  transactions..  
bb40: 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73 74 61 74  **.  ** The stat
bb50: 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
bb60: 6e 20 69 73 20 6e 65 76 65 72 20 61 20 74 6f 70  n is never a top
bb70: 2d 6c 65 76 65 6c 20 74 72 61 6e 73 61 63 74 69  -level transacti
bb80: 6f 6e 2e 20 20 48 65 6e 63 65 0a 20 20 2a 2a 20  on.  Hence.  ** 
bb90: 74 68 65 20 52 45 4c 45 41 53 45 20 63 61 6c 6c  the RELEASE call
bba0: 20 62 65 6c 6f 77 20 63 61 6e 20 6e 65 76 65 72   below can never
bbb0: 20 66 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 61 73   fail..  */.  as
bbc0: 73 65 72 74 28 20 70 2d 3e 69 53 74 61 74 65 6d  sert( p->iStatem
bbd0: 65 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c  ent==0 || db->fl
bbe0: 61 67 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74  ags&SQLITE_Count
bbf0: 52 6f 77 73 20 29 3b 0a 20 20 72 63 20 3d 20 73  Rows );.  rc = s
bc00: 71 6c 69 74 65 33 56 64 62 65 43 6c 6f 73 65 53  qlite3VdbeCloseS
bc10: 74 61 74 65 6d 65 6e 74 28 70 2c 20 53 41 56 45  tatement(p, SAVE
bc20: 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 29 3b 0a  POINT_RELEASE);.
bc30: 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
bc40: 4c 49 54 45 5f 4f 4b 20 29 3b 0a 0a 20 20 2f 2a  LITE_OK );..  /*
bc50: 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20   Invalidate all 
bc60: 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72  ephemeral cursor
bc70: 20 72 6f 77 20 63 61 63 68 65 73 20 2a 2f 0a 20   row caches */. 
bc80: 20 70 2d 3e 63 61 63 68 65 43 74 72 20 3d 20 28   p->cacheCtr = (
bc90: 70 2d 3e 63 61 63 68 65 43 74 72 20 2b 20 32 29  p->cacheCtr + 2)
bca0: 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73  |1;..  /* Make s
bcb0: 75 72 65 20 74 68 65 20 72 65 73 75 6c 74 73 20  ure the results 
bcc0: 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  of the current r
bcd0: 6f 77 20 61 72 65 20 5c 30 30 30 20 74 65 72 6d  ow are \000 term
bce0: 69 6e 61 74 65 64 0a 20 20 2a 2a 20 61 6e 64 20  inated.  ** and 
bcf0: 68 61 76 65 20 61 6e 20 61 73 73 69 67 6e 65 64  have an assigned
bd00: 20 74 79 70 65 2e 20 20 54 68 65 20 72 65 73 75   type.  The resu
bd10: 6c 74 73 20 61 72 65 20 64 65 2d 65 70 68 65 6d  lts are de-ephem
bd20: 65 72 61 6c 69 7a 65 64 20 61 73 0a 20 20 2a 2a  eralized as.  **
bd30: 20 61 20 73 69 64 65 20 65 66 66 65 63 74 2e 0a   a side effect..
bd40: 20 20 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20 70 2d    */.  pMem = p-
bd50: 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 26 61  >pResultSet = &a
bd60: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
bd70: 66 6f 72 28 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e  for(i=0; i<pOp->
bd80: 70 32 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73  p2; i++){.    as
bd90: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
bda0: 28 26 70 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20 20  (&pMem[i]) );.  
bdb0: 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65    Deephemeralize
bdc0: 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20  (&pMem[i]);.    
bdd0: 61 73 73 65 72 74 28 20 28 70 4d 65 6d 5b 69 5d  assert( (pMem[i]
bde0: 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 45 70 68  .flags & MEM_Eph
bdf0: 65 6d 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 20  em)==0.         
be00: 20 20 20 7c 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66     || (pMem[i].f
be10: 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c  lags & (MEM_Str|
be20: 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b  MEM_Blob))==0 );
be30: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
be40: 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28  MemNulTerminate(
be50: 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 52  &pMem[i]);.    R
be60: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
be70: 70 2d 3e 70 31 2b 69 2c 20 26 70 4d 65 6d 5b 69  p->p1+i, &pMem[i
be80: 5d 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64 62  ]);.  }.  if( db
be90: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
bea0: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20   goto no_mem;.. 
beb0: 20 69 66 28 20 64 62 2d 3e 6d 54 72 61 63 65 20   if( db->mTrace 
bec0: 26 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 52  & SQLITE_TRACE_R
bed0: 4f 57 20 29 7b 0a 20 20 20 20 64 62 2d 3e 78 54  OW ){.    db->xT
bee0: 72 61 63 65 28 53 51 4c 49 54 45 5f 54 52 41 43  race(SQLITE_TRAC
bef0: 45 5f 52 4f 57 2c 20 64 62 2d 3e 70 54 72 61 63  E_ROW, db->pTrac
bf00: 65 41 72 67 2c 20 70 2c 20 30 29 3b 0a 20 20 7d  eArg, p, 0);.  }
bf10: 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e 20 53 51  ..  /* Return SQ
bf20: 4c 49 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20 20  LITE_ROW.  */.  
bf30: 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f  p->pc = (int)(pO
bf40: 70 20 2d 20 61 4f 70 29 20 2b 20 31 3b 0a 20 20  p - aOp) + 1;.  
bf50: 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 4f 57 3b  rc = SQLITE_ROW;
bf60: 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74  .  goto vdbe_ret
bf70: 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  urn;.}../* Opcod
bf80: 65 3a 20 43 6f 6e 63 61 74 20 50 31 20 50 32 20  e: Concat P1 P2 
bf90: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
bfa0: 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2b  is: r[P3]=r[P2]+
bfb0: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20  r[P1].**.** Add 
bfc0: 74 68 65 20 74 65 78 74 20 69 6e 20 72 65 67 69  the text in regi
bfd0: 73 74 65 72 20 50 31 20 6f 6e 74 6f 20 74 68 65  ster P1 onto the
bfe0: 20 65 6e 64 20 6f 66 20 74 68 65 20 74 65 78 74   end of the text
bff0: 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20   in.** register 
c000: 50 32 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  P2 and store the
c010: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
c020: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
c030: 74 68 65 72 20 74 68 65 20 50 31 20 6f 72 20 50  ther the P1 or P
c040: 32 20 74 65 78 74 20 61 72 65 20 4e 55 4c 4c 20  2 text are NULL 
c050: 74 68 65 6e 20 73 74 6f 72 65 20 4e 55 4c 4c 20  then store NULL 
c060: 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 20 20 50  in P3..**.**   P
c070: 33 20 3d 20 50 32 20 7c 7c 20 50 31 0a 2a 2a 0a  3 = P2 || P1.**.
c080: 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c  ** It is illegal
c090: 20 66 6f 72 20 50 31 20 61 6e 64 20 50 33 20 74   for P1 and P3 t
c0a0: 6f 20 62 65 20 74 68 65 20 73 61 6d 65 20 72 65  o be the same re
c0b0: 67 69 73 74 65 72 2e 20 53 6f 6d 65 74 69 6d 65  gister. Sometime
c0c0: 73 2c 0a 2a 2a 20 69 66 20 50 33 20 69 73 20 74  s,.** if P3 is t
c0d0: 68 65 20 73 61 6d 65 20 72 65 67 69 73 74 65 72  he same register
c0e0: 20 61 73 20 50 32 2c 20 74 68 65 20 69 6d 70 6c   as P2, the impl
c0f0: 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73 20 61 62  ementation is ab
c100: 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 61  le.** to avoid a
c110: 20 6d 65 6d 63 70 79 28 29 2e 0a 2a 2f 0a 63 61   memcpy()..*/.ca
c120: 73 65 20 4f 50 5f 43 6f 6e 63 61 74 3a 20 7b 20  se OP_Concat: { 
c130: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
c140: 65 20 61 73 20 54 4b 5f 43 4f 4e 43 41 54 2c 20  e as TK_CONCAT, 
c150: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
c160: 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b 20 20  /.  i64 nByte;  
c170: 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c          /* Total
c180: 20 73 69 7a 65 20 6f 66 20 74 68 65 20 6f 75 74   size of the out
c190: 70 75 74 20 73 74 72 69 6e 67 20 6f 72 20 62 6c  put string or bl
c1a0: 6f 62 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67  ob */.  u16 flag
c1b0: 73 31 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49  s1;         /* I
c1c0: 6e 69 74 69 61 6c 20 66 6c 61 67 73 20 66 6f 72  nitial flags for
c1d0: 20 50 31 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61   P1 */.  u16 fla
c1e0: 67 73 32 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  gs2;         /* 
c1f0: 49 6e 69 74 69 61 6c 20 66 6c 61 67 73 20 66 6f  Initial flags fo
c200: 72 20 50 32 20 2a 2f 0a 0a 20 20 70 49 6e 31 20  r P2 */..  pIn1 
c210: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
c220: 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
c230: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75  [pOp->p2];.  pOu
c240: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
c250: 33 5d 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20  3];.  testcase( 
c260: 70 49 6e 31 3d 3d 70 49 6e 32 20 29 3b 0a 20 20  pIn1==pIn2 );.  
c270: 74 65 73 74 63 61 73 65 28 20 70 4f 75 74 3d 3d  testcase( pOut==
c280: 70 49 6e 32 20 29 3b 0a 20 20 61 73 73 65 72 74  pIn2 );.  assert
c290: 28 20 70 49 6e 31 21 3d 70 4f 75 74 20 29 3b 0a  ( pIn1!=pOut );.
c2a0: 20 20 66 6c 61 67 73 31 20 3d 20 70 49 6e 31 2d    flags1 = pIn1-
c2b0: 3e 66 6c 61 67 73 3b 0a 20 20 74 65 73 74 63 61  >flags;.  testca
c2c0: 73 65 28 20 66 6c 61 67 73 31 20 26 20 4d 45 4d  se( flags1 & MEM
c2d0: 5f 4e 75 6c 6c 20 29 3b 0a 20 20 74 65 73 74 63  _Null );.  testc
c2e0: 61 73 65 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73  ase( pIn2->flags
c2f0: 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20   & MEM_Null );. 
c300: 20 69 66 28 20 28 66 6c 61 67 73 31 20 7c 20 70   if( (flags1 | p
c310: 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45  In2->flags) & ME
c320: 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71  M_Null ){.    sq
c330: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
c340: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62  ull(pOut);.    b
c350: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 66 28 20  reak;.  }.  if( 
c360: 28 66 6c 61 67 73 31 20 26 20 28 4d 45 4d 5f 53  (flags1 & (MEM_S
c370: 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30  tr|MEM_Blob))==0
c380: 20 29 7b 0a 20 20 20 20 69 66 28 20 73 71 6c 69   ){.    if( sqli
c390: 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67  te3VdbeMemString
c3a0: 69 66 79 28 70 49 6e 31 2c 65 6e 63 6f 64 69 6e  ify(pIn1,encodin
c3b0: 67 2c 30 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  g,0) ) goto no_m
c3c0: 65 6d 3b 0a 20 20 20 20 66 6c 61 67 73 31 20 3d  em;.    flags1 =
c3d0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 7e   pIn1->flags & ~
c3e0: 4d 45 4d 5f 53 74 72 3b 0a 20 20 7d 65 6c 73 65  MEM_Str;.  }else
c3f0: 20 69 66 28 20 28 66 6c 61 67 73 31 20 26 20 4d   if( (flags1 & M
c400: 45 4d 5f 5a 65 72 6f 29 21 3d 30 20 29 7b 0a 20  EM_Zero)!=0 ){. 
c410: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64     if( sqlite3Vd
c420: 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28  beMemExpandBlob(
c430: 70 49 6e 31 29 20 29 20 67 6f 74 6f 20 6e 6f 5f  pIn1) ) goto no_
c440: 6d 65 6d 3b 0a 20 20 20 20 66 6c 61 67 73 31 20  mem;.    flags1 
c450: 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  = pIn1->flags & 
c460: 7e 4d 45 4d 5f 53 74 72 3b 0a 20 20 7d 0a 20 20  ~MEM_Str;.  }.  
c470: 66 6c 61 67 73 32 20 3d 20 70 49 6e 32 2d 3e 66  flags2 = pIn2->f
c480: 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66 6c 61  lags;.  if( (fla
c490: 67 73 32 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d  gs2 & (MEM_Str|M
c4a0: 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 7b 0a  EM_Blob))==0 ){.
c4b0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56      if( sqlite3V
c4c0: 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28  dbeMemStringify(
c4d0: 70 49 6e 32 2c 65 6e 63 6f 64 69 6e 67 2c 30 29  pIn2,encoding,0)
c4e0: 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
c4f0: 20 20 20 20 66 6c 61 67 73 32 20 3d 20 70 49 6e      flags2 = pIn
c500: 32 2d 3e 66 6c 61 67 73 20 26 20 7e 4d 45 4d 5f  2->flags & ~MEM_
c510: 53 74 72 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  Str;.  }else if(
c520: 20 28 66 6c 61 67 73 32 20 26 20 4d 45 4d 5f 5a   (flags2 & MEM_Z
c530: 65 72 6f 29 21 3d 30 20 29 7b 0a 20 20 20 20 69  ero)!=0 ){.    i
c540: 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
c550: 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32  mExpandBlob(pIn2
c560: 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  ) ) goto no_mem;
c570: 0a 20 20 20 20 66 6c 61 67 73 32 20 3d 20 70 49  .    flags2 = pI
c580: 6e 32 2d 3e 66 6c 61 67 73 20 26 20 7e 4d 45 4d  n2->flags & ~MEM
c590: 5f 53 74 72 3b 0a 20 20 7d 0a 20 20 6e 42 79 74  _Str;.  }.  nByt
c5a0: 65 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20 70 49  e = pIn1->n + pI
c5b0: 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e 42 79  n2->n;.  if( nBy
c5c0: 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  te>db->aLimit[SQ
c5d0: 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
c5e0: 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  H] ){.    goto t
c5f0: 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 69 66  oo_big;.  }.  if
c600: 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
c610: 47 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74 29  Grow(pOut, (int)
c620: 6e 42 79 74 65 2b 33 2c 20 70 4f 75 74 3d 3d 70  nByte+3, pOut==p
c630: 49 6e 32 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  In2) ){.    goto
c640: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 4d   no_mem;.  }.  M
c650: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
c660: 75 74 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a 20 20  ut, MEM_Str);.  
c670: 69 66 28 20 70 4f 75 74 21 3d 70 49 6e 32 20 29  if( pOut!=pIn2 )
c680: 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 4f 75  {.    memcpy(pOu
c690: 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20 70  t->z, pIn2->z, p
c6a0: 49 6e 32 2d 3e 6e 29 3b 0a 20 20 20 20 61 73 73  In2->n);.    ass
c6b0: 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67  ert( (pIn2->flag
c6c0: 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20  s & MEM_Dyn) == 
c6d0: 28 66 6c 61 67 73 32 20 26 20 4d 45 4d 5f 44 79  (flags2 & MEM_Dy
c6e0: 6e 29 20 29 3b 0a 20 20 20 20 70 49 6e 32 2d 3e  n) );.    pIn2->
c6f0: 66 6c 61 67 73 20 3d 20 66 6c 61 67 73 32 3b 0a  flags = flags2;.
c700: 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70 4f    }.  memcpy(&pO
c710: 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20  ut->z[pIn2->n], 
c720: 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e  pIn1->z, pIn1->n
c730: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 49  );.  assert( (pI
c740: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
c750: 44 79 6e 29 20 3d 3d 20 28 66 6c 61 67 73 31 20  Dyn) == (flags1 
c760: 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20  & MEM_Dyn) );.  
c770: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 66 6c  pIn1->flags = fl
c780: 61 67 73 31 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b  ags1;.  pOut->z[
c790: 6e 42 79 74 65 5d 3d 30 3b 0a 20 20 70 4f 75 74  nByte]=0;.  pOut
c7a0: 2d 3e 7a 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30  ->z[nByte+1] = 0
c7b0: 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74  ;.  pOut->z[nByt
c7c0: 65 2b 32 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74  e+2] = 0;.  pOut
c7d0: 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54  ->flags |= MEM_T
c7e0: 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  erm;.  pOut->n =
c7f0: 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70   (int)nByte;.  p
c800: 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  Out->enc = encod
c810: 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ing;.  UPDATE_MA
c820: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
c830: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
c840: 20 4f 70 63 6f 64 65 3a 20 41 64 64 20 50 31 20   Opcode: Add P1 
c850: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
c860: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50  opsis: r[P3]=r[P
c870: 31 5d 2b 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 41  1]+r[P2].**.** A
c880: 64 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  dd the value in 
c890: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 74  register P1 to t
c8a0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
c8b0: 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73  ster P2.** and s
c8c0: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
c8d0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
c8e0: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
c8f0: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
c900: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
c910: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75  */./* Opcode: Mu
c920: 6c 74 69 70 6c 79 20 50 31 20 50 32 20 50 33 20  ltiply P1 P2 P3 
c930: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
c940: 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2a 72 5b 50   r[P3]=r[P1]*r[P
c950: 32 5d 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74  2].**.**.** Mult
c960: 69 70 6c 79 20 74 68 65 20 76 61 6c 75 65 20 69  iply the value i
c970: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79  n register P1 by
c980: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
c990: 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64  gister P2.** and
c9a0: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
c9b0: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
c9c0: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
c9d0: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
c9e0: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
c9f0: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
ca00: 53 75 62 74 72 61 63 74 20 50 31 20 50 32 20 50  Subtract P1 P2 P
ca10: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
ca20: 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2d 72  s: r[P3]=r[P2]-r
ca30: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 75 62 74 72  [P1].**.** Subtr
ca40: 61 63 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e  act the value in
ca50: 20 72 65 67 69 73 74 65 72 20 50 31 20 66 72 6f   register P1 fro
ca60: 6d 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  m the value in r
ca70: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e  egister P2.** an
ca80: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
ca90: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
caa0: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
cab0: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
cac0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
cad0: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
cae0: 20 44 69 76 69 64 65 20 50 31 20 50 32 20 50 33   Divide P1 P2 P3
caf0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
cb00: 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2f 72 5b  : r[P3]=r[P2]/r[
cb10: 50 31 5d 0a 2a 2a 0a 2a 2a 20 44 69 76 69 64 65  P1].**.** Divide
cb20: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
cb30: 67 69 73 74 65 72 20 50 31 20 62 79 20 74 68 65  gister P1 by the
cb40: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
cb50: 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f  er P2.** and sto
cb60: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
cb70: 20 72 65 67 69 73 74 65 72 20 50 33 20 28 50 33   register P3 (P3
cb80: 3d 50 32 2f 50 31 29 2e 20 49 66 20 74 68 65 20  =P2/P1). If the 
cb90: 76 61 6c 75 65 20 69 6e 20 0a 2a 2a 20 72 65 67  value in .** reg
cba0: 69 73 74 65 72 20 50 31 20 69 73 20 7a 65 72 6f  ister P1 is zero
cbb0: 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  , then the resul
cbc0: 74 20 69 73 20 4e 55 4c 4c 2e 20 49 66 20 65 69  t is NULL. If ei
cbd0: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 0a 2a  ther input is .*
cbe0: 2a 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  * NULL, the resu
cbf0: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
cc00: 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6d 61 69 6e  * Opcode: Remain
cc10: 64 65 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a  der P1 P2 P3 * *
cc20: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
cc30: 50 33 5d 3d 72 5b 50 32 5d 25 72 5b 50 31 5d 0a  P3]=r[P2]%r[P1].
cc40: 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65 20 74 68  **.** Compute th
cc50: 65 20 72 65 6d 61 69 6e 64 65 72 20 61 66 74 65  e remainder afte
cc60: 72 20 69 6e 74 65 67 65 72 20 72 65 67 69 73 74  r integer regist
cc70: 65 72 20 50 32 20 69 73 20 64 69 76 69 64 65 64  er P2 is divided
cc80: 20 62 79 20 0a 2a 2a 20 72 65 67 69 73 74 65 72   by .** register
cc90: 20 50 31 20 61 6e 64 20 73 74 6f 72 65 20 74 68   P1 and store th
cca0: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
ccb0: 73 74 65 72 20 50 33 2e 20 0a 2a 2a 20 49 66 20  ster P3. .** If 
ccc0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
ccd0: 69 73 74 65 72 20 50 31 20 69 73 20 7a 65 72 6f  ister P1 is zero
cce0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
ccf0: 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65  ULL..** If eithe
cd00: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
cd10: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
cd20: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
cd30: 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20 20  P_Add:          
cd40: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
cd50: 20 61 73 20 54 4b 5f 50 4c 55 53 2c 20 69 6e 31   as TK_PLUS, in1
cd60: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
cd70: 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a  ase OP_Subtract:
cd80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
cd90: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4d 49 4e 55   same as TK_MINU
cda0: 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  S, in1, in2, out
cdb0: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 6c  3 */.case OP_Mul
cdc0: 74 69 70 6c 79 3a 20 20 20 20 20 20 20 20 20 20  tiply:          
cdd0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
cde0: 4b 5f 53 54 41 52 2c 20 69 6e 31 2c 20 69 6e 32  K_STAR, in1, in2
cdf0: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
ce00: 50 5f 44 69 76 69 64 65 3a 20 20 20 20 20 20 20  P_Divide:       
ce10: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
ce20: 20 61 73 20 54 4b 5f 53 4c 41 53 48 2c 20 69 6e   as TK_SLASH, in
ce30: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
ce40: 63 61 73 65 20 4f 50 5f 52 65 6d 61 69 6e 64 65  case OP_Remainde
ce50: 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  r: {           /
ce60: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 45 4d  * same as TK_REM
ce70: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
ce80: 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 3b   */.  u16 flags;
ce90: 20 20 20 20 20 20 2f 2a 20 43 6f 6d 62 69 6e 65        /* Combine
cea0: 64 20 4d 45 4d 5f 2a 20 66 6c 61 67 73 20 66 72  d MEM_* flags fr
ceb0: 6f 6d 20 62 6f 74 68 20 69 6e 70 75 74 73 20 2a  om both inputs *
cec0: 2f 0a 20 20 75 31 36 20 74 79 70 65 31 3b 20 20  /.  u16 type1;  
ced0: 20 20 20 20 2f 2a 20 4e 75 6d 65 72 69 63 20 74      /* Numeric t
cee0: 79 70 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72  ype of left oper
cef0: 61 6e 64 20 2a 2f 0a 20 20 75 31 36 20 74 79 70  and */.  u16 typ
cf00: 65 32 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 65  e2;      /* Nume
cf10: 72 69 63 20 74 79 70 65 20 6f 66 20 72 69 67 68  ric type of righ
cf20: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69  t operand */.  i
cf30: 36 34 20 69 41 3b 20 20 20 20 20 20 20 20 20 2f  64 iA;         /
cf40: 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20  * Integer value 
cf50: 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20  of left operand 
cf60: 2a 2f 0a 20 20 69 36 34 20 69 42 3b 20 20 20 20  */.  i64 iB;    
cf70: 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20       /* Integer 
cf80: 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f  value of right o
cf90: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62  perand */.  doub
cfa0: 6c 65 20 72 41 3b 20 20 20 20 20 20 2f 2a 20 52  le rA;      /* R
cfb0: 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 6c 65 66  eal value of lef
cfc0: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64  t operand */.  d
cfd0: 6f 75 62 6c 65 20 72 42 3b 20 20 20 20 20 20 2f  ouble rB;      /
cfe0: 2a 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20  * Real value of 
cff0: 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f  right operand */
d000: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
d010: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 74 79 70  [pOp->p1];.  typ
d020: 65 31 20 3d 20 6e 75 6d 65 72 69 63 54 79 70 65  e1 = numericType
d030: 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d  (pIn1);.  pIn2 =
d040: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
d050: 0a 20 20 74 79 70 65 32 20 3d 20 6e 75 6d 65 72  .  type2 = numer
d060: 69 63 54 79 70 65 28 70 49 6e 32 29 3b 0a 20 20  icType(pIn2);.  
d070: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
d080: 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 20 3d  ->p3];.  flags =
d090: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70   pIn1->flags | p
d0a0: 49 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66  In2->flags;.  if
d0b0: 28 20 28 74 79 70 65 31 20 26 20 74 79 70 65 32  ( (type1 & type2
d0c0: 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
d0d0: 7b 0a 20 20 20 20 69 41 20 3d 20 70 49 6e 31 2d  {.    iA = pIn1-
d0e0: 3e 75 2e 69 3b 0a 20 20 20 20 69 42 20 3d 20 70  >u.i;.    iB = p
d0f0: 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 73 77  In2->u.i;.    sw
d100: 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  itch( pOp->opcod
d110: 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20  e ){.      case 
d120: 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 69 66  OP_Add:       if
d130: 28 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36  ( sqlite3AddInt6
d140: 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f  4(&iB,iA) ) goto
d150: 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b   fp_math;  break
d160: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
d170: 53 75 62 74 72 61 63 74 3a 20 20 69 66 28 20 73  Subtract:  if( s
d180: 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28 26  qlite3SubInt64(&
d190: 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70  iB,iA) ) goto fp
d1a0: 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20  _math;  break;. 
d1b0: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c       case OP_Mul
d1c0: 74 69 70 6c 79 3a 20 20 69 66 28 20 73 71 6c 69  tiply:  if( sqli
d1d0: 74 65 33 4d 75 6c 49 6e 74 36 34 28 26 69 42 2c  te3MulInt64(&iB,
d1e0: 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61  iA) ) goto fp_ma
d1f0: 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  th;  break;.    
d200: 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65    case OP_Divide
d210: 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  : {.        if( 
d220: 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69  iA==0 ) goto ari
d230: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
d240: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  s_null;.        
d250: 69 66 28 20 69 41 3d 3d 2d 31 20 26 26 20 69 42  if( iA==-1 && iB
d260: 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34  ==SMALLEST_INT64
d270: 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b   ) goto fp_math;
d280: 0a 20 20 20 20 20 20 20 20 69 42 20 2f 3d 20 69  .        iB /= i
d290: 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  A;.        break
d2a0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
d2b0: 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20  default: {.     
d2c0: 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67     if( iA==0 ) g
d2d0: 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72  oto arithmetic_r
d2e0: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20  esult_is_null;. 
d2f0: 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d         if( iA==-
d300: 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20  1 ) iA = 1;.    
d310: 20 20 20 20 69 42 20 25 3d 20 69 41 3b 0a 20 20      iB %= iA;.  
d320: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
d330: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70     }.    }.    p
d340: 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a 20  Out->u.i = iB;. 
d350: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
d360: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
d370: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28 66  ;.  }else if( (f
d380: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
d390: 21 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  !=0 ){.    goto 
d3a0: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
d3b0: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 7d 65 6c  t_is_null;.  }el
d3c0: 73 65 7b 0a 66 70 5f 6d 61 74 68 3a 0a 20 20 20  se{.fp_math:.   
d3d0: 20 72 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rA = sqlite3Vdb
d3e0: 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29  eRealValue(pIn1)
d3f0: 3b 0a 20 20 20 20 72 42 20 3d 20 73 71 6c 69 74  ;.    rB = sqlit
d400: 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28  e3VdbeRealValue(
d410: 70 49 6e 32 29 3b 0a 20 20 20 20 73 77 69 74 63  pIn2);.    switc
d420: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
d430: 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  {.      case OP_
d440: 41 64 64 3a 20 20 20 20 20 20 20 20 20 72 42 20  Add:         rB 
d450: 2b 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65  += rA;       bre
d460: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
d470: 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 72  P_Subtract:    r
d480: 42 20 2d 3d 20 72 41 3b 20 20 20 20 20 20 20 62  B -= rA;       b
d490: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
d4a0: 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20   OP_Multiply:   
d4b0: 20 72 42 20 2a 3d 20 72 41 3b 20 20 20 20 20 20   rB *= rA;      
d4c0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
d4d0: 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a  se OP_Divide: {.
d4e0: 20 20 20 20 20 20 20 20 2f 2a 20 28 64 6f 75 62          /* (doub
d4f0: 6c 65 29 30 20 49 6e 20 63 61 73 65 20 6f 66 20  le)0 In case of 
d500: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
d510: 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f  TING_POINT... */
d520: 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 41 3d  .        if( rA=
d530: 3d 28 64 6f 75 62 6c 65 29 30 20 29 20 67 6f 74  =(double)0 ) got
d540: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
d550: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
d560: 20 20 20 20 20 72 42 20 2f 3d 20 72 41 3b 0a 20       rB /= rA;. 
d570: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
d580: 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61      }.      defa
d590: 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69  ult: {.        i
d5a0: 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  A = sqlite3VdbeI
d5b0: 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20  ntValue(pIn1);. 
d5c0: 20 20 20 20 20 20 20 69 42 20 3d 20 73 71 6c 69         iB = sqli
d5d0: 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
d5e0: 70 49 6e 32 29 3b 0a 20 20 20 20 20 20 20 20 69  pIn2);.        i
d5f0: 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20  f( iA==0 ) goto 
d600: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
d610: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
d620: 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29 20     if( iA==-1 ) 
d630: 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  iA = 1;.        
d640: 72 42 20 3d 20 28 64 6f 75 62 6c 65 29 28 69 42  rB = (double)(iB
d650: 20 25 20 69 41 29 3b 0a 20 20 20 20 20 20 20 20   % iA);.        
d660: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
d670: 20 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49     }.#ifdef SQLI
d680: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
d690: 5f 50 4f 49 4e 54 0a 20 20 20 20 70 4f 75 74 2d  _POINT.    pOut-
d6a0: 3e 75 2e 69 20 3d 20 72 42 3b 0a 20 20 20 20 4d  >u.i = rB;.    M
d6b0: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
d6c0: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 23 65  ut, MEM_Int);.#e
d6d0: 6c 73 65 0a 20 20 20 20 69 66 28 20 73 71 6c 69  lse.    if( sqli
d6e0: 74 65 33 49 73 4e 61 4e 28 72 42 29 20 29 7b 0a  te3IsNaN(rB) ){.
d6f0: 20 20 20 20 20 20 67 6f 74 6f 20 61 72 69 74 68        goto arith
d700: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
d710: 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20 20 20  null;.    }.    
d720: 70 4f 75 74 2d 3e 75 2e 72 20 3d 20 72 42 3b 0a  pOut->u.r = rB;.
d730: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
d740: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 52 65 61  ag(pOut, MEM_Rea
d750: 6c 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20  l);.#endif.  }. 
d760: 20 62 72 65 61 6b 3b 0a 0a 61 72 69 74 68 6d 65   break;..arithme
d770: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
d780: 6c 6c 3a 0a 20 20 73 71 6c 69 74 65 33 56 64 62  ll:.  sqlite3Vdb
d790: 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
d7a0: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
d7b0: 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 6c 53 65  * Opcode: CollSe
d7c0: 71 20 50 31 20 2a 20 2a 20 50 34 0a 2a 2a 0a 2a  q P1 * * P4.**.*
d7d0: 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
d7e0: 72 20 74 6f 20 61 20 43 6f 6c 6c 53 65 71 20 6f  r to a CollSeq o
d7f0: 62 6a 65 63 74 2e 20 49 66 20 74 68 65 20 6e 65  bject. If the ne
d800: 78 74 20 63 61 6c 6c 20 74 6f 20 61 20 75 73 65  xt call to a use
d810: 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6f 72  r function.** or
d820: 20 61 67 67 72 65 67 61 74 65 20 63 61 6c 6c 73   aggregate calls
d830: 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43   sqlite3GetFuncC
d840: 6f 6c 6c 53 65 71 28 29 2c 20 74 68 69 73 20 63  ollSeq(), this c
d850: 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
d860: 65 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 72 65 74  e will.** be ret
d870: 75 72 6e 65 64 2e 20 54 68 69 73 20 69 73 20 75  urned. This is u
d880: 73 65 64 20 62 79 20 74 68 65 20 62 75 69 6c 74  sed by the built
d890: 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d 61 78 28 29  -in min(), max()
d8a0: 20 61 6e 64 20 6e 75 6c 6c 69 66 28 29 0a 2a 2a   and nullif().**
d8b0: 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a   functions..**.*
d8c0: 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 74 20 7a  * If P1 is not z
d8d0: 65 72 6f 2c 20 74 68 65 6e 20 69 74 20 69 73 20  ero, then it is 
d8e0: 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  a register that 
d8f0: 61 20 73 75 62 73 65 71 75 65 6e 74 20 6d 69 6e  a subsequent min
d900: 28 29 20 6f 72 0a 2a 2a 20 6d 61 78 28 29 20 61  () or.** max() a
d910: 67 67 72 65 67 61 74 65 20 77 69 6c 6c 20 73 65  ggregate will se
d920: 74 20 74 6f 20 31 20 69 66 20 74 68 65 20 63 75  t to 1 if the cu
d930: 72 72 65 6e 74 20 72 6f 77 20 69 73 20 6e 6f 74  rrent row is not
d940: 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20 6f 72 0a   the minimum or.
d950: 2a 2a 20 6d 61 78 69 6d 75 6d 2e 20 20 54 68 65  ** maximum.  The
d960: 20 50 31 20 72 65 67 69 73 74 65 72 20 69 73 20   P1 register is 
d970: 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 30  initialized to 0
d980: 20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75 63   by this instruc
d990: 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  tion..**.** The 
d9a0: 69 6e 74 65 72 66 61 63 65 20 75 73 65 64 20 62  interface used b
d9b0: 79 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  y the implementa
d9c0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 61 66 6f 72  tion of the afor
d9d0: 65 6d 65 6e 74 69 6f 6e 65 64 20 66 75 6e 63 74  ementioned funct
d9e0: 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65 74 72 69  ions.** to retri
d9f0: 65 76 65 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f  eve the collatio
da00: 6e 20 73 65 71 75 65 6e 63 65 20 73 65 74 20 62  n sequence set b
da10: 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73  y this opcode is
da20: 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 0a 2a   not available.*
da30: 2a 20 70 75 62 6c 69 63 6c 79 2e 20 20 4f 6e 6c  * publicly.  Onl
da40: 79 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74  y built-in funct
da50: 69 6f 6e 73 20 68 61 76 65 20 61 63 63 65 73 73  ions have access
da60: 20 74 6f 20 74 68 69 73 20 66 65 61 74 75 72 65   to this feature
da70: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c  ..*/.case OP_Col
da80: 6c 53 65 71 3a 20 7b 0a 20 20 61 73 73 65 72 74  lSeq: {.  assert
da90: 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
daa0: 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 69  4_COLLSEQ );.  i
dab0: 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20  f( pOp->p1 ){.  
dac0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
dad0: 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70  SetInt64(&aMem[p
dae0: 4f 70 2d 3e 70 31 5d 2c 20 30 29 3b 0a 20 20 7d  Op->p1], 0);.  }
daf0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
db00: 4f 70 63 6f 64 65 3a 20 42 69 74 41 6e 64 20 50  Opcode: BitAnd P
db10: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
db20: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72  ynopsis: r[P3]=r
db30: 5b 50 31 5d 26 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  [P1]&r[P2].**.**
db40: 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69   Take the bit-wi
db50: 73 65 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61  se AND of the va
db60: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
db70: 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a   P1 and P2 and.*
db80: 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  * store the resu
db90: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
dba0: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
dbb0: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
dbc0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
dbd0: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
dbe0: 20 42 69 74 4f 72 20 50 31 20 50 32 20 50 33 20   BitOr P1 P2 P3 
dbf0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
dc00: 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 7c 72 5b 50   r[P3]=r[P1]|r[P
dc10: 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68  2].**.** Take th
dc20: 65 20 62 69 74 2d 77 69 73 65 20 4f 52 20 6f 66  e bit-wise OR of
dc30: 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72   the values in r
dc40: 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50  egister P1 and P
dc50: 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74  2 and.** store t
dc60: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
dc70: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
dc80: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
dc90: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
dca0: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
dcb0: 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 4c 65 66  Opcode: ShiftLef
dcc0: 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
dcd0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
dce0: 5d 3d 72 5b 50 32 5d 3c 3c 72 5b 50 31 5d 0a 2a  ]=r[P2]<<r[P1].*
dcf0: 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69  *.** Shift the i
dd00: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20  nteger value in 
dd10: 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 74  register P2 to t
dd20: 68 65 20 6c 65 66 74 20 62 79 20 74 68 65 0a 2a  he left by the.*
dd30: 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73  * number of bits
dd40: 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68   specified by th
dd50: 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67  e integer in reg
dd60: 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f  ister P1..** Sto
dd70: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
dd80: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
dd90: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
dda0: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
ddb0: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
ddc0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66  ./* Opcode: Shif
ddd0: 74 52 69 67 68 74 20 50 31 20 50 32 20 50 33 20  tRight P1 P2 P3 
dde0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
ddf0: 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3e 3e 72 5b   r[P3]=r[P2]>>r[
de00: 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20  P1].**.** Shift 
de10: 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  the integer valu
de20: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
de30: 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 62 79   to the right by
de40: 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f   the.** number o
de50: 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65 64  f bits specified
de60: 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72 20   by the integer 
de70: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
de80: 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65 73  ** Store the res
de90: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
dea0: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
deb0: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
dec0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
ded0: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42  LL..*/.case OP_B
dee0: 69 74 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20  itAnd:          
def0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
df00: 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20 69 6e 31  s TK_BITAND, in1
df10: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
df20: 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20  ase OP_BitOr:   
df30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
df40: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54  * same as TK_BIT
df50: 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  OR, in1, in2, ou
df60: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68  t3 */.case OP_Sh
df70: 69 66 74 4c 65 66 74 3a 20 20 20 20 20 20 20 20  iftLeft:        
df80: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
df90: 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69 6e 31 2c   TK_LSHIFT, in1,
dfa0: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
dfb0: 73 65 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74  se OP_ShiftRight
dfc0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
dfd0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 53 48 49   same as TK_RSHI
dfe0: 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  FT, in1, in2, ou
dff0: 74 33 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 0a  t3 */.  i64 iA;.
e000: 20 20 75 36 34 20 75 41 3b 0a 20 20 69 36 34 20    u64 uA;.  i64 
e010: 69 42 3b 0a 20 20 75 38 20 6f 70 3b 0a 0a 20 20  iB;.  u8 op;..  
e020: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
e030: 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20  ->p1];.  pIn2 = 
e040: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
e050: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
e060: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28  Op->p3];.  if( (
e070: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49  pIn1->flags | pI
e080: 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d  n2->flags) & MEM
e090: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c  _Null ){.    sql
e0a0: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
e0b0: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72  ll(pOut);.    br
e0c0: 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 41 20 3d 20  eak;.  }.  iA = 
e0d0: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
e0e0: 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 69 42 20  lue(pIn2);.  iB 
e0f0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
e100: 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 6f  Value(pIn1);.  o
e110: 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b  p = pOp->opcode;
e120: 0a 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69  .  if( op==OP_Bi
e130: 74 41 6e 64 20 29 7b 0a 20 20 20 20 69 41 20 26  tAnd ){.    iA &
e140: 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66  = iB;.  }else if
e150: 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 4f 72 20 29  ( op==OP_BitOr )
e160: 7b 0a 20 20 20 20 69 41 20 7c 3d 20 69 42 3b 0a  {.    iA |= iB;.
e170: 20 20 7d 65 6c 73 65 20 69 66 28 20 69 42 21 3d    }else if( iB!=
e180: 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
e190: 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 52 69 67   op==OP_ShiftRig
e1a0: 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69  ht || op==OP_Shi
e1b0: 66 74 4c 65 66 74 20 29 3b 0a 0a 20 20 20 20 2f  ftLeft );..    /
e1c0: 2a 20 49 66 20 73 68 69 66 74 69 6e 67 20 62 79  * If shifting by
e1d0: 20 61 20 6e 65 67 61 74 69 76 65 20 61 6d 6f 75   a negative amou
e1e0: 6e 74 2c 20 73 68 69 66 74 20 69 6e 20 74 68 65  nt, shift in the
e1f0: 20 6f 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e   other direction
e200: 20 2a 2f 0a 20 20 20 20 69 66 28 20 69 42 3c 30   */.    if( iB<0
e210: 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
e220: 28 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3d  ( OP_ShiftRight=
e230: 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 2b 31 20  =OP_ShiftLeft+1 
e240: 29 3b 0a 20 20 20 20 20 20 6f 70 20 3d 20 32 2a  );.      op = 2*
e250: 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 2b 20 31  OP_ShiftLeft + 1
e260: 20 2d 20 6f 70 3b 0a 20 20 20 20 20 20 69 42 20   - op;.      iB 
e270: 3d 20 69 42 3e 28 2d 36 34 29 20 3f 20 2d 69 42  = iB>(-64) ? -iB
e280: 20 3a 20 36 34 3b 0a 20 20 20 20 7d 0a 0a 20 20   : 64;.    }..  
e290: 20 20 69 66 28 20 69 42 3e 3d 36 34 20 29 7b 0a    if( iB>=64 ){.
e2a0: 20 20 20 20 20 20 69 41 20 3d 20 28 69 41 3e 3d        iA = (iA>=
e2b0: 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66  0 || op==OP_Shif
e2c0: 74 4c 65 66 74 29 20 3f 20 30 20 3a 20 2d 31 3b  tLeft) ? 0 : -1;
e2d0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
e2e0: 20 20 6d 65 6d 63 70 79 28 26 75 41 2c 20 26 69    memcpy(&uA, &i
e2f0: 41 2c 20 73 69 7a 65 6f 66 28 75 41 29 29 3b 0a  A, sizeof(uA));.
e300: 20 20 20 20 20 20 69 66 28 20 6f 70 3d 3d 4f 50        if( op==OP
e310: 5f 53 68 69 66 74 4c 65 66 74 20 29 7b 0a 20 20  _ShiftLeft ){.  
e320: 20 20 20 20 20 20 75 41 20 3c 3c 3d 20 69 42 3b        uA <<= iB;
e330: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
e340: 20 20 20 20 20 20 75 41 20 3e 3e 3d 20 69 42 3b        uA >>= iB;
e350: 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 69 67 6e  .        /* Sign
e360: 2d 65 78 74 65 6e 64 20 6f 6e 20 61 20 72 69 67  -extend on a rig
e370: 68 74 20 73 68 69 66 74 20 6f 66 20 61 20 6e 65  ht shift of a ne
e380: 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20 2a 2f  gative number */
e390: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3c  .        if( iA<
e3a0: 30 20 29 20 75 41 20 7c 3d 20 28 28 28 28 75 36  0 ) uA |= ((((u6
e3b0: 34 29 30 78 66 66 66 66 66 66 66 66 29 3c 3c 33  4)0xffffffff)<<3
e3c0: 32 29 7c 30 78 66 66 66 66 66 66 66 66 29 20 3c  2)|0xffffffff) <
e3d0: 3c 20 28 36 34 2d 69 42 29 3b 0a 20 20 20 20 20  < (64-iB);.     
e3e0: 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28   }.      memcpy(
e3f0: 26 69 41 2c 20 26 75 41 2c 20 73 69 7a 65 6f 66  &iA, &uA, sizeof
e400: 28 69 41 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  (iA));.    }.  }
e410: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69  .  pOut->u.i = i
e420: 41 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  A;.  MemSetTypeF
e430: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
e440: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
e450: 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 49 6d  /* Opcode: AddIm
e460: 6d 20 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  m  P1 P2 * * *.*
e470: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31  * Synopsis: r[P1
e480: 5d 3d 72 5b 50 31 5d 2b 50 32 0a 2a 2a 20 0a 2a  ]=r[P1]+P2.** .*
e490: 2a 20 41 64 64 20 74 68 65 20 63 6f 6e 73 74 61  * Add the consta
e4a0: 6e 74 20 50 32 20 74 6f 20 74 68 65 20 76 61 6c  nt P2 to the val
e4b0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
e4c0: 31 2e 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74  1..** The result
e4d0: 20 69 73 20 61 6c 77 61 79 73 20 61 6e 20 69 6e   is always an in
e4e0: 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20  teger..**.** To 
e4f0: 66 6f 72 63 65 20 61 6e 79 20 72 65 67 69 73 74  force any regist
e500: 65 72 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65  er to be an inte
e510: 67 65 72 2c 20 6a 75 73 74 20 61 64 64 20 30 2e  ger, just add 0.
e520: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 49  .*/.case OP_AddI
e530: 6d 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  mm: {           
e540: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e   /* in1 */.  pIn
e550: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
e560: 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  1];.  memAboutTo
e570: 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b  Change(p, pIn1);
e580: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
e590: 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31  mIntegerify(pIn1
e5a0: 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b  );.  pIn1->u.i +
e5b0: 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72 65  = pOp->p2;.  bre
e5c0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
e5d0: 3a 20 4d 75 73 74 42 65 49 6e 74 20 50 31 20 50  : MustBeInt P1 P
e5e0: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 46  2 * * *.** .** F
e5f0: 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69  orce the value i
e600: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  n register P1 to
e610: 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2e 20   be an integer. 
e620: 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a   If the value.**
e630: 20 69 6e 20 50 31 20 69 73 20 6e 6f 74 20 61 6e   in P1 is not an
e640: 20 69 6e 74 65 67 65 72 20 61 6e 64 20 63 61 6e   integer and can
e650: 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64  not be converted
e660: 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72   into an integer
e670: 0a 2a 2a 20 77 69 74 68 6f 75 74 20 64 61 74 61  .** without data
e680: 20 6c 6f 73 73 2c 20 74 68 65 6e 20 6a 75 6d 70   loss, then jump
e690: 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
e6a0: 50 32 2c 20 6f 72 20 69 66 20 50 32 3d 3d 30 0a  P2, or if P2==0.
e6b0: 2a 2a 20 72 61 69 73 65 20 61 6e 20 53 51 4c 49  ** raise an SQLI
e6c0: 54 45 5f 4d 49 53 4d 41 54 43 48 20 65 78 63 65  TE_MISMATCH exce
e6d0: 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ption..*/.case O
e6e0: 50 5f 4d 75 73 74 42 65 49 6e 74 3a 20 7b 20 20  P_MustBeInt: {  
e6f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
e700: 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
e710: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
e720: 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  ];.  if( (pIn1->
e730: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
e740: 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70 70 6c 79  ==0 ){.    apply
e750: 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53  Affinity(pIn1, S
e760: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
e770: 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  C, encoding);.  
e780: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
e790: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
e7a0: 20 29 7b 0a 20 20 20 20 20 20 56 64 62 65 42 72   ){.      VdbeBr
e7b0: 61 6e 63 68 54 61 6b 65 6e 28 31 2c 20 32 29 3b  anchTaken(1, 2);
e7c0: 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
e7d0: 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  p2==0 ){.       
e7e0: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53   rc = SQLITE_MIS
e7f0: 4d 41 54 43 48 3b 0a 20 20 20 20 20 20 20 20 67  MATCH;.        g
e800: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
e810: 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 65  _error;.      }e
e820: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 67 6f 74  lse{.        got
e830: 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
e840: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
e850: 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
e860: 6e 28 30 2c 20 32 29 3b 0a 20 20 4d 65 6d 53 65  n(0, 2);.  MemSe
e870: 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31 2c 20  tTypeFlag(pIn1, 
e880: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61  MEM_Int);.  brea
e890: 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
e8a0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
e8b0: 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f  NG_POINT./* Opco
e8c0: 64 65 3a 20 52 65 61 6c 41 66 66 69 6e 69 74 79  de: RealAffinity
e8d0: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
e8e0: 2a 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31  * If register P1
e8f0: 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65   holds an intege
e900: 72 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  r convert it to 
e910: 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a  a real value..**
e920: 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
e930: 69 73 20 75 73 65 64 20 77 68 65 6e 20 65 78 74  is used when ext
e940: 72 61 63 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74  racting informat
e950: 69 6f 6e 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d  ion from a colum
e960: 6e 20 74 68 61 74 0a 2a 2a 20 68 61 73 20 52 45  n that.** has RE
e970: 41 4c 20 61 66 66 69 6e 69 74 79 2e 20 20 53 75  AL affinity.  Su
e980: 63 68 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73  ch column values
e990: 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 73 74   may still be st
e9a0: 6f 72 65 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67  ored as.** integ
e9b0: 65 72 73 2c 20 66 6f 72 20 73 70 61 63 65 20 65  ers, for space e
e9c0: 66 66 69 63 69 65 6e 63 79 2c 20 62 75 74 20 61  fficiency, but a
e9d0: 66 74 65 72 20 65 78 74 72 61 63 74 69 6f 6e 20  fter extraction 
e9e0: 77 65 20 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20  we want them.** 
e9f0: 74 6f 20 68 61 76 65 20 6f 6e 6c 79 20 61 20 72  to have only a r
ea00: 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61  eal value..*/.ca
ea10: 73 65 20 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69  se OP_RealAffini
ea20: 74 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ty: {           
ea30: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
ea40: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
ea50: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
ea60: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pIn1->flags & (M
ea70: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 49 6e 74 52 65  EM_Int|MEM_IntRe
ea80: 61 6c 29 20 29 7b 0a 20 20 20 20 74 65 73 74 63  al) ){.    testc
ea90: 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ase( pIn1->flags
eaa0: 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20   & MEM_Int );.  
eab0: 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 31    testcase( pIn1
eac0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
ead0: 74 52 65 61 6c 20 29 3b 0a 20 20 20 20 73 71 6c  tReal );.    sql
eae0: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c 69  ite3VdbeMemReali
eaf0: 66 79 28 70 49 6e 31 29 3b 0a 20 20 20 20 52 45  fy(pIn1);.    RE
eb00: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
eb10: 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 7d  ->p1, pIn1);.  }
eb20: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
eb30: 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
eb40: 54 45 5f 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20  TE_OMIT_CAST./* 
eb50: 4f 70 63 6f 64 65 3a 20 43 61 73 74 20 50 31 20  Opcode: Cast P1 
eb60: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
eb70: 70 73 69 73 3a 20 61 66 66 69 6e 69 74 79 28 72  psis: affinity(r
eb80: 5b 50 31 5d 29 0a 2a 2a 0a 2a 2a 20 46 6f 72 63  [P1]).**.** Forc
eb90: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
eba0: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65  egister P1 to be
ebb0: 20 74 68 65 20 74 79 70 65 20 64 65 66 69 6e 65   the type define
ebc0: 64 20 62 79 20 50 32 2e 0a 2a 2a 20 0a 2a 2a 20  d by P2..** .** 
ebd0: 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d  <ul>.** <li> P2=
ebe0: 3d 27 41 27 20 26 72 61 72 72 3b 20 42 4c 4f 42  ='A' &rarr; BLOB
ebf0: 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27 42 27  .** <li> P2=='B'
ec00: 20 26 72 61 72 72 3b 20 54 45 58 54 0a 2a 2a 20   &rarr; TEXT.** 
ec10: 3c 6c 69 3e 20 50 32 3d 3d 27 43 27 20 26 72 61  <li> P2=='C' &ra
ec20: 72 72 3b 20 4e 55 4d 45 52 49 43 0a 2a 2a 20 3c  rr; NUMERIC.** <
ec30: 6c 69 3e 20 50 32 3d 3d 27 44 27 20 26 72 61 72  li> P2=='D' &rar
ec40: 72 3b 20 49 4e 54 45 47 45 52 0a 2a 2a 20 3c 6c  r; INTEGER.** <l
ec50: 69 3e 20 50 32 3d 3d 27 45 27 20 26 72 61 72 72  i> P2=='E' &rarr
ec60: 3b 20 52 45 41 4c 0a 2a 2a 20 3c 2f 75 6c 3e 0a  ; REAL.** </ul>.
ec70: 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c  **.** A NULL val
ec80: 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65  ue is not change
ec90: 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e  d by this routin
eca0: 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e  e.  It remains N
ecb0: 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
ecc0: 43 61 73 74 3a 20 7b 20 20 20 20 20 20 20 20 20  Cast: {         
ecd0: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20           /* in1 
ece0: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
ecf0: 2d 3e 70 32 3e 3d 53 51 4c 49 54 45 5f 41 46 46  ->p2>=SQLITE_AFF
ed00: 5f 42 4c 4f 42 20 26 26 20 70 4f 70 2d 3e 70 32  _BLOB && pOp->p2
ed10: 3c 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41  <=SQLITE_AFF_REA
ed20: 4c 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  L );.  testcase(
ed30: 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45   pOp->p2==SQLITE
ed40: 5f 41 46 46 5f 54 45 58 54 20 29 3b 0a 20 20 74  _AFF_TEXT );.  t
ed50: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32  estcase( pOp->p2
ed60: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f  ==SQLITE_AFF_BLO
ed70: 42 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  B );.  testcase(
ed80: 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45   pOp->p2==SQLITE
ed90: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a  _AFF_NUMERIC );.
eda0: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
edb0: 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  >p2==SQLITE_AFF_
edc0: 49 4e 54 45 47 45 52 20 29 3b 0a 20 20 74 65 73  INTEGER );.  tes
edd0: 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d  tcase( pOp->p2==
ede0: 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20  SQLITE_AFF_REAL 
edf0: 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  );.  pIn1 = &aMe
ee00: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65  m[pOp->p1];.  me
ee10: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
ee20: 2c 20 70 49 6e 31 29 3b 0a 20 20 72 63 20 3d 20  , pIn1);.  rc = 
ee30: 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29  ExpandBlob(pIn1)
ee40: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
ee50: 65 6d 43 61 73 74 28 70 49 6e 31 2c 20 70 4f 70  emCast(pIn1, pOp
ee60: 2d 3e 70 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  ->p2, encoding);
ee70: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
ee80: 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20  OBSIZE(pIn1);.  
ee90: 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
eea0: 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
eeb0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
eec0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
eed0: 49 54 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f  IT_CAST */../* O
eee0: 70 63 6f 64 65 3a 20 45 71 20 50 31 20 50 32 20  pcode: Eq P1 P2 
eef0: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
ef00: 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3d 3d  psis: IF r[P3]==
ef10: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70  r[P1].**.** Comp
ef20: 61 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 69  are the values i
ef30: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  n register P1 an
ef40: 64 20 50 33 2e 20 20 49 66 20 72 65 67 28 50 33  d P3.  If reg(P3
ef50: 29 3d 3d 72 65 67 28 50 31 29 20 74 68 65 6e 0a  )==reg(P1) then.
ef60: 2a 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65  ** jump to addre
ef70: 73 73 20 50 32 2e 20 20 4f 72 20 69 66 20 74 68  ss P2.  Or if th
ef80: 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  e SQLITE_STOREP2
ef90: 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20   flag is set in 
efa0: 50 35 2c 20 74 68 65 6e 0a 2a 2a 20 73 74 6f 72  P5, then.** stor
efb0: 65 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  e the result of 
efc0: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 6e 20 72 65  comparison in re
efd0: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
efe0: 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   The SQLITE_AFF_
eff0: 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66 20  MASK portion of 
f000: 50 35 20 6d 75 73 74 20 62 65 20 61 6e 20 61 66  P5 must be an af
f010: 66 69 6e 69 74 79 20 63 68 61 72 61 63 74 65 72  finity character
f020: 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46   -.** SQLITE_AFF
f030: 5f 54 45 58 54 2c 20 53 51 4c 49 54 45 5f 41 46  _TEXT, SQLITE_AF
f040: 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64 20 73  F_INTEGER, and s
f050: 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61 74 74 65  o forth. An atte
f060: 6d 70 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a 20  mpt is made .** 
f070: 74 6f 20 63 6f 65 72 63 65 20 62 6f 74 68 20 69  to coerce both i
f080: 6e 70 75 74 73 20 61 63 63 6f 72 64 69 6e 67 20  nputs according 
f090: 74 6f 20 74 68 69 73 20 61 66 66 69 6e 69 74 79  to this affinity
f0a0: 20 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20 63   before the.** c
f0b0: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d 61 64  omparison is mad
f0c0: 65 2e 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  e. If the SQLITE
f0d0: 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20 30 78 30  _AFF_MASK is 0x0
f0e0: 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69 63 0a  0, then numeric.
f0f0: 2a 2a 20 61 66 66 69 6e 69 74 79 20 69 73 20 75  ** affinity is u
f100: 73 65 64 2e 20 4e 6f 74 65 20 74 68 61 74 20 74  sed. Note that t
f110: 68 65 20 61 66 66 69 6e 69 74 79 20 63 6f 6e 76  he affinity conv
f120: 65 72 73 69 6f 6e 73 20 61 72 65 20 73 74 6f 72  ersions are stor
f130: 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f 20  ed.** back into 
f140: 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74  the input regist
f150: 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 20 20  ers P1 and P3.  
f160: 53 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20 63  So this opcode c
f170: 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65 72 73  an cause.** pers
f180: 69 73 74 65 6e 74 20 63 68 61 6e 67 65 73 20 74  istent changes t
f190: 6f 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  o registers P1 a
f1a0: 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63  nd P3..**.** Onc
f1b0: 65 20 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f 6e  e any conversion
f1c0: 73 20 68 61 76 65 20 74 61 6b 65 6e 20 70 6c 61  s have taken pla
f1d0: 63 65 2c 20 61 6e 64 20 6e 65 69 74 68 65 72 20  ce, and neither 
f1e0: 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20 0a  value is NULL, .
f1f0: 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 61 72  ** the values ar
f200: 65 20 63 6f 6d 70 61 72 65 64 2e 20 49 66 20 62  e compared. If b
f210: 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 20 62  oth values are b
f220: 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d 70  lobs then memcmp
f230: 28 29 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f  () is.** used to
f240: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 72   determine the r
f250: 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63 6f  esults of the co
f260: 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 62 6f  mparison.  If bo
f270: 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65  th values.** are
f280: 20 74 65 78 74 2c 20 74 68 65 6e 20 74 68 65 20   text, then the 
f290: 61 70 70 72 6f 70 72 69 61 74 65 20 63 6f 6c 6c  appropriate coll
f2a0: 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73  ating function s
f2b0: 70 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20 50  pecified in.** P
f2c0: 34 20 69 73 20 75 73 65 64 20 74 6f 20 64 6f 20  4 is used to do 
f2d0: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
f2e0: 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 73 70   If P4 is not sp
f2f0: 65 63 69 66 69 65 64 20 74 68 65 6e 0a 2a 2a 20  ecified then.** 
f300: 6d 65 6d 63 6d 70 28 29 20 69 73 20 75 73 65 64  memcmp() is used
f310: 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78 74   to compare text
f320: 20 73 74 72 69 6e 67 2e 20 20 49 66 20 62 6f 74   string.  If bot
f330: 68 20 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20  h values are.** 
f340: 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e 20 61 20  numeric, then a 
f350: 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61 72 69 73  numeric comparis
f360: 6f 6e 20 69 73 20 75 73 65 64 2e 20 49 66 20 74  on is used. If t
f370: 68 65 20 74 77 6f 20 76 61 6c 75 65 73 0a 2a 2a  he two values.**
f380: 20 61 72 65 20 6f 66 20 64 69 66 66 65 72 65 6e   are of differen
f390: 74 20 74 79 70 65 73 2c 20 74 68 65 6e 20 6e 75  t types, then nu
f3a0: 6d 62 65 72 73 20 61 72 65 20 63 6f 6e 73 69 64  mbers are consid
f3b0: 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e 0a 2a  ered less than.*
f3c0: 2a 20 73 74 72 69 6e 67 73 20 61 6e 64 20 73 74  * strings and st
f3d0: 72 69 6e 67 73 20 61 72 65 20 63 6f 6e 73 69 64  rings are consid
f3e0: 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e 20 62  ered less than b
f3f0: 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53  lobs..**.** If S
f400: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20  QLITE_NULLEQ is 
f410: 73 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20 74  set in P5 then t
f420: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d  he result of com
f430: 70 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61 79  parison is alway
f440: 73 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75 65  s either.** true
f450: 20 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69 73   or false and is
f460: 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66   never NULL.  If
f470: 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61   both operands a
f480: 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65  re NULL then the
f490: 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f   result.** of co
f4a0: 6d 70 61 72 69 73 6f 6e 20 69 73 20 74 72 75 65  mparison is true
f4b0: 2e 20 20 49 66 20 65 69 74 68 65 72 20 6f 70 65  .  If either ope
f4c0: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65  rand is NULL the
f4d0: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
f4e0: 66 61 6c 73 65 2e 0a 2a 2a 20 49 66 20 6e 65 69  false..** If nei
f4f0: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
f500: 4e 55 4c 4c 20 74 68 65 20 72 65 73 75 6c 74 20  NULL the result 
f510: 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 69  is the same as i
f520: 74 20 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a  t would be if.**
f530: 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c   the SQLITE_NULL
f540: 45 51 20 66 6c 61 67 20 77 65 72 65 20 6f 6d 69  EQ flag were omi
f550: 74 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2a  tted from P5..**
f560: 0a 2a 2a 20 49 66 20 62 6f 74 68 20 53 51 4c 49  .** If both SQLI
f570: 54 45 5f 53 54 4f 52 45 50 32 20 61 6e 64 20 53  TE_STOREP2 and S
f580: 51 4c 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 20 66  QLITE_KEEPNULL f
f590: 6c 61 67 73 20 61 72 65 20 73 65 74 20 74 68 65  lags are set the
f5a0: 6e 20 74 68 65 0a 2a 2a 20 63 6f 6e 74 65 6e 74  n the.** content
f5b0: 20 6f 66 20 72 5b 50 32 5d 20 69 73 20 6f 6e 6c   of r[P2] is onl
f5c0: 79 20 63 68 61 6e 67 65 64 20 69 66 20 74 68 65  y changed if the
f5d0: 20 6e 65 77 20 76 61 6c 75 65 20 69 73 20 4e 55   new value is NU
f5e0: 4c 4c 20 6f 72 20 30 20 28 66 61 6c 73 65 29 2e  LL or 0 (false).
f5f0: 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  .** In other wor
f600: 64 73 2c 20 61 20 70 72 69 6f 72 20 72 5b 50 32  ds, a prior r[P2
f610: 5d 20 76 61 6c 75 65 20 77 69 6c 6c 20 6e 6f 74  ] value will not
f620: 20 62 65 20 6f 76 65 72 77 72 69 74 74 65 6e 20   be overwritten 
f630: 62 79 20 31 20 28 74 72 75 65 29 2e 0a 2a 2f 0a  by 1 (true)..*/.
f640: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 20 50 31  /* Opcode: Ne P1
f650: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
f660: 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50  Synopsis: IF r[P
f670: 33 5d 21 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  3]!=r[P1].**.** 
f680: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
f690: 6c 69 6b 65 20 74 68 65 20 45 71 20 6f 70 63 6f  like the Eq opco
f6a0: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
f6b0: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
f6c0: 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61   if.** the opera
f6d0: 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65 72 73  nds in registers
f6e0: 20 50 31 20 61 6e 64 20 50 33 20 61 72 65 20 6e   P1 and P3 are n
f6f0: 6f 74 20 65 71 75 61 6c 2e 20 20 53 65 65 20 74  ot equal.  See t
f700: 68 65 20 45 71 20 6f 70 63 6f 64 65 20 66 6f 72  he Eq opcode for
f710: 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  .** additional i
f720: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nformation..**.*
f730: 2a 20 49 66 20 62 6f 74 68 20 53 51 4c 49 54 45  * If both SQLITE
f740: 5f 53 54 4f 52 45 50 32 20 61 6e 64 20 53 51 4c  _STOREP2 and SQL
f750: 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 20 66 6c 61  ITE_KEEPNULL fla
f760: 67 73 20 61 72 65 20 73 65 74 20 74 68 65 6e 20  gs are set then 
f770: 74 68 65 0a 2a 2a 20 63 6f 6e 74 65 6e 74 20 6f  the.** content o
f780: 66 20 72 5b 50 32 5d 20 69 73 20 6f 6e 6c 79 20  f r[P2] is only 
f790: 63 68 61 6e 67 65 64 20 69 66 20 74 68 65 20 6e  changed if the n
f7a0: 65 77 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c  ew value is NULL
f7b0: 20 6f 72 20 31 20 28 74 72 75 65 29 2e 0a 2a 2a   or 1 (true)..**
f7c0: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
f7d0: 20 61 20 70 72 69 6f 72 20 72 5b 50 32 5d 20 76   a prior r[P2] v
f7e0: 61 6c 75 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65  alue will not be
f7f0: 20 6f 76 65 72 77 72 69 74 74 65 6e 20 62 79 20   overwritten by 
f800: 30 20 28 66 61 6c 73 65 29 2e 0a 2a 2f 0a 2f 2a  0 (false)..*/./*
f810: 20 4f 70 63 6f 64 65 3a 20 4c 74 20 50 31 20 50   Opcode: Lt P1 P
f820: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
f830: 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d  nopsis: IF r[P3]
f840: 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d  <r[P1].**.** Com
f850: 70 61 72 65 20 74 68 65 20 76 61 6c 75 65 73 20  pare the values 
f860: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
f870: 6e 64 20 50 33 2e 20 20 49 66 20 72 65 67 28 50  nd P3.  If reg(P
f880: 33 29 3c 72 65 67 28 50 31 29 20 74 68 65 6e 0a  3)<reg(P1) then.
f890: 2a 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65  ** jump to addre
f8a0: 73 73 20 50 32 2e 20 20 4f 72 20 69 66 20 74 68  ss P2.  Or if th
f8b0: 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  e SQLITE_STOREP2
f8c0: 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20   flag is set in 
f8d0: 50 35 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20  P5 store.** the 
f8e0: 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72  result of compar
f8f0: 69 73 6f 6e 20 28 30 20 6f 72 20 31 20 6f 72 20  ison (0 or 1 or 
f900: 4e 55 4c 4c 29 20 69 6e 74 6f 20 72 65 67 69 73  NULL) into regis
f910: 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P2..**.** If
f920: 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50   the SQLITE_JUMP
f930: 49 46 4e 55 4c 4c 20 62 69 74 20 6f 66 20 50 35  IFNULL bit of P5
f940: 20 69 73 20 73 65 74 20 61 6e 64 20 65 69 74 68   is set and eith
f950: 65 72 20 72 65 67 28 50 31 29 20 6f 72 0a 2a 2a  er reg(P1) or.**
f960: 20 72 65 67 28 50 33 29 20 69 73 20 4e 55 4c 4c   reg(P3) is NULL
f970: 20 74 68 65 6e 20 74 68 65 20 74 61 6b 65 20 74   then the take t
f980: 68 65 20 6a 75 6d 70 2e 20 20 49 66 20 74 68 65  he jump.  If the
f990: 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55   SQLITE_JUMPIFNU
f9a0: 4c 4c 20 0a 2a 2a 20 62 69 74 20 69 73 20 63 6c  LL .** bit is cl
f9b0: 65 61 72 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  ear then fall th
f9c0: 72 6f 75 67 68 20 69 66 20 65 69 74 68 65 72 20  rough if either 
f9d0: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e  operand is NULL.
f9e0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  .**.** The SQLIT
f9f0: 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69  E_AFF_MASK porti
fa00: 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74 20 62 65  on of P5 must be
fa10: 20 61 6e 20 61 66 66 69 6e 69 74 79 20 63 68 61   an affinity cha
fa20: 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49  racter -.** SQLI
fa30: 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 53 51 4c  TE_AFF_TEXT, SQL
fa40: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c  ITE_AFF_INTEGER,
fa50: 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 41   and so forth. A
fa60: 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  n attempt is mad
fa70: 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20  e .** to coerce 
fa80: 62 6f 74 68 20 69 6e 70 75 74 73 20 61 63 63 6f  both inputs acco
fa90: 72 64 69 6e 67 20 74 6f 20 74 68 69 73 20 61 66  rding to this af
faa0: 66 69 6e 69 74 79 20 62 65 66 6f 72 65 20 74 68  finity before th
fab0: 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20  e.** comparison 
fac0: 69 73 20 6d 61 64 65 2e 20 49 66 20 74 68 65 20  is made. If the 
fad0: 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
fae0: 69 73 20 30 78 30 30 2c 20 74 68 65 6e 20 6e 75  is 0x00, then nu
faf0: 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74  meric.** affinit
fb00: 79 20 69 73 20 75 73 65 64 2e 20 4e 6f 74 65 20  y is used. Note 
fb10: 74 68 61 74 20 74 68 65 20 61 66 66 69 6e 69 74  that the affinit
fb20: 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72  y conversions ar
fb30: 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b  e stored.** back
fb40: 20 69 6e 74 6f 20 74 68 65 20 69 6e 70 75 74 20   into the input 
fb50: 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64  registers P1 and
fb60: 20 50 33 2e 20 20 53 6f 20 74 68 69 73 20 6f 70   P3.  So this op
fb70: 63 6f 64 65 20 63 61 6e 20 63 61 75 73 65 0a 2a  code can cause.*
fb80: 2a 20 70 65 72 73 69 73 74 65 6e 74 20 63 68 61  * persistent cha
fb90: 6e 67 65 73 20 74 6f 20 72 65 67 69 73 74 65 72  nges to register
fba0: 73 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a  s P1 and P3..**.
fbb0: 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76  ** Once any conv
fbc0: 65 72 73 69 6f 6e 73 20 68 61 76 65 20 74 61 6b  ersions have tak
fbd0: 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65  en place, and ne
fbe0: 69 74 68 65 72 20 76 61 6c 75 65 20 69 73 20 4e  ither value is N
fbf0: 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c  ULL, .** the val
fc00: 75 65 73 20 61 72 65 20 63 6f 6d 70 61 72 65 64  ues are compared
fc10: 2e 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73  . If both values
fc20: 20 61 72 65 20 62 6c 6f 62 73 20 74 68 65 6e 20   are blobs then 
fc30: 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75  memcmp() is.** u
fc40: 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  sed to determine
fc50: 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
fc60: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
fc70: 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 0a   If both values.
fc80: 2a 2a 20 61 72 65 20 74 65 78 74 2c 20 74 68 65  ** are text, the
fc90: 6e 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74  n the appropriat
fca0: 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  e collating func
fcb0: 74 69 6f 6e 20 73 70 65 63 69 66 69 65 64 20 69  tion specified i
fcc0: 6e 0a 2a 2a 20 50 34 20 69 73 20 20 75 73 65 64  n.** P4 is  used
fcd0: 20 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70 61   to do the compa
fce0: 72 69 73 6f 6e 2e 20 20 49 66 20 50 34 20 69 73  rison.  If P4 is
fcf0: 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20 74   not specified t
fd00: 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20  hen.** memcmp() 
fd10: 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61  is used to compa
fd20: 72 65 20 74 65 78 74 20 73 74 72 69 6e 67 2e 20  re text string. 
fd30: 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20   If both values 
fd40: 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20  are.** numeric, 
fd50: 74 68 65 6e 20 61 20 6e 75 6d 65 72 69 63 20 63  then a numeric c
fd60: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 75 73 65  omparison is use
fd70: 64 2e 20 49 66 20 74 68 65 20 74 77 6f 20 76 61  d. If the two va
fd80: 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64  lues.** are of d
fd90: 69 66 66 65 72 65 6e 74 20 74 79 70 65 73 2c 20  ifferent types, 
fda0: 74 68 65 6e 20 6e 75 6d 62 65 72 73 20 61 72 65  then numbers are
fdb0: 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73   considered less
fdc0: 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73   than.** strings
fdd0: 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65   and strings are
fde0: 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73   considered less
fdf0: 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a   than blobs..*/.
fe00: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 65 20 50 31  /* Opcode: Le P1
fe10: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
fe20: 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50  Synopsis: IF r[P
fe30: 33 5d 3c 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  3]<=r[P1].**.** 
fe40: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
fe50: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
fe60: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
fe70: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
fe80: 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   if.** the conte
fe90: 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
fea0: 33 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f  3 is less than o
feb0: 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63  r equal to the c
fec0: 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67  ontent of.** reg
fed0: 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74  ister P1.  See t
fee0: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
fef0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
ff00: 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f  rmation..*/./* O
ff10: 70 63 6f 64 65 3a 20 47 74 20 50 31 20 50 32 20  pcode: Gt P1 P2 
ff20: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
ff30: 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3e 72  psis: IF r[P3]>r
ff40: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  [P1].**.** This 
ff50: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
ff60: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
ff70: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
ff80: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
ff90: 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * the content of
ffa0: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
ffb0: 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65  greater than the
ffc0: 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72   content of.** r
ffd0: 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65  egister P1.  See
ffe0: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66   the Lt opcode f
fff0: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
10000 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  formation..*/./*
10010 20 4f 70 63 6f 64 65 3a 20 47 65 20 50 31 20 50   Opcode: Ge P1 P
10020 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
10030 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d  nopsis: IF r[P3]
10040 3e 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68  >=r[P1].**.** Th
10050 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  is works just li
10060 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ke the Lt opcode
10070 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
10080 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
10090 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74  f.** the content
100a0 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20   of register P3 
100b0 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
100c0 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
100d0 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65  content of.** re
100e0 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20  gister P1.  See 
100f0 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
10100 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
10110 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  ormation..*/.cas
10120 65 20 4f 50 5f 45 71 3a 20 20 20 20 20 20 20 20  e OP_Eq:        
10130 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
10140 73 20 54 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20 69  s TK_EQ, jump, i
10150 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
10160 4f 50 5f 4e 65 3a 20 20 20 20 20 20 20 20 20 20  OP_Ne:          
10170 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
10180 54 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_NE, jump, in1
10190 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
101a0 5f 4c 74 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Lt:            
101b0 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
101c0 5f 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _LT, jump, in1, 
101d0 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c  in3 */.case OP_L
101e0 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e:              
101f0 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c   /* same as TK_L
10200 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  E, jump, in1, in
10210 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 74 3a  3 */.case OP_Gt:
10220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
10230 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 54 2c  * same as TK_GT,
10240 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
10250 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b  */.case OP_Ge: {
10260 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10270 73 61 6d 65 20 61 73 20 54 4b 5f 47 45 2c 20 6a  same as TK_GE, j
10280 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
10290 0a 20 20 69 6e 74 20 72 65 73 2c 20 72 65 73 32  .  int res, res2
102a0 3b 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74  ;      /* Result
102b0 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73   of the comparis
102c0 6f 6e 20 6f 66 20 70 49 6e 31 20 61 67 61 69 6e  on of pIn1 again
102d0 73 74 20 70 49 6e 33 20 2a 2f 0a 20 20 63 68 61  st pIn3 */.  cha
102e0 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20  r affinity;     
102f0 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 74 6f 20   /* Affinity to 
10300 75 73 65 20 66 6f 72 20 63 6f 6d 70 61 72 69 73  use for comparis
10310 6f 6e 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67  on */.  u16 flag
10320 73 31 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43  s1;         /* C
10330 6f 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76  opy of initial v
10340 61 6c 75 65 20 6f 66 20 70 49 6e 31 2d 3e 66 6c  alue of pIn1->fl
10350 61 67 73 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61  ags */.  u16 fla
10360 67 73 33 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  gs3;         /* 
10370 43 6f 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20  Copy of initial 
10380 76 61 6c 75 65 20 6f 66 20 70 49 6e 33 2d 3e 66  value of pIn3->f
10390 6c 61 67 73 20 2a 2f 0a 0a 20 20 70 49 6e 31 20  lags */..  pIn1 
103a0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
103b0 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  ;.  pIn3 = &aMem
103c0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61  [pOp->p3];.  fla
103d0 67 73 31 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67  gs1 = pIn1->flag
103e0 73 3b 0a 20 20 66 6c 61 67 73 33 20 3d 20 70 49  s;.  flags3 = pI
103f0 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28  n3->flags;.  if(
10400 20 28 66 6c 61 67 73 31 20 7c 20 66 6c 61 67 73   (flags1 | flags
10410 33 29 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20  3)&MEM_Null ){. 
10420 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 62 6f 74     /* One or bot
10430 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e  h operands are N
10440 55 4c 4c 20 2a 2f 0a 20 20 20 20 69 66 28 20 70  ULL */.    if( p
10450 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
10460 4e 55 4c 4c 45 51 20 29 7b 0a 20 20 20 20 20 20  NULLEQ ){.      
10470 2f 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c  /* If SQLITE_NUL
10480 4c 45 51 20 69 73 20 73 65 74 20 28 77 68 69 63  LEQ is set (whic
10490 68 20 77 69 6c 6c 20 6f 6e 6c 79 20 68 61 70 70  h will only happ
104a0 65 6e 20 69 66 20 74 68 65 20 6f 70 65 72 61 74  en if the operat
104b0 6f 72 20 69 73 0a 20 20 20 20 20 20 2a 2a 20 4f  or is.      ** O
104c0 50 5f 45 71 20 6f 72 20 4f 50 5f 4e 65 29 20 74  P_Eq or OP_Ne) t
104d0 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  hen take the jum
104e0 70 20 6f 72 20 6e 6f 74 20 64 65 70 65 6e 64 69  p or not dependi
104f0 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 20 20  ng on whether.  
10500 20 20 20 20 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f      ** or not bo
10510 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  th operands are 
10520 6e 75 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  null..      */. 
10530 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66 6c       assert( (fl
10540 61 67 73 31 20 26 20 4d 45 4d 5f 43 6c 65 61 72  ags1 & MEM_Clear
10550 65 64 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  ed)==0 );.      
10560 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35  assert( (pOp->p5
10570 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46   & SQLITE_JUMPIF
10580 4e 55 4c 4c 29 3d 3d 30 20 7c 7c 20 43 4f 52 52  NULL)==0 || CORR
10590 55 50 54 5f 44 42 20 29 3b 0a 20 20 20 20 20 20  UPT_DB );.      
105a0 74 65 73 74 63 61 73 65 28 20 28 70 4f 70 2d 3e  testcase( (pOp->
105b0 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50  p5 & SQLITE_JUMP
105c0 49 46 4e 55 4c 4c 29 21 3d 30 20 29 3b 0a 20 20  IFNULL)!=0 );.  
105d0 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 31 26      if( (flags1&
105e0 66 6c 61 67 73 33 26 4d 45 4d 5f 4e 75 6c 6c 29  flags3&MEM_Null)
105f0 21 3d 30 0a 20 20 20 20 20 20 20 26 26 20 28 66  !=0.       && (f
10600 6c 61 67 73 33 26 4d 45 4d 5f 43 6c 65 61 72 65  lags3&MEM_Cleare
10610 64 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20  d)==0.      ){. 
10620 20 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 20         res = 0; 
10630 20 2f 2a 20 4f 70 65 72 61 6e 64 73 20 61 72 65   /* Operands are
10640 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20   equal */.      
10650 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72  }else{.        r
10660 65 73 20 3d 20 28 28 66 6c 61 67 73 33 20 26 20  es = ((flags3 & 
10670 4d 45 4d 5f 4e 75 6c 6c 29 20 3f 20 2d 31 20 3a  MEM_Null) ? -1 :
10680 20 2b 31 29 3b 20 20 2f 2a 20 4f 70 65 72 61 6e   +1);  /* Operan
10690 64 73 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c  ds are not equal
106a0 20 2a 2f 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   */.      }.    
106b0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20  }else{.      /* 
106c0 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73  SQLITE_NULLEQ is
106d0 20 63 6c 65 61 72 20 61 6e 64 20 61 74 20 6c 65   clear and at le
106e0 61 73 74 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20  ast one operand 
106f0 69 73 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 2a  is NULL,.      *
10700 2a 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  * then the resul
10710 74 20 69 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c  t is always NULL
10720 2e 0a 20 20 20 20 20 20 2a 2a 20 54 68 65 20 6a  ..      ** The j
10730 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20  ump is taken if 
10740 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  the SQLITE_JUMPI
10750 46 4e 55 4c 4c 20 62 69 74 20 69 73 20 73 65 74  FNULL bit is set
10760 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
10770 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53   if( pOp->p5 & S
10780 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b  QLITE_STOREP2 ){
10790 0a 20 20 20 20 20 20 20 20 70 4f 75 74 20 3d 20  .        pOut = 
107a0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
107b0 20 20 20 20 20 20 20 20 69 43 6f 6d 70 61 72 65          iCompare
107c0 20 3d 20 31 3b 20 20 20 20 2f 2a 20 4f 70 65 72   = 1;    /* Oper
107d0 61 6e 64 73 20 61 72 65 20 6e 6f 74 20 65 71 75  ands are not equ
107e0 61 6c 20 2a 2f 0a 20 20 20 20 20 20 20 20 6d 65  al */.        me
107f0 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
10800 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 20  , pOut);.       
10810 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
10820 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  pOut, MEM_Null);
10830 0a 20 20 20 20 20 20 20 20 52 45 47 49 53 54 45  .        REGISTE
10840 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
10850 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d 65   pOut);.      }e
10860 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 56 64 62  lse{.        Vdb
10870 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33  eBranchTaken(2,3
10880 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  );.        if( p
10890 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
108a0 4a 55 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a 20 20  JUMPIFNULL ){.  
108b0 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d          goto jum
108c0 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 20  p_to_p2;.       
108d0 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20   }.      }.     
108e0 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
108f0 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 4e 65  }else{.    /* Ne
10900 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
10910 20 4e 55 4c 4c 2e 20 20 44 6f 20 61 20 63 6f 6d   NULL.  Do a com
10920 70 61 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20  parison. */.    
10930 61 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e  affinity = pOp->
10940 70 35 20 26 20 53 51 4c 49 54 45 5f 41 46 46 5f  p5 & SQLITE_AFF_
10950 4d 41 53 4b 3b 0a 20 20 20 20 69 66 28 20 61 66  MASK;.    if( af
10960 66 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41  finity>=SQLITE_A
10970 46 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20 20  FF_NUMERIC ){.  
10980 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 31 20      if( (flags1 
10990 7c 20 66 6c 61 67 73 33 29 26 4d 45 4d 5f 53 74  | flags3)&MEM_St
109a0 72 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  r ){.        if(
109b0 20 28 66 6c 61 67 73 31 20 26 20 28 4d 45 4d 5f   (flags1 & (MEM_
109c0 49 6e 74 7c 4d 45 4d 5f 49 6e 74 52 65 61 6c 7c  Int|MEM_IntReal|
109d0 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72  MEM_Real|MEM_Str
109e0 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20  ))==MEM_Str ){. 
109f0 20 20 20 20 20 20 20 20 20 61 70 70 6c 79 4e 75           applyNu
10a00 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49  mericAffinity(pI
10a10 6e 31 2c 30 29 3b 0a 20 20 20 20 20 20 20 20 20  n1,0);.         
10a20 20 61 73 73 65 72 74 28 20 66 6c 61 67 73 33 3d   assert( flags3=
10a30 3d 70 49 6e 33 2d 3e 66 6c 61 67 73 20 29 3b 0a  =pIn3->flags );.
10a40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 65 73            /* tes
10a50 74 63 61 73 65 28 20 66 6c 61 67 73 33 21 3d 70  tcase( flags3!=p
10a60 49 6e 33 2d 3e 66 6c 61 67 73 20 29 3b 0a 20 20  In3->flags );.  
10a70 20 20 20 20 20 20 20 20 2a 2a 20 74 68 69 73 20          ** this 
10a80 75 73 65 64 20 74 6f 20 62 65 20 70 6f 73 73 69  used to be possi
10a90 62 6c 65 20 77 69 74 68 20 70 49 6e 31 3d 3d 70  ble with pIn1==p
10aa0 49 6e 33 2c 20 62 75 74 20 6e 6f 74 20 73 69 6e  In3, but not sin
10ab0 63 65 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20  ce.          ** 
10ac0 74 68 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65  the column cache
10ad0 20 77 61 73 20 72 65 6d 6f 76 65 64 2e 20 20 54   was removed.  T
10ae0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 73 73  he following ass
10af0 69 67 6e 6d 65 6e 74 0a 20 20 20 20 20 20 20 20  ignment.        
10b00 20 20 2a 2a 20 69 73 20 65 73 73 65 6e 74 69 61    ** is essentia
10b10 6c 6c 79 20 61 20 6e 6f 2d 6f 70 2e 20 20 42 75  lly a no-op.  Bu
10b20 74 2c 20 69 74 20 70 72 6f 76 69 64 65 73 20 64  t, it provides d
10b30 65 66 65 6e 73 65 2d 69 6e 2d 64 65 70 74 68 0a  efense-in-depth.
10b40 20 20 20 20 20 20 20 20 20 20 2a 2a 20 69 6e 20            ** in 
10b50 63 61 73 65 20 6f 75 72 20 61 6e 61 6c 79 73 69  case our analysi
10b60 73 20 69 73 20 69 6e 63 6f 72 72 65 63 74 2c 20  s is incorrect, 
10b70 73 6f 20 69 74 20 69 73 20 6c 65 66 74 20 69 6e  so it is left in
10b80 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 66  . */.          f
10b90 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d 3e 66 6c  lags3 = pIn3->fl
10ba0 61 67 73 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ags;.        }. 
10bb0 20 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67         if( (flag
10bc0 73 33 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  s3 & (MEM_Int|ME
10bd0 4d 5f 49 6e 74 52 65 61 6c 7c 4d 45 4d 5f 52 65  M_IntReal|MEM_Re
10be0 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45  al|MEM_Str))==ME
10bf0 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20 20  M_Str ){.       
10c00 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41     applyNumericA
10c10 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 30 29 3b  ffinity(pIn3,0);
10c20 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
10c30 20 7d 0a 20 20 20 20 20 20 2f 2a 20 48 61 6e 64   }.      /* Hand
10c40 6c 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61  le the common ca
10c50 73 65 20 6f 66 20 69 6e 74 65 67 65 72 20 63 6f  se of integer co
10c60 6d 70 61 72 69 73 6f 6e 20 68 65 72 65 2c 20 61  mparison here, a
10c70 73 20 61 6e 0a 20 20 20 20 20 20 2a 2a 20 6f 70  s an.      ** op
10c80 74 69 6d 69 7a 61 74 69 6f 6e 2c 20 74 6f 20 61  timization, to a
10c90 76 6f 69 64 20 61 20 63 61 6c 6c 20 74 6f 20 73  void a call to s
10ca0 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65  qlite3MemCompare
10cb0 28 29 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  () */.      if( 
10cc0 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 70  (pIn1->flags & p
10cd0 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
10ce0 5f 49 6e 74 29 21 3d 30 20 29 7b 0a 20 20 20 20  _Int)!=0 ){.    
10cf0 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e      if( pIn3->u.
10d00 69 20 3e 20 70 49 6e 31 2d 3e 75 2e 69 20 29 7b  i > pIn1->u.i ){
10d10 20 72 65 73 20 3d 20 2b 31 3b 20 67 6f 74 6f 20   res = +1; goto 
10d20 63 6f 6d 70 61 72 65 5f 6f 70 3b 20 7d 0a 20 20  compare_op; }.  
10d30 20 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e        if( pIn3->
10d40 75 2e 69 20 3c 20 70 49 6e 31 2d 3e 75 2e 69 20  u.i < pIn1->u.i 
10d50 29 7b 20 72 65 73 20 3d 20 2d 31 3b 20 67 6f 74  ){ res = -1; got
10d60 6f 20 63 6f 6d 70 61 72 65 5f 6f 70 3b 20 7d 0a  o compare_op; }.
10d70 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b          res = 0;
10d80 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 63 6f  .        goto co
10d90 6d 70 61 72 65 5f 6f 70 3b 0a 20 20 20 20 20 20  mpare_op;.      
10da0 7d 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  }.    }else if( 
10db0 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45  affinity==SQLITE
10dc0 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a 20 20 20  _AFF_TEXT ){.   
10dd0 20 20 20 69 66 28 20 28 66 6c 61 67 73 31 20 26     if( (flags1 &
10de0 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26 26 20   MEM_Str)==0 && 
10df0 28 66 6c 61 67 73 31 26 28 4d 45 4d 5f 49 6e 74  (flags1&(MEM_Int
10e00 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e  |MEM_Real|MEM_In
10e10 74 52 65 61 6c 29 29 21 3d 30 20 29 7b 0a 20 20  tReal))!=0 ){.  
10e20 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
10e30 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
10e40 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 20 20 20  M_Int );.       
10e50 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 31 2d   testcase( pIn1-
10e60 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61  >flags & MEM_Rea
10e70 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73  l );.        tes
10e80 74 63 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61  tcase( pIn1->fla
10e90 67 73 20 26 20 4d 45 4d 5f 49 6e 74 52 65 61 6c  gs & MEM_IntReal
10ea0 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   );.        sqli
10eb0 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67  te3VdbeMemString
10ec0 69 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69  ify(pIn1, encodi
10ed0 6e 67 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20  ng, 1);.        
10ee0 74 65 73 74 63 61 73 65 28 20 28 66 6c 61 67 73  testcase( (flags
10ef0 31 26 4d 45 4d 5f 44 79 6e 29 20 21 3d 20 28 70  1&MEM_Dyn) != (p
10f00 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 44  In1->flags&MEM_D
10f10 79 6e 29 20 29 3b 0a 20 20 20 20 20 20 20 20 66  yn) );.        f
10f20 6c 61 67 73 31 20 3d 20 28 70 49 6e 31 2d 3e 66  lags1 = (pIn1->f
10f30 6c 61 67 73 20 26 20 7e 4d 45 4d 5f 54 79 70 65  lags & ~MEM_Type
10f40 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67 73 31 20  Mask) | (flags1 
10f50 26 20 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b  & MEM_TypeMask);
10f60 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
10f70 20 70 49 6e 31 21 3d 70 49 6e 33 20 29 3b 0a 20   pIn1!=pIn3 );. 
10f80 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
10f90 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f 53   (flags3 & MEM_S
10fa0 74 72 29 3d 3d 30 20 26 26 20 28 66 6c 61 67 73  tr)==0 && (flags
10fb0 33 26 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  3&(MEM_Int|MEM_R
10fc0 65 61 6c 7c 4d 45 4d 5f 49 6e 74 52 65 61 6c 29  eal|MEM_IntReal)
10fd0 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
10fe0 74 65 73 74 63 61 73 65 28 20 70 49 6e 33 2d 3e  testcase( pIn3->
10ff0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
11000 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63  );.        testc
11010 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73  ase( pIn3->flags
11020 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20   & MEM_Real );. 
11030 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28         testcase(
11040 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn3->flags & M
11050 45 4d 5f 49 6e 74 52 65 61 6c 20 29 3b 0a 20 20  EM_IntReal );.  
11060 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
11070 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70 49  eMemStringify(pI
11080 6e 33 2c 20 65 6e 63 6f 64 69 6e 67 2c 20 31 29  n3, encoding, 1)
11090 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61  ;.        testca
110a0 73 65 28 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f  se( (flags3&MEM_
110b0 44 79 6e 29 20 21 3d 20 28 70 49 6e 33 2d 3e 66  Dyn) != (pIn3->f
110c0 6c 61 67 73 26 4d 45 4d 5f 44 79 6e 29 20 29 3b  lags&MEM_Dyn) );
110d0 0a 20 20 20 20 20 20 20 20 66 6c 61 67 73 33 20  .        flags3 
110e0 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  = (pIn3->flags &
110f0 20 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20   ~MEM_TypeMask) 
11100 7c 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f  | (flags3 & MEM_
11110 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20 20 20 20  TypeMask);.     
11120 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73   }.    }.    ass
11130 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
11140 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20  ==P4_COLLSEQ || 
11150 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30  pOp->p4.pColl==0
11160 20 29 3b 0a 20 20 20 20 72 65 73 20 3d 20 73 71   );.    res = sq
11170 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28  lite3MemCompare(
11180 70 49 6e 33 2c 20 70 49 6e 31 2c 20 70 4f 70 2d  pIn3, pIn1, pOp-
11190 3e 70 34 2e 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a  >p4.pColl);.  }.
111a0 63 6f 6d 70 61 72 65 5f 6f 70 3a 0a 20 20 2f 2a  compare_op:.  /*
111b0 20 41 74 20 74 68 69 73 20 70 6f 69 6e 74 2c 20   At this point, 
111c0 72 65 73 20 69 73 20 6e 65 67 61 74 69 76 65 2c  res is negative,
111d0 20 7a 65 72 6f 2c 20 6f 72 20 70 6f 73 69 74 69   zero, or positi
111e0 76 65 20 69 66 20 72 65 67 5b 50 31 5d 20 69 73  ve if reg[P1] is
111f0 0a 20 20 2a 2a 20 6c 65 73 73 20 74 68 61 6e 2c  .  ** less than,
11200 20 65 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72   equal to, or gr
11210 65 61 74 65 72 20 74 68 61 6e 20 72 65 67 5b 50  eater than reg[P
11220 33 5d 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  3], respectively
11230 2e 20 20 43 6f 6d 70 75 74 65 0a 20 20 2a 2a 20  .  Compute.  ** 
11240 74 68 65 20 61 6e 73 77 65 72 20 74 6f 20 74 68  the answer to th
11250 69 73 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 72  is operator in r
11260 65 73 32 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f  es2, depending o
11270 6e 20 77 68 61 74 20 74 68 65 20 63 6f 6d 70 61  n what the compa
11280 72 69 73 6f 6e 0a 20 20 2a 2a 20 6f 70 65 72 61  rison.  ** opera
11290 74 6f 72 20 61 63 74 75 61 6c 6c 79 20 69 73 2e  tor actually is.
112a0 20 20 54 68 65 20 6e 65 78 74 20 62 6c 6f 63 6b    The next block
112b0 20 6f 66 20 63 6f 64 65 20 64 65 70 65 6e 64 73   of code depends
112c0 20 6f 6e 20 74 68 65 20 66 61 63 74 0a 20 20 2a   on the fact.  *
112d0 2a 20 74 68 61 74 20 74 68 65 20 36 20 63 6f 6d  * that the 6 com
112e0 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72  parison operator
112f0 73 20 61 72 65 20 63 6f 6e 73 65 63 75 74 69 76  s are consecutiv
11300 65 20 69 6e 74 65 67 65 72 73 20 69 6e 20 74 68  e integers in th
11310 69 73 0a 20 20 2a 2a 20 6f 72 64 65 72 3a 20 20  is.  ** order:  
11320 4e 45 2c 20 45 51 2c 20 47 54 2c 20 4c 45 2c 20  NE, EQ, GT, LE, 
11330 4c 54 2c 20 47 45 20 2a 2f 0a 20 20 61 73 73 65  LT, GE */.  asse
11340 72 74 28 20 4f 50 5f 45 71 3d 3d 4f 50 5f 4e 65  rt( OP_Eq==OP_Ne
11350 2b 31 20 29 3b 20 61 73 73 65 72 74 28 20 4f 50  +1 ); assert( OP
11360 5f 47 74 3d 3d 4f 50 5f 4e 65 2b 32 20 29 3b 20  _Gt==OP_Ne+2 ); 
11370 61 73 73 65 72 74 28 20 4f 50 5f 4c 65 3d 3d 4f  assert( OP_Le==O
11380 50 5f 4e 65 2b 33 20 29 3b 0a 20 20 61 73 73 65  P_Ne+3 );.  asse
11390 72 74 28 20 4f 50 5f 4c 74 3d 3d 4f 50 5f 4e 65  rt( OP_Lt==OP_Ne
113a0 2b 34 20 29 3b 20 61 73 73 65 72 74 28 20 4f 50  +4 ); assert( OP
113b0 5f 47 65 3d 3d 4f 50 5f 4e 65 2b 35 20 29 3b 0a  _Ge==OP_Ne+5 );.
113c0 20 20 69 66 28 20 72 65 73 3c 30 20 29 7b 20 20    if( res<0 ){  
113d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113e0 20 20 20 20 20 20 2f 2a 20 6e 65 2c 20 65 71 2c        /* ne, eq,
113f0 20 67 74 2c 20 6c 65 2c 20 6c 74 2c 20 67 65 20   gt, le, lt, ge 
11400 2a 2f 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  */.    static co
11410 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
11420 72 20 61 4c 54 62 5b 5d 20 3d 20 7b 20 31 2c 20  r aLTb[] = { 1, 
11430 20 30 2c 20 20 30 2c 20 20 31 2c 20 20 31 2c 20   0,  0,  1,  1, 
11440 20 30 20 7d 3b 0a 20 20 20 20 72 65 73 32 20 3d   0 };.    res2 =
11450 20 61 4c 54 62 5b 70 4f 70 2d 3e 6f 70 63 6f 64   aLTb[pOp->opcod
11460 65 20 2d 20 4f 50 5f 4e 65 5d 3b 0a 20 20 7d 65  e - OP_Ne];.  }e
11470 6c 73 65 20 69 66 28 20 72 65 73 3d 3d 30 20 29  lse if( res==0 )
11480 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  {.    static con
11490 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
114a0 20 61 45 51 62 5b 5d 20 3d 20 7b 20 30 2c 20 20   aEQb[] = { 0,  
114b0 31 2c 20 20 30 2c 20 20 31 2c 20 20 30 2c 20 20  1,  0,  1,  0,  
114c0 31 20 7d 3b 0a 20 20 20 20 72 65 73 32 20 3d 20  1 };.    res2 = 
114d0 61 45 51 62 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65  aEQb[pOp->opcode
114e0 20 2d 20 4f 50 5f 4e 65 5d 3b 0a 20 20 7d 65 6c   - OP_Ne];.  }el
114f0 73 65 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63  se{.    static c
11500 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
11510 61 72 20 61 47 54 62 5b 5d 20 3d 20 7b 20 31 2c  ar aGTb[] = { 1,
11520 20 20 30 2c 20 20 31 2c 20 20 30 2c 20 20 30 2c    0,  1,  0,  0,
11530 20 20 31 20 7d 3b 0a 20 20 20 20 72 65 73 32 20    1 };.    res2 
11540 3d 20 61 47 54 62 5b 70 4f 70 2d 3e 6f 70 63 6f  = aGTb[pOp->opco
11550 64 65 20 2d 20 4f 50 5f 4e 65 5d 3b 0a 20 20 7d  de - OP_Ne];.  }
11560 0a 0a 20 20 2f 2a 20 55 6e 64 6f 20 61 6e 79 20  ..  /* Undo any 
11570 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20  changes made by 
11580 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29 20  applyAffinity() 
11590 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65 67  to the input reg
115a0 69 73 74 65 72 73 2e 20 2a 2f 0a 20 20 61 73 73  isters. */.  ass
115b0 65 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67  ert( (pIn1->flag
115c0 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20  s & MEM_Dyn) == 
115d0 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 44 79  (flags1 & MEM_Dy
115e0 6e 29 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c  n) );.  pIn1->fl
115f0 61 67 73 20 3d 20 66 6c 61 67 73 31 3b 0a 20 20  ags = flags1;.  
11600 61 73 73 65 72 74 28 20 28 70 49 6e 33 2d 3e 66  assert( (pIn3->f
11610 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20  lags & MEM_Dyn) 
11620 3d 3d 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d  == (flags3 & MEM
11630 5f 44 79 6e 29 20 29 3b 0a 20 20 70 49 6e 33 2d  _Dyn) );.  pIn3-
11640 3e 66 6c 61 67 73 20 3d 20 66 6c 61 67 73 33 3b  >flags = flags3;
11650 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  ..  if( pOp->p5 
11660 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  & SQLITE_STOREP2
11670 20 29 7b 0a 20 20 20 20 70 4f 75 74 20 3d 20 26   ){.    pOut = &
11680 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
11690 20 20 20 69 43 6f 6d 70 61 72 65 20 3d 20 72 65     iCompare = re
116a0 73 3b 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d  s;.    if( (pOp-
116b0 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4b 45 45  >p5 & SQLITE_KEE
116c0 50 4e 55 4c 4c 29 21 3d 30 20 29 7b 0a 20 20 20  PNULL)!=0 ){.   
116d0 20 20 20 2f 2a 20 54 68 65 20 4b 45 45 50 4e 55     /* The KEEPNU
116e0 4c 4c 20 66 6c 61 67 20 70 72 65 76 65 6e 74 73  LL flag prevents
116f0 20 4f 50 5f 45 71 20 66 72 6f 6d 20 6f 76 65 72   OP_Eq from over
11700 77 72 69 74 69 6e 67 20 61 20 4e 55 4c 4c 20 77  writing a NULL w
11710 69 74 68 20 31 0a 20 20 20 20 20 20 2a 2a 20 61  ith 1.      ** a
11720 6e 64 20 70 72 65 76 65 6e 74 73 20 4f 50 5f 4e  nd prevents OP_N
11730 65 20 66 72 6f 6d 20 6f 76 65 72 77 72 69 74 69  e from overwriti
11740 6e 67 20 4e 55 4c 4c 20 77 69 74 68 20 30 2e 20  ng NULL with 0. 
11750 20 54 68 69 73 20 66 6c 61 67 0a 20 20 20 20 20   This flag.     
11760 20 2a 2a 20 69 73 20 6f 6e 6c 79 20 75 73 65 64   ** is only used
11770 20 69 6e 20 63 6f 6e 74 65 78 74 73 20 77 68 65   in contexts whe
11780 72 65 20 65 69 74 68 65 72 3a 0a 20 20 20 20 20  re either:.     
11790 20 2a 2a 20 20 20 28 31 29 20 6f 70 3d 3d 4f 50   **   (1) op==OP
117a0 5f 45 71 20 26 26 20 28 72 5b 50 32 5d 3d 3d 4e  _Eq && (r[P2]==N
117b0 55 4c 4c 20 7c 7c 20 72 5b 50 32 5d 3d 3d 30 29  ULL || r[P2]==0)
117c0 0a 20 20 20 20 20 20 2a 2a 20 20 20 28 32 29 20  .      **   (2) 
117d0 6f 70 3d 3d 4f 50 5f 4e 65 20 26 26 20 28 72 5b  op==OP_Ne && (r[
117e0 50 32 5d 3d 3d 4e 55 4c 4c 20 7c 7c 20 72 5b 50  P2]==NULL || r[P
117f0 32 5d 3d 3d 31 29 0a 20 20 20 20 20 20 2a 2a 20  2]==1).      ** 
11800 54 68 65 72 65 66 6f 72 65 20 69 74 20 69 73 20  Therefore it is 
11810 6e 6f 74 20 6e 65 63 65 73 73 61 72 79 20 74 6f  not necessary to
11820 20 63 68 65 63 6b 20 74 68 65 20 63 6f 6e 74 65   check the conte
11830 6e 74 20 6f 66 20 72 5b 50 32 5d 20 66 6f 72 0a  nt of r[P2] for.
11840 20 20 20 20 20 20 2a 2a 20 4e 55 4c 4c 2e 20 2a        ** NULL. *
11850 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
11860 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
11870 4e 65 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  Ne || pOp->opcod
11880 65 3d 3d 4f 50 5f 45 71 20 29 3b 0a 20 20 20 20  e==OP_Eq );.    
11890 20 20 61 73 73 65 72 74 28 20 72 65 73 32 3d 3d    assert( res2==
118a0 30 20 7c 7c 20 72 65 73 32 3d 3d 31 20 29 3b 0a  0 || res2==1 );.
118b0 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
118c0 72 65 73 32 3d 3d 30 20 26 26 20 70 4f 70 2d 3e  res2==0 && pOp->
118d0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 29 3b  opcode==OP_Eq );
118e0 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
118f0 20 72 65 73 32 3d 3d 31 20 26 26 20 70 4f 70 2d   res2==1 && pOp-
11900 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 29  >opcode==OP_Eq )
11910 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65  ;.      testcase
11920 28 20 72 65 73 32 3d 3d 30 20 26 26 20 70 4f 70  ( res2==0 && pOp
11930 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20  ->opcode==OP_Ne 
11940 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73  );.      testcas
11950 65 28 20 72 65 73 32 3d 3d 31 20 26 26 20 70 4f  e( res2==1 && pO
11960 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65  p->opcode==OP_Ne
11970 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 28 70   );.      if( (p
11980 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45  Op->opcode==OP_E
11990 71 29 3d 3d 72 65 73 32 20 29 20 62 72 65 61 6b  q)==res2 ) break
119a0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6d 65 6d 41  ;.    }.    memA
119b0 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
119c0 70 4f 75 74 29 3b 0a 20 20 20 20 4d 65 6d 53 65  pOut);.    MemSe
119d0 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
119e0 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f  MEM_Int);.    pO
119f0 75 74 2d 3e 75 2e 69 20 3d 20 72 65 73 32 3b 0a  ut->u.i = res2;.
11a00 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
11a10 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74  CE(pOp->p2, pOut
11a20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
11a30 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
11a40 72 65 73 32 21 3d 30 2c 20 28 70 4f 70 2d 3e 70  res2!=0, (pOp->p
11a50 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45  5 & SQLITE_NULLE
11a60 51 29 3f 32 3a 33 29 3b 0a 20 20 20 20 69 66 28  Q)?2:3);.    if(
11a70 20 72 65 73 32 20 29 7b 0a 20 20 20 20 20 20 67   res2 ){.      g
11a80 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
11a90 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
11aa0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
11ab0 20 45 6c 73 65 4e 6f 74 45 71 20 2a 20 50 32 20   ElseNotEq * P2 
11ac0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73  * * *.**.** This
11ad0 20 6f 70 63 6f 64 65 20 6d 75 73 74 20 69 6d 6d   opcode must imm
11ae0 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 20  ediately follow 
11af0 61 6e 20 4f 50 5f 4c 74 20 6f 72 20 4f 50 5f 47  an OP_Lt or OP_G
11b00 74 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65  t comparison ope
11b10 72 61 74 6f 72 2e 0a 2a 2a 20 49 66 20 72 65 73  rator..** If res
11b20 75 6c 74 20 6f 66 20 61 6e 20 4f 50 5f 45 71 20  ult of an OP_Eq 
11b30 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 6e 20 74 68  comparison on th
11b40 65 20 73 61 6d 65 20 74 77 6f 20 6f 70 65 72 61  e same two opera
11b50 6e 64 73 0a 2a 2a 20 77 6f 75 6c 64 20 68 61 76  nds.** would hav
11b60 65 20 62 65 20 4e 55 4c 4c 20 6f 72 20 66 61 6c  e be NULL or fal
11b70 73 65 20 28 30 29 2c 20 74 68 65 6e 20 74 68 65  se (0), then the
11b80 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a  n jump to P2. .*
11b90 2a 20 49 66 20 74 68 65 20 72 65 73 75 6c 74 20  * If the result 
11ba0 6f 66 20 61 6e 20 4f 50 5f 45 71 20 63 6f 6d 70  of an OP_Eq comp
11bb0 61 72 69 73 6f 6e 20 6f 6e 20 74 68 65 20 74 77  arison on the tw
11bc0 6f 20 70 72 65 76 69 6f 75 73 20 6f 70 65 72 61  o previous opera
11bd0 6e 64 73 0a 2a 2a 20 77 6f 75 6c 64 20 68 61 76  nds.** would hav
11be0 65 20 62 65 65 6e 20 74 72 75 65 20 28 31 29 2c  e been true (1),
11bf0 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75   then fall throu
11c00 67 68 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45  gh..*/.case OP_E
11c10 6c 73 65 4e 6f 74 45 71 3a 20 7b 20 20 20 20 20  lseNotEq: {     
11c20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
11c30 45 53 43 41 50 45 2c 20 6a 75 6d 70 20 2a 2f 0a  ESCAPE, jump */.
11c40 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e 61 4f    assert( pOp>aO
11c50 70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p );.  assert( p
11c60 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f  Op[-1].opcode==O
11c70 50 5f 4c 74 20 7c 7c 20 70 4f 70 5b 2d 31 5d 2e  P_Lt || pOp[-1].
11c80 6f 70 63 6f 64 65 3d 3d 4f 50 5f 47 74 20 29 3b  opcode==OP_Gt );
11c90 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d  .  assert( pOp[-
11ca0 31 5d 2e 70 35 20 26 20 53 51 4c 49 54 45 5f 53  1].p5 & SQLITE_S
11cb0 54 4f 52 45 50 32 20 29 3b 0a 20 20 56 64 62 65  TOREP2 );.  Vdbe
11cc0 42 72 61 6e 63 68 54 61 6b 65 6e 28 69 43 6f 6d  BranchTaken(iCom
11cd0 70 61 72 65 21 3d 30 2c 20 32 29 3b 0a 20 20 69  pare!=0, 2);.  i
11ce0 66 28 20 69 43 6f 6d 70 61 72 65 21 3d 30 20 29  f( iCompare!=0 )
11cf0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
11d00 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f  ;.  break;.}.../
11d10 2a 20 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75 74  * Opcode: Permut
11d20 61 74 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20 2a  ation * * * P4 *
11d30 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 70  .**.** Set the p
11d40 65 72 6d 75 74 61 74 69 6f 6e 20 75 73 65 64 20  ermutation used 
11d50 62 79 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72  by the OP_Compar
11d60 65 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 74 68  e operator in th
11d70 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75  e next.** instru
11d80 63 74 69 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d  ction.  The perm
11d90 75 74 61 74 69 6f 6e 20 69 73 20 73 74 6f 72 65  utation is store
11da0 64 20 69 6e 20 74 68 65 20 50 34 20 6f 70 65 72  d in the P4 oper
11db0 61 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70  and..**.** The p
11dc0 65 72 6d 75 74 61 74 69 6f 6e 20 69 73 20 6f 6e  ermutation is on
11dd0 6c 79 20 76 61 6c 69 64 20 75 6e 74 69 6c 20 74  ly valid until t
11de0 68 65 20 6e 65 78 74 20 4f 50 5f 43 6f 6d 70 61  he next OP_Compa
11df0 72 65 20 74 68 61 74 20 68 61 73 0a 2a 2a 20 74  re that has.** t
11e00 68 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54  he OPFLAG_PERMUT
11e10 45 20 62 69 74 20 73 65 74 20 69 6e 20 50 35 2e  E bit set in P5.
11e20 20 54 79 70 69 63 61 6c 6c 79 20 74 68 65 20 4f   Typically the O
11e30 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 73 68  P_Permutation sh
11e40 6f 75 6c 64 20 0a 2a 2a 20 6f 63 63 75 72 20 69  ould .** occur i
11e50 6d 6d 65 64 69 61 74 65 6c 79 20 70 72 69 6f 72  mmediately prior
11e60 20 74 6f 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61   to the OP_Compa
11e70 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 69  re..**.** The fi
11e80 72 73 74 20 69 6e 74 65 67 65 72 20 69 6e 20 74  rst integer in t
11e90 68 65 20 50 34 20 69 6e 74 65 67 65 72 20 61 72  he P4 integer ar
11ea0 72 61 79 20 69 73 20 74 68 65 20 6c 65 6e 67 74  ray is the lengt
11eb0 68 20 6f 66 20 74 68 65 20 61 72 72 61 79 0a 2a  h of the array.*
11ec0 2a 20 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 62  * and does not b
11ed0 65 63 6f 6d 65 20 70 61 72 74 20 6f 66 20 74 68  ecome part of th
11ee0 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 2e 0a 2a  e permutation..*
11ef0 2f 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d 75 74  /.case OP_Permut
11f00 61 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73 65 72  ation: {.  asser
11f10 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
11f20 50 34 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a 20  P4_INTARRAY );. 
11f30 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
11f40 2e 61 69 20 29 3b 0a 20 20 61 73 73 65 72 74 28  .ai );.  assert(
11f50 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d   pOp[1].opcode==
11f60 4f 50 5f 43 6f 6d 70 61 72 65 20 29 3b 0a 20 20  OP_Compare );.  
11f70 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70  assert( pOp[1].p
11f80 35 20 26 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55  5 & OPFLAG_PERMU
11f90 54 45 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  TE );.  break;.}
11fa0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d  ../* Opcode: Com
11fb0 70 61 72 65 20 50 31 20 50 32 20 50 33 20 50 34  pare P1 P2 P3 P4
11fc0 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
11fd0 20 72 5b 50 31 40 50 33 5d 20 3c 2d 3e 20 72 5b   r[P1@P3] <-> r[
11fe0 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d  P2@P3].**.** Com
11ff0 70 61 72 65 20 74 77 6f 20 76 65 63 74 6f 72 73  pare two vectors
12000 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 69 6e   of registers in
12010 20 72 65 67 28 50 31 29 2e 2e 72 65 67 28 50 31   reg(P1)..reg(P1
12020 2b 50 33 2d 31 29 20 28 63 61 6c 6c 20 74 68 69  +P3-1) (call thi
12030 73 0a 2a 2a 20 76 65 63 74 6f 72 20 22 41 22 29  s.** vector "A")
12040 20 61 6e 64 20 69 6e 20 72 65 67 28 50 32 29 2e   and in reg(P2).
12050 2e 72 65 67 28 50 32 2b 50 33 2d 31 29 20 28 22  .reg(P2+P3-1) ("
12060 42 22 29 2e 20 20 53 61 76 65 20 74 68 65 20 72  B").  Save the r
12070 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20  esult of.** the 
12080 63 6f 6d 70 61 72 69 73 6f 6e 20 66 6f 72 20 75  comparison for u
12090 73 65 20 62 79 20 74 68 65 20 6e 65 78 74 20 4f  se by the next O
120a0 50 5f 4a 75 6d 70 20 69 6e 73 74 72 75 63 74 2e  P_Jump instruct.
120b0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73  .**.** If P5 has
120c0 20 74 68 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d   the OPFLAG_PERM
120d0 55 54 45 20 62 69 74 20 73 65 74 2c 20 74 68 65  UTE bit set, the
120e0 6e 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 63  n the order of c
120f0 6f 6d 70 61 72 69 73 6f 6e 20 69 73 0a 2a 2a 20  omparison is.** 
12100 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
12110 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50  e most recent OP
12120 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 6f 70 65  _Permutation ope
12130 72 61 74 6f 72 2e 20 20 49 66 20 74 68 65 0a 2a  rator.  If the.*
12140 2a 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  * OPFLAG_PERMUTE
12150 20 62 69 74 20 69 73 20 63 6c 65 61 72 2c 20 74   bit is clear, t
12160 68 65 6e 20 72 65 67 69 73 74 65 72 20 61 72 65  hen register are
12170 20 63 6f 6d 70 61 72 65 64 20 69 6e 20 73 65 71   compared in seq
12180 75 65 6e 74 69 61 6c 0a 2a 2a 20 6f 72 64 65 72  uential.** order
12190 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  ..**.** P4 is a 
121a0 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72  KeyInfo structur
121b0 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 63  e that defines c
121c0 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
121d0 65 73 20 61 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f  es and sort.** o
121e0 72 64 65 72 73 20 66 6f 72 20 74 68 65 20 63 6f  rders for the co
121f0 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 65 20 70  mparison.  The p
12200 65 72 6d 75 74 61 74 69 6f 6e 20 61 70 70 6c 69  ermutation appli
12210 65 73 20 74 6f 20 72 65 67 69 73 74 65 72 73 0a  es to registers.
12220 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 20 4b 65  ** only.  The Ke
12230 79 49 6e 66 6f 20 65 6c 65 6d 65 6e 74 73 20 61  yInfo elements a
12240 72 65 20 75 73 65 64 20 73 65 71 75 65 6e 74 69  re used sequenti
12250 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ally..**.** The 
12260 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 20  comparison is a 
12270 73 6f 72 74 20 63 6f 6d 70 61 72 69 73 6f 6e 2c  sort comparison,
12280 20 73 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70 61 72   so NULLs compar
12290 65 20 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c  e equal,.** NULL
122a0 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20  s are less than 
122b0 6e 75 6d 62 65 72 73 2c 20 6e 75 6d 62 65 72 73  numbers, numbers
122c0 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 73   are less than s
122d0 74 72 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20 73  trings,.** and s
122e0 74 72 69 6e 67 73 20 61 72 65 20 6c 65 73 73 20  trings are less 
122f0 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63  than blobs..*/.c
12300 61 73 65 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20  ase OP_Compare: 
12310 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74  {.  int n;.  int
12320 20 69 3b 0a 20 20 69 6e 74 20 70 31 3b 0a 20 20   i;.  int p1;.  
12330 69 6e 74 20 70 32 3b 0a 20 20 63 6f 6e 73 74 20  int p2;.  const 
12340 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
12350 6f 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20  o;.  int idx;.  
12360 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20  CollSeq *pColl; 
12370 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20     /* Collating 
12380 73 65 71 75 65 6e 63 65 20 74 6f 20 75 73 65 20  sequence to use 
12390 6f 6e 20 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a  on this term */.
123a0 20 20 69 6e 74 20 62 52 65 76 3b 20 20 20 20 20    int bRev;     
123b0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72       /* True for
123c0 20 44 45 53 43 45 4e 44 49 4e 47 20 73 6f 72 74   DESCENDING sort
123d0 20 6f 72 64 65 72 20 2a 2f 0a 20 20 69 6e 74 20   order */.  int 
123e0 2a 61 50 65 72 6d 75 74 65 3b 20 20 20 20 20 2f  *aPermute;     /
123f0 2a 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f  * The permutatio
12400 6e 20 2a 2f 0a 0a 20 20 69 66 28 20 28 70 4f 70  n */..  if( (pOp
12410 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 45  ->p5 & OPFLAG_PE
12420 52 4d 55 54 45 29 3d 3d 30 20 29 7b 0a 20 20 20  RMUTE)==0 ){.   
12430 20 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20   aPermute = 0;. 
12440 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
12450 72 74 28 20 70 4f 70 3e 61 4f 70 20 29 3b 0a 20  rt( pOp>aOp );. 
12460 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d     assert( pOp[-
12470 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 50 65  1].opcode==OP_Pe
12480 72 6d 75 74 61 74 69 6f 6e 20 29 3b 0a 20 20 20  rmutation );.   
12490 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d   assert( pOp[-1]
124a0 2e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41  .p4type==P4_INTA
124b0 52 52 41 59 20 29 3b 0a 20 20 20 20 61 50 65 72  RRAY );.    aPer
124c0 6d 75 74 65 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70  mute = pOp[-1].p
124d0 34 2e 61 69 20 2b 20 31 3b 0a 20 20 20 20 61 73  4.ai + 1;.    as
124e0 73 65 72 74 28 20 61 50 65 72 6d 75 74 65 21 3d  sert( aPermute!=
124f0 30 20 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d 20 70  0 );.  }.  n = p
12500 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b 65 79 49 6e  Op->p3;.  pKeyIn
12510 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65  fo = pOp->p4.pKe
12520 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28  yInfo;.  assert(
12530 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74   n>0 );.  assert
12540 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30 20 29 3b  ( pKeyInfo!=0 );
12550 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  .  p1 = pOp->p1;
12560 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b  .  p2 = pOp->p2;
12570 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
12580 45 42 55 47 0a 20 20 69 66 28 20 61 50 65 72 6d  EBUG.  if( aPerm
12590 75 74 65 20 29 7b 0a 20 20 20 20 69 6e 74 20 6b  ute ){.    int k
125a0 2c 20 6d 78 20 3d 20 30 3b 0a 20 20 20 20 66 6f  , mx = 0;.    fo
125b0 72 28 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29  r(k=0; k<n; k++)
125c0 20 69 66 28 20 61 50 65 72 6d 75 74 65 5b 6b 5d   if( aPermute[k]
125d0 3e 6d 78 20 29 20 6d 78 20 3d 20 61 50 65 72 6d  >mx ) mx = aPerm
125e0 75 74 65 5b 6b 5d 3b 0a 20 20 20 20 61 73 73 65  ute[k];.    asse
125f0 72 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6d  rt( p1>0 && p1+m
12600 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  x<=(p->nMem+1 - 
12610 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
12620 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e  .    assert( p2>
12630 30 20 26 26 20 70 32 2b 6d 78 3c 3d 28 70 2d 3e  0 && p2+mx<=(p->
12640 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
12650 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 65 6c 73  sor)+1 );.  }els
12660 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
12670 31 3e 30 20 26 26 20 70 31 2b 6e 3c 3d 28 70 2d  1>0 && p1+n<=(p-
12680 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
12690 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20 61  rsor)+1 );.    a
126a0 73 73 65 72 74 28 20 70 32 3e 30 20 26 26 20 70  ssert( p2>0 && p
126b0 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  2+n<=(p->nMem+1 
126c0 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  - p->nCursor)+1 
126d0 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a  );.  }.#endif /*
126e0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f   SQLITE_DEBUG */
126f0 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b  .  for(i=0; i<n;
12700 20 69 2b 2b 29 7b 0a 20 20 20 20 69 64 78 20 3d   i++){.    idx =
12710 20 61 50 65 72 6d 75 74 65 20 3f 20 61 50 65 72   aPermute ? aPer
12720 6d 75 74 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20  mute[i] : i;.   
12730 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
12740 6c 69 64 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78  lid(&aMem[p1+idx
12750 5d 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  ]) );.    assert
12760 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
12770 65 6d 5b 70 32 2b 69 64 78 5d 29 20 29 3b 0a 20  em[p2+idx]) );. 
12780 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
12790 45 28 70 31 2b 69 64 78 2c 20 26 61 4d 65 6d 5b  E(p1+idx, &aMem[
127a0 70 31 2b 69 64 78 5d 29 3b 0a 20 20 20 20 52 45  p1+idx]);.    RE
127b0 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b  GISTER_TRACE(p2+
127c0 69 64 78 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64  idx, &aMem[p2+id
127d0 78 5d 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  x]);.    assert(
127e0 20 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e 4b 65   i<pKeyInfo->nKe
127f0 79 46 69 65 6c 64 20 29 3b 0a 20 20 20 20 70 43  yField );.    pC
12800 6f 6c 6c 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e  oll = pKeyInfo->
12810 61 43 6f 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52  aColl[i];.    bR
12820 65 76 20 3d 20 28 70 4b 65 79 49 6e 66 6f 2d 3e  ev = (pKeyInfo->
12830 61 53 6f 72 74 46 6c 61 67 73 5b 69 5d 20 26 20  aSortFlags[i] & 
12840 4b 45 59 49 4e 46 4f 5f 4f 52 44 45 52 5f 44 45  KEYINFO_ORDER_DE
12850 53 43 29 3b 0a 20 20 20 20 69 43 6f 6d 70 61 72  SC);.    iCompar
12860 65 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f  e = sqlite3MemCo
12870 6d 70 61 72 65 28 26 61 4d 65 6d 5b 70 31 2b 69  mpare(&aMem[p1+i
12880 64 78 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64  dx], &aMem[p2+id
12890 78 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20 20  x], pColl);.    
128a0 69 66 28 20 69 43 6f 6d 70 61 72 65 20 29 7b 0a  if( iCompare ){.
128b0 20 20 20 20 20 20 69 66 28 20 28 70 4b 65 79 49        if( (pKeyI
128c0 6e 66 6f 2d 3e 61 53 6f 72 74 46 6c 61 67 73 5b  nfo->aSortFlags[
128d0 69 5d 20 26 20 4b 45 59 49 4e 46 4f 5f 4f 52 44  i] & KEYINFO_ORD
128e0 45 52 5f 42 49 47 4e 55 4c 4c 29 20 0a 20 20 20  ER_BIGNULL) .   
128f0 20 20 20 20 26 26 20 28 28 61 4d 65 6d 5b 70 31      && ((aMem[p1
12900 2b 69 64 78 5d 2e 66 6c 61 67 73 20 26 20 4d 45  +idx].flags & ME
12910 4d 5f 4e 75 6c 6c 29 20 7c 7c 20 28 61 4d 65 6d  M_Null) || (aMem
12920 5b 70 32 2b 69 64 78 5d 2e 66 6c 61 67 73 20 26  [p2+idx].flags &
12930 20 4d 45 4d 5f 4e 75 6c 6c 29 29 0a 20 20 20 20   MEM_Null)).    
12940 20 20 29 7b 0a 20 20 20 20 20 20 20 20 69 43 6f    ){.        iCo
12950 6d 70 61 72 65 20 3d 20 2d 69 43 6f 6d 70 61 72  mpare = -iCompar
12960 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  e;.      }.     
12970 20 69 66 28 20 62 52 65 76 20 29 20 69 43 6f 6d   if( bRev ) iCom
12980 70 61 72 65 20 3d 20 2d 69 43 6f 6d 70 61 72 65  pare = -iCompare
12990 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
129a0 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
129b0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
129c0 4a 75 6d 70 20 50 31 20 50 32 20 50 33 20 2a 20  Jump P1 P2 P3 * 
129d0 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  *.**.** Jump to 
129e0 74 68 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  the instruction 
129f0 61 74 20 61 64 64 72 65 73 73 20 50 31 2c 20 50  at address P1, P
12a00 32 2c 20 6f 72 20 50 33 20 64 65 70 65 6e 64 69  2, or P3 dependi
12a10 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a  ng on whether.**
12a20 20 69 6e 20 74 68 65 20 6d 6f 73 74 20 72 65 63   in the most rec
12a30 65 6e 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 69  ent OP_Compare i
12a40 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 65 20 50  nstruction the P
12a50 31 20 76 65 63 74 6f 72 20 77 61 73 20 6c 65 73  1 vector was les
12a60 73 20 74 68 61 6e 0a 2a 2a 20 65 71 75 61 6c 20  s than.** equal 
12a70 74 6f 2c 20 6f 72 20 67 72 65 61 74 65 72 20 74  to, or greater t
12a80 68 61 6e 20 74 68 65 20 50 32 20 76 65 63 74 6f  han the P2 vecto
12a90 72 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  r, respectively.
12aa0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 75 6d 70  .*/.case OP_Jump
12ab0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
12ac0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28  /* jump */.  if(
12ad0 20 69 43 6f 6d 70 61 72 65 3c 30 20 29 7b 0a 20   iCompare<0 ){. 
12ae0 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
12af0 65 6e 28 30 2c 34 29 3b 20 70 4f 70 20 3d 20 26  en(0,4); pOp = &
12b00 61 4f 70 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d  aOp[pOp->p1 - 1]
12b10 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69 43  ;.  }else if( iC
12b20 6f 6d 70 61 72 65 3d 3d 30 20 29 7b 0a 20 20 20  ompare==0 ){.   
12b30 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
12b40 28 31 2c 34 29 3b 20 70 4f 70 20 3d 20 26 61 4f  (1,4); pOp = &aO
12b50 70 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a  p[pOp->p2 - 1];.
12b60 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62    }else{.    Vdb
12b70 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c 34  eBranchTaken(2,4
12b80 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f  ); pOp = &aOp[pO
12b90 70 2d 3e 70 33 20 2d 20 31 5d 3b 0a 20 20 7d 0a  p->p3 - 1];.  }.
12ba0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
12bb0 70 63 6f 64 65 3a 20 41 6e 64 20 50 31 20 50 32  pcode: And P1 P2
12bc0 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
12bd0 73 69 73 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31  sis: r[P3]=(r[P1
12be0 5d 20 26 26 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a  ] && r[P2]).**.*
12bf0 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63  * Take the logic
12c00 61 6c 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61  al AND of the va
12c10 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
12c20 73 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a  s P1 and P2 and.
12c30 2a 2a 20 77 72 69 74 65 20 74 68 65 20 72 65 73  ** write the res
12c40 75 6c 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ult into registe
12c50 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65  r P3..**.** If e
12c60 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20 69  ither P1 or P2 i
12c70 73 20 30 20 28 66 61 6c 73 65 29 20 74 68 65 6e  s 0 (false) then
12c80 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 30   the result is 0
12c90 20 65 76 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20   even if.** the 
12ca0 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  other input is N
12cb0 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64  ULL.  A NULL and
12cc0 20 74 72 75 65 20 6f 72 20 74 77 6f 20 4e 55 4c   true or two NUL
12cd0 4c 73 20 67 69 76 65 0a 2a 2a 20 61 20 4e 55 4c  Ls give.** a NUL
12ce0 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a 20  L output..*/./* 
12cf0 4f 70 63 6f 64 65 3a 20 4f 72 20 50 31 20 50 32  Opcode: Or P1 P2
12d00 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
12d10 73 69 73 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31  sis: r[P3]=(r[P1
12d20 5d 20 7c 7c 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a  ] || r[P2]).**.*
12d30 2a 20 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63  * Take the logic
12d40 61 6c 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c  al OR of the val
12d50 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ues in register 
12d60 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a  P1 and P2 and.**
12d70 20 73 74 6f 72 65 20 74 68 65 20 61 6e 73 77 65   store the answe
12d80 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  r in register P3
12d90 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65  ..**.** If eithe
12da0 72 20 50 31 20 6f 72 20 50 32 20 69 73 20 6e 6f  r P1 or P2 is no
12db0 6e 7a 65 72 6f 20 28 74 72 75 65 29 20 74 68 65  nzero (true) the
12dc0 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
12dd0 31 20 28 74 72 75 65 29 0a 2a 2a 20 65 76 65 6e  1 (true).** even
12de0 20 69 66 20 74 68 65 20 6f 74 68 65 72 20 69 6e   if the other in
12df0 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20  put is NULL.  A 
12e00 4e 55 4c 4c 20 61 6e 64 20 66 61 6c 73 65 20 6f  NULL and false o
12e10 72 20 74 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67  r two NULLs.** g
12e20 69 76 65 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75  ive a NULL outpu
12e30 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 6e  t..*/.case OP_An
12e40 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d:              
12e50 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 41 4e  /* same as TK_AN
12e60 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  D, in1, in2, out
12e70 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 72 3a  3 */.case OP_Or:
12e80 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
12e90 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4f 52 2c  * same as TK_OR,
12ea0 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
12eb0 2a 2f 0a 20 20 69 6e 74 20 76 31 3b 20 20 20 20  */.  int v1;    
12ec0 2f 2a 20 4c 65 66 74 20 6f 70 65 72 61 6e 64 3a  /* Left operand:
12ed0 20 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54    0==FALSE, 1==T
12ee0 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20  RUE, 2==UNKNOWN 
12ef0 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74  or NULL */.  int
12f00 20 76 32 3b 20 20 20 20 2f 2a 20 52 69 67 68 74   v2;    /* Right
12f10 20 6f 70 65 72 61 6e 64 3a 20 30 3d 3d 46 41 4c   operand: 0==FAL
12f20 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d  SE, 1==TRUE, 2==
12f30 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20  UNKNOWN or NULL 
12f40 2a 2f 0a 0a 20 20 76 31 20 3d 20 73 71 6c 69 74  */..  v1 = sqlit
12f50 65 33 56 64 62 65 42 6f 6f 6c 65 61 6e 56 61 6c  e3VdbeBooleanVal
12f60 75 65 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  ue(&aMem[pOp->p1
12f70 5d 2c 20 32 29 3b 0a 20 20 76 32 20 3d 20 73 71  ], 2);.  v2 = sq
12f80 6c 69 74 65 33 56 64 62 65 42 6f 6f 6c 65 61 6e  lite3VdbeBoolean
12f90 56 61 6c 75 65 28 26 61 4d 65 6d 5b 70 4f 70 2d  Value(&aMem[pOp-
12fa0 3e 70 32 5d 2c 20 32 29 3b 0a 20 20 69 66 28 20  >p2], 2);.  if( 
12fb0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
12fc0 41 6e 64 20 29 7b 0a 20 20 20 20 73 74 61 74 69  And ){.    stati
12fd0 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  c const unsigned
12fe0 20 63 68 61 72 20 61 6e 64 5f 6c 6f 67 69 63 5b   char and_logic[
12ff0 5d 20 3d 20 7b 20 30 2c 20 30 2c 20 30 2c 20 30  ] = { 0, 0, 0, 0
13000 2c 20 31 2c 20 32 2c 20 30 2c 20 32 2c 20 32 20  , 1, 2, 0, 2, 2 
13010 7d 3b 0a 20 20 20 20 76 31 20 3d 20 61 6e 64 5f  };.    v1 = and_
13020 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a  logic[v1*3+v2];.
13030 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 74 61    }else{.    sta
13040 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  tic const unsign
13050 65 64 20 63 68 61 72 20 6f 72 5f 6c 6f 67 69 63  ed char or_logic
13060 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c 20 32 2c 20  [] = { 0, 1, 2, 
13070 31 2c 20 31 2c 20 31 2c 20 32 2c 20 31 2c 20 32  1, 1, 1, 2, 1, 2
13080 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 6f 72 5f   };.    v1 = or_
13090 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a  logic[v1*3+v2];.
130a0 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d    }.  pOut = &aM
130b0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
130c0 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20 20 20 20  f( v1==2 ){.    
130d0 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
130e0 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  Out, MEM_Null);.
130f0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75    }else{.    pOu
13100 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a 20 20 20  t->u.i = v1;.   
13110 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
13120 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
13130 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
13140 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 54 72 75  /* Opcode: IsTru
13150 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  e P1 P2 P3 P4 *.
13160 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
13170 32 5d 20 3d 20 63 6f 61 6c 65 73 63 65 28 72 5b  2] = coalesce(r[
13180 50 31 5d 3d 3d 54 52 55 45 2c 50 33 29 20 5e 20  P1]==TRUE,P3) ^ 
13190 50 34 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  P4.**.** This op
131a0 63 6f 64 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20  code implements 
131b0 74 68 65 20 49 53 20 54 52 55 45 2c 20 49 53 20  the IS TRUE, IS 
131c0 46 41 4c 53 45 2c 20 49 53 20 4e 4f 54 20 54 52  FALSE, IS NOT TR
131d0 55 45 2c 20 61 6e 64 0a 2a 2a 20 49 53 20 4e 4f  UE, and.** IS NO
131e0 54 20 46 41 4c 53 45 20 6f 70 65 72 61 74 6f 72  T FALSE operator
131f0 73 2e 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  s..**.** Interpr
13200 65 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  et the value in 
13210 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20 61  register P1 as a
13220 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 20   boolean value. 
13230 20 53 74 6f 72 65 20 74 68 61 74 0a 2a 2a 20 62   Store that.** b
13240 6f 6f 6c 65 61 6e 20 28 61 20 30 20 6f 72 20 31  oolean (a 0 or 1
13250 29 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  ) in register P2
13260 2e 20 20 4f 72 20 69 66 20 74 68 65 20 76 61 6c  .  Or if the val
13270 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
13280 31 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74  1 is .** NULL, t
13290 68 65 6e 20 74 68 65 20 50 33 20 69 73 20 73 74  hen the P3 is st
132a0 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
132b0 20 50 32 2e 20 20 49 6e 76 65 72 74 20 74 68 65   P2.  Invert the
132c0 20 61 6e 73 77 65 72 20 69 66 20 50 34 0a 2a 2a   answer if P4.**
132d0 20 69 73 20 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   is 1..**.** The
132e0 20 6c 6f 67 69 63 20 69 73 20 73 75 6d 6d 61 72   logic is summar
132f0 69 7a 65 64 20 6c 69 6b 65 20 74 68 69 73 3a 0a  ized like this:.
13300 2a 2a 0a 2a 2a 20 3c 75 6c 3e 20 0a 2a 2a 20 3c  **.** <ul> .** <
13310 6c 69 3e 20 49 66 20 50 33 3d 3d 30 20 61 6e 64  li> If P3==0 and
13320 20 50 34 3d 3d 30 20 20 74 68 65 6e 20 20 72 5b   P4==0  then  r[
13330 50 32 5d 20 3a 3d 20 72 5b 50 31 5d 20 49 53 20  P2] := r[P1] IS 
13340 54 52 55 45 0a 2a 2a 20 3c 6c 69 3e 20 49 66 20  TRUE.** <li> If 
13350 50 33 3d 3d 31 20 61 6e 64 20 50 34 3d 3d 31 20  P3==1 and P4==1 
13360 20 74 68 65 6e 20 20 72 5b 50 32 5d 20 3a 3d 20   then  r[P2] := 
13370 72 5b 50 31 5d 20 49 53 20 46 41 4c 53 45 0a 2a  r[P1] IS FALSE.*
13380 2a 20 3c 6c 69 3e 20 49 66 20 50 33 3d 3d 30 20  * <li> If P3==0 
13390 61 6e 64 20 50 34 3d 3d 31 20 20 74 68 65 6e 20  and P4==1  then 
133a0 20 72 5b 50 32 5d 20 3a 3d 20 72 5b 50 31 5d 20   r[P2] := r[P1] 
133b0 49 53 20 4e 4f 54 20 54 52 55 45 0a 2a 2a 20 3c  IS NOT TRUE.** <
133c0 6c 69 3e 20 49 66 20 50 33 3d 3d 31 20 61 6e 64  li> If P3==1 and
133d0 20 50 34 3d 3d 30 20 20 74 68 65 6e 20 20 72 5b   P4==0  then  r[
133e0 50 32 5d 20 3a 3d 20 72 5b 50 31 5d 20 49 53 20  P2] := r[P1] IS 
133f0 4e 4f 54 20 46 41 4c 53 45 0a 2a 2a 20 3c 2f 75  NOT FALSE.** </u
13400 6c 3e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73  l>.*/.case OP_Is
13410 54 72 75 65 3a 20 7b 20 20 20 20 20 20 20 20 20  True: {         
13420 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 6f 75        /* in1, ou
13430 74 32 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  t2 */.  assert( 
13440 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
13450 49 4e 54 33 32 20 29 3b 0a 20 20 61 73 73 65 72  INT32 );.  asser
13460 74 28 20 70 4f 70 2d 3e 70 34 2e 69 3d 3d 30 20  t( pOp->p4.i==0 
13470 7c 7c 20 70 4f 70 2d 3e 70 34 2e 69 3d 3d 31 20  || pOp->p4.i==1 
13480 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
13490 2d 3e 70 33 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  ->p3==0 || pOp->
134a0 70 33 3d 3d 31 20 29 3b 0a 20 20 73 71 6c 69 74  p3==1 );.  sqlit
134b0 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
134c0 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  4(&aMem[pOp->p2]
134d0 2c 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ,.      sqlite3V
134e0 64 62 65 42 6f 6f 6c 65 61 6e 56 61 6c 75 65 28  dbeBooleanValue(
134f0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20  &aMem[pOp->p1], 
13500 70 4f 70 2d 3e 70 33 29 20 5e 20 70 4f 70 2d 3e  pOp->p3) ^ pOp->
13510 70 34 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  p4.i);.  break;.
13520 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  }../* Opcode: No
13530 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
13540 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
13550 3d 20 21 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49  = !r[P1].**.** I
13560 6e 74 65 72 70 72 65 74 20 74 68 65 20 76 61 6c  nterpret the val
13570 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
13580 31 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76  1 as a boolean v
13590 61 6c 75 65 2e 20 20 53 74 6f 72 65 20 74 68 65  alue.  Store the
135a0 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70  .** boolean comp
135b0 6c 65 6d 65 6e 74 20 69 6e 20 72 65 67 69 73 74  lement in regist
135c0 65 72 20 50 32 2e 20 20 49 66 20 74 68 65 20 76  er P2.  If the v
135d0 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
135e0 20 50 31 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c   P1 is .** NULL,
135f0 20 74 68 65 6e 20 61 20 4e 55 4c 4c 20 69 73 20   then a NULL is 
13600 73 74 6f 72 65 64 20 69 6e 20 50 32 2e 0a 2a 2f  stored in P2..*/
13610 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20  .case OP_Not: { 
13620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
13630 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54  * same as TK_NOT
13640 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20  , in1, out2 */. 
13650 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
13660 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p1];.  pOut =
13670 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
13680 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
13690 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d  ags & MEM_Null)=
136a0 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
136b0 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
136c0 28 70 4f 75 74 2c 20 21 73 71 6c 69 74 65 33 56  (pOut, !sqlite3V
136d0 64 62 65 42 6f 6f 6c 65 61 6e 56 61 6c 75 65 28  dbeBooleanValue(
136e0 70 49 6e 31 2c 30 29 29 3b 0a 20 20 7d 65 6c 73  pIn1,0));.  }els
136f0 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  e{.    sqlite3Vd
13700 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
13710 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  t);.  }.  break;
13720 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42  .}../* Opcode: B
13730 69 74 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20  itNot P1 P2 * * 
13740 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
13750 5b 50 32 5d 3d 20 7e 72 5b 50 31 5d 0a 2a 2a 0a  [P2]= ~r[P1].**.
13760 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
13770 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
13780 73 74 65 72 20 50 31 20 61 73 20 61 6e 20 69 6e  ster P1 as an in
13790 74 65 67 65 72 2e 20 20 53 74 6f 72 65 20 74 68  teger.  Store th
137a0 65 0a 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65  e.** ones-comple
137b0 6d 65 6e 74 20 6f 66 20 74 68 65 20 50 31 20 76  ment of the P1 v
137c0 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74  alue into regist
137d0 65 72 20 50 32 2e 20 20 49 66 20 50 31 20 68 6f  er P2.  If P1 ho
137e0 6c 64 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20 74 68  lds.** a NULL th
137f0 65 6e 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20  en store a NULL 
13800 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  in P2..*/.case O
13810 50 5f 42 69 74 4e 6f 74 3a 20 7b 20 20 20 20 20  P_BitNot: {     
13820 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
13830 61 73 20 54 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e  as TK_BITNOT, in
13840 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e  1, out2 */.  pIn
13850 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
13860 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  1];.  pOut = &aM
13870 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73  em[pOp->p2];.  s
13880 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
13890 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 69 66  Null(pOut);.  if
138a0 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
138b0 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b   MEM_Null)==0 ){
138c0 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
138d0 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20   = MEM_Int;.    
138e0 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 7e 73 71 6c  pOut->u.i = ~sql
138f0 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
13900 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72  (pIn1);.  }.  br
13910 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
13920 65 3a 20 4f 6e 63 65 20 50 31 20 50 32 20 2a 20  e: Once P1 P2 * 
13930 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c 20 74  * *.**.** Fall t
13940 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
13950 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  xt instruction t
13960 68 65 20 66 69 72 73 74 20 74 69 6d 65 20 74 68  he first time th
13970 69 73 20 6f 70 63 6f 64 65 20 69 73 0a 2a 2a 20  is opcode is.** 
13980 65 6e 63 6f 75 6e 74 65 72 65 64 20 6f 6e 20 65  encountered on e
13990 61 63 68 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f  ach invocation o
139a0 66 20 74 68 65 20 62 79 74 65 2d 63 6f 64 65 20  f the byte-code 
139b0 70 72 6f 67 72 61 6d 2e 20 20 4a 75 6d 70 20 74  program.  Jump t
139c0 6f 20 50 32 0a 2a 2a 20 6f 6e 20 74 68 65 20 73  o P2.** on the s
139d0 65 63 6f 6e 64 20 61 6e 64 20 61 6c 6c 20 73 75  econd and all su
139e0 62 73 65 71 75 65 6e 74 20 65 6e 63 6f 75 6e 74  bsequent encount
139f0 65 72 73 20 64 75 72 69 6e 67 20 74 68 65 20 73  ers during the s
13a00 61 6d 65 20 69 6e 76 6f 63 61 74 69 6f 6e 2e 0a  ame invocation..
13a10 2a 2a 0a 2a 2a 20 54 6f 70 2d 6c 65 76 65 6c 20  **.** Top-level 
13a20 70 72 6f 67 72 61 6d 73 20 64 65 74 65 72 6d 69  programs determi
13a30 6e 65 20 66 69 72 73 74 20 69 6e 76 6f 63 61 74  ne first invocat
13a40 69 6f 6e 20 62 79 20 63 6f 6d 70 61 72 69 6e 67  ion by comparing
13a50 20 74 68 65 20 50 31 0a 2a 2a 20 6f 70 65 72 61   the P1.** opera
13a60 6e 64 20 61 67 61 69 6e 73 74 20 74 68 65 20 50  nd against the P
13a70 31 20 6f 70 65 72 61 6e 64 20 6f 6e 20 74 68 65  1 operand on the
13a80 20 4f 50 5f 49 6e 69 74 20 6f 70 63 6f 64 65 20   OP_Init opcode 
13a90 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  at the beginning
13aa0 0a 2a 2a 20 6f 66 20 74 68 65 20 70 72 6f 67 72  .** of the progr
13ab0 61 6d 2e 20 20 49 66 20 74 68 65 20 50 31 20 76  am.  If the P1 v
13ac0 61 6c 75 65 73 20 64 69 66 66 65 72 2c 20 74 68  alues differ, th
13ad0 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  en fall through 
13ae0 61 6e 64 20 6d 61 6b 65 0a 2a 2a 20 74 68 65 20  and make.** the 
13af0 50 31 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64  P1 of this opcod
13b00 65 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 50  e equal to the P
13b10 31 20 6f 66 20 4f 50 5f 49 6e 69 74 2e 20 20 49  1 of OP_Init.  I
13b20 66 20 50 31 20 76 61 6c 75 65 73 20 61 72 65 0a  f P1 values are.
13b30 2a 2a 20 74 68 65 20 73 61 6d 65 20 74 68 65 6e  ** the same then
13b40 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e 0a   take the jump..
13b50 2a 2a 0a 2a 2a 20 46 6f 72 20 73 75 62 70 72 6f  **.** For subpro
13b60 67 72 61 6d 73 2c 20 74 68 65 72 65 20 69 73 20  grams, there is 
13b70 61 20 62 69 74 6d 61 73 6b 20 69 6e 20 74 68 65  a bitmask in the
13b80 20 56 64 62 65 46 72 61 6d 65 20 74 68 61 74 20   VdbeFrame that 
13b90 64 65 74 65 72 6d 69 6e 65 73 0a 2a 2a 20 77 68  determines.** wh
13ba0 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
13bb0 20 6a 75 6d 70 20 73 68 6f 75 6c 64 20 62 65 20   jump should be 
13bc0 74 61 6b 65 6e 2e 20 20 54 68 65 20 62 69 74 6d  taken.  The bitm
13bd0 61 73 6b 20 69 73 20 6e 65 63 65 73 73 61 72 79  ask is necessary
13be0 0a 2a 2a 20 62 65 63 61 75 73 65 20 74 68 65 20  .** because the 
13bf0 73 65 6c 66 2d 61 6c 74 65 72 69 6e 67 20 63 6f  self-altering co
13c00 64 65 20 74 72 69 63 6b 20 64 6f 65 73 20 6e 6f  de trick does no
13c10 74 20 77 6f 72 6b 20 66 6f 72 20 72 65 63 75 72  t work for recur
13c20 73 69 76 65 0a 2a 2a 20 74 72 69 67 67 65 72 73  sive.** triggers
13c30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 6e 63  ..*/.case OP_Onc
13c40 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  e: {            
13c50 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 75 33   /* jump */.  u3
13c60 32 20 69 41 64 64 72 3b 20 20 20 20 20 20 20 20  2 iAddr;        
13c70 20 20 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65          /* Addre
13c80 73 73 20 6f 66 20 74 68 69 73 20 69 6e 73 74 72  ss of this instr
13c90 75 63 74 69 6f 6e 20 2a 2f 0a 20 20 61 73 73 65  uction */.  asse
13ca0 72 74 28 20 70 2d 3e 61 4f 70 5b 30 5d 2e 6f 70  rt( p->aOp[0].op
13cb0 63 6f 64 65 3d 3d 4f 50 5f 49 6e 69 74 20 29 3b  code==OP_Init );
13cc0 0a 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65  .  if( p->pFrame
13cd0 20 29 7b 0a 20 20 20 20 69 41 64 64 72 20 3d 20   ){.    iAddr = 
13ce0 28 69 6e 74 29 28 70 4f 70 20 2d 20 70 2d 3e 61  (int)(pOp - p->a
13cf0 4f 70 29 3b 0a 20 20 20 20 69 66 28 20 28 70 2d  Op);.    if( (p-
13d00 3e 70 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 5b 69  >pFrame->aOnce[i
13d10 41 64 64 72 2f 38 5d 20 26 20 28 31 3c 3c 28 69  Addr/8] & (1<<(i
13d20 41 64 64 72 20 26 20 37 29 29 29 21 3d 30 20 29  Addr & 7)))!=0 )
13d30 7b 0a 20 20 20 20 20 20 56 64 62 65 42 72 61 6e  {.      VdbeBran
13d40 63 68 54 61 6b 65 6e 28 31 2c 20 32 29 3b 0a 20  chTaken(1, 2);. 
13d50 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74       goto jump_t
13d60 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20 20 20  o_p2;.    }.    
13d70 70 2d 3e 70 46 72 61 6d 65 2d 3e 61 4f 6e 63 65  p->pFrame->aOnce
13d80 5b 69 41 64 64 72 2f 38 5d 20 7c 3d 20 31 3c 3c  [iAddr/8] |= 1<<
13d90 28 69 41 64 64 72 20 26 20 37 29 3b 0a 20 20 7d  (iAddr & 7);.  }
13da0 65 6c 73 65 7b 0a 20 20 20 20 69 66 28 20 70 2d  else{.    if( p-
13db0 3e 61 4f 70 5b 30 5d 2e 70 31 3d 3d 70 4f 70 2d  >aOp[0].p1==pOp-
13dc0 3e 70 31 20 29 7b 0a 20 20 20 20 20 20 56 64 62  >p1 ){.      Vdb
13dd0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 20  eBranchTaken(1, 
13de0 32 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a  2);.      goto j
13df0 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d  ump_to_p2;.    }
13e00 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63  .  }.  VdbeBranc
13e10 68 54 61 6b 65 6e 28 30 2c 20 32 29 3b 0a 20 20  hTaken(0, 2);.  
13e20 70 4f 70 2d 3e 70 31 20 3d 20 70 2d 3e 61 4f 70  pOp->p1 = p->aOp
13e30 5b 30 5d 2e 70 31 3b 0a 20 20 62 72 65 61 6b 3b  [0].p1;.  break;
13e40 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
13e50 66 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  f P1 P2 P3 * *.*
13e60 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20  *.** Jump to P2 
13e70 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  if the value in 
13e80 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 74  register P1 is t
13e90 72 75 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a  rue.  The value.
13ea0 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  ** is considered
13eb0 20 74 72 75 65 20 69 66 20 69 74 20 69 73 20 6e   true if it is n
13ec0 75 6d 65 72 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a  umeric and non-z
13ed0 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c  ero.  If the val
13ee0 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e  ue.** in P1 is N
13ef0 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68  ULL then take th
13f00 65 20 6a 75 6d 70 20 69 66 20 61 6e 64 20 6f 6e  e jump if and on
13f10 6c 79 20 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d  ly if P3 is non-
13f20 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  zero..*/.case OP
13f30 5f 49 66 3a 20 20 7b 20 20 20 20 20 20 20 20 20  _If:  {         
13f40 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
13f50 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 63 3b 0a 20  n1 */.  int c;. 
13f60 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65   c = sqlite3Vdbe
13f70 42 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 26 61 4d  BooleanValue(&aM
13f80 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 70 4f 70  em[pOp->p1], pOp
13f90 2d 3e 70 33 29 3b 0a 20 20 56 64 62 65 42 72 61  ->p3);.  VdbeBra
13fa0 6e 63 68 54 61 6b 65 6e 28 63 21 3d 30 2c 20 32  nchTaken(c!=0, 2
13fb0 29 3b 0a 20 20 69 66 28 20 63 20 29 20 67 6f 74  );.  if( c ) got
13fc0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
13fd0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
13fe0 6f 64 65 3a 20 49 66 4e 6f 74 20 50 31 20 50 32  ode: IfNot P1 P2
13ff0 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75   P3 * *.**.** Ju
14000 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  mp to P2 if the 
14010 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
14020 72 20 50 31 20 69 73 20 46 61 6c 73 65 2e 20 20  r P1 is False.  
14030 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20  The value.** is 
14040 63 6f 6e 73 69 64 65 72 65 64 20 66 61 6c 73 65  considered false
14050 20 69 66 20 69 74 20 68 61 73 20 61 20 6e 75 6d   if it has a num
14060 65 72 69 63 20 76 61 6c 75 65 20 6f 66 20 7a 65  eric value of ze
14070 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  ro.  If the valu
14080 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55  e.** in P1 is NU
14090 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65  LL then take the
140a0 20 6a 75 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c   jump if and onl
140b0 79 20 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a  y if P3 is non-z
140c0 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ero..*/.case OP_
140d0 49 66 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20  IfNot: {        
140e0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
140f0 20 2a 2f 0a 20 20 69 6e 74 20 63 3b 0a 20 20 63   */.  int c;.  c
14100 20 3d 20 21 73 71 6c 69 74 65 33 56 64 62 65 42   = !sqlite3VdbeB
14110 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 26 61 4d 65  ooleanValue(&aMe
14120 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 21 70 4f 70  m[pOp->p1], !pOp
14130 2d 3e 70 33 29 3b 0a 20 20 56 64 62 65 42 72 61  ->p3);.  VdbeBra
14140 6e 63 68 54 61 6b 65 6e 28 63 21 3d 30 2c 20 32  nchTaken(c!=0, 2
14150 29 3b 0a 20 20 69 66 28 20 63 20 29 20 67 6f 74  );.  if( c ) got
14160 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
14170 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
14180 6f 64 65 3a 20 49 73 4e 75 6c 6c 20 50 31 20 50  ode: IsNull P1 P
14190 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
141a0 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3d 3d 4e  sis: if r[P1]==N
141b0 55 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  ULL goto P2.**.*
141c0 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20  * Jump to P2 if 
141d0 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
141e0 69 73 74 65 72 20 50 31 20 69 73 20 4e 55 4c 4c  ister P1 is NULL
141f0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73 4e  ..*/.case OP_IsN
14200 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ull: {          
14210 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
14220 49 53 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e  ISNULL, jump, in
14230 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
14240 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
14250 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
14260 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
14270 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 2c 20 32 29  MEM_Null)!=0, 2)
14280 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
14290 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
142a0 21 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  !=0 ){.    goto 
142b0 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
142c0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
142d0 70 63 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c 20 50  pcode: NotNull P
142e0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
142f0 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d  nopsis: if r[P1]
14300 21 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a  !=NULL goto P2.*
14310 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20  *.** Jump to P2 
14320 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  if the value in 
14330 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 6e  register P1 is n
14340 6f 74 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61  ot NULL.  .*/.ca
14350 73 65 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b  se OP_NotNull: {
14360 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
14370 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c  ame as TK_NOTNUL
14380 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  L, jump, in1 */.
14390 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
143a0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56 64 62 65 42  Op->p1];.  VdbeB
143b0 72 61 6e 63 68 54 61 6b 65 6e 28 20 28 70 49 6e  ranchTaken( (pIn
143c0 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
143d0 75 6c 6c 29 3d 3d 30 2c 20 32 29 3b 0a 20 20 69  ull)==0, 2);.  i
143e0 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
143f0 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
14400 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f  {.    goto jump_
14410 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  to_p2;.  }.  bre
14420 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
14430 3a 20 49 66 4e 75 6c 6c 52 6f 77 20 50 31 20 50  : IfNullRow P1 P
14440 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
14450 70 73 69 73 3a 20 69 66 20 50 31 2e 6e 75 6c 6c  psis: if P1.null
14460 52 6f 77 20 74 68 65 6e 20 72 5b 50 33 5d 3d 4e  Row then r[P3]=N
14470 55 4c 4c 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  ULL, goto P2.**.
14480 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 63 75 72  ** Check the cur
14490 73 6f 72 20 50 31 20 74 6f 20 73 65 65 20 69 66  sor P1 to see if
144a0 20 69 74 20 69 73 20 63 75 72 72 65 6e 74 6c 79   it is currently
144b0 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 61 20 4e   pointing at a N
144c0 55 4c 4c 20 72 6f 77 2e 0a 2a 2a 20 49 66 20 69  ULL row..** If i
144d0 74 20 69 73 2c 20 74 68 65 6e 20 73 65 74 20 72  t is, then set r
144e0 65 67 69 73 74 65 72 20 50 33 20 74 6f 20 4e 55  egister P3 to NU
144f0 4c 4c 20 61 6e 64 20 6a 75 6d 70 20 69 6d 6d 65  LL and jump imme
14500 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
14510 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 74 20 6f  * If P1 is not o
14520 6e 20 61 20 4e 55 4c 4c 20 72 6f 77 2c 20 74 68  n a NULL row, th
14530 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  en fall through 
14540 77 69 74 68 6f 75 74 20 6d 61 6b 69 6e 67 20 61  without making a
14550 6e 79 0a 2a 2a 20 63 68 61 6e 67 65 73 2e 0a 2a  ny.** changes..*
14560 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 75 6c 6c  /.case OP_IfNull
14570 52 6f 77 3a 20 7b 20 20 20 20 20 20 20 20 20 2f  Row: {         /
14580 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65  * jump */.  asse
14590 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
145a0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
145b0 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
145c0 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  ( p->apCsr[pOp->
145d0 70 31 5d 21 3d 30 20 29 3b 0a 20 20 69 66 28 20  p1]!=0 );.  if( 
145e0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
145f0 5d 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  ]->nullRow ){.  
14600 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
14610 53 65 74 4e 75 6c 6c 28 61 4d 65 6d 20 2b 20 70  SetNull(aMem + p
14620 4f 70 2d 3e 70 33 29 3b 0a 20 20 20 20 67 6f 74  Op->p3);.    got
14630 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
14640 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  }.  break;.}..#i
14650 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
14660 4c 45 5f 4f 46 46 53 45 54 5f 53 51 4c 5f 46 55  LE_OFFSET_SQL_FU
14670 4e 43 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 66  NC./* Opcode: Of
14680 66 73 65 74 20 50 31 20 50 32 20 50 33 20 2a 20  fset P1 P2 P3 * 
14690 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
146a0 5b 50 33 5d 20 3d 20 73 71 6c 69 74 65 5f 6f 66  [P3] = sqlite_of
146b0 66 73 65 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20 53  fset(P1).**.** S
146c0 74 6f 72 65 20 69 6e 20 72 65 67 69 73 74 65 72  tore in register
146d0 20 72 5b 50 33 5d 20 74 68 65 20 62 79 74 65 20   r[P3] the byte 
146e0 6f 66 66 73 65 74 20 69 6e 74 6f 20 74 68 65 20  offset into the 
146f0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 68  database file th
14700 61 74 20 69 73 20 74 68 65 0a 2a 2a 20 73 74 61  at is the.** sta
14710 72 74 20 6f 66 20 74 68 65 20 70 61 79 6c 6f 61  rt of the payloa
14720 64 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64  d for the record
14730 20 61 74 20 77 68 69 63 68 20 74 68 61 74 20 63   at which that c
14740 75 72 73 6f 72 20 50 31 20 69 73 20 63 75 72 72  ursor P1 is curr
14750 65 6e 74 6c 79 0a 2a 2a 20 70 6f 69 6e 74 69 6e  ently.** pointin
14760 67 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74  g..**.** P2 is t
14770 68 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  he column number
14780 20 66 6f 72 20 74 68 65 20 61 72 67 75 6d 65 6e   for the argumen
14790 74 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 5f  t to the sqlite_
147a0 6f 66 66 73 65 74 28 29 20 66 75 6e 63 74 69 6f  offset() functio
147b0 6e 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  n..** This opcod
147c0 65 20 64 6f 65 73 20 6e 6f 74 20 75 73 65 20 50  e does not use P
147d0 32 20 69 74 73 65 6c 66 2c 20 62 75 74 20 74 68  2 itself, but th
147e0 65 20 50 32 20 76 61 6c 75 65 20 69 73 20 75 73  e P2 value is us
147f0 65 64 20 62 79 20 74 68 65 0a 2a 2a 20 63 6f 64  ed by the.** cod
14800 65 20 67 65 6e 65 72 61 74 6f 72 2e 20 20 54 68  e generator.  Th
14810 65 20 50 31 2c 20 50 32 2c 20 61 6e 64 20 50 33  e P1, P2, and P3
14820 20 6f 70 65 72 61 6e 64 73 20 74 6f 20 74 68 69   operands to thi
14830 73 20 6f 70 63 6f 64 65 20 61 72 65 20 74 68 65  s opcode are the
14840 0a 2a 2a 20 73 61 6d 65 20 61 73 20 66 6f 72 20  .** same as for 
14850 4f 50 5f 43 6f 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a  OP_Column..**.**
14860 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
14870 6f 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65 20 69  only available i
14880 66 20 53 51 4c 69 74 65 20 69 73 20 63 6f 6d 70  f SQLite is comp
14890 69 6c 65 64 20 77 69 74 68 20 74 68 65 0a 2a 2a  iled with the.**
148a0 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45   -DSQLITE_ENABLE
148b0 5f 4f 46 46 53 45 54 5f 53 51 4c 5f 46 55 4e 43  _OFFSET_SQL_FUNC
148c0 20 6f 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65   option..*/.case
148d0 20 4f 50 5f 4f 66 66 73 65 74 3a 20 7b 20 20 20   OP_Offset: {   
148e0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 33 20 2a         /* out3 *
148f0 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
14900 70 43 3b 20 20 20 20 2f 2a 20 54 68 65 20 56 44  pC;    /* The VD
14910 42 45 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 61  BE cursor */.  a
14920 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
14930 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
14940 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
14950 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
14960 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 70  p1];.  pOut = &p
14970 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b  ->aMem[pOp->p3];
14980 0a 20 20 69 66 28 20 4e 45 56 45 52 28 70 43 3d  .  if( NEVER(pC=
14990 3d 30 29 20 7c 7c 20 70 43 2d 3e 65 43 75 72 54  =0) || pC->eCurT
149a0 79 70 65 21 3d 43 55 52 54 59 50 45 5f 42 54 52  ype!=CURTYPE_BTR
149b0 45 45 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  EE ){.    sqlite
149c0 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
149d0 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  pOut);.  }else{.
149e0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
149f0 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c  emSetInt64(pOut,
14a00 20 73 71 6c 69 74 65 33 42 74 72 65 65 4f 66 66   sqlite3BtreeOff
14a10 73 65 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  set(pC->uc.pCurs
14a20 6f 72 29 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  or));.  }.  brea
14a30 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
14a40 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4f 46 46  QLITE_ENABLE_OFF
14a50 53 45 54 5f 53 51 4c 5f 46 55 4e 43 20 2a 2f 0a  SET_SQL_FUNC */.
14a60 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75  ./* Opcode: Colu
14a70 6d 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50  mn P1 P2 P3 P4 P
14a80 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  5.** Synopsis: r
14a90 5b 50 33 5d 3d 50 58 0a 2a 2a 0a 2a 2a 20 49 6e  [P3]=PX.**.** In
14aa0 74 65 72 70 72 65 74 20 74 68 65 20 64 61 74 61  terpret the data
14ab0 20 74 68 61 74 20 63 75 72 73 6f 72 20 50 31 20   that cursor P1 
14ac0 70 6f 69 6e 74 73 20 74 6f 20 61 73 20 61 20 73  points to as a s
14ad0 74 72 75 63 74 75 72 65 20 62 75 69 6c 74 20 75  tructure built u
14ae0 73 69 6e 67 0a 2a 2a 20 74 68 65 20 4d 61 6b 65  sing.** the Make
14af0 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69  Record instructi
14b00 6f 6e 2e 20 20 28 53 65 65 20 74 68 65 20 4d 61  on.  (See the Ma
14b10 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20  keRecord opcode 
14b20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a 2a  for additional.*
14b30 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  * information ab
14b40 6f 75 74 20 74 68 65 20 66 6f 72 6d 61 74 20 6f  out the format o
14b50 66 20 74 68 65 20 64 61 74 61 2e 29 20 20 45 78  f the data.)  Ex
14b60 74 72 61 63 74 20 74 68 65 20 50 32 2d 74 68 20  tract the P2-th 
14b70 63 6f 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74  column.** from t
14b80 68 69 73 20 72 65 63 6f 72 64 2e 20 20 49 66 20  his record.  If 
14b90 74 68 65 72 65 20 61 72 65 20 6c 65 73 73 20 74  there are less t
14ba0 68 61 74 20 28 50 32 2b 31 29 20 0a 2a 2a 20 76  hat (P2+1) .** v
14bb0 61 6c 75 65 73 20 69 6e 20 74 68 65 20 72 65 63  alues in the rec
14bc0 6f 72 64 2c 20 65 78 74 72 61 63 74 20 61 20 4e  ord, extract a N
14bd0 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76  ULL..**.** The v
14be0 61 6c 75 65 20 65 78 74 72 61 63 74 65 64 20 69  alue extracted i
14bf0 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
14c00 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49  ster P3..**.** I
14c10 66 20 74 68 65 20 72 65 63 6f 72 64 20 63 6f 6e  f the record con
14c20 74 61 69 6e 73 20 66 65 77 65 72 20 74 68 61 6e  tains fewer than
14c30 20 50 32 20 66 69 65 6c 64 73 2c 20 74 68 65 6e   P2 fields, then
14c40 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e   extract a NULL.
14c50 20 20 4f 72 2c 0a 2a 2a 20 69 66 20 74 68 65 20    Or,.** if the 
14c60 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61  P4 argument is a
14c70 20 50 34 5f 4d 45 4d 20 75 73 65 20 74 68 65 20   P4_MEM use the 
14c80 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 34 20  value of the P4 
14c90 61 72 67 75 6d 65 6e 74 20 61 73 0a 2a 2a 20 74  argument as.** t
14ca0 68 65 20 72 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a  he result..**.**
14cb0 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c   If the OPFLAG_L
14cc0 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46  ENGTHARG and OPF
14cd0 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20 62 69  LAG_TYPEOFARG bi
14ce0 74 73 20 61 72 65 20 73 65 74 20 6f 6e 20 50 35  ts are set on P5
14cf0 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 72 65 73   then.** the res
14d00 75 6c 74 20 69 73 20 67 75 61 72 61 6e 74 65 65  ult is guarantee
14d10 64 20 74 6f 20 6f 6e 6c 79 20 62 65 20 75 73 65  d to only be use
14d20 64 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e  d as the argumen
14d30 74 20 6f 66 20 61 20 6c 65 6e 67 74 68 28 29 0a  t of a length().
14d40 2a 2a 20 6f 72 20 74 79 70 65 6f 66 28 29 20 66  ** or typeof() f
14d50 75 6e 63 74 69 6f 6e 2c 20 72 65 73 70 65 63 74  unction, respect
14d60 69 76 65 6c 79 2e 20 20 54 68 65 20 6c 6f 61 64  ively.  The load
14d70 69 6e 67 20 6f 66 20 6c 61 72 67 65 20 62 6c 6f  ing of large blo
14d80 62 73 20 63 61 6e 20 62 65 0a 2a 2a 20 73 6b 69  bs can be.** ski
14d90 70 70 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28  pped for length(
14da0 29 20 61 6e 64 20 61 6c 6c 20 63 6f 6e 74 65 6e  ) and all conten
14db0 74 20 6c 6f 61 64 69 6e 67 20 63 61 6e 20 62 65  t loading can be
14dc0 20 73 6b 69 70 70 65 64 20 66 6f 72 20 74 79 70   skipped for typ
14dd0 65 6f 66 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  eof()..*/.case O
14de0 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 69 6e  P_Column: {.  in
14df0 74 20 70 32 3b 20 20 20 20 20 20 20 20 20 20 20  t p2;           
14e00 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65   /* column numbe
14e10 72 20 74 6f 20 72 65 74 72 69 65 76 65 20 2a 2f  r to retrieve */
14e20 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
14e30 43 3b 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42  C;    /* The VDB
14e40 45 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 42 74  E cursor */.  Bt
14e50 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 20 20  Cursor *pCrsr;  
14e60 20 2f 2a 20 54 68 65 20 42 54 72 65 65 20 63 75   /* The BTree cu
14e70 72 73 6f 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61  rsor */.  u32 *a
14e80 4f 66 66 73 65 74 3b 20 20 20 20 20 20 2f 2a 20  Offset;      /* 
14e90 61 4f 66 66 73 65 74 5b 69 5d 20 69 73 20 6f 66  aOffset[i] is of
14ea0 66 73 65 74 20 74 6f 20 73 74 61 72 74 20 6f 66  fset to start of
14eb0 20 64 61 74 61 20 66 6f 72 20 69 2d 74 68 20 63   data for i-th c
14ec0 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6c  olumn */.  int l
14ed0 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  en;           /*
14ee0 20 54 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74   The length of t
14ef0 68 65 20 73 65 72 69 61 6c 69 7a 65 64 20 64 61  he serialized da
14f00 74 61 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  ta for the colum
14f10 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20  n */.  int i;   
14f20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
14f30 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4d  p counter */.  M
14f40 65 6d 20 2a 70 44 65 73 74 3b 20 20 20 20 20 20  em *pDest;      
14f50 20 20 2f 2a 20 57 68 65 72 65 20 74 6f 20 77 72    /* Where to wr
14f60 69 74 65 20 74 68 65 20 65 78 74 72 61 63 74 65  ite the extracte
14f70 64 20 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d  d value */.  Mem
14f80 20 73 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   sMem;          
14f90 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74  /* For storing t
14fa0 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20  he record being 
14fb0 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e  decoded */.  con
14fc0 73 74 20 75 38 20 2a 7a 44 61 74 61 3b 20 20 20  st u8 *zData;   
14fd0 2f 2a 20 50 61 72 74 20 6f 66 20 74 68 65 20 72  /* Part of the r
14fe0 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f  ecord being deco
14ff0 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75  ded */.  const u
15000 38 20 2a 7a 48 64 72 3b 20 20 20 20 2f 2a 20 4e  8 *zHdr;    /* N
15010 65 78 74 20 75 6e 70 61 72 73 65 64 20 62 79 74  ext unparsed byt
15020 65 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20  e of the header 
15030 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a  */.  const u8 *z
15040 45 6e 64 48 64 72 3b 20 2f 2a 20 50 6f 69 6e 74  EndHdr; /* Point
15050 65 72 20 74 6f 20 66 69 72 73 74 20 62 79 74 65  er to first byte
15060 20 61 66 74 65 72 20 74 68 65 20 68 65 61 64 65   after the heade
15070 72 20 2a 2f 0a 20 20 75 36 34 20 6f 66 66 73 65  r */.  u64 offse
15080 74 36 34 3b 20 20 20 20 20 20 2f 2a 20 36 34 2d  t64;      /* 64-
15090 62 69 74 20 6f 66 66 73 65 74 20 2a 2f 0a 20 20  bit offset */.  
150a0 75 33 32 20 74 3b 20 20 20 20 20 20 20 20 20 20  u32 t;          
150b0 20 20 20 2f 2a 20 41 20 74 79 70 65 20 63 6f 64     /* A type cod
150c0 65 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72  e from the recor
150d0 64 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 4d 65  d header */.  Me
150e0 6d 20 2a 70 52 65 67 3b 20 20 20 20 20 20 20 20  m *pReg;        
150f0 20 2f 2a 20 50 73 65 75 64 6f 54 61 62 6c 65 20   /* PseudoTable 
15100 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 20 2a  input register *
15110 2f 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  /..  pC = p->apC
15120 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  sr[pOp->p1];.  p
15130 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 0a 20 20  2 = pOp->p2;..  
15140 2f 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f 72  /* If the cursor
15150 20 63 61 63 68 65 20 69 73 20 73 74 61 6c 65 20   cache is stale 
15160 28 6d 65 61 6e 69 6e 67 20 69 74 20 69 73 20 6e  (meaning it is n
15170 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  ot currently poi
15180 6e 74 20 61 74 0a 20 20 2a 2a 20 74 68 65 20 63  nt at.  ** the c
15190 6f 72 72 65 63 74 20 72 6f 77 29 20 74 68 65 6e  orrect row) then
151a0 20 62 72 69 6e 67 20 69 74 20 75 70 2d 74 6f 2d   bring it up-to-
151b0 64 61 74 65 20 62 79 20 64 6f 69 6e 67 20 74 68  date by doing th
151c0 65 20 6e 65 63 65 73 73 61 72 79 20 0a 20 20 2a  e necessary .  *
151d0 2a 20 42 2d 54 72 65 65 20 73 65 65 6b 2e 20 2a  * B-Tree seek. *
151e0 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  /.  rc = sqlite3
151f0 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
15200 28 26 70 43 2c 20 26 70 32 29 3b 0a 20 20 69 66  (&pC, &p2);.  if
15210 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
15220 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
15230 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
15240 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
15250 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
15260 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70  >nCursor) );.  p
15270 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  Dest = &aMem[pOp
15280 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p3];.  memAbou
15290 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65  tToChange(p, pDe
152a0 73 74 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  st);.  assert( p
152b0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
152c0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
152d0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  );.  assert( pC!
152e0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
152f0 70 32 3c 70 43 2d 3e 6e 46 69 65 6c 64 20 29 3b  p2<pC->nField );
15300 0a 20 20 61 4f 66 66 73 65 74 20 3d 20 70 43 2d  .  aOffset = pC-
15310 3e 61 4f 66 66 73 65 74 3b 0a 20 20 61 73 73 65  >aOffset;.  asse
15320 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
15330 21 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20 29  !=CURTYPE_VTAB )
15340 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
15350 65 43 75 72 54 79 70 65 21 3d 43 55 52 54 59 50  eCurType!=CURTYP
15360 45 5f 50 53 45 55 44 4f 20 7c 7c 20 70 43 2d 3e  E_PSEUDO || pC->
15370 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 61 73 73  nullRow );.  ass
15380 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
15390 65 21 3d 43 55 52 54 59 50 45 5f 53 4f 52 54 45  e!=CURTYPE_SORTE
153a0 52 20 29 3b 0a 0a 20 20 69 66 28 20 70 43 2d 3e  R );..  if( pC->
153b0 63 61 63 68 65 53 74 61 74 75 73 21 3d 70 2d 3e  cacheStatus!=p->
153c0 63 61 63 68 65 43 74 72 20 29 7b 20 20 20 20 20  cacheCtr ){     
153d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 4f 50 54             /*OPT
153e0 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c  IMIZATION-IF-FAL
153f0 53 45 2a 2f 0a 20 20 20 20 69 66 28 20 70 43 2d  SE*/.    if( pC-
15400 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
15410 20 20 69 66 28 20 70 43 2d 3e 65 43 75 72 54 79    if( pC->eCurTy
15420 70 65 3d 3d 43 55 52 54 59 50 45 5f 50 53 45 55  pe==CURTYPE_PSEU
15430 44 4f 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  DO ){.        /*
15440 20 46 6f 72 20 74 68 65 20 73 70 65 63 69 61 6c   For the special
15450 20 63 61 73 65 20 6f 66 20 61 73 20 70 73 65 75   case of as pseu
15460 64 6f 2d 63 75 72 73 6f 72 2c 20 74 68 65 20 73  do-cursor, the s
15470 65 65 6b 52 65 73 75 6c 74 20 66 69 65 6c 64 0a  eekResult field.
15480 20 20 20 20 20 20 20 20 2a 2a 20 69 64 65 6e 74          ** ident
15490 69 66 69 65 73 20 74 68 65 20 72 65 67 69 73 74  ifies the regist
154a0 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68  er that holds th
154b0 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 20 20  e record */.    
154c0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
154d0 73 65 65 6b 52 65 73 75 6c 74 3e 30 20 29 3b 0a  seekResult>0 );.
154e0 20 20 20 20 20 20 20 20 70 52 65 67 20 3d 20 26          pReg = &
154f0 61 4d 65 6d 5b 70 43 2d 3e 73 65 65 6b 52 65 73  aMem[pC->seekRes
15500 75 6c 74 5d 3b 0a 20 20 20 20 20 20 20 20 61 73  ult];.        as
15510 73 65 72 74 28 20 70 52 65 67 2d 3e 66 6c 61 67  sert( pReg->flag
15520 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a  s & MEM_Blob );.
15530 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
15540 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65 67 29  memIsValid(pReg)
15550 20 29 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e   );.        pC->
15560 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43  payloadSize = pC
15570 2d 3e 73 7a 52 6f 77 20 3d 20 70 52 65 67 2d 3e  ->szRow = pReg->
15580 6e 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61  n;.        pC->a
15590 52 6f 77 20 3d 20 28 75 38 2a 29 70 52 65 67 2d  Row = (u8*)pReg-
155a0 3e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  >z;.      }else{
155b0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
155c0 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
155d0 44 65 73 74 29 3b 0a 20 20 20 20 20 20 20 20 67  Dest);.        g
155e0 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75  oto op_column_ou
155f0 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  t;.      }.    }
15600 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 43 72 73  else{.      pCrs
15610 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  r = pC->uc.pCurs
15620 6f 72 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  or;.      assert
15630 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
15640 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
15650 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
15660 43 72 73 72 20 29 3b 0a 20 20 20 20 20 20 61 73  Crsr );.      as
15670 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
15680 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28  eeCursorIsValid(
15690 70 43 72 73 72 29 20 29 3b 0a 20 20 20 20 20 20  pCrsr) );.      
156a0 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20  pC->payloadSize 
156b0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61  = sqlite3BtreePa
156c0 79 6c 6f 61 64 53 69 7a 65 28 70 43 72 73 72 29  yloadSize(pCrsr)
156d0 3b 0a 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77  ;.      pC->aRow
156e0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
156f0 61 79 6c 6f 61 64 46 65 74 63 68 28 70 43 72 73  ayloadFetch(pCrs
15700 72 2c 20 26 70 43 2d 3e 73 7a 52 6f 77 29 3b 0a  r, &pC->szRow);.
15710 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43        assert( pC
15720 2d 3e 73 7a 52 6f 77 3c 3d 70 43 2d 3e 70 61 79  ->szRow<=pC->pay
15730 6c 6f 61 64 53 69 7a 65 20 29 3b 0a 20 20 20 20  loadSize );.    
15740 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 73 7a    assert( pC->sz
15750 52 6f 77 3c 3d 36 35 35 33 36 20 29 3b 20 20 2f  Row<=65536 );  /
15760 2a 20 4d 61 78 69 6d 75 6d 20 70 61 67 65 20 73  * Maximum page s
15770 69 7a 65 20 69 73 20 36 34 4b 69 42 20 2a 2f 0a  ize is 64KiB */.
15780 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 70 61        if( pC->pa
15790 79 6c 6f 61 64 53 69 7a 65 20 3e 20 28 75 33 32  yloadSize > (u32
157a0 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  )db->aLimit[SQLI
157b0 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
157c0 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   ){.        goto
157d0 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 20 20   too_big;.      
157e0 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e  }.    }.    pC->
157f0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 70 2d  cacheStatus = p-
15800 3e 63 61 63 68 65 43 74 72 3b 0a 20 20 20 20 70  >cacheCtr;.    p
15810 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 20 3d 20  C->iHdrOffset = 
15820 67 65 74 56 61 72 69 6e 74 33 32 28 70 43 2d 3e  getVarint32(pC->
15830 61 52 6f 77 2c 20 61 4f 66 66 73 65 74 5b 30 5d  aRow, aOffset[0]
15840 29 3b 0a 20 20 20 20 70 43 2d 3e 6e 48 64 72 50  );.    pC->nHdrP
15850 61 72 73 65 64 20 3d 20 30 3b 0a 0a 0a 20 20 20  arsed = 0;...   
15860 20 69 66 28 20 70 43 2d 3e 73 7a 52 6f 77 3c 61   if( pC->szRow<a
15870 4f 66 66 73 65 74 5b 30 5d 20 29 7b 20 20 20 20  Offset[0] ){    
15880 20 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e    /*OPTIMIZATION
15890 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20  -IF-FALSE*/.    
158a0 20 20 2f 2a 20 70 43 2d 3e 61 52 6f 77 20 64 6f    /* pC->aRow do
158b0 65 73 20 6e 6f 74 20 68 61 76 65 20 74 6f 20 68  es not have to h
158c0 6f 6c 64 20 74 68 65 20 65 6e 74 69 72 65 20 72  old the entire r
158d0 6f 77 2c 20 62 75 74 20 69 74 20 64 6f 65 73 20  ow, but it does 
158e0 61 74 20 6c 65 61 73 74 0a 20 20 20 20 20 20 2a  at least.      *
158f0 2a 20 6e 65 65 64 20 74 6f 20 63 6f 76 65 72 20  * need to cover 
15900 74 68 65 20 68 65 61 64 65 72 20 6f 66 20 74 68  the header of th
15910 65 20 72 65 63 6f 72 64 2e 20 20 49 66 20 70 43  e record.  If pC
15920 2d 3e 61 52 6f 77 20 64 6f 65 73 20 6e 6f 74 20  ->aRow does not 
15930 63 6f 6e 74 61 69 6e 0a 20 20 20 20 20 20 2a 2a  contain.      **
15940 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 68 65   the complete he
15950 61 64 65 72 2c 20 74 68 65 6e 20 73 65 74 20 69  ader, then set i
15960 74 20 74 6f 20 7a 65 72 6f 2c 20 66 6f 72 63 69  t to zero, forci
15970 6e 67 20 74 68 65 20 68 65 61 64 65 72 20 74 6f  ng the header to
15980 20 62 65 0a 20 20 20 20 20 20 2a 2a 20 64 79 6e   be.      ** dyn
15990 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74  amically allocat
159a0 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20 70 43 2d  ed. */.      pC-
159b0 3e 61 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20  >aRow = 0;.     
159c0 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 30 3b 0a   pC->szRow = 0;.
159d0 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73  .      /* Make s
159e0 75 72 65 20 61 20 63 6f 72 72 75 70 74 20 64 61  ure a corrupt da
159f0 74 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20 67  tabase has not g
15a00 69 76 65 6e 20 75 73 20 61 6e 20 6f 76 65 72 73  iven us an overs
15a10 69 7a 65 20 68 65 61 64 65 72 2e 0a 20 20 20 20  ize header..    
15a20 20 20 2a 2a 20 44 6f 20 74 68 69 73 20 6e 6f 77    ** Do this now
15a30 20 74 6f 20 61 76 6f 69 64 20 61 6e 20 6f 76 65   to avoid an ove
15a40 72 73 69 7a 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  rsize memory all
15a50 6f 63 61 74 69 6f 6e 2e 0a 20 20 20 20 20 20 2a  ocation..      *
15a60 2a 0a 20 20 20 20 20 20 2a 2a 20 54 79 70 65 20  *.      ** Type 
15a70 65 6e 74 72 69 65 73 20 63 61 6e 20 62 65 20 62  entries can be b
15a80 65 74 77 65 65 6e 20 31 20 61 6e 64 20 35 20 62  etween 1 and 5 b
15a90 79 74 65 73 20 65 61 63 68 2e 20 20 42 75 74 20  ytes each.  But 
15aa0 34 20 61 6e 64 20 35 20 62 79 74 65 0a 20 20 20  4 and 5 byte.   
15ab0 20 20 20 2a 2a 20 74 79 70 65 73 20 75 73 65 20     ** types use 
15ac0 73 6f 20 6d 75 63 68 20 64 61 74 61 20 73 70 61  so much data spa
15ad0 63 65 20 74 68 61 74 20 74 68 65 72 65 20 63 61  ce that there ca
15ae0 6e 20 6f 6e 6c 79 20 62 65 20 34 30 39 36 20 61  n only be 4096 a
15af0 6e 64 20 33 32 20 6f 66 0a 20 20 20 20 20 20 2a  nd 32 of.      *
15b00 2a 20 74 68 65 6d 2c 20 72 65 73 70 65 63 74 69  * them, respecti
15b10 76 65 6c 79 2e 20 20 53 6f 20 74 68 65 20 6d 61  vely.  So the ma
15b20 78 69 6d 75 6d 20 68 65 61 64 65 72 20 6c 65 6e  ximum header len
15b30 67 74 68 20 72 65 73 75 6c 74 73 20 66 72 6f 6d  gth results from
15b40 20 61 0a 20 20 20 20 20 20 2a 2a 20 33 2d 62 79   a.      ** 3-by
15b50 74 65 20 74 79 70 65 20 66 6f 72 20 65 61 63 68  te type for each
15b60 20 6f 66 20 74 68 65 20 6d 61 78 69 6d 75 6d 20   of the maximum 
15b70 6f 66 20 33 32 37 36 38 20 63 6f 6c 75 6d 6e 73  of 32768 columns
15b80 20 70 6c 75 73 20 74 68 72 65 65 0a 20 20 20 20   plus three.    
15b90 20 20 2a 2a 20 65 78 74 72 61 20 62 79 74 65 73    ** extra bytes
15ba0 20 66 6f 72 20 74 68 65 20 68 65 61 64 65 72 20   for the header 
15bb0 6c 65 6e 67 74 68 20 69 74 73 65 6c 66 2e 20 20  length itself.  
15bc0 33 32 37 36 38 2a 33 20 2b 20 33 20 3d 20 39 38  32768*3 + 3 = 98
15bd0 33 30 37 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  307..      */.  
15be0 20 20 20 20 69 66 28 20 61 4f 66 66 73 65 74 5b      if( aOffset[
15bf0 30 5d 20 3e 20 39 38 33 30 37 20 7c 7c 20 61 4f  0] > 98307 || aO
15c00 66 66 73 65 74 5b 30 5d 20 3e 20 70 43 2d 3e 70  ffset[0] > pC->p
15c10 61 79 6c 6f 61 64 53 69 7a 65 20 29 7b 0a 20 20  ayloadSize ){.  
15c20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f        goto op_co
15c30 6c 75 6d 6e 5f 63 6f 72 72 75 70 74 3b 0a 20 20  lumn_corrupt;.  
15c40 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
15c50 0a 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69  .      /* This i
15c60 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f  s an optimizatio
15c70 6e 2e 20 20 42 79 20 73 6b 69 70 70 69 6e 67 20  n.  By skipping 
15c80 6f 76 65 72 20 74 68 65 20 66 69 72 73 74 20 66  over the first f
15c90 65 77 20 74 65 73 74 73 0a 20 20 20 20 20 20 2a  ew tests.      *
15ca0 2a 20 28 65 78 3a 20 70 43 2d 3e 6e 48 64 72 50  * (ex: pC->nHdrP
15cb0 61 72 73 65 64 3c 3d 70 32 29 20 69 6e 20 74 68  arsed<=p2) in th
15cc0 65 20 6e 65 78 74 20 73 65 63 74 69 6f 6e 2c 20  e next section, 
15cd0 77 65 20 61 63 68 69 65 76 65 20 61 0a 20 20 20  we achieve a.   
15ce0 20 20 20 2a 2a 20 6d 65 61 73 75 72 61 62 6c 65     ** measurable
15cf0 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 67 61 69   performance gai
15d00 6e 2e 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20  n..      **.    
15d10 20 20 2a 2a 20 54 68 69 73 20 62 72 61 6e 63 68    ** This branch
15d20 20 69 73 20 74 61 6b 65 6e 20 65 76 65 6e 20 69   is taken even i
15d30 66 20 61 4f 66 66 73 65 74 5b 30 5d 3d 3d 30 2e  f aOffset[0]==0.
15d40 20 20 53 75 63 68 20 61 20 72 65 63 6f 72 64 20    Such a record 
15d50 69 73 20 6e 65 76 65 72 0a 20 20 20 20 20 20 2a  is never.      *
15d60 2a 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 53  * generated by S
15d70 51 4c 69 74 65 2c 20 61 6e 64 20 63 6f 75 6c 64  QLite, and could
15d80 20 62 65 20 63 6f 6e 73 69 64 65 72 65 64 20 63   be considered c
15d90 6f 72 72 75 70 74 69 6f 6e 2c 20 62 75 74 20 77  orruption, but w
15da0 65 0a 20 20 20 20 20 20 2a 2a 20 61 63 63 65 70  e.      ** accep
15db0 74 20 69 74 20 66 6f 72 20 68 69 73 74 6f 72 69  t it for histori
15dc0 63 61 6c 20 72 65 61 73 6f 6e 73 2e 20 20 57 68  cal reasons.  Wh
15dd0 65 6e 20 61 4f 66 66 73 65 74 5b 30 5d 3d 3d 30  en aOffset[0]==0
15de0 2c 20 74 68 65 20 63 6f 64 65 20 74 68 69 73 0a  , the code this.
15df0 20 20 20 20 20 20 2a 2a 20 62 72 61 6e 63 68 20        ** branch 
15e00 6a 75 6d 70 73 20 74 6f 20 72 65 61 64 73 20 70  jumps to reads p
15e10 61 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74  ast the end of t
15e20 68 65 20 72 65 63 6f 72 64 2c 20 62 75 74 20 6e  he record, but n
15e30 65 76 65 72 20 6d 6f 72 65 0a 20 20 20 20 20 20  ever more.      
15e40 2a 2a 20 74 68 61 6e 20 61 20 66 65 77 20 62 79  ** than a few by
15e50 74 65 73 2e 20 20 45 76 65 6e 20 69 66 20 74 68  tes.  Even if th
15e60 65 20 72 65 63 6f 72 64 20 6f 63 63 75 72 73 20  e record occurs 
15e70 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
15e80 65 20 70 61 67 65 0a 20 20 20 20 20 20 2a 2a 20  e page.      ** 
15e90 63 6f 6e 74 65 6e 74 20 61 72 65 61 2c 20 74 68  content area, th
15ea0 65 20 22 70 61 67 65 20 68 65 61 64 65 72 22 20  e "page header" 
15eb0 63 6f 6d 65 73 20 61 66 74 65 72 20 74 68 65 20  comes after the 
15ec0 70 61 67 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64  page content and
15ed0 20 73 6f 0a 20 20 20 20 20 20 2a 2a 20 74 68 69   so.      ** thi
15ee0 73 20 6f 76 65 72 72 65 61 64 20 69 73 20 68 61  s overread is ha
15ef0 72 6d 6c 65 73 73 2e 20 20 53 69 6d 69 6c 61 72  rmless.  Similar
15f00 20 6f 76 65 72 72 65 61 64 73 20 63 61 6e 20 6f   overreads can o
15f10 63 63 75 72 20 66 6f 72 20 61 20 63 6f 72 72 75  ccur for a corru
15f20 70 74 0a 20 20 20 20 20 20 2a 2a 20 64 61 74 61  pt.      ** data
15f30 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 20 20 20  base file..     
15f40 20 2a 2f 0a 20 20 20 20 20 20 7a 44 61 74 61 20   */.      zData 
15f50 3d 20 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20  = pC->aRow;.    
15f60 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 48    assert( pC->nH
15f70 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29 3b 20  drParsed<=p2 ); 
15f80 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 64 69          /* Condi
15f90 74 69 6f 6e 61 6c 20 73 6b 69 70 70 65 64 20 2a  tional skipped *
15fa0 2f 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65  /.      testcase
15fb0 28 20 61 4f 66 66 73 65 74 5b 30 5d 3d 3d 30 20  ( aOffset[0]==0 
15fc0 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70  );.      goto op
15fd0 5f 63 6f 6c 75 6d 6e 5f 72 65 61 64 5f 68 65 61  _column_read_hea
15fe0 64 65 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a  der;.    }.  }..
15ff0 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61    /* Make sure a
16000 74 20 6c 65 61 73 74 20 74 68 65 20 66 69 72 73  t least the firs
16010 74 20 70 32 2b 31 20 65 6e 74 72 69 65 73 20 6f  t p2+1 entries o
16020 66 20 74 68 65 20 68 65 61 64 65 72 20 68 61 76  f the header hav
16030 65 20 62 65 65 6e 0a 20 20 2a 2a 20 70 61 72 73  e been.  ** pars
16040 65 64 20 61 6e 64 20 76 61 6c 69 64 20 69 6e 66  ed and valid inf
16050 6f 72 6d 61 74 69 6f 6e 20 69 73 20 69 6e 20 61  ormation is in a
16060 4f 66 66 73 65 74 5b 5d 20 61 6e 64 20 70 43 2d  Offset[] and pC-
16070 3e 61 54 79 70 65 5b 5d 2e 0a 20 20 2a 2f 0a 20  >aType[]..  */. 
16080 20 69 66 28 20 70 43 2d 3e 6e 48 64 72 50 61 72   if( pC->nHdrPar
16090 73 65 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20 2f  sed<=p2 ){.    /
160a0 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 6d 6f  * If there is mo
160b0 72 65 20 68 65 61 64 65 72 20 61 76 61 69 6c 61  re header availa
160c0 62 6c 65 20 66 6f 72 20 70 61 72 73 69 6e 67 20  ble for parsing 
160d0 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20 74  in the record, t
160e0 72 79 0a 20 20 20 20 2a 2a 20 74 6f 20 65 78 74  ry.    ** to ext
160f0 72 61 63 74 20 61 64 64 69 74 69 6f 6e 61 6c 20  ract additional 
16100 66 69 65 6c 64 73 20 75 70 20 74 68 72 6f 75 67  fields up throug
16110 68 20 74 68 65 20 70 32 2b 31 2d 74 68 20 66 69  h the p2+1-th fi
16120 65 6c 64 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20  eld .    */.    
16130 69 66 28 20 70 43 2d 3e 69 48 64 72 4f 66 66 73  if( pC->iHdrOffs
16140 65 74 3c 61 4f 66 66 73 65 74 5b 30 5d 20 29 7b  et<aOffset[0] ){
16150 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73  .      /* Make s
16160 75 72 65 20 7a 44 61 74 61 20 70 6f 69 6e 74 73  ure zData points
16170 20 74 6f 20 65 6e 6f 75 67 68 20 6f 66 20 74 68   to enough of th
16180 65 20 72 65 63 6f 72 64 20 74 6f 20 63 6f 76 65  e record to cove
16190 72 20 74 68 65 20 68 65 61 64 65 72 2e 20 2a 2f  r the header. */
161a0 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61  .      if( pC->a
161b0 52 6f 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Row==0 ){.      
161c0 20 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20    memset(&sMem, 
161d0 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29  0, sizeof(sMem))
161e0 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  ;.        rc = s
161f0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f  qlite3VdbeMemFro
16200 6d 42 74 72 65 65 28 70 43 2d 3e 75 63 2e 70 43  mBtree(pC->uc.pC
16210 75 72 73 6f 72 2c 20 30 2c 20 61 4f 66 66 73 65  ursor, 0, aOffse
16220 74 5b 30 5d 2c 20 26 73 4d 65 6d 29 3b 0a 20 20  t[0], &sMem);.  
16230 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
16240 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
16250 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
16260 72 3b 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61  r;.        zData
16270 20 3d 20 28 75 38 2a 29 73 4d 65 6d 2e 7a 3b 0a   = (u8*)sMem.z;.
16280 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
16290 20 20 20 20 20 7a 44 61 74 61 20 3d 20 70 43 2d       zData = pC-
162a0 3e 61 52 6f 77 3b 0a 20 20 20 20 20 20 7d 0a 20  >aRow;.      }. 
162b0 20 0a 20 20 20 20 20 20 2f 2a 20 46 69 6c 6c 20   .      /* Fill 
162c0 69 6e 20 70 43 2d 3e 61 54 79 70 65 5b 69 5d 20  in pC->aType[i] 
162d0 61 6e 64 20 61 4f 66 66 73 65 74 5b 69 5d 20 76  and aOffset[i] v
162e0 61 6c 75 65 73 20 74 68 72 6f 75 67 68 20 74 68  alues through th
162f0 65 20 70 32 2d 74 68 20 66 69 65 6c 64 2e 20 2a  e p2-th field. *
16300 2f 0a 20 20 20 20 6f 70 5f 63 6f 6c 75 6d 6e 5f  /.    op_column_
16310 72 65 61 64 5f 68 65 61 64 65 72 3a 0a 20 20 20  read_header:.   
16320 20 20 20 69 20 3d 20 70 43 2d 3e 6e 48 64 72 50     i = pC->nHdrP
16330 61 72 73 65 64 3b 0a 20 20 20 20 20 20 6f 66 66  arsed;.      off
16340 73 65 74 36 34 20 3d 20 61 4f 66 66 73 65 74 5b  set64 = aOffset[
16350 69 5d 3b 0a 20 20 20 20 20 20 7a 48 64 72 20 3d  i];.      zHdr =
16360 20 7a 44 61 74 61 20 2b 20 70 43 2d 3e 69 48 64   zData + pC->iHd
16370 72 4f 66 66 73 65 74 3b 0a 20 20 20 20 20 20 7a  rOffset;.      z
16380 45 6e 64 48 64 72 20 3d 20 7a 44 61 74 61 20 2b  EndHdr = zData +
16390 20 61 4f 66 66 73 65 74 5b 30 5d 3b 0a 20 20 20   aOffset[0];.   
163a0 20 20 20 74 65 73 74 63 61 73 65 28 20 7a 48 64     testcase( zHd
163b0 72 3e 3d 7a 45 6e 64 48 64 72 20 29 3b 0a 20 20  r>=zEndHdr );.  
163c0 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20      do{.        
163d0 69 66 28 20 28 70 43 2d 3e 61 54 79 70 65 5b 69  if( (pC->aType[i
163e0 5d 20 3d 20 74 20 3d 20 7a 48 64 72 5b 30 5d 29  ] = t = zHdr[0])
163f0 3c 30 78 38 30 20 29 7b 0a 20 20 20 20 20 20 20  <0x80 ){.       
16400 20 20 20 7a 48 64 72 2b 2b 3b 0a 20 20 20 20 20     zHdr++;.     
16410 20 20 20 20 20 6f 66 66 73 65 74 36 34 20 2b 3d       offset64 +=
16420 20 73 71 6c 69 74 65 33 56 64 62 65 4f 6e 65 42   sqlite3VdbeOneB
16430 79 74 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e  yteSerialTypeLen
16440 28 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  (t);.        }el
16450 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 7a 48  se{.          zH
16460 64 72 20 2b 3d 20 73 71 6c 69 74 65 33 47 65 74  dr += sqlite3Get
16470 56 61 72 69 6e 74 33 32 28 7a 48 64 72 2c 20 26  Varint32(zHdr, &
16480 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70 43  t);.          pC
16490 2d 3e 61 54 79 70 65 5b 69 5d 20 3d 20 74 3b 0a  ->aType[i] = t;.
164a0 20 20 20 20 20 20 20 20 20 20 6f 66 66 73 65 74            offset
164b0 36 34 20 2b 3d 20 73 71 6c 69 74 65 33 56 64 62  64 += sqlite3Vdb
164c0 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 74  eSerialTypeLen(t
164d0 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
164e0 20 20 20 20 20 61 4f 66 66 73 65 74 5b 2b 2b 69       aOffset[++i
164f0 5d 20 3d 20 28 75 33 32 29 28 6f 66 66 73 65 74  ] = (u32)(offset
16500 36 34 20 26 20 30 78 66 66 66 66 66 66 66 66 29  64 & 0xffffffff)
16510 3b 0a 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20  ;.      }while( 
16520 69 3c 3d 70 32 20 26 26 20 7a 48 64 72 3c 7a 45  i<=p2 && zHdr<zE
16530 6e 64 48 64 72 20 29 3b 0a 0a 20 20 20 20 20 20  ndHdr );..      
16540 2f 2a 20 54 68 65 20 72 65 63 6f 72 64 20 69 73  /* The record is
16550 20 63 6f 72 72 75 70 74 20 69 66 20 61 6e 79 20   corrupt if any 
16560 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
16570 20 61 72 65 20 74 72 75 65 3a 0a 20 20 20 20 20   are true:.     
16580 20 2a 2a 20 28 31 29 20 74 68 65 20 62 79 74 65   ** (1) the byte
16590 73 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20  s of the header 
165a0 65 78 74 65 6e 64 20 70 61 73 74 20 74 68 65 20  extend past the 
165b0 64 65 63 6c 61 72 65 64 20 68 65 61 64 65 72 20  declared header 
165c0 73 69 7a 65 0a 20 20 20 20 20 20 2a 2a 20 28 32  size.      ** (2
165d0 29 20 74 68 65 20 65 6e 74 69 72 65 20 68 65 61  ) the entire hea
165e0 64 65 72 20 77 61 73 20 75 73 65 64 20 62 75 74  der was used but
165f0 20 6e 6f 74 20 61 6c 6c 20 64 61 74 61 20 77 61   not all data wa
16600 73 20 75 73 65 64 0a 20 20 20 20 20 20 2a 2a 20  s used.      ** 
16610 28 33 29 20 74 68 65 20 65 6e 64 20 6f 66 20 74  (3) the end of t
16620 68 65 20 64 61 74 61 20 65 78 74 65 6e 64 73 20  he data extends 
16630 62 65 79 6f 6e 64 20 74 68 65 20 65 6e 64 20 6f  beyond the end o
16640 66 20 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20  f the record..  
16650 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28      */.      if(
16660 20 28 7a 48 64 72 3e 3d 7a 45 6e 64 48 64 72 20   (zHdr>=zEndHdr 
16670 26 26 20 28 7a 48 64 72 3e 7a 45 6e 64 48 64 72  && (zHdr>zEndHdr
16680 20 7c 7c 20 6f 66 66 73 65 74 36 34 21 3d 70 43   || offset64!=pC
16690 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29 29 0a  ->payloadSize)).
166a0 20 20 20 20 20 20 20 7c 7c 20 28 6f 66 66 73 65         || (offse
166b0 74 36 34 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61  t64 > pC->payloa
166c0 64 53 69 7a 65 29 0a 20 20 20 20 20 20 29 7b 0a  dSize).      ){.
166d0 20 20 20 20 20 20 20 20 69 66 28 20 61 4f 66 66          if( aOff
166e0 73 65 74 5b 30 5d 3d 3d 30 20 29 7b 0a 20 20 20  set[0]==0 ){.   
166f0 20 20 20 20 20 20 20 69 20 3d 20 30 3b 0a 20 20         i = 0;.  
16700 20 20 20 20 20 20 20 20 7a 48 64 72 20 3d 20 7a          zHdr = z
16710 45 6e 64 48 64 72 3b 0a 20 20 20 20 20 20 20 20  EndHdr;.        
16720 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
16730 20 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30   if( pC->aRow==0
16740 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   ) sqlite3VdbeMe
16750 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b  mRelease(&sMem);
16760 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
16770 6f 70 5f 63 6f 6c 75 6d 6e 5f 63 6f 72 72 75 70  op_column_corrup
16780 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  t;.        }.   
16790 20 20 20 7d 0a 0a 20 20 20 20 20 20 70 43 2d 3e     }..      pC->
167a0 6e 48 64 72 50 61 72 73 65 64 20 3d 20 69 3b 0a  nHdrParsed = i;.
167b0 20 20 20 20 20 20 70 43 2d 3e 69 48 64 72 4f 66        pC->iHdrOf
167c0 66 73 65 74 20 3d 20 28 75 33 32 29 28 7a 48 64  fset = (u32)(zHd
167d0 72 20 2d 20 7a 44 61 74 61 29 3b 0a 20 20 20 20  r - zData);.    
167e0 20 20 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d    if( pC->aRow==
167f0 30 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d  0 ) sqlite3VdbeM
16800 65 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29  emRelease(&sMem)
16810 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
16820 20 20 20 74 20 3d 20 30 3b 0a 20 20 20 20 7d 0a     t = 0;.    }.
16830 0a 20 20 20 20 2f 2a 20 49 66 20 61 66 74 65 72  .    /* If after
16840 20 74 72 79 69 6e 67 20 74 6f 20 65 78 74 72 61   trying to extra
16850 63 74 20 6e 65 77 20 65 6e 74 72 69 65 73 20 66  ct new entries f
16860 72 6f 6d 20 74 68 65 20 68 65 61 64 65 72 2c 20  rom the header, 
16870 6e 48 64 72 50 61 72 73 65 64 20 69 73 0a 20 20  nHdrParsed is.  
16880 20 20 2a 2a 20 73 74 69 6c 6c 20 6e 6f 74 20 75    ** still not u
16890 70 20 74 6f 20 70 32 2c 20 74 68 61 74 20 6d 65  p to p2, that me
168a0 61 6e 73 20 74 68 61 74 20 74 68 65 20 72 65 63  ans that the rec
168b0 6f 72 64 20 68 61 73 20 66 65 77 65 72 20 74 68  ord has fewer th
168c0 61 6e 20 70 32 0a 20 20 20 20 2a 2a 20 63 6f 6c  an p2.    ** col
168d0 75 6d 6e 73 2e 20 20 53 6f 20 74 68 65 20 72 65  umns.  So the re
168e0 73 75 6c 74 20 77 69 6c 6c 20 62 65 20 65 69 74  sult will be eit
168f0 68 65 72 20 74 68 65 20 64 65 66 61 75 6c 74 20  her the default 
16900 76 61 6c 75 65 20 6f 72 20 61 20 4e 55 4c 4c 2e  value or a NULL.
16910 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
16920 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d  pC->nHdrParsed<=
16930 70 32 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  p2 ){.      if( 
16940 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
16950 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 20 20 73  MEM ){.        s
16960 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
16970 6c 6c 6f 77 43 6f 70 79 28 70 44 65 73 74 2c 20  llowCopy(pDest, 
16980 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45  pOp->p4.pMem, ME
16990 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20 20  M_Static);.     
169a0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
169b0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
169c0 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20  tNull(pDest);.  
169d0 20 20 20 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f      }.      goto
169e0 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a   op_column_out;.
169f0 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
16a00 20 20 20 74 20 3d 20 70 43 2d 3e 61 54 79 70 65     t = pC->aType
16a10 5b 70 32 5d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  [p2];.  }..  /* 
16a20 45 78 74 72 61 63 74 20 74 68 65 20 63 6f 6e 74  Extract the cont
16a30 65 6e 74 20 66 6f 72 20 74 68 65 20 70 32 2b 31  ent for the p2+1
16a40 2d 74 68 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f 6e  -th column.  Con
16a50 74 72 6f 6c 20 63 61 6e 20 6f 6e 6c 79 0a 20 20  trol can only.  
16a60 2a 2a 20 72 65 61 63 68 20 74 68 69 73 20 70 6f  ** reach this po
16a70 69 6e 74 20 69 66 20 61 4f 66 66 73 65 74 5b 70  int if aOffset[p
16a80 32 5d 2c 20 61 4f 66 66 73 65 74 5b 70 32 2b 31  2], aOffset[p2+1
16a90 5d 2c 20 61 6e 64 20 70 43 2d 3e 61 54 79 70 65  ], and pC->aType
16aa0 5b 70 32 5d 20 61 72 65 0a 20 20 2a 2a 20 61 6c  [p2] are.  ** al
16ab0 6c 20 76 61 6c 69 64 2e 0a 20 20 2a 2f 0a 20 20  l valid..  */.  
16ac0 61 73 73 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e  assert( p2<pC->n
16ad0 48 64 72 50 61 72 73 65 64 20 29 3b 0a 20 20 61  HdrParsed );.  a
16ae0 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
16af0 45 5f 4f 4b 20 29 3b 0a 20 20 61 73 73 65 72 74  E_OK );.  assert
16b00 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  ( sqlite3VdbeChe
16b10 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28  ckMemInvariants(
16b20 70 44 65 73 74 29 20 29 3b 0a 20 20 69 66 28 20  pDest) );.  if( 
16b30 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70  VdbeMemDynamic(p
16b40 44 65 73 74 29 20 29 7b 0a 20 20 20 20 73 71 6c  Dest) ){.    sql
16b50 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
16b60 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 7d 0a 20  ll(pDest);.  }. 
16b70 20 61 73 73 65 72 74 28 20 74 3d 3d 70 43 2d 3e   assert( t==pC->
16b80 61 54 79 70 65 5b 70 32 5d 20 29 3b 0a 20 20 69  aType[p2] );.  i
16b90 66 28 20 70 43 2d 3e 73 7a 52 6f 77 3e 3d 61 4f  f( pC->szRow>=aO
16ba0 66 66 73 65 74 5b 70 32 2b 31 5d 20 29 7b 0a 20  ffset[p2+1] ){. 
16bb0 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68     /* This is th
16bc0 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 68  e common case wh
16bd0 65 72 65 20 74 68 65 20 64 65 73 69 72 65 64 20  ere the desired 
16be0 63 6f 6e 74 65 6e 74 20 66 69 74 73 20 6f 6e 20  content fits on 
16bf0 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 20 20 20  the original.   
16c00 20 2a 2a 20 70 61 67 65 20 2d 20 77 68 65 72 65   ** page - where
16c10 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 20   the content is 
16c20 6e 6f 74 20 6f 6e 20 61 6e 20 6f 76 65 72 66 6c  not on an overfl
16c30 6f 77 20 70 61 67 65 20 2a 2f 0a 20 20 20 20 7a  ow page */.    z
16c40 44 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77 20  Data = pC->aRow 
16c50 2b 20 61 4f 66 66 73 65 74 5b 70 32 5d 3b 0a 20  + aOffset[p2];. 
16c60 20 20 20 69 66 28 20 74 3c 31 32 20 29 7b 0a 20     if( t<12 ){. 
16c70 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
16c80 53 65 72 69 61 6c 47 65 74 28 7a 44 61 74 61 2c  SerialGet(zData,
16c90 20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20   t, pDest);.    
16ca0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20  }else{.      /* 
16cb0 49 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 76 61  If the column va
16cc0 6c 75 65 20 69 73 20 61 20 73 74 72 69 6e 67 2c  lue is a string,
16cd0 20 77 65 20 6e 65 65 64 20 61 20 70 65 72 73 69   we need a persi
16ce0 73 74 65 6e 74 20 76 61 6c 75 65 2c 20 6e 6f 74  stent value, not
16cf0 0a 20 20 20 20 20 20 2a 2a 20 61 20 4d 45 4d 5f  .      ** a MEM_
16d00 45 70 68 65 6d 20 76 61 6c 75 65 2e 20 20 54 68  Ephem value.  Th
16d10 69 73 20 62 72 61 6e 63 68 20 69 73 20 61 20 66  is branch is a f
16d20 61 73 74 20 73 68 6f 72 74 2d 63 75 74 20 74 68  ast short-cut th
16d30 61 74 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74  at is equivalent
16d40 0a 20 20 20 20 20 20 2a 2a 20 74 6f 20 63 61 6c  .      ** to cal
16d50 6c 69 6e 67 20 73 71 6c 69 74 65 33 56 64 62 65  ling sqlite3Vdbe
16d60 53 65 72 69 61 6c 47 65 74 28 29 20 61 6e 64 20  SerialGet() and 
16d70 73 71 6c 69 74 65 33 56 64 62 65 44 65 65 70 68  sqlite3VdbeDeeph
16d80 65 6d 65 72 61 6c 69 7a 65 28 29 2e 0a 20 20 20  emeralize()..   
16d90 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 74 61 74     */.      stat
16da0 69 63 20 63 6f 6e 73 74 20 75 31 36 20 61 46 6c  ic const u16 aFl
16db0 61 67 5b 5d 20 3d 20 7b 20 4d 45 4d 5f 42 6c 6f  ag[] = { MEM_Blo
16dc0 62 2c 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 54  b, MEM_Str|MEM_T
16dd0 65 72 6d 20 7d 3b 0a 20 20 20 20 20 20 70 44 65  erm };.      pDe
16de0 73 74 2d 3e 6e 20 3d 20 6c 65 6e 20 3d 20 28 74  st->n = len = (t
16df0 2d 31 32 29 2f 32 3b 0a 20 20 20 20 20 20 70 44  -12)/2;.      pD
16e00 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  est->enc = encod
16e10 69 6e 67 3b 0a 20 20 20 20 20 20 69 66 28 20 70  ing;.      if( p
16e20 44 65 73 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3c  Dest->szMalloc <
16e30 20 6c 65 6e 2b 32 20 29 7b 0a 20 20 20 20 20 20   len+2 ){.      
16e40 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 3d    pDest->flags =
16e50 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20   MEM_Null;.     
16e60 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64     if( sqlite3Vd
16e70 62 65 4d 65 6d 47 72 6f 77 28 70 44 65 73 74 2c  beMemGrow(pDest,
16e80 20 6c 65 6e 2b 32 2c 20 30 29 20 29 20 67 6f 74   len+2, 0) ) got
16e90 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20  o no_mem;.      
16ea0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70  }else{.        p
16eb0 44 65 73 74 2d 3e 7a 20 3d 20 70 44 65 73 74 2d  Dest->z = pDest-
16ec0 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 20 20  >zMalloc;.      
16ed0 7d 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70  }.      memcpy(p
16ee0 44 65 73 74 2d 3e 7a 2c 20 7a 44 61 74 61 2c 20  Dest->z, zData, 
16ef0 6c 65 6e 29 3b 0a 20 20 20 20 20 20 70 44 65 73  len);.      pDes
16f00 74 2d 3e 7a 5b 6c 65 6e 5d 20 3d 20 30 3b 0a 20  t->z[len] = 0;. 
16f10 20 20 20 20 20 70 44 65 73 74 2d 3e 7a 5b 6c 65       pDest->z[le
16f20 6e 2b 31 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20  n+1] = 0;.      
16f30 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 3d 20 61  pDest->flags = a
16f40 46 6c 61 67 5b 74 26 31 5d 3b 0a 20 20 20 20 7d  Flag[t&1];.    }
16f50 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 44  .  }else{.    pD
16f60 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  est->enc = encod
16f70 69 6e 67 3b 0a 20 20 20 20 2f 2a 20 54 68 69 73  ing;.    /* This
16f80 20 62 72 61 6e 63 68 20 68 61 70 70 65 6e 73 20   branch happens 
16f90 6f 6e 6c 79 20 77 68 65 6e 20 63 6f 6e 74 65 6e  only when conten
16fa0 74 20 69 73 20 6f 6e 20 6f 76 65 72 66 6c 6f 77  t is on overflow
16fb0 20 70 61 67 65 73 20 2a 2f 0a 20 20 20 20 69 66   pages */.    if
16fc0 28 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f  ( ((pOp->p5 & (O
16fd0 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 7c  PFLAG_LENGTHARG|
16fe0 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
16ff0 29 29 21 3d 30 0a 20 20 20 20 20 20 20 20 20 20  ))!=0.          
17000 26 26 20 28 28 74 3e 3d 31 32 20 26 26 20 28 74  && ((t>=12 && (t
17010 26 31 29 3d 3d 30 29 20 7c 7c 20 28 70 4f 70 2d  &1)==0) || (pOp-
17020 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 54 59 50  >p5 & OPFLAG_TYP
17030 45 4f 46 41 52 47 29 21 3d 30 29 29 0a 20 20 20  EOFARG)!=0)).   
17040 20 20 7c 7c 20 28 6c 65 6e 20 3d 20 73 71 6c 69    || (len = sqli
17050 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70  te3VdbeSerialTyp
17060 65 4c 65 6e 28 74 29 29 3d 3d 30 0a 20 20 20 20  eLen(t))==0.    
17070 29 7b 0a 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74  ){.      /* Cont
17080 65 6e 74 20 69 73 20 69 72 72 65 6c 65 76 61 6e  ent is irrelevan
17090 74 20 66 6f 72 0a 20 20 20 20 20 20 2a 2a 20 20  t for.      **  
170a0 20 20 31 2e 20 74 68 65 20 74 79 70 65 6f 66 28    1. the typeof(
170b0 29 20 66 75 6e 63 74 69 6f 6e 2c 0a 20 20 20 20  ) function,.    
170c0 20 20 2a 2a 20 20 20 20 32 2e 20 74 68 65 20 6c    **    2. the l
170d0 65 6e 67 74 68 28 58 29 20 66 75 6e 63 74 69 6f  ength(X) functio
170e0 6e 20 69 66 20 58 20 69 73 20 61 20 62 6c 6f 62  n if X is a blob
170f0 2c 20 61 6e 64 0a 20 20 20 20 20 20 2a 2a 20 20  , and.      **  
17100 20 20 33 2e 20 69 66 20 74 68 65 20 63 6f 6e 74    3. if the cont
17110 65 6e 74 20 6c 65 6e 67 74 68 20 69 73 20 7a 65  ent length is ze
17120 72 6f 2e 0a 20 20 20 20 20 20 2a 2a 20 53 6f 20  ro..      ** So 
17130 77 65 20 6d 69 67 68 74 20 61 73 20 77 65 6c 6c  we might as well
17140 20 75 73 65 20 62 6f 67 75 73 20 63 6f 6e 74 65   use bogus conte
17150 6e 74 20 72 61 74 68 65 72 20 74 68 61 6e 20 72  nt rather than r
17160 65 61 64 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20  eading.      ** 
17170 63 6f 6e 74 65 6e 74 20 66 72 6f 6d 20 64 69 73  content from dis
17180 6b 2e 20 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20  k. .      **.   
17190 20 20 20 2a 2a 20 41 6c 74 68 6f 75 67 68 20 73     ** Although s
171a0 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
171b0 47 65 74 28 29 20 6d 61 79 20 72 65 61 64 20 61  Get() may read a
171c0 74 20 6d 6f 73 74 20 38 20 62 79 74 65 73 20 66  t most 8 bytes f
171d0 72 6f 6d 20 74 68 65 0a 20 20 20 20 20 20 2a 2a  rom the.      **
171e0 20 62 75 66 66 65 72 20 70 61 73 73 65 64 20 74   buffer passed t
171f0 6f 20 69 74 2c 20 64 65 62 75 67 67 69 6e 67 20  o it, debugging 
17200 66 75 6e 63 74 69 6f 6e 20 56 64 62 65 4d 65 6d  function VdbeMem
17210 50 72 65 74 74 79 50 72 69 6e 74 28 29 20 6d 61  PrettyPrint() ma
17220 79 0a 20 20 20 20 20 20 2a 2a 20 72 65 61 64 20  y.      ** read 
17230 75 70 20 74 6f 20 31 36 2e 20 53 6f 20 31 36 20  up to 16. So 16 
17240 62 79 74 65 73 20 6f 66 20 62 6f 67 75 73 20 63  bytes of bogus c
17250 6f 6e 74 65 6e 74 20 69 73 20 73 75 70 70 6c 69  ontent is suppli
17260 65 64 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  ed..      */.   
17270 20 20 20 73 74 61 74 69 63 20 75 38 20 61 5a 65     static u8 aZe
17280 72 6f 5b 31 36 5d 3b 20 20 2f 2a 20 54 68 69 73  ro[16];  /* This
17290 20 69 73 20 74 68 65 20 62 6f 67 75 73 20 63 6f   is the bogus co
172a0 6e 74 65 6e 74 20 2a 2f 0a 20 20 20 20 20 20 73  ntent */.      s
172b0 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
172c0 47 65 74 28 61 5a 65 72 6f 2c 20 74 2c 20 70 44  Get(aZero, t, pD
172d0 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  est);.    }else{
172e0 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
172f0 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74  te3VdbeMemFromBt
17300 72 65 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  ree(pC->uc.pCurs
17310 6f 72 2c 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c  or, aOffset[p2],
17320 20 6c 65 6e 2c 20 70 44 65 73 74 29 3b 0a 20 20   len, pDest);.  
17330 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
17340 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
17350 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
17360 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
17370 62 65 53 65 72 69 61 6c 47 65 74 28 28 63 6f 6e  beSerialGet((con
17380 73 74 20 75 38 2a 29 70 44 65 73 74 2d 3e 7a 2c  st u8*)pDest->z,
17390 20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20   t, pDest);.    
173a0 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26    pDest->flags &
173b0 3d 20 7e 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20 20  = ~MEM_Ephem;.  
173c0 20 20 7d 0a 20 20 7d 0a 0a 6f 70 5f 63 6f 6c 75    }.  }..op_colu
173d0 6d 6e 5f 6f 75 74 3a 0a 20 20 55 50 44 41 54 45  mn_out:.  UPDATE
173e0 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44  _MAX_BLOBSIZE(pD
173f0 65 73 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52  est);.  REGISTER
17400 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
17410 70 44 65 73 74 29 3b 0a 20 20 62 72 65 61 6b 3b  pDest);.  break;
17420 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 63 6f 72 72  ..op_column_corr
17430 75 70 74 3a 0a 20 20 69 66 28 20 61 4f 70 5b 30  upt:.  if( aOp[0
17440 5d 2e 70 33 3e 30 20 29 7b 0a 20 20 20 20 70 4f  ].p3>0 ){.    pO
17450 70 20 3d 20 26 61 4f 70 5b 61 4f 70 5b 30 5d 2e  p = &aOp[aOp[0].
17460 70 33 2d 31 5d 3b 0a 20 20 20 20 62 72 65 61 6b  p3-1];.    break
17470 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72  ;.  }else{.    r
17480 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  c = SQLITE_CORRU
17490 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 67 6f 74  PT_BKPT;.    got
174a0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
174b0 72 72 6f 72 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 20  rror;.  }.}../* 
174c0 4f 70 63 6f 64 65 3a 20 41 66 66 69 6e 69 74 79  Opcode: Affinity
174d0 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
174e0 20 53 79 6e 6f 70 73 69 73 3a 20 61 66 66 69 6e   Synopsis: affin
174f0 69 74 79 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a  ity(r[P1@P2]).**
17500 0a 2a 2a 20 41 70 70 6c 79 20 61 66 66 69 6e 69  .** Apply affini
17510 74 69 65 73 20 74 6f 20 61 20 72 61 6e 67 65 20  ties to a range 
17520 6f 66 20 50 32 20 72 65 67 69 73 74 65 72 73 20  of P2 registers 
17530 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 50 31  starting with P1
17540 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  ..**.** P4 is a 
17550 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50  string that is P
17560 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e  2 characters lon
17570 67 2e 20 54 68 65 20 4e 2d 74 68 20 63 68 61 72  g. The N-th char
17580 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20  acter of the.** 
17590 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73  string indicates
175a0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69   the column affi
175b0 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64  nity that should
175c0 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65   be used for the
175d0 20 4e 2d 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20   N-th.** memory 
175e0 63 65 6c 6c 20 69 6e 20 74 68 65 20 72 61 6e 67  cell in the rang
175f0 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 66  e..*/.case OP_Af
17600 66 69 6e 69 74 79 3a 20 7b 0a 20 20 63 6f 6e 73  finity: {.  cons
17610 74 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74  t char *zAffinit
17620 79 3b 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69  y;   /* The affi
17630 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69  nity to be appli
17640 65 64 20 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e 69  ed */..  zAffini
17650 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a  ty = pOp->p4.z;.
17660 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e    assert( zAffin
17670 69 74 79 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  ity!=0 );.  asse
17680 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b  rt( pOp->p2>0 );
17690 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69  .  assert( zAffi
176a0 6e 69 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30  nity[pOp->p2]==0
176b0 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   );.  pIn1 = &aM
176c0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 77  em[pOp->p1];.  w
176d0 68 69 6c 65 28 20 31 20 2f 2a 65 78 69 74 2d 62  hile( 1 /*exit-b
176e0 79 2d 62 72 65 61 6b 2a 2f 20 29 7b 0a 20 20 20  y-break*/ ){.   
176f0 20 61 73 73 65 72 74 28 20 70 49 6e 31 20 3c 3d   assert( pIn1 <=
17700 20 26 70 2d 3e 61 4d 65 6d 5b 28 70 2d 3e 6e 4d   &p->aMem[(p->nM
17710 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
17720 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72  r)] );.    asser
17730 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49  t( memIsValid(pI
17740 6e 31 29 20 29 3b 0a 20 20 20 20 61 70 70 6c 79  n1) );.    apply
17750 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 7a  Affinity(pIn1, z
17760 41 66 66 69 6e 69 74 79 5b 30 5d 2c 20 65 6e 63  Affinity[0], enc
17770 6f 64 69 6e 67 29 3b 0a 20 20 20 20 69 66 28 20  oding);.    if( 
17780 7a 41 66 66 69 6e 69 74 79 5b 30 5d 3d 3d 53 51  zAffinity[0]==SQ
17790 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 26 26  LITE_AFF_REAL &&
177a0 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
177b0 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 7b 0a 20  MEM_Int)!=0 ){. 
177c0 20 20 20 20 20 2f 2a 20 57 68 65 6e 20 61 70 70       /* When app
177d0 6c 79 69 6e 67 20 52 45 41 4c 20 61 66 66 69 6e  lying REAL affin
177e0 69 74 79 2c 20 69 66 20 74 68 65 20 72 65 73 75  ity, if the resu
177f0 6c 74 20 69 73 20 73 74 69 6c 6c 20 61 6e 20 4d  lt is still an M
17800 45 4d 5f 49 6e 74 0a 20 20 20 20 20 20 2a 2a 20  EM_Int.      ** 
17810 74 68 61 74 20 77 69 6c 6c 20 66 69 74 20 69 6e  that will fit in
17820 20 36 20 62 79 74 65 73 2c 20 74 68 65 6e 20 63   6 bytes, then c
17830 68 61 6e 67 65 20 74 68 65 20 74 79 70 65 20 74  hange the type t
17840 6f 20 4d 45 4d 5f 49 6e 74 52 65 61 6c 0a 20 20  o MEM_IntReal.  
17850 20 20 20 20 2a 2a 20 73 6f 20 74 68 61 74 20 77      ** so that w
17860 65 20 6b 65 65 70 20 74 68 65 20 68 69 67 68 2d  e keep the high-
17870 72 65 73 6f 6c 75 74 69 6f 6e 20 69 6e 74 65 67  resolution integ
17880 65 72 20 76 61 6c 75 65 20 62 75 74 20 6b 6e 6f  er value but kno
17890 77 20 74 68 61 74 0a 20 20 20 20 20 20 2a 2a 20  w that.      ** 
178a0 74 68 65 20 74 79 70 65 20 72 65 61 6c 6c 79 20  the type really 
178b0 77 61 6e 74 73 20 74 6f 20 62 65 20 52 45 41 4c  wants to be REAL
178c0 2e 20 2a 2f 0a 20 20 20 20 20 20 74 65 73 74 63  . */.      testc
178d0 61 73 65 28 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d  ase( pIn1->u.i==
178e0 31 34 30 37 33 37 34 38 38 33 35 35 33 32 38 4c  140737488355328L
178f0 4c 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63  L );.      testc
17900 61 73 65 28 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d  ase( pIn1->u.i==
17910 31 34 30 37 33 37 34 38 38 33 35 35 33 32 37 4c  140737488355327L
17920 4c 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63  L );.      testc
17930 61 73 65 28 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d  ase( pIn1->u.i==
17940 2d 31 34 30 37 33 37 34 38 38 33 35 35 33 32 38  -140737488355328
17950 4c 4c 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74  LL );.      test
17960 63 61 73 65 28 20 70 49 6e 31 2d 3e 75 2e 69 3d  case( pIn1->u.i=
17970 3d 2d 31 34 30 37 33 37 34 38 38 33 35 35 33 32  =-14073748835532
17980 39 4c 4c 20 29 3b 0a 20 20 20 20 20 20 69 66 28  9LL );.      if(
17990 20 70 49 6e 31 2d 3e 75 2e 69 3c 3d 31 34 30 37   pIn1->u.i<=1407
179a0 33 37 34 38 38 33 35 35 33 32 37 4c 4c 20 26 26  37488355327LL &&
179b0 20 70 49 6e 31 2d 3e 75 2e 69 3e 3d 2d 31 34 30   pIn1->u.i>=-140
179c0 37 33 37 34 38 38 33 35 35 33 32 38 4c 4c 20 29  737488355328LL )
179d0 7b 0a 20 20 20 20 20 20 20 20 70 49 6e 31 2d 3e  {.        pIn1->
179e0 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 49 6e 74  flags |= MEM_Int
179f0 52 65 61 6c 3b 0a 20 20 20 20 20 20 20 20 70 49  Real;.        pI
17a00 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45  n1->flags &= ~ME
17a10 4d 5f 49 6e 74 3b 0a 20 20 20 20 20 20 7d 65 6c  M_Int;.      }el
17a20 73 65 7b 0a 20 20 20 20 20 20 20 20 70 49 6e 31  se{.        pIn1
17a30 2d 3e 75 2e 72 20 3d 20 28 64 6f 75 62 6c 65 29  ->u.r = (double)
17a40 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20 20 20  pIn1->u.i;.     
17a50 20 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c     pIn1->flags |
17a60 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 20 20  = MEM_Real;.    
17a70 20 20 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20      pIn1->flags 
17a80 26 3d 20 7e 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20  &= ~MEM_Int;.   
17a90 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 52     }.    }.    R
17aa0 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 28 69  EGISTER_TRACE((i
17ab0 6e 74 29 28 70 49 6e 31 2d 61 4d 65 6d 29 2c 20  nt)(pIn1-aMem), 
17ac0 70 49 6e 31 29 3b 0a 20 20 20 20 7a 41 66 66 69  pIn1);.    zAffi
17ad0 6e 69 74 79 2b 2b 3b 0a 20 20 20 20 69 66 28 20  nity++;.    if( 
17ae0 7a 41 66 66 69 6e 69 74 79 5b 30 5d 3d 3d 30 20  zAffinity[0]==0 
17af0 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 70 49 6e  ) break;.    pIn
17b00 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  1++;.  }.  break
17b10 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
17b20 4d 61 6b 65 52 65 63 6f 72 64 20 50 31 20 50 32  MakeRecord P1 P2
17b30 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
17b40 70 73 69 73 3a 20 72 5b 50 33 5d 3d 6d 6b 72 65  psis: r[P3]=mkre
17b50 63 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a  c(r[P1@P2]).**.*
17b60 2a 20 43 6f 6e 76 65 72 74 20 50 32 20 72 65 67  * Convert P2 reg
17b70 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e 67  isters beginning
17b80 20 77 69 74 68 20 50 31 20 69 6e 74 6f 20 74 68   with P1 into th
17b90 65 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d 61 74  e [record format
17ba0 5d 0a 2a 2a 20 75 73 65 20 61 73 20 61 20 64 61  ].** use as a da
17bb0 74 61 20 72 65 63 6f 72 64 20 69 6e 20 61 20 64  ta record in a d
17bc0 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72  atabase table or
17bd0 20 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e 20   as a key.** in 
17be0 61 6e 20 69 6e 64 65 78 2e 20 20 54 68 65 20 4f  an index.  The O
17bf0 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20  P_Column opcode 
17c00 63 61 6e 20 64 65 63 6f 64 65 20 74 68 65 20 72  can decode the r
17c10 65 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a 0a  ecord later..**.
17c20 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20 73  ** P4 may be a s
17c30 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50 32  tring that is P2
17c40 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67   characters long
17c50 2e 20 20 54 68 65 20 4e 2d 74 68 20 63 68 61 72  .  The N-th char
17c60 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20  acter of the.** 
17c70 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73  string indicates
17c80 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69   the column affi
17c90 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64  nity that should
17ca0 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65   be used for the
17cb0 20 4e 2d 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f   N-th.** field o
17cc0 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e  f the index key.
17cd0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69  .**.** The mappi
17ce0 6e 67 20 66 72 6f 6d 20 63 68 61 72 61 63 74 65  ng from characte
17cf0 72 20 74 6f 20 61 66 66 69 6e 69 74 79 20 69 73  r to affinity is
17d00 20 67 69 76 65 6e 20 62 79 20 74 68 65 20 53 51   given by the SQ
17d10 4c 49 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63  LITE_AFF_.** mac
17d20 72 6f 73 20 64 65 66 69 6e 65 64 20 69 6e 20 73  ros defined in s
17d30 71 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a  qliteInt.h..**.*
17d40 2a 20 49 66 20 50 34 20 69 73 20 4e 55 4c 4c 20  * If P4 is NULL 
17d50 74 68 65 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66  then all index f
17d60 69 65 6c 64 73 20 68 61 76 65 20 74 68 65 20 61  ields have the a
17d70 66 66 69 6e 69 74 79 20 42 4c 4f 42 2e 0a 2a 2f  ffinity BLOB..*/
17d80 0a 63 61 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63  .case OP_MakeRec
17d90 6f 72 64 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 52  ord: {.  Mem *pR
17da0 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ec;             
17db0 2f 2a 20 54 68 65 20 6e 65 77 20 72 65 63 6f 72  /* The new recor
17dc0 64 20 2a 2f 0a 20 20 75 36 34 20 6e 44 61 74 61  d */.  u64 nData
17dd0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
17de0 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
17df0 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a   of data space *
17e00 2f 0a 20 20 69 6e 74 20 6e 48 64 72 3b 20 20 20  /.  int nHdr;   
17e10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
17e20 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
17e30 20 68 65 61 64 65 72 20 73 70 61 63 65 20 2a 2f   header space */
17e40 0a 20 20 69 36 34 20 6e 42 79 74 65 3b 20 20 20  .  i64 nByte;   
17e50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
17e60 61 20 73 70 61 63 65 20 72 65 71 75 69 72 65 64  a space required
17e70 20 66 6f 72 20 74 68 69 73 20 72 65 63 6f 72 64   for this record
17e80 20 2a 2f 0a 20 20 69 36 34 20 6e 5a 65 72 6f 3b   */.  i64 nZero;
17e90 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
17ea0 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62  Number of zero b
17eb0 79 74 65 73 20 61 74 20 74 68 65 20 65 6e 64 20  ytes at the end 
17ec0 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  of the record */
17ed0 0a 20 20 69 6e 74 20 6e 56 61 72 69 6e 74 3b 20  .  int nVarint; 
17ee0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
17ef0 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
17f00 61 20 76 61 72 69 6e 74 20 2a 2f 0a 20 20 75 33  a varint */.  u3
17f10 32 20 73 65 72 69 61 6c 5f 74 79 70 65 3b 20 20  2 serial_type;  
17f20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 66 69 65       /* Type fie
17f30 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 61  ld */.  Mem *pDa
17f40 74 61 30 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ta0;           /
17f50 2a 20 46 69 72 73 74 20 66 69 65 6c 64 20 74 6f  * First field to
17f60 20 62 65 20 63 6f 6d 62 69 6e 65 64 20 69 6e 74   be combined int
17f70 6f 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  o the record */.
17f80 20 20 4d 65 6d 20 2a 70 4c 61 73 74 3b 20 20 20    Mem *pLast;   
17f90 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74           /* Last
17fa0 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 72 65   field of the re
17fb0 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 46  cord */.  int nF
17fc0 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20  ield;           
17fd0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69   /* Number of fi
17fe0 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f  elds in the reco
17ff0 72 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41  rd */.  char *zA
18000 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20 2f  ffinity;       /
18010 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 73  * The affinity s
18020 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20 72 65  tring for the re
18030 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 66 69  cord */.  int fi
18040 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20  le_format;      
18050 20 2f 2a 20 46 69 6c 65 20 66 6f 72 6d 61 74 20   /* File format 
18060 74 6f 20 75 73 65 20 66 6f 72 20 65 6e 63 6f 64  to use for encod
18070 69 6e 67 20 2a 2f 0a 20 20 75 33 32 20 6c 65 6e  ing */.  u32 len
18080 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
18090 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 61 20 66  /* Length of a f
180a0 69 65 6c 64 20 2a 2f 0a 20 20 75 38 20 2a 7a 48  ield */.  u8 *zH
180b0 64 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  dr;             
180c0 20 2f 2a 20 57 68 65 72 65 20 74 6f 20 77 72 69   /* Where to wri
180d0 74 65 20 6e 65 78 74 20 62 79 74 65 20 6f 66 20  te next byte of 
180e0 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20  the header */.  
180f0 75 38 20 2a 7a 50 61 79 6c 6f 61 64 3b 20 20 20  u8 *zPayload;   
18100 20 20 20 20 20 20 20 2f 2a 20 57 68 65 72 65 20         /* Where 
18110 74 6f 20 77 72 69 74 65 20 6e 65 78 74 20 62 79  to write next by
18120 74 65 20 6f 66 20 74 68 65 20 70 61 79 6c 6f 61  te of the payloa
18130 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73 75 6d  d */..  /* Assum
18140 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20 63  ing the record c
18150 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c 64 73  ontains N fields
18160 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66 6f 72  , the record for
18170 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20 6c  mat looks.  ** l
18180 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a 20  ike this:.  **. 
18190 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   ** ------------
181a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
181b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
181c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
181d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a  ------------.  *
181e0 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20 74  * | hdr-size | t
181f0 79 70 65 20 30 20 7c 20 74 79 70 65 20 31 20 7c  ype 0 | type 1 |
18200 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31 20   ... | type N-1 
18210 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c 20  | data0 | ... | 
18220 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a 2a  data N-1 | .  **
18230 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   ---------------
18240 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
18250 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
18260 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
18270 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20  ---------.  **. 
18280 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73 20 74   ** Data(0) is t
18290 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74  aken from regist
182a0 65 72 20 50 31 2e 20 20 44 61 74 61 28 31 29 20  er P1.  Data(1) 
182b0 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67 69 73  comes from regis
182c0 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61 6e  ter P1+1.  ** an
182d0 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20 2a 2a  d so forth..  **
182e0 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70 65 20  .  ** Each type 
182f0 66 69 65 6c 64 20 69 73 20 61 20 76 61 72 69 6e  field is a varin
18300 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74  t representing t
18310 68 65 20 73 65 72 69 61 6c 20 74 79 70 65 20 6f  he serial type o
18320 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72 72  f the .  ** corr
18330 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61 20 65  esponding data e
18340 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71 6c 69  lement (see sqli
18350 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70  te3VdbeSerialTyp
18360 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20 68  e()). The.  ** h
18370 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20 69 73  dr-size field is
18380 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74 20 77   also a varint w
18390 68 69 63 68 20 69 73 20 74 68 65 20 6f 66 66 73  hich is the offs
183a0 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69  et from the begi
183b0 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74 68  nning.  ** of th
183c0 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61 74 61  e record to data
183d0 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74 61 20  0..  */.  nData 
183e0 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  = 0;         /* 
183f0 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
18400 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a 2f  of data space */
18410 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20 20 20 20  .  nHdr = 0;    
18420 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
18430 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64  of bytes of head
18440 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 5a  er space */.  nZ
18450 65 72 6f 20 3d 20 30 3b 20 20 20 20 20 20 20 20  ero = 0;        
18460 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65   /* Number of ze
18470 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65 20  ro bytes at the 
18480 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72  end of the recor
18490 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20  d */.  nField = 
184a0 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66 69  pOp->p1;.  zAffi
184b0 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  nity = pOp->p4.z
184c0 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69 65  ;.  assert( nFie
184d0 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3e  ld>0 && pOp->p2>
184e0 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46 69  0 && pOp->p2+nFi
184f0 65 6c 64 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  eld<=(p->nMem+1 
18500 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  - p->nCursor)+1 
18510 29 3b 0a 20 20 70 44 61 74 61 30 20 3d 20 26 61  );.  pData0 = &a
18520 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e  Mem[nField];.  n
18530 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b  Field = pOp->p2;
18540 0a 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61 74  .  pLast = &pDat
18550 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20  a0[nField-1];.  
18560 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d  file_format = p-
18570 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72  >minWriteFileFor
18580 6d 61 74 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e 74  mat;..  /* Ident
18590 69 66 79 20 74 68 65 20 6f 75 74 70 75 74 20 72  ify the output r
185a0 65 67 69 73 74 65 72 20 2a 2f 0a 20 20 61 73 73  egister */.  ass
185b0 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70  ert( pOp->p3<pOp
185c0 2d 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e  ->p1 || pOp->p3>
185d0 3d 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32  =pOp->p1+pOp->p2
185e0 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d   );.  pOut = &aM
185f0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d  em[pOp->p3];.  m
18600 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
18610 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20  p, pOut);..  /* 
18620 41 70 70 6c 79 20 74 68 65 20 72 65 71 75 65 73  Apply the reques
18630 74 65 64 20 61 66 66 69 6e 69 74 79 20 74 6f 20  ted affinity to 
18640 61 6c 6c 20 69 6e 70 75 74 73 0a 20 20 2a 2f 0a  all inputs.  */.
18650 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61 30    assert( pData0
18660 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 69 66 28  <=pLast );.  if(
18670 20 7a 41 66 66 69 6e 69 74 79 20 29 7b 0a 20 20   zAffinity ){.  
18680 20 20 70 52 65 63 20 3d 20 70 44 61 74 61 30 3b    pRec = pData0;
18690 0a 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 61  .    do{.      a
186a0 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 52 65  pplyAffinity(pRe
186b0 63 2c 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d 2c  c, zAffinity[0],
186c0 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
186d0 20 20 69 66 28 20 7a 41 66 66 69 6e 69 74 79 5b    if( zAffinity[
186e0 30 5d 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52  0]==SQLITE_AFF_R
186f0 45 41 4c 20 26 26 20 28 70 52 65 63 2d 3e 66 6c  EAL && (pRec->fl
18700 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 20 29  ags & MEM_Int) )
18710 7b 0a 20 20 20 20 20 20 20 20 70 52 65 63 2d 3e  {.        pRec->
18720 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 49 6e 74  flags |= MEM_Int
18730 52 65 61 6c 3b 0a 20 20 20 20 20 20 20 20 70 52  Real;.        pR
18740 65 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d  ec->flags &= ~(M
18750 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 20 20 7d  EM_Int);.      }
18760 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f  .      REGISTER_
18770 54 52 41 43 45 28 28 69 6e 74 29 28 70 52 65 63  TRACE((int)(pRec
18780 2d 61 4d 65 6d 29 2c 20 70 52 65 63 29 3b 0a 20  -aMem), pRec);. 
18790 20 20 20 20 20 7a 41 66 66 69 6e 69 74 79 2b 2b       zAffinity++
187a0 3b 0a 20 20 20 20 20 20 70 52 65 63 2b 2b 3b 0a  ;.      pRec++;.
187b0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 7a 41        assert( zA
187c0 66 66 69 6e 69 74 79 5b 30 5d 3d 3d 30 20 7c 7c  ffinity[0]==0 ||
187d0 20 70 52 65 63 3c 3d 70 4c 61 73 74 20 29 3b 0a   pRec<=pLast );.
187e0 20 20 20 20 7d 77 68 69 6c 65 28 20 7a 41 66 66      }while( zAff
187f0 69 6e 69 74 79 5b 30 5d 20 29 3b 0a 20 20 7d 0a  inity[0] );.  }.
18800 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
18810 4e 41 42 4c 45 5f 4e 55 4c 4c 5f 54 52 49 4d 0a  NABLE_NULL_TRIM.
18820 20 20 2f 2a 20 4e 55 4c 4c 73 20 63 61 6e 20 62    /* NULLs can b
18830 65 20 73 61 66 65 6c 79 20 74 72 69 6d 6d 65 64  e safely trimmed
18840 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 6f 66   from the end of
18850 20 74 68 65 20 72 65 63 6f 72 64 2c 20 61 73 20   the record, as 
18860 6c 6f 6e 67 20 61 73 0a 20 20 2a 2a 20 61 73 20  long as.  ** as 
18870 74 68 65 20 73 63 68 65 6d 61 20 66 6f 72 6d 61  the schema forma
18880 74 20 69 73 20 32 20 6f 72 20 6d 6f 72 65 20 61  t is 2 or more a
18890 6e 64 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 6f  nd none of the o
188a0 6d 69 74 74 65 64 20 63 6f 6c 75 6d 6e 73 0a 20  mitted columns. 
188b0 20 2a 2a 20 68 61 76 65 20 61 20 6e 6f 6e 2d 4e   ** have a non-N
188c0 55 4c 4c 20 64 65 66 61 75 6c 74 20 76 61 6c 75  ULL default valu
188d0 65 2e 20 20 41 6c 73 6f 2c 20 74 68 65 20 72 65  e.  Also, the re
188e0 63 6f 72 64 20 6d 75 73 74 20 62 65 20 6c 65 66  cord must be lef
188f0 74 20 77 69 74 68 0a 20 20 2a 2a 20 61 74 20 6c  t with.  ** at l
18900 65 61 73 74 20 6f 6e 65 20 66 69 65 6c 64 2e 20  east one field. 
18910 20 49 66 20 50 35 3e 30 20 74 68 65 6e 20 69 74   If P5>0 then it
18920 20 77 69 6c 6c 20 62 65 20 6f 6e 65 20 6d 6f 72   will be one mor
18930 65 20 74 68 61 6e 20 74 68 65 0a 20 20 2a 2a 20  e than the.  ** 
18940 69 6e 64 65 78 20 6f 66 20 74 68 65 20 72 69 67  index of the rig
18950 68 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20 77  ht-most column w
18960 69 74 68 20 61 20 6e 6f 6e 2d 4e 55 4c 4c 20 64  ith a non-NULL d
18970 65 66 61 75 6c 74 20 76 61 6c 75 65 20 2a 2f 0a  efault value */.
18980 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b    if( pOp->p5 ){
18990 0a 20 20 20 20 77 68 69 6c 65 28 20 28 70 4c 61  .    while( (pLa
189a0 73 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  st->flags & MEM_
189b0 4e 75 6c 6c 29 21 3d 30 20 26 26 20 6e 46 69 65  Null)!=0 && nFie
189c0 6c 64 3e 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20  ld>pOp->p5 ){.  
189d0 20 20 20 20 70 4c 61 73 74 2d 2d 3b 0a 20 20 20      pLast--;.   
189e0 20 20 20 6e 46 69 65 6c 64 2d 2d 3b 0a 20 20 20     nField--;.   
189f0 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20   }.  }.#endif.. 
18a00 20 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f 75 67 68   /* Loop through
18a10 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 74 68   the elements th
18a20 61 74 20 77 69 6c 6c 20 6d 61 6b 65 20 75 70 20  at will make up 
18a30 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 66 69  the record to fi
18a40 67 75 72 65 0a 20 20 2a 2a 20 6f 75 74 20 68 6f  gure.  ** out ho
18a50 77 20 6d 75 63 68 20 73 70 61 63 65 20 69 73 20  w much space is 
18a60 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 65  required for the
18a70 20 6e 65 77 20 72 65 63 6f 72 64 2e 20 20 41 66   new record.  Af
18a80 74 65 72 20 74 68 69 73 20 6c 6f 6f 70 2c 0a 20  ter this loop,. 
18a90 20 2a 2a 20 74 68 65 20 4d 65 6d 2e 75 54 65 6d   ** the Mem.uTem
18aa0 70 20 66 69 65 6c 64 20 6f 66 20 65 61 63 68 20  p field of each 
18ab0 74 65 72 6d 20 73 68 6f 75 6c 64 20 68 6f 6c 64  term should hold
18ac0 20 74 68 65 20 73 65 72 69 61 6c 2d 74 79 70 65   the serial-type
18ad0 20 74 68 61 74 20 77 69 6c 6c 0a 20 20 2a 2a 20   that will.  ** 
18ae0 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 61 74  be used for that
18af0 20 74 65 72 6d 20 69 6e 20 74 68 65 20 67 65 6e   term in the gen
18b00 65 72 61 74 65 64 20 72 65 63 6f 72 64 3a 0a 20  erated record:. 
18b10 20 2a 2a 0a 20 20 2a 2a 20 20 20 4d 65 6d 2e 75   **.  **   Mem.u
18b20 54 65 6d 70 20 76 61 6c 75 65 20 20 20 20 74 79  Temp value    ty
18b30 70 65 0a 20 20 2a 2a 20 20 20 2d 2d 2d 2d 2d 2d  pe.  **   ------
18b40 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 20 20 20 2d 2d 2d  ---------    ---
18b50 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a  ------------.  *
18b60 2a 20 20 20 20 20 20 30 20 20 20 20 20 20 20 20  *      0        
18b70 20 20 20 20 20 20 20 4e 55 4c 4c 0a 20 20 2a 2a         NULL.  **
18b80 20 20 20 20 20 20 31 20 20 20 20 20 20 20 20 20        1         
18b90 20 20 20 20 20 20 31 2d 62 79 74 65 20 73 69 67        1-byte sig
18ba0 6e 65 64 20 69 6e 74 65 67 65 72 0a 20 20 2a 2a  ned integer.  **
18bb0 20 20 20 20 20 20 32 20 20 20 20 20 20 20 20 20        2         
18bc0 20 20 20 20 20 20 32 2d 62 79 74 65 20 73 69 67        2-byte sig
18bd0 6e 65 64 20 69 6e 74 65 67 65 72 0a 20 20 2a 2a  ned integer.  **
18be0 20 20 20 20 20 20 33 20 20 20 20 20 20 20 20 20        3         
18bf0 20 20 20 20 20 20 33 2d 62 79 74 65 20 73 69 67        3-byte sig
18c00 6e 65 64 20 69 6e 74 65 67 65 72 0a 20 20 2a 2a  ned integer.  **
18c10 20 20 20 20 20 20 34 20 20 20 20 20 20 20 20 20        4         
18c20 20 20 20 20 20 20 34 2d 62 79 74 65 20 73 69 67        4-byte sig
18c30 6e 65 64 20 69 6e 74 65 67 65 72 0a 20 20 2a 2a  ned integer.  **
18c40 20 20 20 20 20 20 35 20 20 20 20 20 20 20 20 20        5         
18c50 20 20 20 20 20 20 36 2d 62 79 74 65 20 73 69 67        6-byte sig
18c60 6e 65 64 20 69 6e 74 65 67 65 72 0a 20 20 2a 2a  ned integer.  **
18c70 20 20 20 20 20 20 36 20 20 20 20 20 20 20 20 20        6         
18c80 20 20 20 20 20 20 38 2d 62 79 74 65 20 73 69 67        8-byte sig
18c90 6e 65 64 20 69 6e 74 65 67 65 72 0a 20 20 2a 2a  ned integer.  **
18ca0 20 20 20 20 20 20 37 20 20 20 20 20 20 20 20 20        7         
18cb0 20 20 20 20 20 20 49 45 45 45 20 66 6c 6f 61 74        IEEE float
18cc0 0a 20 20 2a 2a 20 20 20 20 20 20 38 20 20 20 20  .  **      8    
18cd0 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 65 67             Integ
18ce0 65 72 20 63 6f 6e 73 74 61 6e 74 20 30 0a 20 20  er constant 0.  
18cf0 2a 2a 20 20 20 20 20 20 39 20 20 20 20 20 20 20  **      9       
18d00 20 20 20 20 20 20 20 20 49 6e 74 65 67 65 72 20          Integer 
18d10 63 6f 6e 73 74 61 6e 74 20 31 0a 20 20 2a 2a 20  constant 1.  ** 
18d20 20 20 20 20 31 30 2c 31 31 20 20 20 20 20 20 20      10,11       
18d30 20 20 20 20 20 72 65 73 65 72 76 65 64 20 66 6f       reserved fo
18d40 72 20 65 78 70 61 6e 73 69 6f 6e 0a 20 20 2a 2a  r expansion.  **
18d50 20 20 20 20 4e 3e 3d 31 32 20 61 6e 64 20 65 76      N>=12 and ev
18d60 65 6e 20 20 20 20 42 4c 4f 42 0a 20 20 2a 2a 20  en    BLOB.  ** 
18d70 20 20 20 4e 3e 3d 31 33 20 61 6e 64 20 6f 64 64     N>=13 and odd
18d80 20 20 20 20 20 74 65 78 74 0a 20 20 2a 2a 0a 20       text.  **. 
18d90 20 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e   ** The followin
18da0 67 20 61 64 64 69 74 69 6f 6e 61 6c 20 76 61 6c  g additional val
18db0 75 65 73 20 61 72 65 20 63 6f 6d 70 75 74 65 64  ues are computed
18dc0 3a 0a 20 20 2a 2a 20 20 20 20 20 6e 48 64 72 20  :.  **     nHdr 
18dd0 20 20 20 20 20 20 20 4e 75 6d 62 65 72 20 6f 66         Number of
18de0 20 62 79 74 65 73 20 6e 65 65 64 65 64 20 66 6f   bytes needed fo
18df0 72 20 74 68 65 20 72 65 63 6f 72 64 20 68 65 61  r the record hea
18e00 64 65 72 0a 20 20 2a 2a 20 20 20 20 20 6e 44 61  der.  **     nDa
18e10 74 61 20 20 20 20 20 20 20 4e 75 6d 62 65 72 20  ta       Number 
18e20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61 74 61  of bytes of data
18e30 20 73 70 61 63 65 20 6e 65 65 64 65 64 20 66 6f   space needed fo
18e40 72 20 74 68 65 20 72 65 63 6f 72 64 0a 20 20 2a  r the record.  *
18e50 2a 20 20 20 20 20 6e 5a 65 72 6f 20 20 20 20 20  *     nZero     
18e60 20 20 5a 65 72 6f 20 62 79 74 65 73 20 61 74 20    Zero bytes at 
18e70 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72  the end of the r
18e80 65 63 6f 72 64 0a 20 20 2a 2f 0a 20 20 70 52 65  ecord.  */.  pRe
18e90 63 20 3d 20 70 4c 61 73 74 3b 0a 20 20 64 6f 7b  c = pLast;.  do{
18ea0 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
18eb0 49 73 56 61 6c 69 64 28 70 52 65 63 29 20 29 3b  IsValid(pRec) );
18ec0 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66  .    if( pRec->f
18ed0 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
18ee0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 52 65  ){.      if( pRe
18ef0 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a  c->flags & MEM_Z
18f00 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  ero ){.        /
18f10 2a 20 56 61 6c 75 65 73 20 77 69 74 68 20 4d 45  * Values with ME
18f20 4d 5f 4e 75 6c 6c 20 61 6e 64 20 4d 45 4d 5f 5a  M_Null and MEM_Z
18f30 65 72 6f 20 61 72 65 20 63 72 65 61 74 65 64 20  ero are created 
18f40 62 79 20 78 43 6f 6c 75 6d 6e 20 76 69 72 74 75  by xColumn virtu
18f50 61 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 61  al.        ** ta
18f60 62 6c 65 20 6d 65 74 68 6f 64 73 20 74 68 61 74  ble methods that
18f70 20 6e 65 76 65 72 20 69 6e 76 6f 6b 65 20 73 71   never invoke sq
18f80 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 78 78 78  lite3_result_xxx
18f90 78 78 28 29 20 77 68 69 6c 65 0a 20 20 20 20 20  xx() while.     
18fa0 20 20 20 2a 2a 20 63 6f 6d 70 75 74 69 6e 67 20     ** computing 
18fb0 61 6e 20 75 6e 63 68 61 6e 67 69 6e 67 20 63 6f  an unchanging co
18fc0 6c 75 6d 6e 20 76 61 6c 75 65 20 69 6e 20 61 6e  lumn value in an
18fd0 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
18fe0 74 2e 0a 20 20 20 20 20 20 20 20 2a 2a 20 47 69  t..        ** Gi
18ff0 76 65 20 73 75 63 68 20 76 61 6c 75 65 73 20 61  ve such values a
19000 20 73 70 65 63 69 61 6c 20 69 6e 74 65 72 6e 61   special interna
19010 6c 2d 75 73 65 2d 6f 6e 6c 79 20 73 65 72 69 61  l-use-only seria
19020 6c 2d 74 79 70 65 20 6f 66 20 31 30 0a 20 20 20  l-type of 10.   
19030 20 20 20 20 20 2a 2a 20 73 6f 20 74 68 61 74 20       ** so that 
19040 74 68 65 79 20 63 61 6e 20 62 65 20 70 61 73 73  they can be pass
19050 65 64 20 74 68 72 6f 75 67 68 20 74 6f 20 78 55  ed through to xU
19060 70 64 61 74 65 20 61 6e 64 20 68 61 76 65 0a 20  pdate and have. 
19070 20 20 20 20 20 20 20 2a 2a 20 61 20 74 72 75 65         ** a true
19080 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 6e   sqlite3_value_n
19090 6f 63 68 61 6e 67 65 28 29 2e 20 2a 2f 0a 20 20  ochange(). */.  
190a0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
190b0 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f 4e 4f  p->p5==OPFLAG_NO
190c0 43 48 4e 47 5f 4d 41 47 49 43 20 7c 7c 20 43 4f  CHNG_MAGIC || CO
190d0 52 52 55 50 54 5f 44 42 20 29 3b 0a 20 20 20 20  RRUPT_DB );.    
190e0 20 20 20 20 70 52 65 63 2d 3e 75 54 65 6d 70 20      pRec->uTemp 
190f0 3d 20 31 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73  = 10;.      }els
19100 65 7b 0a 20 20 20 20 20 20 20 20 70 52 65 63 2d  e{.        pRec-
19110 3e 75 54 65 6d 70 20 3d 20 30 3b 0a 20 20 20 20  >uTemp = 0;.    
19120 20 20 7d 0a 20 20 20 20 20 20 6e 48 64 72 2b 2b    }.      nHdr++
19130 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
19140 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pRec->flags & (M
19150 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 49 6e 74 52 65  EM_Int|MEM_IntRe
19160 61 6c 29 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  al) ){.      /* 
19170 46 69 67 75 72 65 20 6f 75 74 20 77 68 65 74 68  Figure out wheth
19180 65 72 20 74 6f 20 75 73 65 20 31 2c 20 32 2c 20  er to use 1, 2, 
19190 34 2c 20 36 20 6f 72 20 38 20 62 79 74 65 73 2e  4, 6 or 8 bytes.
191a0 20 2a 2f 0a 20 20 20 20 20 20 69 36 34 20 69 20   */.      i64 i 
191b0 3d 20 70 52 65 63 2d 3e 75 2e 69 3b 0a 20 20 20  = pRec->u.i;.   
191c0 20 20 20 75 36 34 20 75 75 3b 0a 20 20 20 20 20     u64 uu;.     
191d0 20 74 65 73 74 63 61 73 65 28 20 70 52 65 63 2d   testcase( pRec-
191e0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
191f0 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61   );.      testca
19200 73 65 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20  se( pRec->flags 
19210 26 20 4d 45 4d 5f 49 6e 74 52 65 61 6c 20 29 3b  & MEM_IntReal );
19220 0a 20 20 20 20 20 20 69 66 28 20 69 3c 30 20 29  .      if( i<0 )
19230 7b 0a 20 20 20 20 20 20 20 20 75 75 20 3d 20 7e  {.        uu = ~
19240 69 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  i;.      }else{.
19250 20 20 20 20 20 20 20 20 75 75 20 3d 20 69 3b 0a          uu = i;.
19260 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6e 48        }.      nH
19270 64 72 2b 2b 3b 0a 20 20 20 20 20 20 74 65 73 74  dr++;.      test
19280 63 61 73 65 28 20 75 75 3d 3d 31 32 37 20 29 3b  case( uu==127 );
19290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
192a0 65 73 74 63 61 73 65 28 20 75 75 3d 3d 31 32 38  estcase( uu==128
192b0 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61   );.      testca
192c0 73 65 28 20 75 75 3d 3d 33 32 37 36 37 20 29 3b  se( uu==32767 );
192d0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73               tes
192e0 74 63 61 73 65 28 20 75 75 3d 3d 33 32 37 36 38  tcase( uu==32768
192f0 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61   );.      testca
19300 73 65 28 20 75 75 3d 3d 38 33 38 38 36 30 37 20  se( uu==8388607 
19310 29 3b 20 20 20 20 20 20 20 20 20 20 20 74 65 73  );           tes
19320 74 63 61 73 65 28 20 75 75 3d 3d 38 33 38 38 36  tcase( uu==83886
19330 30 38 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74  08 );.      test
19340 63 61 73 65 28 20 75 75 3d 3d 32 31 34 37 34 38  case( uu==214748
19350 33 36 34 37 20 29 3b 20 20 20 20 20 20 20 20 74  3647 );        t
19360 65 73 74 63 61 73 65 28 20 75 75 3d 3d 32 31 34  estcase( uu==214
19370 37 34 38 33 36 34 38 20 29 3b 0a 20 20 20 20 20  7483648 );.     
19380 20 74 65 73 74 63 61 73 65 28 20 75 75 3d 3d 31   testcase( uu==1
19390 34 30 37 33 37 34 38 38 33 35 35 33 32 37 4c 4c  40737488355327LL
193a0 20 29 3b 20 74 65 73 74 63 61 73 65 28 20 75 75   ); testcase( uu
193b0 3d 3d 31 34 30 37 33 37 34 38 38 33 35 35 33 32  ==14073748835532
193c0 38 4c 4c 20 29 3b 0a 20 20 20 20 20 20 69 66 28  8LL );.      if(
193d0 20 75 75 3c 3d 31 32 37 20 29 7b 0a 20 20 20 20   uu<=127 ){.    
193e0 20 20 20 20 69 66 28 20 28 69 26 31 29 3d 3d 69      if( (i&1)==i
193f0 20 26 26 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3e   && file_format>
19400 3d 34 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =4 ){.          
19410 70 52 65 63 2d 3e 75 54 65 6d 70 20 3d 20 38 2b  pRec->uTemp = 8+
19420 28 75 33 32 29 75 75 3b 0a 20 20 20 20 20 20 20  (u32)uu;.       
19430 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
19440 20 20 6e 44 61 74 61 2b 2b 3b 0a 20 20 20 20 20    nData++;.     
19450 20 20 20 20 20 70 52 65 63 2d 3e 75 54 65 6d 70       pRec->uTemp
19460 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 0a   = 1;.        }.
19470 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
19480 75 75 3c 3d 33 32 37 36 37 20 29 7b 0a 20 20 20  uu<=32767 ){.   
19490 20 20 20 20 20 6e 44 61 74 61 20 2b 3d 20 32 3b       nData += 2;
194a0 0a 20 20 20 20 20 20 20 20 70 52 65 63 2d 3e 75  .        pRec->u
194b0 54 65 6d 70 20 3d 20 32 3b 0a 20 20 20 20 20 20  Temp = 2;.      
194c0 7d 65 6c 73 65 20 69 66 28 20 75 75 3c 3d 38 33  }else if( uu<=83
194d0 38 38 36 30 37 20 29 7b 0a 20 20 20 20 20 20 20  88607 ){.       
194e0 20 6e 44 61 74 61 20 2b 3d 20 33 3b 0a 20 20 20   nData += 3;.   
194f0 20 20 20 20 20 70 52 65 63 2d 3e 75 54 65 6d 70       pRec->uTemp
19500 20 3d 20 33 3b 0a 20 20 20 20 20 20 7d 65 6c 73   = 3;.      }els
19510 65 20 69 66 28 20 75 75 3c 3d 32 31 34 37 34 38  e if( uu<=214748
19520 33 36 34 37 20 29 7b 0a 20 20 20 20 20 20 20 20  3647 ){.        
19530 6e 44 61 74 61 20 2b 3d 20 34 3b 0a 20 20 20 20  nData += 4;.    
19540 20 20 20 20 70 52 65 63 2d 3e 75 54 65 6d 70 20      pRec->uTemp 
19550 3d 20 34 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  = 4;.      }else
19560 20 69 66 28 20 75 75 3c 3d 31 34 30 37 33 37 34   if( uu<=1407374
19570 38 38 33 35 35 33 32 37 4c 4c 20 29 7b 0a 20 20  88355327LL ){.  
19580 20 20 20 20 20 20 6e 44 61 74 61 20 2b 3d 20 36        nData += 6
19590 3b 0a 20 20 20 20 20 20 20 20 70 52 65 63 2d 3e  ;.        pRec->
195a0 75 54 65 6d 70 20 3d 20 35 3b 0a 20 20 20 20 20  uTemp = 5;.     
195b0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
195c0 6e 44 61 74 61 20 2b 3d 20 38 3b 0a 20 20 20 20  nData += 8;.    
195d0 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c      if( pRec->fl
195e0 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 52 65 61  ags & MEM_IntRea
195f0 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f  l ){.          /
19600 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  * If the value i
19610 73 20 49 6e 74 52 65 61 6c 20 61 6e 64 20 69 73  s IntReal and is
19620 20 67 6f 69 6e 67 20 74 6f 20 74 61 6b 65 20 75   going to take u
19630 70 20 38 20 62 79 74 65 73 20 74 6f 20 73 74 6f  p 8 bytes to sto
19640 72 65 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20  re.          ** 
19650 61 73 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 74  as an integer, t
19660 68 65 6e 20 77 65 20 6d 69 67 68 74 20 61 73 20  hen we might as 
19670 77 65 6c 6c 20 6d 61 6b 65 20 69 74 20 61 6e 20  well make it an 
19680 38 2d 62 79 74 65 20 66 6c 6f 61 74 69 6e 67 0a  8-byte floating.
19690 20 20 20 20 20 20 20 20 20 20 2a 2a 20 70 6f 69            ** poi
196a0 6e 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20  nt value */.    
196b0 20 20 20 20 20 20 70 52 65 63 2d 3e 75 2e 72 20        pRec->u.r 
196c0 3d 20 28 64 6f 75 62 6c 65 29 70 52 65 63 2d 3e  = (double)pRec->
196d0 75 2e 69 3b 0a 20 20 20 20 20 20 20 20 20 20 70  u.i;.          p
196e0 52 65 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d  Rec->flags &= ~M
196f0 45 4d 5f 49 6e 74 52 65 61 6c 3b 0a 20 20 20 20  EM_IntReal;.    
19700 20 20 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67        pRec->flag
19710 73 20 7c 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20  s |= MEM_Real;. 
19720 20 20 20 20 20 20 20 20 20 70 52 65 63 2d 3e 75           pRec->u
19730 54 65 6d 70 20 3d 20 37 3b 0a 20 20 20 20 20 20  Temp = 7;.      
19740 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
19750 20 20 20 70 52 65 63 2d 3e 75 54 65 6d 70 20 3d     pRec->uTemp =
19760 20 36 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20   6;.        }.  
19770 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 20      }.    }else 
19780 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20  if( pRec->flags 
19790 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20  & MEM_Real ){.  
197a0 20 20 20 20 6e 48 64 72 2b 2b 3b 0a 20 20 20 20      nHdr++;.    
197b0 20 20 6e 44 61 74 61 20 2b 3d 20 38 3b 0a 20 20    nData += 8;.  
197c0 20 20 20 20 70 52 65 63 2d 3e 75 54 65 6d 70 20      pRec->uTemp 
197d0 3d 20 37 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  = 7;.    }else{.
197e0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62        assert( db
197f0 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 7c  ->mallocFailed |
19800 7c 20 70 52 65 63 2d 3e 66 6c 61 67 73 26 28 4d  | pRec->flags&(M
19810 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
19820 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
19830 28 20 70 52 65 63 2d 3e 6e 3e 3d 30 20 29 3b 0a  ( pRec->n>=0 );.
19840 20 20 20 20 20 20 6c 65 6e 20 3d 20 28 75 33 32        len = (u32
19850 29 70 52 65 63 2d 3e 6e 3b 0a 20 20 20 20 20 20  )pRec->n;.      
19860 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 28 6c  serial_type = (l
19870 65 6e 2a 32 29 20 2b 20 31 32 20 2b 20 28 28 70  en*2) + 12 + ((p
19880 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Rec->flags & MEM
19890 5f 53 74 72 29 21 3d 30 29 3b 0a 20 20 20 20 20  _Str)!=0);.     
198a0 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73   if( pRec->flags
198b0 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20   & MEM_Zero ){. 
198c0 20 20 20 20 20 20 20 73 65 72 69 61 6c 5f 74 79         serial_ty
198d0 70 65 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a  pe += pRec->u.nZ
198e0 65 72 6f 2a 32 3b 0a 20 20 20 20 20 20 20 20 69  ero*2;.        i
198f0 66 28 20 6e 44 61 74 61 20 29 7b 0a 20 20 20 20  f( nData ){.    
19900 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
19910 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c  3VdbeMemExpandBl
19920 6f 62 28 70 52 65 63 29 20 29 20 67 6f 74 6f 20  ob(pRec) ) goto 
19930 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 20 20  no_mem;.        
19940 20 20 6c 65 6e 20 2b 3d 20 70 52 65 63 2d 3e 75    len += pRec->u
19950 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 20 20 20 20  .nZero;.        
19960 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
19970 20 6e 5a 65 72 6f 20 2b 3d 20 70 52 65 63 2d 3e   nZero += pRec->
19980 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 20 20 20  u.nZero;.       
19990 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20   }.      }.     
199a0 20 6e 44 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20   nData += len;. 
199b0 20 20 20 20 20 6e 48 64 72 20 2b 3d 20 73 71 6c       nHdr += sql
199c0 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 73 65  ite3VarintLen(se
199d0 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20  rial_type);.    
199e0 20 20 70 52 65 63 2d 3e 75 54 65 6d 70 20 3d 20    pRec->uTemp = 
199f0 73 65 72 69 61 6c 5f 74 79 70 65 3b 0a 20 20 20  serial_type;.   
19a00 20 7d 0a 20 20 20 20 69 66 28 20 70 52 65 63 3d   }.    if( pRec=
19a10 3d 70 44 61 74 61 30 20 29 20 62 72 65 61 6b 3b  =pData0 ) break;
19a20 0a 20 20 20 20 70 52 65 63 2d 2d 3b 0a 20 20 7d  .    pRec--;.  }
19a30 77 68 69 6c 65 28 31 29 3b 0a 0a 20 20 2f 2a 20  while(1);..  /* 
19a40 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32  EVIDENCE-OF: R-2
19a50 32 35 36 34 2d 31 31 36 34 37 20 54 68 65 20 68  2564-11647 The h
19a60 65 61 64 65 72 20 62 65 67 69 6e 73 20 77 69 74  eader begins wit
19a70 68 20 61 20 73 69 6e 67 6c 65 20 76 61 72 69 6e  h a single varin
19a80 74 0a 20 20 2a 2a 20 77 68 69 63 68 20 64 65 74  t.  ** which det
19a90 65 72 6d 69 6e 65 73 20 74 68 65 20 74 6f 74 61  ermines the tota
19aa0 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  l number of byte
19ab0 73 20 69 6e 20 74 68 65 20 68 65 61 64 65 72 2e  s in the header.
19ac0 20 54 68 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a   The varint.  **
19ad0 20 76 61 6c 75 65 20 69 73 20 74 68 65 20 73 69   value is the si
19ae0 7a 65 20 6f 66 20 74 68 65 20 68 65 61 64 65 72  ze of the header
19af0 20 69 6e 20 62 79 74 65 73 20 69 6e 63 6c 75 64   in bytes includ
19b00 69 6e 67 20 74 68 65 20 73 69 7a 65 20 76 61 72  ing the size var
19b10 69 6e 74 0a 20 20 2a 2a 20 69 74 73 65 6c 66 2e  int.  ** itself.
19b20 20 2a 2f 0a 20 20 74 65 73 74 63 61 73 65 28 20   */.  testcase( 
19b30 6e 48 64 72 3d 3d 31 32 36 20 29 3b 0a 20 20 74  nHdr==126 );.  t
19b40 65 73 74 63 61 73 65 28 20 6e 48 64 72 3d 3d 31  estcase( nHdr==1
19b50 32 37 20 29 3b 0a 20 20 69 66 28 20 6e 48 64 72  27 );.  if( nHdr
19b60 3c 3d 31 32 36 20 29 7b 0a 20 20 20 20 2f 2a 20  <=126 ){.    /* 
19b70 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20  The common case 
19b80 2a 2f 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 31  */.    nHdr += 1
19b90 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  ;.  }else{.    /
19ba0 2a 20 52 61 72 65 20 63 61 73 65 20 6f 66 20 61  * Rare case of a
19bb0 20 72 65 61 6c 6c 79 20 6c 61 72 67 65 20 68 65   really large he
19bc0 61 64 65 72 20 2a 2f 0a 20 20 20 20 6e 56 61 72  ader */.    nVar
19bd0 69 6e 74 20 3d 20 73 71 6c 69 74 65 33 56 61 72  int = sqlite3Var
19be0 69 6e 74 4c 65 6e 28 6e 48 64 72 29 3b 0a 20 20  intLen(nHdr);.  
19bf0 20 20 6e 48 64 72 20 2b 3d 20 6e 56 61 72 69 6e    nHdr += nVarin
19c00 74 3b 0a 20 20 20 20 69 66 28 20 6e 56 61 72 69  t;.    if( nVari
19c10 6e 74 3c 73 71 6c 69 74 65 33 56 61 72 69 6e 74  nt<sqlite3Varint
19c20 4c 65 6e 28 6e 48 64 72 29 20 29 20 6e 48 64 72  Len(nHdr) ) nHdr
19c30 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79 74 65 20  ++;.  }.  nByte 
19c40 3d 20 6e 48 64 72 2b 6e 44 61 74 61 3b 0a 0a 20  = nHdr+nData;.. 
19c50 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68   /* Make sure th
19c60 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65  e output registe
19c70 72 20 68 61 73 20 61 20 62 75 66 66 65 72 20 6c  r has a buffer l
19c80 61 72 67 65 20 65 6e 6f 75 67 68 20 74 6f 20 73  arge enough to s
19c90 74 6f 72 65 20 0a 20 20 2a 2a 20 74 68 65 20 6e  tore .  ** the n
19ca0 65 77 20 72 65 63 6f 72 64 2e 20 54 68 65 20 6f  ew record. The o
19cb0 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20 28  utput register (
19cc0 70 4f 70 2d 3e 70 33 29 20 69 73 20 6e 6f 74 20  pOp->p3) is not 
19cd0 61 6c 6c 6f 77 65 64 20 74 6f 0a 20 20 2a 2a 20  allowed to.  ** 
19ce0 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e  be one of the in
19cf0 70 75 74 20 72 65 67 69 73 74 65 72 73 20 28 62  put registers (b
19d00 65 63 61 75 73 65 20 74 68 65 20 66 6f 6c 6c 6f  ecause the follo
19d10 77 69 6e 67 20 63 61 6c 6c 20 74 6f 0a 20 20 2a  wing call to.  *
19d20 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  * sqlite3VdbeMem
19d30 43 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28 29  ClearAndResize()
19d40 20 63 6f 75 6c 64 20 63 6c 6f 62 62 65 72 20 74   could clobber t
19d50 68 65 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20  he value before 
19d60 69 74 20 69 73 20 75 73 65 64 29 2e 0a 20 20 2a  it is used)..  *
19d70 2f 0a 20 20 69 66 28 20 6e 42 79 74 65 2b 6e 5a  /.  if( nByte+nZ
19d80 65 72 6f 3c 3d 70 4f 75 74 2d 3e 73 7a 4d 61 6c  ero<=pOut->szMal
19d90 6c 6f 63 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  loc ){.    /* Th
19da0 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65  e output registe
19db0 72 20 69 73 20 61 6c 72 65 61 64 79 20 6c 61 72  r is already lar
19dc0 67 65 20 65 6e 6f 75 67 68 20 74 6f 20 68 6f 6c  ge enough to hol
19dd0 64 20 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20  d the record..  
19de0 20 20 2a 2a 20 4e 6f 20 65 72 72 6f 72 20 63 68    ** No error ch
19df0 65 63 6b 73 20 6f 72 20 62 75 66 66 65 72 20 65  ecks or buffer e
19e00 6e 6c 61 72 67 65 6d 65 6e 74 20 69 73 20 72 65  nlargement is re
19e10 71 75 69 72 65 64 20 2a 2f 0a 20 20 20 20 70 4f  quired */.    pO
19e20 75 74 2d 3e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 4d  ut->z = pOut->zM
19e30 61 6c 6c 6f 63 3b 0a 20 20 7d 65 6c 73 65 7b 0a  alloc;.  }else{.
19e40 20 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f 20 6d      /* Need to m
19e50 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
19e60 65 20 6f 75 74 70 75 74 20 69 73 20 6e 6f 74 20  e output is not 
19e70 74 6f 6f 20 62 69 67 20 61 6e 64 20 74 68 65 6e  too big and then
19e80 20 65 6e 6c 61 72 67 65 0a 20 20 20 20 2a 2a 20   enlarge.    ** 
19e90 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73  the output regis
19ea0 74 65 72 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  ter to hold the 
19eb0 66 75 6c 6c 20 72 65 73 75 6c 74 20 2a 2f 0a 20  full result */. 
19ec0 20 20 20 69 66 28 20 6e 42 79 74 65 2b 6e 5a 65     if( nByte+nZe
19ed0 72 6f 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  ro>db->aLimit[SQ
19ee0 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
19ef0 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  H] ){.      goto
19f00 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a   too_big;.    }.
19f10 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56      if( sqlite3V
19f20 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65  dbeMemClearAndRe
19f30 73 69 7a 65 28 70 4f 75 74 2c 20 28 69 6e 74 29  size(pOut, (int)
19f40 6e 42 79 74 65 29 20 29 7b 0a 20 20 20 20 20 20  nByte) ){.      
19f50 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
19f60 20 7d 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e   }.  }.  pOut->n
19f70 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20   = (int)nByte;. 
19f80 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
19f90 45 4d 5f 42 6c 6f 62 3b 0a 20 20 69 66 28 20 6e  EM_Blob;.  if( n
19fa0 5a 65 72 6f 20 29 7b 0a 20 20 20 20 70 4f 75 74  Zero ){.    pOut
19fb0 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e 5a 65 72  ->u.nZero = nZer
19fc0 6f 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  o;.    pOut->fla
19fd0 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72 6f 3b 0a  gs |= MEM_Zero;.
19fe0 20 20 7d 0a 20 20 55 50 44 41 54 45 5f 4d 41 58    }.  UPDATE_MAX
19ff0 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
1a000 0a 20 20 7a 48 64 72 20 3d 20 28 75 38 20 2a 29  .  zHdr = (u8 *)
1a010 70 4f 75 74 2d 3e 7a 3b 0a 20 20 7a 50 61 79 6c  pOut->z;.  zPayl
1a020 6f 61 64 20 3d 20 7a 48 64 72 20 2b 20 6e 48 64  oad = zHdr + nHd
1a030 72 3b 0a 0a 20 20 2f 2a 20 57 72 69 74 65 20 74  r;..  /* Write t
1a040 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 7a  he record */.  z
1a050 48 64 72 20 2b 3d 20 70 75 74 56 61 72 69 6e 74  Hdr += putVarint
1a060 33 32 28 7a 48 64 72 2c 20 6e 48 64 72 29 3b 0a  32(zHdr, nHdr);.
1a070 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61 30    assert( pData0
1a080 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 70 52 65  <=pLast );.  pRe
1a090 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20 64 6f  c = pData0;.  do
1a0a0 7b 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70  {.    serial_typ
1a0b0 65 20 3d 20 70 52 65 63 2d 3e 75 54 65 6d 70 3b  e = pRec->uTemp;
1a0c0 0a 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43 45  .    /* EVIDENCE
1a0d0 2d 4f 46 3a 20 52 2d 30 36 35 32 39 2d 34 37 33  -OF: R-06529-473
1a0e0 36 32 20 46 6f 6c 6c 6f 77 69 6e 67 20 74 68 65  62 Following the
1a0f0 20 73 69 7a 65 20 76 61 72 69 6e 74 20 61 72 65   size varint are
1a100 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 0a 20 20 20   one or more.   
1a110 20 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 76   ** additional v
1a120 61 72 69 6e 74 73 2c 20 6f 6e 65 20 70 65 72 20  arints, one per 
1a130 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 20 20 7a  column. */.    z
1a140 48 64 72 20 2b 3d 20 70 75 74 56 61 72 69 6e 74  Hdr += putVarint
1a150 33 32 28 7a 48 64 72 2c 20 73 65 72 69 61 6c 5f  32(zHdr, serial_
1a160 74 79 70 65 29 3b 20 20 20 20 20 20 20 20 20 20  type);          
1a170 20 20 2f 2a 20 73 65 72 69 61 6c 20 74 79 70 65    /* serial type
1a180 20 2a 2f 0a 20 20 20 20 2f 2a 20 45 56 49 44 45   */.    /* EVIDE
1a190 4e 43 45 2d 4f 46 3a 20 52 2d 36 34 35 33 36 2d  NCE-OF: R-64536-
1a1a0 35 31 37 32 38 20 54 68 65 20 76 61 6c 75 65 73  51728 The values
1a1b0 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
1a1c0 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 0a 20   in the record. 
1a1d0 20 20 20 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c     ** immediatel
1a1e0 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20 68 65 61  y follow the hea
1a1f0 64 65 72 2e 20 2a 2f 0a 20 20 20 20 7a 50 61 79  der. */.    zPay
1a200 6c 6f 61 64 20 2b 3d 20 73 71 6c 69 74 65 33 56  load += sqlite3V
1a210 64 62 65 53 65 72 69 61 6c 50 75 74 28 7a 50 61  dbeSerialPut(zPa
1a220 79 6c 6f 61 64 2c 20 70 52 65 63 2c 20 73 65 72  yload, pRec, ser
1a230 69 61 6c 5f 74 79 70 65 29 3b 20 2f 2a 20 63 6f  ial_type); /* co
1a240 6e 74 65 6e 74 20 2a 2f 0a 20 20 7d 77 68 69 6c  ntent */.  }whil
1a250 65 28 20 28 2b 2b 70 52 65 63 29 3c 3d 70 4c 61  e( (++pRec)<=pLa
1a260 73 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  st );.  assert( 
1a270 6e 48 64 72 3d 3d 28 69 6e 74 29 28 7a 48 64 72  nHdr==(int)(zHdr
1a280 20 2d 20 28 75 38 2a 29 70 4f 75 74 2d 3e 7a 29   - (u8*)pOut->z)
1a290 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 42   );.  assert( nB
1a2a0 79 74 65 3d 3d 28 69 6e 74 29 28 7a 50 61 79 6c  yte==(int)(zPayl
1a2b0 6f 61 64 20 2d 20 28 75 38 2a 29 70 4f 75 74 2d  oad - (u8*)pOut-
1a2c0 3e 7a 29 20 29 3b 0a 0a 20 20 61 73 73 65 72 74  >z) );..  assert
1a2d0 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
1a2e0 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
1a2f0 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
1a300 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54   );.  REGISTER_T
1a310 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f  RACE(pOp->p3, pO
1a320 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
1a330 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 75 6e  ./* Opcode: Coun
1a340 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
1a350 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
1a360 3d 63 6f 75 6e 74 28 29 0a 2a 2a 0a 2a 2a 20 53  =count().**.** S
1a370 74 6f 72 65 20 74 68 65 20 6e 75 6d 62 65 72 20  tore the number 
1a380 6f 66 20 65 6e 74 72 69 65 73 20 28 61 6e 20 69  of entries (an i
1a390 6e 74 65 67 65 72 20 76 61 6c 75 65 29 20 69 6e  nteger value) in
1a3a0 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
1a3b0 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65 64 20 62  dex .** opened b
1a3c0 79 20 63 75 72 73 6f 72 20 50 31 20 69 6e 20 72  y cursor P1 in r
1a3d0 65 67 69 73 74 65 72 20 50 32 0a 2a 2f 0a 23 69  egister P2.*/.#i
1a3e0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1a3f0 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a 63 61 73  T_BTREECOUNT.cas
1a400 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20 20 20  e OP_Count: {   
1a410 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
1a420 0a 20 20 69 36 34 20 6e 45 6e 74 72 79 3b 0a 20  .  i64 nEntry;. 
1a430 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
1a440 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  ;..  assert( p->
1a450 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e  apCsr[pOp->p1]->
1a460 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
1a470 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43 72  E_BTREE );.  pCr
1a480 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  sr = p->apCsr[pO
1a490 70 2d 3e 70 31 5d 2d 3e 75 63 2e 70 43 75 72 73  p->p1]->uc.pCurs
1a4a0 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  or;.  assert( pC
1a4b0 72 73 72 20 29 3b 0a 20 20 6e 45 6e 74 72 79 20  rsr );.  nEntry 
1a4c0 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65  = 0;  /* Not nee
1a4d0 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20  ded.  Only used 
1a4e0 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72  to silence a war
1a4f0 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20 3d 20  ning. */.  rc = 
1a500 73 71 6c 69 74 65 33 42 74 72 65 65 43 6f 75 6e  sqlite3BtreeCoun
1a510 74 28 70 43 72 73 72 2c 20 26 6e 45 6e 74 72 79  t(pCrsr, &nEntry
1a520 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
1a530 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1a540 65 72 72 6f 72 3b 0a 20 20 70 4f 75 74 20 3d 20  error;.  pOut = 
1a550 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
1a560 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e  , pOp);.  pOut->
1a570 75 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20  u.i = nEntry;.  
1a580 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
1a590 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76 65  ./* Opcode: Save
1a5a0 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50 34 20  point P1 * * P4 
1a5b0 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65  *.**.** Open, re
1a5c0 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63  lease or rollbac
1a5d0 6b 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20  k the savepoint 
1a5e0 6e 61 6d 65 64 20 62 79 20 70 61 72 61 6d 65 74  named by paramet
1a5f0 65 72 20 50 34 2c 20 64 65 70 65 6e 64 69 6e 67  er P4, depending
1a600 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75 65  .** on the value
1a610 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20   of P1. To open 
1a620 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20  a new savepoint 
1a630 73 65 74 20 50 31 3d 3d 30 20 28 53 41 56 45 50  set P1==0 (SAVEP
1a640 4f 49 4e 54 5f 42 45 47 49 4e 29 2e 0a 2a 2a 20  OINT_BEGIN)..** 
1a650 54 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d  To release (comm
1a660 69 74 29 20 61 6e 20 65 78 69 73 74 69 6e 67 20  it) an existing 
1a670 73 61 76 65 70 6f 69 6e 74 20 73 65 74 20 50 31  savepoint set P1
1a680 3d 3d 31 20 28 53 41 56 45 50 4f 49 4e 54 5f 52  ==1 (SAVEPOINT_R
1a690 45 4c 45 41 53 45 29 2e 0a 2a 2a 20 54 6f 20 72  ELEASE)..** To r
1a6a0 6f 6c 6c 62 61 63 6b 20 61 6e 20 65 78 69 73 74  ollback an exist
1a6b0 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 20 73 65  ing savepoint se
1a6c0 74 20 50 31 3d 3d 32 20 28 53 41 56 45 50 4f 49  t P1==2 (SAVEPOI
1a6d0 4e 54 5f 52 4f 4c 4c 42 41 43 4b 29 2e 0a 2a 2f  NT_ROLLBACK)..*/
1a6e0 0a 63 61 73 65 20 4f 50 5f 53 61 76 65 70 6f 69  .case OP_Savepoi
1a6f0 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20  nt: {.  int p1; 
1a700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a710 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
1a720 20 6f 66 20 50 31 20 6f 70 65 72 61 6e 64 20 2a   of P1 operand *
1a730 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  /.  char *zName;
1a740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a750 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 73      /* Name of s
1a760 61 76 65 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e  avepoint */.  in
1a770 74 20 6e 4e 61 6d 65 3b 0a 20 20 53 61 76 65 70  t nName;.  Savep
1a780 6f 69 6e 74 20 2a 70 4e 65 77 3b 0a 20 20 53 61  oint *pNew;.  Sa
1a790 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f  vepoint *pSavepo
1a7a0 69 6e 74 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74  int;.  Savepoint
1a7b0 20 2a 70 54 6d 70 3b 0a 20 20 69 6e 74 20 69 53   *pTmp;.  int iS
1a7c0 61 76 65 70 6f 69 6e 74 3b 0a 20 20 69 6e 74 20  avepoint;.  int 
1a7d0 69 69 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d  ii;..  p1 = pOp-
1a7e0 3e 70 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 70  >p1;.  zName = p
1a7f0 4f 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20  Op->p4.z;..  /* 
1a800 41 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20  Assert that the 
1a810 70 31 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  p1 parameter is 
1a820 76 61 6c 69 64 2e 20 41 6c 73 6f 20 74 68 61 74  valid. Also that
1a830 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   if there is no 
1a840 6f 70 65 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61  open.  ** transa
1a850 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72  ction, then ther
1a860 65 20 63 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20  e cannot be any 
1a870 73 61 76 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a  savepoints. .  *
1a880 2f 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  /.  assert( db->
1a890 70 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c  pSavepoint==0 ||
1a8a0 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d   db->autoCommit=
1a8b0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1a8c0 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45  p1==SAVEPOINT_BE
1a8d0 47 49 4e 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49  GIN||p1==SAVEPOI
1a8e0 4e 54 5f 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d  NT_RELEASE||p1==
1a8f0 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
1a900 43 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  CK );.  assert( 
1a910 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c  db->pSavepoint |
1a920 7c 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74  | db->isTransact
1a930 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20  ionSavepoint==0 
1a940 29 3b 0a 20 20 61 73 73 65 72 74 28 20 63 68 65  );.  assert( che
1a950 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74  ckSavepointCount
1a960 28 64 62 29 20 29 3b 0a 20 20 61 73 73 65 72 74  (db) );.  assert
1a970 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
1a980 3b 0a 0a 20 20 69 66 28 20 70 31 3d 3d 53 41 56  ;..  if( p1==SAV
1a990 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 29 7b 0a  EPOINT_BEGIN ){.
1a9a0 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 56 64 62      if( db->nVdb
1a9b0 65 57 72 69 74 65 3e 30 20 29 7b 0a 20 20 20 20  eWrite>0 ){.    
1a9c0 20 20 2f 2a 20 41 20 6e 65 77 20 73 61 76 65 70    /* A new savep
1a9d0 6f 69 6e 74 20 63 61 6e 6e 6f 74 20 62 65 20 63  oint cannot be c
1a9e0 72 65 61 74 65 64 20 69 66 20 74 68 65 72 65 20  reated if there 
1a9f0 61 72 65 20 61 63 74 69 76 65 20 77 72 69 74 65  are active write
1aa00 20 0a 20 20 20 20 20 20 2a 2a 20 73 74 61 74 65   .      ** state
1aa10 6d 65 6e 74 73 20 28 69 2e 65 2e 20 6f 70 65 6e  ments (i.e. open
1aa20 20 72 65 61 64 2f 77 72 69 74 65 20 69 6e 63 72   read/write incr
1aa30 65 6d 65 6e 74 61 6c 20 62 6c 6f 62 20 68 61 6e  emental blob han
1aa40 64 6c 65 73 29 2e 0a 20 20 20 20 20 20 2a 2f 0a  dles)..      */.
1aa50 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
1aa60 65 45 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f  eError(p, "canno
1aa70 74 20 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e 74  t open savepoint
1aa80 20 2d 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74   - SQL statement
1aa90 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b  s in progress");
1aaa0 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
1aab0 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c  TE_BUSY;.    }el
1aac0 73 65 7b 0a 20 20 20 20 20 20 6e 4e 61 6d 65 20  se{.      nName 
1aad0 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
1aae0 30 28 7a 4e 61 6d 65 29 3b 0a 0a 23 69 66 6e 64  0(zName);..#ifnd
1aaf0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
1ab00 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 20 20  IRTUALTABLE.    
1ab10 20 20 2f 2a 20 54 68 69 73 20 63 61 6c 6c 20 69    /* This call i
1ab20 73 20 4f 6b 20 65 76 65 6e 20 69 66 20 74 68 69  s Ok even if thi
1ab30 73 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61  s savepoint is a
1ab40 63 74 75 61 6c 6c 79 20 61 20 74 72 61 6e 73 61  ctually a transa
1ab50 63 74 69 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 73  ction.      ** s
1ab60 61 76 65 70 6f 69 6e 74 20 28 61 6e 64 20 74 68  avepoint (and th
1ab70 65 72 65 66 6f 72 65 20 73 68 6f 75 6c 64 20 6e  erefore should n
1ab80 6f 74 20 70 72 6f 6d 70 74 20 78 53 61 76 65 70  ot prompt xSavep
1ab90 6f 69 6e 74 28 29 29 20 63 61 6c 6c 62 61 63 6b  oint()) callback
1aba0 73 2e 0a 20 20 20 20 20 20 2a 2a 20 49 66 20 74  s..      ** If t
1abb0 68 69 73 20 69 73 20 61 20 74 72 61 6e 73 61 63  his is a transac
1abc0 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 20 62  tion savepoint b
1abd0 65 69 6e 67 20 6f 70 65 6e 65 64 2c 20 69 74 20  eing opened, it 
1abe0 69 73 20 67 75 61 72 61 6e 74 65 65 64 0a 20 20  is guaranteed.  
1abf0 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20      ** that the 
1ac00 64 62 2d 3e 61 56 54 72 61 6e 73 5b 5d 20 61 72  db->aVTrans[] ar
1ac10 72 61 79 20 69 73 20 65 6d 70 74 79 2e 20 20 2a  ray is empty.  *
1ac20 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
1ac30 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d  db->autoCommit==
1ac40 30 20 7c 7c 20 64 62 2d 3e 6e 56 54 72 61 6e 73  0 || db->nVTrans
1ac50 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 72 63 20  ==0 );.      rc 
1ac60 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76  = sqlite3VtabSav
1ac70 65 70 6f 69 6e 74 28 64 62 2c 20 53 41 56 45 50  epoint(db, SAVEP
1ac80 4f 49 4e 54 5f 42 45 47 49 4e 2c 0a 20 20 20 20  OINT_BEGIN,.    
1ac90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aca0 20 20 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e              db->
1acb0 6e 53 74 61 74 65 6d 65 6e 74 2b 64 62 2d 3e 6e  nStatement+db->n
1acc0 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20  Savepoint);.    
1acd0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1ace0 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
1acf0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23  _due_to_error;.#
1ad00 65 6e 64 69 66 0a 0a 20 20 20 20 20 20 2f 2a 20  endif..      /* 
1ad10 43 72 65 61 74 65 20 61 20 6e 65 77 20 73 61 76  Create a new sav
1ad20 65 70 6f 69 6e 74 20 73 74 72 75 63 74 75 72 65  epoint structure
1ad30 2e 20 2a 2f 0a 20 20 20 20 20 20 70 4e 65 77 20  . */.      pNew 
1ad40 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  = sqlite3DbMallo
1ad50 63 52 61 77 4e 4e 28 64 62 2c 20 73 69 7a 65 6f  cRawNN(db, sizeo
1ad60 66 28 53 61 76 65 70 6f 69 6e 74 29 2b 6e 4e 61  f(Savepoint)+nNa
1ad70 6d 65 2b 31 29 3b 0a 20 20 20 20 20 20 69 66 28  me+1);.      if(
1ad80 20 70 4e 65 77 20 29 7b 0a 20 20 20 20 20 20 20   pNew ){.       
1ad90 20 70 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28   pNew->zName = (
1ada0 63 68 61 72 20 2a 29 26 70 4e 65 77 5b 31 5d 3b  char *)&pNew[1];
1adb0 0a 20 20 20 20 20 20 20 20 6d 65 6d 63 70 79 28  .        memcpy(
1adc0 70 4e 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61  pNew->zName, zNa
1add0 6d 65 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20  me, nName+1);.  
1ade0 20 20 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66    .        /* If
1adf0 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65   there is no ope
1ae00 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74  n transaction, t
1ae10 68 65 6e 20 6d 61 72 6b 20 74 68 69 73 20 61 73  hen mark this as
1ae20 20 61 20 73 70 65 63 69 61 6c 0a 20 20 20 20 20   a special.     
1ae30 20 20 20 2a 2a 20 22 74 72 61 6e 73 61 63 74 69     ** "transacti
1ae40 6f 6e 20 73 61 76 65 70 6f 69 6e 74 22 2e 20 2a  on savepoint". *
1ae50 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 64 62  /.        if( db
1ae60 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a  ->autoCommit ){.
1ae70 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75            db->au
1ae80 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20  toCommit = 0;.  
1ae90 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72          db->isTr
1aea0 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
1aeb0 6e 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  nt = 1;.        
1aec0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
1aed0 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2b   db->nSavepoint+
1aee0 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20  +;.        }..  
1aef0 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 20 74 68        /* Link th
1af00 65 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20  e new savepoint 
1af10 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  into the databas
1af20 65 20 68 61 6e 64 6c 65 27 73 20 6c 69 73 74 2e  e handle's list.
1af30 20 2a 2f 0a 20 20 20 20 20 20 20 20 70 4e 65 77   */.        pNew
1af40 2d 3e 70 4e 65 78 74 20 3d 20 64 62 2d 3e 70 53  ->pNext = db->pS
1af50 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20  avepoint;.      
1af60 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74    db->pSavepoint
1af70 20 3d 20 70 4e 65 77 3b 0a 20 20 20 20 20 20 20   = pNew;.       
1af80 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65 64   pNew->nDeferred
1af90 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65  Cons = db->nDefe
1afa0 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20  rredCons;.      
1afb0 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65    pNew->nDeferre
1afc0 64 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e  dImmCons = db->n
1afd0 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
1afe0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
1aff0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
1b000 72 74 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e  rt( p1==SAVEPOIN
1b010 54 5f 52 45 4c 45 41 53 45 20 7c 7c 20 70 31 3d  T_RELEASE || p1=
1b020 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42  =SAVEPOINT_ROLLB
1b030 41 43 4b 20 29 3b 0a 20 20 20 20 69 53 61 76 65  ACK );.    iSave
1b040 70 6f 69 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20  point = 0;..    
1b050 2f 2a 20 46 69 6e 64 20 74 68 65 20 6e 61 6d 65  /* Find the name
1b060 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20  d savepoint. If 
1b070 74 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68  there is no such
1b080 20 73 61 76 65 70 6f 69 6e 74 2c 20 74 68 65 6e   savepoint, then
1b090 20 61 6e 0a 20 20 20 20 2a 2a 20 61 6e 20 65 72   an.    ** an er
1b0a0 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64 20  ror is returned 
1b0b0 74 6f 20 74 68 65 20 75 73 65 72 2e 20 20 2a 2f  to the user.  */
1b0c0 0a 20 20 20 20 66 6f 72 28 0a 20 20 20 20 20 20  .    for(.      
1b0d0 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d  pSavepoint = db-
1b0e0 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20 0a 20 20  >pSavepoint; .  
1b0f0 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 26      pSavepoint &
1b100 26 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  & sqlite3StrICmp
1b110 28 70 53 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61  (pSavepoint->zNa
1b120 6d 65 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  me, zName);.    
1b130 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70    pSavepoint = p
1b140 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74  Savepoint->pNext
1b150 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 69 53  .    ){.      iS
1b160 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20  avepoint++;.    
1b170 7d 0a 20 20 20 20 69 66 28 20 21 70 53 61 76 65  }.    if( !pSave
1b180 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73  point ){.      s
1b190 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28  qlite3VdbeError(
1b1a0 70 2c 20 22 6e 6f 20 73 75 63 68 20 73 61 76 65  p, "no such save
1b1b0 70 6f 69 6e 74 3a 20 25 73 22 2c 20 7a 4e 61 6d  point: %s", zNam
1b1c0 65 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53  e);.      rc = S
1b1d0 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20  QLITE_ERROR;.   
1b1e0 20 7d 65 6c 73 65 20 69 66 28 20 64 62 2d 3e 6e   }else if( db->n
1b1f0 56 64 62 65 57 72 69 74 65 3e 30 20 26 26 20 70  VdbeWrite>0 && p
1b200 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  1==SAVEPOINT_REL
1b210 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 2f 2a  EASE ){.      /*
1b220 20 49 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69   It is not possi
1b230 62 6c 65 20 74 6f 20 72 65 6c 65 61 73 65 20 28  ble to release (
1b240 63 6f 6d 6d 69 74 29 20 61 20 73 61 76 65 70 6f  commit) a savepo
1b250 69 6e 74 20 69 66 20 74 68 65 72 65 20 61 72 65  int if there are
1b260 20 0a 20 20 20 20 20 20 2a 2a 20 61 63 74 69 76   .      ** activ
1b270 65 20 77 72 69 74 65 20 73 74 61 74 65 6d 65 6e  e write statemen
1b280 74 73 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  ts..      */.   
1b290 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
1b2a0 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 72  ror(p, "cannot r
1b2b0 65 6c 65 61 73 65 20 73 61 76 65 70 6f 69 6e 74  elease savepoint
1b2c0 20 2d 20 22 0a 20 20 20 20 20 20 20 20 20 20 20   - ".           
1b2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1b2e0 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69  SQL statements i
1b2f0 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20  n progress");.  
1b300 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
1b310 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  BUSY;.    }else{
1b320 0a 0a 20 20 20 20 20 20 2f 2a 20 44 65 74 65 72  ..      /* Deter
1b330 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20  mine whether or 
1b340 6e 6f 74 20 74 68 69 73 20 69 73 20 61 20 74 72  not this is a tr
1b350 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f  ansaction savepo
1b360 69 6e 74 2e 20 49 66 20 73 6f 2c 0a 20 20 20 20  int. If so,.    
1b370 20 20 2a 2a 20 61 6e 64 20 74 68 69 73 20 69 73    ** and this is
1b380 20 61 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61   a RELEASE comma
1b390 6e 64 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72  nd, then the cur
1b3a0 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  rent transaction
1b3b0 20 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 63 6f   .      ** is co
1b3c0 6d 6d 69 74 74 65 64 2e 20 0a 20 20 20 20 20 20  mmitted. .      
1b3d0 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20 69 73 54  */.      int isT
1b3e0 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20 70 53 61  ransaction = pSa
1b3f0 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d  vepoint->pNext==
1b400 30 20 26 26 20 64 62 2d 3e 69 73 54 72 61 6e 73  0 && db->isTrans
1b410 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b  actionSavepoint;
1b420 0a 20 20 20 20 20 20 69 66 28 20 69 73 54 72 61  .      if( isTra
1b430 6e 73 61 63 74 69 6f 6e 20 26 26 20 70 31 3d 3d  nsaction && p1==
1b440 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
1b450 45 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  E ){.        if(
1b460 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64   (rc = sqlite3Vd
1b470 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29  beCheckFk(p, 1))
1b480 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
1b490 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64           goto vd
1b4a0 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20  be_return;.     
1b4b0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d     }.        db-
1b4c0 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b  >autoCommit = 1;
1b4d0 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c  .        if( sql
1b4e0 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d  ite3VdbeHalt(p)=
1b4f0 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
1b500 20 20 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20            p->pc 
1b510 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f  = (int)(pOp - aO
1b520 70 29 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62  p);.          db
1b530 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30  ->autoCommit = 0
1b540 3b 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e 72  ;.          p->r
1b550 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  c = rc = SQLITE_
1b560 42 55 53 59 3b 0a 20 20 20 20 20 20 20 20 20 20  BUSY;.          
1b570 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
1b580 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
1b590 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61      db->isTransa
1b5a0 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d  ctionSavepoint =
1b5b0 20 30 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   0;.        rc =
1b5c0 20 70 2d 3e 72 63 3b 0a 20 20 20 20 20 20 7d 65   p->rc;.      }e
1b5d0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 69 6e 74  lse{.        int
1b5e0 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65 3b   isSchemaChange;
1b5f0 0a 20 20 20 20 20 20 20 20 69 53 61 76 65 70 6f  .        iSavepo
1b600 69 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70  int = db->nSavep
1b610 6f 69 6e 74 20 2d 20 69 53 61 76 65 70 6f 69 6e  oint - iSavepoin
1b620 74 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 69  t - 1;.        i
1b630 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  f( p1==SAVEPOINT
1b640 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20  _ROLLBACK ){.   
1b650 20 20 20 20 20 20 20 69 73 53 63 68 65 6d 61 43         isSchemaC
1b660 68 61 6e 67 65 20 3d 20 28 64 62 2d 3e 6d 44 62  hange = (db->mDb
1b670 46 6c 61 67 73 20 26 20 44 42 46 4c 41 47 5f 53  Flags & DBFLAG_S
1b680 63 68 65 6d 61 43 68 61 6e 67 65 29 21 3d 30 3b  chemaChange)!=0;
1b690 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 69  .          for(i
1b6a0 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b  i=0; ii<db->nDb;
1b6b0 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20   ii++){.        
1b6c0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1b6d0 42 74 72 65 65 54 72 69 70 41 6c 6c 43 75 72 73  BtreeTripAllCurs
1b6e0 6f 72 73 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e  ors(db->aDb[ii].
1b6f0 70 42 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20  pBt,.           
1b700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b710 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49              SQLI
1b720 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43  TE_ABORT_ROLLBAC
1b730 4b 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  K,.             
1b740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b750 20 20 20 20 20 20 20 20 20 20 69 73 53 63 68 65            isSche
1b760 6d 61 43 68 61 6e 67 65 3d 3d 30 29 3b 0a 20 20  maChange==0);.  
1b770 20 20 20 20 20 20 20 20 20 20 69 66 28 20 72 63            if( rc
1b780 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f  !=SQLITE_OK ) go
1b790 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1b7a0 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20  error;.         
1b7b0 20 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65   }.        }else
1b7c0 7b 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65  {.          asse
1b7d0 72 74 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e  rt( p1==SAVEPOIN
1b7e0 54 5f 52 45 4c 45 41 53 45 20 29 3b 0a 20 20 20  T_RELEASE );.   
1b7f0 20 20 20 20 20 20 20 69 73 53 63 68 65 6d 61 43         isSchemaC
1b800 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 20 20 20  hange = 0;.     
1b810 20 20 20 7d 0a 20 20 20 20 20 20 20 20 66 6f 72     }.        for
1b820 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44  (ii=0; ii<db->nD
1b830 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20  b; ii++){.      
1b840 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1b850 42 74 72 65 65 53 61 76 65 70 6f 69 6e 74 28 64  BtreeSavepoint(d
1b860 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20  b->aDb[ii].pBt, 
1b870 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b  p1, iSavepoint);
1b880 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 72  .          if( r
1b890 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
1b8a0 20 20 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f              goto
1b8b0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1b8c0 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  ror;.          }
1b8d0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
1b8e0 20 20 20 69 66 28 20 69 73 53 63 68 65 6d 61 43     if( isSchemaC
1b8f0 68 61 6e 67 65 20 29 7b 0a 20 20 20 20 20 20 20  hange ){.       
1b900 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65     sqlite3Expire
1b910 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
1b920 74 73 28 64 62 2c 20 30 29 3b 0a 20 20 20 20 20  ts(db, 0);.     
1b930 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65       sqlite3Rese
1b940 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e  tAllSchemasOfCon
1b950 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 20  nection(db);.   
1b960 20 20 20 20 20 20 20 64 62 2d 3e 6d 44 62 46 6c         db->mDbFl
1b970 61 67 73 20 7c 3d 20 44 42 46 4c 41 47 5f 53 63  ags |= DBFLAG_Sc
1b980 68 65 6d 61 43 68 61 6e 67 65 3b 0a 20 20 20 20  hemaChange;.    
1b990 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
1b9a0 0a 20 20 20 20 20 20 2f 2a 20 52 65 67 61 72 64  .      /* Regard
1b9b0 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20  less of whether 
1b9c0 74 68 69 73 20 69 73 20 61 20 52 45 4c 45 41 53  this is a RELEAS
1b9d0 45 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c 20 64  E or ROLLBACK, d
1b9e0 65 73 74 72 6f 79 20 61 6c 6c 20 0a 20 20 20 20  estroy all .    
1b9f0 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74 73 20    ** savepoints 
1ba00 6e 65 73 74 65 64 20 69 6e 73 69 64 65 20 6f 66  nested inside of
1ba10 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62   the savepoint b
1ba20 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e  eing operated on
1ba30 2e 20 2a 2f 0a 20 20 20 20 20 20 77 68 69 6c 65  . */.      while
1ba40 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  ( db->pSavepoint
1ba50 21 3d 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a  !=pSavepoint ){.
1ba60 20 20 20 20 20 20 20 20 70 54 6d 70 20 3d 20 64          pTmp = d
1ba70 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20  b->pSavepoint;. 
1ba80 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65         db->pSave
1ba90 70 6f 69 6e 74 20 3d 20 70 54 6d 70 2d 3e 70 4e  point = pTmp->pN
1baa0 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  ext;.        sql
1bab0 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
1bac0 54 6d 70 29 3b 0a 20 20 20 20 20 20 20 20 64 62  Tmp);.        db
1bad0 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a  ->nSavepoint--;.
1bae0 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f        }..      /
1baf0 2a 20 49 66 20 69 74 20 69 73 20 61 20 52 45 4c  * If it is a REL
1bb00 45 41 53 45 2c 20 74 68 65 6e 20 64 65 73 74 72  EASE, then destr
1bb10 6f 79 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74  oy the savepoint
1bb20 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20   being operated 
1bb30 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 74 6f 6f  on .      ** too
1bb40 2e 20 49 66 20 69 74 20 69 73 20 61 20 52 4f 4c  . If it is a ROL
1bb50 4c 42 41 43 4b 20 54 4f 2c 20 74 68 65 6e 20 73  LBACK TO, then s
1bb60 65 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  et the number of
1bb70 20 64 65 66 65 72 72 65 64 20 0a 20 20 20 20 20   deferred .     
1bb80 20 2a 2a 20 63 6f 6e 73 74 72 61 69 6e 74 20 76   ** constraint v
1bb90 69 6f 6c 61 74 69 6f 6e 73 20 70 72 65 73 65 6e  iolations presen
1bba0 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  t in the databas
1bbb0 65 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 73  e to the value s
1bbc0 74 6f 72 65 64 0a 20 20 20 20 20 20 2a 2a 20 77  tored.      ** w
1bbd0 68 65 6e 20 74 68 65 20 73 61 76 65 70 6f 69 6e  hen the savepoin
1bbe0 74 20 77 61 73 20 63 72 65 61 74 65 64 2e 20 20  t was created.  
1bbf0 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 31 3d  */.      if( p1=
1bc00 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41  =SAVEPOINT_RELEA
1bc10 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  SE ){.        as
1bc20 73 65 72 74 28 20 70 53 61 76 65 70 6f 69 6e 74  sert( pSavepoint
1bc30 3d 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  ==db->pSavepoint
1bc40 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e   );.        db->
1bc50 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61  pSavepoint = pSa
1bc60 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a  vepoint->pNext;.
1bc70 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44          sqlite3D
1bc80 62 46 72 65 65 28 64 62 2c 20 70 53 61 76 65 70  bFree(db, pSavep
1bc90 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69  oint);.        i
1bca0 66 28 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f  f( !isTransactio
1bcb0 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64  n ){.          d
1bcc0 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b  b->nSavepoint--;
1bcd0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
1bce0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
1bcf0 61 73 73 65 72 74 28 20 70 31 3d 3d 53 41 56 45  assert( p1==SAVE
1bd00 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29  POINT_ROLLBACK )
1bd10 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 44  ;.        db->nD
1bd20 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 70 53  eferredCons = pS
1bd30 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72  avepoint->nDefer
1bd40 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 20  redCons;.       
1bd50 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
1bd60 6d 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f 69  mCons = pSavepoi
1bd70 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  nt->nDeferredImm
1bd80 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 0a 20  Cons;.      }.. 
1bd90 20 20 20 20 20 69 66 28 20 21 69 73 54 72 61 6e       if( !isTran
1bda0 73 61 63 74 69 6f 6e 20 7c 7c 20 70 31 3d 3d 53  saction || p1==S
1bdb0 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43  AVEPOINT_ROLLBAC
1bdc0 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  K ){.        rc 
1bdd0 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76  = sqlite3VtabSav
1bde0 65 70 6f 69 6e 74 28 64 62 2c 20 70 31 2c 20 69  epoint(db, p1, i
1bdf0 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20  Savepoint);.    
1be00 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1be10 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
1be20 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1be30 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
1be40 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f   }.  if( rc ) go
1be50 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1be60 65 72 72 6f 72 3b 0a 0a 20 20 62 72 65 61 6b 3b  error;..  break;
1be70 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
1be80 75 74 6f 43 6f 6d 6d 69 74 20 50 31 20 50 32 20  utoCommit P1 P2 
1be90 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20  * * *.**.** Set 
1bea0 74 68 65 20 64 61 74 61 62 61 73 65 20 61 75 74  the database aut
1beb0 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 20 74 6f  o-commit flag to
1bec0 20 50 31 20 28 31 20 6f 72 20 30 29 2e 20 49 66   P1 (1 or 0). If
1bed0 20 50 32 20 69 73 20 74 72 75 65 2c 20 72 6f 6c   P2 is true, rol
1bee0 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e 79 20 63 75  l.** back any cu
1bef0 72 72 65 6e 74 6c 79 20 61 63 74 69 76 65 20 62  rrently active b
1bf00 74 72 65 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  tree transaction
1bf10 73 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  s. If there are 
1bf20 61 6e 79 20 61 63 74 69 76 65 0a 2a 2a 20 56 4d  any active.** VM
1bf30 73 20 28 61 70 61 72 74 20 66 72 6f 6d 20 74 68  s (apart from th
1bf40 69 73 20 6f 6e 65 29 2c 20 74 68 65 6e 20 61 20  is one), then a 
1bf50 52 4f 4c 4c 42 41 43 4b 20 66 61 69 6c 73 2e 20  ROLLBACK fails. 
1bf60 20 41 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20   A COMMIT fails 
1bf70 69 66 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20  if.** there are 
1bf80 61 63 74 69 76 65 20 77 72 69 74 69 6e 67 20 56  active writing V
1bf90 4d 73 20 6f 72 20 61 63 74 69 76 65 20 56 4d 73  Ms or active VMs
1bfa0 20 74 68 61 74 20 75 73 65 20 73 68 61 72 65 64   that use shared
1bfb0 20 63 61 63 68 65 2e 0a 2a 2a 0a 2a 2a 20 54 68   cache..**.** Th
1bfc0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63  is instruction c
1bfd0 61 75 73 65 73 20 74 68 65 20 56 4d 20 74 6f 20  auses the VM to 
1bfe0 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  halt..*/.case OP
1bff0 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20  _AutoCommit: {. 
1c000 20 69 6e 74 20 64 65 73 69 72 65 64 41 75 74 6f   int desiredAuto
1c010 43 6f 6d 6d 69 74 3b 0a 20 20 69 6e 74 20 69 52  Commit;.  int iR
1c020 6f 6c 6c 62 61 63 6b 3b 0a 0a 20 20 64 65 73 69  ollback;..  desi
1c030 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  redAutoCommit = 
1c040 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 52 6f 6c 6c  pOp->p1;.  iRoll
1c050 62 61 63 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  back = pOp->p2;.
1c060 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65    assert( desire
1c070 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c  dAutoCommit==1 |
1c080 7c 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  | desiredAutoCom
1c090 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  mit==0 );.  asse
1c0a0 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43  rt( desiredAutoC
1c0b0 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 69 52 6f 6c  ommit==1 || iRol
1c0c0 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a 20 20 61 73  lback==0 );.  as
1c0d0 73 65 72 74 28 20 64 62 2d 3e 6e 56 64 62 65 41  sert( db->nVdbeA
1c0e0 63 74 69 76 65 3e 30 20 29 3b 20 20 2f 2a 20 41  ctive>0 );  /* A
1c0f0 74 20 6c 65 61 73 74 20 74 68 69 73 20 6f 6e 65  t least this one
1c100 20 56 4d 20 69 73 20 61 63 74 69 76 65 20 2a 2f   VM is active */
1c110 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49  .  assert( p->bI
1c120 73 52 65 61 64 65 72 20 29 3b 0a 0a 20 20 69 66  sReader );..  if
1c130 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  ( desiredAutoCom
1c140 6d 69 74 21 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d  mit!=db->autoCom
1c150 6d 69 74 20 29 7b 0a 20 20 20 20 69 66 28 20 69  mit ){.    if( i
1c160 52 6f 6c 6c 62 61 63 6b 20 29 7b 0a 20 20 20 20  Rollback ){.    
1c170 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65    assert( desire
1c180 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 29  dAutoCommit==1 )
1c190 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52  ;.      sqlite3R
1c1a0 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64 62 2c 20 53  ollbackAll(db, S
1c1b0 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c  QLITE_ABORT_ROLL
1c1c0 42 41 43 4b 29 3b 0a 20 20 20 20 20 20 64 62 2d  BACK);.      db-
1c1d0 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b  >autoCommit = 1;
1c1e0 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 64  .    }else if( d
1c1f0 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
1c200 20 26 26 20 64 62 2d 3e 6e 56 64 62 65 57 72 69   && db->nVdbeWri
1c210 74 65 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a  te>0 ){.      /*
1c220 20 49 66 20 74 68 69 73 20 69 6e 73 74 72 75 63   If this instruc
1c230 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73 20  tion implements 
1c240 61 20 43 4f 4d 4d 49 54 20 61 6e 64 20 6f 74 68  a COMMIT and oth
1c250 65 72 20 56 4d 73 20 61 72 65 20 77 72 69 74 69  er VMs are writi
1c260 6e 67 0a 20 20 20 20 20 20 2a 2a 20 72 65 74 75  ng.      ** retu
1c270 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e 64 69  rn an error indi
1c280 63 61 74 69 6e 67 20 74 68 61 74 20 74 68 65 20  cating that the 
1c290 6f 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20 63  other VMs must c
1c2a0 6f 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20 0a  omplete first. .
1c2b0 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73        */.      s
1c2c0 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28  qlite3VdbeError(
1c2d0 70 2c 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69  p, "cannot commi
1c2e0 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20  t transaction - 
1c2f0 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
1c300 20 20 20 20 20 20 20 20 20 20 20 20 22 53 51 4c              "SQL
1c310 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70   statements in p
1c320 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20  rogress");.     
1c330 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
1c340 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  Y;.      goto ab
1c350 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1c360 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
1c370 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62  (rc = sqlite3Vdb
1c380 65 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29 21  eCheckFk(p, 1))!
1c390 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1c3a0 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65      goto vdbe_re
1c3b0 74 75 72 6e 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  turn;.    }else{
1c3c0 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43  .      db->autoC
1c3d0 6f 6d 6d 69 74 20 3d 20 28 75 38 29 64 65 73 69  ommit = (u8)desi
1c3e0 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20  redAutoCommit;. 
1c3f0 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73 71 6c     }.    if( sql
1c400 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d  ite3VdbeHalt(p)=
1c410 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
1c420 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 28 69        p->pc = (i
1c430 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a  nt)(pOp - aOp);.
1c440 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
1c450 6d 6d 69 74 20 3d 20 28 75 38 29 28 31 2d 64 65  mmit = (u8)(1-de
1c460 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29  siredAutoCommit)
1c470 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20  ;.      p->rc = 
1c480 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
1c490 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62  ;.      goto vdb
1c4a0 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a  e_return;.    }.
1c4b0 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
1c4c0 6e 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 3b  nStatement==0 );
1c4d0 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6c 6f 73  .    sqlite3Clos
1c4e0 65 53 61 76 65 70 6f 69 6e 74 73 28 64 62 29 3b  eSavepoints(db);
1c4f0 0a 20 20 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d  .    if( p->rc==
1c500 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1c510 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 44     rc = SQLITE_D
1c520 4f 4e 45 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ONE;.    }else{.
1c530 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
1c540 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20  E_ERROR;.    }. 
1c550 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
1c560 75 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  urn;.  }else{.  
1c570 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
1c580 6f 72 28 70 2c 0a 20 20 20 20 20 20 20 20 28 21  or(p,.        (!
1c590 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
1c5a0 74 29 3f 22 63 61 6e 6e 6f 74 20 73 74 61 72 74  t)?"cannot start
1c5b0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77   a transaction w
1c5c0 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74  ithin a transact
1c5d0 69 6f 6e 22 3a 28 0a 20 20 20 20 20 20 20 20 28  ion":(.        (
1c5e0 69 52 6f 6c 6c 62 61 63 6b 29 3f 22 63 61 6e 6e  iRollback)?"cann
1c5f0 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e 6f  ot rollback - no
1c600 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
1c610 61 63 74 69 76 65 22 3a 0a 20 20 20 20 20 20 20  active":.       
1c620 20 20 20 20 20 20 20 20 20 20 20 20 22 63 61 6e              "can
1c630 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f 20  not commit - no 
1c640 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61  transaction is a
1c650 63 74 69 76 65 22 29 29 3b 0a 20 20 20 20 20 20  ctive"));.      
1c660 20 20 20 0a 20 20 20 20 72 63 20 3d 20 53 51 4c     .    rc = SQL
1c670 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 67  ITE_ERROR;.    g
1c680 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1c690 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 2f 2a  _error;.  }.  /*
1c6a0 4e 4f 54 52 45 41 43 48 45 44 2a 2f 20 61 73 73  NOTREACHED*/ ass
1c6b0 65 72 74 28 30 29 3b 0a 7d 0a 0a 2f 2a 20 4f 70  ert(0);.}../* Op
1c6c0 63 6f 64 65 3a 20 54 72 61 6e 73 61 63 74 69 6f  code: Transactio
1c6d0 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  n P1 P2 P3 P4 P5
1c6e0 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 20 74  .**.** Begin a t
1c6f0 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 64 61  ransaction on da
1c700 74 61 62 61 73 65 20 50 31 20 69 66 20 61 20 74  tabase P1 if a t
1c710 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f  ransaction is no
1c720 74 20 61 6c 72 65 61 64 79 0a 2a 2a 20 61 63 74  t already.** act
1c730 69 76 65 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73  ive..** If P2 is
1c740 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
1c750 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74  a write-transact
1c760 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2c 20  ion is started, 
1c770 6f 72 20 69 66 20 61 20 0a 2a 2a 20 72 65 61 64  or if a .** read
1c780 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
1c790 61 6c 72 65 61 64 79 20 61 63 74 69 76 65 2c 20  already active, 
1c7a0 69 74 20 69 73 20 75 70 67 72 61 64 65 64 20 74  it is upgraded t
1c7b0 6f 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61  o a write-transa
1c7c0 63 74 69 6f 6e 2e 0a 2a 2a 20 49 66 20 50 32 20  ction..** If P2 
1c7d0 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20  is zero, then a 
1c7e0 72 65 61 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e  read-transaction
1c7f0 20 69 73 20 73 74 61 72 74 65 64 2e 0a 2a 2a 0a   is started..**.
1c800 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64  ** P1 is the ind
1c810 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ex of the databa
1c820 73 65 20 66 69 6c 65 20 6f 6e 20 77 68 69 63 68  se file on which
1c830 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e   the transaction
1c840 20 69 73 0a 2a 2a 20 73 74 61 72 74 65 64 2e 20   is.** started. 
1c850 20 49 6e 64 65 78 20 30 20 69 73 20 74 68 65 20   Index 0 is the 
1c860 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
1c870 6c 65 20 61 6e 64 20 69 6e 64 65 78 20 31 20 69  le and index 1 i
1c880 73 20 74 68 65 0a 2a 2a 20 66 69 6c 65 20 75 73  s the.** file us
1c890 65 64 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79  ed for temporary
1c8a0 20 74 61 62 6c 65 73 2e 20 20 49 6e 64 69 63 65   tables.  Indice
1c8b0 73 20 6f 66 20 32 20 6f 72 20 6d 6f 72 65 20 61  s of 2 or more a
1c8c0 72 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 61  re used for.** a
1c8d0 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
1c8e0 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20 77 72  s..**.** If a wr
1c8f0 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite-transaction 
1c900 69 73 20 73 74 61 72 74 65 64 20 61 6e 64 20 74  is started and t
1c910 68 65 20 56 64 62 65 2e 75 73 65 73 53 74 6d 74  he Vdbe.usesStmt
1c920 4a 6f 75 72 6e 61 6c 20 66 6c 61 67 20 69 73 0a  Journal flag is.
1c930 2a 2a 20 74 72 75 65 20 28 74 68 69 73 20 66 6c  ** true (this fl
1c940 61 67 20 69 73 20 73 65 74 20 69 66 20 74 68 65  ag is set if the
1c950 20 56 64 62 65 20 6d 61 79 20 6d 6f 64 69 66 79   Vdbe may modify
1c960 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 72   more than one r
1c970 6f 77 20 61 6e 64 20 6d 61 79 0a 2a 2a 20 74 68  ow and may.** th
1c980 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63  row an ABORT exc
1c990 65 70 74 69 6f 6e 29 2c 20 61 20 73 74 61 74 65  eption), a state
1c9a0 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
1c9b0 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 6f 70 65   may also be ope
1c9c0 6e 65 64 2e 0a 2a 2a 20 4d 6f 72 65 20 73 70 65  ned..** More spe
1c9d0 63 69 66 69 63 61 6c 6c 79 2c 20 61 20 73 74 61  cifically, a sta
1c9e0 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
1c9f0 6f 6e 20 69 73 20 6f 70 65 6e 65 64 20 69 66 66  on is opened iff
1ca00 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
1ca10 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63   connection is c
1ca20 75 72 72 65 6e 74 6c 79 20 6e 6f 74 20 69 6e 20  urrently not in 
1ca30 61 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65 2c  autocommit mode,
1ca40 20 6f 72 20 69 66 20 74 68 65 72 65 20 61 72 65   or if there are
1ca50 20 6f 74 68 65 72 0a 2a 2a 20 61 63 74 69 76 65   other.** active
1ca60 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 41 20 73   statements. A s
1ca70 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
1ca80 74 69 6f 6e 20 61 6c 6c 6f 77 73 20 74 68 65 20  tion allows the 
1ca90 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20  changes made by 
1caa0 74 68 69 73 0a 2a 2a 20 56 44 42 45 20 74 6f 20  this.** VDBE to 
1cab0 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61  be rolled back a
1cac0 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 77 69  fter an error wi
1cad0 74 68 6f 75 74 20 68 61 76 69 6e 67 20 74 6f 20  thout having to 
1cae0 72 6f 6c 6c 20 62 61 63 6b 20 74 68 65 0a 2a 2a  roll back the.**
1caf0 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61 63 74   entire transact
1cb00 69 6f 6e 2e 20 49 66 20 6e 6f 20 65 72 72 6f 72  ion. If no error
1cb10 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2c   is encountered,
1cb20 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74   the statement t
1cb30 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 77 69  ransaction.** wi
1cb40 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ll automatically
1cb50 20 63 6f 6d 6d 69 74 20 77 68 65 6e 20 74 68 65   commit when the
1cb60 20 56 44 42 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a   VDBE halts..**.
1cb70 2a 2a 20 49 66 20 50 35 21 3d 30 20 74 68 65 6e  ** If P5!=0 then
1cb80 20 74 68 69 73 20 6f 70 63 6f 64 65 20 61 6c 73   this opcode als
1cb90 6f 20 63 68 65 63 6b 73 20 74 68 65 20 73 63 68  o checks the sch
1cba0 65 6d 61 20 63 6f 6f 6b 69 65 20 61 67 61 69 6e  ema cookie again
1cbb0 73 74 20 50 33 0a 2a 2a 20 61 6e 64 20 74 68 65  st P3.** and the
1cbc0 20 73 63 68 65 6d 61 20 67 65 6e 65 72 61 74 69   schema generati
1cbd0 6f 6e 20 63 6f 75 6e 74 65 72 20 61 67 61 69 6e  on counter again
1cbe0 73 74 20 50 34 2e 0a 2a 2a 20 54 68 65 20 63 6f  st P4..** The co
1cbf0 6f 6b 69 65 20 63 68 61 6e 67 65 73 20 69 74 73  okie changes its
1cc00 20 76 61 6c 75 65 20 77 68 65 6e 65 76 65 72 20   value whenever 
1cc10 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
1cc20 65 6d 61 20 63 68 61 6e 67 65 73 2e 0a 2a 2a 20  ema changes..** 
1cc30 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 69  This operation i
1cc40 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 63 74  s used to detect
1cc50 20 77 68 65 6e 20 74 68 61 74 20 74 68 65 20 63   when that the c
1cc60 6f 6f 6b 69 65 20 68 61 73 20 63 68 61 6e 67 65  ookie has change
1cc70 64 0a 2a 2a 20 61 6e 64 20 74 68 61 74 20 74 68  d.** and that th
1cc80 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73  e current proces
1cc90 73 20 6e 65 65 64 73 20 74 6f 20 72 65 72 65 61  s needs to rerea
1cca0 64 20 74 68 65 20 73 63 68 65 6d 61 2e 20 20 49  d the schema.  I
1ccb0 66 20 74 68 65 20 73 63 68 65 6d 61 0a 2a 2a 20  f the schema.** 
1ccc0 63 6f 6f 6b 69 65 20 69 6e 20 50 33 20 64 69 66  cookie in P3 dif
1ccd0 66 65 72 73 20 66 72 6f 6d 20 74 68 65 20 73 63  fers from the sc
1cce0 68 65 6d 61 20 63 6f 6f 6b 69 65 20 69 6e 20 74  hema cookie in t
1ccf0 68 65 20 64 61 74 61 62 61 73 65 20 68 65 61 64  he database head
1cd00 65 72 20 6f 72 0a 2a 2a 20 69 66 20 74 68 65 20  er or.** if the 
1cd10 73 63 68 65 6d 61 20 67 65 6e 65 72 61 74 69 6f  schema generatio
1cd20 6e 20 63 6f 75 6e 74 65 72 20 69 6e 20 50 34 20  n counter in P4 
1cd30 64 69 66 66 65 72 73 20 66 72 6f 6d 20 74 68 65  differs from the
1cd40 20 63 75 72 72 65 6e 74 0a 2a 2a 20 67 65 6e 65   current.** gene
1cd50 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2c 20  ration counter, 
1cd60 74 68 65 6e 20 61 6e 20 53 51 4c 49 54 45 5f 53  then an SQLITE_S
1cd70 43 48 45 4d 41 20 65 72 72 6f 72 20 69 73 20 72  CHEMA error is r
1cd80 61 69 73 65 64 20 61 6e 64 20 65 78 65 63 75 74  aised and execut
1cd90 69 6f 6e 0a 2a 2a 20 68 61 6c 74 73 2e 20 20 54  ion.** halts.  T
1cda0 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  he sqlite3_step(
1cdb0 29 20 77 72 61 70 70 65 72 20 66 75 6e 63 74 69  ) wrapper functi
1cdc0 6f 6e 20 6d 69 67 68 74 20 74 68 65 6e 20 72 65  on might then re
1cdd0 70 72 65 70 61 72 65 20 74 68 65 0a 2a 2a 20 73  prepare the.** s
1cde0 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 72 65 72  tatement and rer
1cdf0 75 6e 20 69 74 20 66 72 6f 6d 20 74 68 65 20 62  un it from the b
1ce00 65 67 69 6e 6e 69 6e 67 2e 0a 2a 2f 0a 63 61 73  eginning..*/.cas
1ce10 65 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e  e OP_Transaction
1ce20 3a 20 7b 0a 20 20 42 74 72 65 65 20 2a 70 42 74  : {.  Btree *pBt
1ce30 3b 0a 20 20 69 6e 74 20 69 4d 65 74 61 20 3d 20  ;.  int iMeta = 
1ce40 30 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  0;..  assert( p-
1ce50 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20  >bIsReader );.  
1ce60 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
1ce70 6e 6c 79 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70  nly==0 || pOp->p
1ce80 32 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  2==0 );.  assert
1ce90 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1cea0 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
1ceb0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d  );.  assert( DbM
1cec0 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
1ced0 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29  Mask, pOp->p1) )
1cee0 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20  ;.  if( pOp->p2 
1cef0 26 26 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20  && (db->flags & 
1cf00 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79  SQLITE_QueryOnly
1cf10 29 21 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d  )!=0 ){.    rc =
1cf20 20 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59   SQLITE_READONLY
1cf30 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74  ;.    goto abort
1cf40 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1cf50 20 7d 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61   }.  pBt = db->a
1cf60 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
1cf70 0a 0a 20 20 69 66 28 20 70 42 74 20 29 7b 0a 20  ..  if( pBt ){. 
1cf80 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1cf90 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70  treeBeginTrans(p
1cfa0 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 26 69 4d  Bt, pOp->p2, &iM
1cfb0 65 74 61 29 3b 0a 20 20 20 20 74 65 73 74 63 61  eta);.    testca
1cfc0 73 65 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  se( rc==SQLITE_B
1cfd0 55 53 59 5f 53 4e 41 50 53 48 4f 54 20 29 3b 0a  USY_SNAPSHOT );.
1cfe0 20 20 20 20 74 65 73 74 63 61 73 65 28 20 72 63      testcase( rc
1cff0 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 5f 52 45  ==SQLITE_BUSY_RE
1d000 43 4f 56 45 52 59 20 29 3b 0a 20 20 20 20 69 66  COVERY );.    if
1d010 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1d020 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 72 63  ){.      if( (rc
1d030 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 42  &0xff)==SQLITE_B
1d040 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20 70  USY ){.        p
1d050 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70  ->pc = (int)(pOp
1d060 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20 20 20   - aOp);.       
1d070 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 20   p->rc = rc;.   
1d080 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
1d090 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a 20  eturn;.      }. 
1d0a0 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
1d0b0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1d0c0 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 70 4f 70    }..    if( pOp
1d0d0 2d 3e 70 32 20 26 26 20 70 2d 3e 75 73 65 73 53  ->p2 && p->usesS
1d0e0 74 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20 20 20 20  tmtJournal .    
1d0f0 20 26 26 20 28 64 62 2d 3e 61 75 74 6f 43 6f 6d   && (db->autoCom
1d100 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56  mit==0 || db->nV
1d110 64 62 65 52 65 61 64 3e 31 29 20 0a 20 20 20 20  dbeRead>1) .    
1d120 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
1d130 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 73 49   sqlite3BtreeIsI
1d140 6e 54 72 61 6e 73 28 70 42 74 29 20 29 3b 0a 20  nTrans(pBt) );. 
1d150 20 20 20 20 20 69 66 28 20 70 2d 3e 69 53 74 61       if( p->iSta
1d160 74 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20 20 20  tement==0 ){.   
1d170 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d       assert( db-
1d180 3e 6e 53 74 61 74 65 6d 65 6e 74 3e 3d 30 20 26  >nStatement>=0 &
1d190 26 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  & db->nSavepoint
1d1a0 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20 64  >=0 );.        d
1d1b0 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 2b 3b  b->nStatement++;
1d1c0 20 0a 20 20 20 20 20 20 20 20 70 2d 3e 69 53 74   .        p->iSt
1d1d0 61 74 65 6d 65 6e 74 20 3d 20 64 62 2d 3e 6e 53  atement = db->nS
1d1e0 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e  avepoint + db->n
1d1f0 53 74 61 74 65 6d 65 6e 74 3b 0a 20 20 20 20 20  Statement;.     
1d200 20 7d 0a 0a 20 20 20 20 20 20 72 63 20 3d 20 73   }..      rc = s
1d210 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
1d220 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e  int(db, SAVEPOIN
1d230 54 5f 42 45 47 49 4e 2c 20 70 2d 3e 69 53 74 61  T_BEGIN, p->iSta
1d240 74 65 6d 65 6e 74 2d 31 29 3b 0a 20 20 20 20 20  tement-1);.     
1d250 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
1d260 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  OK ){.        rc
1d270 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42   = sqlite3BtreeB
1d280 65 67 69 6e 53 74 6d 74 28 70 42 74 2c 20 70 2d  eginStmt(pBt, p-
1d290 3e 69 53 74 61 74 65 6d 65 6e 74 29 3b 0a 20 20  >iStatement);.  
1d2a0 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20      }..      /* 
1d2b0 53 74 6f 72 65 20 74 68 65 20 63 75 72 72 65 6e  Store the curren
1d2c0 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64  t value of the d
1d2d0 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 73 20  atabase handles 
1d2e0 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61  deferred constra
1d2f0 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20 63 6f 75  int.      ** cou
1d300 6e 74 65 72 2e 20 49 66 20 74 68 65 20 73 74 61  nter. If the sta
1d310 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
1d320 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72  on needs to be r
1d330 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a 20 20 20 20  olled back,.    
1d340 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f    ** the value o
1d350 66 20 74 68 69 73 20 63 6f 75 6e 74 65 72 20 6e  f this counter n
1d360 65 65 64 73 20 74 6f 20 62 65 20 72 65 73 74 6f  eeds to be resto
1d370 72 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a 20 20 20  red too.  */.   
1d380 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 43 6f     p->nStmtDefCo
1d390 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72  ns = db->nDeferr
1d3a0 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 70 2d  edCons;.      p-
1d3b0 3e 6e 53 74 6d 74 44 65 66 49 6d 6d 43 6f 6e 73  >nStmtDefImmCons
1d3c0 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64   = db->nDeferred
1d3d0 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 7d 0a 20  ImmCons;.    }. 
1d3e0 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   }.  assert( pOp
1d3f0 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  ->p5==0 || pOp->
1d400 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
1d410 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   );.  if( pOp->p
1d420 35 0a 20 20 20 26 26 20 28 69 4d 65 74 61 21 3d  5.   && (iMeta!=
1d430 70 4f 70 2d 3e 70 33 0a 20 20 20 20 20 20 7c 7c  pOp->p3.      ||
1d440 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31   db->aDb[pOp->p1
1d450 5d 2e 70 53 63 68 65 6d 61 2d 3e 69 47 65 6e 65  ].pSchema->iGene
1d460 72 61 74 69 6f 6e 21 3d 70 4f 70 2d 3e 70 34 2e  ration!=pOp->p4.
1d470 69 29 0a 20 20 29 7b 0a 20 20 20 20 2f 2a 0a 20  i).  ){.    /*. 
1d480 20 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41     ** IMPLEMENTA
1d490 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30 33 31 38 39  TION-OF: R-03189
1d4a0 2d 35 31 31 33 35 20 41 73 20 65 61 63 68 20 53  -51135 As each S
1d4b0 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 72 75 6e  QL statement run
1d4c0 73 2c 20 74 68 65 20 73 63 68 65 6d 61 0a 20 20  s, the schema.  
1d4d0 20 20 2a 2a 20 76 65 72 73 69 6f 6e 20 69 73 20    ** version is 
1d4e0 63 68 65 63 6b 65 64 20 74 6f 20 65 6e 73 75 72  checked to ensur
1d4f0 65 20 74 68 61 74 20 74 68 65 20 73 63 68 65 6d  e that the schem
1d500 61 20 68 61 73 20 6e 6f 74 20 63 68 61 6e 67 65  a has not change
1d510 64 20 73 69 6e 63 65 20 74 68 65 0a 20 20 20 20  d since the.    
1d520 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  ** SQL statement
1d530 20 77 61 73 20 70 72 65 70 61 72 65 64 2e 0a 20   was prepared.. 
1d540 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65     */.    sqlite
1d550 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a  3DbFree(db, p->z
1d560 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e  ErrMsg);.    p->
1d570 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65  zErrMsg = sqlite
1d580 33 44 62 53 74 72 44 75 70 28 64 62 2c 20 22 64  3DbStrDup(db, "d
1d590 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68  atabase schema h
1d5a0 61 73 20 63 68 61 6e 67 65 64 22 29 3b 0a 20 20  as changed");.  
1d5b0 20 20 2f 2a 20 49 66 20 74 68 65 20 73 63 68 65    /* If the sche
1d5c0 6d 61 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d 20 74  ma-cookie from t
1d5d0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
1d5e0 20 6d 61 74 63 68 65 73 20 74 68 65 20 63 6f 6f   matches the coo
1d5f0 6b 69 65 20 0a 20 20 20 20 2a 2a 20 73 74 6f 72  kie .    ** stor
1d600 65 64 20 77 69 74 68 20 74 68 65 20 69 6e 2d 6d  ed with the in-m
1d610 65 6d 6f 72 79 20 72 65 70 72 65 73 65 6e 74 61  emory representa
1d620 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 68 65  tion of the sche
1d630 6d 61 2c 20 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f  ma, do.    ** no
1d640 74 20 72 65 6c 6f 61 64 20 74 68 65 20 73 63 68  t reload the sch
1d650 65 6d 61 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ema from the dat
1d660 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 20 20  abase file..    
1d670 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20 76 69 72  **.    ** If vir
1d680 74 75 61 6c 2d 74 61 62 6c 65 73 20 61 72 65 20  tual-tables are 
1d690 69 6e 20 75 73 65 2c 20 74 68 69 73 20 69 73 20  in use, this is 
1d6a0 6e 6f 74 20 6a 75 73 74 20 61 6e 20 6f 70 74 69  not just an opti
1d6b0 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a  mization..    **
1d6c0 20 4f 66 74 65 6e 2c 20 76 2d 74 61 62 6c 65 73   Often, v-tables
1d6d0 20 73 74 6f 72 65 20 74 68 65 69 72 20 64 61 74   store their dat
1d6e0 61 20 69 6e 20 6f 74 68 65 72 20 53 51 4c 69 74  a in other SQLit
1d6f0 65 20 74 61 62 6c 65 73 2c 20 77 68 69 63 68 0a  e tables, which.
1d700 20 20 20 20 2a 2a 20 61 72 65 20 71 75 65 72 69      ** are queri
1d710 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 78  ed from within x
1d720 4e 65 78 74 28 29 20 61 6e 64 20 6f 74 68 65 72  Next() and other
1d730 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 73   v-table methods
1d740 20 75 73 69 6e 67 0a 20 20 20 20 2a 2a 20 70 72   using.    ** pr
1d750 65 70 61 72 65 64 20 71 75 65 72 69 65 73 2e 20  epared queries. 
1d760 49 66 20 73 75 63 68 20 61 20 71 75 65 72 79 20  If such a query 
1d770 69 73 20 6f 75 74 2d 6f 66 2d 64 61 74 65 2c 20  is out-of-date, 
1d780 77 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74  we do not want t
1d790 6f 0a 20 20 20 20 2a 2a 20 64 69 73 63 61 72 64  o.    ** discard
1d7a0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
1d7b0 68 65 6d 61 2c 20 61 73 20 74 68 65 20 75 73 65  hema, as the use
1d7c0 72 20 63 6f 64 65 20 69 6d 70 6c 65 6d 65 6e 74  r code implement
1d7d0 69 6e 67 20 74 68 65 0a 20 20 20 20 2a 2a 20 76  ing the.    ** v
1d7e0 2d 74 61 62 6c 65 20 77 6f 75 6c 64 20 68 61 76  -table would hav
1d7f0 65 20 74 6f 20 62 65 20 72 65 61 64 79 20 66 6f  e to be ready fo
1d800 72 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  r the sqlite3_vt
1d810 61 62 20 73 74 72 75 63 74 75 72 65 20 69 74 73  ab structure its
1d820 65 6c 66 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65  elf.    ** to be
1d830 20 69 6e 76 61 6c 69 64 61 74 65 64 20 77 68 65   invalidated whe
1d840 6e 65 76 65 72 20 73 71 6c 69 74 65 33 5f 73 74  never sqlite3_st
1d850 65 70 28 29 20 69 73 20 63 61 6c 6c 65 64 20 66  ep() is called f
1d860 72 6f 6d 20 77 69 74 68 69 6e 20 0a 20 20 20 20  rom within .    
1d870 2a 2a 20 61 20 76 2d 74 61 62 6c 65 20 6d 65 74  ** a v-table met
1d880 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  hod..    */.    
1d890 69 66 28 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  if( db->aDb[pOp-
1d8a0 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63  >p1].pSchema->sc
1d8b0 68 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65  hema_cookie!=iMe
1d8c0 74 61 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ta ){.      sqli
1d8d0 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d  te3ResetOneSchem
1d8e0 61 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  a(db, pOp->p1);.
1d8f0 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e 65 78 70      }.    p->exp
1d900 69 72 65 64 20 3d 20 31 3b 0a 20 20 20 20 72 63  ired = 1;.    rc
1d910 20 3d 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41   = SQLITE_SCHEMA
1d920 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29  ;.  }.  if( rc )
1d930 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1d940 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
1d950 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1d960 20 52 65 61 64 43 6f 6f 6b 69 65 20 50 31 20 50   ReadCookie P1 P
1d970 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52  2 P3 * *.**.** R
1d980 65 61 64 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65  ead cookie numbe
1d990 72 20 50 33 20 66 72 6f 6d 20 64 61 74 61 62 61  r P3 from databa
1d9a0 73 65 20 50 31 20 61 6e 64 20 77 72 69 74 65 20  se P1 and write 
1d9b0 69 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  it into register
1d9c0 20 50 32 2e 0a 2a 2a 20 50 33 3d 3d 31 20 69 73   P2..** P3==1 is
1d9d0 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73   the schema vers
1d9e0 69 6f 6e 2e 20 20 50 33 3d 3d 32 20 69 73 20 74  ion.  P3==2 is t
1d9f0 68 65 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d  he database form
1da00 61 74 2e 0a 2a 2a 20 50 33 3d 3d 33 20 69 73 20  at..** P3==3 is 
1da10 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20  the recommended 
1da20 70 61 67 65 72 20 63 61 63 68 65 20 73 69 7a 65  pager cache size
1da30 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20  , and so forth. 
1da40 20 50 31 3d 3d 30 20 69 73 0a 2a 2a 20 74 68 65   P1==0 is.** the
1da50 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
1da60 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73  ile and P1==1 is
1da70 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
1da80 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  le used to store
1da90 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61  .** temporary ta
1daa0 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72  bles..**.** Ther
1dab0 65 20 6d 75 73 74 20 62 65 20 61 20 72 65 61 64  e must be a read
1dac0 2d 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74  -lock on the dat
1dad0 61 62 61 73 65 20 28 65 69 74 68 65 72 20 61 20  abase (either a 
1dae0 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d  transaction.** m
1daf0 75 73 74 20 62 65 20 73 74 61 72 74 65 64 20 6f  ust be started o
1db00 72 20 74 68 65 72 65 20 6d 75 73 74 20 62 65 20  r there must be 
1db10 61 6e 20 6f 70 65 6e 20 63 75 72 73 6f 72 29 20  an open cursor) 
1db20 62 65 66 6f 72 65 0a 2a 2a 20 65 78 65 63 75 74  before.** execut
1db30 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75 63  ing this instruc
1db40 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
1db50 5f 52 65 61 64 43 6f 6f 6b 69 65 3a 20 7b 20 20  _ReadCookie: {  
1db60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1db70 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 69 4d  out2 */.  int iM
1db80 65 74 61 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a  eta;.  int iDb;.
1db90 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a    int iCookie;..
1dba0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
1dbb0 52 65 61 64 65 72 20 29 3b 0a 20 20 69 44 62 20  Reader );.  iDb 
1dbc0 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 43 6f  = pOp->p1;.  iCo
1dbd0 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  okie = pOp->p3;.
1dbe0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1dbf0 33 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45  3<SQLITE_N_BTREE
1dc00 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72  _META );.  asser
1dc10 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62  t( iDb>=0 && iDb
1dc20 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
1dc30 73 65 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 44  sert( db->aDb[iD
1dc40 62 5d 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61  b].pBt!=0 );.  a
1dc50 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
1dc60 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
1dc70 69 44 62 29 20 29 3b 0a 0a 20 20 73 71 6c 69 74  iDb) );..  sqlit
1dc80 65 33 42 74 72 65 65 47 65 74 4d 65 74 61 28 64  e3BtreeGetMeta(d
1dc90 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c  b->aDb[iDb].pBt,
1dca0 20 69 43 6f 6f 6b 69 65 2c 20 28 75 33 32 20 2a   iCookie, (u32 *
1dcb0 29 26 69 4d 65 74 61 29 3b 0a 20 20 70 4f 75 74  )&iMeta);.  pOut
1dcc0 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
1dcd0 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75  e(p, pOp);.  pOu
1dce0 74 2d 3e 75 2e 69 20 3d 20 69 4d 65 74 61 3b 0a  t->u.i = iMeta;.
1dcf0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1dd00 70 63 6f 64 65 3a 20 53 65 74 43 6f 6f 6b 69 65  pcode: SetCookie
1dd10 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
1dd20 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 69 6e  .** Write the in
1dd30 74 65 67 65 72 20 76 61 6c 75 65 20 50 33 20 69  teger value P3 i
1dd40 6e 74 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65  nto cookie numbe
1dd50 72 20 50 32 20 6f 66 20 64 61 74 61 62 61 73 65  r P2 of database
1dd60 20 50 31 2e 0a 2a 2a 20 50 32 3d 3d 31 20 69 73   P1..** P2==1 is
1dd70 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73   the schema vers
1dd80 69 6f 6e 2e 20 20 50 32 3d 3d 32 20 69 73 20 74  ion.  P2==2 is t
1dd90 68 65 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d  he database form
1dda0 61 74 2e 0a 2a 2a 20 50 32 3d 3d 33 20 69 73 20  at..** P2==3 is 
1ddb0 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20  the recommended 
1ddc0 70 61 67 65 72 20 63 61 63 68 65 20 0a 2a 2a 20  pager cache .** 
1ddd0 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72  size, and so for
1dde0 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 20 74 68  th.  P1==0 is th
1ddf0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
1de00 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69  file and P1==1 i
1de10 73 20 74 68 65 20 0a 2a 2a 20 64 61 74 61 62 61  s the .** databa
1de20 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20  se file used to 
1de30 73 74 6f 72 65 20 74 65 6d 70 6f 72 61 72 79 20  store temporary 
1de40 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20  tables..**.** A 
1de50 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74  transaction must
1de60 20 62 65 20 73 74 61 72 74 65 64 20 62 65 66 6f   be started befo
1de70 72 65 20 65 78 65 63 75 74 69 6e 67 20 74 68 69  re executing thi
1de80 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73  s opcode..*/.cas
1de90 65 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 3a 20  e OP_SetCookie: 
1dea0 7b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20  {.  Db *pDb;..  
1deb0 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57  sqlite3VdbeIncrW
1dec0 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 30  riteCounter(p, 0
1ded0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1dee0 2d 3e 70 32 3c 53 51 4c 49 54 45 5f 4e 5f 42 54  ->p2<SQLITE_N_BT
1def0 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73  REE_META );.  as
1df00 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1df10 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
1df20 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
1df30 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
1df40 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70  treeMask, pOp->p
1df50 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  1) );.  assert( 
1df60 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
1df70 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61  ;.  pDb = &db->a
1df80 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  Db[pOp->p1];.  a
1df90 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21  ssert( pDb->pBt!
1dfa0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1dfb0 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74  sqlite3SchemaMut
1dfc0 65 78 48 65 6c 64 28 64 62 2c 20 70 4f 70 2d 3e  exHeld(db, pOp->
1dfd0 70 31 2c 20 30 29 20 29 3b 0a 20 20 2f 2a 20 53  p1, 0) );.  /* S
1dfe0 65 65 20 6e 6f 74 65 20 61 62 6f 75 74 20 69 6e  ee note about in
1dff0 64 65 78 20 73 68 69 66 74 69 6e 67 20 6f 6e 20  dex shifting on 
1e000 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 20 2a 2f  OP_ReadCookie */
1e010 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
1e020 74 72 65 65 55 70 64 61 74 65 4d 65 74 61 28 70  treeUpdateMeta(p
1e030 44 62 2d 3e 70 42 74 2c 20 70 4f 70 2d 3e 70 32  Db->pBt, pOp->p2
1e040 2c 20 70 4f 70 2d 3e 70 33 29 3b 0a 20 20 69 66  , pOp->p3);.  if
1e050 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45  ( pOp->p2==BTREE
1e060 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 20  _SCHEMA_VERSION 
1e070 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65 6e 20 74  ){.    /* When t
1e080 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  he schema cookie
1e090 20 63 68 61 6e 67 65 73 2c 20 72 65 63 6f 72 64   changes, record
1e0a0 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b 69 65 20   the new cookie 
1e0b0 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a 20 20  internally */.  
1e0c0 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e    pDb->pSchema->
1e0d0 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20  schema_cookie = 
1e0e0 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 64 62 2d  pOp->p3;.    db-
1e0f0 3e 6d 44 62 46 6c 61 67 73 20 7c 3d 20 44 42 46  >mDbFlags |= DBF
1e100 4c 41 47 5f 53 63 68 65 6d 61 43 68 61 6e 67 65  LAG_SchemaChange
1e110 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f  ;.  }else if( pO
1e120 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 46 49 4c  p->p2==BTREE_FIL
1e130 45 5f 46 4f 52 4d 41 54 20 29 7b 0a 20 20 20 20  E_FORMAT ){.    
1e140 2f 2a 20 52 65 63 6f 72 64 20 63 68 61 6e 67 65  /* Record change
1e150 73 20 69 6e 20 74 68 65 20 66 69 6c 65 20 66 6f  s in the file fo
1e160 72 6d 61 74 20 2a 2f 0a 20 20 20 20 70 44 62 2d  rmat */.    pDb-
1e170 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66  >pSchema->file_f
1e180 6f 72 6d 61 74 20 3d 20 70 4f 70 2d 3e 70 33 3b  ormat = pOp->p3;
1e190 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
1e1a0 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20 2f 2a 20  p1==1 ){.    /* 
1e1b0 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 70  Invalidate all p
1e1c0 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
1e1d0 74 73 20 77 68 65 6e 65 76 65 72 20 74 68 65 20  ts whenever the 
1e1e0 54 45 4d 50 20 64 61 74 61 62 61 73 65 0a 20 20  TEMP database.  
1e1f0 20 20 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 63    ** schema is c
1e200 68 61 6e 67 65 64 2e 20 20 54 69 63 6b 65 74 20  hanged.  Ticket 
1e210 23 31 36 34 34 20 2a 2f 0a 20 20 20 20 73 71 6c  #1644 */.    sql
1e220 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72  ite3ExpirePrepar
1e230 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 2c  edStatements(db,
1e240 20 30 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69   0);.    p->expi
1e250 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69  red = 0;.  }.  i
1e260 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
1e270 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1e280 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1e290 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64  Opcode: OpenRead
1e2a0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
1e2b0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f  ** Synopsis: roo
1e2c0 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a  t=P2 iDb=P3.**.*
1e2d0 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2d 6f 6e  * Open a read-on
1e2e0 6c 79 20 63 75 72 73 6f 72 20 66 6f 72 20 74 68  ly cursor for th
1e2f0 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
1e300 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65   whose root page
1e310 20 69 73 0a 2a 2a 20 50 32 20 69 6e 20 61 20 64   is.** P2 in a d
1e320 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54  atabase file.  T
1e330 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
1e340 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
1e350 79 20 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20  y P3. .** P3==0 
1e360 6d 65 61 6e 73 20 74 68 65 20 6d 61 69 6e 20 64  means the main d
1e370 61 74 61 62 61 73 65 2c 20 50 33 3d 3d 31 20 6d  atabase, P3==1 m
1e380 65 61 6e 73 20 74 68 65 20 64 61 74 61 62 61 73  eans the databas
1e390 65 20 75 73 65 64 20 66 6f 72 20 0a 2a 2a 20 74  e used for .** t
1e3a0 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2c  emporary tables,
1e3b0 20 61 6e 64 20 50 33 3e 31 20 6d 65 61 6e 73 20   and P3>1 means 
1e3c0 75 73 65 64 20 74 68 65 20 63 6f 72 72 65 73 70  used the corresp
1e3d0 6f 6e 64 69 6e 67 20 61 74 74 61 63 68 65 64 0a  onding attached.
1e3e0 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 20 47 69  ** database.  Gi
1e3f0 76 65 20 74 68 65 20 6e 65 77 20 63 75 72 73 6f  ve the new curso
1e400 72 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20  r an identifier 
1e410 6f 66 20 50 31 2e 20 20 54 68 65 20 50 31 0a 2a  of P1.  The P1.*
1e420 2a 20 76 61 6c 75 65 73 20 6e 65 65 64 20 6e 6f  * values need no
1e430 74 20 62 65 20 63 6f 6e 74 69 67 75 6f 75 73 20  t be contiguous 
1e440 62 75 74 20 61 6c 6c 20 50 31 20 76 61 6c 75 65  but all P1 value
1e450 73 20 73 68 6f 75 6c 64 20 62 65 20 73 6d 61 6c  s should be smal
1e460 6c 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 49  l integers..** I
1e470 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f  t is an error fo
1e480 72 20 50 31 20 74 6f 20 62 65 20 6e 65 67 61 74  r P1 to be negat
1e490 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 77  ive..**.** Allow
1e4a0 65 64 20 50 35 20 62 69 74 73 3a 0a 2a 2a 20 3c  ed P5 bits:.** <
1e4b0 75 6c 3e 0a 2a 2a 20 3c 6c 69 3e 20 20 3c 62 3e  ul>.** <li>  <b>
1e4c0 30 78 30 32 20 4f 50 46 4c 41 47 5f 53 45 45 4b  0x02 OPFLAG_SEEK
1e4d0 45 51 3c 2f 62 3e 3a 20 54 68 69 73 20 63 75 72  EQ</b>: This cur
1e4e0 73 6f 72 20 77 69 6c 6c 20 6f 6e 6c 79 20 62 65  sor will only be
1e4f0 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 20 20 20   used for.**    
1e500 20 20 20 65 71 75 61 6c 69 74 79 20 6c 6f 6f 6b     equality look
1e510 75 70 73 20 28 69 6d 70 6c 65 6d 65 6e 74 65 64  ups (implemented
1e520 20 61 73 20 61 20 70 61 69 72 20 6f 66 20 6f 70   as a pair of op
1e530 63 6f 64 65 73 20 4f 50 5f 53 65 65 6b 47 45 2f  codes OP_SeekGE/
1e540 4f 50 5f 49 64 78 47 54 0a 2a 2a 20 20 20 20 20  OP_IdxGT.**     
1e550 20 20 6f 66 20 4f 50 5f 53 65 65 6b 4c 45 2f 4f    of OP_SeekLE/O
1e560 50 5f 49 64 78 47 54 29 0a 2a 2a 20 3c 2f 75 6c  P_IdxGT).** </ul
1e570 3e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76  >.**.** The P4 v
1e580 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74 68  alue may be eith
1e590 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50  er an integer (P
1e5a0 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f  4_INT32) or a po
1e5b0 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65  inter to.** a Ke
1e5c0 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20  yInfo structure 
1e5d0 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66  (P4_KEYINFO). If
1e5e0 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72   it is a pointer
1e5f0 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a   to a KeyInfo .*
1e600 2a 20 6f 62 6a 65 63 74 2c 20 74 68 65 6e 20 74  * object, then t
1e610 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 6e 65  able being opene
1e620 64 20 6d 75 73 74 20 62 65 20 61 6e 20 5b 69 6e  d must be an [in
1e630 64 65 78 20 62 2d 74 72 65 65 5d 20 77 68 65 72  dex b-tree] wher
1e640 65 20 74 68 65 0a 2a 2a 20 4b 65 79 49 6e 66 6f  e the.** KeyInfo
1e650 20 6f 62 6a 65 63 74 20 64 65 66 69 6e 65 73 20   object defines 
1e660 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20  the content and 
1e670 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65  collating .** se
1e680 71 75 65 6e 63 65 20 6f 66 20 74 68 61 74 20 69  quence of that i
1e690 6e 64 65 78 20 62 2d 74 72 65 65 2e 20 4f 74 68  ndex b-tree. Oth
1e6a0 65 72 77 69 73 65 2c 20 69 66 20 50 34 20 69 73  erwise, if P4 is
1e6b0 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20   an integer .** 
1e6c0 76 61 6c 75 65 2c 20 74 68 65 6e 20 74 68 65 20  value, then the 
1e6d0 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 6e  table being open
1e6e0 65 64 20 6d 75 73 74 20 62 65 20 61 20 5b 74 61  ed must be a [ta
1e6f0 62 6c 65 20 62 2d 74 72 65 65 5d 20 77 69 74 68  ble b-tree] with
1e700 20 61 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20   a.** number of 
1e710 63 6f 6c 75 6d 6e 73 20 6e 6f 20 6c 65 73 73 20  columns no less 
1e720 74 68 61 6e 20 74 68 65 20 76 61 6c 75 65 20 6f  than the value o
1e730 66 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  f P4..**.** See 
1e740 61 6c 73 6f 3a 20 4f 70 65 6e 57 72 69 74 65 2c  also: OpenWrite,
1e750 20 52 65 6f 70 65 6e 49 64 78 0a 2a 2f 0a 2f 2a   ReopenIdx.*/./*
1e760 20 4f 70 63 6f 64 65 3a 20 52 65 6f 70 65 6e 49   Opcode: ReopenI
1e770 64 78 20 50 31 20 50 32 20 50 33 20 50 34 20 50  dx P1 P2 P3 P4 P
1e780 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  5.** Synopsis: r
1e790 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a  oot=P2 iDb=P3.**
1e7a0 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e 49 64  .** The ReopenId
1e7b0 78 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6c  x opcode works l
1e7c0 69 6b 65 20 4f 50 5f 4f 70 65 6e 52 65 61 64 20  ike OP_OpenRead 
1e7d0 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20 66  except that it f
1e7e0 69 72 73 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74  irst.** checks t
1e7f0 6f 20 73 65 65 20 69 66 20 74 68 65 20 63 75 72  o see if the cur
1e800 73 6f 72 20 6f 6e 20 50 31 20 69 73 20 61 6c 72  sor on P1 is alr
1e810 65 61 64 79 20 6f 70 65 6e 20 6f 6e 20 74 68 65  eady open on the
1e820 20 73 61 6d 65 0a 2a 2a 20 62 2d 74 72 65 65 20   same.** b-tree 
1e830 61 6e 64 20 69 66 20 69 74 20 69 73 20 74 68 69  and if it is thi
1e840 73 20 6f 70 63 6f 64 65 20 62 65 63 6f 6d 65 73  s opcode becomes
1e850 20 61 20 6e 6f 2d 6f 70 2e 20 20 49 6e 20 6f 74   a no-op.  In ot
1e860 68 65 72 20 77 6f 72 64 73 2c 0a 2a 2a 20 69 66  her words,.** if
1e870 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 61   the cursor is a
1e880 6c 72 65 61 64 79 20 6f 70 65 6e 2c 20 64 6f 20  lready open, do 
1e890 6e 6f 74 20 72 65 6f 70 65 6e 20 69 74 2e 0a 2a  not reopen it..*
1e8a0 2a 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e 49  *.** The ReopenI
1e8b0 64 78 20 6f 70 63 6f 64 65 20 6d 61 79 20 6f 6e  dx opcode may on
1e8c0 6c 79 20 62 65 20 75 73 65 64 20 77 69 74 68 20  ly be used with 
1e8d0 50 35 3d 3d 30 20 6f 72 20 50 35 3d 3d 4f 50 46  P5==0 or P5==OPF
1e8e0 4c 41 47 5f 53 45 45 4b 45 51 0a 2a 2a 20 61 6e  LAG_SEEKEQ.** an
1e8f0 64 20 77 69 74 68 20 50 34 20 62 65 69 6e 67 20  d with P4 being 
1e900 61 20 50 34 5f 4b 45 59 49 4e 46 4f 20 6f 62 6a  a P4_KEYINFO obj
1e910 65 63 74 2e 20 20 46 75 72 74 68 65 72 6d 6f 72  ect.  Furthermor
1e920 65 2c 20 74 68 65 20 50 33 20 76 61 6c 75 65 20  e, the P3 value 
1e930 6d 75 73 74 0a 2a 2a 20 62 65 20 74 68 65 20 73  must.** be the s
1e940 61 6d 65 20 61 73 20 65 76 65 72 79 20 6f 74 68  ame as every oth
1e950 65 72 20 52 65 6f 70 65 6e 49 64 78 20 6f 72 20  er ReopenIdx or 
1e960 4f 70 65 6e 52 65 61 64 20 66 6f 72 20 74 68 65  OpenRead for the
1e970 20 73 61 6d 65 20 63 75 72 73 6f 72 0a 2a 2a 20   same cursor.** 
1e980 6e 75 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 6c  number..**.** Al
1e990 6c 6f 77 65 64 20 50 35 20 62 69 74 73 3a 0a 2a  lowed P5 bits:.*
1e9a0 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69 3e 20 20  * <ul>.** <li>  
1e9b0 3c 62 3e 30 78 30 32 20 4f 50 46 4c 41 47 5f 53  <b>0x02 OPFLAG_S
1e9c0 45 45 4b 45 51 3c 2f 62 3e 3a 20 54 68 69 73 20  EEKEQ</b>: This 
1e9d0 63 75 72 73 6f 72 20 77 69 6c 6c 20 6f 6e 6c 79  cursor will only
1e9e0 20 62 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20   be used for.** 
1e9f0 20 20 20 20 20 20 65 71 75 61 6c 69 74 79 20 6c        equality l
1ea00 6f 6f 6b 75 70 73 20 28 69 6d 70 6c 65 6d 65 6e  ookups (implemen
1ea10 74 65 64 20 61 73 20 61 20 70 61 69 72 20 6f 66  ted as a pair of
1ea20 20 6f 70 63 6f 64 65 73 20 4f 50 5f 53 65 65 6b   opcodes OP_Seek
1ea30 47 45 2f 4f 50 5f 49 64 78 47 54 0a 2a 2a 20 20  GE/OP_IdxGT.**  
1ea40 20 20 20 20 20 6f 66 20 4f 50 5f 53 65 65 6b 4c       of OP_SeekL
1ea50 45 2f 4f 50 5f 49 64 78 47 54 29 0a 2a 2a 20 3c  E/OP_IdxGT).** <
1ea60 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  /ul>.**.** See a
1ea70 6c 73 6f 3a 20 4f 50 5f 4f 70 65 6e 52 65 61 64  lso: OP_OpenRead
1ea80 2c 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65 0a 2a  , OP_OpenWrite.*
1ea90 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  /./* Opcode: Ope
1eaa0 6e 57 72 69 74 65 20 50 31 20 50 32 20 50 33 20  nWrite P1 P2 P3 
1eab0 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
1eac0 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50  s: root=P2 iDb=P
1ead0 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72  3.**.** Open a r
1eae0 65 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72  ead/write cursor
1eaf0 20 6e 61 6d 65 64 20 50 31 20 6f 6e 20 74 68 65   named P1 on the
1eb00 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
1eb10 77 68 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20 70 61  whose root.** pa
1eb20 67 65 20 69 73 20 50 32 20 28 6f 72 20 77 68 6f  ge is P2 (or who
1eb30 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69 73 20  se root page is 
1eb40 68 65 6c 64 20 69 6e 20 72 65 67 69 73 74 65 72  held in register
1eb50 20 50 32 20 69 66 20 74 68 65 0a 2a 2a 20 4f 50   P2 if the.** OP
1eb60 46 4c 41 47 5f 50 32 49 53 52 45 47 20 62 69 74  FLAG_P2ISREG bit
1eb70 20 69 73 20 73 65 74 20 69 6e 20 50 35 20 2d 20   is set in P5 - 
1eb80 73 65 65 20 62 65 6c 6f 77 29 2e 0a 2a 2a 0a 2a  see below)..**.*
1eb90 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d  * The P4 value m
1eba0 61 79 20 62 65 20 65 69 74 68 65 72 20 61 6e 20  ay be either an 
1ebb0 69 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33  integer (P4_INT3
1ebc0 32 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20  2) or a pointer 
1ebd0 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20  to.** a KeyInfo 
1ebe0 73 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45  structure (P4_KE
1ebf0 59 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73  YINFO). If it is
1ec00 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
1ec10 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 6f 62 6a 65  KeyInfo .** obje
1ec20 63 74 2c 20 74 68 65 6e 20 74 61 62 6c 65 20 62  ct, then table b
1ec30 65 69 6e 67 20 6f 70 65 6e 65 64 20 6d 75 73 74  eing opened must
1ec40 20 62 65 20 61 6e 20 5b 69 6e 64 65 78 20 62 2d   be an [index b-
1ec50 74 72 65 65 5d 20 77 68 65 72 65 20 74 68 65 0a  tree] where the.
1ec60 2a 2a 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63  ** KeyInfo objec
1ec70 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f  t defines the co
1ec80 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74  ntent and collat
1ec90 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65  ing .** sequence
1eca0 20 6f 66 20 74 68 61 74 20 69 6e 64 65 78 20 62   of that index b
1ecb0 2d 74 72 65 65 2e 20 4f 74 68 65 72 77 69 73 65  -tree. Otherwise
1ecc0 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20 69 6e  , if P4 is an in
1ecd0 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c  teger .** value,
1ece0 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
1ecf0 62 65 69 6e 67 20 6f 70 65 6e 65 64 20 6d 75 73  being opened mus
1ed00 74 20 62 65 20 61 20 5b 74 61 62 6c 65 20 62 2d  t be a [table b-
1ed10 74 72 65 65 5d 20 77 69 74 68 20 61 0a 2a 2a 20  tree] with a.** 
1ed20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
1ed30 73 20 6e 6f 20 6c 65 73 73 20 74 68 61 6e 20 74  s no less than t
1ed40 68 65 20 76 61 6c 75 65 20 6f 66 20 50 34 2e 0a  he value of P4..
1ed50 2a 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 50 35  **.** Allowed P5
1ed60 20 62 69 74 73 3a 0a 2a 2a 20 3c 75 6c 3e 0a 2a   bits:.** <ul>.*
1ed70 2a 20 3c 6c 69 3e 20 20 3c 62 3e 30 78 30 32 20  * <li>  <b>0x02 
1ed80 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 3c 2f 62  OPFLAG_SEEKEQ</b
1ed90 3e 3a 20 54 68 69 73 20 63 75 72 73 6f 72 20 77  >: This cursor w
1eda0 69 6c 6c 20 6f 6e 6c 79 20 62 65 20 75 73 65 64  ill only be used
1edb0 20 66 6f 72 0a 2a 2a 20 20 20 20 20 20 20 65 71   for.**       eq
1edc0 75 61 6c 69 74 79 20 6c 6f 6f 6b 75 70 73 20 28  uality lookups (
1edd0 69 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61  implemented as a
1ede0 20 70 61 69 72 20 6f 66 20 6f 70 63 6f 64 65 73   pair of opcodes
1edf0 20 4f 50 5f 53 65 65 6b 47 45 2f 4f 50 5f 49 64   OP_SeekGE/OP_Id
1ee00 78 47 54 0a 2a 2a 20 20 20 20 20 20 20 6f 66 20  xGT.**       of 
1ee10 4f 50 5f 53 65 65 6b 4c 45 2f 4f 50 5f 49 64 78  OP_SeekLE/OP_Idx
1ee20 47 54 29 0a 2a 2a 20 3c 6c 69 3e 20 20 3c 62 3e  GT).** <li>  <b>
1ee30 30 78 30 38 20 4f 50 46 4c 41 47 5f 46 4f 52 44  0x08 OPFLAG_FORD
1ee40 45 4c 45 54 45 3c 2f 62 3e 3a 20 54 68 69 73 20  ELETE</b>: This 
1ee50 63 75 72 73 6f 72 20 69 73 20 75 73 65 64 20 6f  cursor is used o
1ee60 6e 6c 79 20 74 6f 20 73 65 65 6b 0a 2a 2a 20 20  nly to seek.**  
1ee70 20 20 20 20 20 61 6e 64 20 73 75 62 73 65 71 75       and subsequ
1ee80 65 6e 74 6c 79 20 64 65 6c 65 74 65 20 65 6e 74  ently delete ent
1ee90 72 69 65 73 20 69 6e 20 61 6e 20 69 6e 64 65 78  ries in an index
1eea0 20 62 74 72 65 65 2e 20 20 54 68 69 73 20 69 73   btree.  This is
1eeb0 20 61 0a 2a 2a 20 20 20 20 20 20 20 68 69 6e 74   a.**       hint
1eec0 20 74 6f 20 74 68 65 20 73 74 6f 72 61 67 65 20   to the storage 
1eed0 65 6e 67 69 6e 65 20 74 68 61 74 20 74 68 65 20  engine that the 
1eee0 73 74 6f 72 61 67 65 20 65 6e 67 69 6e 65 20 69  storage engine i
1eef0 73 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 2a 2a 20  s allowed to.** 
1ef00 20 20 20 20 20 20 69 67 6e 6f 72 65 2e 20 20 54        ignore.  T
1ef10 68 65 20 68 69 6e 74 20 69 73 20 6e 6f 74 20 75  he hint is not u
1ef20 73 65 64 20 62 79 20 74 68 65 20 6f 66 66 69 63  sed by the offic
1ef30 69 61 6c 20 53 51 4c 69 74 65 20 62 2a 74 72 65  ial SQLite b*tre
1ef40 65 20 73 74 6f 72 61 67 65 0a 2a 2a 20 20 20 20  e storage.**    
1ef50 20 20 20 65 6e 67 69 6e 65 2c 20 62 75 74 20 69     engine, but i
1ef60 73 20 75 73 65 64 20 62 79 20 43 4f 4d 44 42 32  s used by COMDB2
1ef70 2e 0a 2a 2a 20 3c 6c 69 3e 20 20 3c 62 3e 30 78  ..** <li>  <b>0x
1ef80 31 30 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45  10 OPFLAG_P2ISRE
1ef90 47 3c 2f 62 3e 3a 20 55 73 65 20 74 68 65 20 63  G</b>: Use the c
1efa0 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
1efb0 65 72 20 50 32 0a 2a 2a 20 20 20 20 20 20 20 61  er P2.**       a
1efc0 73 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 2c  s the root page,
1efd0 20 6e 6f 74 20 74 68 65 20 76 61 6c 75 65 20 6f   not the value o
1efe0 66 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a 2a 20  f P2 itself..** 
1eff0 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  </ul>.**.** This
1f000 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 6f 72   instruction wor
1f010 6b 73 20 6c 69 6b 65 20 4f 70 65 6e 52 65 61 64  ks like OpenRead
1f020 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20   except that it 
1f030 6f 70 65 6e 73 20 74 68 65 20 63 75 72 73 6f 72  opens the cursor
1f040 0a 2a 2a 20 69 6e 20 72 65 61 64 2f 77 72 69 74  .** in read/writ
1f050 65 20 6d 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65  e mode..**.** Se
1f060 65 20 61 6c 73 6f 3a 20 4f 50 5f 4f 70 65 6e 52  e also: OP_OpenR
1f070 65 61 64 2c 20 4f 50 5f 52 65 6f 70 65 6e 49 64  ead, OP_ReopenId
1f080 78 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6f  x.*/.case OP_Reo
1f090 70 65 6e 49 64 78 3a 20 7b 0a 20 20 69 6e 74 20  penIdx: {.  int 
1f0a0 6e 46 69 65 6c 64 3b 0a 20 20 4b 65 79 49 6e 66  nField;.  KeyInf
1f0b0 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69  o *pKeyInfo;.  i
1f0c0 6e 74 20 70 32 3b 0a 20 20 69 6e 74 20 69 44 62  nt p2;.  int iDb
1f0d0 3b 0a 20 20 69 6e 74 20 77 72 46 6c 61 67 3b 0a  ;.  int wrFlag;.
1f0e0 20 20 42 74 72 65 65 20 2a 70 58 3b 0a 20 20 56    Btree *pX;.  V
1f0f0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b  dbeCursor *pCur;
1f100 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 61  .  Db *pDb;..  a
1f110 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d  ssert( pOp->p5==
1f120 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 50  0 || pOp->p5==OP
1f130 46 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a 20  FLAG_SEEKEQ );. 
1f140 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
1f150 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f  type==P4_KEYINFO
1f160 20 29 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e   );.  pCur = p->
1f170 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
1f180 20 20 69 66 28 20 70 43 75 72 20 26 26 20 70 43    if( pCur && pC
1f190 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74 3d 3d 28 75  ur->pgnoRoot==(u
1f1a0 33 32 29 70 4f 70 2d 3e 70 32 20 29 7b 0a 20 20  32)pOp->p2 ){.  
1f1b0 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e    assert( pCur->
1f1c0 69 44 62 3d 3d 70 4f 70 2d 3e 70 33 20 29 3b 20  iDb==pOp->p3 ); 
1f1d0 20 20 20 20 20 2f 2a 20 47 75 61 72 61 6e 74 65       /* Guarante
1f1e0 65 64 20 62 79 20 74 68 65 20 63 6f 64 65 20 67  ed by the code g
1f1f0 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 20 20  enerator */.    
1f200 67 6f 74 6f 20 6f 70 65 6e 5f 63 75 72 73 6f 72  goto open_cursor
1f210 5f 73 65 74 5f 68 69 6e 74 73 3b 0a 20 20 7d 0a  _set_hints;.  }.
1f220 20 20 2f 2a 20 49 66 20 74 68 65 20 63 75 72 73    /* If the curs
1f230 6f 72 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e  or is not curren
1f240 74 6c 79 20 6f 70 65 6e 20 6f 72 20 69 73 20 6f  tly open or is o
1f250 70 65 6e 20 6f 6e 20 61 20 64 69 66 66 65 72 65  pen on a differe
1f260 6e 74 0a 20 20 2a 2a 20 69 6e 64 65 78 2c 20 74  nt.  ** index, t
1f270 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  hen fall through
1f280 20 69 6e 74 6f 20 4f 50 5f 4f 70 65 6e 52 65 61   into OP_OpenRea
1f290 64 20 74 6f 20 66 6f 72 63 65 20 61 20 72 65 6f  d to force a reo
1f2a0 70 65 6e 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  pen */.case OP_O
1f2b0 70 65 6e 52 65 61 64 3a 0a 63 61 73 65 20 4f 50  penRead:.case OP
1f2c0 5f 4f 70 65 6e 57 72 69 74 65 3a 0a 0a 20 20 61  _OpenWrite:..  a
1f2d0 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
1f2e0 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65  de==OP_OpenWrite
1f2f0 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c   || pOp->p5==0 |
1f300 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41  | pOp->p5==OPFLA
1f310 47 5f 53 45 45 4b 45 51 20 29 3b 0a 20 20 61 73  G_SEEKEQ );.  as
1f320 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
1f330 65 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  er );.  assert( 
1f340 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
1f350 4f 70 65 6e 52 65 61 64 20 7c 7c 20 70 4f 70 2d  OpenRead || pOp-
1f360 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 65 6f 70  >opcode==OP_Reop
1f370 65 6e 49 64 78 0a 20 20 20 20 20 20 20 20 20 20  enIdx.          
1f380 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  || p->readOnly==
1f390 30 20 29 3b 0a 0a 20 20 69 66 28 20 70 2d 3e 65  0 );..  if( p->e
1f3a0 78 70 69 72 65 64 3d 3d 31 20 29 7b 0a 20 20 20  xpired==1 ){.   
1f3b0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 41 42 4f   rc = SQLITE_ABO
1f3c0 52 54 5f 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20  RT_ROLLBACK;.   
1f3d0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1f3e0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20  to_error;.  }.. 
1f3f0 20 6e 46 69 65 6c 64 20 3d 20 30 3b 0a 20 20 70   nField = 0;.  p
1f400 4b 65 79 49 6e 66 6f 20 3d 20 30 3b 0a 20 20 70  KeyInfo = 0;.  p
1f410 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 69  2 = pOp->p2;.  i
1f420 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  Db = pOp->p3;.  
1f430 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26  assert( iDb>=0 &
1f440 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b  & iDb<db->nDb );
1f450 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73  .  assert( DbMas
1f460 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
1f470 73 6b 2c 20 69 44 62 29 20 29 3b 0a 20 20 70 44  sk, iDb) );.  pD
1f480 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44 62  b = &db->aDb[iDb
1f490 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d 3e 70  ];.  pX = pDb->p
1f4a0 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70 58  Bt;.  assert( pX
1f4b0 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  !=0 );.  if( pOp
1f4c0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65  ->opcode==OP_Ope
1f4d0 6e 57 72 69 74 65 20 29 7b 0a 20 20 20 20 61 73  nWrite ){.    as
1f4e0 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 46 4f 52  sert( OPFLAG_FOR
1f4f0 44 45 4c 45 54 45 3d 3d 42 54 52 45 45 5f 46 4f  DELETE==BTREE_FO
1f500 52 44 45 4c 45 54 45 20 29 3b 0a 20 20 20 20 77  RDELETE );.    w
1f510 72 46 6c 61 67 20 3d 20 42 54 52 45 45 5f 57 52  rFlag = BTREE_WR
1f520 43 53 52 20 7c 20 28 70 4f 70 2d 3e 70 35 20 26  CSR | (pOp->p5 &
1f530 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54   OPFLAG_FORDELET
1f540 45 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  E);.    assert( 
1f550 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74  sqlite3SchemaMut
1f560 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20  exHeld(db, iDb, 
1f570 30 29 20 29 3b 0a 20 20 20 20 69 66 28 20 70 44  0) );.    if( pD
1f580 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65  b->pSchema->file
1f590 5f 66 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d 69 6e  _format < p->min
1f5a0 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20  WriteFileFormat 
1f5b0 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 69 6e 57  ){.      p->minW
1f5c0 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 3d  riteFileFormat =
1f5d0 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66   pDb->pSchema->f
1f5e0 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20 20 20 20  ile_format;.    
1f5f0 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 77  }.  }else{.    w
1f600 72 46 6c 61 67 20 3d 20 30 3b 0a 20 20 7d 0a 20  rFlag = 0;.  }. 
1f610 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f   if( pOp->p5 & O
1f620 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20 29 7b  PFLAG_P2ISREG ){
1f630 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e  .    assert( p2>
1f640 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  0 );.    assert(
1f650 20 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20   p2<=(p->nMem+1 
1f660 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
1f670 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
1f680 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65  ->opcode==OP_Ope
1f690 6e 57 72 69 74 65 20 29 3b 0a 20 20 20 20 70 49  nWrite );.    pI
1f6a0 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a  n2 = &aMem[p2];.
1f6b0 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
1f6c0 73 56 61 6c 69 64 28 70 49 6e 32 29 20 29 3b 0a  sValid(pIn2) );.
1f6d0 20 20 20 20 61 73 73 65 72 74 28 20 28 70 49 6e      assert( (pIn
1f6e0 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  2->flags & MEM_I
1f6f0 6e 74 29 21 3d 30 20 29 3b 0a 20 20 20 20 73 71  nt)!=0 );.    sq
1f700 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
1f710 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20  gerify(pIn2);.  
1f720 20 20 70 32 20 3d 20 28 69 6e 74 29 70 49 6e 32    p2 = (int)pIn2
1f730 2d 3e 75 2e 69 3b 0a 20 20 20 20 2f 2a 20 54 68  ->u.i;.    /* Th
1f740 65 20 70 32 20 76 61 6c 75 65 20 61 6c 77 61 79  e p2 value alway
1f750 73 20 63 6f 6d 65 73 20 66 72 6f 6d 20 61 20 70  s comes from a p
1f760 72 69 6f 72 20 4f 50 5f 43 72 65 61 74 65 42 74  rior OP_CreateBt
1f770 72 65 65 20 6f 70 63 6f 64 65 20 61 6e 64 0a 20  ree opcode and. 
1f780 20 20 20 2a 2a 20 74 68 61 74 20 6f 70 63 6f 64     ** that opcod
1f790 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 73 65  e will always se
1f7a0 74 20 74 68 65 20 70 32 20 76 61 6c 75 65 20 74  t the p2 value t
1f7b0 6f 20 32 20 6f 72 20 6d 6f 72 65 20 6f 72 20 65  o 2 or more or e
1f7c0 6c 73 65 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a  lse fail..    **
1f7d0 20 49 66 20 74 68 65 72 65 20 77 65 72 65 20 61   If there were a
1f7e0 20 66 61 69 6c 75 72 65 2c 20 74 68 65 20 70 72   failure, the pr
1f7f0 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
1f800 20 77 6f 75 6c 64 20 68 61 76 65 20 68 61 6c 74   would have halt
1f810 65 64 0a 20 20 20 20 2a 2a 20 62 65 66 6f 72 65  ed.    ** before
1f820 20 72 65 61 63 68 69 6e 67 20 74 68 69 73 20 69   reaching this i
1f830 6e 73 74 72 75 63 74 69 6f 6e 2e 20 2a 2f 0a 20  nstruction. */. 
1f840 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 3d 32     assert( p2>=2
1f850 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f   );.  }.  if( pO
1f860 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45  p->p4type==P4_KE
1f870 59 49 4e 46 4f 20 29 7b 0a 20 20 20 20 70 4b 65  YINFO ){.    pKe
1f880 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e  yInfo = pOp->p4.
1f890 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 61 73  pKeyInfo;.    as
1f8a0 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e  sert( pKeyInfo->
1f8b0 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a  enc==ENC(db) );.
1f8c0 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79      assert( pKey
1f8d0 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a  Info->db==db );.
1f8e0 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4b 65      nField = pKe
1f8f0 79 49 6e 66 6f 2d 3e 6e 41 6c 6c 46 69 65 6c 64  yInfo->nAllField
1f900 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f  ;.  }else if( pO
1f910 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
1f920 54 33 32 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c  T32 ){.    nFiel
1f930 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  d = pOp->p4.i;. 
1f940 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   }.  assert( pOp
1f950 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73  ->p1>=0 );.  ass
1f960 65 72 74 28 20 6e 46 69 65 6c 64 3e 3d 30 20 29  ert( nField>=0 )
1f970 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 46  ;.  testcase( nF
1f980 69 65 6c 64 3d 3d 30 20 29 3b 20 20 2f 2a 20 54  ield==0 );  /* T
1f990 61 62 6c 65 20 77 69 74 68 20 49 4e 54 45 47 45  able with INTEGE
1f9a0 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 6e  R PRIMARY KEY an
1f9b0 64 20 6e 6f 74 68 69 6e 67 20 65 6c 73 65 20 2a  d nothing else *
1f9c0 2f 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63  /.  pCur = alloc
1f9d0 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
1f9e0 2d 3e 70 31 2c 20 6e 46 69 65 6c 64 2c 20 69 44  ->p1, nField, iD
1f9f0 62 2c 20 43 55 52 54 59 50 45 5f 42 54 52 45 45  b, CURTYPE_BTREE
1fa00 29 3b 0a 20 20 69 66 28 20 70 43 75 72 3d 3d 30  );.  if( pCur==0
1fa10 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
1fa20 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20    pCur->nullRow 
1fa30 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e 69 73 4f  = 1;.  pCur->isO
1fa40 72 64 65 72 65 64 20 3d 20 31 3b 0a 20 20 70 43  rdered = 1;.  pC
1fa50 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d 20 70  ur->pgnoRoot = p
1fa60 32 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  2;.#ifdef SQLITE
1fa70 5f 44 45 42 55 47 0a 20 20 70 43 75 72 2d 3e 77  _DEBUG.  pCur->w
1fa80 72 46 6c 61 67 20 3d 20 77 72 46 6c 61 67 3b 0a  rFlag = wrFlag;.
1fa90 23 65 6e 64 69 66 0a 20 20 72 63 20 3d 20 73 71  #endif.  rc = sq
1faa0 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
1fab0 28 70 58 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c  (pX, p2, wrFlag,
1fac0 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 75 72 2d   pKeyInfo, pCur-
1fad0 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20  >uc.pCursor);.  
1fae0 70 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d  pCur->pKeyInfo =
1faf0 20 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 2f 2a 20   pKeyInfo;.  /* 
1fb00 53 65 74 20 74 68 65 20 56 64 62 65 43 75 72 73  Set the VdbeCurs
1fb10 6f 72 2e 69 73 54 61 62 6c 65 20 76 61 72 69 61  or.isTable varia
1fb20 62 6c 65 2e 20 50 72 65 76 69 6f 75 73 20 76 65  ble. Previous ve
1fb30 72 73 69 6f 6e 73 20 6f 66 0a 20 20 2a 2a 20 53  rsions of.  ** S
1fb40 51 4c 69 74 65 20 75 73 65 64 20 74 6f 20 63 68  QLite used to ch
1fb50 65 63 6b 20 69 66 20 74 68 65 20 72 6f 6f 74 2d  eck if the root-
1fb60 70 61 67 65 20 66 6c 61 67 73 20 77 65 72 65 20  page flags were 
1fb70 73 61 6e 65 20 61 74 20 74 68 69 73 20 70 6f 69  sane at this poi
1fb80 6e 74 0a 20 20 2a 2a 20 61 6e 64 20 72 65 70 6f  nt.  ** and repo
1fb90 72 74 20 64 61 74 61 62 61 73 65 20 63 6f 72 72  rt database corr
1fba0 75 70 74 69 6f 6e 20 69 66 20 74 68 65 79 20 77  uption if they w
1fbb0 65 72 65 20 6e 6f 74 2c 20 62 75 74 20 74 68 69  ere not, but thi
1fbc0 73 20 63 68 65 63 6b 20 68 61 73 0a 20 20 2a 2a  s check has.  **
1fbd0 20 73 69 6e 63 65 20 6d 6f 76 65 64 20 69 6e 74   since moved int
1fbe0 6f 20 74 68 65 20 62 74 72 65 65 20 6c 61 79 65  o the btree laye
1fbf0 72 2e 20 20 2a 2f 20 20 0a 20 20 70 43 75 72 2d  r.  */  .  pCur-
1fc00 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f 70 2d 3e  >isTable = pOp->
1fc10 70 34 74 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e  p4type!=P4_KEYIN
1fc20 46 4f 3b 0a 0a 6f 70 65 6e 5f 63 75 72 73 6f 72  FO;..open_cursor
1fc30 5f 73 65 74 5f 68 69 6e 74 73 3a 0a 20 20 61 73  _set_hints:.  as
1fc40 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 42 55 4c  sert( OPFLAG_BUL
1fc50 4b 43 53 52 3d 3d 42 54 52 45 45 5f 42 55 4c 4b  KCSR==BTREE_BULK
1fc60 4c 4f 41 44 20 29 3b 0a 20 20 61 73 73 65 72 74  LOAD );.  assert
1fc70 28 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 3d  ( OPFLAG_SEEKEQ=
1fc80 3d 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 20 29  =BTREE_SEEK_EQ )
1fc90 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f  ;.  testcase( pO
1fca0 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 42  p->p5 & OPFLAG_B
1fcb0 55 4c 4b 43 53 52 20 29 3b 0a 23 69 66 64 65 66  ULKCSR );.#ifdef
1fcc0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43   SQLITE_ENABLE_C
1fcd0 55 52 53 4f 52 5f 48 49 4e 54 53 0a 20 20 74 65  URSOR_HINTS.  te
1fce0 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 20  stcase( pOp->p2 
1fcf0 26 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20  & OPFLAG_SEEKEQ 
1fd00 29 3b 0a 23 65 6e 64 69 66 0a 20 20 73 71 6c 69  );.#endif.  sqli
1fd10 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 48 69  te3BtreeCursorHi
1fd20 6e 74 46 6c 61 67 73 28 70 43 75 72 2d 3e 75 63  ntFlags(pCur->uc
1fd30 2e 70 43 75 72 73 6f 72 2c 0a 20 20 20 20 20 20  .pCursor,.      
1fd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd50 20 20 20 20 20 20 20 20 20 28 70 4f 70 2d 3e 70           (pOp->p
1fd60 35 20 26 20 28 4f 50 46 4c 41 47 5f 42 55 4c 4b  5 & (OPFLAG_BULK
1fd70 43 53 52 7c 4f 50 46 4c 41 47 5f 53 45 45 4b 45  CSR|OPFLAG_SEEKE
1fd80 51 29 29 29 3b 0a 20 20 69 66 28 20 72 63 20 29  Q)));.  if( rc )
1fd90 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1fda0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
1fdb0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1fdc0 20 4f 70 65 6e 44 75 70 20 50 31 20 50 32 20 2a   OpenDup P1 P2 *
1fdd0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20   * *.**.** Open 
1fde0 61 20 6e 65 77 20 63 75 72 73 6f 72 20 50 31 20  a new cursor P1 
1fdf0 74 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 74  that points to t
1fe00 68 65 20 73 61 6d 65 20 65 70 68 65 6d 65 72 61  he same ephemera
1fe10 6c 20 74 61 62 6c 65 20 61 73 0a 2a 2a 20 63 75  l table as.** cu
1fe20 72 73 6f 72 20 50 32 2e 20 20 54 68 65 20 50 32  rsor P2.  The P2
1fe30 20 63 75 72 73 6f 72 20 6d 75 73 74 20 68 61 76   cursor must hav
1fe40 65 20 62 65 65 6e 20 6f 70 65 6e 65 64 20 62 79  e been opened by
1fe50 20 61 20 70 72 69 6f 72 20 4f 50 5f 4f 70 65 6e   a prior OP_Open
1fe60 45 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 6f 70 63  Ephemeral.** opc
1fe70 6f 64 65 2e 20 20 4f 6e 6c 79 20 65 70 68 65 6d  ode.  Only ephem
1fe80 65 72 61 6c 20 63 75 72 73 6f 72 73 20 6d 61 79  eral cursors may
1fe90 20 62 65 20 64 75 70 6c 69 63 61 74 65 64 2e 0a   be duplicated..
1fea0 2a 2a 0a 2a 2a 20 44 75 70 6c 69 63 61 74 65 20  **.** Duplicate 
1feb0 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72  ephemeral cursor
1fec0 73 20 61 72 65 20 75 73 65 64 20 66 6f 72 20 73  s are used for s
1fed0 65 6c 66 2d 6a 6f 69 6e 73 20 6f 66 20 6d 61 74  elf-joins of mat
1fee0 65 72 69 61 6c 69 7a 65 64 20 76 69 65 77 73 2e  erialized views.
1fef0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e  .*/.case OP_Open
1ff00 44 75 70 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  Dup: {.  VdbeCur
1ff10 73 6f 72 20 2a 70 4f 72 69 67 3b 20 20 20 20 2f  sor *pOrig;    /
1ff20 2a 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 63  * The original c
1ff30 75 72 73 6f 72 20 74 6f 20 62 65 20 64 75 70 6c  ursor to be dupl
1ff40 69 63 61 74 65 64 20 2a 2f 0a 20 20 56 64 62 65  icated */.  Vdbe
1ff50 43 75 72 73 6f 72 20 2a 70 43 78 3b 20 20 20 20  Cursor *pCx;    
1ff60 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 63 75 72    /* The new cur
1ff70 73 6f 72 20 2a 2f 0a 0a 20 20 70 4f 72 69 67 20  sor */..  pOrig 
1ff80 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1ff90 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p2];.  assert( p
1ffa0 4f 72 69 67 2d 3e 70 42 74 78 21 3d 30 20 29 3b  Orig->pBtx!=0 );
1ffb0 20 20 2f 2a 20 4f 6e 6c 79 20 65 70 68 65 6d 65    /* Only epheme
1ffc0 72 61 6c 20 63 75 72 73 6f 72 73 20 63 61 6e 20  ral cursors can 
1ffd0 62 65 20 64 75 70 6c 69 63 61 74 65 64 20 2a 2f  be duplicated */
1ffe0 0a 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61  ..  pCx = alloca
1fff0 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
20000 3e 70 31 2c 20 70 4f 72 69 67 2d 3e 6e 46 69 65  >p1, pOrig->nFie
20010 6c 64 2c 20 2d 31 2c 20 43 55 52 54 59 50 45 5f  ld, -1, CURTYPE_
20020 42 54 52 45 45 29 3b 0a 20 20 69 66 28 20 70 43  BTREE);.  if( pC
20030 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  x==0 ) goto no_m
20040 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52  em;.  pCx->nullR
20050 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 69  ow = 1;.  pCx->i
20060 73 45 70 68 65 6d 65 72 61 6c 20 3d 20 31 3b 0a  sEphemeral = 1;.
20070 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20    pCx->pKeyInfo 
20080 3d 20 70 4f 72 69 67 2d 3e 70 4b 65 79 49 6e 66  = pOrig->pKeyInf
20090 6f 3b 0a 20 20 70 43 78 2d 3e 69 73 54 61 62 6c  o;.  pCx->isTabl
200a0 65 20 3d 20 70 4f 72 69 67 2d 3e 69 73 54 61 62  e = pOrig->isTab
200b0 6c 65 3b 0a 20 20 70 43 78 2d 3e 70 67 6e 6f 52  le;.  pCx->pgnoR
200c0 6f 6f 74 20 3d 20 70 4f 72 69 67 2d 3e 70 67 6e  oot = pOrig->pgn
200d0 6f 52 6f 6f 74 3b 0a 20 20 70 43 78 2d 3e 69 73  oRoot;.  pCx->is
200e0 4f 72 64 65 72 65 64 20 3d 20 70 4f 72 69 67 2d  Ordered = pOrig-
200f0 3e 69 73 4f 72 64 65 72 65 64 3b 0a 20 20 72 63  >isOrdered;.  rc
20100 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
20110 75 72 73 6f 72 28 70 4f 72 69 67 2d 3e 70 42 74  ursor(pOrig->pBt
20120 78 2c 20 70 43 78 2d 3e 70 67 6e 6f 52 6f 6f 74  x, pCx->pgnoRoot
20130 2c 20 42 54 52 45 45 5f 57 52 43 53 52 2c 0a 20  , BTREE_WRCSR,. 
20140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20150 20 20 20 20 20 20 20 20 20 70 43 78 2d 3e 70 4b           pCx->pK
20160 65 79 49 6e 66 6f 2c 20 70 43 78 2d 3e 75 63 2e  eyInfo, pCx->uc.
20170 70 43 75 72 73 6f 72 29 3b 0a 20 20 2f 2a 20 54  pCursor);.  /* T
20180 68 65 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  he sqlite3BtreeC
20190 75 72 73 6f 72 28 29 20 72 6f 75 74 69 6e 65 20  ursor() routine 
201a0 63 61 6e 20 6f 6e 6c 79 20 66 61 69 6c 20 66 6f  can only fail fo
201b0 72 20 74 68 65 20 66 69 72 73 74 20 63 75 72 73  r the first curs
201c0 6f 72 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20 66  or.  ** opened f
201d0 6f 72 20 61 20 64 61 74 61 62 61 73 65 2e 20 20  or a database.  
201e0 53 69 6e 63 65 20 74 68 65 72 65 20 69 73 20 61  Since there is a
201f0 6c 72 65 61 64 79 20 61 6e 20 6f 70 65 6e 20 63  lready an open c
20200 75 72 73 6f 72 20 77 68 65 6e 20 74 68 69 73 0a  ursor when this.
20210 20 20 2a 2a 20 6f 70 63 6f 64 65 20 69 73 20 72    ** opcode is r
20220 75 6e 2c 20 74 68 65 20 73 71 6c 69 74 65 33 42  un, the sqlite3B
20230 74 72 65 65 43 75 72 73 6f 72 28 29 20 63 61 6e  treeCursor() can
20240 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20 20 61 73  not fail */.  as
20250 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
20260 5f 4f 4b 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  _OK );.  break;.
20270 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  }.../* Opcode: O
20280 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 50 31 20  penEphemeral P1 
20290 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a 20 53 79  P2 * P4 P5.** Sy
202a0 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d  nopsis: nColumn=
202b0 50 32 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20  P2.**.** Open a 
202c0 6e 65 77 20 63 75 72 73 6f 72 20 50 31 20 74 6f  new cursor P1 to
202d0 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62   a transient tab
202e0 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f  le..** The curso
202f0 72 20 69 73 20 61 6c 77 61 79 73 20 6f 70 65 6e  r is always open
20300 65 64 20 72 65 61 64 2f 77 72 69 74 65 20 65 76  ed read/write ev
20310 65 6e 20 69 66 20 0a 2a 2a 20 74 68 65 20 6d 61  en if .** the ma
20320 69 6e 20 64 61 74 61 62 61 73 65 20 69 73 20 72  in database is r
20330 65 61 64 2d 6f 6e 6c 79 2e 20 20 54 68 65 20 65  ead-only.  The e
20340 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 74 61 62 6c  phemeral.** tabl
20350 65 20 69 73 20 64 65 6c 65 74 65 64 20 61 75 74  e is deleted aut
20360 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68 65 6e 20  omatically when 
20370 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63 6c  the cursor is cl
20380 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  osed..**.** If t
20390 68 65 20 63 75 72 73 6f 72 20 50 31 20 69 73 20  he cursor P1 is 
203a0 61 6c 72 65 61 64 79 20 6f 70 65 6e 65 64 20 6f  already opened o
203b0 6e 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 74  n an ephemeral t
203c0 61 62 6c 65 2c 20 74 68 65 20 74 61 62 6c 65 0a  able, the table.
203d0 2a 2a 20 69 73 20 63 6c 65 61 72 65 64 20 28 61  ** is cleared (a
203e0 6c 6c 20 63 6f 6e 74 65 6e 74 20 69 73 20 65 72  ll content is er
203f0 61 73 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 50 32 20  ased)..**.** P2 
20400 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
20410 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
20420 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 2e  ephemeral table.
20430 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 70  .** The cursor p
20440 6f 69 6e 74 73 20 74 6f 20 61 20 42 54 72 65 65  oints to a BTree
20450 20 74 61 62 6c 65 20 69 66 20 50 34 3d 3d 30 20   table if P4==0 
20460 61 6e 64 20 74 6f 20 61 20 42 54 72 65 65 20 69  and to a BTree i
20470 6e 64 65 78 0a 2a 2a 20 69 66 20 50 34 20 69 73  ndex.** if P4 is
20480 20 6e 6f 74 20 30 2e 20 20 49 66 20 50 34 20 69   not 0.  If P4 i
20490 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74 20 70  s not NULL, it p
204a0 6f 69 6e 74 73 20 74 6f 20 61 20 4b 65 79 49 6e  oints to a KeyIn
204b0 66 6f 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20  fo structure.** 
204c0 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65  that defines the
204d0 20 66 6f 72 6d 61 74 20 6f 66 20 6b 65 79 73 20   format of keys 
204e0 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a 2a 2a  in the index..**
204f0 0a 2a 2a 20 54 68 65 20 50 35 20 70 61 72 61 6d  .** The P5 param
20500 65 74 65 72 20 63 61 6e 20 62 65 20 61 20 6d 61  eter can be a ma
20510 73 6b 20 6f 66 20 74 68 65 20 42 54 52 45 45 5f  sk of the BTREE_
20520 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 0a  * flags defined.
20530 2a 2a 20 69 6e 20 62 74 72 65 65 2e 68 2e 20 20  ** in btree.h.  
20540 54 68 65 73 65 20 66 6c 61 67 73 20 63 6f 6e 74  These flags cont
20550 72 6f 6c 20 61 73 70 65 63 74 73 20 6f 66 20 74  rol aspects of t
20560 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 0a  he operation of.
20570 2a 2a 20 74 68 65 20 62 74 72 65 65 2e 20 20 54  ** the btree.  T
20580 68 65 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f  he BTREE_OMIT_JO
20590 55 52 4e 41 4c 20 61 6e 64 20 42 54 52 45 45 5f  URNAL and BTREE_
205a0 53 49 4e 47 4c 45 20 66 6c 61 67 73 20 61 72 65  SINGLE flags are
205b0 0a 2a 2a 20 61 64 64 65 64 20 61 75 74 6f 6d 61  .** added automa
205c0 74 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f  tically..*/./* O
205d0 70 63 6f 64 65 3a 20 4f 70 65 6e 41 75 74 6f 69  pcode: OpenAutoi
205e0 6e 64 65 78 20 50 31 20 50 32 20 2a 20 50 34 20  ndex P1 P2 * P4 
205f0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e  *.** Synopsis: n
20600 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20  Column=P2.**.** 
20610 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b  This opcode work
20620 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 4f 50  s the same as OP
20630 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 2e 20  _OpenEphemeral. 
20640 20 49 74 20 68 61 73 20 61 0a 2a 2a 20 64 69 66   It has a.** dif
20650 66 65 72 65 6e 74 20 6e 61 6d 65 20 74 6f 20 64  ferent name to d
20660 69 73 74 69 6e 67 75 69 73 68 20 69 74 73 20 75  istinguish its u
20670 73 65 2e 20 20 54 61 62 6c 65 73 20 63 72 65 61  se.  Tables crea
20680 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20 62 79 20  ted using.** by 
20690 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c  this opcode will
206a0 20 62 65 20 75 73 65 64 20 66 6f 72 20 61 75 74   be used for aut
206b0 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74  omatically creat
206c0 65 64 20 74 72 61 6e 73 69 65 6e 74 0a 2a 2a 20  ed transient.** 
206d0 69 6e 64 69 63 65 73 20 69 6e 20 6a 6f 69 6e 73  indices in joins
206e0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ..*/.case OP_Ope
206f0 6e 41 75 74 6f 69 6e 64 65 78 3a 20 0a 63 61 73  nAutoindex: .cas
20700 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  e OP_OpenEphemer
20710 61 6c 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  al: {.  VdbeCurs
20720 6f 72 20 2a 70 43 78 3b 0a 20 20 4b 65 79 49 6e  or *pCx;.  KeyIn
20730 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 0a 20  fo *pKeyInfo;.. 
20740 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e   static const in
20750 74 20 76 66 73 46 6c 61 67 73 20 3d 20 0a 20 20  t vfsFlags = .  
20760 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
20770 52 45 41 44 57 52 49 54 45 20 7c 0a 20 20 20 20  READWRITE |.    
20780 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 43 52    SQLITE_OPEN_CR
20790 45 41 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c  EATE |.      SQL
207a0 49 54 45 5f 4f 50 45 4e 5f 45 58 43 4c 55 53 49  ITE_OPEN_EXCLUSI
207b0 56 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54  VE |.      SQLIT
207c0 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45 4f 4e 43  E_OPEN_DELETEONC
207d0 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20 53 51 4c  LOSE |.      SQL
207e0 49 54 45 5f 4f 50 45 4e 5f 54 52 41 4e 53 49 45  ITE_OPEN_TRANSIE
207f0 4e 54 5f 44 42 3b 0a 20 20 61 73 73 65 72 74 28  NT_DB;.  assert(
20800 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20   pOp->p1>=0 );. 
20810 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
20820 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 70  >=0 );.  pCx = p
20830 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
20840 3b 0a 20 20 69 66 28 20 70 43 78 20 29 7b 0a 20  ;.  if( pCx ){. 
20850 20 20 20 2f 2a 20 49 66 20 74 68 65 20 65 70 68     /* If the eph
20860 65 72 6d 65 72 61 6c 20 74 61 62 6c 65 20 69 73  ermeral table is
20870 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 2c 20 65   already open, e
20880 72 61 73 65 20 61 6c 6c 20 65 78 69 73 74 69 6e  rase all existin
20890 67 20 63 6f 6e 74 65 6e 74 0a 20 20 20 20 2a 2a  g content.    **
208a0 20 73 6f 20 74 68 61 74 20 74 68 65 20 74 61 62   so that the tab
208b0 6c 65 20 69 73 20 65 6d 70 74 79 20 61 67 61 69  le is empty agai
208c0 6e 2c 20 72 61 74 68 65 72 20 74 68 61 6e 20 63  n, rather than c
208d0 72 65 61 74 69 6e 67 20 61 20 6e 65 77 20 74 61  reating a new ta
208e0 62 6c 65 2e 20 2a 2f 0a 20 20 20 20 61 73 73 65  ble. */.    asse
208f0 72 74 28 20 70 43 78 2d 3e 69 73 45 70 68 65 6d  rt( pCx->isEphem
20900 65 72 61 6c 20 29 3b 0a 20 20 20 20 70 43 78 2d  eral );.    pCx-
20910 3e 73 65 71 43 6f 75 6e 74 20 3d 20 30 3b 0a 20  >seqCount = 0;. 
20920 20 20 20 70 43 78 2d 3e 63 61 63 68 65 53 74 61     pCx->cacheSta
20930 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
20940 45 3b 0a 20 20 20 20 69 66 28 20 70 43 78 2d 3e  E;.    if( pCx->
20950 70 42 74 78 20 29 7b 0a 20 20 20 20 20 20 72 63  pBtx ){.      rc
20960 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
20970 6c 65 61 72 54 61 62 6c 65 28 70 43 78 2d 3e 70  learTable(pCx->p
20980 42 74 78 2c 20 70 43 78 2d 3e 70 67 6e 6f 52 6f  Btx, pCx->pgnoRo
20990 6f 74 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20  ot, 0);.    }.  
209a0 7d 65 6c 73 65 7b 0a 20 20 20 20 70 43 78 20 3d  }else{.    pCx =
209b0 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28   allocateCursor(
209c0 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  p, pOp->p1, pOp-
209d0 3e 70 32 2c 20 2d 31 2c 20 43 55 52 54 59 50 45  >p2, -1, CURTYPE
209e0 5f 42 54 52 45 45 29 3b 0a 20 20 20 20 69 66 28  _BTREE);.    if(
209f0 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e   pCx==0 ) goto n
20a00 6f 5f 6d 65 6d 3b 0a 20 20 20 20 70 43 78 2d 3e  o_mem;.    pCx->
20a10 69 73 45 70 68 65 6d 65 72 61 6c 20 3d 20 31 3b  isEphemeral = 1;
20a20 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
20a30 33 42 74 72 65 65 4f 70 65 6e 28 64 62 2d 3e 70  3BtreeOpen(db->p
20a40 56 66 73 2c 20 30 2c 20 64 62 2c 20 26 70 43 78  Vfs, 0, db, &pCx
20a50 2d 3e 70 42 74 78 2c 20 0a 20 20 20 20 20 20 20  ->pBtx, .       
20a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a70 20 20 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f     BTREE_OMIT_JO
20a80 55 52 4e 41 4c 20 7c 20 42 54 52 45 45 5f 53 49  URNAL | BTREE_SI
20a90 4e 47 4c 45 20 7c 20 70 4f 70 2d 3e 70 35 2c 0a  NGLE | pOp->p5,.
20aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ab0 20 20 20 20 20 20 20 20 20 20 76 66 73 46 6c 61            vfsFla
20ac0 67 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  gs);.    if( rc=
20ad0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
20ae0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
20af0 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28  BtreeBeginTrans(
20b00 70 43 78 2d 3e 70 42 74 78 2c 20 31 2c 20 30 29  pCx->pBtx, 1, 0)
20b10 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
20b20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
20b30 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 61 20 74  .      /* If a t
20b40 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 69  ransient index i
20b50 73 20 72 65 71 75 69 72 65 64 2c 20 63 72 65 61  s required, crea
20b60 74 65 20 69 74 20 62 79 20 63 61 6c 6c 69 6e 67  te it by calling
20b70 0a 20 20 20 20 20 20 2a 2a 20 73 71 6c 69 74 65  .      ** sqlite
20b80 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62 6c  3BtreeCreateTabl
20b90 65 28 29 20 77 69 74 68 20 74 68 65 20 42 54 52  e() with the BTR
20ba0 45 45 5f 42 4c 4f 42 4b 45 59 20 66 6c 61 67 20  EE_BLOBKEY flag 
20bb0 62 65 66 6f 72 65 0a 20 20 20 20 20 20 2a 2a 20  before.      ** 
20bc0 6f 70 65 6e 69 6e 67 20 69 74 2e 20 49 66 20 61  opening it. If a
20bd0 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65   transient table
20be0 20 69 73 20 72 65 71 75 69 72 65 64 2c 20 6a 75   is required, ju
20bf0 73 74 20 75 73 65 20 74 68 65 0a 20 20 20 20 20  st use the.     
20c00 20 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c   ** automaticall
20c10 79 20 63 72 65 61 74 65 64 20 74 61 62 6c 65 20  y created table 
20c20 77 69 74 68 20 72 6f 6f 74 2d 70 61 67 65 20 31  with root-page 1
20c30 20 28 61 6e 20 42 4c 4f 42 5f 49 4e 54 4b 45 59   (an BLOB_INTKEY
20c40 20 74 61 62 6c 65 29 2e 0a 20 20 20 20 20 20 2a   table)..      *
20c50 2f 0a 20 20 20 20 20 20 69 66 28 20 28 70 43 78  /.      if( (pCx
20c60 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65  ->pKeyInfo = pKe
20c70 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e  yInfo = pOp->p4.
20c80 70 4b 65 79 49 6e 66 6f 29 21 3d 30 20 29 7b 0a  pKeyInfo)!=0 ){.
20c90 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
20ca0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
20cb0 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 20 20 20  KEYINFO );.     
20cc0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
20cd0 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28  treeCreateTable(
20ce0 70 43 78 2d 3e 70 42 74 78 2c 20 28 69 6e 74 2a  pCx->pBtx, (int*
20cf0 29 26 70 43 78 2d 3e 70 67 6e 6f 52 6f 6f 74 2c  )&pCx->pgnoRoot,
20d00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d20 20 20 20 20 20 20 42 54 52 45 45 5f 42 4c 4f 42        BTREE_BLOB
20d30 4b 45 59 20 7c 20 70 4f 70 2d 3e 70 35 29 3b 20  KEY | pOp->p5); 
20d40 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63 3d  .        if( rc=
20d50 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
20d60 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
20d70 70 43 78 2d 3e 70 67 6e 6f 52 6f 6f 74 3d 3d 4d  pCx->pgnoRoot==M
20d80 41 53 54 45 52 5f 52 4f 4f 54 2b 31 20 29 3b 0a  ASTER_ROOT+1 );.
20d90 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74            assert
20da0 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d  ( pKeyInfo->db==
20db0 64 62 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20  db );.          
20dc0 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f  assert( pKeyInfo
20dd0 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29  ->enc==ENC(db) )
20de0 3b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d  ;.          rc =
20df0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
20e00 73 6f 72 28 70 43 78 2d 3e 70 42 74 78 2c 20 70  sor(pCx->pBtx, p
20e10 43 78 2d 3e 70 67 6e 6f 52 6f 6f 74 2c 20 42 54  Cx->pgnoRoot, BT
20e20 52 45 45 5f 57 52 43 53 52 2c 0a 20 20 20 20 20  REE_WRCSR,.     
20e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e40 20 20 20 20 20 20 20 20 20 20 20 20 20 70 4b 65               pKe
20e50 79 49 6e 66 6f 2c 20 70 43 78 2d 3e 75 63 2e 70  yInfo, pCx->uc.p
20e60 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 20  Cursor);.       
20e70 20 7d 0a 20 20 20 20 20 20 20 20 70 43 78 2d 3e   }.        pCx->
20e80 69 73 54 61 62 6c 65 20 3d 20 30 3b 0a 20 20 20  isTable = 0;.   
20e90 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
20ea0 20 20 70 43 78 2d 3e 70 67 6e 6f 52 6f 6f 74 20    pCx->pgnoRoot 
20eb0 3d 20 4d 41 53 54 45 52 5f 52 4f 4f 54 3b 0a 20  = MASTER_ROOT;. 
20ec0 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
20ed0 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70  te3BtreeCursor(p
20ee0 43 78 2d 3e 70 42 74 78 2c 20 4d 41 53 54 45 52  Cx->pBtx, MASTER
20ef0 5f 52 4f 4f 54 2c 20 42 54 52 45 45 5f 57 52 43  _ROOT, BTREE_WRC
20f00 53 52 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  SR,.            
20f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f20 20 20 20 20 30 2c 20 70 43 78 2d 3e 75 63 2e 70      0, pCx->uc.p
20f30 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 20  Cursor);.       
20f40 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20   pCx->isTable = 
20f50 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  1;.      }.    }
20f60 0a 20 20 20 20 70 43 78 2d 3e 69 73 4f 72 64 65  .    pCx->isOrde
20f70 72 65 64 20 3d 20 28 70 4f 70 2d 3e 70 35 21 3d  red = (pOp->p5!=
20f80 42 54 52 45 45 5f 55 4e 4f 52 44 45 52 45 44 29  BTREE_UNORDERED)
20f90 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29  ;.  }.  if( rc )
20fa0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
20fb0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 43 78 2d  to_error;.  pCx-
20fc0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20  >nullRow = 1;.  
20fd0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
20fe0 6f 64 65 3a 20 53 6f 72 74 65 72 4f 70 65 6e 20  ode: SorterOpen 
20ff0 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
21000 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
21010 77 6f 72 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f 70  works like OP_Op
21020 65 6e 45 70 68 65 6d 65 72 61 6c 20 65 78 63 65  enEphemeral exce
21030 70 74 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73  pt that it opens
21040 0a 2a 2a 20 61 20 74 72 61 6e 73 69 65 6e 74 20  .** a transient 
21050 69 6e 64 65 78 20 74 68 61 74 20 69 73 20 73 70  index that is sp
21060 65 63 69 66 69 63 61 6c 6c 79 20 64 65 73 69 67  ecifically desig
21070 6e 65 64 20 74 6f 20 73 6f 72 74 20 6c 61 72 67  ned to sort larg
21080 65 0a 2a 2a 20 74 61 62 6c 65 73 20 75 73 69 6e  e.** tables usin
21090 67 20 61 6e 20 65 78 74 65 72 6e 61 6c 20 6d 65  g an external me
210a0 72 67 65 2d 73 6f 72 74 20 61 6c 67 6f 72 69 74  rge-sort algorit
210b0 68 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 72 67  hm..**.** If arg
210c0 75 6d 65 6e 74 20 50 33 20 69 73 20 6e 6f 6e 2d  ument P3 is non-
210d0 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74 20 69 6e  zero, then it in
210e0 64 69 63 61 74 65 73 20 74 68 61 74 20 74 68 65  dicates that the
210f0 20 73 6f 72 74 65 72 20 6d 61 79 0a 2a 2a 20 61   sorter may.** a
21100 73 73 75 6d 65 20 74 68 61 74 20 61 20 73 74 61  ssume that a sta
21110 62 6c 65 20 73 6f 72 74 20 63 6f 6e 73 69 64 65  ble sort conside
21120 72 69 6e 67 20 74 68 65 20 66 69 72 73 74 20 50  ring the first P
21130 33 20 66 69 65 6c 64 73 20 6f 66 20 65 61 63 68  3 fields of each
21140 0a 2a 2a 20 6b 65 79 20 69 73 20 73 75 66 66 69  .** key is suffi
21150 63 69 65 6e 74 20 74 6f 20 70 72 6f 64 75 63 65  cient to produce
21160 20 74 68 65 20 72 65 71 75 69 72 65 64 20 72 65   the required re
21170 73 75 6c 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  sults..*/.case O
21180 50 5f 53 6f 72 74 65 72 4f 70 65 6e 3a 20 7b 0a  P_SorterOpen: {.
21190 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
211a0 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  x;..  assert( pO
211b0 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73  p->p1>=0 );.  as
211c0 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30  sert( pOp->p2>=0
211d0 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f   );.  pCx = allo
211e0 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f  cateCursor(p, pO
211f0 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20  p->p1, pOp->p2, 
21200 2d 31 2c 20 43 55 52 54 59 50 45 5f 53 4f 52 54  -1, CURTYPE_SORT
21210 45 52 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d  ER);.  if( pCx==
21220 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
21230 0a 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f  .  pCx->pKeyInfo
21240 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49   = pOp->p4.pKeyI
21250 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 70  nfo;.  assert( p
21260 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 64 62  Cx->pKeyInfo->db
21270 3d 3d 64 62 20 29 3b 0a 20 20 61 73 73 65 72 74  ==db );.  assert
21280 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d  ( pCx->pKeyInfo-
21290 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b  >enc==ENC(db) );
212a0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
212b0 64 62 65 53 6f 72 74 65 72 49 6e 69 74 28 64 62  dbeSorterInit(db
212c0 2c 20 70 4f 70 2d 3e 70 33 2c 20 70 43 78 29 3b  , pOp->p3, pCx);
212d0 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
212e0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
212f0 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ror;.  break;.}.
21300 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71 75  ./* Opcode: Sequ
21310 65 6e 63 65 54 65 73 74 20 50 31 20 50 32 20 2a  enceTest P1 P2 *
21320 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
21330 3a 20 69 66 28 20 63 75 72 73 6f 72 5b 50 31 5d  : if( cursor[P1]
21340 2e 63 74 72 2b 2b 20 29 20 70 63 20 3d 20 50 32  .ctr++ ) pc = P2
21350 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 73  .**.** P1 is a s
21360 6f 72 74 65 72 20 63 75 72 73 6f 72 2e 20 49 66  orter cursor. If
21370 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 63 6f   the sequence co
21380 75 6e 74 65 72 20 69 73 20 63 75 72 72 65 6e 74  unter is current
21390 6c 79 20 7a 65 72 6f 2c 20 6a 75 6d 70 0a 2a 2a  ly zero, jump.**
213a0 20 74 6f 20 50 32 2e 20 52 65 67 61 72 64 6c 65   to P2. Regardle
213b0 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72  ss of whether or
213c0 20 6e 6f 74 20 74 68 65 20 6a 75 6d 70 20 69 73   not the jump is
213d0 20 74 61 6b 65 6e 2c 20 69 6e 63 72 65 6d 65 6e   taken, incremen
213e0 74 20 74 68 65 0a 2a 2a 20 74 68 65 20 73 65 71  t the.** the seq
213f0 75 65 6e 63 65 20 76 61 6c 75 65 2e 0a 2a 2f 0a  uence value..*/.
21400 63 61 73 65 20 4f 50 5f 53 65 71 75 65 6e 63 65  case OP_Sequence
21410 54 65 73 74 3a 20 7b 0a 20 20 56 64 62 65 43 75  Test: {.  VdbeCu
21420 72 73 6f 72 20 2a 70 43 3b 0a 20 20 61 73 73 65  rsor *pC;.  asse
21430 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
21440 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
21450 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
21460 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
21470 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f  ;.  assert( isSo
21480 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 69 66  rter(pC) );.  if
21490 28 20 28 70 43 2d 3e 73 65 71 43 6f 75 6e 74 2b  ( (pC->seqCount+
214a0 2b 29 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74  +)==0 ){.    got
214b0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
214c0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
214d0 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 50 73 65   Opcode: OpenPse
214e0 75 64 6f 20 50 31 20 50 32 20 50 33 20 2a 20 2a  udo P1 P2 P3 * *
214f0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 50 33  .** Synopsis: P3
21500 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 72 5b 50 32   columns in r[P2
21510 5d 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e  ].**.** Open a n
21520 65 77 20 63 75 72 73 6f 72 20 74 68 61 74 20 70  ew cursor that p
21530 6f 69 6e 74 73 20 74 6f 20 61 20 66 61 6b 65 20  oints to a fake 
21540 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61  table that conta
21550 69 6e 73 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20  ins a single.** 
21560 72 6f 77 20 6f 66 20 64 61 74 61 2e 20 20 54 68  row of data.  Th
21570 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 61  e content of tha
21580 74 20 6f 6e 65 20 72 6f 77 20 69 73 20 74 68 65  t one row is the
21590 20 63 6f 6e 74 65 6e 74 20 6f 66 20 6d 65 6d 6f   content of memo
215a0 72 79 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  ry.** register P
215b0 32 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  2.  In other wor
215c0 64 73 2c 20 63 75 72 73 6f 72 20 50 31 20 62 65  ds, cursor P1 be
215d0 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61 73 20 66  comes an alias f
215e0 6f 72 20 74 68 65 20 0a 2a 2a 20 4d 45 4d 5f 42  or the .** MEM_B
215f0 6c 6f 62 20 63 6f 6e 74 65 6e 74 20 63 6f 6e 74  lob content cont
21600 61 69 6e 65 64 20 69 6e 20 72 65 67 69 73 74 65  ained in registe
21610 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 20 70 73  r P2..**.** A ps
21620 65 75 64 6f 2d 74 61 62 6c 65 20 63 72 65 61 74  eudo-table creat
21630 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  ed by this opcod
21640 65 20 69 73 20 75 73 65 64 20 74 6f 20 68 6f 6c  e is used to hol
21650 64 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f  d a single.** ro
21660 77 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 74 68  w output from th
21670 65 20 73 6f 72 74 65 72 20 73 6f 20 74 68 61 74  e sorter so that
21680 20 74 68 65 20 72 6f 77 20 63 61 6e 20 62 65 20   the row can be 
21690 64 65 63 6f 6d 70 6f 73 65 64 20 69 6e 74 6f 0a  decomposed into.
216a0 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c 20 63 6f  ** individual co
216b0 6c 75 6d 6e 73 20 75 73 69 6e 67 20 74 68 65 20  lumns using the 
216c0 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65  OP_Column opcode
216d0 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e  .  The OP_Column
216e0 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 74 68   opcode.** is th
216f0 65 20 6f 6e 6c 79 20 63 75 72 73 6f 72 20 6f 70  e only cursor op
21700 63 6f 64 65 20 74 68 61 74 20 77 6f 72 6b 73 20  code that works 
21710 77 69 74 68 20 61 20 70 73 65 75 64 6f 2d 74 61  with a pseudo-ta
21720 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73  ble..**.** P3 is
21730 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66   the number of f
21740 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63  ields in the rec
21750 6f 72 64 73 20 74 68 61 74 20 77 69 6c 6c 20 62  ords that will b
21760 65 20 73 74 6f 72 65 64 20 62 79 0a 2a 2a 20 74  e stored by.** t
21770 68 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e  he pseudo-table.
21780 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e  .*/.case OP_Open
21790 50 73 65 75 64 6f 3a 20 7b 0a 20 20 56 64 62 65  Pseudo: {.  Vdbe
217a0 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20  Cursor *pCx;..  
217b0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
217c0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
217d0 70 4f 70 2d 3e 70 33 3e 3d 30 20 29 3b 0a 20 20  pOp->p3>=0 );.  
217e0 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  pCx = allocateCu
217f0 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c  rsor(p, pOp->p1,
21800 20 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c 20 43 55   pOp->p3, -1, CU
21810 52 54 59 50 45 5f 50 53 45 55 44 4f 29 3b 0a 20  RTYPE_PSEUDO);. 
21820 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f   if( pCx==0 ) go
21830 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78  to no_mem;.  pCx
21840 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20  ->nullRow = 1;. 
21850 20 70 43 78 2d 3e 73 65 65 6b 52 65 73 75 6c 74   pCx->seekResult
21860 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 43   = pOp->p2;.  pC
21870 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a  x->isTable = 1;.
21880 20 20 2f 2a 20 47 69 76 65 20 74 68 69 73 20 70    /* Give this p
21890 73 65 75 64 6f 2d 63 75 72 73 6f 72 20 61 20 66  seudo-cursor a f
218a0 61 6b 65 20 42 74 43 75 72 73 6f 72 20 70 6f 69  ake BtCursor poi
218b0 6e 74 65 72 20 73 6f 20 74 68 61 74 20 70 43 78  nter so that pCx
218c0 0a 20 20 2a 2a 20 63 61 6e 20 62 65 20 73 61 66  .  ** can be saf
218d0 65 6c 79 20 70 61 73 73 65 64 20 74 6f 20 73 71  ely passed to sq
218e0 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
218f0 6f 76 65 74 6f 28 29 2e 20 20 54 68 69 73 20 61  oveto().  This a
21900 76 6f 69 64 73 20 61 20 74 65 73 74 0a 20 20 2a  voids a test.  *
21910 2a 20 66 6f 72 20 70 43 78 2d 3e 65 43 75 72 54  * for pCx->eCurT
21920 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
21930 45 45 20 69 6e 73 69 64 65 20 6f 66 20 73 71 6c  EE inside of sql
21940 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f  ite3VdbeCursorMo
21950 76 65 74 6f 28 29 0a 20 20 2a 2a 20 77 68 69 63  veto().  ** whic
21960 68 20 69 73 20 61 20 70 65 72 66 6f 72 6d 61 6e  h is a performan
21970 63 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20  ce optimization 
21980 2a 2f 0a 20 20 70 43 78 2d 3e 75 63 2e 70 43 75  */.  pCx->uc.pCu
21990 72 73 6f 72 20 3d 20 73 71 6c 69 74 65 33 42 74  rsor = sqlite3Bt
219a0 72 65 65 46 61 6b 65 56 61 6c 69 64 43 75 72 73  reeFakeValidCurs
219b0 6f 72 28 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or();.  assert( 
219c0 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20  pOp->p5==0 );.  
219d0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
219e0 6f 64 65 3a 20 43 6c 6f 73 65 20 50 31 20 2a 20  ode: Close P1 * 
219f0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73  * * *.**.** Clos
21a00 65 20 61 20 63 75 72 73 6f 72 20 70 72 65 76 69  e a cursor previ
21a10 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 61 73 20  ously opened as 
21a20 50 31 2e 20 20 49 66 20 50 31 20 69 73 20 6e 6f  P1.  If P1 is no
21a30 74 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 6f  t.** currently o
21a40 70 65 6e 2c 20 74 68 69 73 20 69 6e 73 74 72 75  pen, this instru
21a50 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70  ction is a no-op
21a60 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 6f  ..*/.case OP_Clo
21a70 73 65 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20  se: {.  assert( 
21a80 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
21a90 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
21aa0 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   );.  sqlite3Vdb
21ab0 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c 20 70  eFreeCursor(p, p
21ac0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
21ad0 29 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f  );.  p->apCsr[pO
21ae0 70 2d 3e 70 31 5d 20 3d 20 30 3b 0a 20 20 62 72  p->p1] = 0;.  br
21af0 65 61 6b 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53  eak;.}..#ifdef S
21b00 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c  QLITE_ENABLE_COL
21b10 55 4d 4e 5f 55 53 45 44 5f 4d 41 53 4b 0a 2f 2a  UMN_USED_MASK./*
21b20 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 73   Opcode: Columns
21b30 55 73 65 64 20 50 31 20 2a 20 2a 20 50 34 20 2a  Used P1 * * P4 *
21b40 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
21b50 64 65 20 28 77 68 69 63 68 20 6f 6e 6c 79 20 65  de (which only e
21b60 78 69 73 74 73 20 69 66 20 53 51 4c 69 74 65 20  xists if SQLite 
21b70 77 61 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74  was compiled wit
21b80 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42  h.** SQLITE_ENAB
21b90 4c 45 5f 43 4f 4c 55 4d 4e 5f 55 53 45 44 5f 4d  LE_COLUMN_USED_M
21ba0 41 53 4b 29 20 69 64 65 6e 74 69 66 69 65 73 20  ASK) identifies 
21bb0 77 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20 6f 66  which columns of
21bc0 20 74 68 65 0a 2a 2a 20 74 61 62 6c 65 20 6f 72   the.** table or
21bd0 20 69 6e 64 65 78 20 66 6f 72 20 63 75 72 73 6f   index for curso
21be0 72 20 50 31 20 61 72 65 20 75 73 65 64 2e 20 20  r P1 are used.  
21bf0 50 34 20 69 73 20 61 20 36 34 2d 62 69 74 20 69  P4 is a 64-bit i
21c00 6e 74 65 67 65 72 0a 2a 2a 20 28 50 34 5f 49 4e  nteger.** (P4_IN
21c10 54 36 34 29 20 69 6e 20 77 68 69 63 68 20 74 68  T64) in which th
21c20 65 20 66 69 72 73 74 20 36 33 20 62 69 74 73 20  e first 63 bits 
21c30 61 72 65 20 6f 6e 65 20 66 6f 72 20 65 61 63 68  are one for each
21c40 20 6f 66 20 74 68 65 0a 2a 2a 20 66 69 72 73 74   of the.** first
21c50 20 36 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74   63 columns of t
21c60 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
21c70 78 20 74 68 61 74 20 61 72 65 20 61 63 74 75 61  x that are actua
21c80 6c 6c 79 20 75 73 65 64 0a 2a 2a 20 62 79 20 74  lly used.** by t
21c90 68 65 20 63 75 72 73 6f 72 2e 20 20 54 68 65 20  he cursor.  The 
21ca0 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20 69  high-order bit i
21cb0 73 20 73 65 74 20 69 66 20 61 6e 79 20 63 6f 6c  s set if any col
21cc0 75 6d 6e 20 61 66 74 65 72 0a 2a 2a 20 74 68 65  umn after.** the
21cd0 20 36 34 74 68 20 69 73 20 75 73 65 64 2e 0a 2a   64th is used..*
21ce0 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e  /.case OP_Column
21cf0 73 55 73 65 64 3a 20 7b 0a 20 20 56 64 62 65 43  sUsed: {.  VdbeC
21d00 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 70 43 20  ursor *pC;.  pC 
21d10 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
21d20 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
21d30 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
21d40 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
21d50 70 43 2d 3e 6d 61 73 6b 55 73 65 64 20 3d 20 2a  pC->maskUsed = *
21d60 28 75 36 34 2a 29 70 4f 70 2d 3e 70 34 2e 70 49  (u64*)pOp->p4.pI
21d70 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  64;.  break;.}.#
21d80 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65  endif../* Opcode
21d90 3a 20 53 65 65 6b 47 45 20 50 31 20 50 32 20 50  : SeekGE P1 P2 P
21da0 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
21db0 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
21dc0 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72  .**.** If cursor
21dd0 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e   P1 refers to an
21de0 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72   SQL table (B-Tr
21df0 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74  ee that uses int
21e00 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20  eger keys), .** 
21e10 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  use the value in
21e20 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20   register P3 as 
21e30 74 68 65 20 6b 65 79 2e 20 20 49 66 20 63 75 72  the key.  If cur
21e40 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a  sor P1 refers .*
21e50 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65  * to an SQL inde
21e60 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68  x, then P3 is th
21e70 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72  e first in an ar
21e80 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74  ray of P4 regist
21e90 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65  ers .** that are
21ea0 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61   used as an unpa
21eb0 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
21ec0 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f  .**.** Repositio
21ed0 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  n cursor P1 so t
21ee0 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74  hat  it points t
21ef0 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65  o the smallest e
21f00 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73  ntry that .** is
21f10 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72   greater than or
21f20 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65   equal to the ke
21f30 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72  y value. If ther
21f40 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73  e are no records
21f50 20 0a 2a 2a 20 67 72 65 61 74 65 72 20 74 68 61   .** greater tha
21f60 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
21f70 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20  e key and P2 is 
21f80 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a  not zero, then j
21f90 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
21fa0 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 50   If the cursor P
21fb0 31 20 77 61 73 20 6f 70 65 6e 65 64 20 75 73 69  1 was opened usi
21fc0 6e 67 20 74 68 65 20 4f 50 46 4c 41 47 5f 53 45  ng the OPFLAG_SE
21fd0 45 4b 45 51 20 66 6c 61 67 2c 20 74 68 65 6e 20  EKEQ flag, then 
21fe0 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20 77  this.** opcode w
21ff0 69 6c 6c 20 61 6c 77 61 79 73 20 6c 61 6e 64 20  ill always land 
22000 6f 6e 20 61 20 72 65 63 6f 72 64 20 74 68 61 74  on a record that
22010 20 65 71 75 61 6c 6c 79 20 65 71 75 61 6c 73 20   equally equals 
22020 74 68 65 20 6b 65 79 2c 20 6f 72 0a 2a 2a 20 65  the key, or.** e
22030 6c 73 65 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  lse jump immedia
22040 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 57 68 65  tely to P2.  Whe
22050 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  n the cursor is 
22060 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 2c 20 74  OPFLAG_SEEKEQ, t
22070 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20 6d 75  his.** opcode mu
22080 73 74 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62  st be followed b
22090 79 20 61 6e 20 49 64 78 4c 45 20 6f 70 63 6f 64  y an IdxLE opcod
220a0 65 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  e with the same 
220b0 61 72 67 75 6d 65 6e 74 73 2e 0a 2a 2a 20 54 68  arguments..** Th
220c0 65 20 49 64 78 4c 45 20 6f 70 63 6f 64 65 20 77  e IdxLE opcode w
220d0 69 6c 6c 20 62 65 20 73 6b 69 70 70 65 64 20 69  ill be skipped i
220e0 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20 73 75  f this opcode su
220f0 63 63 65 65 64 73 2c 20 62 75 74 20 74 68 65 0a  cceeds, but the.
22100 2a 2a 20 49 64 78 4c 45 20 6f 70 63 6f 64 65 20  ** IdxLE opcode 
22110 77 69 6c 6c 20 62 65 20 75 73 65 64 20 6f 6e 20  will be used on 
22120 73 75 62 73 65 71 75 65 6e 74 20 6c 6f 6f 70 20  subsequent loop 
22130 69 74 65 72 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a  iterations..**.*
22140 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65  * This opcode le
22150 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
22160 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f  configured to mo
22170 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72  ve in forward or
22180 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65  der,.** from the
22190 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72   beginning towar
221a0 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f  d the end.  In o
221b0 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
221c0 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e  cursor is.** con
221d0 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e  figured to use N
221e0 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a  ext, not Prev..*
221f0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
22200 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
22210 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 74 2c 20  SeekLt, SeekGt, 
22220 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63  SeekLe.*/./* Opc
22230 6f 64 65 3a 20 53 65 65 6b 47 54 20 50 31 20 50  ode: SeekGT P1 P
22240 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
22250 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
22260 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72  P4].**.** If cur
22270 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f  sor P1 refers to
22280 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42   an SQL table (B
22290 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20  -Tree that uses 
222a0 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a  integer keys), .
222b0 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65  ** use the value
222c0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
222d0 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72  as a key. If cur
222e0 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a  sor P1 refers .*
222f0 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65  * to an SQL inde
22300 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68  x, then P3 is th
22310 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72  e first in an ar
22320 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74  ray of P4 regist
22330 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65  ers .** that are
22340 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61   used as an unpa
22350 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
22360 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f  .**.** Repositio
22370 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  n cursor P1 so t
22380 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74  hat  it points t
22390 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65  o the smallest e
223a0 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73  ntry that .** is
223b0 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68   greater than th
223c0 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20  e key value. If 
223d0 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63  there are no rec
223e0 6f 72 64 73 20 67 72 65 61 74 65 72 20 74 68 61  ords greater tha
223f0 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e  n .** the key an
22400 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f  d P2 is not zero
22410 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
22420 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  2..**.** This op
22430 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20  code leaves the 
22440 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65  cursor configure
22450 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72  d to move in for
22460 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66  ward order,.** f
22470 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  rom the beginnin
22480 67 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64  g toward the end
22490 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
224a0 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  s, the cursor is
224b0 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74  .** configured t
224c0 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20  o use Next, not 
224d0 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  Prev..**.** See 
224e0 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
224f0 46 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53  Found, SeekLt, S
22500 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f  eekGe, SeekLe.*/
22510 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
22520 4c 54 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  LT P1 P2 P3 P4 *
22530 20 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b   .** Synopsis: k
22540 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
22550 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  * If cursor P1 r
22560 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20  efers to an SQL 
22570 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68  table (B-Tree th
22580 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20  at uses integer 
22590 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74  keys), .** use t
225a0 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
225b0 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79  ster P3 as a key
225c0 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  . If cursor P1 r
225d0 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20  efers .** to an 
225e0 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20  SQL index, then 
225f0 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
22600 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50  in an array of P
22610 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20  4 registers .** 
22620 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73  that are used as
22630 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
22640 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52  ex key. .**.** R
22650 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72  eposition cursor
22660 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20   P1 so that  it 
22670 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61  points to the la
22680 72 67 65 73 74 20 65 6e 74 72 79 20 74 68 61 74  rgest entry that
22690 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61   .** is less tha
226a0 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e  n the key value.
226b0 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
226c0 20 72 65 63 6f 72 64 73 20 6c 65 73 73 20 74 68   records less th
226d0 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61  an .** the key a
226e0 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72  nd P2 is not zer
226f0 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  o, then jump to 
22700 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  P2..**.** This o
22710 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65  pcode leaves the
22720 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72   cursor configur
22730 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65  ed to move in re
22740 76 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20  verse order,.** 
22750 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77  from the end tow
22760 61 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  ard the beginnin
22770 67 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  g.  In other wor
22780 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69  ds, the cursor i
22790 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20  s.** configured 
227a0 74 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74  to use Prev, not
227b0 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65   Next..**.** See
227c0 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
227d0 74 46 6f 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20  tFound, SeekGt, 
227e0 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a  SeekGe, SeekLe.*
227f0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65  /./* Opcode: See
22800 6b 4c 45 20 50 31 20 50 32 20 50 33 20 50 34 20  kLE P1 P2 P3 P4 
22810 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  *.** Synopsis: k
22820 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
22830 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  * If cursor P1 r
22840 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20  efers to an SQL 
22850 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68  table (B-Tree th
22860 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20  at uses integer 
22870 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74  keys), .** use t
22880 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
22890 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79  ster P3 as a key
228a0 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  . If cursor P1 r
228b0 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20  efers .** to an 
228c0 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20  SQL index, then 
228d0 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
228e0 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50  in an array of P
228f0 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20  4 registers .** 
22900 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73  that are used as
22910 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
22920 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52  ex key. .**.** R
22930 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72  eposition cursor
22940 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70   P1 so that it p
22950 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72  oints to the lar
22960 67 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20  gest entry that 
22970 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e  .** is less than
22980 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
22990 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74   key value. If t
229a0 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f  here are no reco
229b0 72 64 73 20 0a 2a 2a 20 6c 65 73 73 20 74 68 61  rds .** less tha
229c0 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
229d0 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20  e key and P2 is 
229e0 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a  not zero, then j
229f0 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
22a00 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
22a10 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63  ves the cursor c
22a20 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76  onfigured to mov
22a30 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64  e in reverse ord
22a40 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  er,.** from the 
22a50 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20 62  end toward the b
22a60 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74  eginning.  In ot
22a70 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63  her words, the c
22a80 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66  ursor is.** conf
22a90 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 50 72  igured to use Pr
22aa0 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a  ev, not Next..**
22ab0 0a 2a 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f  .** If the curso
22ac0 72 20 50 31 20 77 61 73 20 6f 70 65 6e 65 64 20  r P1 was opened 
22ad0 75 73 69 6e 67 20 74 68 65 20 4f 50 46 4c 41 47  using the OPFLAG
22ae0 5f 53 45 45 4b 45 51 20 66 6c 61 67 2c 20 74 68  _SEEKEQ flag, th
22af0 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64  en this.** opcod
22b00 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 6c 61  e will always la
22b10 6e 64 20 6f 6e 20 61 20 72 65 63 6f 72 64 20 74  nd on a record t
22b20 68 61 74 20 65 71 75 61 6c 6c 79 20 65 71 75 61  hat equally equa
22b30 6c 73 20 74 68 65 20 6b 65 79 2c 20 6f 72 0a 2a  ls the key, or.*
22b40 2a 20 65 6c 73 65 20 6a 75 6d 70 20 69 6d 6d 65  * else jump imme
22b50 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20  diately to P2.  
22b60 57 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20  When the cursor 
22b70 69 73 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51  is OPFLAG_SEEKEQ
22b80 2c 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65  , this.** opcode
22b90 20 6d 75 73 74 20 62 65 20 66 6f 6c 6c 6f 77 65   must be followe
22ba0 64 20 62 79 20 61 6e 20 49 64 78 47 45 20 6f 70  d by an IdxGE op
22bb0 63 6f 64 65 20 77 69 74 68 20 74 68 65 20 73 61  code with the sa
22bc0 6d 65 20 61 72 67 75 6d 65 6e 74 73 2e 0a 2a 2a  me arguments..**
22bd0 20 54 68 65 20 49 64 78 47 45 20 6f 70 63 6f 64   The IdxGE opcod
22be0 65 20 77 69 6c 6c 20 62 65 20 73 6b 69 70 70 65  e will be skippe
22bf0 64 20 69 66 20 74 68 69 73 20 6f 70 63 6f 64 65  d if this opcode
22c00 20 73 75 63 63 65 65 64 73 2c 20 62 75 74 20 74   succeeds, but t
22c10 68 65 0a 2a 2a 20 49 64 78 47 45 20 6f 70 63 6f  he.** IdxGE opco
22c20 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20  de will be used 
22c30 6f 6e 20 73 75 62 73 65 71 75 65 6e 74 20 6c 6f  on subsequent lo
22c40 6f 70 20 69 74 65 72 61 74 69 6f 6e 73 2e 0a 2a  op iterations..*
22c50 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
22c60 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
22c70 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20  SeekGt, SeekGe, 
22c80 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f  SeekLt.*/.case O
22c90 50 5f 53 65 65 6b 4c 54 3a 20 20 20 20 20 20 20  P_SeekLT:       
22ca0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 2c 20    /* jump, in3, 
22cb0 67 72 6f 75 70 20 2a 2f 0a 63 61 73 65 20 4f 50  group */.case OP
22cc0 5f 53 65 65 6b 4c 45 3a 20 20 20 20 20 20 20 20  _SeekLE:        
22cd0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 2c 20 67   /* jump, in3, g
22ce0 72 6f 75 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  roup */.case OP_
22cf0 53 65 65 6b 47 45 3a 20 20 20 20 20 20 20 20 20  SeekGE:         
22d00 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 2c 20 67 72  /* jump, in3, gr
22d10 6f 75 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  oup */.case OP_S
22d20 65 65 6b 47 54 3a 20 7b 20 20 20 20 20 20 20 2f  eekGT: {       /
22d30 2a 20 6a 75 6d 70 2c 20 69 6e 33 2c 20 67 72 6f  * jump, in3, gro
22d40 75 70 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b  up */.  int res;
22d50 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
22d60 6d 70 61 72 69 73 6f 6e 20 72 65 73 75 6c 74 20  mparison result 
22d70 2a 2f 0a 20 20 69 6e 74 20 6f 63 3b 20 20 20 20  */.  int oc;    
22d80 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64          /* Opcod
22d90 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  e */.  VdbeCurso
22da0 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68 65  r *pC;    /* The
22db0 20 63 75 72 73 6f 72 20 74 6f 20 73 65 65 6b 20   cursor to seek 
22dc0 2a 2f 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  */.  UnpackedRec
22dd0 6f 72 64 20 72 3b 20 20 2f 2a 20 54 68 65 20 6b  ord r;  /* The k
22de0 65 79 20 74 6f 20 73 65 65 6b 20 66 6f 72 20 2a  ey to seek for *
22df0 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20  /.  int nField; 
22e00 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
22e10 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 6f 72 20 66   of columns or f
22e20 69 65 6c 64 73 20 69 6e 20 74 68 65 20 6b 65 79  ields in the key
22e30 20 2a 2f 0a 20 20 69 36 34 20 69 4b 65 79 3b 20   */.  i64 iKey; 
22e40 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
22e50 72 6f 77 69 64 20 77 65 20 61 72 65 20 74 6f 20  rowid we are to 
22e60 73 65 65 6b 20 74 6f 20 2a 2f 0a 20 20 69 6e 74  seek to */.  int
22e70 20 65 71 4f 6e 6c 79 3b 20 20 20 20 20 20 20 20   eqOnly;        
22e80 2f 2a 20 4f 6e 6c 79 20 69 6e 74 65 72 65 73 74  /* Only interest
22e90 65 64 20 69 6e 20 3d 3d 20 72 65 73 75 6c 74 73  ed in == results
22ea0 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70   */..  assert( p
22eb0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
22ec0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
22ed0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
22ee0 2d 3e 70 32 21 3d 30 20 29 3b 0a 20 20 70 43 20  ->p2!=0 );.  pC 
22ef0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
22f00 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
22f10 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
22f20 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
22f30 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
22f40 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65  .  assert( OP_Se
22f50 65 6b 4c 45 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c  ekLE == OP_SeekL
22f60 54 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28  T+1 );.  assert(
22f70 20 4f 50 5f 53 65 65 6b 47 45 20 3d 3d 20 4f 50   OP_SeekGE == OP
22f80 5f 53 65 65 6b 4c 54 2b 32 20 29 3b 0a 20 20 61  _SeekLT+2 );.  a
22f90 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 54  ssert( OP_SeekGT
22fa0 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 33 20   == OP_SeekLT+3 
22fb0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
22fc0 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20  >isOrdered );.  
22fd0 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70  assert( pC->uc.p
22fe0 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 6f  Cursor!=0 );.  o
22ff0 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b  c = pOp->opcode;
23000 0a 20 20 65 71 4f 6e 6c 79 20 3d 20 30 3b 0a 20  .  eqOnly = 0;. 
23010 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30   pC->nullRow = 0
23020 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
23030 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b  DEBUG.  pC->seek
23040 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  Op = pOp->opcode
23050 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 70 43 2d 3e  ;.#endif..  pC->
23060 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
23070 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   0;.  pC->cacheS
23080 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
23090 41 4c 45 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69  ALE;.  if( pC->i
230a0 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 75 31  sTable ){.    u1
230b0 36 20 66 6c 61 67 73 33 2c 20 6e 65 77 54 79 70  6 flags3, newTyp
230c0 65 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20 42 54  e;.    /* The BT
230d0 52 45 45 5f 53 45 45 4b 5f 45 51 20 66 6c 61 67  REE_SEEK_EQ flag
230e0 20 69 73 20 6f 6e 6c 79 20 73 65 74 20 6f 6e 20   is only set on 
230f0 69 6e 64 65 78 20 63 75 72 73 6f 72 73 20 2a 2f  index cursors */
23100 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c  .    assert( sql
23110 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 48  ite3BtreeCursorH
23120 61 73 48 69 6e 74 28 70 43 2d 3e 75 63 2e 70 43  asHint(pC->uc.pC
23130 75 72 73 6f 72 2c 20 42 54 52 45 45 5f 53 45 45  ursor, BTREE_SEE
23140 4b 5f 45 51 29 3d 3d 30 0a 20 20 20 20 20 20 20  K_EQ)==0.       
23150 20 20 20 20 20 20 20 7c 7c 20 43 4f 52 52 55 50         || CORRUP
23160 54 5f 44 42 20 29 3b 0a 0a 20 20 20 20 2f 2a 20  T_DB );..    /* 
23170 54 68 65 20 69 6e 70 75 74 20 76 61 6c 75 65 20  The input value 
23180 69 6e 20 50 33 20 6d 69 67 68 74 20 62 65 20 6f  in P3 might be o
23190 66 20 61 6e 79 20 74 79 70 65 3a 20 69 6e 74 65  f any type: inte
231a0 67 65 72 2c 20 72 65 61 6c 2c 20 73 74 72 69 6e  ger, real, strin
231b0 67 2c 0a 20 20 20 20 2a 2a 20 62 6c 6f 62 2c 20  g,.    ** blob, 
231c0 6f 72 20 4e 55 4c 4c 2e 20 20 42 75 74 20 69 74  or NULL.  But it
231d0 20 6e 65 65 64 73 20 74 6f 20 62 65 20 61 6e 20   needs to be an 
231e0 69 6e 74 65 67 65 72 20 62 65 66 6f 72 65 20 77  integer before w
231f0 65 20 63 61 6e 20 64 6f 0a 20 20 20 20 2a 2a 20  e can do.    ** 
23200 74 68 65 20 73 65 65 6b 2c 20 73 6f 20 63 6f 6e  the seek, so con
23210 76 65 72 74 20 69 74 2e 20 2a 2f 0a 20 20 20 20  vert it. */.    
23220 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
23230 2d 3e 70 33 5d 3b 0a 20 20 20 20 66 6c 61 67 73  ->p3];.    flags
23240 33 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73 3b  3 = pIn3->flags;
23250 0a 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 33  .    if( (flags3
23260 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
23270 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 52 65 61 6c  Real|MEM_IntReal
23280 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f  |MEM_Str))==MEM_
23290 53 74 72 20 29 7b 0a 20 20 20 20 20 20 61 70 70  Str ){.      app
232a0 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
232b0 79 28 70 49 6e 33 2c 20 30 29 3b 0a 20 20 20 20  y(pIn3, 0);.    
232c0 7d 0a 20 20 20 20 69 4b 65 79 20 3d 20 73 71 6c  }.    iKey = sql
232d0 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
232e0 28 70 49 6e 33 29 3b 20 2f 2a 20 47 65 74 20 74  (pIn3); /* Get t
232f0 68 65 20 69 6e 74 65 67 65 72 20 6b 65 79 20 76  he integer key v
23300 61 6c 75 65 20 2a 2f 0a 20 20 20 20 6e 65 77 54  alue */.    newT
23310 79 70 65 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67  ype = pIn3->flag
23320 73 3b 20 2f 2a 20 52 65 63 6f 72 64 20 74 68 65  s; /* Record the
23330 20 74 79 70 65 20 61 66 74 65 72 20 61 70 70 6c   type after appl
23340 79 69 6e 67 20 6e 75 6d 65 72 69 63 20 61 66 66  ying numeric aff
23350 69 6e 69 74 79 20 2a 2f 0a 20 20 20 20 70 49 6e  inity */.    pIn
23360 33 2d 3e 66 6c 61 67 73 20 3d 20 66 6c 61 67 73  3->flags = flags
23370 33 3b 20 20 2f 2a 20 42 75 74 20 63 6f 6e 76 65  3;  /* But conve
23380 72 74 20 74 68 65 20 74 79 70 65 20 62 61 63 6b  rt the type back
23390 20 74 6f 20 69 74 73 20 6f 72 69 67 69 6e 61 6c   to its original
233a0 20 2a 2f 0a 0a 20 20 20 20 2f 2a 20 49 66 20 74   */..    /* If t
233b0 68 65 20 50 33 20 76 61 6c 75 65 20 63 6f 75 6c  he P3 value coul
233c0 64 20 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74  d not be convert
233d0 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67  ed into an integ
233e0 65 72 20 77 69 74 68 6f 75 74 0a 20 20 20 20 2a  er without.    *
233f0 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d  * loss of inform
23400 61 74 69 6f 6e 2c 20 74 68 65 6e 20 73 70 65 63  ation, then spec
23410 69 61 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 69  ial processing i
23420 73 20 72 65 71 75 69 72 65 64 2e 2e 2e 20 2a 2f  s required... */
23430 0a 20 20 20 20 69 66 28 20 28 6e 65 77 54 79 70  .    if( (newTyp
23440 65 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d  e & (MEM_Int|MEM
23450 5f 49 6e 74 52 65 61 6c 29 29 3d 3d 30 20 29 7b  _IntReal))==0 ){
23460 0a 20 20 20 20 20 20 69 66 28 20 28 6e 65 77 54  .      if( (newT
23470 79 70 65 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d  ype & MEM_Real)=
23480 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66  =0 ){.        if
23490 28 20 28 6e 65 77 54 79 70 65 20 26 20 4d 45 4d  ( (newType & MEM
234a0 5f 4e 75 6c 6c 29 20 7c 7c 20 6f 63 3e 3d 4f 50  _Null) || oc>=OP
234b0 5f 53 65 65 6b 47 45 20 29 7b 0a 20 20 20 20 20  _SeekGE ){.     
234c0 20 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54       VdbeBranchT
234d0 61 6b 65 6e 28 31 2c 32 29 3b 0a 20 20 20 20 20  aken(1,2);.     
234e0 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74       goto jump_t
234f0 6f 5f 70 32 3b 0a 20 20 20 20 20 20 20 20 7d 65  o_p2;.        }e
23500 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 72  lse{.          r
23510 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
23520 4c 61 73 74 28 70 43 2d 3e 75 63 2e 70 43 75 72  Last(pC->uc.pCur
23530 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  sor, &res);.    
23540 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
23550 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
23560 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
23570 72 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  r;.          got
23580 6f 20 73 65 65 6b 5f 6e 6f 74 5f 66 6f 75 6e 64  o seek_not_found
23590 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
235a0 20 20 7d 65 6c 73 65 0a 0a 20 20 20 20 20 20 2f    }else..      /
235b0 2a 20 49 66 20 74 68 65 20 61 70 70 72 6f 78 69  * If the approxi
235c0 6d 61 74 69 6f 6e 20 69 4b 65 79 20 69 73 20 6c  mation iKey is l
235d0 61 72 67 65 72 20 74 68 61 6e 20 74 68 65 20 61  arger than the a
235e0 63 74 75 61 6c 20 72 65 61 6c 20 73 65 61 72 63  ctual real searc
235f0 68 0a 20 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c  h.      ** term,
23600 20 73 75 62 73 74 69 74 75 74 65 20 3e 3d 20 66   substitute >= f
23610 6f 72 20 3e 20 61 6e 64 20 3c 20 66 6f 72 20 3c  or > and < for <
23620 3d 2e 20 65 2e 67 2e 20 69 66 20 74 68 65 20 73  =. e.g. if the s
23630 65 61 72 63 68 20 74 65 72 6d 0a 20 20 20 20 20  earch term.     
23640 20 2a 2a 20 69 73 20 34 2e 39 20 61 6e 64 20 74   ** is 4.9 and t
23650 68 65 20 69 6e 74 65 67 65 72 20 61 70 70 72 6f  he integer appro
23660 78 69 6d 61 74 69 6f 6e 20 35 3a 0a 20 20 20 20  ximation 5:.    
23670 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 20 20    **.      **   
23680 20 20 20 20 20 28 78 20 3e 20 20 34 2e 39 29 20       (x >  4.9) 
23690 20 20 20 2d 3e 20 20 20 20 20 28 78 20 3e 3d 20     ->     (x >= 
236a0 35 29 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20  5).      **     
236b0 20 20 20 28 78 20 3c 3d 20 34 2e 39 29 20 20 20     (x <= 4.9)   
236c0 20 2d 3e 20 20 20 20 20 28 78 20 3c 20 20 35 29   ->     (x <  5)
236d0 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
236e0 69 66 28 20 70 49 6e 33 2d 3e 75 2e 72 3c 28 64  if( pIn3->u.r<(d
236f0 6f 75 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20  ouble)iKey ){.  
23700 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50        assert( OP
23710 5f 53 65 65 6b 47 45 3d 3d 28 4f 50 5f 53 65 65  _SeekGE==(OP_See
23720 6b 47 54 2d 31 29 20 29 3b 0a 20 20 20 20 20 20  kGT-1) );.      
23730 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
23740 6b 4c 54 3d 3d 28 4f 50 5f 53 65 65 6b 4c 45 2d  kLT==(OP_SeekLE-
23750 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  1) );.        as
23760 73 65 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c 45  sert( (OP_SeekLE
23770 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f   & 0x0001)==(OP_
23780 53 65 65 6b 47 54 20 26 20 30 78 30 30 30 31 29  SeekGT & 0x0001)
23790 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20   );.        if( 
237a0 28 6f 63 20 26 20 30 78 30 30 30 31 29 3d 3d 28  (oc & 0x0001)==(
237b0 4f 50 5f 53 65 65 6b 47 54 20 26 20 30 78 30 30  OP_SeekGT & 0x00
237c0 30 31 29 20 29 20 6f 63 2d 2d 3b 0a 20 20 20 20  01) ) oc--;.    
237d0 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66    }..      /* If
237e0 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 69   the approximati
237f0 6f 6e 20 69 4b 65 79 20 69 73 20 73 6d 61 6c 6c  on iKey is small
23800 65 72 20 74 68 61 6e 20 74 68 65 20 61 63 74 75  er than the actu
23810 61 6c 20 72 65 61 6c 20 73 65 61 72 63 68 0a 20  al real search. 
23820 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75       ** term, su
23830 62 73 74 69 74 75 74 65 20 3c 3d 20 66 6f 72 20  bstitute <= for 
23840 3c 20 61 6e 64 20 3e 20 66 6f 72 20 3e 3d 2e 20  < and > for >=. 
23850 20 2a 2f 0a 20 20 20 20 20 20 65 6c 73 65 20 69   */.      else i
23860 66 28 20 70 49 6e 33 2d 3e 75 2e 72 3e 28 64 6f  f( pIn3->u.r>(do
23870 75 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20 20  uble)iKey ){.   
23880 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f       assert( OP_
23890 53 65 65 6b 4c 45 3d 3d 28 4f 50 5f 53 65 65 6b  SeekLE==(OP_Seek
238a0 4c 54 2b 31 29 20 29 3b 0a 20 20 20 20 20 20 20  LT+1) );.       
238b0 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
238c0 47 54 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 2b 31  GT==(OP_SeekGE+1
238d0 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  ) );.        ass
238e0 65 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c 54 20  ert( (OP_SeekLT 
238f0 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53  & 0x0001)==(OP_S
23900 65 65 6b 47 45 20 26 20 30 78 30 30 30 31 29 20  eekGE & 0x0001) 
23910 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28  );.        if( (
23920 6f 63 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f  oc & 0x0001)==(O
23930 50 5f 53 65 65 6b 4c 54 20 26 20 30 78 30 30 30  P_SeekLT & 0x000
23940 31 29 20 29 20 6f 63 2b 2b 3b 0a 20 20 20 20 20  1) ) oc++;.     
23950 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 72 63 20   }.    }.    rc 
23960 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
23970 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d  vetoUnpacked(pC-
23980 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 30 2c 20  >uc.pCursor, 0, 
23990 28 75 36 34 29 69 4b 65 79 2c 20 30 2c 20 26 72  (u64)iKey, 0, &r
239a0 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 6d 6f 76  es);.    pC->mov
239b0 65 74 6f 54 61 72 67 65 74 20 3d 20 69 4b 65 79  etoTarget = iKey
239c0 3b 20 20 2f 2a 20 55 73 65 64 20 62 79 20 4f 50  ;  /* Used by OP
239d0 5f 44 65 6c 65 74 65 20 2a 2f 0a 20 20 20 20 69  _Delete */.    i
239e0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
239f0 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61   ){.      goto a
23a00 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
23a10 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  r;.    }.  }else
23a20 7b 0a 20 20 20 20 2f 2a 20 46 6f 72 20 61 20 63  {.    /* For a c
23a30 75 72 73 6f 72 20 77 69 74 68 20 74 68 65 20 42  ursor with the B
23a40 54 52 45 45 5f 53 45 45 4b 5f 45 51 20 68 69 6e  TREE_SEEK_EQ hin
23a50 74 2c 20 6f 6e 6c 79 20 74 68 65 20 4f 50 5f 53  t, only the OP_S
23a60 65 65 6b 47 45 20 61 6e 64 0a 20 20 20 20 2a 2a  eekGE and.    **
23a70 20 4f 50 5f 53 65 65 6b 4c 45 20 6f 70 63 6f 64   OP_SeekLE opcod
23a80 65 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 2c 20  es are allowed, 
23a90 61 6e 64 20 74 68 65 73 65 20 6d 75 73 74 20 62  and these must b
23aa0 65 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f  e immediately fo
23ab0 6c 6c 6f 77 65 64 0a 20 20 20 20 2a 2a 20 62 79  llowed.    ** by
23ac0 20 61 6e 20 4f 50 5f 49 64 78 47 54 20 6f 72 20   an OP_IdxGT or 
23ad0 4f 50 5f 49 64 78 4c 54 20 6f 70 63 6f 64 65 2c  OP_IdxLT opcode,
23ae0 20 72 65 73 70 65 63 74 69 76 65 6c 79 2c 20 77   respectively, w
23af0 69 74 68 20 74 68 65 20 73 61 6d 65 20 6b 65 79  ith the same key
23b00 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
23b10 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
23b20 73 6f 72 48 61 73 48 69 6e 74 28 70 43 2d 3e 75  sorHasHint(pC->u
23b30 63 2e 70 43 75 72 73 6f 72 2c 20 42 54 52 45 45  c.pCursor, BTREE
23b40 5f 53 45 45 4b 5f 45 51 29 20 29 7b 0a 20 20 20  _SEEK_EQ) ){.   
23b50 20 20 20 65 71 4f 6e 6c 79 20 3d 20 31 3b 0a 20     eqOnly = 1;. 
23b60 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
23b70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65  ->opcode==OP_See
23b80 6b 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  kGE || pOp->opco
23b90 64 65 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 3b  de==OP_SeekLE );
23ba0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
23bb0 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50  Op[1].opcode==OP
23bc0 5f 49 64 78 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d  _IdxLT || pOp[1]
23bd0 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47  .opcode==OP_IdxG
23be0 54 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  T );.      asser
23bf0 74 28 20 70 4f 70 5b 31 5d 2e 70 31 3d 3d 70 4f  t( pOp[1].p1==pO
23c00 70 5b 30 5d 2e 70 31 20 29 3b 0a 20 20 20 20 20  p[0].p1 );.     
23c10 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e   assert( pOp[1].
23c20 70 32 3d 3d 70 4f 70 5b 30 5d 2e 70 32 20 29 3b  p2==pOp[0].p2 );
23c30 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
23c40 4f 70 5b 31 5d 2e 70 33 3d 3d 70 4f 70 5b 30 5d  Op[1].p3==pOp[0]
23c50 2e 70 33 20 29 3b 0a 20 20 20 20 20 20 61 73 73  .p3 );.      ass
23c60 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 34 2e 69  ert( pOp[1].p4.i
23c70 3d 3d 70 4f 70 5b 30 5d 2e 70 34 2e 69 20 29 3b  ==pOp[0].p4.i );
23c80 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6e 46 69 65  .    }..    nFie
23c90 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a  ld = pOp->p4.i;.
23ca0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
23cb0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
23cc0 32 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  2 );.    assert(
23cd0 20 6e 46 69 65 6c 64 3e 30 20 29 3b 0a 20 20 20   nField>0 );.   
23ce0 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
23cf0 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20  ->pKeyInfo;.    
23d00 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29  r.nField = (u16)
23d10 6e 46 69 65 6c 64 3b 0a 0a 20 20 20 20 2f 2a 20  nField;..    /* 
23d20 54 68 65 20 6e 65 78 74 20 6c 69 6e 65 20 6f 66  The next line of
23d30 20 63 6f 64 65 20 63 6f 6d 70 75 74 65 73 20 61   code computes a
23d40 73 20 66 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c 79 20  s follows, only 
23d50 66 61 73 74 65 72 3a 0a 20 20 20 20 2a 2a 20 20  faster:.    **  
23d60 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b   if( oc==OP_Seek
23d70 47 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65  GT || oc==OP_See
23d80 6b 4c 45 20 29 7b 0a 20 20 20 20 2a 2a 20 20 20  kLE ){.    **   
23d90 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d    r.default_rc =
23da0 20 2d 31 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 65   -1;.    **   }e
23db0 6c 73 65 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20  lse{.    **     
23dc0 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2b  r.default_rc = +
23dd0 31 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 0a 20 20  1;.    **   }.  
23de0 20 20 2a 2f 0a 20 20 20 20 72 2e 64 65 66 61 75    */.    r.defau
23df0 6c 74 5f 72 63 20 3d 20 28 28 31 20 26 20 28 6f  lt_rc = ((1 & (o
23e00 63 20 2d 20 4f 50 5f 53 65 65 6b 4c 54 29 29 20  c - OP_SeekLT)) 
23e10 3f 20 2d 31 20 3a 20 2b 31 29 3b 0a 20 20 20 20  ? -1 : +1);.    
23e20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53  assert( oc!=OP_S
23e30 65 65 6b 47 54 20 7c 7c 20 72 2e 64 65 66 61 75  eekGT || r.defau
23e40 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20  lt_rc==-1 );.   
23e50 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f   assert( oc!=OP_
23e60 53 65 65 6b 4c 45 20 7c 7c 20 72 2e 64 65 66 61  SeekLE || r.defa
23e70 75 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20  ult_rc==-1 );.  
23e80 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50    assert( oc!=OP
23e90 5f 53 65 65 6b 47 45 20 7c 7c 20 72 2e 64 65 66  _SeekGE || r.def
23ea0 61 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 20  ault_rc==+1 );. 
23eb0 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f     assert( oc!=O
23ec0 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 72 2e 64 65  P_SeekLT || r.de
23ed0 66 61 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a  fault_rc==+1 );.
23ee0 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61  .    r.aMem = &a
23ef0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69  Mem[pOp->p3];.#i
23f00 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
23f10 47 0a 20 20 20 20 7b 20 69 6e 74 20 69 3b 20 66  G.    { int i; f
23f20 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65  or(i=0; i<r.nFie
23f30 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28  ld; i++) assert(
23f40 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61   memIsValid(&r.a
23f50 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e  Mem[i]) ); }.#en
23f60 64 69 66 0a 20 20 20 20 72 2e 65 71 53 65 65 6e  dif.    r.eqSeen
23f70 20 3d 20 30 3b 0a 20 20 20 20 72 63 20 3d 20 73   = 0;.    rc = s
23f80 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
23f90 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75 63  oUnpacked(pC->uc
23fa0 2e 70 43 75 72 73 6f 72 2c 20 26 72 2c 20 30 2c  .pCursor, &r, 0,
23fb0 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69   0, &res);.    i
23fc0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
23fd0 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61   ){.      goto a
23fe0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
23ff0 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  r;.    }.    if(
24000 20 65 71 4f 6e 6c 79 20 26 26 20 72 2e 65 71 53   eqOnly && r.eqS
24010 65 65 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  een==0 ){.      
24020 61 73 73 65 72 74 28 20 72 65 73 21 3d 30 20 29  assert( res!=0 )
24030 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 73 65 65  ;.      goto see
24040 6b 5f 6e 6f 74 5f 66 6f 75 6e 64 3b 0a 20 20 20  k_not_found;.   
24050 20 7d 0a 20 20 7d 0a 23 69 66 64 65 66 20 53 51   }.  }.#ifdef SQ
24060 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69  LITE_TEST.  sqli
24070 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74  te3_search_count
24080 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28  ++;.#endif.  if(
24090 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47 45 20 29   oc>=OP_SeekGE )
240a0 7b 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f  {  assert( oc==O
240b0 50 5f 53 65 65 6b 47 45 20 7c 7c 20 6f 63 3d 3d  P_SeekGE || oc==
240c0 4f 50 5f 53 65 65 6b 47 54 20 29 3b 0a 20 20 20  OP_SeekGT );.   
240d0 20 69 66 28 20 72 65 73 3c 30 20 7c 7c 20 28 72   if( res<0 || (r
240e0 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f  es==0 && oc==OP_
240f0 53 65 65 6b 47 54 29 20 29 7b 0a 20 20 20 20 20  SeekGT) ){.     
24100 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20   res = 0;.      
24110 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
24120 65 4e 65 78 74 28 70 43 2d 3e 75 63 2e 70 43 75  eNext(pC->uc.pCu
24130 72 73 6f 72 2c 20 30 29 3b 0a 20 20 20 20 20 20  rsor, 0);.      
24140 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
24150 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  K ){.        if(
24160 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45   rc==SQLITE_DONE
24170 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63   ){.          rc
24180 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
24190 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 31 3b          res = 1;
241a0 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
241b0 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61            goto a
241c0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
241d0 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  r;.        }.   
241e0 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
241f0 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20        res = 0;. 
24200 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
24210 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50    assert( oc==OP
24220 5f 53 65 65 6b 4c 54 20 7c 7c 20 6f 63 3d 3d 4f  _SeekLT || oc==O
24230 50 5f 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20  P_SeekLE );.    
24240 69 66 28 20 72 65 73 3e 30 20 7c 7c 20 28 72 65  if( res>0 || (re
24250 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53  s==0 && oc==OP_S
24260 65 65 6b 4c 54 29 20 29 7b 0a 20 20 20 20 20 20  eekLT) ){.      
24270 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 72  res = 0;.      r
24280 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
24290 50 72 65 76 69 6f 75 73 28 70 43 2d 3e 75 63 2e  Previous(pC->uc.
242a0 70 43 75 72 73 6f 72 2c 20 30 29 3b 0a 20 20 20  pCursor, 0);.   
242b0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
242c0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
242d0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44  if( rc==SQLITE_D
242e0 4f 4e 45 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ONE ){.         
242f0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
24300 0a 20 20 20 20 20 20 20 20 20 20 72 65 73 20 3d  .          res =
24310 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73   1;.        }els
24320 65 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  e{.          got
24330 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
24340 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a  rror;.        }.
24350 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
24360 65 7b 0a 20 20 20 20 20 20 2f 2a 20 72 65 73 20  e{.      /* res 
24370 6d 69 67 68 74 20 62 65 20 6e 65 67 61 74 69 76  might be negativ
24380 65 20 62 65 63 61 75 73 65 20 74 68 65 20 74 61  e because the ta
24390 62 6c 65 20 69 73 20 65 6d 70 74 79 2e 20 20 43  ble is empty.  C
243a0 68 65 63 6b 20 74 6f 0a 20 20 20 20 20 20 2a 2a  heck to.      **
243b0 20 73 65 65 20 69 66 20 74 68 69 73 20 69 73 20   see if this is 
243c0 74 68 65 20 63 61 73 65 2e 0a 20 20 20 20 20 20  the case..      
243d0 2a 2f 0a 20 20 20 20 20 20 72 65 73 20 3d 20 73  */.      res = s
243e0 71 6c 69 74 65 33 42 74 72 65 65 45 6f 66 28 70  qlite3BtreeEof(p
243f0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a  C->uc.pCursor);.
24400 20 20 20 20 7d 0a 20 20 7d 0a 73 65 65 6b 5f 6e      }.  }.seek_n
24410 6f 74 5f 66 6f 75 6e 64 3a 0a 20 20 61 73 73 65  ot_found:.  asse
24420 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b  rt( pOp->p2>0 );
24430 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
24440 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
24450 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 67  if( res ){.    g
24460 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
24470 20 20 7d 65 6c 73 65 20 69 66 28 20 65 71 4f 6e    }else if( eqOn
24480 6c 79 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  ly ){.    assert
24490 28 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d  ( pOp[1].opcode=
244a0 3d 4f 50 5f 49 64 78 4c 54 20 7c 7c 20 70 4f 70  =OP_IdxLT || pOp
244b0 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  [1].opcode==OP_I
244c0 64 78 47 54 20 29 3b 0a 20 20 20 20 70 4f 70 2b  dxGT );.    pOp+
244d0 2b 3b 20 2f 2a 20 53 6b 69 70 20 74 68 65 20 4f  +; /* Skip the O
244e0 50 5f 49 64 78 4c 74 20 6f 72 20 4f 50 5f 49 64  P_IdxLt or OP_Id
244f0 78 47 54 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73  xGT that follows
24500 20 2a 2f 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   */.  }.  break;
24510 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
24520 65 65 6b 48 69 74 20 50 31 20 50 32 20 2a 20 2a  eekHit P1 P2 * *
24530 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
24540 73 65 65 6b 48 69 74 3d 50 32 0a 2a 2a 0a 2a 2a  seekHit=P2.**.**
24550 20 53 65 74 20 74 68 65 20 73 65 65 6b 48 69 74   Set the seekHit
24560 20 66 6c 61 67 20 6f 6e 20 63 75 72 73 6f 72 20   flag on cursor 
24570 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  P1 to the value 
24580 69 6e 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73 65  in P2..** The se
24590 65 6b 48 69 74 20 66 6c 61 67 20 69 73 20 75 73  ekHit flag is us
245a0 65 64 20 62 79 20 74 68 65 20 49 66 4e 6f 48 6f  ed by the IfNoHo
245b0 70 65 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  pe opcode..**.**
245c0 20 50 31 20 6d 75 73 74 20 62 65 20 61 20 76 61   P1 must be a va
245d0 6c 69 64 20 62 2d 74 72 65 65 20 63 75 72 73 6f  lid b-tree curso
245e0 72 2e 20 20 50 32 20 6d 75 73 74 20 62 65 20 61  r.  P2 must be a
245f0 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2c 0a   boolean value,.
24600 2a 2a 20 65 69 74 68 65 72 20 30 20 6f 72 20 31  ** either 0 or 1
24610 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  ..*/.case OP_See
24620 6b 48 69 74 3a 20 7b 0a 20 20 56 64 62 65 43 75  kHit: {.  VdbeCu
24630 72 73 6f 72 20 2a 70 43 3b 0a 20 20 61 73 73 65  rsor *pC;.  asse
24640 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
24650 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
24660 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
24670 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
24680 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
24690 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
246a0 4f 70 2d 3e 70 32 3d 3d 30 20 7c 7c 20 70 4f 70  Op->p2==0 || pOp
246b0 2d 3e 70 32 3d 3d 31 20 29 3b 0a 20 20 70 43 2d  ->p2==1 );.  pC-
246c0 3e 73 65 65 6b 48 69 74 20 3d 20 70 4f 70 2d 3e  >seekHit = pOp->
246d0 70 32 20 26 20 31 3b 0a 20 20 62 72 65 61 6b 3b  p2 & 1;.  break;
246e0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46  .}../* Opcode: F
246f0 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20 50 34  ound P1 P2 P3 P4
24700 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
24710 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
24720 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e  ** If P4==0 then
24730 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c   register P3 hol
24740 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72  ds a blob constr
24750 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63  ucted by MakeRec
24760 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30  ord.  If.** P4>0
24770 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
24780 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6f  3 is the first o
24790 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 74  f P4 registers t
247a0 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61  hat form an unpa
247b0 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a  cked.** record..
247c0 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20  **.** Cursor P1 
247d0 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62  is on an index b
247e0 74 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65  tree.  If the re
247f0 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20  cord identified 
24800 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20  by P3 and P4.** 
24810 69 73 20 61 20 70 72 65 66 69 78 20 6f 66 20 61  is a prefix of a
24820 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74  ny entry in P1 t
24830 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61  hen a jump is ma
24840 64 65 20 74 6f 20 50 32 20 61 6e 64 0a 2a 2a 20  de to P2 and.** 
24850 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74  P1 is left point
24860 69 6e 67 20 61 74 20 74 68 65 20 6d 61 74 63 68  ing at the match
24870 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a  ing entry..**.**
24880 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20   This operation 
24890 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
248a0 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65  r in a state whe
248b0 72 65 20 69 74 20 63 61 6e 20 62 65 0a 2a 2a 20  re it can be.** 
248c0 61 64 76 61 6e 63 65 64 20 69 6e 20 74 68 65 20  advanced in the 
248d0 66 6f 72 77 61 72 64 20 64 69 72 65 63 74 69 6f  forward directio
248e0 6e 2e 20 20 54 68 65 20 4e 65 78 74 20 69 6e 73  n.  The Next ins
248f0 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20 77 6f  truction will wo
24900 72 6b 2c 0a 2a 2a 20 62 75 74 20 6e 6f 74 20 74  rk,.** but not t
24910 68 65 20 50 72 65 76 20 69 6e 73 74 72 75 63 74  he Prev instruct
24920 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ion..**.** See a
24930 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e  lso: NotFound, N
24940 6f 43 6f 6e 66 6c 69 63 74 2c 20 4e 6f 74 45 78  oConflict, NotEx
24950 69 73 74 73 2e 20 53 65 65 6b 47 65 0a 2a 2f 0a  ists. SeekGe.*/.
24960 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 46 6f  /* Opcode: NotFo
24970 75 6e 64 20 50 31 20 50 32 20 50 33 20 50 34 20  und P1 P2 P3 P4 
24980 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  *.** Synopsis: k
24990 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
249a0 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20  * If P4==0 then 
249b0 72 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64  register P3 hold
249c0 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75  s a blob constru
249d0 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f  cted by MakeReco
249e0 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20  rd.  If.** P4>0 
249f0 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
24a00 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66   is the first of
24a10 20 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68   P4 registers th
24a20 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  at form an unpac
24a30 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a  ked.** record..*
24a40 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20  * .** Cursor P1 
24a50 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62  is on an index b
24a60 74 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65  tree.  If the re
24a70 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20  cord identified 
24a80 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20  by P3 and P4.** 
24a90 69 73 20 6e 6f 74 20 74 68 65 20 70 72 65 66 69  is not the prefi
24aa0 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69  x of any entry i
24ab0 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70  n P1 then a jump
24ac0 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 2e 20   is made to P2. 
24ad0 20 49 66 20 50 31 20 0a 2a 2a 20 64 6f 65 73 20   If P1 .** does 
24ae0 63 6f 6e 74 61 69 6e 20 61 6e 20 65 6e 74 72 79  contain an entry
24af0 20 77 68 6f 73 65 20 70 72 65 66 69 78 20 6d 61   whose prefix ma
24b00 74 63 68 65 73 20 74 68 65 20 50 33 2f 50 34 20  tches the P3/P4 
24b10 72 65 63 6f 72 64 20 74 68 65 6e 20 63 6f 6e 74  record then cont
24b20 72 6f 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74 68 72  rol.** falls thr
24b30 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
24b40 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 6e 64   instruction and
24b50 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e   P1 is left poin
24b60 74 69 6e 67 20 61 74 20 74 68 65 0a 2a 2a 20 6d  ting at the.** m
24b70 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a  atching entry..*
24b80 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74  *.** This operat
24b90 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20 63  ion leaves the c
24ba0 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65  ursor in a state
24bb0 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74   where it cannot
24bc0 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20   be.** advanced 
24bd0 69 6e 20 65 69 74 68 65 72 20 64 69 72 65 63 74  in either direct
24be0 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ion.  In other w
24bf0 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61  ords, the Next a
24c00 6e 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63 6f 64  nd Prev.** opcod
24c10 65 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b 20 61  es do not work a
24c20 66 74 65 72 20 74 68 69 73 20 6f 70 65 72 61 74  fter this operat
24c30 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ion..**.** See a
24c40 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 45  lso: Found, NotE
24c50 78 69 73 74 73 2c 20 4e 6f 43 6f 6e 66 6c 69 63  xists, NoConflic
24c60 74 2c 20 49 66 4e 6f 48 6f 70 65 0a 2a 2f 0a 2f  t, IfNoHope.*/./
24c70 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 48 6f  * Opcode: IfNoHo
24c80 70 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  pe P1 P2 P3 P4 *
24c90 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
24ca0 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
24cb0 20 52 65 67 69 73 74 65 72 20 50 33 20 69 73 20   Register P3 is 
24cc0 74 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20  the first of P4 
24cd0 72 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66  registers that f
24ce0 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a  orm an unpacked.
24cf0 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a  ** record..**.**
24d00 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e   Cursor P1 is on
24d10 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e   an index btree.
24d20 20 20 49 66 20 74 68 65 20 73 65 65 6b 48 69 74    If the seekHit
24d30 20 66 6c 61 67 20 69 73 20 73 65 74 20 6f 6e 20   flag is set on 
24d40 50 31 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 69 73  P1, then.** this
24d50 20 6f 70 63 6f 64 65 20 69 73 20 61 20 6e 6f 2d   opcode is a no-
24d60 6f 70 2e 20 20 42 75 74 20 69 66 20 74 68 65 20  op.  But if the 
24d70 73 65 65 6b 48 69 74 20 66 6c 61 67 20 6f 66 20  seekHit flag of 
24d80 50 31 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65  P1 is clear, the
24d90 6e 0a 2a 2a 20 63 68 65 63 6b 20 74 6f 20 73 65  n.** check to se
24da0 65 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e  e if there is an
24db0 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68  y entry in P1 th
24dc0 61 74 20 6d 61 74 63 68 65 73 20 74 68 65 0a 2a  at matches the.*
24dd0 2a 20 70 72 65 66 69 78 20 69 64 65 6e 74 69 66  * prefix identif
24de0 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50 34  ied by P3 and P4
24df0 2e 20 20 49 66 20 6e 6f 20 65 6e 74 72 79 20 6d  .  If no entry m
24e00 61 74 63 68 65 73 20 74 68 65 20 70 72 65 66 69  atches the prefi
24e10 78 2c 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 50 32  x,.** jump to P2
24e20 2e 20 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c  .  Otherwise fal
24e30 6c 20 74 68 72 6f 75 67 68 2e 0a 2a 2a 0a 2a 2a  l through..**.**
24e40 20 54 68 69 73 20 6f 70 63 6f 64 65 20 62 65 68   This opcode beh
24e50 61 76 65 73 20 6c 69 6b 65 20 4f 50 5f 4e 6f 74  aves like OP_Not
24e60 46 6f 75 6e 64 20 69 66 20 74 68 65 20 73 65 65  Found if the see
24e70 6b 48 69 74 0a 2a 2a 20 66 6c 61 67 20 69 73 20  kHit.** flag is 
24e80 63 6c 65 61 72 20 61 6e 64 20 69 74 20 62 65 68  clear and it beh
24e90 61 76 65 73 20 6c 69 6b 65 20 4f 50 5f 4e 6f 6f  aves like OP_Noo
24ea0 70 20 69 66 20 74 68 65 20 73 65 65 6b 48 69 74  p if the seekHit
24eb0 20 66 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a 2a   flag is set..**
24ec0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
24ed0 69 73 20 75 73 65 64 20 69 6e 20 49 4e 20 63 6c  is used in IN cl
24ee0 61 75 73 65 20 70 72 6f 63 65 73 73 69 6e 67 20  ause processing 
24ef0 66 6f 72 20 61 20 6d 75 6c 74 69 2d 63 6f 6c 75  for a multi-colu
24f00 6d 6e 20 6b 65 79 2e 0a 2a 2a 20 49 66 20 61 6e  mn key..** If an
24f10 20 49 4e 20 63 6c 61 75 73 65 20 69 73 20 61 74   IN clause is at
24f20 74 61 63 68 65 64 20 74 6f 20 61 6e 20 65 6c 65  tached to an ele
24f30 6d 65 6e 74 20 6f 66 20 74 68 65 20 6b 65 79 20  ment of the key 
24f40 6f 74 68 65 72 20 74 68 61 6e 20 74 68 65 0a 2a  other than the.*
24f50 2a 20 6c 65 66 74 2d 6d 6f 73 74 20 65 6c 65 6d  * left-most elem
24f60 65 6e 74 2c 20 61 6e 64 20 69 66 20 74 68 65 72  ent, and if ther
24f70 65 20 61 72 65 20 6e 6f 20 6d 61 74 63 68 65 73  e are no matches
24f80 20 6f 6e 20 74 68 65 20 6d 6f 73 74 20 72 65 63   on the most rec
24f90 65 6e 74 0a 2a 2a 20 73 65 65 6b 20 6f 76 65 72  ent.** seek over
24fa0 20 74 68 65 20 77 68 6f 6c 65 20 6b 65 79 2c 20   the whole key, 
24fb0 74 68 65 6e 20 69 74 20 6d 69 67 68 74 20 62 65  then it might be
24fc0 20 74 68 61 74 20 6f 6e 65 20 6f 66 20 74 68 65   that one of the
24fd0 20 6b 65 79 20 65 6c 65 6d 65 6e 74 0a 2a 2a 20   key element.** 
24fe0 74 6f 20 74 68 65 20 6c 65 66 74 20 69 73 20 70  to the left is p
24ff0 72 6f 68 69 62 69 74 69 6e 67 20 61 20 6d 61 74  rohibiting a mat
25000 63 68 2c 20 61 6e 64 20 68 65 6e 63 65 20 74 68  ch, and hence th
25010 65 72 65 20 69 73 20 22 6e 6f 20 68 6f 70 65 22  ere is "no hope"
25020 20 6f 66 0a 2a 2a 20 61 6e 79 20 6d 61 74 63 68   of.** any match
25030 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 68   regardless of h
25040 6f 77 20 6d 61 6e 79 20 49 4e 20 63 6c 61 75 73  ow many IN claus
25050 65 20 65 6c 65 6d 65 6e 74 73 20 61 72 65 20 63  e elements are c
25060 68 65 63 6b 65 64 2e 0a 2a 2a 20 49 6e 20 73 75  hecked..** In su
25070 63 68 20 61 20 63 61 73 65 2c 20 77 65 20 61 62  ch a case, we ab
25080 61 6e 64 6f 6e 20 74 68 65 20 49 4e 20 63 6c 61  andon the IN cla
25090 75 73 65 20 73 65 61 72 63 68 20 65 61 72 6c 79  use search early
250a0 2c 20 75 73 69 6e 67 20 74 68 69 73 0a 2a 2a 20  , using this.** 
250b0 6f 70 63 6f 64 65 2e 20 20 54 68 65 20 6f 70 63  opcode.  The opc
250c0 6f 64 65 20 6e 61 6d 65 20 63 6f 6d 65 73 20 66  ode name comes f
250d0 72 6f 6d 20 74 68 65 20 66 61 63 74 20 74 68 61  rom the fact tha
250e0 74 20 74 68 65 0a 2a 2a 20 6a 75 6d 70 20 69 73  t the.** jump is
250f0 20 74 61 6b 65 6e 20 69 66 20 74 68 65 72 65 20   taken if there 
25100 69 73 20 22 6e 6f 20 68 6f 70 65 22 20 6f 66 20  is "no hope" of 
25110 61 63 68 69 65 76 69 6e 67 20 61 20 6d 61 74 63  achieving a matc
25120 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  h..**.** See als
25130 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65  o: NotFound, See
25140 6b 48 69 74 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  kHit.*/./* Opcod
25150 65 3a 20 4e 6f 43 6f 6e 66 6c 69 63 74 20 50 31  e: NoConflict P1
25160 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
25170 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
25180 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50  3@P4].**.** If P
25190 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74  4==0 then regist
251a0 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c  er P3 holds a bl
251b0 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ob constructed b
251c0 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49  y MakeRecord.  I
251d0 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72  f.** P4>0 then r
251e0 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68  egister P3 is th
251f0 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65  e first of P4 re
25200 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72  gisters that for
25210 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a  m an unpacked.**
25220 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20   record..** .** 
25230 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20  Cursor P1 is on 
25240 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20  an index btree. 
25250 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69   If the record i
25260 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20  dentified by P3 
25270 61 6e 64 20 50 34 0a 2a 2a 20 63 6f 6e 74 61 69  and P4.** contai
25280 6e 73 20 61 6e 79 20 4e 55 4c 4c 20 76 61 6c 75  ns any NULL valu
25290 65 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  e, jump immediat
252a0 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20 61  ely to P2.  If a
252b0 6c 6c 20 74 65 72 6d 73 20 6f 66 20 74 68 65 0a  ll terms of the.
252c0 2a 2a 20 72 65 63 6f 72 64 20 61 72 65 20 6e 6f  ** record are no
252d0 74 2d 4e 55 4c 4c 20 74 68 65 6e 20 61 20 63 68  t-NULL then a ch
252e0 65 63 6b 20 69 73 20 64 6f 6e 65 20 74 6f 20 64  eck is done to d
252f0 65 74 65 72 6d 69 6e 65 20 69 66 20 61 6e 79 20  etermine if any 
25300 72 6f 77 20 69 6e 20 74 68 65 0a 2a 2a 20 50 31  row in the.** P1
25310 20 69 6e 64 65 78 20 62 74 72 65 65 20 68 61 73   index btree has
25320 20 61 20 6d 61 74 63 68 69 6e 67 20 6b 65 79 20   a matching key 
25330 70 72 65 66 69 78 2e 20 20 49 66 20 74 68 65 72  prefix.  If ther
25340 65 20 61 72 65 20 6e 6f 20 6d 61 74 63 68 65 73  e are no matches
25350 2c 20 6a 75 6d 70 0a 2a 2a 20 69 6d 6d 65 64 69  , jump.** immedi
25360 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66  ately to P2.  If
25370 20 74 68 65 72 65 20 69 73 20 61 20 6d 61 74 63   there is a matc
25380 68 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  h, fall through 
25390 61 6e 64 20 6c 65 61 76 65 20 74 68 65 20 50 31  and leave the P1
253a0 0a 2a 2a 20 63 75 72 73 6f 72 20 70 6f 69 6e 74  .** cursor point
253b0 69 6e 67 20 74 6f 20 74 68 65 20 6d 61 74 63 68  ing to the match
253c0 69 6e 67 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 54  ing row..**.** T
253d0 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 73 69  his opcode is si
253e0 6d 69 6c 61 72 20 74 6f 20 4f 50 5f 4e 6f 74 46  milar to OP_NotF
253f0 6f 75 6e 64 20 77 69 74 68 20 74 68 65 20 65 78  ound with the ex
25400 63 65 70 74 69 6f 6e 73 20 74 68 61 74 20 74 68  ceptions that th
25410 65 0a 2a 2a 20 62 72 61 6e 63 68 20 69 73 20 61  e.** branch is a
25420 6c 77 61 79 73 20 74 61 6b 65 6e 20 69 66 20 61  lways taken if a
25430 6e 79 20 70 61 72 74 20 6f 66 20 74 68 65 20 73  ny part of the s
25440 65 61 72 63 68 20 6b 65 79 20 69 6e 70 75 74 20  earch key input 
25450 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54  is NULL..**.** T
25460 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65  his operation le
25470 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
25480 69 6e 20 61 20 73 74 61 74 65 20 77 68 65 72 65  in a state where
25490 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a   it cannot be.**
254a0 20 61 64 76 61 6e 63 65 64 20 69 6e 20 65 69 74   advanced in eit
254b0 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20  her direction.  
254c0 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
254d0 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65  the Next and Pre
254e0 76 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f 20  v.** opcodes do 
254f0 6e 6f 74 20 77 6f 72 6b 20 61 66 74 65 72 20 74  not work after t
25500 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a  his operation..*
25510 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e  *.** See also: N
25520 6f 74 46 6f 75 6e 64 2c 20 46 6f 75 6e 64 2c 20  otFound, Found, 
25530 4e 6f 74 45 78 69 73 74 73 0a 2a 2f 0a 63 61 73  NotExists.*/.cas
25540 65 20 4f 50 5f 49 66 4e 6f 48 6f 70 65 3a 20 7b  e OP_IfNoHope: {
25550 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
25560 33 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  3 */.  VdbeCurso
25570 72 20 2a 70 43 3b 0a 20 20 61 73 73 65 72 74 28  r *pC;.  assert(
25580 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
25590 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
255a0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
255b0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
255c0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
255d0 3b 0a 20 20 69 66 28 20 70 43 2d 3e 73 65 65 6b  ;.  if( pC->seek
255e0 48 69 74 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f  Hit ) break;.  /
255f0 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69  * Fall through i
25600 6e 74 6f 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20  nto OP_NotFound 
25610 2a 2f 0a 7d 0a 63 61 73 65 20 4f 50 5f 4e 6f 43  */.}.case OP_NoC
25620 6f 6e 66 6c 69 63 74 3a 20 20 20 20 20 2f 2a 20  onflict:     /* 
25630 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73  jump, in3 */.cas
25640 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20  e OP_NotFound:  
25650 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
25660 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6f 75  3 */.case OP_Fou
25670 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  nd: {        /* 
25680 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69  jump, in3 */.  i
25690 6e 74 20 61 6c 72 65 61 64 79 45 78 69 73 74 73  nt alreadyExists
256a0 3b 0a 20 20 69 6e 74 20 74 61 6b 65 4a 75 6d 70  ;.  int takeJump
256b0 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 20 20 56 64  ;.  int ii;.  Vd
256c0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
256d0 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63  int res;.  Unpac
256e0 6b 65 64 52 65 63 6f 72 64 20 2a 70 46 72 65 65  kedRecord *pFree
256f0 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
25700 72 64 20 2a 70 49 64 78 4b 65 79 3b 0a 20 20 55  rd *pIdxKey;.  U
25710 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b  npackedRecord r;
25720 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
25730 54 45 53 54 0a 20 20 69 66 28 20 70 4f 70 2d 3e  TEST.  if( pOp->
25740 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 6f 43 6f 6e  opcode!=OP_NoCon
25750 66 6c 69 63 74 20 29 20 73 71 6c 69 74 65 33 5f  flict ) sqlite3_
25760 66 6f 75 6e 64 5f 63 6f 75 6e 74 2b 2b 3b 0a 23  found_count++;.#
25770 65 6e 64 69 66 0a 0a 20 20 61 73 73 65 72 74 28  endif..  assert(
25780 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
25790 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
257a0 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
257b0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
257c0 4e 54 33 32 20 29 3b 0a 20 20 70 43 20 3d 20 70  NT32 );.  pC = p
257d0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
257e0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
257f0 30 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  0 );.#ifdef SQLI
25800 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73  TE_DEBUG.  pC->s
25810 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63  eekOp = pOp->opc
25820 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 20 20 70 49  ode;.#endif.  pI
25830 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
25840 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p3];.  assert( p
25850 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
25860 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
25870 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70  assert( pC->uc.p
25880 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61  Cursor!=0 );.  a
25890 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
258a0 6c 65 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 70  le==0 );.  if( p
258b0 4f 70 2d 3e 70 34 2e 69 3e 30 20 29 7b 0a 20 20  Op->p4.i>0 ){.  
258c0 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
258d0 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  C->pKeyInfo;.   
258e0 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36   r.nField = (u16
258f0 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20  )pOp->p4.i;.    
25900 72 2e 61 4d 65 6d 20 3d 20 70 49 6e 33 3b 0a 23  r.aMem = pIn3;.#
25910 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
25920 55 47 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b  UG.    for(ii=0;
25930 20 69 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 69   ii<r.nField; ii
25940 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  ++){.      asser
25950 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72  t( memIsValid(&r
25960 2e 61 4d 65 6d 5b 69 69 5d 29 20 29 3b 0a 20 20  .aMem[ii]) );.  
25970 20 20 20 20 61 73 73 65 72 74 28 20 28 72 2e 61      assert( (r.a
25980 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20  Mem[ii].flags & 
25990 4d 45 4d 5f 5a 65 72 6f 29 3d 3d 30 20 7c 7c 20  MEM_Zero)==0 || 
259a0 72 2e 61 4d 65 6d 5b 69 69 5d 2e 6e 3d 3d 30 20  r.aMem[ii].n==0 
259b0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 69 69 20  );.      if( ii 
259c0 29 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45  ) REGISTER_TRACE
259d0 28 70 4f 70 2d 3e 70 33 2b 69 69 2c 20 26 72 2e  (pOp->p3+ii, &r.
259e0 61 4d 65 6d 5b 69 69 5d 29 3b 0a 20 20 20 20 7d  aMem[ii]);.    }
259f0 0a 23 65 6e 64 69 66 0a 20 20 20 20 70 49 64 78  .#endif.    pIdx
25a00 4b 65 79 20 3d 20 26 72 3b 0a 20 20 20 20 70 46  Key = &r;.    pF
25a10 72 65 65 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65  ree = 0;.  }else
25a20 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49  {.    assert( pI
25a30 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
25a40 42 6c 6f 62 20 29 3b 0a 20 20 20 20 72 63 20 3d  Blob );.    rc =
25a50 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33   ExpandBlob(pIn3
25a60 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  );.    assert( r
25a70 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
25a80 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  rc==SQLITE_NOMEM
25a90 20 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29   );.    if( rc )
25aa0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
25ab0 20 20 70 46 72 65 65 20 3d 20 70 49 64 78 4b 65    pFree = pIdxKe
25ac0 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  y = sqlite3VdbeA
25ad0 6c 6c 6f 63 55 6e 70 61 63 6b 65 64 52 65 63 6f  llocUnpackedReco
25ae0 72 64 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 29  rd(pC->pKeyInfo)
25af0 3b 0a 20 20 20 20 69 66 28 20 70 49 64 78 4b 65  ;.    if( pIdxKe
25b00 79 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  y==0 ) goto no_m
25b10 65 6d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  em;.    sqlite3V
25b20 64 62 65 52 65 63 6f 72 64 55 6e 70 61 63 6b 28  dbeRecordUnpack(
25b30 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 70 49  pC->pKeyInfo, pI
25b40 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c 20  n3->n, pIn3->z, 
25b50 70 49 64 78 4b 65 79 29 3b 0a 20 20 7d 0a 20 20  pIdxKey);.  }.  
25b60 70 49 64 78 4b 65 79 2d 3e 64 65 66 61 75 6c 74  pIdxKey->default
25b70 5f 72 63 20 3d 20 30 3b 0a 20 20 74 61 6b 65 4a  _rc = 0;.  takeJ
25b80 75 6d 70 20 3d 20 30 3b 0a 20 20 69 66 28 20 70  ump = 0;.  if( p
25b90 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e  Op->opcode==OP_N
25ba0 6f 43 6f 6e 66 6c 69 63 74 20 29 7b 0a 20 20 20  oConflict ){.   
25bb0 20 2f 2a 20 46 6f 72 20 74 68 65 20 4f 50 5f 4e   /* For the OP_N
25bc0 6f 43 6f 6e 66 6c 69 63 74 20 6f 70 63 6f 64 65  oConflict opcode
25bd0 2c 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20  , take the jump 
25be0 69 66 20 61 6e 79 20 6f 66 20 74 68 65 0a 20 20  if any of the.  
25bf0 20 20 2a 2a 20 69 6e 70 75 74 20 66 69 65 6c 64    ** input field
25c00 73 20 61 72 65 20 4e 55 4c 4c 2c 20 73 69 6e 63  s are NULL, sinc
25c10 65 20 61 6e 79 20 6b 65 79 20 77 69 74 68 20 61  e any key with a
25c20 20 4e 55 4c 4c 20 77 69 6c 6c 20 6e 6f 74 0a 20   NULL will not. 
25c30 20 20 20 2a 2a 20 63 6f 6e 66 6c 69 63 74 20 2a     ** conflict *
25c40 2f 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20  /.    for(ii=0; 
25c50 69 69 3c 70 49 64 78 4b 65 79 2d 3e 6e 46 69 65  ii<pIdxKey->nFie
25c60 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20  ld; ii++){.     
25c70 20 69 66 28 20 70 49 64 78 4b 65 79 2d 3e 61 4d   if( pIdxKey->aM
25c80 65 6d 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d  em[ii].flags & M
25c90 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 20  EM_Null ){.     
25ca0 20 20 20 74 61 6b 65 4a 75 6d 70 20 3d 20 31 3b     takeJump = 1;
25cb0 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
25cc0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
25cd0 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  }.  rc = sqlite3
25ce0 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
25cf0 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  ked(pC->uc.pCurs
25d00 6f 72 2c 20 70 49 64 78 4b 65 79 2c 20 30 2c 20  or, pIdxKey, 0, 
25d10 30 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20  0, &res);.  if( 
25d20 70 46 72 65 65 20 29 20 73 71 6c 69 74 65 33 44  pFree ) sqlite3D
25d30 62 46 72 65 65 4e 4e 28 64 62 2c 20 70 46 72 65  bFreeNN(db, pFre
25d40 65 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51  e);.  if( rc!=SQ
25d50 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 67  LITE_OK ){.    g
25d60 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
25d70 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 43  _error;.  }.  pC
25d80 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 72  ->seekResult = r
25d90 65 73 3b 0a 20 20 61 6c 72 65 61 64 79 45 78 69  es;.  alreadyExi
25da0 73 74 73 20 3d 20 28 72 65 73 3d 3d 30 29 3b 0a  sts = (res==0);.
25db0 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
25dc0 31 2d 61 6c 72 65 61 64 79 45 78 69 73 74 73 3b  1-alreadyExists;
25dd0 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  .  pC->deferredM
25de0 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d  oveto = 0;.  pC-
25df0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
25e00 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66  ACHE_STALE;.  if
25e10 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
25e20 50 5f 46 6f 75 6e 64 20 29 7b 0a 20 20 20 20 56  P_Found ){.    V
25e30 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 61  dbeBranchTaken(a
25e40 6c 72 65 61 64 79 45 78 69 73 74 73 21 3d 30 2c  lreadyExists!=0,
25e50 32 29 3b 0a 20 20 20 20 69 66 28 20 61 6c 72 65  2);.    if( alre
25e60 61 64 79 45 78 69 73 74 73 20 29 20 67 6f 74 6f  adyExists ) goto
25e70 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
25e80 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72  else{.    VdbeBr
25e90 61 6e 63 68 54 61 6b 65 6e 28 74 61 6b 65 4a 75  anchTaken(takeJu
25ea0 6d 70 7c 7c 61 6c 72 65 61 64 79 45 78 69 73 74  mp||alreadyExist
25eb0 73 3d 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28  s==0,2);.    if(
25ec0 20 74 61 6b 65 4a 75 6d 70 20 7c 7c 20 21 61 6c   takeJump || !al
25ed0 72 65 61 64 79 45 78 69 73 74 73 20 29 20 67 6f  readyExists ) go
25ee0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
25ef0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
25f00 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 52 6f  * Opcode: SeekRo
25f10 77 69 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a  wid P1 P2 P3 * *
25f20 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e  .** Synopsis: in
25f30 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a  tkey=r[P3].**.**
25f40 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78   P1 is the index
25f50 20 6f 66 20 61 20 63 75 72 73 6f 72 20 6f 70 65   of a cursor ope
25f60 6e 20 6f 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c  n on an SQL tabl
25f70 65 20 62 74 72 65 65 20 28 77 69 74 68 20 69 6e  e btree (with in
25f80 74 65 67 65 72 0a 2a 2a 20 6b 65 79 73 29 2e 20  teger.** keys). 
25f90 20 49 66 20 72 65 67 69 73 74 65 72 20 50 33 20   If register P3 
25fa0 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e  does not contain
25fb0 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 69   an integer or i
25fc0 66 20 50 31 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a  f P1 does not.**
25fd0 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f 72   contain a recor
25fe0 64 20 77 69 74 68 20 72 6f 77 69 64 20 50 33 20  d with rowid P3 
25ff0 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69  then jump immedi
26000 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 0a 2a  ately to P2.  .*
26010 2a 20 4f 72 2c 20 69 66 20 50 32 20 69 73 20 30  * Or, if P2 is 0
26020 2c 20 72 61 69 73 65 20 61 6e 20 53 51 4c 49 54  , raise an SQLIT
26030 45 5f 43 4f 52 52 55 50 54 20 65 72 72 6f 72 2e  E_CORRUPT error.
26040 20 49 66 20 50 31 20 64 6f 65 73 20 63 6f 6e 74   If P1 does cont
26050 61 69 6e 0a 2a 2a 20 61 20 72 65 63 6f 72 64 20  ain.** a record 
26060 77 69 74 68 20 72 6f 77 69 64 20 50 33 20 74 68  with rowid P3 th
26070 65 6e 20 0a 2a 2a 20 6c 65 61 76 65 20 74 68 65  en .** leave the
26080 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67   cursor pointing
26090 20 61 74 20 74 68 61 74 20 72 65 63 6f 72 64 20   at that record 
260a0 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  and fall through
260b0 20 74 6f 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20   to the next.** 
260c0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
260d0 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 45 78 69  ** The OP_NotExi
260e0 73 74 73 20 6f 70 63 6f 64 65 20 70 65 72 66 6f  sts opcode perfo
260f0 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70 65  rms the same ope
26100 72 61 74 69 6f 6e 2c 20 62 75 74 20 77 69 74 68  ration, but with
26110 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 0a 2a 2a   OP_NotExists.**
26120 20 74 68 65 20 50 33 20 72 65 67 69 73 74 65 72   the P3 register
26130 20 6d 75 73 74 20 62 65 20 67 75 61 72 61 6e 74   must be guarant
26140 65 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 61  eed to contain a
26150 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e  n integer value.
26160 20 20 57 69 74 68 20 74 68 69 73 0a 2a 2a 20 6f    With this.** o
26170 70 63 6f 64 65 2c 20 72 65 67 69 73 74 65 72 20  pcode, register 
26180 50 33 20 6d 69 67 68 74 20 6e 6f 74 20 63 6f 6e  P3 might not con
26190 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e  tain an integer.
261a0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f  .**.** The OP_No
261b0 74 46 6f 75 6e 64 20 6f 70 63 6f 64 65 20 70 65  tFound opcode pe
261c0 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20  rforms the same 
261d0 6f 70 65 72 61 74 69 6f 6e 20 6f 6e 20 69 6e 64  operation on ind
261e0 65 78 20 62 74 72 65 65 73 0a 2a 2a 20 28 77 69  ex btrees.** (wi
261f0 74 68 20 61 72 62 69 74 72 61 72 79 20 6d 75 6c  th arbitrary mul
26200 74 69 2d 76 61 6c 75 65 20 6b 65 79 73 29 2e 0a  ti-value keys)..
26210 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
26220 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  e leaves the cur
26230 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77  sor in a state w
26240 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62  here it cannot b
26250 65 20 61 64 76 61 6e 63 65 64 0a 2a 2a 20 69 6e  e advanced.** in
26260 20 65 69 74 68 65 72 20 64 69 72 65 63 74 69 6f   either directio
26270 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  n.  In other wor
26280 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64  ds, the Next and
26290 20 50 72 65 76 20 6f 70 63 6f 64 65 73 20 77 69   Prev opcodes wi
262a0 6c 6c 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20 66  ll.** not work f
262b0 6f 6c 6c 6f 77 69 6e 67 20 74 68 69 73 20 6f 70  ollowing this op
262c0 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  code..**.** See 
262d0 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
262e0 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63  Found, NoConflic
262f0 74 2c 20 53 65 65 6b 52 6f 77 69 64 0a 2a 2f 0a  t, SeekRowid.*/.
26300 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 45 78  /* Opcode: NotEx
26310 69 73 74 73 20 50 31 20 50 32 20 50 33 20 2a 20  ists P1 P2 P3 * 
26320 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
26330 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a  ntkey=r[P3].**.*
26340 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65  * P1 is the inde
26350 78 20 6f 66 20 61 20 63 75 72 73 6f 72 20 6f 70  x of a cursor op
26360 65 6e 20 6f 6e 20 61 6e 20 53 51 4c 20 74 61 62  en on an SQL tab
26370 6c 65 20 62 74 72 65 65 20 28 77 69 74 68 20 69  le btree (with i
26380 6e 74 65 67 65 72 0a 2a 2a 20 6b 65 79 73 29 2e  nteger.** keys).
26390 20 20 50 33 20 69 73 20 61 6e 20 69 6e 74 65 67    P3 is an integ
263a0 65 72 20 72 6f 77 69 64 2e 20 20 49 66 20 50 31  er rowid.  If P1
263b0 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69   does not contai
263c0 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74 68 0a  n a record with.
263d0 2a 2a 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e  ** rowid P3 then
263e0 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
263f0 79 20 74 6f 20 50 32 2e 20 20 4f 72 2c 20 69 66  y to P2.  Or, if
26400 20 50 32 20 69 73 20 30 2c 20 72 61 69 73 65 20   P2 is 0, raise 
26410 61 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 43 4f 52  an.** SQLITE_COR
26420 52 55 50 54 20 65 72 72 6f 72 2e 20 49 66 20 50  RUPT error. If P
26430 31 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61  1 does contain a
26440 20 72 65 63 6f 72 64 20 77 69 74 68 20 72 6f 77   record with row
26450 69 64 20 50 33 20 74 68 65 6e 20 0a 2a 2a 20 6c  id P3 then .** l
26460 65 61 76 65 20 74 68 65 20 63 75 72 73 6f 72 20  eave the cursor 
26470 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 61 74  pointing at that
26480 20 72 65 63 6f 72 64 20 61 6e 64 20 66 61 6c 6c   record and fall
26490 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
264a0 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75 63 74  next.** instruct
264b0 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f  ion..**.** The O
264c0 50 5f 53 65 65 6b 52 6f 77 69 64 20 6f 70 63 6f  P_SeekRowid opco
264d0 64 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65 20  de performs the 
264e0 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 62  same operation b
264f0 75 74 20 61 6c 73 6f 20 61 6c 6c 6f 77 73 20 74  ut also allows t
26500 68 65 0a 2a 2a 20 50 33 20 72 65 67 69 73 74 65  he.** P3 registe
26510 72 20 74 6f 20 63 6f 6e 74 61 69 6e 20 61 20 6e  r to contain a n
26520 6f 6e 2d 69 6e 74 65 67 65 72 20 76 61 6c 75 65  on-integer value
26530 2c 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20  , in which case 
26540 74 68 65 20 6a 75 6d 70 20 69 73 0a 2a 2a 20 61  the jump is.** a
26550 6c 77 61 79 73 20 74 61 6b 65 6e 2e 20 20 54 68  lways taken.  Th
26560 69 73 20 6f 70 63 6f 64 65 20 72 65 71 75 69 72  is opcode requir
26570 65 73 20 74 68 61 74 20 50 33 20 61 6c 77 61 79  es that P3 alway
26580 73 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  s contain an int
26590 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  eger..**.** The 
265a0 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 6f 70 63 6f  OP_NotFound opco
265b0 64 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65 20  de performs the 
265c0 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f  same operation o
265d0 6e 20 69 6e 64 65 78 20 62 74 72 65 65 73 0a 2a  n index btrees.*
265e0 2a 20 28 77 69 74 68 20 61 72 62 69 74 72 61 72  * (with arbitrar
265f0 79 20 6d 75 6c 74 69 2d 76 61 6c 75 65 20 6b 65  y multi-value ke
26600 79 73 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ys)..**.** This 
26610 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68  opcode leaves th
26620 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74  e cursor in a st
26630 61 74 65 20 77 68 65 72 65 20 69 74 20 63 61 6e  ate where it can
26640 6e 6f 74 20 62 65 20 61 64 76 61 6e 63 65 64 0a  not be advanced.
26650 2a 2a 20 69 6e 20 65 69 74 68 65 72 20 64 69 72  ** in either dir
26660 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65  ection.  In othe
26670 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78  r words, the Nex
26680 74 20 61 6e 64 20 50 72 65 76 20 6f 70 63 6f 64  t and Prev opcod
26690 65 73 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 77  es will.** not w
266a0 6f 72 6b 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  ork following th
266b0 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  is opcode..**.**
266c0 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
266d0 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f  , NotFound, NoCo
266e0 6e 66 6c 69 63 74 2c 20 53 65 65 6b 52 6f 77 69  nflict, SeekRowi
266f0 64 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  d.*/.case OP_See
26700 6b 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20  kRowid: {       
26710 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
26720 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
26730 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
26740 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  Crsr;.  int res;
26750 0a 20 20 75 36 34 20 69 4b 65 79 3b 0a 0a 20 20  .  u64 iKey;..  
26760 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
26770 2d 3e 70 33 5d 3b 0a 20 20 74 65 73 74 63 61 73  ->p3];.  testcas
26780 65 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  e( pIn3->flags &
26790 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 74 65   MEM_Int );.  te
267a0 73 74 63 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c  stcase( pIn3->fl
267b0 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 52 65 61  ags & MEM_IntRea
267c0 6c 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 33  l );.  if( (pIn3
267d0 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49  ->flags & (MEM_I
267e0 6e 74 7c 4d 45 4d 5f 49 6e 74 52 65 61 6c 29 29  nt|MEM_IntReal))
267f0 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 4d 61  ==0 ){.    /* Ma
26800 6b 65 20 73 75 72 65 20 70 49 6e 33 2d 3e 75 2e  ke sure pIn3->u.
26810 69 20 63 6f 6e 74 61 69 6e 73 20 61 20 76 61 6c  i contains a val
26820 69 64 20 69 6e 74 65 67 65 72 20 72 65 70 72 65  id integer repre
26830 73 65 6e 74 61 74 69 6f 6e 20 6f 66 0a 20 20 20  sentation of.   
26840 20 2a 2a 20 74 68 65 20 6b 65 79 20 76 61 6c 75   ** the key valu
26850 65 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 63 68  e, but do not ch
26860 61 6e 67 65 20 74 68 65 20 64 61 74 61 74 79 70  ange the datatyp
26870 65 20 6f 66 20 74 68 65 20 72 65 67 69 73 74 65  e of the registe
26880 72 2c 20 61 73 0a 20 20 20 20 2a 2a 20 6f 74 68  r, as.    ** oth
26890 65 72 20 70 61 72 74 73 20 6f 66 20 74 68 65 20  er parts of the 
268a0 70 65 72 70 61 72 65 64 20 73 74 61 74 65 6d 65  perpared stateme
268b0 6e 74 20 6d 69 67 68 74 20 62 65 20 64 65 70 65  nt might be depe
268c0 6e 64 69 6e 67 20 6f 6e 20 74 68 65 0a 20 20 20  nding on the.   
268d0 20 2a 2a 20 63 75 72 72 65 6e 74 20 64 61 74 61   ** current data
268e0 74 79 70 65 2e 20 2a 2f 0a 20 20 20 20 75 31 36  type. */.    u16
268f0 20 6f 72 69 67 46 6c 61 67 73 20 3d 20 70 49 6e   origFlags = pIn
26900 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 20 20 69 6e  3->flags;.    in
26910 74 20 69 73 4e 6f 74 49 6e 74 3b 0a 20 20 20 20  t isNotInt;.    
26920 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49  applyAffinity(pI
26930 6e 33 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e  n3, SQLITE_AFF_N
26940 55 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67  UMERIC, encoding
26950 29 3b 0a 20 20 20 20 69 73 4e 6f 74 49 6e 74 20  );.    isNotInt 
26960 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  = (pIn3->flags &
26970 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 3b 0a 20 20   MEM_Int)==0;.  
26980 20 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 3d 20    pIn3->flags = 
26990 6f 72 69 67 46 6c 61 67 73 3b 0a 20 20 20 20 69  origFlags;.    i
269a0 66 28 20 69 73 4e 6f 74 49 6e 74 20 29 20 67 6f  f( isNotInt ) go
269b0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
269c0 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72   }.  /* Fall thr
269d0 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 4e 6f 74  ough into OP_Not
269e0 45 78 69 73 74 73 20 2a 2f 0a 63 61 73 65 20 4f  Exists */.case O
269f0 50 5f 4e 6f 74 45 78 69 73 74 73 3a 20 20 20 20  P_NotExists:    
26a00 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
26a10 6e 33 20 2a 2f 0a 20 20 70 49 6e 33 20 3d 20 26  n3 */.  pIn3 = &
26a20 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
26a30 20 61 73 73 65 72 74 28 20 28 70 49 6e 33 2d 3e   assert( (pIn3->
26a40 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
26a50 21 3d 30 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  !=0 || pOp->opco
26a60 64 65 3d 3d 4f 50 5f 53 65 65 6b 52 6f 77 69 64  de==OP_SeekRowid
26a70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
26a80 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
26a90 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
26aa0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
26ab0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
26ac0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23  sert( pC!=0 );.#
26ad0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
26ae0 55 47 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  UG.  if( pOp->op
26af0 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 52 6f 77  code==OP_SeekRow
26b00 69 64 20 29 20 70 43 2d 3e 73 65 65 6b 4f 70 20  id ) pC->seekOp 
26b10 3d 20 4f 50 5f 53 65 65 6b 52 6f 77 69 64 3b 0a  = OP_SeekRowid;.
26b20 23 65 6e 64 69 66 0a 20 20 61 73 73 65 72 74 28  #endif.  assert(
26b30 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a   pC->isTable );.
26b40 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
26b50 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
26b60 42 54 52 45 45 20 29 3b 0a 20 20 70 43 72 73 72  BTREE );.  pCrsr
26b70 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f   = pC->uc.pCurso
26b80 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72  r;.  assert( pCr
26b90 73 72 21 3d 30 20 29 3b 0a 20 20 72 65 73 20 3d  sr!=0 );.  res =
26ba0 20 30 3b 0a 20 20 69 4b 65 79 20 3d 20 70 49 6e   0;.  iKey = pIn
26bb0 33 2d 3e 75 2e 69 3b 0a 20 20 72 63 20 3d 20 73  3->u.i;.  rc = s
26bc0 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
26bd0 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c  oUnpacked(pCrsr,
26be0 20 30 2c 20 69 4b 65 79 2c 20 30 2c 20 26 72 65   0, iKey, 0, &re
26bf0 73 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63  s);.  assert( rc
26c00 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72  ==SQLITE_OK || r
26c10 65 73 3d 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 6d  es==0 );.  pC->m
26c20 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20 69 4b  ovetoTarget = iK
26c30 65 79 3b 20 20 2f 2a 20 55 73 65 64 20 62 79 20  ey;  /* Used by 
26c40 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 20 20 70  OP_Delete */.  p
26c50 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a  C->nullRow = 0;.
26c60 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
26c70 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
26c80 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  .  pC->deferredM
26c90 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 56 64 62  oveto = 0;.  Vdb
26ca0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
26cb0 21 3d 30 2c 32 29 3b 0a 20 20 70 43 2d 3e 73 65  !=0,2);.  pC->se
26cc0 65 6b 52 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a  ekResult = res;.
26cd0 20 20 69 66 28 20 72 65 73 21 3d 30 20 29 7b 0a    if( res!=0 ){.
26ce0 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
26cf0 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 20  SQLITE_OK );.   
26d00 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20   if( pOp->p2==0 
26d10 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
26d20 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50  LITE_CORRUPT_BKP
26d30 54 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  T;.    }else{.  
26d40 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
26d50 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  _p2;.    }.  }. 
26d60 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
26d70 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
26d80 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  r;.  break;.}../
26d90 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71 75 65 6e  * Opcode: Sequen
26da0 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ce P1 P2 * * *.*
26db0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
26dc0 5d 3d 63 75 72 73 6f 72 5b 50 31 5d 2e 63 74 72  ]=cursor[P1].ctr
26dd0 2b 2b 0a 2a 2a 0a 2a 2a 20 46 69 6e 64 20 74 68  ++.**.** Find th
26de0 65 20 6e 65 78 74 20 61 76 61 69 6c 61 62 6c 65  e next available
26df0 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72   sequence number
26e00 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a   for cursor P1..
26e10 2a 2a 20 57 72 69 74 65 20 74 68 65 20 73 65 71  ** Write the seq
26e20 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 69 6e 74  uence number int
26e30 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
26e40 2a 20 54 68 65 20 73 65 71 75 65 6e 63 65 20 6e  * The sequence n
26e50 75 6d 62 65 72 20 6f 6e 20 74 68 65 20 63 75 72  umber on the cur
26e60 73 6f 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  sor is increment
26e70 65 64 20 61 66 74 65 72 20 74 68 69 73 0a 2a 2a  ed after this.**
26e80 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 0a   instruction.  .
26e90 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71 75 65  */.case OP_Seque
26ea0 6e 63 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  nce: {          
26eb0 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73   /* out2 */.  as
26ec0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
26ed0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
26ee0 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
26ef0 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  rt( p->apCsr[pOp
26f00 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a 20 20 61 73  ->p1]!=0 );.  as
26f10 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70  sert( p->apCsr[p
26f20 4f 70 2d 3e 70 31 5d 2d 3e 65 43 75 72 54 79 70  Op->p1]->eCurTyp
26f30 65 21 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20  e!=CURTYPE_VTAB 
26f40 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  );.  pOut = out2
26f50 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
26f60 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20  p);.  pOut->u.i 
26f70 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
26f80 70 31 5d 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b  p1]->seqCount++;
26f90 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a  .  break;.}.../*
26fa0 20 4f 70 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69   Opcode: NewRowi
26fb0 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
26fc0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
26fd0 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 47 65  ]=rowid.**.** Ge
26fe0 74 20 61 20 6e 65 77 20 69 6e 74 65 67 65 72 20  t a new integer 
26ff0 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 61  record number (a
27000 2e 6b 2e 61 20 22 72 6f 77 69 64 22 29 20 75 73  .k.a "rowid") us
27010 65 64 20 61 73 20 74 68 65 20 6b 65 79 20 74 6f  ed as the key to
27020 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65   a table..** The
27030 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69   record number i
27040 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79  s not previously
27050 20 75 73 65 64 20 61 73 20 61 20 6b 65 79 20 69   used as a key i
27060 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  n the database.*
27070 2a 20 74 61 62 6c 65 20 74 68 61 74 20 63 75 72  * table that cur
27080 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f  sor P1 points to
27090 2e 20 20 54 68 65 20 6e 65 77 20 72 65 63 6f 72  .  The new recor
270a0 64 20 6e 75 6d 62 65 72 20 69 73 20 77 72 69 74  d number is writ
270b0 74 65 6e 0a 2a 2a 20 77 72 69 74 74 65 6e 20 74  ten.** written t
270c0 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
270d0 2a 0a 2a 2a 20 49 66 20 50 33 3e 30 20 74 68 65  *.** If P3>0 the
270e0 6e 20 50 33 20 69 73 20 61 20 72 65 67 69 73 74  n P3 is a regist
270f0 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66  er in the root f
27100 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56 44 42  rame of this VDB
27110 45 20 74 68 61 74 20 68 6f 6c 64 73 20 0a 2a 2a  E that holds .**
27120 20 74 68 65 20 6c 61 72 67 65 73 74 20 70 72 65   the largest pre
27130 76 69 6f 75 73 6c 79 20 67 65 6e 65 72 61 74 65  viously generate
27140 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e  d record number.
27150 20 4e 6f 20 6e 65 77 20 72 65 63 6f 72 64 20 6e   No new record n
27160 75 6d 62 65 72 73 20 61 72 65 0a 2a 2a 20 61 6c  umbers are.** al
27170 6c 6f 77 65 64 20 74 6f 20 62 65 20 6c 65 73 73  lowed to be less
27180 20 74 68 61 6e 20 74 68 69 73 20 76 61 6c 75 65   than this value
27190 2e 20 57 68 65 6e 20 74 68 69 73 20 76 61 6c 75  . When this valu
271a0 65 20 72 65 61 63 68 65 73 20 69 74 73 20 6d 61  e reaches its ma
271b0 78 69 6d 75 6d 2c 20 0a 2a 2a 20 61 6e 20 53 51  ximum, .** an SQ
271c0 4c 49 54 45 5f 46 55 4c 4c 20 65 72 72 6f 72 20  LITE_FULL error 
271d0 69 73 20 67 65 6e 65 72 61 74 65 64 2e 20 54 68  is generated. Th
271e0 65 20 50 33 20 72 65 67 69 73 74 65 72 20 69 73  e P3 register is
271f0 20 75 70 64 61 74 65 64 20 77 69 74 68 20 74 68   updated with th
27200 65 20 27 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64  e '.** generated
27210 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20   record number. 
27220 54 68 69 73 20 50 33 20 6d 65 63 68 61 6e 69 73  This P3 mechanis
27230 6d 20 69 73 20 75 73 65 64 20 74 6f 20 68 65 6c  m is used to hel
27240 70 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a  p implement the.
27250 2a 2a 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  ** AUTOINCREMENT
27260 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73   feature..*/.cas
27270 65 20 4f 50 5f 4e 65 77 52 6f 77 69 64 3a 20 7b  e OP_NewRowid: {
27280 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
27290 74 32 20 2a 2f 0a 20 20 69 36 34 20 76 3b 20 20  t2 */.  i64 v;  
272a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
272b0 2a 20 54 68 65 20 6e 65 77 20 72 6f 77 69 64 20  * The new rowid 
272c0 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
272d0 2a 70 43 3b 20 20 20 20 20 20 20 20 2f 2a 20 43  *pC;        /* C
272e0 75 72 73 6f 72 20 6f 66 20 74 61 62 6c 65 20 74  ursor of table t
272f0 6f 20 67 65 74 20 74 68 65 20 6e 65 77 20 72 6f  o get the new ro
27300 77 69 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73  wid */.  int res
27310 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
27320 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 61 6e 20  /* Result of an 
27330 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74  sqlite3BtreeLast
27340 28 29 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b  () */.  int cnt;
27350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
27360 2a 20 43 6f 75 6e 74 65 72 20 74 6f 20 6c 69 6d  * Counter to lim
27370 69 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  it the number of
27380 20 73 65 61 72 63 68 65 73 20 2a 2f 0a 20 20 4d   searches */.  M
27390 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20  em *pMem;       
273a0 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
273b0 72 20 68 6f 6c 64 69 6e 67 20 6c 61 72 67 65 73  r holding larges
273c0 74 20 72 6f 77 69 64 20 66 6f 72 20 41 55 54 4f  t rowid for AUTO
273d0 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 56  INCREMENT */.  V
273e0 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
273f0 3b 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 66 72  ;     /* Root fr
27400 61 6d 65 20 6f 66 20 56 44 42 45 20 2a 2f 0a 0a  ame of VDBE */..
27410 20 20 76 20 3d 20 30 3b 0a 20 20 72 65 73 20 3d    v = 0;.  res =
27420 20 30 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74   0;.  pOut = out
27430 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
27440 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Op);.  assert( p
27450 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
27460 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
27470 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
27480 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
27490 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
274a0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
274b0 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73 65 72  Table );.  asser
274c0 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
274d0 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
274e0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
274f0 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  uc.pCursor!=0 );
27500 0a 20 20 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20  .  {.    /* The 
27510 6e 65 78 74 20 72 6f 77 69 64 20 6f 72 20 72 65  next rowid or re
27520 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 64 69 66  cord number (dif
27530 66 65 72 65 6e 74 20 74 65 72 6d 73 20 66 6f 72  ferent terms for
27540 20 74 68 65 20 73 61 6d 65 0a 20 20 20 20 2a 2a   the same.    **
27550 20 74 68 69 6e 67 29 20 69 73 20 6f 62 74 61 69   thing) is obtai
27560 6e 65 64 20 69 6e 20 61 20 74 77 6f 2d 73 74 65  ned in a two-ste
27570 70 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 20 20 20  p algorithm..   
27580 20 2a 2a 0a 20 20 20 20 2a 2a 20 46 69 72 73 74   **.    ** First
27590 20 77 65 20 61 74 74 65 6d 70 74 20 74 6f 20 66   we attempt to f
275a0 69 6e 64 20 74 68 65 20 6c 61 72 67 65 73 74 20  ind the largest 
275b0 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20 61  existing rowid a
275c0 6e 64 20 61 64 64 20 6f 6e 65 0a 20 20 20 20 2a  nd add one.    *
275d0 2a 20 74 6f 20 74 68 61 74 2e 20 20 42 75 74 20  * to that.  But 
275e0 69 66 20 74 68 65 20 6c 61 72 67 65 73 74 20 65  if the largest e
275f0 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20 69 73  xisting rowid is
27600 20 61 6c 72 65 61 64 79 20 74 68 65 20 6d 61 78   already the max
27610 69 6d 75 6d 0a 20 20 20 20 2a 2a 20 70 6f 73 69  imum.    ** posi
27620 74 69 76 65 20 69 6e 74 65 67 65 72 2c 20 77 65  tive integer, we
27630 20 68 61 76 65 20 74 6f 20 66 61 6c 6c 20 74 68   have to fall th
27640 72 6f 75 67 68 20 74 6f 20 74 68 65 20 73 65 63  rough to the sec
27650 6f 6e 64 0a 20 20 20 20 2a 2a 20 70 72 6f 62 61  ond.    ** proba
27660 62 69 6c 69 73 74 69 63 20 61 6c 67 6f 72 69 74  bilistic algorit
27670 68 6d 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a  hm.    **.    **
27680 20 54 68 65 20 73 65 63 6f 6e 64 20 61 6c 67 6f   The second algo
27690 72 69 74 68 6d 20 69 73 20 74 6f 20 73 65 6c 65  rithm is to sele
276a0 63 74 20 61 20 72 6f 77 69 64 20 61 74 20 72 61  ct a rowid at ra
276b0 6e 64 6f 6d 20 61 6e 64 20 73 65 65 20 69 66 0a  ndom and see if.
276c0 20 20 20 20 2a 2a 20 69 74 20 61 6c 72 65 61 64      ** it alread
276d0 79 20 65 78 69 73 74 73 20 69 6e 20 74 68 65 20  y exists in the 
276e0 74 61 62 6c 65 2e 20 20 49 66 20 69 74 20 64 6f  table.  If it do
276f0 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 77 65  es not exist, we
27700 20 68 61 76 65 0a 20 20 20 20 2a 2a 20 73 75 63   have.    ** suc
27710 63 65 65 64 65 64 2e 20 20 49 66 20 74 68 65 20  ceeded.  If the 
27720 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 64 6f 65  random rowid doe
27730 73 20 65 78 69 73 74 2c 20 77 65 20 73 65 6c 65  s exist, we sele
27740 63 74 20 61 20 6e 65 77 20 6f 6e 65 0a 20 20 20  ct a new one.   
27750 20 2a 2a 20 61 6e 64 20 74 72 79 20 61 67 61 69   ** and try agai
27760 6e 2c 20 75 70 20 74 6f 20 31 30 30 20 74 69 6d  n, up to 100 tim
27770 65 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61  es..    */.    a
27780 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
27790 6c 65 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  le );..#ifdef SQ
277a0 4c 49 54 45 5f 33 32 42 49 54 5f 52 4f 57 49 44  LITE_32BIT_ROWID
277b0 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f  .#   define MAX_
277c0 52 4f 57 49 44 20 30 78 37 66 66 66 66 66 66 66  ROWID 0x7fffffff
277d0 0a 23 65 6c 73 65 0a 20 20 20 20 2f 2a 20 53 6f  .#else.    /* So
277e0 6d 65 20 63 6f 6d 70 69 6c 65 72 73 20 63 6f 6d  me compilers com
277f0 70 6c 61 69 6e 20 61 62 6f 75 74 20 63 6f 6e 73  plain about cons
27800 74 61 6e 74 73 20 6f 66 20 74 68 65 20 66 6f 72  tants of the for
27810 6d 20 30 78 37 66 66 66 66 66 66 66 66 66 66 66  m 0x7fffffffffff
27820 66 66 66 66 2e 0a 20 20 20 20 2a 2a 20 4f 74 68  ffff..    ** Oth
27830 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f  ers complain abo
27840 75 74 20 30 78 37 66 66 66 66 66 66 66 66 66 66  ut 0x7ffffffffff
27850 66 66 66 66 66 66 4c 4c 2e 20 20 54 68 65 20 66  ffffffLL.  The f
27860 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 73  ollowing macro s
27870 65 65 6d 73 0a 20 20 20 20 2a 2a 20 74 6f 20 70  eems.    ** to p
27880 72 6f 76 69 64 65 20 74 68 65 20 63 6f 6e 73 74  rovide the const
27890 61 6e 74 20 77 68 69 6c 65 20 6d 61 6b 69 6e 67  ant while making
278a0 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 20 68   all compilers h
278b0 61 70 70 79 2e 0a 20 20 20 20 2a 2f 0a 23 20 20  appy..    */.#  
278c0 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49   define MAX_ROWI
278d0 44 20 20 28 69 36 34 29 28 20 28 28 28 75 36 34  D  (i64)( (((u64
278e0 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c 33 32  )0x7fffffff)<<32
278f0 29 20 7c 20 28 75 36 34 29 30 78 66 66 66 66 66  ) | (u64)0xfffff
27900 66 66 66 20 29 0a 23 65 6e 64 69 66 0a 0a 20 20  fff ).#endif..  
27910 20 20 69 66 28 20 21 70 43 2d 3e 75 73 65 52 61    if( !pC->useRa
27920 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20  ndomRowid ){.   
27930 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
27940 74 72 65 65 4c 61 73 74 28 70 43 2d 3e 75 63 2e  treeLast(pC->uc.
27950 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
27960 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
27970 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
27980 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
27990 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
279a0 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 72 65    }.      if( re
279b0 73 20 29 7b 0a 20 20 20 20 20 20 20 20 76 20 3d  s ){.        v =
279c0 20 31 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d   1;   /* IMP: R-
279d0 36 31 39 31 34 2d 34 38 30 37 34 20 2a 2f 0a 20  61914-48074 */. 
279e0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
279f0 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
27a00 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73  te3BtreeCursorIs
27a10 56 61 6c 69 64 28 70 43 2d 3e 75 63 2e 70 43 75  Valid(pC->uc.pCu
27a20 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20  rsor) );.       
27a30 20 76 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65   v = sqlite3Btre
27a40 65 49 6e 74 65 67 65 72 4b 65 79 28 70 43 2d 3e  eIntegerKey(pC->
27a50 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  uc.pCursor);.   
27a60 20 20 20 20 20 69 66 28 20 76 3e 3d 4d 41 58 5f       if( v>=MAX_
27a70 52 4f 57 49 44 20 29 7b 0a 20 20 20 20 20 20 20  ROWID ){.       
27a80 20 20 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d     pC->useRandom
27a90 52 6f 77 69 64 20 3d 20 31 3b 0a 20 20 20 20 20  Rowid = 1;.     
27aa0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
27ab0 20 20 20 20 76 2b 2b 3b 20 20 20 2f 2a 20 49 4d      v++;   /* IM
27ac0 50 3a 20 52 2d 32 39 35 33 38 2d 33 34 39 38 37  P: R-29538-34987
27ad0 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20 20   */.        }.  
27ae0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 23 69 66      }.    }..#if
27af0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
27b00 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20  _AUTOINCREMENT. 
27b10 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29     if( pOp->p3 )
27b20 7b 0a 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72  {.      /* Asser
27b30 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20 76  t that P3 is a v
27b40 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  alid memory cell
27b50 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72  . */.      asser
27b60 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
27b70 20 20 20 20 20 20 69 66 28 20 70 2d 3e 70 46 72        if( p->pFr
27b80 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 20 20 66  ame ){.        f
27b90 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72  or(pFrame=p->pFr
27ba0 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61  ame; pFrame->pPa
27bb0 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46 72  rent; pFrame=pFr
27bc0 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20  ame->pParent);. 
27bd0 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74         /* Assert
27be0 20 74 68 61 74 20 50 33 20 69 73 20 61 20 76 61   that P3 is a va
27bf0 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e  lid memory cell.
27c00 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65   */.        asse
27c10 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 46 72  rt( pOp->p3<=pFr
27c20 61 6d 65 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20  ame->nMem );.   
27c30 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 70 46 72       pMem = &pFr
27c40 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70  ame->aMem[pOp->p
27c50 33 5d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  3];.      }else{
27c60 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65  .        /* Asse
27c70 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20  rt that P3 is a 
27c80 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c  valid memory cel
27c90 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73  l. */.        as
27ca0 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28  sert( pOp->p3<=(
27cb0 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
27cc0 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20  Cursor) );.     
27cd0 20 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b     pMem = &aMem[
27ce0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20  pOp->p3];.      
27cf0 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
27d00 67 65 28 70 2c 20 70 4d 65 6d 29 3b 0a 20 20 20  ge(p, pMem);.   
27d10 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72     }.      asser
27d20 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4d  t( memIsValid(pM
27d30 65 6d 29 20 29 3b 0a 0a 20 20 20 20 20 20 52 45  em) );..      RE
27d40 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
27d50 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a 20 20 20  ->p3, pMem);.   
27d60 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
27d70 6d 49 6e 74 65 67 65 72 69 66 79 28 70 4d 65 6d  mIntegerify(pMem
27d80 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
27d90 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20   (pMem->flags & 
27da0 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 20 20  MEM_Int)!=0 );  
27db0 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c 64 73  /* mem(P3) holds
27dc0 20 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f 0a 20   an integer */. 
27dd0 20 20 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e 75       if( pMem->u
27de0 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 7c 7c  .i==MAX_ROWID ||
27df0 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f   pC->useRandomRo
27e00 77 69 64 20 29 7b 0a 20 20 20 20 20 20 20 20 72  wid ){.        r
27e10 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b  c = SQLITE_FULL;
27e20 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 31 37 38     /* IMP: R-178
27e30 31 37 2d 30 30 36 33 30 20 2a 2f 0a 20 20 20 20  17-00630 */.    
27e40 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
27e50 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
27e60 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 76     }.      if( v
27e70 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a  <pMem->u.i+1 ){.
27e80 20 20 20 20 20 20 20 20 76 20 3d 20 70 4d 65 6d          v = pMem
27e90 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20 20 20 20 20  ->u.i + 1;.     
27ea0 20 7d 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 75   }.      pMem->u
27eb0 2e 69 20 3d 20 76 3b 0a 20 20 20 20 7d 0a 23 65  .i = v;.    }.#e
27ec0 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70 43 2d  ndif.    if( pC-
27ed0 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20  >useRandomRowid 
27ee0 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 4d 50 4c  ){.      /* IMPL
27ef0 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52  EMENTATION-OF: R
27f00 2d 30 37 36 37 37 2d 34 31 38 38 31 20 49 66 20  -07677-41881 If 
27f10 74 68 65 20 6c 61 72 67 65 73 74 20 52 4f 57 49  the largest ROWI
27f20 44 20 69 73 20 65 71 75 61 6c 20 74 6f 20 74 68  D is equal to th
27f30 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65  e.      ** large
27f40 73 74 20 70 6f 73 73 69 62 6c 65 20 69 6e 74 65  st possible inte
27f50 67 65 72 20 28 39 32 32 33 33 37 32 30 33 36 38  ger (92233720368
27f60 35 34 37 37 35 38 30 37 29 20 74 68 65 6e 20 74  54775807) then t
27f70 68 65 20 64 61 74 61 62 61 73 65 0a 20 20 20 20  he database.    
27f80 20 20 2a 2a 20 65 6e 67 69 6e 65 20 73 74 61 72    ** engine star
27f90 74 73 20 70 69 63 6b 69 6e 67 20 70 6f 73 69 74  ts picking posit
27fa0 69 76 65 20 63 61 6e 64 69 64 61 74 65 20 52 4f  ive candidate RO
27fb0 57 49 44 73 20 61 74 20 72 61 6e 64 6f 6d 20 75  WIDs at random u
27fc0 6e 74 69 6c 0a 20 20 20 20 20 20 2a 2a 20 69 74  ntil.      ** it
27fd0 20 66 69 6e 64 73 20 6f 6e 65 20 74 68 61 74 20   finds one that 
27fe0 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c  is not previousl
27ff0 79 20 75 73 65 64 2e 20 2a 2f 0a 20 20 20 20 20  y used. */.     
28000 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
28010 3d 3d 30 20 29 3b 20 20 2f 2a 20 57 65 20 63 61  ==0 );  /* We ca
28020 6e 6e 6f 74 20 62 65 20 69 6e 20 72 61 6e 64 6f  nnot be in rando
28030 6d 20 72 6f 77 69 64 20 6d 6f 64 65 20 69 66 20  m rowid mode if 
28040 74 68 69 73 20 69 73 0a 20 20 20 20 20 20 20 20  this is.        
28050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28060 20 20 20 20 20 2a 2a 20 61 6e 20 41 55 54 4f 49       ** an AUTOI
28070 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e 20  NCREMENT table. 
28080 2a 2f 0a 20 20 20 20 20 20 63 6e 74 20 3d 20 30  */.      cnt = 0
28090 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20 20 20  ;.      do{.    
280a0 20 20 20 20 73 71 6c 69 74 65 33 5f 72 61 6e 64      sqlite3_rand
280b0 6f 6d 6e 65 73 73 28 73 69 7a 65 6f 66 28 76 29  omness(sizeof(v)
280c0 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20 76  , &v);.        v
280d0 20 26 3d 20 28 4d 41 58 5f 52 4f 57 49 44 3e 3e   &= (MAX_ROWID>>
280e0 31 29 3b 20 76 2b 2b 3b 20 20 2f 2a 20 45 6e 73  1); v++;  /* Ens
280f0 75 72 65 20 74 68 61 74 20 76 20 69 73 20 67 72  ure that v is gr
28100 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 20  eater than zero 
28110 2a 2f 0a 20 20 20 20 20 20 7d 77 68 69 6c 65 28  */.      }while(
28120 20 20 28 28 72 63 20 3d 20 73 71 6c 69 74 65 33    ((rc = sqlite3
28130 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
28140 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  ked(pC->uc.pCurs
28150 6f 72 2c 20 30 2c 20 28 75 36 34 29 76 2c 0a 20  or, 0, (u64)v,. 
28160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28190 30 2c 20 26 72 65 73 29 29 3d 3d 53 51 4c 49 54  0, &res))==SQLIT
281a0 45 5f 4f 4b 29 0a 20 20 20 20 20 20 20 20 20 20  E_OK).          
281b0 20 20 26 26 20 28 72 65 73 3d 3d 30 29 0a 20 20    && (res==0).  
281c0 20 20 20 20 20 20 20 20 20 20 26 26 20 28 2b 2b            && (++
281d0 63 6e 74 3c 31 30 30 29 29 3b 0a 20 20 20 20 20  cnt<100));.     
281e0 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
281f0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
28200 72 3b 0a 20 20 20 20 20 20 69 66 28 20 72 65 73  r;.      if( res
28210 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72  ==0 ){.        r
28220 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b  c = SQLITE_FULL;
28230 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 33 38 32     /* IMP: R-382
28240 31 39 2d 35 33 30 30 32 20 2a 2f 0a 20 20 20 20  19-53002 */.    
28250 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
28260 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
28270 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72     }.      asser
28280 74 28 20 76 3e 30 20 29 3b 20 20 2f 2a 20 45 56  t( v>0 );  /* EV
28290 3a 20 52 2d 34 30 38 31 32 2d 30 33 35 37 30 20  : R-40812-03570 
282a0 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d  */.    }.    pC-
282b0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
282c0 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63  = 0;.    pC->cac
282d0 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
282e0 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 70 4f  _STALE;.  }.  pO
282f0 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62  ut->u.i = v;.  b
28300 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
28310 64 65 3a 20 49 6e 73 65 72 74 20 50 31 20 50 32  de: Insert P1 P2
28320 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
28330 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b  opsis: intkey=r[
28340 50 33 5d 20 64 61 74 61 3d 72 5b 50 32 5d 0a 2a  P3] data=r[P2].*
28350 2a 0a 2a 2a 20 57 72 69 74 65 20 61 6e 20 65 6e  *.** Write an en
28360 74 72 79 20 69 6e 74 6f 20 74 68 65 20 74 61 62  try into the tab
28370 6c 65 20 6f 66 20 63 75 72 73 6f 72 20 50 31 2e  le of cursor P1.
28380 20 20 41 20 6e 65 77 20 65 6e 74 72 79 20 69 73    A new entry is
28390 0a 2a 2a 20 63 72 65 61 74 65 64 20 69 66 20 69  .** created if i
283a0 74 20 64 6f 65 73 6e 27 74 20 61 6c 72 65 61 64  t doesn't alread
283b0 79 20 65 78 69 73 74 20 6f 72 20 74 68 65 20 64  y exist or the d
283c0 61 74 61 20 66 6f 72 20 61 6e 20 65 78 69 73 74  ata for an exist
283d0 69 6e 67 0a 2a 2a 20 65 6e 74 72 79 20 69 73 20  ing.** entry is 
283e0 6f 76 65 72 77 72 69 74 74 65 6e 2e 20 20 54 68  overwritten.  Th
283f0 65 20 64 61 74 61 20 69 73 20 74 68 65 20 76 61  e data is the va
28400 6c 75 65 20 4d 45 4d 5f 42 6c 6f 62 20 73 74 6f  lue MEM_Blob sto
28410 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 0a  red in register.
28420 2a 2a 20 6e 75 6d 62 65 72 20 50 32 2e 20 54 68  ** number P2. Th
28430 65 20 6b 65 79 20 69 73 20 73 74 6f 72 65 64 20  e key is stored 
28440 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 20  in register P3. 
28450 54 68 65 20 6b 65 79 20 6d 75 73 74 0a 2a 2a 20  The key must.** 
28460 62 65 20 61 20 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a  be a MEM_Int..**
28470 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
28480 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f  G_NCHANGE flag o
28490 66 20 50 35 20 69 73 20 73 65 74 2c 20 74 68 65  f P5 is set, the
284a0 6e 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65  n the row change
284b0 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63   count is.** inc
284c0 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77  remented (otherw
284d0 69 73 65 20 6e 6f 74 29 2e 20 20 49 66 20 74 68  ise not).  If th
284e0 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57  e OPFLAG_LASTROW
284f0 49 44 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73  ID flag of P5 is
28500 20 73 65 74 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f   set,.** then ro
28510 77 69 64 20 69 73 20 73 74 6f 72 65 64 20 66 6f  wid is stored fo
28520 72 20 73 75 62 73 65 71 75 65 6e 74 20 72 65 74  r subsequent ret
28530 75 72 6e 20 62 79 20 74 68 65 0a 2a 2a 20 73 71  urn by the.** sq
28540 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72  lite3_last_inser
28550 74 5f 72 6f 77 69 64 28 29 20 66 75 6e 63 74 69  t_rowid() functi
28560 6f 6e 20 28 6f 74 68 65 72 77 69 73 65 20 69 74  on (otherwise it
28570 20 69 73 20 75 6e 6d 6f 64 69 66 69 65 64 29 2e   is unmodified).
28580 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
28590 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
285a0 4c 54 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73  LT flag of P5 is
285b0 20 73 65 74 2c 20 74 68 65 20 69 6d 70 6c 65 6d   set, the implem
285c0 65 6e 74 61 74 69 6f 6e 20 6d 69 67 68 74 0a 2a  entation might.*
285d0 2a 20 72 75 6e 20 66 61 73 74 65 72 20 62 79 20  * run faster by 
285e0 61 76 6f 69 64 69 6e 67 20 61 6e 20 75 6e 6e 65  avoiding an unne
285f0 63 65 73 73 61 72 79 20 73 65 65 6b 20 6f 6e 20  cessary seek on 
28600 63 75 72 73 6f 72 20 50 31 2e 20 20 48 6f 77 65  cursor P1.  Howe
28610 76 65 72 2c 0a 2a 2a 20 74 68 65 20 4f 50 46 4c  ver,.** the OPFL
28620 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
28630 20 66 6c 61 67 20 6d 75 73 74 20 6f 6e 6c 79 20   flag must only 
28640 62 65 20 73 65 74 20 69 66 20 74 68 65 72 65 20  be set if there 
28650 68 61 76 65 20 62 65 65 6e 20 6e 6f 20 70 72 69  have been no pri
28660 6f 72 0a 2a 2a 20 73 65 65 6b 73 20 6f 6e 20 74  or.** seeks on t
28670 68 65 20 63 75 72 73 6f 72 20 6f 72 20 69 66 20  he cursor or if 
28680 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  the most recent 
28690 73 65 65 6b 20 75 73 65 64 20 61 20 6b 65 79 20  seek used a key 
286a0 65 71 75 61 6c 20 74 6f 20 50 33 2e 0a 2a 2a 0a  equal to P3..**.
286b0 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
286c0 5f 49 53 55 50 44 41 54 45 20 66 6c 61 67 20 69  _ISUPDATE flag i
286d0 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 69 73  s set, then this
286e0 20 6f 70 63 6f 64 65 20 69 73 20 70 61 72 74 20   opcode is part 
286f0 6f 66 20 61 6e 0a 2a 2a 20 55 50 44 41 54 45 20  of an.** UPDATE 
28700 6f 70 65 72 61 74 69 6f 6e 2e 20 20 4f 74 68 65  operation.  Othe
28710 72 77 69 73 65 20 28 69 66 20 74 68 65 20 66 6c  rwise (if the fl
28720 61 67 20 69 73 20 63 6c 65 61 72 29 20 74 68 65  ag is clear) the
28730 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 0a 2a 2a  n this opcode.**
28740 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e 20 49   is part of an I
28750 4e 53 45 52 54 20 6f 70 65 72 61 74 69 6f 6e 2e  NSERT operation.
28760 20 20 54 68 65 20 64 69 66 66 65 72 65 6e 63 65    The difference
28770 20 69 73 20 6f 6e 6c 79 20 69 6d 70 6f 72 74 61   is only importa
28780 6e 74 20 74 6f 0a 2a 2a 20 74 68 65 20 75 70 64  nt to.** the upd
28790 61 74 65 20 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20  ate hook..**.** 
287a0 50 61 72 61 6d 65 74 65 72 20 50 34 20 6d 61 79  Parameter P4 may
287b0 20 70 6f 69 6e 74 20 74 6f 20 61 20 54 61 62 6c   point to a Tabl
287c0 65 20 73 74 72 75 63 74 75 72 65 2c 20 6f 72 20  e structure, or 
287d0 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 20 49 66 20  may be NULL. If 
287e0 69 74 20 69 73 20 0a 2a 2a 20 6e 6f 74 20 4e 55  it is .** not NU
287f0 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 75 70 64  LL, then the upd
28800 61 74 65 2d 68 6f 6f 6b 20 28 73 71 6c 69 74 65  ate-hook (sqlite
28810 33 2e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  3.xUpdateCallbac
28820 6b 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 0a 2a  k) is invoked .*
28830 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 73 75  * following a su
28840 63 63 65 73 73 66 75 6c 20 69 6e 73 65 72 74 2e  ccessful insert.
28850 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e 49 4e 47 2f  .**.** (WARNING/
28860 54 4f 44 4f 3a 20 49 66 20 50 31 20 69 73 20 61  TODO: If P1 is a
28870 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 20 61   pseudo-cursor a
28880 6e 64 20 50 32 20 69 73 20 64 79 6e 61 6d 69 63  nd P2 is dynamic
28890 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65  ally.** allocate
288a0 64 2c 20 74 68 65 6e 20 6f 77 6e 65 72 73 68 69  d, then ownershi
288b0 70 20 6f 66 20 50 32 20 69 73 20 74 72 61 6e 73  p of P2 is trans
288c0 66 65 72 72 65 64 20 74 6f 20 74 68 65 20 70 73  ferred to the ps
288d0 65 75 64 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20 61  eudo-cursor.** a
288e0 6e 64 20 72 65 67 69 73 74 65 72 20 50 32 20 62  nd register P2 b
288f0 65 63 6f 6d 65 73 20 65 70 68 65 6d 65 72 61 6c  ecomes ephemeral
28900 2e 20 20 49 66 20 74 68 65 20 63 75 72 73 6f 72  .  If the cursor
28910 20 69 73 20 63 68 61 6e 67 65 64 2c 20 74 68 65   is changed, the
28920 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 72 65 67  .** value of reg
28930 69 73 74 65 72 20 50 32 20 77 69 6c 6c 20 74 68  ister P2 will th
28940 65 6e 20 63 68 61 6e 67 65 2e 20 20 4d 61 6b 65  en change.  Make
28950 20 73 75 72 65 20 74 68 69 73 20 64 6f 65 73 20   sure this does 
28960 6e 6f 74 0a 2a 2a 20 63 61 75 73 65 20 61 6e 79  not.** cause any
28970 20 70 72 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a   problems.).**.*
28980 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
28990 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e  on only works on
289a0 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 65 71   tables.  The eq
289b0 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63  uivalent instruc
289c0 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64 69  tion.** for indi
289d0 63 65 73 20 69 73 20 4f 50 5f 49 64 78 49 6e 73  ces is OP_IdxIns
289e0 65 72 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ert..*/.case OP_
289f0 49 6e 73 65 72 74 3a 20 7b 0a 20 20 4d 65 6d 20  Insert: {.  Mem 
28a00 2a 70 44 61 74 61 3b 20 20 20 20 20 20 20 2f 2a  *pData;       /*
28a10 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e   MEM cell holdin
28a20 67 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 72  g data for the r
28a30 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65  ecord to be inse
28a40 72 74 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  rted */.  Mem *p
28a50 4b 65 79 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  Key;        /* M
28a60 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20  EM cell holding 
28a70 6b 65 79 20 20 66 6f 72 20 74 68 65 20 72 65 63  key  for the rec
28a80 6f 72 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ord */.  VdbeCur
28a90 73 6f 72 20 2a 70 43 3b 20 20 20 2f 2a 20 43 75  sor *pC;   /* Cu
28aa0 72 73 6f 72 20 74 6f 20 74 61 62 6c 65 20 69 6e  rsor to table in
28ab0 74 6f 20 77 68 69 63 68 20 69 6e 73 65 72 74 20  to which insert 
28ac0 69 73 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20  is written */.  
28ad0 69 6e 74 20 73 65 65 6b 52 65 73 75 6c 74 3b 20  int seekResult; 
28ae0 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 70    /* Result of p
28af0 72 69 6f 72 20 73 65 65 6b 20 6f 72 20 30 20 69  rior seek or 0 i
28b00 66 20 6e 6f 20 55 53 45 53 45 45 4b 52 45 53 55  f no USESEEKRESU
28b10 4c 54 20 66 6c 61 67 20 2a 2f 0a 20 20 63 6f 6e  LT flag */.  con
28b20 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 2f  st char *zDb;  /
28b30 2a 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20  * database name 
28b40 2d 20 75 73 65 64 20 62 79 20 74 68 65 20 75 70  - used by the up
28b50 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 54  date hook */.  T
28b60 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
28b70 20 2f 2a 20 54 61 62 6c 65 20 73 74 72 75 63 74   /* Table struct
28b80 75 72 65 20 2d 20 75 73 65 64 20 62 79 20 75 70  ure - used by up
28b90 64 61 74 65 20 61 6e 64 20 70 72 65 2d 75 70 64  date and pre-upd
28ba0 61 74 65 20 68 6f 6f 6b 73 20 2a 2f 0a 20 20 42  ate hooks */.  B
28bb0 74 72 65 65 50 61 79 6c 6f 61 64 20 78 3b 20 20  treePayload x;  
28bc0 20 2f 2a 20 50 61 79 6c 6f 61 64 20 74 6f 20 62   /* Payload to b
28bd0 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 0a 20  e inserted */.. 
28be0 20 70 44 61 74 61 20 3d 20 26 61 4d 65 6d 5b 70   pData = &aMem[p
28bf0 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
28c00 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
28c10 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
28c20 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
28c30 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 44 61 74   memIsValid(pDat
28c40 61 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  a) );.  pC = p->
28c50 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
28c60 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
28c70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
28c80 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
28c90 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73  PE_BTREE );.  as
28ca0 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75  sert( pC->uc.pCu
28cb0 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73  rsor!=0 );.  ass
28cc0 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 20 26 20  ert( (pOp->p5 & 
28cd0 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 29 20 7c  OPFLAG_ISNOOP) |
28ce0 7c 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b  | pC->isTable );
28cf0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
28d00 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45  p4type==P4_TABLE
28d10 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65 3e   || pOp->p4type>
28d20 3d 50 34 5f 53 54 41 54 49 43 20 29 3b 0a 20 20  =P4_STATIC );.  
28d30 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
28d40 4f 70 2d 3e 70 32 2c 20 70 44 61 74 61 29 3b 0a  Op->p2, pData);.
28d50 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63    sqlite3VdbeInc
28d60 72 57 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c  rWriteCounter(p,
28d70 20 70 43 29 3b 0a 0a 20 20 70 4b 65 79 20 3d 20   pC);..  pKey = 
28d80 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
28d90 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 2d 3e    assert( pKey->
28da0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
28db0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d  );.  assert( mem
28dc0 49 73 56 61 6c 69 64 28 70 4b 65 79 29 20 29 3b  IsValid(pKey) );
28dd0 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
28de0 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4b 65 79 29  E(pOp->p3, pKey)
28df0 3b 0a 20 20 78 2e 6e 4b 65 79 20 3d 20 70 4b 65  ;.  x.nKey = pKe
28e00 79 2d 3e 75 2e 69 3b 0a 0a 20 20 69 66 28 20 70  y->u.i;..  if( p
28e10 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54  Op->p4type==P4_T
28e20 41 42 4c 45 20 26 26 20 48 41 53 5f 55 50 44 41  ABLE && HAS_UPDA
28e30 54 45 5f 48 4f 4f 4b 28 64 62 29 20 29 7b 0a 20  TE_HOOK(db) ){. 
28e40 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
28e50 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20 7a 44 62  Db>=0 );.    zDb
28e60 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69   = db->aDb[pC->i
28e70 44 62 5d 2e 7a 44 62 53 4e 61 6d 65 3b 0a 20 20  Db].zDbSName;.  
28e80 20 20 70 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34    pTab = pOp->p4
28e90 2e 70 54 61 62 3b 0a 20 20 20 20 61 73 73 65 72  .pTab;.    asser
28ea0 74 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50  t( (pOp->p5 & OP
28eb0 46 4c 41 47 5f 49 53 4e 4f 4f 50 29 20 7c 7c 20  FLAG_ISNOOP) || 
28ec0 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 20 29  HasRowid(pTab) )
28ed0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
28ee0 54 61 62 20 3d 20 30 3b 0a 20 20 20 20 7a 44 62  Tab = 0;.    zDb
28ef0 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65   = 0;  /* Not ne
28f00 65 64 65 64 2e 20 20 53 69 6c 65 6e 63 65 20 61  eded.  Silence a
28f10 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e   compiler warnin
28f20 67 2e 20 2a 2f 0a 20 20 7d 0a 0a 23 69 66 64 65  g. */.  }..#ifde
28f30 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
28f40 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20  PREUPDATE_HOOK. 
28f50 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 70   /* Invoke the p
28f60 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 2c 20  re-update hook, 
28f70 69 66 20 61 6e 79 20 2a 2f 0a 20 20 69 66 28 20  if any */.  if( 
28f80 70 54 61 62 20 29 7b 0a 20 20 20 20 69 66 28 20  pTab ){.    if( 
28f90 64 62 2d 3e 78 50 72 65 55 70 64 61 74 65 43 61  db->xPreUpdateCa
28fa0 6c 6c 62 61 63 6b 20 26 26 20 21 28 70 4f 70 2d  llback && !(pOp-
28fb0 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 55  >p5 & OPFLAG_ISU
28fc0 50 44 41 54 45 29 20 29 7b 0a 20 20 20 20 20 20  PDATE) ){.      
28fd0 73 71 6c 69 74 65 33 56 64 62 65 50 72 65 55 70  sqlite3VdbePreUp
28fe0 64 61 74 65 48 6f 6f 6b 28 70 2c 20 70 43 2c 20  dateHook(p, pC, 
28ff0 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 2c 20 7a  SQLITE_INSERT, z
29000 44 62 2c 20 70 54 61 62 2c 20 78 2e 6e 4b 65 79  Db, pTab, x.nKey
29010 2c 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 20 20 7d  ,pOp->p2);.    }
29020 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78 55 70  .    if( db->xUp
29030 64 61 74 65 43 61 6c 6c 62 61 63 6b 3d 3d 30 20  dateCallback==0 
29040 7c 7c 20 70 54 61 62 2d 3e 61 43 6f 6c 3d 3d 30  || pTab->aCol==0
29050 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 50 72 65   ){.      /* Pre
29060 76 65 6e 74 20 70 6f 73 74 2d 75 70 64 61 74 65  vent post-update
29070 20 68 6f 6f 6b 20 66 72 6f 6d 20 72 75 6e 6e 69   hook from runni
29080 6e 67 20 69 6e 20 63 61 73 65 73 20 77 68 65 6e  ng in cases when
29090 20 69 74 20 73 68 6f 75 6c 64 20 6e 6f 74 20 2a   it should not *
290a0 2f 0a 20 20 20 20 20 20 70 54 61 62 20 3d 20 30  /.      pTab = 0
290b0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
290c0 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ( pOp->p5 & OPFL
290d0 41 47 5f 49 53 4e 4f 4f 50 20 29 20 62 72 65 61  AG_ISNOOP ) brea
290e0 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28  k;.#endif..  if(
290f0 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41   pOp->p5 & OPFLA
29100 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e  G_NCHANGE ) p->n
29110 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66 28 20  Change++;.  if( 
29120 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
29130 5f 4c 41 53 54 52 4f 57 49 44 20 29 20 64 62 2d  _LASTROWID ) db-
29140 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 78 2e 6e  >lastRowid = x.n
29150 4b 65 79 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Key;.  assert( p
29160 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 28 4d  Data->flags & (M
29170 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29  EM_Blob|MEM_Str)
29180 20 29 3b 0a 20 20 78 2e 70 44 61 74 61 20 3d 20   );.  x.pData = 
29190 70 44 61 74 61 2d 3e 7a 3b 0a 20 20 78 2e 6e 44  pData->z;.  x.nD
291a0 61 74 61 20 3d 20 70 44 61 74 61 2d 3e 6e 3b 0a  ata = pData->n;.
291b0 20 20 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 28    seekResult = (
291c0 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
291d0 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 29  G_USESEEKRESULT)
291e0 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c   ? pC->seekResul
291f0 74 20 3a 20 30 29 3b 0a 20 20 69 66 28 20 70 44  t : 0);.  if( pD
29200 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ata->flags & MEM
29210 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 78 2e 6e  _Zero ){.    x.n
29220 5a 65 72 6f 20 3d 20 70 44 61 74 61 2d 3e 75 2e  Zero = pData->u.
29230 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73 65 7b 0a  nZero;.  }else{.
29240 20 20 20 20 78 2e 6e 5a 65 72 6f 20 3d 20 30 3b      x.nZero = 0;
29250 0a 20 20 7d 0a 20 20 78 2e 70 4b 65 79 20 3d 20  .  }.  x.pKey = 
29260 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  0;.  rc = sqlite
29270 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d  3BtreeInsert(pC-
29280 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 78 2c  >uc.pCursor, &x,
29290 0a 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35 20  .      (pOp->p5 
292a0 26 20 28 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44  & (OPFLAG_APPEND
292b0 7c 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49  |OPFLAG_SAVEPOSI
292c0 54 49 4f 4e 29 29 2c 20 73 65 65 6b 52 65 73 75  TION)), seekResu
292d0 6c 74 0a 20 20 29 3b 0a 20 20 70 43 2d 3e 64 65  lt.  );.  pC->de
292e0 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
292f0 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
29300 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
29310 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  E;..  /* Invoke 
29320 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20  the update-hook 
29330 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a  if required. */.
29340 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
29350 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
29360 6f 72 3b 0a 20 20 69 66 28 20 70 54 61 62 20 29  or;.  if( pTab )
29370 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62  {.    assert( db
29380 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
29390 6b 21 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65  k!=0 );.    asse
293a0 72 74 28 20 70 54 61 62 2d 3e 61 43 6f 6c 21 3d  rt( pTab->aCol!=
293b0 30 20 29 3b 0a 20 20 20 20 64 62 2d 3e 78 55 70  0 );.    db->xUp
293c0 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d  dateCallback(db-
293d0 3e 70 55 70 64 61 74 65 41 72 67 2c 0a 20 20 20  >pUpdateArg,.   
293e0 20 20 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35          (pOp->p5
293f0 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41   & OPFLAG_ISUPDA
29400 54 45 29 20 3f 20 53 51 4c 49 54 45 5f 55 50 44  TE) ? SQLITE_UPD
29410 41 54 45 20 3a 20 53 51 4c 49 54 45 5f 49 4e 53  ATE : SQLITE_INS
29420 45 52 54 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ERT,.           
29430 7a 44 62 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65  zDb, pTab->zName
29440 2c 20 78 2e 6e 4b 65 79 29 3b 0a 20 20 7d 0a 20  , x.nKey);.  }. 
29450 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
29460 63 6f 64 65 3a 20 44 65 6c 65 74 65 20 50 31 20  code: Delete P1 
29470 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
29480 2a 20 44 65 6c 65 74 65 20 74 68 65 20 72 65 63  * Delete the rec
29490 6f 72 64 20 61 74 20 77 68 69 63 68 20 74 68 65  ord at which the
294a0 20 50 31 20 63 75 72 73 6f 72 20 69 73 20 63 75   P1 cursor is cu
294b0 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
294c0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
294d0 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49  PFLAG_SAVEPOSITI
294e0 4f 4e 20 62 69 74 20 6f 66 20 74 68 65 20 50 35  ON bit of the P5
294f0 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 73 65   parameter is se
29500 74 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63  t, then.** the c
29510 75 72 73 6f 72 20 77 69 6c 6c 20 62 65 20 6c 65  ursor will be le
29520 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 20  ft pointing at  
29530 65 69 74 68 65 72 20 74 68 65 20 6e 65 78 74 20  either the next 
29540 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75 73 0a  or the previous.
29550 2a 2a 20 72 65 63 6f 72 64 20 69 6e 20 74 68 65  ** record in the
29560 20 74 61 62 6c 65 2e 20 49 66 20 69 74 20 69 73   table. If it is
29570 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61   left pointing a
29580 74 20 74 68 65 20 6e 65 78 74 20 72 65 63 6f 72  t the next recor
29590 64 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 6e  d, then.** the n
295a0 65 78 74 20 4e 65 78 74 20 69 6e 73 74 72 75 63  ext Next instruc
295b0 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61 20 6e  tion will be a n
295c0 6f 2d 6f 70 2e 20 41 73 20 61 20 72 65 73 75 6c  o-op. As a resul
295d0 74 2c 20 69 6e 20 74 68 69 73 20 63 61 73 65 0a  t, in this case.
295e0 2a 2a 20 69 74 20 69 73 20 6f 6b 20 74 6f 20 64  ** it is ok to d
295f0 65 6c 65 74 65 20 61 20 72 65 63 6f 72 64 20 66  elete a record f
29600 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 4e 65 78  rom within a Nex
29610 74 20 6c 6f 6f 70 2e 20 49 66 20 0a 2a 2a 20 4f  t loop. If .** O
29620 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49  PFLAG_SAVEPOSITI
29630 4f 4e 20 62 69 74 20 6f 66 20 50 35 20 69 73 20  ON bit of P5 is 
29640 63 6c 65 61 72 2c 20 74 68 65 6e 20 74 68 65 20  clear, then the 
29650 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65 0a 2a  cursor will be.*
29660 2a 20 6c 65 66 74 20 69 6e 20 61 6e 20 75 6e 64  * left in an und
29670 65 66 69 6e 65 64 20 73 74 61 74 65 2e 0a 2a 2a  efined state..**
29680 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
29690 47 5f 41 55 58 44 45 4c 45 54 45 20 62 69 74 20  G_AUXDELETE bit 
296a0 69 73 20 73 65 74 20 6f 6e 20 50 35 2c 20 74 68  is set on P5, th
296b0 61 74 20 69 6e 64 69 63 61 74 65 73 20 74 68 61  at indicates tha
296c0 74 20 74 68 69 73 0a 2a 2a 20 64 65 6c 65 74 65  t this.** delete
296d0 20 6f 6e 65 20 6f 66 20 73 65 76 65 72 61 6c 20   one of several 
296e0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
296f0 64 65 6c 65 74 69 6e 67 20 61 20 74 61 62 6c 65  deleting a table
29700 20 72 6f 77 20 61 6e 64 20 61 6c 6c 20 69 74 73   row and all its
29710 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20 69  .** associated i
29720 6e 64 65 78 20 65 6e 74 72 69 65 73 2e 20 20 45  ndex entries.  E
29730 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68  xactly one of th
29740 6f 73 65 20 64 65 6c 65 74 65 73 20 69 73 20 74  ose deletes is t
29750 68 65 20 22 70 72 69 6d 61 72 79 22 0a 2a 2a 20  he "primary".** 
29760 64 65 6c 65 74 65 2e 20 20 54 68 65 20 6f 74 68  delete.  The oth
29770 65 72 73 20 61 72 65 20 61 6c 6c 20 6f 6e 20 4f  ers are all on O
29780 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 20  PFLAG_FORDELETE 
29790 63 75 72 73 6f 72 73 20 6f 72 20 65 6c 73 65 20  cursors or else 
297a0 61 72 65 0a 2a 2a 20 6d 61 72 6b 65 64 20 77 69  are.** marked wi
297b0 74 68 20 74 68 65 20 41 55 58 44 45 4c 45 54 45  th the AUXDELETE
297c0 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   flag..**.** If 
297d0 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  the OPFLAG_NCHAN
297e0 47 45 20 66 6c 61 67 20 6f 66 20 50 32 20 28 4e  GE flag of P2 (N
297f0 42 3a 20 50 32 20 6e 6f 74 20 50 35 29 20 69 73  B: P2 not P5) is
29800 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72   set, then the r
29810 6f 77 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75  ow.** change cou
29820 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  nt is incremente
29830 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74  d (otherwise not
29840 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73 74  )..**.** P1 must
29850 20 6e 6f 74 20 62 65 20 70 73 65 75 64 6f 2d 74   not be pseudo-t
29860 61 62 6c 65 2e 20 20 49 74 20 68 61 73 20 74 6f  able.  It has to
29870 20 62 65 20 61 20 72 65 61 6c 20 74 61 62 6c 65   be a real table
29880 20 77 69 74 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c   with.** multipl
29890 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  e rows..**.** If
298a0 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20   P4 is not NULL 
298b0 74 68 65 6e 20 69 74 20 70 6f 69 6e 74 73 20 74  then it points t
298c0 6f 20 61 20 54 61 62 6c 65 20 6f 62 6a 65 63 74  o a Table object
298d0 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 65  . In this case e
298e0 69 74 68 65 72 20 0a 2a 2a 20 74 68 65 20 75 70  ither .** the up
298f0 64 61 74 65 20 6f 72 20 70 72 65 2d 75 70 64 61  date or pre-upda
29900 74 65 20 68 6f 6f 6b 2c 20 6f 72 20 62 6f 74 68  te hook, or both
29910 2c 20 6d 61 79 20 62 65 20 69 6e 76 6f 6b 65 64  , may be invoked
29920 2e 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20  . The P1 cursor 
29930 6d 75 73 74 0a 2a 2a 20 68 61 76 65 20 62 65 65  must.** have bee
29940 6e 20 70 6f 73 69 74 69 6f 6e 65 64 20 75 73 69  n positioned usi
29950 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 70  ng OP_NotFound p
29960 72 69 6f 72 20 74 6f 20 69 6e 76 6f 6b 69 6e 67  rior to invoking
29970 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 20   this opcode in 
29980 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 2e 20 53  .** this case. S
29990 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 69 66 20  pecifically, if 
299a0 6f 6e 65 20 69 73 20 63 6f 6e 66 69 67 75 72 65  one is configure
299b0 64 2c 20 74 68 65 20 70 72 65 2d 75 70 64 61 74  d, the pre-updat
299c0 65 20 68 6f 6f 6b 20 69 73 20 0a 2a 2a 20 69 6e  e hook is .** in
299d0 76 6f 6b 65 64 20 69 66 20 50 34 20 69 73 20 6e  voked if P4 is n
299e0 6f 74 20 4e 55 4c 4c 2e 20 54 68 65 20 75 70 64  ot NULL. The upd
299f0 61 74 65 2d 68 6f 6f 6b 20 69 73 20 69 6e 76 6f  ate-hook is invo
29a00 6b 65 64 20 69 66 20 6f 6e 65 20 69 73 20 63 6f  ked if one is co
29a10 6e 66 69 67 75 72 65 64 2c 20 0a 2a 2a 20 50 34  nfigured, .** P4
29a20 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 61 6e   is not NULL, an
29a30 64 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48  d the OPFLAG_NCH
29a40 41 4e 47 45 20 66 6c 61 67 20 69 73 20 73 65 74  ANGE flag is set
29a50 20 69 6e 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66   in P2..**.** If
29a60 20 74 68 65 20 4f 50 46 4c 41 47 5f 49 53 55 50   the OPFLAG_ISUP
29a70 44 41 54 45 20 66 6c 61 67 20 69 73 20 73 65 74  DATE flag is set
29a80 20 69 6e 20 50 32 2c 20 74 68 65 6e 20 50 33 20   in P2, then P3 
29a90 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64  contains the add
29aa0 72 65 73 73 0a 2a 2a 20 6f 66 20 74 68 65 20 6d  ress.** of the m
29ab0 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74 20  emory cell that 
29ac0 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 76 61 6c  contains the val
29ad0 75 65 20 74 68 61 74 20 74 68 65 20 72 6f 77 69  ue that the rowi
29ae0 64 20 6f 66 20 74 68 65 20 72 6f 77 20 77 69 6c  d of the row wil
29af0 6c 0a 2a 2a 20 62 65 20 73 65 74 20 74 6f 20 62  l.** be set to b
29b00 79 20 74 68 65 20 75 70 64 61 74 65 2e 0a 2a 2f  y the update..*/
29b10 0a 63 61 73 65 20 4f 50 5f 44 65 6c 65 74 65 3a  .case OP_Delete:
29b20 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
29b30 2a 70 43 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  *pC;.  const cha
29b40 72 20 2a 7a 44 62 3b 0a 20 20 54 61 62 6c 65 20  r *zDb;.  Table 
29b50 2a 70 54 61 62 3b 0a 20 20 69 6e 74 20 6f 70 66  *pTab;.  int opf
29b60 6c 61 67 73 3b 0a 0a 20 20 6f 70 66 6c 61 67 73  lags;..  opflags
29b70 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73   = pOp->p2;.  as
29b80 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
29b90 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
29ba0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
29bb0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
29bc0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
29bd0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
29be0 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
29bf0 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
29c00 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63    assert( pC->uc
29c10 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  .pCursor!=0 );. 
29c20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
29c30 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
29c40 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 49  ;.  sqlite3VdbeI
29c50 6e 63 72 57 72 69 74 65 43 6f 75 6e 74 65 72 28  ncrWriteCounter(
29c60 70 2c 20 70 43 29 3b 0a 0a 23 69 66 64 65 66 20  p, pC);..#ifdef 
29c70 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69  SQLITE_DEBUG.  i
29c80 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
29c90 50 34 5f 54 41 42 4c 45 20 26 26 20 48 61 73 52  P4_TABLE && HasR
29ca0 6f 77 69 64 28 70 4f 70 2d 3e 70 34 2e 70 54 61  owid(pOp->p4.pTa
29cb0 62 29 20 26 26 20 70 4f 70 2d 3e 70 35 3d 3d 30  b) && pOp->p5==0
29cc0 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 70 35   ){.    /* If p5
29cd0 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 73 65   is zero, the se
29ce0 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20 74 68 61  ek operation tha
29cf0 74 20 70 6f 73 69 74 69 6f 6e 65 64 20 74 68 65  t positioned the
29d00 20 63 75 72 73 6f 72 20 70 72 69 6f 72 20 74 6f   cursor prior to
29d10 0a 20 20 20 20 2a 2a 20 4f 50 5f 44 65 6c 65 74  .    ** OP_Delet
29d20 65 20 77 69 6c 6c 20 68 61 76 65 20 61 6c 73 6f  e will have also
29d30 20 73 65 74 20 74 68 65 20 70 43 2d 3e 6d 6f 76   set the pC->mov
29d40 65 74 6f 54 61 72 67 65 74 20 66 69 65 6c 64 20  etoTarget field 
29d50 74 6f 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a  to the rowid of.
29d60 20 20 20 20 2a 2a 20 74 68 65 20 72 6f 77 20 74      ** the row t
29d70 68 61 74 20 69 73 20 62 65 69 6e 67 20 64 65 6c  hat is being del
29d80 65 74 65 64 20 2a 2f 0a 20 20 20 20 69 36 34 20  eted */.    i64 
29d90 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 42 74  iKey = sqlite3Bt
29da0 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70 43  reeIntegerKey(pC
29db0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20  ->uc.pCursor);. 
29dc0 20 20 20 61 73 73 65 72 74 28 20 43 4f 52 52 55     assert( CORRU
29dd0 50 54 5f 44 42 20 7c 7c 20 70 43 2d 3e 6d 6f 76  PT_DB || pC->mov
29de0 65 74 6f 54 61 72 67 65 74 3d 3d 69 4b 65 79 20  etoTarget==iKey 
29df0 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  );.  }.#endif.. 
29e00 20 2f 2a 20 49 66 20 74 68 65 20 75 70 64 61 74   /* If the updat
29e10 65 2d 68 6f 6f 6b 20 6f 72 20 70 72 65 2d 75 70  e-hook or pre-up
29e20 64 61 74 65 2d 68 6f 6f 6b 20 77 69 6c 6c 20 62  date-hook will b
29e30 65 20 69 6e 76 6f 6b 65 64 2c 20 73 65 74 20 7a  e invoked, set z
29e40 44 62 20 74 6f 0a 20 20 2a 2a 20 74 68 65 20 6e  Db to.  ** the n
29e50 61 6d 65 20 6f 66 20 74 68 65 20 64 62 20 74 6f  ame of the db to
29e60 20 70 61 73 73 20 61 73 20 74 6f 20 69 74 2e 20   pass as to it. 
29e70 41 6c 73 6f 20 73 65 74 20 6c 6f 63 61 6c 20 70  Also set local p
29e80 54 61 62 20 74 6f 20 61 20 63 6f 70 79 0a 20 20  Tab to a copy.  
29e90 2a 2a 20 6f 66 20 70 34 2e 70 54 61 62 2e 20 46  ** of p4.pTab. F
29ea0 69 6e 61 6c 6c 79 2c 20 69 66 20 70 35 20 69 73  inally, if p5 is
29eb0 20 74 72 75 65 2c 20 69 6e 64 69 63 61 74 69 6e   true, indicatin
29ec0 67 20 74 68 61 74 20 74 68 69 73 20 63 75 72 73  g that this curs
29ed0 6f 72 20 77 61 73 0a 20 20 2a 2a 20 6c 61 73 74  or was.  ** last
29ee0 20 6d 6f 76 65 64 20 77 69 74 68 20 4f 50 5f 4e   moved with OP_N
29ef0 65 78 74 20 6f 72 20 4f 50 5f 50 72 65 76 2c 20  ext or OP_Prev, 
29f00 6e 6f 74 20 53 65 65 6b 20 6f 72 20 4e 6f 74 46  not Seek or NotF
29f10 6f 75 6e 64 2c 20 73 65 74 20 0a 20 20 2a 2a 20  ound, set .  ** 
29f20 56 64 62 65 43 75 72 73 6f 72 2e 6d 6f 76 65 74  VdbeCursor.movet
29f30 6f 54 61 72 67 65 74 20 74 6f 20 74 68 65 20 63  oTarget to the c
29f40 75 72 72 65 6e 74 20 72 6f 77 69 64 2e 20 20 2a  urrent rowid.  *
29f50 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74  /.  if( pOp->p4t
29f60 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20 26 26  ype==P4_TABLE &&
29f70 20 48 41 53 5f 55 50 44 41 54 45 5f 48 4f 4f 4b   HAS_UPDATE_HOOK
29f80 28 64 62 29 20 29 7b 0a 20 20 20 20 61 73 73 65  (db) ){.    asse
29f90 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29  rt( pC->iDb>=0 )
29fa0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
29fb0 70 2d 3e 70 34 2e 70 54 61 62 21 3d 30 20 29 3b  p->p4.pTab!=0 );
29fc0 0a 20 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61  .    zDb = db->a
29fd0 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 44 62 53  Db[pC->iDb].zDbS
29fe0 4e 61 6d 65 3b 0a 20 20 20 20 70 54 61 62 20 3d  Name;.    pTab =
29ff0 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 3b 0a 20   pOp->p4.pTab;. 
2a000 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 70 35 20     if( (pOp->p5 
2a010 26 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53  & OPFLAG_SAVEPOS
2a020 49 54 49 4f 4e 29 21 3d 30 20 26 26 20 70 43 2d  ITION)!=0 && pC-
2a030 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20  >isTable ){.    
2a040 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67    pC->movetoTarg
2a050 65 74 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  et = sqlite3Btre
2a060 65 49 6e 74 65 67 65 72 4b 65 79 28 70 43 2d 3e  eIntegerKey(pC->
2a070 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  uc.pCursor);.   
2a080 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
2a090 7a 44 62 20 3d 20 30 3b 20 20 20 2f 2a 20 4e 6f  zDb = 0;   /* No
2a0a0 74 20 6e 65 65 64 65 64 2e 20 20 53 69 6c 65 6e  t needed.  Silen
2a0b0 63 65 20 61 20 63 6f 6d 70 69 6c 65 72 20 77 61  ce a compiler wa
2a0c0 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 70 54  rning. */.    pT
2a0d0 61 62 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20  ab = 0;  /* Not 
2a0e0 6e 65 65 64 65 64 2e 20 20 53 69 6c 65 6e 63 65  needed.  Silence
2a0f0 20 61 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e   a compiler warn
2a100 69 6e 67 2e 20 2a 2f 0a 20 20 7d 0a 0a 23 69 66  ing. */.  }..#if
2a110 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
2a120 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b  E_PREUPDATE_HOOK
2a130 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
2a140 20 70 72 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b   pre-update-hook
2a150 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f   if required. */
2a160 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72 65 55  .  if( db->xPreU
2a170 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26  pdateCallback &&
2a180 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 20 29 7b   pOp->p4.pTab ){
2a190 0a 20 20 20 20 61 73 73 65 72 74 28 20 21 28 6f  .    assert( !(o
2a1a0 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f  pflags & OPFLAG_
2a1b0 49 53 55 50 44 41 54 45 29 20 0a 20 20 20 20 20  ISUPDATE) .     
2a1c0 20 20 20 20 7c 7c 20 48 61 73 52 6f 77 69 64 28      || HasRowid(
2a1d0 70 54 61 62 29 3d 3d 30 20 0a 20 20 20 20 20 20  pTab)==0 .      
2a1e0 20 20 20 7c 7c 20 28 61 4d 65 6d 5b 70 4f 70 2d     || (aMem[pOp-
2a1f0 3e 70 33 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d  >p3].flags & MEM
2a200 5f 49 6e 74 29 20 0a 20 20 20 20 29 3b 0a 20 20  _Int) .    );.  
2a210 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 65    sqlite3VdbePre
2a220 55 70 64 61 74 65 48 6f 6f 6b 28 70 2c 20 70 43  UpdateHook(p, pC
2a230 2c 0a 20 20 20 20 20 20 20 20 28 6f 70 66 6c 61  ,.        (opfla
2a240 67 73 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50  gs & OPFLAG_ISUP
2a250 44 41 54 45 29 20 3f 20 53 51 4c 49 54 45 5f 55  DATE) ? SQLITE_U
2a260 50 44 41 54 45 20 3a 20 53 51 4c 49 54 45 5f 44  PDATE : SQLITE_D
2a270 45 4c 45 54 45 2c 20 0a 20 20 20 20 20 20 20 20  ELETE, .        
2a280 7a 44 62 2c 20 70 54 61 62 2c 20 70 43 2d 3e 6d  zDb, pTab, pC->m
2a290 6f 76 65 74 6f 54 61 72 67 65 74 2c 0a 20 20 20  ovetoTarget,.   
2a2a0 20 20 20 20 20 70 4f 70 2d 3e 70 33 0a 20 20 20       pOp->p3.   
2a2b0 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 6f 70   );.  }.  if( op
2a2c0 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f 49  flags & OPFLAG_I
2a2d0 53 4e 4f 4f 50 20 29 20 62 72 65 61 6b 3b 0a 23  SNOOP ) break;.#
2a2e0 65 6e 64 69 66 0a 20 0a 20 20 2f 2a 20 4f 6e 6c  endif. .  /* Onl
2a2f0 79 20 66 6c 61 67 73 20 74 68 61 74 20 63 61 6e  y flags that can
2a300 20 62 65 20 73 65 74 20 61 72 65 20 53 41 56 45   be set are SAVE
2a310 50 4f 49 53 54 49 4f 4e 20 61 6e 64 20 41 55 58  POISTION and AUX
2a320 44 45 4c 45 54 45 20 2a 2f 20 0a 20 20 61 73 73  DELETE */ .  ass
2a330 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 20 26 20  ert( (pOp->p5 & 
2a340 7e 28 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53  ~(OPFLAG_SAVEPOS
2a350 49 54 49 4f 4e 7c 4f 50 46 4c 41 47 5f 41 55 58  ITION|OPFLAG_AUX
2a360 44 45 4c 45 54 45 29 29 3d 3d 30 20 29 3b 0a 20  DELETE))==0 );. 
2a370 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f   assert( OPFLAG_
2a380 53 41 56 45 50 4f 53 49 54 49 4f 4e 3d 3d 42 54  SAVEPOSITION==BT
2a390 52 45 45 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e  REE_SAVEPOSITION
2a3a0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50   );.  assert( OP
2a3b0 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 3d 3d  FLAG_AUXDELETE==
2a3c0 42 54 52 45 45 5f 41 55 58 44 45 4c 45 54 45 20  BTREE_AUXDELETE 
2a3d0 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
2a3e0 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70 2d  E_DEBUG.  if( p-
2a3f0 3e 70 46 72 61 6d 65 3d 3d 30 20 29 7b 0a 20 20  >pFrame==0 ){.  
2a400 20 20 69 66 28 20 70 43 2d 3e 69 73 45 70 68 65    if( pC->isEphe
2a410 6d 65 72 61 6c 3d 3d 30 0a 20 20 20 20 20 20 20  meral==0.       
2a420 20 26 26 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f   && (pOp->p5 & O
2a430 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 29  PFLAG_AUXDELETE)
2a440 3d 3d 30 0a 20 20 20 20 20 20 20 20 26 26 20 28  ==0.        && (
2a450 70 43 2d 3e 77 72 46 6c 61 67 20 26 20 4f 50 46  pC->wrFlag & OPF
2a460 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 29 3d 3d  LAG_FORDELETE)==
2a470 30 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20  0.      ){.     
2a480 20 6e 45 78 74 72 61 44 65 6c 65 74 65 2b 2b 3b   nExtraDelete++;
2a490 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70  .    }.    if( p
2a4a0 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f  Op->p2 & OPFLAG_
2a4b0 4e 43 48 41 4e 47 45 20 29 7b 0a 20 20 20 20 20  NCHANGE ){.     
2a4c0 20 6e 45 78 74 72 61 44 65 6c 65 74 65 2d 2d 3b   nExtraDelete--;
2a4d0 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69  .    }.  }.#endi
2a4e0 66 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  f..  rc = sqlite
2a4f0 33 42 74 72 65 65 44 65 6c 65 74 65 28 70 43 2d  3BtreeDelete(pC-
2a500 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 70 4f 70  >uc.pCursor, pOp
2a510 2d 3e 70 35 29 3b 0a 20 20 70 43 2d 3e 63 61 63  ->p5);.  pC->cac
2a520 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
2a530 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 73 65  _STALE;.  pC->se
2a540 65 6b 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20  ekResult = 0;.  
2a550 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
2a560 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2a570 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  ;..  /* Invoke t
2a580 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69  he update-hook i
2a590 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20  f required. */. 
2a5a0 20 69 66 28 20 6f 70 66 6c 61 67 73 20 26 20 4f   if( opflags & O
2a5b0 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 7b  PFLAG_NCHANGE ){
2a5c0 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 2b  .    p->nChange+
2a5d0 2b 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78  +;.    if( db->x
2a5e0 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26  UpdateCallback &
2a5f0 26 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29  & HasRowid(pTab)
2a600 20 29 7b 0a 20 20 20 20 20 20 64 62 2d 3e 78 55   ){.      db->xU
2a610 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62  pdateCallback(db
2a620 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20 53 51  ->pUpdateArg, SQ
2a630 4c 49 54 45 5f 44 45 4c 45 54 45 2c 20 7a 44 62  LITE_DELETE, zDb
2a640 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 0a 20  , pTab->zName,. 
2a650 20 20 20 20 20 20 20 20 20 70 43 2d 3e 6d 6f 76           pC->mov
2a660 65 74 6f 54 61 72 67 65 74 29 3b 0a 20 20 20 20  etoTarget);.    
2a670 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44    assert( pC->iD
2a680 62 3e 3d 30 20 29 3b 0a 20 20 20 20 7d 0a 20 20  b>=0 );.    }.  
2a690 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 2f 2a  }..  break;.}./*
2a6a0 20 4f 70 63 6f 64 65 3a 20 52 65 73 65 74 43 6f   Opcode: ResetCo
2a6b0 75 6e 74 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  unt * * * * *.**
2a6c0 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66  .** The value of
2a6d0 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e   the change coun
2a6e0 74 65 72 20 69 73 20 63 6f 70 69 65 64 20 74 6f  ter is copied to
2a6f0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
2a700 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e 67 65 20 63  ndle.** change c
2a710 6f 75 6e 74 65 72 20 28 72 65 74 75 72 6e 65 64  ounter (returned
2a720 20 62 79 20 73 75 62 73 65 71 75 65 6e 74 20 63   by subsequent c
2a730 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74 65 33 5f  alls to sqlite3_
2a740 63 68 61 6e 67 65 73 28 29 29 2e 0a 2a 2a 20 54  changes())..** T
2a750 68 65 6e 20 74 68 65 20 56 4d 73 20 69 6e 74 65  hen the VMs inte
2a760 72 6e 61 6c 20 63 68 61 6e 67 65 20 63 6f 75 6e  rnal change coun
2a770 74 65 72 20 72 65 73 65 74 73 20 74 6f 20 30 2e  ter resets to 0.
2a780 0a 2a 2a 20 54 68 69 73 20 69 73 20 75 73 65 64  .** This is used
2a790 20 62 79 20 74 72 69 67 67 65 72 20 70 72 6f 67   by trigger prog
2a7a0 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  rams..*/.case OP
2a7b0 5f 52 65 73 65 74 43 6f 75 6e 74 3a 20 7b 0a 20  _ResetCount: {. 
2a7c0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
2a7d0 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43  hanges(db, p->nC
2a7e0 68 61 6e 67 65 29 3b 0a 20 20 70 2d 3e 6e 43 68  hange);.  p->nCh
2a7f0 61 6e 67 65 20 3d 20 30 3b 0a 20 20 62 72 65 61  ange = 0;.  brea
2a800 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2a810 20 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 20 50   SorterCompare P
2a820 31 20 50 32 20 50 33 20 50 34 0a 2a 2a 20 53 79  1 P2 P3 P4.** Sy
2a830 6e 6f 70 73 69 73 3a 20 69 66 20 6b 65 79 28 50  nopsis: if key(P
2a840 31 29 21 3d 74 72 69 6d 28 72 5b 50 33 5d 2c 50  1)!=trim(r[P3],P
2a850 34 29 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  4) goto P2.**.**
2a860 20 50 31 20 69 73 20 61 20 73 6f 72 74 65 72 20   P1 is a sorter 
2a870 63 75 72 73 6f 72 2e 20 54 68 69 73 20 69 6e 73  cursor. This ins
2a880 74 72 75 63 74 69 6f 6e 20 63 6f 6d 70 61 72 65  truction compare
2a890 73 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68  s a prefix of th
2a8a0 65 0a 2a 2a 20 72 65 63 6f 72 64 20 62 6c 6f 62  e.** record blob
2a8b0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
2a8c0 61 67 61 69 6e 73 74 20 61 20 70 72 65 66 69 78  against a prefix
2a8d0 20 6f 66 20 74 68 65 20 65 6e 74 72 79 20 74 68   of the entry th
2a8e0 61 74 20 0a 2a 2a 20 74 68 65 20 73 6f 72 74 65  at .** the sorte
2a8f0 72 20 63 75 72 73 6f 72 20 63 75 72 72 65 6e 74  r cursor current
2a900 6c 79 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 4f  ly points to.  O
2a910 6e 6c 79 20 74 68 65 20 66 69 72 73 74 20 50 34  nly the first P4
2a920 20 66 69 65 6c 64 73 0a 2a 2a 20 6f 66 20 72 5b   fields.** of r[
2a930 50 33 5d 20 61 6e 64 20 74 68 65 20 73 6f 72 74  P3] and the sort
2a940 65 72 20 72 65 63 6f 72 64 20 61 72 65 20 63 6f  er record are co
2a950 6d 70 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  mpared..**.** If
2a960 20 65 69 74 68 65 72 20 50 33 20 6f 72 20 74 68   either P3 or th
2a970 65 20 73 6f 72 74 65 72 20 63 6f 6e 74 61 69 6e  e sorter contain
2a980 73 20 61 20 4e 55 4c 4c 20 69 6e 20 6f 6e 65 20  s a NULL in one 
2a990 6f 66 20 74 68 65 69 72 20 73 69 67 6e 69 66 69  of their signifi
2a9a0 63 61 6e 74 0a 2a 2a 20 66 69 65 6c 64 73 20 28  cant.** fields (
2a9b0 6e 6f 74 20 63 6f 75 6e 74 69 6e 67 20 74 68 65  not counting the
2a9c0 20 50 34 20 66 69 65 6c 64 73 20 61 74 20 74 68   P4 fields at th
2a9d0 65 20 65 6e 64 20 77 68 69 63 68 20 61 72 65 20  e end which are 
2a9e0 69 67 6e 6f 72 65 64 29 20 74 68 65 6e 0a 2a 2a  ignored) then.**
2a9f0 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20   the comparison 
2aa00 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 62 65  is assumed to be
2aa10 20 65 71 75 61 6c 2e 0a 2a 2a 0a 2a 2a 20 46 61   equal..**.** Fa
2aa20 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 6e 65  ll through to ne
2aa30 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  xt instruction i
2aa40 66 20 74 68 65 20 74 77 6f 20 72 65 63 6f 72 64  f the two record
2aa50 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20  s compare equal 
2aa60 74 6f 0a 2a 2a 20 65 61 63 68 20 6f 74 68 65 72  to.** each other
2aa70 2e 20 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66  .  Jump to P2 if
2aa80 20 74 68 65 79 20 61 72 65 20 64 69 66 66 65 72   they are differ
2aa90 65 6e 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ent..*/.case OP_
2aaa0 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 3a 20 7b  SorterCompare: {
2aab0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
2aac0 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  C;.  int res;.  
2aad0 69 6e 74 20 6e 4b 65 79 43 6f 6c 3b 0a 0a 20 20  int nKeyCol;..  
2aae0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
2aaf0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2ab00 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29  ( isSorter(pC) )
2ab10 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2ab20 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
2ab30 32 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61  2 );.  pIn3 = &a
2ab40 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
2ab50 6e 4b 65 79 43 6f 6c 20 3d 20 70 4f 70 2d 3e 70  nKeyCol = pOp->p
2ab60 34 2e 69 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a  4.i;.  res = 0;.
2ab70 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
2ab80 62 65 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 28  beSorterCompare(
2ab90 70 43 2c 20 70 49 6e 33 2c 20 6e 4b 65 79 43 6f  pC, pIn3, nKeyCo
2aba0 6c 2c 20 26 72 65 73 29 3b 0a 20 20 56 64 62 65  l, &res);.  Vdbe
2abb0 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21  BranchTaken(res!
2abc0 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 63 20  =0,2);.  if( rc 
2abd0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
2abe0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28  _to_error;.  if(
2abf0 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70   res ) goto jump
2ac00 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b  _to_p2;.  break;
2ac10 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .};../* Opcode: 
2ac20 53 6f 72 74 65 72 44 61 74 61 20 50 31 20 50 32  SorterData P1 P2
2ac30 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
2ac40 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a  sis: r[P2]=data.
2ac50 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f  **.** Write into
2ac60 20 72 65 67 69 73 74 65 72 20 50 32 20 74 68 65   register P2 the
2ac70 20 63 75 72 72 65 6e 74 20 73 6f 72 74 65 72 20   current sorter 
2ac80 64 61 74 61 20 66 6f 72 20 73 6f 72 74 65 72 20  data for sorter 
2ac90 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68  cursor P1..** Th
2aca0 65 6e 20 63 6c 65 61 72 20 74 68 65 20 63 6f 6c  en clear the col
2acb0 75 6d 6e 20 68 65 61 64 65 72 20 63 61 63 68 65  umn header cache
2acc0 20 6f 6e 20 63 75 72 73 6f 72 20 50 33 2e 0a 2a   on cursor P3..*
2acd0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
2ace0 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 75 73 65   is normally use
2acf0 20 74 6f 20 6d 6f 76 65 20 61 20 72 65 63 6f 72   to move a recor
2ad00 64 20 6f 75 74 20 6f 66 20 74 68 65 20 73 6f 72  d out of the sor
2ad10 74 65 72 20 61 6e 64 20 69 6e 74 6f 0a 2a 2a 20  ter and into.** 
2ad20 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  a register that 
2ad30 69 73 20 74 68 65 20 73 6f 75 72 63 65 20 66 6f  is the source fo
2ad40 72 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  r a pseudo-table
2ad50 20 63 75 72 73 6f 72 20 63 72 65 61 74 65 64 20   cursor created 
2ad60 75 73 69 6e 67 0a 2a 2a 20 4f 70 65 6e 50 73 65  using.** OpenPse
2ad70 75 64 6f 2e 20 20 54 68 61 74 20 70 73 65 75 64  udo.  That pseud
2ad80 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72 20 69  o-table cursor i
2ad90 73 20 74 68 65 20 6f 6e 65 20 74 68 61 74 20 69  s the one that i
2ada0 73 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 0a  s identified by.
2adb0 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 50 33 2e  ** parameter P3.
2adc0 20 20 43 6c 65 61 72 69 6e 67 20 74 68 65 20 50    Clearing the P
2add0 33 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 61  3 column cache a
2ade0 73 20 70 61 72 74 20 6f 66 20 74 68 69 73 20 6f  s part of this o
2adf0 70 63 6f 64 65 20 73 61 76 65 73 0a 2a 2a 20 75  pcode saves.** u
2ae00 73 20 66 72 6f 6d 20 68 61 76 69 6e 67 20 74 6f  s from having to
2ae10 20 69 73 73 75 65 20 61 20 73 65 70 61 72 61 74   issue a separat
2ae20 65 20 4e 75 6c 6c 52 6f 77 20 69 6e 73 74 72 75  e NullRow instru
2ae30 63 74 69 6f 6e 20 74 6f 20 63 6c 65 61 72 20 74  ction to clear t
2ae40 68 61 74 20 63 61 63 68 65 2e 0a 2a 2f 0a 63 61  hat cache..*/.ca
2ae50 73 65 20 4f 50 5f 53 6f 72 74 65 72 44 61 74 61  se OP_SorterData
2ae60 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
2ae70 20 2a 70 43 3b 0a 0a 20 20 70 4f 75 74 20 3d 20   *pC;..  pOut = 
2ae80 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
2ae90 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
2aea0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2aeb0 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  rt( isSorter(pC)
2aec0 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
2aed0 65 33 56 64 62 65 53 6f 72 74 65 72 52 6f 77 6b  e3VdbeSorterRowk
2aee0 65 79 28 70 43 2c 20 70 4f 75 74 29 3b 0a 20 20  ey(pC, pOut);.  
2aef0 61 73 73 65 72 74 28 20 72 63 21 3d 53 51 4c 49  assert( rc!=SQLI
2af00 54 45 5f 4f 4b 20 7c 7c 20 28 70 4f 75 74 2d 3e  TE_OK || (pOut->
2af10 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62  flags & MEM_Blob
2af20 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
2af30 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
2af40 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
2af50 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
2af60 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2af70 65 72 72 6f 72 3b 0a 20 20 70 2d 3e 61 70 43 73  error;.  p->apCs
2af80 72 5b 70 4f 70 2d 3e 70 33 5d 2d 3e 63 61 63 68  r[pOp->p3]->cach
2af90 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
2afa0 53 54 41 4c 45 3b 0a 20 20 62 72 65 61 6b 3b 0a  STALE;.  break;.
2afb0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  }../* Opcode: Ro
2afc0 77 44 61 74 61 20 50 31 20 50 32 20 50 33 20 2a  wData P1 P2 P3 *
2afd0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2afe0 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a  r[P2]=data.**.**
2aff0 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69   Write into regi
2b000 73 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70  ster P2 the comp
2b010 6c 65 74 65 20 72 6f 77 20 63 6f 6e 74 65 6e 74  lete row content
2b020 20 66 6f 72 20 74 68 65 20 72 6f 77 20 61 74 20   for the row at 
2b030 0a 2a 2a 20 77 68 69 63 68 20 63 75 72 73 6f 72  .** which cursor
2b040 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
2b050 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 20 54 68   pointing..** Th
2b060 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70  ere is no interp
2b070 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  retation of the 
2b080 64 61 74 61 2e 20 20 0a 2a 2a 20 49 74 20 69 73  data.  .** It is
2b090 20 6a 75 73 74 20 63 6f 70 69 65 64 20 6f 6e 74   just copied ont
2b0a0 6f 20 74 68 65 20 50 32 20 72 65 67 69 73 74 65  o the P2 registe
2b0b0 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a  r exactly as .**
2b0c0 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20   it is found in 
2b0d0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
2b0e0 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73  e..**.** If curs
2b0f0 6f 72 20 50 31 20 69 73 20 61 6e 20 69 6e 64 65  or P1 is an inde
2b100 78 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6e 74  x, then the cont
2b110 65 6e 74 20 69 73 20 74 68 65 20 6b 65 79 20 6f  ent is the key o
2b120 66 20 74 68 65 20 72 6f 77 2e 0a 2a 2a 20 49 66  f the row..** If
2b130 20 63 75 72 73 6f 72 20 50 32 20 69 73 20 61 20   cursor P2 is a 
2b140 74 61 62 6c 65 2c 20 74 68 65 6e 20 74 68 65 20  table, then the 
2b150 63 6f 6e 74 65 6e 74 20 65 78 74 72 61 63 74 65  content extracte
2b160 64 20 69 73 20 74 68 65 20 64 61 74 61 2e 0a 2a  d is the data..*
2b170 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63  *.** If the P1 c
2b180 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f  ursor must be po
2b190 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69  inting to a vali
2b1a0 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c  d row (not a NUL
2b1b0 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72  L row).** of a r
2b1c0 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61  eal table, not a
2b1d0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a   pseudo-table..*
2b1e0 2a 0a 2a 2a 20 49 66 20 50 33 21 3d 30 20 74 68  *.** If P3!=0 th
2b1f0 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69  en this opcode i
2b200 73 20 61 6c 6c 6f 77 65 64 20 74 6f 20 6d 61 6b  s allowed to mak
2b210 65 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 70  e an ephemeral p
2b220 6f 69 6e 74 65 72 0a 2a 2a 20 69 6e 74 6f 20 74  ointer.** into t
2b230 68 65 20 64 61 74 61 62 61 73 65 20 70 61 67 65  he database page
2b240 2e 20 20 54 68 61 74 20 6d 65 61 6e 73 20 74 68  .  That means th
2b250 61 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  at the content o
2b260 66 20 74 68 65 20 6f 75 74 70 75 74 0a 2a 2a 20  f the output.** 
2b270 72 65 67 69 73 74 65 72 20 77 69 6c 6c 20 62 65  register will be
2b280 20 69 6e 76 61 6c 69 64 61 74 65 64 20 61 73 20   invalidated as 
2b290 73 6f 6f 6e 20 61 73 20 74 68 65 20 63 75 72 73  soon as the curs
2b2a0 6f 72 20 6d 6f 76 65 73 20 2d 20 69 6e 63 6c 75  or moves - inclu
2b2b0 64 69 6e 67 0a 2a 2a 20 6d 6f 76 65 73 20 63 61  ding.** moves ca
2b2c0 75 73 65 64 20 62 79 20 6f 74 68 65 72 20 63 75  used by other cu
2b2d0 72 73 6f 72 73 20 74 68 61 74 20 22 73 61 76 65  rsors that "save
2b2e0 22 20 74 68 65 20 63 75 72 72 65 6e 74 20 63 75  " the current cu
2b2f0 72 73 6f 72 73 0a 2a 2a 20 70 6f 73 69 74 69 6f  rsors.** positio
2b300 6e 20 69 6e 20 6f 72 64 65 72 20 74 68 61 74 20  n in order that 
2b310 74 68 65 79 20 63 61 6e 20 77 72 69 74 65 20 74  they can write t
2b320 6f 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65  o the same table
2b330 2e 20 20 49 66 20 50 33 3d 3d 30 0a 2a 2a 20 74  .  If P3==0.** t
2b340 68 65 6e 20 61 20 63 6f 70 79 20 6f 66 20 74 68  hen a copy of th
2b350 65 20 64 61 74 61 20 69 73 20 6d 61 64 65 20 69  e data is made i
2b360 6e 74 6f 20 6d 65 6d 6f 72 79 2e 20 20 50 33 21  nto memory.  P3!
2b370 3d 30 20 69 73 20 66 61 73 74 65 72 2c 20 62 75  =0 is faster, bu
2b380 74 0a 2a 2a 20 50 33 3d 3d 30 20 69 73 20 73 61  t.** P3==0 is sa
2b390 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33  fer..**.** If P3
2b3a0 21 3d 30 20 74 68 65 6e 20 74 68 65 20 63 6f 6e  !=0 then the con
2b3b0 74 65 6e 74 20 6f 66 20 74 68 65 20 50 32 20 72  tent of the P2 r
2b3c0 65 67 69 73 74 65 72 20 69 73 20 75 6e 73 75 69  egister is unsui
2b3d0 74 61 62 6c 65 20 66 6f 72 20 75 73 65 0a 2a 2a  table for use.**
2b3e0 20 69 6e 20 4f 50 5f 52 65 73 75 6c 74 20 61 6e   in OP_Result an
2b3f0 64 20 61 6e 79 20 4f 50 5f 52 65 73 75 6c 74 20  d any OP_Result 
2b400 77 69 6c 6c 20 69 6e 76 61 6c 69 64 61 74 65 20  will invalidate 
2b410 74 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20  the P2 register 
2b420 63 6f 6e 74 65 6e 74 2e 0a 2a 2a 20 54 68 65 20  content..** The 
2b430 50 32 20 72 65 67 69 73 74 65 72 20 63 6f 6e 74  P2 register cont
2b440 65 6e 74 20 69 73 20 69 6e 76 61 6c 69 64 61 74  ent is invalidat
2b450 65 64 20 62 79 20 6f 70 63 6f 64 65 73 20 6c 69  ed by opcodes li
2b460 6b 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 20 6f  ke OP_Function o
2b470 72 0a 2a 2a 20 62 79 20 61 6e 79 20 75 73 65 20  r.** by any use 
2b480 6f 66 20 61 6e 6f 74 68 65 72 20 63 75 72 73 6f  of another curso
2b490 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68  r pointing to th
2b4a0 65 20 73 61 6d 65 20 74 61 62 6c 65 2e 0a 2a 2f  e same table..*/
2b4b0 0a 63 61 73 65 20 4f 50 5f 52 6f 77 44 61 74 61  .case OP_RowData
2b4c0 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
2b4d0 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
2b4e0 20 2a 70 43 72 73 72 3b 0a 20 20 75 33 32 20 6e   *pCrsr;.  u32 n
2b4f0 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  ;..  pOut = out2
2b500 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
2b510 70 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  p);..  assert( p
2b520 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
2b530 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
2b540 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
2b550 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
2b560 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
2b570 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
2b580 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
2b590 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72  BTREE );.  asser
2b5a0 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d  t( isSorter(pC)=
2b5b0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
2b5c0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29  pC->nullRow==0 )
2b5d0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
2b5e0 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  uc.pCursor!=0 );
2b5f0 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75  .  pCrsr = pC->u
2b600 63 2e 70 43 75 72 73 6f 72 3b 0a 0a 20 20 2f 2a  c.pCursor;..  /*
2b610 20 54 68 65 20 4f 50 5f 52 6f 77 44 61 74 61 20   The OP_RowData 
2b620 6f 70 63 6f 64 65 73 20 61 6c 77 61 79 73 20 66  opcodes always f
2b630 6f 6c 6c 6f 77 20 4f 50 5f 4e 6f 74 45 78 69 73  ollow OP_NotExis
2b640 74 73 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 53 65  ts or.  ** OP_Se
2b650 65 6b 52 6f 77 69 64 20 6f 72 20 4f 50 5f 52 65  ekRowid or OP_Re
2b660 77 69 6e 64 2f 4f 70 5f 4e 65 78 74 20 77 69 74  wind/Op_Next wit
2b670 68 20 6e 6f 20 69 6e 74 65 72 76 65 6e 69 6e 67  h no intervening
2b680 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 0a 20 20   instructions.  
2b690 2a 2a 20 74 68 61 74 20 6d 69 67 68 74 20 69 6e  ** that might in
2b6a0 76 61 6c 69 64 61 74 65 20 74 68 65 20 63 75 72  validate the cur
2b6b0 73 6f 72 2e 0a 20 20 2a 2a 20 49 66 20 74 68 69  sor..  ** If thi
2b6c0 73 20 77 68 65 72 65 20 6e 6f 74 20 74 68 65 20  s where not the 
2b6d0 63 61 73 65 2c 20 6f 6e 20 6f 66 20 74 68 65 20  case, on of the 
2b6e0 66 6f 6c 6c 6f 77 69 6e 67 20 61 73 73 65 72 74  following assert
2b6f0 28 29 73 0a 20 20 2a 2a 20 77 6f 75 6c 64 20 66  ()s.  ** would f
2b700 61 69 6c 2e 20 20 53 68 6f 75 6c 64 20 74 68 69  ail.  Should thi
2b710 73 20 65 76 65 72 20 63 68 61 6e 67 65 20 28 62  s ever change (b
2b720 65 63 61 75 73 65 20 6f 66 20 63 68 61 6e 67 65  ecause of change
2b730 73 20 69 6e 20 74 68 65 20 63 6f 64 65 0a 20 20  s in the code.  
2b740 2a 2a 20 67 65 6e 65 72 61 74 6f 72 29 20 74 68  ** generator) th
2b750 65 6e 20 74 68 65 20 66 69 78 20 77 6f 75 6c 64  en the fix would
2b760 20 62 65 20 74 6f 20 69 6e 73 65 72 74 20 61 20   be to insert a 
2b770 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c  call to.  ** sql
2b780 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f  ite3VdbeCursorMo
2b790 76 65 74 6f 28 29 2e 0a 20 20 2a 2f 0a 20 20 61  veto()..  */.  a
2b7a0 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
2b7b0 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
2b7c0 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
2b7d0 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61  3BtreeCursorIsVa
2b7e0 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a 23 69  lid(pCrsr) );.#i
2b7f0 66 20 30 20 20 2f 2a 20 4e 6f 74 20 72 65 71 75  f 0  /* Not requ
2b800 69 72 65 64 20 64 75 65 20 74 6f 20 74 68 65 20  ired due to the 
2b810 70 72 65 76 69 6f 75 73 20 74 6f 20 61 73 73 65  previous to asse
2b820 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20  rt() statements 
2b830 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  */.  rc = sqlite
2b840 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74  3VdbeCursorMovet
2b850 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 72 63 21  o(pC);.  if( rc!
2b860 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
2b870 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2b880 72 72 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  rror;.#endif..  
2b890 6e 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  n = sqlite3Btree
2b8a0 50 61 79 6c 6f 61 64 53 69 7a 65 28 70 43 72 73  PayloadSize(pCrs
2b8b0 72 29 3b 0a 20 20 69 66 28 20 6e 3e 28 75 33 32  r);.  if( n>(u32
2b8c0 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  )db->aLimit[SQLI
2b8d0 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
2b8e0 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
2b8f0 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 74 65 73 74  _big;.  }.  test
2b900 63 61 73 65 28 20 6e 3d 3d 30 20 29 3b 0a 20 20  case( n==0 );.  
2b910 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
2b920 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 72  MemFromBtree(pCr
2b930 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 29 3b  sr, 0, n, pOut);
2b940 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
2b950 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2b960 72 6f 72 3b 0a 20 20 69 66 28 20 21 70 4f 70 2d  ror;.  if( !pOp-
2b970 3e 70 33 20 29 20 44 65 65 70 68 65 6d 65 72 61  >p3 ) Deephemera
2b980 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 20 20 55 50  lize(pOut);.  UP
2b990 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
2b9a0 45 28 70 4f 75 74 29 3b 0a 20 20 52 45 47 49 53  E(pOut);.  REGIS
2b9b0 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
2b9c0 32 2c 20 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  2, pOut);.  brea
2b9d0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2b9e0 20 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a   Rowid P1 P2 * *
2b9f0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2ba00 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a  r[P2]=rowid.**.*
2ba10 2a 20 53 74 6f 72 65 20 69 6e 20 72 65 67 69 73  * Store in regis
2ba20 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67 65  ter P2 an intege
2ba30 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6b  r which is the k
2ba40 65 79 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  ey of the table 
2ba50 65 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20 50 31  entry that.** P1
2ba60 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
2ba70 69 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 50 31  int to..**.** P1
2ba80 20 63 61 6e 20 62 65 20 65 69 74 68 65 72 20 61   can be either a
2ba90 6e 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65  n ordinary table
2baa0 20 6f 72 20 61 20 76 69 72 74 75 61 6c 20 74 61   or a virtual ta
2bab0 62 6c 65 2e 20 20 54 68 65 72 65 20 75 73 65 64  ble.  There used
2bac0 20 74 6f 0a 2a 2a 20 62 65 20 61 20 73 65 70 61   to.** be a sepa
2bad0 72 61 74 65 20 4f 50 5f 56 52 6f 77 69 64 20 6f  rate OP_VRowid o
2bae0 70 63 6f 64 65 20 66 6f 72 20 75 73 65 20 77 69  pcode for use wi
2baf0 74 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  th virtual table
2bb00 73 2c 20 62 75 74 20 74 68 69 73 0a 2a 2a 20 6f  s, but this.** o
2bb10 6e 65 20 6f 70 63 6f 64 65 20 6e 6f 77 20 77 6f  ne opcode now wo
2bb20 72 6b 73 20 66 6f 72 20 62 6f 74 68 20 74 61 62  rks for both tab
2bb30 6c 65 20 74 79 70 65 73 2e 0a 2a 2f 0a 63 61 73  le types..*/.cas
2bb40 65 20 4f 50 5f 52 6f 77 69 64 3a 20 7b 20 20 20  e OP_Rowid: {   
2bb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2bb60 20 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62 65 43   out2 */.  VdbeC
2bb70 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34  ursor *pC;.  i64
2bb80 20 76 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74   v;.  sqlite3_vt
2bb90 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e  ab *pVtab;.  con
2bba0 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
2bbb0 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 70  e *pModule;..  p
2bbc0 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
2bbd0 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
2bbe0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2bbf0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
2bc00 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
2bc10 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
2bc20 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2bc30 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
2bc40 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21  t( pC->eCurType!
2bc50 3d 43 55 52 54 59 50 45 5f 50 53 45 55 44 4f 20  =CURTYPE_PSEUDO 
2bc60 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29  || pC->nullRow )
2bc70 3b 0a 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c  ;.  if( pC->null
2bc80 52 6f 77 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d  Row ){.    pOut-
2bc90 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  >flags = MEM_Nul
2bca0 6c 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  l;.    break;.  
2bcb0 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 64 65  }else if( pC->de
2bcc0 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 29 7b 0a  ferredMoveto ){.
2bcd0 20 20 20 20 76 20 3d 20 70 43 2d 3e 6d 6f 76 65      v = pC->move
2bce0 74 6f 54 61 72 67 65 74 3b 0a 23 69 66 6e 64 65  toTarget;.#ifnde
2bcf0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
2bd00 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 7d 65 6c  RTUALTABLE.  }el
2bd10 73 65 20 69 66 28 20 70 43 2d 3e 65 43 75 72 54  se if( pC->eCurT
2bd20 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 56 54 41  ype==CURTYPE_VTA
2bd30 42 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  B ){.    assert(
2bd40 20 70 43 2d 3e 75 63 2e 70 56 43 75 72 21 3d 30   pC->uc.pVCur!=0
2bd50 20 29 3b 0a 20 20 20 20 70 56 74 61 62 20 3d 20   );.    pVtab = 
2bd60 70 43 2d 3e 75 63 2e 70 56 43 75 72 2d 3e 70 56  pC->uc.pVCur->pV
2bd70 74 61 62 3b 0a 20 20 20 20 70 4d 6f 64 75 6c 65  tab;.    pModule
2bd80 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
2bd90 65 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e;.    assert( p
2bda0 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 20 29  Module->xRowid )
2bdb0 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75  ;.    rc = pModu
2bdc0 6c 65 2d 3e 78 52 6f 77 69 64 28 70 43 2d 3e 75  le->xRowid(pC->u
2bdd0 63 2e 70 56 43 75 72 2c 20 26 76 29 3b 0a 20 20  c.pVCur, &v);.  
2bde0 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70    sqlite3VtabImp
2bdf0 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74  ortErrmsg(p, pVt
2be00 61 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20  ab);.    if( rc 
2be10 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
2be20 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69  _to_error;.#endi
2be30 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
2be40 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
2be50 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
2be60 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
2be70 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
2be80 45 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  E );.    assert(
2be90 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21   pC->uc.pCursor!
2bea0 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  =0 );.    rc = s
2beb0 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
2bec0 52 65 73 74 6f 72 65 28 70 43 29 3b 0a 20 20 20  Restore(pC);.   
2bed0 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
2bee0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
2bef0 72 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e  r;.    if( pC->n
2bf00 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20  ullRow ){.      
2bf10 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
2bf20 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 62 72  M_Null;.      br
2bf30 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 76  eak;.    }.    v
2bf40 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
2bf50 6e 74 65 67 65 72 4b 65 79 28 70 43 2d 3e 75 63  ntegerKey(pC->uc
2bf60 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20  .pCursor);.  }. 
2bf70 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a   pOut->u.i = v;.
2bf80 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2bf90 70 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77 20 50  pcode: NullRow P
2bfa0 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
2bfb0 4d 6f 76 65 20 74 68 65 20 63 75 72 73 6f 72 20  Move the cursor 
2bfc0 50 31 20 74 6f 20 61 20 6e 75 6c 6c 20 72 6f 77  P1 to a null row
2bfd0 2e 20 20 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e  .  Any OP_Column
2bfe0 20 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a 20 74   operations.** t
2bff0 68 61 74 20 6f 63 63 75 72 20 77 68 69 6c 65 20  hat occur while 
2c000 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 6f 6e  the cursor is on
2c010 20 74 68 65 20 6e 75 6c 6c 20 72 6f 77 20 77 69   the null row wi
2c020 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a 20 77 72 69  ll always.** wri
2c030 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  te a NULL..*/.ca
2c040 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b  se OP_NullRow: {
2c050 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
2c060 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  C;..  assert( pO
2c070 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
2c080 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
2c090 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
2c0a0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
2c0b0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
2c0c0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31   pC->nullRow = 1
2c0d0 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
2c0e0 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
2c0f0 45 3b 0a 20 20 69 66 28 20 70 43 2d 3e 65 43 75  E;.  if( pC->eCu
2c100 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
2c110 54 52 45 45 20 29 7b 0a 20 20 20 20 61 73 73 65  TREE ){.    asse
2c120 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  rt( pC->uc.pCurs
2c130 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c  or!=0 );.    sql
2c140 69 74 65 33 42 74 72 65 65 43 6c 65 61 72 43 75  ite3BtreeClearCu
2c150 72 73 6f 72 28 70 43 2d 3e 75 63 2e 70 43 75 72  rsor(pC->uc.pCur
2c160 73 6f 72 29 3b 0a 20 20 7d 0a 23 69 66 64 65 66  sor);.  }.#ifdef
2c170 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
2c180 69 66 28 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d  if( pC->seekOp==
2c190 30 20 29 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d  0 ) pC->seekOp =
2c1a0 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3b 0a 23 65 6e   OP_NullRow;.#en
2c1b0 64 69 66 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  dif.  break;.}..
2c1c0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 45  /* Opcode: SeekE
2c1d0 6e 64 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  nd P1 * * * *.**
2c1e0 0a 2a 2a 20 50 6f 73 69 74 69 6f 6e 20 63 75 72  .** Position cur
2c1f0 73 6f 72 20 50 31 20 61 74 20 74 68 65 20 65 6e  sor P1 at the en
2c200 64 20 6f 66 20 74 68 65 20 62 74 72 65 65 20 66  d of the btree f
2c210 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 20 6f  or the purpose o
2c220 66 0a 2a 2a 20 61 70 70 65 6e 64 69 6e 67 20 61  f.** appending a
2c230 20 6e 65 77 20 65 6e 74 72 79 20 6f 6e 74 6f 20   new entry onto 
2c240 74 68 65 20 62 74 72 65 65 2e 0a 2a 2a 0a 2a 2a  the btree..**.**
2c250 20 49 74 20 69 73 20 61 73 73 75 6d 65 64 20 74   It is assumed t
2c260 68 61 74 20 74 68 65 20 63 75 72 73 6f 72 20 69  hat the cursor i
2c270 73 20 75 73 65 64 20 6f 6e 6c 79 20 66 6f 72 20  s used only for 
2c280 61 70 70 65 6e 64 69 6e 67 20 61 6e 64 20 73 6f  appending and so
2c290 0a 2a 2a 20 69 66 20 74 68 65 20 63 75 72 73 6f  .** if the curso
2c2a0 72 20 69 73 20 76 61 6c 69 64 2c 20 74 68 65 6e  r is valid, then
2c2b0 20 74 68 65 20 63 75 72 73 6f 72 20 6d 75 73 74   the cursor must
2c2c0 20 61 6c 72 65 61 64 79 20 62 65 20 70 6f 69 6e   already be poin
2c2d0 74 69 6e 67 0a 2a 2a 20 61 74 20 74 68 65 20 65  ting.** at the e
2c2e0 6e 64 20 6f 66 20 74 68 65 20 62 74 72 65 65 20  nd of the btree 
2c2f0 61 6e 64 20 73 6f 20 6e 6f 20 63 68 61 6e 67 65  and so no change
2c300 73 20 61 72 65 20 6d 61 64 65 20 74 6f 0a 2a 2a  s are made to.**
2c310 20 74 68 65 20 63 75 72 73 6f 72 2e 0a 2a 2f 0a   the cursor..*/.
2c320 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 61 73 74 20  /* Opcode: Last 
2c330 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
2c340 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f  * The next use o
2c350 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43  f the Rowid or C
2c360 6f 6c 75 6d 6e 20 6f 72 20 50 72 65 76 20 69 6e  olumn or Prev in
2c370 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31  struction for P1
2c380 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20   .** will refer 
2c390 74 6f 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72  to the last entr
2c3a0 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  y in the databas
2c3b0 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
2c3c0 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c  ..** If the tabl
2c3d0 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65 6d  e or index is em
2c3e0 70 74 79 20 61 6e 64 20 50 32 3e 30 2c 20 74 68  pty and P2>0, th
2c3f0 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  en jump immediat
2c400 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66  ely to P2..** If
2c410 20 50 32 20 69 73 20 30 20 6f 72 20 69 66 20 74   P2 is 0 or if t
2c420 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
2c430 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20  x is not empty, 
2c440 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20  fall through.** 
2c450 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
2c460 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
2c470 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
2c480 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
2c490 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  r configured to 
2c4a0 6d 6f 76 65 20 69 6e 20 72 65 76 65 72 73 65 20  move in reverse 
2c4b0 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74  order,.** from t
2c4c0 68 65 20 65 6e 64 20 74 6f 77 61 72 64 20 74 68  he end toward th
2c4d0 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e  e beginning.  In
2c4e0 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
2c4f0 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63  e cursor is.** c
2c500 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65  onfigured to use
2c510 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e   Prev, not Next.
2c520 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b  .*/.case OP_Seek
2c530 45 6e 64 3a 0a 63 61 73 65 20 4f 50 5f 4c 61 73  End:.case OP_Las
2c540 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  t: {        /* j
2c550 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ump */.  VdbeCur
2c560 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
2c570 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
2c580 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74  t res;..  assert
2c590 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
2c5a0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
2c5b0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
2c5c0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
2c5d0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
2c5e0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
2c5f0 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
2c600 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43  PE_BTREE );.  pC
2c610 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75  rsr = pC->uc.pCu
2c620 72 73 6f 72 3b 0a 20 20 72 65 73 20 3d 20 30 3b  rsor;.  res = 0;
2c630 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72  .  assert( pCrsr
2c640 21 3d 30 20 29 3b 0a 23 69 66 64 65 66 20 53 51  !=0 );.#ifdef SQ
2c650 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d  LITE_DEBUG.  pC-
2c660 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f  >seekOp = pOp->o
2c670 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 20 20  pcode;.#endif.  
2c680 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
2c690 3d 4f 50 5f 53 65 65 6b 45 6e 64 20 29 7b 0a 20  =OP_SeekEnd ){. 
2c6a0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
2c6b0 70 32 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d  p2==0 );.    pC-
2c6c0 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 2d 31  >seekResult = -1
2c6d0 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  ;.    if( sqlite
2c6e0 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61  3BtreeCursorIsVa
2c6f0 6c 69 64 4e 4e 28 70 43 72 73 72 29 20 29 7b 0a  lidNN(pCrsr) ){.
2c700 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
2c710 20 7d 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71   }.  }.  rc = sq
2c720 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70  lite3BtreeLast(p
2c730 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 70  Crsr, &res);.  p
2c740 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38  C->nullRow = (u8
2c750 29 72 65 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65  )res;.  pC->defe
2c760 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
2c770 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
2c780 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
2c790 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
2c7a0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2c7b0 72 6f 72 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  ror;.  if( pOp->
2c7c0 70 32 3e 30 20 29 7b 0a 20 20 20 20 56 64 62 65  p2>0 ){.    Vdbe
2c7d0 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21  BranchTaken(res!
2c7e0 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 72  =0,2);.    if( r
2c7f0 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  es ) goto jump_t
2c800 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61  o_p2;.  }.  brea
2c810 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2c820 20 49 66 53 6d 61 6c 6c 65 72 20 50 31 20 50 32   IfSmaller P1 P2
2c830 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 45 73   P3 * *.**.** Es
2c840 74 69 6d 61 74 65 20 74 68 65 20 6e 75 6d 62 65  timate the numbe
2c850 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65  r of rows in the
2c860 20 74 61 62 6c 65 20 50 31 2e 20 20 4a 75 6d 70   table P1.  Jump
2c870 20 74 6f 20 50 32 20 69 66 20 74 68 61 74 0a 2a   to P2 if that.*
2c880 2a 20 65 73 74 69 6d 61 74 65 20 69 73 20 6c 65  * estimate is le
2c890 73 73 20 74 68 61 6e 20 61 70 70 72 6f 78 69 6d  ss than approxim
2c8a0 61 74 65 6c 79 20 32 2a 2a 28 30 2e 31 2a 50 33  ately 2**(0.1*P3
2c8b0 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  )..*/.case OP_If
2c8c0 53 6d 61 6c 6c 65 72 3a 20 7b 20 20 20 20 20 20  Smaller: {      
2c8d0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56    /* jump */.  V
2c8e0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
2c8f0 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
2c900 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69  ;.  int res;.  i
2c910 36 34 20 73 7a 3b 0a 0a 20 20 61 73 73 65 72 74  64 sz;..  assert
2c920 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
2c930 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
2c940 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
2c950 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
2c960 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
2c970 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
2c980 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61  >uc.pCursor;.  a
2c990 73 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a  ssert( pCrsr );.
2c9a0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
2c9b0 72 65 65 46 69 72 73 74 28 70 43 72 73 72 2c 20  reeFirst(pCrsr, 
2c9c0 26 72 65 73 29 3b 0a 20 20 69 66 28 20 72 63 20  &res);.  if( rc 
2c9d0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
2c9e0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28  _to_error;.  if(
2c9f0 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 73   res==0 ){.    s
2ca00 7a 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  z = sqlite3Btree
2ca10 52 6f 77 43 6f 75 6e 74 45 73 74 28 70 43 72 73  RowCountEst(pCrs
2ca20 72 29 3b 0a 20 20 20 20 69 66 28 20 41 4c 57 41  r);.    if( ALWA
2ca30 59 53 28 73 7a 3e 3d 30 29 20 26 26 20 73 71 6c  YS(sz>=0) && sql
2ca40 69 74 65 33 4c 6f 67 45 73 74 28 28 75 36 34 29  ite3LogEst((u64)
2ca50 73 7a 29 3c 70 4f 70 2d 3e 70 33 20 29 20 72 65  sz)<pOp->p3 ) re
2ca60 73 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 56 64 62  s = 1;.  }.  Vdb
2ca70 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
2ca80 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65  !=0,2);.  if( re
2ca90 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  s ) goto jump_to
2caa0 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  _p2;.  break;.}.
2cab0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72  ../* Opcode: Sor
2cac0 74 65 72 53 6f 72 74 20 50 31 20 50 32 20 2a 20  terSort P1 P2 * 
2cad0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 66 74 65 72 20  * *.**.** After 
2cae0 61 6c 6c 20 72 65 63 6f 72 64 73 20 68 61 76 65  all records have
2caf0 20 62 65 65 6e 20 69 6e 73 65 72 74 65 64 20 69   been inserted i
2cb00 6e 74 6f 20 74 68 65 20 53 6f 72 74 65 72 20 6f  nto the Sorter o
2cb10 62 6a 65 63 74 0a 2a 2a 20 69 64 65 6e 74 69 66  bject.** identif
2cb20 69 65 64 20 62 79 20 50 31 2c 20 69 6e 76 6f 6b  ied by P1, invok
2cb30 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20 74 6f  e this opcode to
2cb40 20 61 63 74 75 61 6c 6c 79 20 64 6f 20 74 68 65   actually do the
2cb50 20 73 6f 72 74 69 6e 67 2e 0a 2a 2a 20 4a 75 6d   sorting..** Jum
2cb60 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 72 65  p to P2 if there
2cb70 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
2cb80 74 6f 20 62 65 20 73 6f 72 74 65 64 2e 0a 2a 2a  to be sorted..**
2cb90 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
2cba0 69 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  is an alias for 
2cbb0 4f 50 5f 53 6f 72 74 20 61 6e 64 20 4f 50 5f 52  OP_Sort and OP_R
2cbc0 65 77 69 6e 64 20 74 68 61 74 20 69 73 20 75 73  ewind that is us
2cbd0 65 64 0a 2a 2a 20 66 6f 72 20 53 6f 72 74 65 72  ed.** for Sorter
2cbe0 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 2f 2a 20   objects..*/./* 
2cbf0 4f 70 63 6f 64 65 3a 20 53 6f 72 74 20 50 31 20  Opcode: Sort P1 
2cc00 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
2cc10 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20  his opcode does 
2cc20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65  exactly the same
2cc30 20 74 68 69 6e 67 20 61 73 20 4f 50 5f 52 65 77   thing as OP_Rew
2cc40 69 6e 64 20 65 78 63 65 70 74 20 74 68 61 74 0a  ind except that.
2cc50 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e 74 73  ** it increments
2cc60 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64   an undocumented
2cc70 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
2cc80 20 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e   used for testin
2cc90 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67  g..**.** Sorting
2cca0 20 69 73 20 61 63 63 6f 6d 70 6c 69 73 68 65 64   is accomplished
2ccb0 20 62 79 20 77 72 69 74 69 6e 67 20 72 65 63 6f   by writing reco
2ccc0 72 64 73 20 69 6e 74 6f 20 61 20 73 6f 72 74 69  rds into a sorti
2ccd0 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65  ng index,.** the
2cce0 6e 20 72 65 77 69 6e 64 69 6e 67 20 74 68 61 74  n rewinding that
2ccf0 20 69 6e 64 65 78 20 61 6e 64 20 70 6c 61 79 69   index and playi
2cd00 6e 67 20 69 74 20 62 61 63 6b 20 66 72 6f 6d 20  ng it back from 
2cd10 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20  beginning to.** 
2cd20 65 6e 64 2e 20 20 57 65 20 75 73 65 20 74 68 65  end.  We use the
2cd30 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20   OP_Sort opcode 
2cd40 69 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f 52 65  instead of OP_Re
2cd50 77 69 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a  wind to do the.*
2cd60 2a 20 72 65 77 69 6e 64 69 6e 67 20 73 6f 20 74  * rewinding so t
2cd70 68 61 74 20 74 68 65 20 67 6c 6f 62 61 6c 20 76  hat the global v
2cd80 61 72 69 61 62 6c 65 20 77 69 6c 6c 20 62 65 20  ariable will be 
2cd90 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a  incremented and.
2cda0 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65  ** regression te
2cdb0 73 74 73 20 63 61 6e 20 64 65 74 65 72 6d 69 6e  sts can determin
2cdc0 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  e whether or not
2cdd0 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 69   the optimizer i
2cde0 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f  s.** correctly o
2cdf0 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f  ptimizing out so
2ce00 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  rts..*/.case OP_
2ce10 53 6f 72 74 65 72 53 6f 72 74 3a 20 20 20 20 2f  SorterSort:    /
2ce20 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f  * jump */.case O
2ce30 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20 20 20  P_Sort: {       
2ce40 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64   /* jump */.#ifd
2ce50 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
2ce60 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f   sqlite3_sort_co
2ce70 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33  unt++;.  sqlite3
2ce80 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b  _search_count--;
2ce90 0a 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f  .#endif.  p->aCo
2cea0 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d  unter[SQLITE_STM
2ceb0 54 53 54 41 54 55 53 5f 53 4f 52 54 5d 2b 2b 3b  TSTATUS_SORT]++;
2cec0 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75  .  /* Fall throu
2ced0 67 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e  gh into OP_Rewin
2cee0 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65  d */.}./* Opcode
2cef0 3a 20 52 65 77 69 6e 64 20 50 31 20 50 32 20 2a  : Rewind P1 P2 *
2cf00 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e   * *.**.** The n
2cf10 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52  ext use of the R
2cf20 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f  owid or Column o
2cf30 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69  r Next instructi
2cf40 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69  on for P1 .** wi
2cf50 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20  ll refer to the 
2cf60 66 69 72 73 74 20 65 6e 74 72 79 20 69 6e 20 74  first entry in t
2cf70 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
2cf80 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49  e or index..** I
2cf90 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
2cfa0 6e 64 65 78 20 69 73 20 65 6d 70 74 79 2c 20 6a  ndex is empty, j
2cfb0 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
2cfc0 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 74 68 65  to P2..** If the
2cfd0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
2cfe0 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61  is not empty, fa
2cff0 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
2d000 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a 2a 2a 20  e following .** 
2d010 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
2d020 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
2d030 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
2d040 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d   configured to m
2d050 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f  ove in forward o
2d060 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68  rder,.** from th
2d070 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61  e beginning towa
2d080 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20  rd the end.  In 
2d090 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
2d0a0 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f   cursor is.** co
2d0b0 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20  nfigured to use 
2d0c0 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a  Next, not Prev..
2d0d0 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77 69 6e  */.case OP_Rewin
2d0e0 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  d: {        /* j
2d0f0 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ump */.  VdbeCur
2d100 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
2d110 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
2d120 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74  t res;..  assert
2d130 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
2d140 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
2d150 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
2d160 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20  pOp->p5==0 );.  
2d170 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
2d180 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2d190 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
2d1a0 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43  ert( isSorter(pC
2d1b0 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  )==(pOp->opcode=
2d1c0 3d 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74 29 20  =OP_SorterSort) 
2d1d0 29 3b 0a 20 20 72 65 73 20 3d 20 31 3b 0a 23 69  );.  res = 1;.#i
2d1e0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
2d1f0 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d  G.  pC->seekOp =
2d200 20 4f 50 5f 52 65 77 69 6e 64 3b 0a 23 65 6e 64   OP_Rewind;.#end
2d210 69 66 0a 20 20 69 66 28 20 69 73 53 6f 72 74 65  if.  if( isSorte
2d220 72 28 70 43 29 20 29 7b 0a 20 20 20 20 72 63 20  r(pC) ){.    rc 
2d230 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  = sqlite3VdbeSor
2d240 74 65 72 52 65 77 69 6e 64 28 70 43 2c 20 26 72  terRewind(pC, &r
2d250 65 73 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  es);.  }else{.  
2d260 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
2d270 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
2d280 42 54 52 45 45 20 29 3b 0a 20 20 20 20 70 43 72  BTREE );.    pCr
2d290 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72  sr = pC->uc.pCur
2d2a0 73 6f 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28  sor;.    assert(
2d2b0 20 70 43 72 73 72 20 29 3b 0a 20 20 20 20 72 63   pCrsr );.    rc
2d2c0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 46   = sqlite3BtreeF
2d2d0 69 72 73 74 28 70 43 72 73 72 2c 20 26 72 65 73  irst(pCrsr, &res
2d2e0 29 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72  );.    pC->defer
2d2f0 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
2d300 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
2d310 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
2d320 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29  ;.  }.  if( rc )
2d330 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
2d340 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 43 2d 3e  to_error;.  pC->
2d350 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65  nullRow = (u8)re
2d360 73 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  s;.  assert( pOp
2d370 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
2d380 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 56 64  2<p->nOp );.  Vd
2d390 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
2d3a0 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72  s!=0,2);.  if( r
2d3b0 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  es ) goto jump_t
2d3c0 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  o_p2;.  break;.}
2d3d0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78  ../* Opcode: Nex
2d3e0 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  t P1 P2 P3 P4 P5
2d3f0 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 63  .**.** Advance c
2d400 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
2d410 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
2d420 65 20 6e 65 78 74 20 6b 65 79 2f 64 61 74 61 20  e next key/data 
2d430 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74  pair in its.** t
2d440 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20  able or index.  
2d450 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
2d460 6d 6f 72 65 20 6b 65 79 2f 76 61 6c 75 65 20 70  more key/value p
2d470 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74  airs then fall t
2d480 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65  hrough.** to the
2d490 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72   following instr
2d4a0 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20  uction.  But if 
2d4b0 74 68 65 20 63 75 72 73 6f 72 20 61 64 76 61 6e  the cursor advan
2d4c0 63 65 20 77 61 73 20 73 75 63 63 65 73 73 66 75  ce was successfu
2d4d0 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64  l,.** jump immed
2d4e0 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a  iately to P2..**
2d4f0 0a 2a 2a 20 54 68 65 20 4e 65 78 74 20 6f 70 63  .** The Next opc
2d500 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69  ode is only vali
2d510 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20 53  d following an S
2d520 65 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20 6f  eekGT, SeekGE, o
2d530 72 0a 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 20 6f  r.** OP_Rewind o
2d540 70 63 6f 64 65 20 75 73 65 64 20 74 6f 20 70 6f  pcode used to po
2d550 73 69 74 69 6f 6e 20 74 68 65 20 63 75 72 73 6f  sition the curso
2d560 72 2e 20 20 4e 65 78 74 20 69 73 20 6e 6f 74 20  r.  Next is not 
2d570 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f  allowed.** to fo
2d580 6c 6c 6f 77 20 53 65 65 6b 4c 54 2c 20 53 65 65  llow SeekLT, See
2d590 6b 4c 45 2c 20 6f 72 20 4f 50 5f 4c 61 73 74 2e  kLE, or OP_Last.
2d5a0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75  .**.** The P1 cu
2d5b0 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72  rsor must be for
2d5c0 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e   a real table, n
2d5d0 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  ot a pseudo-tabl
2d5e0 65 2e 20 20 50 31 20 6d 75 73 74 20 68 61 76 65  e.  P1 must have
2d5f0 0a 2a 2a 20 62 65 65 6e 20 6f 70 65 6e 65 64 20  .** been opened 
2d600 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20 6f 70  prior to this op
2d610 63 6f 64 65 20 6f 72 20 74 68 65 20 70 72 6f 67  code or the prog
2d620 72 61 6d 20 77 69 6c 6c 20 73 65 67 66 61 75 6c  ram will segfaul
2d630 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33 20  t..**.** The P3 
2d640 76 61 6c 75 65 20 69 73 20 61 20 68 69 6e 74 20  value is a hint 
2d650 74 6f 20 74 68 65 20 62 74 72 65 65 20 69 6d 70  to the btree imp
2d660 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 49 66 20  lementation. If 
2d670 50 33 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a 20 6d  P3==1, that.** m
2d680 65 61 6e 73 20 50 31 20 69 73 20 61 6e 20 53 51  eans P1 is an SQ
2d690 4c 20 69 6e 64 65 78 20 61 6e 64 20 74 68 61 74  L index and that
2d6a0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
2d6b0 6e 20 63 6f 75 6c 64 20 68 61 76 65 20 62 65 65  n could have bee
2d6c0 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64 20 69 66 20  n.** omitted if 
2d6d0 74 68 61 74 20 69 6e 64 65 78 20 68 61 64 20 62  that index had b
2d6e0 65 65 6e 20 75 6e 69 71 75 65 2e 20 20 50 33 20  een unique.  P3 
2d6f0 69 73 20 75 73 75 61 6c 6c 79 20 30 2e 20 20 50  is usually 0.  P
2d700 33 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 65  3 is.** always e
2d710 69 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2a  ither 0 or 1..**
2d720 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77 61 79 73  .** P4 is always
2d730 20 6f 66 20 74 79 70 65 20 50 34 5f 41 44 56 41   of type P4_ADVA
2d740 4e 43 45 2e 20 54 68 65 20 66 75 6e 63 74 69 6f  NCE. The functio
2d750 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69 6e 74 73  n pointer points
2d760 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 42 74   to.** sqlite3Bt
2d770 72 65 65 4e 65 78 74 28 29 2e 0a 2a 2a 0a 2a 2a  reeNext()..**.**
2d780 20 49 66 20 50 35 20 69 73 20 70 6f 73 69 74 69   If P5 is positi
2d790 76 65 20 61 6e 64 20 74 68 65 20 6a 75 6d 70 20  ve and the jump 
2d7a0 69 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65  is taken, then e
2d7b0 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20  vent counter.** 
2d7c0 6e 75 6d 62 65 72 20 50 35 2d 31 20 69 6e 20 74  number P5-1 in t
2d7d0 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74  he prepared stat
2d7e0 65 6d 65 6e 74 20 69 73 20 69 6e 63 72 65 6d 65  ement is increme
2d7f0 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  nted..**.** See 
2d800 61 6c 73 6f 3a 20 50 72 65 76 0a 2a 2f 0a 2f 2a  also: Prev.*/./*
2d810 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 20 50 31   Opcode: Prev P1
2d820 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
2d830 2a 2a 20 42 61 63 6b 20 75 70 20 63 75 72 73 6f  ** Back up curso
2d840 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20  r P1 so that it 
2d850 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 70 72  points to the pr
2d860 65 76 69 6f 75 73 20 6b 65 79 2f 64 61 74 61 20  evious key/data 
2d870 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74  pair in its.** t
2d880 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20  able or index.  
2d890 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 70  If there is no p
2d8a0 72 65 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c 75  revious key/valu
2d8b0 65 20 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c  e pairs then fal
2d8c0 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20  l through.** to 
2d8d0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e  the following in
2d8e0 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20  struction.  But 
2d8f0 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 62 61  if the cursor ba
2d900 63 6b 75 70 20 77 61 73 20 73 75 63 63 65 73 73  ckup was success
2d910 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d  ful,.** jump imm
2d920 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a  ediately to P2..
2d930 2a 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 72 65  **.**.** The Pre
2d940 76 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79  v opcode is only
2d950 20 76 61 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67   valid following
2d960 20 61 6e 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b   an SeekLT, Seek
2d970 4c 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 4c 61 73  LE, or.** OP_Las
2d980 74 20 6f 70 63 6f 64 65 20 75 73 65 64 20 74 6f  t opcode used to
2d990 20 70 6f 73 69 74 69 6f 6e 20 74 68 65 20 63 75   position the cu
2d9a0 72 73 6f 72 2e 20 20 50 72 65 76 20 69 73 20 6e  rsor.  Prev is n
2d9b0 6f 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f  ot allowed.** to
2d9c0 20 66 6f 6c 6c 6f 77 20 53 65 65 6b 47 54 2c 20   follow SeekGT, 
2d9d0 53 65 65 6b 47 45 2c 20 6f 72 20 4f 50 5f 52 65  SeekGE, or OP_Re
2d9e0 77 69 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  wind..**.** The 
2d9f0 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62  P1 cursor must b
2da00 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62  e for a real tab
2da10 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f  le, not a pseudo
2da20 2d 74 61 62 6c 65 2e 20 20 49 66 20 50 31 20 69  -table.  If P1 i
2da30 73 0a 2a 2a 20 6e 6f 74 20 6f 70 65 6e 20 74 68  s.** not open th
2da40 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72 20  en the behavior 
2da50 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a  is undefined..**
2da60 0a 2a 2a 20 54 68 65 20 50 33 20 76 61 6c 75 65  .** The P3 value
2da70 20 69 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68   is a hint to th
2da80 65 20 62 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e  e btree implemen
2da90 74 61 74 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31  tation. If P3==1
2daa0 2c 20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20  , that.** means 
2dab0 50 31 20 69 73 20 61 6e 20 53 51 4c 20 69 6e 64  P1 is an SQL ind
2dac0 65 78 20 61 6e 64 20 74 68 61 74 20 74 68 69 73  ex and that this
2dad0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 75   instruction cou
2dae0 6c 64 20 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20  ld have been.** 
2daf0 6f 6d 69 74 74 65 64 20 69 66 20 74 68 61 74 20  omitted if that 
2db00 69 6e 64 65 78 20 68 61 64 20 62 65 65 6e 20 75  index had been u
2db10 6e 69 71 75 65 2e 20 20 50 33 20 69 73 20 75 73  nique.  P3 is us
2db20 75 61 6c 6c 79 20 30 2e 20 20 50 33 20 69 73 0a  ually 0.  P3 is.
2db30 2a 2a 20 61 6c 77 61 79 73 20 65 69 74 68 65 72  ** always either
2db40 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50   0 or 1..**.** P
2db50 34 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20 74  4 is always of t
2db60 79 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e 20  ype P4_ADVANCE. 
2db70 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69  The function poi
2db80 6e 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a  nter points to.*
2db90 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72  * sqlite3BtreePr
2dba0 65 76 69 6f 75 73 28 29 2e 0a 2a 2a 0a 2a 2a 20  evious()..**.** 
2dbb0 49 66 20 50 35 20 69 73 20 70 6f 73 69 74 69 76  If P5 is positiv
2dbc0 65 20 61 6e 64 20 74 68 65 20 6a 75 6d 70 20 69  e and the jump i
2dbd0 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76  s taken, then ev
2dbe0 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e  ent counter.** n
2dbf0 75 6d 62 65 72 20 50 35 2d 31 20 69 6e 20 74 68  umber P5-1 in th
2dc00 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
2dc10 6d 65 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e  ment is incremen
2dc20 74 65 64 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ted..*/./* Opcod
2dc30 65 3a 20 53 6f 72 74 65 72 4e 65 78 74 20 50 31  e: SorterNext P1
2dc40 20 50 32 20 2a 20 2a 20 50 35 0a 2a 2a 0a 2a 2a   P2 * * P5.**.**
2dc50 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72   This opcode wor
2dc60 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f 50 5f  ks just like OP_
2dc70 4e 65 78 74 20 65 78 63 65 70 74 20 74 68 61 74  Next except that
2dc80 20 50 31 20 6d 75 73 74 20 62 65 20 61 0a 2a 2a   P1 must be a.**
2dc90 20 73 6f 72 74 65 72 20 6f 62 6a 65 63 74 20 66   sorter object f
2dca0 6f 72 20 77 68 69 63 68 20 74 68 65 20 4f 50 5f  or which the OP_
2dcb0 53 6f 72 74 65 72 53 6f 72 74 20 6f 70 63 6f 64  SorterSort opcod
2dcc0 65 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 69 6e  e has been.** in
2dcd0 76 6f 6b 65 64 2e 20 20 54 68 69 73 20 6f 70 63  voked.  This opc
2dce0 6f 64 65 20 61 64 76 61 6e 63 65 73 20 74 68 65  ode advances the
2dcf0 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20 6e   cursor to the n
2dd00 65 78 74 20 73 6f 72 74 65 64 0a 2a 2a 20 72 65  ext sorted.** re
2dd10 63 6f 72 64 2c 20 6f 72 20 6a 75 6d 70 73 20 74  cord, or jumps t
2dd20 6f 20 50 32 20 69 66 20 74 68 65 72 65 20 61 72  o P2 if there ar
2dd30 65 20 6e 6f 20 6d 6f 72 65 20 73 6f 72 74 65 64  e no more sorted
2dd40 20 72 65 63 6f 72 64 73 2e 0a 2a 2f 0a 63 61 73   records..*/.cas
2dd50 65 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74 3a  e OP_SorterNext:
2dd60 20 7b 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20   {  /* jump */. 
2dd70 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
2dd80 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ..  pC = p->apCs
2dd90 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
2dda0 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
2ddb0 43 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  C) );.  rc = sql
2ddc0 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 4e 65  ite3VdbeSorterNe
2ddd0 78 74 28 64 62 2c 20 70 43 29 3b 0a 20 20 67 6f  xt(db, pC);.  go
2dde0 74 6f 20 6e 65 78 74 5f 74 61 69 6c 3b 0a 63 61  to next_tail;.ca
2ddf0 73 65 20 4f 50 5f 50 72 65 76 3a 20 20 20 20 20  se OP_Prev:     
2de00 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
2de10 63 61 73 65 20 4f 50 5f 4e 65 78 74 3a 20 20 20  case OP_Next:   
2de20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
2de30 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
2de40 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
2de50 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
2de60 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2de70 35 3c 41 72 72 61 79 53 69 7a 65 28 70 2d 3e 61  5<ArraySize(p->a
2de80 43 6f 75 6e 74 65 72 29 20 29 3b 0a 20 20 70 43  Counter) );.  pC
2de90 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
2dea0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2deb0 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
2dec0 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
2ded0 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73  oveto==0 );.  as
2dee0 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
2def0 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
2df00 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  E );.  assert( p
2df10 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e  Op->opcode!=OP_N
2df20 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78  ext || pOp->p4.x
2df30 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33  Advance==sqlite3
2df40 42 74 72 65 65 4e 65 78 74 20 29 3b 0a 20 20 61  BtreeNext );.  a
2df50 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
2df60 64 65 21 3d 4f 50 5f 50 72 65 76 20 7c 7c 20 70  de!=OP_Prev || p
2df70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d  Op->p4.xAdvance=
2df80 3d 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65  =sqlite3BtreePre
2df90 76 69 6f 75 73 20 29 3b 0a 0a 20 20 2f 2a 20 54  vious );..  /* T
2dfa0 68 65 20 4e 65 78 74 20 6f 70 63 6f 64 65 20 69  he Next opcode i
2dfb0 73 20 6f 6e 6c 79 20 75 73 65 64 20 61 66 74 65  s only used afte
2dfc0 72 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45  r SeekGT, SeekGE
2dfd0 2c 20 52 65 77 69 6e 64 2c 20 61 6e 64 20 46 6f  , Rewind, and Fo
2dfe0 75 6e 64 2e 0a 20 20 2a 2a 20 54 68 65 20 50 72  und..  ** The Pr
2dff0 65 76 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c  ev opcode is onl
2e000 79 20 75 73 65 64 20 61 66 74 65 72 20 53 65 65  y used after See
2e010 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 61 6e 64  kLT, SeekLE, and
2e020 20 4c 61 73 74 2e 20 2a 2f 0a 20 20 61 73 73 65   Last. */.  asse
2e030 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21  rt( pOp->opcode!
2e040 3d 4f 50 5f 4e 65 78 74 0a 20 20 20 20 20 20 20  =OP_Next.       
2e050 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f  || pC->seekOp==O
2e060 50 5f 53 65 65 6b 47 54 20 7c 7c 20 70 43 2d 3e  P_SeekGT || pC->
2e070 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47  seekOp==OP_SeekG
2e080 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e  E.       || pC->
2e090 73 65 65 6b 4f 70 3d 3d 4f 50 5f 52 65 77 69 6e  seekOp==OP_Rewin
2e0a0 64 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d  d || pC->seekOp=
2e0b0 3d 4f 50 5f 46 6f 75 6e 64 0a 20 20 20 20 20 20  =OP_Found.      
2e0c0 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d   || pC->seekOp==
2e0d0 4f 50 5f 4e 75 6c 6c 52 6f 77 7c 7c 20 70 43 2d  OP_NullRow|| pC-
2e0e0 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b  >seekOp==OP_Seek
2e0f0 52 6f 77 69 64 0a 20 20 20 20 20 20 20 7c 7c 20  Rowid.       || 
2e100 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 49  pC->seekOp==OP_I
2e110 66 4e 6f 48 6f 70 65 29 3b 0a 20 20 61 73 73 65  fNoHope);.  asse
2e120 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21  rt( pOp->opcode!
2e130 3d 4f 50 5f 50 72 65 76 0a 20 20 20 20 20 20 20  =OP_Prev.       
2e140 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f  || pC->seekOp==O
2e150 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 70 43 2d 3e  P_SeekLT || pC->
2e160 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c  seekOp==OP_SeekL
2e170 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e  E.       || pC->
2e180 73 65 65 6b 4f 70 3d 3d 4f 50 5f 4c 61 73 74 20  seekOp==OP_Last 
2e190 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d    || pC->seekOp=
2e1a0 3d 4f 50 5f 49 66 4e 6f 48 6f 70 65 0a 20 20 20  =OP_IfNoHope.   
2e1b0 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f      || pC->seekO
2e1c0 70 3d 3d 4f 50 5f 4e 75 6c 6c 52 6f 77 29 3b 0a  p==OP_NullRow);.
2e1d0 0a 20 20 72 63 20 3d 20 70 4f 70 2d 3e 70 34 2e  .  rc = pOp->p4.
2e1e0 78 41 64 76 61 6e 63 65 28 70 43 2d 3e 75 63 2e  xAdvance(pC->uc.
2e1f0 70 43 75 72 73 6f 72 2c 20 70 4f 70 2d 3e 70 33  pCursor, pOp->p3
2e200 29 3b 0a 6e 65 78 74 5f 74 61 69 6c 3a 0a 20 20  );.next_tail:.  
2e210 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
2e220 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
2e230 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
2e240 28 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 2c 32  (rc==SQLITE_OK,2
2e250 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
2e260 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 70 43  ITE_OK ){.    pC
2e270 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20  ->nullRow = 0;. 
2e280 20 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 70     p->aCounter[p
2e290 4f 70 2d 3e 70 35 5d 2b 2b 3b 0a 23 69 66 64 65  Op->p5]++;.#ifde
2e2a0 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
2e2b0 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68    sqlite3_search
2e2c0 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66  _count++;.#endif
2e2d0 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  .    goto jump_t
2e2e0 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66  o_p2_and_check_f
2e2f0 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20 20  or_interrupt;.  
2e300 7d 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  }.  if( rc!=SQLI
2e310 54 45 5f 44 4f 4e 45 20 29 20 67 6f 74 6f 20 61  TE_DONE ) goto a
2e320 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
2e330 72 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45  r;.  rc = SQLITE
2e340 5f 4f 4b 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  _OK;.  pC->nullR
2e350 6f 77 20 3d 20 31 3b 0a 20 20 67 6f 74 6f 20 63  ow = 1;.  goto c
2e360 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
2e370 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  pt;.}../* Opcode
2e380 3a 20 49 64 78 49 6e 73 65 72 74 20 50 31 20 50  : IdxInsert P1 P
2e390 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
2e3a0 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32  nopsis: key=r[P2
2e3b0 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  ].**.** Register
2e3c0 20 50 32 20 68 6f 6c 64 73 20 61 6e 20 53 51 4c   P2 holds an SQL
2e3d0 20 69 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20   index key made 
2e3e0 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b  using the.** Mak
2e3f0 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74  eRecord instruct
2e400 69 6f 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f  ions.  This opco
2e410 64 65 20 77 72 69 74 65 73 20 74 68 61 74 20 6b  de writes that k
2e420 65 79 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69  ey.** into the i
2e430 6e 64 65 78 20 50 31 2e 20 20 44 61 74 61 20 66  ndex P1.  Data f
2e440 6f 72 20 74 68 65 20 65 6e 74 72 79 20 69 73 20  or the entry is 
2e450 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  nil..**.** If P4
2e460 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
2e470 65 6e 20 69 74 20 69 73 20 74 68 65 20 6e 75 6d  en it is the num
2e480 62 65 72 20 6f 66 20 76 61 6c 75 65 73 20 69 6e  ber of values in
2e490 20 74 68 65 20 75 6e 70 61 63 6b 65 64 0a 2a 2a   the unpacked.**
2e4a0 20 6b 65 79 20 6f 66 20 72 65 67 28 50 32 29 2e   key of reg(P2).
2e4b0 20 20 49 6e 20 74 68 61 74 20 63 61 73 65 2c 20    In that case, 
2e4c0 50 33 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  P3 is the index 
2e4d0 6f 66 20 74 68 65 20 66 69 72 73 74 20 72 65 67  of the first reg
2e4e0 69 73 74 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65  ister.** for the
2e4f0 20 75 6e 70 61 63 6b 65 64 20 6b 65 79 2e 20 20   unpacked key.  
2e500 54 68 65 20 61 76 61 69 6c 61 62 69 6c 69 74 79  The availability
2e510 20 6f 66 20 74 68 65 20 75 6e 70 61 63 6b 65 64   of the unpacked
2e520 20 6b 65 79 20 63 61 6e 20 73 6f 6d 65 74 69 6d   key can sometim
2e530 65 73 0a 2a 2a 20 62 65 20 61 6e 20 6f 70 74 69  es.** be an opti
2e540 6d 69 7a 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  mization..**.** 
2e550 49 66 20 50 35 20 68 61 73 20 74 68 65 20 4f 50  If P5 has the OP
2e560 46 4c 41 47 5f 41 50 50 45 4e 44 20 62 69 74 20  FLAG_APPEND bit 
2e570 73 65 74 2c 20 74 68 61 74 20 69 73 20 61 20 68  set, that is a h
2e580 69 6e 74 20 74 6f 20 74 68 65 20 62 2d 74 72 65  int to the b-tre
2e590 65 20 6c 61 79 65 72 0a 2a 2a 20 74 68 61 74 20  e layer.** that 
2e5a0 74 68 69 73 20 69 6e 73 65 72 74 20 69 73 20 6c  this insert is l
2e5b0 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61  ikely to be an a
2e5c0 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ppend..**.** If 
2e5d0 50 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41  P5 has the OPFLA
2e5e0 47 5f 4e 43 48 41 4e 47 45 20 62 69 74 20 73 65  G_NCHANGE bit se
2e5f0 74 2c 20 74 68 65 6e 20 74 68 65 20 63 68 61 6e  t, then the chan
2e600 67 65 20 63 6f 75 6e 74 65 72 20 69 73 0a 2a 2a  ge counter is.**
2e610 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20   incremented by 
2e620 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
2e630 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  .  If the OPFLAG
2e640 5f 4e 43 48 41 4e 47 45 20 62 69 74 20 69 73 20  _NCHANGE bit is 
2e650 63 6c 65 61 72 2c 0a 2a 2a 20 74 68 65 6e 20 74  clear,.** then t
2e660 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  he change counte
2e670 72 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a  r is unchanged..
2e680 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
2e690 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
2e6a0 54 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20  T flag of P5 is 
2e6b0 73 65 74 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65  set, the impleme
2e6c0 6e 74 61 74 69 6f 6e 20 6d 69 67 68 74 0a 2a 2a  ntation might.**
2e6d0 20 72 75 6e 20 66 61 73 74 65 72 20 62 79 20 61   run faster by a
2e6e0 76 6f 69 64 69 6e 67 20 61 6e 20 75 6e 6e 65 63  voiding an unnec
2e6f0 65 73 73 61 72 79 20 73 65 65 6b 20 6f 6e 20 63  essary seek on c
2e700 75 72 73 6f 72 20 50 31 2e 20 20 48 6f 77 65 76  ursor P1.  Howev
2e710 65 72 2c 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41  er,.** the OPFLA
2e720 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20  G_USESEEKRESULT 
2e730 66 6c 61 67 20 6d 75 73 74 20 6f 6e 6c 79 20 62  flag must only b
2e740 65 20 73 65 74 20 69 66 20 74 68 65 72 65 20 68  e set if there h
2e750 61 76 65 20 62 65 65 6e 20 6e 6f 20 70 72 69 6f  ave been no prio
2e760 72 0a 2a 2a 20 73 65 65 6b 73 20 6f 6e 20 74 68  r.** seeks on th
2e770 65 20 63 75 72 73 6f 72 20 6f 72 20 69 66 20 74  e cursor or if t
2e780 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 73  he most recent s
2e790 65 65 6b 20 75 73 65 64 20 61 20 6b 65 79 20 65  eek used a key e
2e7a0 71 75 69 76 61 6c 65 6e 74 0a 2a 2a 20 74 6f 20  quivalent.** to 
2e7b0 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  P2. .**.** This 
2e7c0 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79  instruction only
2e7d0 20 77 6f 72 6b 73 20 66 6f 72 20 69 6e 64 69 63   works for indic
2e7e0 65 73 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c  es.  The equival
2e7f0 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a  ent instruction.
2e800 2a 2a 20 66 6f 72 20 74 61 62 6c 65 73 20 69 73  ** for tables is
2e810 20 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f   OP_Insert..*/./
2e820 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72  * Opcode: Sorter
2e830 49 6e 73 65 72 74 20 50 31 20 50 32 20 2a 20 2a  Insert P1 P2 * *
2e840 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2e850 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  key=r[P2].**.** 
2e860 52 65 67 69 73 74 65 72 20 50 32 20 68 6f 6c 64  Register P2 hold
2e870 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 6b  s an SQL index k
2e880 65 79 20 6d 61 64 65 20 75 73 69 6e 67 20 74 68  ey made using th
2e890 65 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20  e.** MakeRecord 
2e8a0 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e 20 20 54  instructions.  T
2e8b0 68 69 73 20 6f 70 63 6f 64 65 20 77 72 69 74 65  his opcode write
2e8c0 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e  s that key.** in
2e8d0 74 6f 20 74 68 65 20 73 6f 72 74 65 72 20 50 31  to the sorter P1
2e8e0 2e 20 20 44 61 74 61 20 66 6f 72 20 74 68 65 20  .  Data for the 
2e8f0 65 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2f  entry is nil..*/
2e900 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 49  .case OP_SorterI
2e910 6e 73 65 72 74 3a 20 20 20 20 20 20 20 2f 2a 20  nsert:       /* 
2e920 69 6e 32 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  in2 */.case OP_I
2e930 64 78 49 6e 73 65 72 74 3a 20 7b 20 20 20 20 20  dxInsert: {     
2e940 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56     /* in2 */.  V
2e950 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
2e960 20 42 74 72 65 65 50 61 79 6c 6f 61 64 20 78 3b   BtreePayload x;
2e970 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
2e980 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
2e990 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
2e9a0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
2e9b0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 73 71 6c 69  pOp->p1];.  sqli
2e9c0 74 65 33 56 64 62 65 49 6e 63 72 57 72 69 74 65  te3VdbeIncrWrite
2e9d0 43 6f 75 6e 74 65 72 28 70 2c 20 70 43 29 3b 0a  Counter(p, pC);.
2e9e0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
2e9f0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  );.  assert( isS
2ea00 6f 72 74 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d  orter(pC)==(pOp-
2ea10 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74  >opcode==OP_Sort
2ea20 65 72 49 6e 73 65 72 74 29 20 29 3b 0a 20 20 70  erInsert) );.  p
2ea30 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
2ea40 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p2];.  assert( 
2ea50 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn2->flags & ME
2ea60 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 69 66 28 20  M_Blob );.  if( 
2ea70 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
2ea80 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43  _NCHANGE ) p->nC
2ea90 68 61 6e 67 65 2b 2b 3b 0a 20 20 61 73 73 65 72  hange++;.  asser
2eaa0 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
2eab0 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 7c  =CURTYPE_BTREE |
2eac0 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
2ead0 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 20 29  P_SorterInsert )
2eae0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
2eaf0 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20  isTable==0 );.  
2eb00 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28  rc = ExpandBlob(
2eb10 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 72 63 20  pIn2);.  if( rc 
2eb20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
2eb30 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28  _to_error;.  if(
2eb40 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
2eb50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 20 29 7b  _SorterInsert ){
2eb60 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
2eb70 33 56 64 62 65 53 6f 72 74 65 72 57 72 69 74 65  3VdbeSorterWrite
2eb80 28 70 43 2c 20 70 49 6e 32 29 3b 0a 20 20 7d 65  (pC, pIn2);.  }e
2eb90 6c 73 65 7b 0a 20 20 20 20 78 2e 6e 4b 65 79 20  lse{.    x.nKey 
2eba0 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 20 20 78  = pIn2->n;.    x
2ebb0 2e 70 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 7a 3b  .pKey = pIn2->z;
2ebc0 0a 20 20 20 20 78 2e 61 4d 65 6d 20 3d 20 61 4d  .    x.aMem = aM
2ebd0 65 6d 20 2b 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  em + pOp->p3;.  
2ebe0 20 20 78 2e 6e 4d 65 6d 20 3d 20 28 75 31 36 29    x.nMem = (u16)
2ebf0 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 72  pOp->p4.i;.    r
2ec00 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
2ec10 49 6e 73 65 72 74 28 70 43 2d 3e 75 63 2e 70 43  Insert(pC->uc.pC
2ec20 75 72 73 6f 72 2c 20 26 78 2c 0a 20 20 20 20 20  ursor, &x,.     
2ec30 20 20 20 20 28 70 4f 70 2d 3e 70 35 20 26 20 28      (pOp->p5 & (
2ec40 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 7c 4f 50  OPFLAG_APPEND|OP
2ec50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f  FLAG_SAVEPOSITIO
2ec60 4e 29 29 2c 20 0a 20 20 20 20 20 20 20 20 28 28  N)), .        ((
2ec70 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
2ec80 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20  _USESEEKRESULT) 
2ec90 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74  ? pC->seekResult
2eca0 20 3a 20 30 29 0a 20 20 20 20 20 20 20 20 29 3b   : 0).        );
2ecb0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
2ecc0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
2ecd0 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e 63 61  =0 );.    pC->ca
2ece0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
2ecf0 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 69  E_STALE;.  }.  i
2ed00 66 28 20 72 63 29 20 67 6f 74 6f 20 61 62 6f 72  f( rc) goto abor
2ed10 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2ed20 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2ed30 70 63 6f 64 65 3a 20 49 64 78 44 65 6c 65 74 65  pcode: IdxDelete
2ed40 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
2ed50 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
2ed60 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 54 68  [P2@P3].**.** Th
2ed70 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50 33 20  e content of P3 
2ed80 72 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69  registers starti
2ed90 6e 67 20 61 74 20 72 65 67 69 73 74 65 72 20 50  ng at register P
2eda0 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70  2 form.** an unp
2edb0 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
2edc0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 6d   This opcode rem
2edd0 6f 76 65 73 20 74 68 61 74 20 65 6e 74 72 79 20  oves that entry 
2ede0 66 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69 6e 64  from the .** ind
2edf0 65 78 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72  ex opened by cur
2ee00 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20  sor P1..*/.case 
2ee10 4f 50 5f 49 64 78 44 65 6c 65 74 65 3a 20 7b 0a  OP_IdxDelete: {.
2ee20 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
2ee30 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
2ee40 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
2ee50 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
2ee60 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70   r;..  assert( p
2ee70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 61 73  Op->p3>0 );.  as
2ee80 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
2ee90 26 26 20 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e  && pOp->p2+pOp->
2eea0 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p3<=(p->nMem+1 -
2eeb0 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29   p->nCursor)+1 )
2eec0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2eed0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
2eee0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
2eef0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
2ef00 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2ef10 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
2ef20 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
2ef30 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
2ef40 45 45 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  EE );.  sqlite3V
2ef50 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e  dbeIncrWriteCoun
2ef60 74 65 72 28 70 2c 20 70 43 29 3b 0a 20 20 70 43  ter(p, pC);.  pC
2ef70 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75  rsr = pC->uc.pCu
2ef80 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20  rsor;.  assert( 
2ef90 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 61 73  pCrsr!=0 );.  as
2efa0 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30  sert( pOp->p5==0
2efb0 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f   );.  r.pKeyInfo
2efc0 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b   = pC->pKeyInfo;
2efd0 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75  .  r.nField = (u
2efe0 31 36 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 72 2e  16)pOp->p3;.  r.
2eff0 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a  default_rc = 0;.
2f000 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d    r.aMem = &aMem
2f010 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 72 63 20  [pOp->p2];.  rc 
2f020 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
2f030 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72  vetoUnpacked(pCr
2f040 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72  sr, &r, 0, 0, &r
2f050 65 73 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  es);.  if( rc ) 
2f060 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2f070 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 72  o_error;.  if( r
2f080 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20  es==0 ){.    rc 
2f090 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 65  = sqlite3BtreeDe
2f0a0 6c 65 74 65 28 70 43 72 73 72 2c 20 42 54 52 45  lete(pCrsr, BTRE
2f0b0 45 5f 41 55 58 44 45 4c 45 54 45 29 3b 0a 20 20  E_AUXDELETE);.  
2f0c0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
2f0d0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2f0e0 6f 72 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  or;.  }.  assert
2f0f0 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
2f100 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 70 43 2d  veto==0 );.  pC-
2f110 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
2f120 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43  ACHE_STALE;.  pC
2f130 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 30  ->seekResult = 0
2f140 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
2f150 20 4f 70 63 6f 64 65 3a 20 44 65 66 65 72 72 65   Opcode: Deferre
2f160 64 53 65 65 6b 20 50 31 20 2a 20 50 33 20 50 34  dSeek P1 * P3 P4
2f170 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2f180 4d 6f 76 65 20 50 33 20 74 6f 20 50 31 2e 72 6f  Move P3 to P1.ro
2f190 77 69 64 20 69 66 20 6e 65 65 64 65 64 0a 2a 2a  wid if needed.**
2f1a0 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20 6f 70 65  .** P1 is an ope
2f1b0 6e 20 69 6e 64 65 78 20 63 75 72 73 6f 72 20 61  n index cursor a
2f1c0 6e 64 20 50 33 20 69 73 20 61 20 63 75 72 73 6f  nd P3 is a curso
2f1d0 72 20 6f 6e 20 74 68 65 20 63 6f 72 72 65 73 70  r on the corresp
2f1e0 6f 6e 64 69 6e 67 0a 2a 2a 20 74 61 62 6c 65 2e  onding.** table.
2f1f0 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f    This opcode do
2f200 65 73 20 61 20 64 65 66 65 72 72 65 64 20 73 65  es a deferred se
2f210 65 6b 20 6f 66 20 74 68 65 20 50 33 20 74 61 62  ek of the P3 tab
2f220 6c 65 20 63 75 72 73 6f 72 0a 2a 2a 20 74 6f 20  le cursor.** to 
2f230 74 68 65 20 72 6f 77 20 74 68 61 74 20 63 6f 72  the row that cor
2f240 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20  responds to the 
2f250 63 75 72 72 65 6e 74 20 72 6f 77 20 6f 66 20 50  current row of P
2f260 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73  1..**.** This is
2f270 20 61 20 64 65 66 65 72 72 65 64 20 73 65 65 6b   a deferred seek
2f280 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63 74 75 61  .  Nothing actua
2f290 6c 6c 79 20 68 61 70 70 65 6e 73 20 75 6e 74 69  lly happens unti
2f2a0 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 20  l.** the cursor 
2f2b0 69 73 20 75 73 65 64 20 74 6f 20 72 65 61 64 20  is used to read 
2f2c0 61 20 72 65 63 6f 72 64 2e 20 20 54 68 61 74 20  a record.  That 
2f2d0 77 61 79 2c 20 69 66 20 6e 6f 20 72 65 61 64 73  way, if no reads
2f2e0 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75 6e  .** occur, no un
2f2f0 6e 65 63 65 73 73 61 72 79 20 49 2f 4f 20 68 61  necessary I/O ha
2f300 70 70 65 6e 73 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  ppens..**.** P4 
2f310 6d 61 79 20 62 65 20 61 6e 20 61 72 72 61 79 20  may be an array 
2f320 6f 66 20 69 6e 74 65 67 65 72 73 20 28 74 79 70  of integers (typ
2f330 65 20 50 34 5f 49 4e 54 41 52 52 41 59 29 20 63  e P4_INTARRAY) c
2f340 6f 6e 74 61 69 6e 69 6e 67 0a 2a 2a 20 6f 6e 65  ontaining.** one
2f350 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20   entry for each 
2f360 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 50 33  column in the P3
2f370 20 74 61 62 6c 65 2e 20 20 49 66 20 61 72 72 61   table.  If arra
2f380 79 20 65 6e 74 72 79 20 61 28 69 29 0a 2a 2a 20  y entry a(i).** 
2f390 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
2f3a0 6e 20 72 65 61 64 69 6e 67 20 63 6f 6c 75 6d 6e  n reading column
2f3b0 20 61 28 69 29 2d 31 20 66 72 6f 6d 20 63 75 72   a(i)-1 from cur
2f3c0 73 6f 72 20 50 33 20 69 73 20 0a 2a 2a 20 65 71  sor P3 is .** eq
2f3d0 75 69 76 61 6c 65 6e 74 20 74 6f 20 70 65 72 66  uivalent to perf
2f3e0 6f 72 6d 69 6e 67 20 74 68 65 20 64 65 66 65 72  orming the defer
2f3f0 72 65 64 20 73 65 65 6b 20 61 6e 64 20 74 68 65  red seek and the
2f400 6e 20 72 65 61 64 69 6e 67 20 63 6f 6c 75 6d 6e  n reading column
2f410 20 69 20 0a 2a 2a 20 66 72 6f 6d 20 50 31 2e 20   i .** from P1. 
2f420 20 54 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f   This informatio
2f430 6e 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 50  n is stored in P
2f440 33 20 61 6e 64 20 75 73 65 64 20 74 6f 20 72 65  3 and used to re
2f450 64 69 72 65 63 74 0a 2a 2a 20 72 65 61 64 73 20  direct.** reads 
2f460 61 67 61 69 6e 73 74 20 50 33 20 6f 76 65 72 20  against P3 over 
2f470 74 6f 20 50 31 2c 20 74 68 75 73 20 70 6f 73 73  to P1, thus poss
2f480 69 62 6c 79 20 61 76 6f 69 64 69 6e 67 20 74 68  ibly avoiding th
2f490 65 20 6e 65 65 64 20 74 6f 0a 2a 2a 20 73 65 65  e need to.** see
2f4a0 6b 20 61 6e 64 20 72 65 61 64 20 63 75 72 73 6f  k and read curso
2f4b0 72 20 50 33 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  r P3..*/./* Opco
2f4c0 64 65 3a 20 49 64 78 52 6f 77 69 64 20 50 31 20  de: IdxRowid P1 
2f4d0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
2f4e0 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69  psis: r[P2]=rowi
2f4f0 64 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e  d.**.** Write in
2f500 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 61  to register P2 a
2f510 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20  n integer which 
2f520 69 73 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72  is the last entr
2f530 79 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20  y in the record 
2f540 61 74 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66  at.** the end of
2f550 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 20 70   the index key p
2f560 6f 69 6e 74 65 64 20 74 6f 20 62 79 20 63 75 72  ointed to by cur
2f570 73 6f 72 20 50 31 2e 20 20 54 68 69 73 20 69 6e  sor P1.  This in
2f580 74 65 67 65 72 20 73 68 6f 75 6c 64 20 62 65 0a  teger should be.
2f590 2a 2a 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  ** the rowid of 
2f5a0 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20  the table entry 
2f5b0 74 6f 20 77 68 69 63 68 20 74 68 69 73 20 69 6e  to which this in
2f5c0 64 65 78 20 65 6e 74 72 79 20 70 6f 69 6e 74 73  dex entry points
2f5d0 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
2f5e0 3a 20 52 6f 77 69 64 2c 20 4d 61 6b 65 52 65 63  : Rowid, MakeRec
2f5f0 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ord..*/.case OP_
2f600 44 65 66 65 72 72 65 64 53 65 65 6b 3a 0a 63 61  DeferredSeek:.ca
2f610 73 65 20 4f 50 5f 49 64 78 52 6f 77 69 64 3a 20  se OP_IdxRowid: 
2f620 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
2f630 75 74 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ut2 */.  VdbeCur
2f640 73 6f 72 20 2a 70 43 3b 20 20 20 20 20 20 20 20  sor *pC;        
2f650 20 20 20 20 20 2f 2a 20 54 68 65 20 50 31 20 69       /* The P1 i
2f660 6e 64 65 78 20 63 75 72 73 6f 72 20 2a 2f 0a 20  ndex cursor */. 
2f670 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 54 61   VdbeCursor *pTa
2f680 62 43 75 72 3b 20 20 20 20 20 20 20 20 2f 2a 20  bCur;        /* 
2f690 54 68 65 20 50 32 20 74 61 62 6c 65 20 63 75 72  The P2 table cur
2f6a0 73 6f 72 20 28 4f 50 5f 44 65 66 65 72 72 65 64  sor (OP_Deferred
2f6b0 53 65 65 6b 20 6f 6e 6c 79 29 20 2a 2f 0a 20 20  Seek only) */.  
2f6c0 69 36 34 20 72 6f 77 69 64 3b 20 20 20 20 20 20  i64 rowid;      
2f6d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
2f6e0 6f 77 69 64 20 74 68 61 74 20 50 31 20 63 75 72  owid that P1 cur
2f6f0 72 65 6e 74 20 70 6f 69 6e 74 73 20 74 6f 20 2a  rent points to *
2f700 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  /..  assert( pOp
2f710 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
2f720 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
2f730 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
2f740 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2f750 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
2f760 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
2f770 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
2f780 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28  REE );.  assert(
2f790 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21   pC->uc.pCursor!
2f7a0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
2f7b0 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29  pC->isTable==0 )
2f7c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
2f7d0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
2f7e0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 21  0 );.  assert( !
2f7f0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 7c 7c 20 70  pC->nullRow || p
2f800 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
2f810 64 78 52 6f 77 69 64 20 29 3b 0a 0a 20 20 2f 2a  dxRowid );..  /*
2f820 20 54 68 65 20 49 64 78 52 6f 77 69 64 20 61 6e   The IdxRowid an
2f830 64 20 53 65 65 6b 20 6f 70 63 6f 64 65 73 20 61  d Seek opcodes a
2f840 72 65 20 63 6f 6d 62 69 6e 65 64 20 62 65 63 61  re combined beca
2f850 75 73 65 20 6f 66 20 74 68 65 20 63 6f 6d 6d 6f  use of the commo
2f860 6e 61 6c 69 74 79 0a 20 20 2a 2a 20 6f 66 20 73  nality.  ** of s
2f870 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
2f880 52 65 73 74 6f 72 65 28 29 20 61 6e 64 20 73 71  Restore() and sq
2f890 6c 69 74 65 33 56 64 62 65 49 64 78 52 6f 77 69  lite3VdbeIdxRowi
2f8a0 64 28 29 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73  d(). */.  rc = s
2f8b0 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
2f8c0 52 65 73 74 6f 72 65 28 70 43 29 3b 0a 0a 20 20  Restore(pC);..  
2f8d0 2f 2a 20 73 71 6c 69 74 65 33 56 62 65 43 75 72  /* sqlite3VbeCur
2f8e0 73 6f 72 52 65 73 74 6f 72 65 28 29 20 63 61 6e  sorRestore() can
2f8f0 20 6f 6e 6c 79 20 66 61 69 6c 20 69 66 20 74 68   only fail if th
2f900 65 20 72 65 63 6f 72 64 20 68 61 73 20 62 65 65  e record has bee
2f910 6e 20 64 65 6c 65 74 65 64 0a 20 20 2a 2a 20 6f  n deleted.  ** o
2f920 75 74 20 66 72 6f 6d 20 75 6e 64 65 72 20 74 68  ut from under th
2f930 65 20 63 75 72 73 6f 72 2e 20 20 54 68 61 74 20  e cursor.  That 
2f940 77 69 6c 6c 20 6e 65 76 65 72 20 68 61 70 70 65  will never happe
2f950 6e 73 20 66 6f 72 20 61 6e 20 49 64 78 52 6f 77  ns for an IdxRow
2f960 69 64 0a 20 20 2a 2a 20 6f 72 20 53 65 65 6b 20  id.  ** or Seek 
2f970 6f 70 63 6f 64 65 20 2a 2f 0a 20 20 69 66 28 20  opcode */.  if( 
2f980 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45  NEVER(rc!=SQLITE
2f990 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  _OK) ) goto abor
2f9a0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2f9b0 0a 20 20 69 66 28 20 21 70 43 2d 3e 6e 75 6c 6c  .  if( !pC->null
2f9c0 52 6f 77 20 29 7b 0a 20 20 20 20 72 6f 77 69 64  Row ){.    rowid
2f9d0 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65   = 0;  /* Not ne
2f9e0 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64  eded.  Only used
2f9f0 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61   to silence a wa
2fa00 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63  rning. */.    rc
2fa10 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64   = sqlite3VdbeId
2fa20 78 52 6f 77 69 64 28 64 62 2c 20 70 43 2d 3e 75  xRowid(db, pC->u
2fa30 63 2e 70 43 75 72 73 6f 72 2c 20 26 72 6f 77 69  c.pCursor, &rowi
2fa40 64 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d  d);.    if( rc!=
2fa50 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
2fa60 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
2fa70 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
2fa80 7d 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f  }.    if( pOp->o
2fa90 70 63 6f 64 65 3d 3d 4f 50 5f 44 65 66 65 72 72  pcode==OP_Deferr
2faa0 65 64 53 65 65 6b 20 29 7b 0a 20 20 20 20 20 20  edSeek ){.      
2fab0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
2fac0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 70 2d  =0 && pOp->p3<p-
2fad0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 20 20  >nCursor );.    
2fae0 20 20 70 54 61 62 43 75 72 20 3d 20 70 2d 3e 61    pTabCur = p->a
2faf0 70 43 73 72 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  pCsr[pOp->p3];. 
2fb00 20 20 20 20 20 61 73 73 65 72 74 28 20 70 54 61       assert( pTa
2fb10 62 43 75 72 21 3d 30 20 29 3b 0a 20 20 20 20 20  bCur!=0 );.     
2fb20 20 61 73 73 65 72 74 28 20 70 54 61 62 43 75 72   assert( pTabCur
2fb30 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
2fb40 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 20  YPE_BTREE );.   
2fb50 20 20 20 61 73 73 65 72 74 28 20 70 54 61 62 43     assert( pTabC
2fb60 75 72 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d  ur->uc.pCursor!=
2fb70 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  0 );.      asser
2fb80 74 28 20 70 54 61 62 43 75 72 2d 3e 69 73 54 61  t( pTabCur->isTa
2fb90 62 6c 65 20 29 3b 0a 20 20 20 20 20 20 70 54 61  ble );.      pTa
2fba0 62 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20  bCur->nullRow = 
2fbb0 30 3b 0a 20 20 20 20 20 20 70 54 61 62 43 75 72  0;.      pTabCur
2fbc0 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d  ->movetoTarget =
2fbd0 20 72 6f 77 69 64 3b 0a 20 20 20 20 20 20 70 54   rowid;.      pT
2fbe0 61 62 43 75 72 2d 3e 64 65 66 65 72 72 65 64 4d  abCur->deferredM
2fbf0 6f 76 65 74 6f 20 3d 20 31 3b 0a 20 20 20 20 20  oveto = 1;.     
2fc00 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
2fc10 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41  type==P4_INTARRA
2fc20 59 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 61 69 3d  Y || pOp->p4.ai=
2fc30 3d 30 20 29 3b 0a 20 20 20 20 20 20 70 54 61 62  =0 );.      pTab
2fc40 43 75 72 2d 3e 61 41 6c 74 4d 61 70 20 3d 20 70  Cur->aAltMap = p
2fc50 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 20 20 20  Op->p4.ai;.     
2fc60 20 70 54 61 62 43 75 72 2d 3e 70 41 6c 74 43 75   pTabCur->pAltCu
2fc70 72 73 6f 72 20 3d 20 70 43 3b 0a 20 20 20 20 7d  rsor = pC;.    }
2fc80 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 4f 75 74  else{.      pOut
2fc90 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
2fca0 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 20 20 20  e(p, pOp);.     
2fcb0 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f 77   pOut->u.i = row
2fcc0 69 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  id;.    }.  }els
2fcd0 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
2fce0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
2fcf0 64 78 52 6f 77 69 64 20 29 3b 0a 20 20 20 20 73  dxRowid );.    s
2fd00 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
2fd10 4e 75 6c 6c 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  Null(&aMem[pOp->
2fd20 70 32 5d 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  p2]);.  }.  brea
2fd30 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2fd40 20 49 64 78 47 45 20 50 31 20 50 32 20 50 33 20   IdxGE P1 P2 P3 
2fd50 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
2fd60 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
2fd70 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67  **.** The P4 reg
2fd80 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67  ister values beg
2fd90 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66  inning with P3 f
2fda0 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20  orm an unpacked 
2fdb0 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68  index .** key th
2fdc0 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49  at omits the PRI
2fdd0 4d 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61  MARY KEY.  Compa
2fde0 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75  re this key valu
2fdf0 65 20 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e  e against the in
2fe00 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20  dex .** that P1 
2fe10 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
2fe20 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69  nting to, ignori
2fe30 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  ng the PRIMARY K
2fe40 45 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20  EY or ROWID .** 
2fe50 66 69 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e  fields at the en
2fe60 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  d..**.** If the 
2fe70 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69  P1 index entry i
2fe80 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  s greater than o
2fe90 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
2fea0 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e  ey value.** then
2feb0 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74   jump to P2.  Ot
2fec0 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72  herwise fall thr
2fed0 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
2fee0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
2fef0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 47  ./* Opcode: IdxG
2ff00 54 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  T P1 P2 P3 P4 P5
2ff10 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
2ff20 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
2ff30 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72   The P4 register
2ff40 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e   values beginnin
2ff50 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61  g with P3 form a
2ff60 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
2ff70 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d   .** key that om
2ff80 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59 20  its the PRIMARY 
2ff90 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65 20 74 68  KEY.  Compare th
2ffa0 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61  is key value aga
2ffb0 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a  inst the index .
2ffc0 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20 63 75  ** that P1 is cu
2ffd0 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
2ffe0 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68   to, ignoring th
2fff0 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72  e PRIMARY KEY or
30000 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c 64   ROWID .** field
30010 73 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2a  s at the end..**
30020 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e  .** If the P1 in
30030 64 65 78 20 65 6e 74 72 79 20 69 73 20 67 72 65  dex entry is gre
30040 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65  ater than the ke
30050 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20  y value.** then 
30060 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68  jump to P2.  Oth
30070 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f  erwise fall thro
30080 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
30090 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
300a0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 54  /* Opcode: IdxLT
300b0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
300c0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
300d0 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
300e0 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20  The P4 register 
300f0 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67  values beginning
30100 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e   with P3 form an
30110 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
30120 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69  .** key that omi
30130 74 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  ts the PRIMARY K
30140 45 59 20 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f  EY or ROWID.  Co
30150 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76  mpare this key v
30160 61 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20  alue against.** 
30170 74 68 65 20 69 6e 64 65 78 20 74 68 61 74 20 50  the index that P
30180 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70  1 is currently p
30190 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f  ointing to, igno
301a0 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59  ring the PRIMARY
301b0 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44   KEY or.** ROWID
301c0 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78   on the P1 index
301d0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
301e0 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73  1 index entry is
301f0 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b   less than the k
30200 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75  ey value then ju
30210 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68  mp to P2..** Oth
30220 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f  erwise fall thro
30230 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
30240 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
30250 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 45  /* Opcode: IdxLE
30260 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
30270 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
30280 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
30290 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20  The P4 register 
302a0 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67  values beginning
302b0 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e   with P3 form an
302c0 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
302d0 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69  .** key that omi
302e0 74 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  ts the PRIMARY K
302f0 45 59 20 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f  EY or ROWID.  Co
30300 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76  mpare this key v
30310 61 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20  alue against.** 
30320 74 68 65 20 69 6e 64 65 78 20 74 68 61 74 20 50  the index that P
30330 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70  1 is currently p
30340 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f  ointing to, igno
30350 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59  ring the PRIMARY
30360 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44   KEY or.** ROWID
30370 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78   on the P1 index
30380 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
30390 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73  1 index entry is
303a0 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
303b0 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76  ual to the key v
303c0 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70 0a 2a  alue then jump.*
303d0 2a 20 74 6f 20 50 32 2e 20 4f 74 68 65 72 77 69  * to P2. Otherwi
303e0 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  se fall through 
303f0 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
30400 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
30410 20 4f 50 5f 49 64 78 4c 45 3a 20 20 20 20 20 20   OP_IdxLE:      
30420 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63      /* jump */.c
30430 61 73 65 20 4f 50 5f 49 64 78 47 54 3a 20 20 20  ase OP_IdxGT:   
30440 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
30450 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c 54 3a  /.case OP_IdxLT:
30460 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
30470 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  p */.case OP_Idx
30480 47 45 3a 20 20 7b 20 20 20 20 20 20 20 2f 2a 20  GE:  {       /* 
30490 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75  jump */.  VdbeCu
304a0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20  rsor *pC;.  int 
304b0 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52  res;.  UnpackedR
304c0 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65  ecord r;..  asse
304d0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
304e0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
304f0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
30500 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
30510 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
30520 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
30530 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a  C->isOrdered );.
30540 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
30550 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
30560 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72  BTREE );.  asser
30570 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  t( pC->uc.pCurso
30580 72 21 3d 30 29 3b 0a 20 20 61 73 73 65 72 74 28  r!=0);.  assert(
30590 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
305a0 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  eto==0 );.  asse
305b0 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c  rt( pOp->p5==0 |
305c0 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a  | pOp->p5==1 );.
305d0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
305e0 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
305f0 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20  );.  r.pKeyInfo 
30600 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a  = pC->pKeyInfo;.
30610 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31    r.nField = (u1
30620 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 69  6)pOp->p4.i;.  i
30630 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3c 4f  f( pOp->opcode<O
30640 50 5f 49 64 78 4c 54 20 29 7b 0a 20 20 20 20 61  P_IdxLT ){.    a
30650 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
30660 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c 20  de==OP_IdxLE || 
30670 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
30680 49 64 78 47 54 20 29 3b 0a 20 20 20 20 72 2e 64  IdxGT );.    r.d
30690 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a  efault_rc = -1;.
306a0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
306b0 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
306c0 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f  ==OP_IdxGE || pO
306d0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
306e0 78 4c 54 20 29 3b 0a 20 20 20 20 72 2e 64 65 66  xLT );.    r.def
306f0 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 7d  ault_rc = 0;.  }
30700 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65  .  r.aMem = &aMe
30710 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64  m[pOp->p3];.#ifd
30720 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
30730 20 20 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20    {.    int i;. 
30740 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e     for(i=0; i<r.
30750 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 7b 0a 20 20  nField; i++){.  
30760 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
30770 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69  sValid(&r.aMem[i
30780 5d 29 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49  ]) );.      REGI
30790 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
307a0 70 33 2b 69 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  p3+i, &aMem[pOp-
307b0 3e 70 33 2b 69 5d 29 3b 0a 20 20 20 20 7d 0a 20  >p3+i]);.    }. 
307c0 20 7d 0a 23 65 6e 64 69 66 0a 20 20 72 65 73 20   }.#endif.  res 
307d0 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65  = 0;  /* Not nee
307e0 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20  ded.  Only used 
307f0 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72  to silence a war
30800 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20 3d 20  ning. */.  rc = 
30810 73 71 6c 69 74 65 33 56 64 62 65 49 64 78 4b 65  sqlite3VdbeIdxKe
30820 79 43 6f 6d 70 61 72 65 28 64 62 2c 20 70 43 2c  yCompare(db, pC,
30830 20 26 72 2c 20 26 72 65 73 29 3b 0a 20 20 61 73   &r, &res);.  as
30840 73 65 72 74 28 20 28 4f 50 5f 49 64 78 4c 45 26  sert( (OP_IdxLE&
30850 31 29 3d 3d 28 4f 50 5f 49 64 78 4c 54 26 31 29  1)==(OP_IdxLT&1)
30860 20 26 26 20 28 4f 50 5f 49 64 78 47 45 26 31 29   && (OP_IdxGE&1)
30870 3d 3d 28 4f 50 5f 49 64 78 47 54 26 31 29 20 29  ==(OP_IdxGT&1) )
30880 3b 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70  ;.  if( (pOp->op
30890 63 6f 64 65 26 31 29 3d 3d 28 4f 50 5f 49 64 78  code&1)==(OP_Idx
308a0 4c 54 26 31 29 20 29 7b 0a 20 20 20 20 61 73 73  LT&1) ){.    ass
308b0 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
308c0 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c 20 70 4f  ==OP_IdxLE || pO
308d0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
308e0 78 4c 54 20 29 3b 0a 20 20 20 20 72 65 73 20 3d  xLT );.    res =
308f0 20 2d 72 65 73 3b 0a 20 20 7d 65 6c 73 65 7b 0a   -res;.  }else{.
30900 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
30910 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47  >opcode==OP_IdxG
30920 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  E || pOp->opcode
30930 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20  ==OP_IdxGT );.  
30940 20 20 72 65 73 2b 2b 3b 0a 20 20 7d 0a 20 20 56    res++;.  }.  V
30950 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
30960 65 73 3e 30 2c 32 29 3b 0a 20 20 69 66 28 20 72  es>0,2);.  if( r
30970 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
30980 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69  ue_to_error;.  i
30990 66 28 20 72 65 73 3e 30 20 29 20 67 6f 74 6f 20  f( res>0 ) goto 
309a0 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72  jump_to_p2;.  br
309b0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
309c0 65 3a 20 44 65 73 74 72 6f 79 20 50 31 20 50 32  e: Destroy P1 P2
309d0 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65   P3 * *.**.** De
309e0 6c 65 74 65 20 61 6e 20 65 6e 74 69 72 65 20 64  lete an entire d
309f0 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72  atabase table or
30a00 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f   index whose roo
30a10 74 20 70 61 67 65 20 69 6e 20 74 68 65 20 64 61  t page in the da
30a20 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 20 69  tabase.** file i
30a30 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e 0a 2a  s given by P1..*
30a40 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62  *.** The table b
30a50 65 69 6e 67 20 64 65 73 74 72 6f 79 65 64 20 69  eing destroyed i
30a60 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  s in the main da
30a70 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
30a80 33 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 33 3d  3==0.  If.** P3=
30a90 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  =1 then the tabl
30aa0 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73  e to be clear is
30ab0 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72   in the auxiliar
30ac0 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a  y database file.
30ad0 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65 64 20  ** that is used 
30ae0 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20  to store tables 
30af0 63 72 65 61 74 65 20 75 73 69 6e 67 20 43 52 45  create using CRE
30b00 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41  ATE TEMPORARY TA
30b10 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 41 55  BLE..**.** If AU
30b20 54 4f 56 41 43 55 55 4d 20 69 73 20 65 6e 61 62  TOVACUUM is enab
30b30 6c 65 64 20 74 68 65 6e 20 69 74 20 69 73 20 70  led then it is p
30b40 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61 6e 6f  ossible that ano
30b50 74 68 65 72 20 72 6f 6f 74 20 70 61 67 65 0a 2a  ther root page.*
30b60 2a 20 6d 69 67 68 74 20 62 65 20 6d 6f 76 65 64  * might be moved
30b70 20 69 6e 74 6f 20 74 68 65 20 6e 65 77 6c 79 20   into the newly 
30b80 64 65 6c 65 74 65 64 20 72 6f 6f 74 20 70 61 67  deleted root pag
30b90 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65  e in order to ke
30ba0 65 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74 20 70  ep all.** root p
30bb0 61 67 65 73 20 63 6f 6e 74 69 67 75 6f 75 73 20  ages contiguous 
30bc0 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  at the beginning
30bd0 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
30be0 2e 20 20 54 68 65 20 66 6f 72 6d 65 72 0a 2a 2a  .  The former.**
30bf0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f   value of the ro
30c00 6f 74 20 70 61 67 65 20 74 68 61 74 20 6d 6f 76  ot page that mov
30c10 65 64 20 2d 20 69 74 73 20 76 61 6c 75 65 20 62  ed - its value b
30c20 65 66 6f 72 65 20 74 68 65 20 6d 6f 76 65 20 6f  efore the move o
30c30 63 63 75 72 72 65 64 20 2d 0a 2a 2a 20 69 73 20  ccurred -.** is 
30c40 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
30c50 65 72 20 50 32 2e 20 49 66 20 6e 6f 20 70 61 67  er P2. If no pag
30c60 65 20 6d 6f 76 65 6d 65 6e 74 20 77 61 73 20 72  e movement was r
30c70 65 71 75 69 72 65 64 20 28 62 65 63 61 75 73 65  equired (because
30c80 20 74 68 65 0a 2a 2a 20 74 61 62 6c 65 20 62 65   the.** table be
30c90 69 6e 67 20 64 72 6f 70 70 65 64 20 77 61 73 20  ing dropped was 
30ca0 61 6c 72 65 61 64 79 20 74 68 65 20 6c 61 73 74  already the last
30cb0 20 6f 6e 65 20 69 6e 20 74 68 65 20 64 61 74 61   one in the data
30cc0 62 61 73 65 29 20 74 68 65 6e 20 61 20 0a 2a 2a  base) then a .**
30cd0 20 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64 20   zero is stored 
30ce0 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20  in register P2. 
30cf0 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69   If AUTOVACUUM i
30d00 73 20 64 69 73 61 62 6c 65 64 20 74 68 65 6e 20  s disabled then 
30d10 61 20 7a 65 72 6f 20 0a 2a 2a 20 69 73 20 73 74  a zero .** is st
30d20 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
30d30 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
30d40 6f 70 63 6f 64 65 20 74 68 72 6f 77 73 20 61 6e  opcode throws an
30d50 20 65 72 72 6f 72 20 69 66 20 74 68 65 72 65 20   error if there 
30d60 61 72 65 20 61 6e 79 20 61 63 74 69 76 65 20 72  are any active r
30d70 65 61 64 65 72 20 56 4d 73 20 77 68 65 6e 0a 2a  eader VMs when.*
30d80 2a 20 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 2e  * it is invoked.
30d90 20 54 68 69 73 20 69 73 20 64 6f 6e 65 20 74 6f   This is done to
30da0 20 61 76 6f 69 64 20 74 68 65 20 64 69 66 66 69   avoid the diffi
30db0 63 75 6c 74 79 20 61 73 73 6f 63 69 61 74 65 64  culty associated
30dc0 20 77 69 74 68 20 0a 2a 2a 20 75 70 64 61 74 69   with .** updati
30dd0 6e 67 20 65 78 69 73 74 69 6e 67 20 63 75 72 73  ng existing curs
30de0 6f 72 73 20 77 68 65 6e 20 61 20 72 6f 6f 74 20  ors when a root 
30df0 70 61 67 65 20 69 73 20 6d 6f 76 65 64 20 69 6e  page is moved in
30e00 20 61 6e 20 41 55 54 4f 56 41 43 55 55 4d 20 0a   an AUTOVACUUM .
30e10 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 54 68 69  ** database. Thi
30e20 73 20 65 72 72 6f 72 20 69 73 20 74 68 72 6f 77  s error is throw
30e30 6e 20 65 76 65 6e 20 69 66 20 74 68 65 20 64 61  n even if the da
30e40 74 61 62 61 73 65 20 69 73 20 6e 6f 74 20 61 6e  tabase is not an
30e50 20 41 55 54 4f 56 41 43 55 55 4d 20 0a 2a 2a 20   AUTOVACUUM .** 
30e60 64 62 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 61  db in order to a
30e70 76 6f 69 64 20 69 6e 74 72 6f 64 75 63 69 6e 67  void introducing
30e80 20 61 6e 20 69 6e 63 6f 6d 70 61 74 69 62 69 6c   an incompatibil
30e90 69 74 79 20 62 65 74 77 65 65 6e 20 61 75 74 6f  ity between auto
30ea0 76 61 63 75 75 6d 20 0a 2a 2a 20 61 6e 64 20 6e  vacuum .** and n
30eb0 6f 6e 2d 61 75 74 6f 76 61 63 75 75 6d 20 6d 6f  on-autovacuum mo
30ec0 64 65 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  des..**.** See a
30ed0 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a 63 61  lso: Clear.*/.ca
30ee0 73 65 20 4f 50 5f 44 65 73 74 72 6f 79 3a 20 7b  se OP_Destroy: {
30ef0 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
30f00 20 20 69 6e 74 20 69 4d 6f 76 65 64 3b 0a 20 20    int iMoved;.  
30f10 69 6e 74 20 69 44 62 3b 0a 0a 20 20 73 71 6c 69  int iDb;..  sqli
30f20 74 65 33 56 64 62 65 49 6e 63 72 57 72 69 74 65  te3VdbeIncrWrite
30f30 43 6f 75 6e 74 65 72 28 70 2c 20 30 29 3b 0a 20  Counter(p, 0);. 
30f40 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
30f50 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 73 73  Only==0 );.  ass
30f60 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 31 20 29  ert( pOp->p1>1 )
30f70 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ;.  pOut = out2P
30f80 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
30f90 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  );.  pOut->flags
30fa0 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69   = MEM_Null;.  i
30fb0 66 28 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64  f( db->nVdbeRead
30fc0 20 3e 20 64 62 2d 3e 6e 56 44 65 73 74 72 6f 79   > db->nVDestroy
30fd0 2b 31 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  +1 ){.    rc = S
30fe0 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20  QLITE_LOCKED;.  
30ff0 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e    p->errorAction
31000 20 3d 20 4f 45 5f 41 62 6f 72 74 3b 0a 20 20 20   = OE_Abort;.   
31010 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
31020 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 65 6c 73  to_error;.  }els
31030 65 7b 0a 20 20 20 20 69 44 62 20 3d 20 70 4f 70  e{.    iDb = pOp
31040 2d 3e 70 33 3b 0a 20 20 20 20 61 73 73 65 72 74  ->p3;.    assert
31050 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
31060 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20  btreeMask, iDb) 
31070 29 3b 0a 20 20 20 20 69 4d 6f 76 65 64 20 3d 20  );.    iMoved = 
31080 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65  0;  /* Not neede
31090 64 2e 20 20 4f 6e 6c 79 20 74 6f 20 73 69 6c 65  d.  Only to sile
310a0 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a  nce a warning. *
310b0 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  /.    rc = sqlit
310c0 65 33 42 74 72 65 65 44 72 6f 70 54 61 62 6c 65  e3BtreeDropTable
310d0 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42  (db->aDb[iDb].pB
310e0 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f  t, pOp->p1, &iMo
310f0 76 65 64 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  ved);.    pOut->
31100 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
31110 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
31120 20 69 4d 6f 76 65 64 3b 0a 20 20 20 20 69 66 28   iMoved;.    if(
31130 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
31140 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23  _due_to_error;.#
31150 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
31160 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20  IT_AUTOVACUUM.  
31170 20 20 69 66 28 20 69 4d 6f 76 65 64 21 3d 30 20    if( iMoved!=0 
31180 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
31190 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 64 62  RootPageMoved(db
311a0 2c 20 69 44 62 2c 20 69 4d 6f 76 65 64 2c 20 70  , iDb, iMoved, p
311b0 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 20 20 2f  Op->p1);.      /
311c0 2a 20 41 6c 6c 20 4f 50 5f 44 65 73 74 72 6f 79  * All OP_Destroy
311d0 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 63 63 75   operations occu
311e0 72 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 62 74  r on the same bt
311f0 72 65 65 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  ree */.      ass
31200 65 72 74 28 20 72 65 73 65 74 53 63 68 65 6d 61  ert( resetSchema
31210 4f 6e 46 61 75 6c 74 3d 3d 30 20 7c 7c 20 72 65  OnFault==0 || re
31220 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74  setSchemaOnFault
31230 3d 3d 69 44 62 2b 31 20 29 3b 0a 20 20 20 20 20  ==iDb+1 );.     
31240 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61   resetSchemaOnFa
31250 75 6c 74 20 3d 20 69 44 62 2b 31 3b 0a 20 20 20  ult = iDb+1;.   
31260 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20   }.#endif.  }.  
31270 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
31280 6f 64 65 3a 20 43 6c 65 61 72 20 50 31 20 50 32  ode: Clear P1 P2
31290 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65   P3.**.** Delete
312a0 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 6f 66   all contents of
312b0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
312c0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f  ble or index who
312d0 73 65 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20  se root page.** 
312e0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
312f0 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79  file is given by
31300 20 50 31 2e 20 20 42 75 74 2c 20 75 6e 6c 69 6b   P1.  But, unlik
31310 65 20 44 65 73 74 72 6f 79 2c 20 64 6f 20 6e 6f  e Destroy, do no
31320 74 0a 2a 2a 20 72 65 6d 6f 76 65 20 74 68 65 20  t.** remove the 
31330 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66  table or index f
31340 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
31350 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   file..**.** The
31360 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65   table being cle
31370 61 72 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69  ar is in the mai
31380 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
31390 69 66 20 50 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a  if P2==0.  If.**
313a0 20 50 32 3d 3d 31 20 74 68 65 6e 20 74 68 65 20   P2==1 then the 
313b0 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61  table to be clea
313c0 72 20 69 73 20 69 6e 20 74 68 65 20 61 75 78 69  r is in the auxi
313d0 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66  liary database f
313e0 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75  ile.** that is u
313f0 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62  sed to store tab
31400 6c 65 73 20 63 72 65 61 74 65 20 75 73 69 6e 67  les create using
31410 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52   CREATE TEMPORAR
31420 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49  Y TABLE..**.** I
31430 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 69  f the P3 value i
31440 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
31450 20 74 68 65 20 74 61 62 6c 65 20 72 65 66 65 72   the table refer
31460 72 65 64 20 74 6f 20 6d 75 73 74 20 62 65 20 61  red to must be a
31470 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20 74 61 62 6c  n.** intkey tabl
31480 65 20 28 61 6e 20 53 51 4c 20 74 61 62 6c 65 2c  e (an SQL table,
31490 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78 29 2e 20   not an index). 
314a0 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65  In this case the
314b0 20 72 6f 77 20 63 68 61 6e 67 65 20 0a 2a 2a 20   row change .** 
314c0 63 6f 75 6e 74 20 69 73 20 69 6e 63 72 65 6d 65  count is increme
314d0 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62  nted by the numb
314e0 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68  er of rows in th
314f0 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c  e table being cl
31500 65 61 72 65 64 2e 20 0a 2a 2a 20 49 66 20 50 33  eared. .** If P3
31510 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
31520 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20   zero, then the 
31530 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69 6e 20  value stored in 
31540 72 65 67 69 73 74 65 72 20 50 33 20 69 73 0a 2a  register P3 is.*
31550 2a 20 61 6c 73 6f 20 69 6e 63 72 65 6d 65 6e 74  * also increment
31560 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72  ed by the number
31570 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20   of rows in the 
31580 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61  table being clea
31590 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  red..**.** See a
315a0 6c 73 6f 3a 20 44 65 73 74 72 6f 79 0a 2a 2f 0a  lso: Destroy.*/.
315b0 63 61 73 65 20 4f 50 5f 43 6c 65 61 72 3a 20 7b  case OP_Clear: {
315c0 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 0a  .  int nChange;.
315d0 20 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 49   .  sqlite3VdbeI
315e0 6e 63 72 57 72 69 74 65 43 6f 75 6e 74 65 72 28  ncrWriteCounter(
315f0 70 2c 20 30 29 3b 0a 20 20 6e 43 68 61 6e 67 65  p, 0);.  nChange
31600 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
31610 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
31620 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61  ;.  assert( DbMa
31630 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
31640 61 73 6b 2c 20 70 4f 70 2d 3e 70 32 29 20 29 3b  ask, pOp->p2) );
31650 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
31660 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65 28 0a  treeClearTable(.
31670 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 70 4f        db->aDb[pO
31680 70 2d 3e 70 32 5d 2e 70 42 74 2c 20 70 4f 70 2d  p->p2].pBt, pOp-
31690 3e 70 31 2c 20 28 70 4f 70 2d 3e 70 33 20 3f 20  >p1, (pOp->p3 ? 
316a0 26 6e 43 68 61 6e 67 65 20 3a 20 30 29 0a 20 20  &nChange : 0).  
316b0 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33  );.  if( pOp->p3
316c0 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e   ){.    p->nChan
316d0 67 65 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20  ge += nChange;. 
316e0 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30     if( pOp->p3>0
316f0 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
31700 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
31710 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a  em[pOp->p3]) );.
31720 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f        memAboutTo
31730 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b  Change(p, &aMem[
31740 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20  pOp->p3]);.     
31750 20 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75   aMem[pOp->p3].u
31760 2e 69 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20  .i += nChange;. 
31770 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72     }.  }.  if( r
31780 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
31790 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62  ue_to_error;.  b
317a0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
317b0 64 65 3a 20 52 65 73 65 74 53 6f 72 74 65 72 20  de: ResetSorter 
317c0 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
317d0 20 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74   Delete all cont
317e0 65 6e 74 73 20 66 72 6f 6d 20 74 68 65 20 65 70  ents from the ep
317f0 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 6f 72  hemeral table or
31800 20 73 6f 72 74 65 72 0a 2a 2a 20 74 68 61 74 20   sorter.** that 
31810 69 73 20 6f 70 65 6e 20 6f 6e 20 63 75 72 73 6f  is open on curso
31820 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r P1..**.** This
31830 20 6f 70 63 6f 64 65 20 6f 6e 6c 79 20 77 6f 72   opcode only wor
31840 6b 73 20 66 6f 72 20 63 75 72 73 6f 72 73 20 75  ks for cursors u
31850 73 65 64 20 66 6f 72 20 73 6f 72 74 69 6e 67 20  sed for sorting 
31860 61 6e 64 0a 2a 2a 20 6f 70 65 6e 65 64 20 77 69  and.** opened wi
31870 74 68 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  th OP_OpenEpheme
31880 72 61 6c 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72  ral or OP_Sorter
31890 4f 70 65 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  Open..*/.case OP
318a0 5f 52 65 73 65 74 53 6f 72 74 65 72 3a 20 7b 0a  _ResetSorter: {.
318b0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
318c0 3b 0a 20 0a 20 20 61 73 73 65 72 74 28 20 70 4f  ;. .  assert( pO
318d0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
318e0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
318f0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
31900 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
31910 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
31920 20 69 66 28 20 69 73 53 6f 72 74 65 72 28 70 43   if( isSorter(pC
31930 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  ) ){.    sqlite3
31940 56 64 62 65 53 6f 72 74 65 72 52 65 73 65 74 28  VdbeSorterReset(
31950 64 62 2c 20 70 43 2d 3e 75 63 2e 70 53 6f 72 74  db, pC->uc.pSort
31960 65 72 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  er);.  }else{.  
31970 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
31980 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
31990 42 54 52 45 45 20 29 3b 0a 20 20 20 20 61 73 73  BTREE );.    ass
319a0 65 72 74 28 20 70 43 2d 3e 69 73 45 70 68 65 6d  ert( pC->isEphem
319b0 65 72 61 6c 20 29 3b 0a 20 20 20 20 72 63 20 3d  eral );.    rc =
319c0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65   sqlite3BtreeCle
319d0 61 72 54 61 62 6c 65 4f 66 43 75 72 73 6f 72 28  arTableOfCursor(
319e0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b  pC->uc.pCursor);
319f0 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f  .    if( rc ) go
31a00 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
31a10 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 62 72 65  error;.  }.  bre
31a20 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
31a30 3a 20 43 72 65 61 74 65 42 74 72 65 65 20 50 31  : CreateBtree P1
31a40 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
31a50 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f  nopsis: r[P2]=ro
31a60 6f 74 20 69 44 62 3d 50 31 20 66 6c 61 67 73 3d  ot iDb=P1 flags=
31a70 50 33 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74  P3.**.** Allocat
31a80 65 20 61 20 6e 65 77 20 62 2d 74 72 65 65 20 69  e a new b-tree i
31a90 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
31aa0 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d  ase file if P1==
31ab0 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 54  0 or in the.** T
31ac0 45 4d 50 20 64 61 74 61 62 61 73 65 20 66 69 6c  EMP database fil
31ad0 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e  e if P1==1 or in
31ae0 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74   an attached dat
31af0 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31  abase if.** P1>1
31b00 2e 20 20 54 68 65 20 50 33 20 61 72 67 75 6d 65  .  The P3 argume
31b10 6e 74 20 6d 75 73 74 20 62 65 20 31 20 28 42 54  nt must be 1 (BT
31b20 52 45 45 5f 49 4e 54 4b 45 59 29 20 66 6f 72 20  REE_INTKEY) for 
31b30 61 20 72 6f 77 69 64 20 74 61 62 6c 65 0a 2a 2a  a rowid table.**
31b40 20 69 74 20 6d 75 73 74 20 62 65 20 32 20 28 42   it must be 2 (B
31b50 54 52 45 45 5f 42 4c 4f 42 4b 45 59 29 20 66 6f  TREE_BLOBKEY) fo
31b60 72 20 61 6e 20 69 6e 64 65 78 20 6f 72 20 57 49  r an index or WI
31b70 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c  THOUT ROWID tabl
31b80 65 2e 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70  e..** The root p
31b90 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  age number of th
31ba0 65 20 6e 65 77 20 62 2d 74 72 65 65 20 69 73 20  e new b-tree is 
31bb0 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
31bc0 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
31bd0 50 5f 43 72 65 61 74 65 42 74 72 65 65 3a 20 7b  P_CreateBtree: {
31be0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
31bf0 32 20 2a 2f 0a 20 20 69 6e 74 20 70 67 6e 6f 3b  2 */.  int pgno;
31c00 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 73  .  Db *pDb;..  s
31c10 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57 72  qlite3VdbeIncrWr
31c20 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 30 29  iteCounter(p, 0)
31c30 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ;.  pOut = out2P
31c40 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
31c50 29 3b 0a 20 20 70 67 6e 6f 20 3d 20 30 3b 0a 20  );.  pgno = 0;. 
31c60 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
31c70 3d 3d 42 54 52 45 45 5f 49 4e 54 4b 45 59 20 7c  ==BTREE_INTKEY |
31c80 7c 20 70 4f 70 2d 3e 70 33 3d 3d 42 54 52 45 45  | pOp->p3==BTREE
31c90 5f 42 4c 4f 42 4b 45 59 20 29 3b 0a 20 20 61 73  _BLOBKEY );.  as
31ca0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
31cb0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
31cc0 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
31cd0 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
31ce0 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70  treeMask, pOp->p
31cf0 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  1) );.  assert( 
31d00 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
31d10 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61  ;.  pDb = &db->a
31d20 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  Db[pOp->p1];.  a
31d30 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21  ssert( pDb->pBt!
31d40 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  =0 );.  rc = sql
31d50 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54  ite3BtreeCreateT
31d60 61 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c 20 26  able(pDb->pBt, &
31d70 70 67 6e 6f 2c 20 70 4f 70 2d 3e 70 33 29 3b 0a  pgno, pOp->p3);.
31d80 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
31d90 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
31da0 6f 72 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20  or;.  pOut->u.i 
31db0 3d 20 70 67 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b  = pgno;.  break;
31dc0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
31dd0 71 6c 45 78 65 63 20 2a 20 2a 20 2a 20 50 34 20  qlExec * * * P4 
31de0 2a 0a 2a 2a 0a 2a 2a 20 52 75 6e 20 74 68 65 20  *.**.** Run the 
31df0 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 6f 72  SQL statement or
31e00 20 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63   statements spec
31e10 69 66 69 65 64 20 69 6e 20 74 68 65 20 50 34 20  ified in the P4 
31e20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 63 61 73 65 20  string..*/.case 
31e30 4f 50 5f 53 71 6c 45 78 65 63 3a 20 7b 0a 20 20  OP_SqlExec: {.  
31e40 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57  sqlite3VdbeIncrW
31e50 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 30  riteCounter(p, 0
31e60 29 3b 0a 20 20 64 62 2d 3e 6e 53 71 6c 45 78 65  );.  db->nSqlExe
31e70 63 2b 2b 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  c++;.  rc = sqli
31e80 74 65 33 5f 65 78 65 63 28 64 62 2c 20 70 4f 70  te3_exec(db, pOp
31e90 2d 3e 70 34 2e 7a 2c 20 30 2c 20 30 2c 20 30 29  ->p4.z, 0, 0, 0)
31ea0 3b 0a 20 20 64 62 2d 3e 6e 53 71 6c 45 78 65 63  ;.  db->nSqlExec
31eb0 2d 2d 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  --;.  if( rc ) g
31ec0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
31ed0 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
31ee0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .}../* Opcode: P
31ef0 61 72 73 65 53 63 68 65 6d 61 20 50 31 20 2a 20  arseSchema P1 * 
31f00 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61  * P4 *.**.** Rea
31f10 64 20 61 6e 64 20 70 61 72 73 65 20 61 6c 6c 20  d and parse all 
31f20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65  entries from the
31f30 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 74   SQLITE_MASTER t
31f40 61 62 6c 65 20 6f 66 20 64 61 74 61 62 61 73 65  able of database
31f50 20 50 31 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63   P1.** that matc
31f60 68 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  h the WHERE clau
31f70 73 65 20 50 34 2e 20 20 49 66 20 50 34 20 69 73  se P4.  If P4 is
31f80 20 61 20 4e 55 4c 4c 20 70 6f 69 6e 74 65 72 2c   a NULL pointer,
31f90 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 65 6e 74   then the.** ent
31fa0 69 72 65 20 73 63 68 65 6d 61 20 66 6f 72 20 50  ire schema for P
31fb0 31 20 69 73 20 72 65 70 61 72 73 65 64 2e 0a 2a  1 is reparsed..*
31fc0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
31fd0 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 70 61 72   invokes the par
31fe0 73 65 72 20 74 6f 20 63 72 65 61 74 65 20 61 20  ser to create a 
31ff0 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68  new virtual mach
32000 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20 72 75 6e  ine,.** then run
32010 73 20 74 68 65 20 6e 65 77 20 76 69 72 74 75 61  s the new virtua
32020 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 74 20 69  l machine.  It i
32030 73 20 74 68 75 73 20 61 20 72 65 2d 65 6e 74 72  s thus a re-entr
32040 61 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63  ant opcode..*/.c
32050 61 73 65 20 4f 50 5f 50 61 72 73 65 53 63 68 65  ase OP_ParseSche
32060 6d 61 3a 20 7b 0a 20 20 69 6e 74 20 69 44 62 3b  ma: {.  int iDb;
32070 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
32080 4d 61 73 74 65 72 3b 0a 20 20 63 68 61 72 20 2a  Master;.  char *
32090 7a 53 71 6c 3b 0a 20 20 49 6e 69 74 44 61 74 61  zSql;.  InitData
320a0 20 69 6e 69 74 44 61 74 61 3b 0a 0a 20 20 2f 2a   initData;..  /*
320b0 20 41 6e 79 20 70 72 65 70 61 72 65 64 20 73 74   Any prepared st
320c0 61 74 65 6d 65 6e 74 20 74 68 61 74 20 69 6e 76  atement that inv
320d0 6f 6b 65 73 20 74 68 69 73 20 6f 70 63 6f 64 65  okes this opcode
320e0 20 77 69 6c 6c 20 68 6f 6c 64 20 6d 75 74 65 78   will hold mutex
320f0 65 73 0a 20 20 2a 2a 20 6f 6e 20 65 76 65 72 79  es.  ** on every
32100 20 62 74 72 65 65 2e 20 20 54 68 69 73 20 69 73   btree.  This is
32110 20 61 20 70 72 65 72 65 71 75 69 73 69 74 65 20   a prerequisite 
32120 66 6f 72 20 69 6e 76 6f 6b 69 6e 67 20 0a 20 20  for invoking .  
32130 2a 2a 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61  ** sqlite3InitCa
32140 6c 6c 62 61 63 6b 28 29 2e 0a 20 20 2a 2f 0a 23  llback()..  */.#
32150 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
32160 55 47 0a 20 20 66 6f 72 28 69 44 62 3d 30 3b 20  UG.  for(iDb=0; 
32170 69 44 62 3c 64 62 2d 3e 6e 44 62 3b 20 69 44 62  iDb<db->nDb; iDb
32180 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ++){.    assert(
32190 20 69 44 62 3d 3d 31 20 7c 7c 20 73 71 6c 69 74   iDb==1 || sqlit
321a0 65 33 42 74 72 65 65 48 6f 6c 64 73 4d 75 74 65  e3BtreeHoldsMute
321b0 78 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  x(db->aDb[iDb].p
321c0 42 74 29 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  Bt) );.  }.#endi
321d0 66 0a 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e  f..  iDb = pOp->
321e0 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44  p1;.  assert( iD
321f0 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e  b>=0 && iDb<db->
32200 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
32210 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 64   DbHasProperty(d
32220 62 2c 20 69 44 62 2c 20 44 42 5f 53 63 68 65 6d  b, iDb, DB_Schem
32230 61 4c 6f 61 64 65 64 29 20 29 3b 0a 0a 23 69 66  aLoaded) );..#if
32240 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
32250 5f 41 4c 54 45 52 54 41 42 4c 45 0a 20 20 69 66  _ALTERTABLE.  if
32260 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20 29  ( pOp->p4.z==0 )
32270 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 63 68  {.    sqlite3Sch
32280 65 6d 61 43 6c 65 61 72 28 64 62 2d 3e 61 44 62  emaClear(db->aDb
32290 5b 69 44 62 5d 2e 70 53 63 68 65 6d 61 29 3b 0a  [iDb].pSchema);.
322a0 20 20 20 20 64 62 2d 3e 6d 44 62 46 6c 61 67 73      db->mDbFlags
322b0 20 26 3d 20 7e 44 42 46 4c 41 47 5f 53 63 68 65   &= ~DBFLAG_Sche
322c0 6d 61 4b 6e 6f 77 6e 4f 6b 3b 0a 20 20 20 20 72  maKnownOk;.    r
322d0 63 20 3d 20 73 71 6c 69 74 65 33 49 6e 69 74 4f  c = sqlite3InitO
322e0 6e 65 28 64 62 2c 20 69 44 62 2c 20 26 70 2d 3e  ne(db, iDb, &p->
322f0 7a 45 72 72 4d 73 67 2c 20 49 4e 49 54 46 4c 41  zErrMsg, INITFLA
32300 47 5f 41 6c 74 65 72 54 61 62 6c 65 29 3b 0a 20  G_AlterTable);. 
32310 20 20 20 64 62 2d 3e 6d 44 62 46 6c 61 67 73 20     db->mDbFlags 
32320 7c 3d 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61  |= DBFLAG_Schema
32330 43 68 61 6e 67 65 3b 0a 20 20 20 20 70 2d 3e 65  Change;.    p->e
32340 78 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 65  xpired = 0;.  }e
32350 6c 73 65 0a 23 65 6e 64 69 66 0a 20 20 7b 0a 20  lse.#endif.  {. 
32360 20 20 20 7a 4d 61 73 74 65 72 20 3d 20 4d 41 53     zMaster = MAS
32370 54 45 52 5f 4e 41 4d 45 3b 0a 20 20 20 20 69 6e  TER_NAME;.    in
32380 69 74 44 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a  itData.db = db;.
32390 20 20 20 20 69 6e 69 74 44 61 74 61 2e 69 44 62      initData.iDb
323a0 20 3d 20 69 44 62 3b 0a 20 20 20 20 69 6e 69 74   = iDb;.    init
323b0 44 61 74 61 2e 70 7a 45 72 72 4d 73 67 20 3d 20  Data.pzErrMsg = 
323c0 26 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20  &p->zErrMsg;.   
323d0 20 69 6e 69 74 44 61 74 61 2e 6d 49 6e 69 74 46   initData.mInitF
323e0 6c 61 67 73 20 3d 20 30 3b 0a 20 20 20 20 7a 53  lags = 0;.    zS
323f0 71 6c 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69  ql = sqlite3MPri
32400 6e 74 66 28 64 62 2c 0a 20 20 20 20 20 20 20 22  ntf(db,.       "
32410 53 45 4c 45 43 54 2a 46 52 4f 4d 5c 22 25 77 5c  SELECT*FROM\"%w\
32420 22 2e 25 73 20 57 48 45 52 45 20 25 73 20 4f 52  ".%s WHERE %s OR
32430 44 45 52 20 42 59 20 72 6f 77 69 64 22 2c 0a 20  DER BY rowid",. 
32440 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 69 44        db->aDb[iD
32450 62 5d 2e 7a 44 62 53 4e 61 6d 65 2c 20 7a 4d 61  b].zDbSName, zMa
32460 73 74 65 72 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ster, pOp->p4.z)
32470 3b 0a 20 20 20 20 69 66 28 20 7a 53 71 6c 3d 3d  ;.    if( zSql==
32480 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  0 ){.      rc = 
32490 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50  SQLITE_NOMEM_BKP
324a0 54 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  T;.    }else{.  
324b0 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
324c0 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20 29 3b 0a  init.busy==0 );.
324d0 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62        db->init.b
324e0 75 73 79 20 3d 20 31 3b 0a 20 20 20 20 20 20 69  usy = 1;.      i
324f0 6e 69 74 44 61 74 61 2e 72 63 20 3d 20 53 51 4c  nitData.rc = SQL
32500 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 69 6e  ITE_OK;.      in
32510 69 74 44 61 74 61 2e 6e 49 6e 69 74 52 6f 77 20  itData.nInitRow 
32520 3d 20 30 3b 0a 20 20 20 20 20 20 61 73 73 65 72  = 0;.      asser
32530 74 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  t( !db->mallocFa
32540 69 6c 65 64 20 29 3b 0a 20 20 20 20 20 20 72 63  iled );.      rc
32550 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28   = sqlite3_exec(
32560 64 62 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65  db, zSql, sqlite
32570 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26  3InitCallback, &
32580 69 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a 20 20  initData, 0);.  
32590 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
325a0 54 45 5f 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69  TE_OK ) rc = ini
325b0 74 44 61 74 61 2e 72 63 3b 0a 20 20 20 20 20 20  tData.rc;.      
325c0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
325d0 4b 20 26 26 20 69 6e 69 74 44 61 74 61 2e 6e 49  K && initData.nI
325e0 6e 69 74 52 6f 77 3d 3d 30 20 29 7b 0a 20 20 20  nitRow==0 ){.   
325f0 20 20 20 20 20 2f 2a 20 54 68 65 20 4f 50 5f 50       /* The OP_P
32600 61 72 73 65 53 63 68 65 6d 61 20 6f 70 63 6f 64  arseSchema opcod
32610 65 20 77 69 74 68 20 61 20 6e 6f 6e 2d 4e 55 4c  e with a non-NUL
32620 4c 20 50 34 20 61 72 67 75 6d 65 6e 74 20 73 68  L P4 argument sh
32630 6f 75 6c 64 20 70 61 72 73 65 0a 20 20 20 20 20  ould parse.     
32640 20 20 20 2a 2a 20 61 74 20 6c 65 61 73 74 20 6f     ** at least o
32650 6e 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  ne SQL statement
32660 2e 20 41 6e 79 20 6c 65 73 73 20 74 68 61 6e 20  . Any less than 
32670 74 68 61 74 20 69 6e 64 69 63 61 74 65 73 20 74  that indicates t
32680 68 61 74 0a 20 20 20 20 20 20 20 20 2a 2a 20 74  hat.        ** t
32690 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  he sqlite_master
326a0 20 74 61 62 6c 65 20 69 73 20 63 6f 72 72 75 70   table is corrup
326b0 74 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 63  t. */.        rc
326c0 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50   = SQLITE_CORRUP
326d0 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 7d 0a  T_BKPT;.      }.
326e0 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
326f0 72 65 65 4e 4e 28 64 62 2c 20 7a 53 71 6c 29 3b  reeNN(db, zSql);
32700 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e  .      db->init.
32710 62 75 73 79 20 3d 20 30 3b 0a 20 20 20 20 7d 0a  busy = 0;.    }.
32720 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 7b 0a    }.  if( rc ){.
32730 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74      sqlite3Reset
32740 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e  AllSchemasOfConn
32750 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 20 20  ection(db);.    
32760 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e  if( rc==SQLITE_N
32770 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 67 6f  OMEM ){.      go
32780 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d  to no_mem;.    }
32790 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f  .    goto abort_
327a0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
327b0 7d 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a  }.  break;  .}..
327c0 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
327d0 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45  ITE_OMIT_ANALYZE
327e0 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f 61  )./* Opcode: Loa
327f0 64 41 6e 61 6c 79 73 69 73 20 50 31 20 2a 20 2a  dAnalysis P1 * *
32800 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20   * *.**.** Read 
32810 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31  the sqlite_stat1
32820 20 74 61 62 6c 65 20 66 6f 72 20 64 61 74 61 62   table for datab
32830 61 73 65 20 50 31 20 61 6e 64 20 6c 6f 61 64 20  ase P1 and load 
32840 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f  the content.** o
32850 66 20 74 68 61 74 20 74 61 62 6c 65 20 69 6e 74  f that table int
32860 6f 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 69  o the internal i
32870 6e 64 65 78 20 68 61 73 68 20 74 61 62 6c 65 2e  ndex hash table.
32880 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73    This will caus
32890 65 0a 2a 2a 20 74 68 65 20 61 6e 61 6c 79 73 69  e.** the analysi
328a0 73 20 74 6f 20 62 65 20 75 73 65 64 20 77 68 65  s to be used whe
328b0 6e 20 70 72 65 70 61 72 69 6e 67 20 61 6c 6c 20  n preparing all 
328c0 73 75 62 73 65 71 75 65 6e 74 20 71 75 65 72 69  subsequent queri
328d0 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c  es..*/.case OP_L
328e0 6f 61 64 41 6e 61 6c 79 73 69 73 3a 20 7b 0a 20  oadAnalysis: {. 
328f0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
32900 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
32910 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 72 63 20 3d  b->nDb );.  rc =
32920 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73   sqlite3Analysis
32930 4c 6f 61 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31  Load(db, pOp->p1
32940 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
32950 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
32960 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 20  error;.  break; 
32970 20 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64   .}.#endif /* !d
32980 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
32990 49 54 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f 0a 0a  IT_ANALYZE) */..
329a0 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54  /* Opcode: DropT
329b0 61 62 6c 65 20 50 31 20 2a 20 2a 20 50 34 20 2a  able P1 * * P4 *
329c0 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68  .**.** Remove th
329d0 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d  e internal (in-m
329e0 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75  emory) data stru
329f0 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63  ctures that desc
32a00 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 61 62 6c  ribe.** the tabl
32a10 65 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61  e named P4 in da
32a20 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73  tabase P1.  This
32a30 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72   is called after
32a40 20 61 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 64   a table.** is d
32a50 72 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73 6b  ropped from disk
32a60 20 28 75 73 69 6e 67 20 74 68 65 20 44 65 73 74   (using the Dest
32a70 72 6f 79 20 6f 70 63 6f 64 65 29 20 69 6e 20 6f  roy opcode) in o
32a80 72 64 65 72 20 74 6f 20 6b 65 65 70 20 0a 2a 2a  rder to keep .**
32a90 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65   the internal re
32aa0 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
32ab0 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f  the.** schema co
32ac0 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68  nsistent with wh
32ad0 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a  at is on disk..*
32ae0 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 61  /.case OP_DropTa
32af0 62 6c 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  ble: {.  sqlite3
32b00 56 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75  VdbeIncrWriteCou
32b10 6e 74 65 72 28 70 2c 20 30 29 3b 0a 20 20 73 71  nter(p, 0);.  sq
32b20 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
32b30 6c 65 74 65 54 61 62 6c 65 28 64 62 2c 20 70 4f  leteTable(db, pO
32b40 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
32b50 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
32b60 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 49 6e  * Opcode: DropIn
32b70 64 65 78 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  dex P1 * * P4 *.
32b80 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65  **.** Remove the
32b90 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65   internal (in-me
32ba0 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63  mory) data struc
32bb0 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72  tures that descr
32bc0 69 62 65 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78  ibe.** the index
32bd0 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74   named P4 in dat
32be0 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20  abase P1.  This 
32bf0 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20  is called after 
32c00 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 69 73 20 64  an index.** is d
32c10 72 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73 6b  ropped from disk
32c20 20 28 75 73 69 6e 67 20 74 68 65 20 44 65 73 74   (using the Dest
32c30 72 6f 79 20 6f 70 63 6f 64 65 29 0a 2a 2a 20 69  roy opcode).** i
32c40 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20  n order to keep 
32c50 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70  the internal rep
32c60 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
32c70 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e  he.** schema con
32c80 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61  sistent with wha
32c90 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f  t is on disk..*/
32ca0 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 49 6e 64  .case OP_DropInd
32cb0 65 78 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 56  ex: {.  sqlite3V
32cc0 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e  dbeIncrWriteCoun
32cd0 74 65 72 28 70 2c 20 30 29 3b 0a 20 20 73 71 6c  ter(p, 0);.  sql
32ce0 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
32cf0 65 74 65 49 6e 64 65 78 28 64 62 2c 20 70 4f 70  eteIndex(db, pOp
32d00 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ->p1, pOp->p4.z)
32d10 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
32d20 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 72 69   Opcode: DropTri
32d30 67 67 65 72 20 50 31 20 2a 20 2a 20 50 34 20 2a  gger P1 * * P4 *
32d40 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68  .**.** Remove th
32d50 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d  e internal (in-m
32d60 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75  emory) data stru
32d70 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63  ctures that desc
32d80 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 72 69 67  ribe.** the trig
32d90 67 65 72 20 6e 61 6d 65 64 20 50 34 20 69 6e 20  ger named P4 in 
32da0 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68  database P1.  Th
32db0 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74  is is called aft
32dc0 65 72 20 61 20 74 72 69 67 67 65 72 0a 2a 2a 20  er a trigger.** 
32dd0 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20  is dropped from 
32de0 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65 20  disk (using the 
32df0 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29 20  Destroy opcode) 
32e00 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70  in order to keep
32e10 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65 72 6e 61   .** the interna
32e20 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  l representation
32e30 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d   of the.** schem
32e40 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74  a consistent wit
32e50 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73  h what is on dis
32e60 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72  k..*/.case OP_Dr
32e70 6f 70 54 72 69 67 67 65 72 3a 20 7b 0a 20 20 73  opTrigger: {.  s
32e80 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57 72  qlite3VdbeIncrWr
32e90 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 30 29  iteCounter(p, 0)
32ea0 3b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  ;.  sqlite3Unlin
32eb0 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65  kAndDeleteTrigge
32ec0 72 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  r(db, pOp->p1, p
32ed0 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65  Op->p4.z);.  bre
32ee0 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20  ak;.}...#ifndef 
32ef0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45  SQLITE_OMIT_INTE
32f00 47 52 49 54 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f  GRITY_CHECK./* O
32f10 70 63 6f 64 65 3a 20 49 6e 74 65 67 72 69 74 79  pcode: Integrity
32f20 43 6b 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Ck P1 P2 P3 P4 P
32f30 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e  5.**.** Do an an
32f40 61 6c 79 73 69 73 20 6f 66 20 74 68 65 20 63 75  alysis of the cu
32f50 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61 74  rrently open dat
32f60 61 62 61 73 65 2e 20 20 53 74 6f 72 65 20 69 6e  abase.  Store in
32f70 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20  .** register P1 
32f80 74 68 65 20 74 65 78 74 20 6f 66 20 61 6e 20 65  the text of an e
32f90 72 72 6f 72 20 6d 65 73 73 61 67 65 20 64 65 73  rror message des
32fa0 63 72 69 62 69 6e 67 20 61 6e 79 20 70 72 6f 62  cribing any prob
32fb0 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70  lems..** If no p
32fc0 72 6f 62 6c 65 6d 73 20 61 72 65 20 66 6f 75 6e  roblems are foun
32fd0 64 2c 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20  d, store a NULL 
32fe0 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
32ff0 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74  **.** The regist
33000 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 6f  er P3 contains o
33010 6e 65 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65  ne less than the
33020 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20   maximum number 
33030 6f 66 20 61 6c 6c 6f 77 65 64 20 65 72 72 6f 72  of allowed error
33040 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74 20 72 65  s..** At most re
33050 67 28 50 33 29 20 65 72 72 6f 72 73 20 77 69 6c  g(P3) errors wil
33060 6c 20 62 65 20 72 65 70 6f 72 74 65 64 2e 0a 2a  l be reported..*
33070 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
33080 2c 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20 73  , the analysis s
33090 74 6f 70 73 20 61 73 20 73 6f 6f 6e 20 61 73 20  tops as soon as 
330a0 72 65 67 28 50 31 29 20 65 72 72 6f 72 73 20 61  reg(P1) errors a
330b0 72 65 20 0a 2a 2a 20 73 65 65 6e 2e 20 20 52 65  re .** seen.  Re
330c0 67 28 50 31 29 20 69 73 20 75 70 64 61 74 65 64  g(P1) is updated
330d0 20 77 69 74 68 20 74 68 65 20 6e 75 6d 62 65 72   with the number
330e0 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69   of errors remai
330f0 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ning..**.** The 
33100 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
33110 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73 20  s of all tables 
33120 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
33130 61 72 65 20 69 6e 74 65 67 65 72 73 0a 2a 2a 20  are integers.** 
33140 73 74 6f 72 65 64 20 69 6e 20 50 34 5f 49 4e 54  stored in P4_INT
33150 41 52 52 41 59 20 61 72 67 75 6d 65 6e 74 2e 0a  ARRAY argument..
33160 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e  **.** If P5 is n
33170 6f 74 20 7a 65 72 6f 2c 20 74 68 65 20 63 68 65  ot zero, the che
33180 63 6b 20 69 73 20 64 6f 6e 65 20 6f 6e 20 74 68  ck is done on th
33190 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  e auxiliary data
331a0 62 61 73 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f  base.** file, no
331b0 74 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  t the main datab
331c0 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  ase file..**.** 
331d0 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75  This opcode is u
331e0 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74  sed to implement
331f0 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 5f 63   the integrity_c
33200 68 65 63 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a  heck pragma..*/.
33210 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 72 69 74  case OP_Integrit
33220 79 43 6b 3a 20 7b 0a 20 20 69 6e 74 20 6e 52 6f  yCk: {.  int nRo
33230 6f 74 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ot;      /* Numb
33240 65 72 20 6f 66 20 74 61 62 6c 65 73 20 74 6f 20  er of tables to 
33250 63 68 65 63 6b 2e 20 20 28 4e 75 6d 62 65 72 20  check.  (Number 
33260 6f 66 20 72 6f 6f 74 20 70 61 67 65 73 2e 29 20  of root pages.) 
33270 2a 2f 0a 20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b  */.  int *aRoot;
33280 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66       /* Array of
33290 20 72 6f 6f 74 70 61 67 65 20 6e 75 6d 62 65 72   rootpage number
332a0 73 20 66 6f 72 20 74 61 62 6c 65 73 20 74 6f 20  s for tables to 
332b0 62 65 20 63 68 65 63 6b 65 64 20 2a 2f 0a 20 20  be checked */.  
332c0 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20  int nErr;       
332d0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72  /* Number of err
332e0 6f 72 73 20 72 65 70 6f 72 74 65 64 20 2a 2f 0a  ors reported */.
332f0 20 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 20    char *z;      
33300 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65    /* Text of the
33310 20 65 72 72 6f 72 20 72 65 70 6f 72 74 20 2a 2f   error report */
33320 0a 20 20 4d 65 6d 20 2a 70 6e 45 72 72 3b 20 20  .  Mem *pnErr;  
33330 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 6b     /* Register k
33340 65 65 70 69 6e 67 20 74 72 61 63 6b 20 6f 66 20  eeping track of 
33350 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67  errors remaining
33360 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70   */..  assert( p
33370 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20  ->bIsReader );. 
33380 20 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 32   nRoot = pOp->p2
33390 3b 0a 20 20 61 52 6f 6f 74 20 3d 20 70 4f 70 2d  ;.  aRoot = pOp-
333a0 3e 70 34 2e 61 69 3b 0a 20 20 61 73 73 65 72 74  >p4.ai;.  assert
333b0 28 20 6e 52 6f 6f 74 3e 30 20 29 3b 0a 20 20 61  ( nRoot>0 );.  a
333c0 73 73 65 72 74 28 20 61 52 6f 6f 74 5b 30 5d 3d  ssert( aRoot[0]=
333d0 3d 6e 52 6f 6f 74 20 29 3b 0a 20 20 61 73 73 65  =nRoot );.  asse
333e0 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
333f0 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
33400 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
33410 72 29 20 29 3b 0a 20 20 70 6e 45 72 72 20 3d 20  r) );.  pnErr = 
33420 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
33430 20 20 61 73 73 65 72 74 28 20 28 70 6e 45 72 72    assert( (pnErr
33440 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
33450 74 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  t)!=0 );.  asser
33460 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73  t( (pnErr->flags
33470 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
33480 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 70  Blob))==0 );.  p
33490 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
334a0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
334b0 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62 20  pOp->p5<db->nDb 
334c0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d  );.  assert( DbM
334d0 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
334e0 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 35 29 20 29  Mask, pOp->p5) )
334f0 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 42  ;.  z = sqlite3B
33500 74 72 65 65 49 6e 74 65 67 72 69 74 79 43 68 65  treeIntegrityChe
33510 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  ck(db->aDb[pOp->
33520 70 35 5d 2e 70 42 74 2c 20 26 61 52 6f 6f 74 5b  p5].pBt, &aRoot[
33530 31 5d 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20 20 20  1], nRoot,.     
33540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33550 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 74              (int
33560 29 70 6e 45 72 72 2d 3e 75 2e 69 2b 31 2c 20 26  )pnErr->u.i+1, &
33570 6e 45 72 72 29 3b 0a 20 20 73 71 6c 69 74 65 33  nErr);.  sqlite3
33580 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
33590 49 6e 31 29 3b 0a 20 20 69 66 28 20 6e 45 72 72  In1);.  if( nErr
335a0 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72  ==0 ){.    asser
335b0 74 28 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c  t( z==0 );.  }el
335c0 73 65 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20  se if( z==0 ){. 
335d0 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
335e0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 6e 45    }else{.    pnE
335f0 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72 2d  rr->u.i -= nErr-
33600 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  1;.    sqlite3Vd
33610 62 65 4d 65 6d 53 65 74 53 74 72 28 70 49 6e 31  beMemSetStr(pIn1
33620 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f  , z, -1, SQLITE_
33630 55 54 46 38 2c 20 73 71 6c 69 74 65 33 5f 66 72  UTF8, sqlite3_fr
33640 65 65 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54  ee);.  }.  UPDAT
33650 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
33660 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  In1);.  sqlite3V
33670 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
33680 67 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67  g(pIn1, encoding
33690 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  );.  break;.}.#e
336a0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
336b0 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  MIT_INTEGRITY_CH
336c0 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  ECK */../* Opcod
336d0 65 3a 20 52 6f 77 53 65 74 41 64 64 20 50 31 20  e: RowSetAdd P1 
336e0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
336f0 70 73 69 73 3a 20 72 6f 77 73 65 74 28 50 31 29  psis: rowset(P1)
33700 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 49 6e 73  =r[P2].**.** Ins
33710 65 72 74 20 74 68 65 20 69 6e 74 65 67 65 72 20  ert the integer 
33720 76 61 6c 75 65 20 68 65 6c 64 20 62 79 20 72 65  value held by re
33730 67 69 73 74 65 72 20 50 32 20 69 6e 74 6f 20 61  gister P2 into a
33740 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 0a 2a   RowSet object.*
33750 2a 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73 74  * held in regist
33760 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20  er P1..**.** An 
33770 61 73 73 65 72 74 69 6f 6e 20 66 61 69 6c 73 20  assertion fails 
33780 69 66 20 50 32 20 69 73 20 6e 6f 74 20 61 6e 20  if P2 is not an 
33790 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65  integer..*/.case
337a0 20 4f 50 5f 52 6f 77 53 65 74 41 64 64 3a 20 7b   OP_RowSetAdd: {
337b0 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 69         /* in1, i
337c0 6e 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n2 */.  pIn1 = &
337d0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
337e0 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
337f0 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74  p->p2];.  assert
33800 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26  ( (pIn2->flags &
33810 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a   MEM_Int)!=0 );.
33820 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
33830 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 3d 3d  gs & MEM_Blob)==
33840 30 20 29 7b 0a 20 20 20 20 69 66 28 20 73 71 6c  0 ){.    if( sql
33850 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f  ite3VdbeMemSetRo
33860 77 53 65 74 28 70 49 6e 31 29 20 29 20 67 6f 74  wSet(pIn1) ) got
33870 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
33880 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56  assert( sqlite3V
33890 64 62 65 4d 65 6d 49 73 52 6f 77 53 65 74 28 70  dbeMemIsRowSet(p
338a0 49 6e 31 29 20 29 3b 0a 20 20 73 71 6c 69 74 65  In1) );.  sqlite
338b0 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 28 52  3RowSetInsert((R
338c0 6f 77 53 65 74 2a 29 70 49 6e 31 2d 3e 7a 2c 20  owSet*)pIn1->z, 
338d0 70 49 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72  pIn2->u.i);.  br
338e0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
338f0 65 3a 20 52 6f 77 53 65 74 52 65 61 64 20 50 31  e: RowSetRead P1
33900 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
33910 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 6f  nopsis: r[P3]=ro
33920 77 73 65 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20 45  wset(P1).**.** E
33930 78 74 72 61 63 74 20 74 68 65 20 73 6d 61 6c 6c  xtract the small
33940 65 73 74 20 76 61 6c 75 65 20 66 72 6f 6d 20 74  est value from t
33950 68 65 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74  he RowSet object
33960 20 69 6e 20 50 31 0a 2a 2a 20 61 6e 64 20 70 75   in P1.** and pu
33970 74 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74  t that value int
33980 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  o register P3..*
33990 2a 20 4f 72 2c 20 69 66 20 52 6f 77 53 65 74 20  * Or, if RowSet 
339a0 6f 62 6a 65 63 74 20 50 31 20 69 73 20 69 6e 69  object P1 is ini
339b0 74 69 61 6c 6c 79 20 65 6d 70 74 79 2c 20 6c 65  tially empty, le
339c0 61 76 65 20 50 33 0a 2a 2a 20 75 6e 63 68 61 6e  ave P3.** unchan
339d0 67 65 64 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20  ged and jump to 
339e0 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a  instruction P2..
339f0 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65  */.case OP_RowSe
33a00 74 52 65 61 64 3a 20 7b 20 20 20 20 20 20 20 2f  tRead: {       /
33a10 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 6f 75 74  * jump, in1, out
33a20 33 20 2a 2f 0a 20 20 69 36 34 20 76 61 6c 3b 0a  3 */.  i64 val;.
33a30 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
33a40 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
33a50 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  rt( (pIn1->flags
33a60 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20   & MEM_Blob)==0 
33a70 7c 7c 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  || sqlite3VdbeMe
33a80 6d 49 73 52 6f 77 53 65 74 28 70 49 6e 31 29 20  mIsRowSet(pIn1) 
33a90 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
33aa0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62  flags & MEM_Blob
33ab0 29 3d 3d 30 20 0a 20 20 20 7c 7c 20 73 71 6c 69  )==0 .   || sqli
33ac0 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28 28 52  te3RowSetNext((R
33ad0 6f 77 53 65 74 2a 29 70 49 6e 31 2d 3e 7a 2c 20  owSet*)pIn1->z, 
33ae0 26 76 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20 20  &val)==0.  ){.  
33af0 20 20 2f 2a 20 54 68 65 20 62 6f 6f 6c 65 61 6e    /* The boolean
33b00 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20   index is empty 
33b10 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  */.    sqlite3Vd
33b20 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e  beMemSetNull(pIn
33b30 31 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e  1);.    VdbeBran
33b40 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a 20 20  chTaken(1,2);.  
33b50 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
33b60 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f  2_and_check_for_
33b70 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d 65 6c  interrupt;.  }el
33b80 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20 76 61 6c  se{.    /* A val
33b90 75 65 20 77 61 73 20 70 75 6c 6c 65 64 20 66 72  ue was pulled fr
33ba0 6f 6d 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a  om the index */.
33bb0 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
33bc0 6b 65 6e 28 30 2c 32 29 3b 0a 20 20 20 20 73 71  ken(0,2);.    sq
33bd0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49  lite3VdbeMemSetI
33be0 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  nt64(&aMem[pOp->
33bf0 70 33 5d 2c 20 76 61 6c 29 3b 0a 20 20 7d 0a 20  p3], val);.  }. 
33c00 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f   goto check_for_
33c10 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a  interrupt;.}../*
33c20 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 54   Opcode: RowSetT
33c30 65 73 74 20 50 31 20 50 32 20 50 33 20 50 34 0a  est P1 P2 P3 P4.
33c40 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
33c50 72 5b 50 33 5d 20 69 6e 20 72 6f 77 73 65 74 28  r[P3] in rowset(
33c60 50 31 29 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  P1) goto P2.**.*
33c70 2a 20 52 65 67 69 73 74 65 72 20 50 33 20 69 73  * Register P3 is
33c80 20 61 73 73 75 6d 65 64 20 74 6f 20 68 6f 6c 64   assumed to hold
33c90 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65   a 64-bit intege
33ca0 72 20 76 61 6c 75 65 2e 20 49 66 20 72 65 67 69  r value. If regi
33cb0 73 74 65 72 20 50 31 0a 2a 2a 20 63 6f 6e 74 61  ster P1.** conta
33cc0 69 6e 73 20 61 20 52 6f 77 53 65 74 20 6f 62 6a  ins a RowSet obj
33cd0 65 63 74 20 61 6e 64 20 74 68 61 74 20 52 6f 77  ect and that Row
33ce0 53 65 74 20 6f 62 6a 65 63 74 20 63 6f 6e 74 61  Set object conta
33cf0 69 6e 73 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  ins.** the value
33d00 20 68 65 6c 64 20 69 6e 20 50 33 2c 20 6a 75 6d   held in P3, jum
33d10 70 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  p to register P2
33d20 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 6e 73  . Otherwise, ins
33d30 65 72 74 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67  ert the.** integ
33d40 65 72 20 69 6e 20 50 33 20 69 6e 74 6f 20 74 68  er in P3 into th
33d50 65 20 52 6f 77 53 65 74 20 61 6e 64 20 63 6f 6e  e RowSet and con
33d60 74 69 6e 75 65 20 6f 6e 20 74 6f 20 74 68 65 0a  tinue on to the.
33d70 2a 2a 20 6e 65 78 74 20 6f 70 63 6f 64 65 2e 0a  ** next opcode..
33d80 2a 2a 0a 2a 2a 20 54 68 65 20 52 6f 77 53 65 74  **.** The RowSet
33d90 20 6f 62 6a 65 63 74 20 69 73 20 6f 70 74 69 6d   object is optim
33da0 69 7a 65 64 20 66 6f 72 20 74 68 65 20 63 61 73  ized for the cas
33db0 65 20 77 68 65 72 65 20 73 65 74 73 20 6f 66 20  e where sets of 
33dc0 69 6e 74 65 67 65 72 73 0a 2a 2a 20 61 72 65 20  integers.** are 
33dd0 69 6e 73 65 72 74 65 64 20 69 6e 20 64 69 73 74  inserted in dist
33de0 69 6e 63 74 20 70 68 61 73 65 73 2c 20 77 68 69  inct phases, whi
33df0 63 68 20 65 61 63 68 20 73 65 74 20 63 6f 6e 74  ch each set cont
33e00 61 69 6e 73 20 6e 6f 20 64 75 70 6c 69 63 61 74  ains no duplicat
33e10 65 73 2e 0a 2a 2a 20 45 61 63 68 20 73 65 74 20  es..** Each set 
33e20 69 73 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  is identified by
33e30 20 61 20 75 6e 69 71 75 65 20 50 34 20 76 61 6c   a unique P4 val
33e40 75 65 2e 20 54 68 65 20 66 69 72 73 74 20 73 65  ue. The first se
33e50 74 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65 20 50  t.** must have P
33e60 34 3d 3d 30 2c 20 74 68 65 20 66 69 6e 61 6c 20  4==0, the final 
33e70 73 65 74 20 6d 75 73 74 20 68 61 76 65 20 50 34  set must have P4
33e80 3d 3d 2d 31 2c 20 61 6e 64 20 66 6f 72 20 61 6c  ==-1, and for al
33e90 6c 20 6f 74 68 65 72 20 73 65 74 73 0a 2a 2a 20  l other sets.** 
33ea0 6d 75 73 74 20 68 61 76 65 20 50 34 3e 30 2e 0a  must have P4>0..
33eb0 2a 2a 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77  **.** This allow
33ec0 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 3a  s optimizations:
33ed0 20 28 61 29 20 77 68 65 6e 20 50 34 3d 3d 30 20   (a) when P4==0 
33ee0 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64  there is no need
33ef0 20 74 6f 20 74 65 73 74 0a 2a 2a 20 74 68 65 20   to test.** the 
33f00 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 66 6f  RowSet object fo
33f10 72 20 50 33 2c 20 61 73 20 69 74 20 69 73 20 67  r P3, as it is g
33f20 75 61 72 61 6e 74 65 65 64 20 6e 6f 74 20 74 6f  uaranteed not to
33f30 20 63 6f 6e 74 61 69 6e 20 69 74 2c 0a 2a 2a 20   contain it,.** 
33f40 28 62 29 20 77 68 65 6e 20 50 34 3d 3d 2d 31 20  (b) when P4==-1 
33f50 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64  there is no need
33f60 20 74 6f 20 69 6e 73 65 72 74 20 74 68 65 20 76   to insert the v
33f70 61 6c 75 65 2c 20 61 73 20 69 74 20 77 69 6c 6c  alue, as it will
33f80 0a 2a 2a 20 6e 65 76 65 72 20 62 65 20 74 65 73  .** never be tes
33f90 74 65 64 20 66 6f 72 2c 20 61 6e 64 20 28 63 29  ted for, and (c)
33fa0 20 77 68 65 6e 20 61 20 76 61 6c 75 65 20 74 68   when a value th
33fb0 61 74 20 69 73 20 70 61 72 74 20 6f 66 20 73 65  at is part of se
33fc0 74 20 58 20 69 73 0a 2a 2a 20 69 6e 73 65 72 74  t X is.** insert
33fd0 65 64 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20  ed, there is no 
33fe0 6e 65 65 64 20 74 6f 20 73 65 61 72 63 68 20 74  need to search t
33ff0 6f 20 73 65 65 20 69 66 20 74 68 65 20 73 61 6d  o see if the sam
34000 65 20 76 61 6c 75 65 20 77 61 73 0a 2a 2a 20 70  e value was.** p
34010 72 65 76 69 6f 75 73 6c 79 20 69 6e 73 65 72 74  reviously insert
34020 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 73 65  ed as part of se
34030 74 20 58 20 28 6f 6e 6c 79 20 69 66 20 69 74 20  t X (only if it 
34040 77 61 73 20 70 72 65 76 69 6f 75 73 6c 79 0a 2a  was previously.*
34050 2a 20 69 6e 73 65 72 74 65 64 20 61 73 20 70 61  * inserted as pa
34060 72 74 20 6f 66 20 73 6f 6d 65 20 6f 74 68 65 72  rt of some other
34070 20 73 65 74 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f   set)..*/.case O
34080 50 5f 52 6f 77 53 65 74 54 65 73 74 3a 20 7b 20  P_RowSetTest: { 
34090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
340a0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
340b0 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69  , in3 */.  int i
340c0 53 65 74 3b 0a 20 20 69 6e 74 20 65 78 69 73 74  Set;.  int exist
340d0 73 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  s;..  pIn1 = &aM
340e0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
340f0 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
34100 3e 70 33 5d 3b 0a 20 20 69 53 65 74 20 3d 20 70  >p3];.  iSet = p
34110 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 61 73 73 65  Op->p4.i;.  asse
34120 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 26  rt( pIn3->flags&
34130 4d 45 4d 5f 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a  MEM_Int );..  /*
34140 20 49 66 20 74 68 65 72 65 20 69 73 20 61 6e 79   If there is any
34150 74 68 69 6e 67 20 6f 74 68 65 72 20 74 68 61 6e  thing other than
34160 20 61 20 72 6f 77 73 65 74 20 6f 62 6a 65 63 74   a rowset object
34170 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20   in memory cell 
34180 50 31 2c 0a 20 20 2a 2a 20 64 65 6c 65 74 65 20  P1,.  ** delete 
34190 69 74 20 6e 6f 77 20 61 6e 64 20 69 6e 69 74 69  it now and initi
341a0 61 6c 69 7a 65 20 50 31 20 77 69 74 68 20 61 6e  alize P1 with an
341b0 20 65 6d 70 74 79 20 72 6f 77 73 65 74 0a 20 20   empty rowset.  
341c0 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  */.  if( (pIn1->
341d0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62  flags & MEM_Blob
341e0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  )==0 ){.    if( 
341f0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
34200 74 52 6f 77 53 65 74 28 70 49 6e 31 29 20 29 20  tRowSet(pIn1) ) 
34210 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
34220 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
34230 65 33 56 64 62 65 4d 65 6d 49 73 52 6f 77 53 65  e3VdbeMemIsRowSe
34240 74 28 70 49 6e 31 29 20 29 3b 0a 20 20 61 73 73  t(pIn1) );.  ass
34250 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
34260 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
34270 61 73 73 65 72 74 28 20 69 53 65 74 3d 3d 2d 31  assert( iSet==-1
34280 20 7c 7c 20 69 53 65 74 3e 3d 30 20 29 3b 0a 20   || iSet>=0 );. 
34290 20 69 66 28 20 69 53 65 74 20 29 7b 0a 20 20 20   if( iSet ){.   
342a0 20 65 78 69 73 74 73 20 3d 20 73 71 6c 69 74 65   exists = sqlite
342b0 33 52 6f 77 53 65 74 54 65 73 74 28 28 52 6f 77  3RowSetTest((Row
342c0 53 65 74 2a 29 70 49 6e 31 2d 3e 7a 2c 20 69 53  Set*)pIn1->z, iS
342d0 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a  et, pIn3->u.i);.
342e0 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
342f0 6b 65 6e 28 65 78 69 73 74 73 21 3d 30 2c 32 29  ken(exists!=0,2)
34300 3b 0a 20 20 20 20 69 66 28 20 65 78 69 73 74 73  ;.    if( exists
34310 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
34320 70 32 3b 0a 20 20 7d 0a 20 20 69 66 28 20 69 53  p2;.  }.  if( iS
34330 65 74 3e 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  et>=0 ){.    sql
34340 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74  ite3RowSetInsert
34350 28 28 52 6f 77 53 65 74 2a 29 70 49 6e 31 2d 3e  ((RowSet*)pIn1->
34360 7a 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20  z, pIn3->u.i);. 
34370 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a   }.  break;.}...
34380 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
34390 4d 49 54 5f 54 52 49 47 47 45 52 0a 0a 2f 2a 20  MIT_TRIGGER../* 
343a0 4f 70 63 6f 64 65 3a 20 50 72 6f 67 72 61 6d 20  Opcode: Program 
343b0 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
343c0 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65  *.** Execute the
343d0 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
343e0 20 70 61 73 73 65 64 20 61 73 20 50 34 20 28 74   passed as P4 (t
343f0 79 70 65 20 50 34 5f 53 55 42 50 52 4f 47 52 41  ype P4_SUBPROGRA
34400 4d 29 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 63 6f  M). .**.** P1 co
34410 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65  ntains the addre
34420 73 73 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79  ss of the memory
34430 20 63 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61   cell that conta
34440 69 6e 73 20 74 68 65 20 66 69 72 73 74 20 6d 65  ins the first me
34450 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 69 6e  mory .** cell in
34460 20 61 6e 20 61 72 72 61 79 20 6f 66 20 76 61 6c   an array of val
34470 75 65 73 20 75 73 65 64 20 61 73 20 61 72 67 75  ues used as argu
34480 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 73 75 62  ments to the sub
34490 2d 70 72 6f 67 72 61 6d 2e 20 50 32 20 0a 2a 2a  -program. P2 .**
344a0 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64   contains the ad
344b0 64 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f  dress to jump to
344c0 20 69 66 20 74 68 65 20 73 75 62 2d 70 72 6f 67   if the sub-prog
344d0 72 61 6d 20 74 68 72 6f 77 73 20 61 6e 20 49 47  ram throws an IG
344e0 4e 4f 52 45 20 0a 2a 2a 20 65 78 63 65 70 74 69  NORE .** excepti
344f0 6f 6e 20 75 73 69 6e 67 20 74 68 65 20 52 41 49  on using the RAI
34500 53 45 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 52  SE() function. R
34510 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61  egister P3 conta
34520 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20  ins the address 
34530 0a 2a 2a 20 6f 66 20 61 20 6d 65 6d 6f 72 79 20  .** of a memory 
34540 63 65 6c 6c 20 69 6e 20 74 68 69 73 20 28 74 68  cell in this (th
34550 65 20 70 61 72 65 6e 74 29 20 56 4d 20 74 68 61  e parent) VM tha
34560 74 20 69 73 20 75 73 65 64 20 74 6f 20 61 6c 6c  t is used to all
34570 6f 63 61 74 65 20 74 68 65 20 0a 2a 2a 20 6d 65  ocate the .** me
34580 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 62 79  mory required by
34590 20 74 68 65 20 73 75 62 2d 76 64 62 65 20 61 74   the sub-vdbe at
345a0 20 72 75 6e 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20   runtime..**.** 
345b0 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
345c0 74 6f 20 74 68 65 20 56 4d 20 63 6f 6e 74 61 69  to the VM contai
345d0 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72  ning the trigger
345e0 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20   program..**.** 
345f0 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P5 is non-zer
34600 6f 2c 20 74 68 65 6e 20 72 65 63 75 72 73 69 76  o, then recursiv
34610 65 20 70 72 6f 67 72 61 6d 20 69 6e 76 6f 63 61  e program invoca
34620 74 69 6f 6e 20 69 73 20 65 6e 61 62 6c 65 64 2e  tion is enabled.
34630 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 6f 67  .*/.case OP_Prog
34640 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ram: {        /*
34650 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e   jump */.  int n
34660 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
34670 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
34680 6d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73  memory registers
34690 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d   for sub-program
346a0 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b   */.  int nByte;
346b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
346c0 20 42 79 74 65 73 20 6f 66 20 72 75 6e 74 69 6d   Bytes of runtim
346d0 65 20 73 70 61 63 65 20 72 65 71 75 69 72 65 64  e space required
346e0 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d   for sub-program
346f0 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 74 3b 20   */.  Mem *pRt; 
34700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
34710 20 52 65 67 69 73 74 65 72 20 74 6f 20 61 6c 6c   Register to all
34720 6f 63 61 74 65 20 72 75 6e 74 69 6d 65 20 73 70  ocate runtime sp
34730 61 63 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d  ace */.  Mem *pM
34740 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
34750 20 2f 2a 20 55 73 65 64 20 74 6f 20 69 74 65 72   /* Used to iter
34760 61 74 65 20 74 68 72 6f 75 67 68 20 6d 65 6d 6f  ate through memo
34770 72 79 20 63 65 6c 6c 73 20 2a 2f 0a 20 20 4d 65  ry cells */.  Me
34780 6d 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20  m *pEnd;        
34790 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 6d 65        /* Last me
347a0 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 6e 65 77  mory cell in new
347b0 20 61 72 72 61 79 20 2a 2f 0a 20 20 56 64 62 65   array */.  Vdbe
347c0 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20  Frame *pFrame;  
347d0 20 20 20 20 2f 2a 20 4e 65 77 20 76 64 62 65 20      /* New vdbe 
347e0 66 72 61 6d 65 20 74 6f 20 65 78 65 63 75 74 65  frame to execute
347f0 20 69 6e 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67   in */.  SubProg
34800 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20  ram *pProgram;  
34810 20 2f 2a 20 53 75 62 2d 70 72 6f 67 72 61 6d 20   /* Sub-program 
34820 74 6f 20 65 78 65 63 75 74 65 20 2a 2f 0a 20 20  to execute */.  
34830 76 6f 69 64 20 2a 74 3b 20 20 20 20 20 20 20 20  void *t;        
34840 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e          /* Token
34850 20 69 64 65 6e 74 69 66 79 69 6e 67 20 74 72 69   identifying tri
34860 67 67 65 72 20 2a 2f 0a 0a 20 20 70 50 72 6f 67  gger */..  pProg
34870 72 61 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 50  ram = pOp->p4.pP
34880 72 6f 67 72 61 6d 3b 0a 20 20 70 52 74 20 3d 20  rogram;.  pRt = 
34890 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
348a0 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72    assert( pProgr
348b0 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20 0a  am->nOp>0 );.  .
348c0 20 20 2f 2a 20 49 66 20 74 68 65 20 70 35 20 66    /* If the p5 f
348d0 6c 61 67 20 69 73 20 63 6c 65 61 72 2c 20 74 68  lag is clear, th
348e0 65 6e 20 72 65 63 75 72 73 69 76 65 20 69 6e 76  en recursive inv
348f0 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67  ocation of trigg
34900 65 72 73 20 69 73 20 0a 20 20 2a 2a 20 64 69 73  ers is .  ** dis
34910 61 62 6c 65 64 20 66 6f 72 20 62 61 63 6b 77 61  abled for backwa
34920 72 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74  rds compatibilit
34930 79 20 28 70 35 20 69 73 20 73 65 74 20 69 66 20  y (p5 is set if 
34940 74 68 69 73 20 73 75 62 2d 70 72 6f 67 72 61 6d  this sub-program
34950 0a 20 20 2a 2a 20 69 73 20 72 65 61 6c 6c 79 20  .  ** is really 
34960 61 20 74 72 69 67 67 65 72 2c 20 6e 6f 74 20 61  a trigger, not a
34970 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 61 63 74   foreign key act
34980 69 6f 6e 2c 20 61 6e 64 20 74 68 65 20 66 6c 61  ion, and the fla
34990 67 20 73 65 74 0a 20 20 2a 2a 20 61 6e 64 20 63  g set.  ** and c
349a0 6c 65 61 72 65 64 20 62 79 20 74 68 65 20 22 50  leared by the "P
349b0 52 41 47 4d 41 20 72 65 63 75 72 73 69 76 65 5f  RAGMA recursive_
349c0 74 72 69 67 67 65 72 73 22 20 63 6f 6d 6d 61 6e  triggers" comman
349d0 64 20 69 73 20 63 6c 65 61 72 29 2e 0a 20 20 2a  d is clear)..  *
349e0 2a 20 0a 20 20 2a 2a 20 49 74 20 69 73 20 72 65  * .  ** It is re
349f0 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69  cursive invocati
34a00 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73 2c 20  on of triggers, 
34a10 61 74 20 74 68 65 20 53 51 4c 20 6c 65 76 65 6c  at the SQL level
34a20 2c 20 74 68 61 74 20 69 73 20 0a 20 20 2a 2a 20  , that is .  ** 
34a30 64 69 73 61 62 6c 65 64 2e 20 49 6e 20 73 6f 6d  disabled. In som
34a40 65 20 63 61 73 65 73 20 61 20 73 69 6e 67 6c 65  e cases a single
34a50 20 74 72 69 67 67 65 72 20 6d 61 79 20 67 65 6e   trigger may gen
34a60 65 72 61 74 65 20 6d 6f 72 65 20 74 68 61 6e 20  erate more than 
34a70 6f 6e 65 20 0a 20 20 2a 2a 20 53 75 62 50 72 6f  one .  ** SubPro
34a80 67 72 61 6d 20 28 69 66 20 74 68 65 20 74 72 69  gram (if the tri
34a90 67 67 65 72 20 6d 61 79 20 62 65 20 65 78 65 63  gger may be exec
34aa0 75 74 65 64 20 77 69 74 68 20 6d 6f 72 65 20 74  uted with more t
34ab0 68 61 6e 20 6f 6e 65 20 64 69 66 66 65 72 65 6e  han one differen
34ac0 74 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46 4c  t .  ** ON CONFL
34ad0 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 29 2e 20  ICT algorithm). 
34ae0 53 75 62 50 72 6f 67 72 61 6d 20 73 74 72 75 63  SubProgram struc
34af0 74 75 72 65 73 20 61 73 73 6f 63 69 61 74 65 64  tures associated
34b00 20 77 69 74 68 20 61 0a 20 20 2a 2a 20 73 69 6e   with a.  ** sin
34b10 67 6c 65 20 74 72 69 67 67 65 72 20 61 6c 6c 20  gle trigger all 
34b20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 76 61  have the same va
34b30 6c 75 65 20 66 6f 72 20 74 68 65 20 53 75 62 50  lue for the SubP
34b40 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20 20  rogram.token .  
34b50 2a 2a 20 76 61 72 69 61 62 6c 65 2e 20 20 2a 2f  ** variable.  */
34b60 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29  .  if( pOp->p5 )
34b70 7b 0a 20 20 20 20 74 20 3d 20 70 50 72 6f 67 72  {.    t = pProgr
34b80 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 66  am->token;.    f
34b90 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72  or(pFrame=p->pFr
34ba0 61 6d 65 3b 20 70 46 72 61 6d 65 20 26 26 20 70  ame; pFrame && p
34bb0 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74 3b  Frame->token!=t;
34bc0 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e   pFrame=pFrame->
34bd0 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 69 66  pParent);.    if
34be0 28 20 70 46 72 61 6d 65 20 29 20 62 72 65 61 6b  ( pFrame ) break
34bf0 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 2d 3e  ;.  }..  if( p->
34c00 6e 46 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69 6d  nFrame>=db->aLim
34c10 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
34c20 54 52 49 47 47 45 52 5f 44 45 50 54 48 5d 20 29  TRIGGER_DEPTH] )
34c30 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
34c40 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c  E_ERROR;.    sql
34c50 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
34c60 20 22 74 6f 6f 20 6d 61 6e 79 20 6c 65 76 65 6c   "too many level
34c70 73 20 6f 66 20 74 72 69 67 67 65 72 20 72 65 63  s of trigger rec
34c80 75 72 73 69 6f 6e 22 29 3b 0a 20 20 20 20 67 6f  ursion");.    go
34c90 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
34ca0 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  error;.  }..  /*
34cb0 20 52 65 67 69 73 74 65 72 20 70 52 74 20 69 73   Register pRt is
34cc0 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
34cd0 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72  he memory requir
34ce0 65 64 20 74 6f 20 73 61 76 65 20 74 68 65 20 73  ed to save the s
34cf0 74 61 74 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65  tate.  ** of the
34d00 20 63 75 72 72 65 6e 74 20 70 72 6f 67 72 61 6d   current program
34d10 2c 20 61 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79  , and the memory
34d20 20 72 65 71 75 69 72 65 64 20 61 74 20 72 75 6e   required at run
34d30 74 69 6d 65 20 74 6f 20 65 78 65 63 75 74 65 0a  time to execute.
34d40 20 20 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72    ** the trigger
34d50 20 70 72 6f 67 72 61 6d 2e 20 49 66 20 74 68 69   program. If thi
34d60 73 20 74 72 69 67 67 65 72 20 68 61 73 20 62 65  s trigger has be
34d70 65 6e 20 66 69 72 65 64 20 62 65 66 6f 72 65 2c  en fired before,
34d80 20 74 68 65 6e 20 70 52 74 20 0a 20 20 2a 2a 20   then pRt .  ** 
34d90 69 73 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63  is already alloc
34da0 61 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c  ated. Otherwise,
34db0 20 69 74 20 6d 75 73 74 20 62 65 20 69 6e 69 74   it must be init
34dc0 69 61 6c 69 7a 65 64 2e 20 20 2a 2f 0a 20 20 69  ialized.  */.  i
34dd0 66 28 20 28 70 52 74 2d 3e 66 6c 61 67 73 26 4d  f( (pRt->flags&M
34de0 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29 7b 0a 20  EM_Blob)==0 ){. 
34df0 20 20 20 2f 2a 20 53 75 62 50 72 6f 67 72 61 6d     /* SubProgram
34e00 2e 6e 4d 65 6d 20 69 73 20 73 65 74 20 74 6f 20  .nMem is set to 
34e10 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65  the number of me
34e20 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20  mory cells used 
34e30 62 79 20 74 68 65 20 0a 20 20 20 20 2a 2a 20 70  by the .    ** p
34e40 72 6f 67 72 61 6d 20 73 74 6f 72 65 64 20 69 6e  rogram stored in
34e50 20 53 75 62 50 72 6f 67 72 61 6d 2e 61 4f 70 2e   SubProgram.aOp.
34e60 20 41 73 20 77 65 6c 6c 20 61 73 20 74 68 65 73   As well as thes
34e70 65 2c 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20 20  e, one memory.  
34e80 20 20 2a 2a 20 63 65 6c 6c 20 69 73 20 72 65 71    ** cell is req
34e90 75 69 72 65 64 20 66 6f 72 20 65 61 63 68 20 63  uired for each c
34ea0 75 72 73 6f 72 20 75 73 65 64 20 62 79 20 74 68  ursor used by th
34eb0 65 20 70 72 6f 67 72 61 6d 2e 20 53 65 74 20 6c  e program. Set l
34ec0 6f 63 61 6c 0a 20 20 20 20 2a 2a 20 76 61 72 69  ocal.    ** vari
34ed0 61 62 6c 65 20 6e 4d 65 6d 20 28 61 6e 64 20 6c  able nMem (and l
34ee0 61 74 65 72 2c 20 56 64 62 65 46 72 61 6d 65 2e  ater, VdbeFrame.
34ef0 6e 43 68 69 6c 64 4d 65 6d 29 20 74 6f 20 74 68  nChildMem) to th
34f00 69 73 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f  is value..    */
34f10 0a 20 20 20 20 6e 4d 65 6d 20 3d 20 70 50 72 6f  .    nMem = pPro
34f20 67 72 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72  gram->nMem + pPr
34f30 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20  ogram->nCsr;.   
34f40 20 61 73 73 65 72 74 28 20 6e 4d 65 6d 3e 30 20   assert( nMem>0 
34f50 29 3b 0a 20 20 20 20 69 66 28 20 70 50 72 6f 67  );.    if( pProg
34f60 72 61 6d 2d 3e 6e 43 73 72 3d 3d 30 20 29 20 6e  ram->nCsr==0 ) n
34f70 4d 65 6d 2b 2b 3b 0a 20 20 20 20 6e 42 79 74 65  Mem++;.    nByte
34f80 20 3d 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66   = ROUND8(sizeof
34f90 28 56 64 62 65 46 72 61 6d 65 29 29 0a 20 20 20  (VdbeFrame)).   
34fa0 20 20 20 20 20 20 20 20 20 20 20 2b 20 6e 4d 65             + nMe
34fb0 6d 20 2a 20 73 69 7a 65 6f 66 28 4d 65 6d 29 0a  m * sizeof(Mem).
34fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20                + 
34fd0 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 20 2a  pProgram->nCsr *
34fe0 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73   sizeof(VdbeCurs
34ff0 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20 20 20  or*).           
35000 20 20 20 2b 20 28 70 50 72 6f 67 72 61 6d 2d 3e     + (pProgram->
35010 6e 4f 70 20 2b 20 37 29 2f 38 3b 0a 20 20 20 20  nOp + 7)/8;.    
35020 70 46 72 61 6d 65 20 3d 20 73 71 6c 69 74 65 33  pFrame = sqlite3
35030 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c  DbMallocZero(db,
35040 20 6e 42 79 74 65 29 3b 0a 20 20 20 20 69 66 28   nByte);.    if(
35050 20 21 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20   !pFrame ){.    
35060 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
35070 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
35080 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70  VdbeMemRelease(p
35090 52 74 29 3b 0a 20 20 20 20 70 52 74 2d 3e 66 6c  Rt);.    pRt->fl
350a0 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 7c 4d  ags = MEM_Blob|M
350b0 45 4d 5f 44 79 6e 3b 0a 20 20 20 20 70 52 74 2d  EM_Dyn;.    pRt-
350c0 3e 7a 20 3d 20 28 63 68 61 72 2a 29 70 46 72 61  >z = (char*)pFra
350d0 6d 65 3b 0a 20 20 20 20 70 52 74 2d 3e 6e 20 3d  me;.    pRt->n =
350e0 20 6e 42 79 74 65 3b 0a 20 20 20 20 70 52 74 2d   nByte;.    pRt-
350f0 3e 78 44 65 6c 20 3d 20 73 71 6c 69 74 65 33 56  >xDel = sqlite3V
35100 64 62 65 46 72 61 6d 65 4d 65 6d 44 65 6c 3b 0a  dbeFrameMemDel;.
35110 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 76 20 3d  .    pFrame->v =
35120 20 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e   p;.    pFrame->
35130 6e 43 68 69 6c 64 4d 65 6d 20 3d 20 6e 4d 65 6d  nChildMem = nMem
35140 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43  ;.    pFrame->nC
35150 68 69 6c 64 43 73 72 20 3d 20 70 50 72 6f 67 72  hildCsr = pProgr
35160 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 70 46  am->nCsr;.    pF
35170 72 61 6d 65 2d 3e 70 63 20 3d 20 28 69 6e 74 29  rame->pc = (int)
35180 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20  (pOp - aOp);.   
35190 20 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d 20   pFrame->aMem = 
351a0 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 46 72  p->aMem;.    pFr
351b0 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e 6e  ame->nMem = p->n
351c0 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  Mem;.    pFrame-
351d0 3e 61 70 43 73 72 20 3d 20 70 2d 3e 61 70 43 73  >apCsr = p->apCs
351e0 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e  r;.    pFrame->n
351f0 43 75 72 73 6f 72 20 3d 20 70 2d 3e 6e 43 75 72  Cursor = p->nCur
35200 73 6f 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  sor;.    pFrame-
35210 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20  >aOp = p->aOp;. 
35220 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 70 20 3d     pFrame->nOp =
35230 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70 46 72   p->nOp;.    pFr
35240 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50 72  ame->token = pPr
35250 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 23 69  ogram->token;.#i
35260 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
35270 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54  LE_STMT_SCANSTAT
35280 55 53 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61  US.    pFrame->a
35290 6e 45 78 65 63 20 3d 20 70 2d 3e 61 6e 45 78 65  nExec = p->anExe
352a0 63 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  c;.#endif.#ifdef
352b0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
352c0 20 20 70 46 72 61 6d 65 2d 3e 69 46 72 61 6d 65    pFrame->iFrame
352d0 4d 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 46  Magic = SQLITE_F
352e0 52 41 4d 45 5f 4d 41 47 49 43 3b 0a 23 65 6e 64  RAME_MAGIC;.#end
352f0 69 66 0a 0a 20 20 20 20 70 45 6e 64 20 3d 20 26  if..    pEnd = &
35300 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72  VdbeFrameMem(pFr
35310 61 6d 65 29 5b 70 46 72 61 6d 65 2d 3e 6e 43 68  ame)[pFrame->nCh
35320 69 6c 64 4d 65 6d 5d 3b 0a 20 20 20 20 66 6f 72  ildMem];.    for
35330 28 70 4d 65 6d 3d 56 64 62 65 46 72 61 6d 65 4d  (pMem=VdbeFrameM
35340 65 6d 28 70 46 72 61 6d 65 29 3b 20 70 4d 65 6d  em(pFrame); pMem
35350 21 3d 70 45 6e 64 3b 20 70 4d 65 6d 2b 2b 29 7b  !=pEnd; pMem++){
35360 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61  .      pMem->fla
35370 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e  gs = MEM_Undefin
35380 65 64 3b 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e  ed;.      pMem->
35390 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 7d 0a 20  db = db;.    }. 
353a0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 46 72 61   }else{.    pFra
353b0 6d 65 20 3d 20 28 56 64 62 65 46 72 61 6d 65 2a  me = (VdbeFrame*
353c0 29 70 52 74 2d 3e 7a 3b 0a 20 20 20 20 61 73 73  )pRt->z;.    ass
353d0 65 72 74 28 20 70 52 74 2d 3e 78 44 65 6c 3d 3d  ert( pRt->xDel==
353e0 73 71 6c 69 74 65 33 56 64 62 65 46 72 61 6d 65  sqlite3VdbeFrame
353f0 4d 65 6d 44 65 6c 20 29 3b 0a 20 20 20 20 61 73  MemDel );.    as
35400 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e  sert( pProgram->
35410 6e 4d 65 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e  nMem+pProgram->n
35420 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68  Csr==pFrame->nCh
35430 69 6c 64 4d 65 6d 20 0a 20 20 20 20 20 20 20 20  ildMem .        
35440 7c 7c 20 28 70 50 72 6f 67 72 61 6d 2d 3e 6e 43  || (pProgram->nC
35450 73 72 3d 3d 30 20 26 26 20 70 50 72 6f 67 72 61  sr==0 && pProgra
35460 6d 2d 3e 6e 4d 65 6d 2b 31 3d 3d 70 46 72 61 6d  m->nMem+1==pFram
35470 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 29 20 29 3b  e->nChildMem) );
35480 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 50 72  .    assert( pPr
35490 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72  ogram->nCsr==pFr
354a0 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 29  ame->nChildCsr )
354b0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 69  ;.    assert( (i
354c0 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3d 3d  nt)(pOp - aOp)==
354d0 70 46 72 61 6d 65 2d 3e 70 63 20 29 3b 0a 20 20  pFrame->pc );.  
354e0 7d 0a 0a 20 20 70 2d 3e 6e 46 72 61 6d 65 2b 2b  }..  p->nFrame++
354f0 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70 50 61 72  ;.  pFrame->pPar
35500 65 6e 74 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b  ent = p->pFrame;
35510 0a 20 20 70 46 72 61 6d 65 2d 3e 6c 61 73 74 52  .  pFrame->lastR
35520 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52  owid = db->lastR
35530 6f 77 69 64 3b 0a 20 20 70 46 72 61 6d 65 2d 3e  owid;.  pFrame->
35540 6e 43 68 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68  nChange = p->nCh
35550 61 6e 67 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e  ange;.  pFrame->
35560 6e 44 62 43 68 61 6e 67 65 20 3d 20 70 2d 3e 64  nDbChange = p->d
35570 62 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 61 73  b->nChange;.  as
35580 73 65 72 74 28 20 70 46 72 61 6d 65 2d 3e 70 41  sert( pFrame->pA
35590 75 78 44 61 74 61 3d 3d 30 20 29 3b 0a 20 20 70  uxData==0 );.  p
355a0 46 72 61 6d 65 2d 3e 70 41 75 78 44 61 74 61 20  Frame->pAuxData 
355b0 3d 20 70 2d 3e 70 41 75 78 44 61 74 61 3b 0a 20  = p->pAuxData;. 
355c0 20 70 2d 3e 70 41 75 78 44 61 74 61 20 3d 20 30   p->pAuxData = 0
355d0 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d  ;.  p->nChange =
355e0 20 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d 65 20   0;.  p->pFrame 
355f0 3d 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d 3e 61  = pFrame;.  p->a
35600 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d 20 56 64 62  Mem = aMem = Vdb
35610 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65  eFrameMem(pFrame
35620 29 3b 0a 20 20 70 2d 3e 6e 4d 65 6d 20 3d 20 70  );.  p->nMem = p
35630 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d  Frame->nChildMem
35640 3b 0a 20 20 70 2d 3e 6e 43 75 72 73 6f 72 20 3d  ;.  p->nCursor =
35650 20 28 75 31 36 29 70 46 72 61 6d 65 2d 3e 6e 43   (u16)pFrame->nC
35660 68 69 6c 64 43 73 72 3b 0a 20 20 70 2d 3e 61 70  hildCsr;.  p->ap
35670 43 73 72 20 3d 20 28 56 64 62 65 43 75 72 73 6f  Csr = (VdbeCurso
35680 72 20 2a 2a 29 26 61 4d 65 6d 5b 70 2d 3e 6e 4d  r **)&aMem[p->nM
35690 65 6d 5d 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 61  em];.  pFrame->a
356a0 4f 6e 63 65 20 3d 20 28 75 38 2a 29 26 70 2d 3e  Once = (u8*)&p->
356b0 61 70 43 73 72 5b 70 50 72 6f 67 72 61 6d 2d 3e  apCsr[pProgram->
356c0 6e 43 73 72 5d 3b 0a 20 20 6d 65 6d 73 65 74 28  nCsr];.  memset(
356d0 70 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 2c 20 30  pFrame->aOnce, 0
356e0 2c 20 28 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70  , (pProgram->nOp
356f0 20 2b 20 37 29 2f 38 29 3b 0a 20 20 70 2d 3e 61   + 7)/8);.  p->a
35700 4f 70 20 3d 20 61 4f 70 20 3d 20 70 50 72 6f 67  Op = aOp = pProg
35710 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d 3e 6e  ram->aOp;.  p->n
35720 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  Op = pProgram->n
35730 4f 70 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  Op;.#ifdef SQLIT
35740 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43  E_ENABLE_STMT_SC
35750 41 4e 53 54 41 54 55 53 0a 20 20 70 2d 3e 61 6e  ANSTATUS.  p->an
35760 45 78 65 63 20 3d 20 30 3b 0a 23 65 6e 64 69 66  Exec = 0;.#endif
35770 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
35780 45 42 55 47 0a 20 20 2f 2a 20 56 65 72 69 66 79  EBUG.  /* Verify
35790 20 74 68 61 74 20 73 65 63 6f 6e 64 20 61 6e 64   that second and
357a0 20 73 75 62 73 65 71 75 65 6e 74 20 65 78 65 63   subsequent exec
357b0 75 74 69 6f 6e 73 20 6f 66 20 74 68 65 20 73 61  utions of the sa
357c0 6d 65 20 74 72 69 67 67 65 72 20 64 6f 20 6e 6f  me trigger do no
357d0 74 0a 20 20 2a 2a 20 74 72 79 20 74 6f 20 72 65  t.  ** try to re
357e0 75 73 65 20 72 65 67 69 73 74 65 72 20 76 61 6c  use register val
357f0 75 65 73 20 66 72 6f 6d 20 74 68 65 20 66 69 72  ues from the fir
35800 73 74 20 75 73 65 2e 20 2a 2f 0a 20 20 7b 0a 20  st use. */.  {. 
35810 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 66 6f     int i;.    fo
35820 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4d 65 6d  r(i=0; i<p->nMem
35830 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 4d  ; i++){.      aM
35840 65 6d 5b 69 5d 2e 70 53 63 6f 70 79 46 72 6f 6d  em[i].pScopyFrom
35850 20 3d 20 30 3b 20 20 2f 2a 20 50 72 65 76 65 6e   = 0;  /* Preven
35860 74 20 66 61 6c 73 65 2d 70 6f 73 69 74 69 76 65  t false-positive
35870 20 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 29   AboutToChange()
35880 20 65 72 72 73 20 2a 2f 0a 20 20 20 20 20 20 61   errs */.      a
35890 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 7c 3d 20  Mem[i].flags |= 
358a0 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 20 2f  MEM_Undefined; /
358b0 2a 20 43 61 75 73 65 20 61 20 66 61 75 6c 74 20  * Cause a fault 
358c0 69 66 20 74 68 69 73 20 72 65 67 20 69 73 20 72  if this reg is r
358d0 65 75 73 65 64 20 2a 2f 0a 20 20 20 20 7d 0a 20  eused */.    }. 
358e0 20 7d 0a 23 65 6e 64 69 66 0a 20 20 70 4f 70 20   }.#endif.  pOp 
358f0 3d 20 26 61 4f 70 5b 2d 31 5d 3b 0a 20 20 67 6f  = &aOp[-1];.  go
35900 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  to check_for_int
35910 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70  errupt;.}../* Op
35920 63 6f 64 65 3a 20 50 61 72 61 6d 20 50 31 20 50  code: Param P1 P
35930 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  2 * * *.**.** Th
35940 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c  is opcode is onl
35950 79 20 65 76 65 72 20 70 72 65 73 65 6e 74 20 69  y ever present i
35960 6e 20 73 75 62 2d 70 72 6f 67 72 61 6d 73 20 63  n sub-programs c
35970 61 6c 6c 65 64 20 76 69 61 20 74 68 65 20 0a 2a  alled via the .*
35980 2a 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73  * OP_Program ins
35990 74 72 75 63 74 69 6f 6e 2e 20 43 6f 70 79 20 61  truction. Copy a
359a0 20 76 61 6c 75 65 20 63 75 72 72 65 6e 74 6c 79   value currently
359b0 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6d 65 6d   stored in a mem
359c0 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66 20  ory .** cell of 
359d0 74 68 65 20 63 61 6c 6c 69 6e 67 20 28 70 61 72  the calling (par
359e0 65 6e 74 29 20 66 72 61 6d 65 20 74 6f 20 63 65  ent) frame to ce
359f0 6c 6c 20 50 32 20 69 6e 20 74 68 65 20 63 75 72  ll P2 in the cur
35a00 72 65 6e 74 20 66 72 61 6d 65 73 20 0a 2a 2a 20  rent frames .** 
35a10 61 64 64 72 65 73 73 20 73 70 61 63 65 2e 20 54  address space. T
35a20 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74  his is used by t
35a30 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 20  rigger programs 
35a40 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 6e 65  to access the ne
35a50 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64 2e  w.* .** and old.
35a60 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20  * values..**.** 
35a70 54 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74  The address of t
35a80 68 65 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 70  he cell in the p
35a90 61 72 65 6e 74 20 66 72 61 6d 65 20 69 73 20 64  arent frame is d
35aa0 65 74 65 72 6d 69 6e 65 64 20 62 79 20 61 64 64  etermined by add
35ab0 69 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  ing.** the value
35ac0 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d   of the P1 argum
35ad0 65 6e 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65  ent to the value
35ae0 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d   of the P1 argum
35af0 65 6e 74 20 74 6f 20 74 68 65 0a 2a 2a 20 63 61  ent to the.** ca
35b00 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d  lling OP_Program
35b10 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
35b20 0a 63 61 73 65 20 4f 50 5f 50 61 72 61 6d 3a 20  .case OP_Param: 
35b30 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
35b40 75 74 32 20 2a 2f 0a 20 20 56 64 62 65 46 72 61  ut2 */.  VdbeFra
35b50 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 4d 65  me *pFrame;.  Me
35b60 6d 20 2a 70 49 6e 3b 0a 20 20 70 4f 75 74 20 3d  m *pIn;.  pOut =
35b70 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
35b80 70 2c 20 70 4f 70 29 3b 0a 20 20 70 46 72 61 6d  p, pOp);.  pFram
35b90 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20  e = p->pFrame;. 
35ba0 20 70 49 6e 20 3d 20 26 70 46 72 61 6d 65 2d 3e   pIn = &pFrame->
35bb0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 20 2b 20 70  aMem[pOp->p1 + p
35bc0 46 72 61 6d 65 2d 3e 61 4f 70 5b 70 46 72 61 6d  Frame->aOp[pFram
35bd0 65 2d 3e 70 63 5d 2e 70 31 5d 3b 20 20 20 0a 20  e->pc].p1];   . 
35be0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
35bf0 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c  hallowCopy(pOut,
35c00 20 70 49 6e 2c 20 4d 45 4d 5f 45 70 68 65 6d 29   pIn, MEM_Ephem)
35c10 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 65  ;.  break;.}..#e
35c20 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20  ndif /* #ifndef 
35c30 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
35c40 47 45 52 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  GER */..#ifndef 
35c50 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
35c60 49 47 4e 5f 4b 45 59 0a 2f 2a 20 4f 70 63 6f 64  IGN_KEY./* Opcod
35c70 65 3a 20 46 6b 43 6f 75 6e 74 65 72 20 50 31 20  e: FkCounter P1 
35c80 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
35c90 70 73 69 73 3a 20 66 6b 63 74 72 5b 50 31 5d 2b  psis: fkctr[P1]+
35ca0 3d 50 32 0a 2a 2a 0a 2a 2a 20 49 6e 63 72 65 6d  =P2.**.** Increm
35cb0 65 6e 74 20 61 20 22 63 6f 6e 73 74 72 61 69 6e  ent a "constrain
35cc0 74 20 63 6f 75 6e 74 65 72 22 20 62 79 20 50 32  t counter" by P2
35cd0 20 28 50 32 20 6d 61 79 20 62 65 20 6e 65 67 61   (P2 may be nega
35ce0 74 69 76 65 20 6f 72 20 70 6f 73 69 74 69 76 65  tive or positive
35cf0 29 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e  )..** If P1 is n
35d00 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 64 61 74  on-zero, the dat
35d10 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e 74  abase constraint
35d20 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72   counter is incr
35d30 65 6d 65 6e 74 65 64 20 0a 2a 2a 20 28 64 65 66  emented .** (def
35d40 65 72 72 65 64 20 66 6f 72 65 69 67 6e 20 6b 65  erred foreign ke
35d50 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 20  y constraints). 
35d60 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 31  Otherwise, if P1
35d70 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 0a 2a   is zero, the .*
35d80 2a 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 75 6e  * statement coun
35d90 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  ter is increment
35da0 65 64 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f  ed (immediate fo
35db0 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
35dc0 61 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61 73 65 20  aints)..*/.case 
35dd0 4f 50 5f 46 6b 43 6f 75 6e 74 65 72 3a 20 7b 0a  OP_FkCounter: {.
35de0 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20    if( db->flags 
35df0 26 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b  & SQLITE_DeferFK
35e00 73 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65  s ){.    db->nDe
35e10 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 2b 3d  ferredImmCons +=
35e20 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73   pOp->p2;.  }els
35e30 65 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b  e if( pOp->p1 ){
35e40 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72  .    db->nDeferr
35e50 65 64 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70  edCons += pOp->p
35e60 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  2;.  }else{.    
35e70 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74  p->nFkConstraint
35e80 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d   += pOp->p2;.  }
35e90 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
35ea0 4f 70 63 6f 64 65 3a 20 46 6b 49 66 5a 65 72 6f  Opcode: FkIfZero
35eb0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
35ec0 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 66 6b 63  Synopsis: if fkc
35ed0 74 72 5b 50 31 5d 3d 3d 30 20 67 6f 74 6f 20 50  tr[P1]==0 goto P
35ee0 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  2.**.** This opc
35ef0 6f 64 65 20 74 65 73 74 73 20 69 66 20 61 20 66  ode tests if a f
35f00 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
35f10 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73  raint-counter is
35f20 20 63 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2e   currently zero.
35f30 0a 2a 2a 20 49 66 20 73 6f 2c 20 6a 75 6d 70 20  .** If so, jump 
35f40 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50  to instruction P
35f50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61  2. Otherwise, fa
35f60 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
35f70 65 20 6e 65 78 74 20 0a 2a 2a 20 69 6e 73 74 72  e next .** instr
35f80 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66  uction..**.** If
35f90 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c   P1 is non-zero,
35fa0 20 74 68 65 6e 20 74 68 65 20 6a 75 6d 70 20 69   then the jump i
35fb0 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 64  s taken if the d
35fc0 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69  atabase constrai
35fd0 6e 74 2d 63 6f 75 6e 74 65 72 0a 2a 2a 20 69 73  nt-counter.** is
35fe0 20 7a 65 72 6f 20 28 74 68 65 20 6f 6e 65 20 74   zero (the one t
35ff0 68 61 74 20 63 6f 75 6e 74 73 20 64 65 66 65 72  hat counts defer
36000 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  red constraint v
36010 69 6f 6c 61 74 69 6f 6e 73 29 2e 20 49 66 20 50  iolations). If P
36020 31 20 69 73 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68  1 is.** zero, th
36030 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
36040 69 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  if the statement
36050 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e   constraint-coun
36060 74 65 72 20 69 73 20 7a 65 72 6f 0a 2a 2a 20 28  ter is zero.** (
36070 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67  immediate foreig
36080 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
36090 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 0a 2a 2f   violations)..*/
360a0 0a 63 61 73 65 20 4f 50 5f 46 6b 49 66 5a 65 72  .case OP_FkIfZer
360b0 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20  o: {         /* 
360c0 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70 4f  jump */.  if( pO
360d0 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 56 64 62  p->p1 ){.    Vdb
360e0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 64 62 2d  eBranchTaken(db-
360f0 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d  >nDeferredCons==
36100 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72  0 && db->nDeferr
36110 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29  edImmCons==0, 2)
36120 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 44  ;.    if( db->nD
36130 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26  eferredCons==0 &
36140 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  & db->nDeferredI
36150 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 67 6f 74 6f  mmCons==0 ) goto
36160 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
36170 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72  else{.    VdbeBr
36180 61 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 6e 46 6b  anchTaken(p->nFk
36190 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26 26  Constraint==0 &&
361a0 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
361b0 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20 20  mCons==0, 2);.  
361c0 20 20 69 66 28 20 70 2d 3e 6e 46 6b 43 6f 6e 73    if( p->nFkCons
361d0 74 72 61 69 6e 74 3d 3d 30 20 26 26 20 64 62 2d  traint==0 && db-
361e0 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
361f0 73 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70  s==0 ) goto jump
36200 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
36210 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
36220 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f   #ifndef SQLITE_
36230 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
36240 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
36250 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43  ITE_OMIT_AUTOINC
36260 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65  REMENT./* Opcode
36270 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50 32 20 2a  : MemMax P1 P2 *
36280 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
36290 3a 20 72 5b 50 31 5d 3d 6d 61 78 28 72 5b 50 31  : r[P1]=max(r[P1
362a0 5d 2c 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 50  ],r[P2]).**.** P
362b0 31 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20  1 is a register 
362c0 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d  in the root fram
362d0 65 20 6f 66 20 74 68 69 73 20 56 4d 20 28 74 68  e of this VM (th
362e0 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 69 73 0a  e root frame is.
362f0 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f  ** different fro
36300 6d 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 72  m the current fr
36310 61 6d 65 20 69 66 20 74 68 69 73 20 69 6e 73 74  ame if this inst
36320 72 75 63 74 69 6f 6e 20 69 73 20 62 65 69 6e 67  ruction is being
36330 20 65 78 65 63 75 74 65 64 0a 2a 2a 20 77 69 74   executed.** wit
36340 68 69 6e 20 61 20 73 75 62 2d 70 72 6f 67 72 61  hin a sub-progra
36350 6d 29 2e 20 53 65 74 20 74 68 65 20 76 61 6c 75  m). Set the valu
36360 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  e of register P1
36370 20 74 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20   to the maximum 
36380 6f 66 20 0a 2a 2a 20 69 74 73 20 63 75 72 72 65  of .** its curre
36390 6e 74 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65  nt value and the
363a0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
363b0 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  er P2..**.** Thi
363c0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68  s instruction th
363d0 72 6f 77 73 20 61 6e 20 65 72 72 6f 72 20 69 66  rows an error if
363e0 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c   the memory cell
363f0 20 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c   is not initiall
36400 79 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 2e  y.** an integer.
36410 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d 4d  .*/.case OP_MemM
36420 61 78 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  ax: {        /* 
36430 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 46 72 61  in2 */.  VdbeFra
36440 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69 66  me *pFrame;.  if
36450 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20  ( p->pFrame ){. 
36460 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d     for(pFrame=p-
36470 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d  >pFrame; pFrame-
36480 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65  >pParent; pFrame
36490 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74  =pFrame->pParent
364a0 29 3b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 70  );.    pIn1 = &p
364b0 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d  Frame->aMem[pOp-
364c0 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  >p1];.  }else{. 
364d0 20 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b     pIn1 = &aMem[
364e0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a 20 20  pOp->p1];.  }.  
364f0 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
36500 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 73 71  id(pIn1) );.  sq
36510 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
36520 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20  gerify(pIn1);.  
36530 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
36540 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33  ->p2];.  sqlite3
36550 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
36560 79 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 70  y(pIn2);.  if( p
36570 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75  In1->u.i<pIn2->u
36580 2e 69 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75  .i){.    pIn1->u
36590 2e 69 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a  .i = pIn2->u.i;.
365a0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
365b0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
365c0 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45  OMIT_AUTOINCREME
365d0 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  NT */../* Opcode
365e0 3a 20 49 66 50 6f 73 20 50 31 20 50 32 20 50 33  : IfPos P1 P2 P3
365f0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
36600 3a 20 69 66 20 72 5b 50 31 5d 3e 30 20 74 68 65  : if r[P1]>0 the
36610 6e 20 72 5b 50 31 5d 2d 3d 50 33 2c 20 67 6f 74  n r[P1]-=P3, got
36620 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73  o P2.**.** Regis
36630 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74  ter P1 must cont
36640 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a  ain an integer..
36650 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
36660 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69  of register P1 i
36670 73 20 31 20 6f 72 20 67 72 65 61 74 65 72 2c 20  s 1 or greater, 
36680 73 75 62 74 72 61 63 74 20 50 33 20 66 72 6f 6d  subtract P3 from
36690 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e   the.** value in
366a0 20 50 31 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20   P1 and jump to 
366b0 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  P2..**.** If the
366c0 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f   initial value o
366d0 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  f register P1 is
366e0 20 6c 65 73 73 20 74 68 61 6e 20 31 2c 20 74 68   less than 1, th
366f0 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20  en the.** value 
36700 69 73 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64  is unchanged and
36710 20 63 6f 6e 74 72 6f 6c 20 70 61 73 73 65 73 20   control passes 
36720 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
36730 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
36740 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 50 6f  .*/.case OP_IfPo
36750 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  s: {        /* j
36760 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
36770 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
36780 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
36790 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In1->flags&MEM_I
367a0 6e 74 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e  nt );.  VdbeBran
367b0 63 68 54 61 6b 65 6e 28 20 70 49 6e 31 2d 3e 75  chTaken( pIn1->u
367c0 2e 69 3e 30 2c 20 32 29 3b 0a 20 20 69 66 28 20  .i>0, 2);.  if( 
367d0 70 49 6e 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20  pIn1->u.i>0 ){. 
367e0 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2d 3d 20     pIn1->u.i -= 
367f0 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 67 6f 74  pOp->p3;.    got
36800 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
36810 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
36820 20 4f 70 63 6f 64 65 3a 20 4f 66 66 73 65 74 4c   Opcode: OffsetL
36830 69 6d 69 74 20 50 31 20 50 32 20 50 33 20 2a 20  imit P1 P2 P3 * 
36840 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
36850 66 20 72 5b 50 31 5d 3e 30 20 74 68 65 6e 20 72  f r[P1]>0 then r
36860 5b 50 32 5d 3d 72 5b 50 31 5d 2b 6d 61 78 28 30  [P2]=r[P1]+max(0
36870 2c 72 5b 50 33 5d 29 20 65 6c 73 65 20 72 5b 50  ,r[P3]) else r[P
36880 32 5d 3d 28 2d 31 29 0a 2a 2a 0a 2a 2a 20 54 68  2]=(-1).**.** Th
36890 69 73 20 6f 70 63 6f 64 65 20 70 65 72 66 6f 72  is opcode perfor
368a0 6d 73 20 61 20 63 6f 6d 6d 6f 6e 6c 79 20 75 73  ms a commonly us
368b0 65 64 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 61  ed computation a
368c0 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a 2a  ssociated with.*
368d0 2a 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46 53  * LIMIT and OFFS
368e0 45 54 20 70 72 6f 63 65 73 73 2e 20 20 72 5b 50  ET process.  r[P
368f0 31 5d 20 68 6f 6c 64 73 20 74 68 65 20 6c 69 6d  1] holds the lim
36900 69 74 20 63 6f 75 6e 74 65 72 2e 20 20 72 5b 50  it counter.  r[P
36910 33 5d 0a 2a 2a 20 68 6f 6c 64 73 20 74 68 65 20  3].** holds the 
36920 6f 66 66 73 65 74 20 63 6f 75 6e 74 65 72 2e 20  offset counter. 
36930 20 54 68 65 20 6f 70 63 6f 64 65 20 63 6f 6d 70   The opcode comp
36940 75 74 65 73 20 74 68 65 20 63 6f 6d 62 69 6e 65  utes the combine
36950 64 20 76 61 6c 75 65 0a 2a 2a 20 6f 66 20 74 68  d value.** of th
36960 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46 53  e LIMIT and OFFS
36970 45 54 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68  ET and stores th
36980 61 74 20 76 61 6c 75 65 20 69 6e 20 72 5b 50 32  at value in r[P2
36990 5d 2e 20 20 54 68 65 20 72 5b 50 32 5d 0a 2a 2a  ].  The r[P2].**
369a0 20 76 61 6c 75 65 20 63 6f 6d 70 75 74 65 64 20   value computed 
369b0 69 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d  is the total num
369c0 62 65 72 20 6f 66 20 72 6f 77 73 20 74 68 61 74  ber of rows that
369d0 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65   will need to be
369e0 0a 2a 2a 20 76 69 73 69 74 65 64 20 69 6e 20 6f  .** visited in o
369f0 72 64 65 72 20 74 6f 20 63 6f 6d 70 6c 65 74 65  rder to complete
36a00 20 74 68 65 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a   the query..**.*
36a10 2a 20 49 66 20 72 5b 50 33 5d 20 69 73 20 7a 65  * If r[P3] is ze
36a20 72 6f 20 6f 72 20 6e 65 67 61 74 69 76 65 2c 20  ro or negative, 
36a30 74 68 61 74 20 6d 65 61 6e 73 20 74 68 65 72 65  that means there
36a40 20 69 73 20 6e 6f 20 4f 46 46 53 45 54 0a 2a 2a   is no OFFSET.**
36a50 20 61 6e 64 20 72 5b 50 32 5d 20 69 73 20 73 65   and r[P2] is se
36a60 74 20 74 6f 20 62 65 20 74 68 65 20 76 61 6c 75  t to be the valu
36a70 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 2c 20  e of the LIMIT, 
36a80 72 5b 50 31 5d 2e 0a 2a 2a 0a 2a 2a 20 69 66 20  r[P1]..**.** if 
36a90 72 5b 50 31 5d 20 69 73 20 7a 65 72 6f 20 6f 72  r[P1] is zero or
36aa0 20 6e 65 67 61 74 69 76 65 2c 20 74 68 61 74 20   negative, that 
36ab0 6d 65 61 6e 73 20 74 68 65 72 65 20 69 73 20 6e  means there is n
36ac0 6f 20 4c 49 4d 49 54 0a 2a 2a 20 61 6e 64 20 72  o LIMIT.** and r
36ad0 5b 50 32 5d 20 69 73 20 73 65 74 20 74 6f 20 2d  [P2] is set to -
36ae0 31 2e 20 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 77  1. .**.** Otherw
36af0 69 73 65 2c 20 72 5b 50 32 5d 20 69 73 20 73 65  ise, r[P2] is se
36b00 74 20 74 6f 20 74 68 65 20 73 75 6d 20 6f 66 20  t to the sum of 
36b10 72 5b 50 31 5d 20 61 6e 64 20 72 5b 50 33 5d 2e  r[P1] and r[P3].
36b20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 66 66 73  .*/.case OP_Offs
36b30 65 74 4c 69 6d 69 74 3a 20 7b 20 20 20 20 2f 2a  etLimit: {    /*
36b40 20 69 6e 31 2c 20 6f 75 74 32 2c 20 69 6e 33 20   in1, out2, in3 
36b50 2a 2f 0a 20 20 69 36 34 20 78 3b 0a 20 20 70 49  */.  i64 x;.  pI
36b60 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
36b70 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61  p1];.  pIn3 = &a
36b80 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
36b90 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
36ba0 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
36bb0 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
36bc0 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
36bd0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33  ;.  assert( pIn3
36be0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
36bf0 74 20 29 3b 0a 20 20 78 20 3d 20 70 49 6e 31 2d  t );.  x = pIn1-
36c00 3e 75 2e 69 3b 0a 20 20 69 66 28 20 78 3c 3d 30  >u.i;.  if( x<=0
36c10 20 7c 7c 20 73 71 6c 69 74 65 33 41 64 64 49 6e   || sqlite3AddIn
36c20 74 36 34 28 26 78 2c 20 70 49 6e 33 2d 3e 75 2e  t64(&x, pIn3->u.
36c30 69 3e 30 3f 70 49 6e 33 2d 3e 75 2e 69 3a 30 29  i>0?pIn3->u.i:0)
36c40 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68   ){.    /* If th
36c50 65 20 4c 49 4d 49 54 20 69 73 20 6c 65 73 73 20  e LIMIT is less 
36c60 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
36c70 20 7a 65 72 6f 2c 20 6c 6f 6f 70 20 66 6f 72 65   zero, loop fore
36c80 76 65 72 2e 20 20 54 68 69 73 0a 20 20 20 20 2a  ver.  This.    *
36c90 2a 20 69 73 20 64 6f 63 75 6d 65 6e 74 65 64 2e  * is documented.
36ca0 20 20 42 75 74 20 61 6c 73 6f 2c 20 69 66 20 74    But also, if t
36cb0 68 65 20 4c 49 4d 49 54 2b 4f 46 46 53 45 54 20  he LIMIT+OFFSET 
36cc0 65 78 63 65 65 64 73 20 32 5e 36 33 20 74 68 65  exceeds 2^63 the
36cd0 6e 0a 20 20 20 20 2a 2a 20 61 6c 73 6f 20 6c 6f  n.    ** also lo
36ce0 6f 70 20 66 6f 72 65 76 65 72 2e 20 20 54 68 69  op forever.  Thi
36cf0 73 20 69 73 20 75 6e 64 6f 63 75 6d 65 6e 74 65  s is undocumente
36d00 64 2e 20 20 49 6e 20 66 61 63 74 2c 20 6f 6e 65  d.  In fact, one
36d10 20 63 6f 75 6c 64 20 61 72 67 75 65 0a 20 20 20   could argue.   
36d20 20 2a 2a 20 74 68 61 74 20 74 68 65 20 6c 6f 6f   ** that the loo
36d30 70 20 73 68 6f 75 6c 64 20 74 65 72 6d 69 6e 61  p should termina
36d40 74 65 2e 20 20 42 75 74 20 61 73 73 75 6d 69 6e  te.  But assumin
36d50 67 20 31 20 62 69 6c 6c 69 6f 6e 20 69 74 65 72  g 1 billion iter
36d60 61 74 69 6f 6e 73 0a 20 20 20 20 2a 2a 20 70 65  ations.    ** pe
36d70 72 20 73 65 63 6f 6e 64 20 28 66 61 72 20 65 78  r second (far ex
36d80 63 65 65 64 69 6e 67 20 74 68 65 20 63 61 70 61  ceeding the capa
36d90 62 69 6c 69 74 69 65 73 20 6f 66 20 61 6e 79 20  bilities of any 
36da0 63 75 72 72 65 6e 74 20 68 61 72 64 77 61 72 65  current hardware
36db0 29 0a 20 20 20 20 2a 2a 20 69 74 20 77 6f 75 6c  ).    ** it woul
36dc0 64 20 74 61 6b 65 20 6e 65 61 72 6c 79 20 33 30  d take nearly 30
36dd0 30 20 79 65 61 72 73 20 74 6f 20 61 63 74 75 61  0 years to actua
36de0 6c 6c 79 20 72 65 61 63 68 20 74 68 65 20 6c 69  lly reach the li
36df0 6d 69 74 2e 20 20 53 6f 0a 20 20 20 20 2a 2a 20  mit.  So.    ** 
36e00 6c 6f 6f 70 69 6e 67 20 66 6f 72 65 76 65 72 20  looping forever 
36e10 69 73 20 61 20 72 65 61 73 6f 6e 61 62 6c 65 20  is a reasonable 
36e20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 2e 20 2a  approximation. *
36e30 2f 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  /.    pOut->u.i 
36e40 3d 20 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  = -1;.  }else{. 
36e50 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 78     pOut->u.i = x
36e60 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
36e70 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e  ../* Opcode: IfN
36e80 6f 74 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a  otZero P1 P2 * *
36e90 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
36ea0 69 66 20 72 5b 50 31 5d 21 3d 30 20 74 68 65 6e  if r[P1]!=0 then
36eb0 20 72 5b 50 31 5d 2d 2d 2c 20 67 6f 74 6f 20 50   r[P1]--, goto P
36ec0 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  2.**.** Register
36ed0 20 50 31 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e   P1 must contain
36ee0 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66   an integer.  If
36ef0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
36f00 72 65 67 69 73 74 65 72 20 50 31 20 69 73 0a 2a  register P1 is.*
36f10 2a 20 69 6e 69 74 69 61 6c 6c 79 20 67 72 65 61  * initially grea
36f20 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74  ter than zero, t
36f30 68 65 6e 20 64 65 63 72 65 6d 65 6e 74 20 74 68  hen decrement th
36f40 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
36f50 74 65 72 20 50 31 2e 0a 2a 2a 20 49 66 20 69 74  ter P1..** If it
36f60 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 28 6e 65   is non-zero (ne
36f70 67 61 74 69 76 65 20 6f 72 20 70 6f 73 69 74 69  gative or positi
36f80 76 65 29 20 61 6e 64 20 74 68 65 6e 20 61 6c 73  ve) and then als
36f90 6f 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 0a  o jump to P2.  .
36fa0 2a 2a 20 49 66 20 72 65 67 69 73 74 65 72 20 50  ** If register P
36fb0 31 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 7a  1 is initially z
36fc0 65 72 6f 2c 20 6c 65 61 76 65 20 69 74 20 75 6e  ero, leave it un
36fd0 63 68 61 6e 67 65 64 20 61 6e 64 20 66 61 6c 6c  changed and fall
36fe0 20 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a 63 61 73   through..*/.cas
36ff0 65 20 4f 50 5f 49 66 4e 6f 74 5a 65 72 6f 3a 20  e OP_IfNotZero: 
37000 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
37010 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
37020 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
37030 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
37040 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20  ->flags&MEM_Int 
37050 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  );.  VdbeBranchT
37060 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3c 30  aken(pIn1->u.i<0
37070 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31  , 2);.  if( pIn1
37080 2d 3e 75 2e 69 20 29 7b 0a 20 20 20 20 20 69 66  ->u.i ){.     if
37090 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20 29 20  ( pIn1->u.i>0 ) 
370a0 70 49 6e 31 2d 3e 75 2e 69 2d 2d 3b 0a 20 20 20  pIn1->u.i--;.   
370b0 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
370c0 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
370d0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65  }../* Opcode: De
370e0 63 72 4a 75 6d 70 5a 65 72 6f 20 50 31 20 50 32  crJumpZero P1 P2
370f0 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
37100 69 73 3a 20 69 66 20 28 2d 2d 72 5b 50 31 5d 29  is: if (--r[P1])
37110 3d 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  ==0 goto P2.**.*
37120 2a 20 52 65 67 69 73 74 65 72 20 50 31 20 6d 75  * Register P1 mu
37130 73 74 20 68 6f 6c 64 20 61 6e 20 69 6e 74 65 67  st hold an integ
37140 65 72 2e 20 20 44 65 63 72 65 6d 65 6e 74 20 74  er.  Decrement t
37150 68 65 20 76 61 6c 75 65 20 69 6e 20 50 31 0a 2a  he value in P1.*
37160 2a 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 50 32  * and jump to P2
37170 20 69 66 20 74 68 65 20 6e 65 77 20 76 61 6c 75   if the new valu
37180 65 20 69 73 20 65 78 61 63 74 6c 79 20 7a 65 72  e is exactly zer
37190 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65  o..*/.case OP_De
371a0 63 72 4a 75 6d 70 5a 65 72 6f 3a 20 7b 20 20 20  crJumpZero: {   
371b0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
371c0 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
371d0 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
371e0 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
371f0 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69  s&MEM_Int );.  i
37200 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 53 4d 41  f( pIn1->u.i>SMA
37210 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29 20 70 49  LLEST_INT64 ) pI
37220 6e 31 2d 3e 75 2e 69 2d 2d 3b 0a 20 20 56 64 62  n1->u.i--;.  Vdb
37230 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49 6e  eBranchTaken(pIn
37240 31 2d 3e 75 2e 69 3d 3d 30 2c 20 32 29 3b 0a 20  1->u.i==0, 2);. 
37250 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d   if( pIn1->u.i==
37260 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  0 ) goto jump_to
37270 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  _p2;.  break;.}.
37280 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67  ../* Opcode: Agg
37290 53 74 65 70 20 2a 20 50 32 20 50 33 20 50 34 20  Step * P2 P3 P4 
372a0 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
372b0 61 63 63 75 6d 3d 72 5b 50 33 5d 20 73 74 65 70  accum=r[P3] step
372c0 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a  (r[P2@P5]).**.**
372d0 20 45 78 65 63 75 74 65 20 74 68 65 20 78 53 74   Execute the xSt
372e0 65 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20  ep function for 
372f0 61 6e 20 61 67 67 72 65 67 61 74 65 2e 0a 2a 2a  an aggregate..**
37300 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 68 61   The function ha
37310 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73 2e 20  s P5 arguments. 
37320 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
37330 20 74 6f 20 74 68 65 20 0a 2a 2a 20 46 75 6e 63   to the .** Func
37340 44 65 66 20 73 74 72 75 63 74 75 72 65 20 74 68  Def structure th
37350 61 74 20 73 70 65 63 69 66 69 65 73 20 74 68 65  at specifies the
37360 20 66 75 6e 63 74 69 6f 6e 2e 20 20 52 65 67 69   function.  Regi
37370 73 74 65 72 20 50 33 20 69 73 20 74 68 65 0a 2a  ster P3 is the.*
37380 2a 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a  * accumulator..*
37390 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75  *.** The P5 argu
373a0 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20  ments are taken 
373b0 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32  from register P2
373c0 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63   and its.** succ
373d0 65 73 73 6f 72 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70  essors..*/./* Op
373e0 63 6f 64 65 3a 20 41 67 67 49 6e 76 65 72 73 65  code: AggInverse
373f0 20 2a 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a   * P2 P3 P4 P5.*
37400 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75  * Synopsis: accu
37410 6d 3d 72 5b 50 33 5d 20 69 6e 76 65 72 73 65 28  m=r[P3] inverse(
37420 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20  r[P2@P5]).**.** 
37430 45 78 65 63 75 74 65 20 74 68 65 20 78 49 6e 76  Execute the xInv
37440 65 72 73 65 20 66 75 6e 63 74 69 6f 6e 20 66 6f  erse function fo
37450 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 0a  r an aggregate..
37460 2a 2a 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20  ** The function 
37470 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73  has P5 arguments
37480 2e 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  .  P4 is a point
37490 65 72 20 74 6f 20 74 68 65 20 0a 2a 2a 20 46 75  er to the .** Fu
374a0 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65 20  ncDef structure 
374b0 74 68 61 74 20 73 70 65 63 69 66 69 65 73 20 74  that specifies t
374c0 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 52 65  he function.  Re
374d0 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65  gister P3 is the
374e0 0a 2a 2a 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e  .** accumulator.
374f0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72  .**.** The P5 ar
37500 67 75 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65  guments are take
37510 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20  n from register 
37520 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75  P2 and its.** su
37530 63 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a 2f 2a 20  ccessors..*/./* 
37540 4f 70 63 6f 64 65 3a 20 41 67 67 53 74 65 70 31  Opcode: AggStep1
37550 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
37560 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63  ** Synopsis: acc
37570 75 6d 3d 72 5b 50 33 5d 20 73 74 65 70 28 72 5b  um=r[P3] step(r[
37580 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78  P2@P5]).**.** Ex
37590 65 63 75 74 65 20 74 68 65 20 78 53 74 65 70 20  ecute the xStep 
375a0 28 69 66 20 50 31 3d 3d 30 29 20 6f 72 20 78 49  (if P1==0) or xI
375b0 6e 76 65 72 73 65 20 28 69 66 20 50 31 21 3d 30  nverse (if P1!=0
375c0 29 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61  ) function for a
375d0 6e 0a 2a 2a 20 61 67 67 72 65 67 61 74 65 2e 20  n.** aggregate. 
375e0 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 68 61   The function ha
375f0 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73 2e 20  s P5 arguments. 
37600 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
37610 20 74 6f 20 74 68 65 20 0a 2a 2a 20 46 75 6e 63   to the .** Func
37620 44 65 66 20 73 74 72 75 63 74 75 72 65 20 74 68  Def structure th
37630 61 74 20 73 70 65 63 69 66 69 65 73 20 74 68 65  at specifies the
37640 20 66 75 6e 63 74 69 6f 6e 2e 20 20 52 65 67 69   function.  Regi
37650 73 74 65 72 20 50 33 20 69 73 20 74 68 65 0a 2a  ster P3 is the.*
37660 2a 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a  * accumulator..*
37670 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75  *.** The P5 argu
37680 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20  ments are taken 
37690 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32  from register P2
376a0 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63   and its.** succ
376b0 65 73 73 6f 72 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  essors..**.** Th
376c0 69 73 20 6f 70 63 6f 64 65 20 69 73 20 69 6e 69  is opcode is ini
376d0 74 69 61 6c 6c 79 20 63 6f 64 65 64 20 61 73 20  tially coded as 
376e0 4f 50 5f 41 67 67 53 74 65 70 30 2e 20 20 4f 6e  OP_AggStep0.  On
376f0 20 66 69 72 73 74 20 65 76 61 6c 75 61 74 69 6f   first evaluatio
37700 6e 2c 0a 2a 2a 20 74 68 65 20 46 75 6e 63 44 65  n,.** the FuncDe
37710 66 20 73 74 6f 72 65 64 20 69 6e 20 50 34 20 69  f stored in P4 i
37720 73 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  s converted into
37730 20 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74   an sqlite3_cont
37740 65 78 74 20 61 6e 64 0a 2a 2a 20 74 68 65 20 6f  ext and.** the o
37750 70 63 6f 64 65 20 69 73 20 63 68 61 6e 67 65 64  pcode is changed
37760 2e 20 20 49 6e 20 74 68 69 73 20 77 61 79 2c 20  .  In this way, 
37770 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  the initializati
37780 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 71 6c  on of the.** sql
37790 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 6e 6c  ite3_context onl
377a0 79 20 68 61 70 70 65 6e 73 20 6f 6e 63 65 2c 20  y happens once, 
377b0 69 6e 73 74 65 61 64 20 6f 66 20 6f 6e 20 65 61  instead of on ea
377c0 63 68 20 63 61 6c 6c 20 74 6f 20 74 68 65 0a 2a  ch call to the.*
377d0 2a 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 2e  * step function.
377e0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 49  .*/.case OP_AggI
377f0 6e 76 65 72 73 65 3a 0a 63 61 73 65 20 4f 50 5f  nverse:.case OP_
37800 41 67 67 53 74 65 70 3a 20 7b 0a 20 20 69 6e 74  AggStep: {.  int
37810 20 6e 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f   n;.  sqlite3_co
37820 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a 0a 20 20  ntext *pCtx;..  
37830 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
37840 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20  ype==P4_FUNCDEF 
37850 29 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35  );.  n = pOp->p5
37860 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
37870 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
37880 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
37890 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
378a0 61 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c 7c 20  assert( n==0 || 
378b0 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f  (pOp->p2>0 && pO
378c0 70 2d 3e 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65  p->p2+n<=(p->nMe
378d0 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
378e0 29 2b 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74  )+1) );.  assert
378f0 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70  ( pOp->p3<pOp->p
37900 32 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f  2 || pOp->p3>=pO
37910 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 43 74  p->p2+n );.  pCt
37920 78 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  x = sqlite3DbMal
37930 6c 6f 63 52 61 77 4e 4e 28 64 62 2c 20 6e 2a 73  locRawNN(db, n*s
37940 69 7a 65 6f 66 28 73 71 6c 69 74 65 33 5f 76 61  izeof(sqlite3_va
37950 6c 75 65 2a 29 20 2b 0a 20 20 20 20 20 20 20 20  lue*) +.        
37960 20 20 20 20 20 20 20 28 73 69 7a 65 6f 66 28 70         (sizeof(p
37970 43 74 78 5b 30 5d 29 20 2b 20 73 69 7a 65 6f 66  Ctx[0]) + sizeof
37980 28 4d 65 6d 29 20 2d 20 73 69 7a 65 6f 66 28 73  (Mem) - sizeof(s
37990 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 29 29  qlite3_value*)))
379a0 3b 0a 20 20 69 66 28 20 70 43 74 78 3d 3d 30 20  ;.  if( pCtx==0 
379b0 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
379c0 20 70 43 74 78 2d 3e 70 4d 65 6d 20 3d 20 30 3b   pCtx->pMem = 0;
379d0 0a 20 20 70 43 74 78 2d 3e 70 4f 75 74 20 3d 20  .  pCtx->pOut = 
379e0 28 4d 65 6d 2a 29 26 28 70 43 74 78 2d 3e 61 72  (Mem*)&(pCtx->ar
379f0 67 76 5b 6e 5d 29 3b 0a 20 20 73 71 6c 69 74 65  gv[n]);.  sqlite
37a00 33 56 64 62 65 4d 65 6d 49 6e 69 74 28 70 43 74  3VdbeMemInit(pCt
37a10 78 2d 3e 70 4f 75 74 2c 20 64 62 2c 20 4d 45 4d  x->pOut, db, MEM
37a20 5f 4e 75 6c 6c 29 3b 0a 20 20 70 43 74 78 2d 3e  _Null);.  pCtx->
37a30 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e  pFunc = pOp->p4.
37a40 70 46 75 6e 63 3b 0a 20 20 70 43 74 78 2d 3e 69  pFunc;.  pCtx->i
37a50 4f 70 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d  Op = (int)(pOp -
37a60 20 61 4f 70 29 3b 0a 20 20 70 43 74 78 2d 3e 70   aOp);.  pCtx->p
37a70 56 64 62 65 20 3d 20 70 3b 0a 20 20 70 43 74 78  Vdbe = p;.  pCtx
37a80 2d 3e 73 6b 69 70 46 6c 61 67 20 3d 20 30 3b 0a  ->skipFlag = 0;.
37a90 20 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 20    pCtx->isError 
37aa0 3d 20 30 3b 0a 20 20 70 43 74 78 2d 3e 61 72 67  = 0;.  pCtx->arg
37ab0 63 20 3d 20 6e 3b 0a 20 20 70 4f 70 2d 3e 70 34  c = n;.  pOp->p4
37ac0 74 79 70 65 20 3d 20 50 34 5f 46 55 4e 43 43 54  type = P4_FUNCCT
37ad0 58 3b 0a 20 20 70 4f 70 2d 3e 70 34 2e 70 43 74  X;.  pOp->p4.pCt
37ae0 78 20 3d 20 70 43 74 78 3b 0a 0a 20 20 2f 2a 20  x = pCtx;..  /* 
37af0 4f 50 5f 41 67 67 49 6e 76 65 72 73 65 20 6d 75  OP_AggInverse mu
37b00 73 74 20 68 61 76 65 20 50 31 3d 3d 31 20 61 6e  st have P1==1 an
37b10 64 20 4f 50 5f 41 67 67 53 74 65 70 20 6d 75 73  d OP_AggStep mus
37b20 74 20 68 61 76 65 20 50 31 3d 3d 30 20 2a 2f 0a  t have P1==0 */.
37b30 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
37b40 31 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  1==(pOp->opcode=
37b50 3d 4f 50 5f 41 67 67 49 6e 76 65 72 73 65 29 20  =OP_AggInverse) 
37b60 29 3b 0a 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64  );..  pOp->opcod
37b70 65 20 3d 20 4f 50 5f 41 67 67 53 74 65 70 31 3b  e = OP_AggStep1;
37b80 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75  .  /* Fall throu
37b90 67 68 20 69 6e 74 6f 20 4f 50 5f 41 67 67 53 74  gh into OP_AggSt
37ba0 65 70 20 2a 2f 0a 7d 0a 63 61 73 65 20 4f 50 5f  ep */.}.case OP_
37bb0 41 67 67 53 74 65 70 31 3a 20 7b 0a 20 20 69 6e  AggStep1: {.  in
37bc0 74 20 69 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63  t i;.  sqlite3_c
37bd0 6f 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a 20 20  ontext *pCtx;.  
37be0 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 0a 20 20 61 73  Mem *pMem;..  as
37bf0 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
37c00 65 3d 3d 50 34 5f 46 55 4e 43 43 54 58 20 29 3b  e==P4_FUNCCTX );
37c10 0a 20 20 70 43 74 78 20 3d 20 70 4f 70 2d 3e 70  .  pCtx = pOp->p
37c20 34 2e 70 43 74 78 3b 0a 20 20 70 4d 65 6d 20 3d  4.pCtx;.  pMem =
37c30 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
37c40 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
37c50 44 45 42 55 47 0a 20 20 69 66 28 20 70 4f 70 2d  DEBUG.  if( pOp-
37c60 3e 70 31 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  >p1 ){.    /* Th
37c70 69 73 20 69 73 20 61 6e 20 4f 50 5f 41 67 67 49  is is an OP_AggI
37c80 6e 76 65 72 73 65 20 63 61 6c 6c 2e 20 20 56 65  nverse call.  Ve
37c90 72 69 66 79 20 74 68 61 74 20 78 53 74 65 70 20  rify that xStep 
37ca0 68 61 73 20 61 6c 77 61 79 73 0a 20 20 20 20 2a  has always.    *
37cb0 2a 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 61 74  * been called at
37cc0 20 6c 65 61 73 74 20 6f 6e 63 65 20 70 72 69 6f   least once prio
37cd0 72 20 74 6f 20 61 6e 79 20 78 49 6e 76 65 72 73  r to any xInvers
37ce0 65 20 63 61 6c 6c 2e 20 2a 2f 0a 20 20 20 20 61  e call. */.    a
37cf0 73 73 65 72 74 28 20 70 4d 65 6d 2d 3e 75 54 65  ssert( pMem->uTe
37d00 6d 70 3d 3d 30 78 31 31 32 32 65 30 65 33 20 29  mp==0x1122e0e3 )
37d10 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  ;.  }else{.    /
37d20 2a 20 54 68 69 73 20 69 73 20 61 6e 20 4f 50 5f  * This is an OP_
37d30 41 67 67 53 74 65 70 20 63 61 6c 6c 2e 20 20 4d  AggStep call.  M
37d40 61 72 6b 20 69 74 20 61 73 20 73 75 63 68 2e 20  ark it as such. 
37d50 2a 2f 0a 20 20 20 20 70 4d 65 6d 2d 3e 75 54 65  */.    pMem->uTe
37d60 6d 70 20 3d 20 30 78 31 31 32 32 65 30 65 33 3b  mp = 0x1122e0e3;
37d70 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f  .  }.#endif..  /
37d80 2a 20 49 66 20 74 68 69 73 20 66 75 6e 63 74 69  * If this functi
37d90 6f 6e 20 69 73 20 69 6e 73 69 64 65 20 6f 66 20  on is inside of 
37da0 61 20 74 72 69 67 67 65 72 2c 20 74 68 65 20 72  a trigger, the r
37db0 65 67 69 73 74 65 72 20 61 72 72 61 79 20 69 6e  egister array in
37dc0 20 61 4d 65 6d 5b 5d 0a 20 20 2a 2a 20 6d 69 67   aMem[].  ** mig
37dd0 68 74 20 63 68 61 6e 67 65 20 66 72 6f 6d 20 6f  ht change from o
37de0 6e 65 20 65 76 61 6c 75 61 74 69 6f 6e 20 74 6f  ne evaluation to
37df0 20 74 68 65 20 6e 65 78 74 2e 20 20 54 68 65 20   the next.  The 
37e00 6e 65 78 74 20 62 6c 6f 63 6b 20 6f 66 20 63 6f  next block of co
37e10 64 65 0a 20 20 2a 2a 20 63 68 65 63 6b 73 20 74  de.  ** checks t
37e20 6f 20 73 65 65 20 69 66 20 74 68 65 20 72 65 67  o see if the reg
37e30 69 73 74 65 72 20 61 72 72 61 79 20 68 61 73 20  ister array has 
37e40 63 68 61 6e 67 65 64 2c 20 61 6e 64 20 69 66 20  changed, and if 
37e50 73 6f 20 69 74 0a 20 20 2a 2a 20 72 65 69 6e 69  so it.  ** reini
37e60 74 69 61 6c 69 7a 65 73 20 74 68 65 20 72 65 6c  tializes the rel
37e70 61 76 61 6e 74 20 70 61 72 74 73 20 6f 66 20 74  avant parts of t
37e80 68 65 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  he sqlite3_conte
37e90 78 74 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 69  xt object */.  i
37ea0 66 28 20 70 43 74 78 2d 3e 70 4d 65 6d 20 21 3d  f( pCtx->pMem !=
37eb0 20 70 4d 65 6d 20 29 7b 0a 20 20 20 20 70 43 74   pMem ){.    pCt
37ec0 78 2d 3e 70 4d 65 6d 20 3d 20 70 4d 65 6d 3b 0a  x->pMem = pMem;.
37ed0 20 20 20 20 66 6f 72 28 69 3d 70 43 74 78 2d 3e      for(i=pCtx->
37ee0 61 72 67 63 2d 31 3b 20 69 3e 3d 30 3b 20 69 2d  argc-1; i>=0; i-
37ef0 2d 29 20 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d  -) pCtx->argv[i]
37f00 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
37f10 2b 69 5d 3b 0a 20 20 7d 0a 0a 23 69 66 64 65 66  +i];.  }..#ifdef
37f20 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
37f30 66 6f 72 28 69 3d 30 3b 20 69 3c 70 43 74 78 2d  for(i=0; i<pCtx-
37f40 3e 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20  >argc; i++){.   
37f50 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
37f60 6c 69 64 28 70 43 74 78 2d 3e 61 72 67 76 5b 69  lid(pCtx->argv[i
37f70 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54  ]) );.    REGIST
37f80 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
37f90 2b 69 2c 20 70 43 74 78 2d 3e 61 72 67 76 5b 69  +i, pCtx->argv[i
37fa0 5d 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  ]);.  }.#endif..
37fb0 20 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 61    pMem->n++;.  a
37fc0 73 73 65 72 74 28 20 70 43 74 78 2d 3e 70 4f 75  ssert( pCtx->pOu
37fd0 74 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 4e 75  t->flags==MEM_Nu
37fe0 6c 6c 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ll );.  assert( 
37ff0 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 3d 3d 30  pCtx->isError==0
38000 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
38010 74 78 2d 3e 73 6b 69 70 46 6c 61 67 3d 3d 30 20  tx->skipFlag==0 
38020 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
38030 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55 4e  E_OMIT_WINDOWFUN
38040 43 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20  C.  if( pOp->p1 
38050 29 7b 0a 20 20 20 20 28 70 43 74 78 2d 3e 70 46  ){.    (pCtx->pF
38060 75 6e 63 2d 3e 78 49 6e 76 65 72 73 65 29 28 70  unc->xInverse)(p
38070 43 74 78 2c 70 43 74 78 2d 3e 61 72 67 63 2c 70  Ctx,pCtx->argc,p
38080 43 74 78 2d 3e 61 72 67 76 29 3b 0a 20 20 7d 65  Ctx->argv);.  }e
38090 6c 73 65 0a 23 65 6e 64 69 66 0a 20 20 28 70 43  lse.#endif.  (pC
380a0 74 78 2d 3e 70 46 75 6e 63 2d 3e 78 53 46 75 6e  tx->pFunc->xSFun
380b0 63 29 28 70 43 74 78 2c 70 43 74 78 2d 3e 61 72  c)(pCtx,pCtx->ar
380c0 67 63 2c 70 43 74 78 2d 3e 61 72 67 76 29 3b 20  gc,pCtx->argv); 
380d0 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d  /* IMP: R-24505-
380e0 32 33 32 33 30 20 2a 2f 0a 0a 20 20 69 66 28 20  23230 */..  if( 
380f0 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 20 29 7b  pCtx->isError ){
38100 0a 20 20 20 20 69 66 28 20 70 43 74 78 2d 3e 69  .    if( pCtx->i
38110 73 45 72 72 6f 72 3e 30 20 29 7b 0a 20 20 20 20  sError>0 ){.    
38120 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
38130 6f 72 28 70 2c 20 22 25 73 22 2c 20 73 71 6c 69  or(p, "%s", sqli
38140 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70  te3_value_text(p
38150 43 74 78 2d 3e 70 4f 75 74 29 29 3b 0a 20 20 20  Ctx->pOut));.   
38160 20 20 20 72 63 20 3d 20 70 43 74 78 2d 3e 69 73     rc = pCtx->is
38170 45 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20  Error;.    }.   
38180 20 69 66 28 20 70 43 74 78 2d 3e 73 6b 69 70 46   if( pCtx->skipF
38190 6c 61 67 20 29 7b 0a 20 20 20 20 20 20 61 73 73  lag ){.      ass
381a0 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63  ert( pOp[-1].opc
381b0 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20  ode==OP_CollSeq 
381c0 29 3b 0a 20 20 20 20 20 20 69 20 3d 20 70 4f 70  );.      i = pOp
381d0 5b 2d 31 5d 2e 70 31 3b 0a 20 20 20 20 20 20 69  [-1].p1;.      i
381e0 66 28 20 69 20 29 20 73 71 6c 69 74 65 33 56 64  f( i ) sqlite3Vd
381f0 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61  beMemSetInt64(&a
38200 4d 65 6d 5b 69 5d 2c 20 31 29 3b 0a 20 20 20 20  Mem[i], 1);.    
38210 20 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67    pCtx->skipFlag
38220 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20   = 0;.    }.    
38230 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
38240 6c 65 61 73 65 28 70 43 74 78 2d 3e 70 4f 75 74  lease(pCtx->pOut
38250 29 3b 0a 20 20 20 20 70 43 74 78 2d 3e 70 4f 75  );.    pCtx->pOu
38260 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e  t->flags = MEM_N
38270 75 6c 6c 3b 0a 20 20 20 20 70 43 74 78 2d 3e 69  ull;.    pCtx->i
38280 73 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20 20 20  sError = 0;.    
38290 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
382a0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
382b0 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  ;.  }.  assert( 
382c0 70 43 74 78 2d 3e 70 4f 75 74 2d 3e 66 6c 61 67  pCtx->pOut->flag
382d0 73 3d 3d 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20  s==MEM_Null );. 
382e0 20 61 73