/ Hex Artifact Content
Login

Artifact 8d11da49bda1f504927df424923a415043f5825388e02722c4ac4c6eefc87a47:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 66  implements the f
01a0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 75 6e  unction that run
01b0: 73 20 74 68 65 0a 2a 2a 20 62 79 74 65 63 6f 64  s the.** bytecod
01c0: 65 20 6f 66 20 61 20 70 72 65 70 61 72 65 64 20  e of a prepared 
01d0: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
01e0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
01f0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
0200: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0210: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0220: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0230: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0240: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0250: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0260: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0270: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0280: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0290: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
02a0: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
02b0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
02c0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
02d0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
02e0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
02f0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
0300: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0310: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0320: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0330: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0340: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0350: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0360: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0370: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0380: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0390: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
03a0: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
03b0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
03c0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
03d0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
03e0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
03f0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
0400: 69 73 75 73 65 64 2e 20 20 41 20 73 68 61 6c 6c  isused.  A shall
0410: 6f 77 20 63 6f 70 79 20 6f 66 20 61 20 73 74 72  ow copy of a str
0420: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6a 75 73 74  ing or blob just
0430: 20 63 6f 70 69 65 73 20 61 0a 2a 2a 20 70 6f 69   copies a.** poi
0440: 6e 74 65 72 20 74 6f 20 74 68 65 20 73 74 72 69  nter to the stri
0450: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 6e 6f 74 20  ng or blob, not 
0460: 74 68 65 20 63 6f 6e 74 65 6e 74 2e 20 20 49 66  the content.  If
0470: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
0480: 20 69 73 20 63 68 61 6e 67 65 64 20 77 68 69 6c   is changed whil
0490: 65 20 74 68 65 20 63 6f 70 79 20 69 73 20 73 74  e the copy is st
04a0: 69 6c 6c 20 69 6e 20 75 73 65 2c 20 74 68 65 20  ill in use, the 
04b0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
04c0: 69 67 68 74 0a 2a 2a 20 62 65 20 63 68 61 6e 67  ight.** be chang
04d0: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
04e0: 72 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69  r the copy.  Thi
04f0: 73 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73  s macro verifies
0500: 20 74 68 61 74 20 6e 6f 74 68 69 6e 67 0a 2a 2a   that nothing.**
0510: 20 6c 69 6b 65 20 74 68 61 74 20 65 76 65 72 20   like that ever 
0520: 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 23 69 66 64  happens..*/.#ifd
0530: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
0540: 23 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75  # define memAbou
0550: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73  tToChange(P,M) s
0560: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f  qlite3VdbeMemAbo
0570: 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a  utToChange(P,M).
0580: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d  #else.# define m
0590: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
05a0: 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  P,M).#endif../*.
05b0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
05c0: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
05d0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
05e0: 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72  every time a cur
05f0: 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69  sor.** moves, ei
0600: 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53  ther by the OP_S
0610: 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20  eekXX, OP_Next, 
0620: 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64  or OP_Prev opcod
0630: 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a  es.  The test.**
0640: 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20   procedures use 
0650: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  this information
0660: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
0670: 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a  at indices are.*
0680: 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63  * working correc
0690: 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61  tly.  This varia
06a0: 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  ble has no funct
06b0: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
06c0: 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79  o.** help verify
06d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
06e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ration of the li
06f0: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0700: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0710: 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
0720: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0730: 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68  f../*.** When th
0740: 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  is global variab
0750: 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20  le is positive, 
0760: 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e  it gets decremen
0770: 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a  ted once before.
0780: 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74  ** each instruct
0790: 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e  ion in the VDBE.
07a0: 20 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65    When it reache
07b0: 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69  s zero, the u1.i
07c0: 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20  sInterrupted.** 
07d0: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
07e0: 69 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69  ite3 structure i
07f0: 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74  s set in order t
0800: 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e  o simulate an in
0810: 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54  terrupt..**.** T
0820: 68 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20  his facility is 
0830: 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
0840: 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20   purposes only. 
0850: 20 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e   It does not fun
0860: 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f  ction.** in an o
0870: 72 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a  rdinary build..*
0880: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
0890: 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33  TEST.int sqlite3
08a0: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
08b0: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
08c0: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f  .** The next glo
08d0: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20  bal variable is 
08e0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68  incremented each
08f0: 20 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72   type the OP_Sor
0900: 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  t opcode.** is e
0910: 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65  xecuted.  The te
0920: 73 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73  st procedures us
0930: 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69  e this informati
0940: 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  on to make sure 
0950: 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20  that.** sorting 
0960: 69 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20  is occurring or 
0970: 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74  not occurring at
0980: 20 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d   appropriate tim
0990: 65 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61  es.   This varia
09a0: 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75  ble.** has no fu
09b0: 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61  nction other tha
09c0: 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79  n to help verify
09d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
09e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  ration of the.**
09f0: 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66   library..*/.#if
0a00: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
0a10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74  int sqlite3_sort
0a20: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0a30: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65  if../*.** The ne
0a40: 78 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  xt global variab
0a50: 6c 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73  le records the s
0a60: 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65  ize of the large
0a70: 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f  st MEM_Blob.** o
0a80: 72 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68  r MEM_Str that h
0a90: 61 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20  as been used by 
0aa0: 61 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20  a VDBE opcode.  
0ab0: 54 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75  The test procedu
0ac0: 72 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20  res.** use this 
0ad0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d  information to m
0ae0: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
0af0: 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63  e zero-blob func
0b00: 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20  tionality.** is 
0b10: 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c  working correctl
0b20: 79 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  y.   This variab
0b30: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0b40: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0b50: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0b60: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0b70: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0b80: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0b90: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ba0: 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62  sqlite3_max_blob
0bb0: 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63  size = 0;.static
0bc0: 20 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42   void updateMaxB
0bd0: 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b  lobsize(Mem *p){
0be0: 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  .  if( (p->flags
0bf0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
0c00: 42 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e  Blob))!=0 && p->
0c10: 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c  n>sqlite3_max_bl
0c20: 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71  obsize ){.    sq
0c30: 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69  lite3_max_blobsi
0c40: 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d  ze = p->n;.  }.}
0c50: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
0c60: 68 69 73 20 6d 61 63 72 6f 20 65 76 61 6c 75 61  his macro evalua
0c70: 74 65 73 20 74 6f 20 74 72 75 65 20 69 66 20 65  tes to true if e
0c80: 69 74 68 65 72 20 74 68 65 20 75 70 64 61 74 65  ither the update
0c90: 20 68 6f 6f 6b 20 6f 72 20 74 68 65 20 70 72 65   hook or the pre
0ca0: 75 70 64 61 74 65 0a 2a 2a 20 68 6f 6f 6b 20 61  update.** hook a
0cb0: 72 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 64  re enabled for d
0cc0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 20  atabase connect 
0cd0: 44 42 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  DB..*/.#ifdef SQ
0ce0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
0cf0: 50 44 41 54 45 5f 48 4f 4f 4b 0a 23 20 64 65 66  PDATE_HOOK.# def
0d00: 69 6e 65 20 48 41 53 5f 55 50 44 41 54 45 5f 48  ine HAS_UPDATE_H
0d10: 4f 4f 4b 28 44 42 29 20 28 28 44 42 29 2d 3e 78  OOK(DB) ((DB)->x
0d20: 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  PreUpdateCallbac
0d30: 6b 7c 7c 28 44 42 29 2d 3e 78 55 70 64 61 74 65  k||(DB)->xUpdate
0d40: 43 61 6c 6c 62 61 63 6b 29 0a 23 65 6c 73 65 0a  Callback).#else.
0d50: 23 20 64 65 66 69 6e 65 20 48 41 53 5f 55 50 44  # define HAS_UPD
0d60: 41 54 45 5f 48 4f 4f 4b 28 44 42 29 20 28 28 44  ATE_HOOK(DB) ((D
0d70: 42 29 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  B)->xUpdateCallb
0d80: 61 63 6b 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ack).#endif../*.
0d90: 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62  ** The next glob
0da0: 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69  al variable is i
0db0: 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20  ncremented each 
0dc0: 74 69 6d 65 20 74 68 65 20 4f 50 5f 46 6f 75 6e  time the OP_Foun
0dd0: 64 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  d opcode.** is e
0de0: 78 65 63 75 74 65 64 2e 20 54 68 69 73 20 69 73  xecuted. This is
0df0: 20 75 73 65 64 20 74 6f 20 74 65 73 74 20 77 68   used to test wh
0e00: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
0e10: 20 66 6f 72 65 69 67 6e 20 6b 65 79 0a 2a 2a 20   foreign key.** 
0e20: 6f 70 65 72 61 74 69 6f 6e 20 69 6d 70 6c 65 6d  operation implem
0e30: 65 6e 74 65 64 20 75 73 69 6e 67 20 4f 50 5f 46  ented using OP_F
0e40: 6b 49 73 5a 65 72 6f 20 69 73 20 77 6f 72 6b 69  kIsZero is worki
0e50: 6e 67 2e 20 54 68 69 73 20 76 61 72 69 61 62 6c  ng. This variabl
0e60: 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e 63  e.** has no func
0e70: 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20  tion other than 
0e80: 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20 74  to help verify t
0e90: 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61  he correct opera
0ea0: 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 6c  tion of the.** l
0eb0: 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  ibrary..*/.#ifde
0ec0: 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e  f SQLITE_TEST.in
0ed0: 74 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f  t sqlite3_found_
0ee0: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0ef0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 61 20  f../*.** Test a 
0f00: 72 65 67 69 73 74 65 72 20 74 6f 20 73 65 65 20  register to see 
0f10: 69 66 20 69 74 20 65 78 63 65 65 64 73 20 74 68  if it exceeds th
0f20: 65 20 63 75 72 72 65 6e 74 20 6d 61 78 69 6d 75  e current maximu
0f30: 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20  m blob size..** 
0f40: 49 66 20 69 74 20 64 6f 65 73 2c 20 72 65 63 6f  If it does, reco
0f50: 72 64 20 74 68 65 20 6e 65 77 20 6d 61 78 69 6d  rd the new maxim
0f60: 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f  um blob size..*/
0f70: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
0f80: 49 54 45 5f 54 45 53 54 29 20 26 26 20 21 64 65  ITE_TEST) && !de
0f90: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 55 4e 54  fined(SQLITE_UNT
0fa0: 45 53 54 41 42 4c 45 29 0a 23 20 64 65 66 69 6e  ESTABLE).# defin
0fb0: 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f  e UPDATE_MAX_BLO
0fc0: 42 53 49 5a 45 28 50 29 20 20 75 70 64 61 74 65  BSIZE(P)  update
0fd0: 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50 29 0a 23  MaxBlobsize(P).#
0fe0: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 55 50  else.# define UP
0ff0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
1000: 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E(P).#endif../*.
1010: 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 56 44  ** Invoke the VD
1020: 42 45 20 63 6f 76 65 72 61 67 65 20 63 61 6c 6c  BE coverage call
1030: 62 61 63 6b 2c 20 69 66 20 74 68 61 74 20 63 61  back, if that ca
1040: 6c 6c 62 61 63 6b 20 69 73 20 64 65 66 69 6e 65  llback is define
1050: 64 2e 20 20 54 68 69 73 0a 2a 2a 20 66 65 61 74  d.  This.** feat
1060: 75 72 65 20 69 73 20 75 73 65 64 20 66 6f 72 20  ure is used for 
1070: 74 65 73 74 20 73 75 69 74 65 20 76 61 6c 69 64  test suite valid
1080: 61 74 69 6f 6e 20 6f 6e 6c 79 20 61 6e 64 20 64  ation only and d
1090: 6f 65 73 20 6e 6f 74 20 61 70 70 65 61 72 20 61  oes not appear a
10a0: 6e 0a 2a 2a 20 70 72 6f 64 75 63 74 69 6f 6e 20  n.** production 
10b0: 62 75 69 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 4d 20  builds..**.** M 
10c0: 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 62 65  is an integer be
10d0: 74 77 65 65 6e 20 32 20 61 6e 64 20 34 2e 20 20  tween 2 and 4.  
10e0: 32 20 69 6e 64 69 63 61 74 65 73 20 61 20 6f 72  2 indicates a or
10f0: 64 69 6e 61 72 79 20 74 77 6f 2d 77 61 79 0a 2a  dinary two-way.*
1100: 2a 20 62 72 61 6e 63 68 20 28 49 3d 30 20 6d 65  * branch (I=0 me
1110: 61 6e 73 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ans fall through
1120: 20 61 6e 64 20 49 3d 31 20 6d 65 61 6e 73 20 74   and I=1 means t
1130: 61 6b 65 6e 29 2e 20 20 33 20 69 6e 64 69 63 61  aken).  3 indica
1140: 74 65 73 0a 2a 2a 20 61 20 33 2d 77 61 79 20 62  tes.** a 3-way b
1150: 72 61 6e 63 68 20 77 68 65 72 65 20 74 68 65 20  ranch where the 
1160: 74 68 69 72 64 20 77 61 79 20 69 73 20 77 68 65  third way is whe
1170: 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 6f 70 65  n one of the ope
1180: 72 61 6e 64 73 20 69 73 0a 2a 2a 20 4e 55 4c 4c  rands is.** NULL
1190: 2e 20 20 34 20 69 6e 64 69 63 61 74 65 73 20 74  .  4 indicates t
11a0: 68 65 20 4f 50 5f 4a 75 6d 70 20 69 6e 73 74 72  he OP_Jump instr
11b0: 75 63 74 69 6f 6e 20 77 68 69 63 68 20 68 61 73  uction which has
11c0: 20 74 68 72 65 65 20 64 65 73 74 69 6e 61 74 69   three destinati
11d0: 6f 6e 73 0a 2a 2a 20 64 65 70 65 6e 64 69 6e 67  ons.** depending
11e0: 20 6f 6e 20 77 68 65 74 68 65 72 20 74 68 65 20   on whether the 
11f0: 66 69 72 73 74 20 6f 70 65 72 61 6e 64 20 69 73  first operand is
1200: 20 6c 65 73 73 20 74 68 61 6e 2c 20 65 71 75 61   less than, equa
1210: 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74 65 72  l to, or greater
1220: 0a 2a 2a 20 74 68 61 6e 20 74 68 65 20 73 65 63  .** than the sec
1230: 6f 6e 64 2e 20 0a 2a 2a 0a 2a 2a 20 69 53 72 63  ond. .**.** iSrc
1240: 4c 69 6e 65 20 69 73 20 74 68 65 20 73 6f 75 72  Line is the sour
1250: 63 65 20 63 6f 64 65 20 6c 69 6e 65 20 28 66 72  ce code line (fr
1260: 6f 6d 20 74 68 65 20 5f 5f 4c 49 4e 45 5f 5f 20  om the __LINE__ 
1270: 6d 61 63 72 6f 29 20 74 68 61 74 0a 2a 2a 20 67  macro) that.** g
1280: 65 6e 65 72 61 74 65 64 20 74 68 65 20 56 44 42  enerated the VDB
1290: 45 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f  E instruction co
12a0: 6d 62 69 6e 65 64 20 77 69 74 68 20 66 6c 61 67  mbined with flag
12b0: 20 62 69 74 73 2e 20 20 54 68 65 20 73 6f 75 72   bits.  The sour
12c0: 63 65 0a 2a 2a 20 63 6f 64 65 20 6c 69 6e 65 20  ce.** code line 
12d0: 6e 75 6d 62 65 72 20 69 73 20 69 6e 20 74 68 65  number is in the
12e0: 20 6c 6f 77 65 72 20 32 34 20 62 69 74 73 20 6f   lower 24 bits o
12f0: 66 20 69 53 72 63 4c 69 6e 65 20 61 6e 64 20 74  f iSrcLine and t
1300: 68 65 20 75 70 70 65 72 0a 2a 2a 20 38 20 62 79  he upper.** 8 by
1310: 74 65 73 20 61 72 65 20 66 6c 61 67 73 2e 20 20  tes are flags.  
1320: 54 68 65 20 6c 6f 77 65 72 20 74 68 72 65 65 20  The lower three 
1330: 62 69 74 73 20 6f 66 20 74 68 65 20 66 6c 61 67  bits of the flag
1340: 73 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20 76 61  s indicate.** va
1350: 6c 75 65 73 20 66 6f 72 20 49 20 74 68 61 74 20  lues for I that 
1360: 73 68 6f 75 6c 64 20 6e 65 76 65 72 20 6f 63 63  should never occ
1370: 75 72 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  ur.  For example
1380: 2c 20 69 66 20 74 68 65 20 62 72 61 6e 63 68 20  , if the branch 
1390: 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 74 61 6b  is.** always tak
13a0: 65 6e 2c 20 74 68 65 20 66 6c 61 67 73 20 73 68  en, the flags sh
13b0: 6f 75 6c 64 20 62 65 20 30 78 30 35 20 73 69 6e  ould be 0x05 sin
13c0: 63 65 20 74 68 65 20 66 61 6c 6c 2d 74 68 72 6f  ce the fall-thro
13d0: 75 67 68 20 61 6e 64 0a 2a 2a 20 61 6c 74 65 72  ugh and.** alter
13e0: 6e 61 74 65 20 62 72 61 6e 63 68 20 61 72 65 20  nate branch are 
13f0: 6e 65 76 65 72 20 74 61 6b 65 6e 2e 20 20 49 66  never taken.  If
1400: 20 61 20 62 72 61 6e 63 68 20 69 73 20 6e 65 76   a branch is nev
1410: 65 72 20 74 61 6b 65 6e 20 74 68 65 6e 0a 2a 2a  er taken then.**
1420: 20 66 6c 61 67 73 20 73 68 6f 75 6c 64 20 62 65   flags should be
1430: 20 30 78 30 36 20 73 69 6e 63 65 20 6f 6e 6c 79   0x06 since only
1440: 20 74 68 65 20 66 61 6c 6c 2d 74 68 72 6f 75 67   the fall-throug
1450: 68 20 61 70 70 72 6f 61 63 68 20 69 73 20 61 6c  h approach is al
1460: 6c 6f 77 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 69 74  lowed..**.** Bit
1470: 20 30 78 30 34 20 6f 66 20 74 68 65 20 66 6c 61   0x04 of the fla
1480: 67 73 20 69 6e 64 69 63 61 74 65 73 20 61 6e 20  gs indicates an 
1490: 4f 50 5f 4a 75 6d 70 20 6f 70 63 6f 64 65 20 74  OP_Jump opcode t
14a0: 68 61 74 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20 69  hat is only.** i
14b0: 6e 74 65 72 65 73 74 65 64 20 69 6e 20 65 71 75  nterested in equ
14c0: 61 6c 20 6f 72 20 6e 6f 74 2d 65 71 75 61 6c 2e  al or not-equal.
14d0: 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
14e0: 2c 20 49 3d 3d 30 20 61 6e 64 20 49 3d 3d 32 0a  , I==0 and I==2.
14f0: 2a 2a 20 73 68 6f 75 6c 64 20 62 65 20 74 72 65  ** should be tre
1500: 61 74 65 64 20 74 68 65 20 73 61 6d 65 2e 0a 2a  ated the same..*
1510: 2a 0a 2a 2a 20 53 69 6e 63 65 20 6f 6e 6c 79 20  *.** Since only 
1520: 61 20 6c 69 6e 65 20 6e 75 6d 62 65 72 20 69 73  a line number is
1530: 20 72 65 74 61 69 6e 65 64 2c 20 6e 6f 74 20 74   retained, not t
1540: 68 65 20 66 69 6c 65 6e 61 6d 65 2c 20 74 68 69  he filename, thi
1550: 73 20 6d 61 63 72 6f 0a 2a 2a 20 6f 6e 6c 79 20  s macro.** only 
1560: 77 6f 72 6b 73 20 66 6f 72 20 61 6d 61 6c 67 61  works for amalga
1570: 6d 61 74 69 6f 6e 20 62 75 69 6c 64 73 2e 20 20  mation builds.  
1580: 42 75 74 20 74 68 61 74 20 69 73 20 6f 6b 2c 20  But that is ok, 
1590: 73 69 6e 63 65 20 74 68 65 73 65 20 6d 61 63 72  since these macr
15a0: 6f 73 0a 2a 2a 20 73 68 6f 75 6c 64 20 62 65 20  os.** should be 
15b0: 6e 6f 2d 6f 70 73 20 65 78 63 65 70 74 20 66 6f  no-ops except fo
15c0: 72 20 73 70 65 63 69 61 6c 20 62 75 69 6c 64 73  r special builds
15d0: 20 75 73 65 64 20 74 6f 20 6d 65 61 73 75 72 65   used to measure
15e0: 20 74 65 73 74 20 63 6f 76 65 72 61 67 65 2e 0a   test coverage..
15f0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
1600: 53 51 4c 49 54 45 5f 56 44 42 45 5f 43 4f 56 45  SQLITE_VDBE_COVE
1610: 52 41 47 45 29 0a 23 20 64 65 66 69 6e 65 20 56  RAGE).# define V
1620: 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 49  dbeBranchTaken(I
1630: 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  ,M).#else.# defi
1640: 6e 65 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  ne VdbeBranchTak
1650: 65 6e 28 49 2c 4d 29 20 76 64 62 65 54 61 6b 65  en(I,M) vdbeTake
1660: 42 72 61 6e 63 68 28 70 4f 70 2d 3e 69 53 72 63  Branch(pOp->iSrc
1670: 4c 69 6e 65 2c 49 2c 4d 29 0a 20 20 73 74 61 74  Line,I,M).  stat
1680: 69 63 20 76 6f 69 64 20 76 64 62 65 54 61 6b 65  ic void vdbeTake
1690: 42 72 61 6e 63 68 28 75 33 32 20 69 53 72 63 4c  Branch(u32 iSrcL
16a0: 69 6e 65 2c 20 75 38 20 49 2c 20 75 38 20 4d 29  ine, u8 I, u8 M)
16b0: 7b 0a 20 20 20 20 75 38 20 6d 4e 65 76 65 72 3b  {.    u8 mNever;
16c0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 49 3c 3d  .    assert( I<=
16d0: 32 20 29 3b 20 20 2f 2a 20 30 3a 20 66 61 6c 6c  2 );  /* 0: fall
16e0: 20 74 68 72 6f 75 67 68 2c 20 20 31 3a 20 74 61   through,  1: ta
16f0: 6b 65 6e 2c 20 20 32 3a 20 61 6c 74 65 72 6e 61  ken,  2: alterna
1700: 74 65 20 74 61 6b 65 6e 20 2a 2f 0a 20 20 20 20  te taken */.    
1710: 61 73 73 65 72 74 28 20 4d 3c 3d 34 20 29 3b 20  assert( M<=4 ); 
1720: 20 2f 2a 20 32 3a 20 74 77 6f 2d 77 61 79 20 62   /* 2: two-way b
1730: 72 61 6e 63 68 2c 20 33 3a 20 74 68 72 65 65 2d  ranch, 3: three-
1740: 77 61 79 20 62 72 61 6e 63 68 2c 20 34 3a 20 4f  way branch, 4: O
1750: 50 5f 4a 75 6d 70 20 2a 2f 0a 20 20 20 20 61 73  P_Jump */.    as
1760: 73 65 72 74 28 20 49 3c 4d 20 29 3b 20 20 20 2f  sert( I<M );   /
1770: 2a 20 49 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20  * I can only be 
1780: 32 20 69 66 20 4d 20 69 73 20 33 20 6f 72 20 34  2 if M is 3 or 4
1790: 20 2a 2f 0a 20 20 20 20 2f 2a 20 54 72 61 6e 73   */.    /* Trans
17a0: 66 6f 72 6d 20 49 20 66 72 6f 6d 20 61 20 69 6e  form I from a in
17b0: 74 65 67 65 72 20 5b 30 2c 31 2c 32 5d 20 69 6e  teger [0,1,2] in
17c0: 74 6f 20 61 20 62 69 74 6d 61 73 6b 20 6f 66 20  to a bitmask of 
17d0: 5b 31 2c 32 2c 34 5d 20 2a 2f 0a 20 20 20 20 49  [1,2,4] */.    I
17e0: 20 3d 20 31 3c 3c 49 3b 0a 20 20 20 20 2f 2a 20   = 1<<I;.    /* 
17f0: 54 68 65 20 75 70 70 65 72 20 38 20 62 69 74 73  The upper 8 bits
1800: 20 6f 66 20 69 53 72 63 4c 69 6e 65 20 61 72 65   of iSrcLine are
1810: 20 66 6c 61 67 73 2e 20 20 54 68 65 20 6c 6f 77   flags.  The low
1820: 65 72 20 74 68 72 65 65 20 62 69 74 73 20 6f 66  er three bits of
1830: 0a 20 20 20 20 2a 2a 20 74 68 65 20 66 6c 61 67  .    ** the flag
1840: 73 20 69 6e 64 69 63 61 74 65 20 64 69 72 65 63  s indicate direc
1850: 74 69 6f 6e 73 20 74 68 61 74 20 74 68 65 20 62  tions that the b
1860: 72 61 6e 63 68 20 63 61 6e 20 6e 65 76 65 72 20  ranch can never 
1870: 67 6f 2e 20 20 49 66 0a 20 20 20 20 2a 2a 20 61  go.  If.    ** a
1880: 20 62 72 61 6e 63 68 20 72 65 61 6c 6c 79 20 64   branch really d
1890: 6f 65 73 20 67 6f 20 69 6e 20 6f 6e 65 20 6f 66  oes go in one of
18a0: 20 74 68 6f 73 65 20 64 69 72 65 63 74 69 6f 6e   those direction
18b0: 73 2c 20 61 73 73 65 72 74 20 72 69 67 68 74 0a  s, assert right.
18c0: 20 20 20 20 2a 2a 20 61 77 61 79 2e 20 2a 2f 0a      ** away. */.
18d0: 20 20 20 20 6d 4e 65 76 65 72 20 3d 20 69 53 72      mNever = iSr
18e0: 63 4c 69 6e 65 20 3e 3e 20 32 34 3b 0a 20 20 20  cLine >> 24;.   
18f0: 20 61 73 73 65 72 74 28 20 28 49 20 26 20 6d 4e   assert( (I & mN
1900: 65 76 65 72 29 3d 3d 30 20 29 3b 0a 20 20 20 20  ever)==0 );.    
1910: 69 66 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61  if( sqlite3Globa
1920: 6c 43 6f 6e 66 69 67 2e 78 56 64 62 65 42 72 61  lConfig.xVdbeBra
1930: 6e 63 68 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b  nch==0 ) return;
1940: 20 20 2f 2a 4e 4f 5f 54 45 53 54 2a 2f 0a 20 20    /*NO_TEST*/.  
1950: 20 20 49 20 7c 3d 20 6d 4e 65 76 65 72 3b 0a 20    I |= mNever;. 
1960: 20 20 20 69 66 28 20 4d 3d 3d 32 20 29 20 49 20     if( M==2 ) I 
1970: 7c 3d 20 30 78 30 34 3b 0a 20 20 20 20 69 66 28  |= 0x04;.    if(
1980: 20 4d 3d 3d 34 20 29 7b 0a 20 20 20 20 20 20 49   M==4 ){.      I
1990: 20 7c 3d 20 30 78 30 38 3b 0a 20 20 20 20 20 20   |= 0x08;.      
19a0: 69 66 28 20 28 6d 4e 65 76 65 72 26 30 78 30 38  if( (mNever&0x08
19b0: 29 21 3d 30 20 26 26 20 28 49 26 30 78 30 35 29  )!=0 && (I&0x05)
19c0: 21 3d 30 29 20 49 20 7c 3d 20 30 78 30 35 3b 20  !=0) I |= 0x05; 
19d0: 2f 2a 4e 4f 5f 54 45 53 54 2a 2f 0a 20 20 20 20  /*NO_TEST*/.    
19e0: 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 47 6c 6f  }.    sqlite3Glo
19f0: 62 61 6c 43 6f 6e 66 69 67 2e 78 56 64 62 65 42  balConfig.xVdbeB
1a00: 72 61 6e 63 68 28 73 71 6c 69 74 65 33 47 6c 6f  ranch(sqlite3Glo
1a10: 62 61 6c 43 6f 6e 66 69 67 2e 70 56 64 62 65 42  balConfig.pVdbeB
1a20: 72 61 6e 63 68 41 72 67 2c 0a 20 20 20 20 20 20  ranchArg,.      
1a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 53                iS
1a50: 72 63 4c 69 6e 65 26 30 78 66 66 66 66 66 66 2c  rcLine&0xffffff,
1a60: 20 49 2c 20 4d 29 3b 0a 20 20 7d 0a 23 65 6e 64   I, M);.  }.#end
1a70: 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72  if../*.** Conver
1a80: 74 20 74 68 65 20 67 69 76 65 6e 20 72 65 67 69  t the given regi
1a90: 73 74 65 72 20 69 6e 74 6f 20 61 20 73 74 72 69  ster into a stri
1aa0: 6e 67 20 69 66 20 69 74 20 69 73 6e 27 74 20 6f  ng if it isn't o
1ab0: 6e 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e 20 52  ne.** already. R
1ac0: 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69  eturn non-zero i
1ad0: 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69  f a malloc() fai
1ae0: 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ls..*/.#define S
1af0: 74 72 69 6e 67 69 66 79 28 50 2c 20 65 6e 63 29  tringify(P, enc)
1b00: 20 5c 0a 20 20 20 69 66 28 28 28 50 29 2d 3e 66   \.   if(((P)->f
1b10: 6c 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c 4d 45  lags&(MEM_Str|ME
1b20: 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26 20 73  M_Blob))==0 && s
1b30: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72  qlite3VdbeMemStr
1b40: 69 6e 67 69 66 79 28 50 2c 65 6e 63 2c 30 29 29  ingify(P,enc,0))
1b50: 20 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f 20 6e   \.     { goto n
1b60: 6f 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20  o_mem; }../*.** 
1b70: 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72  An ephemeral str
1b80: 69 6e 67 20 76 61 6c 75 65 20 28 73 69 67 6e 69  ing value (signi
1b90: 66 69 65 64 20 62 79 20 74 68 65 20 4d 45 4d 5f  fied by the MEM_
1ba0: 45 70 68 65 6d 20 66 6c 61 67 29 20 63 6f 6e 74  Ephem flag) cont
1bb0: 61 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e 74 65  ains.** a pointe
1bc0: 72 20 74 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c  r to a dynamical
1bd0: 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 74 72  ly allocated str
1be0: 69 6e 67 20 77 68 65 72 65 20 73 6f 6d 65 20 6f  ing where some o
1bf0: 74 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a 20 69  ther entity.** i
1c00: 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f  s responsible fo
1c10: 72 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74  r deallocating t
1c20: 68 61 74 20 73 74 72 69 6e 67 2e 20 20 42 65 63  hat string.  Bec
1c30: 61 75 73 65 20 74 68 65 20 72 65 67 69 73 74 65  ause the registe
1c40: 72 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 63 6f  r.** does not co
1c50: 6e 74 72 6f 6c 20 74 68 65 20 73 74 72 69 6e 67  ntrol the string
1c60: 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20 64 65  , it might be de
1c70: 6c 65 74 65 64 20 77 69 74 68 6f 75 74 20 74 68  leted without th
1c80: 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6b 6e  e register.** kn
1c90: 6f 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a 20  owing it..**.** 
1ca0: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 63 6f 6e  This routine con
1cb0: 76 65 72 74 73 20 61 6e 20 65 70 68 65 6d 65 72  verts an ephemer
1cc0: 61 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61  al string into a
1cd0: 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c   dynamically all
1ce0: 6f 63 61 74 65 64 0a 2a 2a 20 73 74 72 69 6e 67  ocated.** string
1cf0: 20 74 68 61 74 20 74 68 65 20 72 65 67 69 73 74   that the regist
1d00: 65 72 20 69 74 73 65 6c 66 20 63 6f 6e 74 72 6f  er itself contro
1d10: 6c 73 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  ls.  In other wo
1d20: 72 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76 65  rds, it.** conve
1d30: 72 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68 65 6d  rts an MEM_Ephem
1d40: 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20 73   string into a s
1d50: 74 72 69 6e 67 20 77 69 74 68 20 50 2e 7a 3d 3d  tring with P.z==
1d60: 50 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a 23 64  P.zMalloc..*/.#d
1d70: 65 66 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61  efine Deephemera
1d80: 6c 69 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28  lize(P) \.   if(
1d90: 20 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d   ((P)->flags&MEM
1da0: 5f 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20  _Ephem)!=0 \.   
1db0: 20 20 20 20 26 26 20 73 71 6c 69 74 65 33 56 64      && sqlite3Vd
1dc0: 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62  beMemMakeWriteab
1dd0: 6c 65 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f  le(P) ){ goto no
1de0: 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74 75 72  _mem;}../* Retur
1df0: 6e 20 74 72 75 65 20 69 66 20 74 68 65 20 63 75  n true if the cu
1e00: 72 73 6f 72 20 77 61 73 20 6f 70 65 6e 65 64 20  rsor was opened 
1e10: 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f 70 65  using the OP_Ope
1e20: 6e 53 6f 72 74 65 72 20 6f 70 63 6f 64 65 2e 20  nSorter opcode. 
1e30: 2a 2f 0a 23 64 65 66 69 6e 65 20 69 73 53 6f 72  */.#define isSor
1e40: 74 65 72 28 78 29 20 28 28 78 29 2d 3e 65 43 75  ter(x) ((x)->eCu
1e50: 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 53  rType==CURTYPE_S
1e60: 4f 52 54 45 52 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c  ORTER)../*.** Al
1e70: 6c 6f 63 61 74 65 20 56 64 62 65 43 75 72 73 6f  locate VdbeCurso
1e80: 72 20 6e 75 6d 62 65 72 20 69 43 75 72 2e 20 20  r number iCur.  
1e90: 52 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72  Return a pointer
1ea0: 20 74 6f 20 69 74 2e 20 20 52 65 74 75 72 6e 20   to it.  Return 
1eb0: 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20 72 75  NULL.** if we ru
1ec0: 6e 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 2e  n out of memory.
1ed0: 0a 2a 2f 0a 73 74 61 74 69 63 20 56 64 62 65 43  .*/.static VdbeC
1ee0: 75 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74 65 43  ursor *allocateC
1ef0: 75 72 73 6f 72 28 0a 20 20 56 64 62 65 20 2a 70  ursor(.  Vdbe *p
1f00: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
1f10: 2a 20 54 68 65 20 76 69 72 74 75 61 6c 20 6d 61  * The virtual ma
1f20: 63 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 69  chine */.  int i
1f30: 43 75 72 2c 20 20 20 20 20 20 20 20 20 20 20 20  Cur,            
1f40: 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65   /* Index of the
1f50: 20 6e 65 77 20 56 64 62 65 43 75 72 73 6f 72 20   new VdbeCursor 
1f60: 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 2c  */.  int nField,
1f70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1f80: 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69  mber of fields i
1f90: 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  n the table or i
1fa0: 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 44  ndex */.  int iD
1fb0: 62 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b,              
1fc0: 2f 2a 20 44 61 74 61 62 61 73 65 20 74 68 65 20  /* Database the 
1fd0: 63 75 72 73 6f 72 20 62 65 6c 6f 6e 67 73 20 74  cursor belongs t
1fe0: 6f 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20 20 75 38  o, or -1 */.  u8
1ff0: 20 65 43 75 72 54 79 70 65 20 20 20 20 20 20 20   eCurType       
2000: 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74      /* Type of t
2010: 68 65 20 6e 65 77 20 63 75 72 73 6f 72 20 2a 2f  he new cursor */
2020: 0a 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68  .){.  /* Find th
2030: 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68  e memory cell th
2040: 61 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20  at will be used 
2050: 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f  to store the blo
2060: 62 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a  b of memory.  **
2070: 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68   required for th
2080: 69 73 20 56 64 62 65 43 75 72 73 6f 72 20 73 74  is VdbeCursor st
2090: 72 75 63 74 75 72 65 2e 20 49 74 20 69 73 20 63  ructure. It is c
20a0: 6f 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65  onvenient to use
20b0: 20 61 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65   a .  ** vdbe me
20c0: 6d 6f 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e  mory cell to man
20d0: 61 67 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61  age the memory a
20e0: 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72  llocation requir
20f0: 65 64 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64  ed for a.  ** Vd
2100: 62 65 43 75 72 73 6f 72 20 73 74 72 75 63 74 75  beCursor structu
2110: 72 65 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f  re for the follo
2120: 77 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20  wing reasons:.  
2130: 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65  **.  **   * Some
2140: 74 69 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d  times cursor num
2150: 62 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f  bers are used fo
2160: 72 20 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69  r a couple of di
2170: 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20  fferent.  **    
2180: 20 70 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76   purposes in a v
2190: 64 62 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65  dbe program. The
21a0: 20 64 69 66 66 65 72 65 6e 74 20 75 73 65 73 20   different uses 
21b0: 6d 69 67 68 74 20 72 65 71 75 69 72 65 0a 20 20  might require.  
21c0: 2a 2a 20 20 20 20 20 64 69 66 66 65 72 65 6e 74  **     different
21d0: 20 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f   sized allocatio
21e0: 6e 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73  ns. Memory cells
21f0: 20 70 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c   provide growabl
2200: 65 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63  e.  **     alloc
2210: 61 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a  ations..  **.  *
2220: 2a 20 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67  *   * When using
2230: 20 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d   ENABLE_MEMORY_M
2240: 41 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72  ANAGEMENT, memor
2250: 79 20 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63  y cell buffers c
2260: 61 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66  an.  **     be f
2270: 72 65 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20  reed lazily via 
2280: 74 68 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65  the sqlite3_rele
2290: 61 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49  ase_memory() API
22a0: 2e 20 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20  . This.  **     
22b0: 6d 69 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75  minimizes the nu
22c0: 6d 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63  mber of malloc c
22d0: 61 6c 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65  alls made by the
22e0: 20 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20   system..  **.  
22f0: 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 63 65  ** The memory ce
2300: 6c 6c 20 66 6f 72 20 63 75 72 73 6f 72 20 30 20  ll for cursor 0 
2310: 69 73 20 61 4d 65 6d 5b 30 5d 2e 20 54 68 65 20  is aMem[0]. The 
2320: 72 65 73 74 20 61 72 65 20 61 6c 6c 6f 63 61 74  rest are allocat
2330: 65 64 20 66 72 6f 6d 0a 20 20 2a 2a 20 74 68 65  ed from.  ** the
2340: 20 74 6f 70 20 6f 66 20 74 68 65 20 72 65 67 69   top of the regi
2350: 73 74 65 72 20 73 70 61 63 65 2e 20 20 43 75 72  ster space.  Cur
2360: 73 6f 72 20 31 20 69 73 20 61 74 20 4d 65 6d 5b  sor 1 is at Mem[
2370: 70 2d 3e 6e 4d 65 6d 2d 31 5d 2e 0a 20 20 2a 2a  p->nMem-1]..  **
2380: 20 43 75 72 73 6f 72 20 32 20 69 73 20 61 74 20   Cursor 2 is at 
2390: 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 32 5d 2e 20  Mem[p->nMem-2]. 
23a0: 41 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20  And so forth..  
23b0: 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d  */.  Mem *pMem =
23c0: 20 69 43 75 72 3e 30 20 3f 20 26 70 2d 3e 61 4d   iCur>0 ? &p->aM
23d0: 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d  em[p->nMem-iCur]
23e0: 20 3a 20 70 2d 3e 61 4d 65 6d 3b 0a 0a 20 20 69   : p->aMem;..  i
23f0: 6e 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65  nt nByte;.  Vdbe
2400: 43 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b  Cursor *pCx = 0;
2410: 0a 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20  .  nByte = .    
2420: 20 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28    ROUND8(sizeof(
2430: 56 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32  VdbeCursor)) + 2
2440: 2a 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69  *sizeof(u32)*nFi
2450: 65 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 65 43  eld + .      (eC
2460: 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
2470: 42 54 52 45 45 3f 73 71 6c 69 74 65 33 42 74 72  BTREE?sqlite3Btr
2480: 65 65 43 75 72 73 6f 72 53 69 7a 65 28 29 3a 30  eeCursorSize():0
2490: 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 43  );..  assert( iC
24a0: 75 72 3e 3d 30 20 26 26 20 69 43 75 72 3c 70 2d  ur>=0 && iCur<p-
24b0: 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66  >nCursor );.  if
24c0: 28 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d  ( p->apCsr[iCur]
24d0: 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49   ){ /*OPTIMIZATI
24e0: 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20  ON-IF-FALSE*/.  
24f0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65    sqlite3VdbeFre
2500: 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70  eCursor(p, p->ap
2510: 43 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20  Csr[iCur]);.    
2520: 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d  p->apCsr[iCur] =
2530: 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53 51   0;.  }.  if( SQ
2540: 4c 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33  LITE_OK==sqlite3
2550: 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52  VdbeMemClearAndR
2560: 65 73 69 7a 65 28 70 4d 65 6d 2c 20 6e 42 79 74  esize(pMem, nByt
2570: 65 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70 43  e) ){.    p->apC
2580: 73 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20 3d  sr[iCur] = pCx =
2590: 20 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70 4d   (VdbeCursor*)pM
25a0: 65 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73 65  em->z;.    memse
25b0: 74 28 70 43 78 2c 20 30 2c 20 6f 66 66 73 65 74  t(pCx, 0, offset
25c0: 6f 66 28 56 64 62 65 43 75 72 73 6f 72 2c 70 41  of(VdbeCursor,pA
25d0: 6c 74 43 75 72 73 6f 72 29 29 3b 0a 20 20 20 20  ltCursor));.    
25e0: 70 43 78 2d 3e 65 43 75 72 54 79 70 65 20 3d 20  pCx->eCurType = 
25f0: 65 43 75 72 54 79 70 65 3b 0a 20 20 20 20 70 43  eCurType;.    pC
2600: 78 2d 3e 69 44 62 20 3d 20 69 44 62 3b 0a 20 20  x->iDb = iDb;.  
2610: 20 20 70 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20    pCx->nField = 
2620: 6e 46 69 65 6c 64 3b 0a 20 20 20 20 70 43 78 2d  nField;.    pCx-
2630: 3e 61 4f 66 66 73 65 74 20 3d 20 26 70 43 78 2d  >aOffset = &pCx-
2640: 3e 61 54 79 70 65 5b 6e 46 69 65 6c 64 5d 3b 0a  >aType[nField];.
2650: 20 20 20 20 69 66 28 20 65 43 75 72 54 79 70 65      if( eCurType
2660: 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
2670: 29 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e 75 63  ){.      pCx->uc
2680: 2e 70 43 75 72 73 6f 72 20 3d 20 28 42 74 43 75  .pCursor = (BtCu
2690: 72 73 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20  rsor*).         
26a0: 20 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38   &pMem->z[ROUND8
26b0: 28 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73  (sizeof(VdbeCurs
26c0: 6f 72 29 29 2b 32 2a 73 69 7a 65 6f 66 28 75 33  or))+2*sizeof(u3
26d0: 32 29 2a 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20  2)*nField];.    
26e0: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75    sqlite3BtreeCu
26f0: 72 73 6f 72 5a 65 72 6f 28 70 43 78 2d 3e 75 63  rsorZero(pCx->uc
2700: 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d  .pCursor);.    }
2710: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 70 43  .  }.  return pC
2720: 78 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20  x;.}../*.** Try 
2730: 74 6f 20 63 6f 6e 76 65 72 74 20 61 20 76 61 6c  to convert a val
2740: 75 65 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69  ue into a numeri
2750: 63 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  c representation
2760: 20 69 66 20 77 65 20 63 61 6e 0a 2a 2a 20 64 6f   if we can.** do
2770: 20 73 6f 20 77 69 74 68 6f 75 74 20 6c 6f 73 73   so without loss
2780: 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e   of information.
2790: 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
27a0: 2c 20 69 66 20 74 68 65 20 73 74 72 69 6e 67 0a  , if the string.
27b0: 2a 2a 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20 61 20  ** looks like a 
27c0: 6e 75 6d 62 65 72 2c 20 63 6f 6e 76 65 72 74 20  number, convert 
27d0: 69 74 20 69 6e 74 6f 20 61 20 6e 75 6d 62 65 72  it into a number
27e0: 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f  .  If it does no
27f0: 74 0a 2a 2a 20 6c 6f 6f 6b 20 6c 69 6b 65 20 61  t.** look like a
2800: 20 6e 75 6d 62 65 72 2c 20 6c 65 61 76 65 20 69   number, leave i
2810: 74 20 61 6c 6f 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49  t alone..**.** I
2820: 66 20 74 68 65 20 62 54 72 79 46 6f 72 49 6e 74  f the bTryForInt
2830: 20 66 6c 61 67 20 69 73 20 74 72 75 65 2c 20 74   flag is true, t
2840: 68 65 6e 20 65 78 74 72 61 20 65 66 66 6f 72 74  hen extra effort
2850: 20 69 73 20 6d 61 64 65 20 74 6f 20 67 69 76 65   is made to give
2860: 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 20 72  .** an integer r
2870: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20  epresentation.  
2880: 53 74 72 69 6e 67 73 20 74 68 61 74 20 6c 6f 6f  Strings that loo
2890: 6b 20 6c 69 6b 65 20 66 6c 6f 61 74 69 6e 67 20  k like floating 
28a0: 70 6f 69 6e 74 0a 2a 2a 20 76 61 6c 75 65 73 20  point.** values 
28b0: 62 75 74 20 77 68 69 63 68 20 68 61 76 65 20 6e  but which have n
28c0: 6f 20 66 72 61 63 74 69 6f 6e 61 6c 20 63 6f 6d  o fractional com
28d0: 70 6f 6e 65 6e 74 20 28 65 78 61 6d 70 6c 65 3a  ponent (example:
28e0: 20 27 34 38 2e 30 30 27 29 0a 2a 2a 20 77 69 6c   '48.00').** wil
28f0: 6c 20 68 61 76 65 20 61 20 4d 45 4d 5f 49 6e 74  l have a MEM_Int
2900: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2910: 77 68 65 6e 20 62 54 72 79 46 6f 72 49 6e 74 20  when bTryForInt 
2920: 69 73 20 74 72 75 65 2e 0a 2a 2a 0a 2a 2a 20 49  is true..**.** I
2930: 66 20 62 54 72 79 46 6f 72 49 6e 74 20 69 73 20  f bTryForInt is 
2940: 66 61 6c 73 65 2c 20 74 68 65 6e 20 69 66 20 74  false, then if t
2950: 68 65 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20  he input string 
2960: 63 6f 6e 74 61 69 6e 73 20 61 20 64 65 63 69 6d  contains a decim
2970: 61 6c 0a 2a 2a 20 70 6f 69 6e 74 20 6f 72 20 65  al.** point or e
2980: 78 70 6f 6e 65 6e 74 69 61 6c 20 6e 6f 74 61 74  xponential notat
2990: 69 6f 6e 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ion, the result 
29a0: 69 73 20 6f 6e 6c 79 20 4d 45 4d 5f 52 65 61 6c  is only MEM_Real
29b0: 2c 20 65 76 65 6e 0a 2a 2a 20 69 66 20 74 68 65  , even.** if the
29c0: 72 65 20 69 73 20 61 6e 20 65 78 61 63 74 20 69  re is an exact i
29d0: 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74  nteger represent
29e0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 71 75 61  ation of the qua
29f0: 6e 74 69 74 79 2e 0a 2a 2f 0a 73 74 61 74 69 63  ntity..*/.static
2a00: 20 76 6f 69 64 20 61 70 70 6c 79 4e 75 6d 65 72   void applyNumer
2a10: 69 63 41 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a  icAffinity(Mem *
2a20: 70 52 65 63 2c 20 69 6e 74 20 62 54 72 79 46 6f  pRec, int bTryFo
2a30: 72 49 6e 74 29 7b 0a 20 20 64 6f 75 62 6c 65 20  rInt){.  double 
2a40: 72 56 61 6c 75 65 3b 0a 20 20 69 36 34 20 69 56  rValue;.  i64 iV
2a50: 61 6c 75 65 3b 0a 20 20 75 38 20 65 6e 63 20 3d  alue;.  u8 enc =
2a60: 20 70 52 65 63 2d 3e 65 6e 63 3b 0a 20 20 61 73   pRec->enc;.  as
2a70: 73 65 72 74 28 20 28 70 52 65 63 2d 3e 66 6c 61  sert( (pRec->fla
2a80: 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
2a90: 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29  M_Int|MEM_Real))
2aa0: 3d 3d 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 69  ==MEM_Str );.  i
2ab0: 66 28 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70  f( sqlite3AtoF(p
2ac0: 52 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75 65 2c  Rec->z, &rValue,
2ad0: 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3d 3d   pRec->n, enc)==
2ae0: 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66  0 ) return;.  if
2af0: 28 20 30 3d 3d 73 71 6c 69 74 65 33 41 74 6f 69  ( 0==sqlite3Atoi
2b00: 36 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69 56 61  64(pRec->z, &iVa
2b10: 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 65 6e  lue, pRec->n, en
2b20: 63 29 20 29 7b 0a 20 20 20 20 70 52 65 63 2d 3e  c) ){.    pRec->
2b30: 75 2e 69 20 3d 20 69 56 61 6c 75 65 3b 0a 20 20  u.i = iValue;.  
2b40: 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d    pRec->flags |=
2b50: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 65 6c 73   MEM_Int;.  }els
2b60: 65 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75 2e 72  e{.    pRec->u.r
2b70: 20 3d 20 72 56 61 6c 75 65 3b 0a 20 20 20 20 70   = rValue;.    p
2b80: 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  Rec->flags |= ME
2b90: 4d 5f 52 65 61 6c 3b 0a 20 20 20 20 69 66 28 20  M_Real;.    if( 
2ba0: 62 54 72 79 46 6f 72 49 6e 74 20 29 20 73 71 6c  bTryForInt ) sql
2bb0: 69 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41  ite3VdbeIntegerA
2bc0: 66 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20  ffinity(pRec);. 
2bd0: 20 7d 0a 20 20 2f 2a 20 54 45 58 54 2d 3e 4e 55   }.  /* TEXT->NU
2be0: 4d 45 52 49 43 20 69 73 20 6d 61 6e 79 2d 3e 6f  MERIC is many->o
2bf0: 6e 65 2e 20 20 48 65 6e 63 65 2c 20 69 74 20 69  ne.  Hence, it i
2c00: 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 69  s important to i
2c10: 6e 76 61 6c 69 64 61 74 65 20 74 68 65 0a 20 20  nvalidate the.  
2c20: 2a 2a 20 73 74 72 69 6e 67 20 72 65 70 72 65 73  ** string repres
2c30: 65 6e 74 61 74 69 6f 6e 20 61 66 74 65 72 20 63  entation after c
2c40: 6f 6d 70 75 74 69 6e 67 20 61 20 6e 75 6d 65 72  omputing a numer
2c50: 69 63 20 65 71 75 69 76 61 6c 65 6e 74 2c 20 62  ic equivalent, b
2c60: 65 63 61 75 73 65 20 74 68 65 0a 20 20 2a 2a 20  ecause the.  ** 
2c70: 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74  string represent
2c80: 61 74 69 6f 6e 20 6d 69 67 68 74 20 6e 6f 74 20  ation might not 
2c90: 62 65 20 74 68 65 20 63 61 6e 6f 6e 69 63 61 6c  be the canonical
2ca0: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2cb0: 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 6e 75 6d  for the.  ** num
2cc0: 65 72 69 63 20 76 61 6c 75 65 2e 20 20 54 69 63  eric value.  Tic
2cd0: 6b 65 74 20 5b 33 34 33 36 33 34 39 34 32 64 64  ket [343634942dd
2ce0: 35 34 61 62 35 37 62 37 30 32 34 5d 20 32 30 31  54ab57b7024] 201
2cf0: 38 2d 30 31 2d 33 31 2e 20 2a 2f 0a 20 20 70 52  8-01-31. */.  pR
2d00: 65 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45  ec->flags &= ~ME
2d10: 4d 5f 53 74 72 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  M_Str;.}../*.** 
2d20: 50 72 6f 63 65 73 73 69 6e 67 20 69 73 20 64 65  Processing is de
2d30: 74 65 72 6d 69 6e 65 20 62 79 20 74 68 65 20 61  termine by the a
2d40: 66 66 69 6e 69 74 79 20 70 61 72 61 6d 65 74 65  ffinity paramete
2d50: 72 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f  r:.**.** SQLITE_
2d60: 41 46 46 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a 20  AFF_INTEGER:.** 
2d70: 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 3a  SQLITE_AFF_REAL:
2d80: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e  .** SQLITE_AFF_N
2d90: 55 4d 45 52 49 43 3a 0a 2a 2a 20 20 20 20 54 72  UMERIC:.**    Tr
2da0: 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 70 52 65  y to convert pRe
2db0: 63 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  c to an integer 
2dc0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
2dd0: 72 20 61 20 0a 2a 2a 20 20 20 20 66 6c 6f 61 74  r a .**    float
2de0: 69 6e 67 2d 70 6f 69 6e 74 20 72 65 70 72 65 73  ing-point repres
2df0: 65 6e 74 61 74 69 6f 6e 20 69 66 20 61 6e 20 69  entation if an i
2e00: 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74  nteger represent
2e10: 61 74 69 6f 6e 0a 2a 2a 20 20 20 20 69 73 20 6e  ation.**    is n
2e20: 6f 74 20 70 6f 73 73 69 62 6c 65 2e 20 20 4e 6f  ot possible.  No
2e30: 74 65 20 74 68 61 74 20 74 68 65 20 69 6e 74 65  te that the inte
2e40: 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69  ger representati
2e50: 6f 6e 20 69 73 0a 2a 2a 20 20 20 20 61 6c 77 61  on is.**    alwa
2e60: 79 73 20 70 72 65 66 65 72 72 65 64 2c 20 65 76  ys preferred, ev
2e70: 65 6e 20 69 66 20 74 68 65 20 61 66 66 69 6e 69  en if the affini
2e80: 74 79 20 69 73 20 52 45 41 4c 2c 20 62 65 63 61  ty is REAL, beca
2e90: 75 73 65 0a 2a 2a 20 20 20 20 61 6e 20 69 6e 74  use.**    an int
2ea0: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
2eb0: 69 6f 6e 20 69 73 20 6d 6f 72 65 20 73 70 61 63  ion is more spac
2ec0: 65 20 65 66 66 69 63 69 65 6e 74 20 6f 6e 20 64  e efficient on d
2ed0: 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54  isk..**.** SQLIT
2ee0: 45 5f 41 46 46 5f 54 45 58 54 3a 0a 2a 2a 20 20  E_AFF_TEXT:.**  
2ef0: 20 20 43 6f 6e 76 65 72 74 20 70 52 65 63 20 74    Convert pRec t
2f00: 6f 20 61 20 74 65 78 74 20 72 65 70 72 65 73 65  o a text represe
2f10: 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53  ntation..**.** S
2f20: 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 3a 0a  QLITE_AFF_BLOB:.
2f30: 2a 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20 20 70 52  **    No-op.  pR
2f40: 65 63 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e  ec is unchanged.
2f50: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
2f60: 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20  applyAffinity(. 
2f70: 20 4d 65 6d 20 2a 70 52 65 63 2c 20 20 20 20 20   Mem *pRec,     
2f80: 20 20 20 20 20 2f 2a 20 54 68 65 20 76 61 6c 75       /* The valu
2f90: 65 20 74 6f 20 61 70 70 6c 79 20 61 66 66 69 6e  e to apply affin
2fa0: 69 74 79 20 74 6f 20 2a 2f 0a 20 20 63 68 61 72  ity to */.  char
2fb0: 20 61 66 66 69 6e 69 74 79 2c 20 20 20 20 20 20   affinity,      
2fc0: 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20  /* The affinity 
2fd0: 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f  to be applied */
2fe0: 0a 20 20 75 38 20 65 6e 63 20 20 20 20 20 20 20  .  u8 enc       
2ff0: 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68         /* Use th
3000: 69 73 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67  is text encoding
3010: 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61 66 66   */.){.  if( aff
3020: 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41 46  inity>=SQLITE_AF
3030: 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20 20 20  F_NUMERIC ){.   
3040: 20 61 73 73 65 72 74 28 20 61 66 66 69 6e 69 74   assert( affinit
3050: 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  y==SQLITE_AFF_IN
3060: 54 45 47 45 52 20 7c 7c 20 61 66 66 69 6e 69 74  TEGER || affinit
3070: 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45  y==SQLITE_AFF_RE
3080: 41 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  AL.             
3090: 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c  || affinity==SQL
30a0: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20  ITE_AFF_NUMERIC 
30b0: 29 3b 0a 20 20 20 20 69 66 28 20 28 70 52 65 63  );.    if( (pRec
30c0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
30d0: 74 29 3d 3d 30 20 29 7b 20 2f 2a 4f 50 54 49 4d  t)==0 ){ /*OPTIM
30e0: 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45  IZATION-IF-FALSE
30f0: 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28 70 52  */.      if( (pR
3100: 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ec->flags & MEM_
3110: 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Real)==0 ){.    
3120: 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c      if( pRec->fl
3130: 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 29 20  ags & MEM_Str ) 
3140: 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69  applyNumericAffi
3150: 6e 69 74 79 28 70 52 65 63 2c 31 29 3b 0a 20 20  nity(pRec,1);.  
3160: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
3170: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e     sqlite3VdbeIn
3180: 74 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 52  tegerAffinity(pR
3190: 65 63 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ec);.      }.   
31a0: 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 61   }.  }else if( a
31b0: 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f  ffinity==SQLITE_
31c0: 41 46 46 5f 54 45 58 54 20 29 7b 0a 20 20 20 20  AFF_TEXT ){.    
31d0: 2f 2a 20 4f 6e 6c 79 20 61 74 74 65 6d 70 74 20  /* Only attempt 
31e0: 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74  the conversion t
31f0: 6f 20 54 45 58 54 20 69 66 20 74 68 65 72 65 20  o TEXT if there 
3200: 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72  is an integer or
3210: 20 72 65 61 6c 0a 20 20 20 20 2a 2a 20 72 65 70   real.    ** rep
3220: 72 65 73 65 6e 74 61 74 69 6f 6e 20 28 62 6c 6f  resentation (blo
3230: 62 20 61 6e 64 20 4e 55 4c 4c 20 64 6f 20 6e 6f  b and NULL do no
3240: 74 20 67 65 74 20 63 6f 6e 76 65 72 74 65 64 29  t get converted)
3250: 20 62 75 74 20 6e 6f 20 73 74 72 69 6e 67 0a 20   but no string. 
3260: 20 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61     ** representa
3270: 74 69 6f 6e 2e 20 20 49 74 20 77 6f 75 6c 64 20  tion.  It would 
3280: 62 65 20 68 61 72 6d 6c 65 73 73 20 74 6f 20 72  be harmless to r
3290: 65 70 65 61 74 20 74 68 65 20 63 6f 6e 76 65 72  epeat the conver
32a0: 73 69 6f 6e 20 69 66 20 0a 20 20 20 20 2a 2a 20  sion if .    ** 
32b0: 74 68 65 72 65 20 69 73 20 61 6c 72 65 61 64 79  there is already
32c0: 20 61 20 73 74 72 69 6e 67 20 72 65 70 2c 20 62   a string rep, b
32d0: 75 74 20 69 74 20 69 73 20 70 6f 69 6e 74 6c 65  ut it is pointle
32e0: 73 73 20 74 6f 20 77 61 73 74 65 20 74 68 6f 73  ss to waste thos
32f0: 65 0a 20 20 20 20 2a 2a 20 43 50 55 20 63 79 63  e.    ** CPU cyc
3300: 6c 65 73 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20  les. */.    if( 
3310: 30 3d 3d 28 70 52 65 63 2d 3e 66 6c 61 67 73 26  0==(pRec->flags&
3320: 4d 45 4d 5f 53 74 72 29 20 29 7b 20 2f 2a 4f 50  MEM_Str) ){ /*OP
3330: 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41  TIMIZATION-IF-FA
3340: 4c 53 45 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  LSE*/.      if( 
3350: 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 28 4d 45  (pRec->flags&(ME
3360: 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29  M_Real|MEM_Int))
3370: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
3380: 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67  te3VdbeMemString
3390: 69 66 79 28 70 52 65 63 2c 20 65 6e 63 2c 20 31  ify(pRec, enc, 1
33a0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
33b0: 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73  .    pRec->flags
33c0: 20 26 3d 20 7e 28 4d 45 4d 5f 52 65 61 6c 7c 4d   &= ~(MEM_Real|M
33d0: 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 7d 0a 0a  EM_Int);.  }.}..
33e0: 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e  /*.** Try to con
33f0: 76 65 72 74 20 74 68 65 20 74 79 70 65 20 6f 66  vert the type of
3400: 20 61 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75   a function argu
3410: 6d 65 6e 74 20 6f 72 20 61 20 72 65 73 75 6c 74  ment or a result
3420: 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 69 6e 74 6f 20   column.** into 
3430: 61 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73  a numeric repres
3440: 65 6e 74 61 74 69 6f 6e 2e 20 20 55 73 65 20 65  entation.  Use e
3450: 69 74 68 65 72 20 49 4e 54 45 47 45 52 20 6f 72  ither INTEGER or
3460: 20 52 45 41 4c 20 77 68 69 63 68 65 76 65 72 0a   REAL whichever.
3470: 2a 2a 20 69 73 20 61 70 70 72 6f 70 72 69 61 74  ** is appropriat
3480: 65 2e 20 20 42 75 74 20 6f 6e 6c 79 20 64 6f 20  e.  But only do 
3490: 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  the conversion i
34a0: 66 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65  f it is possible
34b0: 20 77 69 74 68 6f 75 74 0a 2a 2a 20 6c 6f 73 73   without.** loss
34c0: 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20   of information 
34d0: 61 6e 64 20 72 65 74 75 72 6e 20 74 68 65 20 72  and return the r
34e0: 65 76 69 73 65 64 20 74 79 70 65 20 6f 66 20 74  evised type of t
34f0: 68 65 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a  he argument..*/.
3500: 69 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  int sqlite3_valu
3510: 65 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65 28 73  e_numeric_type(s
3520: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56  qlite3_value *pV
3530: 61 6c 29 7b 0a 20 20 69 6e 74 20 65 54 79 70 65  al){.  int eType
3540: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
3550: 5f 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20 69  _type(pVal);.  i
3560: 66 28 20 65 54 79 70 65 3d 3d 53 51 4c 49 54 45  f( eType==SQLITE
3570: 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 4d 65 6d  _TEXT ){.    Mem
3580: 20 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70   *pMem = (Mem*)p
3590: 56 61 6c 3b 0a 20 20 20 20 61 70 70 6c 79 4e 75  Val;.    applyNu
35a0: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 4d  mericAffinity(pM
35b0: 65 6d 2c 20 30 29 3b 0a 20 20 20 20 65 54 79 70  em, 0);.    eTyp
35c0: 65 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  e = sqlite3_valu
35d0: 65 5f 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20  e_type(pVal);.  
35e0: 7d 0a 20 20 72 65 74 75 72 6e 20 65 54 79 70 65  }.  return eType
35f0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72  ;.}../*.** Expor
3600: 74 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61  ted version of a
3610: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20  pplyAffinity(). 
3620: 54 68 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f  This one works o
3630: 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  n sqlite3_value*
3640: 2c 20 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e  , .** not the in
3650: 74 65 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65  ternal Mem* type
3660: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
3670: 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e  3ValueApplyAffin
3680: 69 74 79 28 0a 20 20 73 71 6c 69 74 65 33 5f 76  ity(.  sqlite3_v
3690: 61 6c 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75  alue *pVal, .  u
36a0: 38 20 61 66 66 69 6e 69 74 79 2c 20 0a 20 20 75  8 affinity, .  u
36b0: 38 20 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79  8 enc.){.  apply
36c0: 41 66 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29  Affinity((Mem *)
36d0: 70 56 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20  pVal, affinity, 
36e0: 65 6e 63 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 70  enc);.}../*.** p
36f0: 4d 65 6d 20 63 75 72 72 65 6e 74 6c 79 20 6f 6e  Mem currently on
3700: 6c 79 20 68 6f 6c 64 73 20 61 20 73 74 72 69 6e  ly holds a strin
3710: 67 20 74 79 70 65 20 28 6f 72 20 6d 61 79 62 65  g type (or maybe
3720: 20 61 20 42 4c 4f 42 20 74 68 61 74 20 77 65 20   a BLOB that we 
3730: 63 61 6e 0a 2a 2a 20 69 6e 74 65 72 70 72 65 74  can.** interpret
3740: 20 61 73 20 61 20 73 74 72 69 6e 67 20 69 66 20   as a string if 
3750: 77 65 20 77 61 6e 74 20 74 6f 29 2e 20 20 43 6f  we want to).  Co
3760: 6d 70 75 74 65 20 69 74 73 20 63 6f 72 72 65 73  mpute its corres
3770: 70 6f 6e 64 69 6e 67 0a 2a 2a 20 6e 75 6d 65 72  ponding.** numer
3780: 69 63 20 74 79 70 65 2c 20 69 66 20 68 61 73 20  ic type, if has 
3790: 6f 6e 65 2e 20 20 53 65 74 20 74 68 65 20 70 4d  one.  Set the pM
37a0: 65 6d 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d  em->u.r and pMem
37b0: 2d 3e 75 2e 69 20 66 69 65 6c 64 73 0a 2a 2a 20  ->u.i fields.** 
37c0: 61 63 63 6f 72 64 69 6e 67 6c 79 2e 0a 2a 2f 0a  accordingly..*/.
37d0: 73 74 61 74 69 63 20 75 31 36 20 53 51 4c 49 54  static u16 SQLIT
37e0: 45 5f 4e 4f 49 4e 4c 49 4e 45 20 63 6f 6d 70 75  E_NOINLINE compu
37f0: 74 65 4e 75 6d 65 72 69 63 54 79 70 65 28 4d 65  teNumericType(Me
3800: 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 61 73 73 65  m *pMem){.  asse
3810: 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73  rt( (pMem->flags
3820: 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
3830: 52 65 61 6c 29 29 3d 3d 30 20 29 3b 0a 20 20 61  Real))==0 );.  a
3840: 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c  ssert( (pMem->fl
3850: 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d  ags & (MEM_Str|M
3860: 45 4d 5f 42 6c 6f 62 29 29 21 3d 30 20 29 3b 0a  EM_Blob))!=0 );.
3870: 20 20 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f    if( sqlite3Ato
3880: 46 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d  F(pMem->z, &pMem
3890: 2d 3e 75 2e 72 2c 20 70 4d 65 6d 2d 3e 6e 2c 20  ->u.r, pMem->n, 
38a0: 70 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 30 20 29 7b  pMem->enc)==0 ){
38b0: 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20  .    return 0;. 
38c0: 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33   }.  if( sqlite3
38d0: 41 74 6f 69 36 34 28 70 4d 65 6d 2d 3e 7a 2c 20  Atoi64(pMem->z, 
38e0: 26 70 4d 65 6d 2d 3e 75 2e 69 2c 20 70 4d 65 6d  &pMem->u.i, pMem
38f0: 2d 3e 6e 2c 20 70 4d 65 6d 2d 3e 65 6e 63 29 3d  ->n, pMem->enc)=
3900: 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  =0 ){.    return
3910: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20   MEM_Int;.  }.  
3920: 72 65 74 75 72 6e 20 4d 45 4d 5f 52 65 61 6c 3b  return MEM_Real;
3930: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  .}../*.** Return
3940: 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70   the numeric typ
3950: 65 20 66 6f 72 20 70 4d 65 6d 2c 20 65 69 74 68  e for pMem, eith
3960: 65 72 20 4d 45 4d 5f 49 6e 74 20 6f 72 20 4d 45  er MEM_Int or ME
3970: 4d 5f 52 65 61 6c 20 6f 72 20 62 6f 74 68 20 6f  M_Real or both o
3980: 72 0a 2a 2a 20 6e 6f 6e 65 2e 20 20 0a 2a 2a 0a  r.** none.  .**.
3990: 2a 2a 20 55 6e 6c 69 6b 65 20 61 70 70 6c 79 4e  ** Unlike applyN
39a0: 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 29  umericAffinity()
39b0: 2c 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 64  , this routine d
39c0: 6f 65 73 20 6e 6f 74 20 6d 6f 64 69 66 79 20 70  oes not modify p
39d0: 4d 65 6d 2d 3e 66 6c 61 67 73 2e 0a 2a 2a 20 42  Mem->flags..** B
39e0: 75 74 20 69 74 20 64 6f 65 73 20 73 65 74 20 70  ut it does set p
39f0: 4d 65 6d 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65  Mem->u.r and pMe
3a00: 6d 2d 3e 75 2e 69 20 61 70 70 72 6f 70 72 69 61  m->u.i appropria
3a10: 74 65 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  tely..*/.static 
3a20: 75 31 36 20 6e 75 6d 65 72 69 63 54 79 70 65 28  u16 numericType(
3a30: 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 66  Mem *pMem){.  if
3a40: 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20  ( pMem->flags & 
3a50: 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61  (MEM_Int|MEM_Rea
3a60: 6c 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  l) ){.    return
3a70: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28   pMem->flags & (
3a80: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
3a90: 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4d 65  );.  }.  if( pMe
3aa0: 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  m->flags & (MEM_
3ab0: 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b  Str|MEM_Blob) ){
3ac0: 0a 20 20 20 20 72 65 74 75 72 6e 20 63 6f 6d 70  .    return comp
3ad0: 75 74 65 4e 75 6d 65 72 69 63 54 79 70 65 28 70  uteNumericType(p
3ae0: 4d 65 6d 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75  Mem);.  }.  retu
3af0: 72 6e 20 30 3b 0a 7d 0a 0a 23 69 66 64 65 66 20  rn 0;.}..#ifdef 
3b00: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a  SQLITE_DEBUG./*.
3b10: 2a 2a 20 57 72 69 74 65 20 61 20 6e 69 63 65 20  ** Write a nice 
3b20: 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74  string represent
3b30: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e  ation of the con
3b40: 74 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d  tents of cell pM
3b50: 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65  em.** into buffe
3b60: 72 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e  r zBuf, length n
3b70: 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  Buf..*/.void sql
3b80: 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74  ite3VdbeMemPrett
3b90: 79 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d  yPrint(Mem *pMem
3ba0: 2c 20 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20  , char *zBuf){. 
3bb0: 20 63 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42   char *zCsr = zB
3bc0: 75 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d  uf;.  int f = pM
3bd0: 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74  em->flags;..  st
3be0: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
3bf0: 2a 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b  *const encnames[
3c00: 5d 20 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29  ] = {"(X)", "(8)
3c10: 22 2c 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31  ", "(16LE)", "(1
3c20: 36 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66  6BE)"};..  if( f
3c30: 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20  &MEM_Blob ){.   
3c40: 20 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72   int i;.    char
3c50: 20 63 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20   c;.    if( f & 
3c60: 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20  MEM_Dyn ){.     
3c70: 20 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20   c = 'z';.      
3c80: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
3c90: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68  M_Static|MEM_Eph
3ca0: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
3cb0: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3cc0: 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20  _Static ){.     
3cd0: 20 63 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20   c = 't';.      
3ce0: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
3cf0: 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29  M_Dyn|MEM_Ephem)
3d00: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
3d10: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70  e if( f & MEM_Ep
3d20: 68 65 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d  hem ){.      c =
3d30: 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65   'e';.      asse
3d40: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74  rt( (f & (MEM_St
3d50: 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d  atic|MEM_Dyn))==
3d60: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  0 );.    }else{.
3d70: 20 20 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20        c = 's';. 
3d80: 20 20 20 7d 0a 20 20 20 20 2a 28 7a 43 73 72 2b     }.    *(zCsr+
3d90: 2b 29 20 3d 20 63 3b 0a 20 20 20 20 73 71 6c 69  +) = c;.    sqli
3da0: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30  te3_snprintf(100
3db0: 2c 20 7a 43 73 72 2c 20 22 25 64 5b 22 2c 20 70  , zCsr, "%d[", p
3dc0: 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a 43 73  Mem->n);.    zCs
3dd0: 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  r += sqlite3Strl
3de0: 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20  en30(zCsr);.    
3df0: 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26  for(i=0; i<16 &&
3e00: 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29   i<pMem->n; i++)
3e10: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
3e20: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43  snprintf(100, zC
3e30: 73 72 2c 20 22 25 30 32 58 22 2c 20 28 28 69 6e  sr, "%02X", ((in
3e40: 74 29 70 4d 65 6d 2d 3e 7a 5b 69 5d 20 26 20 30  t)pMem->z[i] & 0
3e50: 78 46 46 29 29 3b 0a 20 20 20 20 20 20 7a 43 73  xFF));.      zCs
3e60: 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  r += sqlite3Strl
3e70: 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20  en30(zCsr);.    
3e80: 7d 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  }.    for(i=0; i
3e90: 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e  <16 && i<pMem->n
3ea0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 68  ; i++){.      ch
3eb0: 61 72 20 7a 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 69  ar z = pMem->z[i
3ec0: 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 3c 33  ];.      if( z<3
3ed0: 32 20 7c 7c 20 7a 3e 31 32 36 20 29 20 2a 7a 43  2 || z>126 ) *zC
3ee0: 73 72 2b 2b 20 3d 20 27 2e 27 3b 0a 20 20 20 20  sr++ = '.';.    
3ef0: 20 20 65 6c 73 65 20 2a 7a 43 73 72 2b 2b 20 3d    else *zCsr++ =
3f00: 20 7a 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a 28   z;.    }.    *(
3f10: 7a 43 73 72 2b 2b 29 20 3d 20 27 5d 27 3b 0a 20  zCsr++) = ']';. 
3f20: 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 5a     if( f & MEM_Z
3f30: 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ero ){.      sql
3f40: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
3f50: 30 2c 20 7a 43 73 72 2c 22 2b 25 64 7a 22 2c 70  0, zCsr,"+%dz",p
3f60: 4d 65 6d 2d 3e 75 2e 6e 5a 65 72 6f 29 3b 0a 20  Mem->u.nZero);. 
3f70: 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c       zCsr += sql
3f80: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73  ite3Strlen30(zCs
3f90: 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a 7a  r);.    }.    *z
3fa0: 43 73 72 20 3d 20 27 5c 30 27 3b 0a 20 20 7d 65  Csr = '\0';.  }e
3fb0: 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f  lse if( f & MEM_
3fc0: 53 74 72 20 29 7b 0a 20 20 20 20 69 6e 74 20 6a  Str ){.    int j
3fd0: 2c 20 6b 3b 0a 20 20 20 20 7a 42 75 66 5b 30 5d  , k;.    zBuf[0]
3fe0: 20 3d 20 27 20 27 3b 0a 20 20 20 20 69 66 28 20   = ' ';.    if( 
3ff0: 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20  f & MEM_Dyn ){. 
4000: 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27       zBuf[1] = '
4010: 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  z';.      assert
4020: 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74  ( (f & (MEM_Stat
4030: 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d  ic|MEM_Ephem))==
4040: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  0 );.    }else i
4050: 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74 69  f( f & MEM_Stati
4060: 63 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b  c ){.      zBuf[
4070: 31 5d 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20  1] = 't';.      
4080: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
4090: 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29  M_Dyn|MEM_Ephem)
40a0: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
40b0: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70  e if( f & MEM_Ep
40c0: 68 65 6d 20 29 7b 0a 20 20 20 20 20 20 7a 42 75  hem ){.      zBu
40d0: 66 5b 31 5d 20 3d 20 27 65 27 3b 0a 20 20 20 20  f[1] = 'e';.    
40e0: 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28    assert( (f & (
40f0: 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44  MEM_Static|MEM_D
4100: 79 6e 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  yn))==0 );.    }
4110: 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 42 75 66  else{.      zBuf
4120: 5b 31 5d 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d  [1] = 's';.    }
4130: 0a 20 20 20 20 6b 20 3d 20 32 3b 0a 20 20 20 20  .    k = 2;.    
4140: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
4150: 28 31 30 30 2c 20 26 7a 42 75 66 5b 6b 5d 2c 20  (100, &zBuf[k], 
4160: 22 25 64 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a  "%d", pMem->n);.
4170: 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65 33      k += sqlite3
4180: 53 74 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b 6b  Strlen30(&zBuf[k
4190: 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b  ]);.    zBuf[k++
41a0: 5d 20 3d 20 27 5b 27 3b 0a 20 20 20 20 66 6f 72  ] = '[';.    for
41b0: 28 6a 3d 30 3b 20 6a 3c 31 35 20 26 26 20 6a 3c  (j=0; j<15 && j<
41c0: 70 4d 65 6d 2d 3e 6e 3b 20 6a 2b 2b 29 7b 0a 20  pMem->n; j++){. 
41d0: 20 20 20 20 20 75 38 20 63 20 3d 20 70 4d 65 6d       u8 c = pMem
41e0: 2d 3e 7a 5b 6a 5d 3b 0a 20 20 20 20 20 20 69 66  ->z[j];.      if
41f0: 28 20 63 3e 3d 30 78 32 30 20 26 26 20 63 3c 30  ( c>=0x20 && c<0
4200: 78 37 66 20 29 7b 0a 20 20 20 20 20 20 20 20 7a  x7f ){.        z
4210: 42 75 66 5b 6b 2b 2b 5d 20 3d 20 63 3b 0a 20 20  Buf[k++] = c;.  
4220: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
4230: 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27     zBuf[k++] = '
4240: 2e 27 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  .';.      }.    
4250: 7d 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20  }.    zBuf[k++] 
4260: 3d 20 27 5d 27 3b 0a 20 20 20 20 73 71 6c 69 74  = ']';.    sqlit
4270: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
4280: 26 7a 42 75 66 5b 6b 5d 2c 20 65 6e 63 6e 61 6d  &zBuf[k], encnam
4290: 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a  es[pMem->enc]);.
42a0: 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65 33      k += sqlite3
42b0: 53 74 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b 6b  Strlen30(&zBuf[k
42c0: 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b  ]);.    zBuf[k++
42d0: 5d 20 3d 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e  ] = 0;.  }.}.#en
42e0: 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
42f0: 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 50  TE_DEBUG./*.** P
4300: 72 69 6e 74 20 74 68 65 20 76 61 6c 75 65 20 6f  rint the value o
4310: 66 20 61 20 72 65 67 69 73 74 65 72 20 66 6f 72  f a register for
4320: 20 74 72 61 63 69 6e 67 20 70 75 72 70 6f 73 65   tracing purpose
4330: 73 3a 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  s:.*/.static voi
4340: 64 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28  d memTracePrint(
4350: 4d 65 6d 20 2a 70 29 7b 0a 20 20 69 66 28 20 70  Mem *p){.  if( p
4360: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 55 6e  ->flags & MEM_Un
4370: 64 65 66 69 6e 65 64 20 29 7b 0a 20 20 20 20 70  defined ){.    p
4380: 72 69 6e 74 66 28 22 20 75 6e 64 65 66 69 6e 65  rintf(" undefine
4390: 64 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  d");.  }else if(
43a0: 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f   p->flags & MEM_
43b0: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70 72 69 6e  Null ){.    prin
43c0: 74 66 28 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45  tf(p->flags & ME
43d0: 4d 5f 5a 65 72 6f 20 3f 20 22 20 4e 55 4c 4c 2d  M_Zero ? " NULL-
43e0: 6e 6f 63 68 6e 67 22 20 3a 20 22 20 4e 55 4c 4c  nochng" : " NULL
43f0: 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  ");.  }else if( 
4400: 28 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  (p->flags & (MEM
4410: 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d  _Int|MEM_Str))==
4420: 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72  (MEM_Int|MEM_Str
4430: 29 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28  ) ){.    printf(
4440: 22 20 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75  " si:%lld", p->u
4450: 2e 69 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  .i);.  }else if(
4460: 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f   p->flags & MEM_
4470: 49 6e 74 20 29 7b 0a 20 20 20 20 70 72 69 6e 74  Int ){.    print
4480: 66 28 22 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e  f(" i:%lld", p->
4490: 75 2e 69 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  u.i);.#ifndef SQ
44a0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
44b0: 4e 47 5f 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65  NG_POINT.  }else
44c0: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
44d0: 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20  MEM_Real ){.    
44e0: 70 72 69 6e 74 66 28 22 20 72 3a 25 67 22 2c 20  printf(" r:%g", 
44f0: 70 2d 3e 75 2e 72 29 3b 0a 23 65 6e 64 69 66 0a  p->u.r);.#endif.
4500: 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69    }else if( sqli
4510: 74 65 33 56 64 62 65 4d 65 6d 49 73 52 6f 77 53  te3VdbeMemIsRowS
4520: 65 74 28 70 29 20 29 7b 0a 20 20 20 20 70 72 69  et(p) ){.    pri
4530: 6e 74 66 28 22 20 28 72 6f 77 73 65 74 29 22 29  ntf(" (rowset)")
4540: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63  ;.  }else{.    c
4550: 68 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b 0a 20  har zBuf[200];. 
4560: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
4570: 6d 50 72 65 74 74 79 50 72 69 6e 74 28 70 2c 20  mPrettyPrint(p, 
4580: 7a 42 75 66 29 3b 0a 20 20 20 20 70 72 69 6e 74  zBuf);.    print
4590: 66 28 22 20 25 73 22 2c 20 7a 42 75 66 29 3b 0a  f(" %s", zBuf);.
45a0: 20 20 7d 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61    }.  if( p->fla
45b0: 67 73 20 26 20 4d 45 4d 5f 53 75 62 74 79 70 65  gs & MEM_Subtype
45c0: 20 29 20 70 72 69 6e 74 66 28 22 20 73 75 62 74   ) printf(" subt
45d0: 79 70 65 3d 30 78 25 30 32 78 22 2c 20 70 2d 3e  ype=0x%02x", p->
45e0: 65 53 75 62 74 79 70 65 29 3b 0a 7d 0a 73 74 61  eSubtype);.}.sta
45f0: 74 69 63 20 76 6f 69 64 20 72 65 67 69 73 74 65  tic void registe
4600: 72 54 72 61 63 65 28 69 6e 74 20 69 52 65 67 2c  rTrace(int iReg,
4610: 20 4d 65 6d 20 2a 70 29 7b 0a 20 20 70 72 69 6e   Mem *p){.  prin
4620: 74 66 28 22 52 45 47 5b 25 64 5d 20 3d 20 22 2c  tf("REG[%d] = ",
4630: 20 69 52 65 67 29 3b 0a 20 20 6d 65 6d 54 72 61   iReg);.  memTra
4640: 63 65 50 72 69 6e 74 28 70 29 3b 0a 20 20 70 72  cePrint(p);.  pr
4650: 69 6e 74 66 28 22 5c 6e 22 29 3b 0a 20 20 73 71  intf("\n");.  sq
4660: 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65  lite3VdbeCheckMe
4670: 6d 49 6e 76 61 72 69 61 6e 74 73 28 70 29 3b 0a  mInvariants(p);.
4680: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  }.#endif..#ifdef
4690: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20   SQLITE_DEBUG.# 
46a0: 20 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52   define REGISTER
46b0: 5f 54 52 41 43 45 28 52 2c 4d 29 20 69 66 28 64  _TRACE(R,M) if(d
46c0: 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
46d0: 56 64 62 65 54 72 61 63 65 29 72 65 67 69 73 74  VdbeTrace)regist
46e0: 65 72 54 72 61 63 65 28 52 2c 4d 29 0a 23 65 6c  erTrace(R,M).#el
46f0: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47  se.#  define REG
4700: 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29  ISTER_TRACE(R,M)
4710: 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 64 65 66  .#endif...#ifdef
4720: 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f   VDBE_PROFILE../
4730: 2a 20 0a 2a 2a 20 68 77 74 69 6d 65 2e 68 20 63  * .** hwtime.h c
4740: 6f 6e 74 61 69 6e 73 20 69 6e 6c 69 6e 65 20 61  ontains inline a
4750: 73 73 65 6d 62 6c 65 72 20 63 6f 64 65 20 66 6f  ssembler code fo
4760: 72 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 0a  r implementing .
4770: 2a 2a 20 68 69 67 68 2d 70 65 72 66 6f 72 6d 61  ** high-performa
4780: 6e 63 65 20 74 69 6d 69 6e 67 20 72 6f 75 74 69  nce timing routi
4790: 6e 65 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65  nes..*/.#include
47a0: 20 22 68 77 74 69 6d 65 2e 68 22 0a 0a 23 65 6e   "hwtime.h"..#en
47b0: 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45  dif..#ifndef NDE
47c0: 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66  BUG./*.** This f
47d0: 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  unction is only 
47e0: 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68  called from with
47f0: 69 6e 20 61 6e 20 61 73 73 65 72 74 28 29 20 65  in an assert() e
4800: 78 70 72 65 73 73 69 6f 6e 2e 20 49 74 0a 2a 2a  xpression. It.**
4810: 20 63 68 65 63 6b 73 20 74 68 61 74 20 74 68 65   checks that the
4820: 20 73 71 6c 69 74 65 33 2e 6e 54 72 61 6e 73 61   sqlite3.nTransa
4830: 63 74 69 6f 6e 20 76 61 72 69 61 62 6c 65 20 69  ction variable i
4840: 73 20 63 6f 72 72 65 63 74 6c 79 20 73 65 74 20  s correctly set 
4850: 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72  to.** the number
4860: 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74   of non-transact
4870: 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 63  ion savepoints c
4880: 75 72 72 65 6e 74 6c 79 20 69 6e 20 74 68 65 20  urrently in the 
4890: 0a 2a 2a 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  .** linked list 
48a0: 73 74 61 72 74 69 6e 67 20 61 74 20 73 71 6c 69  starting at sqli
48b0: 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 0a  te3.pSavepoint..
48c0: 2a 2a 20 0a 2a 2a 20 55 73 61 67 65 3a 0a 2a 2a  ** .** Usage:.**
48d0: 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20  .**     assert( 
48e0: 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f  checkSavepointCo
48f0: 75 6e 74 28 64 62 29 20 29 3b 0a 2a 2f 0a 73 74  unt(db) );.*/.st
4900: 61 74 69 63 20 69 6e 74 20 63 68 65 63 6b 53 61  atic int checkSa
4910: 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 73 71 6c  vepointCount(sql
4920: 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74  ite3 *db){.  int
4930: 20 6e 20 3d 20 30 3b 0a 20 20 53 61 76 65 70 6f   n = 0;.  Savepo
4940: 69 6e 74 20 2a 70 3b 0a 20 20 66 6f 72 28 70 3d  int *p;.  for(p=
4950: 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20  db->pSavepoint; 
4960: 70 3b 20 70 3d 70 2d 3e 70 4e 65 78 74 29 20 6e  p; p=p->pNext) n
4970: 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d  ++;.  assert( n=
4980: 3d 28 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  =(db->nSavepoint
4990: 20 2b 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63   + db->isTransac
49a0: 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 29 20 29  tionSavepoint) )
49b0: 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a  ;.  return 1;.}.
49c0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65  #endif../*.** Re
49d0: 74 75 72 6e 20 74 68 65 20 72 65 67 69 73 74 65  turn the registe
49e0: 72 20 6f 66 20 70 4f 70 2d 3e 70 32 20 61 66 74  r of pOp->p2 aft
49f0: 65 72 20 66 69 72 73 74 20 70 72 65 70 61 72 69  er first prepari
4a00: 6e 67 20 69 74 20 74 6f 20 62 65 0a 2a 2a 20 6f  ng it to be.** o
4a10: 76 65 72 77 72 69 74 74 65 6e 20 77 69 74 68 20  verwritten with 
4a20: 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  an integer value
4a30: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 53 51 4c 49  ..*/.static SQLI
4a40: 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 4d 65 6d 20  TE_NOINLINE Mem 
4a50: 2a 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 57  *out2PrereleaseW
4a60: 69 74 68 43 6c 65 61 72 28 4d 65 6d 20 2a 70 4f  ithClear(Mem *pO
4a70: 75 74 29 7b 0a 20 20 73 71 6c 69 74 65 33 56 64  ut){.  sqlite3Vd
4a80: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
4a90: 74 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  t);.  pOut->flag
4aa0: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 72  s = MEM_Int;.  r
4ab0: 65 74 75 72 6e 20 70 4f 75 74 3b 0a 7d 0a 73 74  eturn pOut;.}.st
4ac0: 61 74 69 63 20 4d 65 6d 20 2a 6f 75 74 32 50 72  atic Mem *out2Pr
4ad0: 65 72 65 6c 65 61 73 65 28 56 64 62 65 20 2a 70  erelease(Vdbe *p
4ae0: 2c 20 56 64 62 65 4f 70 20 2a 70 4f 70 29 7b 0a  , VdbeOp *pOp){.
4af0: 20 20 4d 65 6d 20 2a 70 4f 75 74 3b 0a 20 20 61    Mem *pOut;.  a
4b00: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
4b10: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
4b20: 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p2<=(p->nMem+
4b30: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
4b40: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e  );.  pOut = &p->
4b50: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
4b60: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
4b70: 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 69 66  e(p, pOut);.  if
4b80: 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63  ( VdbeMemDynamic
4b90: 28 70 4f 75 74 29 20 29 7b 20 2f 2a 4f 50 54 49  (pOut) ){ /*OPTI
4ba0: 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53  MIZATION-IF-FALS
4bb0: 45 2a 2f 0a 20 20 20 20 72 65 74 75 72 6e 20 6f  E*/.    return o
4bc0: 75 74 32 50 72 65 72 65 6c 65 61 73 65 57 69 74  ut2PrereleaseWit
4bd0: 68 43 6c 65 61 72 28 70 4f 75 74 29 3b 0a 20 20  hClear(pOut);.  
4be0: 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d  }else{.    pOut-
4bf0: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
4c00: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 70 4f 75  ;.    return pOu
4c10: 74 3b 0a 20 20 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a  t;.  }.}.../*.**
4c20: 20 45 78 65 63 75 74 65 20 61 73 20 6d 75 63 68   Execute as much
4c30: 20 6f 66 20 61 20 56 44 42 45 20 70 72 6f 67 72   of a VDBE progr
4c40: 61 6d 20 61 73 20 77 65 20 63 61 6e 2e 0a 2a 2a  am as we can..**
4c50: 20 54 68 69 73 20 69 73 20 74 68 65 20 63 6f 72   This is the cor
4c60: 65 20 6f 66 20 73 71 6c 69 74 65 33 5f 73 74 65  e of sqlite3_ste
4c70: 70 28 29 2e 20 20 0a 2a 2f 0a 69 6e 74 20 73 71  p().  .*/.int sq
4c80: 6c 69 74 65 33 56 64 62 65 45 78 65 63 28 0a 20  lite3VdbeExec(. 
4c90: 20 56 64 62 65 20 2a 70 20 20 20 20 20 20 20 20   Vdbe *p        
4ca0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
4cb0: 68 65 20 56 44 42 45 20 2a 2f 0a 29 7b 0a 20 20  he VDBE */.){.  
4cc0: 4f 70 20 2a 61 4f 70 20 3d 20 70 2d 3e 61 4f 70  Op *aOp = p->aOp
4cd0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  ;          /* Co
4ce0: 70 79 20 6f 66 20 70 2d 3e 61 4f 70 20 2a 2f 0a  py of p->aOp */.
4cf0: 20 20 4f 70 20 2a 70 4f 70 20 3d 20 61 4f 70 3b    Op *pOp = aOp;
4d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4d10: 43 75 72 72 65 6e 74 20 6f 70 65 72 61 74 69 6f  Current operatio
4d20: 6e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  n */.#if defined
4d30: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c  (SQLITE_DEBUG) |
4d40: 7c 20 64 65 66 69 6e 65 64 28 56 44 42 45 5f 50  | defined(VDBE_P
4d50: 52 4f 46 49 4c 45 29 0a 20 20 4f 70 20 2a 70 4f  ROFILE).  Op *pO
4d60: 72 69 67 4f 70 3b 20 20 20 20 20 20 20 20 20 20  rigOp;          
4d70: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66       /* Value of
4d80: 20 70 4f 70 20 61 74 20 74 68 65 20 74 6f 70 20   pOp at the top 
4d90: 6f 66 20 74 68 65 20 6c 6f 6f 70 20 2a 2f 0a 23  of the loop */.#
4da0: 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
4db0: 49 54 45 5f 44 45 42 55 47 0a 20 20 69 6e 74 20  ITE_DEBUG.  int 
4dc0: 6e 45 78 74 72 61 44 65 6c 65 74 65 20 3d 20 30  nExtraDelete = 0
4dd0: 3b 20 20 20 20 20 20 2f 2a 20 56 65 72 69 66 69  ;      /* Verifi
4de0: 65 73 20 46 4f 52 44 45 4c 45 54 45 20 61 6e 64  es FORDELETE and
4df0: 20 41 55 58 44 45 4c 45 54 45 20 66 6c 61 67 73   AUXDELETE flags
4e00: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
4e10: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
4e20: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
4e30: 20 74 6f 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20   to return */.  
4e40: 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 2d  sqlite3 *db = p-
4e50: 3e 64 62 3b 20 20 20 20 20 20 20 2f 2a 20 54 68  >db;       /* Th
4e60: 65 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20  e database */.  
4e70: 75 38 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e  u8 resetSchemaOn
4e80: 46 61 75 6c 74 20 3d 20 30 3b 20 2f 2a 20 52 65  Fault = 0; /* Re
4e90: 73 65 74 20 73 63 68 65 6d 61 20 61 66 74 65 72  set schema after
4ea0: 20 61 6e 20 65 72 72 6f 72 20 69 66 20 70 6f 73   an error if pos
4eb0: 69 74 69 76 65 20 2a 2f 0a 20 20 75 38 20 65 6e  itive */.  u8 en
4ec0: 63 6f 64 69 6e 67 20 3d 20 45 4e 43 28 64 62 29  coding = ENC(db)
4ed0: 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74  ;     /* The dat
4ee0: 61 62 61 73 65 20 65 6e 63 6f 64 69 6e 67 20 2a  abase encoding *
4ef0: 2f 0a 20 20 69 6e 74 20 69 43 6f 6d 70 61 72 65  /.  int iCompare
4f00: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f   = 0;          /
4f10: 2a 20 52 65 73 75 6c 74 20 6f 66 20 6c 61 73 74  * Result of last
4f20: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 2a 2f 0a 20   comparison */. 
4f30: 20 75 6e 73 69 67 6e 65 64 20 6e 56 6d 53 74 65   unsigned nVmSte
4f40: 70 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4e  p = 0;      /* N
4f50: 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c  umber of virtual
4f60: 20 6d 61 63 68 69 6e 65 20 73 74 65 70 73 20 2a   machine steps *
4f70: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
4f80: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
4f90: 41 4c 4c 42 41 43 4b 0a 20 20 75 6e 73 69 67 6e  ALLBACK.  unsign
4fa0: 65 64 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69  ed nProgressLimi
4fb0: 74 3b 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 78  t;   /* Invoke x
4fc0: 50 72 6f 67 72 65 73 73 28 29 20 77 68 65 6e 20  Progress() when 
4fd0: 6e 56 6d 53 74 65 70 20 72 65 61 63 68 65 73 20  nVmStep reaches 
4fe0: 74 68 69 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  this */.#endif. 
4ff0: 20 4d 65 6d 20 2a 61 4d 65 6d 20 3d 20 70 2d 3e   Mem *aMem = p->
5000: 61 4d 65 6d 3b 20 20 20 20 20 20 20 2f 2a 20 43  aMem;       /* C
5010: 6f 70 79 20 6f 66 20 70 2d 3e 61 4d 65 6d 20 2a  opy of p->aMem *
5020: 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31 20 3d 20  /.  Mem *pIn1 = 
5030: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  0;             /
5040: 2a 20 31 73 74 20 69 6e 70 75 74 20 6f 70 65 72  * 1st input oper
5050: 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49  and */.  Mem *pI
5060: 6e 32 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  n2 = 0;         
5070: 20 20 20 20 2f 2a 20 32 6e 64 20 69 6e 70 75 74      /* 2nd input
5080: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65   operand */.  Me
5090: 6d 20 2a 70 49 6e 33 20 3d 20 30 3b 20 20 20 20  m *pIn3 = 0;    
50a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 33 72 64 20           /* 3rd 
50b0: 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  input operand */
50c0: 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 20 3d 20 30  .  Mem *pOut = 0
50d0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
50e0: 20 4f 75 74 70 75 74 20 6f 70 65 72 61 6e 64 20   Output operand 
50f0: 2a 2f 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  */.#ifdef VDBE_P
5100: 52 4f 46 49 4c 45 0a 20 20 75 36 34 20 73 74 61  ROFILE.  u64 sta
5110: 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rt;             
5120: 20 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b      /* CPU clock
5130: 20 63 6f 75 6e 74 20 61 74 20 73 74 61 72 74 20   count at start 
5140: 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e  of opcode */.#en
5150: 64 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45 52  dif.  /*** INSER
5160: 54 20 53 54 41 43 4b 20 55 4e 49 4f 4e 20 48 45  T STACK UNION HE
5170: 52 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65 72  RE ***/..  asser
5180: 74 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42  t( p->magic==VDB
5190: 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20 20  E_MAGIC_RUN );  
51a0: 2f 2a 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  /* sqlite3_step(
51b0: 29 20 76 65 72 69 66 69 65 73 20 74 68 69 73 20  ) verifies this 
51c0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
51d0: 45 6e 74 65 72 28 70 29 3b 0a 20 20 69 66 28 20  Enter(p);.  if( 
51e0: 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f  p->rc==SQLITE_NO
51f0: 4d 45 4d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  MEM ){.    /* Th
5200: 69 73 20 68 61 70 70 65 6e 73 20 69 66 20 61 20  is happens if a 
5210: 6d 61 6c 6c 6f 63 28 29 20 69 6e 73 69 64 65 20  malloc() inside 
5220: 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65  a call to sqlite
5230: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20  3_column_text() 
5240: 6f 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65  or.    ** sqlite
5250: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28  3_column_text16(
5260: 29 20 66 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20  ) failed.  */.  
5270: 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
5280: 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e   }.  assert( p->
5290: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
52a0: 20 28 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d 53   (p->rc&0xff)==S
52b0: 51 4c 49 54 45 5f 42 55 53 59 20 29 3b 0a 20 20  QLITE_BUSY );.  
52c0: 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
52d0: 61 64 65 72 20 7c 7c 20 70 2d 3e 72 65 61 64 4f  ader || p->readO
52e0: 6e 6c 79 21 3d 30 20 29 3b 0a 20 20 70 2d 3e 69  nly!=0 );.  p->i
52f0: 43 75 72 72 65 6e 74 54 69 6d 65 20 3d 20 30 3b  CurrentTime = 0;
5300: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 65 78  .  assert( p->ex
5310: 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d  plain==0 );.  p-
5320: 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 30 3b  >pResultSet = 0;
5330: 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c  .  db->busyHandl
5340: 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20  er.nBusy = 0;.  
5350: 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74  if( db->u1.isInt
5360: 65 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20  errupted ) goto 
5370: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74  abort_due_to_int
5380: 65 72 72 75 70 74 3b 0a 20 20 73 71 6c 69 74 65  errupt;.  sqlite
5390: 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28  3VdbeIOTraceSql(
53a0: 70 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  p);.#ifndef SQLI
53b0: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
53c0: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 66 28 20  _CALLBACK.  if( 
53d0: 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 20 29 7b  db->xProgress ){
53e0: 0a 20 20 20 20 75 33 32 20 69 50 72 69 6f 72 20  .    u32 iPrior 
53f0: 3d 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51  = p->aCounter[SQ
5400: 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f  LITE_STMTSTATUS_
5410: 56 4d 5f 53 54 45 50 5d 3b 0a 20 20 20 20 61 73  VM_STEP];.    as
5420: 73 65 72 74 28 20 30 20 3c 20 64 62 2d 3e 6e 50  sert( 0 < db->nP
5430: 72 6f 67 72 65 73 73 4f 70 73 20 29 3b 0a 20 20  rogressOps );.  
5440: 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74    nProgressLimit
5450: 20 3d 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73   = db->nProgress
5460: 4f 70 73 20 2d 20 28 69 50 72 69 6f 72 20 25 20  Ops - (iPrior % 
5470: 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73  db->nProgressOps
5480: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
5490: 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d  nProgressLimit =
54a0: 20 30 78 66 66 66 66 66 66 66 66 3b 0a 20 20 7d   0xffffffff;.  }
54b0: 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
54c0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 73 71  QLITE_DEBUG.  sq
54d0: 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e  lite3BeginBenign
54e0: 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 69 66 28 20  Malloc();.  if( 
54f0: 70 2d 3e 70 63 3d 3d 30 0a 20 20 20 26 26 20 28  p->pc==0.   && (
5500: 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 28  p->db->flags & (
5510: 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69  SQLITE_VdbeListi
5520: 6e 67 7c 53 51 4c 49 54 45 5f 56 64 62 65 45 51  ng|SQLITE_VdbeEQ
5530: 50 7c 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61  P|SQLITE_VdbeTra
5540: 63 65 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20  ce))!=0.  ){.   
5550: 20 69 6e 74 20 69 3b 0a 20 20 20 20 69 6e 74 20   int i;.    int 
5560: 6f 6e 63 65 20 3d 20 31 3b 0a 20 20 20 20 73 71  once = 1;.    sq
5570: 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 53 71  lite3VdbePrintSq
5580: 6c 28 70 29 3b 0a 20 20 20 20 69 66 28 20 70 2d  l(p);.    if( p-
5590: 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  >db->flags & SQL
55a0: 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 20  ITE_VdbeListing 
55b0: 29 7b 0a 20 20 20 20 20 20 70 72 69 6e 74 66 28  ){.      printf(
55c0: 22 56 44 42 45 20 50 72 6f 67 72 61 6d 20 4c 69  "VDBE Program Li
55d0: 73 74 69 6e 67 3a 5c 6e 22 29 3b 0a 20 20 20 20  sting:\n");.    
55e0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e    for(i=0; i<p->
55f0: 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  nOp; i++){.     
5600: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72     sqlite3VdbePr
5610: 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 69 2c  intOp(stdout, i,
5620: 20 26 61 4f 70 5b 69 5d 29 3b 0a 20 20 20 20 20   &aOp[i]);.     
5630: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28   }.    }.    if(
5640: 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20   p->db->flags & 
5650: 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20 29  SQLITE_VdbeEQP )
5660: 7b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b  {.      for(i=0;
5670: 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b   i<p->nOp; i++){
5680: 0a 20 20 20 20 20 20 20 20 69 66 28 20 61 4f 70  .        if( aOp
5690: 5b 69 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45  [i].opcode==OP_E
56a0: 78 70 6c 61 69 6e 20 29 7b 0a 20 20 20 20 20 20  xplain ){.      
56b0: 20 20 20 20 69 66 28 20 6f 6e 63 65 20 29 20 70      if( once ) p
56c0: 72 69 6e 74 66 28 22 56 44 42 45 20 51 75 65 72  rintf("VDBE Quer
56d0: 79 20 50 6c 61 6e 3a 5c 6e 22 29 3b 0a 20 20 20  y Plan:\n");.   
56e0: 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 25         printf("%
56f0: 73 5c 6e 22 2c 20 61 4f 70 5b 69 5d 2e 70 34 2e  s\n", aOp[i].p4.
5700: 7a 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6f 6e  z);.          on
5710: 63 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  ce = 0;.        
5720: 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  }.      }.    }.
5730: 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66      if( p->db->f
5740: 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64  lags & SQLITE_Vd
5750: 62 65 54 72 61 63 65 20 29 20 20 70 72 69 6e 74  beTrace )  print
5760: 66 28 22 56 44 42 45 20 54 72 61 63 65 3a 5c 6e  f("VDBE Trace:\n
5770: 22 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  ");.  }.  sqlite
5780: 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  3EndBenignMalloc
5790: 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 66 6f 72  ();.#endif.  for
57a0: 28 70 4f 70 3d 26 61 4f 70 5b 70 2d 3e 70 63 5d  (pOp=&aOp[p->pc]
57b0: 3b 20 31 3b 20 70 4f 70 2b 2b 29 7b 0a 20 20 20  ; 1; pOp++){.   
57c0: 20 2f 2a 20 45 72 72 6f 72 73 20 61 72 65 20 64   /* Errors are d
57d0: 65 74 65 63 74 65 64 20 62 79 20 69 6e 64 69 76  etected by indiv
57e0: 69 64 75 61 6c 20 6f 70 63 6f 64 65 73 2c 20 77  idual opcodes, w
57f0: 69 74 68 20 61 6e 20 69 6d 6d 65 64 69 61 74 65  ith an immediate
5800: 0a 20 20 20 20 2a 2a 20 6a 75 6d 70 73 20 74 6f  .    ** jumps to
5810: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
5820: 72 6f 72 2e 20 2a 2f 0a 20 20 20 20 61 73 73 65  ror. */.    asse
5830: 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
5840: 4b 20 29 3b 0a 0a 20 20 20 20 61 73 73 65 72 74  K );..    assert
5850: 28 20 70 4f 70 3e 3d 61 4f 70 20 26 26 20 70 4f  ( pOp>=aOp && pO
5860: 70 3c 26 61 4f 70 5b 70 2d 3e 6e 4f 70 5d 29 3b  p<&aOp[p->nOp]);
5870: 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
5880: 46 49 4c 45 0a 20 20 20 20 73 74 61 72 74 20 3d  FILE.    start =
5890: 20 73 71 6c 69 74 65 33 4e 50 72 6f 66 69 6c 65   sqlite3NProfile
58a0: 43 6e 74 20 3f 20 73 71 6c 69 74 65 33 4e 50 72  Cnt ? sqlite3NPr
58b0: 6f 66 69 6c 65 43 6e 74 20 3a 20 73 71 6c 69 74  ofileCnt : sqlit
58c0: 65 33 48 77 74 69 6d 65 28 29 3b 0a 23 65 6e 64  e3Hwtime();.#end
58d0: 69 66 0a 20 20 20 20 6e 56 6d 53 74 65 70 2b 2b  if.    nVmStep++
58e0: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
58f0: 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e  ENABLE_STMT_SCAN
5900: 53 54 41 54 55 53 0a 20 20 20 20 69 66 28 20 70  STATUS.    if( p
5910: 2d 3e 61 6e 45 78 65 63 20 29 20 70 2d 3e 61 6e  ->anExec ) p->an
5920: 45 78 65 63 5b 28 69 6e 74 29 28 70 4f 70 2d 61  Exec[(int)(pOp-a
5930: 4f 70 29 5d 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a  Op)]++;.#endif..
5940: 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c 6f      /* Only allo
5950: 77 20 74 72 61 63 69 6e 67 20 69 66 20 53 51 4c  w tracing if SQL
5960: 49 54 45 5f 44 45 42 55 47 20 69 73 20 64 65 66  ITE_DEBUG is def
5970: 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66  ined..    */.#if
5980: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
5990: 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 66 6c 61  .    if( db->fla
59a0: 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65  gs & SQLITE_Vdbe
59b0: 54 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 73  Trace ){.      s
59c0: 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f  qlite3VdbePrintO
59d0: 70 28 73 74 64 6f 75 74 2c 20 28 69 6e 74 29 28  p(stdout, (int)(
59e0: 70 4f 70 20 2d 20 61 4f 70 29 2c 20 70 4f 70 29  pOp - aOp), pOp)
59f0: 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
5a00: 20 20 20 20 20 0a 0a 20 20 20 20 2f 2a 20 43 68       ..    /* Ch
5a10: 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77 65  eck to see if we
5a20: 20 6e 65 65 64 20 74 6f 20 73 69 6d 75 6c 61 74   need to simulat
5a30: 65 20 61 6e 20 69 6e 74 65 72 72 75 70 74 2e 20  e an interrupt. 
5a40: 20 54 68 69 73 20 6f 6e 6c 79 20 68 61 70 70 65   This only happe
5a50: 6e 73 0a 20 20 20 20 2a 2a 20 69 66 20 77 65 20  ns.    ** if we 
5a60: 68 61 76 65 20 61 20 73 70 65 63 69 61 6c 20 74  have a special t
5a70: 65 73 74 20 62 75 69 6c 64 2e 0a 20 20 20 20 2a  est build..    *
5a80: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
5a90: 54 45 53 54 0a 20 20 20 20 69 66 28 20 73 71 6c  TEST.    if( sql
5aa0: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63  ite3_interrupt_c
5ab0: 6f 75 6e 74 3e 30 20 29 7b 0a 20 20 20 20 20 20  ount>0 ){.      
5ac0: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
5ad0: 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20 20  t_count--;.     
5ae0: 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74   if( sqlite3_int
5af0: 65 72 72 75 70 74 5f 63 6f 75 6e 74 3d 3d 30 20  errupt_count==0 
5b00: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
5b10: 65 33 5f 69 6e 74 65 72 72 75 70 74 28 64 62 29  e3_interrupt(db)
5b20: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
5b30: 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 53  #endif..    /* S
5b40: 61 6e 69 74 79 20 63 68 65 63 6b 69 6e 67 20 6f  anity checking o
5b50: 6e 20 6f 74 68 65 72 20 6f 70 65 72 61 6e 64 73  n other operands
5b60: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
5b70: 45 5f 44 45 42 55 47 0a 20 20 20 20 7b 0a 20 20  E_DEBUG.    {.  
5b80: 20 20 20 20 75 38 20 6f 70 50 72 6f 70 65 72 74      u8 opPropert
5b90: 79 20 3d 20 73 71 6c 69 74 65 33 4f 70 63 6f 64  y = sqlite3Opcod
5ba0: 65 50 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e 6f  eProperty[pOp->o
5bb0: 70 63 6f 64 65 5d 3b 0a 20 20 20 20 20 20 69 66  pcode];.      if
5bc0: 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20  ( (opProperty & 
5bd0: 4f 50 46 4c 47 5f 49 4e 31 29 21 3d 30 20 29 7b  OPFLG_IN1)!=0 ){
5be0: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
5bf0: 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20   pOp->p1>0 );.  
5c00: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5c10: 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p1<=(p->nMem+
5c20: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
5c30: 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
5c40: 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61  t( memIsValid(&a
5c50: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20 29 3b  Mem[pOp->p1]) );
5c60: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
5c70: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63   sqlite3VdbeChec
5c80: 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 26  kMemInvariants(&
5c90: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20 29  aMem[pOp->p1]) )
5ca0: 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49 53 54  ;.        REGIST
5cb0: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
5cc0: 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  , &aMem[pOp->p1]
5cd0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
5ce0: 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79   if( (opProperty
5cf0: 20 26 20 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30   & OPFLG_IN2)!=0
5d00: 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
5d10: 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b  rt( pOp->p2>0 );
5d20: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
5d30: 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d   pOp->p2<=(p->nM
5d40: 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
5d50: 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  r) );.        as
5d60: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
5d70: 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29  (&aMem[pOp->p2])
5d80: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
5d90: 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 43  rt( sqlite3VdbeC
5da0: 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74  heckMemInvariant
5db0: 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  s(&aMem[pOp->p2]
5dc0: 29 20 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47  ) );.        REG
5dd0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
5de0: 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  >p2, &aMem[pOp->
5df0: 70 32 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  p2]);.      }.  
5e00: 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65      if( (opPrope
5e10: 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29  rty & OPFLG_IN3)
5e20: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61  !=0 ){.        a
5e30: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
5e40: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
5e50: 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d  rt( pOp->p3<=(p-
5e60: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
5e70: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20  rsor) );.       
5e80: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
5e90: 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  lid(&aMem[pOp->p
5ea0: 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61  3]) );.        a
5eb0: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64  ssert( sqlite3Vd
5ec0: 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69  beCheckMemInvari
5ed0: 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ants(&aMem[pOp->
5ee0: 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20  p3]) );.        
5ef0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
5f00: 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f  Op->p3, &aMem[pO
5f10: 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 7d  p->p3]);.      }
5f20: 0a 20 20 20 20 20 20 69 66 28 20 28 6f 70 50 72  .      if( (opPr
5f30: 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 4f  operty & OPFLG_O
5f40: 55 54 32 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  UT2)!=0 ){.     
5f50: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5f60: 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20  p2>0 );.        
5f70: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c  assert( pOp->p2<
5f80: 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
5f90: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
5fa0: 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43       memAboutToC
5fb0: 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70  hange(p, &aMem[p
5fc0: 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 20 20  Op->p2]);.      
5fd0: 7d 0a 20 20 20 20 20 20 69 66 28 20 28 6f 70 50  }.      if( (opP
5fe0: 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f  roperty & OPFLG_
5ff0: 4f 55 54 33 29 21 3d 30 20 29 7b 0a 20 20 20 20  OUT3)!=0 ){.    
6000: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
6010: 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 20  >p3>0 );.       
6020: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
6030: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
6040: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
6050: 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f        memAboutTo
6060: 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b  Change(p, &aMem[
6070: 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20  pOp->p3]);.     
6080: 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a   }.    }.#endif.
6090: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
60a0: 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66  TE_DEBUG) || def
60b0: 69 6e 65 64 28 56 44 42 45 5f 50 52 4f 46 49 4c  ined(VDBE_PROFIL
60c0: 45 29 0a 20 20 20 20 70 4f 72 69 67 4f 70 20 3d  E).    pOrigOp =
60d0: 20 70 4f 70 3b 0a 23 65 6e 64 69 66 0a 20 20 0a   pOp;.#endif.  .
60e0: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
60f0: 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a  >opcode ){../***
6100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68  **********.** Wh
6150: 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20 61 20  at follows is a 
6160: 6d 61 73 73 69 76 65 20 73 77 69 74 63 68 20 73  massive switch s
6170: 74 61 74 65 6d 65 6e 74 20 77 68 65 72 65 20 65  tatement where e
6180: 61 63 68 20 63 61 73 65 20 69 6d 70 6c 65 6d 65  ach case impleme
6190: 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61 72 61 74  nts a.** separat
61a0: 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e  e instruction in
61b0: 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   the virtual mac
61c0: 68 69 6e 65 2e 20 20 49 66 20 77 65 20 66 6f 6c  hine.  If we fol
61d0: 6c 6f 77 20 74 68 65 20 75 73 75 61 6c 0a 2a 2a  low the usual.**
61e0: 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63 6f 6e   indentation con
61f0: 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68 20 63  ventions, each c
6200: 61 73 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e  ase should be in
6210: 64 65 6e 74 65 64 20 62 79 20 36 20 73 70 61 63  dented by 6 spac
6220: 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61 74  es.  But.** that
6230: 20 69 73 20 61 20 6c 6f 74 20 6f 66 20 77 61 73   is a lot of was
6240: 74 65 64 20 73 70 61 63 65 20 6f 6e 20 74 68 65  ted space on the
6250: 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20 20 53   left margin.  S
6260: 6f 20 74 68 65 20 63 6f 64 65 20 77 69 74 68 69  o the code withi
6270: 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74 63 68 20  n.** the switch 
6280: 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62  statement will b
6290: 72 65 61 6b 20 77 69 74 68 20 63 6f 6e 76 65 6e  reak with conven
62a0: 74 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c 75 73  tion and be flus
62b0: 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65 72 0a  h-left. Another.
62c0: 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74 20 28  ** big comment (
62d0: 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69 73 20  similar to this 
62e0: 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b 20 74  one) will mark t
62f0: 68 65 20 70 6f 69 6e 74 20 69 6e 20 74 68 65 20  he point in the 
6300: 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20 77 65  code where.** we
6310: 20 74 72 61 6e 73 69 74 69 6f 6e 20 62 61 63 6b   transition back
6320: 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e   to normal inden
6330: 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  tation..**.** Th
6340: 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f 66 20  e formatting of 
6350: 65 61 63 68 20 63 61 73 65 20 69 73 20 69 6d 70  each case is imp
6360: 6f 72 74 61 6e 74 2e 20 20 54 68 65 20 6d 61 6b  ortant.  The mak
6370: 65 66 69 6c 65 20 66 6f 72 20 53 51 4c 69 74 65  efile for SQLite
6380: 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73 20 74 77  .** generates tw
6390: 6f 20 43 20 66 69 6c 65 73 20 22 6f 70 63 6f 64  o C files "opcod
63a0: 65 73 2e 68 22 20 61 6e 64 20 22 6f 70 63 6f 64  es.h" and "opcod
63b0: 65 73 2e 63 22 20 62 79 20 73 63 61 6e 6e 69 6e  es.c" by scannin
63c0: 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65 20 6c  g this.** file l
63d0: 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e 65 73  ooking for lines
63e0: 20 74 68 61 74 20 62 65 67 69 6e 20 77 69 74 68   that begin with
63f0: 20 22 63 61 73 65 20 4f 50 5f 22 2e 20 20 54 68   "case OP_".  Th
6400: 65 20 6f 70 63 6f 64 65 73 2e 68 20 66 69 6c 65  e opcodes.h file
6410: 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66 69 6c  s.** will be fil
6420: 6c 65 64 20 77 69 74 68 20 23 64 65 66 69 6e 65  led with #define
6430: 73 20 74 68 61 74 20 67 69 76 65 20 75 6e 69 71  s that give uniq
6440: 75 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  ue integer value
6450: 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f 70 63  s to each.** opc
6460: 6f 64 65 20 61 6e 64 20 74 68 65 20 6f 70 63 6f  ode and the opco
6470: 64 65 73 2e 63 20 66 69 6c 65 20 69 73 20 66 69  des.c file is fi
6480: 6c 6c 65 64 20 77 69 74 68 20 61 6e 20 61 72 72  lled with an arr
6490: 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20 77 68  ay of strings wh
64a0: 65 72 65 0a 2a 2a 20 65 61 63 68 20 73 74 72 69  ere.** each stri
64b0: 6e 67 20 69 73 20 74 68 65 20 73 79 6d 62 6f 6c  ng is the symbol
64c0: 69 63 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20  ic name for the 
64d0: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 6f 70  corresponding op
64e0: 63 6f 64 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a  code.  If the.**
64f0: 20 63 61 73 65 20 73 74 61 74 65 6d 65 6e 74 20   case statement 
6500: 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  is followed by a
6510: 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68 65 20   comment of the 
6520: 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20 61 73  form "/# same as
6530: 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68 61 74   ... #/".** that
6540: 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73 65 64   comment is used
6550: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
6560: 65 20 70 61 72 74 69 63 75 6c 61 72 20 76 61 6c  e particular val
6570: 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65  ue of the opcode
6580: 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b 65  ..**.** Other ke
6590: 79 77 6f 72 64 73 20 69 6e 20 74 68 65 20 63 6f  ywords in the co
65a0: 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c 6c 6f  mment that follo
65b0: 77 73 20 65 61 63 68 20 63 61 73 65 20 61 72 65  ws each case are
65c0: 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73   used to.** cons
65d0: 74 72 75 63 74 20 74 68 65 20 4f 50 46 4c 47 5f  truct the OPFLG_
65e0: 49 4e 49 54 49 41 4c 49 5a 45 52 20 76 61 6c 75  INITIALIZER valu
65f0: 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c 69 7a  e that initializ
6600: 65 73 20 6f 70 63 6f 64 65 50 72 6f 70 65 72 74  es opcodePropert
6610: 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64 73  y[]..** Keywords
6620: 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c 20 69   include: in1, i
6630: 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32 2c 20 6f  n2, in3, out2, o
6640: 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20 74 68 65  ut3.  See.** the
6650: 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20 73   mkopcodeh.awk s
6660: 63 72 69 70 74 20 66 6f 72 20 61 64 64 69 74 69  cript for additi
6670: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
6680: 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e 74  ..**.** Document
6690: 61 74 69 6f 6e 20 61 62 6f 75 74 20 56 44 42 45  ation about VDBE
66a0: 20 6f 70 63 6f 64 65 73 20 69 73 20 67 65 6e 65   opcodes is gene
66b0: 72 61 74 65 64 20 62 79 20 73 63 61 6e 6e 69 6e  rated by scannin
66c0: 67 20 74 68 69 73 20 66 69 6c 65 0a 2a 2a 20 66  g this file.** f
66d0: 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74 68 61 74  or lines of that
66e0: 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63 6f 64 65   contain "Opcode
66f0: 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e 65 20 61  :".  That line a
6700: 6e 64 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e  nd all subsequen
6710: 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69 6e  t.** comment lin
6720: 65 73 20 61 72 65 20 75 73 65 64 20 69 6e 20 74  es are used in t
6730: 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66  he generation of
6740: 20 74 68 65 20 6f 70 63 6f 64 65 2e 68 74 6d 6c   the opcode.html
6750: 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a 2a   documentation.*
6760: 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 55  * file..**.** SU
6770: 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  MMARY:.**.**    
6780: 20 46 6f 72 6d 61 74 74 69 6e 67 20 69 73 20 69   Formatting is i
6790: 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73 63 72 69  mportant to scri
67a0: 70 74 73 20 74 68 61 74 20 73 63 61 6e 20 74 68  pts that scan th
67b0: 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20 20 20 20  is file..**     
67c0: 44 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66  Do not deviate f
67d0: 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61 74 74 69  rom the formatti
67e0: 6e 67 20 73 74 79 6c 65 20 63 75 72 72 65 6e 74  ng style current
67f0: 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a 2a  ly in use..**.**
6800: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6810: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6820: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6830: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6840: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a  ***********/../*
6850: 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74 6f 20 2a   Opcode:  Goto *
6860: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
6870: 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c  An unconditional
6880: 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73   jump to address
6890: 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e 65 78 74   P2..** The next
68a0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 78 65   instruction exe
68b0: 63 75 74 65 64 20 77 69 6c 6c 20 62 65 20 0a 2a  cuted will be .*
68c0: 2a 20 74 68 65 20 6f 6e 65 20 61 74 20 69 6e 64  * the one at ind
68d0: 65 78 20 50 32 20 66 72 6f 6d 20 74 68 65 20 62  ex P2 from the b
68e0: 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20 74  eginning of.** t
68f0: 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a  he program..**.*
6900: 2a 20 54 68 65 20 50 31 20 70 61 72 61 6d 65 74  * The P1 paramet
6910: 65 72 20 69 73 20 6e 6f 74 20 61 63 74 75 61 6c  er is not actual
6920: 6c 79 20 75 73 65 64 20 62 79 20 74 68 69 73 20  ly used by this 
6930: 6f 70 63 6f 64 65 2e 20 20 48 6f 77 65 76 65 72  opcode.  However
6940: 2c 20 69 74 0a 2a 2a 20 69 73 20 73 6f 6d 65 74  , it.** is somet
6950: 69 6d 65 73 20 73 65 74 20 74 6f 20 31 20 69 6e  imes set to 1 in
6960: 73 74 65 61 64 20 6f 66 20 30 20 61 73 20 61 20  stead of 0 as a 
6970: 68 69 6e 74 20 74 6f 20 74 68 65 20 63 6f 6d 6d  hint to the comm
6980: 61 6e 64 2d 6c 69 6e 65 20 73 68 65 6c 6c 0a 2a  and-line shell.*
6990: 2a 20 74 68 61 74 20 74 68 69 73 20 47 6f 74 6f  * that this Goto
69a0: 20 69 73 20 74 68 65 20 62 6f 74 74 6f 6d 20 6f   is the bottom o
69b0: 66 20 61 20 6c 6f 6f 70 20 61 6e 64 20 74 68 61  f a loop and tha
69c0: 74 20 74 68 65 20 6c 69 6e 65 73 20 66 72 6f 6d  t the lines from
69d0: 20 50 32 20 64 6f 77 6e 0a 2a 2a 20 74 6f 20 74   P2 down.** to t
69e0: 68 65 20 63 75 72 72 65 6e 74 20 6c 69 6e 65 20  he current line 
69f0: 73 68 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e 74  should be indent
6a00: 65 64 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f  ed for EXPLAIN o
6a10: 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  utput..*/.case O
6a20: 50 5f 47 6f 74 6f 3a 20 7b 20 20 20 20 20 20 20  P_Goto: {       
6a30: 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
6a40: 0a 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f  .jump_to_p2_and_
6a50: 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72  check_for_interr
6a60: 75 70 74 3a 0a 20 20 70 4f 70 20 3d 20 26 61 4f  upt:.  pOp = &aO
6a70: 70 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a  p[pOp->p2 - 1];.
6a80: 0a 20 20 2f 2a 20 4f 70 63 6f 64 65 73 20 74 68  .  /* Opcodes th
6a90: 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 74  at are used as t
6aa0: 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20 61 20 6c  he bottom of a l
6ab0: 6f 6f 70 20 28 4f 50 5f 4e 65 78 74 2c 20 4f 50  oop (OP_Next, OP
6ac0: 5f 50 72 65 76 2c 0a 20 20 2a 2a 20 4f 50 5f 56  _Prev,.  ** OP_V
6ad0: 4e 65 78 74 2c 20 6f 72 20 4f 50 5f 53 6f 72 74  Next, or OP_Sort
6ae0: 65 72 4e 65 78 74 29 20 61 6c 6c 20 6a 75 6d 70  erNext) all jump
6af0: 20 68 65 72 65 20 75 70 6f 6e 0a 20 20 2a 2a 20   here upon.  ** 
6b00: 63 6f 6d 70 6c 65 74 69 6f 6e 2e 20 20 43 68 65  completion.  Che
6b10: 63 6b 20 74 6f 20 73 65 65 20 69 66 20 73 71 6c  ck to see if sql
6b20: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29  ite3_interrupt()
6b30: 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64   has been called
6b40: 0a 20 20 2a 2a 20 6f 72 20 69 66 20 74 68 65 20  .  ** or if the 
6b50: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
6b60: 6b 20 6e 65 65 64 73 20 74 6f 20 62 65 20 69 6e  k needs to be in
6b70: 76 6f 6b 65 64 2e 20 0a 20 20 2a 2a 0a 20 20 2a  voked. .  **.  *
6b80: 2a 20 54 68 69 73 20 63 6f 64 65 20 75 73 65 73  * This code uses
6b90: 20 75 6e 73 74 72 75 63 74 75 72 65 64 20 22 67   unstructured "g
6ba0: 6f 74 6f 22 20 73 74 61 74 65 6d 65 6e 74 73 20  oto" statements 
6bb0: 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 6c 6f 6f  and does not loo
6bc0: 6b 20 63 6c 65 61 6e 2e 0a 20 20 2a 2a 20 42 75  k clean..  ** Bu
6bd0: 74 20 74 68 61 74 20 69 73 20 6e 6f 74 20 64 75  t that is not du
6be0: 65 20 74 6f 20 73 6c 6f 70 70 79 20 63 6f 64 69  e to sloppy codi
6bf0: 6e 67 20 68 61 62 69 74 73 2e 20 54 68 65 20 63  ng habits. The c
6c00: 6f 64 65 20 69 73 20 77 72 69 74 74 65 6e 20 74  ode is written t
6c10: 68 69 73 0a 20 20 2a 2a 20 77 61 79 20 66 6f 72  his.  ** way for
6c20: 20 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 74 6f   performance, to
6c30: 20 61 76 6f 69 64 20 68 61 76 69 6e 67 20 74 6f   avoid having to
6c40: 20 72 75 6e 20 74 68 65 20 69 6e 74 65 72 72 75   run the interru
6c50: 70 74 20 61 6e 64 20 70 72 6f 67 72 65 73 73 0a  pt and progress.
6c60: 20 20 2a 2a 20 63 68 65 63 6b 73 20 6f 6e 20 65    ** checks on e
6c70: 76 65 72 79 20 6f 70 63 6f 64 65 2e 20 20 54 68  very opcode.  Th
6c80: 69 73 20 68 65 6c 70 73 20 73 71 6c 69 74 65 33  is helps sqlite3
6c90: 5f 73 74 65 70 28 29 20 74 6f 20 72 75 6e 20 61  _step() to run a
6ca0: 62 6f 75 74 20 31 2e 35 25 0a 20 20 2a 2a 20 66  bout 1.5%.  ** f
6cb0: 61 73 74 65 72 20 61 63 63 6f 72 64 69 6e 67 20  aster according 
6cc0: 74 6f 20 22 76 61 6c 67 72 69 6e 64 20 2d 2d 74  to "valgrind --t
6cd0: 6f 6f 6c 3d 63 61 63 68 65 67 72 69 6e 64 22 20  ool=cachegrind" 
6ce0: 2a 2f 0a 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  */.check_for_int
6cf0: 65 72 72 75 70 74 3a 0a 20 20 69 66 28 20 64 62  errupt:.  if( db
6d00: 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74  ->u1.isInterrupt
6d10: 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  ed ) goto abort_
6d20: 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74  due_to_interrupt
6d30: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
6d40: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
6d50: 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20 43 61 6c  ALLBACK.  /* Cal
6d60: 6c 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63  l the progress c
6d70: 61 6c 6c 62 61 63 6b 20 69 66 20 69 74 20 69 73  allback if it is
6d80: 20 63 6f 6e 66 69 67 75 72 65 64 20 61 6e 64 20   configured and 
6d90: 74 68 65 20 72 65 71 75 69 72 65 64 20 6e 75 6d  the required num
6da0: 62 65 72 0a 20 20 2a 2a 20 6f 66 20 56 44 42 45  ber.  ** of VDBE
6db0: 20 6f 70 73 20 68 61 76 65 20 62 65 65 6e 20 65   ops have been e
6dc0: 78 65 63 75 74 65 64 20 28 65 69 74 68 65 72 20  xecuted (either 
6dd0: 73 69 6e 63 65 20 74 68 69 73 20 69 6e 76 6f 63  since this invoc
6de0: 61 74 69 6f 6e 20 6f 66 0a 20 20 2a 2a 20 73 71  ation of.  ** sq
6df0: 6c 69 74 65 33 56 64 62 65 45 78 65 63 28 29 20  lite3VdbeExec() 
6e00: 6f 72 20 73 69 6e 63 65 20 6c 61 73 74 20 74 69  or since last ti
6e10: 6d 65 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  me the progress 
6e20: 63 61 6c 6c 62 61 63 6b 20 77 61 73 20 63 61 6c  callback was cal
6e30: 6c 65 64 29 2e 0a 20 20 2a 2a 20 49 66 20 74 68  led)..  ** If th
6e40: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
6e50: 61 63 6b 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d  ack returns non-
6e60: 7a 65 72 6f 2c 20 65 78 69 74 20 74 68 65 20 76  zero, exit the v
6e70: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 77  irtual machine w
6e80: 69 74 68 0a 20 20 2a 2a 20 61 20 72 65 74 75 72  ith.  ** a retur
6e90: 6e 20 63 6f 64 65 20 53 51 4c 49 54 45 5f 41 42  n code SQLITE_AB
6ea0: 4f 52 54 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ORT..  */.  if( 
6eb0: 6e 56 6d 53 74 65 70 3e 3d 6e 50 72 6f 67 72 65  nVmStep>=nProgre
6ec0: 73 73 4c 69 6d 69 74 20 26 26 20 64 62 2d 3e 78  ssLimit && db->x
6ed0: 50 72 6f 67 72 65 73 73 21 3d 30 20 29 7b 0a 20  Progress!=0 ){. 
6ee0: 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e     assert( db->n
6ef0: 50 72 6f 67 72 65 73 73 4f 70 73 21 3d 30 20 29  ProgressOps!=0 )
6f00: 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c  ;.    nProgressL
6f10: 69 6d 69 74 20 3d 20 6e 56 6d 53 74 65 70 20 2b  imit = nVmStep +
6f20: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
6f30: 73 20 2d 20 28 6e 56 6d 53 74 65 70 25 64 62 2d  s - (nVmStep%db-
6f40: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a  >nProgressOps);.
6f50: 20 20 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f      if( db->xPro
6f60: 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f 67 72  gress(db->pProgr
6f70: 65 73 73 41 72 67 29 20 29 7b 0a 20 20 20 20 20  essArg) ){.     
6f80: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54   rc = SQLITE_INT
6f90: 45 52 52 55 50 54 3b 0a 20 20 20 20 20 20 67 6f  ERRUPT;.      go
6fa0: 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
6fb0: 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d  error;.    }.  }
6fc0: 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 62 72 65  .#endif.  .  bre
6fd0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
6fe0: 3a 20 20 47 6f 73 75 62 20 50 31 20 50 32 20 2a  :  Gosub P1 P2 *
6ff0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
7000: 20 74 68 65 20 63 75 72 72 65 6e 74 20 61 64 64   the current add
7010: 72 65 73 73 20 6f 6e 74 6f 20 72 65 67 69 73 74  ress onto regist
7020: 65 72 20 50 31 0a 2a 2a 20 61 6e 64 20 74 68 65  er P1.** and the
7030: 6e 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73  n jump to addres
7040: 73 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  s P2..*/.case OP
7050: 5f 47 6f 73 75 62 3a 20 7b 20 20 20 20 20 20 20  _Gosub: {       
7060: 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
7070: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
7080: 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d  1>0 && pOp->p1<=
7090: 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
70a0: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 49  nCursor) );.  pI
70b0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
70c0: 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 56  p1];.  assert( V
70d0: 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 49  dbeMemDynamic(pI
70e0: 6e 31 29 3d 3d 30 20 29 3b 0a 20 20 6d 65 6d 41  n1)==0 );.  memA
70f0: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
7100: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 66  pIn1);.  pIn1->f
7110: 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
7120: 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 28 69    pIn1->u.i = (i
7130: 6e 74 29 28 70 4f 70 2d 61 4f 70 29 3b 0a 20 20  nt)(pOp-aOp);.  
7140: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
7150: 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 0a  Op->p1, pIn1);..
7160: 20 20 2f 2a 20 4d 6f 73 74 20 6a 75 6d 70 20 6f    /* Most jump o
7170: 70 65 72 61 74 69 6f 6e 73 20 64 6f 20 61 20 67  perations do a g
7180: 6f 74 6f 20 74 6f 20 74 68 69 73 20 73 70 6f 74  oto to this spot
7190: 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 75 70 64   in order to upd
71a0: 61 74 65 0a 20 20 2a 2a 20 74 68 65 20 70 4f 70  ate.  ** the pOp
71b0: 20 70 6f 69 6e 74 65 72 2e 20 2a 2f 0a 6a 75 6d   pointer. */.jum
71c0: 70 5f 74 6f 5f 70 32 3a 0a 20 20 70 4f 70 20 3d  p_to_p2:.  pOp =
71d0: 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d 20   &aOp[pOp->p2 - 
71e0: 31 5d 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  1];.  break;.}..
71f0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 52 65 74 75  /* Opcode:  Retu
7200: 72 6e 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  rn P1 * * * *.**
7210: 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20  .** Jump to the 
7220: 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
7230: 20 61 66 74 65 72 20 74 68 65 20 61 64 64 72 65   after the addre
7240: 73 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ss in register P
7250: 31 2e 20 20 41 66 74 65 72 0a 2a 2a 20 74 68 65  1.  After.** the
7260: 20 6a 75 6d 70 2c 20 72 65 67 69 73 74 65 72 20   jump, register 
7270: 50 31 20 62 65 63 6f 6d 65 73 20 75 6e 64 65 66  P1 becomes undef
7280: 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ined..*/.case OP
7290: 5f 52 65 74 75 72 6e 3a 20 7b 20 20 20 20 20 20  _Return: {      
72a0: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
72b0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
72c0: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
72d0: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d  ( pIn1->flags==M
72e0: 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 4f 70 20  EM_Int );.  pOp 
72f0: 3d 20 26 61 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69  = &aOp[pIn1->u.i
7300: 5d 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ];.  pIn1->flags
7310: 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64   = MEM_Undefined
7320: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
7330: 20 4f 70 63 6f 64 65 3a 20 49 6e 69 74 43 6f 72   Opcode: InitCor
7340: 6f 75 74 69 6e 65 20 50 31 20 50 32 20 50 33 20  outine P1 P2 P3 
7350: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 75 70  * *.**.** Set up
7360: 20 72 65 67 69 73 74 65 72 20 50 31 20 73 6f 20   register P1 so 
7370: 74 68 61 74 20 69 74 20 77 69 6c 6c 20 59 69 65  that it will Yie
7380: 6c 64 20 74 6f 20 74 68 65 20 63 6f 72 6f 75 74  ld to the corout
7390: 69 6e 65 0a 2a 2a 20 6c 6f 63 61 74 65 64 20 61  ine.** located a
73a0: 74 20 61 64 64 72 65 73 73 20 50 33 2e 0a 2a 2a  t address P3..**
73b0: 0a 2a 2a 20 49 66 20 50 32 21 3d 30 20 74 68 65  .** If P2!=0 the
73c0: 6e 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20  n the coroutine 
73d0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69  implementation i
73e0: 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f  mmediately follo
73f0: 77 73 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f 64  ws.** this opcod
7400: 65 2e 20 20 53 6f 20 6a 75 6d 70 20 6f 76 65 72  e.  So jump over
7410: 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 69   the coroutine i
7420: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f  mplementation to
7430: 0a 2a 2a 20 61 64 64 72 65 73 73 20 50 32 2e 0a  .** address P2..
7440: 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
7450: 45 6e 64 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a  EndCoroutine.*/.
7460: 63 61 73 65 20 4f 50 5f 49 6e 69 74 43 6f 72 6f  case OP_InitCoro
7470: 75 74 69 6e 65 3a 20 7b 20 20 20 20 20 2f 2a 20  utine: {     /* 
7480: 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74  jump */.  assert
7490: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 20  ( pOp->p1>0 &&  
74a0: 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p1<=(p->nMe
74b0: 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
74c0: 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
74d0: 4f 70 2d 3e 70 32 3e 3d 30 20 26 26 20 70 4f 70  Op->p2>=0 && pOp
74e0: 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20  ->p2<p->nOp );. 
74f0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
7500: 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 70  >=0 && pOp->p3<p
7510: 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f 75 74 20  ->nOp );.  pOut 
7520: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
7530: 3b 0a 20 20 61 73 73 65 72 74 28 20 21 56 64 62  ;.  assert( !Vdb
7540: 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74  eMemDynamic(pOut
7550: 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  ) );.  pOut->u.i
7560: 20 3d 20 70 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a   = pOp->p3 - 1;.
7570: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
7580: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 69 66 28 20 70  MEM_Int;.  if( p
7590: 4f 70 2d 3e 70 32 20 29 20 67 6f 74 6f 20 6a 75  Op->p2 ) goto ju
75a0: 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61  mp_to_p2;.  brea
75b0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
75c0: 20 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65 20 50    EndCoroutine P
75d0: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
75e0: 54 68 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  The instruction 
75f0: 61 74 20 74 68 65 20 61 64 64 72 65 73 73 20 69  at the address i
7600: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
7610: 20 61 20 59 69 65 6c 64 2e 0a 2a 2a 20 4a 75 6d   a Yield..** Jum
7620: 70 20 74 6f 20 74 68 65 20 50 32 20 70 61 72 61  p to the P2 para
7630: 6d 65 74 65 72 20 6f 66 20 74 68 61 74 20 59 69  meter of that Yi
7640: 65 6c 64 2e 0a 2a 2a 20 41 66 74 65 72 20 74 68  eld..** After th
7650: 65 20 6a 75 6d 70 2c 20 72 65 67 69 73 74 65 72  e jump, register
7660: 20 50 31 20 62 65 63 6f 6d 65 73 20 75 6e 64 65   P1 becomes unde
7670: 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  fined..**.** See
7680: 20 61 6c 73 6f 3a 20 49 6e 69 74 43 6f 72 6f 75   also: InitCorou
7690: 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  tine.*/.case OP_
76a0: 45 6e 64 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20  EndCoroutine: { 
76b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
76c0: 20 2a 2f 0a 20 20 56 64 62 65 4f 70 20 2a 70 43   */.  VdbeOp *pC
76d0: 61 6c 6c 65 72 3b 0a 20 20 70 49 6e 31 20 3d 20  aller;.  pIn1 = 
76e0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
76f0: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
7700: 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29  flags==MEM_Int )
7710: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
7720: 2d 3e 75 2e 69 3e 3d 30 20 26 26 20 70 49 6e 31  ->u.i>=0 && pIn1
7730: 2d 3e 75 2e 69 3c 70 2d 3e 6e 4f 70 20 29 3b 0a  ->u.i<p->nOp );.
7740: 20 20 70 43 61 6c 6c 65 72 20 3d 20 26 61 4f 70    pCaller = &aOp
7750: 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20 20 61  [pIn1->u.i];.  a
7760: 73 73 65 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e  ssert( pCaller->
7770: 6f 70 63 6f 64 65 3d 3d 4f 50 5f 59 69 65 6c 64  opcode==OP_Yield
7780: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
7790: 61 6c 6c 65 72 2d 3e 70 32 3e 3d 30 20 26 26 20  aller->p2>=0 && 
77a0: 70 43 61 6c 6c 65 72 2d 3e 70 32 3c 70 2d 3e 6e  pCaller->p2<p->n
77b0: 4f 70 20 29 3b 0a 20 20 70 4f 70 20 3d 20 26 61  Op );.  pOp = &a
77c0: 4f 70 5b 70 43 61 6c 6c 65 72 2d 3e 70 32 20 2d  Op[pCaller->p2 -
77d0: 20 31 5d 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61   1];.  pIn1->fla
77e0: 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e  gs = MEM_Undefin
77f0: 65 64 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  ed;.  break;.}..
7800: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 59 69 65 6c  /* Opcode:  Yiel
7810: 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  d P1 P2 * * *.**
7820: 0a 2a 2a 20 53 77 61 70 20 74 68 65 20 70 72 6f  .** Swap the pro
7830: 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 77 69 74  gram counter wit
7840: 68 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  h the value in r
7850: 65 67 69 73 74 65 72 20 50 31 2e 20 20 54 68 69  egister P1.  Thi
7860: 73 0a 2a 2a 20 68 61 73 20 74 68 65 20 65 66 66  s.** has the eff
7870: 65 63 74 20 6f 66 20 79 69 65 6c 64 69 6e 67 20  ect of yielding 
7880: 74 6f 20 61 20 63 6f 72 6f 75 74 69 6e 65 2e 0a  to a coroutine..
7890: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f 72  **.** If the cor
78a0: 6f 75 74 69 6e 65 20 74 68 61 74 20 69 73 20 6c  outine that is l
78b0: 61 75 6e 63 68 65 64 20 62 79 20 74 68 69 73 20  aunched by this 
78c0: 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e 64 73  instruction ends
78d0: 20 77 69 74 68 0a 2a 2a 20 59 69 65 6c 64 20 6f   with.** Yield o
78e0: 72 20 52 65 74 75 72 6e 20 74 68 65 6e 20 63 6f  r Return then co
78f0: 6e 74 69 6e 75 65 20 74 6f 20 74 68 65 20 6e 65  ntinue to the ne
7900: 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  xt instruction. 
7910: 20 42 75 74 20 69 66 0a 2a 2a 20 74 68 65 20 63   But if.** the c
7920: 6f 72 6f 75 74 69 6e 65 20 6c 61 75 6e 63 68 65  oroutine launche
7930: 64 20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75  d by this instru
7940: 63 74 69 6f 6e 20 65 6e 64 73 20 77 69 74 68 0a  ction ends with.
7950: 2a 2a 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65 2c  ** EndCoroutine,
7960: 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
7970: 20 72 61 74 68 65 72 20 74 68 61 6e 20 63 6f 6e   rather than con
7980: 74 69 6e 75 69 6e 67 20 77 69 74 68 20 74 68 65  tinuing with the
7990: 0a 2a 2a 20 6e 65 78 74 20 69 6e 73 74 72 75 63  .** next instruc
79a0: 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  tion..**.** See 
79b0: 61 6c 73 6f 3a 20 49 6e 69 74 43 6f 72 6f 75 74  also: InitCorout
79c0: 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 59  ine.*/.case OP_Y
79d0: 69 65 6c 64 3a 20 7b 20 20 20 20 20 20 20 20 20  ield: {         
79e0: 20 20 20 2f 2a 20 69 6e 31 2c 20 6a 75 6d 70 20     /* in1, jump 
79f0: 2a 2f 0a 20 20 69 6e 74 20 70 63 44 65 73 74 3b  */.  int pcDest;
7a00: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
7a10: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
7a20: 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d  rt( VdbeMemDynam
7a30: 69 63 28 70 49 6e 31 29 3d 3d 30 20 29 3b 0a 20  ic(pIn1)==0 );. 
7a40: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d   pIn1->flags = M
7a50: 45 4d 5f 49 6e 74 3b 0a 20 20 70 63 44 65 73 74  EM_Int;.  pcDest
7a60: 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e   = (int)pIn1->u.
7a70: 69 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d  i;.  pIn1->u.i =
7a80: 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
7a90: 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
7aa0: 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e  ACE(pOp->p1, pIn
7ab0: 31 29 3b 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70  1);.  pOp = &aOp
7ac0: 5b 70 63 44 65 73 74 5d 3b 0a 20 20 62 72 65 61  [pcDest];.  brea
7ad0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
7ae0: 20 20 48 61 6c 74 49 66 4e 75 6c 6c 20 20 50 31    HaltIfNull  P1
7af0: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
7b00: 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
7b10: 33 5d 3d 6e 75 6c 6c 20 68 61 6c 74 0a 2a 2a 0a  3]=null halt.**.
7b20: 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 76 61 6c  ** Check the val
7b30: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
7b40: 33 2e 20 20 49 66 20 69 74 20 69 73 20 4e 55 4c  3.  If it is NUL
7b50: 4c 20 74 68 65 6e 20 48 61 6c 74 20 75 73 69 6e  L then Halt usin
7b60: 67 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 50  g.** parameter P
7b70: 31 2c 20 50 32 2c 20 61 6e 64 20 50 34 20 61 73  1, P2, and P4 as
7b80: 20 69 66 20 74 68 69 73 20 77 65 72 65 20 61 20   if this were a 
7b90: 48 61 6c 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  Halt instruction
7ba0: 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 76 61 6c  .  If the.** val
7bb0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
7bc0: 33 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74  3 is not NULL, t
7bd0: 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65  hen this routine
7be0: 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2a 20   is a no-op..** 
7bf0: 54 68 65 20 50 35 20 70 61 72 61 6d 65 74 65 72  The P5 parameter
7c00: 20 73 68 6f 75 6c 64 20 62 65 20 31 2e 0a 2a 2f   should be 1..*/
7c10: 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 49 66 4e  .case OP_HaltIfN
7c20: 75 6c 6c 3a 20 7b 20 20 20 20 20 20 2f 2a 20 69  ull: {      /* i
7c30: 6e 33 20 2a 2f 0a 20 20 70 49 6e 33 20 3d 20 26  n3 */.  pIn3 = &
7c40: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23  aMem[pOp->p3];.#
7c50: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
7c60: 55 47 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  UG.  if( pOp->p2
7c70: 3d 3d 4f 45 5f 41 62 6f 72 74 20 29 7b 20 73 71  ==OE_Abort ){ sq
7c80: 6c 69 74 65 33 56 64 62 65 41 73 73 65 72 74 41  lite3VdbeAssertA
7c90: 62 6f 72 74 61 62 6c 65 28 70 29 3b 20 7d 0a 23  bortable(p); }.#
7ca0: 65 6e 64 69 66 0a 20 20 69 66 28 20 28 70 49 6e  endif.  if( (pIn
7cb0: 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  3->flags & MEM_N
7cc0: 75 6c 6c 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b  ull)==0 ) break;
7cd0: 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75  .  /* Fall throu
7ce0: 67 68 20 69 6e 74 6f 20 4f 50 5f 48 61 6c 74 20  gh into OP_Halt 
7cf0: 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  */.}../* Opcode:
7d00: 20 20 48 61 6c 74 20 50 31 20 50 32 20 2a 20 50    Halt P1 P2 * P
7d10: 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20  4 P5.**.** Exit 
7d20: 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 41 6c  immediately.  Al
7d30: 6c 20 6f 70 65 6e 20 63 75 72 73 6f 72 73 2c 20  l open cursors, 
7d40: 65 74 63 20 61 72 65 20 63 6c 6f 73 65 64 0a 2a  etc are closed.*
7d50: 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e  * automatically.
7d60: 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65  .**.** P1 is the
7d70: 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65 74   result code ret
7d80: 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
7d90: 5f 65 78 65 63 28 29 2c 20 73 71 6c 69 74 65 33  _exec(), sqlite3
7da0: 5f 72 65 73 65 74 28 29 2c 0a 2a 2a 20 6f 72 20  _reset(),.** or 
7db0: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
7dc0: 28 29 2e 20 20 46 6f 72 20 61 20 6e 6f 72 6d 61  ().  For a norma
7dd0: 6c 20 68 61 6c 74 2c 20 74 68 69 73 20 73 68 6f  l halt, this sho
7de0: 75 6c 64 20 62 65 20 53 51 4c 49 54 45 5f 4f 4b  uld be SQLITE_OK
7df0: 20 28 30 29 2e 0a 2a 2a 20 46 6f 72 20 65 72 72   (0)..** For err
7e00: 6f 72 73 2c 20 69 74 20 63 61 6e 20 62 65 20 73  ors, it can be s
7e10: 6f 6d 65 20 6f 74 68 65 72 20 76 61 6c 75 65 2e  ome other value.
7e20: 20 20 49 66 20 50 31 21 3d 30 20 74 68 65 6e 20    If P1!=0 then 
7e30: 50 32 20 77 69 6c 6c 20 64 65 74 65 72 6d 69 6e  P2 will determin
7e40: 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6f 72 20  e.** whether or 
7e50: 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20  not to rollback 
7e60: 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e  the current tran
7e70: 73 61 63 74 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74  saction.  Do not
7e80: 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69 66 20   rollback.** if 
7e90: 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44 6f 20  P2==OE_Fail. Do 
7ea0: 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 69 66 20  the rollback if 
7eb0: 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e  P2==OE_Rollback.
7ec0: 20 20 49 66 20 50 32 3d 3d 4f 45 5f 41 62 6f 72    If P2==OE_Abor
7ed0: 74 2c 0a 2a 2a 20 74 68 65 6e 20 62 61 63 6b 20  t,.** then back 
7ee0: 6f 75 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 20  out all changes 
7ef0: 74 68 61 74 20 68 61 76 65 20 6f 63 63 75 72 72  that have occurr
7f00: 65 64 20 64 75 72 69 6e 67 20 74 68 69 73 20 65  ed during this e
7f10: 78 65 63 75 74 69 6f 6e 20 6f 66 20 74 68 65 0a  xecution of the.
7f20: 2a 2a 20 56 44 42 45 2c 20 62 75 74 20 64 6f 20  ** VDBE, but do 
7f30: 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65  not rollback the
7f40: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a   transaction. .*
7f50: 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f  *.** If P4 is no
7f60: 74 20 6e 75 6c 6c 20 74 68 65 6e 20 69 74 20 69  t null then it i
7f70: 73 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  s an error messa
7f80: 67 65 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a  ge string..**.**
7f90: 20 50 35 20 69 73 20 61 20 76 61 6c 75 65 20 62   P5 is a value b
7fa0: 65 74 77 65 65 6e 20 30 20 61 6e 64 20 34 2c 20  etween 0 and 4, 
7fb0: 69 6e 63 6c 75 73 69 76 65 2c 20 74 68 61 74 20  inclusive, that 
7fc0: 6d 6f 64 69 66 69 65 73 20 74 68 65 20 50 34 20  modifies the P4 
7fd0: 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20 20  string..**.**   
7fe0: 20 30 3a 20 20 28 6e 6f 20 63 68 61 6e 67 65 29   0:  (no change)
7ff0: 0a 2a 2a 20 20 20 20 31 3a 20 20 4e 4f 54 20 4e  .**    1:  NOT N
8000: 55 4c 4c 20 63 6f 6e 74 72 61 69 6e 74 20 66 61  ULL contraint fa
8010: 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20 32  iled: P4.**    2
8020: 3a 20 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72  :  UNIQUE constr
8030: 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a  aint failed: P4.
8040: 2a 2a 20 20 20 20 33 3a 20 20 43 48 45 43 4b 20  **    3:  CHECK 
8050: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
8060: 64 3a 20 50 34 0a 2a 2a 20 20 20 20 34 3a 20 20  d: P4.**    4:  
8070: 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73  FOREIGN KEY cons
8080: 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50  traint failed: P
8090: 34 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  4.**.** If P5 is
80a0: 20 6e 6f 74 20 7a 65 72 6f 20 61 6e 64 20 50 34   not zero and P4
80b0: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 65   is NULL, then e
80c0: 76 65 72 79 74 68 69 6e 67 20 61 66 74 65 72 20  verything after 
80d0: 74 68 65 20 22 3a 22 20 69 73 0a 2a 2a 20 6f 6d  the ":" is.** om
80e0: 69 74 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  itted..**.** The
80f0: 72 65 20 69 73 20 61 6e 20 69 6d 70 6c 69 65 64  re is an implied
8100: 20 22 48 61 6c 74 20 30 20 30 20 30 22 20 69 6e   "Halt 0 0 0" in
8110: 73 74 72 75 63 74 69 6f 6e 20 69 6e 73 65 72 74  struction insert
8120: 65 64 20 61 74 20 74 68 65 20 76 65 72 79 20 65  ed at the very e
8130: 6e 64 20 6f 66 0a 2a 2a 20 65 76 65 72 79 20 70  nd of.** every p
8140: 72 6f 67 72 61 6d 2e 20 20 53 6f 20 61 20 6a 75  rogram.  So a ju
8150: 6d 70 20 70 61 73 74 20 74 68 65 20 6c 61 73 74  mp past the last
8160: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20   instruction of 
8170: 74 68 65 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 69  the program.** i
8180: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 65 78  s the same as ex
8190: 65 63 75 74 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f  ecuting Halt..*/
81a0: 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 3a 20 7b  .case OP_Halt: {
81b0: 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46  .  VdbeFrame *pF
81c0: 72 61 6d 65 3b 0a 20 20 69 6e 74 20 70 63 78 3b  rame;.  int pcx;
81d0: 0a 0a 20 20 70 63 78 20 3d 20 28 69 6e 74 29 28  ..  pcx = (int)(
81e0: 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 23 69 66 64  pOp - aOp);.#ifd
81f0: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
8200: 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 4f    if( pOp->p2==O
8210: 45 5f 41 62 6f 72 74 20 29 7b 20 73 71 6c 69 74  E_Abort ){ sqlit
8220: 65 33 56 64 62 65 41 73 73 65 72 74 41 62 6f 72  e3VdbeAssertAbor
8230: 74 61 62 6c 65 28 70 29 3b 20 7d 0a 23 65 6e 64  table(p); }.#end
8240: 69 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  if.  if( pOp->p1
8250: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70  ==SQLITE_OK && p
8260: 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20  ->pFrame ){.    
8270: 2f 2a 20 48 61 6c 74 20 74 68 65 20 73 75 62 2d  /* Halt the sub-
8280: 70 72 6f 67 72 61 6d 2e 20 52 65 74 75 72 6e 20  program. Return 
8290: 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 70  control to the p
82a0: 61 72 65 6e 74 20 66 72 61 6d 65 2e 20 2a 2f 0a  arent frame. */.
82b0: 20 20 20 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e      pFrame = p->
82c0: 70 46 72 61 6d 65 3b 0a 20 20 20 20 70 2d 3e 70  pFrame;.    p->p
82d0: 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 2d 3e  Frame = pFrame->
82e0: 70 50 61 72 65 6e 74 3b 0a 20 20 20 20 70 2d 3e  pParent;.    p->
82f0: 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20 20 20 73 71  nFrame--;.    sq
8300: 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e  lite3VdbeSetChan
8310: 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e  ges(db, p->nChan
8320: 67 65 29 3b 0a 20 20 20 20 70 63 78 20 3d 20 73  ge);.    pcx = s
8330: 71 6c 69 74 65 33 56 64 62 65 46 72 61 6d 65 52  qlite3VdbeFrameR
8340: 65 73 74 6f 72 65 28 70 46 72 61 6d 65 29 3b 0a  estore(pFrame);.
8350: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d      if( pOp->p2=
8360: 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20  =OE_Ignore ){.  
8370: 20 20 20 20 2f 2a 20 49 6e 73 74 72 75 63 74 69      /* Instructi
8380: 6f 6e 20 70 63 78 20 69 73 20 74 68 65 20 4f 50  on pcx is the OP
8390: 5f 50 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6e  _Program that in
83a0: 76 6f 6b 65 64 20 74 68 65 20 73 75 62 2d 70 72  voked the sub-pr
83b0: 6f 67 72 61 6d 20 0a 20 20 20 20 20 20 2a 2a 20  ogram .      ** 
83c0: 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20  currently being 
83d0: 68 61 6c 74 65 64 2e 20 49 66 20 74 68 65 20 70  halted. If the p
83e0: 32 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66  2 instruction of
83f0: 20 74 68 69 73 20 4f 50 5f 48 61 6c 74 0a 20 20   this OP_Halt.  
8400: 20 20 20 20 2a 2a 20 69 6e 73 74 72 75 63 74 69      ** instructi
8410: 6f 6e 20 69 73 20 73 65 74 20 74 6f 20 4f 45 5f  on is set to OE_
8420: 49 67 6e 6f 72 65 2c 20 74 68 65 6e 20 74 68 65  Ignore, then the
8430: 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 69 73 20   sub-program is 
8440: 74 68 72 6f 77 69 6e 67 0a 20 20 20 20 20 20 2a  throwing.      *
8450: 2a 20 61 6e 20 49 47 4e 4f 52 45 20 65 78 63 65  * an IGNORE exce
8460: 70 74 69 6f 6e 2e 20 49 6e 20 74 68 69 73 20 63  ption. In this c
8470: 61 73 65 20 6a 75 6d 70 20 74 6f 20 74 68 65 20  ase jump to the 
8480: 61 64 64 72 65 73 73 20 73 70 65 63 69 66 69 65  address specifie
8490: 64 0a 20 20 20 20 20 20 2a 2a 20 61 73 20 74 68  d.      ** as th
84a0: 65 20 70 32 20 6f 66 20 74 68 65 20 63 61 6c 6c  e p2 of the call
84b0: 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 2e 20  ing OP_Program. 
84c0: 20 2a 2f 0a 20 20 20 20 20 20 70 63 78 20 3d 20   */.      pcx = 
84d0: 70 2d 3e 61 4f 70 5b 70 63 78 5d 2e 70 32 2d 31  p->aOp[pcx].p2-1
84e0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 4f 70 20  ;.    }.    aOp 
84f0: 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 61 4d  = p->aOp;.    aM
8500: 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20  em = p->aMem;.  
8510: 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 63 78    pOp = &aOp[pcx
8520: 5d 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ];.    break;.  
8530: 7d 0a 20 20 70 2d 3e 72 63 20 3d 20 70 4f 70 2d  }.  p->rc = pOp-
8540: 3e 70 31 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41  >p1;.  p->errorA
8550: 63 74 69 6f 6e 20 3d 20 28 75 38 29 70 4f 70 2d  ction = (u8)pOp-
8560: 3e 70 32 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70  >p2;.  p->pc = p
8570: 63 78 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  cx;.  assert( pO
8580: 70 2d 3e 70 35 3c 3d 34 20 29 3b 0a 20 20 69 66  p->p5<=4 );.  if
8590: 28 20 70 2d 3e 72 63 20 29 7b 0a 20 20 20 20 69  ( p->rc ){.    i
85a0: 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20  f( pOp->p5 ){.  
85b0: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
85c0: 20 63 68 61 72 20 2a 20 63 6f 6e 73 74 20 61 7a   char * const az
85d0: 54 79 70 65 5b 5d 20 3d 20 7b 20 22 4e 4f 54 20  Type[] = { "NOT 
85e0: 4e 55 4c 4c 22 2c 20 22 55 4e 49 51 55 45 22 2c  NULL", "UNIQUE",
85f0: 20 22 43 48 45 43 4b 22 2c 0a 20 20 20 20 20 20   "CHECK",.      
8600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8620: 20 20 20 20 20 20 20 22 46 4f 52 45 49 47 4e 20         "FOREIGN 
8630: 4b 45 59 22 20 7d 3b 0a 20 20 20 20 20 20 74 65  KEY" };.      te
8640: 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d  stcase( pOp->p5=
8650: 3d 31 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74  =1 );.      test
8660: 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 32  case( pOp->p5==2
8670: 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61   );.      testca
8680: 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 33 20 29  se( pOp->p5==3 )
8690: 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65  ;.      testcase
86a0: 28 20 70 4f 70 2d 3e 70 35 3d 3d 34 20 29 3b 0a  ( pOp->p5==4 );.
86b0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
86c0: 65 45 72 72 6f 72 28 70 2c 20 22 25 73 20 63 6f  eError(p, "%s co
86d0: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 22  nstraint failed"
86e0: 2c 20 61 7a 54 79 70 65 5b 70 4f 70 2d 3e 70 35  , azType[pOp->p5
86f0: 2d 31 5d 29 3b 0a 20 20 20 20 20 20 69 66 28 20  -1]);.      if( 
8700: 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20  pOp->p4.z ){.   
8710: 20 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20       p->zErrMsg 
8720: 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66  = sqlite3MPrintf
8730: 28 64 62 2c 20 22 25 7a 3a 20 25 73 22 2c 20 70  (db, "%z: %s", p
8740: 2d 3e 7a 45 72 72 4d 73 67 2c 20 70 4f 70 2d 3e  ->zErrMsg, pOp->
8750: 70 34 2e 7a 29 3b 0a 20 20 20 20 20 20 7d 0a 20  p4.z);.      }. 
8760: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
8770: 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
8780: 28 70 2c 20 22 25 73 22 2c 20 70 4f 70 2d 3e 70  (p, "%s", pOp->p
8790: 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  4.z);.    }.    
87a0: 73 71 6c 69 74 65 33 5f 6c 6f 67 28 70 4f 70 2d  sqlite3_log(pOp-
87b0: 3e 70 31 2c 20 22 61 62 6f 72 74 20 61 74 20 25  >p1, "abort at %
87c0: 64 20 69 6e 20 5b 25 73 5d 3a 20 25 73 22 2c 20  d in [%s]: %s", 
87d0: 70 63 78 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d  pcx, p->zSql, p-
87e0: 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20  >zErrMsg);.  }. 
87f0: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
8800: 65 48 61 6c 74 28 70 29 3b 0a 20 20 61 73 73 65  eHalt(p);.  asse
8810: 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  rt( rc==SQLITE_B
8820: 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54  USY || rc==SQLIT
8830: 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49  E_OK || rc==SQLI
8840: 54 45 5f 45 52 52 4f 52 20 29 3b 0a 20 20 69 66  TE_ERROR );.  if
8850: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
8860: 59 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63 20 3d  Y ){.    p->rc =
8870: 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
8880: 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
8890: 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
88a0: 20 7c 7c 20 28 70 2d 3e 72 63 26 30 78 66 66 29   || (p->rc&0xff)
88b0: 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41  ==SQLITE_CONSTRA
88c0: 49 4e 54 20 29 3b 0a 20 20 20 20 61 73 73 65 72  INT );.    asser
88d0: 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
88e0: 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65   || db->nDeferre
88f0: 64 43 6f 6e 73 3e 30 20 7c 7c 20 64 62 2d 3e 6e  dCons>0 || db->n
8900: 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3e  DeferredImmCons>
8910: 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 2d  0 );.    rc = p-
8920: 3e 72 63 20 3f 20 53 51 4c 49 54 45 5f 45 52 52  >rc ? SQLITE_ERR
8930: 4f 52 20 3a 20 53 51 4c 49 54 45 5f 44 4f 4e 45  OR : SQLITE_DONE
8940: 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62  ;.  }.  goto vdb
8950: 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20  e_return;.}../* 
8960: 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 65 72 20  Opcode: Integer 
8970: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
8980: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50  ynopsis: r[P2]=P
8990: 31 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62  1.**.** The 32-b
89a0: 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  it integer value
89b0: 20 50 31 20 69 73 20 77 72 69 74 74 65 6e 20 69   P1 is written i
89c0: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
89d0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65  .*/.case OP_Inte
89e0: 67 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20 2f  ger: {         /
89f0: 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74  * out2 */.  pOut
8a00: 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
8a10: 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75  e(p, pOp);.  pOu
8a20: 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 31  t->u.i = pOp->p1
8a30: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
8a40: 20 4f 70 63 6f 64 65 3a 20 49 6e 74 36 34 20 2a   Opcode: Int64 *
8a50: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
8a60: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34  nopsis: r[P2]=P4
8a70: 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
8a80: 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62  ointer to a 64-b
8a90: 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  it integer value
8aa0: 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20  ..** Write that 
8ab0: 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73  value into regis
8ac0: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
8ad0: 4f 50 5f 49 6e 74 36 34 3a 20 7b 20 20 20 20 20  OP_Int64: {     
8ae0: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
8af0: 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
8b00: 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
8b10: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
8b20: 3e 70 34 2e 70 49 36 34 21 3d 30 20 29 3b 0a 20  >p4.pI64!=0 );. 
8b30: 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f   pOut->u.i = *pO
8b40: 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62 72  p->p4.pI64;.  br
8b50: 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  eak;.}..#ifndef 
8b60: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
8b70: 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70  TING_POINT./* Op
8b80: 63 6f 64 65 3a 20 52 65 61 6c 20 2a 20 50 32 20  code: Real * P2 
8b90: 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
8ba0: 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a  is: r[P2]=P4.**.
8bb0: 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
8bc0: 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20 66  er to a 64-bit f
8bd0: 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61  loating point va
8be0: 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68  lue..** Write th
8bf0: 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65  at value into re
8c00: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61  gister P2..*/.ca
8c10: 73 65 20 4f 50 5f 52 65 61 6c 3a 20 7b 20 20 20  se OP_Real: {   
8c20: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
8c30: 20 61 73 20 54 4b 5f 46 4c 4f 41 54 2c 20 6f 75   as TK_FLOAT, ou
8c40: 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f  t2 */.  pOut = o
8c50: 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
8c60: 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66   pOp);.  pOut->f
8c70: 6c 61 67 73 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b  lags = MEM_Real;
8c80: 0a 20 20 61 73 73 65 72 74 28 20 21 73 71 6c 69  .  assert( !sqli
8c90: 74 65 33 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70  te3IsNaN(*pOp->p
8ca0: 34 2e 70 52 65 61 6c 29 20 29 3b 0a 20 20 70 4f  4.pReal) );.  pO
8cb0: 75 74 2d 3e 75 2e 72 20 3d 20 2a 70 4f 70 2d 3e  ut->u.r = *pOp->
8cc0: 70 34 2e 70 52 65 61 6c 3b 0a 20 20 62 72 65 61  p4.pReal;.  brea
8cd0: 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  k;.}.#endif../* 
8ce0: 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 38 20  Opcode: String8 
8cf0: 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  * P2 * P4 *.** S
8d00: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27  ynopsis: r[P2]='
8d10: 50 34 27 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69  P4'.**.** P4 poi
8d20: 6e 74 73 20 74 6f 20 61 20 6e 75 6c 20 74 65 72  nts to a nul ter
8d30: 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74  minated UTF-8 st
8d40: 72 69 6e 67 2e 20 54 68 69 73 20 6f 70 63 6f 64  ring. This opcod
8d50: 65 20 69 73 20 74 72 61 6e 73 66 6f 72 6d 65 64  e is transformed
8d60: 20 0a 2a 2a 20 69 6e 74 6f 20 61 20 53 74 72 69   .** into a Stri
8d70: 6e 67 20 6f 70 63 6f 64 65 20 62 65 66 6f 72 65  ng opcode before
8d80: 20 69 74 20 69 73 20 65 78 65 63 75 74 65 64 20   it is executed 
8d90: 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 74 69  for the first ti
8da0: 6d 65 2e 20 20 44 75 72 69 6e 67 0a 2a 2a 20 74  me.  During.** t
8db0: 68 69 73 20 74 72 61 6e 73 66 6f 72 6d 61 74 69  his transformati
8dc0: 6f 6e 2c 20 74 68 65 20 6c 65 6e 67 74 68 20 6f  on, the length o
8dd0: 66 20 73 74 72 69 6e 67 20 50 34 20 69 73 20 63  f string P4 is c
8de0: 6f 6d 70 75 74 65 64 20 61 6e 64 20 73 74 6f 72  omputed and stor
8df0: 65 64 0a 2a 2a 20 61 73 20 74 68 65 20 50 31 20  ed.** as the P1 
8e00: 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 63 61  parameter..*/.ca
8e10: 73 65 20 4f 50 5f 53 74 72 69 6e 67 38 3a 20 7b  se OP_String8: {
8e20: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
8e30: 20 61 73 20 54 4b 5f 53 54 52 49 4e 47 2c 20 6f   as TK_STRING, o
8e40: 75 74 32 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ut2 */.  assert(
8e50: 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b   pOp->p4.z!=0 );
8e60: 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
8e70: 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
8e80: 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ;.  pOp->opcode 
8e90: 3d 20 4f 50 5f 53 74 72 69 6e 67 3b 0a 20 20 70  = OP_String;.  p
8ea0: 4f 70 2d 3e 70 31 20 3d 20 73 71 6c 69 74 65 33  Op->p1 = sqlite3
8eb0: 53 74 72 6c 65 6e 33 30 28 70 4f 70 2d 3e 70 34  Strlen30(pOp->p4
8ec0: 2e 7a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  .z);..#ifndef SQ
8ed0: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
8ee0: 20 20 69 66 28 20 65 6e 63 6f 64 69 6e 67 21 3d    if( encoding!=
8ef0: 53 51 4c 49 54 45 5f 55 54 46 38 20 29 7b 0a 20  SQLITE_UTF8 ){. 
8f00: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
8f10: 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75  dbeMemSetStr(pOu
8f20: 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31  t, pOp->p4.z, -1
8f30: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53  , SQLITE_UTF8, S
8f40: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
8f50: 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
8f60: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d  QLITE_OK || rc==
8f70: 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29 3b  SQLITE_TOOBIG );
8f80: 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f  .    if( SQLITE_
8f90: 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64 62 65 43  OK!=sqlite3VdbeC
8fa0: 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f  hangeEncoding(pO
8fb0: 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 20 29 20  ut, encoding) ) 
8fc0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
8fd0: 20 61 73 73 65 72 74 28 20 70 4f 75 74 2d 3e 73   assert( pOut->s
8fe0: 7a 4d 61 6c 6c 6f 63 3e 30 20 26 26 20 70 4f 75  zMalloc>0 && pOu
8ff0: 74 2d 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74  t->zMalloc==pOut
9000: 2d 3e 7a 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ->z );.    asser
9010: 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69  t( VdbeMemDynami
9020: 63 28 70 4f 75 74 29 3d 3d 30 20 29 3b 0a 20 20  c(pOut)==0 );.  
9030: 20 20 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63    pOut->szMalloc
9040: 20 3d 20 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e   = 0;.    pOut->
9050: 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61  flags |= MEM_Sta
9060: 74 69 63 3b 0a 20 20 20 20 69 66 28 20 70 4f 70  tic;.    if( pOp
9070: 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 44 59 4e  ->p4type==P4_DYN
9080: 41 4d 49 43 20 29 7b 0a 20 20 20 20 20 20 73 71  AMIC ){.      sq
9090: 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
90a0: 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20  pOp->p4.z);.    
90b0: 7d 0a 20 20 20 20 70 4f 70 2d 3e 70 34 74 79 70  }.    pOp->p4typ
90c0: 65 20 3d 20 50 34 5f 44 59 4e 41 4d 49 43 3b 0a  e = P4_DYNAMIC;.
90d0: 20 20 20 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20      pOp->p4.z = 
90e0: 70 4f 75 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70  pOut->z;.    pOp
90f0: 2d 3e 70 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a  ->p1 = pOut->n;.
9100: 20 20 7d 0a 20 20 74 65 73 74 63 61 73 65 28 20    }.  testcase( 
9110: 72 63 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49  rc==SQLITE_TOOBI
9120: 47 20 29 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66  G );.#endif.  if
9130: 28 20 70 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c  ( pOp->p1>db->aL
9140: 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
9150: 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
9160: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
9170: 20 7d 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d   }.  assert( rc=
9180: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20  =SQLITE_OK );.  
9190: 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
91a0: 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61 73 65  to the next case
91b0: 2c 20 4f 50 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d  , OP_String */.}
91c0: 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .  ./* Opcode: S
91d0: 74 72 69 6e 67 20 50 31 20 50 32 20 50 33 20 50  tring P1 P2 P3 P
91e0: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
91f0: 3a 20 72 5b 50 32 5d 3d 27 50 34 27 20 28 6c 65  : r[P2]='P4' (le
9200: 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 54 68 65 20  n=P1).**.** The 
9210: 73 74 72 69 6e 67 20 76 61 6c 75 65 20 50 34 20  string value P4 
9220: 6f 66 20 6c 65 6e 67 74 68 20 50 31 20 28 62 79  of length P1 (by
9230: 74 65 73 29 20 69 73 20 73 74 6f 72 65 64 20 69  tes) is stored i
9240: 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
9250: 2a 0a 2a 2a 20 49 66 20 50 33 20 69 73 20 6e 6f  *.** If P3 is no
9260: 74 20 7a 65 72 6f 20 61 6e 64 20 74 68 65 20 63  t zero and the c
9270: 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
9280: 65 72 20 50 33 20 69 73 20 65 71 75 61 6c 20 74  er P3 is equal t
9290: 6f 20 50 35 2c 20 74 68 65 6e 0a 2a 2a 20 74 68  o P5, then.** th
92a0: 65 20 64 61 74 61 74 79 70 65 20 6f 66 20 74 68  e datatype of th
92b0: 65 20 72 65 67 69 73 74 65 72 20 50 32 20 69 73  e register P2 is
92c0: 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 42 4c   converted to BL
92d0: 4f 42 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e 74  OB.  The content
92e0: 20 69 73 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20   is.** the same 
92f0: 73 65 71 75 65 6e 63 65 20 6f 66 20 62 79 74 65  sequence of byte
9300: 73 2c 20 69 74 20 69 73 20 6d 65 72 65 6c 79 20  s, it is merely 
9310: 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61  interpreted as a
9320: 20 42 4c 4f 42 20 69 6e 73 74 65 61 64 0a 2a 2a   BLOB instead.**
9330: 20 6f 66 20 61 20 73 74 72 69 6e 67 2c 20 61 73   of a string, as
9340: 20 69 66 20 69 74 20 68 61 64 20 62 65 65 6e 20   if it had been 
9350: 43 41 53 54 2e 20 20 49 6e 20 6f 74 68 65 72 20  CAST.  In other 
9360: 77 6f 72 64 73 3a 0a 2a 2a 0a 2a 2a 20 69 66 28  words:.**.** if(
9370: 20 50 33 21 3d 30 20 61 6e 64 20 72 65 67 5b 50   P3!=0 and reg[P
9380: 33 5d 3d 3d 50 35 20 29 20 72 65 67 5b 50 32 5d  3]==P5 ) reg[P2]
9390: 20 3a 3d 20 43 41 53 54 28 72 65 67 5b 50 32 5d   := CAST(reg[P2]
93a0: 20 61 73 20 42 4c 4f 42 29 0a 2a 2f 0a 63 61 73   as BLOB).*/.cas
93b0: 65 20 4f 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20  e OP_String: {  
93c0: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
93d0: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
93e0: 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70  ->p4.z!=0 );.  p
93f0: 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
9400: 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
9410: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
9420: 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63  M_Str|MEM_Static
9430: 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75  |MEM_Term;.  pOu
9440: 74 2d 3e 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  t->z = pOp->p4.z
9450: 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 70 4f  ;.  pOut->n = pO
9460: 70 2d 3e 70 31 3b 0a 20 20 70 4f 75 74 2d 3e 65  p->p1;.  pOut->e
9470: 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20  nc = encoding;. 
9480: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
9490: 53 49 5a 45 28 70 4f 75 74 29 3b 0a 23 69 66 6e  SIZE(pOut);.#ifn
94a0: 64 65 66 20 53 51 4c 49 54 45 5f 4c 49 4b 45 5f  def SQLITE_LIKE_
94b0: 44 4f 45 53 4e 54 5f 4d 41 54 43 48 5f 42 4c 4f  DOESNT_MATCH_BLO
94c0: 42 53 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33  BS.  if( pOp->p3
94d0: 3e 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  >0 ){.    assert
94e0: 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  ( pOp->p3<=(p->n
94f0: 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
9500: 6f 72 29 20 29 3b 0a 20 20 20 20 70 49 6e 33 20  or) );.    pIn3 
9510: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
9520: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49  ;.    assert( pI
9530: 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
9540: 49 6e 74 20 29 3b 0a 20 20 20 20 69 66 28 20 70  Int );.    if( p
9550: 49 6e 33 2d 3e 75 2e 69 3d 3d 70 4f 70 2d 3e 70  In3->u.i==pOp->p
9560: 35 20 29 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  5 ) pOut->flags 
9570: 3d 20 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53  = MEM_Blob|MEM_S
9580: 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a  tatic|MEM_Term;.
9590: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 62 72 65    }.#endif.  bre
95a0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
95b0: 3a 20 4e 75 6c 6c 20 50 31 20 50 32 20 50 33 20  : Null P1 P2 P3 
95c0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
95d0: 20 72 5b 50 32 2e 2e 50 33 5d 3d 4e 55 4c 4c 0a   r[P2..P3]=NULL.
95e0: 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 4e 55  **.** Write a NU
95f0: 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  LL into register
9600: 73 20 50 32 2e 20 20 49 66 20 50 33 20 67 72 65  s P2.  If P3 gre
9610: 61 74 65 72 20 74 68 61 6e 20 50 32 2c 20 74 68  ater than P2, th
9620: 65 6e 20 61 6c 73 6f 20 77 72 69 74 65 0a 2a 2a  en also write.**
9630: 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73   NULL into regis
9640: 74 65 72 20 50 33 20 61 6e 64 20 65 76 65 72 79  ter P3 and every
9650: 20 72 65 67 69 73 74 65 72 20 69 6e 20 62 65 74   register in bet
9660: 77 65 65 6e 20 50 32 20 61 6e 64 20 50 33 2e 20  ween P2 and P3. 
9670: 20 49 66 20 50 33 0a 2a 2a 20 69 73 20 6c 65 73   If P3.** is les
9680: 73 20 74 68 61 6e 20 50 32 20 28 74 79 70 69 63  s than P2 (typic
9690: 61 6c 6c 79 20 50 33 20 69 73 20 7a 65 72 6f 29  ally P3 is zero)
96a0: 20 74 68 65 6e 20 6f 6e 6c 79 20 72 65 67 69 73   then only regis
96b0: 74 65 72 20 50 32 20 69 73 0a 2a 2a 20 73 65 74  ter P2 is.** set
96c0: 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20   to NULL..**.** 
96d0: 49 66 20 74 68 65 20 50 31 20 76 61 6c 75 65 20  If the P1 value 
96e0: 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
96f0: 6e 20 61 6c 73 6f 20 73 65 74 20 74 68 65 20 4d  n also set the M
9700: 45 4d 5f 43 6c 65 61 72 65 64 20 66 6c 61 67 20  EM_Cleared flag 
9710: 73 6f 20 74 68 61 74 0a 2a 2a 20 4e 55 4c 4c 20  so that.** NULL 
9720: 76 61 6c 75 65 73 20 77 69 6c 6c 20 6e 6f 74 20  values will not 
9730: 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20 65 76  compare equal ev
9740: 65 6e 20 69 66 20 53 51 4c 49 54 45 5f 4e 55 4c  en if SQLITE_NUL
9750: 4c 45 51 20 69 73 20 73 65 74 20 6f 6e 0a 2a 2a  LEQ is set on.**
9760: 20 4f 50 5f 4e 65 20 6f 72 20 4f 50 5f 45 71 2e   OP_Ne or OP_Eq.
9770: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c  .*/.case OP_Null
9780: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
9790: 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 63   out2 */.  int c
97a0: 6e 74 3b 0a 20 20 75 31 36 20 6e 75 6c 6c 46 6c  nt;.  u16 nullFl
97b0: 61 67 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74  ag;.  pOut = out
97c0: 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
97d0: 4f 70 29 3b 0a 20 20 63 6e 74 20 3d 20 70 4f 70  Op);.  cnt = pOp
97e0: 2d 3e 70 33 2d 70 4f 70 2d 3e 70 32 3b 0a 20 20  ->p3-pOp->p2;.  
97f0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
9800: 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
9810: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70  >nCursor) );.  p
9820: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c  Out->flags = nul
9830: 6c 46 6c 61 67 20 3d 20 70 4f 70 2d 3e 70 31 20  lFlag = pOp->p1 
9840: 3f 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f  ? (MEM_Null|MEM_
9850: 43 6c 65 61 72 65 64 29 20 3a 20 4d 45 4d 5f 4e  Cleared) : MEM_N
9860: 75 6c 6c 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  ull;.  pOut->n =
9870: 20 30 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54   0;.#ifdef SQLIT
9880: 45 5f 44 45 42 55 47 0a 20 20 70 4f 75 74 2d 3e  E_DEBUG.  pOut->
9890: 75 54 65 6d 70 20 3d 20 30 3b 0a 23 65 6e 64 69  uTemp = 0;.#endi
98a0: 66 0a 20 20 77 68 69 6c 65 28 20 63 6e 74 3e 30  f.  while( cnt>0
98b0: 20 29 7b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a   ){.    pOut++;.
98c0: 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
98d0: 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20  ange(p, pOut);. 
98e0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
98f0: 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
9900: 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
9910: 3d 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 20 20  = nullFlag;.    
9920: 70 4f 75 74 2d 3e 6e 20 3d 20 30 3b 0a 20 20 20  pOut->n = 0;.   
9930: 20 63 6e 74 2d 2d 3b 0a 20 20 7d 0a 20 20 62 72   cnt--;.  }.  br
9940: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
9950: 65 3a 20 53 6f 66 74 4e 75 6c 6c 20 50 31 20 2a  e: SoftNull P1 *
9960: 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
9970: 69 73 3a 20 72 5b 50 31 5d 3d 4e 55 4c 4c 0a 2a  is: r[P1]=NULL.*
9980: 2a 0a 2a 2a 20 53 65 74 20 72 65 67 69 73 74 65  *.** Set registe
9990: 72 20 50 31 20 74 6f 20 68 61 76 65 20 74 68 65  r P1 to have the
99a0: 20 76 61 6c 75 65 20 4e 55 4c 4c 20 61 73 20 73   value NULL as s
99b0: 65 65 6e 20 62 79 20 74 68 65 20 4f 50 5f 4d 61  een by the OP_Ma
99c0: 6b 65 52 65 63 6f 72 64 0a 2a 2a 20 69 6e 73 74  keRecord.** inst
99d0: 72 75 63 74 69 6f 6e 2c 20 62 75 74 20 64 6f 20  ruction, but do 
99e0: 6e 6f 74 20 66 72 65 65 20 61 6e 79 20 73 74 72  not free any str
99f0: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d 65 6d 6f  ing or blob memo
9a00: 72 79 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ry associated wi
9a10: 74 68 0a 2a 2a 20 74 68 65 20 72 65 67 69 73 74  th.** the regist
9a20: 65 72 2c 20 73 6f 20 74 68 61 74 20 69 66 20 74  er, so that if t
9a30: 68 65 20 76 61 6c 75 65 20 77 61 73 20 61 20 73  he value was a s
9a40: 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 68  tring or blob th
9a50: 61 74 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f  at was.** previo
9a60: 75 73 6c 79 20 63 6f 70 69 65 64 20 75 73 69 6e  usly copied usin
9a70: 67 20 4f 50 5f 53 43 6f 70 79 2c 20 74 68 65 20  g OP_SCopy, the 
9a80: 63 6f 70 69 65 73 20 77 69 6c 6c 20 63 6f 6e 74  copies will cont
9a90: 69 6e 75 65 20 74 6f 20 62 65 20 76 61 6c 69 64  inue to be valid
9aa0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 66  ..*/.case OP_Sof
9ab0: 74 4e 75 6c 6c 3a 20 7b 0a 20 20 61 73 73 65 72  tNull: {.  asser
9ac0: 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20  t( pOp->p1>0 && 
9ad0: 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p1<=(p->nMe
9ae0: 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
9af0: 29 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  ) );.  pOut = &a
9b00: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
9b10: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 28 70  pOut->flags = (p
9b20: 4f 75 74 2d 3e 66 6c 61 67 73 26 7e 28 4d 45 4d  Out->flags&~(MEM
9b30: 5f 55 6e 64 65 66 69 6e 65 64 7c 4d 45 4d 5f 41  _Undefined|MEM_A
9b40: 66 66 4d 61 73 6b 29 29 7c 4d 45 4d 5f 4e 75 6c  ffMask))|MEM_Nul
9b50: 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  l;.  break;.}../
9b60: 2a 20 4f 70 63 6f 64 65 3a 20 42 6c 6f 62 20 50  * Opcode: Blob P
9b70: 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  1 P2 * P4 *.** S
9b80: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50  ynopsis: r[P2]=P
9b90: 34 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a  4 (len=P1).**.**
9ba0: 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20   P4 points to a 
9bb0: 62 6c 6f 62 20 6f 66 20 64 61 74 61 20 50 31 20  blob of data P1 
9bc0: 62 79 74 65 73 20 6c 6f 6e 67 2e 20 20 53 74 6f  bytes long.  Sto
9bd0: 72 65 20 74 68 69 73 0a 2a 2a 20 62 6c 6f 62 20  re this.** blob 
9be0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
9bf0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 6c 6f 62 3a  */.case OP_Blob:
9c00: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
9c10: 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 61    /* out2 */.  a
9c20: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 20 3c  ssert( pOp->p1 <
9c30: 3d 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e  = SQLITE_MAX_LEN
9c40: 47 54 48 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  GTH );.  pOut = 
9c50: 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
9c60: 2c 20 70 4f 70 29 3b 0a 20 20 73 71 6c 69 74 65  , pOp);.  sqlite
9c70: 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70  3VdbeMemSetStr(p
9c80: 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20  Out, pOp->p4.z, 
9c90: 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30 29 3b 0a  pOp->p1, 0, 0);.
9ca0: 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e    pOut->enc = en
9cb0: 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45  coding;.  UPDATE
9cc0: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
9cd0: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
9ce0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 72 69  ./* Opcode: Vari
9cf0: 61 62 6c 65 20 50 31 20 50 32 20 2a 20 50 34 20  able P1 P2 * P4 
9d00: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
9d10: 5b 50 32 5d 3d 70 61 72 61 6d 65 74 65 72 28 50  [P2]=parameter(P
9d20: 31 2c 50 34 29 0a 2a 2a 0a 2a 2a 20 54 72 61 6e  1,P4).**.** Tran
9d30: 73 66 65 72 20 74 68 65 20 76 61 6c 75 65 73 20  sfer the values 
9d40: 6f 66 20 62 6f 75 6e 64 20 70 61 72 61 6d 65 74  of bound paramet
9d50: 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73  er P1 into regis
9d60: 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20  ter P2.**.** If 
9d70: 74 68 65 20 70 61 72 61 6d 65 74 65 72 20 69 73  the parameter is
9d80: 20 6e 61 6d 65 64 2c 20 74 68 65 6e 20 69 74 73   named, then its
9d90: 20 6e 61 6d 65 20 61 70 70 65 61 72 73 20 69 6e   name appears in
9da0: 20 50 34 2e 0a 2a 2a 20 54 68 65 20 50 34 20 76   P4..** The P4 v
9db0: 61 6c 75 65 20 69 73 20 75 73 65 64 20 62 79 20  alue is used by 
9dc0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
9dd0: 61 6d 65 74 65 72 5f 6e 61 6d 65 28 29 2e 0a 2a  ameter_name()..*
9de0: 2f 0a 63 61 73 65 20 4f 50 5f 56 61 72 69 61 62  /.case OP_Variab
9df0: 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  le: {           
9e00: 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 4d 65   /* out2 */.  Me
9e10: 6d 20 2a 70 56 61 72 3b 20 20 20 20 20 20 20 2f  m *pVar;       /
9e20: 2a 20 56 61 6c 75 65 20 62 65 69 6e 67 20 74 72  * Value being tr
9e30: 61 6e 73 66 65 72 72 65 64 20 2a 2f 0a 0a 20 20  ansferred */..  
9e40: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
9e50: 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d  0 && pOp->p1<=p-
9e60: 3e 6e 56 61 72 20 29 3b 0a 20 20 61 73 73 65 72  >nVar );.  asser
9e70: 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20  t( pOp->p4.z==0 
9e80: 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 73 71  || pOp->p4.z==sq
9e90: 6c 69 74 65 33 56 4c 69 73 74 4e 75 6d 54 6f 4e  lite3VListNumToN
9ea0: 61 6d 65 28 70 2d 3e 70 56 4c 69 73 74 2c 70 4f  ame(p->pVList,pO
9eb0: 70 2d 3e 70 31 29 20 29 3b 0a 20 20 70 56 61 72  p->p1) );.  pVar
9ec0: 20 3d 20 26 70 2d 3e 61 56 61 72 5b 70 4f 70 2d   = &p->aVar[pOp-
9ed0: 3e 70 31 20 2d 20 31 5d 3b 0a 20 20 69 66 28 20  >p1 - 1];.  if( 
9ee0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
9ef0: 6f 42 69 67 28 70 56 61 72 29 20 29 7b 0a 20 20  oBig(pVar) ){.  
9f00: 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
9f10: 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d    }.  pOut = &aM
9f20: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73  em[pOp->p2];.  s
9f30: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
9f40: 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70  llowCopy(pOut, p
9f50: 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29  Var, MEM_Static)
9f60: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
9f70: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
9f80: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
9f90: 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20 50 32  code: Move P1 P2
9fa0: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
9fb0: 73 69 73 3a 20 72 5b 50 32 40 50 33 5d 3d 72 5b  sis: r[P2@P3]=r[
9fc0: 50 31 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 4d 6f 76  P1@P3].**.** Mov
9fd0: 65 20 74 68 65 20 50 33 20 76 61 6c 75 65 73 20  e the P3 values 
9fe0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 2e  in register P1..
9ff0: 50 31 2b 50 33 2d 31 20 6f 76 65 72 20 69 6e 74  P1+P3-1 over int
a000: 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 73 20 50  o.** registers P
a010: 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20 52 65 67  2..P2+P3-1.  Reg
a020: 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33  isters P1..P1+P3
a030: 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20 68  -1 are.** left h
a040: 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20 20  olding a NULL.  
a050: 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66  It is an error f
a060: 6f 72 20 72 65 67 69 73 74 65 72 20 72 61 6e 67  or register rang
a070: 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33 2d  es.** P1..P1+P3-
a080: 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33 2d  1 and P2..P2+P3-
a090: 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e 20 20 49  1 to overlap.  I
a0a0: 74 20 69 73 20 61 6e 20 65 72 72 6f 72 0a 2a 2a  t is an error.**
a0b0: 20 66 6f 72 20 50 33 20 74 6f 20 62 65 20 6c 65   for P3 to be le
a0c0: 73 73 20 74 68 61 6e 20 31 2e 0a 2a 2f 0a 63 61  ss than 1..*/.ca
a0d0: 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20 20  se OP_Move: {.  
a0e0: 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20  int n;          
a0f0: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65   /* Number of re
a100: 67 69 73 74 65 72 73 20 6c 65 66 74 20 74 6f 20  gisters left to 
a110: 63 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20 70 31  copy */.  int p1
a120: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65  ;          /* Re
a130: 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20 66  gister to copy f
a140: 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b  rom */.  int p2;
a150: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
a160: 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20 74 6f  ister to copy to
a170: 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e   */..  n = pOp->
a180: 70 33 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e  p3;.  p1 = pOp->
a190: 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e  p1;.  p2 = pOp->
a1a0: 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e  p2;.  assert( n>
a1b0: 30 20 26 26 20 70 31 3e 30 20 26 26 20 70 32 3e  0 && p1>0 && p2>
a1c0: 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
a1d0: 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c  1+n<=p2 || p2+n<
a1e0: 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31 20 3d  =p1 );..  pIn1 =
a1f0: 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20 70 4f   &aMem[p1];.  pO
a200: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a  ut = &aMem[p2];.
a210: 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72 74    do{.    assert
a220: 28 20 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b 28 70  ( pOut<=&aMem[(p
a230: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
a240: 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61  ursor)] );.    a
a250: 73 73 65 72 74 28 20 70 49 6e 31 3c 3d 26 61 4d  ssert( pIn1<=&aM
a260: 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  em[(p->nMem+1 - 
a270: 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a  p->nCursor)] );.
a280: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
a290: 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a  sValid(pIn1) );.
a2a0: 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
a2b0: 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20  ange(p, pOut);. 
a2c0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
a2d0: 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49 6e 31  mMove(pOut, pIn1
a2e0: 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
a2f0: 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 70  _DEBUG.    if( p
a300: 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3e  Out->pScopyFrom>
a310: 3d 26 61 4d 65 6d 5b 70 31 5d 20 26 26 20 70 4f  =&aMem[p1] && pO
a320: 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3c 70  ut->pScopyFrom<p
a330: 4f 75 74 20 29 7b 0a 20 20 20 20 20 20 70 4f 75  Out ){.      pOu
a340: 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 2b 3d  t->pScopyFrom +=
a350: 20 70 4f 70 2d 3e 70 32 20 2d 20 70 31 3b 0a 20   pOp->p2 - p1;. 
a360: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20     }.#endif.    
a370: 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70  Deephemeralize(p
a380: 4f 75 74 29 3b 0a 20 20 20 20 52 45 47 49 53 54  Out);.    REGIST
a390: 45 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c 20 70  ER_TRACE(p2++, p
a3a0: 4f 75 74 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b  Out);.    pIn1++
a3b0: 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20  ;.    pOut++;.  
a3c0: 7d 77 68 69 6c 65 28 20 2d 2d 6e 20 29 3b 0a 20  }while( --n );. 
a3d0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
a3e0: 63 6f 64 65 3a 20 43 6f 70 79 20 50 31 20 50 32  code: Copy P1 P2
a3f0: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
a400: 73 69 73 3a 20 72 5b 50 32 40 50 33 2b 31 5d 3d  sis: r[P2@P3+1]=
a410: 72 5b 50 31 40 50 33 2b 31 5d 0a 2a 2a 0a 2a 2a  r[P1@P3+1].**.**
a420: 20 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66 20   Make a copy of 
a430: 72 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31  registers P1..P1
a440: 2b 50 33 20 69 6e 74 6f 20 72 65 67 69 73 74 65  +P3 into registe
a450: 72 73 20 50 32 2e 2e 50 32 2b 50 33 2e 0a 2a 2a  rs P2..P2+P3..**
a460: 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
a470: 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 64 65 65  tion makes a dee
a480: 70 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61  p copy of the va
a490: 6c 75 65 2e 20 20 41 20 64 75 70 6c 69 63 61 74  lue.  A duplicat
a4a0: 65 0a 2a 2a 20 69 73 20 6d 61 64 65 20 6f 66 20  e.** is made of 
a4b0: 61 6e 79 20 73 74 72 69 6e 67 20 6f 72 20 62 6c  any string or bl
a4c0: 6f 62 20 63 6f 6e 73 74 61 6e 74 2e 20 20 53 65  ob constant.  Se
a4d0: 65 20 61 6c 73 6f 20 4f 50 5f 53 43 6f 70 79 2e  e also OP_SCopy.
a4e0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 70 79  .*/.case OP_Copy
a4f0: 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20  : {.  int n;..  
a500: 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70  n = pOp->p3;.  p
a510: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
a520: 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  >p1];.  pOut = &
a530: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
a540: 20 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70   assert( pOut!=p
a550: 49 6e 31 20 29 3b 0a 20 20 77 68 69 6c 65 28 20  In1 );.  while( 
a560: 31 20 29 7b 0a 20 20 20 20 6d 65 6d 41 62 6f 75  1 ){.    memAbou
a570: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
a580: 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  t);.    sqlite3V
a590: 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
a5a0: 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45  y(pOut, pIn1, ME
a5b0: 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 20 20 44 65  M_Ephem);.    De
a5c0: 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75  ephemeralize(pOu
a5d0: 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  t);.#ifdef SQLIT
a5e0: 45 5f 44 45 42 55 47 0a 20 20 20 20 70 4f 75 74  E_DEBUG.    pOut
a5f0: 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20 30  ->pScopyFrom = 0
a600: 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 52 45 47  ;.#endif.    REG
a610: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
a620: 3e 70 32 2b 70 4f 70 2d 3e 70 33 2d 6e 2c 20 70  >p2+pOp->p3-n, p
a630: 4f 75 74 29 3b 0a 20 20 20 20 69 66 28 20 28 6e  Out);.    if( (n
a640: 2d 2d 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a  --)==0 ) break;.
a650: 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20      pOut++;.    
a660: 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72  pIn1++;.  }.  br
a670: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
a680: 65 3a 20 53 43 6f 70 79 20 50 31 20 50 32 20 2a  e: SCopy P1 P2 *
a690: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
a6a0: 3a 20 72 5b 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a  : r[P2]=r[P1].**
a6b0: 0a 2a 2a 20 4d 61 6b 65 20 61 20 73 68 61 6c 6c  .** Make a shall
a6c0: 6f 77 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73  ow copy of regis
a6d0: 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69  ter P1 into regi
a6e0: 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  ster P2..**.** T
a6f0: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
a700: 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c 6f 77 20  makes a shallow 
a710: 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75  copy of the valu
a720: 65 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  e.  If the value
a730: 0a 2a 2a 20 69 73 20 61 20 73 74 72 69 6e 67 20  .** is a string 
a740: 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e 20 74 68  or blob, then th
a750: 65 20 63 6f 70 79 20 69 73 20 6f 6e 6c 79 20 61  e copy is only a
a760: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 0a   pointer to the.
a770: 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 61 6e 64 20  ** original and 
a780: 68 65 6e 63 65 20 69 66 20 74 68 65 20 6f 72 69  hence if the ori
a790: 67 69 6e 61 6c 20 63 68 61 6e 67 65 73 20 73 6f  ginal changes so
a7a0: 20 77 69 6c 6c 20 74 68 65 20 63 6f 70 79 2e 0a   will the copy..
a7b0: 2a 2a 20 57 6f 72 73 65 2c 20 69 66 20 74 68 65  ** Worse, if the
a7c0: 20 6f 72 69 67 69 6e 61 6c 20 69 73 20 64 65 61   original is dea
a7d0: 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 20 63 6f  llocated, the co
a7e0: 70 79 20 62 65 63 6f 6d 65 73 20 69 6e 76 61 6c  py becomes inval
a7f0: 69 64 2e 0a 2a 2a 20 54 68 75 73 20 74 68 65 20  id..** Thus the 
a800: 70 72 6f 67 72 61 6d 20 6d 75 73 74 20 67 75 61  program must gua
a810: 72 61 6e 74 65 65 20 74 68 61 74 20 74 68 65 20  rantee that the 
a820: 6f 72 69 67 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f  original will no
a830: 74 20 63 68 61 6e 67 65 0a 2a 2a 20 64 75 72 69  t change.** duri
a840: 6e 67 20 74 68 65 20 6c 69 66 65 74 69 6d 65 20  ng the lifetime 
a850: 6f 66 20 74 68 65 20 63 6f 70 79 2e 20 20 55 73  of the copy.  Us
a860: 65 20 4f 50 5f 43 6f 70 79 20 74 6f 20 6d 61 6b  e OP_Copy to mak
a870: 65 20 61 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20  e a complete.** 
a880: 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  copy..*/.case OP
a890: 5f 53 43 6f 70 79 3a 20 7b 20 20 20 20 20 20 20  _SCopy: {       
a8a0: 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
a8b0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
a8c0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20  Op->p1];.  pOut 
a8d0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
a8e0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75 74  ;.  assert( pOut
a8f0: 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69  !=pIn1 );.  sqli
a900: 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f  te3VdbeMemShallo
a910: 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31  wCopy(pOut, pIn1
a920: 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 23 69  , MEM_Ephem);.#i
a930: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
a940: 47 0a 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79  G.  pOut->pScopy
a950: 46 72 6f 6d 20 3d 20 70 49 6e 31 3b 0a 20 20 70  From = pIn1;.  p
a960: 4f 75 74 2d 3e 6d 53 63 6f 70 79 46 6c 61 67 73  Out->mScopyFlags
a970: 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a   = pIn1->flags;.
a980: 23 65 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b 0a  #endif.  break;.
a990: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  }../* Opcode: In
a9a0: 74 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20  tCopy P1 P2 * * 
a9b0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
a9c0: 5b 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P2]=r[P1].**.**
a9d0: 20 54 72 61 6e 73 66 65 72 20 74 68 65 20 69 6e   Transfer the in
a9e0: 74 65 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64  teger value held
a9f0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
aa00: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
aa10: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20  ..**.** This is 
aa20: 61 6e 20 6f 70 74 69 6d 69 7a 65 64 20 76 65 72  an optimized ver
aa30: 73 69 6f 6e 20 6f 66 20 53 43 6f 70 79 20 74 68  sion of SCopy th
aa40: 61 74 20 77 6f 72 6b 73 20 6f 6e 6c 79 20 66 6f  at works only fo
aa50: 72 20 69 6e 74 65 67 65 72 0a 2a 2a 20 76 61 6c  r integer.** val
aa60: 75 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ues..*/.case OP_
aa70: 49 6e 74 43 6f 70 79 3a 20 7b 20 20 20 20 20 20  IntCopy: {      
aa80: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
aa90: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
aaa0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
aab0: 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  rt( (pIn1->flags
aac0: 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
aad0: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
aae0: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c  [pOp->p2];.  sql
aaf0: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
ab00: 74 36 34 28 70 4f 75 74 2c 20 70 49 6e 31 2d 3e  t64(pOut, pIn1->
ab10: 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  u.i);.  break;.}
ab20: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73  ../* Opcode: Res
ab30: 75 6c 74 52 6f 77 20 50 31 20 50 32 20 2a 20 2a  ultRow P1 P2 * *
ab40: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
ab50: 6f 75 74 70 75 74 3d 72 5b 50 31 40 50 32 5d 0a  output=r[P1@P2].
ab60: 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74  **.** The regist
ab70: 65 72 73 20 50 31 20 74 68 72 6f 75 67 68 20 50  ers P1 through P
ab80: 31 2b 50 32 2d 31 20 63 6f 6e 74 61 69 6e 20 61  1+P2-1 contain a
ab90: 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 0a 2a   single row of.*
aba0: 2a 20 72 65 73 75 6c 74 73 2e 20 54 68 69 73 20  * results. This 
abb0: 6f 70 63 6f 64 65 20 63 61 75 73 65 73 20 74 68  opcode causes th
abc0: 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  e sqlite3_step()
abd0: 20 63 61 6c 6c 20 74 6f 20 74 65 72 6d 69 6e 61   call to termina
abe0: 74 65 0a 2a 2a 20 77 69 74 68 20 61 6e 20 53 51  te.** with an SQ
abf0: 4c 49 54 45 5f 52 4f 57 20 72 65 74 75 72 6e 20  LITE_ROW return 
ac00: 63 6f 64 65 20 61 6e 64 20 69 74 20 73 65 74 73  code and it sets
ac10: 20 75 70 20 74 68 65 20 73 71 6c 69 74 65 33 5f   up the sqlite3_
ac20: 73 74 6d 74 0a 2a 2a 20 73 74 72 75 63 74 75 72  stmt.** structur
ac30: 65 20 74 6f 20 70 72 6f 76 69 64 65 20 61 63 63  e to provide acc
ac40: 65 73 73 20 74 6f 20 74 68 65 20 72 28 50 31 29  ess to the r(P1)
ac50: 2e 2e 72 28 50 31 2b 50 32 2d 31 29 20 76 61 6c  ..r(P1+P2-1) val
ac60: 75 65 73 20 61 73 0a 2a 2a 20 74 68 65 20 72 65  ues as.** the re
ac70: 73 75 6c 74 20 72 6f 77 2e 0a 2a 2f 0a 63 61 73  sult row..*/.cas
ac80: 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 3a 20  e OP_ResultRow: 
ac90: 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20  {.  Mem *pMem;. 
aca0: 20 69 6e 74 20 69 3b 0a 20 20 61 73 73 65 72 74   int i;.  assert
acb0: 28 20 70 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3d  ( p->nResColumn=
acc0: 3d 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 61 73  =pOp->p2 );.  as
acd0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
ace0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
acf0: 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 3c 3d 28 70  ->p1+pOp->p2<=(p
ad00: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
ad10: 75 72 73 6f 72 29 2b 31 20 29 3b 0a 0a 23 69 66  ursor)+1 );..#if
ad20: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
ad30: 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41  _PROGRESS_CALLBA
ad40: 43 4b 0a 20 20 2f 2a 20 52 75 6e 20 74 68 65 20  CK.  /* Run the 
ad50: 70 72 6f 67 72 65 73 73 20 63 6f 75 6e 74 65 72  progress counter
ad60: 20 6a 75 73 74 20 62 65 66 6f 72 65 20 72 65 74   just before ret
ad70: 75 72 6e 69 6e 67 2e 0a 20 20 2a 2f 0a 20 20 69  urning..  */.  i
ad80: 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73  f( db->xProgress
ad90: 21 3d 30 0a 20 20 20 26 26 20 6e 56 6d 53 74 65  !=0.   && nVmSte
ada0: 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69  p>=nProgressLimi
adb0: 74 20 0a 20 20 20 26 26 20 64 62 2d 3e 78 50 72  t .   && db->xPr
adc0: 6f 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f 67  ogress(db->pProg
add0: 72 65 73 73 41 72 67 29 21 3d 30 0a 20 20 29 7b  ressArg)!=0.  ){
ade0: 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
adf0: 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 20 20  _INTERRUPT;.    
ae00: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
ae10: 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 23 65 6e  o_error;.  }.#en
ae20: 64 69 66 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69  dif..  /* If thi
ae30: 73 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20  s statement has 
ae40: 76 69 6f 6c 61 74 65 64 20 69 6d 6d 65 64 69 61  violated immedia
ae50: 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  te foreign key c
ae60: 6f 6e 73 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20  onstraints, do. 
ae70: 20 2a 2a 20 6e 6f 74 20 72 65 74 75 72 6e 20 74   ** not return t
ae80: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
ae90: 73 20 6d 6f 64 69 66 69 65 64 2e 20 41 6e 64 20  s modified. And 
aea0: 64 6f 20 6e 6f 74 20 52 45 4c 45 41 53 45 20 74  do not RELEASE t
aeb0: 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a  he statement.  *
aec0: 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49  * transaction. I
aed0: 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f  t needs to be ro
aee0: 6c 6c 65 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20  lled back.  */. 
aef0: 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d   if( SQLITE_OK!=
af00: 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62  (rc = sqlite3Vdb
af10: 65 43 68 65 63 6b 46 6b 28 70 2c 20 30 29 29 20  eCheckFk(p, 0)) 
af20: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64  ){.    assert( d
af30: 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
af40: 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20  CountRows );.   
af50: 20 61 73 73 65 72 74 28 20 70 2d 3e 75 73 65 73   assert( p->uses
af60: 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20  StmtJournal );. 
af70: 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
af80: 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a  e_to_error;.  }.
af90: 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 53 51 4c  .  /* If the SQL
afa0: 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 66 6c  ITE_CountRows fl
afb0: 61 67 20 69 73 20 73 65 74 20 69 6e 20 73 71 6c  ag is set in sql
afc0: 69 74 65 33 2e 66 6c 61 67 73 20 6d 61 73 6b 2c  ite3.flags mask,
afd0: 20 74 68 65 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20   then .  ** DML 
afe0: 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 76 6f 6b  statements invok
aff0: 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20 74 6f  e this opcode to
b000: 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   return the numb
b010: 65 72 20 6f 66 20 72 6f 77 73 20 0a 20 20 2a 2a  er of rows .  **
b020: 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 74 68 65   modified to the
b030: 20 75 73 65 72 2e 20 54 68 69 73 20 69 73 20 74   user. This is t
b040: 68 65 20 6f 6e 6c 79 20 77 61 79 20 74 68 61 74  he only way that
b050: 20 61 20 56 4d 20 74 68 61 74 0a 20 20 2a 2a 20   a VM that.  ** 
b060: 6f 70 65 6e 73 20 61 20 73 74 61 74 65 6d 65 6e  opens a statemen
b070: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61  t transaction ma
b080: 79 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70  y invoke this op
b090: 63 6f 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  code..  **.  ** 
b0a0: 49 6e 20 63 61 73 65 20 74 68 69 73 20 69 73 20  In case this is 
b0b0: 73 75 63 68 20 61 20 73 74 61 74 65 6d 65 6e 74  such a statement
b0c0: 2c 20 63 6c 6f 73 65 20 61 6e 79 20 73 74 61 74  , close any stat
b0d0: 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
b0e0: 6e 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20 62 79  n.  ** opened by
b0f0: 20 74 68 69 73 20 56 4d 20 62 65 66 6f 72 65 20   this VM before 
b100: 72 65 74 75 72 6e 69 6e 67 20 63 6f 6e 74 72 6f  returning contro
b110: 6c 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54  l to the user. T
b120: 68 69 73 20 69 73 20 74 6f 0a 20 20 2a 2a 20 65  his is to.  ** e
b130: 6e 73 75 72 65 20 74 68 61 74 20 73 74 61 74 65  nsure that state
b140: 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e  ment-transaction
b150: 73 20 61 72 65 20 61 6c 77 61 79 73 20 6e 65 73  s are always nes
b160: 74 65 64 2c 20 6e 6f 74 20 6f 76 65 72 6c 61 70  ted, not overlap
b170: 70 69 6e 67 2e 0a 20 20 2a 2a 20 49 66 20 74 68  ping..  ** If th
b180: 65 20 6f 70 65 6e 20 73 74 61 74 65 6d 65 6e 74  e open statement
b190: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
b1a0: 6e 6f 74 20 63 6c 6f 73 65 64 20 68 65 72 65 2c  not closed here,
b1b0: 20 74 68 65 6e 20 74 68 65 20 75 73 65 72 0a 20   then the user. 
b1c0: 20 2a 2a 20 6d 61 79 20 73 74 65 70 20 61 6e 6f   ** may step ano
b1d0: 74 68 65 72 20 56 4d 20 74 68 61 74 20 6f 70 65  ther VM that ope
b1e0: 6e 73 20 69 74 73 20 6f 77 6e 20 73 74 61 74 65  ns its own state
b1f0: 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
b200: 2e 20 54 68 69 73 0a 20 20 2a 2a 20 6d 61 79 20  . This.  ** may 
b210: 6c 65 61 64 20 74 6f 20 6f 76 65 72 6c 61 70 70  lead to overlapp
b220: 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 74 72  ing statement tr
b230: 61 6e 73 61 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a  ansactions..  **
b240: 0a 20 20 2a 2a 20 54 68 65 20 73 74 61 74 65 6d  .  ** The statem
b250: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
b260: 69 73 20 6e 65 76 65 72 20 61 20 74 6f 70 2d 6c  is never a top-l
b270: 65 76 65 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e  evel transaction
b280: 2e 20 20 48 65 6e 63 65 0a 20 20 2a 2a 20 74 68  .  Hence.  ** th
b290: 65 20 52 45 4c 45 41 53 45 20 63 61 6c 6c 20 62  e RELEASE call b
b2a0: 65 6c 6f 77 20 63 61 6e 20 6e 65 76 65 72 20 66  elow can never f
b2b0: 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65  ail..  */.  asse
b2c0: 72 74 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e  rt( p->iStatemen
b2d0: 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c 61 67  t==0 || db->flag
b2e0: 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f  s&SQLITE_CountRo
b2f0: 77 73 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  ws );.  rc = sql
b300: 69 74 65 33 56 64 62 65 43 6c 6f 73 65 53 74 61  ite3VdbeCloseSta
b310: 74 65 6d 65 6e 74 28 70 2c 20 53 41 56 45 50 4f  tement(p, SAVEPO
b320: 49 4e 54 5f 52 45 4c 45 41 53 45 29 3b 0a 20 20  INT_RELEASE);.  
b330: 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
b340: 54 45 5f 4f 4b 20 29 3b 0a 0a 20 20 2f 2a 20 49  TE_OK );..  /* I
b350: 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 65 70  nvalidate all ep
b360: 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72 20 72  hemeral cursor r
b370: 6f 77 20 63 61 63 68 65 73 20 2a 2f 0a 20 20 70  ow caches */.  p
b380: 2d 3e 63 61 63 68 65 43 74 72 20 3d 20 28 70 2d  ->cacheCtr = (p-
b390: 3e 63 61 63 68 65 43 74 72 20 2b 20 32 29 7c 31  >cacheCtr + 2)|1
b3a0: 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  ;..  /* Make sur
b3b0: 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  e the results of
b3c0: 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77   the current row
b3d0: 20 61 72 65 20 5c 30 30 30 20 74 65 72 6d 69 6e   are \000 termin
b3e0: 61 74 65 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61  ated.  ** and ha
b3f0: 76 65 20 61 6e 20 61 73 73 69 67 6e 65 64 20 74  ve an assigned t
b400: 79 70 65 2e 20 20 54 68 65 20 72 65 73 75 6c 74  ype.  The result
b410: 73 20 61 72 65 20 64 65 2d 65 70 68 65 6d 65 72  s are de-ephemer
b420: 61 6c 69 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61  alized as.  ** a
b430: 20 73 69 64 65 20 65 66 66 65 63 74 2e 0a 20 20   side effect..  
b440: 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70  */.  pMem = p->p
b450: 52 65 73 75 6c 74 53 65 74 20 3d 20 26 61 4d 65  ResultSet = &aMe
b460: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f  m[pOp->p1];.  fo
b470: 72 28 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32  r(i=0; i<pOp->p2
b480: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65  ; i++){.    asse
b490: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
b4a0: 70 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20  pMem[i]) );.    
b4b0: 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 26  Deephemeralize(&
b4c0: 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 61 73  pMem[i]);.    as
b4d0: 73 65 72 74 28 20 28 70 4d 65 6d 5b 69 5d 2e 66  sert( (pMem[i].f
b4e0: 6c 61 67 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d  lags & MEM_Ephem
b4f0: 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 20 20 20  )==0.           
b500: 20 7c 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61   || (pMem[i].fla
b510: 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
b520: 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20  M_Blob))==0 );. 
b530: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
b540: 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28 26 70  mNulTerminate(&p
b550: 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 52 45 47  Mem[i]);.    REG
b560: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
b570: 3e 70 31 2b 69 2c 20 26 70 4d 65 6d 5b 69 5d 29  >p1+i, &pMem[i])
b580: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e  ;.  }.  if( db->
b590: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67  mallocFailed ) g
b5a0: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20 69  oto no_mem;..  i
b5b0: 66 28 20 64 62 2d 3e 6d 54 72 61 63 65 20 26 20  f( db->mTrace & 
b5c0: 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 52 4f 57  SQLITE_TRACE_ROW
b5d0: 20 29 7b 0a 20 20 20 20 64 62 2d 3e 78 54 72 61   ){.    db->xTra
b5e0: 63 65 28 53 51 4c 49 54 45 5f 54 52 41 43 45 5f  ce(SQLITE_TRACE_
b5f0: 52 4f 57 2c 20 64 62 2d 3e 70 54 72 61 63 65 41  ROW, db->pTraceA
b600: 72 67 2c 20 70 2c 20 30 29 3b 0a 20 20 7d 0a 0a  rg, p, 0);.  }..
b610: 20 20 2f 2a 20 52 65 74 75 72 6e 20 53 51 4c 49    /* Return SQLI
b620: 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20 20 70 2d  TE_ROW.  */.  p-
b630: 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  >pc = (int)(pOp 
b640: 2d 20 61 4f 70 29 20 2b 20 31 3b 0a 20 20 72 63  - aOp) + 1;.  rc
b650: 20 3d 20 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20   = SQLITE_ROW;. 
b660: 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
b670: 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n;.}../* Opcode:
b680: 20 43 6f 6e 63 61 74 20 50 31 20 50 32 20 50 33   Concat P1 P2 P3
b690: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
b6a0: 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2b 72 5b  : r[P3]=r[P2]+r[
b6b0: 50 31 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68  P1].**.** Add th
b6c0: 65 20 74 65 78 74 20 69 6e 20 72 65 67 69 73 74  e text in regist
b6d0: 65 72 20 50 31 20 6f 6e 74 6f 20 74 68 65 20 65  er P1 onto the e
b6e0: 6e 64 20 6f 66 20 74 68 65 20 74 65 78 74 20 69  nd of the text i
b6f0: 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32  n.** register P2
b700: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
b710: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
b720: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
b730: 65 72 20 74 68 65 20 50 31 20 6f 72 20 50 32 20  er the P1 or P2 
b740: 74 65 78 74 20 61 72 65 20 4e 55 4c 4c 20 74 68  text are NULL th
b750: 65 6e 20 73 74 6f 72 65 20 4e 55 4c 4c 20 69 6e  en store NULL in
b760: 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20   P3..**.**   P3 
b770: 3d 20 50 32 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a  = P2 || P1.**.**
b780: 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 66   It is illegal f
b790: 6f 72 20 50 31 20 61 6e 64 20 50 33 20 74 6f 20  or P1 and P3 to 
b7a0: 62 65 20 74 68 65 20 73 61 6d 65 20 72 65 67 69  be the same regi
b7b0: 73 74 65 72 2e 20 53 6f 6d 65 74 69 6d 65 73 2c  ster. Sometimes,
b7c0: 0a 2a 2a 20 69 66 20 50 33 20 69 73 20 74 68 65  .** if P3 is the
b7d0: 20 73 61 6d 65 20 72 65 67 69 73 74 65 72 20 61   same register a
b7e0: 73 20 50 32 2c 20 74 68 65 20 69 6d 70 6c 65 6d  s P2, the implem
b7f0: 65 6e 74 61 74 69 6f 6e 20 69 73 20 61 62 6c 65  entation is able
b800: 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 61 20 6d  .** to avoid a m
b810: 65 6d 63 70 79 28 29 2e 0a 2a 2f 0a 63 61 73 65  emcpy()..*/.case
b820: 20 4f 50 5f 43 6f 6e 63 61 74 3a 20 7b 20 20 20   OP_Concat: {   
b830: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
b840: 61 73 20 54 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e  as TK_CONCAT, in
b850: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
b860: 20 20 69 36 34 20 6e 42 79 74 65 3b 0a 0a 20 20    i64 nByte;..  
b870: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
b880: 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20  ->p1];.  pIn2 = 
b890: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
b8a0: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
b8b0: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
b8c0: 74 28 20 70 49 6e 31 21 3d 70 4f 75 74 20 29 3b  t( pIn1!=pOut );
b8d0: 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
b8e0: 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67  ags | pIn2->flag
b8f0: 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  s) & MEM_Null ){
b900: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
b910: 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29  MemSetNull(pOut)
b920: 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
b930: 0a 20 20 69 66 28 20 45 78 70 61 6e 64 42 6c 6f  .  if( ExpandBlo
b940: 62 28 70 49 6e 31 29 20 7c 7c 20 45 78 70 61 6e  b(pIn1) || Expan
b950: 64 42 6c 6f 62 28 70 49 6e 32 29 20 29 20 67 6f  dBlob(pIn2) ) go
b960: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 53 74 72  to no_mem;.  Str
b970: 69 6e 67 69 66 79 28 70 49 6e 31 2c 20 65 6e 63  ingify(pIn1, enc
b980: 6f 64 69 6e 67 29 3b 0a 20 20 53 74 72 69 6e 67  oding);.  String
b990: 69 66 79 28 70 49 6e 32 2c 20 65 6e 63 6f 64 69  ify(pIn2, encodi
b9a0: 6e 67 29 3b 0a 20 20 6e 42 79 74 65 20 3d 20 70  ng);.  nByte = p
b9b0: 49 6e 31 2d 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e  In1->n + pIn2->n
b9c0: 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 3e 64 62  ;.  if( nByte>db
b9d0: 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
b9e0: 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
b9f0: 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
ba00: 67 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c  g;.  }.  if( sql
ba10: 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28  ite3VdbeMemGrow(
ba20: 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65  pOut, (int)nByte
ba30: 2b 32 2c 20 70 4f 75 74 3d 3d 70 49 6e 32 29 20  +2, pOut==pIn2) 
ba40: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  ){.    goto no_m
ba50: 65 6d 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74  em;.  }.  MemSet
ba60: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
ba70: 45 4d 5f 53 74 72 29 3b 0a 20 20 69 66 28 20 70  EM_Str);.  if( p
ba80: 4f 75 74 21 3d 70 49 6e 32 20 29 7b 0a 20 20 20  Out!=pIn2 ){.   
ba90: 20 6d 65 6d 63 70 79 28 70 4f 75 74 2d 3e 7a 2c   memcpy(pOut->z,
baa0: 20 70 49 6e 32 2d 3e 7a 2c 20 70 49 6e 32 2d 3e   pIn2->z, pIn2->
bab0: 6e 29 3b 0a 20 20 7d 0a 20 20 6d 65 6d 63 70 79  n);.  }.  memcpy
bac0: 28 26 70 4f 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e  (&pOut->z[pIn2->
bad0: 6e 5d 2c 20 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e  n], pIn1->z, pIn
bae0: 31 2d 3e 6e 29 3b 0a 20 20 70 4f 75 74 2d 3e 7a  1->n);.  pOut->z
baf0: 5b 6e 42 79 74 65 5d 3d 30 3b 0a 20 20 70 4f 75  [nByte]=0;.  pOu
bb00: 74 2d 3e 7a 5b 6e 42 79 74 65 2b 31 5d 20 3d 20  t->z[nByte+1] = 
bb10: 30 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  0;.  pOut->flags
bb20: 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20   |= MEM_Term;.  
bb30: 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e  pOut->n = (int)n
bb40: 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e  Byte;.  pOut->en
bb50: 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20  c = encoding;.  
bb60: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
bb70: 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  IZE(pOut);.  bre
bb80: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
bb90: 3a 20 41 64 64 20 50 31 20 50 32 20 50 33 20 2a  : Add P1 P2 P3 *
bba0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
bbb0: 72 5b 50 33 5d 3d 72 5b 50 31 5d 2b 72 5b 50 32  r[P3]=r[P1]+r[P2
bbc0: 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20  ].**.** Add the 
bbd0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
bbe0: 72 20 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75  r P1 to the valu
bbf0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
bc00: 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68  .** and store th
bc10: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
bc20: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
bc30: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
bc40: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
bc50: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
bc60: 70 63 6f 64 65 3a 20 4d 75 6c 74 69 70 6c 79 20  pcode: Multiply 
bc70: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
bc80: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
bc90: 72 5b 50 31 5d 2a 72 5b 50 32 5d 0a 2a 2a 0a 2a  r[P1]*r[P2].**.*
bca0: 2a 0a 2a 2a 20 4d 75 6c 74 69 70 6c 79 20 74 68  *.** Multiply th
bcb0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
bcc0: 74 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61  ter P1 by the va
bcd0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
bce0: 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20  P2.** and store 
bcf0: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
bd00: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
bd10: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
bd20: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
bd30: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
bd40: 20 4f 70 63 6f 64 65 3a 20 53 75 62 74 72 61 63   Opcode: Subtrac
bd50: 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
bd60: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
bd70: 5d 3d 72 5b 50 32 5d 2d 72 5b 50 31 5d 0a 2a 2a  ]=r[P2]-r[P1].**
bd80: 0a 2a 2a 20 53 75 62 74 72 61 63 74 20 74 68 65  .** Subtract the
bd90: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
bda0: 65 72 20 50 31 20 66 72 6f 6d 20 74 68 65 20 76  er P1 from the v
bdb0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
bdc0: 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65   P2.** and store
bdd0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
bde0: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
bdf0: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
be00: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
be10: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
be20: 2a 20 4f 70 63 6f 64 65 3a 20 44 69 76 69 64 65  * Opcode: Divide
be30: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
be40: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
be50: 3d 72 5b 50 32 5d 2f 72 5b 50 31 5d 0a 2a 2a 0a  =r[P2]/r[P1].**.
be60: 2a 2a 20 44 69 76 69 64 65 20 74 68 65 20 76 61  ** Divide the va
be70: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
be80: 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65 20  P1 by the value 
be90: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
bea0: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
beb0: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
bec0: 65 72 20 50 33 20 28 50 33 3d 50 32 2f 50 31 29  er P3 (P3=P2/P1)
bed0: 2e 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  . If the value i
bee0: 6e 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  n .** register P
bef0: 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20  1 is zero, then 
bf00: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
bf10: 4c 4c 2e 20 49 66 20 65 69 74 68 65 72 20 69 6e  LL. If either in
bf20: 70 75 74 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c  put is .** NULL,
bf30: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
bf40: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
bf50: 65 3a 20 52 65 6d 61 69 6e 64 65 72 20 50 31 20  e: Remainder P1 
bf60: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
bf70: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50  opsis: r[P3]=r[P
bf80: 32 5d 25 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43  2]%r[P1].**.** C
bf90: 6f 6d 70 75 74 65 20 74 68 65 20 72 65 6d 61 69  ompute the remai
bfa0: 6e 64 65 72 20 61 66 74 65 72 20 69 6e 74 65 67  nder after integ
bfb0: 65 72 20 72 65 67 69 73 74 65 72 20 50 32 20 69  er register P2 i
bfc0: 73 20 64 69 76 69 64 65 64 20 62 79 20 0a 2a 2a  s divided by .**
bfd0: 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64   register P1 and
bfe0: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
bff0: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
c000: 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c  . .** If the val
c010: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
c020: 31 20 69 73 20 7a 65 72 6f 20 74 68 65 20 72 65  1 is zero the re
c030: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a  sult is NULL..**
c040: 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   If either opera
c050: 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  nd is NULL, the 
c060: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
c070: 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 3a 20  */.case OP_Add: 
c080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c090: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
c0a0: 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  PLUS, in1, in2, 
c0b0: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
c0c0: 53 75 62 74 72 61 63 74 3a 20 20 20 20 20 20 20  Subtract:       
c0d0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
c0e0: 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c  s TK_MINUS, in1,
c0f0: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
c100: 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20  se OP_Multiply: 
c110: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
c120: 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 41 52 2c  same as TK_STAR,
c130: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
c140: 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76 69 64  */.case OP_Divid
c150: 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e:              
c160: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
c170: 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e 32 2c  SLASH, in1, in2,
c180: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
c190: 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20 20 20  _Remainder: {   
c1a0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
c1b0: 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20  as TK_REM, in1, 
c1c0: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 63  in2, out3 */.  c
c1d0: 68 61 72 20 62 49 6e 74 69 6e 74 3b 20 20 20 2f  har bIntint;   /
c1e0: 2a 20 53 74 61 72 74 65 64 20 6f 75 74 20 61 73  * Started out as
c1f0: 20 74 77 6f 20 69 6e 74 65 67 65 72 20 6f 70 65   two integer ope
c200: 72 61 6e 64 73 20 2a 2f 0a 20 20 75 31 36 20 66  rands */.  u16 f
c210: 6c 61 67 73 3b 20 20 20 20 20 20 2f 2a 20 43 6f  lags;      /* Co
c220: 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a 20 66 6c 61  mbined MEM_* fla
c230: 67 73 20 66 72 6f 6d 20 62 6f 74 68 20 69 6e 70  gs from both inp
c240: 75 74 73 20 2a 2f 0a 20 20 75 31 36 20 74 79 70  uts */.  u16 typ
c250: 65 31 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 65  e1;      /* Nume
c260: 72 69 63 20 74 79 70 65 20 6f 66 20 6c 65 66 74  ric type of left
c270: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 75 31   operand */.  u1
c280: 36 20 74 79 70 65 32 3b 20 20 20 20 20 20 2f 2a  6 type2;      /*
c290: 20 4e 75 6d 65 72 69 63 20 74 79 70 65 20 6f 66   Numeric type of
c2a0: 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a   right operand *
c2b0: 2f 0a 20 20 69 36 34 20 69 41 3b 20 20 20 20 20  /.  i64 iA;     
c2c0: 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76      /* Integer v
c2d0: 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f 70 65  alue of left ope
c2e0: 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20 69 42  rand */.  i64 iB
c2f0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74  ;         /* Int
c300: 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20 72 69  eger value of ri
c310: 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  ght operand */. 
c320: 20 64 6f 75 62 6c 65 20 72 41 3b 20 20 20 20 20   double rA;     
c330: 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65 20 6f   /* Real value o
c340: 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a  f left operand *
c350: 2f 0a 20 20 64 6f 75 62 6c 65 20 72 42 3b 20 20  /.  double rB;  
c360: 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75      /* Real valu
c370: 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61  e of right opera
c380: 6e 64 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20  nd */..  pIn1 = 
c390: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
c3a0: 20 20 74 79 70 65 31 20 3d 20 6e 75 6d 65 72 69    type1 = numeri
c3b0: 63 54 79 70 65 28 70 49 6e 31 29 3b 0a 20 20 70  cType(pIn1);.  p
c3c0: 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
c3d0: 3e 70 32 5d 3b 0a 20 20 74 79 70 65 32 20 3d 20  >p2];.  type2 = 
c3e0: 6e 75 6d 65 72 69 63 54 79 70 65 28 70 49 6e 32  numericType(pIn2
c3f0: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  );.  pOut = &aMe
c400: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c  m[pOp->p3];.  fl
c410: 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67  ags = pIn1->flag
c420: 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 3b  s | pIn2->flags;
c430: 0a 20 20 69 66 28 20 28 74 79 70 65 31 20 26 20  .  if( (type1 & 
c440: 74 79 70 65 32 20 26 20 4d 45 4d 5f 49 6e 74 29  type2 & MEM_Int)
c450: 21 3d 30 20 29 7b 0a 20 20 20 20 69 41 20 3d 20  !=0 ){.    iA = 
c460: 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20 20 69  pIn1->u.i;.    i
c470: 42 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20  B = pIn2->u.i;. 
c480: 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 31 3b 0a     bIntint = 1;.
c490: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
c4a0: 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20  >opcode ){.     
c4b0: 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20   case OP_Add:   
c4c0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 41      if( sqlite3A
c4d0: 64 64 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20  ddInt64(&iB,iA) 
c4e0: 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20  ) goto fp_math; 
c4f0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
c500: 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20  se OP_Subtract: 
c510: 20 69 66 28 20 73 71 6c 69 74 65 33 53 75 62 49   if( sqlite3SubI
c520: 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67  nt64(&iB,iA) ) g
c530: 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72  oto fp_math;  br
c540: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
c550: 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 69 66  OP_Multiply:  if
c560: 28 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36  ( sqlite3MulInt6
c570: 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f  4(&iB,iA) ) goto
c580: 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b   fp_math;  break
c590: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
c5a0: 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20  Divide: {.      
c5b0: 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f    if( iA==0 ) go
c5c0: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
c5d0: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
c5e0: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31        if( iA==-1
c5f0: 20 26 26 20 69 42 3d 3d 53 4d 41 4c 4c 45 53 54   && iB==SMALLEST
c600: 5f 49 4e 54 36 34 20 29 20 67 6f 74 6f 20 66 70  _INT64 ) goto fp
c610: 5f 6d 61 74 68 3b 0a 20 20 20 20 20 20 20 20 69  _math;.        i
c620: 42 20 2f 3d 20 69 41 3b 0a 20 20 20 20 20 20 20  B /= iA;.       
c630: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
c640: 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b        default: {
c650: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
c660: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
c670: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
c680: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ull;.        if(
c690: 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31   iA==-1 ) iA = 1
c6a0: 3b 0a 20 20 20 20 20 20 20 20 69 42 20 25 3d 20  ;.        iB %= 
c6b0: 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  iA;.        brea
c6c0: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
c6d0: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
c6e0: 20 69 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   iB;.    MemSetT
c6f0: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
c700: 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 20  M_Int);.  }else 
c710: 69 66 28 20 28 66 6c 61 67 73 20 26 20 4d 45 4d  if( (flags & MEM
c720: 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20  _Null)!=0 ){.   
c730: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
c740: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
c750: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 62 49  .  }else{.    bI
c760: 6e 74 69 6e 74 20 3d 20 30 3b 0a 66 70 5f 6d 61  ntint = 0;.fp_ma
c770: 74 68 3a 0a 20 20 20 20 72 41 20 3d 20 73 71 6c  th:.    rA = sql
c780: 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75  ite3VdbeRealValu
c790: 65 28 70 49 6e 31 29 3b 0a 20 20 20 20 72 42 20  e(pIn1);.    rB 
c7a0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61  = sqlite3VdbeRea
c7b0: 6c 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20  lValue(pIn2);.  
c7c0: 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f    switch( pOp->o
c7d0: 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63  pcode ){.      c
c7e0: 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20  ase OP_Add:     
c7f0: 20 20 20 20 72 42 20 2b 3d 20 72 41 3b 20 20 20      rB += rA;   
c800: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
c810: 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63   case OP_Subtrac
c820: 74 3a 20 20 20 20 72 42 20 2d 3d 20 72 41 3b 20  t:    rB -= rA; 
c830: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
c840: 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69     case OP_Multi
c850: 70 6c 79 3a 20 20 20 20 72 42 20 2a 3d 20 72 41  ply:    rB *= rA
c860: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
c870: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76       case OP_Div
c880: 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f  ide: {.        /
c890: 2a 20 28 64 6f 75 62 6c 65 29 30 20 49 6e 20 63  * (double)0 In c
c8a0: 61 73 65 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d  ase of SQLITE_OM
c8b0: 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
c8c0: 54 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  T... */.        
c8d0: 69 66 28 20 72 41 3d 3d 28 64 6f 75 62 6c 65 29  if( rA==(double)
c8e0: 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65  0 ) goto arithme
c8f0: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
c900: 6c 6c 3b 0a 20 20 20 20 20 20 20 20 72 42 20 2f  ll;.        rB /
c910: 3d 20 72 41 3b 0a 20 20 20 20 20 20 20 20 62 72  = rA;.        br
c920: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
c930: 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20     default: {.  
c940: 20 20 20 20 20 20 69 41 20 3d 20 28 69 36 34 29        iA = (i64)
c950: 72 41 3b 0a 20 20 20 20 20 20 20 20 69 42 20 3d  rA;.        iB =
c960: 20 28 69 36 34 29 72 42 3b 0a 20 20 20 20 20 20   (i64)rB;.      
c970: 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f    if( iA==0 ) go
c980: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
c990: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
c9a0: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31        if( iA==-1
c9b0: 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20   ) iA = 1;.     
c9c0: 20 20 20 72 42 20 3d 20 28 64 6f 75 62 6c 65 29     rB = (double)
c9d0: 28 69 42 20 25 20 69 41 29 3b 0a 20 20 20 20 20  (iB % iA);.     
c9e0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
c9f0: 7d 0a 20 20 20 20 7d 0a 23 69 66 64 65 66 20 53  }.    }.#ifdef S
ca00: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
ca10: 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 70 4f  ING_POINT.    pO
ca20: 75 74 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a 20 20  ut->u.i = rB;.  
ca30: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
ca40: 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
ca50: 0a 23 65 6c 73 65 0a 20 20 20 20 69 66 28 20 73  .#else.    if( s
ca60: 71 6c 69 74 65 33 49 73 4e 61 4e 28 72 42 29 20  qlite3IsNaN(rB) 
ca70: 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 72  ){.      goto ar
ca80: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
ca90: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20  is_null;.    }. 
caa0: 20 20 20 70 4f 75 74 2d 3e 75 2e 72 20 3d 20 72     pOut->u.r = r
cab0: 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  B;.    MemSetTyp
cac0: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
cad0: 52 65 61 6c 29 3b 0a 20 20 20 20 69 66 28 20 28  Real);.    if( (
cae0: 28 74 79 70 65 31 7c 74 79 70 65 32 29 26 4d 45  (type1|type2)&ME
caf0: 4d 5f 52 65 61 6c 29 3d 3d 30 20 26 26 20 21 62  M_Real)==0 && !b
cb00: 49 6e 74 69 6e 74 20 29 7b 0a 20 20 20 20 20 20  Intint ){.      
cb10: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67  sqlite3VdbeInteg
cb20: 65 72 41 66 66 69 6e 69 74 79 28 70 4f 75 74 29  erAffinity(pOut)
cb30: 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
cb40: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 61 72 69   }.  break;..ari
cb50: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
cb60: 73 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69 74 65  s_null:.  sqlite
cb70: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
cb80: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
cb90: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
cba0: 6c 6c 53 65 71 20 50 31 20 2a 20 2a 20 50 34 0a  llSeq P1 * * P4.
cbb0: 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
cbc0: 69 6e 74 65 72 20 74 6f 20 61 20 43 6f 6c 6c 53  inter to a CollS
cbd0: 65 71 20 6f 62 6a 65 63 74 2e 20 49 66 20 74 68  eq object. If th
cbe0: 65 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f 20 61  e next call to a
cbf0: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a   user function.*
cc00: 2a 20 6f 72 20 61 67 67 72 65 67 61 74 65 20 63  * or aggregate c
cc10: 61 6c 6c 73 20 73 71 6c 69 74 65 33 47 65 74 46  alls sqlite3GetF
cc20: 75 6e 63 43 6f 6c 6c 53 65 71 28 29 2c 20 74 68  uncCollSeq(), th
cc30: 69 73 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  is collation seq
cc40: 75 65 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20 62 65  uence will.** be
cc50: 20 72 65 74 75 72 6e 65 64 2e 20 54 68 69 73 20   returned. This 
cc60: 69 73 20 75 73 65 64 20 62 79 20 74 68 65 20 62  is used by the b
cc70: 75 69 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d  uilt-in min(), m
cc80: 61 78 28 29 20 61 6e 64 20 6e 75 6c 6c 69 66 28  ax() and nullif(
cc90: 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a  ).** functions..
cca0: 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e  **.** If P1 is n
ccb0: 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74  ot zero, then it
ccc0: 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20 74   is a register t
ccd0: 68 61 74 20 61 20 73 75 62 73 65 71 75 65 6e 74  hat a subsequent
cce0: 20 6d 69 6e 28 29 20 6f 72 0a 2a 2a 20 6d 61 78   min() or.** max
ccf0: 28 29 20 61 67 67 72 65 67 61 74 65 20 77 69 6c  () aggregate wil
cd00: 6c 20 73 65 74 20 74 6f 20 31 20 69 66 20 74 68  l set to 1 if th
cd10: 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 69 73  e current row is
cd20: 20 6e 6f 74 20 74 68 65 20 6d 69 6e 69 6d 75 6d   not the minimum
cd30: 20 6f 72 0a 2a 2a 20 6d 61 78 69 6d 75 6d 2e 20   or.** maximum. 
cd40: 20 54 68 65 20 50 31 20 72 65 67 69 73 74 65 72   The P1 register
cd50: 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   is initialized 
cd60: 74 6f 20 30 20 62 79 20 74 68 69 73 20 69 6e 73  to 0 by this ins
cd70: 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
cd80: 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 75 73  The interface us
cd90: 65 64 20 62 79 20 74 68 65 20 69 6d 70 6c 65 6d  ed by the implem
cda0: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
cdb0: 61 66 6f 72 65 6d 65 6e 74 69 6f 6e 65 64 20 66  aforementioned f
cdc0: 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72  unctions.** to r
cdd0: 65 74 72 69 65 76 65 20 74 68 65 20 63 6f 6c 6c  etrieve the coll
cde0: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 73  ation sequence s
cdf0: 65 74 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  et by this opcod
ce00: 65 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62  e is not availab
ce10: 6c 65 0a 2a 2a 20 70 75 62 6c 69 63 6c 79 2e 20  le.** publicly. 
ce20: 20 4f 6e 6c 79 20 62 75 69 6c 74 2d 69 6e 20 66   Only built-in f
ce30: 75 6e 63 74 69 6f 6e 73 20 68 61 76 65 20 61 63  unctions have ac
ce40: 63 65 73 73 20 74 6f 20 74 68 69 73 20 66 65 61  cess to this fea
ce50: 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ture..*/.case OP
ce60: 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20 61 73  _CollSeq: {.  as
ce70: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
ce80: 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b  e==P4_COLLSEQ );
ce90: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29  .  if( pOp->p1 )
cea0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
ceb0: 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d  eMemSetInt64(&aM
cec0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 30 29 3b  em[pOp->p1], 0);
ced0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
cee0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 41  ./* Opcode: BitA
cef0: 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  nd P1 P2 P3 * *.
cf00: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
cf10: 33 5d 3d 72 5b 50 31 5d 26 72 5b 50 32 5d 0a 2a  3]=r[P1]&r[P2].*
cf20: 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69  *.** Take the bi
cf30: 74 2d 77 69 73 65 20 41 4e 44 20 6f 66 20 74 68  t-wise AND of th
cf40: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
cf50: 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61  ster P1 and P2 a
cf60: 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20  nd.** store the 
cf70: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
cf80: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
cf90: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
cfa0: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
cfb0: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
cfc0: 6f 64 65 3a 20 42 69 74 4f 72 20 50 31 20 50 32  ode: BitOr P1 P2
cfd0: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
cfe0: 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 31 5d  sis: r[P3]=r[P1]
cff0: 7c 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b  |r[P2].**.** Tak
d000: 65 20 74 68 65 20 62 69 74 2d 77 69 73 65 20 4f  e the bit-wise O
d010: 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  R of the values 
d020: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
d030: 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f  nd P2 and.** sto
d040: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
d050: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
d060: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
d070: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
d080: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
d090: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66  ./* Opcode: Shif
d0a0: 74 4c 65 66 74 20 50 31 20 50 32 20 50 33 20 2a  tLeft P1 P2 P3 *
d0b0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
d0c0: 72 5b 50 33 5d 3d 72 5b 50 32 5d 3c 3c 72 5b 50  r[P3]=r[P2]<<r[P
d0d0: 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74  1].**.** Shift t
d0e0: 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  he integer value
d0f0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20   in register P2 
d100: 74 6f 20 74 68 65 20 6c 65 66 74 20 62 79 20 74  to the left by t
d110: 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20  he.** number of 
d120: 62 69 74 73 20 73 70 65 63 69 66 69 65 64 20 62  bits specified b
d130: 79 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e  y the integer in
d140: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
d150: 20 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   Store the resul
d160: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
d170: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
d180: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
d190: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
d1a0: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
d1b0: 53 68 69 66 74 52 69 67 68 74 20 50 31 20 50 32  ShiftRight P1 P2
d1c0: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
d1d0: 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d  sis: r[P3]=r[P2]
d1e0: 3e 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68  >>r[P1].**.** Sh
d1f0: 69 66 74 20 74 68 65 20 69 6e 74 65 67 65 72 20  ift the integer 
d200: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
d210: 72 20 50 32 20 74 6f 20 74 68 65 20 72 69 67 68  r P2 to the righ
d220: 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62  t by the.** numb
d230: 65 72 20 6f 66 20 62 69 74 73 20 73 70 65 63 69  er of bits speci
d240: 66 69 65 64 20 62 79 20 74 68 65 20 69 6e 74 65  fied by the inte
d250: 67 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20  ger in register 
d260: 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65  P1..** Store the
d270: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
d280: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
d290: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
d2a0: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
d2b0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
d2c0: 4f 50 5f 42 69 74 41 6e 64 3a 20 20 20 20 20 20  OP_BitAnd:      
d2d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
d2e0: 6d 65 20 61 73 20 54 4b 5f 42 49 54 41 4e 44 2c  me as TK_BITAND,
d2f0: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
d300: 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4f 72  */.case OP_BitOr
d310: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
d320: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
d330: 5f 42 49 54 4f 52 2c 20 69 6e 31 2c 20 69 6e 32  _BITOR, in1, in2
d340: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
d350: 50 5f 53 68 69 66 74 4c 65 66 74 3a 20 20 20 20  P_ShiftLeft:    
d360: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
d370: 65 20 61 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20  e as TK_LSHIFT, 
d380: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
d390: 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74 52  /.case OP_ShiftR
d3a0: 69 67 68 74 3a 20 7b 20 20 20 20 20 20 20 20 20  ight: {         
d3b0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
d3c0: 52 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32  RSHIFT, in1, in2
d3d0: 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20  , out3 */.  i64 
d3e0: 69 41 3b 0a 20 20 75 36 34 20 75 41 3b 0a 20 20  iA;.  u64 uA;.  
d3f0: 69 36 34 20 69 42 3b 0a 20 20 75 38 20 6f 70 3b  i64 iB;.  u8 op;
d400: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
d410: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e  [pOp->p1];.  pIn
d420: 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
d430: 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  2];.  pOut = &aM
d440: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
d450: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
d460: 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26  | pIn2->flags) &
d470: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
d480: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
d490: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
d4a0: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69    break;.  }.  i
d4b0: 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  A = sqlite3VdbeI
d4c0: 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20  ntValue(pIn2);. 
d4d0: 20 69 42 20 3d 20 73 71 6c 69 74 65 33 56 64 62   iB = sqlite3Vdb
d4e0: 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b  eIntValue(pIn1);
d4f0: 0a 20 20 6f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63  .  op = pOp->opc
d500: 6f 64 65 3b 0a 20 20 69 66 28 20 6f 70 3d 3d 4f  ode;.  if( op==O
d510: 50 5f 42 69 74 41 6e 64 20 29 7b 0a 20 20 20 20  P_BitAnd ){.    
d520: 69 41 20 26 3d 20 69 42 3b 0a 20 20 7d 65 6c 73  iA &= iB;.  }els
d530: 65 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74  e if( op==OP_Bit
d540: 4f 72 20 29 7b 0a 20 20 20 20 69 41 20 7c 3d 20  Or ){.    iA |= 
d550: 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  iB;.  }else if( 
d560: 69 42 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73  iB!=0 ){.    ass
d570: 65 72 74 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66  ert( op==OP_Shif
d580: 74 52 69 67 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50  tRight || op==OP
d590: 5f 53 68 69 66 74 4c 65 66 74 20 29 3b 0a 0a 20  _ShiftLeft );.. 
d5a0: 20 20 20 2f 2a 20 49 66 20 73 68 69 66 74 69 6e     /* If shiftin
d5b0: 67 20 62 79 20 61 20 6e 65 67 61 74 69 76 65 20  g by a negative 
d5c0: 61 6d 6f 75 6e 74 2c 20 73 68 69 66 74 20 69 6e  amount, shift in
d5d0: 20 74 68 65 20 6f 74 68 65 72 20 64 69 72 65 63   the other direc
d5e0: 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 66 28 20  tion */.    if( 
d5f0: 69 42 3c 30 20 29 7b 0a 20 20 20 20 20 20 61 73  iB<0 ){.      as
d600: 73 65 72 74 28 20 4f 50 5f 53 68 69 66 74 52 69  sert( OP_ShiftRi
d610: 67 68 74 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66  ght==OP_ShiftLef
d620: 74 2b 31 20 29 3b 0a 20 20 20 20 20 20 6f 70 20  t+1 );.      op 
d630: 3d 20 32 2a 4f 50 5f 53 68 69 66 74 4c 65 66 74  = 2*OP_ShiftLeft
d640: 20 2b 20 31 20 2d 20 6f 70 3b 0a 20 20 20 20 20   + 1 - op;.     
d650: 20 69 42 20 3d 20 69 42 3e 28 2d 36 34 29 20 3f   iB = iB>(-64) ?
d660: 20 2d 69 42 20 3a 20 36 34 3b 0a 20 20 20 20 7d   -iB : 64;.    }
d670: 0a 0a 20 20 20 20 69 66 28 20 69 42 3e 3d 36 34  ..    if( iB>=64
d680: 20 29 7b 0a 20 20 20 20 20 20 69 41 20 3d 20 28   ){.      iA = (
d690: 69 41 3e 3d 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f  iA>=0 || op==OP_
d6a0: 53 68 69 66 74 4c 65 66 74 29 20 3f 20 30 20 3a  ShiftLeft) ? 0 :
d6b0: 20 2d 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a   -1;.    }else{.
d6c0: 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26 75 41        memcpy(&uA
d6d0: 2c 20 26 69 41 2c 20 73 69 7a 65 6f 66 28 75 41  , &iA, sizeof(uA
d6e0: 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6f 70  ));.      if( op
d6f0: 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 29  ==OP_ShiftLeft )
d700: 7b 0a 20 20 20 20 20 20 20 20 75 41 20 3c 3c 3d  {.        uA <<=
d710: 20 69 42 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65   iB;.      }else
d720: 7b 0a 20 20 20 20 20 20 20 20 75 41 20 3e 3e 3d  {.        uA >>=
d730: 20 69 42 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20   iB;.        /* 
d740: 53 69 67 6e 2d 65 78 74 65 6e 64 20 6f 6e 20 61  Sign-extend on a
d750: 20 72 69 67 68 74 20 73 68 69 66 74 20 6f 66 20   right shift of 
d760: 61 20 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65  a negative numbe
d770: 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28  r */.        if(
d780: 20 69 41 3c 30 20 29 20 75 41 20 7c 3d 20 28 28   iA<0 ) uA |= ((
d790: 28 28 75 36 34 29 30 78 66 66 66 66 66 66 66 66  ((u64)0xffffffff
d7a0: 29 3c 3c 33 32 29 7c 30 78 66 66 66 66 66 66 66  )<<32)|0xfffffff
d7b0: 66 29 20 3c 3c 20 28 36 34 2d 69 42 29 3b 0a 20  f) << (64-iB);. 
d7c0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d       }.      mem
d7d0: 63 70 79 28 26 69 41 2c 20 26 75 41 2c 20 73 69  cpy(&iA, &uA, si
d7e0: 7a 65 6f 66 28 69 41 29 29 3b 0a 20 20 20 20 7d  zeof(iA));.    }
d7f0: 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  .  }.  pOut->u.i
d800: 20 3d 20 69 41 3b 0a 20 20 4d 65 6d 53 65 74 54   = iA;.  MemSetT
d810: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
d820: 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b  M_Int);.  break;
d830: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
d840: 64 64 49 6d 6d 20 20 50 31 20 50 32 20 2a 20 2a  ddImm  P1 P2 * *
d850: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
d860: 72 5b 50 31 5d 3d 72 5b 50 31 5d 2b 50 32 0a 2a  r[P1]=r[P1]+P2.*
d870: 2a 20 0a 2a 2a 20 41 64 64 20 74 68 65 20 63 6f  * .** Add the co
d880: 6e 73 74 61 6e 74 20 50 32 20 74 6f 20 74 68 65  nstant P2 to the
d890: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
d8a0: 65 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65  er P1..** The re
d8b0: 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 61  sult is always a
d8c0: 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a  n integer..**.**
d8d0: 20 54 6f 20 66 6f 72 63 65 20 61 6e 79 20 72 65   To force any re
d8e0: 67 69 73 74 65 72 20 74 6f 20 62 65 20 61 6e 20  gister to be an 
d8f0: 69 6e 74 65 67 65 72 2c 20 6a 75 73 74 20 61 64  integer, just ad
d900: 64 20 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  d 0..*/.case OP_
d910: 41 64 64 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20  AddImm: {       
d920: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
d930: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
d940: 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p1];.  memAbo
d950: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49  utToChange(p, pI
d960: 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n1);.  sqlite3Vd
d970: 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
d980: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75  pIn1);.  pIn1->u
d990: 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  .i += pOp->p2;. 
d9a0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
d9b0: 63 6f 64 65 3a 20 4d 75 73 74 42 65 49 6e 74 20  code: MustBeInt 
d9c0: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a  P1 P2 * * *.** .
d9d0: 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c  ** Force the val
d9e0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
d9f0: 31 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67  1 to be an integ
da00: 65 72 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  er.  If the valu
da10: 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f  e.** in P1 is no
da20: 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64  t an integer and
da30: 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65   cannot be conve
da40: 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74  rted into an int
da50: 65 67 65 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20  eger.** without 
da60: 64 61 74 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20  data loss, then 
da70: 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
da80: 20 74 6f 20 50 32 2c 20 6f 72 20 69 66 20 50 32   to P2, or if P2
da90: 3d 3d 30 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20  ==0.** raise an 
daa0: 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 20  SQLITE_MISMATCH 
dab0: 65 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  exception..*/.ca
dac0: 73 65 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a  se OP_MustBeInt:
dad0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
dae0: 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
daf0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
db00: 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p1];.  if( (pI
db10: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
db20: 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61  Int)==0 ){.    a
db30: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e  pplyAffinity(pIn
db40: 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  1, SQLITE_AFF_NU
db50: 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29  MERIC, encoding)
db60: 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  ;.    VdbeBranch
db70: 54 61 6b 65 6e 28 28 70 49 6e 31 2d 3e 66 6c 61  Taken((pIn1->fla
db80: 67 73 26 4d 45 4d 5f 49 6e 74 29 3d 3d 30 2c 20  gs&MEM_Int)==0, 
db90: 32 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e  2);.    if( (pIn
dba0: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
dbb0: 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  nt)==0 ){.      
dbc0: 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29  if( pOp->p2==0 )
dbd0: 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
dbe0: 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a  QLITE_MISMATCH;.
dbf0: 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
dc00: 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
dc10: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
dc20: 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f        goto jump_
dc30: 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 7d 0a 20  to_p2;.      }. 
dc40: 20 20 20 7d 0a 20 20 7d 0a 20 20 4d 65 6d 53 65     }.  }.  MemSe
dc50: 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31 2c 20  tTypeFlag(pIn1, 
dc60: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61  MEM_Int);.  brea
dc70: 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
dc80: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
dc90: 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f  NG_POINT./* Opco
dca0: 64 65 3a 20 52 65 61 6c 41 66 66 69 6e 69 74 79  de: RealAffinity
dcb0: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
dcc0: 2a 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31  * If register P1
dcd0: 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65   holds an intege
dce0: 72 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  r convert it to 
dcf0: 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a  a real value..**
dd00: 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
dd10: 69 73 20 75 73 65 64 20 77 68 65 6e 20 65 78 74  is used when ext
dd20: 72 61 63 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74  racting informat
dd30: 69 6f 6e 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d  ion from a colum
dd40: 6e 20 74 68 61 74 0a 2a 2a 20 68 61 73 20 52 45  n that.** has RE
dd50: 41 4c 20 61 66 66 69 6e 69 74 79 2e 20 20 53 75  AL affinity.  Su
dd60: 63 68 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73  ch column values
dd70: 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 73 74   may still be st
dd80: 6f 72 65 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67  ored as.** integ
dd90: 65 72 73 2c 20 66 6f 72 20 73 70 61 63 65 20 65  ers, for space e
dda0: 66 66 69 63 69 65 6e 63 79 2c 20 62 75 74 20 61  fficiency, but a
ddb0: 66 74 65 72 20 65 78 74 72 61 63 74 69 6f 6e 20  fter extraction 
ddc0: 77 65 20 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20  we want them.** 
ddd0: 74 6f 20 68 61 76 65 20 6f 6e 6c 79 20 61 20 72  to have only a r
dde0: 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61  eal value..*/.ca
ddf0: 73 65 20 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69  se OP_RealAffini
de00: 74 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ty: {           
de10: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
de20: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
de30: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
de40: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
de50: 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c  M_Int ){.    sql
de60: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c 69  ite3VdbeMemReali
de70: 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20  fy(pIn1);.  }.  
de80: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
de90: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
dea0: 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63  OMIT_CAST./* Opc
deb0: 6f 64 65 3a 20 43 61 73 74 20 50 31 20 50 32 20  ode: Cast P1 P2 
dec0: 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
ded0: 73 3a 20 61 66 66 69 6e 69 74 79 28 72 5b 50 31  s: affinity(r[P1
dee0: 5d 29 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74  ]).**.** Force t
def0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
df00: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 74 68  ster P1 to be th
df10: 65 20 74 79 70 65 20 64 65 66 69 6e 65 64 20 62  e type defined b
df20: 79 20 50 32 2e 0a 2a 2a 20 0a 2a 2a 20 3c 75 6c  y P2..** .** <ul
df30: 3e 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27 41  >.** <li> P2=='A
df40: 27 20 26 72 61 72 72 3b 20 42 4c 4f 42 0a 2a 2a  ' &rarr; BLOB.**
df50: 20 3c 6c 69 3e 20 50 32 3d 3d 27 42 27 20 26 72   <li> P2=='B' &r
df60: 61 72 72 3b 20 54 45 58 54 0a 2a 2a 20 3c 6c 69  arr; TEXT.** <li
df70: 3e 20 50 32 3d 3d 27 43 27 20 26 72 61 72 72 3b  > P2=='C' &rarr;
df80: 20 4e 55 4d 45 52 49 43 0a 2a 2a 20 3c 6c 69 3e   NUMERIC.** <li>
df90: 20 50 32 3d 3d 27 44 27 20 26 72 61 72 72 3b 20   P2=='D' &rarr; 
dfa0: 49 4e 54 45 47 45 52 0a 2a 2a 20 3c 6c 69 3e 20  INTEGER.** <li> 
dfb0: 50 32 3d 3d 27 45 27 20 26 72 61 72 72 3b 20 52  P2=='E' &rarr; R
dfc0: 45 41 4c 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a  EAL.** </ul>.**.
dfd0: 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20  ** A NULL value 
dfe0: 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62  is not changed b
dff0: 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20  y this routine. 
e000: 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c   It remains NULL
e010: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 61 73  ..*/.case OP_Cas
e020: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
e030: 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a        /* in1 */.
e040: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
e050: 32 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c  2>=SQLITE_AFF_BL
e060: 4f 42 20 26 26 20 70 4f 70 2d 3e 70 32 3c 3d 53  OB && pOp->p2<=S
e070: 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 29  QLITE_AFF_REAL )
e080: 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f  ;.  testcase( pO
e090: 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46  p->p2==SQLITE_AF
e0a0: 46 5f 54 45 58 54 20 29 3b 0a 20 20 74 65 73 74  F_TEXT );.  test
e0b0: 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53  case( pOp->p2==S
e0c0: 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20 29  QLITE_AFF_BLOB )
e0d0: 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f  ;.  testcase( pO
e0e0: 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46  p->p2==SQLITE_AF
e0f0: 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20 74  F_NUMERIC );.  t
e100: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32  estcase( pOp->p2
e110: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  ==SQLITE_AFF_INT
e120: 45 47 45 52 20 29 3b 0a 20 20 74 65 73 74 63 61  EGER );.  testca
e130: 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c  se( pOp->p2==SQL
e140: 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 29 3b 0a  ITE_AFF_REAL );.
e150: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
e160: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p1];.  memAb
e170: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
e180: 49 6e 31 29 3b 0a 20 20 72 63 20 3d 20 45 78 70  In1);.  rc = Exp
e190: 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20  andBlob(pIn1);. 
e1a0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43   sqlite3VdbeMemC
e1b0: 61 73 74 28 70 49 6e 31 2c 20 70 4f 70 2d 3e 70  ast(pIn1, pOp->p
e1c0: 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  2, encoding);.  
e1d0: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
e1e0: 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 69 66 28  IZE(pIn1);.  if(
e1f0: 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
e200: 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
e210: 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
e220: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
e230: 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  CAST */../* Opco
e240: 64 65 3a 20 45 71 20 50 31 20 50 32 20 50 33 20  de: Eq P1 P2 P3 
e250: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
e260: 73 3a 20 49 46 20 72 5b 50 33 5d 3d 3d 72 5b 50  s: IF r[P3]==r[P
e270: 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65  1].**.** Compare
e280: 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72   the values in r
e290: 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50  egister P1 and P
e2a0: 33 2e 20 20 49 66 20 72 65 67 28 50 33 29 3d 3d  3.  If reg(P3)==
e2b0: 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20  reg(P1) then.** 
e2c0: 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20  jump to address 
e2d0: 50 32 2e 20 20 4f 72 20 69 66 20 74 68 65 20 53  P2.  Or if the S
e2e0: 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 66 6c  QLITE_STOREP2 fl
e2f0: 61 67 20 69 73 20 73 65 74 20 69 6e 20 50 35 2c  ag is set in P5,
e300: 20 74 68 65 6e 0a 2a 2a 20 73 74 6f 72 65 20 74   then.** store t
e310: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d  he result of com
e320: 70 61 72 69 73 6f 6e 20 69 6e 20 72 65 67 69 73  parison in regis
e330: 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68  ter P2..**.** Th
e340: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  e SQLITE_AFF_MAS
e350: 4b 20 70 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20  K portion of P5 
e360: 6d 75 73 74 20 62 65 20 61 6e 20 61 66 66 69 6e  must be an affin
e370: 69 74 79 20 63 68 61 72 61 63 74 65 72 20 2d 0a  ity character -.
e380: 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  ** SQLITE_AFF_TE
e390: 58 54 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  XT, SQLITE_AFF_I
e3a0: 4e 54 45 47 45 52 2c 20 61 6e 64 20 73 6f 20 66  NTEGER, and so f
e3b0: 6f 72 74 68 2e 20 41 6e 20 61 74 74 65 6d 70 74  orth. An attempt
e3c0: 20 69 73 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20   is made .** to 
e3d0: 63 6f 65 72 63 65 20 62 6f 74 68 20 69 6e 70 75  coerce both inpu
e3e0: 74 73 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20  ts according to 
e3f0: 74 68 69 73 20 61 66 66 69 6e 69 74 79 20 62 65  this affinity be
e400: 66 6f 72 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70  fore the.** comp
e410: 61 72 69 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20  arison is made. 
e420: 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46  If the SQLITE_AF
e430: 46 5f 4d 41 53 4b 20 69 73 20 30 78 30 30 2c 20  F_MASK is 0x00, 
e440: 74 68 65 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20  then numeric.** 
e450: 61 66 66 69 6e 69 74 79 20 69 73 20 75 73 65 64  affinity is used
e460: 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20  . Note that the 
e470: 61 66 66 69 6e 69 74 79 20 63 6f 6e 76 65 72 73  affinity convers
e480: 69 6f 6e 73 20 61 72 65 20 73 74 6f 72 65 64 0a  ions are stored.
e490: 2a 2a 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65  ** back into the
e4a0: 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73   input registers
e4b0: 20 50 31 20 61 6e 64 20 50 33 2e 20 20 53 6f 20   P1 and P3.  So 
e4c0: 74 68 69 73 20 6f 70 63 6f 64 65 20 63 61 6e 20  this opcode can 
e4d0: 63 61 75 73 65 0a 2a 2a 20 70 65 72 73 69 73 74  cause.** persist
e4e0: 65 6e 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72  ent changes to r
e4f0: 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20  egisters P1 and 
e500: 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61  P3..**.** Once a
e510: 6e 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68  ny conversions h
e520: 61 76 65 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c  ave taken place,
e530: 20 61 6e 64 20 6e 65 69 74 68 65 72 20 76 61 6c   and neither val
e540: 75 65 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20  ue is NULL, .** 
e550: 74 68 65 20 76 61 6c 75 65 73 20 61 72 65 20 63  the values are c
e560: 6f 6d 70 61 72 65 64 2e 20 49 66 20 62 6f 74 68  ompared. If both
e570: 20 76 61 6c 75 65 73 20 61 72 65 20 62 6c 6f 62   values are blob
e580: 73 20 74 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20  s then memcmp() 
e590: 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 64 65  is.** used to de
e5a0: 74 65 72 6d 69 6e 65 20 74 68 65 20 72 65 73 75  termine the resu
e5b0: 6c 74 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 61  lts of the compa
e5c0: 72 69 73 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20  rison.  If both 
e5d0: 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 74 65  values.** are te
e5e0: 78 74 2c 20 74 68 65 6e 20 74 68 65 20 61 70 70  xt, then the app
e5f0: 72 6f 70 72 69 61 74 65 20 63 6f 6c 6c 61 74 69  ropriate collati
e600: 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73 70 65 63  ng function spec
e610: 69 66 69 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69  ified in.** P4 i
e620: 73 20 75 73 65 64 20 74 6f 20 64 6f 20 74 68 65  s used to do the
e630: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66   comparison.  If
e640: 20 50 34 20 69 73 20 6e 6f 74 20 73 70 65 63 69   P4 is not speci
e650: 66 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d  fied then.** mem
e660: 63 6d 70 28 29 20 69 73 20 75 73 65 64 20 74 6f  cmp() is used to
e670: 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20 73 74   compare text st
e680: 72 69 6e 67 2e 20 20 49 66 20 62 6f 74 68 20 76  ring.  If both v
e690: 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d  alues are.** num
e6a0: 65 72 69 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d  eric, then a num
e6b0: 65 72 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20  eric comparison 
e6c0: 69 73 20 75 73 65 64 2e 20 49 66 20 74 68 65 20  is used. If the 
e6d0: 74 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72  two values.** ar
e6e0: 65 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 74  e of different t
e6f0: 79 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65  ypes, then numbe
e700: 72 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  rs are considere
e710: 64 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73  d less than.** s
e720: 74 72 69 6e 67 73 20 61 6e 64 20 73 74 72 69 6e  trings and strin
e730: 67 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  gs are considere
e740: 64 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62  d less than blob
e750: 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49  s..**.** If SQLI
e760: 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74  TE_NULLEQ is set
e770: 20 69 6e 20 50 35 20 74 68 65 6e 20 74 68 65 20   in P5 then the 
e780: 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72  result of compar
e790: 69 73 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 65  ison is always e
e7a0: 69 74 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72  ither.** true or
e7b0: 20 66 61 6c 73 65 20 61 6e 64 20 69 73 20 6e 65   false and is ne
e7c0: 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f  ver NULL.  If bo
e7d0: 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  th operands are 
e7e0: 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65  NULL then the re
e7f0: 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61  sult.** of compa
e800: 72 69 73 6f 6e 20 69 73 20 74 72 75 65 2e 20 20  rison is true.  
e810: 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  If either operan
e820: 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74  d is NULL then t
e830: 68 65 20 72 65 73 75 6c 74 20 69 73 20 66 61 6c  he result is fal
e840: 73 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65  se..** If neithe
e850: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
e860: 4c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  L the result is 
e870: 74 68 65 20 73 61 6d 65 20 61 73 20 69 74 20 77  the same as it w
e880: 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74 68  ould be if.** th
e890: 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  e SQLITE_NULLEQ 
e8a0: 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74 74 65  flag were omitte
e8b0: 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2a 0a 2a 2a  d from P5..**.**
e8c0: 20 49 66 20 62 6f 74 68 20 53 51 4c 49 54 45 5f   If both SQLITE_
e8d0: 53 54 4f 52 45 50 32 20 61 6e 64 20 53 51 4c 49  STOREP2 and SQLI
e8e0: 54 45 5f 4b 45 45 50 4e 55 4c 4c 20 66 6c 61 67  TE_KEEPNULL flag
e8f0: 73 20 61 72 65 20 73 65 74 20 74 68 65 6e 20 74  s are set then t
e900: 68 65 0a 2a 2a 20 63 6f 6e 74 65 6e 74 20 6f 66  he.** content of
e910: 20 72 5b 50 32 5d 20 69 73 20 6f 6e 6c 79 20 63   r[P2] is only c
e920: 68 61 6e 67 65 64 20 69 66 20 74 68 65 20 6e 65  hanged if the ne
e930: 77 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 20  w value is NULL 
e940: 6f 72 20 30 20 28 66 61 6c 73 65 29 2e 0a 2a 2a  or 0 (false)..**
e950: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
e960: 20 61 20 70 72 69 6f 72 20 72 5b 50 32 5d 20 76   a prior r[P2] v
e970: 61 6c 75 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65  alue will not be
e980: 20 6f 76 65 72 77 72 69 74 74 65 6e 20 62 79 20   overwritten by 
e990: 31 20 28 74 72 75 65 29 2e 0a 2a 2f 0a 2f 2a 20  1 (true)..*/./* 
e9a0: 4f 70 63 6f 64 65 3a 20 4e 65 20 50 31 20 50 32  Opcode: Ne P1 P2
e9b0: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
e9c0: 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 21  opsis: IF r[P3]!
e9d0: 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69  =r[P1].**.** Thi
e9e0: 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  s works just lik
e9f0: 65 20 74 68 65 20 45 71 20 6f 70 63 6f 64 65 20  e the Eq opcode 
ea00: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
ea10: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
ea20: 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e 64 73  .** the operands
ea30: 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31   in registers P1
ea40: 20 61 6e 64 20 50 33 20 61 72 65 20 6e 6f 74 20   and P3 are not 
ea50: 65 71 75 61 6c 2e 20 20 53 65 65 20 74 68 65 20  equal.  See the 
ea60: 45 71 20 6f 70 63 6f 64 65 20 66 6f 72 0a 2a 2a  Eq opcode for.**
ea70: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
ea80: 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49  rmation..**.** I
ea90: 66 20 62 6f 74 68 20 53 51 4c 49 54 45 5f 53 54  f both SQLITE_ST
eaa0: 4f 52 45 50 32 20 61 6e 64 20 53 51 4c 49 54 45  OREP2 and SQLITE
eab0: 5f 4b 45 45 50 4e 55 4c 4c 20 66 6c 61 67 73 20  _KEEPNULL flags 
eac0: 61 72 65 20 73 65 74 20 74 68 65 6e 20 74 68 65  are set then the
ead0: 0a 2a 2a 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  .** content of r
eae0: 5b 50 32 5d 20 69 73 20 6f 6e 6c 79 20 63 68 61  [P2] is only cha
eaf0: 6e 67 65 64 20 69 66 20 74 68 65 20 6e 65 77 20  nged if the new 
eb00: 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 20 6f 72  value is NULL or
eb10: 20 31 20 28 74 72 75 65 29 2e 0a 2a 2a 20 49 6e   1 (true)..** In
eb20: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 61 20   other words, a 
eb30: 70 72 69 6f 72 20 72 5b 50 32 5d 20 76 61 6c 75  prior r[P2] valu
eb40: 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 6f 76  e will not be ov
eb50: 65 72 77 72 69 74 74 65 6e 20 62 79 20 30 20 28  erwritten by 0 (
eb60: 66 61 6c 73 65 29 2e 0a 2a 2f 0a 2f 2a 20 4f 70  false)..*/./* Op
eb70: 63 6f 64 65 3a 20 4c 74 20 50 31 20 50 32 20 50  code: Lt P1 P2 P
eb80: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
eb90: 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3c 72 5b  sis: IF r[P3]<r[
eba0: 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72  P1].**.** Compar
ebb0: 65 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  e the values in 
ebc0: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
ebd0: 50 33 2e 20 20 49 66 20 72 65 67 28 50 33 29 3c  P3.  If reg(P3)<
ebe0: 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20  reg(P1) then.** 
ebf0: 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20  jump to address 
ec00: 50 32 2e 20 20 4f 72 20 69 66 20 74 68 65 20 53  P2.  Or if the S
ec10: 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 66 6c  QLITE_STOREP2 fl
ec20: 61 67 20 69 73 20 73 65 74 20 69 6e 20 50 35 20  ag is set in P5 
ec30: 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20 72 65 73  store.** the res
ec40: 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  ult of compariso
ec50: 6e 20 28 30 20 6f 72 20 31 20 6f 72 20 4e 55 4c  n (0 or 1 or NUL
ec60: 4c 29 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  L) into register
ec70: 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   P2..**.** If th
ec80: 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  e SQLITE_JUMPIFN
ec90: 55 4c 4c 20 62 69 74 20 6f 66 20 50 35 20 69 73  ULL bit of P5 is
eca0: 20 73 65 74 20 61 6e 64 20 65 69 74 68 65 72 20   set and either 
ecb0: 72 65 67 28 50 31 29 20 6f 72 0a 2a 2a 20 72 65  reg(P1) or.** re
ecc0: 67 28 50 33 29 20 69 73 20 4e 55 4c 4c 20 74 68  g(P3) is NULL th
ecd0: 65 6e 20 74 68 65 20 74 61 6b 65 20 74 68 65 20  en the take the 
ece0: 6a 75 6d 70 2e 20 20 49 66 20 74 68 65 20 53 51  jump.  If the SQ
ecf0: 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20  LITE_JUMPIFNULL 
ed00: 0a 2a 2a 20 62 69 74 20 69 73 20 63 6c 65 61 72  .** bit is clear
ed10: 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75   then fall throu
ed20: 67 68 20 69 66 20 65 69 74 68 65 72 20 6f 70 65  gh if either ope
ed30: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a  rand is NULL..**
ed40: 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41  .** The SQLITE_A
ed50: 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20  FF_MASK portion 
ed60: 6f 66 20 50 35 20 6d 75 73 74 20 62 65 20 61 6e  of P5 must be an
ed70: 20 61 66 66 69 6e 69 74 79 20 63 68 61 72 61 63   affinity charac
ed80: 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f  ter -.** SQLITE_
ed90: 41 46 46 5f 54 45 58 54 2c 20 53 51 4c 49 54 45  AFF_TEXT, SQLITE
eda0: 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e  _AFF_INTEGER, an
edb0: 64 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61  d so forth. An a
edc0: 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 0a  ttempt is made .
edd0: 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20 62 6f 74  ** to coerce bot
ede0: 68 20 69 6e 70 75 74 73 20 61 63 63 6f 72 64 69  h inputs accordi
edf0: 6e 67 20 74 6f 20 74 68 69 73 20 61 66 66 69 6e  ng to this affin
ee00: 69 74 79 20 62 65 66 6f 72 65 20 74 68 65 0a 2a  ity before the.*
ee10: 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  * comparison is 
ee20: 6d 61 64 65 2e 20 49 66 20 74 68 65 20 53 51 4c  made. If the SQL
ee30: 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20  ITE_AFF_MASK is 
ee40: 30 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72  0x00, then numer
ee50: 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 69  ic.** affinity i
ee60: 73 20 75 73 65 64 2e 20 4e 6f 74 65 20 74 68 61  s used. Note tha
ee70: 74 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 63  t the affinity c
ee80: 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72 65 20 73  onversions are s
ee90: 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e  tored.** back in
eea0: 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65 67  to the input reg
eeb0: 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33  isters P1 and P3
eec0: 2e 20 20 53 6f 20 74 68 69 73 20 6f 70 63 6f 64  .  So this opcod
eed0: 65 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70  e can cause.** p
eee0: 65 72 73 69 73 74 65 6e 74 20 63 68 61 6e 67 65  ersistent change
eef0: 73 20 74 6f 20 72 65 67 69 73 74 65 72 73 20 50  s to registers P
ef00: 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  1 and P3..**.** 
ef10: 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65 72 73  Once any convers
ef20: 69 6f 6e 73 20 68 61 76 65 20 74 61 6b 65 6e 20  ions have taken 
ef30: 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69 74 68  place, and neith
ef40: 65 72 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c  er value is NULL
ef50: 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73  , .** the values
ef60: 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 20 49   are compared. I
ef70: 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72  f both values ar
ef80: 65 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d  e blobs then mem
ef90: 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73 65 64  cmp() is.** used
efa0: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
efb0: 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65  e results of the
efc0: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66   comparison.  If
efd0: 20 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20   both values.** 
efe0: 61 72 65 20 74 65 78 74 2c 20 74 68 65 6e 20 74  are text, then t
eff0: 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 63  he appropriate c
f000: 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f  ollating functio
f010: 6e 20 73 70 65 63 69 66 69 65 64 20 69 6e 0a 2a  n specified in.*
f020: 2a 20 50 34 20 69 73 20 20 75 73 65 64 20 74 6f  * P4 is  used to
f030: 20 64 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73   do the comparis
f040: 6f 6e 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f  on.  If P4 is no
f050: 74 20 73 70 65 63 69 66 69 65 64 20 74 68 65 6e  t specified then
f060: 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73 20  .** memcmp() is 
f070: 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 20  used to compare 
f080: 74 65 78 74 20 73 74 72 69 6e 67 2e 20 20 49 66  text string.  If
f090: 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65   both values are
f0a0: 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68 65  .** numeric, the
f0b0: 6e 20 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70  n a numeric comp
f0c0: 61 72 69 73 6f 6e 20 69 73 20 75 73 65 64 2e 20  arison is used. 
f0d0: 49 66 20 74 68 65 20 74 77 6f 20 76 61 6c 75 65  If the two value
f0e0: 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69 66 66  s.** are of diff
f0f0: 65 72 65 6e 74 20 74 79 70 65 73 2c 20 74 68 65  erent types, the
f100: 6e 20 6e 75 6d 62 65 72 73 20 61 72 65 20 63 6f  n numbers are co
f110: 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68  nsidered less th
f120: 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e  an.** strings an
f130: 64 20 73 74 72 69 6e 67 73 20 61 72 65 20 63 6f  d strings are co
f140: 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68  nsidered less th
f150: 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 2f 2a 20  an blobs..*/./* 
f160: 4f 70 63 6f 64 65 3a 20 4c 65 20 50 31 20 50 32  Opcode: Le P1 P2
f170: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
f180: 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3c  opsis: IF r[P3]<
f190: 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69  =r[P1].**.** Thi
f1a0: 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  s works just lik
f1b0: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
f1c0: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
f1d0: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
f1e0: 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  .** the content 
f1f0: 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69  of register P3 i
f200: 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65  s less than or e
f210: 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74  qual to the cont
f220: 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74  ent of.** regist
f230: 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20  er P1.  See the 
f240: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  Lt opcode for ad
f250: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
f260: 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
f270: 64 65 3a 20 47 74 20 50 31 20 50 32 20 50 33 20  de: Gt P1 P2 P3 
f280: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
f290: 73 3a 20 49 46 20 72 5b 50 33 5d 3e 72 5b 50 31  s: IF r[P3]>r[P1
f2a0: 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72  ].**.** This wor
f2b0: 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65  ks just like the
f2c0: 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70   Lt opcode excep
f2d0: 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20  t that the jump 
f2e0: 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74  is taken if.** t
f2f0: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
f300: 67 69 73 74 65 72 20 50 33 20 69 73 20 67 72 65  gister P3 is gre
f310: 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 63 6f  ater than the co
f320: 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69  ntent of.** regi
f330: 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68  ster P1.  See th
f340: 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20  e Lt opcode for 
f350: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
f360: 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70  mation..*/./* Op
f370: 63 6f 64 65 3a 20 47 65 20 50 31 20 50 32 20 50  code: Ge P1 P2 P
f380: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
f390: 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3e 3d 72  sis: IF r[P3]>=r
f3a0: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  [P1].**.** This 
f3b0: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
f3c0: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
f3d0: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
f3e0: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
f3f0: 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * the content of
f400: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
f410: 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
f420: 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e  equal to the con
f430: 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73  tent of.** regis
f440: 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65  ter P1.  See the
f450: 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61   Lt opcode for a
f460: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
f470: 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ation..*/.case O
f480: 50 5f 45 71 3a 20 20 20 20 20 20 20 20 20 20 20  P_Eq:           
f490: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
f4a0: 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_EQ, jump, in1,
f4b0: 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
f4c0: 4e 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Ne:             
f4d0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
f4e0: 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  NE, jump, in1, i
f4f0: 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74  n3 */.case OP_Lt
f500: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
f510: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54  /* same as TK_LT
f520: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
f530: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20   */.case OP_Le: 
f540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
f550: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20   same as TK_LE, 
f560: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
f570: 2f 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20  /.case OP_Gt:   
f580: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
f590: 61 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75  ame as TK_GT, ju
f5a0: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
f5b0: 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20  case OP_Ge: {   
f5c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
f5d0: 65 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70  e as TK_GE, jump
f5e0: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20  , in1, in3 */.  
f5f0: 69 6e 74 20 72 65 73 2c 20 72 65 73 32 3b 20 20  int res, res2;  
f600: 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66      /* Result of
f610: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20   the comparison 
f620: 6f 66 20 70 49 6e 31 20 61 67 61 69 6e 73 74 20  of pIn1 against 
f630: 70 49 6e 33 20 2a 2f 0a 20 20 63 68 61 72 20 61  pIn3 */.  char a
f640: 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 2f 2a  ffinity;      /*
f650: 20 41 66 66 69 6e 69 74 79 20 74 6f 20 75 73 65   Affinity to use
f660: 20 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20   for comparison 
f670: 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 31 3b  */.  u16 flags1;
f680: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79           /* Copy
f690: 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75   of initial valu
f6a0: 65 20 6f 66 20 70 49 6e 31 2d 3e 66 6c 61 67 73  e of pIn1->flags
f6b0: 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 33   */.  u16 flags3
f6c0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70  ;         /* Cop
f6d0: 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c  y of initial val
f6e0: 75 65 20 6f 66 20 70 49 6e 33 2d 3e 66 6c 61 67  ue of pIn3->flag
f6f0: 73 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26  s */..  pIn1 = &
f700: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
f710: 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
f720: 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 31  p->p3];.  flags1
f730: 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a   = pIn1->flags;.
f740: 20 20 66 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d    flags3 = pIn3-
f750: 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66  >flags;.  if( (f
f760: 6c 61 67 73 31 20 7c 20 66 6c 61 67 73 33 29 26  lags1 | flags3)&
f770: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
f780: 2f 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68 20 6f  /* One or both o
f790: 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c  perands are NULL
f7a0: 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   */.    if( pOp-
f7b0: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c  >p5 & SQLITE_NUL
f7c0: 4c 45 51 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  LEQ ){.      /* 
f7d0: 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  If SQLITE_NULLEQ
f7e0: 20 69 73 20 73 65 74 20 28 77 68 69 63 68 20 77   is set (which w
f7f0: 69 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20  ill only happen 
f800: 69 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20  if the operator 
f810: 69 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50 5f 45  is.      ** OP_E
f820: 71 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68 65 6e  q or OP_Ne) then
f830: 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 6f   take the jump o
f840: 72 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67 20  r not depending 
f850: 6f 6e 20 77 68 65 74 68 65 72 0a 20 20 20 20 20  on whether.     
f860: 20 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74 68 20   ** or not both 
f870: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 75 6c  operands are nul
f880: 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  l..      */.    
f890: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
f8a0: 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20  pcode==OP_Eq || 
f8b0: 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
f8c0: 4e 65 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  Ne );.      asse
f8d0: 72 74 28 20 28 66 6c 61 67 73 31 20 26 20 4d 45  rt( (flags1 & ME
f8e0: 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30 20 29 3b  M_Cleared)==0 );
f8f0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
f900: 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
f910: 5f 4a 55 4d 50 49 46 4e 55 4c 4c 29 3d 3d 30 20  _JUMPIFNULL)==0 
f920: 7c 7c 20 43 4f 52 52 55 50 54 5f 44 42 20 29 3b  || CORRUPT_DB );
f930: 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
f940: 20 28 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49   (pOp->p5 & SQLI
f950: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 29 21 3d  TE_JUMPIFNULL)!=
f960: 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 28  0 );.      if( (
f970: 66 6c 61 67 73 31 26 66 6c 61 67 73 33 26 4d 45  flags1&flags3&ME
f980: 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20 20 20 20  M_Null)!=0.     
f990: 20 20 26 26 20 28 66 6c 61 67 73 33 26 4d 45 4d    && (flags3&MEM
f9a0: 5f 43 6c 65 61 72 65 64 29 3d 3d 30 0a 20 20 20  _Cleared)==0.   
f9b0: 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65     ){.        re
f9c0: 73 20 3d 20 30 3b 20 20 2f 2a 20 4f 70 65 72 61  s = 0;  /* Opera
f9d0: 6e 64 73 20 61 72 65 20 65 71 75 61 6c 20 2a 2f  nds are equal */
f9e0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
f9f0: 20 20 20 20 20 20 72 65 73 20 3d 20 31 3b 20 20        res = 1;  
fa00: 2f 2a 20 4f 70 65 72 61 6e 64 73 20 61 72 65 20  /* Operands are 
fa10: 6e 6f 74 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20  not equal */.   
fa20: 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
fa30: 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f        /* SQLITE_
fa40: 4e 55 4c 4c 45 51 20 69 73 20 63 6c 65 61 72 20  NULLEQ is clear 
fa50: 61 6e 64 20 61 74 20 6c 65 61 73 74 20 6f 6e 65  and at least one
fa60: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
fa70: 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20  ,.      ** then 
fa80: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c  the result is al
fa90: 77 61 79 73 20 4e 55 4c 4c 2e 0a 20 20 20 20 20  ways NULL..     
faa0: 20 2a 2a 20 54 68 65 20 6a 75 6d 70 20 69 73 20   ** The jump is 
fab0: 74 61 6b 65 6e 20 69 66 20 74 68 65 20 53 51 4c  taken if the SQL
fac0: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62  ITE_JUMPIFNULL b
fad0: 69 74 20 69 73 20 73 65 74 2e 0a 20 20 20 20 20  it is set..     
fae0: 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 4f   */.      if( pO
faf0: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53  p->p5 & SQLITE_S
fb00: 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 20 20  TOREP2 ){.      
fb10: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
fb20: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 20  Op->p2];.       
fb30: 20 69 43 6f 6d 70 61 72 65 20 3d 20 31 3b 20 20   iCompare = 1;  
fb40: 20 20 2f 2a 20 4f 70 65 72 61 6e 64 73 20 61 72    /* Operands ar
fb50: 65 20 6e 6f 74 20 65 71 75 61 6c 20 2a 2f 0a 20  e not equal */. 
fb60: 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54         memAboutT
fb70: 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29  oChange(p, pOut)
fb80: 3b 0a 20 20 20 20 20 20 20 20 4d 65 6d 53 65 74  ;.        MemSet
fb90: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
fba0: 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20  EM_Null);.      
fbb0: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
fbc0: 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b  (pOp->p2, pOut);
fbd0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
fbe0: 20 20 20 20 20 20 56 64 62 65 42 72 61 6e 63 68        VdbeBranch
fbf0: 54 61 6b 65 6e 28 32 2c 33 29 3b 0a 20 20 20 20  Taken(2,3);.    
fc00: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20      if( pOp->p5 
fc10: 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  & SQLITE_JUMPIFN
fc20: 55 4c 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ULL ){.         
fc30: 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
fc40: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
fc50: 20 20 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b    }.      break;
fc60: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
fc70: 20 20 20 20 2f 2a 20 4e 65 69 74 68 65 72 20 6f      /* Neither o
fc80: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 20  perand is NULL. 
fc90: 20 44 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e   Do a comparison
fca0: 2e 20 2a 2f 0a 20 20 20 20 61 66 66 69 6e 69 74  . */.    affinit
fcb0: 79 20 3d 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  y = pOp->p5 & SQ
fcc0: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 3b 0a 20  LITE_AFF_MASK;. 
fcd0: 20 20 20 69 66 28 20 61 66 66 69 6e 69 74 79 3e     if( affinity>
fce0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45  =SQLITE_AFF_NUME
fcf0: 52 49 43 20 29 7b 0a 20 20 20 20 20 20 69 66 28  RIC ){.      if(
fd00: 20 28 66 6c 61 67 73 31 20 7c 20 66 6c 61 67 73   (flags1 | flags
fd10: 33 29 26 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20  3)&MEM_Str ){.  
fd20: 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73        if( (flags
fd30: 31 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d  1 & (MEM_Int|MEM
fd40: 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d  _Real|MEM_Str))=
fd50: 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20  =MEM_Str ){.    
fd60: 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72        applyNumer
fd70: 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c  icAffinity(pIn1,
fd80: 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61 73  0);.          as
fd90: 73 65 72 74 28 20 66 6c 61 67 73 33 3d 3d 70 49  sert( flags3==pI
fda0: 6e 33 2d 3e 66 6c 61 67 73 20 29 3b 0a 20 20 20  n3->flags );.   
fdb0: 20 20 20 20 20 20 20 2f 2a 20 74 65 73 74 63 61         /* testca
fdc0: 73 65 28 20 66 6c 61 67 73 33 21 3d 70 49 6e 33  se( flags3!=pIn3
fdd0: 2d 3e 66 6c 61 67 73 20 29 3b 0a 20 20 20 20 20  ->flags );.     
fde0: 20 20 20 20 20 2a 2a 20 74 68 69 73 20 75 73 65       ** this use
fdf0: 64 20 74 6f 20 62 65 20 70 6f 73 73 69 62 6c 65  d to be possible
fe00: 20 77 69 74 68 20 70 49 6e 31 3d 3d 70 49 6e 33   with pIn1==pIn3
fe10: 2c 20 62 75 74 20 6e 6f 74 20 73 69 6e 63 65 0a  , but not since.
fe20: 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65            ** the
fe30: 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 77 61   column cache wa
fe40: 73 20 72 65 6d 6f 76 65 64 2e 20 20 54 68 65 20  s removed.  The 
fe50: 66 6f 6c 6c 6f 77 69 6e 67 20 61 73 73 69 67 6e  following assign
fe60: 6d 65 6e 74 0a 20 20 20 20 20 20 20 20 20 20 2a  ment.          *
fe70: 2a 20 69 73 20 65 73 73 65 6e 74 69 61 6c 6c 79  * is essentially
fe80: 20 61 20 6e 6f 2d 6f 70 2e 20 20 42 75 74 2c 20   a no-op.  But, 
fe90: 69 74 20 70 72 6f 76 69 64 65 73 20 64 65 66 65  it provides defe
fea0: 6e 73 65 2d 69 6e 2d 64 65 70 74 68 0a 20 20 20  nse-in-depth.   
feb0: 20 20 20 20 20 20 20 2a 2a 20 69 6e 20 63 61 73         ** in cas
fec0: 65 20 6f 75 72 20 61 6e 61 6c 79 73 69 73 20 69  e our analysis i
fed0: 73 20 69 6e 63 6f 72 72 65 63 74 2c 20 73 6f 20  s incorrect, so 
fee0: 69 74 20 69 73 20 6c 65 66 74 20 69 6e 2e 20 2a  it is left in. *
fef0: 2f 0a 20 20 20 20 20 20 20 20 20 20 66 6c 61 67  /.          flag
ff00: 73 33 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73  s3 = pIn3->flags
ff10: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
ff20: 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 33 20      if( (flags3 
ff30: 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
ff40: 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d  eal|MEM_Str))==M
ff50: 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20  EM_Str ){.      
ff60: 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
ff70: 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 30 29  Affinity(pIn3,0)
ff80: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
ff90: 20 20 7d 0a 20 20 20 20 20 20 2f 2a 20 48 61 6e    }.      /* Han
ffa0: 64 6c 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63  dle the common c
ffb0: 61 73 65 20 6f 66 20 69 6e 74 65 67 65 72 20 63  ase of integer c
ffc0: 6f 6d 70 61 72 69 73 6f 6e 20 68 65 72 65 2c 20  omparison here, 
ffd0: 61 73 20 61 6e 0a 20 20 20 20 20 20 2a 2a 20 6f  as an.      ** o
ffe0: 70 74 69 6d 69 7a 61 74 69 6f 6e 2c 20 74 6f 20  ptimization, to 
fff0: 61 76 6f 69 64 20 61 20 63 61 6c 6c 20 74 6f 20  avoid a call to 
10000 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72  sqlite3MemCompar
10010 65 28 29 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  e() */.      if(
10020 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
10030 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
10040 4d 5f 49 6e 74 29 21 3d 30 20 29 7b 0a 20 20 20  M_Int)!=0 ){.   
10050 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 75       if( pIn3->u
10060 2e 69 20 3e 20 70 49 6e 31 2d 3e 75 2e 69 20 29  .i > pIn1->u.i )
10070 7b 20 72 65 73 20 3d 20 2b 31 3b 20 67 6f 74 6f  { res = +1; goto
10080 20 63 6f 6d 70 61 72 65 5f 6f 70 3b 20 7d 0a 20   compare_op; }. 
10090 20 20 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d         if( pIn3-
100a0 3e 75 2e 69 20 3c 20 70 49 6e 31 2d 3e 75 2e 69  >u.i < pIn1->u.i
100b0 20 29 7b 20 72 65 73 20 3d 20 2d 31 3b 20 67 6f   ){ res = -1; go
100c0 74 6f 20 63 6f 6d 70 61 72 65 5f 6f 70 3b 20 7d  to compare_op; }
100d0 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 30  .        res = 0
100e0 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 63  ;.        goto c
100f0 6f 6d 70 61 72 65 5f 6f 70 3b 0a 20 20 20 20 20  ompare_op;.     
10100 20 7d 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28   }.    }else if(
10110 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54   affinity==SQLIT
10120 45 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a 20 20  E_AFF_TEXT ){.  
10130 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 31 20      if( (flags1 
10140 26 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26 26  & MEM_Str)==0 &&
10150 20 28 66 6c 61 67 73 31 20 26 20 28 4d 45 4d 5f   (flags1 & (MEM_
10160 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 21 3d  Int|MEM_Real))!=
10170 30 20 29 7b 0a 20 20 20 20 20 20 20 20 74 65 73  0 ){.        tes
10180 74 63 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61  tcase( pIn1->fla
10190 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a  gs & MEM_Int );.
101a0 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65          testcase
101b0 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
101c0 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20 20  MEM_Real );.    
101d0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
101e0 65 6d 53 74 72 69 6e 67 69 66 79 28 70 49 6e 31  emStringify(pIn1
101f0 2c 20 65 6e 63 6f 64 69 6e 67 2c 20 31 29 3b 0a  , encoding, 1);.
10200 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65          testcase
10210 28 20 28 66 6c 61 67 73 31 26 4d 45 4d 5f 44 79  ( (flags1&MEM_Dy
10220 6e 29 20 21 3d 20 28 70 49 6e 31 2d 3e 66 6c 61  n) != (pIn1->fla
10230 67 73 26 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20  gs&MEM_Dyn) );. 
10240 20 20 20 20 20 20 20 66 6c 61 67 73 31 20 3d 20         flags1 = 
10250 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 7e  (pIn1->flags & ~
10260 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20  MEM_TypeMask) | 
10270 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 54 79  (flags1 & MEM_Ty
10280 70 65 4d 61 73 6b 29 3b 0a 20 20 20 20 20 20 20  peMask);.       
10290 20 61 73 73 65 72 74 28 20 70 49 6e 31 21 3d 70   assert( pIn1!=p
102a0 49 6e 33 20 29 3b 0a 20 20 20 20 20 20 7d 0a 20  In3 );.      }. 
102b0 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 33       if( (flags3
102c0 20 26 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26   & MEM_Str)==0 &
102d0 26 20 28 66 6c 61 67 73 33 20 26 20 28 4d 45 4d  & (flags3 & (MEM
102e0 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 21  _Int|MEM_Real))!
102f0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 74 65  =0 ){.        te
10300 73 74 63 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c  stcase( pIn3->fl
10310 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
10320 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73  .        testcas
10330 65 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  e( pIn3->flags &
10340 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20   MEM_Real );.   
10350 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
10360 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70 49 6e  MemStringify(pIn
10370 33 2c 20 65 6e 63 6f 64 69 6e 67 2c 20 31 29 3b  3, encoding, 1);
10380 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73  .        testcas
10390 65 28 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 44  e( (flags3&MEM_D
103a0 79 6e 29 20 21 3d 20 28 70 49 6e 33 2d 3e 66 6c  yn) != (pIn3->fl
103b0 61 67 73 26 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a  ags&MEM_Dyn) );.
103c0 20 20 20 20 20 20 20 20 66 6c 61 67 73 33 20 3d          flags3 =
103d0 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
103e0 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c  ~MEM_TypeMask) |
103f0 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f 54   (flags3 & MEM_T
10400 79 70 65 4d 61 73 6b 29 3b 0a 20 20 20 20 20 20  ypeMask);.      
10410 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65  }.    }.    asse
10420 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
10430 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20 70  =P4_COLLSEQ || p
10440 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20  Op->p4.pColl==0 
10450 29 3b 0a 20 20 20 20 72 65 73 20 3d 20 73 71 6c  );.    res = sql
10460 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 70  ite3MemCompare(p
10470 49 6e 33 2c 20 70 49 6e 31 2c 20 70 4f 70 2d 3e  In3, pIn1, pOp->
10480 70 34 2e 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 63  p4.pColl);.  }.c
10490 6f 6d 70 61 72 65 5f 6f 70 3a 0a 20 20 2f 2a 20  ompare_op:.  /* 
104a0 41 74 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 72  At this point, r
104b0 65 73 20 69 73 20 6e 65 67 61 74 69 76 65 2c 20  es is negative, 
104c0 7a 65 72 6f 2c 20 6f 72 20 70 6f 73 69 74 69 76  zero, or positiv
104d0 65 20 69 66 20 72 65 67 5b 50 31 5d 20 69 73 0a  e if reg[P1] is.
104e0 20 20 2a 2a 20 6c 65 73 73 20 74 68 61 6e 2c 20    ** less than, 
104f0 65 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65  equal to, or gre
10500 61 74 65 72 20 74 68 61 6e 20 72 65 67 5b 50 33  ater than reg[P3
10510 5d 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  ], respectively.
10520 20 20 43 6f 6d 70 75 74 65 0a 20 20 2a 2a 20 74    Compute.  ** t
10530 68 65 20 61 6e 73 77 65 72 20 74 6f 20 74 68 69  he answer to thi
10540 73 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 72 65  s operator in re
10550 73 32 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  s2, depending on
10560 20 77 68 61 74 20 74 68 65 20 63 6f 6d 70 61 72   what the compar
10570 69 73 6f 6e 0a 20 20 2a 2a 20 6f 70 65 72 61 74  ison.  ** operat
10580 6f 72 20 61 63 74 75 61 6c 6c 79 20 69 73 2e 20  or actually is. 
10590 20 54 68 65 20 6e 65 78 74 20 62 6c 6f 63 6b 20   The next block 
105a0 6f 66 20 63 6f 64 65 20 64 65 70 65 6e 64 73 20  of code depends 
105b0 6f 6e 20 74 68 65 20 66 61 63 74 0a 20 20 2a 2a  on the fact.  **
105c0 20 74 68 61 74 20 74 68 65 20 36 20 63 6f 6d 70   that the 6 comp
105d0 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73  arison operators
105e0 20 61 72 65 20 63 6f 6e 73 65 63 75 74 69 76 65   are consecutive
105f0 20 69 6e 74 65 67 65 72 73 20 69 6e 20 74 68 69   integers in thi
10600 73 0a 20 20 2a 2a 20 6f 72 64 65 72 3a 20 20 4e  s.  ** order:  N
10610 45 2c 20 45 51 2c 20 47 54 2c 20 4c 45 2c 20 4c  E, EQ, GT, LE, L
10620 54 2c 20 47 45 20 2a 2f 0a 20 20 61 73 73 65 72  T, GE */.  asser
10630 74 28 20 4f 50 5f 45 71 3d 3d 4f 50 5f 4e 65 2b  t( OP_Eq==OP_Ne+
10640 31 20 29 3b 20 61 73 73 65 72 74 28 20 4f 50 5f  1 ); assert( OP_
10650 47 74 3d 3d 4f 50 5f 4e 65 2b 32 20 29 3b 20 61  Gt==OP_Ne+2 ); a
10660 73 73 65 72 74 28 20 4f 50 5f 4c 65 3d 3d 4f 50  ssert( OP_Le==OP
10670 5f 4e 65 2b 33 20 29 3b 0a 20 20 61 73 73 65 72  _Ne+3 );.  asser
10680 74 28 20 4f 50 5f 4c 74 3d 3d 4f 50 5f 4e 65 2b  t( OP_Lt==OP_Ne+
10690 34 20 29 3b 20 61 73 73 65 72 74 28 20 4f 50 5f  4 ); assert( OP_
106a0 47 65 3d 3d 4f 50 5f 4e 65 2b 35 20 29 3b 0a 20  Ge==OP_Ne+5 );. 
106b0 20 69 66 28 20 72 65 73 3c 30 20 29 7b 20 20 20   if( res<0 ){   
106c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
106d0 20 20 20 20 20 2f 2a 20 6e 65 2c 20 65 71 2c 20       /* ne, eq, 
106e0 67 74 2c 20 6c 65 2c 20 6c 74 2c 20 67 65 20 2a  gt, le, lt, ge *
106f0 2f 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  /.    static con
10700 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
10710 20 61 4c 54 62 5b 5d 20 3d 20 7b 20 31 2c 20 20   aLTb[] = { 1,  
10720 30 2c 20 20 30 2c 20 20 31 2c 20 20 31 2c 20 20  0,  0,  1,  1,  
10730 30 20 7d 3b 0a 20 20 20 20 72 65 73 32 20 3d 20  0 };.    res2 = 
10740 61 4c 54 62 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65  aLTb[pOp->opcode
10750 20 2d 20 4f 50 5f 4e 65 5d 3b 0a 20 20 7d 65 6c   - OP_Ne];.  }el
10760 73 65 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b  se if( res==0 ){
10770 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
10780 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
10790 61 45 51 62 5b 5d 20 3d 20 7b 20 30 2c 20 20 31  aEQb[] = { 0,  1
107a0 2c 20 20 30 2c 20 20 31 2c 20 20 30 2c 20 20 31  ,  0,  1,  0,  1
107b0 20 7d 3b 0a 20 20 20 20 72 65 73 32 20 3d 20 61   };.    res2 = a
107c0 45 51 62 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  EQb[pOp->opcode 
107d0 2d 20 4f 50 5f 4e 65 5d 3b 0a 20 20 7d 65 6c 73  - OP_Ne];.  }els
107e0 65 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  e{.    static co
107f0 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
10800 72 20 61 47 54 62 5b 5d 20 3d 20 7b 20 31 2c 20  r aGTb[] = { 1, 
10810 20 30 2c 20 20 31 2c 20 20 30 2c 20 20 30 2c 20   0,  1,  0,  0, 
10820 20 31 20 7d 3b 0a 20 20 20 20 72 65 73 32 20 3d   1 };.    res2 =
10830 20 61 47 54 62 5b 70 4f 70 2d 3e 6f 70 63 6f 64   aGTb[pOp->opcod
10840 65 20 2d 20 4f 50 5f 4e 65 5d 3b 0a 20 20 7d 0a  e - OP_Ne];.  }.
10850 0a 20 20 2f 2a 20 55 6e 64 6f 20 61 6e 79 20 63  .  /* Undo any c
10860 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20 61  hanges made by a
10870 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29 20 74  pplyAffinity() t
10880 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69  o the input regi
10890 73 74 65 72 73 2e 20 2a 2f 0a 20 20 61 73 73 65  sters. */.  asse
108a0 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  rt( (pIn1->flags
108b0 20 26 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20 28   & MEM_Dyn) == (
108c0 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 44 79 6e  flags1 & MEM_Dyn
108d0 29 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  ) );.  pIn1->fla
108e0 67 73 20 3d 20 66 6c 61 67 73 31 3b 0a 20 20 61  gs = flags1;.  a
108f0 73 73 65 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c  ssert( (pIn3->fl
10900 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20 3d  ags & MEM_Dyn) =
10910 3d 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f  = (flags3 & MEM_
10920 44 79 6e 29 20 29 3b 0a 20 20 70 49 6e 33 2d 3e  Dyn) );.  pIn3->
10930 66 6c 61 67 73 20 3d 20 66 6c 61 67 73 33 3b 0a  flags = flags3;.
10940 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  .  if( pOp->p5 &
10950 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
10960 29 7b 0a 20 20 20 20 70 4f 75 74 20 3d 20 26 61  ){.    pOut = &a
10970 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
10980 20 20 69 43 6f 6d 70 61 72 65 20 3d 20 72 65 73    iCompare = res
10990 3b 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e  ;.    if( (pOp->
109a0 70 35 20 26 20 53 51 4c 49 54 45 5f 4b 45 45 50  p5 & SQLITE_KEEP
109b0 4e 55 4c 4c 29 21 3d 30 20 29 7b 0a 20 20 20 20  NULL)!=0 ){.    
109c0 20 20 2f 2a 20 54 68 65 20 4b 45 45 50 4e 55 4c    /* The KEEPNUL
109d0 4c 20 66 6c 61 67 20 70 72 65 76 65 6e 74 73 20  L flag prevents 
109e0 4f 50 5f 45 71 20 66 72 6f 6d 20 6f 76 65 72 77  OP_Eq from overw
109f0 72 69 74 69 6e 67 20 61 20 4e 55 4c 4c 20 77 69  riting a NULL wi
10a00 74 68 20 31 0a 20 20 20 20 20 20 2a 2a 20 61 6e  th 1.      ** an
10a10 64 20 70 72 65 76 65 6e 74 73 20 4f 50 5f 4e 65  d prevents OP_Ne
10a20 20 66 72 6f 6d 20 6f 76 65 72 77 72 69 74 69 6e   from overwritin
10a30 67 20 4e 55 4c 4c 20 77 69 74 68 20 30 2e 20 20  g NULL with 0.  
10a40 54 68 69 73 20 66 6c 61 67 0a 20 20 20 20 20 20  This flag.      
10a50 2a 2a 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20  ** is only used 
10a60 69 6e 20 63 6f 6e 74 65 78 74 73 20 77 68 65 72  in contexts wher
10a70 65 20 65 69 74 68 65 72 3a 0a 20 20 20 20 20 20  e either:.      
10a80 2a 2a 20 20 20 28 31 29 20 6f 70 3d 3d 4f 50 5f  **   (1) op==OP_
10a90 45 71 20 26 26 20 28 72 5b 50 32 5d 3d 3d 4e 55  Eq && (r[P2]==NU
10aa0 4c 4c 20 7c 7c 20 72 5b 50 32 5d 3d 3d 30 29 0a  LL || r[P2]==0).
10ab0 20 20 20 20 20 20 2a 2a 20 20 20 28 32 29 20 6f        **   (2) o
10ac0 70 3d 3d 4f 50 5f 4e 65 20 26 26 20 28 72 5b 50  p==OP_Ne && (r[P
10ad0 32 5d 3d 3d 4e 55 4c 4c 20 7c 7c 20 72 5b 50 32  2]==NULL || r[P2
10ae0 5d 3d 3d 31 29 0a 20 20 20 20 20 20 2a 2a 20 54  ]==1).      ** T
10af0 68 65 72 65 66 6f 72 65 20 69 74 20 69 73 20 6e  herefore it is n
10b00 6f 74 20 6e 65 63 65 73 73 61 72 79 20 74 6f 20  ot necessary to 
10b10 63 68 65 63 6b 20 74 68 65 20 63 6f 6e 74 65 6e  check the conten
10b20 74 20 6f 66 20 72 5b 50 32 5d 20 66 6f 72 0a 20  t of r[P2] for. 
10b30 20 20 20 20 20 2a 2a 20 4e 55 4c 4c 2e 20 2a 2f       ** NULL. */
10b40 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
10b50 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e  Op->opcode==OP_N
10b60 65 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  e || pOp->opcode
10b70 3d 3d 4f 50 5f 45 71 20 29 3b 0a 20 20 20 20 20  ==OP_Eq );.     
10b80 20 61 73 73 65 72 74 28 20 72 65 73 32 3d 3d 30   assert( res2==0
10b90 20 7c 7c 20 72 65 73 32 3d 3d 31 20 29 3b 0a 20   || res2==1 );. 
10ba0 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 72       testcase( r
10bb0 65 73 32 3d 3d 30 20 26 26 20 70 4f 70 2d 3e 6f  es2==0 && pOp->o
10bc0 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 29 3b 0a  pcode==OP_Eq );.
10bd0 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
10be0 72 65 73 32 3d 3d 31 20 26 26 20 70 4f 70 2d 3e  res2==1 && pOp->
10bf0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 29 3b  opcode==OP_Eq );
10c00 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
10c10 20 72 65 73 32 3d 3d 30 20 26 26 20 70 4f 70 2d   res2==0 && pOp-
10c20 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29  >opcode==OP_Ne )
10c30 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65  ;.      testcase
10c40 28 20 72 65 73 32 3d 3d 31 20 26 26 20 70 4f 70  ( res2==1 && pOp
10c50 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20  ->opcode==OP_Ne 
10c60 29 3b 0a 20 20 20 20 20 20 69 66 28 20 28 70 4f  );.      if( (pO
10c70 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71  p->opcode==OP_Eq
10c80 29 3d 3d 72 65 73 32 20 29 20 62 72 65 61 6b 3b  )==res2 ) break;
10c90 0a 20 20 20 20 7d 0a 20 20 20 20 6d 65 6d 41 62  .    }.    memAb
10ca0 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
10cb0 4f 75 74 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74  Out);.    MemSet
10cc0 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
10cd0 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75  EM_Int);.    pOu
10ce0 74 2d 3e 75 2e 69 20 3d 20 72 65 73 32 3b 0a 20  t->u.i = res2;. 
10cf0 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
10d00 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29  E(pOp->p2, pOut)
10d10 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56  ;.  }else{.    V
10d20 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
10d30 65 73 21 3d 30 2c 20 28 70 4f 70 2d 3e 70 35 20  es!=0, (pOp->p5 
10d40 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 29  & SQLITE_NULLEQ)
10d50 3f 32 3a 33 29 3b 0a 20 20 20 20 69 66 28 20 72  ?2:3);.    if( r
10d60 65 73 32 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  es2 ){.      got
10d70 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
10d80 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
10d90 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45  .}../* Opcode: E
10da0 6c 73 65 4e 6f 74 45 71 20 2a 20 50 32 20 2a 20  lseNotEq * P2 * 
10db0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  * *.**.** This o
10dc0 70 63 6f 64 65 20 6d 75 73 74 20 69 6d 6d 65 64  pcode must immed
10dd0 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 20 61 6e  iately follow an
10de0 20 4f 50 5f 4c 74 20 6f 72 20 4f 50 5f 47 74 20   OP_Lt or OP_Gt 
10df0 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61  comparison opera
10e00 74 6f 72 2e 0a 2a 2a 20 49 66 20 72 65 73 75 6c  tor..** If resul
10e10 74 20 6f 66 20 61 6e 20 4f 50 5f 45 71 20 63 6f  t of an OP_Eq co
10e20 6d 70 61 72 69 73 6f 6e 20 6f 6e 20 74 68 65 20  mparison on the 
10e30 73 61 6d 65 20 74 77 6f 20 6f 70 65 72 61 6e 64  same two operand
10e40 73 0a 2a 2a 20 77 6f 75 6c 64 20 68 61 76 65 20  s.** would have 
10e50 62 65 20 4e 55 4c 4c 20 6f 72 20 66 61 6c 73 65  be NULL or false
10e60 20 28 30 29 2c 20 74 68 65 6e 20 74 68 65 6e 20   (0), then then 
10e70 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 20  jump to P2. .** 
10e80 49 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  If the result of
10e90 20 61 6e 20 4f 50 5f 45 71 20 63 6f 6d 70 61 72   an OP_Eq compar
10ea0 69 73 6f 6e 20 6f 6e 20 74 68 65 20 74 77 6f 20  ison on the two 
10eb0 70 72 65 76 69 6f 75 73 20 6f 70 65 72 61 6e 64  previous operand
10ec0 73 0a 2a 2a 20 77 6f 75 6c 64 20 68 61 76 65 20  s.** would have 
10ed0 62 65 65 6e 20 74 72 75 65 20 28 31 29 2c 20 74  been true (1), t
10ee0 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  hen fall through
10ef0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6c 73  ..*/.case OP_Els
10f00 65 4e 6f 74 45 71 3a 20 7b 20 20 20 20 20 20 20  eNotEq: {       
10f10 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 45 53  /* same as TK_ES
10f20 43 41 50 45 2c 20 6a 75 6d 70 20 2a 2f 0a 20 20  CAPE, jump */.  
10f30 61 73 73 65 72 74 28 20 70 4f 70 3e 61 4f 70 20  assert( pOp>aOp 
10f40 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
10f50 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  [-1].opcode==OP_
10f60 4c 74 20 7c 7c 20 70 4f 70 5b 2d 31 5d 2e 6f 70  Lt || pOp[-1].op
10f70 63 6f 64 65 3d 3d 4f 50 5f 47 74 20 29 3b 0a 20  code==OP_Gt );. 
10f80 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d   assert( pOp[-1]
10f90 2e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f  .p5 & SQLITE_STO
10fa0 52 45 50 32 20 29 3b 0a 20 20 56 64 62 65 42 72  REP2 );.  VdbeBr
10fb0 61 6e 63 68 54 61 6b 65 6e 28 69 43 6f 6d 70 61  anchTaken(iCompa
10fc0 72 65 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28  re!=0, 2);.  if(
10fd0 20 69 43 6f 6d 70 61 72 65 21 3d 30 20 29 20 67   iCompare!=0 ) g
10fe0 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
10ff0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20    break;.}.../* 
11000 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75 74 61 74  Opcode: Permutat
11010 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a  ion * * * P4 *.*
11020 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 70 65 72  *.** Set the per
11030 6d 75 74 61 74 69 6f 6e 20 75 73 65 64 20 62 79  mutation used by
11040 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 20   the OP_Compare 
11050 6f 70 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20  operator in the 
11060 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75 63 74  next.** instruct
11070 69 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d 75 74  ion.  The permut
11080 61 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20  ation is stored 
11090 69 6e 20 74 68 65 20 50 34 20 6f 70 65 72 61 6e  in the P4 operan
110a0 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65 72  d..**.** The per
110b0 6d 75 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79  mutation is only
110c0 20 76 61 6c 69 64 20 75 6e 74 69 6c 20 74 68 65   valid until the
110d0 20 6e 65 78 74 20 4f 50 5f 43 6f 6d 70 61 72 65   next OP_Compare
110e0 20 74 68 61 74 20 68 61 73 0a 2a 2a 20 74 68 65   that has.** the
110f0 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20   OPFLAG_PERMUTE 
11100 62 69 74 20 73 65 74 20 69 6e 20 50 35 2e 20 54  bit set in P5. T
11110 79 70 69 63 61 6c 6c 79 20 74 68 65 20 4f 50 5f  ypically the OP_
11120 50 65 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f 75  Permutation shou
11130 6c 64 20 0a 2a 2a 20 6f 63 63 75 72 20 69 6d 6d  ld .** occur imm
11140 65 64 69 61 74 65 6c 79 20 70 72 69 6f 72 20 74  ediately prior t
11150 6f 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65  o the OP_Compare
11160 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 69 72 73  ..**.** The firs
11170 74 20 69 6e 74 65 67 65 72 20 69 6e 20 74 68 65  t integer in the
11180 20 50 34 20 69 6e 74 65 67 65 72 20 61 72 72 61   P4 integer arra
11190 79 20 69 73 20 74 68 65 20 6c 65 6e 67 74 68 20  y is the length 
111a0 6f 66 20 74 68 65 20 61 72 72 61 79 0a 2a 2a 20  of the array.** 
111b0 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 62 65 63  and does not bec
111c0 6f 6d 65 20 70 61 72 74 20 6f 66 20 74 68 65 20  ome part of the 
111d0 70 65 72 6d 75 74 61 74 69 6f 6e 2e 0a 2a 2f 0a  permutation..*/.
111e0 63 61 73 65 20 4f 50 5f 50 65 72 6d 75 74 61 74  case OP_Permutat
111f0 69 6f 6e 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  ion: {.  assert(
11200 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
11210 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a 20 20 61  _INTARRAY );.  a
11220 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 61  ssert( pOp->p4.a
11230 69 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  i );.  assert( p
11240 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50  Op[1].opcode==OP
11250 5f 43 6f 6d 70 61 72 65 20 29 3b 0a 20 20 61 73  _Compare );.  as
11260 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 35 20  sert( pOp[1].p5 
11270 26 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  & OPFLAG_PERMUTE
11280 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   );.  break;.}..
11290 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d 70 61  /* Opcode: Compa
112a0 72 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  re P1 P2 P3 P4 P
112b0 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  5.** Synopsis: r
112c0 5b 50 31 40 50 33 5d 20 3c 2d 3e 20 72 5b 50 32  [P1@P3] <-> r[P2
112d0 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61  @P3].**.** Compa
112e0 72 65 20 74 77 6f 20 76 65 63 74 6f 72 73 20 6f  re two vectors o
112f0 66 20 72 65 67 69 73 74 65 72 73 20 69 6e 20 72  f registers in r
11300 65 67 28 50 31 29 2e 2e 72 65 67 28 50 31 2b 50  eg(P1)..reg(P1+P
11310 33 2d 31 29 20 28 63 61 6c 6c 20 74 68 69 73 0a  3-1) (call this.
11320 2a 2a 20 76 65 63 74 6f 72 20 22 41 22 29 20 61  ** vector "A") a
11330 6e 64 20 69 6e 20 72 65 67 28 50 32 29 2e 2e 72  nd in reg(P2)..r
11340 65 67 28 50 32 2b 50 33 2d 31 29 20 28 22 42 22  eg(P2+P3-1) ("B"
11350 29 2e 20 20 53 61 76 65 20 74 68 65 20 72 65 73  ).  Save the res
11360 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f  ult of.** the co
11370 6d 70 61 72 69 73 6f 6e 20 66 6f 72 20 75 73 65  mparison for use
11380 20 62 79 20 74 68 65 20 6e 65 78 74 20 4f 50 5f   by the next OP_
11390 4a 75 6d 70 20 69 6e 73 74 72 75 63 74 2e 0a 2a  Jump instruct..*
113a0 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74  *.** If P5 has t
113b0 68 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54  he OPFLAG_PERMUT
113c0 45 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20  E bit set, then 
113d0 74 68 65 20 6f 72 64 65 72 20 6f 66 20 63 6f 6d  the order of com
113e0 70 61 72 69 73 6f 6e 20 69 73 0a 2a 2a 20 64 65  parison is.** de
113f0 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20  termined by the 
11400 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 50  most recent OP_P
11410 65 72 6d 75 74 61 74 69 6f 6e 20 6f 70 65 72 61  ermutation opera
11420 74 6f 72 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20  tor.  If the.** 
11430 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62  OPFLAG_PERMUTE b
11440 69 74 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65  it is clear, the
11450 6e 20 72 65 67 69 73 74 65 72 20 61 72 65 20 63  n register are c
11460 6f 6d 70 61 72 65 64 20 69 6e 20 73 65 71 75 65  ompared in seque
11470 6e 74 69 61 6c 0a 2a 2a 20 6f 72 64 65 72 2e 0a  ntial.** order..
11480 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 4b 65  **.** P4 is a Ke
11490 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20  yInfo structure 
114a0 74 68 61 74 20 64 65 66 69 6e 65 73 20 63 6f 6c  that defines col
114b0 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73  lating sequences
114c0 20 61 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f 72 64   and sort.** ord
114d0 65 72 73 20 66 6f 72 20 74 68 65 20 63 6f 6d 70  ers for the comp
114e0 61 72 69 73 6f 6e 2e 20 20 54 68 65 20 70 65 72  arison.  The per
114f0 6d 75 74 61 74 69 6f 6e 20 61 70 70 6c 69 65 73  mutation applies
11500 20 74 6f 20 72 65 67 69 73 74 65 72 73 0a 2a 2a   to registers.**
11510 20 6f 6e 6c 79 2e 20 20 54 68 65 20 4b 65 79 49   only.  The KeyI
11520 6e 66 6f 20 65 6c 65 6d 65 6e 74 73 20 61 72 65  nfo elements are
11530 20 75 73 65 64 20 73 65 71 75 65 6e 74 69 61 6c   used sequential
11540 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ly..**.** The co
11550 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 20 73 6f  mparison is a so
11560 72 74 20 63 6f 6d 70 61 72 69 73 6f 6e 2c 20 73  rt comparison, s
11570 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70 61 72 65 20  o NULLs compare 
11580 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20  equal,.** NULLs 
11590 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 6e 75  are less than nu
115a0 6d 62 65 72 73 2c 20 6e 75 6d 62 65 72 73 20 61  mbers, numbers a
115b0 72 65 20 6c 65 73 73 20 74 68 61 6e 20 73 74 72  re less than str
115c0 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20 73 74 72  ings,.** and str
115d0 69 6e 67 73 20 61 72 65 20 6c 65 73 73 20 74 68  ings are less th
115e0 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73  an blobs..*/.cas
115f0 65 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a  e OP_Compare: {.
11600 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69    int n;.  int i
11610 3b 0a 20 20 69 6e 74 20 70 31 3b 0a 20 20 69 6e  ;.  int p1;.  in
11620 74 20 70 32 3b 0a 20 20 63 6f 6e 73 74 20 4b 65  t p2;.  const Ke
11630 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b  yInfo *pKeyInfo;
11640 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 43 6f  .  int idx;.  Co
11650 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20 20 20  llSeq *pColl;   
11660 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65   /* Collating se
11670 71 75 65 6e 63 65 20 74 6f 20 75 73 65 20 6f 6e  quence to use on
11680 20 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a 20 20   this term */.  
11690 69 6e 74 20 62 52 65 76 3b 20 20 20 20 20 20 20  int bRev;       
116a0 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 44     /* True for D
116b0 45 53 43 45 4e 44 49 4e 47 20 73 6f 72 74 20 6f  ESCENDING sort o
116c0 72 64 65 72 20 2a 2f 0a 20 20 69 6e 74 20 2a 61  rder */.  int *a
116d0 50 65 72 6d 75 74 65 3b 20 20 20 20 20 2f 2a 20  Permute;     /* 
116e0 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20  The permutation 
116f0 2a 2f 0a 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e  */..  if( (pOp->
11700 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 45 52 4d  p5 & OPFLAG_PERM
11710 55 54 45 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61  UTE)==0 ){.    a
11720 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 7d  Permute = 0;.  }
11730 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
11740 28 20 70 4f 70 3e 61 4f 70 20 29 3b 0a 20 20 20  ( pOp>aOp );.   
11750 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d   assert( pOp[-1]
11760 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 50 65 72 6d  .opcode==OP_Perm
11770 75 74 61 74 69 6f 6e 20 29 3b 0a 20 20 20 20 61  utation );.    a
11780 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70  ssert( pOp[-1].p
11790 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52  4type==P4_INTARR
117a0 41 59 20 29 3b 0a 20 20 20 20 61 50 65 72 6d 75  AY );.    aPermu
117b0 74 65 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e  te = pOp[-1].p4.
117c0 61 69 20 2b 20 31 3b 0a 20 20 20 20 61 73 73 65  ai + 1;.    asse
117d0 72 74 28 20 61 50 65 72 6d 75 74 65 21 3d 30 20  rt( aPermute!=0 
117e0 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d 20 70 4f 70  );.  }.  n = pOp
117f0 2d 3e 70 33 3b 0a 20 20 70 4b 65 79 49 6e 66 6f  ->p3;.  pKeyInfo
11800 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49   = pOp->p4.pKeyI
11810 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  nfo;.  assert( n
11820 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
11830 70 4b 65 79 49 6e 66 6f 21 3d 30 20 29 3b 0a 20  pKeyInfo!=0 );. 
11840 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20   p1 = pOp->p1;. 
11850 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 23   p2 = pOp->p2;.#
11860 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
11870 55 47 0a 20 20 69 66 28 20 61 50 65 72 6d 75 74  UG.  if( aPermut
11880 65 20 29 7b 0a 20 20 20 20 69 6e 74 20 6b 2c 20  e ){.    int k, 
11890 6d 78 20 3d 20 30 3b 0a 20 20 20 20 66 6f 72 28  mx = 0;.    for(
118a0 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20 69  k=0; k<n; k++) i
118b0 66 28 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3e 6d  f( aPermute[k]>m
118c0 78 20 29 20 6d 78 20 3d 20 61 50 65 72 6d 75 74  x ) mx = aPermut
118d0 65 5b 6b 5d 3b 0a 20 20 20 20 61 73 73 65 72 74  e[k];.    assert
118e0 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6d 78 3c  ( p1>0 && p1+mx<
118f0 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
11900 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20  >nCursor)+1 );. 
11910 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20     assert( p2>0 
11920 26 26 20 70 32 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d  && p2+mx<=(p->nM
11930 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
11940 72 29 2b 31 20 29 3b 0a 20 20 7d 65 6c 73 65 7b  r)+1 );.  }else{
11950 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e  .    assert( p1>
11960 30 20 26 26 20 70 31 2b 6e 3c 3d 28 70 2d 3e 6e  0 && p1+n<=(p->n
11970 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
11980 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20 61 73 73  or)+1 );.    ass
11990 65 72 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b  ert( p2>0 && p2+
119a0 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  n<=(p->nMem+1 - 
119b0 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
119c0 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  .  }.#endif /* S
119d0 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20  QLITE_DEBUG */. 
119e0 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69   for(i=0; i<n; i
119f0 2b 2b 29 7b 0a 20 20 20 20 69 64 78 20 3d 20 61  ++){.    idx = a
11a00 50 65 72 6d 75 74 65 20 3f 20 61 50 65 72 6d 75  Permute ? aPermu
11a10 74 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20 61  te[i] : i;.    a
11a20 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
11a30 64 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29  d(&aMem[p1+idx])
11a40 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
11a50 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
11a60 5b 70 32 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20  [p2+idx]) );.   
11a70 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
11a80 70 31 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70 31  p1+idx, &aMem[p1
11a90 2b 69 64 78 5d 29 3b 0a 20 20 20 20 52 45 47 49  +idx]);.    REGI
11aa0 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b 69 64  STER_TRACE(p2+id
11ab0 78 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d  x, &aMem[p2+idx]
11ac0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69  );.    assert( i
11ad0 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e 4b 65 79 46  <pKeyInfo->nKeyF
11ae0 69 65 6c 64 20 29 3b 0a 20 20 20 20 70 43 6f 6c  ield );.    pCol
11af0 6c 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 43  l = pKeyInfo->aC
11b00 6f 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52 65 76  oll[i];.    bRev
11b10 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f   = pKeyInfo->aSo
11b20 72 74 4f 72 64 65 72 5b 69 5d 3b 0a 20 20 20 20  rtOrder[i];.    
11b30 69 43 6f 6d 70 61 72 65 20 3d 20 73 71 6c 69 74  iCompare = sqlit
11b40 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 26 61 4d  e3MemCompare(&aM
11b50 65 6d 5b 70 31 2b 69 64 78 5d 2c 20 26 61 4d 65  em[p1+idx], &aMe
11b60 6d 5b 70 32 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c  m[p2+idx], pColl
11b70 29 3b 0a 20 20 20 20 69 66 28 20 69 43 6f 6d 70  );.    if( iComp
11b80 61 72 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28  are ){.      if(
11b90 20 62 52 65 76 20 29 20 69 43 6f 6d 70 61 72 65   bRev ) iCompare
11ba0 20 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20 20   = -iCompare;.  
11bb0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
11bc0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
11bd0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d 70  ./* Opcode: Jump
11be0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
11bf0 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20  .** Jump to the 
11c00 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20 61  instruction at a
11c10 64 64 72 65 73 73 20 50 31 2c 20 50 32 2c 20 6f  ddress P1, P2, o
11c20 72 20 50 33 20 64 65 70 65 6e 64 69 6e 67 20 6f  r P3 depending o
11c30 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e 20  n whether.** in 
11c40 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  the most recent 
11c50 4f 50 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74 72  OP_Compare instr
11c60 75 63 74 69 6f 6e 20 74 68 65 20 50 31 20 76 65  uction the P1 ve
11c70 63 74 6f 72 20 77 61 73 20 6c 65 73 73 20 74 68  ctor was less th
11c80 61 6e 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c 20  an.** equal to, 
11c90 6f 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  or greater than 
11ca0 74 68 65 20 50 32 20 76 65 63 74 6f 72 2c 20 72  the P2 vector, r
11cb0 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a  espectively..*/.
11cc0 63 61 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20  case OP_Jump: { 
11cd0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
11ce0 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 69 43 6f  ump */.  if( iCo
11cf0 6d 70 61 72 65 3c 30 20 29 7b 0a 20 20 20 20 56  mpare<0 ){.    V
11d00 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30  dbeBranchTaken(0
11d10 2c 34 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b  ,4); pOp = &aOp[
11d20 70 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20 20  pOp->p1 - 1];.  
11d30 7d 65 6c 73 65 20 69 66 28 20 69 43 6f 6d 70 61  }else if( iCompa
11d40 72 65 3d 3d 30 20 29 7b 0a 20 20 20 20 56 64 62  re==0 ){.    Vdb
11d50 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 34  eBranchTaken(1,4
11d60 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f  ); pOp = &aOp[pO
11d70 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 7d 65  p->p2 - 1];.  }e
11d80 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61  lse{.    VdbeBra
11d90 6e 63 68 54 61 6b 65 6e 28 32 2c 34 29 3b 20 70  nchTaken(2,4); p
11da0 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70  Op = &aOp[pOp->p
11db0 33 20 2d 20 31 5d 3b 0a 20 20 7d 0a 20 20 62 72  3 - 1];.  }.  br
11dc0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
11dd0 65 3a 20 41 6e 64 20 50 31 20 50 32 20 50 33 20  e: And P1 P2 P3 
11de0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
11df0 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 26 26   r[P3]=(r[P1] &&
11e00 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61   r[P2]).**.** Ta
11e10 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 41  ke the logical A
11e20 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73  ND of the values
11e30 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31   in registers P1
11e40 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 77   and P2 and.** w
11e50 72 69 74 65 20 74 68 65 20 72 65 73 75 6c 74 20  rite the result 
11e60 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33  into register P3
11e70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65  ..**.** If eithe
11e80 72 20 50 31 20 6f 72 20 50 32 20 69 73 20 30 20  r P1 or P2 is 0 
11e90 28 66 61 6c 73 65 29 20 74 68 65 6e 20 74 68 65  (false) then the
11ea0 20 72 65 73 75 6c 74 20 69 73 20 30 20 65 76 65   result is 0 eve
11eb0 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 74 68 65  n if.** the othe
11ec0 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e  r input is NULL.
11ed0 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 74 72 75    A NULL and tru
11ee0 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 20 67  e or two NULLs g
11ef0 69 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75  ive.** a NULL ou
11f00 74 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tput..*/./* Opco
11f10 64 65 3a 20 4f 72 20 50 31 20 50 32 20 50 33 20  de: Or P1 P2 P3 
11f20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
11f30 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 7c 7c   r[P3]=(r[P1] ||
11f40 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61   r[P2]).**.** Ta
11f50 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 4f  ke the logical O
11f60 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  R of the values 
11f70 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
11f80 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f  nd P2 and.** sto
11f90 72 65 20 74 68 65 20 61 6e 73 77 65 72 20 69 6e  re the answer in
11fa0 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
11fb0 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50 31  .** If either P1
11fc0 20 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a 65 72   or P2 is nonzer
11fd0 6f 20 28 74 72 75 65 29 20 74 68 65 6e 20 74 68  o (true) then th
11fe0 65 20 72 65 73 75 6c 74 20 69 73 20 31 20 28 74  e result is 1 (t
11ff0 72 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69 66 20  rue).** even if 
12000 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20  the other input 
12010 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c  is NULL.  A NULL
12020 20 61 6e 64 20 66 61 6c 73 65 20 6f 72 20 74 77   and false or tw
12030 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76 65 20  o NULLs.** give 
12040 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a  a NULL output..*
12050 2f 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a 20 20  /.case OP_And:  
12060 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
12070 61 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c 20 69  ame as TK_AND, i
12080 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
12090 0a 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b 20 20  .case OP_Or: {  
120a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
120b0 6d 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69 6e 31  me as TK_OR, in1
120c0 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in2, out3 */. 
120d0 20 69 6e 74 20 76 31 3b 20 20 20 20 2f 2a 20 4c   int v1;    /* L
120e0 65 66 74 20 6f 70 65 72 61 6e 64 3a 20 20 30 3d  eft operand:  0=
120f0 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c  =FALSE, 1==TRUE,
12100 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e   2==UNKNOWN or N
12110 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 76 32 3b  ULL */.  int v2;
12120 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 70 65      /* Right ope
12130 72 61 6e 64 3a 20 30 3d 3d 46 41 4c 53 45 2c 20  rand: 0==FALSE, 
12140 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e  1==TRUE, 2==UNKN
12150 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a  OWN or NULL */..
12160 20 20 76 31 20 3d 20 73 71 6c 69 74 65 33 56 64    v1 = sqlite3Vd
12170 62 65 42 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 26  beBooleanValue(&
12180 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 32  aMem[pOp->p1], 2
12190 29 3b 0a 20 20 76 32 20 3d 20 73 71 6c 69 74 65  );.  v2 = sqlite
121a0 33 56 64 62 65 42 6f 6f 6c 65 61 6e 56 61 6c 75  3VdbeBooleanValu
121b0 65 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  e(&aMem[pOp->p2]
121c0 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  , 2);.  if( pOp-
121d0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20  >opcode==OP_And 
121e0 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  ){.    static co
121f0 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
12200 72 20 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20  r and_logic[] = 
12210 7b 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c  { 0, 0, 0, 0, 1,
12220 20 32 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20   2, 0, 2, 2 };. 
12230 20 20 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69     v1 = and_logi
12240 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65  c[v1*3+v2];.  }e
12250 6c 73 65 7b 0a 20 20 20 20 73 74 61 74 69 63 20  lse{.    static 
12260 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
12270 68 61 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d  har or_logic[] =
12280 20 7b 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31   { 0, 1, 2, 1, 1
12290 2c 20 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a  , 1, 2, 1, 2 };.
122a0 20 20 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69      v1 = or_logi
122b0 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a  c[v1*3+v2];.  }.
122c0 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
122d0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 76  Op->p3];.  if( v
122e0 31 3d 3d 32 20 29 7b 0a 20 20 20 20 4d 65 6d 53  1==2 ){.    MemS
122f0 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
12300 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65   MEM_Null);.  }e
12310 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  lse{.    pOut->u
12320 2e 69 20 3d 20 76 31 3b 0a 20 20 20 20 4d 65 6d  .i = v1;.    Mem
12330 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
12340 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a  , MEM_Int);.  }.
12350 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
12360 70 63 6f 64 65 3a 20 49 73 54 72 75 65 20 50 31  pcode: IsTrue P1
12370 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
12380 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 20 3d  ynopsis: r[P2] =
12390 20 63 6f 61 6c 65 73 63 65 28 72 5b 50 31 5d 3d   coalesce(r[P1]=
123a0 3d 54 52 55 45 2c 50 33 29 20 5e 20 50 34 0a 2a  =TRUE,P3) ^ P4.*
123b0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
123c0 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20   implements the 
123d0 49 53 20 54 52 55 45 2c 20 49 53 20 46 41 4c 53  IS TRUE, IS FALS
123e0 45 2c 20 49 53 20 4e 4f 54 20 54 52 55 45 2c 20  E, IS NOT TRUE, 
123f0 61 6e 64 0a 2a 2a 20 49 53 20 4e 4f 54 20 46 41  and.** IS NOT FA
12400 4c 53 45 20 6f 70 65 72 61 74 6f 72 73 2e 0a 2a  LSE operators..*
12410 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
12420 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
12430 73 74 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f  ster P1 as a boo
12440 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f  lean value.  Sto
12450 72 65 20 74 68 61 74 0a 2a 2a 20 62 6f 6f 6c 65  re that.** boole
12460 61 6e 20 28 61 20 30 20 6f 72 20 31 29 20 69 6e  an (a 0 or 1) in
12470 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 4f   register P2.  O
12480 72 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  r if the value i
12490 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
124a0 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   .** NULL, then 
124b0 74 68 65 20 50 33 20 69 73 20 73 74 6f 72 65 64  the P3 is stored
124c0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
124d0 20 20 49 6e 76 65 72 74 20 74 68 65 20 61 6e 73    Invert the ans
124e0 77 65 72 20 69 66 20 50 34 0a 2a 2a 20 69 73 20  wer if P4.** is 
124f0 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c 6f 67  1..**.** The log
12500 69 63 20 69 73 20 73 75 6d 6d 61 72 69 7a 65 64  ic is summarized
12510 20 6c 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a   like this:.**.*
12520 2a 20 3c 75 6c 3e 20 0a 2a 2a 20 3c 6c 69 3e 20  * <ul> .** <li> 
12530 49 66 20 50 33 3d 3d 30 20 61 6e 64 20 50 34 3d  If P3==0 and P4=
12540 3d 30 20 20 74 68 65 6e 20 20 72 5b 50 32 5d 20  =0  then  r[P2] 
12550 3a 3d 20 72 5b 50 31 5d 20 49 53 20 54 52 55 45  := r[P1] IS TRUE
12560 0a 2a 2a 20 3c 6c 69 3e 20 49 66 20 50 33 3d 3d  .** <li> If P3==
12570 31 20 61 6e 64 20 50 34 3d 3d 31 20 20 74 68 65  1 and P4==1  the
12580 6e 20 20 72 5b 50 32 5d 20 3a 3d 20 72 5b 50 31  n  r[P2] := r[P1
12590 5d 20 49 53 20 46 41 4c 53 45 0a 2a 2a 20 3c 6c  ] IS FALSE.** <l
125a0 69 3e 20 49 66 20 50 33 3d 3d 30 20 61 6e 64 20  i> If P3==0 and 
125b0 50 34 3d 3d 31 20 20 74 68 65 6e 20 20 72 5b 50  P4==1  then  r[P
125c0 32 5d 20 3a 3d 20 72 5b 50 31 5d 20 49 53 20 4e  2] := r[P1] IS N
125d0 4f 54 20 54 52 55 45 0a 2a 2a 20 3c 6c 69 3e 20  OT TRUE.** <li> 
125e0 49 66 20 50 33 3d 3d 31 20 61 6e 64 20 50 34 3d  If P3==1 and P4=
125f0 3d 30 20 20 74 68 65 6e 20 20 72 5b 50 32 5d 20  =0  then  r[P2] 
12600 3a 3d 20 72 5b 50 31 5d 20 49 53 20 4e 4f 54 20  := r[P1] IS NOT 
12610 46 41 4c 53 45 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a  FALSE.** </ul>.*
12620 2f 0a 63 61 73 65 20 4f 50 5f 49 73 54 72 75 65  /.case OP_IsTrue
12630 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
12640 20 20 2f 2a 20 69 6e 31 2c 20 6f 75 74 32 20 2a    /* in1, out2 *
12650 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
12660 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
12670 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  2 );.  assert( p
12680 4f 70 2d 3e 70 34 2e 69 3d 3d 30 20 7c 7c 20 70  Op->p4.i==0 || p
12690 4f 70 2d 3e 70 34 2e 69 3d 3d 31 20 29 3b 0a 20  Op->p4.i==1 );. 
126a0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
126b0 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 33 3d 3d  ==0 || pOp->p3==
126c0 31 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  1 );.  sqlite3Vd
126d0 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61  beMemSetInt64(&a
126e0 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 2c 0a 20 20  Mem[pOp->p2],.  
126f0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 42      sqlite3VdbeB
12700 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 26 61 4d 65  ooleanValue(&aMe
12710 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 70 4f 70 2d  m[pOp->p1], pOp-
12720 3e 70 33 29 20 5e 20 70 4f 70 2d 3e 70 34 2e 69  >p3) ^ pOp->p4.i
12730 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
12740 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 20 50 31  * Opcode: Not P1
12750 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
12760 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 20 21 72  opsis: r[P2]= !r
12770 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72  [P1].**.** Inter
12780 70 72 65 74 20 74 68 65 20 76 61 6c 75 65 20 69  pret the value i
12790 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 73  n register P1 as
127a0 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65   a boolean value
127b0 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20  .  Store the.** 
127c0 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d 65  boolean compleme
127d0 6e 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  nt in register P
127e0 32 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  2.  If the value
127f0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
12800 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65  is .** NULL, the
12810 6e 20 61 20 4e 55 4c 4c 20 69 73 20 73 74 6f 72  n a NULL is stor
12820 65 64 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73  ed in P2..*/.cas
12830 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20 20 20  e OP_Not: {     
12840 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
12850 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e  me as TK_NOT, in
12860 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e  1, out2 */.  pIn
12870 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
12880 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  1];.  pOut = &aM
12890 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69  em[pOp->p2];.  i
128a0 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
128b0 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
128c0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
128d0 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75  eMemSetInt64(pOu
128e0 74 2c 20 21 73 71 6c 69 74 65 33 56 64 62 65 42  t, !sqlite3VdbeB
128f0 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 70 49 6e 31  ooleanValue(pIn1
12900 2c 30 29 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ,0));.  }else{. 
12910 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
12920 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
12930 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
12940 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4e 6f  /* Opcode: BitNo
12950 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
12960 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
12970 3d 20 7e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49  = ~r[P1].**.** I
12980 6e 74 65 72 70 72 65 74 20 74 68 65 20 63 6f 6e  nterpret the con
12990 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
129a0 20 50 31 20 61 73 20 61 6e 20 69 6e 74 65 67 65   P1 as an intege
129b0 72 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a  r.  Store the.**
129c0 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74   ones-complement
129d0 20 6f 66 20 74 68 65 20 50 31 20 76 61 6c 75 65   of the P1 value
129e0 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
129f0 32 2e 20 20 49 66 20 50 31 20 68 6f 6c 64 73 0a  2.  If P1 holds.
12a00 2a 2a 20 61 20 4e 55 4c 4c 20 74 68 65 6e 20 73  ** a NULL then s
12a10 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 50  tore a NULL in P
12a20 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69  2..*/.case OP_Bi
12a30 74 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20  tNot: {         
12a40 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
12a50 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e 31 2c 20 6f  K_BITNOT, in1, o
12a60 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  ut2 */.  pIn1 = 
12a70 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
12a80 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
12a90 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74  Op->p2];.  sqlit
12aa0 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
12ab0 28 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 28 70  (pOut);.  if( (p
12ac0 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
12ad0 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Null)==0 ){.   
12ae0 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
12af0 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74  EM_Int;.    pOut
12b00 2d 3e 75 2e 69 20 3d 20 7e 73 71 6c 69 74 65 33  ->u.i = ~sqlite3
12b10 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
12b20 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  1);.  }.  break;
12b30 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
12b40 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  nce P1 P2 * * *.
12b50 2a 2a 0a 2a 2a 20 46 61 6c 6c 20 74 68 72 6f 75  **.** Fall throu
12b60 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
12b70 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 65 20 66  nstruction the f
12b80 69 72 73 74 20 74 69 6d 65 20 74 68 69 73 20 6f  irst time this o
12b90 70 63 6f 64 65 20 69 73 0a 2a 2a 20 65 6e 63 6f  pcode is.** enco
12ba0 75 6e 74 65 72 65 64 20 6f 6e 20 65 61 63 68 20  untered on each 
12bb0 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68  invocation of th
12bc0 65 20 62 79 74 65 2d 63 6f 64 65 20 70 72 6f 67  e byte-code prog
12bd0 72 61 6d 2e 20 20 4a 75 6d 70 20 74 6f 20 50 32  ram.  Jump to P2
12be0 0a 2a 2a 20 6f 6e 20 74 68 65 20 73 65 63 6f 6e  .** on the secon
12bf0 64 20 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71  d and all subseq
12c00 75 65 6e 74 20 65 6e 63 6f 75 6e 74 65 72 73 20  uent encounters 
12c10 64 75 72 69 6e 67 20 74 68 65 20 73 61 6d 65 20  during the same 
12c20 69 6e 76 6f 63 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  invocation..**.*
12c30 2a 20 54 6f 70 2d 6c 65 76 65 6c 20 70 72 6f 67  * Top-level prog
12c40 72 61 6d 73 20 64 65 74 65 72 6d 69 6e 65 20 66  rams determine f
12c50 69 72 73 74 20 69 6e 76 6f 63 61 74 69 6f 6e 20  irst invocation 
12c60 62 79 20 63 6f 6d 70 61 72 69 6e 67 20 74 68 65  by comparing the
12c70 20 50 31 0a 2a 2a 20 6f 70 65 72 61 6e 64 20 61   P1.** operand a
12c80 67 61 69 6e 73 74 20 74 68 65 20 50 31 20 6f 70  gainst the P1 op
12c90 65 72 61 6e 64 20 6f 6e 20 74 68 65 20 4f 50 5f  erand on the OP_
12ca0 49 6e 69 74 20 6f 70 63 6f 64 65 20 61 74 20 74  Init opcode at t
12cb0 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 2a 2a 20  he beginning.** 
12cc0 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20  of the program. 
12cd0 20 49 66 20 74 68 65 20 50 31 20 76 61 6c 75 65   If the P1 value
12ce0 73 20 64 69 66 66 65 72 2c 20 74 68 65 6e 20 66  s differ, then f
12cf0 61 6c 6c 20 74 68 72 6f 75 67 68 20 61 6e 64 20  all through and 
12d00 6d 61 6b 65 0a 2a 2a 20 74 68 65 20 50 31 20 6f  make.** the P1 o
12d10 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20 65 71  f this opcode eq
12d20 75 61 6c 20 74 6f 20 74 68 65 20 50 31 20 6f 66  ual to the P1 of
12d30 20 4f 50 5f 49 6e 69 74 2e 20 20 49 66 20 50 31   OP_Init.  If P1
12d40 20 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20 74   values are.** t
12d50 68 65 20 73 61 6d 65 20 74 68 65 6e 20 74 61 6b  he same then tak
12d60 65 20 74 68 65 20 6a 75 6d 70 2e 0a 2a 2a 0a 2a  e the jump..**.*
12d70 2a 20 46 6f 72 20 73 75 62 70 72 6f 67 72 61 6d  * For subprogram
12d80 73 2c 20 74 68 65 72 65 20 69 73 20 61 20 62 69  s, there is a bi
12d90 74 6d 61 73 6b 20 69 6e 20 74 68 65 20 56 64 62  tmask in the Vdb
12da0 65 46 72 61 6d 65 20 74 68 61 74 20 64 65 74 65  eFrame that dete
12db0 72 6d 69 6e 65 73 0a 2a 2a 20 77 68 65 74 68 65  rmines.** whethe
12dc0 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 6a 75 6d  r or not the jum
12dd0 70 20 73 68 6f 75 6c 64 20 62 65 20 74 61 6b 65  p should be take
12de0 6e 2e 20 20 54 68 65 20 62 69 74 6d 61 73 6b 20  n.  The bitmask 
12df0 69 73 20 6e 65 63 65 73 73 61 72 79 0a 2a 2a 20  is necessary.** 
12e00 62 65 63 61 75 73 65 20 74 68 65 20 73 65 6c 66  because the self
12e10 2d 61 6c 74 65 72 69 6e 67 20 63 6f 64 65 20 74  -altering code t
12e20 72 69 63 6b 20 64 6f 65 73 20 6e 6f 74 20 77 6f  rick does not wo
12e30 72 6b 20 66 6f 72 20 72 65 63 75 72 73 69 76 65  rk for recursive
12e40 0a 2a 2a 20 74 72 69 67 67 65 72 73 2e 0a 2a 2f  .** triggers..*/
12e50 0a 63 61 73 65 20 4f 50 5f 4f 6e 63 65 3a 20 7b  .case OP_Once: {
12e60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12e70 6a 75 6d 70 20 2a 2f 0a 20 20 75 33 32 20 69 41  jump */.  u32 iA
12e80 64 64 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  ddr;            
12e90 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f      /* Address o
12ea0 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  f this instructi
12eb0 6f 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  on */.  assert( 
12ec0 70 2d 3e 61 4f 70 5b 30 5d 2e 6f 70 63 6f 64 65  p->aOp[0].opcode
12ed0 3d 3d 4f 50 5f 49 6e 69 74 20 29 3b 0a 20 20 69  ==OP_Init );.  i
12ee0 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a  f( p->pFrame ){.
12ef0 20 20 20 20 69 41 64 64 72 20 3d 20 28 69 6e 74      iAddr = (int
12f00 29 28 70 4f 70 20 2d 20 70 2d 3e 61 4f 70 29 3b  )(pOp - p->aOp);
12f10 0a 20 20 20 20 69 66 28 20 28 70 2d 3e 70 46 72  .    if( (p->pFr
12f20 61 6d 65 2d 3e 61 4f 6e 63 65 5b 69 41 64 64 72  ame->aOnce[iAddr
12f30 2f 38 5d 20 26 20 28 31 3c 3c 28 69 41 64 64 72  /8] & (1<<(iAddr
12f40 20 26 20 37 29 29 29 21 3d 30 20 29 7b 0a 20 20   & 7)))!=0 ){.  
12f50 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
12f60 6b 65 6e 28 31 2c 20 32 29 3b 0a 20 20 20 20 20  ken(1, 2);.     
12f70 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
12f80 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e 70  ;.    }.    p->p
12f90 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 5b 69 41 64  Frame->aOnce[iAd
12fa0 64 72 2f 38 5d 20 7c 3d 20 31 3c 3c 28 69 41 64  dr/8] |= 1<<(iAd
12fb0 64 72 20 26 20 37 29 3b 0a 20 20 7d 65 6c 73 65  dr & 7);.  }else
12fc0 7b 0a 20 20 20 20 69 66 28 20 70 2d 3e 61 4f 70  {.    if( p->aOp
12fd0 5b 30 5d 2e 70 31 3d 3d 70 4f 70 2d 3e 70 31 20  [0].p1==pOp->p1 
12fe0 29 7b 0a 20 20 20 20 20 20 56 64 62 65 42 72 61  ){.      VdbeBra
12ff0 6e 63 68 54 61 6b 65 6e 28 31 2c 20 32 29 3b 0a  nchTaken(1, 2);.
13000 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f        goto jump_
13010 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20 7d  to_p2;.    }.  }
13020 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
13030 65 6e 28 30 2c 20 32 29 3b 0a 20 20 70 4f 70 2d  en(0, 2);.  pOp-
13040 3e 70 31 20 3d 20 70 2d 3e 61 4f 70 5b 30 5d 2e  >p1 = p->aOp[0].
13050 70 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  p1;.  break;.}..
13060 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 20 50 31  /* Opcode: If P1
13070 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
13080 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
13090 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
130a0 73 74 65 72 20 50 31 20 69 73 20 74 72 75 65 2e  ster P1 is true.
130b0 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69    The value.** i
130c0 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74 72 75  s considered tru
130d0 65 20 69 66 20 69 74 20 69 73 20 6e 75 6d 65 72  e if it is numer
130e0 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e  ic and non-zero.
130f0 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
13100 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20  * in P1 is NULL 
13110 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75  then take the ju
13120 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69  mp if and only i
13130 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P3 is non-zero
13140 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 3a  ..*/.case OP_If:
13150 20 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20    {             
13160 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
13170 2f 0a 20 20 69 6e 74 20 63 3b 0a 20 20 63 20 3d  /.  int c;.  c =
13180 20 73 71 6c 69 74 65 33 56 64 62 65 42 6f 6f 6c   sqlite3VdbeBool
13190 65 61 6e 56 61 6c 75 65 28 26 61 4d 65 6d 5b 70  eanValue(&aMem[p
131a0 4f 70 2d 3e 70 31 5d 2c 20 70 4f 70 2d 3e 70 33  Op->p1], pOp->p3
131b0 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  );.  VdbeBranchT
131c0 61 6b 65 6e 28 63 21 3d 30 2c 20 32 29 3b 0a 20  aken(c!=0, 2);. 
131d0 20 69 66 28 20 63 20 29 20 67 6f 74 6f 20 6a 75   if( c ) goto ju
131e0 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61  mp_to_p2;.  brea
131f0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
13200 20 49 66 4e 6f 74 20 50 31 20 50 32 20 50 33 20   IfNot P1 P2 P3 
13210 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74  * *.**.** Jump t
13220 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75  o P2 if the valu
13230 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
13240 20 69 73 20 46 61 6c 73 65 2e 20 20 54 68 65 20   is False.  The 
13250 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73  value.** is cons
13260 69 64 65 72 65 64 20 66 61 6c 73 65 20 69 66 20  idered false if 
13270 69 74 20 68 61 73 20 61 20 6e 75 6d 65 72 69 63  it has a numeric
13280 20 76 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e 20   value of zero. 
13290 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a   If the value.**
132a0 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74   in P1 is NULL t
132b0 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  hen take the jum
132c0 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66  p if and only if
132d0 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e   P3 is non-zero.
132e0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f  .*/.case OP_IfNo
132f0 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
13300 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
13310 20 20 69 6e 74 20 63 3b 0a 20 20 63 20 3d 20 21    int c;.  c = !
13320 73 71 6c 69 74 65 33 56 64 62 65 42 6f 6f 6c 65  sqlite3VdbeBoole
13330 61 6e 56 61 6c 75 65 28 26 61 4d 65 6d 5b 70 4f  anValue(&aMem[pO
13340 70 2d 3e 70 31 5d 2c 20 21 70 4f 70 2d 3e 70 33  p->p1], !pOp->p3
13350 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  );.  VdbeBranchT
13360 61 6b 65 6e 28 63 21 3d 30 2c 20 32 29 3b 0a 20  aken(c!=0, 2);. 
13370 20 69 66 28 20 63 20 29 20 67 6f 74 6f 20 6a 75   if( c ) goto ju
13380 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61  mp_to_p2;.  brea
13390 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
133a0 20 49 73 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20   IsNull P1 P2 * 
133b0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
133c0 20 69 66 20 72 5b 50 31 5d 3d 3d 4e 55 4c 4c 20   if r[P1]==NULL 
133d0 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75  goto P2.**.** Ju
133e0 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  mp to P2 if the 
133f0 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
13400 72 20 50 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  r P1 is NULL..*/
13410 0a 63 61 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a  .case OP_IsNull:
13420 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
13430 20 73 61 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55   same as TK_ISNU
13440 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f  LL, jump, in1 */
13450 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
13460 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56 64 62 65  pOp->p1];.  Vdbe
13470 42 72 61 6e 63 68 54 61 6b 65 6e 28 20 28 70 49  BranchTaken( (pI
13480 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
13490 4e 75 6c 6c 29 21 3d 30 2c 20 32 29 3b 0a 20 20  Null)!=0, 2);.  
134a0 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
134b0 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20   & MEM_Null)!=0 
134c0 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  ){.    goto jump
134d0 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
134e0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
134f0 65 3a 20 4e 6f 74 4e 75 6c 6c 20 50 31 20 50 32  e: NotNull P1 P2
13500 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
13510 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d 4e 55  is: if r[P1]!=NU
13520 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  LL goto P2.**.**
13530 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
13540 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
13550 73 74 65 72 20 50 31 20 69 73 20 6e 6f 74 20 4e  ster P1 is not N
13560 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f  ULL.  .*/.case O
13570 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20 20  P_NotNull: {    
13580 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
13590 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a  as TK_NOTNULL, j
135a0 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
135b0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
135c0 70 31 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  p1];.  VdbeBranc
135d0 68 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66  hTaken( (pIn1->f
135e0 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
135f0 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28  ==0, 2);.  if( (
13600 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
13610 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20  M_Null)==0 ){.  
13620 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
13630 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
13640 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  }../* Opcode: If
13650 4e 75 6c 6c 52 6f 77 20 50 31 20 50 32 20 50 33  NullRow P1 P2 P3
13660 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
13670 3a 20 69 66 20 50 31 2e 6e 75 6c 6c 52 6f 77 20  : if P1.nullRow 
13680 74 68 65 6e 20 72 5b 50 33 5d 3d 4e 55 4c 4c 2c  then r[P3]=NULL,
13690 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 43   goto P2.**.** C
136a0 68 65 63 6b 20 74 68 65 20 63 75 72 73 6f 72 20  heck the cursor 
136b0 50 31 20 74 6f 20 73 65 65 20 69 66 20 69 74 20  P1 to see if it 
136c0 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
136d0 6e 74 69 6e 67 20 61 74 20 61 20 4e 55 4c 4c 20  nting at a NULL 
136e0 72 6f 77 2e 0a 2a 2a 20 49 66 20 69 74 20 69 73  row..** If it is
136f0 2c 20 74 68 65 6e 20 73 65 74 20 72 65 67 69 73  , then set regis
13700 74 65 72 20 50 33 20 74 6f 20 4e 55 4c 4c 20 61  ter P3 to NULL a
13710 6e 64 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  nd jump immediat
13720 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66  ely to P2..** If
13730 20 50 31 20 69 73 20 6e 6f 74 20 6f 6e 20 61 20   P1 is not on a 
13740 4e 55 4c 4c 20 72 6f 77 2c 20 74 68 65 6e 20 66  NULL row, then f
13750 61 6c 6c 20 74 68 72 6f 75 67 68 20 77 69 74 68  all through with
13760 6f 75 74 20 6d 61 6b 69 6e 67 20 61 6e 79 0a 2a  out making any.*
13770 2a 20 63 68 61 6e 67 65 73 2e 0a 2a 2f 0a 63 61  * changes..*/.ca
13780 73 65 20 4f 50 5f 49 66 4e 75 6c 6c 52 6f 77 3a  se OP_IfNullRow:
13790 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75   {         /* ju
137a0 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  mp */.  assert( 
137b0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
137c0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
137d0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
137e0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 21  >apCsr[pOp->p1]!
137f0 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61  =0 );.  if( p->a
13800 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 6e  pCsr[pOp->p1]->n
13810 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73 71  ullRow ){.    sq
13820 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
13830 75 6c 6c 28 61 4d 65 6d 20 2b 20 70 4f 70 2d 3e  ull(aMem + pOp->
13840 70 33 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75  p3);.    goto ju
13850 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
13860 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 64 65 66  break;.}..#ifdef
13870 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4f   SQLITE_ENABLE_O
13880 46 46 53 45 54 5f 53 51 4c 5f 46 55 4e 43 0a 2f  FFSET_SQL_FUNC./
13890 2a 20 4f 70 63 6f 64 65 3a 20 4f 66 66 73 65 74  * Opcode: Offset
138a0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
138b0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
138c0 20 3d 20 73 71 6c 69 74 65 5f 6f 66 66 73 65 74   = sqlite_offset
138d0 28 50 31 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65  (P1).**.** Store
138e0 20 69 6e 20 72 65 67 69 73 74 65 72 20 72 5b 50   in register r[P
138f0 33 5d 20 74 68 65 20 62 79 74 65 20 6f 66 66 73  3] the byte offs
13900 65 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61  et into the data
13910 62 61 73 65 20 66 69 6c 65 20 74 68 61 74 20 69  base file that i
13920 73 20 74 68 65 0a 2a 2a 20 73 74 61 72 74 20 6f  s the.** start o
13930 66 20 74 68 65 20 70 61 79 6c 6f 61 64 20 66 6f  f the payload fo
13940 72 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 20  r the record at 
13950 77 68 69 63 68 20 74 68 61 74 20 63 75 72 73 6f  which that curso
13960 72 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c  r P1 is currentl
13970 79 0a 2a 2a 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a  y.** pointing..*
13980 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20 63  *.** P2 is the c
13990 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72  olumn number for
139a0 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f   the argument to
139b0 20 74 68 65 20 73 71 6c 69 74 65 5f 6f 66 66 73   the sqlite_offs
139c0 65 74 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a  et() function..*
139d0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f  * This opcode do
139e0 65 73 20 6e 6f 74 20 75 73 65 20 50 32 20 69 74  es not use P2 it
139f0 73 65 6c 66 2c 20 62 75 74 20 74 68 65 20 50 32  self, but the P2
13a00 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20 62   value is used b
13a10 79 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20 67 65  y the.** code ge
13a20 6e 65 72 61 74 6f 72 2e 20 20 54 68 65 20 50 31  nerator.  The P1
13a30 2c 20 50 32 2c 20 61 6e 64 20 50 33 20 6f 70 65  , P2, and P3 ope
13a40 72 61 6e 64 73 20 74 6f 20 74 68 69 73 20 6f 70  rands to this op
13a50 63 6f 64 65 20 61 72 65 20 74 68 65 0a 2a 2a 20  code are the.** 
13a60 73 61 6d 65 20 61 73 20 66 6f 72 20 4f 50 5f 43  same as for OP_C
13a70 6f 6c 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  olumn..**.** Thi
13a80 73 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79  s opcode is only
13a90 20 61 76 61 69 6c 61 62 6c 65 20 69 66 20 53 51   available if SQ
13aa0 4c 69 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64  Lite is compiled
13ab0 20 77 69 74 68 20 74 68 65 0a 2a 2a 20 2d 44 53   with the.** -DS
13ac0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4f 46 46  QLITE_ENABLE_OFF
13ad0 53 45 54 5f 53 51 4c 5f 46 55 4e 43 20 6f 70 74  SET_SQL_FUNC opt
13ae0 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
13af0 4f 66 66 73 65 74 3a 20 7b 20 20 20 20 20 20 20  Offset: {       
13b00 20 20 20 2f 2a 20 6f 75 74 33 20 2a 2f 0a 20 20     /* out3 */.  
13b10 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20  VdbeCursor *pC; 
13b20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63     /* The VDBE c
13b30 75 72 73 6f 72 20 2a 2f 0a 20 20 61 73 73 65 72  ursor */.  asser
13b40 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
13b50 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
13b60 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
13b70 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
13b80 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d  .  pOut = &p->aM
13b90 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
13ba0 66 28 20 4e 45 56 45 52 28 70 43 3d 3d 30 29 20  f( NEVER(pC==0) 
13bb0 7c 7c 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21  || pC->eCurType!
13bc0 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
13bd0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
13be0 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
13bf0 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
13c00 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
13c10 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 73 71 6c  tInt64(pOut, sql
13c20 69 74 65 33 42 74 72 65 65 4f 66 66 73 65 74 28  ite3BtreeOffset(
13c30 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 29  pC->uc.pCursor))
13c40 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
13c50 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
13c60 45 5f 45 4e 41 42 4c 45 5f 4f 46 46 53 45 54 5f  E_ENABLE_OFFSET_
13c70 53 51 4c 5f 46 55 4e 43 20 2a 2f 0a 0a 2f 2a 20  SQL_FUNC */../* 
13c80 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 20 50  Opcode: Column P
13c90 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
13ca0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
13cb0 3d 50 58 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70  =PX.**.** Interp
13cc0 72 65 74 20 74 68 65 20 64 61 74 61 20 74 68 61  ret the data tha
13cd0 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e  t cursor P1 poin
13ce0 74 73 20 74 6f 20 61 73 20 61 20 73 74 72 75 63  ts to as a struc
13cf0 74 75 72 65 20 62 75 69 6c 74 20 75 73 69 6e 67  ture built using
13d00 0a 2a 2a 20 74 68 65 20 4d 61 6b 65 52 65 63 6f  .** the MakeReco
13d10 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  rd instruction. 
13d20 20 28 53 65 65 20 74 68 65 20 4d 61 6b 65 52 65   (See the MakeRe
13d30 63 6f 72 64 20 6f 70 63 6f 64 65 20 66 6f 72 20  cord opcode for 
13d40 61 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e  additional.** in
13d50 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
13d60 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68  the format of th
13d70 65 20 64 61 74 61 2e 29 20 20 45 78 74 72 61 63  e data.)  Extrac
13d80 74 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75  t the P2-th colu
13d90 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68 69 73 20  mn.** from this 
13da0 72 65 63 6f 72 64 2e 20 20 49 66 20 74 68 65 72  record.  If ther
13db0 65 20 61 72 65 20 6c 65 73 73 20 74 68 61 74 20  e are less that 
13dc0 28 50 32 2b 31 29 20 0a 2a 2a 20 76 61 6c 75 65  (P2+1) .** value
13dd0 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c  s in the record,
13de0 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e   extract a NULL.
13df0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65  .**.** The value
13e00 20 65 78 74 72 61 63 74 65 64 20 69 73 20 73 74   extracted is st
13e10 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
13e20 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   P3..**.** If th
13e30 65 20 72 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e  e record contain
13e40 73 20 66 65 77 65 72 20 74 68 61 6e 20 50 32 20  s fewer than P2 
13e50 66 69 65 6c 64 73 2c 20 74 68 65 6e 20 65 78 74  fields, then ext
13e60 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20 20 4f 72  ract a NULL.  Or
13e70 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50 34 20 61  ,.** if the P4 a
13e80 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50 34 5f  rgument is a P4_
13e90 4d 45 4d 20 75 73 65 20 74 68 65 20 76 61 6c 75  MEM use the valu
13ea0 65 20 6f 66 20 74 68 65 20 50 34 20 61 72 67 75  e of the P4 argu
13eb0 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68 65 20 72  ment as.** the r
13ec0 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  esult..**.** If 
13ed0 74 68 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41 52  the OPFLAG_CLEAR
13ee0 43 41 43 48 45 20 62 69 74 20 69 73 20 73 65 74  CACHE bit is set
13ef0 20 6f 6e 20 50 35 20 61 6e 64 20 50 31 20 69 73   on P5 and P1 is
13f00 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20   a pseudo-table 
13f10 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 6e 20  cursor,.** then 
13f20 74 68 65 20 63 61 63 68 65 20 6f 66 20 74 68 65  the cache of the
13f30 20 63 75 72 73 6f 72 20 69 73 20 72 65 73 65 74   cursor is reset
13f40 20 70 72 69 6f 72 20 74 6f 20 65 78 74 72 61 63   prior to extrac
13f50 74 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  ting the column.
13f60 0a 2a 2a 20 54 68 65 20 66 69 72 73 74 20 4f 50  .** The first OP
13f70 5f 43 6f 6c 75 6d 6e 20 61 67 61 69 6e 73 74 20  _Column against 
13f80 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 61  a pseudo-table a
13f90 66 74 65 72 20 74 68 65 20 76 61 6c 75 65 20 6f  fter the value o
13fa0 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a  f the content.**
13fb0 20 72 65 67 69 73 74 65 72 20 68 61 73 20 63 68   register has ch
13fc0 61 6e 67 65 64 20 73 68 6f 75 6c 64 20 68 61 76  anged should hav
13fd0 65 20 74 68 69 73 20 62 69 74 20 73 65 74 2e 0a  e this bit set..
13fe0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
13ff0 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e  LAG_LENGTHARG an
14000 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41  d OPFLAG_TYPEOFA
14010 52 47 20 62 69 74 73 20 61 72 65 20 73 65 74 20  RG bits are set 
14020 6f 6e 20 50 35 20 74 68 65 6e 0a 2a 2a 20 74 68  on P5 then.** th
14030 65 20 72 65 73 75 6c 74 20 69 73 20 67 75 61 72  e result is guar
14040 61 6e 74 65 65 64 20 74 6f 20 6f 6e 6c 79 20 62  anteed to only b
14050 65 20 75 73 65 64 20 61 73 20 74 68 65 20 61 72  e used as the ar
14060 67 75 6d 65 6e 74 20 6f 66 20 61 20 6c 65 6e 67  gument of a leng
14070 74 68 28 29 0a 2a 2a 20 6f 72 20 74 79 70 65 6f  th().** or typeo
14080 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20 72 65  f() function, re
14090 73 70 65 63 74 69 76 65 6c 79 2e 20 20 54 68 65  spectively.  The
140a0 20 6c 6f 61 64 69 6e 67 20 6f 66 20 6c 61 72 67   loading of larg
140b0 65 20 62 6c 6f 62 73 20 63 61 6e 20 62 65 0a 2a  e blobs can be.*
140c0 2a 20 73 6b 69 70 70 65 64 20 66 6f 72 20 6c 65  * skipped for le
140d0 6e 67 74 68 28 29 20 61 6e 64 20 61 6c 6c 20 63  ngth() and all c
140e0 6f 6e 74 65 6e 74 20 6c 6f 61 64 69 6e 67 20 63  ontent loading c
140f0 61 6e 20 62 65 20 73 6b 69 70 70 65 64 20 66 6f  an be skipped fo
14100 72 20 74 79 70 65 6f 66 28 29 2e 0a 2a 2f 0a 63  r typeof()..*/.c
14110 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b  ase OP_Column: {
14120 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20  .  int p2;      
14130 20 20 20 20 20 20 2f 2a 20 63 6f 6c 75 6d 6e 20        /* column 
14140 6e 75 6d 62 65 72 20 74 6f 20 72 65 74 72 69 65  number to retrie
14150 76 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  ve */.  VdbeCurs
14160 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68  or *pC;    /* Th
14170 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 2a 2f  e VDBE cursor */
14180 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
14190 73 72 3b 20 20 20 2f 2a 20 54 68 65 20 42 54 72  sr;   /* The BTr
141a0 65 65 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 75  ee cursor */.  u
141b0 33 32 20 2a 61 4f 66 66 73 65 74 3b 20 20 20 20  32 *aOffset;    
141c0 20 20 2f 2a 20 61 4f 66 66 73 65 74 5b 69 5d 20    /* aOffset[i] 
141d0 69 73 20 6f 66 66 73 65 74 20 74 6f 20 73 74 61  is offset to sta
141e0 72 74 20 6f 66 20 64 61 74 61 20 66 6f 72 20 69  rt of data for i
141f0 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  -th column */.  
14200 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20  int len;        
14210 20 20 20 2f 2a 20 54 68 65 20 6c 65 6e 67 74 68     /* The length
14220 20 6f 66 20 74 68 65 20 73 65 72 69 61 6c 69 7a   of the serializ
14230 65 64 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  ed data for the 
14240 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20  column */.  int 
14250 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  i;             /
14260 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a  * Loop counter *
14270 2f 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 20  /.  Mem *pDest; 
14280 20 20 20 20 20 20 20 2f 2a 20 57 68 65 72 65 20         /* Where 
14290 74 6f 20 77 72 69 74 65 20 74 68 65 20 65 78 74  to write the ext
142a0 72 61 63 74 65 64 20 76 61 6c 75 65 20 2a 2f 0a  racted value */.
142b0 20 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20    Mem sMem;     
142c0 20 20 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72       /* For stor
142d0 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20 62  ing the record b
142e0 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a  eing decoded */.
142f0 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 44 61 74    const u8 *zDat
14300 61 3b 20 20 20 2f 2a 20 50 61 72 74 20 6f 66 20  a;   /* Part of 
14310 74 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67  the record being
14320 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f   decoded */.  co
14330 6e 73 74 20 75 38 20 2a 7a 48 64 72 3b 20 20 20  nst u8 *zHdr;   
14340 20 2f 2a 20 4e 65 78 74 20 75 6e 70 61 72 73 65   /* Next unparse
14350 64 20 62 79 74 65 20 6f 66 20 74 68 65 20 68 65  d byte of the he
14360 61 64 65 72 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  ader */.  const 
14370 75 38 20 2a 7a 45 6e 64 48 64 72 3b 20 2f 2a 20  u8 *zEndHdr; /* 
14380 50 6f 69 6e 74 65 72 20 74 6f 20 66 69 72 73 74  Pointer to first
14390 20 62 79 74 65 20 61 66 74 65 72 20 74 68 65 20   byte after the 
143a0 68 65 61 64 65 72 20 2a 2f 0a 20 20 75 36 34 20  header */.  u64 
143b0 6f 66 66 73 65 74 36 34 3b 20 20 20 20 20 20 2f  offset64;      /
143c0 2a 20 36 34 2d 62 69 74 20 6f 66 66 73 65 74 20  * 64-bit offset 
143d0 2a 2f 0a 20 20 75 33 32 20 74 3b 20 20 20 20 20  */.  u32 t;     
143e0 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74 79 70          /* A typ
143f0 65 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20  e code from the 
14400 72 65 63 6f 72 64 20 68 65 61 64 65 72 20 2a 2f  record header */
14410 0a 20 20 4d 65 6d 20 2a 70 52 65 67 3b 20 20 20  .  Mem *pReg;   
14420 20 20 20 20 20 20 2f 2a 20 50 73 65 75 64 6f 54        /* PseudoT
14430 61 62 6c 65 20 69 6e 70 75 74 20 72 65 67 69 73  able input regis
14440 74 65 72 20 2a 2f 0a 0a 20 20 70 43 20 3d 20 70  ter */..  pC = p
14450 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
14460 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32  ;.  p2 = pOp->p2
14470 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 63  ;..  /* If the c
14480 75 72 73 6f 72 20 63 61 63 68 65 20 69 73 20 73  ursor cache is s
14490 74 61 6c 65 20 28 6d 65 61 6e 69 6e 67 20 69 74  tale (meaning it
144a0 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c   is not currentl
144b0 79 20 70 6f 69 6e 74 20 61 74 0a 20 20 2a 2a 20  y point at.  ** 
144c0 74 68 65 20 63 6f 72 72 65 63 74 20 72 6f 77 29  the correct row)
144d0 20 74 68 65 6e 20 62 72 69 6e 67 20 69 74 20 75   then bring it u
144e0 70 2d 74 6f 2d 64 61 74 65 20 62 79 20 64 6f 69  p-to-date by doi
144f0 6e 67 20 74 68 65 20 6e 65 63 65 73 73 61 72 79  ng the necessary
14500 20 0a 20 20 2a 2a 20 42 2d 54 72 65 65 20 73 65   .  ** B-Tree se
14510 65 6b 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  ek. */.  rc = sq
14520 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
14530 6f 76 65 74 6f 28 26 70 43 2c 20 26 70 32 29 3b  oveto(&pC, &p2);
14540 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
14550 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
14560 72 6f 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  ror;..  assert( 
14570 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
14580 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p3<=(p->nMem+1
14590 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
145a0 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65  ;.  pDest = &aMe
145b0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65  m[pOp->p3];.  me
145c0 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
145d0 2c 20 70 44 65 73 74 29 3b 0a 20 20 61 73 73 65  , pDest);.  asse
145e0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
145f0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
14600 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
14610 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
14620 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e 46 69 65  ert( p2<pC->nFie
14630 6c 64 20 29 3b 0a 20 20 61 4f 66 66 73 65 74 20  ld );.  aOffset 
14640 3d 20 70 43 2d 3e 61 4f 66 66 73 65 74 3b 0a 20  = pC->aOffset;. 
14650 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
14660 72 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f 56  rType!=CURTYPE_V
14670 54 41 42 20 29 3b 0a 20 20 61 73 73 65 72 74 28  TAB );.  assert(
14680 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21 3d 43   pC->eCurType!=C
14690 55 52 54 59 50 45 5f 50 53 45 55 44 4f 20 7c 7c  URTYPE_PSEUDO ||
146a0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a   pC->nullRow );.
146b0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
146c0 75 72 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f  urType!=CURTYPE_
146d0 53 4f 52 54 45 52 20 29 3b 0a 0a 20 20 69 66 28  SORTER );..  if(
146e0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
146f0 21 3d 70 2d 3e 63 61 63 68 65 43 74 72 20 29 7b  !=p->cacheCtr ){
14700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14710 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49  /*OPTIMIZATION-I
14720 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20 69 66  F-FALSE*/.    if
14730 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b  ( pC->nullRow ){
14740 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 65  .      if( pC->e
14750 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
14760 5f 50 53 45 55 44 4f 20 29 7b 0a 20 20 20 20 20  _PSEUDO ){.     
14770 20 20 20 2f 2a 20 46 6f 72 20 74 68 65 20 73 70     /* For the sp
14780 65 63 69 61 6c 20 63 61 73 65 20 6f 66 20 61 73  ecial case of as
14790 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 2c 20   pseudo-cursor, 
147a0 74 68 65 20 73 65 65 6b 52 65 73 75 6c 74 20 66  the seekResult f
147b0 69 65 6c 64 0a 20 20 20 20 20 20 20 20 2a 2a 20  ield.        ** 
147c0 69 64 65 6e 74 69 66 69 65 73 20 74 68 65 20 72  identifies the r
147d0 65 67 69 73 74 65 72 20 74 68 61 74 20 68 6f 6c  egister that hol
147e0 64 73 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  ds the record */
147f0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
14800 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 3e   pC->seekResult>
14810 30 20 29 3b 0a 20 20 20 20 20 20 20 20 70 52 65  0 );.        pRe
14820 67 20 3d 20 26 61 4d 65 6d 5b 70 43 2d 3e 73 65  g = &aMem[pC->se
14830 65 6b 52 65 73 75 6c 74 5d 3b 0a 20 20 20 20 20  ekResult];.     
14840 20 20 20 61 73 73 65 72 74 28 20 70 52 65 67 2d     assert( pReg-
14850 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f  >flags & MEM_Blo
14860 62 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  b );.        ass
14870 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
14880 70 52 65 67 29 20 29 3b 0a 20 20 20 20 20 20 20  pReg) );.       
14890 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
148a0 20 3d 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 70   = pC->szRow = p
148b0 52 65 67 2d 3e 6e 3b 0a 20 20 20 20 20 20 20 20  Reg->n;.        
148c0 70 43 2d 3e 61 52 6f 77 20 3d 20 28 75 38 2a 29  pC->aRow = (u8*)
148d0 70 52 65 67 2d 3e 7a 3b 0a 20 20 20 20 20 20 7d  pReg->z;.      }
148e0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71  else{.        sq
148f0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
14900 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20  ull(pDest);.    
14910 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
14920 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a  mn_out;.      }.
14930 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
14940 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e   pCrsr = pC->uc.
14950 70 43 75 72 73 6f 72 3b 0a 20 20 20 20 20 20 61  pCursor;.      a
14960 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
14970 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
14980 45 45 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  EE );.      asse
14990 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 20  rt( pCrsr );.   
149a0 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
149b0 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56  e3BtreeCursorIsV
149c0 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a 20  alid(pCrsr) );. 
149d0 20 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64       pC->payload
149e0 53 69 7a 65 20 3d 20 73 71 6c 69 74 65 33 42 74  Size = sqlite3Bt
149f0 72 65 65 50 61 79 6c 6f 61 64 53 69 7a 65 28 70  reePayloadSize(p
14a00 43 72 73 72 29 3b 0a 20 20 20 20 20 20 70 43 2d  Crsr);.      pC-
14a10 3e 61 52 6f 77 20 3d 20 73 71 6c 69 74 65 33 42  >aRow = sqlite3B
14a20 74 72 65 65 50 61 79 6c 6f 61 64 46 65 74 63 68  treePayloadFetch
14a30 28 70 43 72 73 72 2c 20 26 70 43 2d 3e 73 7a 52  (pCrsr, &pC->szR
14a40 6f 77 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  ow);.      asser
14a50 74 28 20 70 43 2d 3e 73 7a 52 6f 77 3c 3d 70 43  t( pC->szRow<=pC
14a60 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 29 3b  ->payloadSize );
14a70 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
14a80 43 2d 3e 73 7a 52 6f 77 3c 3d 36 35 35 33 36 20  C->szRow<=65536 
14a90 29 3b 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 70  );  /* Maximum p
14aa0 61 67 65 20 73 69 7a 65 20 69 73 20 36 34 4b 69  age size is 64Ki
14ab0 42 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70  B */.      if( p
14ac0 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3e  C->payloadSize >
14ad0 20 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74   (u32)db->aLimit
14ae0 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
14af0 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 20  NGTH] ){.       
14b00 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
14b10 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
14b20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
14b30 20 3d 20 70 2d 3e 63 61 63 68 65 43 74 72 3b 0a   = p->cacheCtr;.
14b40 20 20 20 20 70 43 2d 3e 69 48 64 72 4f 66 66 73      pC->iHdrOffs
14b50 65 74 20 3d 20 67 65 74 56 61 72 69 6e 74 33 32  et = getVarint32
14b60 28 70 43 2d 3e 61 52 6f 77 2c 20 61 4f 66 66 73  (pC->aRow, aOffs
14b70 65 74 5b 30 5d 29 3b 0a 20 20 20 20 70 43 2d 3e  et[0]);.    pC->
14b80 6e 48 64 72 50 61 72 73 65 64 20 3d 20 30 3b 0a  nHdrParsed = 0;.
14b90 0a 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 73 7a  ..    if( pC->sz
14ba0 52 6f 77 3c 61 4f 66 66 73 65 74 5b 30 5d 20 29  Row<aOffset[0] )
14bb0 7b 20 20 20 20 20 20 2f 2a 4f 50 54 49 4d 49 5a  {      /*OPTIMIZ
14bc0 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f  ATION-IF-FALSE*/
14bd0 0a 20 20 20 20 20 20 2f 2a 20 70 43 2d 3e 61 52  .      /* pC->aR
14be0 6f 77 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65  ow does not have
14bf0 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 65 6e 74   to hold the ent
14c00 69 72 65 20 72 6f 77 2c 20 62 75 74 20 69 74 20  ire row, but it 
14c10 64 6f 65 73 20 61 74 20 6c 65 61 73 74 0a 20 20  does at least.  
14c20 20 20 20 20 2a 2a 20 6e 65 65 64 20 74 6f 20 63      ** need to c
14c30 6f 76 65 72 20 74 68 65 20 68 65 61 64 65 72 20  over the header 
14c40 6f 66 20 74 68 65 20 72 65 63 6f 72 64 2e 20 20  of the record.  
14c50 49 66 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73  If pC->aRow does
14c60 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 0a 20 20 20   not contain.   
14c70 20 20 20 2a 2a 20 74 68 65 20 63 6f 6d 70 6c 65     ** the comple
14c80 74 65 20 68 65 61 64 65 72 2c 20 74 68 65 6e 20  te header, then 
14c90 73 65 74 20 69 74 20 74 6f 20 7a 65 72 6f 2c 20  set it to zero, 
14ca0 66 6f 72 63 69 6e 67 20 74 68 65 20 68 65 61 64  forcing the head
14cb0 65 72 20 74 6f 20 62 65 0a 20 20 20 20 20 20 2a  er to be.      *
14cc0 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c  * dynamically al
14cd0 6c 6f 63 61 74 65 64 2e 20 2a 2f 0a 20 20 20 20  located. */.    
14ce0 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a    pC->aRow = 0;.
14cf0 20 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20        pC->szRow 
14d00 3d 20 30 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 4d  = 0;..      /* M
14d10 61 6b 65 20 73 75 72 65 20 61 20 63 6f 72 72 75  ake sure a corru
14d20 70 74 20 64 61 74 61 62 61 73 65 20 68 61 73 20  pt database has 
14d30 6e 6f 74 20 67 69 76 65 6e 20 75 73 20 61 6e 20  not given us an 
14d40 6f 76 65 72 73 69 7a 65 20 68 65 61 64 65 72 2e  oversize header.
14d50 0a 20 20 20 20 20 20 2a 2a 20 44 6f 20 74 68 69  .      ** Do thi
14d60 73 20 6e 6f 77 20 74 6f 20 61 76 6f 69 64 20 61  s now to avoid a
14d70 6e 20 6f 76 65 72 73 69 7a 65 20 6d 65 6d 6f 72  n oversize memor
14d80 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20 20  y allocation..  
14d90 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20      **.      ** 
14da0 54 79 70 65 20 65 6e 74 72 69 65 73 20 63 61 6e  Type entries can
14db0 20 62 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e   be between 1 an
14dc0 64 20 35 20 62 79 74 65 73 20 65 61 63 68 2e 20  d 5 bytes each. 
14dd0 20 42 75 74 20 34 20 61 6e 64 20 35 20 62 79 74   But 4 and 5 byt
14de0 65 0a 20 20 20 20 20 20 2a 2a 20 74 79 70 65 73  e.      ** types
14df0 20 75 73 65 20 73 6f 20 6d 75 63 68 20 64 61 74   use so much dat
14e00 61 20 73 70 61 63 65 20 74 68 61 74 20 74 68 65  a space that the
14e10 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 34  re can only be 4
14e20 30 39 36 20 61 6e 64 20 33 32 20 6f 66 0a 20 20  096 and 32 of.  
14e30 20 20 20 20 2a 2a 20 74 68 65 6d 2c 20 72 65 73      ** them, res
14e40 70 65 63 74 69 76 65 6c 79 2e 20 20 53 6f 20 74  pectively.  So t
14e50 68 65 20 6d 61 78 69 6d 75 6d 20 68 65 61 64 65  he maximum heade
14e60 72 20 6c 65 6e 67 74 68 20 72 65 73 75 6c 74 73  r length results
14e70 20 66 72 6f 6d 20 61 0a 20 20 20 20 20 20 2a 2a   from a.      **
14e80 20 33 2d 62 79 74 65 20 74 79 70 65 20 66 6f 72   3-byte type for
14e90 20 65 61 63 68 20 6f 66 20 74 68 65 20 6d 61 78   each of the max
14ea0 69 6d 75 6d 20 6f 66 20 33 32 37 36 38 20 63 6f  imum of 32768 co
14eb0 6c 75 6d 6e 73 20 70 6c 75 73 20 74 68 72 65 65  lumns plus three
14ec0 0a 20 20 20 20 20 20 2a 2a 20 65 78 74 72 61 20  .      ** extra 
14ed0 62 79 74 65 73 20 66 6f 72 20 74 68 65 20 68 65  bytes for the he
14ee0 61 64 65 72 20 6c 65 6e 67 74 68 20 69 74 73 65  ader length itse
14ef0 6c 66 2e 20 20 33 32 37 36 38 2a 33 20 2b 20 33  lf.  32768*3 + 3
14f00 20 3d 20 39 38 33 30 37 2e 0a 20 20 20 20 20 20   = 98307..      
14f10 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 61 4f 66  */.      if( aOf
14f20 66 73 65 74 5b 30 5d 20 3e 20 39 38 33 30 37 20  fset[0] > 98307 
14f30 7c 7c 20 61 4f 66 66 73 65 74 5b 30 5d 20 3e 20  || aOffset[0] > 
14f40 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20  pC->payloadSize 
14f50 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  ){.        goto 
14f60 6f 70 5f 63 6f 6c 75 6d 6e 5f 63 6f 72 72 75 70  op_column_corrup
14f70 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  t;.      }.    }
14f80 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 54  else{.      /* T
14f90 68 69 73 20 69 73 20 61 6e 20 6f 70 74 69 6d 69  his is an optimi
14fa0 7a 61 74 69 6f 6e 2e 20 20 42 79 20 73 6b 69 70  zation.  By skip
14fb0 70 69 6e 67 20 6f 76 65 72 20 74 68 65 20 66 69  ping over the fi
14fc0 72 73 74 20 66 65 77 20 74 65 73 74 73 0a 20 20  rst few tests.  
14fd0 20 20 20 20 2a 2a 20 28 65 78 3a 20 70 43 2d 3e      ** (ex: pC->
14fe0 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32 29 20  nHdrParsed<=p2) 
14ff0 69 6e 20 74 68 65 20 6e 65 78 74 20 73 65 63 74  in the next sect
15000 69 6f 6e 2c 20 77 65 20 61 63 68 69 65 76 65 20  ion, we achieve 
15010 61 0a 20 20 20 20 20 20 2a 2a 20 6d 65 61 73 75  a.      ** measu
15020 72 61 62 6c 65 20 70 65 72 66 6f 72 6d 61 6e 63  rable performanc
15030 65 20 67 61 69 6e 2e 0a 20 20 20 20 20 20 2a 2a  e gain..      **
15040 0a 20 20 20 20 20 20 2a 2a 20 54 68 69 73 20 62  .      ** This b
15050 72 61 6e 63 68 20 69 73 20 74 61 6b 65 6e 20 65  ranch is taken e
15060 76 65 6e 20 69 66 20 61 4f 66 66 73 65 74 5b 30  ven if aOffset[0
15070 5d 3d 3d 30 2e 20 20 53 75 63 68 20 61 20 72 65  ]==0.  Such a re
15080 63 6f 72 64 20 69 73 20 6e 65 76 65 72 0a 20 20  cord is never.  
15090 20 20 20 20 2a 2a 20 67 65 6e 65 72 61 74 65 64      ** generated
150a0 20 62 79 20 53 51 4c 69 74 65 2c 20 61 6e 64 20   by SQLite, and 
150b0 63 6f 75 6c 64 20 62 65 20 63 6f 6e 73 69 64 65  could be conside
150c0 72 65 64 20 63 6f 72 72 75 70 74 69 6f 6e 2c 20  red corruption, 
150d0 62 75 74 20 77 65 0a 20 20 20 20 20 20 2a 2a 20  but we.      ** 
150e0 61 63 63 65 70 74 20 69 74 20 66 6f 72 20 68 69  accept it for hi
150f0 73 74 6f 72 69 63 61 6c 20 72 65 61 73 6f 6e 73  storical reasons
15100 2e 20 20 57 68 65 6e 20 61 4f 66 66 73 65 74 5b  .  When aOffset[
15110 30 5d 3d 3d 30 2c 20 74 68 65 20 63 6f 64 65 20  0]==0, the code 
15120 74 68 69 73 0a 20 20 20 20 20 20 2a 2a 20 62 72  this.      ** br
15130 61 6e 63 68 20 6a 75 6d 70 73 20 74 6f 20 72 65  anch jumps to re
15140 61 64 73 20 70 61 73 74 20 74 68 65 20 65 6e 64  ads past the end
15150 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 2c 20   of the record, 
15160 62 75 74 20 6e 65 76 65 72 20 6d 6f 72 65 0a 20  but never more. 
15170 20 20 20 20 20 2a 2a 20 74 68 61 6e 20 61 20 66       ** than a f
15180 65 77 20 62 79 74 65 73 2e 20 20 45 76 65 6e 20  ew bytes.  Even 
15190 69 66 20 74 68 65 20 72 65 63 6f 72 64 20 6f 63  if the record oc
151a0 63 75 72 73 20 61 74 20 74 68 65 20 65 6e 64 20  curs at the end 
151b0 6f 66 20 74 68 65 20 70 61 67 65 0a 20 20 20 20  of the page.    
151c0 20 20 2a 2a 20 63 6f 6e 74 65 6e 74 20 61 72 65    ** content are
151d0 61 2c 20 74 68 65 20 22 70 61 67 65 20 68 65 61  a, the "page hea
151e0 64 65 72 22 20 63 6f 6d 65 73 20 61 66 74 65 72  der" comes after
151f0 20 74 68 65 20 70 61 67 65 20 63 6f 6e 74 65 6e   the page conten
15200 74 20 61 6e 64 20 73 6f 0a 20 20 20 20 20 20 2a  t and so.      *
15210 2a 20 74 68 69 73 20 6f 76 65 72 72 65 61 64 20  * this overread 
15220 69 73 20 68 61 72 6d 6c 65 73 73 2e 20 20 53 69  is harmless.  Si
15230 6d 69 6c 61 72 20 6f 76 65 72 72 65 61 64 73 20  milar overreads 
15240 63 61 6e 20 6f 63 63 75 72 20 66 6f 72 20 61 20  can occur for a 
15250 63 6f 72 72 75 70 74 0a 20 20 20 20 20 20 2a 2a  corrupt.      **
15260 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
15270 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 7a        */.      z
15280 44 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77 3b  Data = pC->aRow;
15290 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
152a0 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70  C->nHdrParsed<=p
152b0 32 20 29 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  2 );         /* 
152c0 43 6f 6e 64 69 74 69 6f 6e 61 6c 20 73 6b 69 70  Conditional skip
152d0 70 65 64 20 2a 2f 0a 20 20 20 20 20 20 74 65 73  ped */.      tes
152e0 74 63 61 73 65 28 20 61 4f 66 66 73 65 74 5b 30  tcase( aOffset[0
152f0 5d 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 67 6f  ]==0 );.      go
15300 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72 65 61  to op_column_rea
15310 64 5f 68 65 61 64 65 72 3b 0a 20 20 20 20 7d 0a  d_header;.    }.
15320 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73    }..  /* Make s
15330 75 72 65 20 61 74 20 6c 65 61 73 74 20 74 68 65  ure at least the
15340 20 66 69 72 73 74 20 70 32 2b 31 20 65 6e 74 72   first p2+1 entr
15350 69 65 73 20 6f 66 20 74 68 65 20 68 65 61 64 65  ies of the heade
15360 72 20 68 61 76 65 20 62 65 65 6e 0a 20 20 2a 2a  r have been.  **
15370 20 70 61 72 73 65 64 20 61 6e 64 20 76 61 6c 69   parsed and vali
15380 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73  d information is
15390 20 69 6e 20 61 4f 66 66 73 65 74 5b 5d 20 61 6e   in aOffset[] an
153a0 64 20 70 43 2d 3e 61 54 79 70 65 5b 5d 2e 0a 20  d pC->aType[].. 
153b0 20 2a 2f 0a 20 20 69 66 28 20 70 43 2d 3e 6e 48   */.  if( pC->nH
153c0 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a  drParsed<=p2 ){.
153d0 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20      /* If there 
153e0 69 73 20 6d 6f 72 65 20 68 65 61 64 65 72 20 61  is more header a
153f0 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 70 61 72  vailable for par
15400 73 69 6e 67 20 69 6e 20 74 68 65 20 72 65 63 6f  sing in the reco
15410 72 64 2c 20 74 72 79 0a 20 20 20 20 2a 2a 20 74  rd, try.    ** t
15420 6f 20 65 78 74 72 61 63 74 20 61 64 64 69 74 69  o extract additi
15430 6f 6e 61 6c 20 66 69 65 6c 64 73 20 75 70 20 74  onal fields up t
15440 68 72 6f 75 67 68 20 74 68 65 20 70 32 2b 31 2d  hrough the p2+1-
15450 74 68 20 66 69 65 6c 64 20 0a 20 20 20 20 2a 2f  th field .    */
15460 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 69 48 64  .    if( pC->iHd
15470 72 4f 66 66 73 65 74 3c 61 4f 66 66 73 65 74 5b  rOffset<aOffset[
15480 30 5d 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4d  0] ){.      /* M
15490 61 6b 65 20 73 75 72 65 20 7a 44 61 74 61 20 70  ake sure zData p
154a0 6f 69 6e 74 73 20 74 6f 20 65 6e 6f 75 67 68 20  oints to enough 
154b0 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  of the record to
154c0 20 63 6f 76 65 72 20 74 68 65 20 68 65 61 64 65   cover the heade
154d0 72 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  r. */.      if( 
154e0 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 7b 0a 20  pC->aRow==0 ){. 
154f0 20 20 20 20 20 20 20 6d 65 6d 73 65 74 28 26 73         memset(&s
15500 4d 65 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73  Mem, 0, sizeof(s
15510 4d 65 6d 29 29 3b 0a 20 20 20 20 20 20 20 20 72  Mem));.        r
15520 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
15530 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 2d 3e  emFromBtree(pC->
15540 75 63 2e 70 43 75 72 73 6f 72 2c 20 30 2c 20 61  uc.pCursor, 0, a
15550 4f 66 66 73 65 74 5b 30 5d 2c 20 26 73 4d 65 6d  Offset[0], &sMem
15560 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
15570 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
15580 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
15590 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
155a0 7a 44 61 74 61 20 3d 20 28 75 38 2a 29 73 4d 65  zData = (u8*)sMe
155b0 6d 2e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  m.z;.      }else
155c0 7b 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20  {.        zData 
155d0 3d 20 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20  = pC->aRow;.    
155e0 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20    }.  .      /* 
155f0 46 69 6c 6c 20 69 6e 20 70 43 2d 3e 61 54 79 70  Fill in pC->aTyp
15600 65 5b 69 5d 20 61 6e 64 20 61 4f 66 66 73 65 74  e[i] and aOffset
15610 5b 69 5d 20 76 61 6c 75 65 73 20 74 68 72 6f 75  [i] values throu
15620 67 68 20 74 68 65 20 70 32 2d 74 68 20 66 69 65  gh the p2-th fie
15630 6c 64 2e 20 2a 2f 0a 20 20 20 20 6f 70 5f 63 6f  ld. */.    op_co
15640 6c 75 6d 6e 5f 72 65 61 64 5f 68 65 61 64 65 72  lumn_read_header
15650 3a 0a 20 20 20 20 20 20 69 20 3d 20 70 43 2d 3e  :.      i = pC->
15660 6e 48 64 72 50 61 72 73 65 64 3b 0a 20 20 20 20  nHdrParsed;.    
15670 20 20 6f 66 66 73 65 74 36 34 20 3d 20 61 4f 66    offset64 = aOf
15680 66 73 65 74 5b 69 5d 3b 0a 20 20 20 20 20 20 7a  fset[i];.      z
15690 48 64 72 20 3d 20 7a 44 61 74 61 20 2b 20 70 43  Hdr = zData + pC
156a0 2d 3e 69 48 64 72 4f 66 66 73 65 74 3b 0a 20 20  ->iHdrOffset;.  
156b0 20 20 20 20 7a 45 6e 64 48 64 72 20 3d 20 7a 44      zEndHdr = zD
156c0 61 74 61 20 2b 20 61 4f 66 66 73 65 74 5b 30 5d  ata + aOffset[0]
156d0 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65  ;.      testcase
156e0 28 20 7a 48 64 72 3e 3d 7a 45 6e 64 48 64 72 20  ( zHdr>=zEndHdr 
156f0 29 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20 20  );.      do{.   
15700 20 20 20 20 20 69 66 28 20 28 74 20 3d 20 7a 48       if( (t = zH
15710 64 72 5b 30 5d 29 3c 30 78 38 30 20 29 7b 0a 20  dr[0])<0x80 ){. 
15720 20 20 20 20 20 20 20 20 20 7a 48 64 72 2b 2b 3b           zHdr++;
15730 0a 20 20 20 20 20 20 20 20 20 20 6f 66 66 73 65  .          offse
15740 74 36 34 20 2b 3d 20 73 71 6c 69 74 65 33 56 64  t64 += sqlite3Vd
15750 62 65 4f 6e 65 42 79 74 65 53 65 72 69 61 6c 54  beOneByteSerialT
15760 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20  ypeLen(t);.     
15770 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
15780 20 20 20 20 7a 48 64 72 20 2b 3d 20 73 71 6c 69      zHdr += sqli
15790 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 7a  te3GetVarint32(z
157a0 48 64 72 2c 20 26 74 29 3b 0a 20 20 20 20 20 20  Hdr, &t);.      
157b0 20 20 20 20 6f 66 66 73 65 74 36 34 20 2b 3d 20      offset64 += 
157c0 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
157d0 6c 54 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20  lTypeLen(t);.   
157e0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70       }.        p
157f0 43 2d 3e 61 54 79 70 65 5b 69 2b 2b 5d 20 3d 20  C->aType[i++] = 
15800 74 3b 0a 20 20 20 20 20 20 20 20 61 4f 66 66 73  t;.        aOffs
15810 65 74 5b 69 5d 20 3d 20 28 75 33 32 29 28 6f 66  et[i] = (u32)(of
15820 66 73 65 74 36 34 20 26 20 30 78 66 66 66 66 66  fset64 & 0xfffff
15830 66 66 66 29 3b 0a 20 20 20 20 20 20 7d 77 68 69  fff);.      }whi
15840 6c 65 28 20 69 3c 3d 70 32 20 26 26 20 7a 48 64  le( i<=p2 && zHd
15850 72 3c 7a 45 6e 64 48 64 72 20 29 3b 0a 0a 20 20  r<zEndHdr );..  
15860 20 20 20 20 2f 2a 20 54 68 65 20 72 65 63 6f 72      /* The recor
15870 64 20 69 73 20 63 6f 72 72 75 70 74 20 69 66 20  d is corrupt if 
15880 61 6e 79 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  any of the follo
15890 77 69 6e 67 20 61 72 65 20 74 72 75 65 3a 0a 20  wing are true:. 
158a0 20 20 20 20 20 2a 2a 20 28 31 29 20 74 68 65 20       ** (1) the 
158b0 62 79 74 65 73 20 6f 66 20 74 68 65 20 68 65 61  bytes of the hea
158c0 64 65 72 20 65 78 74 65 6e 64 20 70 61 73 74 20  der extend past 
158d0 74 68 65 20 64 65 63 6c 61 72 65 64 20 68 65 61  the declared hea
158e0 64 65 72 20 73 69 7a 65 0a 20 20 20 20 20 20 2a  der size.      *
158f0 2a 20 28 32 29 20 74 68 65 20 65 6e 74 69 72 65  * (2) the entire
15900 20 68 65 61 64 65 72 20 77 61 73 20 75 73 65 64   header was used
15910 20 62 75 74 20 6e 6f 74 20 61 6c 6c 20 64 61 74   but not all dat
15920 61 20 77 61 73 20 75 73 65 64 0a 20 20 20 20 20  a was used.     
15930 20 2a 2a 20 28 33 29 20 74 68 65 20 65 6e 64 20   ** (3) the end 
15940 6f 66 20 74 68 65 20 64 61 74 61 20 65 78 74 65  of the data exte
15950 6e 64 73 20 62 65 79 6f 6e 64 20 74 68 65 20 65  nds beyond the e
15960 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  nd of the record
15970 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
15980 20 69 66 28 20 28 7a 48 64 72 3e 3d 7a 45 6e 64   if( (zHdr>=zEnd
15990 48 64 72 20 26 26 20 28 7a 48 64 72 3e 7a 45 6e  Hdr && (zHdr>zEn
159a0 64 48 64 72 20 7c 7c 20 6f 66 66 73 65 74 36 34  dHdr || offset64
159b0 21 3d 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a  !=pC->payloadSiz
159c0 65 29 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 6f  e)).       || (o
159d0 66 66 73 65 74 36 34 20 3e 20 70 43 2d 3e 70 61  ffset64 > pC->pa
159e0 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20 20 20 20  yloadSize).     
159f0 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
15a00 61 4f 66 66 73 65 74 5b 30 5d 3d 3d 30 20 29 7b  aOffset[0]==0 ){
15a10 0a 20 20 20 20 20 20 20 20 20 20 69 20 3d 20 30  .          i = 0
15a20 3b 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64 72  ;.          zHdr
15a30 20 3d 20 7a 45 6e 64 48 64 72 3b 0a 20 20 20 20   = zEndHdr;.    
15a40 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
15a50 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f       if( pC->aRo
15a60 77 3d 3d 30 20 29 20 73 71 6c 69 74 65 33 56 64  w==0 ) sqlite3Vd
15a70 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d  beMemRelease(&sM
15a80 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 67  em);.          g
15a90 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 63 6f  oto op_column_co
15aa0 72 72 75 70 74 3b 0a 20 20 20 20 20 20 20 20 7d  rrupt;.        }
15ab0 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
15ac0 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 3d  pC->nHdrParsed =
15ad0 20 69 3b 0a 20 20 20 20 20 20 70 43 2d 3e 69 48   i;.      pC->iH
15ae0 64 72 4f 66 66 73 65 74 20 3d 20 28 75 33 32 29  drOffset = (u32)
15af0 28 7a 48 64 72 20 2d 20 7a 44 61 74 61 29 3b 0a  (zHdr - zData);.
15b00 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52        if( pC->aR
15b10 6f 77 3d 3d 30 20 29 20 73 71 6c 69 74 65 33 56  ow==0 ) sqlite3V
15b20 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73  dbeMemRelease(&s
15b30 4d 65 6d 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  Mem);.    }else{
15b40 0a 20 20 20 20 20 20 74 20 3d 20 30 3b 0a 20 20  .      t = 0;.  
15b50 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 49 66 20 61    }..    /* If a
15b60 66 74 65 72 20 74 72 79 69 6e 67 20 74 6f 20 65  fter trying to e
15b70 78 74 72 61 63 74 20 6e 65 77 20 65 6e 74 72 69  xtract new entri
15b80 65 73 20 66 72 6f 6d 20 74 68 65 20 68 65 61 64  es from the head
15b90 65 72 2c 20 6e 48 64 72 50 61 72 73 65 64 20 69  er, nHdrParsed i
15ba0 73 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20 6e  s.    ** still n
15bb0 6f 74 20 75 70 20 74 6f 20 70 32 2c 20 74 68 61  ot up to p2, tha
15bc0 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  t means that the
15bd0 20 72 65 63 6f 72 64 20 68 61 73 20 66 65 77 65   record has fewe
15be0 72 20 74 68 61 6e 20 70 32 0a 20 20 20 20 2a 2a  r than p2.    **
15bf0 20 63 6f 6c 75 6d 6e 73 2e 20 20 53 6f 20 74 68   columns.  So th
15c00 65 20 72 65 73 75 6c 74 20 77 69 6c 6c 20 62 65  e result will be
15c10 20 65 69 74 68 65 72 20 74 68 65 20 64 65 66 61   either the defa
15c20 75 6c 74 20 76 61 6c 75 65 20 6f 72 20 61 20 4e  ult value or a N
15c30 55 4c 4c 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  ULL..    */.    
15c40 69 66 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73  if( pC->nHdrPars
15c50 65 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20 20 20  ed<=p2 ){.      
15c60 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  if( pOp->p4type=
15c70 3d 50 34 5f 4d 45 4d 20 29 7b 0a 20 20 20 20 20  =P4_MEM ){.     
15c80 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
15c90 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 44 65  mShallowCopy(pDe
15ca0 73 74 2c 20 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d  st, pOp->p4.pMem
15cb0 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20  , MEM_Static);. 
15cc0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
15cd0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
15ce0 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29  emSetNull(pDest)
15cf0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
15d00 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f  goto op_column_o
15d10 75 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  ut;.    }.  }els
15d20 65 7b 0a 20 20 20 20 74 20 3d 20 70 43 2d 3e 61  e{.    t = pC->a
15d30 54 79 70 65 5b 70 32 5d 3b 0a 20 20 7d 0a 0a 20  Type[p2];.  }.. 
15d40 20 2f 2a 20 45 78 74 72 61 63 74 20 74 68 65 20   /* Extract the 
15d50 63 6f 6e 74 65 6e 74 20 66 6f 72 20 74 68 65 20  content for the 
15d60 70 32 2b 31 2d 74 68 20 63 6f 6c 75 6d 6e 2e 20  p2+1-th column. 
15d70 20 43 6f 6e 74 72 6f 6c 20 63 61 6e 20 6f 6e 6c   Control can onl
15d80 79 0a 20 20 2a 2a 20 72 65 61 63 68 20 74 68 69  y.  ** reach thi
15d90 73 20 70 6f 69 6e 74 20 69 66 20 61 4f 66 66 73  s point if aOffs
15da0 65 74 5b 70 32 5d 2c 20 61 4f 66 66 73 65 74 5b  et[p2], aOffset[
15db0 70 32 2b 31 5d 2c 20 61 6e 64 20 70 43 2d 3e 61  p2+1], and pC->a
15dc0 54 79 70 65 5b 70 32 5d 20 61 72 65 0a 20 20 2a  Type[p2] are.  *
15dd0 2a 20 61 6c 6c 20 76 61 6c 69 64 2e 0a 20 20 2a  * all valid..  *
15de0 2f 0a 20 20 61 73 73 65 72 74 28 20 70 32 3c 70  /.  assert( p2<p
15df0 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 29 3b  C->nHdrParsed );
15e00 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53  .  assert( rc==S
15e10 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 61 73  QLITE_OK );.  as
15e20 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64 62  sert( sqlite3Vdb
15e30 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61  eCheckMemInvaria
15e40 6e 74 73 28 70 44 65 73 74 29 20 29 3b 0a 20 20  nts(pDest) );.  
15e50 69 66 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d  if( VdbeMemDynam
15e60 69 63 28 70 44 65 73 74 29 20 29 7b 0a 20 20 20  ic(pDest) ){.   
15e70 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
15e80 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20  etNull(pDest);. 
15e90 20 7d 0a 20 20 61 73 73 65 72 74 28 20 74 3d 3d   }.  assert( t==
15ea0 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 20 29 3b  pC->aType[p2] );
15eb0 0a 20 20 69 66 28 20 70 43 2d 3e 73 7a 52 6f 77  .  if( pC->szRow
15ec0 3e 3d 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d 20  >=aOffset[p2+1] 
15ed0 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 69  ){.    /* This i
15ee0 73 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73  s the common cas
15ef0 65 20 77 68 65 72 65 20 74 68 65 20 64 65 73 69  e where the desi
15f00 72 65 64 20 63 6f 6e 74 65 6e 74 20 66 69 74 73  red content fits
15f10 20 6f 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   on the original
15f20 0a 20 20 20 20 2a 2a 20 70 61 67 65 20 2d 20 77  .    ** page - w
15f30 68 65 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74  here the content
15f40 20 69 73 20 6e 6f 74 20 6f 6e 20 61 6e 20 6f 76   is not on an ov
15f50 65 72 66 6c 6f 77 20 70 61 67 65 20 2a 2f 0a 20  erflow page */. 
15f60 20 20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e 61     zData = pC->a
15f70 52 6f 77 20 2b 20 61 4f 66 66 73 65 74 5b 70 32  Row + aOffset[p2
15f80 5d 3b 0a 20 20 20 20 69 66 28 20 74 3c 31 32 20  ];.    if( t<12 
15f90 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
15fa0 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 7a 44  VdbeSerialGet(zD
15fb0 61 74 61 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a  ata, t, pDest);.
15fc0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
15fd0 20 2f 2a 20 49 66 20 74 68 65 20 63 6f 6c 75 6d   /* If the colum
15fe0 6e 20 76 61 6c 75 65 20 69 73 20 61 20 73 74 72  n value is a str
15ff0 69 6e 67 2c 20 77 65 20 6e 65 65 64 20 61 20 70  ing, we need a p
16000 65 72 73 69 73 74 65 6e 74 20 76 61 6c 75 65 2c  ersistent value,
16010 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a 20 61 20   not.      ** a 
16020 4d 45 4d 5f 45 70 68 65 6d 20 76 61 6c 75 65 2e  MEM_Ephem value.
16030 20 20 54 68 69 73 20 62 72 61 6e 63 68 20 69 73    This branch is
16040 20 61 20 66 61 73 74 20 73 68 6f 72 74 2d 63 75   a fast short-cu
16050 74 20 74 68 61 74 20 69 73 20 65 71 75 69 76 61  t that is equiva
16060 6c 65 6e 74 0a 20 20 20 20 20 20 2a 2a 20 74 6f  lent.      ** to
16070 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33   calling sqlite3
16080 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 29 20  VdbeSerialGet() 
16090 61 6e 64 20 73 71 6c 69 74 65 33 56 64 62 65 44  and sqlite3VdbeD
160a0 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 29 2e  eephemeralize().
160b0 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
160c0 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 31 36  static const u16
160d0 20 61 46 6c 61 67 5b 5d 20 3d 20 7b 20 4d 45 4d   aFlag[] = { MEM
160e0 5f 42 6c 6f 62 2c 20 4d 45 4d 5f 53 74 72 7c 4d  _Blob, MEM_Str|M
160f0 45 4d 5f 54 65 72 6d 20 7d 3b 0a 20 20 20 20 20  EM_Term };.     
16100 20 70 44 65 73 74 2d 3e 6e 20 3d 20 6c 65 6e 20   pDest->n = len 
16110 3d 20 28 74 2d 31 32 29 2f 32 3b 0a 20 20 20 20  = (t-12)/2;.    
16120 20 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20 65    pDest->enc = e
16130 6e 63 6f 64 69 6e 67 3b 0a 20 20 20 20 20 20 69  ncoding;.      i
16140 66 28 20 70 44 65 73 74 2d 3e 73 7a 4d 61 6c 6c  f( pDest->szMall
16150 6f 63 20 3c 20 6c 65 6e 2b 32 20 29 7b 0a 20 20  oc < len+2 ){.  
16160 20 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61        pDest->fla
16170 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
16180 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74         if( sqlit
16190 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 44  e3VdbeMemGrow(pD
161a0 65 73 74 2c 20 6c 65 6e 2b 32 2c 20 30 29 20 29  est, len+2, 0) )
161b0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
161c0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
161d0 20 20 20 70 44 65 73 74 2d 3e 7a 20 3d 20 70 44     pDest->z = pD
161e0 65 73 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20  est->zMalloc;.  
161f0 20 20 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63      }.      memc
16200 70 79 28 70 44 65 73 74 2d 3e 7a 2c 20 7a 44 61  py(pDest->z, zDa
16210 74 61 2c 20 6c 65 6e 29 3b 0a 20 20 20 20 20 20  ta, len);.      
16220 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 5d 20 3d 20  pDest->z[len] = 
16230 30 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e  0;.      pDest->
16240 7a 5b 6c 65 6e 2b 31 5d 20 3d 20 30 3b 0a 20 20  z[len+1] = 0;.  
16250 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73      pDest->flags
16260 20 3d 20 61 46 6c 61 67 5b 74 26 31 5d 3b 0a 20   = aFlag[t&1];. 
16270 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
16280 20 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20 65    pDest->enc = e
16290 6e 63 6f 64 69 6e 67 3b 0a 20 20 20 20 2f 2a 20  ncoding;.    /* 
162a0 54 68 69 73 20 62 72 61 6e 63 68 20 68 61 70 70  This branch happ
162b0 65 6e 73 20 6f 6e 6c 79 20 77 68 65 6e 20 63 6f  ens only when co
162c0 6e 74 65 6e 74 20 69 73 20 6f 6e 20 6f 76 65 72  ntent is on over
162d0 66 6c 6f 77 20 70 61 67 65 73 20 2a 2f 0a 20 20  flow pages */.  
162e0 20 20 69 66 28 20 28 28 70 4f 70 2d 3e 70 35 20    if( ((pOp->p5 
162f0 26 20 28 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48  & (OPFLAG_LENGTH
16300 41 52 47 7c 4f 50 46 4c 41 47 5f 54 59 50 45 4f  ARG|OPFLAG_TYPEO
16310 46 41 52 47 29 29 21 3d 30 0a 20 20 20 20 20 20  FARG))!=0.      
16320 20 20 20 20 26 26 20 28 28 74 3e 3d 31 32 20 26      && ((t>=12 &
16330 26 20 28 74 26 31 29 3d 3d 30 29 20 7c 7c 20 28  & (t&1)==0) || (
16340 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
16350 5f 54 59 50 45 4f 46 41 52 47 29 21 3d 30 29 29  _TYPEOFARG)!=0))
16360 0a 20 20 20 20 20 7c 7c 20 28 6c 65 6e 20 3d 20  .     || (len = 
16370 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
16380 6c 54 79 70 65 4c 65 6e 28 74 29 29 3d 3d 30 0a  lTypeLen(t))==0.
16390 20 20 20 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20      ){.      /* 
163a0 43 6f 6e 74 65 6e 74 20 69 73 20 69 72 72 65 6c  Content is irrel
163b0 65 76 61 6e 74 20 66 6f 72 0a 20 20 20 20 20 20  evant for.      
163c0 2a 2a 20 20 20 20 31 2e 20 74 68 65 20 74 79 70  **    1. the typ
163d0 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c 0a  eof() function,.
163e0 20 20 20 20 20 20 2a 2a 20 20 20 20 32 2e 20 74        **    2. t
163f0 68 65 20 6c 65 6e 67 74 68 28 58 29 20 66 75 6e  he length(X) fun
16400 63 74 69 6f 6e 20 69 66 20 58 20 69 73 20 61 20  ction if X is a 
16410 62 6c 6f 62 2c 20 61 6e 64 0a 20 20 20 20 20 20  blob, and.      
16420 2a 2a 20 20 20 20 33 2e 20 69 66 20 74 68 65 20  **    3. if the 
16430 63 6f 6e 74 65 6e 74 20 6c 65 6e 67 74 68 20 69  content length i
16440 73 20 7a 65 72 6f 2e 0a 20 20 20 20 20 20 2a 2a  s zero..      **
16450 20 53 6f 20 77 65 20 6d 69 67 68 74 20 61 73 20   So we might as 
16460 77 65 6c 6c 20 75 73 65 20 62 6f 67 75 73 20 63  well use bogus c
16470 6f 6e 74 65 6e 74 20 72 61 74 68 65 72 20 74 68  ontent rather th
16480 61 6e 20 72 65 61 64 69 6e 67 0a 20 20 20 20 20  an reading.     
16490 20 2a 2a 20 63 6f 6e 74 65 6e 74 20 66 72 6f 6d   ** content from
164a0 20 64 69 73 6b 2e 20 0a 20 20 20 20 20 20 2a 2a   disk. .      **
164b0 0a 20 20 20 20 20 20 2a 2a 20 41 6c 74 68 6f 75  .      ** Althou
164c0 67 68 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  gh sqlite3VdbeSe
164d0 72 69 61 6c 47 65 74 28 29 20 6d 61 79 20 72 65  rialGet() may re
164e0 61 64 20 61 74 20 6d 6f 73 74 20 38 20 62 79 74  ad at most 8 byt
164f0 65 73 20 66 72 6f 6d 20 74 68 65 0a 20 20 20 20  es from the.    
16500 20 20 2a 2a 20 62 75 66 66 65 72 20 70 61 73 73    ** buffer pass
16510 65 64 20 74 6f 20 69 74 2c 20 64 65 62 75 67 67  ed to it, debugg
16520 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 56 64 62  ing function Vdb
16530 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e 74 28  eMemPrettyPrint(
16540 29 20 6d 61 79 0a 20 20 20 20 20 20 2a 2a 20 72  ) may.      ** r
16550 65 61 64 20 75 70 20 74 6f 20 31 36 2e 20 53 6f  ead up to 16. So
16560 20 31 36 20 62 79 74 65 73 20 6f 66 20 62 6f 67   16 bytes of bog
16570 75 73 20 63 6f 6e 74 65 6e 74 20 69 73 20 73 75  us content is su
16580 70 70 6c 69 65 64 2e 0a 20 20 20 20 20 20 2a 2f  pplied..      */
16590 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 75 38  .      static u8
165a0 20 61 5a 65 72 6f 5b 31 36 5d 3b 20 20 2f 2a 20   aZero[16];  /* 
165b0 54 68 69 73 20 69 73 20 74 68 65 20 62 6f 67 75  This is the bogu
165c0 73 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 20  s content */.   
165d0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
165e0 72 69 61 6c 47 65 74 28 61 5a 65 72 6f 2c 20 74  rialGet(aZero, t
165f0 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 65  , pDest);.    }e
16600 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  lse{.      rc = 
16610 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72  sqlite3VdbeMemFr
16620 6f 6d 42 74 72 65 65 28 70 43 2d 3e 75 63 2e 70  omBtree(pC->uc.p
16630 43 75 72 73 6f 72 2c 20 61 4f 66 66 73 65 74 5b  Cursor, aOffset[
16640 70 32 5d 2c 20 6c 65 6e 2c 20 70 44 65 73 74 29  p2], len, pDest)
16650 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
16660 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
16670 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
16680 72 6f 72 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ror;.      sqlit
16690 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28  e3VdbeSerialGet(
166a0 28 63 6f 6e 73 74 20 75 38 2a 29 70 44 65 73 74  (const u8*)pDest
166b0 2d 3e 7a 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a  ->z, t, pDest);.
166c0 20 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61        pDest->fla
166d0 67 73 20 26 3d 20 7e 4d 45 4d 5f 45 70 68 65 6d  gs &= ~MEM_Ephem
166e0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 6f 70 5f  ;.    }.  }..op_
166f0 63 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20 55 50  column_out:.  UP
16700 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
16710 45 28 70 44 65 73 74 29 3b 0a 20 20 52 45 47 49  E(pDest);.  REGI
16720 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
16730 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 62 72  p3, pDest);.  br
16740 65 61 6b 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f  eak;..op_column_
16750 63 6f 72 72 75 70 74 3a 0a 20 20 69 66 28 20 61  corrupt:.  if( a
16760 4f 70 5b 30 5d 2e 70 33 3e 30 20 29 7b 0a 20 20  Op[0].p3>0 ){.  
16770 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 61 4f 70    pOp = &aOp[aOp
16780 5b 30 5d 2e 70 33 2d 31 5d 3b 0a 20 20 20 20 62  [0].p3-1];.    b
16790 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  reak;.  }else{. 
167a0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43     rc = SQLITE_C
167b0 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20  ORRUPT_BKPT;.   
167c0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
167d0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 7d 0a  to_error;.  }.}.
167e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 66 66 69  ./* Opcode: Affi
167f0 6e 69 74 79 20 50 31 20 50 32 20 2a 20 50 34 20  nity P1 P2 * P4 
16800 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61  *.** Synopsis: a
16810 66 66 69 6e 69 74 79 28 72 5b 50 31 40 50 32 5d  ffinity(r[P1@P2]
16820 29 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20 61 66  ).**.** Apply af
16830 66 69 6e 69 74 69 65 73 20 74 6f 20 61 20 72 61  finities to a ra
16840 6e 67 65 20 6f 66 20 50 32 20 72 65 67 69 73 74  nge of P2 regist
16850 65 72 73 20 73 74 61 72 74 69 6e 67 20 77 69 74  ers starting wit
16860 68 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  h P1..**.** P4 i
16870 73 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20  s a string that 
16880 69 73 20 50 32 20 63 68 61 72 61 63 74 65 72 73  is P2 characters
16890 20 6c 6f 6e 67 2e 20 54 68 65 20 4e 2d 74 68 20   long. The N-th 
168a0 63 68 61 72 61 63 74 65 72 20 6f 66 20 74 68 65  character of the
168b0 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63  .** string indic
168c0 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  ates the column 
168d0 61 66 66 69 6e 69 74 79 20 74 68 61 74 20 73 68  affinity that sh
168e0 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72  ould be used for
168f0 20 74 68 65 20 4e 2d 74 68 0a 2a 2a 20 6d 65 6d   the N-th.** mem
16900 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68 65 20  ory cell in the 
16910 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  range..*/.case O
16920 50 5f 41 66 66 69 6e 69 74 79 3a 20 7b 0a 20 20  P_Affinity: {.  
16930 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 66 66  const char *zAff
16940 69 6e 69 74 79 3b 20 20 20 2f 2a 20 54 68 65 20  inity;   /* The 
16950 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65 20 61  affinity to be a
16960 70 70 6c 69 65 64 20 2a 2f 0a 0a 20 20 7a 41 66  pplied */..  zAf
16970 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34  finity = pOp->p4
16980 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41  .z;.  assert( zA
16990 66 66 69 6e 69 74 79 21 3d 30 20 29 3b 0a 20 20  ffinity!=0 );.  
169a0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
169b0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 7a  0 );.  assert( z
169c0 41 66 66 69 6e 69 74 79 5b 70 4f 70 2d 3e 70 32  Affinity[pOp->p2
169d0 5d 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d  ]==0 );.  pIn1 =
169e0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
169f0 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72  .  do{.    asser
16a00 74 28 20 70 49 6e 31 20 3c 3d 20 26 70 2d 3e 61  t( pIn1 <= &p->a
16a10 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  Mem[(p->nMem+1 -
16a20 20 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b   p->nCursor)] );
16a30 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
16a40 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b  IsValid(pIn1) );
16a50 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69  .    applyAffini
16a60 74 79 28 70 49 6e 31 2c 20 2a 28 7a 41 66 66 69  ty(pIn1, *(zAffi
16a70 6e 69 74 79 2b 2b 29 2c 20 65 6e 63 6f 64 69 6e  nity++), encodin
16a80 67 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a  g);.    pIn1++;.
16a90 20 20 7d 77 68 69 6c 65 28 20 7a 41 66 66 69 6e    }while( zAffin
16aa0 69 74 79 5b 30 5d 20 29 3b 0a 20 20 62 72 65 61  ity[0] );.  brea
16ab0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
16ac0 20 4d 61 6b 65 52 65 63 6f 72 64 20 50 31 20 50   MakeRecord P1 P
16ad0 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
16ae0 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 6d 6b 72  opsis: r[P3]=mkr
16af0 65 63 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a  ec(r[P1@P2]).**.
16b00 2a 2a 20 43 6f 6e 76 65 72 74 20 50 32 20 72 65  ** Convert P2 re
16b10 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e  gisters beginnin
16b20 67 20 77 69 74 68 20 50 31 20 69 6e 74 6f 20 74  g with P1 into t
16b30 68 65 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d 61  he [record forma
16b40 74 5d 0a 2a 2a 20 75 73 65 20 61 73 20 61 20 64  t].** use as a d
16b50 61 74 61 20 72 65 63 6f 72 64 20 69 6e 20 61 20  ata record in a 
16b60 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
16b70 72 20 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e  r as a key.** in
16b80 20 61 6e 20 69 6e 64 65 78 2e 20 20 54 68 65 20   an index.  The 
16b90 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65  OP_Column opcode
16ba0 20 63 61 6e 20 64 65 63 6f 64 65 20 74 68 65 20   can decode the 
16bb0 72 65 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a  record later..**
16bc0 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20  .** P4 may be a 
16bd0 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50  string that is P
16be0 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e  2 characters lon
16bf0 67 2e 20 20 54 68 65 20 4e 2d 74 68 20 63 68 61  g.  The N-th cha
16c00 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a  racter of the.**
16c10 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65   string indicate
16c20 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66  s the column aff
16c30 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c  inity that shoul
16c40 64 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68  d be used for th
16c50 65 20 4e 2d 74 68 0a 2a 2a 20 66 69 65 6c 64 20  e N-th.** field 
16c60 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79  of the index key
16c70 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61 70 70  ..**.** The mapp
16c80 69 6e 67 20 66 72 6f 6d 20 63 68 61 72 61 63 74  ing from charact
16c90 65 72 20 74 6f 20 61 66 66 69 6e 69 74 79 20 69  er to affinity i
16ca0 73 20 67 69 76 65 6e 20 62 79 20 74 68 65 20 53  s given by the S
16cb0 51 4c 49 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61  QLITE_AFF_.** ma
16cc0 63 72 6f 73 20 64 65 66 69 6e 65 64 20 69 6e 20  cros defined in 
16cd0 73 71 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a  sqliteInt.h..**.
16ce0 2a 2a 20 49 66 20 50 34 20 69 73 20 4e 55 4c 4c  ** If P4 is NULL
16cf0 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64 65 78 20   then all index 
16d00 66 69 65 6c 64 73 20 68 61 76 65 20 74 68 65 20  fields have the 
16d10 61 66 66 69 6e 69 74 79 20 42 4c 4f 42 2e 0a 2a  affinity BLOB..*
16d20 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 6b 65 52 65  /.case OP_MakeRe
16d30 63 6f 72 64 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e  cord: {.  u8 *zN
16d40 65 77 52 65 63 6f 72 64 3b 20 20 20 20 20 20 20  ewRecord;       
16d50 20 2f 2a 20 41 20 62 75 66 66 65 72 20 74 6f 20   /* A buffer to 
16d60 68 6f 6c 64 20 74 68 65 20 64 61 74 61 20 66 6f  hold the data fo
16d70 72 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64  r the new record
16d80 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b   */.  Mem *pRec;
16d90 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
16da0 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a  The new record *
16db0 2f 0a 20 20 75 36 34 20 6e 44 61 74 61 3b 20 20  /.  u64 nData;  
16dc0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
16dd0 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
16de0 20 64 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20   data space */. 
16df0 20 69 6e 74 20 6e 48 64 72 3b 20 20 20 20 20 20   int nHdr;      
16e00 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
16e10 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65  r of bytes of he
16e20 61 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20  ader space */.  
16e30 69 36 34 20 6e 42 79 74 65 3b 20 20 20 20 20 20  i64 nByte;      
16e40 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 20 73         /* Data s
16e50 70 61 63 65 20 72 65 71 75 69 72 65 64 20 66 6f  pace required fo
16e60 72 20 74 68 69 73 20 72 65 63 6f 72 64 20 2a 2f  r this record */
16e70 0a 20 20 69 36 34 20 6e 5a 65 72 6f 3b 20 20 20  .  i64 nZero;   
16e80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
16e90 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65  ber of zero byte
16ea0 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20  s at the end of 
16eb0 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
16ec0 69 6e 74 20 6e 56 61 72 69 6e 74 3b 20 20 20 20  int nVarint;    
16ed0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
16ee0 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61 20 76   of bytes in a v
16ef0 61 72 69 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73  arint */.  u32 s
16f00 65 72 69 61 6c 5f 74 79 70 65 3b 20 20 20 20 20  erial_type;     
16f10 20 20 2f 2a 20 54 79 70 65 20 66 69 65 6c 64 20    /* Type field 
16f20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30  */.  Mem *pData0
16f30 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  ;           /* F
16f40 69 72 73 74 20 66 69 65 6c 64 20 74 6f 20 62 65  irst field to be
16f50 20 63 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74   combined into t
16f60 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d  he record */.  M
16f70 65 6d 20 2a 70 4c 61 73 74 3b 20 20 20 20 20 20  em *pLast;      
16f80 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 66 69        /* Last fi
16f90 65 6c 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72  eld of the recor
16fa0 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c  d */.  int nFiel
16fb0 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  d;            /*
16fc0 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64   Number of field
16fd0 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20  s in the record 
16fe0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 69  */.  char *zAffi
16ff0 6e 69 74 79 3b 20 20 20 20 20 20 20 2f 2a 20 54  nity;       /* T
17000 68 65 20 61 66 66 69 6e 69 74 79 20 73 74 72 69  he affinity stri
17010 6e 67 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72  ng for the recor
17020 64 20 2a 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f  d */.  int file_
17030 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a  format;       /*
17040 20 46 69 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20   File format to 
17050 75 73 65 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67  use for encoding
17060 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20   */.  int i;    
17070 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
17080 53 70 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e  Space used in zN
17090 65 77 52 65 63 6f 72 64 5b 5d 20 68 65 61 64 65  ewRecord[] heade
170a0 72 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20  r */.  int j;   
170b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
170c0 20 53 70 61 63 65 20 75 73 65 64 20 69 6e 20 7a   Space used in z
170d0 4e 65 77 52 65 63 6f 72 64 5b 5d 20 63 6f 6e 74  NewRecord[] cont
170e0 65 6e 74 20 2a 2f 0a 20 20 75 33 32 20 6c 65 6e  ent */.  u32 len
170f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
17100 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 61 20 66  /* Length of a f
17110 69 65 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73  ield */..  /* As
17120 73 75 6d 69 6e 67 20 74 68 65 20 72 65 63 6f 72  suming the recor
17130 64 20 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65  d contains N fie
17140 6c 64 73 2c 20 74 68 65 20 72 65 63 6f 72 64 20  lds, the record 
17150 66 6f 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a  format looks.  *
17160 2a 20 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a  * like this:.  *
17170 2a 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d  *.  ** ---------
17180 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17190 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
171a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
171b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
171c0 20 20 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20    ** | hdr-size 
171d0 7c 20 74 79 70 65 20 30 20 7c 20 74 79 70 65 20  | type 0 | type 
171e0 31 20 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e  1 | ... | type N
171f0 2d 31 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e  -1 | data0 | ...
17200 20 7c 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20   | data N-1 | . 
17210 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   ** ------------
17220 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17230 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17240 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17250 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a  ------------.  *
17260 2a 0a 20 20 2a 2a 20 44 61 74 61 28 30 29 20 69  *.  ** Data(0) i
17270 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67  s taken from reg
17280 69 73 74 65 72 20 50 31 2e 20 20 44 61 74 61 28  ister P1.  Data(
17290 31 29 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65  1) comes from re
172a0 67 69 73 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a  gister P1+1.  **
172b0 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20   and so forth.. 
172c0 20 2a 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74 79   **.  ** Each ty
172d0 70 65 20 66 69 65 6c 64 20 69 73 20 61 20 76 61  pe field is a va
172e0 72 69 6e 74 20 72 65 70 72 65 73 65 6e 74 69 6e  rint representin
172f0 67 20 74 68 65 20 73 65 72 69 61 6c 20 74 79 70  g the serial typ
17300 65 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 63  e of the .  ** c
17310 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 64 61 74  orresponding dat
17320 61 20 65 6c 65 6d 65 6e 74 20 28 73 65 65 20 73  a element (see s
17330 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
17340 54 79 70 65 28 29 29 2e 20 54 68 65 0a 20 20 2a  Type()). The.  *
17350 2a 20 68 64 72 2d 73 69 7a 65 20 66 69 65 6c 64  * hdr-size field
17360 20 69 73 20 61 6c 73 6f 20 61 20 76 61 72 69 6e   is also a varin
17370 74 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6f  t which is the o
17380 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62  ffset from the b
17390 65 67 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66  eginning.  ** of
173a0 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 64   the record to d
173b0 61 74 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61  ata0..  */.  nDa
173c0 74 61 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  ta = 0;         
173d0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
173e0 65 73 20 6f 66 20 64 61 74 61 20 73 70 61 63 65  es of data space
173f0 20 2a 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20   */.  nHdr = 0; 
17400 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
17410 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68  er of bytes of h
17420 65 61 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20  eader space */. 
17430 20 6e 5a 65 72 6f 20 3d 20 30 3b 20 20 20 20 20   nZero = 0;     
17440 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
17450 20 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20 74   zero bytes at t
17460 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65  he end of the re
17470 63 6f 72 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64  cord */.  nField
17480 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41   = pOp->p1;.  zA
17490 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70  ffinity = pOp->p
174a0 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  4.z;.  assert( n
174b0 46 69 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e  Field>0 && pOp->
174c0 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b  p2>0 && pOp->p2+
174d0 6e 46 69 65 6c 64 3c 3d 28 70 2d 3e 6e 4d 65 6d  nField<=(p->nMem
174e0 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
174f0 2b 31 20 29 3b 0a 20 20 70 44 61 74 61 30 20 3d  +1 );.  pData0 =
17500 20 26 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a   &aMem[nField];.
17510 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e    nField = pOp->
17520 70 32 3b 0a 20 20 70 4c 61 73 74 20 3d 20 26 70  p2;.  pLast = &p
17530 44 61 74 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b  Data0[nField-1];
17540 0a 20 20 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d  .  file_format =
17550 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65   p->minWriteFile
17560 46 6f 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20 49 64  Format;..  /* Id
17570 65 6e 74 69 66 79 20 74 68 65 20 6f 75 74 70 75  entify the outpu
17580 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 20 20  t register */.  
17590 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
175a0 70 4f 70 2d 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e  pOp->p1 || pOp->
175b0 70 33 3e 3d 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d  p3>=pOp->p1+pOp-
175c0 3e 70 32 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  >p2 );.  pOut = 
175d0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
175e0 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
175f0 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20  ge(p, pOut);..  
17600 2f 2a 20 41 70 70 6c 79 20 74 68 65 20 72 65 71  /* Apply the req
17610 75 65 73 74 65 64 20 61 66 66 69 6e 69 74 79 20  uested affinity 
17620 74 6f 20 61 6c 6c 20 69 6e 70 75 74 73 0a 20 20  to all inputs.  
17630 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 44 61  */.  assert( pDa
17640 74 61 30 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20  ta0<=pLast );.  
17650 69 66 28 20 7a 41 66 66 69 6e 69 74 79 20 29 7b  if( zAffinity ){
17660 0a 20 20 20 20 70 52 65 63 20 3d 20 70 44 61 74  .    pRec = pDat
17670 61 30 3b 0a 20 20 20 20 64 6f 7b 0a 20 20 20 20  a0;.    do{.    
17680 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
17690 70 52 65 63 2b 2b 2c 20 2a 28 7a 41 66 66 69 6e  pRec++, *(zAffin
176a0 69 74 79 2b 2b 29 2c 20 65 6e 63 6f 64 69 6e 67  ity++), encoding
176b0 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
176c0 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d 3d 3d 30   zAffinity[0]==0
176d0 20 7c 7c 20 70 52 65 63 3c 3d 70 4c 61 73 74 20   || pRec<=pLast 
176e0 29 3b 0a 20 20 20 20 7d 77 68 69 6c 65 28 20 7a  );.    }while( z
176f0 41 66 66 69 6e 69 74 79 5b 30 5d 20 29 3b 0a 20  Affinity[0] );. 
17700 20 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54   }..#ifdef SQLIT
17710 45 5f 45 4e 41 42 4c 45 5f 4e 55 4c 4c 5f 54 52  E_ENABLE_NULL_TR
17720 49 4d 0a 20 20 2f 2a 20 4e 55 4c 4c 73 20 63 61  IM.  /* NULLs ca
17730 6e 20 62 65 20 73 61 66 65 6c 79 20 74 72 69 6d  n be safely trim
17740 6d 65 64 20 66 72 6f 6d 20 74 68 65 20 65 6e 64  med from the end
17750 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 2c 20   of the record, 
17760 61 73 20 6c 6f 6e 67 20 61 73 0a 20 20 2a 2a 20  as long as.  ** 
17770 61 73 20 74 68 65 20 73 63 68 65 6d 61 20 66 6f  as the schema fo
17780 72 6d 61 74 20 69 73 20 32 20 6f 72 20 6d 6f 72  rmat is 2 or mor
17790 65 20 61 6e 64 20 6e 6f 6e 65 20 6f 66 20 74 68  e and none of th
177a0 65 20 6f 6d 69 74 74 65 64 20 63 6f 6c 75 6d 6e  e omitted column
177b0 73 0a 20 20 2a 2a 20 68 61 76 65 20 61 20 6e 6f  s.  ** have a no
177c0 6e 2d 4e 55 4c 4c 20 64 65 66 61 75 6c 74 20 76  n-NULL default v
177d0 61 6c 75 65 2e 20 20 41 6c 73 6f 2c 20 74 68 65  alue.  Also, the
177e0 20 72 65 63 6f 72 64 20 6d 75 73 74 20 62 65 20   record must be 
177f0 6c 65 66 74 20 77 69 74 68 0a 20 20 2a 2a 20 61  left with.  ** a
17800 74 20 6c 65 61 73 74 20 6f 6e 65 20 66 69 65 6c  t least one fiel
17810 64 2e 20 20 49 66 20 50 35 3e 30 20 74 68 65 6e  d.  If P5>0 then
17820 20 69 74 20 77 69 6c 6c 20 62 65 20 6f 6e 65 20   it will be one 
17830 6d 6f 72 65 20 74 68 61 6e 20 74 68 65 0a 20 20  more than the.  
17840 2a 2a 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  ** index of the 
17850 72 69 67 68 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d  right-most colum
17860 6e 20 77 69 74 68 20 61 20 6e 6f 6e 2d 4e 55 4c  n with a non-NUL
17870 4c 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  L default value 
17880 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  */.  if( pOp->p5
17890 20 29 7b 0a 20 20 20 20 77 68 69 6c 65 28 20 28   ){.    while( (
178a0 70 4c 61 73 74 2d 3e 66 6c 61 67 73 20 26 20 4d  pLast->flags & M
178b0 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 26 26 20 6e  EM_Null)!=0 && n
178c0 46 69 65 6c 64 3e 70 4f 70 2d 3e 70 35 20 29 7b  Field>pOp->p5 ){
178d0 0a 20 20 20 20 20 20 70 4c 61 73 74 2d 2d 3b 0a  .      pLast--;.
178e0 20 20 20 20 20 20 6e 46 69 65 6c 64 2d 2d 3b 0a        nField--;.
178f0 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66      }.  }.#endif
17900 0a 0a 20 20 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f  ..  /* Loop thro
17910 75 67 68 20 74 68 65 20 65 6c 65 6d 65 6e 74 73  ugh the elements
17920 20 74 68 61 74 20 77 69 6c 6c 20 6d 61 6b 65 20   that will make 
17930 75 70 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  up the record to
17940 20 66 69 67 75 72 65 0a 20 20 2a 2a 20 6f 75 74   figure.  ** out
17950 20 68 6f 77 20 6d 75 63 68 20 73 70 61 63 65 20   how much space 
17960 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  is required for 
17970 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 0a  the new record..
17980 20 20 2a 2f 0a 20 20 70 52 65 63 20 3d 20 70 4c    */.  pRec = pL
17990 61 73 74 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61  ast;.  do{.    a
179a0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
179b0 64 28 70 52 65 63 29 20 29 3b 0a 20 20 20 20 73  d(pRec) );.    s
179c0 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c  erial_type = sql
179d0 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
179e0 70 65 28 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f  pe(pRec, file_fo
179f0 72 6d 61 74 2c 20 26 6c 65 6e 29 3b 0a 20 20 20  rmat, &len);.   
17a00 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73   if( pRec->flags
17a10 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20   & MEM_Zero ){. 
17a20 20 20 20 20 20 69 66 28 20 73 65 72 69 61 6c 5f       if( serial_
17a30 74 79 70 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20  type==0 ){.     
17a40 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 77 69 74     /* Values wit
17a50 68 20 4d 45 4d 5f 4e 75 6c 6c 20 61 6e 64 20 4d  h MEM_Null and M
17a60 45 4d 5f 5a 65 72 6f 20 61 72 65 20 63 72 65 61  EM_Zero are crea
17a70 74 65 64 20 62 79 20 78 43 6f 6c 75 6d 6e 20 76  ted by xColumn v
17a80 69 72 74 75 61 6c 0a 20 20 20 20 20 20 20 20 2a  irtual.        *
17a90 2a 20 74 61 62 6c 65 20 6d 65 74 68 6f 64 73 20  * table methods 
17aa0 74 68 61 74 20 6e 65 76 65 72 20 69 6e 76 6f 6b  that never invok
17ab0 65 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  e sqlite3_result
17ac0 5f 78 78 78 78 78 28 29 20 77 68 69 6c 65 0a 20  _xxxxx() while. 
17ad0 20 20 20 20 20 20 20 2a 2a 20 63 6f 6d 70 75 74         ** comput
17ae0 69 6e 67 20 61 6e 20 75 6e 63 68 61 6e 67 69 6e  ing an unchangin
17af0 67 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 69  g column value i
17b00 6e 20 61 6e 20 55 50 44 41 54 45 20 73 74 61 74  n an UPDATE stat
17b10 65 6d 65 6e 74 2e 0a 20 20 20 20 20 20 20 20 2a  ement..        *
17b20 2a 20 47 69 76 65 20 73 75 63 68 20 76 61 6c 75  * Give such valu
17b30 65 73 20 61 20 73 70 65 63 69 61 6c 20 69 6e 74  es a special int
17b40 65 72 6e 61 6c 2d 75 73 65 2d 6f 6e 6c 79 20 73  ernal-use-only s
17b50 65 72 69 61 6c 2d 74 79 70 65 20 6f 66 20 31 30  erial-type of 10
17b60 0a 20 20 20 20 20 20 20 20 2a 2a 20 73 6f 20 74  .        ** so t
17b70 68 61 74 20 74 68 65 79 20 63 61 6e 20 62 65 20  hat they can be 
17b80 70 61 73 73 65 64 20 74 68 72 6f 75 67 68 20 74  passed through t
17b90 6f 20 78 55 70 64 61 74 65 20 61 6e 64 20 68 61  o xUpdate and ha
17ba0 76 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 20  ve.        ** a 
17bb0 74 72 75 65 20 73 71 6c 69 74 65 33 5f 76 61 6c  true sqlite3_val
17bc0 75 65 5f 6e 6f 63 68 61 6e 67 65 28 29 2e 20 2a  ue_nochange(). *
17bd0 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  /.        assert
17be0 28 20 70 4f 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41  ( pOp->p5==OPFLA
17bf0 47 5f 4e 4f 43 48 4e 47 5f 4d 41 47 49 43 20 7c  G_NOCHNG_MAGIC |
17c00 7c 20 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a  | CORRUPT_DB );.
17c10 20 20 20 20 20 20 20 20 73 65 72 69 61 6c 5f 74          serial_t
17c20 79 70 65 20 3d 20 31 30 3b 0a 20 20 20 20 20 20  ype = 10;.      
17c30 7d 65 6c 73 65 20 69 66 28 20 6e 44 61 74 61 20  }else if( nData 
17c40 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 73  ){.        if( s
17c50 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70  qlite3VdbeMemExp
17c60 61 6e 64 42 6c 6f 62 28 70 52 65 63 29 20 29 20  andBlob(pRec) ) 
17c70 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
17c80 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
17c90 20 20 6e 5a 65 72 6f 20 2b 3d 20 70 52 65 63 2d    nZero += pRec-
17ca0 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 20 20  >u.nZero;.      
17cb0 20 20 6c 65 6e 20 2d 3d 20 70 52 65 63 2d 3e 75    len -= pRec->u
17cc0 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 20 20 7d 0a  .nZero;.      }.
17cd0 20 20 20 20 7d 0a 20 20 20 20 6e 44 61 74 61 20      }.    nData 
17ce0 2b 3d 20 6c 65 6e 3b 0a 20 20 20 20 74 65 73 74  += len;.    test
17cf0 63 61 73 65 28 20 73 65 72 69 61 6c 5f 74 79 70  case( serial_typ
17d00 65 3d 3d 31 32 37 20 29 3b 0a 20 20 20 20 74 65  e==127 );.    te
17d10 73 74 63 61 73 65 28 20 73 65 72 69 61 6c 5f 74  stcase( serial_t
17d20 79 70 65 3d 3d 31 32 38 20 29 3b 0a 20 20 20 20  ype==128 );.    
17d30 6e 48 64 72 20 2b 3d 20 73 65 72 69 61 6c 5f 74  nHdr += serial_t
17d40 79 70 65 3c 3d 31 32 37 20 3f 20 31 20 3a 20 73  ype<=127 ? 1 : s
17d50 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28  qlite3VarintLen(
17d60 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20  serial_type);.  
17d70 20 20 70 52 65 63 2d 3e 75 54 65 6d 70 20 3d 20    pRec->uTemp = 
17d80 73 65 72 69 61 6c 5f 74 79 70 65 3b 0a 20 20 20  serial_type;.   
17d90 20 69 66 28 20 70 52 65 63 3d 3d 70 44 61 74 61   if( pRec==pData
17da0 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 70  0 ) break;.    p
17db0 52 65 63 2d 2d 3b 0a 20 20 7d 77 68 69 6c 65 28  Rec--;.  }while(
17dc0 31 29 3b 0a 0a 20 20 2f 2a 20 45 56 49 44 45 4e  1);..  /* EVIDEN
17dd0 43 45 2d 4f 46 3a 20 52 2d 32 32 35 36 34 2d 31  CE-OF: R-22564-1
17de0 31 36 34 37 20 54 68 65 20 68 65 61 64 65 72 20  1647 The header 
17df0 62 65 67 69 6e 73 20 77 69 74 68 20 61 20 73 69  begins with a si
17e00 6e 67 6c 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a  ngle varint.  **
17e10 20 77 68 69 63 68 20 64 65 74 65 72 6d 69 6e 65   which determine
17e20 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  s the total numb
17e30 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74  er of bytes in t
17e40 68 65 20 68 65 61 64 65 72 2e 20 54 68 65 20 76  he header. The v
17e50 61 72 69 6e 74 0a 20 20 2a 2a 20 76 61 6c 75 65  arint.  ** value
17e60 20 69 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20   is the size of 
17e70 74 68 65 20 68 65 61 64 65 72 20 69 6e 20 62 79  the header in by
17e80 74 65 73 20 69 6e 63 6c 75 64 69 6e 67 20 74 68  tes including th
17e90 65 20 73 69 7a 65 20 76 61 72 69 6e 74 0a 20 20  e size varint.  
17ea0 2a 2a 20 69 74 73 65 6c 66 2e 20 2a 2f 0a 20 20  ** itself. */.  
17eb0 74 65 73 74 63 61 73 65 28 20 6e 48 64 72 3d 3d  testcase( nHdr==
17ec0 31 32 36 20 29 3b 0a 20 20 74 65 73 74 63 61 73  126 );.  testcas
17ed0 65 28 20 6e 48 64 72 3d 3d 31 32 37 20 29 3b 0a  e( nHdr==127 );.
17ee0 20 20 69 66 28 20 6e 48 64 72 3c 3d 31 32 36 20    if( nHdr<=126 
17ef0 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 63 6f  ){.    /* The co
17f00 6d 6d 6f 6e 20 63 61 73 65 20 2a 2f 0a 20 20 20  mmon case */.   
17f10 20 6e 48 64 72 20 2b 3d 20 31 3b 0a 20 20 7d 65   nHdr += 1;.  }e
17f20 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 52 61 72 65  lse{.    /* Rare
17f30 20 63 61 73 65 20 6f 66 20 61 20 72 65 61 6c 6c   case of a reall
17f40 79 20 6c 61 72 67 65 20 68 65 61 64 65 72 20 2a  y large header *
17f50 2f 0a 20 20 20 20 6e 56 61 72 69 6e 74 20 3d 20  /.    nVarint = 
17f60 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e  sqlite3VarintLen
17f70 28 6e 48 64 72 29 3b 0a 20 20 20 20 6e 48 64 72  (nHdr);.    nHdr
17f80 20 2b 3d 20 6e 56 61 72 69 6e 74 3b 0a 20 20 20   += nVarint;.   
17f90 20 69 66 28 20 6e 56 61 72 69 6e 74 3c 73 71 6c   if( nVarint<sql
17fa0 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48  ite3VarintLen(nH
17fb0 64 72 29 20 29 20 6e 48 64 72 2b 2b 3b 0a 20 20  dr) ) nHdr++;.  
17fc0 7d 0a 20 20 6e 42 79 74 65 20 3d 20 6e 48 64 72  }.  nByte = nHdr
17fd0 2b 6e 44 61 74 61 3b 0a 0a 20 20 2f 2a 20 4d 61  +nData;..  /* Ma
17fe0 6b 65 20 73 75 72 65 20 74 68 65 20 6f 75 74 70  ke sure the outp
17ff0 75 74 20 72 65 67 69 73 74 65 72 20 68 61 73 20  ut register has 
18000 61 20 62 75 66 66 65 72 20 6c 61 72 67 65 20 65  a buffer large e
18010 6e 6f 75 67 68 20 74 6f 20 73 74 6f 72 65 20 0a  nough to store .
18020 20 20 2a 2a 20 74 68 65 20 6e 65 77 20 72 65 63    ** the new rec
18030 6f 72 64 2e 20 54 68 65 20 6f 75 74 70 75 74 20  ord. The output 
18040 72 65 67 69 73 74 65 72 20 28 70 4f 70 2d 3e 70  register (pOp->p
18050 33 29 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65  3) is not allowe
18060 64 20 74 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e 65  d to.  ** be one
18070 20 6f 66 20 74 68 65 20 69 6e 70 75 74 20 72 65   of the input re
18080 67 69 73 74 65 72 73 20 28 62 65 63 61 75 73 65  gisters (because
18090 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   the following c
180a0 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69  all to.  ** sqli
180b0 74 65 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41  te3VdbeMemClearA
180c0 6e 64 52 65 73 69 7a 65 28 29 20 63 6f 75 6c 64  ndResize() could
180d0 20 63 6c 6f 62 62 65 72 20 74 68 65 20 76 61 6c   clobber the val
180e0 75 65 20 62 65 66 6f 72 65 20 69 74 20 69 73 20  ue before it is 
180f0 75 73 65 64 29 2e 0a 20 20 2a 2f 0a 20 20 69 66  used)..  */.  if
18100 28 20 6e 42 79 74 65 2b 6e 5a 65 72 6f 3c 3d 70  ( nByte+nZero<=p
18110 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 29 7b  Out->szMalloc ){
18120 0a 20 20 20 20 2f 2a 20 54 68 65 20 6f 75 74 70  .    /* The outp
18130 75 74 20 72 65 67 69 73 74 65 72 20 69 73 20 61  ut register is a
18140 6c 72 65 61 64 79 20 6c 61 72 67 65 20 65 6e 6f  lready large eno
18150 75 67 68 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  ugh to hold the 
18160 72 65 63 6f 72 64 2e 0a 20 20 20 20 2a 2a 20 4e  record..    ** N
18170 6f 20 65 72 72 6f 72 20 63 68 65 63 6b 73 20 6f  o error checks o
18180 72 20 62 75 66 66 65 72 20 65 6e 6c 61 72 67 65  r buffer enlarge
18190 6d 65 6e 74 20 69 73 20 72 65 71 75 69 72 65 64  ment is required
181a0 20 2a 2f 0a 20 20 20 20 70 4f 75 74 2d 3e 7a 20   */.    pOut->z 
181b0 3d 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b  = pOut->zMalloc;
181c0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
181d0 20 4e 65 65 64 20 74 6f 20 6d 61 6b 65 20 73 75   Need to make su
181e0 72 65 20 74 68 61 74 20 74 68 65 20 6f 75 74 70  re that the outp
181f0 75 74 20 69 73 20 6e 6f 74 20 74 6f 6f 20 62 69  ut is not too bi
18200 67 20 61 6e 64 20 74 68 65 6e 20 65 6e 6c 61 72  g and then enlar
18210 67 65 0a 20 20 20 20 2a 2a 20 74 68 65 20 6f 75  ge.    ** the ou
18220 74 70 75 74 20 72 65 67 69 73 74 65 72 20 74 6f  tput register to
18230 20 68 6f 6c 64 20 74 68 65 20 66 75 6c 6c 20 72   hold the full r
18240 65 73 75 6c 74 20 2a 2f 0a 20 20 20 20 69 66 28  esult */.    if(
18250 20 6e 42 79 74 65 2b 6e 5a 65 72 6f 3e 64 62 2d   nByte+nZero>db-
18260 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
18270 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
18280 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62        goto too_b
18290 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ig;.    }.    if
182a0 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
182b0 43 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28 70  ClearAndResize(p
182c0 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 29  Out, (int)nByte)
182d0 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e   ){.      goto n
182e0 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 7d  o_mem;.    }.  }
182f0 0a 20 20 7a 4e 65 77 52 65 63 6f 72 64 20 3d 20  .  zNewRecord = 
18300 28 75 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a  (u8 *)pOut->z;..
18310 20 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20 72    /* Write the r
18320 65 63 6f 72 64 20 2a 2f 0a 20 20 69 20 3d 20 70  ecord */.  i = p
18330 75 74 56 61 72 69 6e 74 33 32 28 7a 4e 65 77 52  utVarint32(zNewR
18340 65 63 6f 72 64 2c 20 6e 48 64 72 29 3b 0a 20 20  ecord, nHdr);.  
18350 6a 20 3d 20 6e 48 64 72 3b 0a 20 20 61 73 73 65  j = nHdr;.  asse
18360 72 74 28 20 70 44 61 74 61 30 3c 3d 70 4c 61 73  rt( pData0<=pLas
18370 74 20 29 3b 0a 20 20 70 52 65 63 20 3d 20 70 44  t );.  pRec = pD
18380 61 74 61 30 3b 0a 20 20 64 6f 7b 0a 20 20 20 20  ata0;.  do{.    
18390 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 70 52  serial_type = pR
183a0 65 63 2d 3e 75 54 65 6d 70 3b 0a 20 20 20 20 2f  ec->uTemp;.    /
183b0 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  * EVIDENCE-OF: R
183c0 2d 30 36 35 32 39 2d 34 37 33 36 32 20 46 6f 6c  -06529-47362 Fol
183d0 6c 6f 77 69 6e 67 20 74 68 65 20 73 69 7a 65 20  lowing the size 
183e0 76 61 72 69 6e 74 20 61 72 65 20 6f 6e 65 20 6f  varint are one o
183f0 72 20 6d 6f 72 65 0a 20 20 20 20 2a 2a 20 61 64  r more.    ** ad
18400 64 69 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74 73  ditional varints
18410 2c 20 6f 6e 65 20 70 65 72 20 63 6f 6c 75 6d 6e  , one per column
18420 2e 20 2a 2f 0a 20 20 20 20 69 20 2b 3d 20 70 75  . */.    i += pu
18430 74 56 61 72 69 6e 74 33 32 28 26 7a 4e 65 77 52  tVarint32(&zNewR
18440 65 63 6f 72 64 5b 69 5d 2c 20 73 65 72 69 61 6c  ecord[i], serial
18450 5f 74 79 70 65 29 3b 20 20 20 20 20 20 20 20 20  _type);         
18460 20 20 20 2f 2a 20 73 65 72 69 61 6c 20 74 79 70     /* serial typ
18470 65 20 2a 2f 0a 20 20 20 20 2f 2a 20 45 56 49 44  e */.    /* EVID
18480 45 4e 43 45 2d 4f 46 3a 20 52 2d 36 34 35 33 36  ENCE-OF: R-64536
18490 2d 35 31 37 32 38 20 54 68 65 20 76 61 6c 75 65  -51728 The value
184a0 73 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  s for each colum
184b0 6e 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 0a  n in the record.
184c0 20 20 20 20 2a 2a 20 69 6d 6d 65 64 69 61 74 65      ** immediate
184d0 6c 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20 68 65  ly follow the he
184e0 61 64 65 72 2e 20 2a 2f 0a 20 20 20 20 6a 20 2b  ader. */.    j +
184f0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  = sqlite3VdbeSer
18500 69 61 6c 50 75 74 28 26 7a 4e 65 77 52 65 63 6f  ialPut(&zNewReco
18510 72 64 5b 6a 5d 2c 20 70 52 65 63 2c 20 73 65 72  rd[j], pRec, ser
18520 69 61 6c 5f 74 79 70 65 29 3b 20 2f 2a 20 63 6f  ial_type); /* co
18530 6e 74 65 6e 74 20 2a 2f 0a 20 20 7d 77 68 69 6c  ntent */.  }whil
18540 65 28 20 28 2b 2b 70 52 65 63 29 3c 3d 70 4c 61  e( (++pRec)<=pLa
18550 73 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  st );.  assert( 
18560 69 3d 3d 6e 48 64 72 20 29 3b 0a 20 20 61 73 73  i==nHdr );.  ass
18570 65 72 74 28 20 6a 3d 3d 6e 42 79 74 65 20 29 3b  ert( j==nByte );
18580 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
18590 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
185a0 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
185b0 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
185c0 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e  pOut->n = (int)n
185d0 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  Byte;.  pOut->fl
185e0 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 3b 0a  ags = MEM_Blob;.
185f0 20 20 69 66 28 20 6e 5a 65 72 6f 20 29 7b 0a 20    if( nZero ){. 
18600 20 20 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f     pOut->u.nZero
18610 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 70 4f   = nZero;.    pO
18620 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ut->flags |= MEM
18630 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20 52 45 47  _Zero;.  }.  REG
18640 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
18650 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50  >p3, pOut);.  UP
18660 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
18670 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  E(pOut);.  break
18680 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
18690 43 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20  Count P1 P2 * * 
186a0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
186b0 5b 50 32 5d 3d 63 6f 75 6e 74 28 29 0a 2a 2a 0a  [P2]=count().**.
186c0 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 6e 75 6d  ** Store the num
186d0 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 28  ber of entries (
186e0 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  an integer value
186f0 29 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f  ) in the table o
18700 72 20 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e  r index .** open
18710 65 64 20 62 79 20 63 75 72 73 6f 72 20 50 31 20  ed by cursor P1 
18720 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
18730 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
18740 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54  _OMIT_BTREECOUNT
18750 0a 63 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20  .case OP_Count: 
18760 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74  {         /* out
18770 32 20 2a 2f 0a 20 20 69 36 34 20 6e 45 6e 74 72  2 */.  i64 nEntr
18780 79 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  y;.  BtCursor *p
18790 43 72 73 72 3b 0a 0a 20 20 61 73 73 65 72 74 28  Crsr;..  assert(
187a0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
187b0 31 5d 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  1]->eCurType==CU
187c0 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
187d0 20 70 43 72 73 72 20 3d 20 70 2d 3e 61 70 43 73   pCrsr = p->apCs
187e0 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 75 63 2e 70  r[pOp->p1]->uc.p
187f0 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74  Cursor;.  assert
18800 28 20 70 43 72 73 72 20 29 3b 0a 20 20 6e 45 6e  ( pCrsr );.  nEn
18810 74 72 79 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74  try = 0;  /* Not
18820 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75   needed.  Only u
18830 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61  sed to silence a
18840 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72   warning. */.  r
18850 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
18860 43 6f 75 6e 74 28 70 43 72 73 72 2c 20 26 6e 45  Count(pCrsr, &nE
18870 6e 74 72 79 29 3b 0a 20 20 69 66 28 20 72 63 20  ntry);.  if( rc 
18880 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
18890 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 4f 75  _to_error;.  pOu
188a0 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
188b0 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f  se(p, pOp);.  pO
188c0 75 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74 72 79  ut->u.i = nEntry
188d0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
188e0 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  dif../* Opcode: 
188f0 53 61 76 65 70 6f 69 6e 74 20 50 31 20 2a 20 2a  Savepoint P1 * *
18900 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e   P4 *.**.** Open
18910 2c 20 72 65 6c 65 61 73 65 20 6f 72 20 72 6f 6c  , release or rol
18920 6c 62 61 63 6b 20 74 68 65 20 73 61 76 65 70 6f  lback the savepo
18930 69 6e 74 20 6e 61 6d 65 64 20 62 79 20 70 61 72  int named by par
18940 61 6d 65 74 65 72 20 50 34 2c 20 64 65 70 65 6e  ameter P4, depen
18950 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65 20 76  ding.** on the v
18960 61 6c 75 65 20 6f 66 20 50 31 2e 20 54 6f 20 6f  alue of P1. To o
18970 70 65 6e 20 61 20 6e 65 77 20 73 61 76 65 70 6f  pen a new savepo
18980 69 6e 74 2c 20 50 31 3d 3d 30 2e 20 54 6f 20 72  int, P1==0. To r
18990 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20  elease (commit) 
189a0 61 6e 0a 2a 2a 20 65 78 69 73 74 69 6e 67 20 73  an.** existing s
189b0 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c  avepoint, P1==1,
189c0 20 6f 72 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20   or to rollback 
189d0 61 6e 20 65 78 69 73 74 69 6e 67 20 73 61 76 65  an existing save
189e0 70 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a  point P1==2..*/.
189f0 63 61 73 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e  case OP_Savepoin
18a00 74 3a 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20  t: {.  int p1;  
18a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
18a30 6f 66 20 50 31 20 6f 70 65 72 61 6e 64 20 2a 2f  of P1 operand */
18a40 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  .  char *zName; 
18a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a60 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 73 61     /* Name of sa
18a70 76 65 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e 74  vepoint */.  int
18a80 20 6e 4e 61 6d 65 3b 0a 20 20 53 61 76 65 70 6f   nName;.  Savepo
18a90 69 6e 74 20 2a 70 4e 65 77 3b 0a 20 20 53 61 76  int *pNew;.  Sav
18aa0 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69  epoint *pSavepoi
18ab0 6e 74 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20  nt;.  Savepoint 
18ac0 2a 70 54 6d 70 3b 0a 20 20 69 6e 74 20 69 53 61  *pTmp;.  int iSa
18ad0 76 65 70 6f 69 6e 74 3b 0a 20 20 69 6e 74 20 69  vepoint;.  int i
18ae0 69 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e  i;..  p1 = pOp->
18af0 70 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 70 4f  p1;.  zName = pO
18b00 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41  p->p4.z;..  /* A
18b10 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20 70  ssert that the p
18b20 31 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 76  1 parameter is v
18b30 61 6c 69 64 2e 20 41 6c 73 6f 20 74 68 61 74 20  alid. Also that 
18b40 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f  if there is no o
18b50 70 65 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63  pen.  ** transac
18b60 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72 65  tion, then there
18b70 20 63 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20 73   cannot be any s
18b80 61 76 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f  avepoints. .  */
18b90 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70  .  assert( db->p
18ba0 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20  Savepoint==0 || 
18bb0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d  db->autoCommit==
18bc0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
18bd0 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47  1==SAVEPOINT_BEG
18be0 49 4e 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e  IN||p1==SAVEPOIN
18bf0 54 5f 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d 53  T_RELEASE||p1==S
18c00 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43  AVEPOINT_ROLLBAC
18c10 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  K );.  assert( d
18c20 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c 7c  b->pSavepoint ||
18c30 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
18c40 6f 6e 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 29  onSavepoint==0 )
18c50 3b 0a 20 20 61 73 73 65 72 74 28 20 63 68 65 63  ;.  assert( chec
18c60 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28  kSavepointCount(
18c70 64 62 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  db) );.  assert(
18c80 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b   p->bIsReader );
18c90 0a 0a 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45  ..  if( p1==SAVE
18ca0 50 4f 49 4e 54 5f 42 45 47 49 4e 20 29 7b 0a 20  POINT_BEGIN ){. 
18cb0 20 20 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65     if( db->nVdbe
18cc0 57 72 69 74 65 3e 30 20 29 7b 0a 20 20 20 20 20  Write>0 ){.     
18cd0 20 2f 2a 20 41 20 6e 65 77 20 73 61 76 65 70 6f   /* A new savepo
18ce0 69 6e 74 20 63 61 6e 6e 6f 74 20 62 65 20 63 72  int cannot be cr
18cf0 65 61 74 65 64 20 69 66 20 74 68 65 72 65 20 61  eated if there a
18d00 72 65 20 61 63 74 69 76 65 20 77 72 69 74 65 20  re active write 
18d10 0a 20 20 20 20 20 20 2a 2a 20 73 74 61 74 65 6d  .      ** statem
18d20 65 6e 74 73 20 28 69 2e 65 2e 20 6f 70 65 6e 20  ents (i.e. open 
18d30 72 65 61 64 2f 77 72 69 74 65 20 69 6e 63 72 65  read/write incre
18d40 6d 65 6e 74 61 6c 20 62 6c 6f 62 20 68 61 6e 64  mental blob hand
18d50 6c 65 73 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  les)..      */. 
18d60 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
18d70 45 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74  Error(p, "cannot
18d80 20 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e 74 20   open savepoint 
18d90 2d 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  - SQL statements
18da0 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a   in progress");.
18db0 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
18dc0 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73  E_BUSY;.    }els
18dd0 65 7b 0a 20 20 20 20 20 20 6e 4e 61 6d 65 20 3d  e{.      nName =
18de0 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
18df0 28 7a 4e 61 6d 65 29 3b 0a 0a 23 69 66 6e 64 65  (zName);..#ifnde
18e00 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
18e10 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 20 20 20  RTUALTABLE.     
18e20 20 2f 2a 20 54 68 69 73 20 63 61 6c 6c 20 69 73   /* This call is
18e30 20 4f 6b 20 65 76 65 6e 20 69 66 20 74 68 69 73   Ok even if this
18e40 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61 63   savepoint is ac
18e50 74 75 61 6c 6c 79 20 61 20 74 72 61 6e 73 61 63  tually a transac
18e60 74 69 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 73 61  tion.      ** sa
18e70 76 65 70 6f 69 6e 74 20 28 61 6e 64 20 74 68 65  vepoint (and the
18e80 72 65 66 6f 72 65 20 73 68 6f 75 6c 64 20 6e 6f  refore should no
18e90 74 20 70 72 6f 6d 70 74 20 78 53 61 76 65 70 6f  t prompt xSavepo
18ea0 69 6e 74 28 29 29 20 63 61 6c 6c 62 61 63 6b 73  int()) callbacks
18eb0 2e 0a 20 20 20 20 20 20 2a 2a 20 49 66 20 74 68  ..      ** If th
18ec0 69 73 20 69 73 20 61 20 74 72 61 6e 73 61 63 74  is is a transact
18ed0 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 20 62 65  ion savepoint be
18ee0 69 6e 67 20 6f 70 65 6e 65 64 2c 20 69 74 20 69  ing opened, it i
18ef0 73 20 67 75 61 72 61 6e 74 65 65 64 0a 20 20 20  s guaranteed.   
18f00 20 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20 64     ** that the d
18f10 62 2d 3e 61 56 54 72 61 6e 73 5b 5d 20 61 72 72  b->aVTrans[] arr
18f20 61 79 20 69 73 20 65 6d 70 74 79 2e 20 20 2a 2f  ay is empty.  */
18f30 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64  .      assert( d
18f40 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30  b->autoCommit==0
18f50 20 7c 7c 20 64 62 2d 3e 6e 56 54 72 61 6e 73 3d   || db->nVTrans=
18f60 3d 30 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  =0 );.      rc =
18f70 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65   sqlite3VtabSave
18f80 70 6f 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f  point(db, SAVEPO
18f90 49 4e 54 5f 42 45 47 49 4e 2c 0a 20 20 20 20 20  INT_BEGIN,.     
18fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fb0 20 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e             db->n
18fc0 53 74 61 74 65 6d 65 6e 74 2b 64 62 2d 3e 6e 53  Statement+db->nS
18fd0 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20  avepoint);.     
18fe0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
18ff0 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
19000 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65  due_to_error;.#e
19010 6e 64 69 66 0a 0a 20 20 20 20 20 20 2f 2a 20 43  ndif..      /* C
19020 72 65 61 74 65 20 61 20 6e 65 77 20 73 61 76 65  reate a new save
19030 70 6f 69 6e 74 20 73 74 72 75 63 74 75 72 65 2e  point structure.
19040 20 2a 2f 0a 20 20 20 20 20 20 70 4e 65 77 20 3d   */.      pNew =
19050 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
19060 52 61 77 4e 4e 28 64 62 2c 20 73 69 7a 65 6f 66  RawNN(db, sizeof
19070 28 53 61 76 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d  (Savepoint)+nNam
19080 65 2b 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20  e+1);.      if( 
19090 70 4e 65 77 20 29 7b 0a 20 20 20 20 20 20 20 20  pNew ){.        
190a0 70 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63  pNew->zName = (c
190b0 68 61 72 20 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a  har *)&pNew[1];.
190c0 20 20 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70          memcpy(p
190d0 4e 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d  New->zName, zNam
190e0 65 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20  e, nName+1);.   
190f0 20 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20   .        /* If 
19100 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e  there is no open
19110 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68   transaction, th
19120 65 6e 20 6d 61 72 6b 20 74 68 69 73 20 61 73 20  en mark this as 
19130 61 20 73 70 65 63 69 61 6c 0a 20 20 20 20 20 20  a special.      
19140 20 20 2a 2a 20 22 74 72 61 6e 73 61 63 74 69 6f    ** "transactio
19150 6e 20 73 61 76 65 70 6f 69 6e 74 22 2e 20 2a 2f  n savepoint". */
19160 0a 20 20 20 20 20 20 20 20 69 66 28 20 64 62 2d  .        if( db-
19170 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20  >autoCommit ){. 
19180 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74           db->aut
19190 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20  oCommit = 0;.   
191a0 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61         db->isTra
191b0 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
191c0 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d  t = 1;.        }
191d0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
191e0 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2b 2b  db->nSavepoint++
191f0 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20  ;.        }..   
19200 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 20 74 68 65       /* Link the
19210 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 69   new savepoint i
19220 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65  nto the database
19230 20 68 61 6e 64 6c 65 27 73 20 6c 69 73 74 2e 20   handle's list. 
19240 2a 2f 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d  */.        pNew-
19250 3e 70 4e 65 78 74 20 3d 20 64 62 2d 3e 70 53 61  >pNext = db->pSa
19260 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20  vepoint;.       
19270 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20   db->pSavepoint 
19280 3d 20 70 4e 65 77 3b 0a 20 20 20 20 20 20 20 20  = pNew;.        
19290 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 43  pNew->nDeferredC
192a0 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72  ons = db->nDefer
192b0 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 20  redCons;.       
192c0 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65 64   pNew->nDeferred
192d0 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44  ImmCons = db->nD
192e0 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a  eferredImmCons;.
192f0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
19300 7d 65 6c 73 65 7b 0a 20 20 20 20 69 53 61 76 65  }else{.    iSave
19310 70 6f 69 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20  point = 0;..    
19320 2f 2a 20 46 69 6e 64 20 74 68 65 20 6e 61 6d 65  /* Find the name
19330 64 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20  d savepoint. If 
19340 74 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68  there is no such
19350 20 73 61 76 65 70 6f 69 6e 74 2c 20 74 68 65 6e   savepoint, then
19360 20 61 6e 0a 20 20 20 20 2a 2a 20 61 6e 20 65 72   an.    ** an er
19370 72 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64 20  ror is returned 
19380 74 6f 20 74 68 65 20 75 73 65 72 2e 20 20 2a 2f  to the user.  */
19390 0a 20 20 20 20 66 6f 72 28 0a 20 20 20 20 20 20  .    for(.      
193a0 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d  pSavepoint = db-
193b0 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20 0a 20 20  >pSavepoint; .  
193c0 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 26      pSavepoint &
193d0 26 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  & sqlite3StrICmp
193e0 28 70 53 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61  (pSavepoint->zNa
193f0 6d 65 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  me, zName);.    
19400 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70    pSavepoint = p
19410 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74  Savepoint->pNext
19420 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 69 53  .    ){.      iS
19430 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20  avepoint++;.    
19440 7d 0a 20 20 20 20 69 66 28 20 21 70 53 61 76 65  }.    if( !pSave
19450 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73  point ){.      s
19460 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28  qlite3VdbeError(
19470 70 2c 20 22 6e 6f 20 73 75 63 68 20 73 61 76 65  p, "no such save
19480 70 6f 69 6e 74 3a 20 25 73 22 2c 20 7a 4e 61 6d  point: %s", zNam
19490 65 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53  e);.      rc = S
194a0 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20  QLITE_ERROR;.   
194b0 20 7d 65 6c 73 65 20 69 66 28 20 64 62 2d 3e 6e   }else if( db->n
194c0 56 64 62 65 57 72 69 74 65 3e 30 20 26 26 20 70  VdbeWrite>0 && p
194d0 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  1==SAVEPOINT_REL
194e0 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 2f 2a  EASE ){.      /*
194f0 20 49 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69   It is not possi
19500 62 6c 65 20 74 6f 20 72 65 6c 65 61 73 65 20 28  ble to release (
19510 63 6f 6d 6d 69 74 29 20 61 20 73 61 76 65 70 6f  commit) a savepo
19520 69 6e 74 20 69 66 20 74 68 65 72 65 20 61 72 65  int if there are
19530 20 0a 20 20 20 20 20 20 2a 2a 20 61 63 74 69 76   .      ** activ
19540 65 20 77 72 69 74 65 20 73 74 61 74 65 6d 65 6e  e write statemen
19550 74 73 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  ts..      */.   
19560 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
19570 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 72  ror(p, "cannot r
19580 65 6c 65 61 73 65 20 73 61 76 65 70 6f 69 6e 74  elease savepoint
19590 20 2d 20 22 0a 20 20 20 20 20 20 20 20 20 20 20   - ".           
195a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
195b0 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69  SQL statements i
195c0 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20  n progress");.  
195d0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
195e0 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  BUSY;.    }else{
195f0 0a 0a 20 20 20 20 20 20 2f 2a 20 44 65 74 65 72  ..      /* Deter
19600 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20  mine whether or 
19610 6e 6f 74 20 74 68 69 73 20 69 73 20 61 20 74 72  not this is a tr
19620 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f  ansaction savepo
19630 69 6e 74 2e 20 49 66 20 73 6f 2c 0a 20 20 20 20  int. If so,.    
19640 20 20 2a 2a 20 61 6e 64 20 74 68 69 73 20 69 73    ** and this is
19650 20 61 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61   a RELEASE comma
19660 6e 64 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72  nd, then the cur
19670 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  rent transaction
19680 20 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 63 6f   .      ** is co
19690 6d 6d 69 74 74 65 64 2e 20 0a 20 20 20 20 20 20  mmitted. .      
196a0 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20 69 73 54  */.      int isT
196b0 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20 70 53 61  ransaction = pSa
196c0 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d  vepoint->pNext==
196d0 30 20 26 26 20 64 62 2d 3e 69 73 54 72 61 6e 73  0 && db->isTrans
196e0 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b  actionSavepoint;
196f0 0a 20 20 20 20 20 20 69 66 28 20 69 73 54 72 61  .      if( isTra
19700 6e 73 61 63 74 69 6f 6e 20 26 26 20 70 31 3d 3d  nsaction && p1==
19710 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
19720 45 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  E ){.        if(
19730 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64   (rc = sqlite3Vd
19740 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29  beCheckFk(p, 1))
19750 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
19760 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64           goto vd
19770 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20  be_return;.     
19780 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d     }.        db-
19790 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b  >autoCommit = 1;
197a0 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c  .        if( sql
197b0 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d  ite3VdbeHalt(p)=
197c0 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
197d0 20 20 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20            p->pc 
197e0 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f  = (int)(pOp - aO
197f0 70 29 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62  p);.          db
19800 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30  ->autoCommit = 0
19810 3b 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e 72  ;.          p->r
19820 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  c = rc = SQLITE_
19830 42 55 53 59 3b 0a 20 20 20 20 20 20 20 20 20 20  BUSY;.          
19840 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
19850 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
19860 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61      db->isTransa
19870 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d  ctionSavepoint =
19880 20 30 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   0;.        rc =
19890 20 70 2d 3e 72 63 3b 0a 20 20 20 20 20 20 7d 65   p->rc;.      }e
198a0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 69 6e 74  lse{.        int
198b0 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65 3b   isSchemaChange;
198c0 0a 20 20 20 20 20 20 20 20 69 53 61 76 65 70 6f  .        iSavepo
198d0 69 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70  int = db->nSavep
198e0 6f 69 6e 74 20 2d 20 69 53 61 76 65 70 6f 69 6e  oint - iSavepoin
198f0 74 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 69  t - 1;.        i
19900 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  f( p1==SAVEPOINT
19910 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20  _ROLLBACK ){.   
19920 20 20 20 20 20 20 20 69 73 53 63 68 65 6d 61 43         isSchemaC
19930 68 61 6e 67 65 20 3d 20 28 64 62 2d 3e 6d 44 62  hange = (db->mDb
19940 46 6c 61 67 73 20 26 20 44 42 46 4c 41 47 5f 53  Flags & DBFLAG_S
19950 63 68 65 6d 61 43 68 61 6e 67 65 29 21 3d 30 3b  chemaChange)!=0;
19960 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 69  .          for(i
19970 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b  i=0; ii<db->nDb;
19980 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20   ii++){.        
19990 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
199a0 42 74 72 65 65 54 72 69 70 41 6c 6c 43 75 72 73  BtreeTripAllCurs
199b0 6f 72 73 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e  ors(db->aDb[ii].
199c0 70 42 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20  pBt,.           
199d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199e0 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49              SQLI
199f0 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43  TE_ABORT_ROLLBAC
19a00 4b 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  K,.             
19a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a20 20 20 20 20 20 20 20 20 20 20 69 73 53 63 68 65            isSche
19a30 6d 61 43 68 61 6e 67 65 3d 3d 30 29 3b 0a 20 20  maChange==0);.  
19a40 20 20 20 20 20 20 20 20 20 20 69 66 28 20 72 63            if( rc
19a50 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f  !=SQLITE_OK ) go
19a60 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
19a70 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20  error;.         
19a80 20 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65   }.        }else
19a90 7b 0a 20 20 20 20 20 20 20 20 20 20 69 73 53 63  {.          isSc
19aa0 68 65 6d 61 43 68 61 6e 67 65 20 3d 20 30 3b 0a  hemaChange = 0;.
19ab0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
19ac0 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64    for(ii=0; ii<d
19ad0 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20  b->nDb; ii++){. 
19ae0 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71           rc = sq
19af0 6c 69 74 65 33 42 74 72 65 65 53 61 76 65 70 6f  lite3BtreeSavepo
19b00 69 6e 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e  int(db->aDb[ii].
19b10 70 42 74 2c 20 70 31 2c 20 69 53 61 76 65 70 6f  pBt, p1, iSavepo
19b20 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20  int);.          
19b30 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
19b40 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  K ){.           
19b50 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
19b60 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
19b70 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
19b80 20 20 20 20 20 20 20 20 69 66 28 20 69 73 53 63          if( isSc
19b90 68 65 6d 61 43 68 61 6e 67 65 20 29 7b 0a 20 20  hemaChange ){.  
19ba0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45          sqlite3E
19bb0 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
19bc0 74 65 6d 65 6e 74 73 28 64 62 2c 20 30 29 3b 0a  tements(db, 0);.
19bd0 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
19be0 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73  3ResetAllSchemas
19bf0 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29  OfConnection(db)
19c00 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  ;.          db->
19c10 6d 44 62 46 6c 61 67 73 20 7c 3d 20 44 42 46 4c  mDbFlags |= DBFL
19c20 41 47 5f 53 63 68 65 6d 61 43 68 61 6e 67 65 3b  AG_SchemaChange;
19c30 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
19c40 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 52   }.  .      /* R
19c50 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65  egardless of whe
19c60 74 68 65 72 20 74 68 69 73 20 69 73 20 61 20 52  ther this is a R
19c70 45 4c 45 41 53 45 20 6f 72 20 52 4f 4c 4c 42 41  ELEASE or ROLLBA
19c80 43 4b 2c 20 64 65 73 74 72 6f 79 20 61 6c 6c 20  CK, destroy all 
19c90 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f  .      ** savepo
19ca0 69 6e 74 73 20 6e 65 73 74 65 64 20 69 6e 73 69  ints nested insi
19cb0 64 65 20 6f 66 20 74 68 65 20 73 61 76 65 70 6f  de of the savepo
19cc0 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74  int being operat
19cd0 65 64 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20 20  ed on. */.      
19ce0 77 68 69 6c 65 28 20 64 62 2d 3e 70 53 61 76 65  while( db->pSave
19cf0 70 6f 69 6e 74 21 3d 70 53 61 76 65 70 6f 69 6e  point!=pSavepoin
19d00 74 20 29 7b 0a 20 20 20 20 20 20 20 20 70 54 6d  t ){.        pTm
19d10 70 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  p = db->pSavepoi
19d20 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  nt;.        db->
19d30 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 54 6d  pSavepoint = pTm
19d40 70 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20  p->pNext;.      
19d50 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
19d60 64 62 2c 20 70 54 6d 70 29 3b 0a 20 20 20 20 20  db, pTmp);.     
19d70 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e     db->nSavepoin
19d80 74 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  t--;.      }..  
19d90 20 20 20 20 2f 2a 20 49 66 20 69 74 20 69 73 20      /* If it is 
19da0 61 20 52 45 4c 45 41 53 45 2c 20 74 68 65 6e 20  a RELEASE, then 
19db0 64 65 73 74 72 6f 79 20 74 68 65 20 73 61 76 65  destroy the save
19dc0 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72  point being oper
19dd0 61 74 65 64 20 6f 6e 20 0a 20 20 20 20 20 20 2a  ated on .      *
19de0 2a 20 74 6f 6f 2e 20 49 66 20 69 74 20 69 73 20  * too. If it is 
19df0 61 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20 74  a ROLLBACK TO, t
19e00 68 65 6e 20 73 65 74 20 74 68 65 20 6e 75 6d 62  hen set the numb
19e10 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 0a  er of deferred .
19e20 20 20 20 20 20 20 2a 2a 20 63 6f 6e 73 74 72 61        ** constra
19e30 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 20 70  int violations p
19e40 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61  resent in the da
19e50 74 61 62 61 73 65 20 74 6f 20 74 68 65 20 76 61  tabase to the va
19e60 6c 75 65 20 73 74 6f 72 65 64 0a 20 20 20 20 20  lue stored.     
19e70 20 2a 2a 20 77 68 65 6e 20 74 68 65 20 73 61 76   ** when the sav
19e80 65 70 6f 69 6e 74 20 77 61 73 20 63 72 65 61 74  epoint was creat
19e90 65 64 2e 20 20 2a 2f 0a 20 20 20 20 20 20 69 66  ed.  */.      if
19ea0 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ( p1==SAVEPOINT_
19eb0 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20  RELEASE ){.     
19ec0 20 20 20 61 73 73 65 72 74 28 20 70 53 61 76 65     assert( pSave
19ed0 70 6f 69 6e 74 3d 3d 64 62 2d 3e 70 53 61 76 65  point==db->pSave
19ee0 70 6f 69 6e 74 20 29 3b 0a 20 20 20 20 20 20 20  point );.       
19ef0 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20   db->pSavepoint 
19f00 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e  = pSavepoint->pN
19f10 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  ext;.        sql
19f20 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
19f30 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20  Savepoint);.    
19f40 20 20 20 20 69 66 28 20 21 69 73 54 72 61 6e 73      if( !isTrans
19f50 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20  action ){.      
19f60 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69      db->nSavepoi
19f70 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a  nt--;.        }.
19f80 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
19f90 20 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72       db->nDeferr
19fa0 65 64 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f  edCons = pSavepo
19fb0 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f  int->nDeferredCo
19fc0 6e 73 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  ns;.        db->
19fd0 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
19fe0 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e   = pSavepoint->n
19ff0 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
1a000 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
1a010 69 66 28 20 21 69 73 54 72 61 6e 73 61 63 74 69  if( !isTransacti
1a020 6f 6e 20 7c 7c 20 70 31 3d 3d 53 41 56 45 50 4f  on || p1==SAVEPO
1a030 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a  INT_ROLLBACK ){.
1a040 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
1a050 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
1a060 74 28 64 62 2c 20 70 31 2c 20 69 53 61 76 65 70  t(db, p1, iSavep
1a070 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69  oint);.        i
1a080 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1a090 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1a0a0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1a0b0 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20    }.    }.  }.  
1a0c0 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
1a0d0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1a0e0 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  ;..  break;.}../
1a0f0 2a 20 4f 70 63 6f 64 65 3a 20 41 75 74 6f 43 6f  * Opcode: AutoCo
1a100 6d 6d 69 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  mmit P1 P2 * * *
1a110 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 64  .**.** Set the d
1a120 61 74 61 62 61 73 65 20 61 75 74 6f 2d 63 6f 6d  atabase auto-com
1a130 6d 69 74 20 66 6c 61 67 20 74 6f 20 50 31 20 28  mit flag to P1 (
1a140 31 20 6f 72 20 30 29 2e 20 49 66 20 50 32 20 69  1 or 0). If P2 i
1a150 73 20 74 72 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20  s true, roll.** 
1a160 62 61 63 6b 20 61 6e 79 20 63 75 72 72 65 6e 74  back any current
1a170 6c 79 20 61 63 74 69 76 65 20 62 74 72 65 65 20  ly active btree 
1a180 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20 49 66  transactions. If
1a190 20 74 68 65 72 65 20 61 72 65 20 61 6e 79 20 61   there are any a
1a1a0 63 74 69 76 65 0a 2a 2a 20 56 4d 73 20 28 61 70  ctive.** VMs (ap
1a1b0 61 72 74 20 66 72 6f 6d 20 74 68 69 73 20 6f 6e  art from this on
1a1c0 65 29 2c 20 74 68 65 6e 20 61 20 52 4f 4c 4c 42  e), then a ROLLB
1a1d0 41 43 4b 20 66 61 69 6c 73 2e 20 20 41 20 43 4f  ACK fails.  A CO
1a1e0 4d 4d 49 54 20 66 61 69 6c 73 20 69 66 0a 2a 2a  MMIT fails if.**
1a1f0 20 74 68 65 72 65 20 61 72 65 20 61 63 74 69 76   there are activ
1a200 65 20 77 72 69 74 69 6e 67 20 56 4d 73 20 6f 72  e writing VMs or
1a210 20 61 63 74 69 76 65 20 56 4d 73 20 74 68 61 74   active VMs that
1a220 20 75 73 65 20 73 68 61 72 65 64 20 63 61 63 68   use shared cach
1a230 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  e..**.** This in
1a240 73 74 72 75 63 74 69 6f 6e 20 63 61 75 73 65 73  struction causes
1a250 20 74 68 65 20 56 4d 20 74 6f 20 68 61 6c 74 2e   the VM to halt.
1a260 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 75 74 6f  .*/.case OP_Auto
1a270 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20 69 6e 74 20  Commit: {.  int 
1a280 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
1a290 74 3b 0a 20 20 69 6e 74 20 69 52 6f 6c 6c 62 61  t;.  int iRollba
1a2a0 63 6b 3b 0a 0a 20 20 64 65 73 69 72 65 64 41 75  ck;..  desiredAu
1a2b0 74 6f 43 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e  toCommit = pOp->
1a2c0 70 31 3b 0a 20 20 69 52 6f 6c 6c 62 61 63 6b 20  p1;.  iRollback 
1a2d0 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73  = pOp->p2;.  ass
1a2e0 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f  ert( desiredAuto
1a2f0 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64 65 73  Commit==1 || des
1a300 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
1a310 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  0 );.  assert( d
1a320 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
1a330 3d 3d 31 20 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b  ==1 || iRollback
1a340 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
1a350 20 64 62 2d 3e 6e 56 64 62 65 41 63 74 69 76 65   db->nVdbeActive
1a360 3e 30 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61  >0 );  /* At lea
1a370 73 74 20 74 68 69 73 20 6f 6e 65 20 56 4d 20 69  st this one VM i
1a380 73 20 61 63 74 69 76 65 20 2a 2f 0a 20 20 61 73  s active */.  as
1a390 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
1a3a0 65 72 20 29 3b 0a 0a 20 20 69 66 28 20 64 65 73  er );..  if( des
1a3b0 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 21 3d  iredAutoCommit!=
1a3c0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29  db->autoCommit )
1a3d0 7b 0a 20 20 20 20 69 66 28 20 69 52 6f 6c 6c 62  {.    if( iRollb
1a3e0 61 63 6b 20 29 7b 0a 20 20 20 20 20 20 61 73 73  ack ){.      ass
1a3f0 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f  ert( desiredAuto
1a400 43 6f 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20 20 20  Commit==1 );.   
1a410 20 20 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61     sqlite3Rollba
1a420 63 6b 41 6c 6c 28 64 62 2c 20 53 51 4c 49 54 45  ckAll(db, SQLITE
1a430 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 29  _ABORT_ROLLBACK)
1a440 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f  ;.      db->auto
1a450 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20  Commit = 1;.    
1a460 7d 65 6c 73 65 20 69 66 28 20 64 65 73 69 72 65  }else if( desire
1a470 64 41 75 74 6f 43 6f 6d 6d 69 74 20 26 26 20 64  dAutoCommit && d
1a480 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20  b->nVdbeWrite>0 
1a490 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74  ){.      /* If t
1a4a0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
1a4b0 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d  implements a COM
1a4c0 4d 49 54 20 61 6e 64 20 6f 74 68 65 72 20 56 4d  MIT and other VM
1a4d0 73 20 61 72 65 20 77 72 69 74 69 6e 67 0a 20 20  s are writing.  
1a4e0 20 20 20 20 2a 2a 20 72 65 74 75 72 6e 20 61 6e      ** return an
1a4f0 20 65 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e   error indicatin
1a500 67 20 74 68 61 74 20 74 68 65 20 6f 74 68 65 72  g that the other
1a510 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65   VMs must comple
1a520 74 65 20 66 69 72 73 74 2e 20 0a 20 20 20 20 20  te first. .     
1a530 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65   */.      sqlite
1a540 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 63  3VdbeError(p, "c
1a550 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 74 72 61  annot commit tra
1a560 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20  nsaction - ".   
1a570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a580 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74         "SQL stat
1a590 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65  ements in progre
1a5a0 73 73 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  ss");.      rc =
1a5b0 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
1a5c0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
1a5d0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1a5e0 20 7d 65 6c 73 65 20 69 66 28 20 28 72 63 20 3d   }else if( (rc =
1a5f0 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63   sqlite3VdbeChec
1a600 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49  kFk(p, 1))!=SQLI
1a610 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67  TE_OK ){.      g
1a620 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
1a630 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
1a640 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
1a650 20 3d 20 28 75 38 29 64 65 73 69 72 65 64 41 75   = (u8)desiredAu
1a660 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 20 20 7d 0a  toCommit;.    }.
1a670 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56      if( sqlite3V
1a680 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49  dbeHalt(p)==SQLI
1a690 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20  TE_BUSY ){.     
1a6a0 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70   p->pc = (int)(p
1a6b0 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20  Op - aOp);.     
1a6c0 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
1a6d0 3d 20 28 75 38 29 28 31 2d 64 65 73 69 72 65 64  = (u8)(1-desired
1a6e0 41 75 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20 20 20  AutoCommit);.   
1a6f0 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20     p->rc = rc = 
1a700 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20  SQLITE_BUSY;.   
1a710 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
1a720 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61  urn;.    }.    a
1a730 73 73 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74  ssert( db->nStat
1a740 65 6d 65 6e 74 3d 3d 30 20 29 3b 0a 20 20 20 20  ement==0 );.    
1a750 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65  sqlite3CloseSave
1a760 70 6f 69 6e 74 73 28 64 62 29 3b 0a 20 20 20 20  points(db);.    
1a770 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54  if( p->rc==SQLIT
1a780 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63  E_OK ){.      rc
1a790 20 3d 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a   = SQLITE_DONE;.
1a7a0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1a7b0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
1a7c0 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f  OR;.    }.    go
1a7d0 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
1a7e0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c    }else{.    sql
1a7f0 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
1a800 0a 20 20 20 20 20 20 20 20 28 21 64 65 73 69 72  .        (!desir
1a810 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3f 22 63  edAutoCommit)?"c
1a820 61 6e 6e 6f 74 20 73 74 61 72 74 20 61 20 74 72  annot start a tr
1a830 61 6e 73 61 63 74 69 6f 6e 20 77 69 74 68 69 6e  ansaction within
1a840 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 3a   a transaction":
1a850 28 0a 20 20 20 20 20 20 20 20 28 69 52 6f 6c 6c  (.        (iRoll
1a860 62 61 63 6b 29 3f 22 63 61 6e 6e 6f 74 20 72 6f  back)?"cannot ro
1a870 6c 6c 62 61 63 6b 20 2d 20 6e 6f 20 74 72 61 6e  llback - no tran
1a880 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76  saction is activ
1a890 65 22 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20  e":.            
1a8a0 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63         "cannot c
1a8b0 6f 6d 6d 69 74 20 2d 20 6e 6f 20 74 72 61 6e 73  ommit - no trans
1a8c0 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65  action is active
1a8d0 22 29 29 3b 0a 20 20 20 20 20 20 20 20 20 0a 20  "));.         . 
1a8e0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
1a8f0 52 52 4f 52 3b 0a 20 20 20 20 67 6f 74 6f 20 61  RROR;.    goto a
1a900 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1a910 72 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  r;.  }.  break;.
1a920 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72  }../* Opcode: Tr
1a930 61 6e 73 61 63 74 69 6f 6e 20 50 31 20 50 32 20  ansaction P1 P2 
1a940 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42  P3 P4 P5.**.** B
1a950 65 67 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69  egin a transacti
1a960 6f 6e 20 6f 6e 20 64 61 74 61 62 61 73 65 20 50  on on database P
1a970 31 20 69 66 20 61 20 74 72 61 6e 73 61 63 74 69  1 if a transacti
1a980 6f 6e 20 69 73 20 6e 6f 74 20 61 6c 72 65 61 64  on is not alread
1a990 79 0a 2a 2a 20 61 63 74 69 76 65 2e 0a 2a 2a 20  y.** active..** 
1a9a0 49 66 20 50 32 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P2 is non-zer
1a9b0 6f 2c 20 74 68 65 6e 20 61 20 77 72 69 74 65 2d  o, then a write-
1a9c0 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73  transaction is s
1a9d0 74 61 72 74 65 64 2c 20 6f 72 20 69 66 20 61 20  tarted, or if a 
1a9e0 0a 2a 2a 20 72 65 61 64 2d 74 72 61 6e 73 61 63  .** read-transac
1a9f0 74 69 6f 6e 20 69 73 20 61 6c 72 65 61 64 79 20  tion is already 
1aa00 61 63 74 69 76 65 2c 20 69 74 20 69 73 20 75 70  active, it is up
1aa10 67 72 61 64 65 64 20 74 6f 20 61 20 77 72 69 74  graded to a writ
1aa20 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a  e-transaction..*
1aa30 2a 20 49 66 20 50 32 20 69 73 20 7a 65 72 6f 2c  * If P2 is zero,
1aa40 20 74 68 65 6e 20 61 20 72 65 61 64 2d 74 72 61   then a read-tra
1aa50 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72  nsaction is star
1aa60 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  ted..**.** P1 is
1aa70 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68   the index of th
1aa80 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
1aa90 6f 6e 20 77 68 69 63 68 20 74 68 65 20 74 72 61  on which the tra
1aaa0 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 73  nsaction is.** s
1aab0 74 61 72 74 65 64 2e 20 20 49 6e 64 65 78 20 30  tarted.  Index 0
1aac0 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74   is the main dat
1aad0 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 69  abase file and i
1aae0 6e 64 65 78 20 31 20 69 73 20 74 68 65 0a 2a 2a  ndex 1 is the.**
1aaf0 20 66 69 6c 65 20 75 73 65 64 20 66 6f 72 20 74   file used for t
1ab00 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e  emporary tables.
1ab10 20 20 49 6e 64 69 63 65 73 20 6f 66 20 32 20 6f    Indices of 2 o
1ab20 72 20 6d 6f 72 65 20 61 72 65 20 75 73 65 64 20  r more are used 
1ab30 66 6f 72 0a 2a 2a 20 61 74 74 61 63 68 65 64 20  for.** attached 
1ab40 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a  databases..**.**
1ab50 20 49 66 20 61 20 77 72 69 74 65 2d 74 72 61 6e   If a write-tran
1ab60 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74  saction is start
1ab70 65 64 20 61 6e 64 20 74 68 65 20 56 64 62 65 2e  ed and the Vdbe.
1ab80 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20  usesStmtJournal 
1ab90 66 6c 61 67 20 69 73 0a 2a 2a 20 74 72 75 65 20  flag is.** true 
1aba0 28 74 68 69 73 20 66 6c 61 67 20 69 73 20 73 65  (this flag is se
1abb0 74 20 69 66 20 74 68 65 20 56 64 62 65 20 6d 61  t if the Vdbe ma
1abc0 79 20 6d 6f 64 69 66 79 20 6d 6f 72 65 20 74 68  y modify more th
1abd0 61 6e 20 6f 6e 65 20 72 6f 77 20 61 6e 64 20 6d  an one row and m
1abe0 61 79 0a 2a 2a 20 74 68 72 6f 77 20 61 6e 20 41  ay.** throw an A
1abf0 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 29 2c  BORT exception),
1ac00 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61   a statement tra
1ac10 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 61 6c 73  nsaction may als
1ac20 6f 20 62 65 20 6f 70 65 6e 65 64 2e 0a 2a 2a 20  o be opened..** 
1ac30 4d 6f 72 65 20 73 70 65 63 69 66 69 63 61 6c 6c  More specificall
1ac40 79 2c 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74  y, a statement t
1ac50 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6f 70  ransaction is op
1ac60 65 6e 65 64 20 69 66 66 20 74 68 65 20 64 61 74  ened iff the dat
1ac70 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74  abase.** connect
1ac80 69 6f 6e 20 69 73 20 63 75 72 72 65 6e 74 6c 79  ion is currently
1ac90 20 6e 6f 74 20 69 6e 20 61 75 74 6f 63 6f 6d 6d   not in autocomm
1aca0 69 74 20 6d 6f 64 65 2c 20 6f 72 20 69 66 20 74  it mode, or if t
1acb0 68 65 72 65 20 61 72 65 20 6f 74 68 65 72 0a 2a  here are other.*
1acc0 2a 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65  * active stateme
1acd0 6e 74 73 2e 20 41 20 73 74 61 74 65 6d 65 6e 74  nts. A statement
1ace0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 6c   transaction all
1acf0 6f 77 73 20 74 68 65 20 63 68 61 6e 67 65 73 20  ows the changes 
1ad00 6d 61 64 65 20 62 79 20 74 68 69 73 0a 2a 2a 20  made by this.** 
1ad10 56 44 42 45 20 74 6f 20 62 65 20 72 6f 6c 6c 65  VDBE to be rolle
1ad20 64 20 62 61 63 6b 20 61 66 74 65 72 20 61 6e 20  d back after an 
1ad30 65 72 72 6f 72 20 77 69 74 68 6f 75 74 20 68 61  error without ha
1ad40 76 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62 61 63  ving to roll bac
1ad50 6b 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20  k the.** entire 
1ad60 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 66 20  transaction. If 
1ad70 6e 6f 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f  no error is enco
1ad80 75 6e 74 65 72 65 64 2c 20 74 68 65 20 73 74 61  untered, the sta
1ad90 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
1ada0 6f 6e 0a 2a 2a 20 77 69 6c 6c 20 61 75 74 6f 6d  on.** will autom
1adb0 61 74 69 63 61 6c 6c 79 20 63 6f 6d 6d 69 74 20  atically commit 
1adc0 77 68 65 6e 20 74 68 65 20 56 44 42 45 20 68 61  when the VDBE ha
1add0 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  lts..**.** If P5
1ade0 21 3d 30 20 74 68 65 6e 20 74 68 69 73 20 6f 70  !=0 then this op
1adf0 63 6f 64 65 20 61 6c 73 6f 20 63 68 65 63 6b 73  code also checks
1ae00 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b   the schema cook
1ae10 69 65 20 61 67 61 69 6e 73 74 20 50 33 0a 2a 2a  ie against P3.**
1ae20 20 61 6e 64 20 74 68 65 20 73 63 68 65 6d 61 20   and the schema 
1ae30 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74  generation count
1ae40 65 72 20 61 67 61 69 6e 73 74 20 50 34 2e 0a 2a  er against P4..*
1ae50 2a 20 54 68 65 20 63 6f 6f 6b 69 65 20 63 68 61  * The cookie cha
1ae60 6e 67 65 73 20 69 74 73 20 76 61 6c 75 65 20 77  nges its value w
1ae70 68 65 6e 65 76 65 72 20 74 68 65 20 64 61 74 61  henever the data
1ae80 62 61 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e  base schema chan
1ae90 67 65 73 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 65  ges..** This ope
1aea0 72 61 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74  ration is used t
1aeb0 6f 20 64 65 74 65 63 74 20 77 68 65 6e 20 74 68  o detect when th
1aec0 61 74 20 74 68 65 20 63 6f 6f 6b 69 65 20 68 61  at the cookie ha
1aed0 73 20 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e 64  s changed.** and
1aee0 20 74 68 61 74 20 74 68 65 20 63 75 72 72 65 6e   that the curren
1aef0 74 20 70 72 6f 63 65 73 73 20 6e 65 65 64 73 20  t process needs 
1af00 74 6f 20 72 65 72 65 61 64 20 74 68 65 20 73 63  to reread the sc
1af10 68 65 6d 61 2e 20 20 49 66 20 74 68 65 20 73 63  hema.  If the sc
1af20 68 65 6d 61 0a 2a 2a 20 63 6f 6f 6b 69 65 20 69  hema.** cookie i
1af30 6e 20 50 33 20 64 69 66 66 65 72 73 20 66 72 6f  n P3 differs fro
1af40 6d 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f  m the schema coo
1af50 6b 69 65 20 69 6e 20 74 68 65 20 64 61 74 61 62  kie in the datab
1af60 61 73 65 20 68 65 61 64 65 72 20 6f 72 0a 2a 2a  ase header or.**
1af70 20 69 66 20 74 68 65 20 73 63 68 65 6d 61 20 67   if the schema g
1af80 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65  eneration counte
1af90 72 20 69 6e 20 50 34 20 64 69 66 66 65 72 73 20  r in P4 differs 
1afa0 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74  from the current
1afb0 0a 2a 2a 20 67 65 6e 65 72 61 74 69 6f 6e 20 63  .** generation c
1afc0 6f 75 6e 74 65 72 2c 20 74 68 65 6e 20 61 6e 20  ounter, then an 
1afd0 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 65 72  SQLITE_SCHEMA er
1afe0 72 6f 72 20 69 73 20 72 61 69 73 65 64 20 61 6e  ror is raised an
1aff0 64 20 65 78 65 63 75 74 69 6f 6e 0a 2a 2a 20 68  d execution.** h
1b000 61 6c 74 73 2e 20 20 54 68 65 20 73 71 6c 69 74  alts.  The sqlit
1b010 65 33 5f 73 74 65 70 28 29 20 77 72 61 70 70 65  e3_step() wrappe
1b020 72 20 66 75 6e 63 74 69 6f 6e 20 6d 69 67 68 74  r function might
1b030 20 74 68 65 6e 20 72 65 70 72 65 70 61 72 65 20   then reprepare 
1b040 74 68 65 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74  the.** statement
1b050 20 61 6e 64 20 72 65 72 75 6e 20 69 74 20 66 72   and rerun it fr
1b060 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
1b070 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61  ..*/.case OP_Tra
1b080 6e 73 61 63 74 69 6f 6e 3a 20 7b 0a 20 20 42 74  nsaction: {.  Bt
1b090 72 65 65 20 2a 70 42 74 3b 0a 20 20 69 6e 74 20  ree *pBt;.  int 
1b0a0 69 4d 65 74 61 20 3d 20 30 3b 0a 0a 20 20 61 73  iMeta = 0;..  as
1b0b0 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
1b0c0 65 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  er );.  assert( 
1b0d0 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 7c  p->readOnly==0 |
1b0e0 7c 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a  | pOp->p2==0 );.
1b0f0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1b100 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1b110 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
1b120 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
1b130 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f  p->btreeMask, pO
1b140 70 2d 3e 70 31 29 20 29 3b 0a 20 20 69 66 28 20  p->p1) );.  if( 
1b150 70 4f 70 2d 3e 70 32 20 26 26 20 28 64 62 2d 3e  pOp->p2 && (db->
1b160 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 51  flags & SQLITE_Q
1b170 75 65 72 79 4f 6e 6c 79 29 21 3d 30 20 29 7b 0a  ueryOnly)!=0 ){.
1b180 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
1b190 52 45 41 44 4f 4e 4c 59 3b 0a 20 20 20 20 67 6f  READONLY;.    go
1b1a0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1b1b0 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 42 74  error;.  }.  pBt
1b1c0 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
1b1d0 70 31 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28 20  p1].pBt;..  if( 
1b1e0 70 42 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  pBt ){.    rc = 
1b1f0 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69  sqlite3BtreeBegi
1b200 6e 54 72 61 6e 73 28 70 42 74 2c 20 70 4f 70 2d  nTrans(pBt, pOp-
1b210 3e 70 32 2c 20 26 69 4d 65 74 61 29 3b 0a 20 20  >p2, &iMeta);.  
1b220 20 20 74 65 73 74 63 61 73 65 28 20 72 63 3d 3d    testcase( rc==
1b230 53 51 4c 49 54 45 5f 42 55 53 59 5f 53 4e 41 50  SQLITE_BUSY_SNAP
1b240 53 48 4f 54 20 29 3b 0a 20 20 20 20 74 65 73 74  SHOT );.    test
1b250 63 61 73 65 28 20 72 63 3d 3d 53 51 4c 49 54 45  case( rc==SQLITE
1b260 5f 42 55 53 59 5f 52 45 43 4f 56 45 52 59 20 29  _BUSY_RECOVERY )
1b270 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  ;.    if( rc!=SQ
1b280 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
1b290 20 69 66 28 20 28 72 63 26 30 78 66 66 29 3d 3d   if( (rc&0xff)==
1b2a0 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20  SQLITE_BUSY ){. 
1b2b0 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 28         p->pc = (
1b2c0 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b  int)(pOp - aOp);
1b2d0 0a 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d  .        p->rc =
1b2e0 20 72 63 3b 0a 20 20 20 20 20 20 20 20 67 6f 74   rc;.        got
1b2f0 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
1b300 20 20 20 20 20 7d 0a 20 20 20 20 20 20 67 6f 74       }.      got
1b310 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1b320 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  rror;.    }..   
1b330 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20   if( pOp->p2 && 
1b340 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e  p->usesStmtJourn
1b350 61 6c 20 0a 20 20 20 20 20 26 26 20 28 64 62 2d  al .     && (db-
1b360 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c  >autoCommit==0 |
1b370 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e  | db->nVdbeRead>
1b380 31 29 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20  1) .    ){.     
1b390 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
1b3a0 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70  BtreeIsInTrans(p
1b3b0 42 74 29 20 29 3b 0a 20 20 20 20 20 20 69 66 28  Bt) );.      if(
1b3c0 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d   p->iStatement==
1b3d0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  0 ){.        ass
1b3e0 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d  ert( db->nStatem
1b3f0 65 6e 74 3e 3d 30 20 26 26 20 64 62 2d 3e 6e 53  ent>=0 && db->nS
1b400 61 76 65 70 6f 69 6e 74 3e 3d 30 20 29 3b 0a 20  avepoint>=0 );. 
1b410 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74         db->nStat
1b420 65 6d 65 6e 74 2b 2b 3b 20 0a 20 20 20 20 20 20  ement++; .      
1b430 20 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 20    p->iStatement 
1b440 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  = db->nSavepoint
1b450 20 2b 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e   + db->nStatemen
1b460 74 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  t;.      }..    
1b470 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74    rc = sqlite3Vt
1b480 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20  abSavepoint(db, 
1b490 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c  SAVEPOINT_BEGIN,
1b4a0 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 2d 31   p->iStatement-1
1b4b0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d  );.      if( rc=
1b4c0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1b4d0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1b4e0 65 33 42 74 72 65 65 42 65 67 69 6e 53 74 6d 74  e3BtreeBeginStmt
1b4f0 28 70 42 74 2c 20 70 2d 3e 69 53 74 61 74 65 6d  (pBt, p->iStatem
1b500 65 6e 74 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20  ent);.      }.. 
1b510 20 20 20 20 20 2f 2a 20 53 74 6f 72 65 20 74 68       /* Store th
1b520 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20  e current value 
1b530 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
1b540 68 61 6e 64 6c 65 73 20 64 65 66 65 72 72 65 64  handles deferred
1b550 20 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20 20 20   constraint.    
1b560 20 20 2a 2a 20 63 6f 75 6e 74 65 72 2e 20 49 66    ** counter. If
1b570 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74   the statement t
1b580 72 61 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64 73  ransaction needs
1b590 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61   to be rolled ba
1b5a0 63 6b 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65  ck,.      ** the
1b5b0 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63   value of this c
1b5c0 6f 75 6e 74 65 72 20 6e 65 65 64 73 20 74 6f 20  ounter needs to 
1b5d0 62 65 20 72 65 73 74 6f 72 65 64 20 74 6f 6f 2e  be restored too.
1b5e0 20 20 2a 2f 0a 20 20 20 20 20 20 70 2d 3e 6e 53    */.      p->nS
1b5f0 74 6d 74 44 65 66 43 6f 6e 73 20 3d 20 64 62 2d  tmtDefCons = db-
1b600 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a  >nDeferredCons;.
1b610 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65        p->nStmtDe
1b620 66 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e  fImmCons = db->n
1b630 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
1b640 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61 73 73  .    }.  }.  ass
1b650 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20  ert( pOp->p5==0 
1b660 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  || pOp->p4type==
1b670 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 69 66  P4_INT32 );.  if
1b680 28 20 70 4f 70 2d 3e 70 35 0a 20 20 20 26 26 20  ( pOp->p5.   && 
1b690 28 69 4d 65 74 61 21 3d 70 4f 70 2d 3e 70 33 0a  (iMeta!=pOp->p3.
1b6a0 20 20 20 20 20 20 7c 7c 20 64 62 2d 3e 61 44 62        || db->aDb
1b6b0 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d  [pOp->p1].pSchem
1b6c0 61 2d 3e 69 47 65 6e 65 72 61 74 69 6f 6e 21 3d  a->iGeneration!=
1b6d0 70 4f 70 2d 3e 70 34 2e 69 29 0a 20 20 29 7b 0a  pOp->p4.i).  ){.
1b6e0 20 20 20 20 2f 2a 0a 20 20 20 20 2a 2a 20 49 4d      /*.    ** IM
1b6f0 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a  PLEMENTATION-OF:
1b700 20 52 2d 30 33 31 38 39 2d 35 31 31 33 35 20 41   R-03189-51135 A
1b710 73 20 65 61 63 68 20 53 51 4c 20 73 74 61 74 65  s each SQL state
1b720 6d 65 6e 74 20 72 75 6e 73 2c 20 74 68 65 20 73  ment runs, the s
1b730 63 68 65 6d 61 0a 20 20 20 20 2a 2a 20 76 65 72  chema.    ** ver
1b740 73 69 6f 6e 20 69 73 20 63 68 65 63 6b 65 64 20  sion is checked 
1b750 74 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20 74  to ensure that t
1b760 68 65 20 73 63 68 65 6d 61 20 68 61 73 20 6e 6f  he schema has no
1b770 74 20 63 68 61 6e 67 65 64 20 73 69 6e 63 65 20  t changed since 
1b780 74 68 65 0a 20 20 20 20 2a 2a 20 53 51 4c 20 73  the.    ** SQL s
1b790 74 61 74 65 6d 65 6e 74 20 77 61 73 20 70 72 65  tatement was pre
1b7a0 70 61 72 65 64 2e 0a 20 20 20 20 2a 2f 0a 20 20  pared..    */.  
1b7b0 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
1b7c0 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b  db, p->zErrMsg);
1b7d0 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20  .    p->zErrMsg 
1b7e0 3d 20 73 71 6c 69 74 65 33 44 62 53 74 72 44 75  = sqlite3DbStrDu
1b7f0 70 28 64 62 2c 20 22 64 61 74 61 62 61 73 65 20  p(db, "database 
1b800 73 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67  schema has chang
1b810 65 64 22 29 3b 0a 20 20 20 20 2f 2a 20 49 66 20  ed");.    /* If 
1b820 74 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69  the schema-cooki
1b830 65 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  e from the datab
1b840 61 73 65 20 66 69 6c 65 20 6d 61 74 63 68 65 73  ase file matches
1b850 20 74 68 65 20 63 6f 6f 6b 69 65 20 0a 20 20 20   the cookie .   
1b860 20 2a 2a 20 73 74 6f 72 65 64 20 77 69 74 68 20   ** stored with 
1b870 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 72 65  the in-memory re
1b880 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
1b890 74 68 65 20 73 63 68 65 6d 61 2c 20 64 6f 0a 20  the schema, do. 
1b8a0 20 20 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61 64     ** not reload
1b8b0 20 74 68 65 20 73 63 68 65 6d 61 20 66 72 6f 6d   the schema from
1b8c0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
1b8d0 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  le..    **.    *
1b8e0 2a 20 49 66 20 76 69 72 74 75 61 6c 2d 74 61 62  * If virtual-tab
1b8f0 6c 65 73 20 61 72 65 20 69 6e 20 75 73 65 2c 20  les are in use, 
1b900 74 68 69 73 20 69 73 20 6e 6f 74 20 6a 75 73 74  this is not just
1b910 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e   an optimization
1b920 2e 0a 20 20 20 20 2a 2a 20 4f 66 74 65 6e 2c 20  ..    ** Often, 
1b930 76 2d 74 61 62 6c 65 73 20 73 74 6f 72 65 20 74  v-tables store t
1b940 68 65 69 72 20 64 61 74 61 20 69 6e 20 6f 74 68  heir data in oth
1b950 65 72 20 53 51 4c 69 74 65 20 74 61 62 6c 65 73  er SQLite tables
1b960 2c 20 77 68 69 63 68 0a 20 20 20 20 2a 2a 20 61  , which.    ** a
1b970 72 65 20 71 75 65 72 69 65 64 20 66 72 6f 6d 20  re queried from 
1b980 77 69 74 68 69 6e 20 78 4e 65 78 74 28 29 20 61  within xNext() a
1b990 6e 64 20 6f 74 68 65 72 20 76 2d 74 61 62 6c 65  nd other v-table
1b9a0 20 6d 65 74 68 6f 64 73 20 75 73 69 6e 67 0a 20   methods using. 
1b9b0 20 20 20 2a 2a 20 70 72 65 70 61 72 65 64 20 71     ** prepared q
1b9c0 75 65 72 69 65 73 2e 20 49 66 20 73 75 63 68 20  ueries. If such 
1b9d0 61 20 71 75 65 72 79 20 69 73 20 6f 75 74 2d 6f  a query is out-o
1b9e0 66 2d 64 61 74 65 2c 20 77 65 20 64 6f 20 6e 6f  f-date, we do no
1b9f0 74 20 77 61 6e 74 20 74 6f 0a 20 20 20 20 2a 2a  t want to.    **
1ba00 20 64 69 73 63 61 72 64 20 74 68 65 20 64 61 74   discard the dat
1ba10 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20 61 73  abase schema, as
1ba20 20 74 68 65 20 75 73 65 72 20 63 6f 64 65 20 69   the user code i
1ba30 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 0a  mplementing the.
1ba40 20 20 20 20 2a 2a 20 76 2d 74 61 62 6c 65 20 77      ** v-table w
1ba50 6f 75 6c 64 20 68 61 76 65 20 74 6f 20 62 65 20  ould have to be 
1ba60 72 65 61 64 79 20 66 6f 72 20 74 68 65 20 73 71  ready for the sq
1ba70 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63  lite3_vtab struc
1ba80 74 75 72 65 20 69 74 73 65 6c 66 0a 20 20 20 20  ture itself.    
1ba90 2a 2a 20 74 6f 20 62 65 20 69 6e 76 61 6c 69 64  ** to be invalid
1baa0 61 74 65 64 20 77 68 65 6e 65 76 65 72 20 73 71  ated whenever sq
1bab0 6c 69 74 65 33 5f 73 74 65 70 28 29 20 69 73 20  lite3_step() is 
1bac0 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68  called from with
1bad0 69 6e 20 0a 20 20 20 20 2a 2a 20 61 20 76 2d 74  in .    ** a v-t
1bae0 61 62 6c 65 20 6d 65 74 68 6f 64 2e 0a 20 20 20  able method..   
1baf0 20 2a 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e   */.    if( db->
1bb00 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63  aDb[pOp->p1].pSc
1bb10 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f  hema->schema_coo
1bb20 6b 69 65 21 3d 69 4d 65 74 61 20 29 7b 0a 20 20  kie!=iMeta ){.  
1bb30 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74      sqlite3Reset
1bb40 4f 6e 65 53 63 68 65 6d 61 28 64 62 2c 20 70 4f  OneSchema(db, pO
1bb50 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 20 20  p->p1);.    }.  
1bb60 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31    p->expired = 1
1bb70 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  ;.    rc = SQLIT
1bb80 45 5f 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20 20  E_SCHEMA;.  }.  
1bb90 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
1bba0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1bbb0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1bbc0 20 4f 70 63 6f 64 65 3a 20 52 65 61 64 43 6f 6f   Opcode: ReadCoo
1bbd0 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  kie P1 P2 P3 * *
1bbe0 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f 6f 6b  .**.** Read cook
1bbf0 69 65 20 6e 75 6d 62 65 72 20 50 33 20 66 72 6f  ie number P3 fro
1bc00 6d 20 64 61 74 61 62 61 73 65 20 50 31 20 61 6e  m database P1 an
1bc10 64 20 77 72 69 74 65 20 69 74 20 69 6e 74 6f 20  d write it into 
1bc20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20  register P2..** 
1bc30 50 33 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68  P3==1 is the sch
1bc40 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 33  ema version.  P3
1bc50 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61 62  ==2 is the datab
1bc60 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50  ase format..** P
1bc70 33 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f  3==3 is the reco
1bc80 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63 61  mmended pager ca
1bc90 63 68 65 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f  che size, and so
1bca0 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69   forth.  P1==0 i
1bcb0 73 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61  s.** the main da
1bcc0 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20  tabase file and 
1bcd0 50 31 3d 3d 31 20 69 73 20 74 68 65 20 64 61 74  P1==1 is the dat
1bce0 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20  abase file used 
1bcf0 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70  to store.** temp
1bd00 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a  orary tables..**
1bd10 0a 2a 2a 20 54 68 65 72 65 20 6d 75 73 74 20 62  .** There must b
1bd20 65 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e  e a read-lock on
1bd30 20 74 68 65 20 64 61 74 61 62 61 73 65 20 28 65   the database (e
1bd40 69 74 68 65 72 20 61 20 74 72 61 6e 73 61 63 74  ither a transact
1bd50 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62 65 20 73  ion.** must be s
1bd60 74 61 72 74 65 64 20 6f 72 20 74 68 65 72 65 20  tarted or there 
1bd70 6d 75 73 74 20 62 65 20 61 6e 20 6f 70 65 6e 20  must be an open 
1bd80 63 75 72 73 6f 72 29 20 62 65 66 6f 72 65 0a 2a  cursor) before.*
1bd90 2a 20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73  * executing this
1bda0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
1bdb0 0a 63 61 73 65 20 4f 50 5f 52 65 61 64 43 6f 6f  .case OP_ReadCoo
1bdc0 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  kie: {          
1bdd0 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
1bde0 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69    int iMeta;.  i
1bdf0 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 69 43  nt iDb;.  int iC
1be00 6f 6f 6b 69 65 3b 0a 0a 20 20 61 73 73 65 72 74  ookie;..  assert
1be10 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
1be20 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70  ;.  iDb = pOp->p
1be30 31 3b 0a 20 20 69 43 6f 6f 6b 69 65 20 3d 20 70  1;.  iCookie = p
1be40 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74  Op->p3;.  assert
1be50 28 20 70 4f 70 2d 3e 70 33 3c 53 51 4c 49 54 45  ( pOp->p3<SQLITE
1be60 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b  _N_BTREE_META );
1be70 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d  .  assert( iDb>=
1be80 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62  0 && iDb<db->nDb
1be90 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62   );.  assert( db
1bea0 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 21 3d  ->aDb[iDb].pBt!=
1beb0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44  0 );.  assert( D
1bec0 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72  bMaskTest(p->btr
1bed0 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a  eeMask, iDb) );.
1bee0 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47  .  sqlite3BtreeG
1bef0 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b 69  etMeta(db->aDb[i
1bf00 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b 69 65  Db].pBt, iCookie
1bf10 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29  , (u32 *)&iMeta)
1bf20 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ;.  pOut = out2P
1bf30 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
1bf40 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
1bf50 20 69 4d 65 74 61 3b 0a 20 20 62 72 65 61 6b 3b   iMeta;.  break;
1bf60 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
1bf70 65 74 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50  etCookie P1 P2 P
1bf80 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74  3 * *.**.** Writ
1bf90 65 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61  e the integer va
1bfa0 6c 75 65 20 50 33 20 69 6e 74 6f 20 63 6f 6f 6b  lue P3 into cook
1bfb0 69 65 20 6e 75 6d 62 65 72 20 50 32 20 6f 66 20  ie number P2 of 
1bfc0 64 61 74 61 62 61 73 65 20 50 31 2e 0a 2a 2a 20  database P1..** 
1bfd0 50 32 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68  P2==1 is the sch
1bfe0 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 32  ema version.  P2
1bff0 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61 62  ==2 is the datab
1c000 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50  ase format..** P
1c010 32 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f  2==3 is the reco
1c020 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63 61  mmended pager ca
1c030 63 68 65 20 0a 2a 2a 20 73 69 7a 65 2c 20 61 6e  che .** size, an
1c040 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d  d so forth.  P1=
1c050 3d 30 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64  =0 is the main d
1c060 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64  atabase file and
1c070 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20 0a 2a   P1==1 is the .*
1c080 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  * database file 
1c090 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 65  used to store te
1c0a0 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a  mporary tables..
1c0b0 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e 73 61 63 74  **.** A transact
1c0c0 69 6f 6e 20 6d 75 73 74 20 62 65 20 73 74 61 72  ion must be star
1c0d0 74 65 64 20 62 65 66 6f 72 65 20 65 78 65 63 75  ted before execu
1c0e0 74 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65  ting this opcode
1c0f0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 74  ..*/.case OP_Set
1c100 43 6f 6f 6b 69 65 3a 20 7b 0a 20 20 44 62 20 2a  Cookie: {.  Db *
1c110 70 44 62 3b 0a 0a 20 20 73 71 6c 69 74 65 33 56  pDb;..  sqlite3V
1c120 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e  dbeIncrWriteCoun
1c130 74 65 72 28 70 2c 20 30 29 3b 0a 20 20 61 73 73  ter(p, 0);.  ass
1c140 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c  ert( pOp->p2<SQL
1c150 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41  ITE_N_BTREE_META
1c160 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1c170 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1c180 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
1c190 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
1c1a0 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
1c1b0 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20  , pOp->p1) );.  
1c1c0 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
1c1d0 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20  nly==0 );.  pDb 
1c1e0 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  = &db->aDb[pOp->
1c1f0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
1c200 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20  Db->pBt!=0 );.  
1c210 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53  assert( sqlite3S
1c220 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64  chemaMutexHeld(d
1c230 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29  b, pOp->p1, 0) )
1c240 3b 0a 20 20 2f 2a 20 53 65 65 20 6e 6f 74 65 20  ;.  /* See note 
1c250 61 62 6f 75 74 20 69 6e 64 65 78 20 73 68 69 66  about index shif
1c260 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65 61 64 43  ting on OP_ReadC
1c270 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63 20 3d 20  ookie */.  rc = 
1c280 73 71 6c 69 74 65 33 42 74 72 65 65 55 70 64 61  sqlite3BtreeUpda
1c290 74 65 4d 65 74 61 28 70 44 62 2d 3e 70 42 74 2c  teMeta(pDb->pBt,
1c2a0 20 70 4f 70 2d 3e 70 32 2c 20 70 4f 70 2d 3e 70   pOp->p2, pOp->p
1c2b0 33 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  3);.  if( pOp->p
1c2c0 32 3d 3d 42 54 52 45 45 5f 53 43 48 45 4d 41 5f  2==BTREE_SCHEMA_
1c2d0 56 45 52 53 49 4f 4e 20 29 7b 0a 20 20 20 20 2f  VERSION ){.    /
1c2e0 2a 20 57 68 65 6e 20 74 68 65 20 73 63 68 65 6d  * When the schem
1c2f0 61 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73  a cookie changes
1c300 2c 20 72 65 63 6f 72 64 20 74 68 65 20 6e 65 77  , record the new
1c310 20 63 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c   cookie internal
1c320 6c 79 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70  ly */.    pDb->p
1c330 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63  Schema->schema_c
1c340 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b  ookie = pOp->p3;
1c350 0a 20 20 20 20 64 62 2d 3e 6d 44 62 46 6c 61 67  .    db->mDbFlag
1c360 73 20 7c 3d 20 44 42 46 4c 41 47 5f 53 63 68 65  s |= DBFLAG_Sche
1c370 6d 61 43 68 61 6e 67 65 3b 0a 20 20 7d 65 6c 73  maChange;.  }els
1c380 65 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42  e if( pOp->p2==B
1c390 54 52 45 45 5f 46 49 4c 45 5f 46 4f 52 4d 41 54  TREE_FILE_FORMAT
1c3a0 20 29 7b 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72   ){.    /* Recor
1c3b0 64 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65  d changes in the
1c3c0 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a   file format */.
1c3d0 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61      pDb->pSchema
1c3e0 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20  ->file_format = 
1c3f0 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 69  pOp->p3;.  }.  i
1c400 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b  f( pOp->p1==1 ){
1c410 0a 20 20 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61  .    /* Invalida
1c420 74 65 20 61 6c 6c 20 70 72 65 70 61 72 65 64 20  te all prepared 
1c430 73 74 61 74 65 6d 65 6e 74 73 20 77 68 65 6e 65  statements whene
1c440 76 65 72 20 74 68 65 20 54 45 4d 50 20 64 61 74  ver the TEMP dat
1c450 61 62 61 73 65 0a 20 20 20 20 2a 2a 20 73 63 68  abase.    ** sch
1c460 65 6d 61 20 69 73 20 63 68 61 6e 67 65 64 2e 20  ema is changed. 
1c470 20 54 69 63 6b 65 74 20 23 31 36 34 34 20 2a 2f   Ticket #1644 */
1c480 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69  .    sqlite3Expi
1c490 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d  rePreparedStatem
1c4a0 65 6e 74 73 28 64 62 2c 20 30 29 3b 0a 20 20 20  ents(db, 0);.   
1c4b0 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30 3b   p->expired = 0;
1c4c0 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20  .  }.  if( rc ) 
1c4d0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1c4e0 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b  o_error;.  break
1c4f0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1c500 4f 70 65 6e 52 65 61 64 20 50 31 20 50 32 20 50  OpenRead P1 P2 P
1c510 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
1c520 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62  sis: root=P2 iDb
1c530 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61  =P3.**.** Open a
1c540 20 72 65 61 64 2d 6f 6e 6c 79 20 63 75 72 73 6f   read-only curso
1c550 72 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61  r for the databa
1c560 73 65 20 74 61 62 6c 65 20 77 68 6f 73 65 20 72  se table whose r
1c570 6f 6f 74 20 70 61 67 65 20 69 73 0a 2a 2a 20 50  oot page is.** P
1c580 32 20 69 6e 20 61 20 64 61 74 61 62 61 73 65 20  2 in a database 
1c590 66 69 6c 65 2e 20 20 54 68 65 20 64 61 74 61 62  file.  The datab
1c5a0 61 73 65 20 66 69 6c 65 20 69 73 20 64 65 74 65  ase file is dete
1c5b0 72 6d 69 6e 65 64 20 62 79 20 50 33 2e 20 0a 2a  rmined by P3. .*
1c5c0 2a 20 50 33 3d 3d 30 20 6d 65 61 6e 73 20 74 68  * P3==0 means th
1c5d0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c  e main database,
1c5e0 20 50 33 3d 3d 31 20 6d 65 61 6e 73 20 74 68 65   P3==1 means the
1c5f0 20 64 61 74 61 62 61 73 65 20 75 73 65 64 20 66   database used f
1c600 6f 72 20 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79  or .** temporary
1c610 20 74 61 62 6c 65 73 2c 20 61 6e 64 20 50 33 3e   tables, and P3>
1c620 31 20 6d 65 61 6e 73 20 75 73 65 64 20 74 68 65  1 means used the
1c630 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 61   corresponding a
1c640 74 74 61 63 68 65 64 0a 2a 2a 20 64 61 74 61 62  ttached.** datab
1c650 61 73 65 2e 20 20 47 69 76 65 20 74 68 65 20 6e  ase.  Give the n
1c660 65 77 20 63 75 72 73 6f 72 20 61 6e 20 69 64 65  ew cursor an ide
1c670 6e 74 69 66 69 65 72 20 6f 66 20 50 31 2e 20 20  ntifier of P1.  
1c680 54 68 65 20 50 31 0a 2a 2a 20 76 61 6c 75 65 73  The P1.** values
1c690 20 6e 65 65 64 20 6e 6f 74 20 62 65 20 63 6f 6e   need not be con
1c6a0 74 69 67 75 6f 75 73 20 62 75 74 20 61 6c 6c 20  tiguous but all 
1c6b0 50 31 20 76 61 6c 75 65 73 20 73 68 6f 75 6c 64  P1 values should
1c6c0 20 62 65 20 73 6d 61 6c 6c 20 69 6e 74 65 67 65   be small intege
1c6d0 72 73 2e 0a 2a 2a 20 49 74 20 69 73 20 61 6e 20  rs..** It is an 
1c6e0 65 72 72 6f 72 20 66 6f 72 20 50 31 20 74 6f 20  error for P1 to 
1c6f0 62 65 20 6e 65 67 61 74 69 76 65 2e 0a 2a 2a 0a  be negative..**.
1c700 2a 2a 20 41 6c 6c 6f 77 65 64 20 50 35 20 62 69  ** Allowed P5 bi
1c710 74 73 3a 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c  ts:.** <ul>.** <
1c720 6c 69 3e 20 20 3c 62 3e 30 78 30 32 20 4f 50 46  li>  <b>0x02 OPF
1c730 4c 41 47 5f 53 45 45 4b 45 51 3c 2f 62 3e 3a 20  LAG_SEEKEQ</b>: 
1c740 54 68 69 73 20 63 75 72 73 6f 72 20 77 69 6c 6c  This cursor will
1c750 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 66 6f   only be used fo
1c760 72 0a 2a 2a 20 20 20 20 20 20 20 65 71 75 61 6c  r.**       equal
1c770 69 74 79 20 6c 6f 6f 6b 75 70 73 20 28 69 6d 70  ity lookups (imp
1c780 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20 70 61  lemented as a pa
1c790 69 72 20 6f 66 20 6f 70 63 6f 64 65 73 20 4f 50  ir of opcodes OP
1c7a0 5f 53 65 65 6b 47 45 2f 4f 50 5f 49 64 78 47 54  _SeekGE/OP_IdxGT
1c7b0 0a 2a 2a 20 20 20 20 20 20 20 6f 66 20 4f 50 5f  .**       of OP_
1c7c0 53 65 65 6b 4c 45 2f 4f 50 5f 49 64 78 47 54 29  SeekLE/OP_IdxGT)
1c7d0 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20  .** </ul>.**.** 
1c7e0 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79  The P4 value may
1c7f0 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e   be either an in
1c800 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29  teger (P4_INT32)
1c810 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   or a pointer to
1c820 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74  .** a KeyInfo st
1c830 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49  ructure (P4_KEYI
1c840 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61  NFO). If it is a
1c850 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65   pointer to a Ke
1c860 79 49 6e 66 6f 20 0a 2a 2a 20 6f 62 6a 65 63 74  yInfo .** object
1c870 2c 20 74 68 65 6e 20 74 61 62 6c 65 20 62 65 69  , then table bei
1c880 6e 67 20 6f 70 65 6e 65 64 20 6d 75 73 74 20 62  ng opened must b
1c890 65 20 61 6e 20 5b 69 6e 64 65 78 20 62 2d 74 72  e an [index b-tr
1c8a0 65 65 5d 20 77 68 65 72 65 20 74 68 65 0a 2a 2a  ee] where the.**
1c8b0 20 4b 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20   KeyInfo object 
1c8c0 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74  defines the cont
1c8d0 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e  ent and collatin
1c8e0 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f  g .** sequence o
1c8f0 66 20 74 68 61 74 20 69 6e 64 65 78 20 62 2d 74  f that index b-t
1c900 72 65 65 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  ree. Otherwise, 
1c910 69 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65  if P4 is an inte
1c920 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 74  ger .** value, t
1c930 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65  hen the table be
1c940 69 6e 67 20 6f 70 65 6e 65 64 20 6d 75 73 74 20  ing opened must 
1c950 62 65 20 61 20 5b 74 61 62 6c 65 20 62 2d 74 72  be a [table b-tr
1c960 65 65 5d 20 77 69 74 68 20 61 0a 2a 2a 20 6e 75  ee] with a.** nu
1c970 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
1c980 6e 6f 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65  no less than the
1c990 20 76 61 6c 75 65 20 6f 66 20 50 34 2e 0a 2a 2a   value of P4..**
1c9a0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4f 70  .** See also: Op
1c9b0 65 6e 57 72 69 74 65 2c 20 52 65 6f 70 65 6e 49  enWrite, ReopenI
1c9c0 64 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  dx.*/./* Opcode:
1c9d0 20 52 65 6f 70 65 6e 49 64 78 20 50 31 20 50 32   ReopenIdx P1 P2
1c9e0 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
1c9f0 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69  opsis: root=P2 i
1ca00 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20  Db=P3.**.** The 
1ca10 52 65 6f 70 65 6e 49 64 78 20 6f 70 63 6f 64 65  ReopenIdx opcode
1ca20 20 77 6f 72 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f   works like OP_O
1ca30 70 65 6e 52 65 61 64 20 65 78 63 65 70 74 20 74  penRead except t
1ca40 68 61 74 20 69 74 20 66 69 72 73 74 0a 2a 2a 20  hat it first.** 
1ca50 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66  checks to see if
1ca60 20 74 68 65 20 63 75 72 73 6f 72 20 6f 6e 20 50   the cursor on P
1ca70 31 20 69 73 20 61 6c 72 65 61 64 79 20 6f 70 65  1 is already ope
1ca80 6e 20 6f 6e 20 74 68 65 20 73 61 6d 65 0a 2a 2a  n on the same.**
1ca90 20 62 2d 74 72 65 65 20 61 6e 64 20 69 66 20 69   b-tree and if i
1caa0 74 20 69 73 20 74 68 69 73 20 6f 70 63 6f 64 65  t is this opcode
1cab0 20 62 65 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70   becomes a no-op
1cac0 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
1cad0 73 2c 0a 2a 2a 20 69 66 20 74 68 65 20 63 75 72  s,.** if the cur
1cae0 73 6f 72 20 69 73 20 61 6c 72 65 61 64 79 20 6f  sor is already o
1caf0 70 65 6e 2c 20 64 6f 20 6e 6f 74 20 72 65 6f 70  pen, do not reop
1cb00 65 6e 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  en it..**.** The
1cb10 20 52 65 6f 70 65 6e 49 64 78 20 6f 70 63 6f 64   ReopenIdx opcod
1cb20 65 20 6d 61 79 20 6f 6e 6c 79 20 62 65 20 75 73  e may only be us
1cb30 65 64 20 77 69 74 68 20 50 35 3d 3d 30 20 6f 72  ed with P5==0 or
1cb40 20 50 35 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b   P5==OPFLAG_SEEK
1cb50 45 51 0a 2a 2a 20 61 6e 64 20 77 69 74 68 20 50  EQ.** and with P
1cb60 34 20 62 65 69 6e 67 20 61 20 50 34 5f 4b 45 59  4 being a P4_KEY
1cb70 49 4e 46 4f 20 6f 62 6a 65 63 74 2e 20 20 46 75  INFO object.  Fu
1cb80 72 74 68 65 72 6d 6f 72 65 2c 20 74 68 65 20 50  rthermore, the P
1cb90 33 20 76 61 6c 75 65 20 6d 75 73 74 0a 2a 2a 20  3 value must.** 
1cba0 62 65 20 74 68 65 20 73 61 6d 65 20 61 73 20 65  be the same as e
1cbb0 76 65 72 79 20 6f 74 68 65 72 20 52 65 6f 70 65  very other Reope
1cbc0 6e 49 64 78 20 6f 72 20 4f 70 65 6e 52 65 61 64  nIdx or OpenRead
1cbd0 20 66 6f 72 20 74 68 65 20 73 61 6d 65 20 63 75   for the same cu
1cbe0 72 73 6f 72 0a 2a 2a 20 6e 75 6d 62 65 72 2e 0a  rsor.** number..
1cbf0 2a 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 50 35  **.** Allowed P5
1cc00 20 62 69 74 73 3a 0a 2a 2a 20 3c 75 6c 3e 0a 2a   bits:.** <ul>.*
1cc10 2a 20 3c 6c 69 3e 20 20 3c 62 3e 30 78 30 32 20  * <li>  <b>0x02 
1cc20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 3c 2f 62  OPFLAG_SEEKEQ</b
1cc30 3e 3a 20 54 68 69 73 20 63 75 72 73 6f 72 20 77  >: This cursor w
1cc40 69 6c 6c 20 6f 6e 6c 79 20 62 65 20 75 73 65 64  ill only be used
1cc50 20 66 6f 72 0a 2a 2a 20 20 20 20 20 20 20 65 71   for.**       eq
1cc60 75 61 6c 69 74 79 20 6c 6f 6f 6b 75 70 73 20 28  uality lookups (
1cc70 69 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61  implemented as a
1cc80 20 70 61 69 72 20 6f 66 20 6f 70 63 6f 64 65 73   pair of opcodes
1cc90 20 4f 50 5f 53 65 65 6b 47 45 2f 4f 50 5f 49 64   OP_SeekGE/OP_Id
1cca0 78 47 54 0a 2a 2a 20 20 20 20 20 20 20 6f 66 20  xGT.**       of 
1ccb0 4f 50 5f 53 65 65 6b 4c 45 2f 4f 50 5f 49 64 78  OP_SeekLE/OP_Idx
1ccc0 47 54 29 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a  GT).** </ul>.**.
1ccd0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4f 50 5f  ** See also: OP_
1cce0 4f 70 65 6e 52 65 61 64 2c 20 4f 50 5f 4f 70 65  OpenRead, OP_Ope
1ccf0 6e 57 72 69 74 65 0a 2a 2f 0a 2f 2a 20 4f 70 63  nWrite.*/./* Opc
1cd00 6f 64 65 3a 20 4f 70 65 6e 57 72 69 74 65 20 50  ode: OpenWrite P
1cd10 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
1cd20 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d   Synopsis: root=
1cd30 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20  P2 iDb=P3.**.** 
1cd40 4f 70 65 6e 20 61 20 72 65 61 64 2f 77 72 69 74  Open a read/writ
1cd50 65 20 63 75 72 73 6f 72 20 6e 61 6d 65 64 20 50  e cursor named P
1cd60 31 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6f  1 on the table o
1cd70 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f  r index whose ro
1cd80 6f 74 0a 2a 2a 20 70 61 67 65 20 69 73 20 50 32  ot.** page is P2
1cd90 20 28 6f 72 20 77 68 6f 73 65 20 72 6f 6f 74 20   (or whose root 
1cda0 70 61 67 65 20 69 73 20 68 65 6c 64 20 69 6e 20  page is held in 
1cdb0 72 65 67 69 73 74 65 72 20 50 32 20 69 66 20 74  register P2 if t
1cdc0 68 65 0a 2a 2a 20 4f 50 46 4c 41 47 5f 50 32 49  he.** OPFLAG_P2I
1cdd0 53 52 45 47 20 62 69 74 20 69 73 20 73 65 74 20  SREG bit is set 
1cde0 69 6e 20 50 35 20 2d 20 73 65 65 20 62 65 6c 6f  in P5 - see belo
1cdf0 77 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34  w)..**.** The P4
1ce00 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69   value may be ei
1ce10 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20  ther an integer 
1ce20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20  (P4_INT32) or a 
1ce30 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20  pointer to.** a 
1ce40 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72  KeyInfo structur
1ce50 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20  e (P4_KEYINFO). 
1ce60 49 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74  If it is a point
1ce70 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20  er to a KeyInfo 
1ce80 0a 2a 2a 20 6f 62 6a 65 63 74 2c 20 74 68 65 6e  .** object, then
1ce90 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65   table being ope
1cea0 6e 65 64 20 6d 75 73 74 20 62 65 20 61 6e 20 5b  ned must be an [
1ceb0 69 6e 64 65 78 20 62 2d 74 72 65 65 5d 20 77 68  index b-tree] wh
1cec0 65 72 65 20 74 68 65 0a 2a 2a 20 4b 65 79 49 6e  ere the.** KeyIn
1ced0 66 6f 20 6f 62 6a 65 63 74 20 64 65 66 69 6e 65  fo object define
1cee0 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e  s the content an
1cef0 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20  d collating .** 
1cf00 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68 61 74  sequence of that
1cf10 20 69 6e 64 65 78 20 62 2d 74 72 65 65 2e 20 4f   index b-tree. O
1cf20 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 34 20  therwise, if P4 
1cf30 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a  is an integer .*
1cf40 2a 20 76 61 6c 75 65 2c 20 74 68 65 6e 20 74 68  * value, then th
1cf50 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70  e table being op
1cf60 65 6e 65 64 20 6d 75 73 74 20 62 65 20 61 20 5b  ened must be a [
1cf70 74 61 62 6c 65 20 62 2d 74 72 65 65 5d 20 77 69  table b-tree] wi
1cf80 74 68 20 61 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f  th a.** number o
1cf90 66 20 63 6f 6c 75 6d 6e 73 20 6e 6f 20 6c 65 73  f columns no les
1cfa0 73 20 74 68 61 6e 20 74 68 65 20 76 61 6c 75 65  s than the value
1cfb0 20 6f 66 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 41 6c   of P4..**.** Al
1cfc0 6c 6f 77 65 64 20 50 35 20 62 69 74 73 3a 0a 2a  lowed P5 bits:.*
1cfd0 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69 3e 20 20  * <ul>.** <li>  
1cfe0 3c 62 3e 30 78 30 32 20 4f 50 46 4c 41 47 5f 53  <b>0x02 OPFLAG_S
1cff0 45 45 4b 45 51 3c 2f 62 3e 3a 20 54 68 69 73 20  EEKEQ</b>: This 
1d000 63 75 72 73 6f 72 20 77 69 6c 6c 20 6f 6e 6c 79  cursor will only
1d010 20 62 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20   be used for.** 
1d020 20 20 20 20 20 20 65 71 75 61 6c 69 74 79 20 6c        equality l
1d030 6f 6f 6b 75 70 73 20 28 69 6d 70 6c 65 6d 65 6e  ookups (implemen
1d040 74 65 64 20 61 73 20 61 20 70 61 69 72 20 6f 66  ted as a pair of
1d050 20 6f 70 63 6f 64 65 73 20 4f 50 5f 53 65 65 6b   opcodes OP_Seek
1d060 47 45 2f 4f 50 5f 49 64 78 47 54 0a 2a 2a 20 20  GE/OP_IdxGT.**  
1d070 20 20 20 20 20 6f 66 20 4f 50 5f 53 65 65 6b 4c       of OP_SeekL
1d080 45 2f 4f 50 5f 49 64 78 47 54 29 0a 2a 2a 20 3c  E/OP_IdxGT).** <
1d090 6c 69 3e 20 20 3c 62 3e 30 78 30 38 20 4f 50 46  li>  <b>0x08 OPF
1d0a0 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 3c 2f 62  LAG_FORDELETE</b
1d0b0 3e 3a 20 54 68 69 73 20 63 75 72 73 6f 72 20 69  >: This cursor i
1d0c0 73 20 75 73 65 64 20 6f 6e 6c 79 20 74 6f 20 73  s used only to s
1d0d0 65 65 6b 0a 2a 2a 20 20 20 20 20 20 20 61 6e 64  eek.**       and
1d0e0 20 73 75 62 73 65 71 75 65 6e 74 6c 79 20 64 65   subsequently de
1d0f0 6c 65 74 65 20 65 6e 74 72 69 65 73 20 69 6e 20  lete entries in 
1d100 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20  an index btree. 
1d110 20 54 68 69 73 20 69 73 20 61 0a 2a 2a 20 20 20   This is a.**   
1d120 20 20 20 20 68 69 6e 74 20 74 6f 20 74 68 65 20      hint to the 
1d130 73 74 6f 72 61 67 65 20 65 6e 67 69 6e 65 20 74  storage engine t
1d140 68 61 74 20 74 68 65 20 73 74 6f 72 61 67 65 20  hat the storage 
1d150 65 6e 67 69 6e 65 20 69 73 20 61 6c 6c 6f 77 65  engine is allowe
1d160 64 20 74 6f 0a 2a 2a 20 20 20 20 20 20 20 69 67  d to.**       ig
1d170 6e 6f 72 65 2e 20 20 54 68 65 20 68 69 6e 74 20  nore.  The hint 
1d180 69 73 20 6e 6f 74 20 75 73 65 64 20 62 79 20 74  is not used by t
1d190 68 65 20 6f 66 66 69 63 69 61 6c 20 53 51 4c 69  he official SQLi
1d1a0 74 65 20 62 2a 74 72 65 65 20 73 74 6f 72 61 67  te b*tree storag
1d1b0 65 0a 2a 2a 20 20 20 20 20 20 20 65 6e 67 69 6e  e.**       engin
1d1c0 65 2c 20 62 75 74 20 69 73 20 75 73 65 64 20 62  e, but is used b
1d1d0 79 20 43 4f 4d 44 42 32 2e 0a 2a 2a 20 3c 6c 69  y COMDB2..** <li
1d1e0 3e 20 20 3c 62 3e 30 78 31 30 20 4f 50 46 4c 41  >  <b>0x10 OPFLA
1d1f0 47 5f 50 32 49 53 52 45 47 3c 2f 62 3e 3a 20 55  G_P2ISREG</b>: U
1d200 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  se the content o
1d210 66 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  f register P2.**
1d220 20 20 20 20 20 20 20 61 73 20 74 68 65 20 72 6f         as the ro
1d230 6f 74 20 70 61 67 65 2c 20 6e 6f 74 20 74 68 65  ot page, not the
1d240 20 76 61 6c 75 65 20 6f 66 20 50 32 20 69 74 73   value of P2 its
1d250 65 6c 66 2e 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a  elf..** </ul>.**
1d260 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
1d270 74 69 6f 6e 20 77 6f 72 6b 73 20 6c 69 6b 65 20  tion works like 
1d280 4f 70 65 6e 52 65 61 64 20 65 78 63 65 70 74 20  OpenRead except 
1d290 74 68 61 74 20 69 74 20 6f 70 65 6e 73 20 74 68  that it opens th
1d2a0 65 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20 72  e cursor.** in r
1d2b0 65 61 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e 0a  ead/write mode..
1d2c0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1d2d0 4f 50 5f 4f 70 65 6e 52 65 61 64 2c 20 4f 50 5f  OP_OpenRead, OP_
1d2e0 52 65 6f 70 65 6e 49 64 78 0a 2a 2f 0a 63 61 73  ReopenIdx.*/.cas
1d2f0 65 20 4f 50 5f 52 65 6f 70 65 6e 49 64 78 3a 20  e OP_ReopenIdx: 
1d300 7b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a  {.  int nField;.
1d310 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49    KeyInfo *pKeyI
1d320 6e 66 6f 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20  nfo;.  int p2;. 
1d330 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20   int iDb;.  int 
1d340 77 72 46 6c 61 67 3b 0a 20 20 42 74 72 65 65 20  wrFlag;.  Btree 
1d350 2a 70 58 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  *pX;.  VdbeCurso
1d360 72 20 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a 70  r *pCur;.  Db *p
1d370 44 62 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  Db;..  assert( p
1d380 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70  Op->p5==0 || pOp
1d390 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f 53 45 45  ->p5==OPFLAG_SEE
1d3a0 4b 45 51 20 29 3b 0a 20 20 61 73 73 65 72 74 28  KEQ );.  assert(
1d3b0 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1d3c0 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 70 43  _KEYINFO );.  pC
1d3d0 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  ur = p->apCsr[pO
1d3e0 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 43  p->p1];.  if( pC
1d3f0 75 72 20 26 26 20 70 43 75 72 2d 3e 70 67 6e 6f  ur && pCur->pgno
1d400 52 6f 6f 74 3d 3d 28 75 33 32 29 70 4f 70 2d 3e  Root==(u32)pOp->
1d410 70 32 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  p2 ){.    assert
1d420 28 20 70 43 75 72 2d 3e 69 44 62 3d 3d 70 4f 70  ( pCur->iDb==pOp
1d430 2d 3e 70 33 20 29 3b 20 20 20 20 20 20 2f 2a 20  ->p3 );      /* 
1d440 47 75 61 72 61 6e 74 65 65 64 20 62 79 20 74 68  Guaranteed by th
1d450 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  e code generator
1d460 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6f 70 65   */.    goto ope
1d470 6e 5f 63 75 72 73 6f 72 5f 73 65 74 5f 68 69 6e  n_cursor_set_hin
1d480 74 73 3b 0a 20 20 7d 0a 20 20 2f 2a 20 49 66 20  ts;.  }.  /* If 
1d490 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 6e 6f  the cursor is no
1d4a0 74 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e  t currently open
1d4b0 20 6f 72 20 69 73 20 6f 70 65 6e 20 6f 6e 20 61   or is open on a
1d4c0 20 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20   different.  ** 
1d4d0 69 6e 64 65 78 2c 20 74 68 65 6e 20 66 61 6c 6c  index, then fall
1d4e0 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50   through into OP
1d4f0 5f 4f 70 65 6e 52 65 61 64 20 74 6f 20 66 6f 72  _OpenRead to for
1d500 63 65 20 61 20 72 65 6f 70 65 6e 20 2a 2f 0a 63  ce a reopen */.c
1d510 61 73 65 20 4f 50 5f 4f 70 65 6e 52 65 61 64 3a  ase OP_OpenRead:
1d520 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 57 72 69  .case OP_OpenWri
1d530 74 65 3a 0a 0a 20 20 61 73 73 65 72 74 28 20 70  te:..  assert( p
1d540 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f  Op->opcode==OP_O
1d550 70 65 6e 57 72 69 74 65 20 7c 7c 20 70 4f 70 2d  penWrite || pOp-
1d560 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70  >p5==0 || pOp->p
1d570 35 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51  5==OPFLAG_SEEKEQ
1d580 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
1d590 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20  >bIsReader );.  
1d5a0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
1d5b0 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 52 65 61 64  ode==OP_OpenRead
1d5c0 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
1d5d0 3d 4f 50 5f 52 65 6f 70 65 6e 49 64 78 0a 20 20  =OP_ReopenIdx.  
1d5e0 20 20 20 20 20 20 20 20 7c 7c 20 70 2d 3e 72 65          || p->re
1d5f0 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20  adOnly==0 );..  
1d600 69 66 28 20 70 2d 3e 65 78 70 69 72 65 64 3d 3d  if( p->expired==
1d610 31 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  1 ){.    rc = SQ
1d620 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42  LITE_ABORT_ROLLB
1d630 41 43 4b 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62  ACK;.    goto ab
1d640 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1d650 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20  ;.  }..  nField 
1d660 3d 20 30 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20  = 0;.  pKeyInfo 
1d670 3d 20 30 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d  = 0;.  p2 = pOp-
1d680 3e 70 32 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70  >p2;.  iDb = pOp
1d690 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p3;.  assert( 
1d6a0 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62  iDb>=0 && iDb<db
1d6b0 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
1d6c0 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
1d6d0 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29  >btreeMask, iDb)
1d6e0 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d   );.  pDb = &db-
1d6f0 3e 61 44 62 5b 69 44 62 5d 3b 0a 20 20 70 58 20  >aDb[iDb];.  pX 
1d700 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 61 73  = pDb->pBt;.  as
1d710 73 65 72 74 28 20 70 58 21 3d 30 20 29 3b 0a 20  sert( pX!=0 );. 
1d720 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
1d730 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 29  ==OP_OpenWrite )
1d740 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 4f 50  {.    assert( OP
1d750 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 3d 3d  FLAG_FORDELETE==
1d760 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54 45 20  BTREE_FORDELETE 
1d770 29 3b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20  );.    wrFlag = 
1d780 42 54 52 45 45 5f 57 52 43 53 52 20 7c 20 28 70  BTREE_WRCSR | (p
1d790 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
1d7a0 46 4f 52 44 45 4c 45 54 45 29 3b 0a 20 20 20 20  FORDELETE);.    
1d7b0 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53  assert( sqlite3S
1d7c0 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64  chemaMutexHeld(d
1d7d0 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20  b, iDb, 0) );.  
1d7e0 20 20 69 66 28 20 70 44 62 2d 3e 70 53 63 68 65    if( pDb->pSche
1d7f0 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20  ma->file_format 
1d800 3c 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c  < p->minWriteFil
1d810 65 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20 20  eFormat ){.     
1d820 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65   p->minWriteFile
1d830 46 6f 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53  Format = pDb->pS
1d840 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d  chema->file_form
1d850 61 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  at;.    }.  }els
1d860 65 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20  e{.    wrFlag = 
1d870 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  0;.  }.  if( pOp
1d880 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 32  ->p5 & OPFLAG_P2
1d890 49 53 52 45 47 20 29 7b 0a 20 20 20 20 61 73 73  ISREG ){.    ass
1d8a0 65 72 74 28 20 70 32 3e 30 20 29 3b 0a 20 20 20  ert( p2>0 );.   
1d8b0 20 61 73 73 65 72 74 28 20 70 32 3c 3d 28 70 2d   assert( p2<=(p-
1d8c0 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
1d8d0 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 61 73 73  rsor) );.    ass
1d8e0 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
1d8f0 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 29  ==OP_OpenWrite )
1d900 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20 26 61 4d  ;.    pIn2 = &aM
1d910 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 61 73 73 65  em[p2];.    asse
1d920 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
1d930 49 6e 32 29 20 29 3b 0a 20 20 20 20 61 73 73 65  In2) );.    asse
1d940 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73  rt( (pIn2->flags
1d950 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
1d960 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
1d970 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
1d980 49 6e 32 29 3b 0a 20 20 20 20 70 32 20 3d 20 28  In2);.    p2 = (
1d990 69 6e 74 29 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20  int)pIn2->u.i;. 
1d9a0 20 20 20 2f 2a 20 54 68 65 20 70 32 20 76 61 6c     /* The p2 val
1d9b0 75 65 20 61 6c 77 61 79 73 20 63 6f 6d 65 73 20  ue always comes 
1d9c0 66 72 6f 6d 20 61 20 70 72 69 6f 72 20 4f 50 5f  from a prior OP_
1d9d0 43 72 65 61 74 65 42 74 72 65 65 20 6f 70 63 6f  CreateBtree opco
1d9e0 64 65 20 61 6e 64 0a 20 20 20 20 2a 2a 20 74 68  de and.    ** th
1d9f0 61 74 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61  at opcode will a
1da00 6c 77 61 79 73 20 73 65 74 20 74 68 65 20 70 32  lways set the p2
1da10 20 76 61 6c 75 65 20 74 6f 20 32 20 6f 72 20 6d   value to 2 or m
1da20 6f 72 65 20 6f 72 20 65 6c 73 65 20 66 61 69 6c  ore or else fail
1da30 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74 68 65 72  ..    ** If ther
1da40 65 20 77 65 72 65 20 61 20 66 61 69 6c 75 72 65  e were a failure
1da50 2c 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73  , the prepared s
1da60 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68  tatement would h
1da70 61 76 65 20 68 61 6c 74 65 64 0a 20 20 20 20 2a  ave halted.    *
1da80 2a 20 62 65 66 6f 72 65 20 72 65 61 63 68 69 6e  * before reachin
1da90 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  g this instructi
1daa0 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 73 73 65 72  on. */.    asser
1dab0 74 28 20 70 32 3e 3d 32 20 29 3b 0a 20 20 7d 0a  t( p2>=2 );.  }.
1dac0 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70    if( pOp->p4typ
1dad0 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 7b  e==P4_KEYINFO ){
1dae0 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20  .    pKeyInfo = 
1daf0 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f  pOp->p4.pKeyInfo
1db00 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4b  ;.    assert( pK
1db10 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43  eyInfo->enc==ENC
1db20 28 64 62 29 20 29 3b 0a 20 20 20 20 61 73 73 65  (db) );.    asse
1db30 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62  rt( pKeyInfo->db
1db40 3d 3d 64 62 20 29 3b 0a 20 20 20 20 6e 46 69 65  ==db );.    nFie
1db50 6c 64 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e  ld = pKeyInfo->n
1db60 41 6c 6c 46 69 65 6c 64 3b 0a 20 20 7d 65 6c 73  AllField;.  }els
1db70 65 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70  e if( pOp->p4typ
1db80 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 7b 0a 20  e==P4_INT32 ){. 
1db90 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d     nField = pOp-
1dba0 3e 70 34 2e 69 3b 0a 20 20 7d 0a 20 20 61 73 73  >p4.i;.  }.  ass
1dbb0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1dbc0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69  );.  assert( nFi
1dbd0 65 6c 64 3e 3d 30 20 29 3b 0a 20 20 74 65 73 74  eld>=0 );.  test
1dbe0 63 61 73 65 28 20 6e 46 69 65 6c 64 3d 3d 30 20  case( nField==0 
1dbf0 29 3b 20 20 2f 2a 20 54 61 62 6c 65 20 77 69 74  );  /* Table wit
1dc00 68 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  h INTEGER PRIMAR
1dc10 59 20 4b 45 59 20 61 6e 64 20 6e 6f 74 68 69 6e  Y KEY and nothin
1dc20 67 20 65 6c 73 65 20 2a 2f 0a 20 20 70 43 75 72  g else */.  pCur
1dc30 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f   = allocateCurso
1dc40 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 6e 46  r(p, pOp->p1, nF
1dc50 69 65 6c 64 2c 20 69 44 62 2c 20 43 55 52 54 59  ield, iDb, CURTY
1dc60 50 45 5f 42 54 52 45 45 29 3b 0a 20 20 69 66 28  PE_BTREE);.  if(
1dc70 20 70 43 75 72 3d 3d 30 20 29 20 67 6f 74 6f 20   pCur==0 ) goto 
1dc80 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 75 72 2d 3e  no_mem;.  pCur->
1dc90 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70  nullRow = 1;.  p
1dca0 43 75 72 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d  Cur->isOrdered =
1dcb0 20 31 3b 0a 20 20 70 43 75 72 2d 3e 70 67 6e 6f   1;.  pCur->pgno
1dcc0 52 6f 6f 74 20 3d 20 70 32 3b 0a 23 69 66 64 65  Root = p2;.#ifde
1dcd0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
1dce0 20 70 43 75 72 2d 3e 77 72 46 6c 61 67 20 3d 20   pCur->wrFlag = 
1dcf0 77 72 46 6c 61 67 3b 0a 23 65 6e 64 69 66 0a 20  wrFlag;.#endif. 
1dd00 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1dd10 65 65 43 75 72 73 6f 72 28 70 58 2c 20 70 32 2c  eeCursor(pX, p2,
1dd20 20 77 72 46 6c 61 67 2c 20 70 4b 65 79 49 6e 66   wrFlag, pKeyInf
1dd30 6f 2c 20 70 43 75 72 2d 3e 75 63 2e 70 43 75 72  o, pCur->uc.pCur
1dd40 73 6f 72 29 3b 0a 20 20 70 43 75 72 2d 3e 70 4b  sor);.  pCur->pK
1dd50 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66  eyInfo = pKeyInf
1dd60 6f 3b 0a 20 20 2f 2a 20 53 65 74 20 74 68 65 20  o;.  /* Set the 
1dd70 56 64 62 65 43 75 72 73 6f 72 2e 69 73 54 61 62  VdbeCursor.isTab
1dd80 6c 65 20 76 61 72 69 61 62 6c 65 2e 20 50 72 65  le variable. Pre
1dd90 76 69 6f 75 73 20 76 65 72 73 69 6f 6e 73 20 6f  vious versions o
1dda0 66 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20 75 73  f.  ** SQLite us
1ddb0 65 64 20 74 6f 20 63 68 65 63 6b 20 69 66 20 74  ed to check if t
1ddc0 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 66 6c 61  he root-page fla
1ddd0 67 73 20 77 65 72 65 20 73 61 6e 65 20 61 74 20  gs were sane at 
1dde0 74 68 69 73 20 70 6f 69 6e 74 0a 20 20 2a 2a 20  this point.  ** 
1ddf0 61 6e 64 20 72 65 70 6f 72 74 20 64 61 74 61 62  and report datab
1de00 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 20 69  ase corruption i
1de10 66 20 74 68 65 79 20 77 65 72 65 20 6e 6f 74 2c  f they were not,
1de20 20 62 75 74 20 74 68 69 73 20 63 68 65 63 6b 20   but this check 
1de30 68 61 73 0a 20 20 2a 2a 20 73 69 6e 63 65 20 6d  has.  ** since m
1de40 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20 62 74  oved into the bt
1de50 72 65 65 20 6c 61 79 65 72 2e 20 20 2a 2f 20 20  ree layer.  */  
1de60 0a 20 20 70 43 75 72 2d 3e 69 73 54 61 62 6c 65  .  pCur->isTable
1de70 20 3d 20 70 4f 70 2d 3e 70 34 74 79 70 65 21 3d   = pOp->p4type!=
1de80 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a 0a 6f 70 65  P4_KEYINFO;..ope
1de90 6e 5f 63 75 72 73 6f 72 5f 73 65 74 5f 68 69 6e  n_cursor_set_hin
1dea0 74 73 3a 0a 20 20 61 73 73 65 72 74 28 20 4f 50  ts:.  assert( OP
1deb0 46 4c 41 47 5f 42 55 4c 4b 43 53 52 3d 3d 42 54  FLAG_BULKCSR==BT
1dec0 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 20 29 3b 0a  REE_BULKLOAD );.
1ded0 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47    assert( OPFLAG
1dee0 5f 53 45 45 4b 45 51 3d 3d 42 54 52 45 45 5f 53  _SEEKEQ==BTREE_S
1def0 45 45 4b 5f 45 51 20 29 3b 0a 20 20 74 65 73 74  EEK_EQ );.  test
1df00 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 20 26 20  case( pOp->p5 & 
1df10 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 29  OPFLAG_BULKCSR )
1df20 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
1df30 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48 49  ENABLE_CURSOR_HI
1df40 4e 54 53 0a 20 20 74 65 73 74 63 61 73 65 28 20  NTS.  testcase( 
1df50 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47  pOp->p2 & OPFLAG
1df60 5f 53 45 45 4b 45 51 20 29 3b 0a 23 65 6e 64 69  _SEEKEQ );.#endi
1df70 66 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65  f.  sqlite3Btree
1df80 43 75 72 73 6f 72 48 69 6e 74 46 6c 61 67 73 28  CursorHintFlags(
1df90 70 43 75 72 2d 3e 75 63 2e 70 43 75 72 73 6f 72  pCur->uc.pCursor
1dfa0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1dfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dfc0 20 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46   (pOp->p5 & (OPF
1dfd0 4c 41 47 5f 42 55 4c 4b 43 53 52 7c 4f 50 46 4c  LAG_BULKCSR|OPFL
1dfe0 41 47 5f 53 45 45 4b 45 51 29 29 29 3b 0a 20 20  AG_SEEKEQ)));.  
1dff0 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
1e000 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1e010 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1e020 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 44 75 70   Opcode: OpenDup
1e030 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
1e040 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75  ** Open a new cu
1e050 72 73 6f 72 20 50 31 20 74 68 61 74 20 70 6f 69  rsor P1 that poi
1e060 6e 74 73 20 74 6f 20 74 68 65 20 73 61 6d 65 20  nts to the same 
1e070 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20  ephemeral table 
1e080 61 73 0a 2a 2a 20 63 75 72 73 6f 72 20 50 32 2e  as.** cursor P2.
1e090 20 20 54 68 65 20 50 32 20 63 75 72 73 6f 72 20    The P2 cursor 
1e0a0 6d 75 73 74 20 68 61 76 65 20 62 65 65 6e 20 6f  must have been o
1e0b0 70 65 6e 65 64 20 62 79 20 61 20 70 72 69 6f 72  pened by a prior
1e0c0 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1e0d0 6c 0a 2a 2a 20 6f 70 63 6f 64 65 2e 20 20 4f 6e  l.** opcode.  On
1e0e0 6c 79 20 65 70 68 65 6d 65 72 61 6c 20 63 75 72  ly ephemeral cur
1e0f0 73 6f 72 73 20 6d 61 79 20 62 65 20 64 75 70 6c  sors may be dupl
1e100 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 44 75  icated..**.** Du
1e110 70 6c 69 63 61 74 65 20 65 70 68 65 6d 65 72 61  plicate ephemera
1e120 6c 20 63 75 72 73 6f 72 73 20 61 72 65 20 75 73  l cursors are us
1e130 65 64 20 66 6f 72 20 73 65 6c 66 2d 6a 6f 69 6e  ed for self-join
1e140 73 20 6f 66 20 6d 61 74 65 72 69 61 6c 69 7a 65  s of materialize
1e150 64 20 76 69 65 77 73 2e 0a 2a 2f 0a 63 61 73 65  d views..*/.case
1e160 20 4f 50 5f 4f 70 65 6e 44 75 70 3a 20 7b 0a 20   OP_OpenDup: {. 
1e170 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 4f 72   VdbeCursor *pOr
1e180 69 67 3b 20 20 20 20 2f 2a 20 54 68 65 20 6f 72  ig;    /* The or
1e190 69 67 69 6e 61 6c 20 63 75 72 73 6f 72 20 74 6f  iginal cursor to
1e1a0 20 62 65 20 64 75 70 6c 69 63 61 74 65 64 20 2a   be duplicated *
1e1b0 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
1e1c0 70 43 78 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  pCx;      /* The
1e1d0 20 6e 65 77 20 63 75 72 73 6f 72 20 2a 2f 0a 0a   new cursor */..
1e1e0 20 20 70 4f 72 69 67 20 3d 20 70 2d 3e 61 70 43    pOrig = p->apC
1e1f0 73 72 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  sr[pOp->p2];.  a
1e200 73 73 65 72 74 28 20 70 4f 72 69 67 2d 3e 70 42  ssert( pOrig->pB
1e210 74 78 21 3d 30 20 29 3b 20 20 2f 2a 20 4f 6e 6c  tx!=0 );  /* Onl
1e220 79 20 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73  y ephemeral curs
1e230 6f 72 73 20 63 61 6e 20 62 65 20 64 75 70 6c 69  ors can be dupli
1e240 63 61 74 65 64 20 2a 2f 0a 0a 20 20 70 43 78 20  cated */..  pCx 
1e250 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
1e260 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 72  (p, pOp->p1, pOr
1e270 69 67 2d 3e 6e 46 69 65 6c 64 2c 20 2d 31 2c 20  ig->nField, -1, 
1e280 43 55 52 54 59 50 45 5f 42 54 52 45 45 29 3b 0a  CURTYPE_BTREE);.
1e290 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67    if( pCx==0 ) g
1e2a0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
1e2b0 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  x->nullRow = 1;.
1e2c0 20 20 70 43 78 2d 3e 69 73 45 70 68 65 6d 65 72    pCx->isEphemer
1e2d0 61 6c 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 70  al = 1;.  pCx->p
1e2e0 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 72 69 67 2d  KeyInfo = pOrig-
1e2f0 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 70 43 78  >pKeyInfo;.  pCx
1e300 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f 72 69  ->isTable = pOri
1e310 67 2d 3e 69 73 54 61 62 6c 65 3b 0a 20 20 70 43  g->isTable;.  pC
1e320 78 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d 20 70 4f  x->pgnoRoot = pO
1e330 72 69 67 2d 3e 70 67 6e 6f 52 6f 6f 74 3b 0a 20  rig->pgnoRoot;. 
1e340 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1e350 65 65 43 75 72 73 6f 72 28 70 4f 72 69 67 2d 3e  eeCursor(pOrig->
1e360 70 42 74 78 2c 20 70 43 78 2d 3e 70 67 6e 6f 52  pBtx, pCx->pgnoR
1e370 6f 6f 74 2c 20 42 54 52 45 45 5f 57 52 43 53 52  oot, BTREE_WRCSR
1e380 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1e390 20 20 20 20 20 20 20 20 20 20 20 20 70 43 78 2d              pCx-
1e3a0 3e 70 4b 65 79 49 6e 66 6f 2c 20 70 43 78 2d 3e  >pKeyInfo, pCx->
1e3b0 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 2f  uc.pCursor);.  /
1e3c0 2a 20 54 68 65 20 73 71 6c 69 74 65 33 42 74 72  * The sqlite3Btr
1e3d0 65 65 43 75 72 73 6f 72 28 29 20 72 6f 75 74 69  eeCursor() routi
1e3e0 6e 65 20 63 61 6e 20 6f 6e 6c 79 20 66 61 69 6c  ne can only fail
1e3f0 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 63   for the first c
1e400 75 72 73 6f 72 0a 20 20 2a 2a 20 6f 70 65 6e 65  ursor.  ** opene
1e410 64 20 66 6f 72 20 61 20 64 61 74 61 62 61 73 65  d for a database
1e420 2e 20 20 53 69 6e 63 65 20 74 68 65 72 65 20 69  .  Since there i
1e430 73 20 61 6c 72 65 61 64 79 20 61 6e 20 6f 70 65  s already an ope
1e440 6e 20 63 75 72 73 6f 72 20 77 68 65 6e 20 74 68  n cursor when th
1e450 69 73 0a 20 20 2a 2a 20 6f 70 63 6f 64 65 20 69  is.  ** opcode i
1e460 73 20 72 75 6e 2c 20 74 68 65 20 73 71 6c 69 74  s run, the sqlit
1e470 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 29 20  e3BtreeCursor() 
1e480 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20  cannot fail */. 
1e490 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
1e4a0 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 62 72 65 61  ITE_OK );.  brea
1e4b0 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.}.../* Opcode
1e4c0 3a 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  : OpenEphemeral 
1e4d0 50 31 20 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a  P1 P2 * P4 P5.**
1e4e0 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75   Synopsis: nColu
1e4f0 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e  mn=P2.**.** Open
1e500 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 50 31   a new cursor P1
1e510 20 74 6f 20 61 20 74 72 61 6e 73 69 65 6e 74 20   to a transient 
1e520 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75  table..** The cu
1e530 72 73 6f 72 20 69 73 20 61 6c 77 61 79 73 20 6f  rsor is always o
1e540 70 65 6e 65 64 20 72 65 61 64 2f 77 72 69 74 65  pened read/write
1e550 20 65 76 65 6e 20 69 66 20 0a 2a 2a 20 74 68 65   even if .** the
1e560 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 69   main database i
1e570 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 54 68  s read-only.  Th
1e580 65 20 65 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 74  e ephemeral.** t
1e590 61 62 6c 65 20 69 73 20 64 65 6c 65 74 65 64 20  able is deleted 
1e5a0 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68  automatically wh
1e5b0 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  en the cursor is
1e5c0 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50   closed..**.** P
1e5d0 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20  2 is the number 
1e5e0 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
1e5f0 65 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c  e ephemeral tabl
1e600 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72  e..** The cursor
1e610 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 42 54 72   points to a BTr
1e620 65 65 20 74 61 62 6c 65 20 69 66 20 50 34 3d 3d  ee table if P4==
1e630 30 20 61 6e 64 20 74 6f 20 61 20 42 54 72 65 65  0 and to a BTree
1e640 20 69 6e 64 65 78 0a 2a 2a 20 69 66 20 50 34 20   index.** if P4 
1e650 69 73 20 6e 6f 74 20 30 2e 20 20 49 66 20 50 34  is not 0.  If P4
1e660 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74   is not NULL, it
1e670 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 4b 65 79   points to a Key
1e680 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 0a 2a  Info structure.*
1e690 2a 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74  * that defines t
1e6a0 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 6b 65 79  he format of key
1e6b0 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a  s in the index..
1e6c0 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 70 61 72  **.** The P5 par
1e6d0 61 6d 65 74 65 72 20 63 61 6e 20 62 65 20 61 20  ameter can be a 
1e6e0 6d 61 73 6b 20 6f 66 20 74 68 65 20 42 54 52 45  mask of the BTRE
1e6f0 45 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65  E_* flags define
1e700 64 0a 2a 2a 20 69 6e 20 62 74 72 65 65 2e 68 2e  d.** in btree.h.
1e710 20 20 54 68 65 73 65 20 66 6c 61 67 73 20 63 6f    These flags co
1e720 6e 74 72 6f 6c 20 61 73 70 65 63 74 73 20 6f 66  ntrol aspects of
1e730 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f   the operation o
1e740 66 0a 2a 2a 20 74 68 65 20 62 74 72 65 65 2e 20  f.** the btree. 
1e750 20 54 68 65 20 42 54 52 45 45 5f 4f 4d 49 54 5f   The BTREE_OMIT_
1e760 4a 4f 55 52 4e 41 4c 20 61 6e 64 20 42 54 52 45  JOURNAL and BTRE
1e770 45 5f 53 49 4e 47 4c 45 20 66 6c 61 67 73 20 61  E_SINGLE flags a
1e780 72 65 0a 2a 2a 20 61 64 64 65 64 20 61 75 74 6f  re.** added auto
1e790 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f 2a  matically..*/./*
1e7a0 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 41 75 74   Opcode: OpenAut
1e7b0 6f 69 6e 64 65 78 20 50 31 20 50 32 20 2a 20 50  oindex P1 P2 * P
1e7c0 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
1e7d0 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a   nColumn=P2.**.*
1e7e0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f  * This opcode wo
1e7f0 72 6b 73 20 74 68 65 20 73 61 6d 65 20 61 73 20  rks the same as 
1e800 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
1e810 2e 20 20 49 74 20 68 61 73 20 61 0a 2a 2a 20 64  .  It has a.** d
1e820 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 74 6f  ifferent name to
1e830 20 64 69 73 74 69 6e 67 75 69 73 68 20 69 74 73   distinguish its
1e840 20 75 73 65 2e 20 20 54 61 62 6c 65 73 20 63 72   use.  Tables cr
1e850 65 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20 62  eated using.** b
1e860 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69  y this opcode wi
1e870 6c 6c 20 62 65 20 75 73 65 64 20 66 6f 72 20 61  ll be used for a
1e880 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65  utomatically cre
1e890 61 74 65 64 20 74 72 61 6e 73 69 65 6e 74 0a 2a  ated transient.*
1e8a0 2a 20 69 6e 64 69 63 65 73 20 69 6e 20 6a 6f 69  * indices in joi
1e8b0 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  ns..*/.case OP_O
1e8c0 70 65 6e 41 75 74 6f 69 6e 64 65 78 3a 20 0a 63  penAutoindex: .c
1e8d0 61 73 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d  ase OP_OpenEphem
1e8e0 65 72 61 6c 3a 20 7b 0a 20 20 56 64 62 65 43 75  eral: {.  VdbeCu
1e8f0 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 4b 65 79  rsor *pCx;.  Key
1e900 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a  Info *pKeyInfo;.
1e910 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20  .  static const 
1e920 69 6e 74 20 76 66 73 46 6c 61 67 73 20 3d 20 0a  int vfsFlags = .
1e930 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
1e940 4e 5f 52 45 41 44 57 52 49 54 45 20 7c 0a 20 20  N_READWRITE |.  
1e950 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
1e960 43 52 45 41 54 45 20 7c 0a 20 20 20 20 20 20 53  CREATE |.      S
1e970 51 4c 49 54 45 5f 4f 50 45 4e 5f 45 58 43 4c 55  QLITE_OPEN_EXCLU
1e980 53 49 56 45 20 7c 0a 20 20 20 20 20 20 53 51 4c  SIVE |.      SQL
1e990 49 54 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45 4f  ITE_OPEN_DELETEO
1e9a0 4e 43 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20 53  NCLOSE |.      S
1e9b0 51 4c 49 54 45 5f 4f 50 45 4e 5f 54 52 41 4e 53  QLITE_OPEN_TRANS
1e9c0 49 45 4e 54 5f 44 42 3b 0a 20 20 61 73 73 65 72  IENT_DB;.  asser
1e9d0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b  t( pOp->p1>=0 );
1e9e0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1e9f0 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d  p2>=0 );.  pCx =
1ea00 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28   allocateCursor(
1ea10 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  p, pOp->p1, pOp-
1ea20 3e 70 32 2c 20 2d 31 2c 20 43 55 52 54 59 50 45  >p2, -1, CURTYPE
1ea30 5f 42 54 52 45 45 29 3b 0a 20 20 69 66 28 20 70  _BTREE);.  if( p
1ea40 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  Cx==0 ) goto no_
1ea50 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c  mem;.  pCx->null
1ea60 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e  Row = 1;.  pCx->
1ea70 69 73 45 70 68 65 6d 65 72 61 6c 20 3d 20 31 3b  isEphemeral = 1;
1ea80 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
1ea90 74 72 65 65 4f 70 65 6e 28 64 62 2d 3e 70 56 66  treeOpen(db->pVf
1eaa0 73 2c 20 30 2c 20 64 62 2c 20 26 70 43 78 2d 3e  s, 0, db, &pCx->
1eab0 70 42 74 78 2c 20 0a 20 20 20 20 20 20 20 20 20  pBtx, .         
1eac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42                 B
1ead0 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41  TREE_OMIT_JOURNA
1eae0 4c 20 7c 20 42 54 52 45 45 5f 53 49 4e 47 4c 45  L | BTREE_SINGLE
1eaf0 20 7c 20 70 4f 70 2d 3e 70 35 2c 20 76 66 73 46   | pOp->p5, vfsF
1eb00 6c 61 67 73 29 3b 0a 20 20 69 66 28 20 72 63 3d  lags);.  if( rc=
1eb10 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1eb20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1eb30 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70 43  reeBeginTrans(pC
1eb40 78 2d 3e 70 42 74 78 2c 20 31 2c 20 30 29 3b 0a  x->pBtx, 1, 0);.
1eb50 20 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51    }.  if( rc==SQ
1eb60 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f  LITE_OK ){.    /
1eb70 2a 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74  * If a transient
1eb80 20 69 6e 64 65 78 20 69 73 20 72 65 71 75 69 72   index is requir
1eb90 65 64 2c 20 63 72 65 61 74 65 20 69 74 20 62 79  ed, create it by
1eba0 20 63 61 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a 20   calling.    ** 
1ebb0 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61  sqlite3BtreeCrea
1ebc0 74 65 54 61 62 6c 65 28 29 20 77 69 74 68 20 74  teTable() with t
1ebd0 68 65 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59  he BTREE_BLOBKEY
1ebe0 20 66 6c 61 67 20 62 65 66 6f 72 65 0a 20 20 20   flag before.   
1ebf0 20 2a 2a 20 6f 70 65 6e 69 6e 67 20 69 74 2e 20   ** opening it. 
1ec00 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74  If a transient t
1ec10 61 62 6c 65 20 69 73 20 72 65 71 75 69 72 65 64  able is required
1ec20 2c 20 6a 75 73 74 20 75 73 65 20 74 68 65 0a 20  , just use the. 
1ec30 20 20 20 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61     ** automatica
1ec40 6c 6c 79 20 63 72 65 61 74 65 64 20 74 61 62 6c  lly created tabl
1ec50 65 20 77 69 74 68 20 72 6f 6f 74 2d 70 61 67 65  e with root-page
1ec60 20 31 20 28 61 6e 20 42 4c 4f 42 5f 49 4e 54 4b   1 (an BLOB_INTK
1ec70 45 59 20 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a  EY table)..    *
1ec80 2f 0a 20 20 20 20 69 66 28 20 28 70 43 78 2d 3e  /.    if( (pCx->
1ec90 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49  pKeyInfo = pKeyI
1eca0 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b  nfo = pOp->p4.pK
1ecb0 65 79 49 6e 66 6f 29 21 3d 30 20 29 7b 0a 20 20  eyInfo)!=0 ){.  
1ecc0 20 20 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20      int pgno;.  
1ecd0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
1ece0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49  >p4type==P4_KEYI
1ecf0 4e 46 4f 20 29 3b 0a 20 20 20 20 20 20 72 63 20  NFO );.      rc 
1ed00 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72  = sqlite3BtreeCr
1ed10 65 61 74 65 54 61 62 6c 65 28 70 43 78 2d 3e 70  eateTable(pCx->p
1ed20 42 74 78 2c 20 26 70 67 6e 6f 2c 20 42 54 52 45  Btx, &pgno, BTRE
1ed30 45 5f 42 4c 4f 42 4b 45 59 20 7c 20 70 4f 70 2d  E_BLOBKEY | pOp-
1ed40 3e 70 35 29 3b 20 0a 20 20 20 20 20 20 69 66 28  >p5); .      if(
1ed50 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
1ed60 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
1ed70 28 20 70 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52  ( pgno==MASTER_R
1ed80 4f 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20 20 20  OOT+1 );.       
1ed90 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66   assert( pKeyInf
1eda0 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20  o->db==db );.   
1edb0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65       assert( pKe
1edc0 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28  yInfo->enc==ENC(
1edd0 64 62 29 20 29 3b 0a 20 20 20 20 20 20 20 20 70  db) );.        p
1ede0 43 78 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d 20 70  Cx->pgnoRoot = p
1edf0 67 6e 6f 3b 0a 20 20 20 20 20 20 20 20 72 63 20  gno;.        rc 
1ee00 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  = sqlite3BtreeCu
1ee10 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 78 2c 20  rsor(pCx->pBtx, 
1ee20 70 67 6e 6f 2c 20 42 54 52 45 45 5f 57 52 43 53  pgno, BTREE_WRCS
1ee30 52 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  R,.             
1ee40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee50 20 20 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 78     pKeyInfo, pCx
1ee60 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20  ->uc.pCursor);. 
1ee70 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 43 78       }.      pCx
1ee80 2d 3e 69 73 54 61 62 6c 65 20 3d 20 30 3b 0a 20  ->isTable = 0;. 
1ee90 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1eea0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1eeb0 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74  eCursor(pCx->pBt
1eec0 78 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20  x, MASTER_ROOT, 
1eed0 42 54 52 45 45 5f 57 52 43 53 52 2c 0a 20 20 20  BTREE_WRCSR,.   
1eee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eef0 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 70 43             0, pC
1ef00 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a  x->uc.pCursor);.
1ef10 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62        pCx->isTab
1ef20 6c 65 20 3d 20 31 3b 0a 20 20 20 20 20 20 70 43  le = 1;.      pC
1ef30 78 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d 20 4d 41  x->pgnoRoot = MA
1ef40 53 54 45 52 5f 52 4f 4f 54 3b 0a 20 20 20 20 7d  STER_ROOT;.    }
1ef50 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20  .  }.  if( rc ) 
1ef60 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1ef70 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 43 78 2d 3e  o_error;.  pCx->
1ef80 69 73 4f 72 64 65 72 65 64 20 3d 20 28 70 4f 70  isOrdered = (pOp
1ef90 2d 3e 70 35 21 3d 42 54 52 45 45 5f 55 4e 4f 52  ->p5!=BTREE_UNOR
1efa0 44 45 52 45 44 29 3b 0a 20 20 62 72 65 61 6b 3b  DERED);.  break;
1efb0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
1efc0 6f 72 74 65 72 4f 70 65 6e 20 50 31 20 50 32 20  orterOpen P1 P2 
1efd0 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  P3 P4 *.**.** Th
1efe0 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20  is opcode works 
1eff0 6c 69 6b 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65  like OP_OpenEphe
1f000 6d 65 72 61 6c 20 65 78 63 65 70 74 20 74 68 61  meral except tha
1f010 74 20 69 74 20 6f 70 65 6e 73 0a 2a 2a 20 61 20  t it opens.** a 
1f020 74 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20  transient index 
1f030 74 68 61 74 20 69 73 20 73 70 65 63 69 66 69 63  that is specific
1f040 61 6c 6c 79 20 64 65 73 69 67 6e 65 64 20 74 6f  ally designed to
1f050 20 73 6f 72 74 20 6c 61 72 67 65 0a 2a 2a 20 74   sort large.** t
1f060 61 62 6c 65 73 20 75 73 69 6e 67 20 61 6e 20 65  ables using an e
1f070 78 74 65 72 6e 61 6c 20 6d 65 72 67 65 2d 73 6f  xternal merge-so
1f080 72 74 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 2a 2a  rt algorithm..**
1f090 0a 2a 2a 20 49 66 20 61 72 67 75 6d 65 6e 74 20  .** If argument 
1f0a0 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  P3 is non-zero, 
1f0b0 74 68 65 6e 20 69 74 20 69 6e 64 69 63 61 74 65  then it indicate
1f0c0 73 20 74 68 61 74 20 74 68 65 20 73 6f 72 74 65  s that the sorte
1f0d0 72 20 6d 61 79 0a 2a 2a 20 61 73 73 75 6d 65 20  r may.** assume 
1f0e0 74 68 61 74 20 61 20 73 74 61 62 6c 65 20 73 6f  that a stable so
1f0f0 72 74 20 63 6f 6e 73 69 64 65 72 69 6e 67 20 74  rt considering t
1f100 68 65 20 66 69 72 73 74 20 50 33 20 66 69 65 6c  he first P3 fiel
1f110 64 73 20 6f 66 20 65 61 63 68 0a 2a 2a 20 6b 65  ds of each.** ke
1f120 79 20 69 73 20 73 75 66 66 69 63 69 65 6e 74 20  y is sufficient 
1f130 74 6f 20 70 72 6f 64 75 63 65 20 74 68 65 20 72  to produce the r
1f140 65 71 75 69 72 65 64 20 72 65 73 75 6c 74 73 2e  equired results.
1f150 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74  .*/.case OP_Sort
1f160 65 72 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65  erOpen: {.  Vdbe
1f170 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20  Cursor *pCx;..  
1f180 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1f190 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1f1a0 70 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20 20  pOp->p2>=0 );.  
1f1b0 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  pCx = allocateCu
1f1c0 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c  rsor(p, pOp->p1,
1f1d0 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 43 55   pOp->p2, -1, CU
1f1e0 52 54 59 50 45 5f 53 4f 52 54 45 52 29 3b 0a 20  RTYPE_SORTER);. 
1f1f0 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f   if( pCx==0 ) go
1f200 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78  to no_mem;.  pCx
1f210 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70  ->pKeyInfo = pOp
1f220 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20  ->p4.pKeyInfo;. 
1f230 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e 70 4b   assert( pCx->pK
1f240 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29  eyInfo->db==db )
1f250 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 78 2d  ;.  assert( pCx-
1f260 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d  >pKeyInfo->enc==
1f270 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 72 63 20  ENC(db) );.  rc 
1f280 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  = sqlite3VdbeSor
1f290 74 65 72 49 6e 69 74 28 64 62 2c 20 70 4f 70 2d  terInit(db, pOp-
1f2a0 3e 70 33 2c 20 70 43 78 29 3b 0a 20 20 69 66 28  >p3, pCx);.  if(
1f2b0 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
1f2c0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1f2d0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1f2e0 63 6f 64 65 3a 20 53 65 71 75 65 6e 63 65 54 65  code: SequenceTe
1f2f0 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  st P1 P2 * * *.*
1f300 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 28 20  * Synopsis: if( 
1f310 63 75 72 73 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b  cursor[P1].ctr++
1f320 20 29 20 70 63 20 3d 20 50 32 0a 2a 2a 0a 2a 2a   ) pc = P2.**.**
1f330 20 50 31 20 69 73 20 61 20 73 6f 72 74 65 72 20   P1 is a sorter 
1f340 63 75 72 73 6f 72 2e 20 49 66 20 74 68 65 20 73  cursor. If the s
1f350 65 71 75 65 6e 63 65 20 63 6f 75 6e 74 65 72 20  equence counter 
1f360 69 73 20 63 75 72 72 65 6e 74 6c 79 20 7a 65 72  is currently zer
1f370 6f 2c 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32  o, jump.** to P2
1f380 2e 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20  . Regardless of 
1f390 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
1f3a0 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
1f3b0 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 65 0a  , increment the.
1f3c0 2a 2a 20 74 68 65 20 73 65 71 75 65 6e 63 65 20  ** the sequence 
1f3d0 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  value..*/.case O
1f3e0 50 5f 53 65 71 75 65 6e 63 65 54 65 73 74 3a 20  P_SequenceTest: 
1f3f0 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
1f400 70 43 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  pC;.  assert( pO
1f410 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1f420 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
1f430 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
1f440 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
1f450 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
1f460 43 29 20 29 3b 0a 20 20 69 66 28 20 28 70 43 2d  C) );.  if( (pC-
1f470 3e 73 65 71 43 6f 75 6e 74 2b 2b 29 3d 3d 30 20  >seqCount++)==0 
1f480 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  ){.    goto jump
1f490 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
1f4a0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1f4b0 65 3a 20 4f 70 65 6e 50 73 65 75 64 6f 20 50 31  e: OpenPseudo P1
1f4c0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
1f4d0 6e 6f 70 73 69 73 3a 20 50 33 20 63 6f 6c 75 6d  nopsis: P3 colum
1f4e0 6e 73 20 69 6e 20 72 5b 50 32 5d 0a 2a 2a 0a 2a  ns in r[P2].**.*
1f4f0 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72  * Open a new cur
1f500 73 6f 72 20 74 68 61 74 20 70 6f 69 6e 74 73 20  sor that points 
1f510 74 6f 20 61 20 66 61 6b 65 20 74 61 62 6c 65 20  to a fake table 
1f520 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 20  that contains a 
1f530 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66  single.** row of
1f540 20 64 61 74 61 2e 20 20 54 68 65 20 63 6f 6e 74   data.  The cont
1f550 65 6e 74 20 6f 66 20 74 68 61 74 20 6f 6e 65 20  ent of that one 
1f560 72 6f 77 20 69 73 20 74 68 65 20 63 6f 6e 74 65  row is the conte
1f570 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20  nt of memory.** 
1f580 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 6e  register P2.  In
1f590 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 63 75   other words, cu
1f5a0 72 73 6f 72 20 50 31 20 62 65 63 6f 6d 65 73 20  rsor P1 becomes 
1f5b0 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65  an alias for the
1f5c0 20 0a 2a 2a 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f   .** MEM_Blob co
1f5d0 6e 74 65 6e 74 20 63 6f 6e 74 61 69 6e 65 64 20  ntent contained 
1f5e0 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
1f5f0 2a 2a 0a 2a 2a 20 41 20 70 73 65 75 64 6f 2d 74  **.** A pseudo-t
1f600 61 62 6c 65 20 63 72 65 61 74 65 64 20 62 79 20  able created by 
1f610 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75  this opcode is u
1f620 73 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 73 69  sed to hold a si
1f630 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 75 74 70  ngle.** row outp
1f640 75 74 20 66 72 6f 6d 20 74 68 65 20 73 6f 72 74  ut from the sort
1f650 65 72 20 73 6f 20 74 68 61 74 20 74 68 65 20 72  er so that the r
1f660 6f 77 20 63 61 6e 20 62 65 20 64 65 63 6f 6d 70  ow can be decomp
1f670 6f 73 65 64 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64  osed into.** ind
1f680 69 76 69 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20  ividual columns 
1f690 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 43 6f 6c  using the OP_Col
1f6a0 75 6d 6e 20 6f 70 63 6f 64 65 2e 20 20 54 68 65  umn opcode.  The
1f6b0 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64   OP_Column opcod
1f6c0 65 0a 2a 2a 20 69 73 20 74 68 65 20 6f 6e 6c 79  e.** is the only
1f6d0 20 63 75 72 73 6f 72 20 6f 70 63 6f 64 65 20 74   cursor opcode t
1f6e0 68 61 74 20 77 6f 72 6b 73 20 77 69 74 68 20 61  hat works with a
1f6f0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a   pseudo-table..*
1f700 2a 0a 2a 2a 20 50 33 20 69 73 20 74 68 65 20 6e  *.** P3 is the n
1f710 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
1f720 69 6e 20 74 68 65 20 72 65 63 6f 72 64 73 20 74  in the records t
1f730 68 61 74 20 77 69 6c 6c 20 62 65 20 73 74 6f 72  hat will be stor
1f740 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 70 73 65  ed by.** the pse
1f750 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61  udo-table..*/.ca
1f760 73 65 20 4f 50 5f 4f 70 65 6e 50 73 65 75 64 6f  se OP_OpenPseudo
1f770 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
1f780 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65 72 74   *pCx;..  assert
1f790 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a  ( pOp->p1>=0 );.
1f7a0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1f7b0 33 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20  3>=0 );.  pCx = 
1f7c0 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
1f7d0 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
1f7e0 70 33 2c 20 2d 31 2c 20 43 55 52 54 59 50 45 5f  p3, -1, CURTYPE_
1f7f0 50 53 45 55 44 4f 29 3b 0a 20 20 69 66 28 20 70  PSEUDO);.  if( p
1f800 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  Cx==0 ) goto no_
1f810 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c  mem;.  pCx->null
1f820 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e  Row = 1;.  pCx->
1f830 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 70 4f 70  seekResult = pOp
1f840 2d 3e 70 32 3b 0a 20 20 70 43 78 2d 3e 69 73 54  ->p2;.  pCx->isT
1f850 61 62 6c 65 20 3d 20 31 3b 0a 20 20 2f 2a 20 47  able = 1;.  /* G
1f860 69 76 65 20 74 68 69 73 20 70 73 65 75 64 6f 2d  ive this pseudo-
1f870 63 75 72 73 6f 72 20 61 20 66 61 6b 65 20 42 74  cursor a fake Bt
1f880 43 75 72 73 6f 72 20 70 6f 69 6e 74 65 72 20 73  Cursor pointer s
1f890 6f 20 74 68 61 74 20 70 43 78 0a 20 20 2a 2a 20  o that pCx.  ** 
1f8a0 63 61 6e 20 62 65 20 73 61 66 65 6c 79 20 70 61  can be safely pa
1f8b0 73 73 65 64 20 74 6f 20 73 71 6c 69 74 65 33 56  ssed to sqlite3V
1f8c0 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
1f8d0 29 2e 20 20 54 68 69 73 20 61 76 6f 69 64 73 20  ).  This avoids 
1f8e0 61 20 74 65 73 74 0a 20 20 2a 2a 20 66 6f 72 20  a test.  ** for 
1f8f0 70 43 78 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43  pCx->eCurType==C
1f900 55 52 54 59 50 45 5f 42 54 52 45 45 20 69 6e 73  URTYPE_BTREE ins
1f910 69 64 65 20 6f 66 20 73 71 6c 69 74 65 33 56 64  ide of sqlite3Vd
1f920 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29  beCursorMoveto()
1f930 0a 20 20 2a 2a 20 77 68 69 63 68 20 69 73 20 61  .  ** which is a
1f940 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 6f 70 74   performance opt
1f950 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 70  imization */.  p
1f960 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72 20 3d  Cx->uc.pCursor =
1f970 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 61 6b   sqlite3BtreeFak
1f980 65 56 61 6c 69 64 43 75 72 73 6f 72 28 29 3b 0a  eValidCursor();.
1f990 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1f9a0 35 3d 3d 30 20 29 3b 0a 20 20 62 72 65 61 6b 3b  5==0 );.  break;
1f9b0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
1f9c0 6c 6f 73 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  lose P1 * * * *.
1f9d0 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 20 63 75  **.** Close a cu
1f9e0 72 73 6f 72 20 70 72 65 76 69 6f 75 73 6c 79 20  rsor previously 
1f9f0 6f 70 65 6e 65 64 20 61 73 20 50 31 2e 20 20 49  opened as P1.  I
1fa00 66 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 63  f P1 is not.** c
1fa10 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 74  urrently open, t
1fa20 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
1fa30 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63  is a no-op..*/.c
1fa40 61 73 65 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a  ase OP_Close: {.
1fa50 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1fa60 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1fa70 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1fa80 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65 43  sqlite3VdbeFreeC
1fa90 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73  ursor(p, p->apCs
1faa0 72 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 70  r[pOp->p1]);.  p
1fab0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1fac0 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = 0;.  break;.}
1fad0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
1fae0 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 55 53  ENABLE_COLUMN_US
1faf0 45 44 5f 4d 41 53 4b 0a 2f 2a 20 4f 70 63 6f 64  ED_MASK./* Opcod
1fb00 65 3a 20 43 6f 6c 75 6d 6e 73 55 73 65 64 20 50  e: ColumnsUsed P
1fb10 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
1fb20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 28 77 68   This opcode (wh
1fb30 69 63 68 20 6f 6e 6c 79 20 65 78 69 73 74 73 20  ich only exists 
1fb40 69 66 20 53 51 4c 69 74 65 20 77 61 73 20 63 6f  if SQLite was co
1fb50 6d 70 69 6c 65 64 20 77 69 74 68 0a 2a 2a 20 53  mpiled with.** S
1fb60 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c  QLITE_ENABLE_COL
1fb70 55 4d 4e 5f 55 53 45 44 5f 4d 41 53 4b 29 20 69  UMN_USED_MASK) i
1fb80 64 65 6e 74 69 66 69 65 73 20 77 68 69 63 68 20  dentifies which 
1fb90 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 0a 2a  columns of the.*
1fba0 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  * table or index
1fbb0 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 20 61   for cursor P1 a
1fbc0 72 65 20 75 73 65 64 2e 20 20 50 34 20 69 73 20  re used.  P4 is 
1fbd0 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72  a 64-bit integer
1fbe0 0a 2a 2a 20 28 50 34 5f 49 4e 54 36 34 29 20 69  .** (P4_INT64) i
1fbf0 6e 20 77 68 69 63 68 20 74 68 65 20 66 69 72 73  n which the firs
1fc00 74 20 36 33 20 62 69 74 73 20 61 72 65 20 6f 6e  t 63 bits are on
1fc10 65 20 66 6f 72 20 65 61 63 68 20 6f 66 20 74 68  e for each of th
1fc20 65 0a 2a 2a 20 66 69 72 73 74 20 36 33 20 63 6f  e.** first 63 co
1fc30 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62  lumns of the tab
1fc40 6c 65 20 6f 72 20 69 6e 64 65 78 20 74 68 61 74  le or index that
1fc50 20 61 72 65 20 61 63 74 75 61 6c 6c 79 20 75 73   are actually us
1fc60 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 63 75 72  ed.** by the cur
1fc70 73 6f 72 2e 20 20 54 68 65 20 68 69 67 68 2d 6f  sor.  The high-o
1fc80 72 64 65 72 20 62 69 74 20 69 73 20 73 65 74 20  rder bit is set 
1fc90 69 66 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 61 66  if any column af
1fca0 74 65 72 0a 2a 2a 20 74 68 65 20 36 34 74 68 20  ter.** the 64th 
1fcb0 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 63 61 73 65  is used..*/.case
1fcc0 20 4f 50 5f 43 6f 6c 75 6d 6e 73 55 73 65 64 3a   OP_ColumnsUsed:
1fcd0 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
1fce0 2a 70 43 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  *pC;.  pC = p->a
1fcf0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1fd00 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
1fd10 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
1fd20 54 52 45 45 20 29 3b 0a 20 20 70 43 2d 3e 6d 61  TREE );.  pC->ma
1fd30 73 6b 55 73 65 64 20 3d 20 2a 28 75 36 34 2a 29  skUsed = *(u64*)
1fd40 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20  pOp->p4.pI64;.  
1fd50 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
1fd60 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
1fd70 47 45 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  GE P1 P2 P3 P4 *
1fd80 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
1fd90 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
1fda0 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1fdb0 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74  fers to an SQL t
1fdc0 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61  able (B-Tree tha
1fdd0 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b  t uses integer k
1fde0 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68  eys), .** use th
1fdf0 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
1fe00 74 65 72 20 50 33 20 61 73 20 74 68 65 20 6b 65  ter P3 as the ke
1fe10 79 2e 20 20 49 66 20 63 75 72 73 6f 72 20 50 31  y.  If cursor P1
1fe20 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61   refers .** to a
1fe30 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65  n SQL index, the
1fe40 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  n P3 is the firs
1fe50 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  t in an array of
1fe60 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a   P4 registers .*
1fe70 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  * that are used 
1fe80 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  as an unpacked i
1fe90 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a  ndex key. .**.**
1fea0 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73   Reposition curs
1feb0 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69  or P1 so that  i
1fec0 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
1fed0 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74  smallest entry t
1fee0 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74  hat .** is great
1fef0 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
1ff00 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75   to the key valu
1ff10 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
1ff20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 67  no records .** g
1ff30 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65  reater than or e
1ff40 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
1ff50 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65  and P2 is not ze
1ff60 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  ro, then jump to
1ff70 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   P2..**.** If th
1ff80 65 20 63 75 72 73 6f 72 20 50 31 20 77 61 73 20  e cursor P1 was 
1ff90 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 74 68 65  opened using the
1ffa0 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 66   OPFLAG_SEEKEQ f
1ffb0 6c 61 67 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a  lag, then this.*
1ffc0 2a 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c  * opcode will al
1ffd0 77 61 79 73 20 6c 61 6e 64 20 6f 6e 20 61 20 72  ways land on a r
1ffe0 65 63 6f 72 64 20 74 68 61 74 20 65 71 75 61 6c  ecord that equal
1fff0 6c 79 20 65 71 75 61 6c 73 20 74 68 65 20 6b 65  ly equals the ke
20000 79 2c 20 6f 72 0a 2a 2a 20 65 6c 73 65 20 6a 75  y, or.** else ju
20010 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
20020 6f 20 50 32 2e 20 20 57 68 65 6e 20 74 68 65 20  o P2.  When the 
20030 63 75 72 73 6f 72 20 69 73 20 4f 50 46 4c 41 47  cursor is OPFLAG
20040 5f 53 45 45 4b 45 51 2c 20 74 68 69 73 0a 2a 2a  _SEEKEQ, this.**
20050 20 6f 70 63 6f 64 65 20 6d 75 73 74 20 62 65 20   opcode must be 
20060 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 49  followed by an I
20070 64 78 4c 45 20 6f 70 63 6f 64 65 20 77 69 74 68  dxLE opcode with
20080 20 74 68 65 20 73 61 6d 65 20 61 72 67 75 6d 65   the same argume
20090 6e 74 73 2e 0a 2a 2a 20 54 68 65 20 49 64 78 4c  nts..** The IdxL
200a0 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65  E opcode will be
200b0 20 73 6b 69 70 70 65 64 20 69 66 20 74 68 69 73   skipped if this
200c0 20 6f 70 63 6f 64 65 20 73 75 63 63 65 65 64 73   opcode succeeds
200d0 2c 20 62 75 74 20 74 68 65 0a 2a 2a 20 49 64 78  , but the.** Idx
200e0 4c 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62  LE opcode will b
200f0 65 20 75 73 65 64 20 6f 6e 20 73 75 62 73 65 71  e used on subseq
20100 75 65 6e 74 20 6c 6f 6f 70 20 69 74 65 72 61 74  uent loop iterat
20110 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ions..**.** This
20120 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74   opcode leaves t
20130 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67  he cursor config
20140 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20  ured to move in 
20150 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a  forward order,.*
20160 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  * from the begin
20170 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65 20  ning toward the 
20180 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  end.  In other w
20190 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72  ords, the cursor
201a0 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65   is.** configure
201b0 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e  d to use Next, n
201c0 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53  ot Prev..**.** S
201d0 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
201e0 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 4c 74  NotFound, SeekLt
201f0 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 4c 65  , SeekGt, SeekLe
20200 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
20210 65 65 6b 47 54 20 50 31 20 50 32 20 50 33 20 50  eekGT P1 P2 P3 P
20220 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
20230 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
20240 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31  .** If cursor P1
20250 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51   refers to an SQ
20260 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20  L table (B-Tree 
20270 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65  that uses intege
20280 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65  r keys), .** use
20290 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
202a0 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b  gister P3 as a k
202b0 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31  ey. If cursor P1
202c0 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61   refers .** to a
202d0 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65  n SQL index, the
202e0 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  n P3 is the firs
202f0 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  t in an array of
20300 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a   P4 registers .*
20310 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  * that are used 
20320 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  as an unpacked i
20330 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a  ndex key. .**.**
20340 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73   Reposition curs
20350 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69  or P1 so that  i
20360 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
20370 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74  smallest entry t
20380 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74  hat .** is great
20390 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20  er than the key 
203a0 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20  value. If there 
203b0 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 67  are no records g
203c0 72 65 61 74 65 72 20 74 68 61 6e 20 0a 2a 2a 20  reater than .** 
203d0 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69  the key and P2 i
203e0 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
203f0 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
20400 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
20410 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
20420 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d   configured to m
20430 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f  ove in forward o
20440 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68  rder,.** from th
20450 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61  e beginning towa
20460 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20  rd the end.  In 
20470 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
20480 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f   cursor is.** co
20490 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20  nfigured to use 
204a0 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a  Next, not Prev..
204b0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
204c0 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
204d0 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 65 2c   SeekLt, SeekGe,
204e0 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70   SeekLe.*/./* Op
204f0 63 6f 64 65 3a 20 53 65 65 6b 4c 54 20 50 31 20  code: SeekLT P1 
20500 50 32 20 50 33 20 50 34 20 2a 20 0a 2a 2a 20 53  P2 P3 P4 * .** S
20510 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
20520 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63  3@P4].**.** If c
20530 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
20540 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  to an SQL table 
20550 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65  (B-Tree that use
20560 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c  s integer keys),
20570 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c   .** use the val
20580 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
20590 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63  3 as a key. If c
205a0 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
205b0 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e  .** to an SQL in
205c0 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20  dex, then P3 is 
205d0 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20  the first in an 
205e0 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69  array of P4 regi
205f0 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61  sters .** that a
20600 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e  re used as an un
20610 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
20620 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74  . .**.** Reposit
20630 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f  ion cursor P1 so
20640 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73   that  it points
20650 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20   to the largest 
20660 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69  entry that .** i
20670 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20  s less than the 
20680 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68  key value. If th
20690 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72  ere are no recor
206a0 64 73 20 6c 65 73 73 20 74 68 61 6e 20 0a 2a 2a  ds less than .**
206b0 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20   the key and P2 
206c0 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
206d0 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
206e0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
206f0 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
20700 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  r configured to 
20710 6d 6f 76 65 20 69 6e 20 72 65 76 65 72 73 65 20  move in reverse 
20720 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74  order,.** from t
20730 68 65 20 65 6e 64 20 74 6f 77 61 72 64 20 74 68  he end toward th
20740 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e  e beginning.  In
20750 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
20760 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63  e cursor is.** c
20770 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65  onfigured to use
20780 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e   Prev, not Next.
20790 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
207a0 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
207b0 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65  , SeekGt, SeekGe
207c0 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f  , SeekLe.*/./* O
207d0 70 63 6f 64 65 3a 20 53 65 65 6b 4c 45 20 50 31  pcode: SeekLE P1
207e0 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
207f0 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
20800 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63  3@P4].**.** If c
20810 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
20820 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  to an SQL table 
20830 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65  (B-Tree that use
20840 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c  s integer keys),
20850 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c   .** use the val
20860 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
20870 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63  3 as a key. If c
20880 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
20890 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e  .** to an SQL in
208a0 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20  dex, then P3 is 
208b0 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20  the first in an 
208c0 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69  array of P4 regi
208d0 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61  sters .** that a
208e0 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e  re used as an un
208f0 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
20900 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74  . .**.** Reposit
20910 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f  ion cursor P1 so
20920 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20   that it points 
20930 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20 65  to the largest e
20940 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73  ntry that .** is
20950 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
20960 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76  ual to the key v
20970 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61  alue. If there a
20980 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a  re no records .*
20990 2a 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65  * less than or e
209a0 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
209b0 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65  and P2 is not ze
209c0 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  ro, then jump to
209d0 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
209e0 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68  opcode leaves th
209f0 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75  e cursor configu
20a00 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72  red to move in r
20a10 65 76 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a  everse order,.**
20a20 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f   from the end to
20a30 77 61 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69  ward the beginni
20a40 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  ng.  In other wo
20a50 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20  rds, the cursor 
20a60 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64  is.** configured
20a70 20 74 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f   to use Prev, no
20a80 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 49 66  t Next..**.** If
20a90 20 74 68 65 20 63 75 72 73 6f 72 20 50 31 20 77   the cursor P1 w
20aa0 61 73 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20  as opened using 
20ab0 74 68 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45  the OPFLAG_SEEKE
20ac0 51 20 66 6c 61 67 2c 20 74 68 65 6e 20 74 68 69  Q flag, then thi
20ad0 73 0a 2a 2a 20 6f 70 63 6f 64 65 20 77 69 6c 6c  s.** opcode will
20ae0 20 61 6c 77 61 79 73 20 6c 61 6e 64 20 6f 6e 20   always land on 
20af0 61 20 72 65 63 6f 72 64 20 74 68 61 74 20 65 71  a record that eq
20b00 75 61 6c 6c 79 20 65 71 75 61 6c 73 20 74 68 65  ually equals the
20b10 20 6b 65 79 2c 20 6f 72 0a 2a 2a 20 65 6c 73 65   key, or.** else
20b20 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
20b30 79 20 74 6f 20 50 32 2e 20 20 57 68 65 6e 20 74  y to P2.  When t
20b40 68 65 20 63 75 72 73 6f 72 20 69 73 20 4f 50 46  he cursor is OPF
20b50 4c 41 47 5f 53 45 45 4b 45 51 2c 20 74 68 69 73  LAG_SEEKEQ, this
20b60 0a 2a 2a 20 6f 70 63 6f 64 65 20 6d 75 73 74 20  .** opcode must 
20b70 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  be followed by a
20b80 6e 20 49 64 78 47 45 20 6f 70 63 6f 64 65 20 77  n IdxGE opcode w
20b90 69 74 68 20 74 68 65 20 73 61 6d 65 20 61 72 67  ith the same arg
20ba0 75 6d 65 6e 74 73 2e 0a 2a 2a 20 54 68 65 20 49  uments..** The I
20bb0 64 78 47 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c  dxGE opcode will
20bc0 20 62 65 20 73 6b 69 70 70 65 64 20 69 66 20 74   be skipped if t
20bd0 68 69 73 20 6f 70 63 6f 64 65 20 73 75 63 63 65  his opcode succe
20be0 65 64 73 2c 20 62 75 74 20 74 68 65 0a 2a 2a 20  eds, but the.** 
20bf0 49 64 78 47 45 20 6f 70 63 6f 64 65 20 77 69 6c  IdxGE opcode wil
20c00 6c 20 62 65 20 75 73 65 64 20 6f 6e 20 73 75 62  l be used on sub
20c10 73 65 71 75 65 6e 74 20 6c 6f 6f 70 20 69 74 65  sequent loop ite
20c20 72 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 53  rations..**.** S
20c30 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
20c40 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 47 74  NotFound, SeekGt
20c50 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 74  , SeekGe, SeekLt
20c60 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b  .*/.case OP_Seek
20c70 4c 54 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  LT:         /* j
20c80 75 6d 70 2c 20 69 6e 33 2c 20 67 72 6f 75 70 20  ump, in3, group 
20c90 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c  */.case OP_SeekL
20ca0 45 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  E:         /* ju
20cb0 6d 70 2c 20 69 6e 33 2c 20 67 72 6f 75 70 20 2a  mp, in3, group *
20cc0 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 45  /.case OP_SeekGE
20cd0 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  :         /* jum
20ce0 70 2c 20 69 6e 33 2c 20 67 72 6f 75 70 20 2a 2f  p, in3, group */
20cf0 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 54 3a  .case OP_SeekGT:
20d00 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70   {       /* jump
20d10 2c 20 69 6e 33 2c 20 67 72 6f 75 70 20 2a 2f 0a  , in3, group */.
20d20 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20    int res;      
20d30 20 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73       /* Comparis
20d40 6f 6e 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 69  on result */.  i
20d50 6e 74 20 6f 63 3b 20 20 20 20 20 20 20 20 20 20  nt oc;          
20d60 20 20 2f 2a 20 4f 70 63 6f 64 65 20 2a 2f 0a 20    /* Opcode */. 
20d70 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
20d80 20 20 20 20 2f 2a 20 54 68 65 20 63 75 72 73 6f      /* The curso
20d90 72 20 74 6f 20 73 65 65 6b 20 2a 2f 0a 20 20 55  r to seek */.  U
20da0 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b  npackedRecord r;
20db0 20 20 2f 2a 20 54 68 65 20 6b 65 79 20 74 6f 20    /* The key to 
20dc0 73 65 65 6b 20 66 6f 72 20 2a 2f 0a 20 20 69 6e  seek for */.  in
20dd0 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20  t nField;       
20de0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
20df0 6c 75 6d 6e 73 20 6f 72 20 66 69 65 6c 64 73 20  lumns or fields 
20e00 69 6e 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20  in the key */.  
20e10 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20 20  i64 iKey;       
20e20 20 20 20 2f 2a 20 54 68 65 20 72 6f 77 69 64 20     /* The rowid 
20e30 77 65 20 61 72 65 20 74 6f 20 73 65 65 6b 20 74  we are to seek t
20e40 6f 20 2a 2f 0a 20 20 69 6e 74 20 65 71 4f 6e 6c  o */.  int eqOnl
20e50 79 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 6c  y;        /* Onl
20e60 79 20 69 6e 74 65 72 65 73 74 65 64 20 69 6e 20  y interested in 
20e70 3d 3d 20 72 65 73 75 6c 74 73 20 2a 2f 0a 0a 20  == results */.. 
20e80 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
20e90 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
20ea0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
20eb0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 21 3d  ssert( pOp->p2!=
20ec0 30 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  0 );.  pC = p->a
20ed0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
20ee0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
20ef0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
20f00 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
20f10 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
20f20 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45 20 3d  ert( OP_SeekLE =
20f30 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 31 20 29 3b  = OP_SeekLT+1 );
20f40 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65  .  assert( OP_Se
20f50 65 6b 47 45 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c  ekGE == OP_SeekL
20f60 54 2b 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28  T+2 );.  assert(
20f70 20 4f 50 5f 53 65 65 6b 47 54 20 3d 3d 20 4f 50   OP_SeekGT == OP
20f80 5f 53 65 65 6b 4c 54 2b 33 20 29 3b 0a 20 20 61  _SeekLT+3 );.  a
20f90 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72 64  ssert( pC->isOrd
20fa0 65 72 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74  ered );.  assert
20fb0 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  ( pC->uc.pCursor
20fc0 21 3d 30 20 29 3b 0a 20 20 6f 63 20 3d 20 70 4f  !=0 );.  oc = pO
20fd0 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 65 71 4f  p->opcode;.  eqO
20fe0 6e 6c 79 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 6e  nly = 0;.  pC->n
20ff0 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 23 69 66 64  ullRow = 0;.#ifd
21000 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
21010 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70    pC->seekOp = p
21020 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64  Op->opcode;.#end
21030 69 66 0a 0a 20 20 69 66 28 20 70 43 2d 3e 69 73  if..  if( pC->is
21040 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20  Table ){.    /* 
21050 54 68 65 20 42 54 52 45 45 5f 53 45 45 4b 5f 45  The BTREE_SEEK_E
21060 51 20 66 6c 61 67 20 69 73 20 6f 6e 6c 79 20 73  Q flag is only s
21070 65 74 20 6f 6e 20 69 6e 64 65 78 20 63 75 72 73  et on index curs
21080 6f 72 73 20 2a 2f 0a 20 20 20 20 61 73 73 65 72  ors */.    asser
21090 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  t( sqlite3BtreeC
210a0 75 72 73 6f 72 48 61 73 48 69 6e 74 28 70 43 2d  ursorHasHint(pC-
210b0 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 42 54 52  >uc.pCursor, BTR
210c0 45 45 5f 53 45 45 4b 5f 45 51 29 3d 3d 30 0a 20  EE_SEEK_EQ)==0. 
210d0 20 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20               || 
210e0 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 0a 20  CORRUPT_DB );.. 
210f0 20 20 20 2f 2a 20 54 68 65 20 69 6e 70 75 74 20     /* The input 
21100 76 61 6c 75 65 20 69 6e 20 50 33 20 6d 69 67 68  value in P3 migh
21110 74 20 62 65 20 6f 66 20 61 6e 79 20 74 79 70 65  t be of any type
21120 3a 20 69 6e 74 65 67 65 72 2c 20 72 65 61 6c 2c  : integer, real,
21130 20 73 74 72 69 6e 67 2c 0a 20 20 20 20 2a 2a 20   string,.    ** 
21140 62 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c 2e 20 20  blob, or NULL.  
21150 42 75 74 20 69 74 20 6e 65 65 64 73 20 74 6f 20  But it needs to 
21160 62 65 20 61 6e 20 69 6e 74 65 67 65 72 20 62 65  be an integer be
21170 66 6f 72 65 20 77 65 20 63 61 6e 20 64 6f 0a 20  fore we can do. 
21180 20 20 20 2a 2a 20 74 68 65 20 73 65 65 6b 2c 20     ** the seek, 
21190 73 6f 20 63 6f 6e 76 65 72 74 20 69 74 2e 20 2a  so convert it. *
211a0 2f 0a 20 20 20 20 70 49 6e 33 20 3d 20 26 61 4d  /.    pIn3 = &aM
211b0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
211c0 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67   if( (pIn3->flag
211d0 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d  s & (MEM_Int|MEM
211e0 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d  _Real|MEM_Str))=
211f0 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20  =MEM_Str ){.    
21200 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66    applyNumericAf
21210 66 69 6e 69 74 79 28 70 49 6e 33 2c 20 30 29 3b  finity(pIn3, 0);
21220 0a 20 20 20 20 7d 0a 20 20 20 20 69 4b 65 79 20  .    }.    iKey 
21230 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
21240 56 61 6c 75 65 28 70 49 6e 33 29 3b 0a 0a 20 20  Value(pIn3);..  
21250 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76    /* If the P3 v
21260 61 6c 75 65 20 63 6f 75 6c 64 20 6e 6f 74 20 62  alue could not b
21270 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  e converted into
21280 20 61 6e 20 69 6e 74 65 67 65 72 20 77 69 74 68   an integer with
21290 6f 75 74 0a 20 20 20 20 2a 2a 20 6c 6f 73 73 20  out.    ** loss 
212a0 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20  of information, 
212b0 74 68 65 6e 20 73 70 65 63 69 61 6c 20 70 72 6f  then special pro
212c0 63 65 73 73 69 6e 67 20 69 73 20 72 65 71 75 69  cessing is requi
212d0 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20 69 66  red... */.    if
212e0 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
212f0 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a   MEM_Int)==0 ){.
21300 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d        if( (pIn3-
21310 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61  >flags & MEM_Rea
21320 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  l)==0 ){.       
21330 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76 61   /* If the P3 va
21340 6c 75 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f  lue cannot be co
21350 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 79  nverted into any
21360 20 6b 69 6e 64 20 6f 66 20 61 20 6e 75 6d 62 65   kind of a numbe
21370 72 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68  r,.        ** th
21380 65 6e 20 74 68 65 20 73 65 65 6b 20 69 73 20 6e  en the seek is n
21390 6f 74 20 70 6f 73 73 69 62 6c 65 2c 20 73 6f 20  ot possible, so 
213a0 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20  jump to P2 */.  
213b0 20 20 20 20 20 20 56 64 62 65 42 72 61 6e 63 68        VdbeBranch
213c0 54 61 6b 65 6e 28 31 2c 32 29 3b 20 67 6f 74 6f  Taken(1,2); goto
213d0 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20   jump_to_p2;.   
213e0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
213f0 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66    }..      /* If
21400 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 69   the approximati
21410 6f 6e 20 69 4b 65 79 20 69 73 20 6c 61 72 67 65  on iKey is large
21420 72 20 74 68 61 6e 20 74 68 65 20 61 63 74 75 61  r than the actua
21430 6c 20 72 65 61 6c 20 73 65 61 72 63 68 0a 20 20  l real search.  
21440 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62      ** term, sub
21450 73 74 69 74 75 74 65 20 3e 3d 20 66 6f 72 20 3e  stitute >= for >
21460 20 61 6e 64 20 3c 20 66 6f 72 20 3c 3d 2e 20 65   and < for <=. e
21470 2e 67 2e 20 69 66 20 74 68 65 20 73 65 61 72 63  .g. if the searc
21480 68 20 74 65 72 6d 0a 20 20 20 20 20 20 2a 2a 20  h term.      ** 
21490 69 73 20 34 2e 39 20 61 6e 64 20 74 68 65 20 69  is 4.9 and the i
214a0 6e 74 65 67 65 72 20 61 70 70 72 6f 78 69 6d 61  nteger approxima
214b0 74 69 6f 6e 20 35 3a 0a 20 20 20 20 20 20 2a 2a  tion 5:.      **
214c0 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20  .      **       
214d0 20 28 78 20 3e 20 20 34 2e 39 29 20 20 20 20 2d   (x >  4.9)    -
214e0 3e 20 20 20 20 20 28 78 20 3e 3d 20 35 29 0a 20  >     (x >= 5). 
214f0 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 28       **        (
21500 78 20 3c 3d 20 34 2e 39 29 20 20 20 20 2d 3e 20  x <= 4.9)    -> 
21510 20 20 20 20 28 78 20 3c 20 20 35 29 0a 20 20 20      (x <  5).   
21520 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20     */.      if( 
21530 70 49 6e 33 2d 3e 75 2e 72 3c 28 64 6f 75 62 6c  pIn3->u.r<(doubl
21540 65 29 69 4b 65 79 20 29 7b 0a 20 20 20 20 20 20  e)iKey ){.      
21550 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
21560 6b 47 45 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 2d  kGE==(OP_SeekGT-
21570 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  1) );.        as
21580 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 54 3d  sert( OP_SeekLT=
21590 3d 28 4f 50 5f 53 65 65 6b 4c 45 2d 31 29 20 29  =(OP_SeekLE-1) )
215a0 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
215b0 28 20 28 4f 50 5f 53 65 65 6b 4c 45 20 26 20 30  ( (OP_SeekLE & 0
215c0 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b  x0001)==(OP_Seek
215d0 47 54 20 26 20 30 78 30 30 30 31 29 20 29 3b 0a  GT & 0x0001) );.
215e0 20 20 20 20 20 20 20 20 69 66 28 20 28 6f 63 20          if( (oc 
215f0 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53  & 0x0001)==(OP_S
21600 65 65 6b 47 54 20 26 20 30 78 30 30 30 31 29 20  eekGT & 0x0001) 
21610 29 20 6f 63 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a  ) oc--;.      }.
21620 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65  .      /* If the
21630 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69   approximation i
21640 4b 65 79 20 69 73 20 73 6d 61 6c 6c 65 72 20 74  Key is smaller t
21650 68 61 6e 20 74 68 65 20 61 63 74 75 61 6c 20 72  han the actual r
21660 65 61 6c 20 73 65 61 72 63 68 0a 20 20 20 20 20  eal search.     
21670 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73 74 69   ** term, substi
21680 74 75 74 65 20 3c 3d 20 66 6f 72 20 3c 20 61 6e  tute <= for < an
21690 64 20 3e 20 66 6f 72 20 3e 3d 2e 20 20 2a 2f 0a  d > for >=.  */.
216a0 20 20 20 20 20 20 65 6c 73 65 20 69 66 28 20 70        else if( p
216b0 49 6e 33 2d 3e 75 2e 72 3e 28 64 6f 75 62 6c 65  In3->u.r>(double
216c0 29 69 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20  )iKey ){.       
216d0 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
216e0 4c 45 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 2b 31  LE==(OP_SeekLT+1
216f0 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  ) );.        ass
21700 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 54 3d 3d  ert( OP_SeekGT==
21710 28 4f 50 5f 53 65 65 6b 47 45 2b 31 29 20 29 3b  (OP_SeekGE+1) );
21720 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
21730 20 28 4f 50 5f 53 65 65 6b 4c 54 20 26 20 30 78   (OP_SeekLT & 0x
21740 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47  0001)==(OP_SeekG
21750 45 20 26 20 30 78 30 30 30 31 29 20 29 3b 0a 20  E & 0x0001) );. 
21760 20 20 20 20 20 20 20 69 66 28 20 28 6f 63 20 26         if( (oc &
21770 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65   0x0001)==(OP_Se
21780 65 6b 4c 54 20 26 20 30 78 30 30 30 31 29 20 29  ekLT & 0x0001) )
21790 20 6f 63 2b 2b 3b 0a 20 20 20 20 20 20 7d 0a 20   oc++;.      }. 
217a0 20 20 20 7d 20 0a 20 20 20 20 72 63 20 3d 20 73     } .    rc = s
217b0 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
217c0 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75 63  oUnpacked(pC->uc
217d0 2e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36  .pCursor, 0, (u6
217e0 34 29 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29  4)iKey, 0, &res)
217f0 3b 0a 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f  ;.    pC->moveto
21800 54 61 72 67 65 74 20 3d 20 69 4b 65 79 3b 20 20  Target = iKey;  
21810 2f 2a 20 55 73 65 64 20 62 79 20 4f 50 5f 44 65  /* Used by OP_De
21820 6c 65 74 65 20 2a 2f 0a 20 20 20 20 69 66 28 20  lete */.    if( 
21830 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
21840 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
21850 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
21860 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
21870 20 20 20 2f 2a 20 46 6f 72 20 61 20 63 75 72 73     /* For a curs
21880 6f 72 20 77 69 74 68 20 74 68 65 20 42 54 52 45  or with the BTRE
21890 45 5f 53 45 45 4b 5f 45 51 20 68 69 6e 74 2c 20  E_SEEK_EQ hint, 
218a0 6f 6e 6c 79 20 74 68 65 20 4f 50 5f 53 65 65 6b  only the OP_Seek
218b0 47 45 20 61 6e 64 0a 20 20 20 20 2a 2a 20 4f 50  GE and.    ** OP
218c0 5f 53 65 65 6b 4c 45 20 6f 70 63 6f 64 65 73 20  _SeekLE opcodes 
218d0 61 72 65 20 61 6c 6c 6f 77 65 64 2c 20 61 6e 64  are allowed, and
218e0 20 74 68 65 73 65 20 6d 75 73 74 20 62 65 20 69   these must be i
218f0 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f  mmediately follo
21900 77 65 64 0a 20 20 20 20 2a 2a 20 62 79 20 61 6e  wed.    ** by an
21910 20 4f 50 5f 49 64 78 47 54 20 6f 72 20 4f 50 5f   OP_IdxGT or OP_
21920 49 64 78 4c 54 20 6f 70 63 6f 64 65 2c 20 72 65  IdxLT opcode, re
21930 73 70 65 63 74 69 76 65 6c 79 2c 20 77 69 74 68  spectively, with
21940 20 74 68 65 20 73 61 6d 65 20 6b 65 79 2e 0a 20   the same key.. 
21950 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 73 71     */.    if( sq
21960 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
21970 48 61 73 48 69 6e 74 28 70 43 2d 3e 75 63 2e 70  HasHint(pC->uc.p
21980 43 75 72 73 6f 72 2c 20 42 54 52 45 45 5f 53 45  Cursor, BTREE_SE
21990 45 4b 5f 45 51 29 20 29 7b 0a 20 20 20 20 20 20  EK_EQ) ){.      
219a0 65 71 4f 6e 6c 79 20 3d 20 31 3b 0a 20 20 20 20  eqOnly = 1;.    
219b0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
219c0 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 47 45  pcode==OP_SeekGE
219d0 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
219e0 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 3b 0a 20 20  =OP_SeekLE );.  
219f0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
21a00 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  1].opcode==OP_Id
21a10 78 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70  xLT || pOp[1].op
21a20 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29  code==OP_IdxGT )
21a30 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
21a40 70 4f 70 5b 31 5d 2e 70 31 3d 3d 70 4f 70 5b 30  pOp[1].p1==pOp[0
21a50 5d 2e 70 31 20 29 3b 0a 20 20 20 20 20 20 61 73  ].p1 );.      as
21a60 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 32 3d  sert( pOp[1].p2=
21a70 3d 70 4f 70 5b 30 5d 2e 70 32 20 29 3b 0a 20 20  =pOp[0].p2 );.  
21a80 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
21a90 31 5d 2e 70 33 3d 3d 70 4f 70 5b 30 5d 2e 70 33  1].p3==pOp[0].p3
21aa0 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
21ab0 28 20 70 4f 70 5b 31 5d 2e 70 34 2e 69 3d 3d 70  ( pOp[1].p4.i==p
21ac0 4f 70 5b 30 5d 2e 70 34 2e 69 20 29 3b 0a 20 20  Op[0].p4.i );.  
21ad0 20 20 7d 0a 0a 20 20 20 20 6e 46 69 65 6c 64 20    }..    nField 
21ae0 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20  = pOp->p4.i;.   
21af0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
21b00 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
21b10 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6e 46  ;.    assert( nF
21b20 69 65 6c 64 3e 30 20 29 3b 0a 20 20 20 20 72 2e  ield>0 );.    r.
21b30 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70  pKeyInfo = pC->p
21b40 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e  KeyInfo;.    r.n
21b50 46 69 65 6c 64 20 3d 20 28 75 31 36 29 6e 46 69  Field = (u16)nFi
21b60 65 6c 64 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65  eld;..    /* The
21b70 20 6e 65 78 74 20 6c 69 6e 65 20 6f 66 20 63 6f   next line of co
21b80 64 65 20 63 6f 6d 70 75 74 65 73 20 61 73 20 66  de computes as f
21b90 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c 79 20 66 61 73  ollows, only fas
21ba0 74 65 72 3a 0a 20 20 20 20 2a 2a 20 20 20 69 66  ter:.    **   if
21bb0 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20  ( oc==OP_SeekGT 
21bc0 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45  || oc==OP_SeekLE
21bd0 20 29 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20 72   ){.    **     r
21be0 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31  .default_rc = -1
21bf0 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 65 6c 73 65  ;.    **   }else
21c00 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 64  {.    **     r.d
21c10 65 66 61 75 6c 74 5f 72 63 20 3d 20 2b 31 3b 0a  efault_rc = +1;.
21c20 20 20 20 20 2a 2a 20 20 20 7d 0a 20 20 20 20 2a      **   }.    *
21c30 2f 0a 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f  /.    r.default_
21c40 72 63 20 3d 20 28 28 31 20 26 20 28 6f 63 20 2d  rc = ((1 & (oc -
21c50 20 4f 50 5f 53 65 65 6b 4c 54 29 29 20 3f 20 2d   OP_SeekLT)) ? -
21c60 31 20 3a 20 2b 31 29 3b 0a 20 20 20 20 61 73 73  1 : +1);.    ass
21c70 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b  ert( oc!=OP_Seek
21c80 47 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f  GT || r.default_
21c90 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73  rc==-1 );.    as
21ca0 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65  sert( oc!=OP_See
21cb0 6b 4c 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74  kLE || r.default
21cc0 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61  _rc==-1 );.    a
21cd0 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65  ssert( oc!=OP_Se
21ce0 65 6b 47 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c  ekGE || r.defaul
21cf0 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 20 20 20 20  t_rc==+1 );.    
21d00 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53  assert( oc!=OP_S
21d10 65 65 6b 4c 54 20 7c 7c 20 72 2e 64 65 66 61 75  eekLT || r.defau
21d20 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 0a 20 20  lt_rc==+1 );..  
21d30 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d    r.aMem = &aMem
21d40 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65  [pOp->p3];.#ifde
21d50 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
21d60 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28     { int i; for(
21d70 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b  i=0; i<r.nField;
21d80 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65   i++) assert( me
21d90 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d  mIsValid(&r.aMem
21da0 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66  [i]) ); }.#endif
21db0 0a 20 20 20 20 72 2e 65 71 53 65 65 6e 20 3d 20  .    r.eqSeen = 
21dc0 30 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  0;.    rc = sqli
21dd0 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
21de0 70 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43  packed(pC->uc.pC
21df0 75 72 73 6f 72 2c 20 26 72 2c 20 30 2c 20 30 2c  ursor, &r, 0, 0,
21e00 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20   &res);.    if( 
21e10 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
21e20 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
21e30 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
21e40 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 65 71      }.    if( eq
21e50 4f 6e 6c 79 20 26 26 20 72 2e 65 71 53 65 65 6e  Only && r.eqSeen
21e60 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  ==0 ){.      ass
21e70 65 72 74 28 20 72 65 73 21 3d 30 20 29 3b 0a 20  ert( res!=0 );. 
21e80 20 20 20 20 20 67 6f 74 6f 20 73 65 65 6b 5f 6e       goto seek_n
21e90 6f 74 5f 66 6f 75 6e 64 3b 0a 20 20 20 20 7d 0a  ot_found;.    }.
21ea0 20 20 7d 0a 20 20 70 43 2d 3e 64 65 66 65 72 72    }.  pC->deferr
21eb0 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
21ec0 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
21ed0 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 23  = CACHE_STALE;.#
21ee0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
21ef0 54 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72  T.  sqlite3_sear
21f00 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64  ch_count++;.#end
21f10 69 66 0a 20 20 69 66 28 20 6f 63 3e 3d 4f 50 5f  if.  if( oc>=OP_
21f20 53 65 65 6b 47 45 20 29 7b 20 20 61 73 73 65 72  SeekGE ){  asser
21f30 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 45  t( oc==OP_SeekGE
21f40 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47   || oc==OP_SeekG
21f50 54 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73  T );.    if( res
21f60 3c 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26  <0 || (res==0 &&
21f70 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 29 20   oc==OP_SeekGT) 
21f80 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30  ){.      res = 0
21f90 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
21fa0 69 74 65 33 42 74 72 65 65 4e 65 78 74 28 70 43  ite3BtreeNext(pC
21fb0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 30 29  ->uc.pCursor, 0)
21fc0 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
21fd0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
21fe0 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
21ff0 49 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20  ITE_DONE ){.    
22000 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
22010 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 20 20 20 20  E_OK;.          
22020 72 65 73 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  res = 1;.       
22030 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
22040 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
22050 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
22060 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
22070 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 65   }else{.      re
22080 73 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d  s = 0;.    }.  }
22090 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
220a0 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54 20  ( oc==OP_SeekLT 
220b0 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45  || oc==OP_SeekLE
220c0 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73 3e   );.    if( res>
220d0 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20  0 || (res==0 && 
220e0 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54 29 20 29  oc==OP_SeekLT) )
220f0 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b  {.      res = 0;
22100 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
22110 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73  te3BtreePrevious
22120 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
22130 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72   0);.      if( r
22140 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
22150 20 20 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d          if( rc==
22160 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a 20  SQLITE_DONE ){. 
22170 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51           rc = SQ
22180 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 20  LITE_OK;.       
22190 20 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 20 20     res = 1;.    
221a0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
221b0 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
221c0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
221d0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
221e0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
221f0 20 2f 2a 20 72 65 73 20 6d 69 67 68 74 20 62 65   /* res might be
22200 20 6e 65 67 61 74 69 76 65 20 62 65 63 61 75 73   negative becaus
22210 65 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 65  e the table is e
22220 6d 70 74 79 2e 20 20 43 68 65 63 6b 20 74 6f 0a  mpty.  Check to.
22230 20 20 20 20 20 20 2a 2a 20 73 65 65 20 69 66 20        ** see if 
22240 74 68 69 73 20 69 73 20 74 68 65 20 63 61 73 65  this is the case
22250 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
22260 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 42 74   res = sqlite3Bt
22270 72 65 65 45 6f 66 28 70 43 2d 3e 75 63 2e 70 43  reeEof(pC->uc.pC
22280 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20  ursor);.    }.  
22290 7d 0a 73 65 65 6b 5f 6e 6f 74 5f 66 6f 75 6e 64  }.seek_not_found
222a0 3a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  :.  assert( pOp-
222b0 3e 70 32 3e 30 20 29 3b 0a 20 20 56 64 62 65 42  >p2>0 );.  VdbeB
222c0 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d  ranchTaken(res!=
222d0 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20  0,2);.  if( res 
222e0 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  ){.    goto jump
222f0 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 20  _to_p2;.  }else 
22300 69 66 28 20 65 71 4f 6e 6c 79 20 29 7b 0a 20 20  if( eqOnly ){.  
22310 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d    assert( pOp[1]
22320 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c  .opcode==OP_IdxL
22330 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f  T || pOp[1].opco
22340 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a  de==OP_IdxGT );.
22350 20 20 20 20 70 4f 70 2b 2b 3b 20 2f 2a 20 53 6b      pOp++; /* Sk
22360 69 70 20 74 68 65 20 4f 50 5f 49 64 78 4c 74 20  ip the OP_IdxLt 
22370 6f 72 20 4f 50 5f 49 64 78 47 54 20 74 68 61 74  or OP_IdxGT that
22380 20 66 6f 6c 6c 6f 77 73 20 2a 2f 0a 20 20 7d 0a   follows */.  }.
22390 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
223a0 70 63 6f 64 65 3a 20 53 65 65 6b 48 69 74 20 50  pcode: SeekHit P
223b0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
223c0 6e 6f 70 73 69 73 3a 20 73 65 65 6b 48 69 74 3d  nopsis: seekHit=
223d0 50 32 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65  P2.**.** Set the
223e0 20 73 65 65 6b 48 69 74 20 66 6c 61 67 20 6f 6e   seekHit flag on
223f0 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20 74 68   cursor P1 to th
22400 65 20 76 61 6c 75 65 20 69 6e 20 50 32 2e 0a 2a  e value in P2..*
22410 2a 20 54 68 65 20 73 65 65 6b 48 69 74 20 66 6c  * The seekHit fl
22420 61 67 20 69 73 20 75 73 65 64 20 62 79 20 74 68  ag is used by th
22430 65 20 49 66 4e 6f 48 6f 70 65 20 6f 70 63 6f 64  e IfNoHope opcod
22440 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73 74  e..**.** P1 must
22450 20 62 65 20 61 20 76 61 6c 69 64 20 62 2d 74 72   be a valid b-tr
22460 65 65 20 63 75 72 73 6f 72 2e 20 20 50 32 20 6d  ee cursor.  P2 m
22470 75 73 74 20 62 65 20 61 20 62 6f 6f 6c 65 61 6e  ust be a boolean
22480 20 76 61 6c 75 65 2c 0a 2a 2a 20 65 69 74 68 65   value,.** eithe
22490 72 20 30 20 6f 72 20 31 2e 0a 2a 2f 0a 63 61 73  r 0 or 1..*/.cas
224a0 65 20 4f 50 5f 53 65 65 6b 48 69 74 3a 20 7b 0a  e OP_SeekHit: {.
224b0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
224c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
224d0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
224e0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
224f0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
22500 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
22510 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
22520 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d  ssert( pOp->p2==
22530 30 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 31 20  0 || pOp->p2==1 
22540 29 3b 0a 20 20 70 43 2d 3e 73 65 65 6b 48 69 74  );.  pC->seekHit
22550 20 3d 20 70 4f 70 2d 3e 70 32 20 26 20 31 3b 0a   = pOp->p2 & 1;.
22560 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
22570 70 63 6f 64 65 3a 20 46 6f 75 6e 64 20 50 31 20  pcode: Found P1 
22580 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
22590 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
225a0 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  @P4].**.** If P4
225b0 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  ==0 then registe
225c0 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f  r P3 holds a blo
225d0 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  b constructed by
225e0 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66   MakeRecord.  If
225f0 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65  .** P4>0 then re
22600 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65  gister P3 is the
22610 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67   first of P4 reg
22620 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d  isters that form
22630 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20   an unpacked.** 
22640 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75  record..**.** Cu
22650 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e  rsor P1 is on an
22660 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49   index btree.  I
22670 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65  f the record ide
22680 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e  ntified by P3 an
22690 64 20 50 34 0a 2a 2a 20 69 73 20 61 20 70 72 65  d P4.** is a pre
226a0 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79  fix of any entry
226b0 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75   in P1 then a ju
226c0 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32  mp is made to P2
226d0 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20 6c 65   and.** P1 is le
226e0 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74  ft pointing at t
226f0 68 65 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72  he matching entr
22700 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  y..**.** This op
22710 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73 20 74  eration leaves t
22720 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73  he cursor in a s
22730 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63 61  tate where it ca
22740 6e 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64  n be.** advanced
22750 20 69 6e 20 74 68 65 20 66 6f 72 77 61 72 64 20   in the forward 
22760 64 69 72 65 63 74 69 6f 6e 2e 20 20 54 68 65 20  direction.  The 
22770 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  Next instruction
22780 20 77 69 6c 6c 20 77 6f 72 6b 2c 0a 2a 2a 20 62   will work,.** b
22790 75 74 20 6e 6f 74 20 74 68 65 20 50 72 65 76 20  ut not the Prev 
227a0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
227b0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74  ** See also: Not
227c0 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63  Found, NoConflic
227d0 74 2c 20 4e 6f 74 45 78 69 73 74 73 2e 20 53 65  t, NotExists. Se
227e0 65 6b 47 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ekGe.*/./* Opcod
227f0 65 3a 20 4e 6f 74 46 6f 75 6e 64 20 50 31 20 50  e: NotFound P1 P
22800 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
22810 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
22820 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d  P4].**.** If P4=
22830 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72  =0 then register
22840 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62   P3 holds a blob
22850 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20   constructed by 
22860 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a  MakeRecord.  If.
22870 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67  ** P4>0 then reg
22880 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20  ister P3 is the 
22890 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69  first of P4 regi
228a0 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20  sters that form 
228b0 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72  an unpacked.** r
228c0 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75  ecord..** .** Cu
228d0 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e  rsor P1 is on an
228e0 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49   index btree.  I
228f0 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65  f the record ide
22900 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e  ntified by P3 an
22910 64 20 50 34 0a 2a 2a 20 69 73 20 6e 6f 74 20 74  d P4.** is not t
22920 68 65 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79  he prefix of any
22930 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65   entry in P1 the
22940 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65  n a jump is made
22950 20 74 6f 20 50 32 2e 20 20 49 66 20 50 31 20 0a   to P2.  If P1 .
22960 2a 2a 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20  ** does contain 
22970 61 6e 20 65 6e 74 72 79 20 77 68 6f 73 65 20 70  an entry whose p
22980 72 65 66 69 78 20 6d 61 74 63 68 65 73 20 74 68  refix matches th
22990 65 20 50 33 2f 50 34 20 72 65 63 6f 72 64 20 74  e P3/P4 record t
229a0 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66  hen control.** f
229b0 61 6c 6c 73 20 74 68 72 6f 75 67 68 20 74 6f 20  alls through to 
229c0 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
229d0 74 69 6f 6e 20 61 6e 64 20 50 31 20 69 73 20 6c  tion and P1 is l
229e0 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  eft pointing at 
229f0 74 68 65 0a 2a 2a 20 6d 61 74 63 68 69 6e 67 20  the.** matching 
22a00 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  entry..**.** Thi
22a10 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76  s operation leav
22a20 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e  es the cursor in
22a30 20 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69   a state where i
22a40 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61  t cannot be.** a
22a50 64 76 61 6e 63 65 64 20 69 6e 20 65 69 74 68 65  dvanced in eithe
22a60 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e  r direction.  In
22a70 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
22a80 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76 0a  e Next and Prev.
22a90 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f 20 6e 6f  ** opcodes do no
22aa0 74 20 77 6f 72 6b 20 61 66 74 65 72 20 74 68 69  t work after thi
22ab0 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a  s operation..**.
22ac0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
22ad0 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20 4e  nd, NotExists, N
22ae0 6f 43 6f 6e 66 6c 69 63 74 2c 20 49 66 4e 6f 48  oConflict, IfNoH
22af0 6f 70 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ope.*/./* Opcode
22b00 3a 20 49 66 4e 6f 48 6f 70 65 20 50 31 20 50 32  : IfNoHope P1 P2
22b10 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
22b20 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
22b30 34 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65  4].**.** Registe
22b40 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  r P3 is the firs
22b50 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  t of P4 register
22b60 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75  s that form an u
22b70 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72  npacked.** recor
22b80 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20  d..**.** Cursor 
22b90 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65  P1 is on an inde
22ba0 78 20 62 74 72 65 65 2e 20 20 49 66 20 74 68 65  x btree.  If the
22bb0 20 73 65 65 6b 48 69 74 20 66 6c 61 67 20 69 73   seekHit flag is
22bc0 20 73 65 74 20 6f 6e 20 50 31 2c 20 74 68 65 6e   set on P1, then
22bd0 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f 64 65 20  .** this opcode 
22be0 69 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 42 75 74  is a no-op.  But
22bf0 20 69 66 20 74 68 65 20 73 65 65 6b 48 69 74 20   if the seekHit 
22c00 66 6c 61 67 20 6f 66 20 50 31 20 69 73 20 63 6c  flag of P1 is cl
22c10 65 61 72 2c 20 74 68 65 6e 0a 2a 2a 20 63 68 65  ear, then.** che
22c20 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74 68 65  ck to see if the
22c30 72 65 20 69 73 20 61 6e 79 20 65 6e 74 72 79 20  re is any entry 
22c40 69 6e 20 50 31 20 74 68 61 74 20 6d 61 74 63 68  in P1 that match
22c50 65 73 20 74 68 65 0a 2a 2a 20 70 72 65 66 69 78  es the.** prefix
22c60 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50   identified by P
22c70 33 20 61 6e 64 20 50 34 2e 20 20 49 66 20 6e 6f  3 and P4.  If no
22c80 20 65 6e 74 72 79 20 6d 61 74 63 68 65 73 20 74   entry matches t
22c90 68 65 20 70 72 65 66 69 78 2c 0a 2a 2a 20 6a 75  he prefix,.** ju
22ca0 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72  mp to P2.  Other
22cb0 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67  wise fall throug
22cc0 68 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  h..**.** This op
22cd0 63 6f 64 65 20 62 65 68 61 76 65 73 20 6c 69 6b  code behaves lik
22ce0 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 69 66  e OP_NotFound if
22cf0 20 74 68 65 20 73 65 65 6b 48 69 74 0a 2a 2a 20   the seekHit.** 
22d00 66 6c 61 67 20 69 73 20 63 6c 65 61 72 20 61 6e  flag is clear an
22d10 64 20 69 74 20 62 65 68 61 76 65 73 20 6c 69 6b  d it behaves lik
22d20 65 20 4f 50 5f 4e 6f 6f 70 20 69 66 20 74 68 65  e OP_Noop if the
22d30 20 73 65 65 6b 48 69 74 20 66 6c 61 67 20 69 73   seekHit flag is
22d40 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73   set..**.** This
22d50 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20   opcode is used 
22d60 69 6e 20 49 4e 20 63 6c 61 75 73 65 20 70 72 6f  in IN clause pro
22d70 63 65 73 73 69 6e 67 20 66 6f 72 20 61 20 6d 75  cessing for a mu
22d80 6c 74 69 2d 63 6f 6c 75 6d 6e 20 6b 65 79 2e 0a  lti-column key..
22d90 2a 2a 20 49 66 20 61 6e 20 49 4e 20 63 6c 61 75  ** If an IN clau
22da0 73 65 20 69 73 20 61 74 74 61 63 68 65 64 20 74  se is attached t
22db0 6f 20 61 6e 20 65 6c 65 6d 65 6e 74 20 6f 66 20  o an element of 
22dc0 74 68 65 20 6b 65 79 20 6f 74 68 65 72 20 74 68  the key other th
22dd0 61 6e 20 74 68 65 0a 2a 2a 20 6c 65 66 74 2d 6d  an the.** left-m
22de0 6f 73 74 20 65 6c 65 6d 65 6e 74 2c 20 61 6e 64  ost element, and
22df0 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   if there are no
22e00 20 6d 61 74 63 68 65 73 20 6f 6e 20 74 68 65 20   matches on the 
22e10 6d 6f 73 74 20 72 65 63 65 6e 74 0a 2a 2a 20 73  most recent.** s
22e20 65 65 6b 20 6f 76 65 72 20 74 68 65 20 77 68 6f  eek over the who
22e30 6c 65 20 6b 65 79 2c 20 74 68 65 6e 20 69 74 20  le key, then it 
22e40 6d 69 67 68 74 20 62 65 20 74 68 61 74 20 6f 6e  might be that on
22e50 65 20 6f 66 20 74 68 65 20 6b 65 79 20 65 6c 65  e of the key ele
22e60 6d 65 6e 74 0a 2a 2a 20 74 6f 20 74 68 65 20 6c  ment.** to the l
22e70 65 66 74 20 69 73 20 70 72 6f 68 69 62 69 74 69  eft is prohibiti
22e80 6e 67 20 61 20 6d 61 74 63 68 2c 20 61 6e 64 20  ng a match, and 
22e90 68 65 6e 63 65 20 74 68 65 72 65 20 69 73 20 22  hence there is "
22ea0 6e 6f 20 68 6f 70 65 22 20 6f 66 0a 2a 2a 20 61  no hope" of.** a
22eb0 6e 79 20 6d 61 74 63 68 20 72 65 67 61 72 64 6c  ny match regardl
22ec0 65 73 73 20 6f 66 20 68 6f 77 20 6d 61 6e 79 20  ess of how many 
22ed0 49 4e 20 63 6c 61 75 73 65 20 65 6c 65 6d 65 6e  IN clause elemen
22ee0 74 73 20 61 72 65 20 63 68 65 63 6b 65 64 2e 0a  ts are checked..
22ef0 2a 2a 20 49 6e 20 73 75 63 68 20 61 20 63 61 73  ** In such a cas
22f00 65 2c 20 77 65 20 61 62 61 6e 64 6f 6e 20 74 68  e, we abandon th
22f10 65 20 49 4e 20 63 6c 61 75 73 65 20 73 65 61 72  e IN clause sear
22f20 63 68 20 65 61 72 6c 79 2c 20 75 73 69 6e 67 20  ch early, using 
22f30 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 2e 20  this.** opcode. 
22f40 20 54 68 65 20 6f 70 63 6f 64 65 20 6e 61 6d 65   The opcode name
22f50 20 63 6f 6d 65 73 20 66 72 6f 6d 20 74 68 65 20   comes from the 
22f60 66 61 63 74 20 74 68 61 74 20 74 68 65 0a 2a 2a  fact that the.**
22f70 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
22f80 66 20 74 68 65 72 65 20 69 73 20 22 6e 6f 20 68  f there is "no h
22f90 6f 70 65 22 20 6f 66 20 61 63 68 69 65 76 69 6e  ope" of achievin
22fa0 67 20 61 20 6d 61 74 63 68 2e 0a 2a 2a 0a 2a 2a  g a match..**.**
22fb0 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f   See also: NotFo
22fc0 75 6e 64 2c 20 53 65 65 6b 48 69 74 0a 2a 2f 0a  und, SeekHit.*/.
22fd0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 43 6f 6e  /* Opcode: NoCon
22fe0 66 6c 69 63 74 20 50 31 20 50 32 20 50 33 20 50  flict P1 P2 P3 P
22ff0 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
23000 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
23010 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65  .** If P4==0 the
23020 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f  n register P3 ho
23030 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74  lds a blob const
23040 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65  ructed by MakeRe
23050 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e  cord.  If.** P4>
23060 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
23070 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
23080 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
23090 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70  that form an unp
230a0 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e  acked.** record.
230b0 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50  .** .** Cursor P
230c0 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78  1 is on an index
230d0 20 62 74 72 65 65 2e 20 20 49 66 20 74 68 65 20   btree.  If the 
230e0 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65  record identifie
230f0 64 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a  d by P3 and P4.*
23100 2a 20 63 6f 6e 74 61 69 6e 73 20 61 6e 79 20 4e  * contains any N
23110 55 4c 4c 20 76 61 6c 75 65 2c 20 6a 75 6d 70 20  ULL value, jump 
23120 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
23130 32 2e 20 20 49 66 20 61 6c 6c 20 74 65 72 6d 73  2.  If all terms
23140 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72   of the.** recor
23150 64 20 61 72 65 20 6e 6f 74 2d 4e 55 4c 4c 20 74  d are not-NULL t
23160 68 65 6e 20 61 20 63 68 65 63 6b 20 69 73 20 64  hen a check is d
23170 6f 6e 65 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  one to determine
23180 20 69 66 20 61 6e 79 20 72 6f 77 20 69 6e 20 74   if any row in t
23190 68 65 0a 2a 2a 20 50 31 20 69 6e 64 65 78 20 62  he.** P1 index b
231a0 74 72 65 65 20 68 61 73 20 61 20 6d 61 74 63 68  tree has a match
231b0 69 6e 67 20 6b 65 79 20 70 72 65 66 69 78 2e 20  ing key prefix. 
231c0 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
231d0 20 6d 61 74 63 68 65 73 2c 20 6a 75 6d 70 0a 2a   matches, jump.*
231e0 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  * immediately to
231f0 20 50 32 2e 20 20 49 66 20 74 68 65 72 65 20 69   P2.  If there i
23200 73 20 61 20 6d 61 74 63 68 2c 20 66 61 6c 6c 20  s a match, fall 
23210 74 68 72 6f 75 67 68 20 61 6e 64 20 6c 65 61 76  through and leav
23220 65 20 74 68 65 20 50 31 0a 2a 2a 20 63 75 72 73  e the P1.** curs
23230 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74  or pointing to t
23240 68 65 20 6d 61 74 63 68 69 6e 67 20 72 6f 77 2e  he matching row.
23250 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
23260 64 65 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f  de is similar to
23270 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 77 69 74   OP_NotFound wit
23280 68 20 74 68 65 20 65 78 63 65 70 74 69 6f 6e 73  h the exceptions
23290 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 62 72 61   that the.** bra
232a0 6e 63 68 20 69 73 20 61 6c 77 61 79 73 20 74 61  nch is always ta
232b0 6b 65 6e 20 69 66 20 61 6e 79 20 70 61 72 74 20  ken if any part 
232c0 6f 66 20 74 68 65 20 73 65 61 72 63 68 20 6b 65  of the search ke
232d0 79 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e  y input is NULL.
232e0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72  .**.** This oper
232f0 61 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65  ation leaves the
23300 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61   cursor in a sta
23310 74 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e  te where it cann
23320 6f 74 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65  ot be.** advance
23330 64 20 69 6e 20 65 69 74 68 65 72 20 64 69 72 65  d in either dire
23340 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72  ction.  In other
23350 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74   words, the Next
23360 20 61 6e 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63   and Prev.** opc
23370 6f 64 65 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b  odes do not work
23380 20 61 66 74 65 72 20 74 68 69 73 20 6f 70 65 72   after this oper
23390 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  ation..**.** See
233a0 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c   also: NotFound,
233b0 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74   Found, NotExist
233c0 73 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e  s.*/.case OP_IfN
233d0 6f 48 6f 70 65 3a 20 7b 20 20 20 20 20 2f 2a 20  oHope: {     /* 
233e0 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 56  jump, in3 */.  V
233f0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
23400 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
23410 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
23420 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
23430 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
23440 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
23450 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20   pC!=0 );.  if( 
23460 70 43 2d 3e 73 65 65 6b 48 69 74 20 29 20 62 72  pC->seekHit ) br
23470 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74  eak;.  /* Fall t
23480 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 4e  hrough into OP_N
23490 6f 74 46 6f 75 6e 64 20 2a 2f 0a 7d 0a 63 61 73  otFound */.}.cas
234a0 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 3a  e OP_NoConflict:
234b0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
234c0 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74  3 */.case OP_Not
234d0 46 6f 75 6e 64 3a 20 20 20 20 20 20 20 2f 2a 20  Found:       /* 
234e0 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73  jump, in3 */.cas
234f0 65 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20 20 20  e OP_Found: {   
23500 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
23510 33 20 2a 2f 0a 20 20 69 6e 74 20 61 6c 72 65 61  3 */.  int alrea
23520 64 79 45 78 69 73 74 73 3b 0a 20 20 69 6e 74 20  dyExists;.  int 
23530 74 61 6b 65 4a 75 6d 70 3b 0a 20 20 69 6e 74 20  takeJump;.  int 
23540 69 69 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  ii;.  VdbeCursor
23550 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b   *pC;.  int res;
23560 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
23570 64 20 2a 70 46 72 65 65 3b 0a 20 20 55 6e 70 61  d *pFree;.  Unpa
23580 63 6b 65 64 52 65 63 6f 72 64 20 2a 70 49 64 78  ckedRecord *pIdx
23590 4b 65 79 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52  Key;.  UnpackedR
235a0 65 63 6f 72 64 20 72 3b 0a 0a 23 69 66 64 65 66  ecord r;..#ifdef
235b0 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 69   SQLITE_TEST.  i
235c0 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  f( pOp->opcode!=
235d0 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 29 20  OP_NoConflict ) 
235e0 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f  sqlite3_found_co
235f0 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20  unt++;.#endif.. 
23600 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
23610 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
23620 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
23630 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
23640 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
23650 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
23660 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
23670 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23 69 66  rt( pC!=0 );.#if
23680 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
23690 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20  .  pC->seekOp = 
236a0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e  pOp->opcode;.#en
236b0 64 69 66 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d  dif.  pIn3 = &aM
236c0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61  em[pOp->p3];.  a
236d0 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
236e0 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
236f0 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  EE );.  assert( 
23700 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d  pC->uc.pCursor!=
23710 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
23720 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b  C->isTable==0 );
23730 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 69  .  if( pOp->p4.i
23740 3e 30 20 29 7b 0a 20 20 20 20 72 2e 70 4b 65 79  >0 ){.    r.pKey
23750 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49  Info = pC->pKeyI
23760 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c  nfo;.    r.nFiel
23770 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34  d = (u16)pOp->p4
23780 2e 69 3b 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d  .i;.    r.aMem =
23790 20 70 49 6e 33 3b 0a 23 69 66 64 65 66 20 53 51   pIn3;.#ifdef SQ
237a0 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 66  LITE_DEBUG.    f
237b0 6f 72 28 69 69 3d 30 3b 20 69 69 3c 72 2e 6e 46  or(ii=0; ii<r.nF
237c0 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20  ield; ii++){.   
237d0 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
237e0 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 69  Valid(&r.aMem[ii
237f0 5d 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  ]) );.      asse
23800 72 74 28 20 28 72 2e 61 4d 65 6d 5b 69 69 5d 2e  rt( (r.aMem[ii].
23810 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f  flags & MEM_Zero
23820 29 3d 3d 30 20 7c 7c 20 72 2e 61 4d 65 6d 5b 69  )==0 || r.aMem[i
23830 69 5d 2e 6e 3d 3d 30 20 29 3b 0a 20 20 20 20 20  i].n==0 );.     
23840 20 69 66 28 20 69 69 20 29 20 52 45 47 49 53 54   if( ii ) REGIST
23850 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
23860 2b 69 69 2c 20 26 72 2e 61 4d 65 6d 5b 69 69 5d  +ii, &r.aMem[ii]
23870 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  );.    }.#endif.
23880 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20 26 72      pIdxKey = &r
23890 3b 0a 20 20 20 20 70 46 72 65 65 20 3d 20 30 3b  ;.    pFree = 0;
238a0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
238b0 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67  sert( pIn3->flag
238c0 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a  s & MEM_Blob );.
238d0 20 20 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42      rc = ExpandB
238e0 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20 20 20 61  lob(pIn3);.    a
238f0 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
23900 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49  E_OK || rc==SQLI
23910 54 45 5f 4e 4f 4d 45 4d 20 29 3b 0a 20 20 20 20  TE_NOMEM );.    
23920 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 6e 6f  if( rc ) goto no
23930 5f 6d 65 6d 3b 0a 20 20 20 20 70 46 72 65 65 20  _mem;.    pFree 
23940 3d 20 70 49 64 78 4b 65 79 20 3d 20 73 71 6c 69  = pIdxKey = sqli
23950 74 65 33 56 64 62 65 41 6c 6c 6f 63 55 6e 70 61  te3VdbeAllocUnpa
23960 63 6b 65 64 52 65 63 6f 72 64 28 70 43 2d 3e 70  ckedRecord(pC->p
23970 4b 65 79 49 6e 66 6f 29 3b 0a 20 20 20 20 69 66  KeyInfo);.    if
23980 28 20 70 49 64 78 4b 65 79 3d 3d 30 20 29 20 67  ( pIdxKey==0 ) g
23990 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
239a0 73 71 6c 69 74 65 33 56 64 62 65 52 65 63 6f 72  sqlite3VdbeRecor
239b0 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b 65 79  dUnpack(pC->pKey
239c0 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20 70  Info, pIn3->n, p
239d0 49 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b 65 79 29  In3->z, pIdxKey)
239e0 3b 0a 20 20 7d 0a 20 20 70 49 64 78 4b 65 79 2d  ;.  }.  pIdxKey-
239f0 3e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b  >default_rc = 0;
23a00 0a 20 20 74 61 6b 65 4a 75 6d 70 20 3d 20 30 3b  .  takeJump = 0;
23a10 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
23a20 64 65 3d 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63  de==OP_NoConflic
23a30 74 20 29 7b 0a 20 20 20 20 2f 2a 20 46 6f 72 20  t ){.    /* For 
23a40 74 68 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63  the OP_NoConflic
23a50 74 20 6f 70 63 6f 64 65 2c 20 74 61 6b 65 20 74  t opcode, take t
23a60 68 65 20 6a 75 6d 70 20 69 66 20 61 6e 79 20 6f  he jump if any o
23a70 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 69 6e 70  f the.    ** inp
23a80 75 74 20 66 69 65 6c 64 73 20 61 72 65 20 4e 55  ut fields are NU
23a90 4c 4c 2c 20 73 69 6e 63 65 20 61 6e 79 20 6b 65  LL, since any ke
23aa0 79 20 77 69 74 68 20 61 20 4e 55 4c 4c 20 77 69  y with a NULL wi
23ab0 6c 6c 20 6e 6f 74 0a 20 20 20 20 2a 2a 20 63 6f  ll not.    ** co
23ac0 6e 66 6c 69 63 74 20 2a 2f 0a 20 20 20 20 66 6f  nflict */.    fo
23ad0 72 28 69 69 3d 30 3b 20 69 69 3c 70 49 64 78 4b  r(ii=0; ii<pIdxK
23ae0 65 79 2d 3e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b  ey->nField; ii++
23af0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 49 64  ){.      if( pId
23b00 78 4b 65 79 2d 3e 61 4d 65 6d 5b 69 69 5d 2e 66  xKey->aMem[ii].f
23b10 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
23b20 29 7b 0a 20 20 20 20 20 20 20 20 74 61 6b 65 4a  ){.        takeJ
23b30 75 6d 70 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  ump = 1;.       
23b40 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
23b50 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 63 20 3d      }.  }.  rc =
23b60 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
23b70 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e  etoUnpacked(pC->
23b80 75 63 2e 70 43 75 72 73 6f 72 2c 20 70 49 64 78  uc.pCursor, pIdx
23b90 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72 65 73 29  Key, 0, 0, &res)
23ba0 3b 0a 20 20 69 66 28 20 70 46 72 65 65 20 29 20  ;.  if( pFree ) 
23bb0 73 71 6c 69 74 65 33 44 62 46 72 65 65 4e 4e 28  sqlite3DbFreeNN(
23bc0 64 62 2c 20 70 46 72 65 65 29 3b 0a 20 20 69 66  db, pFree);.  if
23bd0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
23be0 29 7b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  ){.    goto abor
23bf0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
23c00 20 20 7d 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65    }.  pC->seekRe
23c10 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 61 6c  sult = res;.  al
23c20 72 65 61 64 79 45 78 69 73 74 73 20 3d 20 28 72  readyExists = (r
23c30 65 73 3d 3d 30 29 3b 0a 20 20 70 43 2d 3e 6e 75  es==0);.  pC->nu
23c40 6c 6c 52 6f 77 20 3d 20 31 2d 61 6c 72 65 61 64  llRow = 1-alread
23c50 79 45 78 69 73 74 73 3b 0a 20 20 70 43 2d 3e 64  yExists;.  pC->d
23c60 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
23c70 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  0;.  pC->cacheSt
23c80 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
23c90 4c 45 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f  LE;.  if( pOp->o
23ca0 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20  pcode==OP_Found 
23cb0 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  ){.    VdbeBranc
23cc0 68 54 61 6b 65 6e 28 61 6c 72 65 61 64 79 45 78  hTaken(alreadyEx
23cd0 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20  ists!=0,2);.    
23ce0 69 66 28 20 61 6c 72 65 61 64 79 45 78 69 73 74  if( alreadyExist
23cf0 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  s ) goto jump_to
23d00 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  _p2;.  }else{.  
23d10 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
23d20 6e 28 74 61 6b 65 4a 75 6d 70 7c 7c 61 6c 72 65  n(takeJump||alre
23d30 61 64 79 45 78 69 73 74 73 3d 3d 30 2c 32 29 3b  adyExists==0,2);
23d40 0a 20 20 20 20 69 66 28 20 74 61 6b 65 4a 75 6d  .    if( takeJum
23d50 70 20 7c 7c 20 21 61 6c 72 65 61 64 79 45 78 69  p || !alreadyExi
23d60 73 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  sts ) goto jump_
23d70 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  to_p2;.  }.  bre
23d80 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
23d90 3a 20 53 65 65 6b 52 6f 77 69 64 20 50 31 20 50  : SeekRowid P1 P
23da0 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
23db0 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50  psis: intkey=r[P
23dc0 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74  3].**.** P1 is t
23dd0 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20 63 75  he index of a cu
23de0 72 73 6f 72 20 6f 70 65 6e 20 6f 6e 20 61 6e 20  rsor open on an 
23df0 53 51 4c 20 74 61 62 6c 65 20 62 74 72 65 65 20  SQL table btree 
23e00 28 77 69 74 68 20 69 6e 74 65 67 65 72 0a 2a 2a  (with integer.**
23e10 20 6b 65 79 73 29 2e 20 20 49 66 20 72 65 67 69   keys).  If regi
23e20 73 74 65 72 20 50 33 20 64 6f 65 73 20 6e 6f 74  ster P3 does not
23e30 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65   contain an inte
23e40 67 65 72 20 6f 72 20 69 66 20 50 31 20 64 6f 65  ger or if P1 doe
23e50 73 20 6e 6f 74 0a 2a 2a 20 63 6f 6e 74 61 69 6e  s not.** contain
23e60 20 61 20 72 65 63 6f 72 64 20 77 69 74 68 20 72   a record with r
23e70 6f 77 69 64 20 50 33 20 74 68 65 6e 20 6a 75 6d  owid P3 then jum
23e80 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
23e90 20 50 32 2e 20 20 0a 2a 2a 20 4f 72 2c 20 69 66   P2.  .** Or, if
23ea0 20 50 32 20 69 73 20 30 2c 20 72 61 69 73 65 20   P2 is 0, raise 
23eb0 61 6e 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50  an SQLITE_CORRUP
23ec0 54 20 65 72 72 6f 72 2e 20 49 66 20 50 31 20 64  T error. If P1 d
23ed0 6f 65 73 20 63 6f 6e 74 61 69 6e 0a 2a 2a 20 61  oes contain.** a
23ee0 20 72 65 63 6f 72 64 20 77 69 74 68 20 72 6f 77   record with row
23ef0 69 64 20 50 33 20 74 68 65 6e 20 0a 2a 2a 20 6c  id P3 then .** l
23f00 65 61 76 65 20 74 68 65 20 63 75 72 73 6f 72 20  eave the cursor 
23f10 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 61 74  pointing at that
23f20 20 72 65 63 6f 72 64 20 61 6e 64 20 66 61 6c 6c   record and fall
23f30 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
23f40 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75 63 74  next.** instruct
23f50 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f  ion..**.** The O
23f60 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 70 63 6f  P_NotExists opco
23f70 64 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65 20  de performs the 
23f80 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 2c 20  same operation, 
23f90 62 75 74 20 77 69 74 68 20 4f 50 5f 4e 6f 74 45  but with OP_NotE
23fa0 78 69 73 74 73 0a 2a 2a 20 74 68 65 20 50 33 20  xists.** the P3 
23fb0 72 65 67 69 73 74 65 72 20 6d 75 73 74 20 62 65  register must be
23fc0 20 67 75 61 72 61 6e 74 65 65 64 20 74 6f 20 63   guaranteed to c
23fd0 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65  ontain an intege
23fe0 72 20 76 61 6c 75 65 2e 20 20 57 69 74 68 20 74  r value.  With t
23ff0 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 2c 20 72  his.** opcode, r
24000 65 67 69 73 74 65 72 20 50 33 20 6d 69 67 68 74  egister P3 might
24010 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20   not contain an 
24020 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54  integer..**.** T
24030 68 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 6f  he OP_NotFound o
24040 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74  pcode performs t
24050 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f  he same operatio
24060 6e 20 6f 6e 20 69 6e 64 65 78 20 62 74 72 65 65  n on index btree
24070 73 0a 2a 2a 20 28 77 69 74 68 20 61 72 62 69 74  s.** (with arbit
24080 72 61 72 79 20 6d 75 6c 74 69 2d 76 61 6c 75 65  rary multi-value
24090 20 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a 20 54 68   keys)..**.** Th
240a0 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73  is opcode leaves
240b0 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61   the cursor in a
240c0 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20   state where it 
240d0 63 61 6e 6e 6f 74 20 62 65 20 61 64 76 61 6e 63  cannot be advanc
240e0 65 64 0a 2a 2a 20 69 6e 20 65 69 74 68 65 72 20  ed.** in either 
240f0 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f  direction.  In o
24100 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
24110 4e 65 78 74 20 61 6e 64 20 50 72 65 76 20 6f 70  Next and Prev op
24120 63 6f 64 65 73 20 77 69 6c 6c 0a 2a 2a 20 6e 6f  codes will.** no
24130 74 20 77 6f 72 6b 20 66 6f 6c 6c 6f 77 69 6e 67  t work following
24140 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a   this opcode..**
24150 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
24160 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e  und, NotFound, N
24170 6f 43 6f 6e 66 6c 69 63 74 2c 20 53 65 65 6b 52  oConflict, SeekR
24180 6f 77 69 64 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  owid.*/./* Opcod
24190 65 3a 20 4e 6f 74 45 78 69 73 74 73 20 50 31 20  e: NotExists P1 
241a0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
241b0 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b  opsis: intkey=r[
241c0 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  P3].**.** P1 is 
241d0 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20 63  the index of a c
241e0 75 72 73 6f 72 20 6f 70 65 6e 20 6f 6e 20 61 6e  ursor open on an
241f0 20 53 51 4c 20 74 61 62 6c 65 20 62 74 72 65 65   SQL table btree
24200 20 28 77 69 74 68 20 69 6e 74 65 67 65 72 0a 2a   (with integer.*
24210 2a 20 6b 65 79 73 29 2e 20 20 50 33 20 69 73 20  * keys).  P3 is 
24220 61 6e 20 69 6e 74 65 67 65 72 20 72 6f 77 69 64  an integer rowid
24230 2e 20 20 49 66 20 50 31 20 64 6f 65 73 20 6e 6f  .  If P1 does no
24240 74 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f  t contain a reco
24250 72 64 20 77 69 74 68 0a 2a 2a 20 72 6f 77 69 64  rd with.** rowid
24260 20 50 33 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d   P3 then jump im
24270 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
24280 20 20 4f 72 2c 20 69 66 20 50 32 20 69 73 20 30    Or, if P2 is 0
24290 2c 20 72 61 69 73 65 20 61 6e 0a 2a 2a 20 53 51  , raise an.** SQ
242a0 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 65 72 72  LITE_CORRUPT err
242b0 6f 72 2e 20 49 66 20 50 31 20 64 6f 65 73 20 63  or. If P1 does c
242c0 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f 72 64 20  ontain a record 
242d0 77 69 74 68 20 72 6f 77 69 64 20 50 33 20 74 68  with rowid P3 th
242e0 65 6e 20 0a 2a 2a 20 6c 65 61 76 65 20 74 68 65  en .** leave the
242f0 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67   cursor pointing
24300 20 61 74 20 74 68 61 74 20 72 65 63 6f 72 64 20   at that record 
24310 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  and fall through
24320 20 74 6f 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20   to the next.** 
24330 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
24340 2a 2a 20 54 68 65 20 4f 50 5f 53 65 65 6b 52 6f  ** The OP_SeekRo
24350 77 69 64 20 6f 70 63 6f 64 65 20 70 65 72 66 6f  wid opcode perfo
24360 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70 65  rms the same ope
24370 72 61 74 69 6f 6e 20 62 75 74 20 61 6c 73 6f 20  ration but also 
24380 61 6c 6c 6f 77 73 20 74 68 65 0a 2a 2a 20 50 33  allows the.** P3
24390 20 72 65 67 69 73 74 65 72 20 74 6f 20 63 6f 6e   register to con
243a0 74 61 69 6e 20 61 20 6e 6f 6e 2d 69 6e 74 65 67  tain a non-integ
243b0 65 72 20 76 61 6c 75 65 2c 20 69 6e 20 77 68 69  er value, in whi
243c0 63 68 20 63 61 73 65 20 74 68 65 20 6a 75 6d 70  ch case the jump
243d0 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 74 61   is.** always ta
243e0 6b 65 6e 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ken.  This opcod
243f0 65 20 72 65 71 75 69 72 65 73 20 74 68 61 74 20  e requires that 
24400 50 33 20 61 6c 77 61 79 73 20 63 6f 6e 74 61 69  P3 always contai
24410 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a  n an integer..**
24420 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 46 6f  .** The OP_NotFo
24430 75 6e 64 20 6f 70 63 6f 64 65 20 70 65 72 66 6f  und opcode perfo
24440 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70 65  rms the same ope
24450 72 61 74 69 6f 6e 20 6f 6e 20 69 6e 64 65 78 20  ration on index 
24460 62 74 72 65 65 73 0a 2a 2a 20 28 77 69 74 68 20  btrees.** (with 
24470 61 72 62 69 74 72 61 72 79 20 6d 75 6c 74 69 2d  arbitrary multi-
24480 76 61 6c 75 65 20 6b 65 79 73 29 2e 0a 2a 2a 0a  value keys)..**.
24490 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
244a0 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
244b0 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65 72   in a state wher
244c0 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 20 61  e it cannot be a
244d0 64 76 61 6e 63 65 64 0a 2a 2a 20 69 6e 20 65 69  dvanced.** in ei
244e0 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20  ther direction. 
244f0 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
24500 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72   the Next and Pr
24510 65 76 20 6f 70 63 6f 64 65 73 20 77 69 6c 6c 0a  ev opcodes will.
24520 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 6c 6c  ** not work foll
24530 6f 77 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64  owing this opcod
24540 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  e..**.** See als
24550 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
24560 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20  nd, NoConflict, 
24570 53 65 65 6b 52 6f 77 69 64 0a 2a 2f 0a 63 61 73  SeekRowid.*/.cas
24580 65 20 4f 50 5f 53 65 65 6b 52 6f 77 69 64 3a 20  e OP_SeekRowid: 
24590 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
245a0 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64 62 65 43  , in3 */.  VdbeC
245b0 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
245c0 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
245d0 69 6e 74 20 72 65 73 3b 0a 20 20 75 36 34 20 69  int res;.  u64 i
245e0 4b 65 79 3b 0a 0a 20 20 70 49 6e 33 20 3d 20 26  Key;..  pIn3 = &
245f0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
24600 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67   if( (pIn3->flag
24610 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20  s & MEM_Int)==0 
24620 29 7b 0a 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73  ){.    /* Make s
24630 75 72 65 20 70 49 6e 33 2d 3e 75 2e 69 20 63 6f  ure pIn3->u.i co
24640 6e 74 61 69 6e 73 20 61 20 76 61 6c 69 64 20 69  ntains a valid i
24650 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74  nteger represent
24660 61 74 69 6f 6e 20 6f 66 0a 20 20 20 20 2a 2a 20  ation of.    ** 
24670 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2c 20 62  the key value, b
24680 75 74 20 64 6f 20 6e 6f 74 20 63 68 61 6e 67 65  ut do not change
24690 20 74 68 65 20 64 61 74 61 74 79 70 65 20 6f 66   the datatype of
246a0 20 74 68 65 20 72 65 67 69 73 74 65 72 2c 20 61   the register, a
246b0 73 0a 20 20 20 20 2a 2a 20 6f 74 68 65 72 20 70  s.    ** other p
246c0 61 72 74 73 20 6f 66 20 74 68 65 20 70 65 72 70  arts of the perp
246d0 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 6d  ared statement m
246e0 69 67 68 74 20 62 65 20 64 65 70 65 6e 64 69 6e  ight be dependin
246f0 67 20 6f 6e 20 74 68 65 0a 20 20 20 20 2a 2a 20  g on the.    ** 
24700 63 75 72 72 65 6e 74 20 64 61 74 61 74 79 70 65  current datatype
24710 2e 20 2a 2f 0a 20 20 20 20 75 31 36 20 6f 72 69  . */.    u16 ori
24720 67 46 6c 61 67 73 20 3d 20 70 49 6e 33 2d 3e 66  gFlags = pIn3->f
24730 6c 61 67 73 3b 0a 20 20 20 20 69 6e 74 20 69 73  lags;.    int is
24740 4e 6f 74 49 6e 74 3b 0a 20 20 20 20 61 70 70 6c  NotInt;.    appl
24750 79 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 20  yAffinity(pIn3, 
24760 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
24770 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  IC, encoding);. 
24780 20 20 20 69 73 4e 6f 74 49 6e 74 20 3d 20 28 70     isNotInt = (p
24790 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
247a0 5f 49 6e 74 29 3d 3d 30 3b 0a 20 20 20 20 70 49  _Int)==0;.    pI
247b0 6e 33 2d 3e 66 6c 61 67 73 20 3d 20 6f 72 69 67  n3->flags = orig
247c0 46 6c 61 67 73 3b 0a 20 20 20 20 69 66 28 20 69  Flags;.    if( i
247d0 73 4e 6f 74 49 6e 74 20 29 20 67 6f 74 6f 20 6a  sNotInt ) goto j
247e0 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20  ump_to_p2;.  }. 
247f0 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
24800 20 69 6e 74 6f 20 4f 50 5f 4e 6f 74 45 78 69 73   into OP_NotExis
24810 74 73 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f  ts */.case OP_No
24820 74 45 78 69 73 74 73 3a 20 20 20 20 20 20 20 20  tExists:        
24830 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
24840 2f 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  /.  pIn3 = &aMem
24850 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73  [pOp->p3];.  ass
24860 65 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67  ert( (pIn3->flag
24870 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  s & MEM_Int)!=0 
24880 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
24890 4f 50 5f 53 65 65 6b 52 6f 77 69 64 20 29 3b 0a  OP_SeekRowid );.
248a0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
248b0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
248c0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
248d0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
248e0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
248f0 28 20 70 43 21 3d 30 20 29 3b 0a 23 69 66 64 65  ( pC!=0 );.#ifde
24900 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
24910 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
24920 3d 3d 4f 50 5f 53 65 65 6b 52 6f 77 69 64 20 29  ==OP_SeekRowid )
24930 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50   pC->seekOp = OP
24940 5f 53 65 65 6b 52 6f 77 69 64 3b 0a 23 65 6e 64  _SeekRowid;.#end
24950 69 66 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  if.  assert( pC-
24960 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61 73  >isTable );.  as
24970 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
24980 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
24990 45 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  E );.  pCrsr = p
249a0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20  C->uc.pCursor;. 
249b0 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d   assert( pCrsr!=
249c0 30 20 29 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a  0 );.  res = 0;.
249d0 20 20 69 4b 65 79 20 3d 20 70 49 6e 33 2d 3e 75    iKey = pIn3->u
249e0 2e 69 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  .i;.  rc = sqlit
249f0 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
24a00 61 63 6b 65 64 28 70 43 72 73 72 2c 20 30 2c 20  acked(pCrsr, 0, 
24a10 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a  iKey, 0, &res);.
24a20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
24a30 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d  LITE_OK || res==
24a40 30 20 29 3b 0a 20 20 70 43 2d 3e 6d 6f 76 65 74  0 );.  pC->movet
24a50 6f 54 61 72 67 65 74 20 3d 20 69 4b 65 79 3b 20  oTarget = iKey; 
24a60 20 2f 2a 20 55 73 65 64 20 62 79 20 4f 50 5f 44   /* Used by OP_D
24a70 65 6c 65 74 65 20 2a 2f 0a 20 20 70 43 2d 3e 6e  elete */.  pC->n
24a80 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 70 43  ullRow = 0;.  pC
24a90 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
24aa0 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70  CACHE_STALE;.  p
24ab0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
24ac0 6f 20 3d 20 30 3b 0a 20 20 56 64 62 65 42 72 61  o = 0;.  VdbeBra
24ad0 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c  nchTaken(res!=0,
24ae0 32 29 3b 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65  2);.  pC->seekRe
24af0 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 69 66  sult = res;.  if
24b00 28 20 72 65 73 21 3d 30 20 29 7b 0a 20 20 20 20  ( res!=0 ){.    
24b10 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
24b20 54 45 5f 4f 4b 20 29 3b 0a 20 20 20 20 69 66 28  TE_OK );.    if(
24b30 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20   pOp->p2==0 ){. 
24b40 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
24b50 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20  _CORRUPT_BKPT;. 
24b60 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
24b70 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
24b80 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28  .    }.  }.  if(
24b90 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
24ba0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
24bb0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
24bc0 63 6f 64 65 3a 20 53 65 71 75 65 6e 63 65 20 50  code: Sequence P
24bd0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
24be0 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 63 75  nopsis: r[P2]=cu
24bf0 72 73 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b 0a 2a  rsor[P1].ctr++.*
24c00 2a 0a 2a 2a 20 46 69 6e 64 20 74 68 65 20 6e 65  *.** Find the ne
24c10 78 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65 71  xt available seq
24c20 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 66 6f 72  uence number for
24c30 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 57   cursor P1..** W
24c40 72 69 74 65 20 74 68 65 20 73 65 71 75 65 6e 63  rite the sequenc
24c50 65 20 6e 75 6d 62 65 72 20 69 6e 74 6f 20 72 65  e number into re
24c60 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 54 68  gister P2..** Th
24c70 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65  e sequence numbe
24c80 72 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20  r on the cursor 
24c90 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61  is incremented a
24ca0 66 74 65 72 20 74 68 69 73 0a 2a 2a 20 69 6e 73  fter this.** ins
24cb0 74 72 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63  truction.  .*/.c
24cc0 61 73 65 20 4f 50 5f 53 65 71 75 65 6e 63 65 3a  ase OP_Sequence:
24cd0 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
24ce0 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73 65 72 74  out2 */.  assert
24cf0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
24d00 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
24d10 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
24d20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
24d30 5d 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  ]!=0 );.  assert
24d40 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  ( p->apCsr[pOp->
24d50 70 31 5d 2d 3e 65 43 75 72 54 79 70 65 21 3d 43  p1]->eCurType!=C
24d60 55 52 54 59 50 45 5f 56 54 41 42 20 29 3b 0a 20  URTYPE_VTAB );. 
24d70 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
24d80 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
24d90 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 2d    pOut->u.i = p-
24da0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d  >apCsr[pOp->p1]-
24db0 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20 62  >seqCount++;.  b
24dc0 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63  reak;.}.../* Opc
24dd0 6f 64 65 3a 20 4e 65 77 52 6f 77 69 64 20 50 31  ode: NewRowid P1
24de0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
24df0 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f  nopsis: r[P2]=ro
24e00 77 69 64 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61 20  wid.**.** Get a 
24e10 6e 65 77 20 69 6e 74 65 67 65 72 20 72 65 63 6f  new integer reco
24e20 72 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b 2e 61  rd number (a.k.a
24e30 20 22 72 6f 77 69 64 22 29 20 75 73 65 64 20 61   "rowid") used a
24e40 73 20 74 68 65 20 6b 65 79 20 74 6f 20 61 20 74  s the key to a t
24e50 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 65 63  able..** The rec
24e60 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20 6e 6f  ord number is no
24e70 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65  t previously use
24e80 64 20 61 73 20 61 20 6b 65 79 20 69 6e 20 74 68  d as a key in th
24e90 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 74 61  e database.** ta
24ea0 62 6c 65 20 74 68 61 74 20 63 75 72 73 6f 72 20  ble that cursor 
24eb0 50 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 54  P1 points to.  T
24ec0 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75  he new record nu
24ed0 6d 62 65 72 20 69 73 20 77 72 69 74 74 65 6e 0a  mber is written.
24ee0 2a 2a 20 77 72 69 74 74 65 6e 20 74 6f 20 72 65  ** written to re
24ef0 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
24f00 20 49 66 20 50 33 3e 30 20 74 68 65 6e 20 50 33   If P3>0 then P3
24f10 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20 69   is a register i
24f20 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65  n the root frame
24f30 20 6f 66 20 74 68 69 73 20 56 44 42 45 20 74 68   of this VDBE th
24f40 61 74 20 68 6f 6c 64 73 20 0a 2a 2a 20 74 68 65  at holds .** the
24f50 20 6c 61 72 67 65 73 74 20 70 72 65 76 69 6f 75   largest previou
24f60 73 6c 79 20 67 65 6e 65 72 61 74 65 64 20 72 65  sly generated re
24f70 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 4e 6f 20  cord number. No 
24f80 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  new record numbe
24f90 72 73 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f 77 65  rs are.** allowe
24fa0 64 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61  d to be less tha
24fb0 6e 20 74 68 69 73 20 76 61 6c 75 65 2e 20 57 68  n this value. Wh
24fc0 65 6e 20 74 68 69 73 20 76 61 6c 75 65 20 72 65  en this value re
24fd0 61 63 68 65 73 20 69 74 73 20 6d 61 78 69 6d 75  aches its maximu
24fe0 6d 2c 20 0a 2a 2a 20 61 6e 20 53 51 4c 49 54 45  m, .** an SQLITE
24ff0 5f 46 55 4c 4c 20 65 72 72 6f 72 20 69 73 20 67  _FULL error is g
25000 65 6e 65 72 61 74 65 64 2e 20 54 68 65 20 50 33  enerated. The P3
25010 20 72 65 67 69 73 74 65 72 20 69 73 20 75 70 64   register is upd
25020 61 74 65 64 20 77 69 74 68 20 74 68 65 20 27 0a  ated with the '.
25030 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 72 65 63  ** generated rec
25040 6f 72 64 20 6e 75 6d 62 65 72 2e 20 54 68 69 73  ord number. This
25050 20 50 33 20 6d 65 63 68 61 6e 69 73 6d 20 69 73   P3 mechanism is
25060 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69 6d   used to help im
25070 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 41  plement the.** A
25080 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65 61  UTOINCREMENT fea
25090 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ture..*/.case OP
250a0 5f 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20 20 20  _NewRowid: {    
250b0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
250c0 2f 0a 20 20 69 36 34 20 76 3b 20 20 20 20 20 20  /.  i64 v;      
250d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
250e0 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20  e new rowid */. 
250f0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
25100 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f          /* Curso
25110 72 20 6f 66 20 74 61 62 6c 65 20 74 6f 20 67 65  r of table to ge
25120 74 20 74 68 65 20 6e 65 77 20 72 6f 77 69 64 20  t the new rowid 
25130 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20 20 20  */.  int res;   
25140 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
25150 65 73 75 6c 74 20 6f 66 20 61 6e 20 73 71 6c 69  esult of an sqli
25160 74 65 33 42 74 72 65 65 4c 61 73 74 28 29 20 2a  te3BtreeLast() *
25170 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 20 20 20 20  /.  int cnt;    
25180 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
25190 75 6e 74 65 72 20 74 6f 20 6c 69 6d 69 74 20 74  unter to limit t
251a0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 65 61  he number of sea
251b0 72 63 68 65 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a  rches */.  Mem *
251c0 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  pMem;           
251d0 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f    /* Register ho
251e0 6c 64 69 6e 67 20 6c 61 72 67 65 73 74 20 72 6f  lding largest ro
251f0 77 69 64 20 66 6f 72 20 41 55 54 4f 49 4e 43 52  wid for AUTOINCR
25200 45 4d 45 4e 54 20 2a 2f 0a 20 20 56 64 62 65 46  EMENT */.  VdbeF
25210 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20  rame *pFrame;   
25220 20 20 2f 2a 20 52 6f 6f 74 20 66 72 61 6d 65 20    /* Root frame 
25230 6f 66 20 56 44 42 45 20 2a 2f 0a 0a 20 20 76 20  of VDBE */..  v 
25240 3d 20 30 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a  = 0;.  res = 0;.
25250 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
25260 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
25270 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
25280 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
25290 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
252a0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
252b0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
252c0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
252d0 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
252e0 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  e );.  assert( p
252f0 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
25300 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
25310 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70  assert( pC->uc.p
25320 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 7b  Cursor!=0 );.  {
25330 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74  .    /* The next
25340 20 72 6f 77 69 64 20 6f 72 20 72 65 63 6f 72 64   rowid or record
25350 20 6e 75 6d 62 65 72 20 28 64 69 66 66 65 72 65   number (differe
25360 6e 74 20 74 65 72 6d 73 20 66 6f 72 20 74 68 65  nt terms for the
25370 20 73 61 6d 65 0a 20 20 20 20 2a 2a 20 74 68 69   same.    ** thi
25380 6e 67 29 20 69 73 20 6f 62 74 61 69 6e 65 64 20  ng) is obtained 
25390 69 6e 20 61 20 74 77 6f 2d 73 74 65 70 20 61 6c  in a two-step al
253a0 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a  gorithm..    **.
253b0 20 20 20 20 2a 2a 20 46 69 72 73 74 20 77 65 20      ** First we 
253c0 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64 20  attempt to find 
253d0 74 68 65 20 6c 61 72 67 65 73 74 20 65 78 69 73  the largest exis
253e0 74 69 6e 67 20 72 6f 77 69 64 20 61 6e 64 20 61  ting rowid and a
253f0 64 64 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 74 6f  dd one.    ** to
25400 20 74 68 61 74 2e 20 20 42 75 74 20 69 66 20 74   that.  But if t
25410 68 65 20 6c 61 72 67 65 73 74 20 65 78 69 73 74  he largest exist
25420 69 6e 67 20 72 6f 77 69 64 20 69 73 20 61 6c 72  ing rowid is alr
25430 65 61 64 79 20 74 68 65 20 6d 61 78 69 6d 75 6d  eady the maximum
25440 0a 20 20 20 20 2a 2a 20 70 6f 73 69 74 69 76 65  .    ** positive
25450 20 69 6e 74 65 67 65 72 2c 20 77 65 20 68 61 76   integer, we hav
25460 65 20 74 6f 20 66 61 6c 6c 20 74 68 72 6f 75 67  e to fall throug
25470 68 20 74 6f 20 74 68 65 20 73 65 63 6f 6e 64 0a  h to the second.
25480 20 20 20 20 2a 2a 20 70 72 6f 62 61 62 69 6c 69      ** probabili
25490 73 74 69 63 20 61 6c 67 6f 72 69 74 68 6d 0a 20  stic algorithm. 
254a0 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65     **.    ** The
254b0 20 73 65 63 6f 6e 64 20 61 6c 67 6f 72 69 74 68   second algorith
254c0 6d 20 69 73 20 74 6f 20 73 65 6c 65 63 74 20 61  m is to select a
254d0 20 72 6f 77 69 64 20 61 74 20 72 61 6e 64 6f 6d   rowid at random
254e0 20 61 6e 64 20 73 65 65 20 69 66 0a 20 20 20 20   and see if.    
254f0 2a 2a 20 69 74 20 61 6c 72 65 61 64 79 20 65 78  ** it already ex
25500 69 73 74 73 20 69 6e 20 74 68 65 20 74 61 62 6c  ists in the tabl
25510 65 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e  e.  If it does n
25520 6f 74 20 65 78 69 73 74 2c 20 77 65 20 68 61 76  ot exist, we hav
25530 65 0a 20 20 20 20 2a 2a 20 73 75 63 63 65 65 64  e.    ** succeed
25540 65 64 2e 20 20 49 66 20 74 68 65 20 72 61 6e 64  ed.  If the rand
25550 6f 6d 20 72 6f 77 69 64 20 64 6f 65 73 20 65 78  om rowid does ex
25560 69 73 74 2c 20 77 65 20 73 65 6c 65 63 74 20 61  ist, we select a
25570 20 6e 65 77 20 6f 6e 65 0a 20 20 20 20 2a 2a 20   new one.    ** 
25580 61 6e 64 20 74 72 79 20 61 67 61 69 6e 2c 20 75  and try again, u
25590 70 20 74 6f 20 31 30 30 20 74 69 6d 65 73 2e 0a  p to 100 times..
255a0 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72      */.    asser
255b0 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
255c0 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
255d0 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a 23 20 20  _32BIT_ROWID.#  
255e0 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49   define MAX_ROWI
255f0 44 20 30 78 37 66 66 66 66 66 66 66 0a 23 65 6c  D 0x7fffffff.#el
25600 73 65 0a 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63  se.    /* Some c
25610 6f 6d 70 69 6c 65 72 73 20 63 6f 6d 70 6c 61 69  ompilers complai
25620 6e 20 61 62 6f 75 74 20 63 6f 6e 73 74 61 6e 74  n about constant
25630 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 30 78  s of the form 0x
25640 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66  7fffffffffffffff
25650 2e 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72 73 20  ..    ** Others 
25660 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 30  complain about 0
25670 78 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66  x7ffffffffffffff
25680 66 66 4c 4c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  ffLL.  The follo
25690 77 69 6e 67 20 6d 61 63 72 6f 20 73 65 65 6d 73  wing macro seems
256a0 0a 20 20 20 20 2a 2a 20 74 6f 20 70 72 6f 76 69  .    ** to provi
256b0 64 65 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20  de the constant 
256c0 77 68 69 6c 65 20 6d 61 6b 69 6e 67 20 61 6c 6c  while making all
256d0 20 63 6f 6d 70 69 6c 65 72 73 20 68 61 70 70 79   compilers happy
256e0 2e 0a 20 20 20 20 2a 2f 0a 23 20 20 20 64 65 66  ..    */.#   def
256f0 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 20 28  ine MAX_ROWID  (
25700 69 36 34 29 28 20 28 28 28 75 36 34 29 30 78 37  i64)( (((u64)0x7
25710 66 66 66 66 66 66 66 29 3c 3c 33 32 29 20 7c 20  fffffff)<<32) | 
25720 28 75 36 34 29 30 78 66 66 66 66 66 66 66 66 20  (u64)0xffffffff 
25730 29 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 69 66  ).#endif..    if
25740 28 20 21 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d  ( !pC->useRandom
25750 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 72  Rowid ){.      r
25760 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
25770 4c 61 73 74 28 70 43 2d 3e 75 63 2e 70 43 75 72  Last(pC->uc.pCur
25780 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  sor, &res);.    
25790 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
257a0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67  _OK ){.        g
257b0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
257c0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
257d0 20 20 20 20 20 20 69 66 28 20 72 65 73 20 29 7b        if( res ){
257e0 0a 20 20 20 20 20 20 20 20 76 20 3d 20 31 3b 20  .        v = 1; 
257f0 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 36 31 39 31    /* IMP: R-6191
25800 34 2d 34 38 30 37 34 20 2a 2f 0a 20 20 20 20 20  4-48074 */.     
25810 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
25820 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
25830 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69  treeCursorIsVali
25840 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  d(pC->uc.pCursor
25850 29 20 29 3b 0a 20 20 20 20 20 20 20 20 76 20 3d  ) );.        v =
25860 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74   sqlite3BtreeInt
25870 65 67 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e 70  egerKey(pC->uc.p
25880 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 20  Cursor);.       
25890 20 69 66 28 20 76 3e 3d 4d 41 58 5f 52 4f 57 49   if( v>=MAX_ROWI
258a0 44 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70  D ){.          p
258b0 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69  C->useRandomRowi
258c0 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d  d = 1;.        }
258d0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
258e0 76 2b 2b 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52  v++;   /* IMP: R
258f0 2d 32 39 35 33 38 2d 33 34 39 38 37 20 2a 2f 0a  -29538-34987 */.
25900 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
25910 7d 0a 20 20 20 20 7d 0a 0a 23 69 66 6e 64 65 66  }.    }..#ifndef
25920 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
25930 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20 20 69  OINCREMENT.    i
25940 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20  f( pOp->p3 ){.  
25950 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68      /* Assert th
25960 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64  at P3 is a valid
25970 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f   memory cell. */
25980 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
25990 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20  Op->p3>0 );.    
259a0 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20    if( p->pFrame 
259b0 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 70  ){.        for(p
259c0 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b  Frame=p->pFrame;
259d0 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74   pFrame->pParent
259e0 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d  ; pFrame=pFrame-
259f0 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 20  >pParent);.     
25a00 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61     /* Assert tha
25a10 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20  t P3 is a valid 
25a20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a  memory cell. */.
25a30 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
25a40 70 4f 70 2d 3e 70 33 3c 3d 70 46 72 61 6d 65 2d  pOp->p3<=pFrame-
25a50 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20  >nMem );.       
25a60 20 70 4d 65 6d 20 3d 20 26 70 46 72 61 6d 65 2d   pMem = &pFrame-
25a70 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  >aMem[pOp->p3];.
25a80 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
25a90 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74       /* Assert t
25aa0 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69  hat P3 is a vali
25ab0 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a  d memory cell. *
25ac0 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  /.        assert
25ad0 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  ( pOp->p3<=(p->n
25ae0 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
25af0 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 70  or) );.        p
25b00 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
25b10 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65  >p3];.        me
25b20 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
25b30 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 7d  , pMem);.      }
25b40 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d  .      assert( m
25b50 65 6d 49 73 56 61 6c 69 64 28 70 4d 65 6d 29 20  emIsValid(pMem) 
25b60 29 3b 0a 0a 20 20 20 20 20 20 52 45 47 49 53 54  );..      REGIST
25b70 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
25b80 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 73  , pMem);.      s
25b90 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
25ba0 65 67 65 72 69 66 79 28 70 4d 65 6d 29 3b 0a 20  egerify(pMem);. 
25bb0 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70 4d       assert( (pM
25bc0 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  em->flags & MEM_
25bd0 49 6e 74 29 21 3d 30 20 29 3b 20 20 2f 2a 20 6d  Int)!=0 );  /* m
25be0 65 6d 28 50 33 29 20 68 6f 6c 64 73 20 61 6e 20  em(P3) holds an 
25bf0 69 6e 74 65 67 65 72 20 2a 2f 0a 20 20 20 20 20  integer */.     
25c00 20 69 66 28 20 70 4d 65 6d 2d 3e 75 2e 69 3d 3d   if( pMem->u.i==
25c10 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20 70 43 2d  MAX_ROWID || pC-
25c20 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20  >useRandomRowid 
25c30 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
25c40 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f  SQLITE_FULL;   /
25c50 2a 20 49 4d 50 3a 20 52 2d 31 37 38 31 37 2d 30  * IMP: R-17817-0
25c60 30 36 33 30 20 2a 2f 0a 20 20 20 20 20 20 20 20  0630 */.        
25c70 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
25c80 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
25c90 0a 20 20 20 20 20 20 69 66 28 20 76 3c 70 4d 65  .      if( v<pMe
25ca0 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20  m->u.i+1 ){.    
25cb0 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e      v = pMem->u.
25cc0 69 20 2b 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20  i + 1;.      }. 
25cd0 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d       pMem->u.i =
25ce0 20 76 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66   v;.    }.#endif
25cf0 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 75 73 65  .    if( pC->use
25d00 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20  RandomRowid ){. 
25d10 20 20 20 20 20 2f 2a 20 49 4d 50 4c 45 4d 45 4e       /* IMPLEMEN
25d20 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30 37 36  TATION-OF: R-076
25d30 37 37 2d 34 31 38 38 31 20 49 66 20 74 68 65 20  77-41881 If the 
25d40 6c 61 72 67 65 73 74 20 52 4f 57 49 44 20 69 73  largest ROWID is
25d50 20 65 71 75 61 6c 20 74 6f 20 74 68 65 0a 20 20   equal to the.  
25d60 20 20 20 20 2a 2a 20 6c 61 72 67 65 73 74 20 70      ** largest p
25d70 6f 73 73 69 62 6c 65 20 69 6e 74 65 67 65 72 20  ossible integer 
25d80 28 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  (922337203685477
25d90 35 38 30 37 29 20 74 68 65 6e 20 74 68 65 20 64  5807) then the d
25da0 61 74 61 62 61 73 65 0a 20 20 20 20 20 20 2a 2a  atabase.      **
25db0 20 65 6e 67 69 6e 65 20 73 74 61 72 74 73 20 70   engine starts p
25dc0 69 63 6b 69 6e 67 20 70 6f 73 69 74 69 76 65 20  icking positive 
25dd0 63 61 6e 64 69 64 61 74 65 20 52 4f 57 49 44 73  candidate ROWIDs
25de0 20 61 74 20 72 61 6e 64 6f 6d 20 75 6e 74 69 6c   at random until
25df0 0a 20 20 20 20 20 20 2a 2a 20 69 74 20 66 69 6e  .      ** it fin
25e00 64 73 20 6f 6e 65 20 74 68 61 74 20 69 73 20 6e  ds one that is n
25e10 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73  ot previously us
25e20 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  ed. */.      ass
25e30 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20  ert( pOp->p3==0 
25e40 29 3b 20 20 2f 2a 20 57 65 20 63 61 6e 6e 6f 74  );  /* We cannot
25e50 20 62 65 20 69 6e 20 72 61 6e 64 6f 6d 20 72 6f   be in random ro
25e60 77 69 64 20 6d 6f 64 65 20 69 66 20 74 68 69 73  wid mode if this
25e70 20 69 73 0a 20 20 20 20 20 20 20 20 20 20 20 20   is.            
25e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e90 20 2a 2a 20 61 6e 20 41 55 54 4f 49 4e 43 52 45   ** an AUTOINCRE
25ea0 4d 45 4e 54 20 74 61 62 6c 65 2e 20 2a 2f 0a 20  MENT table. */. 
25eb0 20 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a 20 20       cnt = 0;.  
25ec0 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20      do{.        
25ed0 73 71 6c 69 74 65 33 5f 72 61 6e 64 6f 6d 6e 65  sqlite3_randomne
25ee0 73 73 28 73 69 7a 65 6f 66 28 76 29 2c 20 26 76  ss(sizeof(v), &v
25ef0 29 3b 0a 20 20 20 20 20 20 20 20 76 20 26 3d 20  );.        v &= 
25f00 28 4d 41 58 5f 52 4f 57 49 44 3e 3e 31 29 3b 20  (MAX_ROWID>>1); 
25f10 76 2b 2b 3b 20 20 2f 2a 20 45 6e 73 75 72 65 20  v++;  /* Ensure 
25f20 74 68 61 74 20 76 20 69 73 20 67 72 65 61 74 65  that v is greate
25f30 72 20 74 68 61 6e 20 7a 65 72 6f 20 2a 2f 0a 20  r than zero */. 
25f40 20 20 20 20 20 7d 77 68 69 6c 65 28 20 20 28 28       }while(  ((
25f50 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
25f60 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
25f70 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
25f80 30 2c 20 28 75 36 34 29 76 2c 0a 20 20 20 20 20  0, (u64)v,.     
25f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25fb0 20 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 26              0, &
25fc0 72 65 73 29 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b  res))==SQLITE_OK
25fd0 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 26 26  ).            &&
25fe0 20 28 72 65 73 3d 3d 30 29 0a 20 20 20 20 20 20   (res==0).      
25ff0 20 20 20 20 20 20 26 26 20 28 2b 2b 63 6e 74 3c        && (++cnt<
26000 31 30 30 29 29 3b 0a 20 20 20 20 20 20 69 66 28  100));.      if(
26010 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
26020 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
26030 20 20 20 20 20 69 66 28 20 72 65 73 3d 3d 30 20       if( res==0 
26040 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
26050 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f  SQLITE_FULL;   /
26060 2a 20 49 4d 50 3a 20 52 2d 33 38 32 31 39 2d 35  * IMP: R-38219-5
26070 33 30 30 32 20 2a 2f 0a 20 20 20 20 20 20 20 20  3002 */.        
26080 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
26090 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
260a0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 76  .      assert( v
260b0 3e 30 20 29 3b 20 20 2f 2a 20 45 56 3a 20 52 2d  >0 );  /* EV: R-
260c0 34 30 38 31 32 2d 30 33 35 37 30 20 2a 2f 0a 20  40812-03570 */. 
260d0 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 64 65 66     }.    pC->def
260e0 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
260f0 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
26100 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
26110 4c 45 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  LE;.  }.  pOut->
26120 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b  u.i = v;.  break
26130 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
26140 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33 20  Insert P1 P2 P3 
26150 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
26160 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 20  s: intkey=r[P3] 
26170 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  data=r[P2].**.**
26180 20 57 72 69 74 65 20 61 6e 20 65 6e 74 72 79 20   Write an entry 
26190 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20 6f  into the table o
261a0 66 20 63 75 72 73 6f 72 20 50 31 2e 20 20 41 20  f cursor P1.  A 
261b0 6e 65 77 20 65 6e 74 72 79 20 69 73 0a 2a 2a 20  new entry is.** 
261c0 63 72 65 61 74 65 64 20 69 66 20 69 74 20 64 6f  created if it do
261d0 65 73 6e 27 74 20 61 6c 72 65 61 64 79 20 65 78  esn't already ex
261e0 69 73 74 20 6f 72 20 74 68 65 20 64 61 74 61 20  ist or the data 
261f0 66 6f 72 20 61 6e 20 65 78 69 73 74 69 6e 67 0a  for an existing.
26200 2a 2a 20 65 6e 74 72 79 20 69 73 20 6f 76 65 72  ** entry is over
26210 77 72 69 74 74 65 6e 2e 20 20 54 68 65 20 64 61  written.  The da
26220 74 61 20 69 73 20 74 68 65 20 76 61 6c 75 65 20  ta is the value 
26230 4d 45 4d 5f 42 6c 6f 62 20 73 74 6f 72 65 64 20  MEM_Blob stored 
26240 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e  in register.** n
26250 75 6d 62 65 72 20 50 32 2e 20 54 68 65 20 6b 65  umber P2. The ke
26260 79 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  y is stored in r
26270 65 67 69 73 74 65 72 20 50 33 2e 20 54 68 65 20  egister P3. The 
26280 6b 65 79 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61  key must.** be a
26290 20 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20   MEM_Int..**.** 
262a0 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  If the OPFLAG_NC
262b0 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 35  HANGE flag of P5
262c0 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68   is set, then th
262d0 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75  e row change cou
262e0 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65  nt is.** increme
262f0 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73 65 20  nted (otherwise 
26300 6e 6f 74 29 2e 20 20 49 66 20 74 68 65 20 4f 50  not).  If the OP
26310 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 66  FLAG_LASTROWID f
26320 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74  lag of P5 is set
26330 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f 77 69 64 20  ,.** then rowid 
26340 69 73 20 73 74 6f 72 65 64 20 66 6f 72 20 73 75  is stored for su
26350 62 73 65 71 75 65 6e 74 20 72 65 74 75 72 6e 20  bsequent return 
26360 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  by the.** sqlite
26370 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f  3_last_insert_ro
26380 77 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 28  wid() function (
26390 6f 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20  otherwise it is 
263a0 75 6e 6d 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a  unmodified)..**.
263b0 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
263c0 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66  _USESEEKRESULT f
263d0 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74  lag of P5 is set
263e0 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  , the implementa
263f0 74 69 6f 6e 20 6d 69 67 68 74 0a 2a 2a 20 72 75  tion might.** ru
26400 6e 20 66 61 73 74 65 72 20 62 79 20 61 76 6f 69  n faster by avoi
26410 64 69 6e 67 20 61 6e 20 75 6e 6e 65 63 65 73 73  ding an unnecess
26420 61 72 79 20 73 65 65 6b 20 6f 6e 20 63 75 72 73  ary seek on curs
26430 6f 72 20 50 31 2e 20 20 48 6f 77 65 76 65 72 2c  or P1.  However,
26440 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f 55  .** the OPFLAG_U
26450 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61  SESEEKRESULT fla
26460 67 20 6d 75 73 74 20 6f 6e 6c 79 20 62 65 20 73  g must only be s
26470 65 74 20 69 66 20 74 68 65 72 65 20 68 61 76 65  et if there have
26480 20 62 65 65 6e 20 6e 6f 20 70 72 69 6f 72 0a 2a   been no prior.*
26490 2a 20 73 65 65 6b 73 20 6f 6e 20 74 68 65 20 63  * seeks on the c
264a0 75 72 73 6f 72 20 6f 72 20 69 66 20 74 68 65 20  ursor or if the 
264b0 6d 6f 73 74 20 72 65 63 65 6e 74 20 73 65 65 6b  most recent seek
264c0 20 75 73 65 64 20 61 20 6b 65 79 20 65 71 75 61   used a key equa
264d0 6c 20 74 6f 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49  l to P3..**.** I
264e0 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 49 53 55  f the OPFLAG_ISU
264f0 50 44 41 54 45 20 66 6c 61 67 20 69 73 20 73 65  PDATE flag is se
26500 74 2c 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63  t, then this opc
26510 6f 64 65 20 69 73 20 70 61 72 74 20 6f 66 20 61  ode is part of a
26520 6e 0a 2a 2a 20 55 50 44 41 54 45 20 6f 70 65 72  n.** UPDATE oper
26530 61 74 69 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73  ation.  Otherwis
26540 65 20 28 69 66 20 74 68 65 20 66 6c 61 67 20 69  e (if the flag i
26550 73 20 63 6c 65 61 72 29 20 74 68 65 6e 20 74 68  s clear) then th
26560 69 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20  is opcode.** is 
26570 70 61 72 74 20 6f 66 20 61 6e 20 49 4e 53 45 52  part of an INSER
26580 54 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 54 68  T operation.  Th
26590 65 20 64 69 66 66 65 72 65 6e 63 65 20 69 73 20  e difference is 
265a0 6f 6e 6c 79 20 69 6d 70 6f 72 74 61 6e 74 20 74  only important t
265b0 6f 0a 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20  o.** the update 
265c0 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61  hook..**.** Para
265d0 6d 65 74 65 72 20 50 34 20 6d 61 79 20 70 6f 69  meter P4 may poi
265e0 6e 74 20 74 6f 20 61 20 54 61 62 6c 65 20 73 74  nt to a Table st
265f0 72 75 63 74 75 72 65 2c 20 6f 72 20 6d 61 79 20  ructure, or may 
26600 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74 20 69  be NULL. If it i
26610 73 20 0a 2a 2a 20 6e 6f 74 20 4e 55 4c 4c 2c 20  s .** not NULL, 
26620 74 68 65 6e 20 74 68 65 20 75 70 64 61 74 65 2d  then the update-
26630 68 6f 6f 6b 20 28 73 71 6c 69 74 65 33 2e 78 55  hook (sqlite3.xU
26640 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 20 69  pdateCallback) i
26650 73 20 69 6e 76 6f 6b 65 64 20 0a 2a 2a 20 66 6f  s invoked .** fo
26660 6c 6c 6f 77 69 6e 67 20 61 20 73 75 63 63 65 73  llowing a succes
26670 73 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a  sful insert..**.
26680 2a 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f  ** (WARNING/TODO
26690 3a 20 49 66 20 50 31 20 69 73 20 61 20 70 73 65  : If P1 is a pse
266a0 75 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20 50  udo-cursor and P
266b0 32 20 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79  2 is dynamically
266c0 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74  .** allocated, t
266d0 68 65 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f 66  hen ownership of
266e0 20 50 32 20 69 73 20 74 72 61 6e 73 66 65 72 72   P2 is transferr
266f0 65 64 20 74 6f 20 74 68 65 20 70 73 65 75 64 6f  ed to the pseudo
26700 2d 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72  -cursor.** and r
26710 65 67 69 73 74 65 72 20 50 32 20 62 65 63 6f 6d  egister P2 becom
26720 65 73 20 65 70 68 65 6d 65 72 61 6c 2e 20 20 49  es ephemeral.  I
26730 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  f the cursor is 
26740 63 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20  changed, the.** 
26750 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
26760 72 20 50 32 20 77 69 6c 6c 20 74 68 65 6e 20 63  r P2 will then c
26770 68 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75 72  hange.  Make sur
26780 65 20 74 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a  e this does not.
26790 2a 2a 20 63 61 75 73 65 20 61 6e 79 20 70 72 6f  ** cause any pro
267a0 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68  blems.).**.** Th
267b0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  is instruction o
267c0 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62  nly works on tab
267d0 6c 65 73 2e 20 20 54 68 65 20 65 71 75 69 76 61  les.  The equiva
267e0 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  lent instruction
267f0 0a 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65 73 20  .** for indices 
26800 69 73 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e  is OP_IdxInsert.
26810 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
26820 6e 73 65 72 74 49 6e 74 20 50 31 20 50 32 20 50  nsertInt P1 P2 P
26830 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
26840 73 69 73 3a 20 69 6e 74 6b 65 79 3d 50 33 20 64  sis: intkey=P3 d
26850 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  ata=r[P2].**.** 
26860 54 68 69 73 20 77 6f 72 6b 73 20 65 78 61 63 74  This works exact
26870 6c 79 20 6c 69 6b 65 20 4f 50 5f 49 6e 73 65 72  ly like OP_Inser
26880 74 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  t except that th
26890 65 20 6b 65 79 20 69 73 20 74 68 65 0a 2a 2a 20  e key is the.** 
268a0 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 33  integer value P3
268b0 2c 20 6e 6f 74 20 74 68 65 20 76 61 6c 75 65 20  , not the value 
268c0 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 73  of the integer s
268d0 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
268e0 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P3..*/.case OP
268f0 5f 49 6e 73 65 72 74 3a 20 0a 63 61 73 65 20 4f  _Insert: .case O
26900 50 5f 49 6e 73 65 72 74 49 6e 74 3a 20 7b 0a 20  P_InsertInt: {. 
26910 20 4d 65 6d 20 2a 70 44 61 74 61 3b 20 20 20 20   Mem *pData;    
26920 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68     /* MEM cell h
26930 6f 6c 64 69 6e 67 20 64 61 74 61 20 66 6f 72 20  olding data for 
26940 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65  the record to be
26950 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 4d   inserted */.  M
26960 65 6d 20 2a 70 4b 65 79 3b 20 20 20 20 20 20 20  em *pKey;       
26970 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c   /* MEM cell hol
26980 64 69 6e 67 20 6b 65 79 20 20 66 6f 72 20 74 68  ding key  for th
26990 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 56 64  e record */.  Vd
269a0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20  beCursor *pC;   
269b0 2f 2a 20 43 75 72 73 6f 72 20 74 6f 20 74 61 62  /* Cursor to tab
269c0 6c 65 20 69 6e 74 6f 20 77 68 69 63 68 20 69 6e  le into which in
269d0 73 65 72 74 20 69 73 20 77 72 69 74 74 65 6e 20  sert is written 
269e0 2a 2f 0a 20 20 69 6e 74 20 73 65 65 6b 52 65 73  */.  int seekRes
269f0 75 6c 74 3b 20 20 20 2f 2a 20 52 65 73 75 6c 74  ult;   /* Result
26a00 20 6f 66 20 70 72 69 6f 72 20 73 65 65 6b 20 6f   of prior seek o
26a10 72 20 30 20 69 66 20 6e 6f 20 55 53 45 53 45 45  r 0 if no USESEE
26a20 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 2a 2f 0a  KRESULT flag */.
26a30 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
26a40 62 3b 20 20 2f 2a 20 64 61 74 61 62 61 73 65 20  b;  /* database 
26a50 6e 61 6d 65 20 2d 20 75 73 65 64 20 62 79 20 74  name - used by t
26a60 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 2a  he update hook *
26a70 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b  /.  Table *pTab;
26a80 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 73        /* Table s
26a90 74 72 75 63 74 75 72 65 20 2d 20 75 73 65 64 20  tructure - used 
26aa0 62 79 20 75 70 64 61 74 65 20 61 6e 64 20 70 72  by update and pr
26ab0 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 73 20 2a  e-update hooks *
26ac0 2f 0a 20 20 42 74 72 65 65 50 61 79 6c 6f 61 64  /.  BtreePayload
26ad0 20 78 3b 20 20 20 2f 2a 20 50 61 79 6c 6f 61 64   x;   /* Payload
26ae0 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20   to be inserted 
26af0 2a 2f 0a 0a 20 20 70 44 61 74 61 20 3d 20 26 61  */..  pData = &a
26b00 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
26b10 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
26b20 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
26b30 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
26b40 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
26b50 28 70 44 61 74 61 29 20 29 3b 0a 20 20 70 43 20  (pData) );.  pC 
26b60 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
26b70 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
26b80 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
26b90 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
26ba0 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
26bb0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75  .  assert( pC->u
26bc0 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  c.pCursor!=0 );.
26bd0 20 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e    assert( (pOp->
26be0 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 4e 4f  p5 & OPFLAG_ISNO
26bf0 4f 50 29 20 7c 7c 20 70 43 2d 3e 69 73 54 61 62  OP) || pC->isTab
26c00 6c 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  le );.  assert( 
26c10 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
26c20 54 41 42 4c 45 20 7c 7c 20 70 4f 70 2d 3e 70 34  TABLE || pOp->p4
26c30 74 79 70 65 3e 3d 50 34 5f 53 54 41 54 49 43 20  type>=P4_STATIC 
26c40 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
26c50 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61  ACE(pOp->p2, pDa
26c60 74 61 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  ta);.  sqlite3Vd
26c70 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e 74  beIncrWriteCount
26c80 65 72 28 70 2c 20 70 43 29 3b 0a 0a 20 20 69 66  er(p, pC);..  if
26c90 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
26ca0 50 5f 49 6e 73 65 72 74 20 29 7b 0a 20 20 20 20  P_Insert ){.    
26cb0 70 4b 65 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pKey = &aMem[pOp
26cc0 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73 73 65 72  ->p3];.    asser
26cd0 74 28 20 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26  t( pKey->flags &
26ce0 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20   MEM_Int );.    
26cf0 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
26d00 69 64 28 70 4b 65 79 29 20 29 3b 0a 20 20 20 20  id(pKey) );.    
26d10 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
26d20 4f 70 2d 3e 70 33 2c 20 70 4b 65 79 29 3b 0a 20  Op->p3, pKey);. 
26d30 20 20 20 78 2e 6e 4b 65 79 20 3d 20 70 4b 65 79     x.nKey = pKey
26d40 2d 3e 75 2e 69 3b 0a 20 20 7d 65 6c 73 65 7b 0a  ->u.i;.  }else{.
26d50 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
26d60 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65  >opcode==OP_Inse
26d70 72 74 49 6e 74 20 29 3b 0a 20 20 20 20 78 2e 6e  rtInt );.    x.n
26d80 4b 65 79 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  Key = pOp->p3;. 
26d90 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   }..  if( pOp->p
26da0 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20  4type==P4_TABLE 
26db0 26 26 20 48 41 53 5f 55 50 44 41 54 45 5f 48 4f  && HAS_UPDATE_HO
26dc0 4f 4b 28 64 62 29 20 29 7b 0a 20 20 20 20 61 73  OK(db) ){.    as
26dd0 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30  sert( pC->iDb>=0
26de0 20 29 3b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62   );.    zDb = db
26df0 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a  ->aDb[pC->iDb].z
26e00 44 62 53 4e 61 6d 65 3b 0a 20 20 20 20 70 54 61  DbSName;.    pTa
26e10 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62  b = pOp->p4.pTab
26e20 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70  ;.    assert( (p
26e30 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
26e40 49 53 4e 4f 4f 50 29 20 7c 7c 20 48 61 73 52 6f  ISNOOP) || HasRo
26e50 77 69 64 28 70 54 61 62 29 20 29 3b 0a 20 20 7d  wid(pTab) );.  }
26e60 65 6c 73 65 7b 0a 20 20 20 20 70 54 61 62 20 3d  else{.    pTab =
26e70 20 30 3b 0a 20 20 20 20 7a 44 62 20 3d 20 30 3b   0;.    zDb = 0;
26e80 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e    /* Not needed.
26e90 20 20 53 69 6c 65 6e 63 65 20 61 20 63 6f 6d 70    Silence a comp
26ea0 69 6c 65 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f  iler warning. */
26eb0 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c  .  }..#ifdef SQL
26ec0 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50  ITE_ENABLE_PREUP
26ed0 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 2f 2a 20 49  DATE_HOOK.  /* I
26ee0 6e 76 6f 6b 65 20 74 68 65 20 70 72 65 2d 75 70  nvoke the pre-up
26ef0 64 61 74 65 20 68 6f 6f 6b 2c 20 69 66 20 61 6e  date hook, if an
26f00 79 20 2a 2f 0a 20 20 69 66 28 20 70 54 61 62 20  y */.  if( pTab 
26f10 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78  ){.    if( db->x
26f20 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  PreUpdateCallbac
26f30 6b 20 26 26 20 21 28 70 4f 70 2d 3e 70 35 20 26  k && !(pOp->p5 &
26f40 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45   OPFLAG_ISUPDATE
26f50 29 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ) ){.      sqlit
26f60 65 33 56 64 62 65 50 72 65 55 70 64 61 74 65 48  e3VdbePreUpdateH
26f70 6f 6f 6b 28 70 2c 20 70 43 2c 20 53 51 4c 49 54  ook(p, pC, SQLIT
26f80 45 5f 49 4e 53 45 52 54 2c 20 7a 44 62 2c 20 70  E_INSERT, zDb, p
26f90 54 61 62 2c 20 78 2e 6e 4b 65 79 2c 70 4f 70 2d  Tab, x.nKey,pOp-
26fa0 3e 70 32 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  >p2);.    }.    
26fb0 69 66 28 20 64 62 2d 3e 78 55 70 64 61 74 65 43  if( db->xUpdateC
26fc0 61 6c 6c 62 61 63 6b 3d 3d 30 20 7c 7c 20 70 54  allback==0 || pT
26fd0 61 62 2d 3e 61 43 6f 6c 3d 3d 30 20 29 7b 0a 20  ab->aCol==0 ){. 
26fe0 20 20 20 20 20 2f 2a 20 50 72 65 76 65 6e 74 20       /* Prevent 
26ff0 70 6f 73 74 2d 75 70 64 61 74 65 20 68 6f 6f 6b  post-update hook
27000 20 66 72 6f 6d 20 72 75 6e 6e 69 6e 67 20 69 6e   from running in
27010 20 63 61 73 65 73 20 77 68 65 6e 20 69 74 20 73   cases when it s
27020 68 6f 75 6c 64 20 6e 6f 74 20 2a 2f 0a 20 20 20  hould not */.   
27030 20 20 20 70 54 61 62 20 3d 20 30 3b 0a 20 20 20     pTab = 0;.   
27040 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70   }.  }.  if( pOp
27050 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53  ->p5 & OPFLAG_IS
27060 4e 4f 4f 50 20 29 20 62 72 65 61 6b 3b 0a 23 65  NOOP ) break;.#e
27070 6e 64 69 66 0a 0a 20 20 69 66 28 20 70 4f 70 2d  ndif..  if( pOp-
27080 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48  >p5 & OPFLAG_NCH
27090 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67  ANGE ) p->nChang
270a0 65 2b 2b 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  e++;.  if( pOp->
270b0 70 35 20 26 20 4f 50 46 4c 41 47 5f 4c 41 53 54  p5 & OPFLAG_LAST
270c0 52 4f 57 49 44 20 29 20 64 62 2d 3e 6c 61 73 74  ROWID ) db->last
270d0 52 6f 77 69 64 20 3d 20 78 2e 6e 4b 65 79 3b 0a  Rowid = x.nKey;.
270e0 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61 2d    assert( pData-
270f0 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c  >flags & (MEM_Bl
27100 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29 3b 0a 20  ob|MEM_Str) );. 
27110 20 78 2e 70 44 61 74 61 20 3d 20 70 44 61 74 61   x.pData = pData
27120 2d 3e 7a 3b 0a 20 20 78 2e 6e 44 61 74 61 20 3d  ->z;.  x.nData =
27130 20 70 44 61 74 61 2d 3e 6e 3b 0a 20 20 73 65 65   pData->n;.  see
27140 6b 52 65 73 75 6c 74 20 3d 20 28 28 70 4f 70 2d  kResult = ((pOp-
27150 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45  >p5 & OPFLAG_USE
27160 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43  SEEKRESULT) ? pC
27170 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30  ->seekResult : 0
27180 29 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e  );.  if( pData->
27190 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f  flags & MEM_Zero
271a0 20 29 7b 0a 20 20 20 20 78 2e 6e 5a 65 72 6f 20   ){.    x.nZero 
271b0 3d 20 70 44 61 74 61 2d 3e 75 2e 6e 5a 65 72 6f  = pData->u.nZero
271c0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 78  ;.  }else{.    x
271d0 2e 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 7d 0a  .nZero = 0;.  }.
271e0 20 20 78 2e 70 4b 65 79 20 3d 20 30 3b 0a 20 20    x.pKey = 0;.  
271f0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
27200 65 49 6e 73 65 72 74 28 70 43 2d 3e 75 63 2e 70  eInsert(pC->uc.p
27210 43 75 72 73 6f 72 2c 20 26 78 2c 0a 20 20 20 20  Cursor, &x,.    
27220 20 20 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50    (pOp->p5 & (OP
27230 46 4c 41 47 5f 41 50 50 45 4e 44 7c 4f 50 46 4c  FLAG_APPEND|OPFL
27240 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 29  AG_SAVEPOSITION)
27250 29 2c 20 73 65 65 6b 52 65 73 75 6c 74 0a 20 20  ), seekResult.  
27260 29 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65  );.  pC->deferre
27270 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70  dMoveto = 0;.  p
27280 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
27290 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20   CACHE_STALE;.. 
272a0 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75   /* Invoke the u
272b0 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65  pdate-hook if re
272c0 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28  quired. */.  if(
272d0 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
272e0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
272f0 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20   if( pTab ){.   
27300 20 61 73 73 65 72 74 28 20 64 62 2d 3e 78 55 70   assert( db->xUp
27310 64 61 74 65 43 61 6c 6c 62 61 63 6b 21 3d 30 20  dateCallback!=0 
27320 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
27330 54 61 62 2d 3e 61 43 6f 6c 21 3d 30 20 29 3b 0a  Tab->aCol!=0 );.
27340 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43      db->xUpdateC
27350 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64  allback(db->pUpd
27360 61 74 65 41 72 67 2c 0a 20 20 20 20 20 20 20 20  ateArg,.        
27370 20 20 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50     (pOp->p5 & OP
27380 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20 3f  FLAG_ISUPDATE) ?
27390 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 3a   SQLITE_UPDATE :
273a0 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 2c 0a   SQLITE_INSERT,.
273b0 20 20 20 20 20 20 20 20 20 20 20 7a 44 62 2c 20             zDb, 
273c0 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 20 78 2e 6e  pTab->zName, x.n
273d0 4b 65 79 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  Key);.  }.  brea
273e0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
273f0 20 44 65 6c 65 74 65 20 50 31 20 50 32 20 50 33   Delete P1 P2 P3
27400 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 44 65 6c   P4 P5.**.** Del
27410 65 74 65 20 74 68 65 20 72 65 63 6f 72 64 20 61  ete the record a
27420 74 20 77 68 69 63 68 20 74 68 65 20 50 31 20 63  t which the P1 c
27430 75 72 73 6f 72 20 69 73 20 63 75 72 72 65 6e 74  ursor is current
27440 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a  ly pointing..**.
27450 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
27460 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 62 69  _SAVEPOSITION bi
27470 74 20 6f 66 20 74 68 65 20 50 35 20 70 61 72 61  t of the P5 para
27480 6d 65 74 65 72 20 69 73 20 73 65 74 2c 20 74 68  meter is set, th
27490 65 6e 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72  en.** the cursor
274a0 20 77 69 6c 6c 20 62 65 20 6c 65 66 74 20 70 6f   will be left po
274b0 69 6e 74 69 6e 67 20 61 74 20 20 65 69 74 68 65  inting at  eithe
274c0 72 20 74 68 65 20 6e 65 78 74 20 6f 72 20 74 68  r the next or th
274d0 65 20 70 72 65 76 69 6f 75 73 0a 2a 2a 20 72 65  e previous.** re
274e0 63 6f 72 64 20 69 6e 20 74 68 65 20 74 61 62 6c  cord in the tabl
274f0 65 2e 20 49 66 20 69 74 20 69 73 20 6c 65 66 74  e. If it is left
27500 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65   pointing at the
27510 20 6e 65 78 74 20 72 65 63 6f 72 64 2c 20 74 68   next record, th
27520 65 6e 0a 2a 2a 20 74 68 65 20 6e 65 78 74 20 4e  en.** the next N
27530 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
27540 77 69 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f 70 2e  will be a no-op.
27550 20 41 73 20 61 20 72 65 73 75 6c 74 2c 20 69 6e   As a result, in
27560 20 74 68 69 73 20 63 61 73 65 0a 2a 2a 20 69 74   this case.** it
27570 20 69 73 20 6f 6b 20 74 6f 20 64 65 6c 65 74 65   is ok to delete
27580 20 61 20 72 65 63 6f 72 64 20 66 72 6f 6d 20 77   a record from w
27590 69 74 68 69 6e 20 61 20 4e 65 78 74 20 6c 6f 6f  ithin a Next loo
275a0 70 2e 20 49 66 20 0a 2a 2a 20 4f 50 46 4c 41 47  p. If .** OPFLAG
275b0 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 62 69  _SAVEPOSITION bi
275c0 74 20 6f 66 20 50 35 20 69 73 20 63 6c 65 61 72  t of P5 is clear
275d0 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72 73 6f  , then the curso
275e0 72 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 6c 65 66  r will be.** lef
275f0 74 20 69 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65  t in an undefine
27600 64 20 73 74 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 49  d state..**.** I
27610 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 41 55 58  f the OPFLAG_AUX
27620 44 45 4c 45 54 45 20 62 69 74 20 69 73 20 73 65  DELETE bit is se
27630 74 20 6f 6e 20 50 35 2c 20 74 68 61 74 20 69 6e  t on P5, that in
27640 64 69 63 61 74 65 73 20 74 68 61 74 20 74 68 69  dicates that thi
27650 73 0a 2a 2a 20 64 65 6c 65 74 65 20 6f 6e 65 20  s.** delete one 
27660 6f 66 20 73 65 76 65 72 61 6c 20 61 73 73 6f 63  of several assoc
27670 69 61 74 65 64 20 77 69 74 68 20 64 65 6c 65 74  iated with delet
27680 69 6e 67 20 61 20 74 61 62 6c 65 20 72 6f 77 20  ing a table row 
27690 61 6e 64 20 61 6c 6c 20 69 74 73 0a 2a 2a 20 61  and all its.** a
276a0 73 73 6f 63 69 61 74 65 64 20 69 6e 64 65 78 20  ssociated index 
276b0 65 6e 74 72 69 65 73 2e 20 20 45 78 61 63 74 6c  entries.  Exactl
276c0 79 20 6f 6e 65 20 6f 66 20 74 68 6f 73 65 20 64  y one of those d
276d0 65 6c 65 74 65 73 20 69 73 20 74 68 65 20 22 70  eletes is the "p
276e0 72 69 6d 61 72 79 22 0a 2a 2a 20 64 65 6c 65 74  rimary".** delet
276f0 65 2e 20 20 54 68 65 20 6f 74 68 65 72 73 20 61  e.  The others a
27700 72 65 20 61 6c 6c 20 6f 6e 20 4f 50 46 4c 41 47  re all on OPFLAG
27710 5f 46 4f 52 44 45 4c 45 54 45 20 63 75 72 73 6f  _FORDELETE curso
27720 72 73 20 6f 72 20 65 6c 73 65 20 61 72 65 0a 2a  rs or else are.*
27730 2a 20 6d 61 72 6b 65 64 20 77 69 74 68 20 74 68  * marked with th
27740 65 20 41 55 58 44 45 4c 45 54 45 20 66 6c 61 67  e AUXDELETE flag
27750 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
27760 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c  PFLAG_NCHANGE fl
27770 61 67 20 6f 66 20 50 32 20 28 4e 42 3a 20 50 32  ag of P2 (NB: P2
27780 20 6e 6f 74 20 50 35 29 20 69 73 20 73 65 74 2c   not P5) is set,
27790 20 74 68 65 6e 20 74 68 65 20 72 6f 77 0a 2a 2a   then the row.**
277a0 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73   change count is
277b0 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74   incremented (ot
277c0 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a  herwise not)..**
277d0 0a 2a 2a 20 50 31 20 6d 75 73 74 20 6e 6f 74 20  .** P1 must not 
277e0 62 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e  be pseudo-table.
277f0 20 20 49 74 20 68 61 73 20 74 6f 20 62 65 20 61    It has to be a
27800 20 72 65 61 6c 20 74 61 62 6c 65 20 77 69 74 68   real table with
27810 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77  .** multiple row
27820 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69  s..**.** If P4 i
27830 73 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20  s not NULL then 
27840 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 54  it points to a T
27850 61 62 6c 65 20 6f 62 6a 65 63 74 2e 20 49 6e 20  able object. In 
27860 74 68 69 73 20 63 61 73 65 20 65 69 74 68 65 72  this case either
27870 20 0a 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20   .** the update 
27880 6f 72 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f  or pre-update ho
27890 6f 6b 2c 20 6f 72 20 62 6f 74 68 2c 20 6d 61 79  ok, or both, may
278a0 20 62 65 20 69 6e 76 6f 6b 65 64 2e 20 54 68 65   be invoked. The
278b0 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 0a   P1 cursor must.
278c0 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 70 6f 73  ** have been pos
278d0 69 74 69 6f 6e 65 64 20 75 73 69 6e 67 20 4f 50  itioned using OP
278e0 5f 4e 6f 74 46 6f 75 6e 64 20 70 72 69 6f 72 20  _NotFound prior 
278f0 74 6f 20 69 6e 76 6f 6b 69 6e 67 20 74 68 69 73  to invoking this
27900 20 6f 70 63 6f 64 65 20 69 6e 20 0a 2a 2a 20 74   opcode in .** t
27910 68 69 73 20 63 61 73 65 2e 20 53 70 65 63 69 66  his case. Specif
27920 69 63 61 6c 6c 79 2c 20 69 66 20 6f 6e 65 20 69  ically, if one i
27930 73 20 63 6f 6e 66 69 67 75 72 65 64 2c 20 74 68  s configured, th
27940 65 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f  e pre-update hoo
27950 6b 20 69 73 20 0a 2a 2a 20 69 6e 76 6f 6b 65 64  k is .** invoked
27960 20 69 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55   if P4 is not NU
27970 4c 4c 2e 20 54 68 65 20 75 70 64 61 74 65 2d 68  LL. The update-h
27980 6f 6f 6b 20 69 73 20 69 6e 76 6f 6b 65 64 20 69  ook is invoked i
27990 66 20 6f 6e 65 20 69 73 20 63 6f 6e 66 69 67 75  f one is configu
279a0 72 65 64 2c 20 0a 2a 2a 20 50 34 20 69 73 20 6e  red, .** P4 is n
279b0 6f 74 20 4e 55 4c 4c 2c 20 61 6e 64 20 74 68 65  ot NULL, and the
279c0 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
279d0 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 50  flag is set in P
279e0 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  2..**.** If the 
279f0 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20  OPFLAG_ISUPDATE 
27a00 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 50  flag is set in P
27a10 32 2c 20 74 68 65 6e 20 50 33 20 63 6f 6e 74 61  2, then P3 conta
27a20 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 0a  ins the address.
27a30 2a 2a 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79  ** of the memory
27a40 20 63 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61   cell that conta
27a50 69 6e 73 20 74 68 65 20 76 61 6c 75 65 20 74 68  ins the value th
27a60 61 74 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  at the rowid of 
27a70 74 68 65 20 72 6f 77 20 77 69 6c 6c 0a 2a 2a 20  the row will.** 
27a80 62 65 20 73 65 74 20 74 6f 20 62 79 20 74 68 65  be set to by the
27a90 20 75 70 64 61 74 65 2e 0a 2a 2f 0a 63 61 73 65   update..*/.case
27aa0 20 4f 50 5f 44 65 6c 65 74 65 3a 20 7b 0a 20 20   OP_Delete: {.  
27ab0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
27ac0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
27ad0 62 3b 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62  b;.  Table *pTab
27ae0 3b 0a 20 20 69 6e 74 20 6f 70 66 6c 61 67 73 3b  ;.  int opflags;
27af0 0a 0a 20 20 6f 70 66 6c 61 67 73 20 3d 20 70 4f  ..  opflags = pO
27b00 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28  p->p2;.  assert(
27b10 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
27b20 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
27b30 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
27b40 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
27b50 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
27b60 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
27b70 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
27b80 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
27b90 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72  ert( pC->uc.pCur
27ba0 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  sor!=0 );.  asse
27bb0 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
27bc0 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 73  Moveto==0 );.  s
27bd0 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57 72  qlite3VdbeIncrWr
27be0 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 70 43  iteCounter(p, pC
27bf0 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
27c00 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70 4f  E_DEBUG.  if( pO
27c10 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41  p->p4type==P4_TA
27c20 42 4c 45 20 26 26 20 48 61 73 52 6f 77 69 64 28  BLE && HasRowid(
27c30 70 4f 70 2d 3e 70 34 2e 70 54 61 62 29 20 26 26  pOp->p4.pTab) &&
27c40 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 7b 0a 20   pOp->p5==0 ){. 
27c50 20 20 20 2f 2a 20 49 66 20 70 35 20 69 73 20 7a     /* If p5 is z
27c60 65 72 6f 2c 20 74 68 65 20 73 65 65 6b 20 6f 70  ero, the seek op
27c70 65 72 61 74 69 6f 6e 20 74 68 61 74 20 70 6f 73  eration that pos
27c80 69 74 69 6f 6e 65 64 20 74 68 65 20 63 75 72 73  itioned the curs
27c90 6f 72 20 70 72 69 6f 72 20 74 6f 0a 20 20 20 20  or prior to.    
27ca0 2a 2a 20 4f 50 5f 44 65 6c 65 74 65 20 77 69 6c  ** OP_Delete wil
27cb0 6c 20 68 61 76 65 20 61 6c 73 6f 20 73 65 74 20  l have also set 
27cc0 74 68 65 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61  the pC->movetoTa
27cd0 72 67 65 74 20 66 69 65 6c 64 20 74 6f 20 74 68  rget field to th
27ce0 65 20 72 6f 77 69 64 20 6f 66 0a 20 20 20 20 2a  e rowid of.    *
27cf0 2a 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 69  * the row that i
27d00 73 20 62 65 69 6e 67 20 64 65 6c 65 74 65 64 20  s being deleted 
27d10 2a 2f 0a 20 20 20 20 69 36 34 20 69 4b 65 79 20  */.    i64 iKey 
27d20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e  = sqlite3BtreeIn
27d30 74 65 67 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e  tegerKey(pC->uc.
27d40 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 61 73  pCursor);.    as
27d50 73 65 72 74 28 20 70 43 2d 3e 6d 6f 76 65 74 6f  sert( pC->moveto
27d60 54 61 72 67 65 74 3d 3d 69 4b 65 79 20 29 3b 0a  Target==iKey );.
27d70 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a    }.#endif..  /*
27d80 20 49 66 20 74 68 65 20 75 70 64 61 74 65 2d 68   If the update-h
27d90 6f 6f 6b 20 6f 72 20 70 72 65 2d 75 70 64 61 74  ook or pre-updat
27da0 65 2d 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69  e-hook will be i
27db0 6e 76 6f 6b 65 64 2c 20 73 65 74 20 7a 44 62 20  nvoked, set zDb 
27dc0 74 6f 0a 20 20 2a 2a 20 74 68 65 20 6e 61 6d 65  to.  ** the name
27dd0 20 6f 66 20 74 68 65 20 64 62 20 74 6f 20 70 61   of the db to pa
27de0 73 73 20 61 73 20 74 6f 20 69 74 2e 20 41 6c 73  ss as to it. Als
27df0 6f 20 73 65 74 20 6c 6f 63 61 6c 20 70 54 61 62  o set local pTab
27e00 20 74 6f 20 61 20 63 6f 70 79 0a 20 20 2a 2a 20   to a copy.  ** 
27e10 6f 66 20 70 34 2e 70 54 61 62 2e 20 46 69 6e 61  of p4.pTab. Fina
27e20 6c 6c 79 2c 20 69 66 20 70 35 20 69 73 20 74 72  lly, if p5 is tr
27e30 75 65 2c 20 69 6e 64 69 63 61 74 69 6e 67 20 74  ue, indicating t
27e40 68 61 74 20 74 68 69 73 20 63 75 72 73 6f 72 20  hat this cursor 
27e50 77 61 73 0a 20 20 2a 2a 20 6c 61 73 74 20 6d 6f  was.  ** last mo
27e60 76 65 64 20 77 69 74 68 20 4f 50 5f 4e 65 78 74  ved with OP_Next
27e70 20 6f 72 20 4f 50 5f 50 72 65 76 2c 20 6e 6f 74   or OP_Prev, not
27e80 20 53 65 65 6b 20 6f 72 20 4e 6f 74 46 6f 75 6e   Seek or NotFoun
27e90 64 2c 20 73 65 74 20 0a 20 20 2a 2a 20 56 64 62  d, set .  ** Vdb
27ea0 65 43 75 72 73 6f 72 2e 6d 6f 76 65 74 6f 54 61  eCursor.movetoTa
27eb0 72 67 65 74 20 74 6f 20 74 68 65 20 63 75 72 72  rget to the curr
27ec0 65 6e 74 20 72 6f 77 69 64 2e 20 20 2a 2f 0a 20  ent rowid.  */. 
27ed0 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
27ee0 3d 3d 50 34 5f 54 41 42 4c 45 20 26 26 20 48 41  ==P4_TABLE && HA
27ef0 53 5f 55 50 44 41 54 45 5f 48 4f 4f 4b 28 64 62  S_UPDATE_HOOK(db
27f00 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ) ){.    assert(
27f10 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20   pC->iDb>=0 );. 
27f20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
27f30 70 34 2e 70 54 61 62 21 3d 30 20 29 3b 0a 20 20  p4.pTab!=0 );.  
27f40 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b    zDb = db->aDb[
27f50 70 43 2d 3e 69 44 62 5d 2e 7a 44 62 53 4e 61 6d  pC->iDb].zDbSNam
27f60 65 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 70 4f  e;.    pTab = pO
27f70 70 2d 3e 70 34 2e 70 54 61 62 3b 0a 20 20 20 20  p->p4.pTab;.    
27f80 69 66 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f  if( (pOp->p5 & O
27f90 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49  PFLAG_SAVEPOSITI
27fa0 4f 4e 29 21 3d 30 20 26 26 20 70 43 2d 3e 69 73  ON)!=0 && pC->is
27fb0 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 20 20 70  Table ){.      p
27fc0 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20  C->movetoTarget 
27fd0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e  = sqlite3BtreeIn
27fe0 74 65 67 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e  tegerKey(pC->uc.
27ff0 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a  pCursor);.    }.
28000 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 7a 44 62    }else{.    zDb
28010 20 3d 20 30 3b 20 20 20 2f 2a 20 4e 6f 74 20 6e   = 0;   /* Not n
28020 65 65 64 65 64 2e 20 20 53 69 6c 65 6e 63 65 20  eeded.  Silence 
28030 61 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69  a compiler warni
28040 6e 67 2e 20 2a 2f 0a 20 20 20 20 70 54 61 62 20  ng. */.    pTab 
28050 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65  = 0;  /* Not nee
28060 64 65 64 2e 20 20 53 69 6c 65 6e 63 65 20 61 20  ded.  Silence a 
28070 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67  compiler warning
28080 2e 20 2a 2f 0a 20 20 7d 0a 0a 23 69 66 64 65 66  . */.  }..#ifdef
28090 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50   SQLITE_ENABLE_P
280a0 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20  REUPDATE_HOOK.  
280b0 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 70 72  /* Invoke the pr
280c0 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66  e-update-hook if
280d0 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20   required. */.  
280e0 69 66 28 20 64 62 2d 3e 78 50 72 65 55 70 64 61  if( db->xPreUpda
280f0 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f  teCallback && pO
28100 70 2d 3e 70 34 2e 70 54 61 62 20 29 7b 0a 20 20  p->p4.pTab ){.  
28110 20 20 61 73 73 65 72 74 28 20 21 28 6f 70 66 6c    assert( !(opfl
28120 61 67 73 20 26 20 4f 50 46 4c 41 47 5f 49 53 55  ags & OPFLAG_ISU
28130 50 44 41 54 45 29 20 0a 20 20 20 20 20 20 20 20  PDATE) .        
28140 20 7c 7c 20 48 61 73 52 6f 77 69 64 28 70 54 61   || HasRowid(pTa
28150 62 29 3d 3d 30 20 0a 20 20 20 20 20 20 20 20 20  b)==0 .         
28160 7c 7c 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  || (aMem[pOp->p3
28170 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ].flags & MEM_In
28180 74 29 20 0a 20 20 20 20 29 3b 0a 20 20 20 20 73  t) .    );.    s
28190 71 6c 69 74 65 33 56 64 62 65 50 72 65 55 70 64  qlite3VdbePreUpd
281a0 61 74 65 48 6f 6f 6b 28 70 2c 20 70 43 2c 0a 20  ateHook(p, pC,. 
281b0 20 20 20 20 20 20 20 28 6f 70 66 6c 61 67 73 20         (opflags 
281c0 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54  & OPFLAG_ISUPDAT
281d0 45 29 20 3f 20 53 51 4c 49 54 45 5f 55 50 44 41  E) ? SQLITE_UPDA
281e0 54 45 20 3a 20 53 51 4c 49 54 45 5f 44 45 4c 45  TE : SQLITE_DELE
281f0 54 45 2c 20 0a 20 20 20 20 20 20 20 20 7a 44 62  TE, .        zDb
28200 2c 20 70 54 61 62 2c 20 70 43 2d 3e 6d 6f 76 65  , pTab, pC->move
28210 74 6f 54 61 72 67 65 74 2c 0a 20 20 20 20 20 20  toTarget,.      
28220 20 20 70 4f 70 2d 3e 70 33 0a 20 20 20 20 29 3b    pOp->p3.    );
28230 0a 20 20 7d 0a 20 20 69 66 28 20 6f 70 66 6c 61  .  }.  if( opfla
28240 67 73 20 26 20 4f 50 46 4c 41 47 5f 49 53 4e 4f  gs & OPFLAG_ISNO
28250 4f 50 20 29 20 62 72 65 61 6b 3b 0a 23 65 6e 64  OP ) break;.#end
28260 69 66 0a 20 0a 20 20 2f 2a 20 4f 6e 6c 79 20 66  if. .  /* Only f
28270 6c 61 67 73 20 74 68 61 74 20 63 61 6e 20 62 65  lags that can be
28280 20 73 65 74 20 61 72 65 20 53 41 56 45 50 4f 49   set are SAVEPOI
28290 53 54 49 4f 4e 20 61 6e 64 20 41 55 58 44 45 4c  STION and AUXDEL
282a0 45 54 45 20 2a 2f 20 0a 20 20 61 73 73 65 72 74  ETE */ .  assert
282b0 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 7e 28 4f  ( (pOp->p5 & ~(O
282c0 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49  PFLAG_SAVEPOSITI
282d0 4f 4e 7c 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c  ON|OPFLAG_AUXDEL
282e0 45 54 45 29 29 3d 3d 30 20 29 3b 0a 20 20 61 73  ETE))==0 );.  as
282f0 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 53 41 56  sert( OPFLAG_SAV
28300 45 50 4f 53 49 54 49 4f 4e 3d 3d 42 54 52 45 45  EPOSITION==BTREE
28310 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 29 3b  _SAVEPOSITION );
28320 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41  .  assert( OPFLA
28330 47 5f 41 55 58 44 45 4c 45 54 45 3d 3d 42 54 52  G_AUXDELETE==BTR
28340 45 45 5f 41 55 58 44 45 4c 45 54 45 20 29 3b 0a  EE_AUXDELETE );.
28350 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
28360 45 42 55 47 0a 20 20 69 66 28 20 70 2d 3e 70 46  EBUG.  if( p->pF
28370 72 61 6d 65 3d 3d 30 20 29 7b 0a 20 20 20 20 69  rame==0 ){.    i
28380 66 28 20 70 43 2d 3e 69 73 45 70 68 65 6d 65 72  f( pC->isEphemer
28390 61 6c 3d 3d 30 0a 20 20 20 20 20 20 20 20 26 26  al==0.        &&
283a0 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c   (pOp->p5 & OPFL
283b0 41 47 5f 41 55 58 44 45 4c 45 54 45 29 3d 3d 30  AG_AUXDELETE)==0
283c0 0a 20 20 20 20 20 20 20 20 26 26 20 28 70 43 2d  .        && (pC-
283d0 3e 77 72 46 6c 61 67 20 26 20 4f 50 46 4c 41 47  >wrFlag & OPFLAG
283e0 5f 46 4f 52 44 45 4c 45 54 45 29 3d 3d 30 0a 20  _FORDELETE)==0. 
283f0 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20 6e 45       ){.      nE
28400 78 74 72 61 44 65 6c 65 74 65 2b 2b 3b 0a 20 20  xtraDelete++;.  
28410 20 20 7d 0a 20 20 20 20 69 66 28 20 70 4f 70 2d    }.    if( pOp-
28420 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48  >p2 & OPFLAG_NCH
28430 41 4e 47 45 20 29 7b 0a 20 20 20 20 20 20 6e 45  ANGE ){.      nE
28440 78 74 72 61 44 65 6c 65 74 65 2d 2d 3b 0a 20 20  xtraDelete--;.  
28450 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a    }.  }.#endif..
28460 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
28470 72 65 65 44 65 6c 65 74 65 28 70 43 2d 3e 75 63  reeDelete(pC->uc
28480 2e 70 43 75 72 73 6f 72 2c 20 70 4f 70 2d 3e 70  .pCursor, pOp->p
28490 35 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53  5);.  pC->cacheS
284a0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
284b0 41 4c 45 3b 0a 20 20 70 43 2d 3e 73 65 65 6b 52  ALE;.  pC->seekR
284c0 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20 69 66 28  esult = 0;.  if(
284d0 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
284e0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a  _due_to_error;..
284f0 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
28500 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72  update-hook if r
28510 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66  equired. */.  if
28520 28 20 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c  ( opflags & OPFL
28530 41 47 5f 4e 43 48 41 4e 47 45 20 29 7b 0a 20 20  AG_NCHANGE ){.  
28540 20 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a    p->nChange++;.
28550 20 20 20 20 69 66 28 20 64 62 2d 3e 78 55 70 64      if( db->xUpd
28560 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 48  ateCallback && H
28570 61 73 52 6f 77 69 64 28 70 54 61 62 29 20 29 7b  asRowid(pTab) ){
28580 0a 20 20 20 20 20 20 64 62 2d 3e 78 55 70 64 61  .      db->xUpda
28590 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70  teCallback(db->p
285a0 55 70 64 61 74 65 41 72 67 2c 20 53 51 4c 49 54  UpdateArg, SQLIT
285b0 45 5f 44 45 4c 45 54 45 2c 20 7a 44 62 2c 20 70  E_DELETE, zDb, p
285c0 54 61 62 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20  Tab->zName,.    
285d0 20 20 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f        pC->moveto
285e0 54 61 72 67 65 74 29 3b 0a 20 20 20 20 20 20 61  Target);.      a
285f0 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d  ssert( pC->iDb>=
28600 30 20 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a  0 );.    }.  }..
28610 20 20 62 72 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70    break;.}./* Op
28620 63 6f 64 65 3a 20 52 65 73 65 74 43 6f 75 6e 74  code: ResetCount
28630 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a   * * * * *.**.**
28640 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   The value of th
28650 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  e change counter
28660 20 69 73 20 63 6f 70 69 65 64 20 74 6f 20 74 68   is copied to th
28670 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
28680 65 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e  e.** change coun
28690 74 65 72 20 28 72 65 74 75 72 6e 65 64 20 62 79  ter (returned by
286a0 20 73 75 62 73 65 71 75 65 6e 74 20 63 61 6c 6c   subsequent call
286b0 73 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 68 61  s to sqlite3_cha
286c0 6e 67 65 73 28 29 29 2e 0a 2a 2a 20 54 68 65 6e  nges())..** Then
286d0 20 74 68 65 20 56 4d 73 20 69 6e 74 65 72 6e 61   the VMs interna
286e0 6c 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  l change counter
286f0 20 72 65 73 65 74 73 20 74 6f 20 30 2e 0a 2a 2a   resets to 0..**
28700 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79   This is used by
28710 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
28720 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  s..*/.case OP_Re
28730 73 65 74 43 6f 75 6e 74 3a 20 7b 0a 20 20 73 71  setCount: {.  sq
28740 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e  lite3VdbeSetChan
28750 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e  ges(db, p->nChan
28760 67 65 29 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67  ge);.  p->nChang
28770 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a  e = 0;.  break;.
28780 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  }../* Opcode: So
28790 72 74 65 72 43 6f 6d 70 61 72 65 20 50 31 20 50  rterCompare P1 P
287a0 32 20 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70  2 P3 P4.** Synop
287b0 73 69 73 3a 20 69 66 20 6b 65 79 28 50 31 29 21  sis: if key(P1)!
287c0 3d 74 72 69 6d 28 72 5b 50 33 5d 2c 50 34 29 20  =trim(r[P3],P4) 
287d0 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31  goto P2.**.** P1
287e0 20 69 73 20 61 20 73 6f 72 74 65 72 20 63 75 72   is a sorter cur
287f0 73 6f 72 2e 20 54 68 69 73 20 69 6e 73 74 72 75  sor. This instru
28800 63 74 69 6f 6e 20 63 6f 6d 70 61 72 65 73 20 61  ction compares a
28810 20 70 72 65 66 69 78 20 6f 66 20 74 68 65 0a 2a   prefix of the.*
28820 2a 20 72 65 63 6f 72 64 20 62 6c 6f 62 20 69 6e  * record blob in
28830 20 72 65 67 69 73 74 65 72 20 50 33 20 61 67 61   register P3 aga
28840 69 6e 73 74 20 61 20 70 72 65 66 69 78 20 6f 66  inst a prefix of
28850 20 74 68 65 20 65 6e 74 72 79 20 74 68 61 74 20   the entry that 
28860 0a 2a 2a 20 74 68 65 20 73 6f 72 74 65 72 20 63  .** the sorter c
28870 75 72 73 6f 72 20 63 75 72 72 65 6e 74 6c 79 20  ursor currently 
28880 70 6f 69 6e 74 73 20 74 6f 2e 20 20 4f 6e 6c 79  points to.  Only
28890 20 74 68 65 20 66 69 72 73 74 20 50 34 20 66 69   the first P4 fi
288a0 65 6c 64 73 0a 2a 2a 20 6f 66 20 72 5b 50 33 5d  elds.** of r[P3]
288b0 20 61 6e 64 20 74 68 65 20 73 6f 72 74 65 72 20   and the sorter 
288c0 72 65 63 6f 72 64 20 61 72 65 20 63 6f 6d 70 61  record are compa
288d0 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69  red..**.** If ei
288e0 74 68 65 72 20 50 33 20 6f 72 20 74 68 65 20 73  ther P3 or the s
288f0 6f 72 74 65 72 20 63 6f 6e 74 61 69 6e 73 20 61  orter contains a
28900 20 4e 55 4c 4c 20 69 6e 20 6f 6e 65 20 6f 66 20   NULL in one of 
28910 74 68 65 69 72 20 73 69 67 6e 69 66 69 63 61 6e  their significan
28920 74 0a 2a 2a 20 66 69 65 6c 64 73 20 28 6e 6f 74  t.** fields (not
28930 20 63 6f 75 6e 74 69 6e 67 20 74 68 65 20 50 34   counting the P4
28940 20 66 69 65 6c 64 73 20 61 74 20 74 68 65 20 65   fields at the e
28950 6e 64 20 77 68 69 63 68 20 61 72 65 20 69 67 6e  nd which are ign
28960 6f 72 65 64 29 20 74 68 65 6e 0a 2a 2a 20 74 68  ored) then.** th
28970 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  e comparison is 
28980 61 73 73 75 6d 65 64 20 74 6f 20 62 65 20 65 71  assumed to be eq
28990 75 61 6c 2e 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c 20  ual..**.** Fall 
289a0 74 68 72 6f 75 67 68 20 74 6f 20 6e 65 78 74 20  through to next 
289b0 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 66 20 74  instruction if t
289c0 68 65 20 74 77 6f 20 72 65 63 6f 72 64 73 20 63  he two records c
289d0 6f 6d 70 61 72 65 20 65 71 75 61 6c 20 74 6f 0a  ompare equal to.
289e0 2a 2a 20 65 61 63 68 20 6f 74 68 65 72 2e 20 20  ** each other.  
289f0 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
28a00 65 79 20 61 72 65 20 64 69 66 66 65 72 65 6e 74  ey are different
28a10 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
28a20 74 65 72 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20  terCompare: {.  
28a30 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
28a40 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74    int res;.  int
28a50 20 6e 4b 65 79 43 6f 6c 3b 0a 0a 20 20 70 43 20   nKeyCol;..  pC 
28a60 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
28a70 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69  p1];.  assert( i
28a80 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20  sSorter(pC) );. 
28a90 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
28aa0 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
28ab0 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  ;.  pIn3 = &aMem
28ac0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6e 4b 65  [pOp->p3];.  nKe
28ad0 79 43 6f 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 69  yCol = pOp->p4.i
28ae0 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 72  ;.  res = 0;.  r
28af0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  c = sqlite3VdbeS
28b00 6f 72 74 65 72 43 6f 6d 70 61 72 65 28 70 43 2c  orterCompare(pC,
28b10 20 70 49 6e 33 2c 20 6e 4b 65 79 43 6f 6c 2c 20   pIn3, nKeyCol, 
28b20 26 72 65 73 29 3b 0a 20 20 56 64 62 65 42 72 61  &res);.  VdbeBra
28b30 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c  nchTaken(res!=0,
28b40 32 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  2);.  if( rc ) g
28b50 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
28b60 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 72 65  _error;.  if( re
28b70 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  s ) goto jump_to
28b80 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b  _p2;.  break;.};
28b90 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72  ../* Opcode: Sor
28ba0 74 65 72 44 61 74 61 20 50 31 20 50 32 20 50 33  terData P1 P2 P3
28bb0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
28bc0 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a  : r[P2]=data.**.
28bd0 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65  ** Write into re
28be0 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63 75  gister P2 the cu
28bf0 72 72 65 6e 74 20 73 6f 72 74 65 72 20 64 61 74  rrent sorter dat
28c00 61 20 66 6f 72 20 73 6f 72 74 65 72 20 63 75 72  a for sorter cur
28c10 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 6e 20  sor P1..** Then 
28c20 63 6c 65 61 72 20 74 68 65 20 63 6f 6c 75 6d 6e  clear the column
28c30 20 68 65 61 64 65 72 20 63 61 63 68 65 20 6f 6e   header cache on
28c40 20 63 75 72 73 6f 72 20 50 33 2e 0a 2a 2a 0a 2a   cursor P3..**.*
28c50 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  * This opcode is
28c60 20 6e 6f 72 6d 61 6c 6c 79 20 75 73 65 20 74 6f   normally use to
28c70 20 6d 6f 76 65 20 61 20 72 65 63 6f 72 64 20 6f   move a record o
28c80 75 74 20 6f 66 20 74 68 65 20 73 6f 72 74 65 72  ut of the sorter
28c90 20 61 6e 64 20 69 6e 74 6f 0a 2a 2a 20 61 20 72   and into.** a r
28ca0 65 67 69 73 74 65 72 20 74 68 61 74 20 69 73 20  egister that is 
28cb0 74 68 65 20 73 6f 75 72 63 65 20 66 6f 72 20 61  the source for a
28cc0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75   pseudo-table cu
28cd0 72 73 6f 72 20 63 72 65 61 74 65 64 20 75 73 69  rsor created usi
28ce0 6e 67 0a 2a 2a 20 4f 70 65 6e 50 73 65 75 64 6f  ng.** OpenPseudo
28cf0 2e 20 20 54 68 61 74 20 70 73 65 75 64 6f 2d 74  .  That pseudo-t
28d00 61 62 6c 65 20 63 75 72 73 6f 72 20 69 73 20 74  able cursor is t
28d10 68 65 20 6f 6e 65 20 74 68 61 74 20 69 73 20 69  he one that is i
28d20 64 65 6e 74 69 66 69 65 64 20 62 79 0a 2a 2a 20  dentified by.** 
28d30 70 61 72 61 6d 65 74 65 72 20 50 33 2e 20 20 43  parameter P3.  C
28d40 6c 65 61 72 69 6e 67 20 74 68 65 20 50 33 20 63  learing the P3 c
28d50 6f 6c 75 6d 6e 20 63 61 63 68 65 20 61 73 20 70  olumn cache as p
28d60 61 72 74 20 6f 66 20 74 68 69 73 20 6f 70 63 6f  art of this opco
28d70 64 65 20 73 61 76 65 73 0a 2a 2a 20 75 73 20 66  de saves.** us f
28d80 72 6f 6d 20 68 61 76 69 6e 67 20 74 6f 20 69 73  rom having to is
28d90 73 75 65 20 61 20 73 65 70 61 72 61 74 65 20 4e  sue a separate N
28da0 75 6c 6c 52 6f 77 20 69 6e 73 74 72 75 63 74 69  ullRow instructi
28db0 6f 6e 20 74 6f 20 63 6c 65 61 72 20 74 68 61 74  on to clear that
28dc0 20 63 61 63 68 65 2e 0a 2a 2f 0a 63 61 73 65 20   cache..*/.case 
28dd0 4f 50 5f 53 6f 72 74 65 72 44 61 74 61 3a 20 7b  OP_SorterData: {
28de0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
28df0 43 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  C;..  pOut = &aM
28e00 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70  em[pOp->p2];.  p
28e10 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
28e20 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
28e30 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b   isSorter(pC) );
28e40 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
28e50 64 62 65 53 6f 72 74 65 72 52 6f 77 6b 65 79 28  dbeSorterRowkey(
28e60 70 43 2c 20 70 4f 75 74 29 3b 0a 20 20 61 73 73  pC, pOut);.  ass
28e70 65 72 74 28 20 72 63 21 3d 53 51 4c 49 54 45 5f  ert( rc!=SQLITE_
28e80 4f 4b 20 7c 7c 20 28 70 4f 75 74 2d 3e 66 6c 61  OK || (pOut->fla
28e90 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 20 29  gs & MEM_Blob) )
28ea0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
28eb0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
28ec0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
28ed0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
28ee0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
28ef0 6f 72 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70  or;.  p->apCsr[p
28f00 4f 70 2d 3e 70 33 5d 2d 3e 63 61 63 68 65 53 74  Op->p3]->cacheSt
28f10 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
28f20 4c 45 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  LE;.  break;.}..
28f30 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61  /* Opcode: RowDa
28f40 74 61 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ta P1 P2 P3 * *.
28f50 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
28f60 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72  2]=data.**.** Wr
28f70 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ite into registe
28f80 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74  r P2 the complet
28f90 65 20 72 6f 77 20 63 6f 6e 74 65 6e 74 20 66 6f  e row content fo
28fa0 72 20 74 68 65 20 72 6f 77 20 61 74 20 0a 2a 2a  r the row at .**
28fb0 20 77 68 69 63 68 20 63 75 72 73 6f 72 20 50 31   which cursor P1
28fc0 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
28fd0 69 6e 74 69 6e 67 2e 0a 2a 2a 20 54 68 65 72 65  inting..** There
28fe0 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65 74   is no interpret
28ff0 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74  ation of the dat
29000 61 2e 20 20 0a 2a 2a 20 49 74 20 69 73 20 6a 75  a.  .** It is ju
29010 73 74 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74  st copied onto t
29020 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20 65  he P2 register e
29030 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74  xactly as .** it
29040 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65   is found in the
29050 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
29060 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20  **.** If cursor 
29070 50 31 20 69 73 20 61 6e 20 69 6e 64 65 78 2c 20  P1 is an index, 
29080 74 68 65 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74  then the content
29090 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20 74   is the key of t
290a0 68 65 20 72 6f 77 2e 0a 2a 2a 20 49 66 20 63 75  he row..** If cu
290b0 72 73 6f 72 20 50 32 20 69 73 20 61 20 74 61 62  rsor P2 is a tab
290c0 6c 65 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6e  le, then the con
290d0 74 65 6e 74 20 65 78 74 72 61 63 74 65 64 20 69  tent extracted i
290e0 73 20 74 68 65 20 64 61 74 61 2e 0a 2a 2a 0a 2a  s the data..**.*
290f0 2a 20 49 66 20 74 68 65 20 50 31 20 63 75 72 73  * If the P1 curs
29100 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69 6e 74  or must be point
29110 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64 20 72  ing to a valid r
29120 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72  ow (not a NULL r
29130 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c  ow).** of a real
29140 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73   table, not a ps
29150 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  eudo-table..**.*
29160 2a 20 49 66 20 50 33 21 3d 30 20 74 68 65 6e 20  * If P3!=0 then 
29170 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 61  this opcode is a
29180 6c 6c 6f 77 65 64 20 74 6f 20 6d 61 6b 65 20 61  llowed to make a
29190 6e 20 65 70 68 65 6d 65 72 61 6c 20 70 6f 69 6e  n ephemeral poin
291a0 74 65 72 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20  ter.** into the 
291b0 64 61 74 61 62 61 73 65 20 70 61 67 65 2e 20 20  database page.  
291c0 54 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20  That means that 
291d0 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74  the content of t
291e0 68 65 20 6f 75 74 70 75 74 0a 2a 2a 20 72 65 67  he output.** reg
291f0 69 73 74 65 72 20 77 69 6c 6c 20 62 65 20 69 6e  ister will be in
29200 76 61 6c 69 64 61 74 65 64 20 61 73 20 73 6f 6f  validated as soo
29210 6e 20 61 73 20 74 68 65 20 63 75 72 73 6f 72 20  n as the cursor 
29220 6d 6f 76 65 73 20 2d 20 69 6e 63 6c 75 64 69 6e  moves - includin
29230 67 0a 2a 2a 20 6d 6f 76 65 73 20 63 61 75 73 65  g.** moves cause
29240 64 20 62 79 20 6f 74 68 65 72 20 63 75 72 73 6f  d by other curso
29250 72 73 20 74 68 61 74 20 22 73 61 76 65 22 20 74  rs that "save" t
29260 68 65 20 63 75 72 72 65 6e 74 20 63 75 72 73 6f  he current curso
29270 72 73 0a 2a 2a 20 70 6f 73 69 74 69 6f 6e 20 69  rs.** position i
29280 6e 20 6f 72 64 65 72 20 74 68 61 74 20 74 68 65  n order that the
29290 79 20 63 61 6e 20 77 72 69 74 65 20 74 6f 20 74  y can write to t
292a0 68 65 20 73 61 6d 65 20 74 61 62 6c 65 2e 20 20  he same table.  
292b0 49 66 20 50 33 3d 3d 30 0a 2a 2a 20 74 68 65 6e  If P3==0.** then
292c0 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 64   a copy of the d
292d0 61 74 61 20 69 73 20 6d 61 64 65 20 69 6e 74 6f  ata is made into
292e0 20 6d 65 6d 6f 72 79 2e 20 20 50 33 21 3d 30 20   memory.  P3!=0 
292f0 69 73 20 66 61 73 74 65 72 2c 20 62 75 74 0a 2a  is faster, but.*
29300 2a 20 50 33 3d 3d 30 20 69 73 20 73 61 66 65 72  * P3==0 is safer
29310 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 21 3d 30  ..**.** If P3!=0
29320 20 74 68 65 6e 20 74 68 65 20 63 6f 6e 74 65 6e   then the conten
29330 74 20 6f 66 20 74 68 65 20 50 32 20 72 65 67 69  t of the P2 regi
29340 73 74 65 72 20 69 73 20 75 6e 73 75 69 74 61 62  ster is unsuitab
29350 6c 65 20 66 6f 72 20 75 73 65 0a 2a 2a 20 69 6e  le for use.** in
29360 20 4f 50 5f 52 65 73 75 6c 74 20 61 6e 64 20 61   OP_Result and a
29370 6e 79 20 4f 50 5f 52 65 73 75 6c 74 20 77 69 6c  ny OP_Result wil
29380 6c 20 69 6e 76 61 6c 69 64 61 74 65 20 74 68 65  l invalidate the
29390 20 50 32 20 72 65 67 69 73 74 65 72 20 63 6f 6e   P2 register con
293a0 74 65 6e 74 2e 0a 2a 2a 20 54 68 65 20 50 32 20  tent..** The P2 
293b0 72 65 67 69 73 74 65 72 20 63 6f 6e 74 65 6e 74  register content
293c0 20 69 73 20 69 6e 76 61 6c 69 64 61 74 65 64 20   is invalidated 
293d0 62 79 20 6f 70 63 6f 64 65 73 20 6c 69 6b 65 20  by opcodes like 
293e0 4f 50 5f 46 75 6e 63 74 69 6f 6e 20 6f 72 0a 2a  OP_Function or.*
293f0 2a 20 62 79 20 61 6e 79 20 75 73 65 20 6f 66 20  * by any use of 
29400 61 6e 6f 74 68 65 72 20 63 75 72 73 6f 72 20 70  another cursor p
29410 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 65 20 73  ointing to the s
29420 61 6d 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61  ame table..*/.ca
29430 73 65 20 4f 50 5f 52 6f 77 44 61 74 61 3a 20 7b  se OP_RowData: {
29440 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
29450 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
29460 43 72 73 72 3b 0a 20 20 75 33 32 20 6e 3b 0a 0a  Crsr;.  u32 n;..
29470 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
29480 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
29490 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
294a0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
294b0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
294c0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
294d0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
294e0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
294f0 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
29500 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
29510 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  EE );.  assert( 
29520 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 30 20  isSorter(pC)==0 
29530 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
29540 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b 0a 20  >nullRow==0 );. 
29550 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e   assert( pC->uc.
29560 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
29570 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70  pCrsr = pC->uc.p
29580 43 75 72 73 6f 72 3b 0a 0a 20 20 2f 2a 20 54 68  Cursor;..  /* Th
29590 65 20 4f 50 5f 52 6f 77 44 61 74 61 20 6f 70 63  e OP_RowData opc
295a0 6f 64 65 73 20 61 6c 77 61 79 73 20 66 6f 6c 6c  odes always foll
295b0 6f 77 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20  ow OP_NotExists 
295c0 6f 72 0a 20 20 2a 2a 20 4f 50 5f 53 65 65 6b 52  or.  ** OP_SeekR
295d0 6f 77 69 64 20 6f 72 20 4f 50 5f 52 65 77 69 6e  owid or OP_Rewin
295e0 64 2f 4f 70 5f 4e 65 78 74 20 77 69 74 68 20 6e  d/Op_Next with n
295f0 6f 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 69 6e  o intervening in
29600 73 74 72 75 63 74 69 6f 6e 73 0a 20 20 2a 2a 20  structions.  ** 
29610 74 68 61 74 20 6d 69 67 68 74 20 69 6e 76 61 6c  that might inval
29620 69 64 61 74 65 20 74 68 65 20 63 75 72 73 6f 72  idate the cursor
29630 2e 0a 20 20 2a 2a 20 49 66 20 74 68 69 73 20 77  ..  ** If this w
29640 68 65 72 65 20 6e 6f 74 20 74 68 65 20 63 61 73  here not the cas
29650 65 2c 20 6f 6e 20 6f 66 20 74 68 65 20 66 6f 6c  e, on of the fol
29660 6c 6f 77 69 6e 67 20 61 73 73 65 72 74 28 29 73  lowing assert()s
29670 0a 20 20 2a 2a 20 77 6f 75 6c 64 20 66 61 69 6c  .  ** would fail
29680 2e 20 20 53 68 6f 75 6c 64 20 74 68 69 73 20 65  .  Should this e
29690 76 65 72 20 63 68 61 6e 67 65 20 28 62 65 63 61  ver change (beca
296a0 75 73 65 20 6f 66 20 63 68 61 6e 67 65 73 20 69  use of changes i
296b0 6e 20 74 68 65 20 63 6f 64 65 0a 20 20 2a 2a 20  n the code.  ** 
296c0 67 65 6e 65 72 61 74 6f 72 29 20 74 68 65 6e 20  generator) then 
296d0 74 68 65 20 66 69 78 20 77 6f 75 6c 64 20 62 65  the fix would be
296e0 20 74 6f 20 69 6e 73 65 72 74 20 61 20 63 61 6c   to insert a cal
296f0 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65  l to.  ** sqlite
29700 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74  3VdbeCursorMovet
29710 6f 28 29 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65  o()..  */.  asse
29720 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
29730 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61  Moveto==0 );.  a
29740 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
29750 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64  reeCursorIsValid
29760 28 70 43 72 73 72 29 20 29 3b 0a 23 69 66 20 30  (pCrsr) );.#if 0
29770 20 20 2f 2a 20 4e 6f 74 20 72 65 71 75 69 72 65    /* Not require
29780 64 20 64 75 65 20 74 6f 20 74 68 65 20 70 72 65  d due to the pre
29790 76 69 6f 75 73 20 74 6f 20 61 73 73 65 72 74 28  vious to assert(
297a0 29 20 73 74 61 74 65 6d 65 6e 74 73 20 2a 2f 0a  ) statements */.
297b0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
297c0 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70  beCursorMoveto(p
297d0 43 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51  C);.  if( rc!=SQ
297e0 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
297f0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
29800 72 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 6e 20 3d  r;.#endif..  n =
29810 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 79   sqlite3BtreePay
29820 6c 6f 61 64 53 69 7a 65 28 70 43 72 73 72 29 3b  loadSize(pCrsr);
29830 0a 20 20 69 66 28 20 6e 3e 28 75 33 32 29 64 62  .  if( n>(u32)db
29840 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
29850 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
29860 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
29870 67 3b 0a 20 20 7d 0a 20 20 74 65 73 74 63 61 73  g;.  }.  testcas
29880 65 28 20 6e 3d 3d 30 20 29 3b 0a 20 20 72 63 20  e( n==0 );.  rc 
29890 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  = sqlite3VdbeMem
298a0 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73 72 2c  FromBtree(pCrsr,
298b0 20 30 2c 20 6e 2c 20 70 4f 75 74 29 3b 0a 20 20   0, n, pOut);.  
298c0 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
298d0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
298e0 3b 0a 20 20 69 66 28 20 21 70 4f 70 2d 3e 70 33  ;.  if( !pOp->p3
298f0 20 29 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a   ) Deephemeraliz
29900 65 28 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54  e(pOut);.  UPDAT
29910 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
29920 4f 75 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52  Out);.  REGISTER
29930 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
29940 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
29950 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  }../* Opcode: Ro
29960 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  wid P1 P2 * * *.
29970 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
29980 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 53  2]=rowid.**.** S
29990 74 6f 72 65 20 69 6e 20 72 65 67 69 73 74 65 72  tore in register
299a0 20 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77   P2 an integer w
299b0 68 69 63 68 20 69 73 20 74 68 65 20 6b 65 79 20  hich is the key 
299c0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74  of the table ent
299d0 72 79 20 74 68 61 74 0a 2a 2a 20 50 31 20 69 73  ry that.** P1 is
299e0 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
299f0 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61   to..**.** P1 ca
29a00 6e 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 6f  n be either an o
29a10 72 64 69 6e 61 72 79 20 74 61 62 6c 65 20 6f 72  rdinary table or
29a20 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
29a30 2e 20 20 54 68 65 72 65 20 75 73 65 64 20 74 6f  .  There used to
29a40 0a 2a 2a 20 62 65 20 61 20 73 65 70 61 72 61 74  .** be a separat
29a50 65 20 4f 50 5f 56 52 6f 77 69 64 20 6f 70 63 6f  e OP_VRowid opco
29a60 64 65 20 66 6f 72 20 75 73 65 20 77 69 74 68 20  de for use with 
29a70 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 2c 20  virtual tables, 
29a80 62 75 74 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20  but this.** one 
29a90 6f 70 63 6f 64 65 20 6e 6f 77 20 77 6f 72 6b 73  opcode now works
29aa0 20 66 6f 72 20 62 6f 74 68 20 74 61 62 6c 65 20   for both table 
29ab0 74 79 70 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  types..*/.case O
29ac0 50 5f 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20  P_Rowid: {      
29ad0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
29ae0 74 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  t2 */.  VdbeCurs
29af0 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34 20 76 3b  or *pC;.  i64 v;
29b00 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
29b10 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20  *pVtab;.  const 
29b20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
29b30 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 70 4f 75 74  pModule;..  pOut
29b40 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
29b50 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73  e(p, pOp);.  ass
29b60 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
29b70 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
29b80 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
29b90 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
29ba0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
29bb0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
29bc0 70 43 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55  pC->eCurType!=CU
29bd0 52 54 59 50 45 5f 50 53 45 55 44 4f 20 7c 7c 20  RTYPE_PSEUDO || 
29be0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20  pC->nullRow );. 
29bf0 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77   if( pC->nullRow
29c00 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c   ){.    pOut->fl
29c10 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
29c20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c      break;.  }el
29c30 73 65 20 69 66 28 20 70 43 2d 3e 64 65 66 65 72  se if( pC->defer
29c40 72 65 64 4d 6f 76 65 74 6f 20 29 7b 0a 20 20 20  redMoveto ){.   
29c50 20 76 20 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f 54   v = pC->movetoT
29c60 61 72 67 65 74 3b 0a 23 69 66 6e 64 65 66 20 53  arget;.#ifndef S
29c70 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
29c80 41 4c 54 41 42 4c 45 0a 20 20 7d 65 6c 73 65 20  ALTABLE.  }else 
29c90 69 66 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  if( pC->eCurType
29ca0 3d 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20 29  ==CURTYPE_VTAB )
29cb0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
29cc0 2d 3e 75 63 2e 70 56 43 75 72 21 3d 30 20 29 3b  ->uc.pVCur!=0 );
29cd0 0a 20 20 20 20 70 56 74 61 62 20 3d 20 70 43 2d  .    pVtab = pC-
29ce0 3e 75 63 2e 70 56 43 75 72 2d 3e 70 56 74 61 62  >uc.pVCur->pVtab
29cf0 3b 0a 20 20 20 20 70 4d 6f 64 75 6c 65 20 3d 20  ;.    pModule = 
29d00 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
29d10 20 20 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64      assert( pMod
29d20 75 6c 65 2d 3e 78 52 6f 77 69 64 20 29 3b 0a 20  ule->xRowid );. 
29d30 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d     rc = pModule-
29d40 3e 78 52 6f 77 69 64 28 70 43 2d 3e 75 63 2e 70  >xRowid(pC->uc.p
29d50 56 43 75 72 2c 20 26 76 29 3b 0a 20 20 20 20 73  VCur, &v);.    s
29d60 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74  qlite3VtabImport
29d70 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29  Errmsg(p, pVtab)
29d80 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67  ;.    if( rc ) g
29d90 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
29da0 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66 20 2f  _error;.#endif /
29db0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
29dc0 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 20 20  RTUALTABLE */.  
29dd0 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
29de0 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
29df0 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
29e00 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
29e10 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20  ->uc.pCursor!=0 
29e20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
29e30 74 65 33 56 64 62 65 43 75 72 73 6f 72 52 65 73  te3VdbeCursorRes
29e40 74 6f 72 65 28 70 43 29 3b 0a 20 20 20 20 69 66  tore(pC);.    if
29e50 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
29e60 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
29e70 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c      if( pC->null
29e80 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 70 4f 75  Row ){.      pOu
29e90 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e  t->flags = MEM_N
29ea0 75 6c 6c 3b 0a 20 20 20 20 20 20 62 72 65 61 6b  ull;.      break
29eb0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 76 20 3d 20  ;.    }.    v = 
29ec0 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65  sqlite3BtreeInte
29ed0 67 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e 70 43  gerKey(pC->uc.pC
29ee0 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 70 4f  ursor);.  }.  pO
29ef0 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62  ut->u.i = v;.  b
29f00 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
29f10 64 65 3a 20 4e 75 6c 6c 52 6f 77 20 50 31 20 2a  de: NullRow P1 *
29f20 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76   * * *.**.** Mov
29f30 65 20 74 68 65 20 63 75 72 73 6f 72 20 50 31 20  e the cursor P1 
29f40 74 6f 20 61 20 6e 75 6c 6c 20 72 6f 77 2e 20 20  to a null row.  
29f50 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  Any OP_Column op
29f60 65 72 61 74 69 6f 6e 73 0a 2a 2a 20 74 68 61 74  erations.** that
29f70 20 6f 63 63 75 72 20 77 68 69 6c 65 20 74 68 65   occur while the
29f80 20 63 75 72 73 6f 72 20 69 73 20 6f 6e 20 74 68   cursor is on th
29f90 65 20 6e 75 6c 6c 20 72 6f 77 20 77 69 6c 6c 20  e null row will 
29fa0 61 6c 77 61 79 73 0a 2a 2a 20 77 72 69 74 65 20  always.** write 
29fb0 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  a NULL..*/.case 
29fc0 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a 20 20  OP_NullRow: {.  
29fd0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
29fe0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
29ff0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
2a000 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
2a010 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
2a020 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2a030 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43  t( pC!=0 );.  pC
2a040 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20  ->nullRow = 1;. 
2a050 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
2a060 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
2a070 20 20 69 66 28 20 70 43 2d 3e 65 43 75 72 54 79    if( pC->eCurTy
2a080 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
2a090 45 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  E ){.    assert(
2a0a0 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21   pC->uc.pCursor!
2a0b0 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  =0 );.    sqlite
2a0c0 33 42 74 72 65 65 43 6c 65 61 72 43 75 72 73 6f  3BtreeClearCurso
2a0d0 72 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  r(pC->uc.pCursor
2a0e0 29 3b 0a 20 20 7d 0a 23 69 66 64 65 66 20 53 51  );.  }.#ifdef SQ
2a0f0 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28  LITE_DEBUG.  if(
2a100 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 30 20 29   pC->seekOp==0 )
2a110 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50   pC->seekOp = OP
2a120 5f 4e 75 6c 6c 52 6f 77 3b 0a 23 65 6e 64 69 66  _NullRow;.#endif
2a130 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2a140 4f 70 63 6f 64 65 3a 20 53 65 65 6b 45 6e 64 20  Opcode: SeekEnd 
2a150 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
2a160 20 50 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72   Position cursor
2a170 20 50 31 20 61 74 20 74 68 65 20 65 6e 64 20 6f   P1 at the end o
2a180 66 20 74 68 65 20 62 74 72 65 65 20 66 6f 72 20  f the btree for 
2a190 74 68 65 20 70 75 72 70 6f 73 65 20 6f 66 0a 2a  the purpose of.*
2a1a0 2a 20 61 70 70 65 6e 64 69 6e 67 20 61 20 6e 65  * appending a ne
2a1b0 77 20 65 6e 74 72 79 20 6f 6e 74 6f 20 74 68 65  w entry onto the
2a1c0 20 62 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 74   btree..**.** It
2a1d0 20 69 73 20 61 73 73 75 6d 65 64 20 74 68 61 74   is assumed that
2a1e0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 75   the cursor is u
2a1f0 73 65 64 20 6f 6e 6c 79 20 66 6f 72 20 61 70 70  sed only for app
2a200 65 6e 64 69 6e 67 20 61 6e 64 20 73 6f 0a 2a 2a  ending and so.**
2a210 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 69   if the cursor i
2a220 73 20 76 61 6c 69 64 2c 20 74 68 65 6e 20 74 68  s valid, then th
2a230 65 20 63 75 72 73 6f 72 20 6d 75 73 74 20 61 6c  e cursor must al
2a240 72 65 61 64 79 20 62 65 20 70 6f 69 6e 74 69 6e  ready be pointin
2a250 67 0a 2a 2a 20 61 74 20 74 68 65 20 65 6e 64 20  g.** at the end 
2a260 6f 66 20 74 68 65 20 62 74 72 65 65 20 61 6e 64  of the btree and
2a270 20 73 6f 20 6e 6f 20 63 68 61 6e 67 65 73 20 61   so no changes a
2a280 72 65 20 6d 61 64 65 20 74 6f 0a 2a 2a 20 74 68  re made to.** th
2a290 65 20 63 75 72 73 6f 72 2e 0a 2a 2f 0a 2f 2a 20  e cursor..*/./* 
2a2a0 4f 70 63 6f 64 65 3a 20 4c 61 73 74 20 50 31 20  Opcode: Last P1 
2a2b0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
2a2c0 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74  he next use of t
2a2d0 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75  he Rowid or Colu
2a2e0 6d 6e 20 6f 72 20 50 72 65 76 20 69 6e 73 74 72  mn or Prev instr
2a2f0 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a  uction for P1 .*
2a300 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20  * will refer to 
2a310 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69  the last entry i
2a320 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  n the database t
2a330 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a  able or index..*
2a340 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f  * If the table o
2a350 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79  r index is empty
2a360 20 61 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20   and P2>0, then 
2a370 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
2a380 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32   to P2..** If P2
2a390 20 69 73 20 30 20 6f 72 20 69 66 20 74 68 65 20   is 0 or if the 
2a3a0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69  table or index i
2a3b0 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c  s not empty, fal
2a3c0 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20  l through.** to 
2a3d0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e  the following in
2a3e0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
2a3f0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
2a400 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63  ves the cursor c
2a410 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76  onfigured to mov
2a420 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64  e in reverse ord
2a430 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  er,.** from the 
2a440 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20 62  end toward the b
2a450 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74  eginning.  In ot
2a460 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63  her words, the c
2a470 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66  ursor is.** conf
2a480 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 50 72  igured to use Pr
2a490 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2f  ev, not Next..*/
2a4a0 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 45 6e 64  .case OP_SeekEnd
2a4b0 3a 0a 63 61 73 65 20 4f 50 5f 4c 61 73 74 3a 20  :.case OP_Last: 
2a4c0 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
2a4d0 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
2a4e0 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
2a4f0 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72   *pCrsr;.  int r
2a500 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  es;..  assert( p
2a510 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
2a520 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
2a530 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
2a540 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
2a550 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
2a560 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
2a570 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
2a580 42 54 52 45 45 20 29 3b 0a 20 20 70 43 72 73 72  BTREE );.  pCrsr
2a590 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f   = pC->uc.pCurso
2a5a0 72 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20  r;.  res = 0;.  
2a5b0 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30  assert( pCrsr!=0
2a5c0 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54   );.#ifdef SQLIT
2a5d0 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65  E_DEBUG.  pC->se
2a5e0 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f  ekOp = pOp->opco
2a5f0 64 65 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28  de;.#endif.  if(
2a600 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
2a610 5f 53 65 65 6b 45 6e 64 20 29 7b 0a 20 20 20 20  _SeekEnd ){.    
2a620 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d  assert( pOp->p2=
2a630 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e 73 65  =0 );.    pC->se
2a640 65 6b 52 65 73 75 6c 74 20 3d 20 2d 31 3b 0a 20  ekResult = -1;. 
2a650 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 42 74     if( sqlite3Bt
2a660 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64  reeCursorIsValid
2a670 4e 4e 28 70 43 72 73 72 29 20 29 7b 0a 20 20 20  NN(pCrsr) ){.   
2a680 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
2a690 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
2a6a0 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 72 73  e3BtreeLast(pCrs
2a6b0 72 2c 20 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e  r, &res);.  pC->
2a6c0 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65  nullRow = (u8)re
2a6d0 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65  s;.  pC->deferre
2a6e0 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70  dMoveto = 0;.  p
2a6f0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
2a700 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
2a710 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
2a720 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2a730 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3e  ;.  if( pOp->p2>
2a740 30 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61  0 ){.    VdbeBra
2a750 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c  nchTaken(res!=0,
2a760 32 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73 20  2);.    if( res 
2a770 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
2a780 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
2a790 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  }../* Opcode: If
2a7a0 53 6d 61 6c 6c 65 72 20 50 31 20 50 32 20 50 33  Smaller P1 P2 P3
2a7b0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 45 73 74 69 6d   * *.**.** Estim
2a7c0 61 74 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ate the number o
2a7d0 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61  f rows in the ta
2a7e0 62 6c 65 20 50 31 2e 20 20 4a 75 6d 70 20 74 6f  ble P1.  Jump to
2a7f0 20 50 32 20 69 66 20 74 68 61 74 0a 2a 2a 20 65   P2 if that.** e
2a800 73 74 69 6d 61 74 65 20 69 73 20 6c 65 73 73 20  stimate is less 
2a810 74 68 61 6e 20 61 70 70 72 6f 78 69 6d 61 74 65  than approximate
2a820 6c 79 20 32 2a 2a 28 30 2e 31 2a 50 33 29 2e 0a  ly 2**(0.1*P3)..
2a830 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 53 6d 61  */.case OP_IfSma
2a840 6c 6c 65 72 3a 20 7b 20 20 20 20 20 20 20 20 2f  ller: {        /
2a850 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65  * jump */.  Vdbe
2a860 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
2a870 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
2a880 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 36 34 20   int res;.  i64 
2a890 73 7a 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  sz;..  assert( p
2a8a0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
2a8b0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
2a8c0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
2a8d0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
2a8e0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
2a8f0 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63    pCrsr = pC->uc
2a900 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65  .pCursor;.  asse
2a910 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 72  rt( pCrsr );.  r
2a920 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
2a930 46 69 72 73 74 28 70 43 72 73 72 2c 20 26 72 65  First(pCrsr, &re
2a940 73 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  s);.  if( rc ) g
2a950 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2a960 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 72 65  _error;.  if( re
2a970 73 3d 3d 30 20 29 7b 0a 20 20 20 20 73 7a 20 3d  s==0 ){.    sz =
2a980 20 73 71 6c 69 74 65 33 42 74 72 65 65 52 6f 77   sqlite3BtreeRow
2a990 43 6f 75 6e 74 45 73 74 28 70 43 72 73 72 29 3b  CountEst(pCrsr);
2a9a0 0a 20 20 20 20 69 66 28 20 41 4c 57 41 59 53 28  .    if( ALWAYS(
2a9b0 73 7a 3e 3d 30 29 20 26 26 20 73 71 6c 69 74 65  sz>=0) && sqlite
2a9c0 33 4c 6f 67 45 73 74 28 28 75 36 34 29 73 7a 29  3LogEst((u64)sz)
2a9d0 3c 70 4f 70 2d 3e 70 33 20 29 20 72 65 73 20 3d  <pOp->p3 ) res =
2a9e0 20 31 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72   1;.  }.  VdbeBr
2a9f0 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30  anchTaken(res!=0
2aa00 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29  ,2);.  if( res )
2aa10 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
2aa20 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f  ;.  break;.}.../
2aa30 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72  * Opcode: Sorter
2aa40 53 6f 72 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  Sort P1 P2 * * *
2aa50 0a 2a 2a 0a 2a 2a 20 41 66 74 65 72 20 61 6c 6c  .**.** After all
2aa60 20 72 65 63 6f 72 64 73 20 68 61 76 65 20 62 65   records have be
2aa70 65 6e 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f  en inserted into
2aa80 20 74 68 65 20 53 6f 72 74 65 72 20 6f 62 6a 65   the Sorter obje
2aa90 63 74 0a 2a 2a 20 69 64 65 6e 74 69 66 69 65 64  ct.** identified
2aaa0 20 62 79 20 50 31 2c 20 69 6e 76 6f 6b 65 20 74   by P1, invoke t
2aab0 68 69 73 20 6f 70 63 6f 64 65 20 74 6f 20 61 63  his opcode to ac
2aac0 74 75 61 6c 6c 79 20 64 6f 20 74 68 65 20 73 6f  tually do the so
2aad0 72 74 69 6e 67 2e 0a 2a 2a 20 4a 75 6d 70 20 74  rting..** Jump t
2aae0 6f 20 50 32 20 69 66 20 74 68 65 72 65 20 61 72  o P2 if there ar
2aaf0 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 74 6f 20  e no records to 
2ab00 62 65 20 73 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a  be sorted..**.**
2ab10 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
2ab20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 4f 50 5f  an alias for OP_
2ab30 53 6f 72 74 20 61 6e 64 20 4f 50 5f 52 65 77 69  Sort and OP_Rewi
2ab40 6e 64 20 74 68 61 74 20 69 73 20 75 73 65 64 0a  nd that is used.
2ab50 2a 2a 20 66 6f 72 20 53 6f 72 74 65 72 20 6f 62  ** for Sorter ob
2ab60 6a 65 63 74 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  jects..*/./* Opc
2ab70 6f 64 65 3a 20 53 6f 72 74 20 50 31 20 50 32 20  ode: Sort P1 P2 
2ab80 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73  * * *.**.** This
2ab90 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 65 78 61   opcode does exa
2aba0 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 74 68  ctly the same th
2abb0 69 6e 67 20 61 73 20 4f 50 5f 52 65 77 69 6e 64  ing as OP_Rewind
2abc0 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20   except that.** 
2abd0 69 74 20 69 6e 63 72 65 6d 65 6e 74 73 20 61 6e  it increments an
2abe0 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20 67 6c   undocumented gl
2abf0 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 75 73  obal variable us
2ac00 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67 2e 0a  ed for testing..
2ac10 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67 20 69 73  **.** Sorting is
2ac20 20 61 63 63 6f 6d 70 6c 69 73 68 65 64 20 62 79   accomplished by
2ac30 20 77 72 69 74 69 6e 67 20 72 65 63 6f 72 64 73   writing records
2ac40 20 69 6e 74 6f 20 61 20 73 6f 72 74 69 6e 67 20   into a sorting 
2ac50 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65 6e 20 72  index,.** then r
2ac60 65 77 69 6e 64 69 6e 67 20 74 68 61 74 20 69 6e  ewinding that in
2ac70 64 65 78 20 61 6e 64 20 70 6c 61 79 69 6e 67 20  dex and playing 
2ac80 69 74 20 62 61 63 6b 20 66 72 6f 6d 20 62 65 67  it back from beg
2ac90 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e 64  inning to.** end
2aca0 2e 20 20 57 65 20 75 73 65 20 74 68 65 20 4f 50  .  We use the OP
2acb0 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20 69 6e 73  _Sort opcode ins
2acc0 74 65 61 64 20 6f 66 20 4f 50 5f 52 65 77 69 6e  tead of OP_Rewin
2acd0 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a 2a 20 72  d to do the.** r
2ace0 65 77 69 6e 64 69 6e 67 20 73 6f 20 74 68 61 74  ewinding so that
2acf0 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69   the global vari
2ad00 61 62 6c 65 20 77 69 6c 6c 20 62 65 20 69 6e 63  able will be inc
2ad10 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a 2a 2a 20  remented and.** 
2ad20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73  regression tests
2ad30 20 63 61 6e 20 64 65 74 65 72 6d 69 6e 65 20 77   can determine w
2ad40 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
2ad50 65 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 0a 2a  e optimizer is.*
2ad60 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f 70 74 69  * correctly opti
2ad70 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f 72 74 73  mizing out sorts
2ad80 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
2ad90 74 65 72 53 6f 72 74 3a 20 20 20 20 2f 2a 20 6a  terSort:    /* j
2ada0 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ump */.case OP_S
2adb0 6f 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ort: {        /*
2adc0 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20   jump */.#ifdef 
2add0 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71  SQLITE_TEST.  sq
2ade0 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74  lite3_sort_count
2adf0 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 65  ++;.  sqlite3_se
2ae00 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65  arch_count--;.#e
2ae10 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f 75 6e 74  ndif.  p->aCount
2ae20 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54  er[SQLITE_STMTST
2ae30 41 54 55 53 5f 53 4f 52 54 5d 2b 2b 3b 0a 20 20  ATUS_SORT]++;.  
2ae40 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
2ae50 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e 64 20 2a  into OP_Rewind *
2ae60 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  /.}./* Opcode: R
2ae70 65 77 69 6e 64 20 50 31 20 50 32 20 2a 20 2a 20  ewind P1 P2 * * 
2ae80 50 35 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78  P5.**.** The nex
2ae90 74 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77  t use of the Row
2aea0 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20  id or Column or 
2aeb0 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  Next instruction
2aec0 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c   for P1 .** will
2aed0 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 66 69   refer to the fi
2aee0 72 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65  rst entry in the
2aef0 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
2af00 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20  or index..** If 
2af10 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
2af20 65 78 20 69 73 20 65 6d 70 74 79 2c 20 6a 75 6d  ex is empty, jum
2af30 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
2af40 20 50 32 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74   P2..** If the t
2af50 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73  able or index is
2af60 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c   not empty, fall
2af70 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
2af80 66 6f 6c 6c 6f 77 69 6e 67 20 0a 2a 2a 20 69 6e  following .** in
2af90 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
2afa0 20 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65   If P5 is non-ze
2afb0 72 6f 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65  ro and the table
2afc0 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 74   is not empty, t
2afd0 68 65 6e 20 74 68 65 20 22 73 6b 69 70 2d 6e 65  hen the "skip-ne
2afe0 78 74 22 0a 2a 2a 20 66 6c 61 67 20 69 73 20 73  xt".** flag is s
2aff0 65 74 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72  et on the cursor
2b000 20 73 6f 20 74 68 61 74 20 74 68 65 20 6e 65 78   so that the nex
2b010 74 20 4f 50 5f 4e 65 78 74 20 69 6e 73 74 72 75  t OP_Next instru
2b020 63 74 69 6f 6e 20 0a 2a 2a 20 65 78 65 63 75 74  ction .** execut
2b030 65 64 20 6f 6e 20 69 74 20 69 73 20 61 20 6e 6f  ed on it is a no
2b040 2d 6f 70 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  -op..**.** This 
2b050 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68  opcode leaves th
2b060 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75  e cursor configu
2b070 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66  red to move in f
2b080 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a  orward order,.**
2b090 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e   from the beginn
2b0a0 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65 20 65  ing toward the e
2b0b0 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  nd.  In other wo
2b0c0 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20  rds, the cursor 
2b0d0 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64  is.** configured
2b0e0 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f   to use Next, no
2b0f0 74 20 50 72 65 76 2e 0a 2a 2f 0a 63 61 73 65 20  t Prev..*/.case 
2b100 4f 50 5f 52 65 77 69 6e 64 3a 20 7b 20 20 20 20  OP_Rewind: {    
2b110 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
2b120 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
2b130 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
2b140 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a  sr;.  int res;..
2b150 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2b160 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
2b170 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
2b180 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
2b190 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2b1a0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
2b1b0 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43  ert( isSorter(pC
2b1c0 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  )==(pOp->opcode=
2b1d0 3d 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74 29 20  =OP_SorterSort) 
2b1e0 29 3b 0a 20 20 72 65 73 20 3d 20 31 3b 0a 23 69  );.  res = 1;.#i
2b1f0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
2b200 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d  G.  pC->seekOp =
2b210 20 4f 50 5f 52 65 77 69 6e 64 3b 0a 23 65 6e 64   OP_Rewind;.#end
2b220 69 66 0a 20 20 69 66 28 20 69 73 53 6f 72 74 65  if.  if( isSorte
2b230 72 28 70 43 29 20 29 7b 0a 20 20 20 20 72 63 20  r(pC) ){.    rc 
2b240 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  = sqlite3VdbeSor
2b250 74 65 72 52 65 77 69 6e 64 28 70 43 2c 20 26 72  terRewind(pC, &r
2b260 65 73 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  es);.  }else{.  
2b270 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
2b280 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
2b290 42 54 52 45 45 20 29 3b 0a 20 20 20 20 70 43 72  BTREE );.    pCr
2b2a0 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72  sr = pC->uc.pCur
2b2b0 73 6f 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28  sor;.    assert(
2b2c0 20 70 43 72 73 72 20 29 3b 0a 20 20 20 20 72 63   pCrsr );.    rc
2b2d0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 46   = sqlite3BtreeF
2b2e0 69 72 73 74 28 70 43 72 73 72 2c 20 26 72 65 73  irst(pCrsr, &res
2b2f0 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
2b300 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55 4e  E_OMIT_WINDOWFUN
2b310 43 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  C.    if( pOp->p
2b320 35 20 29 20 73 71 6c 69 74 65 33 42 74 72 65 65  5 ) sqlite3Btree
2b330 53 6b 69 70 4e 65 78 74 28 70 43 72 73 72 29 3b  SkipNext(pCrsr);
2b340 0a 23 65 6e 64 69 66 0a 20 20 20 20 70 43 2d 3e  .#endif.    pC->
2b350 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
2b360 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68   0;.    pC->cach
2b370 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
2b380 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 69 66 28  STALE;.  }.  if(
2b390 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
2b3a0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
2b3b0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28   pC->nullRow = (
2b3c0 75 38 29 72 65 73 3b 0a 20 20 61 73 73 65 72 74  u8)res;.  assert
2b3d0 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70  ( pOp->p2>0 && p
2b3e0 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b  Op->p2<p->nOp );
2b3f0 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
2b400 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
2b410 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a  if( res ) goto j
2b420 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65  ump_to_p2;.  bre
2b430 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2b440 3a 20 4e 65 78 74 20 50 31 20 50 32 20 50 33 20  : Next P1 P2 P3 
2b450 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 41 64 76 61  P4 P5.**.** Adva
2b460 6e 63 65 20 63 75 72 73 6f 72 20 50 31 20 73 6f  nce cursor P1 so
2b470 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20   that it points 
2b480 74 6f 20 74 68 65 20 6e 65 78 74 20 6b 65 79 2f  to the next key/
2b490 64 61 74 61 20 70 61 69 72 20 69 6e 20 69 74 73  data pair in its
2b4a0 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  .** table or ind
2b4b0 65 78 2e 20 20 49 66 20 74 68 65 72 65 20 61 72  ex.  If there ar
2b4c0 65 20 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f 76 61  e no more key/va
2b4d0 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e 20 66  lue pairs then f
2b4e0 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  all through.** t
2b4f0 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o the following 
2b500 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75  instruction.  Bu
2b510 74 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20  t if the cursor 
2b520 61 64 76 61 6e 63 65 20 77 61 73 20 73 75 63 63  advance was succ
2b530 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20  essful,.** jump 
2b540 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
2b550 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4e 65 78  2..**.** The Nex
2b560 74 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79  t opcode is only
2b570 20 76 61 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67   valid following
2b580 20 61 6e 20 53 65 65 6b 47 54 2c 20 53 65 65 6b   an SeekGT, Seek
2b590 47 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 52 65 77  GE, or.** OP_Rew
2b5a0 69 6e 64 20 6f 70 63 6f 64 65 20 75 73 65 64 20  ind opcode used 
2b5b0 74 6f 20 70 6f 73 69 74 69 6f 6e 20 74 68 65 20  to position the 
2b5c0 63 75 72 73 6f 72 2e 20 20 4e 65 78 74 20 69 73  cursor.  Next is
2b5d0 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20   not allowed.** 
2b5e0 74 6f 20 66 6f 6c 6c 6f 77 20 53 65 65 6b 4c 54  to follow SeekLT
2b5f0 2c 20 53 65 65 6b 4c 45 2c 20 6f 72 20 4f 50 5f  , SeekLE, or OP_
2b600 4c 61 73 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  Last..**.** The 
2b610 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62  P1 cursor must b
2b620 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62  e for a real tab
2b630 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f  le, not a pseudo
2b640 2d 74 61 62 6c 65 2e 20 20 50 31 20 6d 75 73 74  -table.  P1 must
2b650 20 68 61 76 65 0a 2a 2a 20 62 65 65 6e 20 6f 70   have.** been op
2b660 65 6e 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68  ened prior to th
2b670 69 73 20 6f 70 63 6f 64 65 20 6f 72 20 74 68 65  is opcode or the
2b680 20 70 72 6f 67 72 61 6d 20 77 69 6c 6c 20 73 65   program will se
2b690 67 66 61 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  gfault..**.** Th
2b6a0 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 61 20  e P3 value is a 
2b6b0 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74 72 65  hint to the btre
2b6c0 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
2b6d0 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68 61 74  . If P3==1, that
2b6e0 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69 73 20  .** means P1 is 
2b6f0 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61 6e 64  an SQL index and
2b700 20 74 68 61 74 20 74 68 69 73 20 69 6e 73 74 72   that this instr
2b710 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76  uction could hav
2b720 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65  e been.** omitte
2b730 64 20 69 66 20 74 68 61 74 20 69 6e 64 65 78 20  d if that index 
2b740 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75 65 2e  had been unique.
2b750 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c 79 20    P3 is usually 
2b760 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77  0.  P3 is.** alw
2b770 61 79 73 20 65 69 74 68 65 72 20 30 20 6f 72 20  ays either 0 or 
2b780 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  1..**.** P4 is a
2b790 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20 50 34  lways of type P4
2b7a0 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75  _ADVANCE. The fu
2b7b0 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70  nction pointer p
2b7c0 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69  oints to.** sqli
2b7d0 74 65 33 42 74 72 65 65 4e 65 78 74 28 29 2e 0a  te3BtreeNext()..
2b7e0 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70  **.** If P5 is p
2b7f0 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68 65 20  ositive and the 
2b800 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74  jump is taken, t
2b810 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65  hen event counte
2b820 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31  r.** number P5-1
2b830 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64   in the prepared
2b840 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e   statement is in
2b850 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a  cremented..**.**
2b860 20 53 65 65 20 61 6c 73 6f 3a 20 50 72 65 76 0a   See also: Prev.
2b870 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72  */./* Opcode: Pr
2b880 65 76 20 50 31 20 50 32 20 50 33 20 50 34 20 50  ev P1 P2 P3 P4 P
2b890 35 0a 2a 2a 0a 2a 2a 20 42 61 63 6b 20 75 70 20  5.**.** Back up 
2b8a0 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
2b8b0 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74  t it points to t
2b8c0 68 65 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f  he previous key/
2b8d0 64 61 74 61 20 70 61 69 72 20 69 6e 20 69 74 73  data pair in its
2b8e0 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  .** table or ind
2b8f0 65 78 2e 20 20 49 66 20 74 68 65 72 65 20 69 73  ex.  If there is
2b900 20 6e 6f 20 70 72 65 76 69 6f 75 73 20 6b 65 79   no previous key
2b910 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74 68 65  /value pairs the
2b920 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a  n fall through.*
2b930 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * to the followi
2b940 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  ng instruction. 
2b950 20 42 75 74 20 69 66 20 74 68 65 20 63 75 72 73   But if the curs
2b960 6f 72 20 62 61 63 6b 75 70 20 77 61 73 20 73 75  or backup was su
2b970 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d  ccessful,.** jum
2b980 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
2b990 20 50 32 2e 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 54 68   P2..**.**.** Th
2b9a0 65 20 50 72 65 76 20 6f 70 63 6f 64 65 20 69 73  e Prev opcode is
2b9b0 20 6f 6e 6c 79 20 76 61 6c 69 64 20 66 6f 6c 6c   only valid foll
2b9c0 6f 77 69 6e 67 20 61 6e 20 53 65 65 6b 4c 54 2c  owing an SeekLT,
2b9d0 20 53 65 65 6b 4c 45 2c 20 6f 72 0a 2a 2a 20 4f   SeekLE, or.** O
2b9e0 50 5f 4c 61 73 74 20 6f 70 63 6f 64 65 20 75 73  P_Last opcode us
2b9f0 65 64 20 74 6f 20 70 6f 73 69 74 69 6f 6e 20 74  ed to position t
2ba00 68 65 20 63 75 72 73 6f 72 2e 20 20 50 72 65 76  he cursor.  Prev
2ba10 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 0a   is not allowed.
2ba20 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77 20 53 65 65  ** to follow See
2ba30 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20 6f 72 20  kGT, SeekGE, or 
2ba40 4f 50 5f 52 65 77 69 6e 64 2e 0a 2a 2a 0a 2a 2a  OP_Rewind..**.**
2ba50 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   The P1 cursor m
2ba60 75 73 74 20 62 65 20 66 6f 72 20 61 20 72 65 61  ust be for a rea
2ba70 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70  l table, not a p
2ba80 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49 66  seudo-table.  If
2ba90 20 50 31 20 69 73 0a 2a 2a 20 6e 6f 74 20 6f 70   P1 is.** not op
2baa0 65 6e 20 74 68 65 6e 20 74 68 65 20 62 65 68 61  en then the beha
2bab0 76 69 6f 72 20 69 73 20 75 6e 64 65 66 69 6e 65  vior is undefine
2bac0 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33 20  d..**.** The P3 
2bad0 76 61 6c 75 65 20 69 73 20 61 20 68 69 6e 74 20  value is a hint 
2bae0 74 6f 20 74 68 65 20 62 74 72 65 65 20 69 6d 70  to the btree imp
2baf0 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 49 66 20  lementation. If 
2bb00 50 33 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a 20 6d  P3==1, that.** m
2bb10 65 61 6e 73 20 50 31 20 69 73 20 61 6e 20 53 51  eans P1 is an SQ
2bb20 4c 20 69 6e 64 65 78 20 61 6e 64 20 74 68 61 74  L index and that
2bb30 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
2bb40 6e 20 63 6f 75 6c 64 20 68 61 76 65 20 62 65 65  n could have bee
2bb50 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64 20 69 66 20  n.** omitted if 
2bb60 74 68 61 74 20 69 6e 64 65 78 20 68 61 64 20 62  that index had b
2bb70 65 65 6e 20 75 6e 69 71 75 65 2e 20 20 50 33 20  een unique.  P3 
2bb80 69 73 20 75 73 75 61 6c 6c 79 20 30 2e 20 20 50  is usually 0.  P
2bb90 33 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 65  3 is.** always e
2bba0 69 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2a  ither 0 or 1..**
2bbb0 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77 61 79 73  .** P4 is always
2bbc0 20 6f 66 20 74 79 70 65 20 50 34 5f 41 44 56 41   of type P4_ADVA
2bbd0 4e 43 45 2e 20 54 68 65 20 66 75 6e 63 74 69 6f  NCE. The functio
2bbe0 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69 6e 74 73  n pointer points
2bbf0 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 42 74   to.** sqlite3Bt
2bc00 72 65 65 50 72 65 76 69 6f 75 73 28 29 2e 0a 2a  reePrevious()..*
2bc10 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70 6f  *.** If P5 is po
2bc20 73 69 74 69 76 65 20 61 6e 64 20 74 68 65 20 6a  sitive and the j
2bc30 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74 68  ump is taken, th
2bc40 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65 72  en event counter
2bc50 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31 20  .** number P5-1 
2bc60 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20  in the prepared 
2bc70 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e 63  statement is inc
2bc80 72 65 6d 65 6e 74 65 64 2e 0a 2a 2f 0a 2f 2a 20  remented..*/./* 
2bc90 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 4e 65  Opcode: SorterNe
2bca0 78 74 20 50 31 20 50 32 20 2a 20 2a 20 50 35 0a  xt P1 P2 * * P5.
2bcb0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
2bcc0 65 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  e works just lik
2bcd0 65 20 4f 50 5f 4e 65 78 74 20 65 78 63 65 70 74  e OP_Next except
2bce0 20 74 68 61 74 20 50 31 20 6d 75 73 74 20 62 65   that P1 must be
2bcf0 20 61 0a 2a 2a 20 73 6f 72 74 65 72 20 6f 62 6a   a.** sorter obj
2bd00 65 63 74 20 66 6f 72 20 77 68 69 63 68 20 74 68  ect for which th
2bd10 65 20 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74 20  e OP_SorterSort 
2bd20 6f 70 63 6f 64 65 20 68 61 73 20 62 65 65 6e 0a  opcode has been.
2bd30 2a 2a 20 69 6e 76 6f 6b 65 64 2e 20 20 54 68 69  ** invoked.  Thi
2bd40 73 20 6f 70 63 6f 64 65 20 61 64 76 61 6e 63 65  s opcode advance
2bd50 73 20 74 68 65 20 63 75 72 73 6f 72 20 74 6f 20  s the cursor to 
2bd60 74 68 65 20 6e 65 78 74 20 73 6f 72 74 65 64 0a  the next sorted.
2bd70 2a 2a 20 72 65 63 6f 72 64 2c 20 6f 72 20 6a 75  ** record, or ju
2bd80 6d 70 73 20 74 6f 20 50 32 20 69 66 20 74 68 65  mps to P2 if the
2bd90 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20 73  re are no more s
2bda0 6f 72 74 65 64 20 72 65 63 6f 72 64 73 2e 0a 2a  orted records..*
2bdb0 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
2bdc0 4e 65 78 74 3a 20 7b 20 20 2f 2a 20 6a 75 6d 70  Next: {  /* jump
2bdd0 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
2bde0 20 2a 70 43 3b 0a 0a 20 20 70 43 20 3d 20 70 2d   *pC;..  pC = p-
2bdf0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
2be00 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72  .  assert( isSor
2be10 74 65 72 28 70 43 29 20 29 3b 0a 20 20 72 63 20  ter(pC) );.  rc 
2be20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  = sqlite3VdbeSor
2be30 74 65 72 4e 65 78 74 28 64 62 2c 20 70 43 29 3b  terNext(db, pC);
2be40 0a 20 20 67 6f 74 6f 20 6e 65 78 74 5f 74 61 69  .  goto next_tai
2be50 6c 3b 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 3a  l;.case OP_Prev:
2be60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
2be70 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78  p */.case OP_Nex
2be80 74 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  t:          /* j
2be90 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ump */.  assert(
2bea0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
2beb0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
2bec0 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
2bed0 4f 70 2d 3e 70 35 3c 41 72 72 61 79 53 69 7a 65  Op->p5<ArraySize
2bee0 28 70 2d 3e 61 43 6f 75 6e 74 65 72 29 20 29 3b  (p->aCounter) );
2bef0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
2bf00 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2bf10 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
2bf20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
2bf30 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
2bf40 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
2bf50 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
2bf60 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65  _BTREE );.  asse
2bf70 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21  rt( pOp->opcode!
2bf80 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d  =OP_Next || pOp-
2bf90 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71  >p4.xAdvance==sq
2bfa0 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 20 29  lite3BtreeNext )
2bfb0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2bfc0 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76  >opcode!=OP_Prev
2bfd0 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76   || pOp->p4.xAdv
2bfe0 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72  ance==sqlite3Btr
2bff0 65 65 50 72 65 76 69 6f 75 73 20 29 3b 0a 0a 20  eePrevious );.. 
2c000 20 2f 2a 20 54 68 65 20 4e 65 78 74 20 6f 70 63   /* The Next opc
2c010 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75 73 65 64  ode is only used
2c020 20 61 66 74 65 72 20 53 65 65 6b 47 54 2c 20 53   after SeekGT, S
2c030 65 65 6b 47 45 2c 20 52 65 77 69 6e 64 2c 20 61  eekGE, Rewind, a
2c040 6e 64 20 46 6f 75 6e 64 2e 0a 20 20 2a 2a 20 54  nd Found..  ** T
2c050 68 65 20 50 72 65 76 20 6f 70 63 6f 64 65 20 69  he Prev opcode i
2c060 73 20 6f 6e 6c 79 20 75 73 65 64 20 61 66 74 65  s only used afte
2c070 72 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45  r SeekLT, SeekLE
2c080 2c 20 61 6e 64 20 4c 61 73 74 2e 20 2a 2f 0a 20  , and Last. */. 
2c090 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
2c0a0 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 0a 20 20  code!=OP_Next.  
2c0b0 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b       || pC->seek
2c0c0 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c  Op==OP_SeekGT ||
2c0d0 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f   pC->seekOp==OP_
2c0e0 53 65 65 6b 47 45 0a 20 20 20 20 20 20 20 7c 7c  SeekGE.       ||
2c0f0 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f   pC->seekOp==OP_
2c100 52 65 77 69 6e 64 20 7c 7c 20 70 43 2d 3e 73 65  Rewind || pC->se
2c110 65 6b 4f 70 3d 3d 4f 50 5f 46 6f 75 6e 64 20 0a  ekOp==OP_Found .
2c120 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65         || pC->se
2c130 65 6b 4f 70 3d 3d 4f 50 5f 4e 75 6c 6c 52 6f 77  ekOp==OP_NullRow
2c140 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f  || pC->seekOp==O
2c150 50 5f 53 65 65 6b 52 6f 77 69 64 29 3b 0a 20 20  P_SeekRowid);.  
2c160 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
2c170 6f 64 65 21 3d 4f 50 5f 50 72 65 76 0a 20 20 20  ode!=OP_Prev.   
2c180 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f      || pC->seekO
2c190 70 3d 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20  p==OP_SeekLT || 
2c1a0 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53  pC->seekOp==OP_S
2c1b0 65 65 6b 4c 45 0a 20 20 20 20 20 20 20 7c 7c 20  eekLE.       || 
2c1c0 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 4c  pC->seekOp==OP_L
2c1d0 61 73 74 20 0a 20 20 20 20 20 20 20 7c 7c 20 70  ast .       || p
2c1e0 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 4e 75  C->seekOp==OP_Nu
2c1f0 6c 6c 52 6f 77 29 3b 0a 0a 20 20 72 63 20 3d 20  llRow);..  rc = 
2c200 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65  pOp->p4.xAdvance
2c210 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
2c220 20 70 4f 70 2d 3e 70 33 29 3b 0a 6e 65 78 74 5f   pOp->p3);.next_
2c230 74 61 69 6c 3a 0a 20 20 70 43 2d 3e 63 61 63 68  tail:.  pC->cach
2c240 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
2c250 53 54 41 4c 45 3b 0a 20 20 56 64 62 65 42 72 61  STALE;.  VdbeBra
2c260 6e 63 68 54 61 6b 65 6e 28 72 63 3d 3d 53 51 4c  nchTaken(rc==SQL
2c270 49 54 45 5f 4f 4b 2c 32 29 3b 0a 20 20 69 66 28  ITE_OK,2);.  if(
2c280 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
2c290 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  {.    pC->nullRo
2c2a0 77 20 3d 20 30 3b 0a 20 20 20 20 70 2d 3e 61 43  w = 0;.    p->aC
2c2b0 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e 70 35 5d 2b  ounter[pOp->p5]+
2c2c0 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  +;.#ifdef SQLITE
2c2d0 5f 54 45 53 54 0a 20 20 20 20 73 71 6c 69 74 65  _TEST.    sqlite
2c2e0 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b  3_search_count++
2c2f0 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 67 6f 74  ;.#endif.    got
2c300 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64  o jump_to_p2_and
2c310 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72  _check_for_inter
2c320 72 75 70 74 3b 0a 20 20 7d 0a 20 20 69 66 28 20  rupt;.  }.  if( 
2c330 72 63 21 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20  rc!=SQLITE_DONE 
2c340 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
2c350 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 72 63 20  _to_error;.  rc 
2c360 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 70  = SQLITE_OK;.  p
2c370 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  C->nullRow = 1;.
2c380 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72    goto check_for
2c390 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f  _interrupt;.}../
2c3a0 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 49 6e 73  * Opcode: IdxIns
2c3b0 65 72 74 20 50 31 20 50 32 20 50 33 20 50 34 20  ert P1 P2 P3 P4 
2c3c0 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
2c3d0 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  key=r[P2].**.** 
2c3e0 52 65 67 69 73 74 65 72 20 50 32 20 68 6f 6c 64  Register P2 hold
2c3f0 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 6b  s an SQL index k
2c400 65 79 20 6d 61 64 65 20 75 73 69 6e 67 20 74 68  ey made using th
2c410 65 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20  e.** MakeRecord 
2c420 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e 20 20 54  instructions.  T
2c430 68 69 73 20 6f 70 63 6f 64 65 20 77 72 69 74 65  his opcode write
2c440 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e  s that key.** in
2c450 74 6f 20 74 68 65 20 69 6e 64 65 78 20 50 31 2e  to the index P1.
2c460 20 20 44 61 74 61 20 66 6f 72 20 74 68 65 20 65    Data for the e
2c470 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a  ntry is nil..**.
2c480 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  ** If P4 is not 
2c490 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74 20 69 73  zero, then it is
2c4a0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 76   the number of v
2c4b0 61 6c 75 65 73 20 69 6e 20 74 68 65 20 75 6e 70  alues in the unp
2c4c0 61 63 6b 65 64 0a 2a 2a 20 6b 65 79 20 6f 66 20  acked.** key of 
2c4d0 72 65 67 28 50 32 29 2e 20 20 49 6e 20 74 68 61  reg(P2).  In tha
2c4e0 74 20 63 61 73 65 2c 20 50 33 20 69 73 20 74 68  t case, P3 is th
2c4f0 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 66  e index of the f
2c500 69 72 73 74 20 72 65 67 69 73 74 65 72 0a 2a 2a  irst register.**
2c510 20 66 6f 72 20 74 68 65 20 75 6e 70 61 63 6b 65   for the unpacke
2c520 64 20 6b 65 79 2e 20 20 54 68 65 20 61 76 61 69  d key.  The avai
2c530 6c 61 62 69 6c 69 74 79 20 6f 66 20 74 68 65 20  lability of the 
2c540 75 6e 70 61 63 6b 65 64 20 6b 65 79 20 63 61 6e  unpacked key can
2c550 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 62 65   sometimes.** be
2c560 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e   an optimization
2c570 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61  ..**.** If P5 ha
2c580 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 41 50 50  s the OPFLAG_APP
2c590 45 4e 44 20 62 69 74 20 73 65 74 2c 20 74 68 61  END bit set, tha
2c5a0 74 20 69 73 20 61 20 68 69 6e 74 20 74 6f 20 74  t is a hint to t
2c5b0 68 65 20 62 2d 74 72 65 65 20 6c 61 79 65 72 0a  he b-tree layer.
2c5c0 2a 2a 20 74 68 61 74 20 74 68 69 73 20 69 6e 73  ** that this ins
2c5d0 65 72 74 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f  ert is likely to
2c5e0 20 62 65 20 61 6e 20 61 70 70 65 6e 64 2e 0a 2a   be an append..*
2c5f0 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74  *.** If P5 has t
2c600 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47  he OPFLAG_NCHANG
2c610 45 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20  E bit set, then 
2c620 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  the change count
2c630 65 72 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65  er is.** increme
2c640 6e 74 65 64 20 62 79 20 74 68 69 73 20 69 6e 73  nted by this ins
2c650 74 72 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68  truction.  If th
2c660 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
2c670 20 62 69 74 20 69 73 20 63 6c 65 61 72 2c 0a 2a   bit is clear,.*
2c680 2a 20 74 68 65 6e 20 74 68 65 20 63 68 61 6e 67  * then the chang
2c690 65 20 63 6f 75 6e 74 65 72 20 69 73 20 75 6e 63  e counter is unc
2c6a0 68 61 6e 67 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  hanged..**.** If
2c6b0 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53   the OPFLAG_USES
2c6c0 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 6f  EEKRESULT flag o
2c6d0 66 20 50 35 20 69 73 20 73 65 74 2c 20 74 68 65  f P5 is set, the
2c6e0 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
2c6f0 6d 69 67 68 74 0a 2a 2a 20 72 75 6e 20 66 61 73  might.** run fas
2c700 74 65 72 20 62 79 20 61 76 6f 69 64 69 6e 67 20  ter by avoiding 
2c710 61 6e 20 75 6e 6e 65 63 65 73 73 61 72 79 20 73  an unnecessary s
2c720 65 65 6b 20 6f 6e 20 63 75 72 73 6f 72 20 50 31  eek on cursor P1
2c730 2e 20 20 48 6f 77 65 76 65 72 2c 0a 2a 2a 20 74  .  However,.** t
2c740 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45  he OPFLAG_USESEE
2c750 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 6d 75 73  KRESULT flag mus
2c760 74 20 6f 6e 6c 79 20 62 65 20 73 65 74 20 69 66  t only be set if
2c770 20 74 68 65 72 65 20 68 61 76 65 20 62 65 65 6e   there have been
2c780 20 6e 6f 20 70 72 69 6f 72 0a 2a 2a 20 73 65 65   no prior.** see
2c790 6b 73 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72  ks on the cursor
2c7a0 20 6f 72 20 69 66 20 74 68 65 20 6d 6f 73 74 20   or if the most 
2c7b0 72 65 63 65 6e 74 20 73 65 65 6b 20 75 73 65 64  recent seek used
2c7c0 20 61 20 6b 65 79 20 65 71 75 69 76 61 6c 65 6e   a key equivalen
2c7d0 74 0a 2a 2a 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a  t.** to P2. .**.
2c7e0 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
2c7f0 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66  ion only works f
2c800 6f 72 20 69 6e 64 69 63 65 73 2e 20 20 54 68 65  or indices.  The
2c810 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74   equivalent inst
2c820 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74  ruction.** for t
2c830 61 62 6c 65 73 20 69 73 20 4f 50 5f 49 6e 73 65  ables is OP_Inse
2c840 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  rt..*/./* Opcode
2c850 3a 20 53 6f 72 74 65 72 49 6e 73 65 72 74 20 50  : SorterInsert P
2c860 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
2c870 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32  nopsis: key=r[P2
2c880 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  ].**.** Register
2c890 20 50 32 20 68 6f 6c 64 73 20 61 6e 20 53 51 4c   P2 holds an SQL
2c8a0 20 69 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20   index key made 
2c8b0 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b  using the.** Mak
2c8c0 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74  eRecord instruct
2c8d0 69 6f 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f  ions.  This opco
2c8e0 64 65 20 77 72 69 74 65 73 20 74 68 61 74 20 6b  de writes that k
2c8f0 65 79 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 73  ey.** into the s
2c900 6f 72 74 65 72 20 50 31 2e 20 20 44 61 74 61 20  orter P1.  Data 
2c910 66 6f 72 20 74 68 65 20 65 6e 74 72 79 20 69 73  for the entry is
2c920 20 6e 69 6c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50   nil..*/.case OP
2c930 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 3a 20 20  _SorterInsert:  
2c940 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 63       /* in2 */.c
2c950 61 73 65 20 4f 50 5f 49 64 78 49 6e 73 65 72 74  ase OP_IdxInsert
2c960 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e  : {        /* in
2c970 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  2 */.  VdbeCurso
2c980 72 20 2a 70 43 3b 0a 20 20 42 74 72 65 65 50 61  r *pC;.  BtreePa
2c990 79 6c 6f 61 64 20 78 3b 0a 0a 20 20 61 73 73 65  yload x;..  asse
2c9a0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
2c9b0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
2c9c0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
2c9d0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
2c9e0 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 49  ;.  sqlite3VdbeI
2c9f0 6e 63 72 57 72 69 74 65 43 6f 75 6e 74 65 72 28  ncrWriteCounter(
2ca00 70 2c 20 70 43 29 3b 0a 20 20 61 73 73 65 72 74  p, pC);.  assert
2ca10 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
2ca20 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43  ert( isSorter(pC
2ca30 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  )==(pOp->opcode=
2ca40 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74  =OP_SorterInsert
2ca50 29 20 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  ) );.  pIn2 = &a
2ca60 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
2ca70 61 73 73 65 72 74 28 20 70 49 6e 32 2d 3e 66 6c  assert( pIn2->fl
2ca80 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29  ags & MEM_Blob )
2ca90 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  ;.  if( pOp->p5 
2caa0 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  & OPFLAG_NCHANGE
2cab0 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b   ) p->nChange++;
2cac0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
2cad0 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
2cae0 5f 42 54 52 45 45 20 7c 7c 20 70 4f 70 2d 3e 6f  _BTREE || pOp->o
2caf0 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72  pcode==OP_Sorter
2cb00 49 6e 73 65 72 74 20 29 3b 0a 20 20 61 73 73 65  Insert );.  asse
2cb10 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  rt( pC->isTable=
2cb20 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 45 78 70  =0 );.  rc = Exp
2cb30 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b 0a 20  andBlob(pIn2);. 
2cb40 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
2cb50 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
2cb60 72 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  r;.  if( pOp->op
2cb70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49  code==OP_SorterI
2cb80 6e 73 65 72 74 20 29 7b 0a 20 20 20 20 72 63 20  nsert ){.    rc 
2cb90 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  = sqlite3VdbeSor
2cba0 74 65 72 57 72 69 74 65 28 70 43 2c 20 70 49 6e  terWrite(pC, pIn
2cbb0 32 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  2);.  }else{.   
2cbc0 20 78 2e 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e   x.nKey = pIn2->
2cbd0 6e 3b 0a 20 20 20 20 78 2e 70 4b 65 79 20 3d 20  n;.    x.pKey = 
2cbe0 70 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 78 2e 61  pIn2->z;.    x.a
2cbf0 4d 65 6d 20 3d 20 61 4d 65 6d 20 2b 20 70 4f 70  Mem = aMem + pOp
2cc00 2d 3e 70 33 3b 0a 20 20 20 20 78 2e 6e 4d 65 6d  ->p3;.    x.nMem
2cc10 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e   = (u16)pOp->p4.
2cc20 69 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  i;.    rc = sqli
2cc30 74 65 33 42 74 72 65 65 49 6e 73 65 72 74 28 70  te3BtreeInsert(p
2cc40 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26  C->uc.pCursor, &
2cc50 78 2c 0a 20 20 20 20 20 20 20 20 20 28 70 4f 70  x,.         (pOp
2cc60 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 41  ->p5 & (OPFLAG_A
2cc70 50 50 45 4e 44 7c 4f 50 46 4c 41 47 5f 53 41 56  PPEND|OPFLAG_SAV
2cc80 45 50 4f 53 49 54 49 4f 4e 29 29 2c 20 0a 20 20  EPOSITION)), .  
2cc90 20 20 20 20 20 20 28 28 70 4f 70 2d 3e 70 35 20        ((pOp->p5 
2cca0 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b  & OPFLAG_USESEEK
2ccb0 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65  RESULT) ? pC->se
2ccc0 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a 20 20  ekResult : 0).  
2ccd0 20 20 20 20 20 20 29 3b 0a 20 20 20 20 61 73 73        );.    ass
2cce0 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
2ccf0 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
2cd00 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
2cd10 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
2cd20 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 29 20 67  .  }.  if( rc) g
2cd30 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2cd40 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
2cd50 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
2cd60 64 78 44 65 6c 65 74 65 20 50 31 20 50 32 20 50  dxDelete P1 P2 P
2cd70 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
2cd80 73 3a 20 6b 65 79 3d 72 5b 50 32 40 50 33 5d 0a  s: key=r[P2@P3].
2cd90 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e  **.** The conten
2cda0 74 20 6f 66 20 50 33 20 72 65 67 69 73 74 65 72  t of P3 register
2cdb0 73 20 73 74 61 72 74 69 6e 67 20 61 74 20 72 65  s starting at re
2cdc0 67 69 73 74 65 72 20 50 32 20 66 6f 72 6d 0a 2a  gister P2 form.*
2cdd0 2a 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  * an unpacked in
2cde0 64 65 78 20 6b 65 79 2e 20 54 68 69 73 20 6f 70  dex key. This op
2cdf0 63 6f 64 65 20 72 65 6d 6f 76 65 73 20 74 68 61  code removes tha
2ce00 74 20 65 6e 74 72 79 20 66 72 6f 6d 20 74 68 65  t entry from the
2ce10 20 0a 2a 2a 20 69 6e 64 65 78 20 6f 70 65 6e 65   .** index opene
2ce20 64 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e 0a  d by cursor P1..
2ce30 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 44 65  */.case OP_IdxDe
2ce40 6c 65 74 65 3a 20 7b 0a 20 20 56 64 62 65 43 75  lete: {.  VdbeCu
2ce50 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
2ce60 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69  rsor *pCrsr;.  i
2ce70 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b  nt res;.  Unpack
2ce80 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61  edRecord r;..  a
2ce90 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
2cea0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
2ceb0 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p2>0 && pOp->
2cec0 70 32 2b 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  p2+pOp->p3<=(p->
2ced0 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
2cee0 73 6f 72 29 2b 31 20 29 3b 0a 20 20 61 73 73 65  sor)+1 );.  asse
2cef0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
2cf00 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
2cf10 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
2cf20 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
2cf30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
2cf40 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
2cf50 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
2cf60 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
2cf70 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57  sqlite3VdbeIncrW
2cf80 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 70  riteCounter(p, p
2cf90 43 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43  C);.  pCrsr = pC
2cfa0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20  ->uc.pCursor;.  
2cfb0 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30  assert( pCrsr!=0
2cfc0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
2cfd0 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 72 2e  p->p5==0 );.  r.
2cfe0 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70  pKeyInfo = pC->p
2cff0 4b 65 79 49 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69  KeyInfo;.  r.nFi
2d000 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e  eld = (u16)pOp->
2d010 70 33 3b 0a 20 20 72 2e 64 65 66 61 75 6c 74 5f  p3;.  r.default_
2d020 72 63 20 3d 20 30 3b 0a 20 20 72 2e 61 4d 65 6d  rc = 0;.  r.aMem
2d030 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
2d040 5d 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  ];.  rc = sqlite
2d050 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
2d060 63 6b 65 64 28 70 43 72 73 72 2c 20 26 72 2c 20  cked(pCrsr, &r, 
2d070 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 69  0, 0, &res);.  i
2d080 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
2d090 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2d0a0 0a 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b  .  if( res==0 ){
2d0b0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
2d0c0 33 42 74 72 65 65 44 65 6c 65 74 65 28 70 43 72  3BtreeDelete(pCr
2d0d0 73 72 2c 20 42 54 52 45 45 5f 41 55 58 44 45 4c  sr, BTREE_AUXDEL
2d0e0 45 54 45 29 3b 0a 20 20 20 20 69 66 28 20 72 63  ETE);.    if( rc
2d0f0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
2d100 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a  e_to_error;.  }.
2d110 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
2d120 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
2d130 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  );.  pC->cacheSt
2d140 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
2d150 4c 45 3b 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65  LE;.  pC->seekRe
2d160 73 75 6c 74 20 3d 20 30 3b 0a 20 20 62 72 65 61  sult = 0;.  brea
2d170 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2d180 20 44 65 66 65 72 72 65 64 53 65 65 6b 20 50 31   DeferredSeek P1
2d190 20 2a 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79   * P3 P4 *.** Sy
2d1a0 6e 6f 70 73 69 73 3a 20 4d 6f 76 65 20 50 33 20  nopsis: Move P3 
2d1b0 74 6f 20 50 31 2e 72 6f 77 69 64 20 69 66 20 6e  to P1.rowid if n
2d1c0 65 65 64 65 64 0a 2a 2a 0a 2a 2a 20 50 31 20 69  eeded.**.** P1 i
2d1d0 73 20 61 6e 20 6f 70 65 6e 20 69 6e 64 65 78 20  s an open index 
2d1e0 63 75 72 73 6f 72 20 61 6e 64 20 50 33 20 69 73  cursor and P3 is
2d1f0 20 61 20 63 75 72 73 6f 72 20 6f 6e 20 74 68 65   a cursor on the
2d200 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a 2a   corresponding.*
2d210 2a 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 6f  * table.  This o
2d220 70 63 6f 64 65 20 64 6f 65 73 20 61 20 64 65 66  pcode does a def
2d230 65 72 72 65 64 20 73 65 65 6b 20 6f 66 20 74 68  erred seek of th
2d240 65 20 50 33 20 74 61 62 6c 65 20 63 75 72 73 6f  e P3 table curso
2d250 72 0a 2a 2a 20 74 6f 20 74 68 65 20 72 6f 77 20  r.** to the row 
2d260 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  that corresponds
2d270 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20   to the current 
2d280 72 6f 77 20 6f 66 20 50 31 2e 0a 2a 2a 0a 2a 2a  row of P1..**.**
2d290 20 54 68 69 73 20 69 73 20 61 20 64 65 66 65 72   This is a defer
2d2a0 72 65 64 20 73 65 65 6b 2e 20 20 4e 6f 74 68 69  red seek.  Nothi
2d2b0 6e 67 20 61 63 74 75 61 6c 6c 79 20 68 61 70 70  ng actually happ
2d2c0 65 6e 73 20 75 6e 74 69 6c 0a 2a 2a 20 74 68 65  ens until.** the
2d2d0 20 63 75 72 73 6f 72 20 69 73 20 75 73 65 64 20   cursor is used 
2d2e0 74 6f 20 72 65 61 64 20 61 20 72 65 63 6f 72 64  to read a record
2d2f0 2e 20 20 54 68 61 74 20 77 61 79 2c 20 69 66 20  .  That way, if 
2d300 6e 6f 20 72 65 61 64 73 0a 2a 2a 20 6f 63 63 75  no reads.** occu
2d310 72 2c 20 6e 6f 20 75 6e 6e 65 63 65 73 73 61 72  r, no unnecessar
2d320 79 20 49 2f 4f 20 68 61 70 70 65 6e 73 2e 0a 2a  y I/O happens..*
2d330 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61  *.** P4 may be a
2d340 6e 20 61 72 72 61 79 20 6f 66 20 69 6e 74 65 67  n array of integ
2d350 65 72 73 20 28 74 79 70 65 20 50 34 5f 49 4e 54  ers (type P4_INT
2d360 41 52 52 41 59 29 20 63 6f 6e 74 61 69 6e 69 6e  ARRAY) containin
2d370 67 0a 2a 2a 20 6f 6e 65 20 65 6e 74 72 79 20 66  g.** one entry f
2d380 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69  or each column i
2d390 6e 20 74 68 65 20 50 33 20 74 61 62 6c 65 2e 20  n the P3 table. 
2d3a0 20 49 66 20 61 72 72 61 79 20 65 6e 74 72 79 20   If array entry 
2d3b0 61 28 69 29 0a 2a 2a 20 69 73 20 6e 6f 6e 2d 7a  a(i).** is non-z
2d3c0 65 72 6f 2c 20 74 68 65 6e 20 72 65 61 64 69 6e  ero, then readin
2d3d0 67 20 63 6f 6c 75 6d 6e 20 61 28 69 29 2d 31 20  g column a(i)-1 
2d3e0 66 72 6f 6d 20 63 75 72 73 6f 72 20 50 33 20 69  from cursor P3 i
2d3f0 73 20 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74  s .** equivalent
2d400 20 74 6f 20 70 65 72 66 6f 72 6d 69 6e 67 20 74   to performing t
2d410 68 65 20 64 65 66 65 72 72 65 64 20 73 65 65 6b  he deferred seek
2d420 20 61 6e 64 20 74 68 65 6e 20 72 65 61 64 69 6e   and then readin
2d430 67 20 63 6f 6c 75 6d 6e 20 69 20 0a 2a 2a 20 66  g column i .** f
2d440 72 6f 6d 20 50 31 2e 20 20 54 68 69 73 20 69 6e  rom P1.  This in
2d450 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 73 74 6f  formation is sto
2d460 72 65 64 20 69 6e 20 50 33 20 61 6e 64 20 75 73  red in P3 and us
2d470 65 64 20 74 6f 20 72 65 64 69 72 65 63 74 0a 2a  ed to redirect.*
2d480 2a 20 72 65 61 64 73 20 61 67 61 69 6e 73 74 20  * reads against 
2d490 50 33 20 6f 76 65 72 20 74 6f 20 50 31 2c 20 74  P3 over to P1, t
2d4a0 68 75 73 20 70 6f 73 73 69 62 6c 79 20 61 76 6f  hus possibly avo
2d4b0 69 64 69 6e 67 20 74 68 65 20 6e 65 65 64 20 74  iding the need t
2d4c0 6f 0a 2a 2a 20 73 65 65 6b 20 61 6e 64 20 72 65  o.** seek and re
2d4d0 61 64 20 63 75 72 73 6f 72 20 50 33 2e 0a 2a 2f  ad cursor P3..*/
2d4e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 52  ./* Opcode: IdxR
2d4f0 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a  owid P1 P2 * * *
2d500 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
2d510 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20  P2]=rowid.**.** 
2d520 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73  Write into regis
2d530 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67 65  ter P2 an intege
2d540 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6c  r which is the l
2d550 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65  ast entry in the
2d560 20 72 65 63 6f 72 64 20 61 74 0a 2a 2a 20 74 68   record at.** th
2d570 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e 64  e end of the ind
2d580 65 78 20 6b 65 79 20 70 6f 69 6e 74 65 64 20 74  ex key pointed t
2d590 6f 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e 20  o by cursor P1. 
2d5a0 20 54 68 69 73 20 69 6e 74 65 67 65 72 20 73 68   This integer sh
2d5b0 6f 75 6c 64 20 62 65 0a 2a 2a 20 74 68 65 20 72  ould be.** the r
2d5c0 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c  owid of the tabl
2d5d0 65 20 65 6e 74 72 79 20 74 6f 20 77 68 69 63 68  e entry to which
2d5e0 20 74 68 69 73 20 69 6e 64 65 78 20 65 6e 74 72   this index entr
2d5f0 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20  y points..**.** 
2d600 53 65 65 20 61 6c 73 6f 3a 20 52 6f 77 69 64 2c  See also: Rowid,
2d610 20 4d 61 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a   MakeRecord..*/.
2d620 63 61 73 65 20 4f 50 5f 44 65 66 65 72 72 65 64  case OP_Deferred
2d630 53 65 65 6b 3a 0a 63 61 73 65 20 4f 50 5f 49 64  Seek:.case OP_Id
2d640 78 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20  xRowid: {       
2d650 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
2d660 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
2d670 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2d680 54 68 65 20 50 31 20 69 6e 64 65 78 20 63 75 72  The P1 index cur
2d690 73 6f 72 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  sor */.  VdbeCur
2d6a0 73 6f 72 20 2a 70 54 61 62 43 75 72 3b 20 20 20  sor *pTabCur;   
2d6b0 20 20 20 20 20 2f 2a 20 54 68 65 20 50 32 20 74       /* The P2 t
2d6c0 61 62 6c 65 20 63 75 72 73 6f 72 20 28 4f 50 5f  able cursor (OP_
2d6d0 44 65 66 65 72 72 65 64 53 65 65 6b 20 6f 6e 6c  DeferredSeek onl
2d6e0 79 29 20 2a 2f 0a 20 20 69 36 34 20 72 6f 77 69  y) */.  i64 rowi
2d6f0 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
2d700 20 20 20 20 2f 2a 20 52 6f 77 69 64 20 74 68 61      /* Rowid tha
2d710 74 20 50 31 20 63 75 72 72 65 6e 74 20 70 6f 69  t P1 current poi
2d720 6e 74 73 20 74 6f 20 2a 2f 0a 0a 20 20 61 73 73  nts to */..  ass
2d730 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
2d740 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
2d750 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
2d760 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
2d770 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
2d780 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
2d790 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
2d7a0 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
2d7b0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e   assert( pC->uc.
2d7c0 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
2d7d0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
2d7e0 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  ble==0 );.  asse
2d7f0 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
2d800 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61  Moveto==0 );.  a
2d810 73 73 65 72 74 28 20 21 70 43 2d 3e 6e 75 6c 6c  ssert( !pC->null
2d820 52 6f 77 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  Row || pOp->opco
2d830 64 65 3d 3d 4f 50 5f 49 64 78 52 6f 77 69 64 20  de==OP_IdxRowid 
2d840 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 49 64 78  );..  /* The Idx
2d850 52 6f 77 69 64 20 61 6e 64 20 53 65 65 6b 20 6f  Rowid and Seek o
2d860 70 63 6f 64 65 73 20 61 72 65 20 63 6f 6d 62 69  pcodes are combi
2d870 6e 65 64 20 62 65 63 61 75 73 65 20 6f 66 20 74  ned because of t
2d880 68 65 20 63 6f 6d 6d 6f 6e 61 6c 69 74 79 0a 20  he commonality. 
2d890 20 2a 2a 20 6f 66 20 73 71 6c 69 74 65 33 56 64   ** of sqlite3Vd
2d8a0 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28  beCursorRestore(
2d8b0 29 20 61 6e 64 20 73 71 6c 69 74 65 33 56 64 62  ) and sqlite3Vdb
2d8c0 65 49 64 78 52 6f 77 69 64 28 29 2e 20 2a 2f 0a  eIdxRowid(). */.
2d8d0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
2d8e0 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28  beCursorRestore(
2d8f0 70 43 29 3b 0a 0a 20 20 2f 2a 20 73 71 6c 69 74  pC);..  /* sqlit
2d900 65 33 56 62 65 43 75 72 73 6f 72 52 65 73 74 6f  e3VbeCursorResto
2d910 72 65 28 29 20 63 61 6e 20 6f 6e 6c 79 20 66 61  re() can only fa
2d920 69 6c 20 69 66 20 74 68 65 20 72 65 63 6f 72 64  il if the record
2d930 20 68 61 73 20 62 65 65 6e 20 64 65 6c 65 74 65   has been delete
2d940 64 0a 20 20 2a 2a 20 6f 75 74 20 66 72 6f 6d 20  d.  ** out from 
2d950 75 6e 64 65 72 20 74 68 65 20 63 75 72 73 6f 72  under the cursor
2d960 2e 20 20 54 68 61 74 20 77 69 6c 6c 20 6e 65 76  .  That will nev
2d970 65 72 20 68 61 70 70 65 6e 73 20 66 6f 72 20 61  er happens for a
2d980 6e 20 49 64 78 52 6f 77 69 64 0a 20 20 2a 2a 20  n IdxRowid.  ** 
2d990 6f 72 20 53 65 65 6b 20 6f 70 63 6f 64 65 20 2a  or Seek opcode *
2d9a0 2f 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72 63  /.  if( NEVER(rc
2d9b0 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67  !=SQLITE_OK) ) g
2d9c0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2d9d0 5f 65 72 72 6f 72 3b 0a 0a 20 20 69 66 28 20 21  _error;..  if( !
2d9e0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  pC->nullRow ){. 
2d9f0 20 20 20 72 6f 77 69 64 20 3d 20 30 3b 20 20 2f     rowid = 0;  /
2da00 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f  * Not needed.  O
2da10 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65  nly used to sile
2da20 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a  nce a warning. *
2da30 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  /.    rc = sqlit
2da40 65 33 56 64 62 65 49 64 78 52 6f 77 69 64 28 64  e3VdbeIdxRowid(d
2da50 62 2c 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  b, pC->uc.pCurso
2da60 72 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20  r, &rowid);.    
2da70 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
2da80 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  K ){.      goto 
2da90 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2daa0 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  or;.    }.    if
2dab0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
2dac0 50 5f 44 65 66 65 72 72 65 64 53 65 65 6b 20 29  P_DeferredSeek )
2dad0 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
2dae0 70 4f 70 2d 3e 70 33 3e 3d 30 20 26 26 20 70 4f  pOp->p3>=0 && pO
2daf0 70 2d 3e 70 33 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p3<p->nCursor
2db00 20 29 3b 0a 20 20 20 20 20 20 70 54 61 62 43 75   );.      pTabCu
2db10 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
2db20 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 61 73 73  ->p3];.      ass
2db30 65 72 74 28 20 70 54 61 62 43 75 72 21 3d 30 20  ert( pTabCur!=0 
2db40 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
2db50 20 70 54 61 62 43 75 72 2d 3e 65 43 75 72 54 79   pTabCur->eCurTy
2db60 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
2db70 45 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  E );.      asser
2db80 74 28 20 70 54 61 62 43 75 72 2d 3e 75 63 2e 70  t( pTabCur->uc.p
2db90 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20  Cursor!=0 );.   
2dba0 20 20 20 61 73 73 65 72 74 28 20 70 54 61 62 43     assert( pTabC
2dbb0 75 72 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20  ur->isTable );. 
2dbc0 20 20 20 20 20 70 54 61 62 43 75 72 2d 3e 6e 75       pTabCur->nu
2dbd0 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20  llRow = 0;.     
2dbe0 20 70 54 61 62 43 75 72 2d 3e 6d 6f 76 65 74 6f   pTabCur->moveto
2dbf0 54 61 72 67 65 74 20 3d 20 72 6f 77 69 64 3b 0a  Target = rowid;.
2dc00 20 20 20 20 20 20 70 54 61 62 43 75 72 2d 3e 64        pTabCur->d
2dc10 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
2dc20 31 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  1;.      assert(
2dc30 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
2dc40 5f 49 4e 54 41 52 52 41 59 20 7c 7c 20 70 4f 70  _INTARRAY || pOp
2dc50 2d 3e 70 34 2e 61 69 3d 3d 30 20 29 3b 0a 20 20  ->p4.ai==0 );.  
2dc60 20 20 20 20 70 54 61 62 43 75 72 2d 3e 61 41 6c      pTabCur->aAl
2dc70 74 4d 61 70 20 3d 20 70 4f 70 2d 3e 70 34 2e 61  tMap = pOp->p4.a
2dc80 69 3b 0a 20 20 20 20 20 20 70 54 61 62 43 75 72  i;.      pTabCur
2dc90 2d 3e 70 41 6c 74 43 75 72 73 6f 72 20 3d 20 70  ->pAltCursor = p
2dca0 43 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  C;.    }else{.  
2dcb0 20 20 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50      pOut = out2P
2dcc0 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
2dcd0 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 75  );.      pOut->u
2dce0 2e 69 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20  .i = rowid;.    
2dcf0 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  }.  }else{.    a
2dd00 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
2dd10 64 65 3d 3d 4f 50 5f 49 64 78 52 6f 77 69 64 20  de==OP_IdxRowid 
2dd20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
2dd30 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 26 61 4d  beMemSetNull(&aM
2dd40 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20  em[pOp->p2]);.  
2dd50 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
2dd60 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 45 20 50   Opcode: IdxGE P
2dd70 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
2dd80 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
2dd90 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68  [P3@P4].**.** Th
2dda0 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61  e P4 register va
2ddb0 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77  lues beginning w
2ddc0 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75  ith P3 form an u
2ddd0 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a  npacked index .*
2dde0 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73  * key that omits
2ddf0 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
2de00 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20  .  Compare this 
2de10 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73  key value agains
2de20 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20  t the index .** 
2de30 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65  that P1 is curre
2de40 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f  ntly pointing to
2de50 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50  , ignoring the P
2de60 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f  RIMARY KEY or RO
2de70 57 49 44 20 0a 2a 2a 20 66 69 65 6c 64 73 20 61  WID .** fields a
2de80 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a  t the end..**.**
2de90 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78   If the P1 index
2dea0 20 65 6e 74 72 79 20 69 73 20 67 72 65 61 74 65   entry is greate
2deb0 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
2dec0 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  to the key value
2ded0 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  .** then jump to
2dee0 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20   P2.  Otherwise 
2def0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
2df00 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
2df10 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
2df20 64 65 3a 20 49 64 78 47 54 20 50 31 20 50 32 20  de: IdxGT P1 P2 
2df30 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
2df40 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
2df50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  4].**.** The P4 
2df60 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20  register values 
2df70 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
2df80 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  3 form an unpack
2df90 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79  ed index .** key
2dfa0 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20   that omits the 
2dfb0 50 52 49 4d 41 52 59 20 4b 45 59 2e 20 20 43 6f  PRIMARY KEY.  Co
2dfc0 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76  mpare this key v
2dfd0 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68 65  alue against the
2dfe0 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20   index .** that 
2dff0 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  P1 is currently 
2e000 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e  pointing to, ign
2e010 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52  oring the PRIMAR
2e020 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 20 0a  Y KEY or ROWID .
2e030 2a 2a 20 66 69 65 6c 64 73 20 61 74 20 74 68 65  ** fields at the
2e040 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74   end..**.** If t
2e050 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72  he P1 index entr
2e060 79 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  y is greater tha
2e070 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 0a  n the key value.
2e080 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  ** then jump to 
2e090 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20 66  P2.  Otherwise f
2e0a0 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
2e0b0 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
2e0c0 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ion..*/./* Opcod
2e0d0 65 3a 20 49 64 78 4c 54 20 50 31 20 50 32 20 50  e: IdxLT P1 P2 P
2e0e0 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
2e0f0 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
2e100 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72  ].**.** The P4 r
2e110 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62  egister values b
2e120 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33  eginning with P3
2e130 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65   form an unpacke
2e140 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20  d index .** key 
2e150 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50  that omits the P
2e160 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f  RIMARY KEY or RO
2e170 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74 68  WID.  Compare th
2e180 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61  is key value aga
2e190 69 6e 73 74 0a 2a 2a 20 74 68 65 20 69 6e 64 65  inst.** the inde
2e1a0 78 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72  x that P1 is cur
2e1b0 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20  rently pointing 
2e1c0 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65  to, ignoring the
2e1d0 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 0a   PRIMARY KEY or.
2e1e0 2a 2a 20 52 4f 57 49 44 20 6f 6e 20 74 68 65 20  ** ROWID on the 
2e1f0 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20  P1 index..**.** 
2e200 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78 20  If the P1 index 
2e210 65 6e 74 72 79 20 69 73 20 6c 65 73 73 20 74 68  entry is less th
2e220 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  an the key value
2e230 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
2e240 2e 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 20 66  ..** Otherwise f
2e250 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
2e260 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
2e270 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ion..*/./* Opcod
2e280 65 3a 20 49 64 78 4c 45 20 50 31 20 50 32 20 50  e: IdxLE P1 P2 P
2e290 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
2e2a0 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
2e2b0 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72  ].**.** The P4 r
2e2c0 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62  egister values b
2e2d0 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33  eginning with P3
2e2e0 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65   form an unpacke
2e2f0 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20  d index .** key 
2e300 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50  that omits the P
2e310 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f  RIMARY KEY or RO
2e320 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74 68  WID.  Compare th
2e330 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61  is key value aga
2e340 69 6e 73 74 0a 2a 2a 20 74 68 65 20 69 6e 64 65  inst.** the inde
2e350 78 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72  x that P1 is cur
2e360 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20  rently pointing 
2e370 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65  to, ignoring the
2e380 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 0a   PRIMARY KEY or.
2e390 2a 2a 20 52 4f 57 49 44 20 6f 6e 20 74 68 65 20  ** ROWID on the 
2e3a0 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20  P1 index..**.** 
2e3b0 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78 20  If the P1 index 
2e3c0 65 6e 74 72 79 20 69 73 20 6c 65 73 73 20 74 68  entry is less th
2e3d0 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
2e3e0 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65  he key value the
2e3f0 6e 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e  n jump.** to P2.
2e400 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20   Otherwise fall 
2e410 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
2e420 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
2e430 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c  .*/.case OP_IdxL
2e440 45 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  E:          /* j
2e450 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ump */.case OP_I
2e460 64 78 47 54 3a 20 20 20 20 20 20 20 20 20 20 2f  dxGT:          /
2e470 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f  * jump */.case O
2e480 50 5f 49 64 78 4c 54 3a 20 20 20 20 20 20 20 20  P_IdxLT:        
2e490 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73    /* jump */.cas
2e4a0 65 20 4f 50 5f 49 64 78 47 45 3a 20 20 7b 20 20  e OP_IdxGE:  {  
2e4b0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
2e4c0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
2e4d0 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55  ;.  int res;.  U
2e4e0 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b  npackedRecord r;
2e4f0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
2e500 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
2e510 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
2e520 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
2e530 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2e540 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
2e550 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72 64  ssert( pC->isOrd
2e560 65 72 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74  ered );.  assert
2e570 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
2e580 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
2e590 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75  .  assert( pC->u
2e5a0 63 2e 70 43 75 72 73 6f 72 21 3d 30 29 3b 0a 20  c.pCursor!=0);. 
2e5b0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
2e5c0 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
2e5d0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2e5e0 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70  >p5==0 || pOp->p
2e5f0 35 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72 74  5==1 );.  assert
2e600 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
2e610 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 72 2e 70  4_INT32 );.  r.p
2e620 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b  KeyInfo = pC->pK
2e630 65 79 49 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69 65  eyInfo;.  r.nFie
2e640 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70  ld = (u16)pOp->p
2e650 34 2e 69 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  4.i;.  if( pOp->
2e660 6f 70 63 6f 64 65 3c 4f 50 5f 49 64 78 4c 54 20  opcode<OP_IdxLT 
2e670 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
2e680 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
2e690 64 78 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  dxLE || pOp->opc
2e6a0 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b  ode==OP_IdxGT );
2e6b0 0a 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72  .    r.default_r
2e6c0 63 20 3d 20 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b  c = -1;.  }else{
2e6d0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
2e6e0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
2e6f0 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  GE || pOp->opcod
2e700 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20  e==OP_IdxLT );. 
2e710 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20     r.default_rc 
2e720 3d 20 30 3b 0a 20 20 7d 0a 20 20 72 2e 61 4d 65  = 0;.  }.  r.aMe
2e730 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
2e740 33 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  3];.#ifdef SQLIT
2e750 45 5f 44 45 42 55 47 0a 20 20 7b 0a 20 20 20 20  E_DEBUG.  {.    
2e760 69 6e 74 20 69 3b 0a 20 20 20 20 66 6f 72 28 69  int i;.    for(i
2e770 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20  =0; i<r.nField; 
2e780 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73 73 65  i++){.      asse
2e790 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
2e7a0 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20 20  r.aMem[i]) );.  
2e7b0 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
2e7c0 43 45 28 70 4f 70 2d 3e 70 33 2b 69 2c 20 26 61  CE(pOp->p3+i, &a
2e7d0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 2b 69 5d 29 3b  Mem[pOp->p3+i]);
2e7e0 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69  .    }.  }.#endi
2e7f0 66 0a 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a  f.  res = 0;  /*
2e800 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e   Not needed.  On
2e810 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e  ly used to silen
2e820 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f  ce a warning. */
2e830 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
2e840 64 62 65 49 64 78 4b 65 79 43 6f 6d 70 61 72 65  dbeIdxKeyCompare
2e850 28 64 62 2c 20 70 43 2c 20 26 72 2c 20 26 72 65  (db, pC, &r, &re
2e860 73 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 4f  s);.  assert( (O
2e870 50 5f 49 64 78 4c 45 26 31 29 3d 3d 28 4f 50 5f  P_IdxLE&1)==(OP_
2e880 49 64 78 4c 54 26 31 29 20 26 26 20 28 4f 50 5f  IdxLT&1) && (OP_
2e890 49 64 78 47 45 26 31 29 3d 3d 28 4f 50 5f 49 64  IdxGE&1)==(OP_Id
2e8a0 78 47 54 26 31 29 20 29 3b 0a 20 20 69 66 28 20  xGT&1) );.  if( 
2e8b0 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 26 31 29 3d  (pOp->opcode&1)=
2e8c0 3d 28 4f 50 5f 49 64 78 4c 54 26 31 29 20 29 7b  =(OP_IdxLT&1) ){
2e8d0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
2e8e0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
2e8f0 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  LE || pOp->opcod
2e900 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20  e==OP_IdxLT );. 
2e910 20 20 20 72 65 73 20 3d 20 2d 72 65 73 3b 0a 20     res = -res;. 
2e920 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
2e930 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
2e940 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70  =OP_IdxGE || pOp
2e950 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
2e960 47 54 20 29 3b 0a 20 20 20 20 72 65 73 2b 2b 3b  GT );.    res++;
2e970 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63  .  }.  VdbeBranc
2e980 68 54 61 6b 65 6e 28 72 65 73 3e 30 2c 32 29 3b  hTaken(res>0,2);
2e990 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
2e9a0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2e9b0 72 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 3e 30  ror;.  if( res>0
2e9c0 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
2e9d0 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  p2;.  break;.}..
2e9e0 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73 74 72  /* Opcode: Destr
2e9f0 6f 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  oy P1 P2 P3 * *.
2ea00 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20  **.** Delete an 
2ea10 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 20  entire database 
2ea20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77  table or index w
2ea30 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69  hose root page i
2ea40 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  n the database.*
2ea50 2a 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20  * file is given 
2ea60 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  by P1..**.** The
2ea70 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 65 73   table being des
2ea80 74 72 6f 79 65 64 20 69 73 20 69 6e 20 74 68 65  troyed is in the
2ea90 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
2eaa0 69 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20 20 49  ile if P3==0.  I
2eab0 66 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20  f.** P3==1 then 
2eac0 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20  the table to be 
2ead0 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20  clear is in the 
2eae0 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
2eaf0 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20  se file.** that 
2eb00 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
2eb10 20 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75   tables create u
2eb20 73 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50  sing CREATE TEMP
2eb30 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a  ORARY TABLE..**.
2eb40 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d  ** If AUTOVACUUM
2eb50 20 69 73 20 65 6e 61 62 6c 65 64 20 74 68 65 6e   is enabled then
2eb60 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20   it is possible 
2eb70 74 68 61 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f  that another roo
2eb80 74 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20  t page.** might 
2eb90 62 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68  be moved into th
2eba0 65 20 6e 65 77 6c 79 20 64 65 6c 65 74 65 64 20  e newly deleted 
2ebb0 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f 72 64  root page in ord
2ebc0 65 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a  er to keep all.*
2ebd0 2a 20 72 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e  * root pages con
2ebe0 74 69 67 75 6f 75 73 20 61 74 20 74 68 65 20 62  tiguous at the b
2ebf0 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20  eginning of the 
2ec00 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 66  database.  The f
2ec10 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f  ormer.** value o
2ec20 66 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20  f the root page 
2ec30 74 68 61 74 20 6d 6f 76 65 64 20 2d 20 69 74 73  that moved - its
2ec40 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20 74 68   value before th
2ec50 65 20 6d 6f 76 65 20 6f 63 63 75 72 72 65 64 20  e move occurred 
2ec60 2d 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69  -.** is stored i
2ec70 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 49  n register P2. I
2ec80 66 20 6e 6f 20 70 61 67 65 20 6d 6f 76 65 6d 65  f no page moveme
2ec90 6e 74 20 77 61 73 20 72 65 71 75 69 72 65 64 20  nt was required 
2eca0 28 62 65 63 61 75 73 65 20 74 68 65 0a 2a 2a 20  (because the.** 
2ecb0 74 61 62 6c 65 20 62 65 69 6e 67 20 64 72 6f 70  table being drop
2ecc0 70 65 64 20 77 61 73 20 61 6c 72 65 61 64 79 20  ped was already 
2ecd0 74 68 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20  the last one in 
2ece0 74 68 65 20 64 61 74 61 62 61 73 65 29 20 74 68  the database) th
2ecf0 65 6e 20 61 20 0a 2a 2a 20 7a 65 72 6f 20 69 73  en a .** zero is
2ed00 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
2ed10 74 65 72 20 50 32 2e 20 20 49 66 20 41 55 54 4f  ter P2.  If AUTO
2ed20 56 41 43 55 55 4d 20 69 73 20 64 69 73 61 62 6c  VACUUM is disabl
2ed30 65 64 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 0a  ed then a zero .
2ed40 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ** is stored in 
2ed50 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
2ed60 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 74  ** This opcode t
2ed70 68 72 6f 77 73 20 61 6e 20 65 72 72 6f 72 20 69  hrows an error i
2ed80 66 20 74 68 65 72 65 20 61 72 65 20 61 6e 79 20  f there are any 
2ed90 61 63 74 69 76 65 20 72 65 61 64 65 72 20 56 4d  active reader VM
2eda0 73 20 77 68 65 6e 0a 2a 2a 20 69 74 20 69 73 20  s when.** it is 
2edb0 69 6e 76 6f 6b 65 64 2e 20 54 68 69 73 20 69 73  invoked. This is
2edc0 20 64 6f 6e 65 20 74 6f 20 61 76 6f 69 64 20 74   done to avoid t
2edd0 68 65 20 64 69 66 66 69 63 75 6c 74 79 20 61 73  he difficulty as
2ede0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 0a 2a  sociated with .*
2edf0 2a 20 75 70 64 61 74 69 6e 67 20 65 78 69 73 74  * updating exist
2ee00 69 6e 67 20 63 75 72 73 6f 72 73 20 77 68 65 6e  ing cursors when
2ee10 20 61 20 72 6f 6f 74 20 70 61 67 65 20 69 73 20   a root page is 
2ee20 6d 6f 76 65 64 20 69 6e 20 61 6e 20 41 55 54 4f  moved in an AUTO
2ee30 56 41 43 55 55 4d 20 0a 2a 2a 20 64 61 74 61 62  VACUUM .** datab
2ee40 61 73 65 2e 20 54 68 69 73 20 65 72 72 6f 72 20  ase. This error 
2ee50 69 73 20 74 68 72 6f 77 6e 20 65 76 65 6e 20 69  is thrown even i
2ee60 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  f the database i
2ee70 73 20 6e 6f 74 20 61 6e 20 41 55 54 4f 56 41 43  s not an AUTOVAC
2ee80 55 55 4d 20 0a 2a 2a 20 64 62 20 69 6e 20 6f 72  UUM .** db in or
2ee90 64 65 72 20 74 6f 20 61 76 6f 69 64 20 69 6e 74  der to avoid int
2eea0 72 6f 64 75 63 69 6e 67 20 61 6e 20 69 6e 63 6f  roducing an inco
2eeb0 6d 70 61 74 69 62 69 6c 69 74 79 20 62 65 74 77  mpatibility betw
2eec0 65 65 6e 20 61 75 74 6f 76 61 63 75 75 6d 20 0a  een autovacuum .
2eed0 2a 2a 20 61 6e 64 20 6e 6f 6e 2d 61 75 74 6f 76  ** and non-autov
2eee0 61 63 75 75 6d 20 6d 6f 64 65 73 2e 0a 2a 2a 0a  acuum modes..**.
2eef0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65  ** See also: Cle
2ef00 61 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65  ar.*/.case OP_De
2ef10 73 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20  stroy: {     /* 
2ef20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 69 4d  out2 */.  int iM
2ef30 6f 76 65 64 3b 0a 20 20 69 6e 74 20 69 44 62 3b  oved;.  int iDb;
2ef40 0a 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 49  ..  sqlite3VdbeI
2ef50 6e 63 72 57 72 69 74 65 43 6f 75 6e 74 65 72 28  ncrWriteCounter(
2ef60 70 2c 20 30 29 3b 0a 20 20 61 73 73 65 72 74 28  p, 0);.  assert(
2ef70 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
2ef80 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
2ef90 2d 3e 70 31 3e 31 20 29 3b 0a 20 20 70 4f 75 74  ->p1>1 );.  pOut
2efa0 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
2efb0 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75  e(p, pOp);.  pOu
2efc0 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e  t->flags = MEM_N
2efd0 75 6c 6c 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6e  ull;.  if( db->n
2efe0 56 64 62 65 52 65 61 64 20 3e 20 64 62 2d 3e 6e  VdbeRead > db->n
2eff0 56 44 65 73 74 72 6f 79 2b 31 20 29 7b 0a 20 20  VDestroy+1 ){.  
2f000 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f    rc = SQLITE_LO
2f010 43 4b 45 44 3b 0a 20 20 20 20 70 2d 3e 65 72 72  CKED;.    p->err
2f020 6f 72 41 63 74 69 6f 6e 20 3d 20 4f 45 5f 41 62  orAction = OE_Ab
2f030 6f 72 74 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62  ort;.    goto ab
2f040 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2f050 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  ;.  }else{.    i
2f060 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  Db = pOp->p3;.  
2f070 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
2f080 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
2f090 6b 2c 20 69 44 62 29 20 29 3b 0a 20 20 20 20 69  k, iDb) );.    i
2f0a0 4d 6f 76 65 64 20 3d 20 30 3b 20 20 2f 2a 20 4e  Moved = 0;  /* N
2f0b0 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79  ot needed.  Only
2f0c0 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61   to silence a wa
2f0d0 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63  rning. */.    rc
2f0e0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
2f0f0 72 6f 70 54 61 62 6c 65 28 64 62 2d 3e 61 44 62  ropTable(db->aDb
2f100 5b 69 44 62 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e  [iDb].pBt, pOp->
2f110 70 31 2c 20 26 69 4d 6f 76 65 64 29 3b 0a 20 20  p1, &iMoved);.  
2f120 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
2f130 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75  MEM_Int;.    pOu
2f140 74 2d 3e 75 2e 69 20 3d 20 69 4d 6f 76 65 64 3b  t->u.i = iMoved;
2f150 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f  .    if( rc ) go
2f160 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2f170 65 72 72 6f 72 3b 0a 23 69 66 6e 64 65 66 20 53  error;.#ifndef S
2f180 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56  QLITE_OMIT_AUTOV
2f190 41 43 55 55 4d 0a 20 20 20 20 69 66 28 20 69 4d  ACUUM.    if( iM
2f1a0 6f 76 65 64 21 3d 30 20 29 7b 0a 20 20 20 20 20  oved!=0 ){.     
2f1b0 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65   sqlite3RootPage
2f1c0 4d 6f 76 65 64 28 64 62 2c 20 69 44 62 2c 20 69  Moved(db, iDb, i
2f1d0 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e 70 31 29 3b  Moved, pOp->p1);
2f1e0 0a 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 4f 50  .      /* All OP
2f1f0 5f 44 65 73 74 72 6f 79 20 6f 70 65 72 61 74 69  _Destroy operati
2f200 6f 6e 73 20 6f 63 63 75 72 20 6f 6e 20 74 68 65  ons occur on the
2f210 20 73 61 6d 65 20 62 74 72 65 65 20 2a 2f 0a 20   same btree */. 
2f220 20 20 20 20 20 61 73 73 65 72 74 28 20 72 65 73       assert( res
2f230 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d  etSchemaOnFault=
2f240 3d 30 20 7c 7c 20 72 65 73 65 74 53 63 68 65 6d  =0 || resetSchem
2f250 61 4f 6e 46 61 75 6c 74 3d 3d 69 44 62 2b 31 20  aOnFault==iDb+1 
2f260 29 3b 0a 20 20 20 20 20 20 72 65 73 65 74 53 63  );.      resetSc
2f270 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 69 44  hemaOnFault = iD
2f280 62 2b 31 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  b+1;.    }.#endi
2f290 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  f.  }.  break;.}
2f2a0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 65  ../* Opcode: Cle
2f2b0 61 72 20 50 31 20 50 32 20 50 33 0a 2a 2a 0a 2a  ar P1 P2 P3.**.*
2f2c0 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e  * Delete all con
2f2d0 74 65 6e 74 73 20 6f 66 20 74 68 65 20 64 61 74  tents of the dat
2f2e0 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69  abase table or i
2f2f0 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 20  ndex whose root 
2f300 70 61 67 65 0a 2a 2a 20 69 6e 20 74 68 65 20 64  page.** in the d
2f310 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 20  atabase file is 
2f320 67 69 76 65 6e 20 62 79 20 50 31 2e 20 20 42 75  given by P1.  Bu
2f330 74 2c 20 75 6e 6c 69 6b 65 20 44 65 73 74 72 6f  t, unlike Destro
2f340 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a 20 72 65 6d  y, do not.** rem
2f350 6f 76 65 20 74 68 65 20 74 61 62 6c 65 20 6f 72  ove the table or
2f360 20 69 6e 64 65 78 20 66 72 6f 6d 20 74 68 65 20   index from the 
2f370 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a  database file..*
2f380 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62  *.** The table b
2f390 65 69 6e 67 20 63 6c 65 61 72 20 69 73 20 69 6e  eing clear is in
2f3a0 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
2f3b0 73 65 20 66 69 6c 65 20 69 66 20 50 32 3d 3d 30  se file if P2==0
2f3c0 2e 20 20 49 66 0a 2a 2a 20 50 32 3d 3d 31 20 74  .  If.** P2==1 t
2f3d0 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f  hen the table to
2f3e0 20 62 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20   be clear is in 
2f3f0 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64 61  the auxiliary da
2f400 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74  tabase file.** t
2f410 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 73  hat is used to s
2f420 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72 65 61  tore tables crea
2f430 74 65 20 75 73 69 6e 67 20 43 52 45 41 54 45 20  te using CREATE 
2f440 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e  TEMPORARY TABLE.
2f450 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 33  .**.** If the P3
2f460 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65   value is non-ze
2f470 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62  ro, then the tab
2f480 6c 65 20 72 65 66 65 72 72 65 64 20 74 6f 20 6d  le referred to m
2f490 75 73 74 20 62 65 20 61 6e 0a 2a 2a 20 69 6e 74  ust be an.** int
2f4a0 6b 65 79 20 74 61 62 6c 65 20 28 61 6e 20 53 51  key table (an SQ
2f4b0 4c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 6e 20  L table, not an 
2f4c0 69 6e 64 65 78 29 2e 20 49 6e 20 74 68 69 73 20  index). In this 
2f4d0 63 61 73 65 20 74 68 65 20 72 6f 77 20 63 68 61  case the row cha
2f4e0 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e 74 20 69 73  nge .** count is
2f4f0 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20   incremented by 
2f500 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
2f510 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ws in the table 
2f520 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 20 0a  being cleared. .
2f530 2a 2a 20 49 66 20 50 33 20 69 73 20 67 72 65 61  ** If P3 is grea
2f540 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74  ter than zero, t
2f550 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 73 74  hen the value st
2f560 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
2f570 20 50 33 20 69 73 0a 2a 2a 20 61 6c 73 6f 20 69   P3 is.** also i
2f580 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68  ncremented by th
2f590 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
2f5a0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65   in the table be
2f5b0 69 6e 67 20 63 6c 65 61 72 65 64 2e 0a 2a 2a 0a  ing cleared..**.
2f5c0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 44 65 73  ** See also: Des
2f5d0 74 72 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  troy.*/.case OP_
2f5e0 43 6c 65 61 72 3a 20 7b 0a 20 20 69 6e 74 20 6e  Clear: {.  int n
2f5f0 43 68 61 6e 67 65 3b 0a 20 0a 20 20 73 71 6c 69  Change;. .  sqli
2f600 74 65 33 56 64 62 65 49 6e 63 72 57 72 69 74 65  te3VdbeIncrWrite
2f610 43 6f 75 6e 74 65 72 28 70 2c 20 30 29 3b 0a 20  Counter(p, 0);. 
2f620 20 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20   nChange = 0;.  
2f630 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
2f640 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  nly==0 );.  asse
2f650 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
2f660 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70  ->btreeMask, pOp
2f670 2d 3e 70 32 29 20 29 3b 0a 20 20 72 63 20 3d 20  ->p2) );.  rc = 
2f680 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61  sqlite3BtreeClea
2f690 72 54 61 62 6c 65 28 0a 20 20 20 20 20 20 64 62  rTable(.      db
2f6a0 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e 70  ->aDb[pOp->p2].p
2f6b0 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 28 70 4f  Bt, pOp->p1, (pO
2f6c0 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61 6e 67 65  p->p3 ? &nChange
2f6d0 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20 69 66 28   : 0).  );.  if(
2f6e0 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20   pOp->p3 ){.    
2f6f0 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d 20 6e 43  p->nChange += nC
2f700 68 61 6e 67 65 3b 0a 20 20 20 20 69 66 28 20 70  hange;.    if( p
2f710 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20 20 20  Op->p3>0 ){.    
2f720 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
2f730 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  alid(&aMem[pOp->
2f740 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 6d 65  p3]) );.      me
2f750 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
2f760 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  , &aMem[pOp->p3]
2f770 29 3b 0a 20 20 20 20 20 20 61 4d 65 6d 5b 70 4f  );.      aMem[pO
2f780 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43  p->p3].u.i += nC
2f790 68 61 6e 67 65 3b 0a 20 20 20 20 7d 0a 20 20 7d  hange;.    }.  }
2f7a0 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
2f7b0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2f7c0 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ror;.  break;.}.
2f7d0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 65  ./* Opcode: Rese
2f7e0 74 53 6f 72 74 65 72 20 50 31 20 2a 20 2a 20 2a  tSorter P1 * * *
2f7f0 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20   *.**.** Delete 
2f800 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 66 72 6f  all contents fro
2f810 6d 20 74 68 65 20 65 70 68 65 6d 65 72 61 6c 20  m the ephemeral 
2f820 74 61 62 6c 65 20 6f 72 20 73 6f 72 74 65 72 0a  table or sorter.
2f830 2a 2a 20 74 68 61 74 20 69 73 20 6f 70 65 6e 20  ** that is open 
2f840 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a  on cursor P1..**
2f850 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
2f860 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 63  only works for c
2f870 75 72 73 6f 72 73 20 75 73 65 64 20 66 6f 72 20  ursors used for 
2f880 73 6f 72 74 69 6e 67 20 61 6e 64 0a 2a 2a 20 6f  sorting and.** o
2f890 70 65 6e 65 64 20 77 69 74 68 20 4f 50 5f 4f 70  pened with OP_Op
2f8a0 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 72 20 4f  enEphemeral or O
2f8b0 50 5f 53 6f 72 74 65 72 4f 70 65 6e 2e 0a 2a 2f  P_SorterOpen..*/
2f8c0 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74 53 6f  .case OP_ResetSo
2f8d0 72 74 65 72 3a 20 7b 0a 20 20 56 64 62 65 43 75  rter: {.  VdbeCu
2f8e0 72 73 6f 72 20 2a 70 43 3b 0a 20 0a 20 20 61 73  rsor *pC;. .  as
2f8f0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
2f900 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
2f910 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
2f920 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
2f930 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
2f940 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 73 53  !=0 );.  if( isS
2f950 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20 20  orter(pC) ){.   
2f960 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
2f970 65 72 52 65 73 65 74 28 64 62 2c 20 70 43 2d 3e  erReset(db, pC->
2f980 75 63 2e 70 53 6f 72 74 65 72 29 3b 0a 20 20 7d  uc.pSorter);.  }
2f990 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
2f9a0 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
2f9b0 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
2f9c0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
2f9d0 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 29 3b 0a  >isEphemeral );.
2f9e0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2f9f0 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65 4f  BtreeClearTableO
2fa00 66 43 75 72 73 6f 72 28 70 43 2d 3e 75 63 2e 70  fCursor(pC->uc.p
2fa10 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 69 66 28  Cursor);.    if(
2fa20 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
2fa30 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
2fa40 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
2fa50 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65  * Opcode: Create
2fa60 42 74 72 65 65 20 50 31 20 50 32 20 50 33 20 2a  Btree P1 P2 P3 *
2fa70 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2fa80 72 5b 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d 50  r[P2]=root iDb=P
2fa90 31 20 66 6c 61 67 73 3d 50 33 0a 2a 2a 0a 2a 2a  1 flags=P3.**.**
2faa0 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20   Allocate a new 
2fab0 62 2d 74 72 65 65 20 69 6e 20 74 68 65 20 6d 61  b-tree in the ma
2fac0 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
2fad0 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20   if P1==0 or in 
2fae0 74 68 65 0a 2a 2a 20 54 45 4d 50 20 64 61 74 61  the.** TEMP data
2faf0 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d  base file if P1=
2fb00 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61  =1 or in an atta
2fb10 63 68 65 64 20 64 61 74 61 62 61 73 65 20 69 66  ched database if
2fb20 0a 2a 2a 20 50 31 3e 31 2e 20 20 54 68 65 20 50  .** P1>1.  The P
2fb30 33 20 61 72 67 75 6d 65 6e 74 20 6d 75 73 74 20  3 argument must 
2fb40 62 65 20 31 20 28 42 54 52 45 45 5f 49 4e 54 4b  be 1 (BTREE_INTK
2fb50 45 59 29 20 66 6f 72 20 61 20 72 6f 77 69 64 20  EY) for a rowid 
2fb60 74 61 62 6c 65 0a 2a 2a 20 69 74 20 6d 75 73 74  table.** it must
2fb70 20 62 65 20 32 20 28 42 54 52 45 45 5f 42 4c 4f   be 2 (BTREE_BLO
2fb80 42 4b 45 59 29 20 66 6f 72 20 61 6e 20 69 6e 64  BKEY) for an ind
2fb90 65 78 20 6f 72 20 57 49 54 48 4f 55 54 20 52 4f  ex or WITHOUT RO
2fba0 57 49 44 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68  WID table..** Th
2fbb0 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62  e root page numb
2fbc0 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20 62 2d  er of the new b-
2fbd0 74 72 65 65 20 69 73 20 73 74 6f 72 65 64 20 69  tree is stored i
2fbe0 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
2fbf0 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65  /.case OP_Create
2fc00 42 74 72 65 65 3a 20 7b 20 20 20 20 20 20 20 20  Btree: {        
2fc10 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69    /* out2 */.  i
2fc20 6e 74 20 70 67 6e 6f 3b 0a 20 20 44 62 20 2a 70  nt pgno;.  Db *p
2fc30 44 62 3b 0a 0a 20 20 73 71 6c 69 74 65 33 56 64  Db;..  sqlite3Vd
2fc40 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e 74  beIncrWriteCount
2fc50 65 72 28 70 2c 20 30 29 3b 0a 20 20 70 4f 75 74  er(p, 0);.  pOut
2fc60 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
2fc70 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 67 6e  e(p, pOp);.  pgn
2fc80 6f 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  o = 0;.  assert(
2fc90 20 70 4f 70 2d 3e 70 33 3d 3d 42 54 52 45 45 5f   pOp->p3==BTREE_
2fca0 49 4e 54 4b 45 59 20 7c 7c 20 70 4f 70 2d 3e 70  INTKEY || pOp->p
2fcb0 33 3d 3d 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59  3==BTREE_BLOBKEY
2fcc0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
2fcd0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
2fce0 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
2fcf0 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
2fd00 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
2fd10 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20  , pOp->p1) );.  
2fd20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
2fd30 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20  nly==0 );.  pDb 
2fd40 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  = &db->aDb[pOp->
2fd50 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2fd60 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20  Db->pBt!=0 );.  
2fd70 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
2fd80 65 43 72 65 61 74 65 54 61 62 6c 65 28 70 44 62  eCreateTable(pDb
2fd90 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 70 4f  ->pBt, &pgno, pO
2fda0 70 2d 3e 70 33 29 3b 0a 20 20 69 66 28 20 72 63  p->p3);.  if( rc
2fdb0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
2fdc0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 4f  e_to_error;.  pO
2fdd0 75 74 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f 3b 0a  ut->u.i = pgno;.
2fde0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2fdf0 70 63 6f 64 65 3a 20 53 71 6c 45 78 65 63 20 2a  pcode: SqlExec *
2fe00 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
2fe10 52 75 6e 20 74 68 65 20 53 51 4c 20 73 74 61 74  Run the SQL stat
2fe20 65 6d 65 6e 74 20 6f 72 20 73 74 61 74 65 6d 65  ement or stateme
2fe30 6e 74 73 20 73 70 65 63 69 66 69 65 64 20 69 6e  nts specified in
2fe40 20 74 68 65 20 50 34 20 73 74 72 69 6e 67 2e 0a   the P4 string..
2fe50 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 71 6c 45 78  */.case OP_SqlEx
2fe60 65 63 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 56  ec: {.  sqlite3V
2fe70 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e  dbeIncrWriteCoun
2fe80 74 65 72 28 70 2c 20 30 29 3b 0a 20 20 64 62 2d  ter(p, 0);.  db-
2fe90 3e 6e 53 71 6c 45 78 65 63 2b 2b 3b 0a 20 20 72  >nSqlExec++;.  r
2fea0 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63  c = sqlite3_exec
2feb0 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20  (db, pOp->p4.z, 
2fec0 30 2c 20 30 2c 20 30 29 3b 0a 20 20 64 62 2d 3e  0, 0, 0);.  db->
2fed0 6e 53 71 6c 45 78 65 63 2d 2d 3b 0a 20 20 69 66  nSqlExec--;.  if
2fee0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
2fef0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2ff00 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2ff10 70 63 6f 64 65 3a 20 50 61 72 73 65 53 63 68 65  pcode: ParseSche
2ff20 6d 61 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  ma P1 * * P4 *.*
2ff30 2a 0a 2a 2a 20 52 65 61 64 20 61 6e 64 20 70 61  *.** Read and pa
2ff40 72 73 65 20 61 6c 6c 20 65 6e 74 72 69 65 73 20  rse all entries 
2ff50 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54 45 5f  from the SQLITE_
2ff60 4d 41 53 54 45 52 20 74 61 62 6c 65 20 6f 66 20  MASTER table of 
2ff70 64 61 74 61 62 61 73 65 20 50 31 0a 2a 2a 20 74  database P1.** t
2ff80 68 61 74 20 6d 61 74 63 68 20 74 68 65 20 57 48  hat match the WH
2ff90 45 52 45 20 63 6c 61 75 73 65 20 50 34 2e 20 20  ERE clause P4.  
2ffa0 49 66 20 50 34 20 69 73 20 61 20 4e 55 4c 4c 20  If P4 is a NULL 
2ffb0 70 6f 69 6e 74 65 72 2c 20 74 68 65 6e 20 74 68  pointer, then th
2ffc0 65 0a 2a 2a 20 65 6e 74 69 72 65 20 73 63 68 65  e.** entire sche
2ffd0 6d 61 20 66 6f 72 20 50 31 20 69 73 20 72 65 70  ma for P1 is rep
2ffe0 61 72 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  arsed..**.** Thi
2fff0 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73  s opcode invokes
30000 20 74 68 65 20 70 61 72 73 65 72 20 74 6f 20 63   the parser to c
30010 72 65 61 74 65 20 61 20 6e 65 77 20 76 69 72 74  reate a new virt
30020 75 61 6c 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20  ual machine,.** 
30030 74 68 65 6e 20 72 75 6e 73 20 74 68 65 20 6e 65  then runs the ne
30040 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  w virtual machin
30050 65 2e 20 20 49 74 20 69 73 20 74 68 75 73 20 61  e.  It is thus a
30060 20 72 65 2d 65 6e 74 72 61 6e 74 20 6f 70 63 6f   re-entrant opco
30070 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  de..*/.case OP_P
30080 61 72 73 65 53 63 68 65 6d 61 3a 20 7b 0a 20 20  arseSchema: {.  
30090 69 6e 74 20 69 44 62 3b 0a 20 20 63 6f 6e 73 74  int iDb;.  const
300a0 20 63 68 61 72 20 2a 7a 4d 61 73 74 65 72 3b 0a   char *zMaster;.
300b0 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20    char *zSql;.  
300c0 49 6e 69 74 44 61 74 61 20 69 6e 69 74 44 61 74  InitData initDat
300d0 61 3b 0a 0a 20 20 2f 2a 20 41 6e 79 20 70 72 65  a;..  /* Any pre
300e0 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
300f0 74 68 61 74 20 69 6e 76 6f 6b 65 73 20 74 68 69  that invokes thi
30100 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 68 6f  s opcode will ho
30110 6c 64 20 6d 75 74 65 78 65 73 0a 20 20 2a 2a 20  ld mutexes.  ** 
30120 6f 6e 20 65 76 65 72 79 20 62 74 72 65 65 2e 20  on every btree. 
30130 20 54 68 69 73 20 69 73 20 61 20 70 72 65 72 65   This is a prere
30140 71 75 69 73 69 74 65 20 66 6f 72 20 69 6e 76 6f  quisite for invo
30150 6b 69 6e 67 20 0a 20 20 2a 2a 20 73 71 6c 69 74  king .  ** sqlit
30160 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 29  e3InitCallback()
30170 2e 0a 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  ..  */.#ifdef SQ
30180 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 66 6f 72  LITE_DEBUG.  for
30190 28 69 44 62 3d 30 3b 20 69 44 62 3c 64 62 2d 3e  (iDb=0; iDb<db->
301a0 6e 44 62 3b 20 69 44 62 2b 2b 29 7b 0a 20 20 20  nDb; iDb++){.   
301b0 20 61 73 73 65 72 74 28 20 69 44 62 3d 3d 31 20   assert( iDb==1 
301c0 7c 7c 20 73 71 6c 69 74 65 33 42 74 72 65 65 48  || sqlite3BtreeH
301d0 6f 6c 64 73 4d 75 74 65 78 28 64 62 2d 3e 61 44  oldsMutex(db->aD
301e0 62 5b 69 44 62 5d 2e 70 42 74 29 20 29 3b 0a 20  b[iDb].pBt) );. 
301f0 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 69 44 62   }.#endif..  iDb
30200 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73   = pOp->p1;.  as
30210 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20  sert( iDb>=0 && 
30220 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  iDb<db->nDb );. 
30230 20 61 73 73 65 72 74 28 20 44 62 48 61 73 50 72   assert( DbHasPr
30240 6f 70 65 72 74 79 28 64 62 2c 20 69 44 62 2c 20  operty(db, iDb, 
30250 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 29  DB_SchemaLoaded)
30260 20 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   );..#ifndef SQL
30270 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54 41  ITE_OMIT_ALTERTA
30280 42 4c 45 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  BLE.  if( pOp->p
30290 34 2e 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71  4.z==0 ){.    sq
302a0 6c 69 74 65 33 53 63 68 65 6d 61 43 6c 65 61 72  lite3SchemaClear
302b0 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 53  (db->aDb[iDb].pS
302c0 63 68 65 6d 61 29 3b 0a 20 20 20 20 64 62 2d 3e  chema);.    db->
302d0 6d 44 62 46 6c 61 67 73 20 26 3d 20 7e 44 42 46  mDbFlags &= ~DBF
302e0 4c 41 47 5f 53 63 68 65 6d 61 4b 6e 6f 77 6e 4f  LAG_SchemaKnownO
302f0 6b 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  k;.    rc = sqli
30300 74 65 33 49 6e 69 74 4f 6e 65 28 64 62 2c 20 69  te3InitOne(db, i
30310 44 62 2c 20 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  Db, &p->zErrMsg,
30320 20 49 4e 49 54 46 4c 41 47 5f 41 6c 74 65 72 54   INITFLAG_AlterT
30330 61 62 6c 65 29 3b 0a 20 20 20 20 64 62 2d 3e 6d  able);.    db->m
30340 44 62 46 6c 61 67 73 20 7c 3d 20 44 42 46 4c 41  DbFlags |= DBFLA
30350 47 5f 53 63 68 65 6d 61 43 68 61 6e 67 65 3b 0a  G_SchemaChange;.
30360 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d      p->expired =
30370 20 30 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64   0;.  }else.#end
30380 69 66 0a 20 20 7b 0a 20 20 20 20 7a 4d 61 73 74  if.  {.    zMast
30390 65 72 20 3d 20 4d 41 53 54 45 52 5f 4e 41 4d 45  er = MASTER_NAME
303a0 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 64  ;.    initData.d
303b0 62 20 3d 20 64 62 3b 0a 20 20 20 20 69 6e 69 74  b = db;.    init
303c0 44 61 74 61 2e 69 44 62 20 3d 20 69 44 62 3b 0a  Data.iDb = iDb;.
303d0 20 20 20 20 69 6e 69 74 44 61 74 61 2e 70 7a 45      initData.pzE
303e0 72 72 4d 73 67 20 3d 20 26 70 2d 3e 7a 45 72 72  rrMsg = &p->zErr
303f0 4d 73 67 3b 0a 20 20 20 20 69 6e 69 74 44 61 74  Msg;.    initDat
30400 61 2e 6d 49 6e 69 74 46 6c 61 67 73 20 3d 20 30  a.mInitFlags = 0
30410 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c  ;.    zSql = sql
30420 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a  ite3MPrintf(db,.
30430 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e         "SELECT n
30440 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73  ame, rootpage, s
30450 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25 73 20  ql FROM '%q'.%s 
30460 57 48 45 52 45 20 25 73 20 4f 52 44 45 52 20 42  WHERE %s ORDER B
30470 59 20 72 6f 77 69 64 22 2c 0a 20 20 20 20 20 20  Y rowid",.      
30480 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 44   db->aDb[iDb].zD
30490 62 53 4e 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c  bSName, zMaster,
304a0 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20   pOp->p4.z);.   
304b0 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a   if( zSql==0 ){.
304c0 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
304d0 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 3b 0a 20 20  E_NOMEM_BKPT;.  
304e0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61    }else{.      a
304f0 73 73 65 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e  ssert( db->init.
30500 62 75 73 79 3d 3d 30 20 29 3b 0a 20 20 20 20 20  busy==0 );.     
30510 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d   db->init.busy =
30520 20 31 3b 0a 20 20 20 20 20 20 69 6e 69 74 44 61   1;.      initDa
30530 74 61 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f  ta.rc = SQLITE_O
30540 4b 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  K;.      assert(
30550 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c   !db->mallocFail
30560 65 64 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  ed );.      rc =
30570 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62   sqlite3_exec(db
30580 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33 49  , zSql, sqlite3I
30590 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e  nitCallback, &in
305a0 69 74 44 61 74 61 2c 20 30 29 3b 0a 20 20 20 20  itData, 0);.    
305b0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
305c0 5f 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69 74 44  _OK ) rc = initD
305d0 61 74 61 2e 72 63 3b 0a 20 20 20 20 20 20 73 71  ata.rc;.      sq
305e0 6c 69 74 65 33 44 62 46 72 65 65 4e 4e 28 64 62  lite3DbFreeNN(db
305f0 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 64  , zSql);.      d
30600 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 30  b->init.busy = 0
30610 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
30620 28 20 72 63 20 29 7b 0a 20 20 20 20 73 71 6c 69  ( rc ){.    sqli
30630 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d  te3ResetAllSchem
30640 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64  asOfConnection(d
30650 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  b);.    if( rc==
30660 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a  SQLITE_NOMEM ){.
30670 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65        goto no_me
30680 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74  m;.    }.    got
30690 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
306a0 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 62 72 65 61  rror;.  }.  brea
306b0 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20 21 64 65 66  k;  .}..#if !def
306c0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
306d0 5f 41 4e 41 4c 59 5a 45 29 0a 2f 2a 20 4f 70 63  _ANALYZE)./* Opc
306e0 6f 64 65 3a 20 4c 6f 61 64 41 6e 61 6c 79 73 69  ode: LoadAnalysi
306f0 73 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  s P1 * * * *.**.
30700 2a 2a 20 52 65 61 64 20 74 68 65 20 73 71 6c 69  ** Read the sqli
30710 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65 20 66  te_stat1 table f
30720 6f 72 20 64 61 74 61 62 61 73 65 20 50 31 20 61  or database P1 a
30730 6e 64 20 6c 6f 61 64 20 74 68 65 20 63 6f 6e 74  nd load the cont
30740 65 6e 74 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74  ent.** of that t
30750 61 62 6c 65 20 69 6e 74 6f 20 74 68 65 20 69 6e  able into the in
30760 74 65 72 6e 61 6c 20 69 6e 64 65 78 20 68 61 73  ternal index has
30770 68 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20 77  h table.  This w
30780 69 6c 6c 20 63 61 75 73 65 0a 2a 2a 20 74 68 65  ill cause.** the
30790 20 61 6e 61 6c 79 73 69 73 20 74 6f 20 62 65 20   analysis to be 
307a0 75 73 65 64 20 77 68 65 6e 20 70 72 65 70 61 72  used when prepar
307b0 69 6e 67 20 61 6c 6c 20 73 75 62 73 65 71 75 65  ing all subseque
307c0 6e 74 20 71 75 65 72 69 65 73 2e 0a 2a 2f 0a 63  nt queries..*/.c
307d0 61 73 65 20 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79  ase OP_LoadAnaly
307e0 73 69 73 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  sis: {.  assert(
307f0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
30800 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
30810 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
30820 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 64 62 2c  AnalysisLoad(db,
30830 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 69 66 28   pOp->p1);.  if(
30840 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
30850 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
30860 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64   break;  .}.#end
30870 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53  if /* !defined(S
30880 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59  QLITE_OMIT_ANALY
30890 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  ZE) */../* Opcod
308a0 65 3a 20 44 72 6f 70 54 61 62 6c 65 20 50 31 20  e: DropTable P1 
308b0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  * * P4 *.**.** R
308c0 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e  emove the intern
308d0 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64  al (in-memory) d
308e0 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74  ata structures t
308f0 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20  hat describe.** 
30900 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64 20  the table named 
30910 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  P4 in database P
30920 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c  1.  This is call
30930 65 64 20 61 66 74 65 72 20 61 20 74 61 62 6c 65  ed after a table
30940 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66  .** is dropped f
30950 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20  rom disk (using 
30960 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f  the Destroy opco
30970 64 65 29 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  de) in order to 
30980 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74  keep .** the int
30990 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61  ernal representa
309a0 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73  tion of the.** s
309b0 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74  chema consistent
309c0 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e   with what is on
309d0 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f   disk..*/.case O
309e0 50 5f 44 72 6f 70 54 61 62 6c 65 3a 20 7b 0a 20  P_DropTable: {. 
309f0 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72   sqlite3VdbeIncr
30a00 57 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20  WriteCounter(p, 
30a10 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c  0);.  sqlite3Unl
30a20 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c  inkAndDeleteTabl
30a30 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  e(db, pOp->p1, p
30a40 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65  Op->p4.z);.  bre
30a50 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
30a60 3a 20 44 72 6f 70 49 6e 64 65 78 20 50 31 20 2a  : DropIndex P1 *
30a70 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   * P4 *.**.** Re
30a80 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61  move the interna
30a90 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61  l (in-memory) da
30aa0 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68  ta structures th
30ab0 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74  at describe.** t
30ac0 68 65 20 69 6e 64 65 78 20 6e 61 6d 65 64 20 50  he index named P
30ad0 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  4 in database P1
30ae0 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65  .  This is calle
30af0 64 20 61 66 74 65 72 20 61 6e 20 69 6e 64 65 78  d after an index
30b00 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66  .** is dropped f
30b10 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20  rom disk (using 
30b20 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f  the Destroy opco
30b30 64 65 29 0a 2a 2a 20 69 6e 20 6f 72 64 65 72 20  de).** in order 
30b40 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65  to keep the inte
30b50 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74  rnal representat
30b60 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63  ion of the.** sc
30b70 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20  hema consistent 
30b80 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20  with what is on 
30b90 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  disk..*/.case OP
30ba0 5f 44 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20  _DropIndex: {.  
30bb0 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57  sqlite3VdbeIncrW
30bc0 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 30  riteCounter(p, 0
30bd0 29 3b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69  );.  sqlite3Unli
30be0 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78  nkAndDeleteIndex
30bf0 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
30c00 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61  p->p4.z);.  brea
30c10 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
30c20 20 44 72 6f 70 54 72 69 67 67 65 72 20 50 31 20   DropTrigger P1 
30c30 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  * * P4 *.**.** R
30c40 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e  emove the intern
30c50 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64  al (in-memory) d
30c60 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74  ata structures t
30c70 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20  hat describe.** 
30c80 74 68 65 20 74 72 69 67 67 65 72 20 6e 61 6d 65  the trigger name
30c90 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65  d P4 in database
30ca0 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61   P1.  This is ca
30cb0 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74 72 69  lled after a tri
30cc0 67 67 65 72 0a 2a 2a 20 69 73 20 64 72 6f 70 70  gger.** is dropp
30cd0 65 64 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73  ed from disk (us
30ce0 69 6e 67 20 74 68 65 20 44 65 73 74 72 6f 79 20  ing the Destroy 
30cf0 6f 70 63 6f 64 65 29 20 69 6e 20 6f 72 64 65 72  opcode) in order
30d00 20 74 6f 20 6b 65 65 70 20 0a 2a 2a 20 74 68 65   to keep .** the
30d10 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73   internal repres
30d20 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a  entation of the.
30d30 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73  ** schema consis
30d40 74 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69  tent with what i
30d50 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61  s on disk..*/.ca
30d60 73 65 20 4f 50 5f 44 72 6f 70 54 72 69 67 67 65  se OP_DropTrigge
30d70 72 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 56 64  r: {.  sqlite3Vd
30d80 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e 74  beIncrWriteCount
30d90 65 72 28 70 2c 20 30 29 3b 0a 20 20 73 71 6c 69  er(p, 0);.  sqli
30da0 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
30db0 74 65 54 72 69 67 67 65 72 28 64 62 2c 20 70 4f  teTrigger(db, pO
30dc0 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
30dd0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a  );.  break;.}...
30de0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
30df0 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  MIT_INTEGRITY_CH
30e00 45 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  ECK./* Opcode: I
30e10 6e 74 65 67 72 69 74 79 43 6b 20 50 31 20 50 32  ntegrityCk P1 P2
30e20 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
30e30 44 6f 20 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f  Do an analysis o
30e40 66 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20  f the currently 
30e50 6f 70 65 6e 20 64 61 74 61 62 61 73 65 2e 20 20  open database.  
30e60 53 74 6f 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69  Store in.** regi
30e70 73 74 65 72 20 50 31 20 74 68 65 20 74 65 78 74  ster P1 the text
30e80 20 6f 66 20 61 6e 20 65 72 72 6f 72 20 6d 65 73   of an error mes
30e90 73 61 67 65 20 64 65 73 63 72 69 62 69 6e 67 20  sage describing 
30ea0 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a  any problems..**
30eb0 20 49 66 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20   If no problems 
30ec0 61 72 65 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65  are found, store
30ed0 20 61 20 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73   a NULL in regis
30ee0 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68  ter P1..**.** Th
30ef0 65 20 72 65 67 69 73 74 65 72 20 50 33 20 63 6f  e register P3 co
30f00 6e 74 61 69 6e 73 20 6f 6e 65 20 6c 65 73 73 20  ntains one less 
30f10 74 68 61 6e 20 74 68 65 20 6d 61 78 69 6d 75 6d  than the maximum
30f20 20 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 77   number of allow
30f30 65 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41 74  ed errors..** At
30f40 20 6d 6f 73 74 20 72 65 67 28 50 33 29 20 65 72   most reg(P3) er
30f50 72 6f 72 73 20 77 69 6c 6c 20 62 65 20 72 65 70  rors will be rep
30f60 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68  orted..** In oth
30f70 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 61 6e  er words, the an
30f80 61 6c 79 73 69 73 20 73 74 6f 70 73 20 61 73 20  alysis stops as 
30f90 73 6f 6f 6e 20 61 73 20 72 65 67 28 50 31 29 20  soon as reg(P1) 
30fa0 65 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20 73  errors are .** s
30fb0 65 65 6e 2e 20 20 52 65 67 28 50 31 29 20 69 73  een.  Reg(P1) is
30fc0 20 75 70 64 61 74 65 64 20 77 69 74 68 20 74 68   updated with th
30fd0 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  e number of erro
30fe0 72 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a  rs remaining..**
30ff0 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61 67  .** The root pag
31000 65 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c 6c  e numbers of all
31010 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20 64   tables in the d
31020 61 74 61 62 61 73 65 20 61 72 65 20 69 6e 74 65  atabase are inte
31030 67 65 72 73 0a 2a 2a 20 73 74 6f 72 65 64 20 69  gers.** stored i
31040 6e 20 50 34 5f 49 4e 54 41 52 52 41 59 20 61 72  n P4_INTARRAY ar
31050 67 75 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66  gument..**.** If
31060 20 50 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P5 is not zero,
31070 20 74 68 65 20 63 68 65 63 6b 20 69 73 20 64 6f   the check is do
31080 6e 65 20 6f 6e 20 74 68 65 20 61 75 78 69 6c 69  ne on the auxili
31090 61 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  ary database.** 
310a0 66 69 6c 65 2c 20 6e 6f 74 20 74 68 65 20 6d 61  file, not the ma
310b0 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
310c0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
310d0 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f 20 69  ode is used to i
310e0 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 69 6e 74  mplement the int
310f0 65 67 72 69 74 79 5f 63 68 65 63 6b 20 70 72 61  egrity_check pra
31100 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  gma..*/.case OP_
31110 49 6e 74 65 67 72 69 74 79 43 6b 3a 20 7b 0a 20  IntegrityCk: {. 
31120 20 69 6e 74 20 6e 52 6f 6f 74 3b 20 20 20 20 20   int nRoot;     
31130 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61   /* Number of ta
31140 62 6c 65 73 20 74 6f 20 63 68 65 63 6b 2e 20 20  bles to check.  
31150 28 4e 75 6d 62 65 72 20 6f 66 20 72 6f 6f 74 20  (Number of root 
31160 70 61 67 65 73 2e 29 20 2a 2f 0a 20 20 69 6e 74  pages.) */.  int
31170 20 2a 61 52 6f 6f 74 3b 20 20 20 20 20 2f 2a 20   *aRoot;     /* 
31180 41 72 72 61 79 20 6f 66 20 72 6f 6f 74 70 61 67  Array of rootpag
31190 65 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 74 61  e numbers for ta
311a0 62 6c 65 73 20 74 6f 20 62 65 20 63 68 65 63 6b  bles to be check
311b0 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  ed */.  int nErr
311c0 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  ;       /* Numbe
311d0 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65 70 6f  r of errors repo
311e0 72 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  rted */.  char *
311f0 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78  z;        /* Tex
31200 74 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20 72  t of the error r
31210 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a  eport */.  Mem *
31220 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20 52 65  pnErr;     /* Re
31230 67 69 73 74 65 72 20 6b 65 65 70 69 6e 67 20 74  gister keeping t
31240 72 61 63 6b 20 6f 66 20 65 72 72 6f 72 73 20 72  rack of errors r
31250 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 0a 20 20 61  emaining */..  a
31260 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
31270 64 65 72 20 29 3b 0a 20 20 6e 52 6f 6f 74 20 3d  der );.  nRoot =
31280 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 52 6f 6f   pOp->p2;.  aRoo
31290 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a  t = pOp->p4.ai;.
312a0 20 20 61 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e    assert( nRoot>
312b0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 61  0 );.  assert( a
312c0 52 6f 6f 74 5b 30 5d 3d 3d 6e 52 6f 6f 74 20 29  Root[0]==nRoot )
312d0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
312e0 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
312f0 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
31300 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
31310 70 6e 45 72 72 20 3d 20 26 61 4d 65 6d 5b 70 4f  pnErr = &aMem[pO
31320 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74  p->p3];.  assert
31330 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20  ( (pnErr->flags 
31340 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
31350 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e 45 72  .  assert( (pnEr
31360 72 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  r->flags & (MEM_
31370 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d  Str|MEM_Blob))==
31380 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  0 );.  pIn1 = &a
31390 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
313a0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c  assert( pOp->p5<
313b0 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
313c0 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
313d0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f  p->btreeMask, pO
313e0 70 2d 3e 70 35 29 20 29 3b 0a 20 20 7a 20 3d 20  p->p5) );.  z = 
313f0 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65  sqlite3BtreeInte
31400 67 72 69 74 79 43 68 65 63 6b 28 64 62 2d 3e 61  grityCheck(db->a
31410 44 62 5b 70 4f 70 2d 3e 70 35 5d 2e 70 42 74 2c  Db[pOp->p5].pBt,
31420 20 26 61 52 6f 6f 74 5b 31 5d 2c 20 6e 52 6f 6f   &aRoot[1], nRoo
31430 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t,.             
31440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31450 20 20 20 20 28 69 6e 74 29 70 6e 45 72 72 2d 3e      (int)pnErr->
31460 75 2e 69 2b 31 2c 20 26 6e 45 72 72 29 3b 0a 20  u.i+1, &nErr);. 
31470 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
31480 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20  etNull(pIn1);.  
31490 69 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a 20  if( nErr==0 ){. 
314a0 20 20 20 61 73 73 65 72 74 28 20 7a 3d 3d 30 20     assert( z==0 
314b0 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 7a  );.  }else if( z
314c0 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  ==0 ){.    goto 
314d0 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b  no_mem;.  }else{
314e0 0a 20 20 20 20 70 6e 45 72 72 2d 3e 75 2e 69 20  .    pnErr->u.i 
314f0 2d 3d 20 6e 45 72 72 2d 31 3b 0a 20 20 20 20 73  -= nErr-1;.    s
31500 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
31510 53 74 72 28 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c  Str(pIn1, z, -1,
31520 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 73 71   SQLITE_UTF8, sq
31530 6c 69 74 65 33 5f 66 72 65 65 29 3b 0a 20 20 7d  lite3_free);.  }
31540 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
31550 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20  OBSIZE(pIn1);.  
31560 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
31570 65 45 6e 63 6f 64 69 6e 67 28 70 49 6e 31 2c 20  eEncoding(pIn1, 
31580 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65  encoding);.  bre
31590 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
315a0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45  SQLITE_OMIT_INTE
315b0 47 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a  GRITY_CHECK */..
315c0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65  /* Opcode: RowSe
315d0 74 41 64 64 20 50 31 20 50 32 20 2a 20 2a 20 2a  tAdd P1 P2 * * *
315e0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f  .** Synopsis: ro
315f0 77 73 65 74 28 50 31 29 3d 72 5b 50 32 5d 0a 2a  wset(P1)=r[P2].*
31600 2a 0a 2a 2a 20 49 6e 73 65 72 74 20 74 68 65 20  *.** Insert the 
31610 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 68 65  integer value he
31620 6c 64 20 62 79 20 72 65 67 69 73 74 65 72 20 50  ld by register P
31630 32 20 69 6e 74 6f 20 61 20 52 6f 77 53 65 74 20  2 into a RowSet 
31640 6f 62 6a 65 63 74 0a 2a 2a 20 68 65 6c 64 20 69  object.** held i
31650 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
31660 2a 0a 2a 2a 20 41 6e 20 61 73 73 65 72 74 69 6f  *.** An assertio
31670 6e 20 66 61 69 6c 73 20 69 66 20 50 32 20 69 73  n fails if P2 is
31680 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 2e   not an integer.
31690 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53  .*/.case OP_RowS
316a0 65 74 41 64 64 3a 20 7b 20 20 20 20 20 20 20 2f  etAdd: {       /
316b0 2a 20 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20 20  * in1, in2 */.  
316c0 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
316d0 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20  ->p1];.  pIn2 = 
316e0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
316f0 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d    assert( (pIn2-
31700 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
31710 29 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70  )!=0 );.  if( (p
31720 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
31730 5f 42 6c 6f 62 29 3d 3d 30 20 29 7b 0a 20 20 20  _Blob)==0 ){.   
31740 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
31750 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e  MemSetRowSet(pIn
31760 31 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  1) ) goto no_mem
31770 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  ;.  }.  assert( 
31780 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 73  sqlite3VdbeMemIs
31790 52 6f 77 53 65 74 28 70 49 6e 31 29 20 29 3b 0a  RowSet(pIn1) );.
317a0 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49    sqlite3RowSetI
317b0 6e 73 65 72 74 28 28 52 6f 77 53 65 74 2a 29 70  nsert((RowSet*)p
317c0 49 6e 31 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 75 2e  In1->z, pIn2->u.
317d0 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  i);.  break;.}..
317e0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65  /* Opcode: RowSe
317f0 74 52 65 61 64 20 50 31 20 50 32 20 50 33 20 2a  tRead P1 P2 P3 *
31800 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
31810 72 5b 50 33 5d 3d 72 6f 77 73 65 74 28 50 31 29  r[P3]=rowset(P1)
31820 0a 2a 2a 0a 2a 2a 20 45 78 74 72 61 63 74 20 74  .**.** Extract t
31830 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75  he smallest valu
31840 65 20 66 72 6f 6d 20 74 68 65 20 52 6f 77 53 65  e from the RowSe
31850 74 20 6f 62 6a 65 63 74 20 69 6e 20 50 31 0a 2a  t object in P1.*
31860 2a 20 61 6e 64 20 70 75 74 20 74 68 61 74 20 76  * and put that v
31870 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74  alue into regist
31880 65 72 20 50 33 2e 0a 2a 2a 20 4f 72 2c 20 69 66  er P3..** Or, if
31890 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 50   RowSet object P
318a0 31 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 65  1 is initially e
318b0 6d 70 74 79 2c 20 6c 65 61 76 65 20 50 33 0a 2a  mpty, leave P3.*
318c0 2a 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20  * unchanged and 
318d0 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74  jump to instruct
318e0 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ion P2..*/.case 
318f0 4f 50 5f 52 6f 77 53 65 74 52 65 61 64 3a 20 7b  OP_RowSetRead: {
31900 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
31910 69 6e 31 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69  in1, out3 */.  i
31920 36 34 20 76 61 6c 3b 0a 0a 20 20 70 49 6e 31 20  64 val;..  pIn1 
31930 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
31940 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e  ;.  assert( (pIn
31950 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42  1->flags & MEM_B
31960 6c 6f 62 29 3d 3d 30 20 7c 7c 20 73 71 6c 69 74  lob)==0 || sqlit
31970 65 33 56 64 62 65 4d 65 6d 49 73 52 6f 77 53 65  e3VdbeMemIsRowSe
31980 74 28 70 49 6e 31 29 20 29 3b 0a 20 20 69 66 28  t(pIn1) );.  if(
31990 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
319a0 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 0a 20 20  MEM_Blob)==0 .  
319b0 20 7c 7c 20 73 71 6c 69 74 65 33 52 6f 77 53 65   || sqlite3RowSe
319c0 74 4e 65 78 74 28 28 52 6f 77 53 65 74 2a 29 70  tNext((RowSet*)p
319d0 49 6e 31 2d 3e 7a 2c 20 26 76 61 6c 29 3d 3d 30  In1->z, &val)==0
319e0 0a 20 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65  .  ){.    /* The
319f0 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 69   boolean index i
31a00 73 20 65 6d 70 74 79 20 2a 2f 0a 20 20 20 20 73  s empty */.    s
31a10 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
31a20 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 20 20  Null(pIn1);.    
31a30 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
31a40 31 2c 32 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6a  1,2);.    goto j
31a50 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68  ump_to_p2_and_ch
31a60 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70  eck_for_interrup
31a70 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  t;.  }else{.    
31a80 2f 2a 20 41 20 76 61 6c 75 65 20 77 61 73 20 70  /* A value was p
31a90 75 6c 6c 65 64 20 66 72 6f 6d 20 74 68 65 20 69  ulled from the i
31aa0 6e 64 65 78 20 2a 2f 0a 20 20 20 20 56 64 62 65  ndex */.    Vdbe
31ab0 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c 32 29  BranchTaken(0,2)
31ac0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
31ad0 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d  eMemSetInt64(&aM
31ae0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76 61 6c  em[pOp->p3], val
31af0 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68  );.  }.  goto ch
31b00 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70  eck_for_interrup
31b10 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  t;.}../* Opcode:
31b20 20 52 6f 77 53 65 74 54 65 73 74 20 50 31 20 50   RowSetTest P1 P
31b30 32 20 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70  2 P3 P4.** Synop
31b40 73 69 73 3a 20 69 66 20 72 5b 50 33 5d 20 69 6e  sis: if r[P3] in
31b50 20 72 6f 77 73 65 74 28 50 31 29 20 67 6f 74 6f   rowset(P1) goto
31b60 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74   P2.**.** Regist
31b70 65 72 20 50 33 20 69 73 20 61 73 73 75 6d 65 64  er P3 is assumed
31b80 20 74 6f 20 68 6f 6c 64 20 61 20 36 34 2d 62 69   to hold a 64-bi
31b90 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e  t integer value.
31ba0 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31 0a   If register P1.
31bb0 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20 52 6f  ** contains a Ro
31bc0 77 53 65 74 20 6f 62 6a 65 63 74 20 61 6e 64 20  wSet object and 
31bd0 74 68 61 74 20 52 6f 77 53 65 74 20 6f 62 6a 65  that RowSet obje
31be0 63 74 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74  ct contains.** t
31bf0 68 65 20 76 61 6c 75 65 20 68 65 6c 64 20 69 6e  he value held in
31c00 20 50 33 2c 20 6a 75 6d 70 20 74 6f 20 72 65 67   P3, jump to reg
31c10 69 73 74 65 72 20 50 32 2e 20 4f 74 68 65 72 77  ister P2. Otherw
31c20 69 73 65 2c 20 69 6e 73 65 72 74 20 74 68 65 0a  ise, insert the.
31c30 2a 2a 20 69 6e 74 65 67 65 72 20 69 6e 20 50 33  ** integer in P3
31c40 20 69 6e 74 6f 20 74 68 65 20 52 6f 77 53 65 74   into the RowSet
31c50 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20 6f 6e   and continue on
31c60 20 74 6f 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20   to the.** next 
31c70 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  opcode..**.** Th
31c80 65 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20  e RowSet object 
31c90 69 73 20 6f 70 74 69 6d 69 7a 65 64 20 66 6f 72  is optimized for
31ca0 20 74 68 65 20 63 61 73 65 20 77 68 65 72 65 20   the case where 
31cb0 73 65 74 73 20 6f 66 20 69 6e 74 65 67 65 72 73  sets of integers
31cc0 0a 2a 2a 20 61 72 65 20 69 6e 73 65 72 74 65 64  .** are inserted
31cd0 20 69 6e 20 64 69 73 74 69 6e 63 74 20 70 68 61   in distinct pha
31ce0 73 65 73 2c 20 77 68 69 63 68 20 65 61 63 68 20  ses, which each 
31cf0 73 65 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20  set contains no 
31d00 64 75 70 6c 69 63 61 74 65 73 2e 0a 2a 2a 20 45  duplicates..** E
31d10 61 63 68 20 73 65 74 20 69 73 20 69 64 65 6e 74  ach set is ident
31d20 69 66 69 65 64 20 62 79 20 61 20 75 6e 69 71 75  ified by a uniqu
31d30 65 20 50 34 20 76 61 6c 75 65 2e 20 54 68 65 20  e P4 value. The 
31d40 66 69 72 73 74 20 73 65 74 0a 2a 2a 20 6d 75 73  first set.** mus
31d50 74 20 68 61 76 65 20 50 34 3d 3d 30 2c 20 74 68  t have P4==0, th
31d60 65 20 66 69 6e 61 6c 20 73 65 74 20 6d 75 73 74  e final set must
31d70 20 68 61 76 65 20 50 34 3d 3d 2d 31 2c 20 61 6e   have P4==-1, an
31d80 64 20 66 6f 72 20 61 6c 6c 20 6f 74 68 65 72 20  d for all other 
31d90 73 65 74 73 0a 2a 2a 20 6d 75 73 74 20 68 61 76  sets.** must hav
31da0 65 20 50 34 3e 30 2e 0a 2a 2a 0a 2a 2a 20 54 68  e P4>0..**.** Th
31db0 69 73 20 61 6c 6c 6f 77 73 20 6f 70 74 69 6d 69  is allows optimi
31dc0 7a 61 74 69 6f 6e 73 3a 20 28 61 29 20 77 68 65  zations: (a) whe
31dd0 6e 20 50 34 3d 3d 30 20 74 68 65 72 65 20 69 73  n P4==0 there is
31de0 20 6e 6f 20 6e 65 65 64 20 74 6f 20 74 65 73 74   no need to test
31df0 0a 2a 2a 20 74 68 65 20 52 6f 77 53 65 74 20 6f  .** the RowSet o
31e00 62 6a 65 63 74 20 66 6f 72 20 50 33 2c 20 61 73  bject for P3, as
31e10 20 69 74 20 69 73 20 67 75 61 72 61 6e 74 65 65   it is guarantee
31e20 64 20 6e 6f 74 20 74 6f 20 63 6f 6e 74 61 69 6e  d not to contain
31e30 20 69 74 2c 0a 2a 2a 20 28 62 29 20 77 68 65 6e   it,.** (b) when
31e40 20 50 34 3d 3d 2d 31 20 74 68 65 72 65 20 69 73   P4==-1 there is
31e50 20 6e 6f 20 6e 65 65 64 20 74 6f 20 69 6e 73 65   no need to inse
31e60 72 74 20 74 68 65 20 76 61 6c 75 65 2c 20 61 73  rt the value, as
31e70 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65   it will.** neve
31e80 72 20 62 65 20 74 65 73 74 65 64 20 66 6f 72 2c  r be tested for,
31e90 20 61 6e 64 20 28 63 29 20 77 68 65 6e 20 61 20   and (c) when a 
31ea0 76 61 6c 75 65 20 74 68 61 74 20 69 73 20 70 61  value that is pa
31eb0 72 74 20 6f 66 20 73 65 74 20 58 20 69 73 0a 2a  rt of set X is.*
31ec0 2a 20 69 6e 73 65 72 74 65 64 2c 20 74 68 65 72  * inserted, ther
31ed0 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20  e is no need to 
31ee0 73 65 61 72 63 68 20 74 6f 20 73 65 65 20 69 66  search to see if
31ef0 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20   the same value 
31f00 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c  was.** previousl
31f10 79 20 69 6e 73 65 72 74 65 64 20 61 73 20 70 61  y inserted as pa
31f20 72 74 20 6f 66 20 73 65 74 20 58 20 28 6f 6e 6c  rt of set X (onl
31f30 79 20 69 66 20 69 74 20 77 61 73 20 70 72 65 76  y if it was prev
31f40 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73 65 72 74  iously.** insert
31f50 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 73 6f  ed as part of so
31f60 6d 65 20 6f 74 68 65 72 20 73 65 74 29 2e 0a 2a  me other set)..*
31f70 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74  /.case OP_RowSet
31f80 54 65 73 74 3a 20 7b 20 20 20 20 20 20 20 20 20  Test: {         
31f90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
31fa0 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
31fb0 0a 20 20 69 6e 74 20 69 53 65 74 3b 0a 20 20 69  .  int iSet;.  i
31fc0 6e 74 20 65 78 69 73 74 73 3b 0a 0a 20 20 70 49  nt exists;..  pI
31fd0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
31fe0 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61  p1];.  pIn3 = &a
31ff0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
32000 69 53 65 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 69  iSet = pOp->p4.i
32010 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33  ;.  assert( pIn3
32020 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20  ->flags&MEM_Int 
32030 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 72  );..  /* If ther
32040 65 20 69 73 20 61 6e 79 74 68 69 6e 67 20 6f 74  e is anything ot
32050 68 65 72 20 74 68 61 6e 20 61 20 72 6f 77 73 65  her than a rowse
32060 74 20 6f 62 6a 65 63 74 20 69 6e 20 6d 65 6d 6f  t object in memo
32070 72 79 20 63 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a  ry cell P1,.  **
32080 20 64 65 6c 65 74 65 20 69 74 20 6e 6f 77 20 61   delete it now a
32090 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65 20 50 31  nd initialize P1
320a0 20 77 69 74 68 20 61 6e 20 65 6d 70 74 79 20 72   with an empty r
320b0 6f 77 73 65 74 0a 20 20 2a 2f 0a 20 20 69 66 28  owset.  */.  if(
320c0 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
320d0 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29 7b 0a  MEM_Blob)==0 ){.
320e0 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56      if( sqlite3V
320f0 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28  dbeMemSetRowSet(
32100 70 49 6e 31 29 20 29 20 67 6f 74 6f 20 6e 6f 5f  pIn1) ) goto no_
32110 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  mem;.  }.  asser
32120 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  t( sqlite3VdbeMe
32130 6d 49 73 52 6f 77 53 65 74 28 70 49 6e 31 29 20  mIsRowSet(pIn1) 
32140 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
32150 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
32160 33 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  32 );.  assert( 
32170 69 53 65 74 3d 3d 2d 31 20 7c 7c 20 69 53 65 74  iSet==-1 || iSet
32180 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 53 65  >=0 );.  if( iSe
32190 74 20 29 7b 0a 20 20 20 20 65 78 69 73 74 73 20  t ){.    exists 
321a0 3d 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54  = sqlite3RowSetT
321b0 65 73 74 28 28 52 6f 77 53 65 74 2a 29 70 49 6e  est((RowSet*)pIn
321c0 31 2d 3e 7a 2c 20 69 53 65 74 2c 20 70 49 6e 33  1->z, iSet, pIn3
321d0 2d 3e 75 2e 69 29 3b 0a 20 20 20 20 56 64 62 65  ->u.i);.    Vdbe
321e0 42 72 61 6e 63 68 54 61 6b 65 6e 28 65 78 69 73  BranchTaken(exis
321f0 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66  ts!=0,2);.    if
32200 28 20 65 78 69 73 74 73 20 29 20 67 6f 74 6f 20  ( exists ) goto 
32210 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
32220 20 20 69 66 28 20 69 53 65 74 3e 3d 30 20 29 7b    if( iSet>=0 ){
32230 0a 20 20 20 20 73 71 6c 69 74 65 33 52 6f 77 53  .    sqlite3RowS
32240 65 74 49 6e 73 65 72 74 28 28 52 6f 77 53 65 74  etInsert((RowSet
32250 2a 29 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e 33 2d  *)pIn1->z, pIn3-
32260 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20 20 62 72 65  >u.i);.  }.  bre
32270 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20  ak;.}...#ifndef 
32280 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
32290 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  GER../* Opcode: 
322a0 50 72 6f 67 72 61 6d 20 50 31 20 50 32 20 50 33  Program P1 P2 P3
322b0 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65   P4 P5.**.** Exe
322c0 63 75 74 65 20 74 68 65 20 74 72 69 67 67 65 72  cute the trigger
322d0 20 70 72 6f 67 72 61 6d 20 70 61 73 73 65 64 20   program passed 
322e0 61 73 20 50 34 20 28 74 79 70 65 20 50 34 5f 53  as P4 (type P4_S
322f0 55 42 50 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a 0a  UBPROGRAM). .**.
32300 2a 2a 20 50 31 20 63 6f 6e 74 61 69 6e 73 20 74  ** P1 contains t
32310 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74 68  he address of th
32320 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68  e memory cell th
32330 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  at contains the 
32340 66 69 72 73 74 20 6d 65 6d 6f 72 79 20 0a 2a 2a  first memory .**
32350 20 63 65 6c 6c 20 69 6e 20 61 6e 20 61 72 72 61   cell in an arra
32360 79 20 6f 66 20 76 61 6c 75 65 73 20 75 73 65 64  y of values used
32370 20 61 73 20 61 72 67 75 6d 65 6e 74 73 20 74 6f   as arguments to
32380 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d   the sub-program
32390 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e 74 61 69 6e  . P2 .** contain
323a0 73 20 74 68 65 20 61 64 64 72 65 73 73 20 74 6f  s the address to
323b0 20 6a 75 6d 70 20 74 6f 20 69 66 20 74 68 65 20   jump to if the 
323c0 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 72 6f  sub-program thro
323d0 77 73 20 61 6e 20 49 47 4e 4f 52 45 20 0a 2a 2a  ws an IGNORE .**
323e0 20 65 78 63 65 70 74 69 6f 6e 20 75 73 69 6e 67   exception using
323f0 20 74 68 65 20 52 41 49 53 45 28 29 20 66 75 6e   the RAISE() fun
32400 63 74 69 6f 6e 2e 20 52 65 67 69 73 74 65 72 20  ction. Register 
32410 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  P3 contains the 
32420 61 64 64 72 65 73 73 20 0a 2a 2a 20 6f 66 20 61  address .** of a
32430 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20   memory cell in 
32440 74 68 69 73 20 28 74 68 65 20 70 61 72 65 6e 74  this (the parent
32450 29 20 56 4d 20 74 68 61 74 20 69 73 20 75 73 65  ) VM that is use
32460 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 74 68  d to allocate th
32470 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72 65 71  e .** memory req
32480 75 69 72 65 64 20 62 79 20 74 68 65 20 73 75 62  uired by the sub
32490 2d 76 64 62 65 20 61 74 20 72 75 6e 74 69 6d 65  -vdbe at runtime
324a0 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  ..**.** P4 is a 
324b0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 56  pointer to the V
324c0 4d 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  M containing the
324d0 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
324e0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  ..**.** If P5 is
324f0 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
32500 72 65 63 75 72 73 69 76 65 20 70 72 6f 67 72 61  recursive progra
32510 6d 20 69 6e 76 6f 63 61 74 69 6f 6e 20 69 73 20  m invocation is 
32520 65 6e 61 62 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65  enabled..*/.case
32530 20 4f 50 5f 50 72 6f 67 72 61 6d 3a 20 7b 20 20   OP_Program: {  
32540 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
32550 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20  .  int nMem;    
32560 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
32570 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 72  mber of memory r
32580 65 67 69 73 74 65 72 73 20 66 6f 72 20 73 75 62  egisters for sub
32590 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 69 6e  -program */.  in
325a0 74 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20  t nByte;        
325b0 20 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20 6f        /* Bytes o
325c0 66 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65 20  f runtime space 
325d0 72 65 71 75 69 72 65 64 20 66 6f 72 20 73 75 62  required for sub
325e0 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 4d 65  -program */.  Me
325f0 6d 20 2a 70 52 74 3b 20 20 20 20 20 20 20 20 20  m *pRt;         
32600 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
32610 72 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 72 75  r to allocate ru
32620 6e 74 69 6d 65 20 73 70 61 63 65 20 2a 2f 0a 20  ntime space */. 
32630 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20   Mem *pMem;     
32640 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64           /* Used
32650 20 74 6f 20 69 74 65 72 61 74 65 20 74 68 72 6f   to iterate thro
32660 75 67 68 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73  ugh memory cells
32670 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 45 6e 64 3b   */.  Mem *pEnd;
32680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
32690 20 4c 61 73 74 20 6d 65 6d 6f 72 79 20 63 65 6c   Last memory cel
326a0 6c 20 69 6e 20 6e 65 77 20 61 72 72 61 79 20 2a  l in new array *
326b0 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70  /.  VdbeFrame *p
326c0 46 72 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e  Frame;      /* N
326d0 65 77 20 76 64 62 65 20 66 72 61 6d 65 20 74 6f  ew vdbe frame to
326e0 20 65 78 65 63 75 74 65 20 69 6e 20 2a 2f 0a 20   execute in */. 
326f0 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72   SubProgram *pPr
32700 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 53 75 62 2d  ogram;   /* Sub-
32710 70 72 6f 67 72 61 6d 20 74 6f 20 65 78 65 63 75  program to execu
32720 74 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 74 3b  te */.  void *t;
32730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32740 2f 2a 20 54 6f 6b 65 6e 20 69 64 65 6e 74 69 66  /* Token identif
32750 79 69 6e 67 20 74 72 69 67 67 65 72 20 2a 2f 0a  ying trigger */.
32760 0a 20 20 70 50 72 6f 67 72 61 6d 20 3d 20 70 4f  .  pProgram = pO
32770 70 2d 3e 70 34 2e 70 50 72 6f 67 72 61 6d 3b 0a  p->p4.pProgram;.
32780 20 20 70 52 74 20 3d 20 26 61 4d 65 6d 5b 70 4f    pRt = &aMem[pO
32790 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74  p->p3];.  assert
327a0 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3e  ( pProgram->nOp>
327b0 30 20 29 3b 0a 20 20 0a 20 20 2f 2a 20 49 66 20  0 );.  .  /* If 
327c0 74 68 65 20 70 35 20 66 6c 61 67 20 69 73 20 63  the p5 flag is c
327d0 6c 65 61 72 2c 20 74 68 65 6e 20 72 65 63 75 72  lear, then recur
327e0 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20  sive invocation 
327f0 6f 66 20 74 72 69 67 67 65 72 73 20 69 73 20 0a  of triggers is .
32800 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 20 66 6f    ** disabled fo
32810 72 20 62 61 63 6b 77 61 72 64 73 20 63 6f 6d 70  r backwards comp
32820 61 74 69 62 69 6c 69 74 79 20 28 70 35 20 69 73  atibility (p5 is
32830 20 73 65 74 20 69 66 20 74 68 69 73 20 73 75 62   set if this sub
32840 2d 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20 69 73  -program.  ** is
32850 20 72 65 61 6c 6c 79 20 61 20 74 72 69 67 67 65   really a trigge
32860 72 2c 20 6e 6f 74 20 61 20 66 6f 72 65 69 67 6e  r, not a foreign
32870 20 6b 65 79 20 61 63 74 69 6f 6e 2c 20 61 6e 64   key action, and
32880 20 74 68 65 20 66 6c 61 67 20 73 65 74 0a 20 20   the flag set.  
32890 2a 2a 20 61 6e 64 20 63 6c 65 61 72 65 64 20 62  ** and cleared b
328a0 79 20 74 68 65 20 22 50 52 41 47 4d 41 20 72 65  y the "PRAGMA re
328b0 63 75 72 73 69 76 65 5f 74 72 69 67 67 65 72 73  cursive_triggers
328c0 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 63 6c 65  " command is cle
328d0 61 72 29 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20  ar)..  ** .  ** 
328e0 49 74 20 69 73 20 72 65 63 75 72 73 69 76 65 20  It is recursive 
328f0 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72  invocation of tr
32900 69 67 67 65 72 73 2c 20 61 74 20 74 68 65 20 53  iggers, at the S
32910 51 4c 20 6c 65 76 65 6c 2c 20 74 68 61 74 20 69  QL level, that i
32920 73 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64  s .  ** disabled
32930 2e 20 49 6e 20 73 6f 6d 65 20 63 61 73 65 73 20  . In some cases 
32940 61 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72  a single trigger
32950 20 6d 61 79 20 67 65 6e 65 72 61 74 65 20 6d 6f   may generate mo
32960 72 65 20 74 68 61 6e 20 6f 6e 65 20 0a 20 20 2a  re than one .  *
32970 2a 20 53 75 62 50 72 6f 67 72 61 6d 20 28 69 66  * SubProgram (if
32980 20 74 68 65 20 74 72 69 67 67 65 72 20 6d 61 79   the trigger may
32990 20 62 65 20 65 78 65 63 75 74 65 64 20 77 69 74   be executed wit
329a0 68 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  h more than one 
329b0 64 69 66 66 65 72 65 6e 74 20 0a 20 20 2a 2a 20  different .  ** 
329c0 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f  ON CONFLICT algo
329d0 72 69 74 68 6d 29 2e 20 53 75 62 50 72 6f 67 72  rithm). SubProgr
329e0 61 6d 20 73 74 72 75 63 74 75 72 65 73 20 61 73  am structures as
329f0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 0a  sociated with a.
32a00 20 20 2a 2a 20 73 69 6e 67 6c 65 20 74 72 69 67    ** single trig
32a10 67 65 72 20 61 6c 6c 20 68 61 76 65 20 74 68 65  ger all have the
32a20 20 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20   same value for 
32a30 74 68 65 20 53 75 62 50 72 6f 67 72 61 6d 2e 74  the SubProgram.t
32a40 6f 6b 65 6e 20 0a 20 20 2a 2a 20 76 61 72 69 61  oken .  ** varia
32a50 62 6c 65 2e 20 20 2a 2f 0a 20 20 69 66 28 20 70  ble.  */.  if( p
32a60 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 74 20  Op->p5 ){.    t 
32a70 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65  = pProgram->toke
32a80 6e 3b 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d  n;.    for(pFram
32a90 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72  e=p->pFrame; pFr
32aa0 61 6d 65 20 26 26 20 70 46 72 61 6d 65 2d 3e 74  ame && pFrame->t
32ab0 6f 6b 65 6e 21 3d 74 3b 20 70 46 72 61 6d 65 3d  oken!=t; pFrame=
32ac0 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29  pFrame->pParent)
32ad0 3b 0a 20 20 20 20 69 66 28 20 70 46 72 61 6d 65  ;.    if( pFrame
32ae0 20 29 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20   ) break;.  }.. 
32af0 20 69 66 28 20 70 2d 3e 6e 46 72 61 6d 65 3e 3d   if( p->nFrame>=
32b00 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
32b10 45 5f 4c 49 4d 49 54 5f 54 52 49 47 47 45 52 5f  E_LIMIT_TRIGGER_
32b20 44 45 50 54 48 5d 20 29 7b 0a 20 20 20 20 72 63  DEPTH] ){.    rc
32b30 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
32b40 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
32b50 45 72 72 6f 72 28 70 2c 20 22 74 6f 6f 20 6d 61  Error(p, "too ma
32b60 6e 79 20 6c 65 76 65 6c 73 20 6f 66 20 74 72 69  ny levels of tri
32b70 67 67 65 72 20 72 65 63 75 72 73 69 6f 6e 22 29  gger recursion")
32b80 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74  ;.    goto abort
32b90 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
32ba0 20 7d 0a 0a 20 20 2f 2a 20 52 65 67 69 73 74 65   }..  /* Registe
32bb0 72 20 70 52 74 20 69 73 20 75 73 65 64 20 74 6f  r pRt is used to
32bc0 20 73 74 6f 72 65 20 74 68 65 20 6d 65 6d 6f 72   store the memor
32bd0 79 20 72 65 71 75 69 72 65 64 20 74 6f 20 73 61  y required to sa
32be0 76 65 20 74 68 65 20 73 74 61 74 65 0a 20 20 2a  ve the state.  *
32bf0 2a 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  * of the current
32c00 20 70 72 6f 67 72 61 6d 2c 20 61 6e 64 20 74 68   program, and th
32c10 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65  e memory require
32c20 64 20 61 74 20 72 75 6e 74 69 6d 65 20 74 6f 20  d at runtime to 
32c30 65 78 65 63 75 74 65 0a 20 20 2a 2a 20 74 68 65  execute.  ** the
32c40 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
32c50 2e 20 49 66 20 74 68 69 73 20 74 72 69 67 67 65  . If this trigge
32c60 72 20 68 61 73 20 62 65 65 6e 20 66 69 72 65 64  r has been fired
32c70 20 62 65 66 6f 72 65 2c 20 74 68 65 6e 20 70 52   before, then pR
32c80 74 20 0a 20 20 2a 2a 20 69 73 20 61 6c 72 65 61  t .  ** is alrea
32c90 64 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4f 74  dy allocated. Ot
32ca0 68 65 72 77 69 73 65 2c 20 69 74 20 6d 75 73 74  herwise, it must
32cb0 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e   be initialized.
32cc0 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 52 74 2d    */.  if( (pRt-
32cd0 3e 66 6c 61 67 73 26 4d 45 4d 5f 42 6c 6f 62 29  >flags&MEM_Blob)
32ce0 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 53 75  ==0 ){.    /* Su
32cf0 62 50 72 6f 67 72 61 6d 2e 6e 4d 65 6d 20 69 73  bProgram.nMem is
32d00 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62   set to the numb
32d10 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c  er of memory cel
32d20 6c 73 20 75 73 65 64 20 62 79 20 74 68 65 20 0a  ls used by the .
32d30 20 20 20 20 2a 2a 20 70 72 6f 67 72 61 6d 20 73      ** program s
32d40 74 6f 72 65 64 20 69 6e 20 53 75 62 50 72 6f 67  tored in SubProg
32d50 72 61 6d 2e 61 4f 70 2e 20 41 73 20 77 65 6c 6c  ram.aOp. As well
32d60 20 61 73 20 74 68 65 73 65 2c 20 6f 6e 65 20 6d   as these, one m
32d70 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 63 65 6c  emory.    ** cel
32d80 6c 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f  l is required fo
32d90 72 20 65 61 63 68 20 63 75 72 73 6f 72 20 75 73  r each cursor us
32da0 65 64 20 62 79 20 74 68 65 20 70 72 6f 67 72 61  ed by the progra
32db0 6d 2e 20 53 65 74 20 6c 6f 63 61 6c 0a 20 20 20  m. Set local.   
32dc0 20 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 4d 65   ** variable nMe
32dd0 6d 20 28 61 6e 64 20 6c 61 74 65 72 2c 20 56 64  m (and later, Vd
32de0 62 65 46 72 61 6d 65 2e 6e 43 68 69 6c 64 4d 65  beFrame.nChildMe
32df0 6d 29 20 74 6f 20 74 68 69 73 20 76 61 6c 75 65  m) to this value
32e00 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6e 4d 65  ..    */.    nMe
32e10 6d 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d  m = pProgram->nM
32e20 65 6d 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  em + pProgram->n
32e30 43 73 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28  Csr;.    assert(
32e40 20 6e 4d 65 6d 3e 30 20 29 3b 0a 20 20 20 20 69   nMem>0 );.    i
32e50 66 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73  f( pProgram->nCs
32e60 72 3d 3d 30 20 29 20 6e 4d 65 6d 2b 2b 3b 0a 20  r==0 ) nMem++;. 
32e70 20 20 20 6e 42 79 74 65 20 3d 20 52 4f 55 4e 44     nByte = ROUND
32e80 38 28 73 69 7a 65 6f 66 28 56 64 62 65 46 72 61  8(sizeof(VdbeFra
32e90 6d 65 29 29 0a 20 20 20 20 20 20 20 20 20 20 20  me)).           
32ea0 20 20 20 2b 20 6e 4d 65 6d 20 2a 20 73 69 7a 65     + nMem * size
32eb0 6f 66 28 4d 65 6d 29 0a 20 20 20 20 20 20 20 20  of(Mem).        
32ec0 20 20 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d        + pProgram
32ed0 2d 3e 6e 43 73 72 20 2a 20 73 69 7a 65 6f 66 28  ->nCsr * sizeof(
32ee0 56 64 62 65 43 75 72 73 6f 72 2a 29 0a 20 20 20  VdbeCursor*).   
32ef0 20 20 20 20 20 20 20 20 20 20 20 2b 20 28 70 50             + (pP
32f00 72 6f 67 72 61 6d 2d 3e 6e 4f 70 20 2b 20 37 29  rogram->nOp + 7)
32f10 2f 38 3b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d  /8;.    pFrame =
32f20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
32f30 5a 65 72 6f 28 64 62 2c 20 6e 42 79 74 65 29 3b  Zero(db, nByte);
32f40 0a 20 20 20 20 69 66 28 20 21 70 46 72 61 6d 65  .    if( !pFrame
32f50 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e   ){.      goto n
32f60 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20  o_mem;.    }.   
32f70 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
32f80 65 6c 65 61 73 65 28 70 52 74 29 3b 0a 20 20 20  elease(pRt);.   
32f90 20 70 52 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45   pRt->flags = ME
32fa0 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 44 79 6e 3b 0a  M_Blob|MEM_Dyn;.
32fb0 20 20 20 20 70 52 74 2d 3e 7a 20 3d 20 28 63 68      pRt->z = (ch
32fc0 61 72 2a 29 70 46 72 61 6d 65 3b 0a 20 20 20 20  ar*)pFrame;.    
32fd0 70 52 74 2d 3e 6e 20 3d 20 6e 42 79 74 65 3b 0a  pRt->n = nByte;.
32fe0 20 20 20 20 70 52 74 2d 3e 78 44 65 6c 20 3d 20      pRt->xDel = 
32ff0 73 71 6c 69 74 65 33 56 64 62 65 46 72 61 6d 65  sqlite3VdbeFrame
33000 4d 65 6d 44 65 6c 3b 0a 0a 20 20 20 20 70 46 72  MemDel;..    pFr
33010 61 6d 65 2d 3e 76 20 3d 20 70 3b 0a 20 20 20 20  ame->v = p;.    
33020 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65  pFrame->nChildMe
33030 6d 20 3d 20 6e 4d 65 6d 3b 0a 20 20 20 20 70 46  m = nMem;.    pF
33040 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20  rame->nChildCsr 
33050 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  = pProgram->nCsr
33060 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 70 63  ;.    pFrame->pc
33070 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61   = (int)(pOp - a
33080 4f 70 29 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  Op);.    pFrame-
33090 3e 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b  >aMem = p->aMem;
330a0 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4d 65  .    pFrame->nMe
330b0 6d 20 3d 20 70 2d 3e 6e 4d 65 6d 3b 0a 20 20 20  m = p->nMem;.   
330c0 20 70 46 72 61 6d 65 2d 3e 61 70 43 73 72 20 3d   pFrame->apCsr =
330d0 20 70 2d 3e 61 70 43 73 72 3b 0a 20 20 20 20 70   p->apCsr;.    p
330e0 46 72 61 6d 65 2d 3e 6e 43 75 72 73 6f 72 20 3d  Frame->nCursor =
330f0 20 70 2d 3e 6e 43 75 72 73 6f 72 3b 0a 20 20 20   p->nCursor;.   
33100 20 70 46 72 61 6d 65 2d 3e 61 4f 70 20 3d 20 70   pFrame->aOp = p
33110 2d 3e 61 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d  ->aOp;.    pFram
33120 65 2d 3e 6e 4f 70 20 3d 20 70 2d 3e 6e 4f 70 3b  e->nOp = p->nOp;
33130 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 74 6f 6b  .    pFrame->tok
33140 65 6e 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74  en = pProgram->t
33150 6f 6b 65 6e 3b 0a 23 69 66 64 65 66 20 53 51 4c  oken;.#ifdef SQL
33160 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f  ITE_ENABLE_STMT_
33170 53 43 41 4e 53 54 41 54 55 53 0a 20 20 20 20 70  SCANSTATUS.    p
33180 46 72 61 6d 65 2d 3e 61 6e 45 78 65 63 20 3d 20  Frame->anExec = 
33190 70 2d 3e 61 6e 45 78 65 63 3b 0a 23 65 6e 64 69  p->anExec;.#endi
331a0 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
331b0 44 45 42 55 47 0a 20 20 20 20 70 46 72 61 6d 65  DEBUG.    pFrame
331c0 2d 3e 69 46 72 61 6d 65 4d 61 67 69 63 20 3d 20  ->iFrameMagic = 
331d0 53 51 4c 49 54 45 5f 46 52 41 4d 45 5f 4d 41 47  SQLITE_FRAME_MAG
331e0 49 43 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20  IC;.#endif..    
331f0 70 45 6e 64 20 3d 20 26 56 64 62 65 46 72 61 6d  pEnd = &VdbeFram
33200 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 70 46 72  eMem(pFrame)[pFr
33210 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b  ame->nChildMem];
33220 0a 20 20 20 20 66 6f 72 28 70 4d 65 6d 3d 56 64  .    for(pMem=Vd
33230 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d  beFrameMem(pFram
33240 65 29 3b 20 70 4d 65 6d 21 3d 70 45 6e 64 3b 20  e); pMem!=pEnd; 
33250 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 20 20 70  pMem++){.      p
33260 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Mem->flags = MEM
33270 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 20 20  _Undefined;.    
33280 20 20 70 4d 65 6d 2d 3e 64 62 20 3d 20 64 62 3b    pMem->db = db;
33290 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
332a0 20 20 20 20 70 46 72 61 6d 65 20 3d 20 28 56 64      pFrame = (Vd
332b0 62 65 46 72 61 6d 65 2a 29 70 52 74 2d 3e 7a 3b  beFrame*)pRt->z;
332c0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 52 74  .    assert( pRt
332d0 2d 3e 78 44 65 6c 3d 3d 73 71 6c 69 74 65 33 56  ->xDel==sqlite3V
332e0 64 62 65 46 72 61 6d 65 4d 65 6d 44 65 6c 20 29  dbeFrameMemDel )
332f0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 50  ;.    assert( pP
33300 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 70 50 72  rogram->nMem+pPr
33310 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72  ogram->nCsr==pFr
33320 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 0a  ame->nChildMem .
33330 20 20 20 20 20 20 20 20 7c 7c 20 28 70 50 72 6f          || (pPro
33340 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 30 20 26 26  gram->nCsr==0 &&
33350 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b   pProgram->nMem+
33360 31 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c  1==pFrame->nChil
33370 64 4d 65 6d 29 20 29 3b 0a 20 20 20 20 61 73 73  dMem) );.    ass
33380 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  ert( pProgram->n
33390 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68  Csr==pFrame->nCh
333a0 69 6c 64 43 73 72 20 29 3b 0a 20 20 20 20 61 73  ildCsr );.    as
333b0 73 65 72 74 28 20 28 69 6e 74 29 28 70 4f 70 20  sert( (int)(pOp 
333c0 2d 20 61 4f 70 29 3d 3d 70 46 72 61 6d 65 2d 3e  - aOp)==pFrame->
333d0 70 63 20 29 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e  pc );.  }..  p->
333e0 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20 70 46 72 61  nFrame++;.  pFra
333f0 6d 65 2d 3e 70 50 61 72 65 6e 74 20 3d 20 70 2d  me->pParent = p-
33400 3e 70 46 72 61 6d 65 3b 0a 20 20 70 46 72 61 6d  >pFrame;.  pFram
33410 65 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 64  e->lastRowid = d
33420 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20  b->lastRowid;.  
33430 70 46 72 61 6d 65 2d 3e 6e 43 68 61 6e 67 65 20  pFrame->nChange 
33440 3d 20 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20  = p->nChange;.  
33450 70 46 72 61 6d 65 2d 3e 6e 44 62 43 68 61 6e 67  pFrame->nDbChang
33460 65 20 3d 20 70 2d 3e 64 62 2d 3e 6e 43 68 61 6e  e = p->db->nChan
33470 67 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70 46  ge;.  assert( pF
33480 72 61 6d 65 2d 3e 70 41 75 78 44 61 74 61 3d 3d  rame->pAuxData==
33490 30 20 29 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70  0 );.  pFrame->p
334a0 41 75 78 44 61 74 61 20 3d 20 70 2d 3e 70 41 75  AuxData = p->pAu
334b0 78 44 61 74 61 3b 0a 20 20 70 2d 3e 70 41 75 78  xData;.  p->pAux
334c0 44 61 74 61 20 3d 20 30 3b 0a 20 20 70 2d 3e 6e  Data = 0;.  p->n
334d0 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 70 2d  Change = 0;.  p-
334e0 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65  >pFrame = pFrame
334f0 3b 0a 20 20 70 2d 3e 61 4d 65 6d 20 3d 20 61 4d  ;.  p->aMem = aM
33500 65 6d 20 3d 20 56 64 62 65 46 72 61 6d 65 4d 65  em = VdbeFrameMe
33510 6d 28 70 46 72 61 6d 65 29 3b 0a 20 20 70 2d 3e  m(pFrame);.  p->
33520 6e 4d 65 6d 20 3d 20 70 46 72 61 6d 65 2d 3e 6e  nMem = pFrame->n
33530 43 68 69 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e  ChildMem;.  p->n
33540 43 75 72 73 6f 72 20 3d 20 28 75 31 36 29 70 46  Cursor = (u16)pF
33550 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 3b  rame->nChildCsr;
33560 0a 20 20 70 2d 3e 61 70 43 73 72 20 3d 20 28 56  .  p->apCsr = (V
33570 64 62 65 43 75 72 73 6f 72 20 2a 2a 29 26 61 4d  dbeCursor **)&aM
33580 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d 3b 0a 20 20 70  em[p->nMem];.  p
33590 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 20 3d 20 28  Frame->aOnce = (
335a0 75 38 2a 29 26 70 2d 3e 61 70 43 73 72 5b 70 50  u8*)&p->apCsr[pP
335b0 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 5d 3b 0a 20  rogram->nCsr];. 
335c0 20 6d 65 6d 73 65 74 28 70 46 72 61 6d 65 2d 3e   memset(pFrame->
335d0 61 4f 6e 63 65 2c 20 30 2c 20 28 70 50 72 6f 67  aOnce, 0, (pProg
335e0 72 61 6d 2d 3e 6e 4f 70 20 2b 20 37 29 2f 38 29  ram->nOp + 7)/8)
335f0 3b 0a 20 20 70 2d 3e 61 4f 70 20 3d 20 61 4f 70  ;.  p->aOp = aOp
33600 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 61 4f 70   = pProgram->aOp
33610 3b 0a 20 20 70 2d 3e 6e 4f 70 20 3d 20 70 50 72  ;.  p->nOp = pPr
33620 6f 67 72 61 6d 2d 3e 6e 4f 70 3b 0a 23 69 66 64  ogram->nOp;.#ifd
33630 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
33640 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53  _STMT_SCANSTATUS
33650 0a 20 20 70 2d 3e 61 6e 45 78 65 63 20 3d 20 30  .  p->anExec = 0
33660 3b 0a 23 65 6e 64 69 66 0a 20 20 70 4f 70 20 3d  ;.#endif.  pOp =
33670 20 26 61 4f 70 5b 2d 31 5d 3b 0a 0a 20 20 62 72   &aOp[-1];..  br
33680 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
33690 65 3a 20 50 61 72 61 6d 20 50 31 20 50 32 20 2a  e: Param P1 P2 *
336a0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   * *.**.** This 
336b0 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 65  opcode is only e
336c0 76 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20 73  ver present in s
336d0 75 62 2d 70 72 6f 67 72 61 6d 73 20 63 61 6c 6c  ub-programs call
336e0 65 64 20 76 69 61 20 74 68 65 20 0a 2a 2a 20 4f  ed via the .** O
336f0 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75  P_Program instru
33700 63 74 69 6f 6e 2e 20 43 6f 70 79 20 61 20 76 61  ction. Copy a va
33710 6c 75 65 20 63 75 72 72 65 6e 74 6c 79 20 73 74  lue currently st
33720 6f 72 65 64 20 69 6e 20 61 20 6d 65 6d 6f 72 79  ored in a memory
33730 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66 20 74 68 65   .** cell of the
33740 20 63 61 6c 6c 69 6e 67 20 28 70 61 72 65 6e 74   calling (parent
33750 29 20 66 72 61 6d 65 20 74 6f 20 63 65 6c 6c 20  ) frame to cell 
33760 50 32 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e  P2 in the curren
33770 74 20 66 72 61 6d 65 73 20 0a 2a 2a 20 61 64 64  t frames .** add
33780 72 65 73 73 20 73 70 61 63 65 2e 20 54 68 69 73  ress space. This
33790 20 69 73 20 75 73 65 64 20 62 79 20 74 72 69 67   is used by trig
337a0 67 65 72 20 70 72 6f 67 72 61 6d 73 20 74 6f 20  ger programs to 
337b0 61 63 63 65 73 73 20 74 68 65 20 6e 65 77 2e 2a  access the new.*
337c0 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64 2e 2a 20 76   .** and old.* v
337d0 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  alues..**.** The
337e0 20 61 64 64 72 65 73 73 20 6f 66 20 74 68 65 20   address of the 
337f0 63 65 6c 6c 20 69 6e 20 74 68 65 20 70 61 72 65  cell in the pare
33800 6e 74 20 66 72 61 6d 65 20 69 73 20 64 65 74 65  nt frame is dete
33810 72 6d 69 6e 65 64 20 62 79 20 61 64 64 69 6e 67  rmined by adding
33820 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66  .** the value of
33830 20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74   the P1 argument
33840 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66   to the value of
33850 20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74   the P1 argument
33860 20 74 6f 20 74 68 65 0a 2a 2a 20 63 61 6c 6c 69   to the.** calli
33870 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e  ng OP_Program in
33880 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
33890 73 65 20 4f 50 5f 50 61 72 61 6d 3a 20 7b 20 20  se OP_Param: {  
338a0 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
338b0 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20   */.  VdbeFrame 
338c0 2a 70 46 72 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a  *pFrame;.  Mem *
338d0 70 49 6e 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75  pIn;.  pOut = ou
338e0 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
338f0 70 4f 70 29 3b 0a 20 20 70 46 72 61 6d 65 20 3d  pOp);.  pFrame =
33900 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 49   p->pFrame;.  pI
33910 6e 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65  n = &pFrame->aMe
33920 6d 5b 70 4f 70 2d 3e 70 31 20 2b 20 70 46 72 61  m[pOp->p1 + pFra
33930 6d 65 2d 3e 61 4f 70 5b 70 46 72 61 6d 65 2d 3e  me->aOp[pFrame->
33940 70 63 5d 2e 70 31 5d 3b 20 20 20 0a 20 20 73 71  pc].p1];   .  sq
33950 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c  lite3VdbeMemShal
33960 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49  lowCopy(pOut, pI
33970 6e 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20  n, MEM_Ephem);. 
33980 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 65 6e 64 69   break;.}..#endi
33990 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c  f /* #ifndef SQL
339a0 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
339b0 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
339c0 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
339d0 5f 4b 45 59 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  _KEY./* Opcode: 
339e0 46 6b 43 6f 75 6e 74 65 72 20 50 31 20 50 32 20  FkCounter P1 P2 
339f0 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
33a00 73 3a 20 66 6b 63 74 72 5b 50 31 5d 2b 3d 50 32  s: fkctr[P1]+=P2
33a10 0a 2a 2a 0a 2a 2a 20 49 6e 63 72 65 6d 65 6e 74  .**.** Increment
33a20 20 61 20 22 63 6f 6e 73 74 72 61 69 6e 74 20 63   a "constraint c
33a30 6f 75 6e 74 65 72 22 20 62 79 20 50 32 20 28 50  ounter" by P2 (P
33a40 32 20 6d 61 79 20 62 65 20 6e 65 67 61 74 69 76  2 may be negativ
33a50 65 20 6f 72 20 70 6f 73 69 74 69 76 65 29 2e 0a  e or positive)..
33a60 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d  ** If P1 is non-
33a70 7a 65 72 6f 2c 20 74 68 65 20 64 61 74 61 62 61  zero, the databa
33a80 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f  se constraint co
33a90 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65  unter is increme
33aa0 6e 74 65 64 20 0a 2a 2a 20 28 64 65 66 65 72 72  nted .** (deferr
33ab0 65 64 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  ed foreign key c
33ac0 6f 6e 73 74 72 61 69 6e 74 73 29 2e 20 4f 74 68  onstraints). Oth
33ad0 65 72 77 69 73 65 2c 20 69 66 20 50 31 20 69 73  erwise, if P1 is
33ae0 20 7a 65 72 6f 2c 20 74 68 65 20 0a 2a 2a 20 73   zero, the .** s
33af0 74 61 74 65 6d 65 6e 74 20 63 6f 75 6e 74 65 72  tatement counter
33b00 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
33b10 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69  (immediate forei
33b20 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
33b30 74 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ts)..*/.case OP_
33b40 46 6b 43 6f 75 6e 74 65 72 3a 20 7b 0a 20 20 69  FkCounter: {.  i
33b50 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  f( db->flags & S
33b60 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 29  QLITE_DeferFKs )
33b70 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72  {.    db->nDefer
33b80 72 65 64 49 6d 6d 43 6f 6e 73 20 2b 3d 20 70 4f  redImmCons += pO
33b90 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 20 69  p->p2;.  }else i
33ba0 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20  f( pOp->p1 ){.  
33bb0 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43    db->nDeferredC
33bc0 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a  ons += pOp->p2;.
33bd0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e    }else{.    p->
33be0 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 20 2b 3d  nFkConstraint +=
33bf0 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 0a 20 20   pOp->p2;.  }.  
33c00 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
33c10 6f 64 65 3a 20 46 6b 49 66 5a 65 72 6f 20 50 31  ode: FkIfZero P1
33c20 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
33c30 6f 70 73 69 73 3a 20 69 66 20 66 6b 63 74 72 5b  opsis: if fkctr[
33c40 50 31 5d 3d 3d 30 20 67 6f 74 6f 20 50 32 0a 2a  P1]==0 goto P2.*
33c50 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
33c60 20 74 65 73 74 73 20 69 66 20 61 20 66 6f 72 65   tests if a fore
33c70 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
33c80 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20 63 75  nt-counter is cu
33c90 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2a  rrently zero..**
33ca0 20 49 66 20 73 6f 2c 20 6a 75 6d 70 20 74 6f 20   If so, jump to 
33cb0 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20  instruction P2. 
33cc0 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20  Otherwise, fall 
33cd0 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
33ce0 65 78 74 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74  ext .** instruct
33cf0 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31  ion..**.** If P1
33d00 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
33d10 65 6e 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  en the jump is t
33d20 61 6b 65 6e 20 69 66 20 74 68 65 20 64 61 74 61  aken if the data
33d30 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 2d  base constraint-
33d40 63 6f 75 6e 74 65 72 0a 2a 2a 20 69 73 20 7a 65  counter.** is ze
33d50 72 6f 20 28 74 68 65 20 6f 6e 65 20 74 68 61 74  ro (the one that
33d60 20 63 6f 75 6e 74 73 20 64 65 66 65 72 72 65 64   counts deferred
33d70 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
33d80 61 74 69 6f 6e 73 29 2e 20 49 66 20 50 31 20 69  ations). If P1 i
33d90 73 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68 65 20 6a  s.** zero, the j
33da0 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20  ump is taken if 
33db0 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f  the statement co
33dc0 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72  nstraint-counter
33dd0 20 69 73 20 7a 65 72 6f 0a 2a 2a 20 28 69 6d 6d   is zero.** (imm
33de0 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b  ediate foreign k
33df0 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  ey constraint vi
33e00 6f 6c 61 74 69 6f 6e 73 29 2e 0a 2a 2f 0a 63 61  olations)..*/.ca
33e10 73 65 20 4f 50 5f 46 6b 49 66 5a 65 72 6f 3a 20  se OP_FkIfZero: 
33e20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  {         /* jum
33e30 70 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e  p */.  if( pOp->
33e40 70 31 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72  p1 ){.    VdbeBr
33e50 61 6e 63 68 54 61 6b 65 6e 28 64 62 2d 3e 6e 44  anchTaken(db->nD
33e60 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26  eferredCons==0 &
33e70 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  & db->nDeferredI
33e80 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20  mmCons==0, 2);. 
33e90 20 20 20 69 66 28 20 64 62 2d 3e 6e 44 65 66 65     if( db->nDefe
33ea0 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64  rredCons==0 && d
33eb0 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
33ec0 6f 6e 73 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75  ons==0 ) goto ju
33ed0 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73  mp_to_p2;.  }els
33ee0 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  e{.    VdbeBranc
33ef0 68 54 61 6b 65 6e 28 70 2d 3e 6e 46 6b 43 6f 6e  hTaken(p->nFkCon
33f00 73 74 72 61 69 6e 74 3d 3d 30 20 26 26 20 64 62  straint==0 && db
33f10 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
33f20 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69  ns==0, 2);.    i
33f30 66 28 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61  f( p->nFkConstra
33f40 69 6e 74 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44  int==0 && db->nD
33f50 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d  eferredImmCons==
33f60 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  0 ) goto jump_to
33f70 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  _p2;.  }.  break
33f80 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69  ;.}.#endif /* #i
33f90 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
33fa0 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 2a 2f  T_FOREIGN_KEY */
33fb0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
33fc0 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d  _OMIT_AUTOINCREM
33fd0 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  ENT./* Opcode: M
33fe0 65 6d 4d 61 78 20 50 31 20 50 32 20 2a 20 2a 20  emMax P1 P2 * * 
33ff0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
34000 5b 50 31 5d 3d 6d 61 78 28 72 5b 50 31 5d 2c 72  [P1]=max(r[P1],r
34010 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 50 31 20 69  [P2]).**.** P1 i
34020 73 20 61 20 72 65 67 69 73 74 65 72 20 69 6e 20  s a register in 
34030 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f  the root frame o
34040 66 20 74 68 69 73 20 56 4d 20 28 74 68 65 20 72  f this VM (the r
34050 6f 6f 74 20 66 72 61 6d 65 20 69 73 0a 2a 2a 20  oot frame is.** 
34060 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 74  different from t
34070 68 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65  he current frame
34080 20 69 66 20 74 68 69 73 20 69 6e 73 74 72 75 63   if this instruc
34090 74 69 6f 6e 20 69 73 20 62 65 69 6e 67 20 65 78  tion is being ex
340a0 65 63 75 74 65 64 0a 2a 2a 20 77 69 74 68 69 6e  ecuted.** within
340b0 20 61 20 73 75 62 2d 70 72 6f 67 72 61 6d 29 2e   a sub-program).
340c0 20 53 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f   Set the value o
340d0 66 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  f register P1 to
340e0 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20   the maximum of 
340f0 0a 2a 2a 20 69 74 73 20 63 75 72 72 65 6e 74 20  .** its current 
34100 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20 76 61  value and the va
34110 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
34120 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  P2..**.** This i
34130 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 72 6f 77  nstruction throw
34140 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68  s an error if th
34150 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 73  e memory cell is
34160 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79 0a 2a   not initially.*
34170 2a 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f  * an integer..*/
34180 0a 63 61 73 65 20 4f 50 5f 4d 65 6d 4d 61 78 3a  .case OP_MemMax:
34190 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 32   {        /* in2
341a0 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20   */.  VdbeFrame 
341b0 2a 70 46 72 61 6d 65 3b 0a 20 20 69 66 28 20 70  *pFrame;.  if( p
341c0 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20  ->pFrame ){.    
341d0 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46  for(pFrame=p->pF
341e0 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50  rame; pFrame->pP
341f0 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46  arent; pFrame=pF
34200 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a  rame->pParent);.
34210 20 20 20 20 70 49 6e 31 20 3d 20 26 70 46 72 61      pIn1 = &pFra
34220 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  me->aMem[pOp->p1
34230 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  ];.  }else{.    
34240 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
34250 2d 3e 70 31 5d 3b 0a 20 20 7d 0a 20 20 61 73 73  ->p1];.  }.  ass
34260 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
34270 70 49 6e 31 29 20 29 3b 0a 20 20 73 71 6c 69 74  pIn1) );.  sqlit
34280 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
34290 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e  ify(pIn1);.  pIn
342a0 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
342b0 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  2];.  sqlite3Vdb
342c0 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
342d0 49 6e 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31  In2);.  if( pIn1
342e0 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69 29  ->u.i<pIn2->u.i)
342f0 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20  {.    pIn1->u.i 
34300 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d  = pIn2->u.i;.  }
34310 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
34320 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
34330 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  T_AUTOINCREMENT 
34340 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  */../* Opcode: I
34350 66 50 6f 73 20 50 31 20 50 32 20 50 33 20 2a 20  fPos P1 P2 P3 * 
34360 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
34370 66 20 72 5b 50 31 5d 3e 30 20 74 68 65 6e 20 72  f r[P1]>0 then r
34380 5b 50 31 5d 2d 3d 50 33 2c 20 67 6f 74 6f 20 50  [P1]-=P3, goto P
34390 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  2.**.** Register
343a0 20 50 31 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e   P1 must contain
343b0 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 20   an integer..** 
343c0 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  If the value of 
343d0 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 31  register P1 is 1
343e0 20 6f 72 20 67 72 65 61 74 65 72 2c 20 73 75 62   or greater, sub
343f0 74 72 61 63 74 20 50 33 20 66 72 6f 6d 20 74 68  tract P3 from th
34400 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20 50 31  e.** value in P1
34410 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 50 32 2e   and jump to P2.
34420 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 69 6e  .**.** If the in
34430 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 72  itial value of r
34440 65 67 69 73 74 65 72 20 50 31 20 69 73 20 6c 65  egister P1 is le
34450 73 73 20 74 68 61 6e 20 31 2c 20 74 68 65 6e 20  ss than 1, then 
34460 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20  the.** value is 
34470 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 63 6f  unchanged and co
34480 6e 74 72 6f 6c 20 70 61 73 73 65 73 20 74 68 72  ntrol passes thr
34490 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
344a0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
344b0 0a 63 61 73 65 20 4f 50 5f 49 66 50 6f 73 3a 20  .case OP_IfPos: 
344c0 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
344d0 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
344e0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
344f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
34500 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20  ->flags&MEM_Int 
34510 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  );.  VdbeBranchT
34520 61 6b 65 6e 28 20 70 49 6e 31 2d 3e 75 2e 69 3e  aken( pIn1->u.i>
34530 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e  0, 2);.  if( pIn
34540 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20 20 20 20  1->u.i>0 ){.    
34550 70 49 6e 31 2d 3e 75 2e 69 20 2d 3d 20 70 4f 70  pIn1->u.i -= pOp
34560 2d 3e 70 33 3b 0a 20 20 20 20 67 6f 74 6f 20 6a  ->p3;.    goto j
34570 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20  ump_to_p2;.  }. 
34580 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
34590 63 6f 64 65 3a 20 4f 66 66 73 65 74 4c 69 6d 69  code: OffsetLimi
345a0 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
345b0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
345c0 5b 50 31 5d 3e 30 20 74 68 65 6e 20 72 5b 50 32  [P1]>0 then r[P2
345d0 5d 3d 72 5b 50 31 5d 2b 6d 61 78 28 30 2c 72 5b  ]=r[P1]+max(0,r[
345e0 50 33 5d 29 20 65 6c 73 65 20 72 5b 50 32 5d 3d  P3]) else r[P2]=
345f0 28 2d 31 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  (-1).**.** This 
34600 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20  opcode performs 
34610 61 20 63 6f 6d 6d 6f 6e 6c 79 20 75 73 65 64 20  a commonly used 
34620 63 6f 6d 70 75 74 61 74 69 6f 6e 20 61 73 73 6f  computation asso
34630 63 69 61 74 65 64 20 77 69 74 68 0a 2a 2a 20 4c  ciated with.** L
34640 49 4d 49 54 20 61 6e 64 20 4f 46 46 53 45 54 20  IMIT and OFFSET 
34650 70 72 6f 63 65 73 73 2e 20 20 72 5b 50 31 5d 20  process.  r[P1] 
34660 68 6f 6c 64 73 20 74 68 65 20 6c 69 6d 69 74 20  holds the limit 
34670 63 6f 75 6e 74 65 72 2e 20 20 72 5b 50 33 5d 0a  counter.  r[P3].
34680 2a 2a 20 68 6f 6c 64 73 20 74 68 65 20 6f 66 66  ** holds the off
34690 73 65 74 20 63 6f 75 6e 74 65 72 2e 20 20 54 68  set counter.  Th
346a0 65 20 6f 70 63 6f 64 65 20 63 6f 6d 70 75 74 65  e opcode compute
346b0 73 20 74 68 65 20 63 6f 6d 62 69 6e 65 64 20 76  s the combined v
346c0 61 6c 75 65 0a 2a 2a 20 6f 66 20 74 68 65 20 4c  alue.** of the L
346d0 49 4d 49 54 20 61 6e 64 20 4f 46 46 53 45 54 20  IMIT and OFFSET 
346e0 61 6e 64 20 73 74 6f 72 65 73 20 74 68 61 74 20  and stores that 
346f0 76 61 6c 75 65 20 69 6e 20 72 5b 50 32 5d 2e 20  value in r[P2]. 
34700 20 54 68 65 20 72 5b 50 32 5d 0a 2a 2a 20 76 61   The r[P2].** va
34710 6c 75 65 20 63 6f 6d 70 75 74 65 64 20 69 73 20  lue computed is 
34720 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72  the total number
34730 20 6f 66 20 72 6f 77 73 20 74 68 61 74 20 77 69   of rows that wi
34740 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65 0a 2a 2a  ll need to be.**
34750 20 76 69 73 69 74 65 64 20 69 6e 20 6f 72 64 65   visited in orde
34760 72 20 74 6f 20 63 6f 6d 70 6c 65 74 65 20 74 68  r to complete th
34770 65 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49  e query..**.** I
34780 66 20 72 5b 50 33 5d 20 69 73 20 7a 65 72 6f 20  f r[P3] is zero 
34790 6f 72 20 6e 65 67 61 74 69 76 65 2c 20 74 68 61  or negative, tha
347a0 74 20 6d 65 61 6e 73 20 74 68 65 72 65 20 69 73  t means there is
347b0 20 6e 6f 20 4f 46 46 53 45 54 0a 2a 2a 20 61 6e   no OFFSET.** an
347c0 64 20 72 5b 50 32 5d 20 69 73 20 73 65 74 20 74  d r[P2] is set t
347d0 6f 20 62 65 20 74 68 65 20 76 61 6c 75 65 20 6f  o be the value o
347e0 66 20 74 68 65 20 4c 49 4d 49 54 2c 20 72 5b 50  f the LIMIT, r[P
347f0 31 5d 2e 0a 2a 2a 0a 2a 2a 20 69 66 20 72 5b 50  1]..**.** if r[P
34800 31 5d 20 69 73 20 7a 65 72 6f 20 6f 72 20 6e 65  1] is zero or ne
34810 67 61 74 69 76 65 2c 20 74 68 61 74 20 6d 65 61  gative, that mea
34820 6e 73 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4c  ns there is no L
34830 49 4d 49 54 0a 2a 2a 20 61 6e 64 20 72 5b 50 32  IMIT.** and r[P2
34840 5d 20 69 73 20 73 65 74 20 74 6f 20 2d 31 2e 20  ] is set to -1. 
34850 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65  .**.** Otherwise
34860 2c 20 72 5b 50 32 5d 20 69 73 20 73 65 74 20 74  , r[P2] is set t
34870 6f 20 74 68 65 20 73 75 6d 20 6f 66 20 72 5b 50  o the sum of r[P
34880 31 5d 20 61 6e 64 20 72 5b 50 33 5d 2e 0a 2a 2f  1] and r[P3]..*/
34890 0a 63 61 73 65 20 4f 50 5f 4f 66 66 73 65 74 4c  .case OP_OffsetL
348a0 69 6d 69 74 3a 20 7b 20 20 20 20 2f 2a 20 69 6e  imit: {    /* in
348b0 31 2c 20 6f 75 74 32 2c 20 69 6e 33 20 2a 2f 0a  1, out2, in3 */.
348c0 20 20 69 36 34 20 78 3b 0a 20 20 70 49 6e 31 20    i64 x;.  pIn1 
348d0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
348e0 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  ;.  pIn3 = &aMem
348f0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 4f 75  [pOp->p3];.  pOu
34900 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
34910 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73  se(p, pOp);.  as
34920 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
34930 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  s & MEM_Int );. 
34940 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
34950 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
34960 3b 0a 20 20 78 20 3d 20 70 49 6e 31 2d 3e 75 2e  ;.  x = pIn1->u.
34970 69 3b 0a 20 20 69 66 28 20 78 3c 3d 30 20 7c 7c  i;.  if( x<=0 ||
34980 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34   sqlite3AddInt64
34990 28 26 78 2c 20 70 49 6e 33 2d 3e 75 2e 69 3e 30  (&x, pIn3->u.i>0
349a0 3f 70 49 6e 33 2d 3e 75 2e 69 3a 30 29 20 29 7b  ?pIn3->u.i:0) ){
349b0 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 4c  .    /* If the L
349c0 49 4d 49 54 20 69 73 20 6c 65 73 73 20 74 68 61  IMIT is less tha
349d0 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 7a 65  n or equal to ze
349e0 72 6f 2c 20 6c 6f 6f 70 20 66 6f 72 65 76 65 72  ro, loop forever
349f0 2e 20 20 54 68 69 73 0a 20 20 20 20 2a 2a 20 69  .  This.    ** i
34a00 73 20 64 6f 63 75 6d 65 6e 74 65 64 2e 20 20 42  s documented.  B
34a10 75 74 20 61 6c 73 6f 2c 20 69 66 20 74 68 65 20  ut also, if the 
34a20 4c 49 4d 49 54 2b 4f 46 46 53 45 54 20 65 78 63  LIMIT+OFFSET exc
34a30 65 65 64 73 20 32 5e 36 33 20 74 68 65 6e 0a 20  eeds 2^63 then. 
34a40 20 20 20 2a 2a 20 61 6c 73 6f 20 6c 6f 6f 70 20     ** also loop 
34a50 66 6f 72 65 76 65 72 2e 20 20 54 68 69 73 20 69  forever.  This i
34a60 73 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 2e 20  s undocumented. 
34a70 20 49 6e 20 66 61 63 74 2c 20 6f 6e 65 20 63 6f   In fact, one co
34a80 75 6c 64 20 61 72 67 75 65 0a 20 20 20 20 2a 2a  uld argue.    **
34a90 20 74 68 61 74 20 74 68 65 20 6c 6f 6f 70 20 73   that the loop s
34aa0 68 6f 75 6c 64 20 74 65 72 6d 69 6e 61 74 65 2e  hould terminate.
34ab0 20 20 42 75 74 20 61 73 73 75 6d 69 6e 67 20 31    But assuming 1
34ac0 20 62 69 6c 6c 69 6f 6e 20 69 74 65 72 61 74 69   billion iterati
34ad0 6f 6e 73 0a 20 20 20 20 2a 2a 20 70 65 72 20 73  ons.    ** per s
34ae0 65 63 6f 6e 64 20 28 66 61 72 20 65 78 63 65 65  econd (far excee
34af0 64 69 6e 67 20 74 68 65 20 63 61 70 61 62 69 6c  ding the capabil
34b00 69 74 69 65 73 20 6f 66 20 61 6e 79 20 63 75 72  ities of any cur
34b10 72 65 6e 74 20 68 61 72 64 77 61 72 65 29 0a 20  rent hardware). 
34b20 20 20 20 2a 2a 20 69 74 20 77 6f 75 6c 64 20 74     ** it would t
34b30 61 6b 65 20 6e 65 61 72 6c 79 20 33 30 30 20 79  ake nearly 300 y
34b40 65 61 72 73 20 74 6f 20 61 63 74 75 61 6c 6c 79  ears to actually
34b50 20 72 65 61 63 68 20 74 68 65 20 6c 69 6d 69 74   reach the limit
34b60 2e 20 20 53 6f 0a 20 20 20 20 2a 2a 20 6c 6f 6f  .  So.    ** loo
34b70 70 69 6e 67 20 66 6f 72 65 76 65 72 20 69 73 20  ping forever is 
34b80 61 20 72 65 61 73 6f 6e 61 62 6c 65 20 61 70 70  a reasonable app
34b90 72 6f 78 69 6d 61 74 69 6f 6e 2e 20 2a 2f 0a 20  roximation. */. 
34ba0 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 2d     pOut->u.i = -
34bb0 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  1;.  }else{.    
34bc0 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 78 3b 0a 20  pOut->u.i = x;. 
34bd0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
34be0 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74 5a  * Opcode: IfNotZ
34bf0 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ero P1 P2 * * *.
34c00 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
34c10 72 5b 50 31 5d 21 3d 30 20 74 68 65 6e 20 72 5b  r[P1]!=0 then r[
34c20 50 31 5d 2d 2d 2c 20 67 6f 74 6f 20 50 32 0a 2a  P1]--, goto P2.*
34c30 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 31  *.** Register P1
34c40 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e   must contain an
34c50 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20 74 68   integer.  If th
34c60 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67  e content of reg
34c70 69 73 74 65 72 20 50 31 20 69 73 0a 2a 2a 20 69  ister P1 is.** i
34c80 6e 69 74 69 61 6c 6c 79 20 67 72 65 61 74 65 72  nitially greater
34c90 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e   than zero, then
34ca0 20 64 65 63 72 65 6d 65 6e 74 20 74 68 65 20 76   decrement the v
34cb0 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
34cc0 20 50 31 2e 0a 2a 2a 20 49 66 20 69 74 20 69 73   P1..** If it is
34cd0 20 6e 6f 6e 2d 7a 65 72 6f 20 28 6e 65 67 61 74   non-zero (negat
34ce0 69 76 65 20 6f 72 20 70 6f 73 69 74 69 76 65 29  ive or positive)
34cf0 20 61 6e 64 20 74 68 65 6e 20 61 6c 73 6f 20 6a   and then also j
34d00 75 6d 70 20 74 6f 20 50 32 2e 20 20 0a 2a 2a 20  ump to P2.  .** 
34d10 49 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69  If register P1 i
34d20 73 20 69 6e 69 74 69 61 6c 6c 79 20 7a 65 72 6f  s initially zero
34d30 2c 20 6c 65 61 76 65 20 69 74 20 75 6e 63 68 61  , leave it uncha
34d40 6e 67 65 64 20 61 6e 64 20 66 61 6c 6c 20 74 68  nged and fall th
34d50 72 6f 75 67 68 2e 0a 2a 2f 0a 63 61 73 65 20 4f  rough..*/.case O
34d60 50 5f 49 66 4e 6f 74 5a 65 72 6f 3a 20 7b 20 20  P_IfNotZero: {  
34d70 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
34d80 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
34d90 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
34da0 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
34db0 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a  lags&MEM_Int );.
34dc0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
34dd0 6e 28 70 49 6e 31 2d 3e 75 2e 69 3c 30 2c 20 32  n(pIn1->u.i<0, 2
34de0 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75  );.  if( pIn1->u
34df0 2e 69 20 29 7b 0a 20 20 20 20 20 69 66 28 20 70  .i ){.     if( p
34e00 49 6e 31 2d 3e 75 2e 69 3e 30 20 29 20 70 49 6e  In1->u.i>0 ) pIn
34e10 31 2d 3e 75 2e 69 2d 2d 3b 0a 20 20 20 20 20 67  1->u.i--;.     g
34e20 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
34e30 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
34e40 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 63 72 4a  /* Opcode: DecrJ
34e50 75 6d 70 5a 65 72 6f 20 50 31 20 50 32 20 2a 20  umpZero P1 P2 * 
34e60 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
34e70 20 69 66 20 28 2d 2d 72 5b 50 31 5d 29 3d 3d 30   if (--r[P1])==0
34e80 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52   goto P2.**.** R
34e90 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74 20  egister P1 must 
34ea0 68 6f 6c 64 20 61 6e 20 69 6e 74 65 67 65 72 2e  hold an integer.
34eb0 20 20 44 65 63 72 65 6d 65 6e 74 20 74 68 65 20    Decrement the 
34ec0 76 61 6c 75 65 20 69 6e 20 50 31 0a 2a 2a 20 61  value in P1.** a
34ed0 6e 64 20 6a 75 6d 70 20 74 6f 20 50 32 20 69 66  nd jump to P2 if
34ee0 20 74 68 65 20 6e 65 77 20 76 61 6c 75 65 20 69   the new value i
34ef0 73 20 65 78 61 63 74 6c 79 20 7a 65 72 6f 2e 0a  s exactly zero..
34f00 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 63 72 4a  */.case OP_DecrJ
34f10 75 6d 70 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20  umpZero: {      
34f20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
34f30 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
34f40 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
34f50 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d  t( pIn1->flags&M
34f60 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20  EM_Int );.  if( 
34f70 70 49 6e 31 2d 3e 75 2e 69 3e 53 4d 41 4c 4c 45  pIn1->u.i>SMALLE
34f80 53 54 5f 49 4e 54 36 34 20 29 20 70 49 6e 31 2d  ST_INT64 ) pIn1-
34f90 3e 75 2e 69 2d 2d 3b 0a 20 20 56 64 62 65 42 72  >u.i--;.  VdbeBr
34fa0 61 6e 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e  anchTaken(pIn1->
34fb0 75 2e 69 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66  u.i==0, 2);.  if
34fc0 28 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29  ( pIn1->u.i==0 )
34fd0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
34fe0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f  ;.  break;.}.../
34ff0 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 53 74 65  * Opcode: AggSte
35000 70 20 2a 20 50 32 20 50 33 20 50 34 20 50 35 0a  p * P2 P3 P4 P5.
35010 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63  ** Synopsis: acc
35020 75 6d 3d 72 5b 50 33 5d 20 73 74 65 70 28 72 5b  um=r[P3] step(r[
35030 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78  P2@P5]).**.** Ex
35040 65 63 75 74 65 20 74 68 65 20 78 53 74 65 70 20  ecute the xStep 
35050 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20  function for an 
35060 61 67 67 72 65 67 61 74 65 2e 0a 2a 2a 20 54 68  aggregate..** Th
35070 65 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50  e function has P
35080 35 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 50 34  5 arguments.  P4
35090 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
350a0 20 74 68 65 20 0a 2a 2a 20 46 75 6e 63 44 65 66   the .** FuncDef
350b0 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20   structure that 
350c0 73 70 65 63 69 66 69 65 73 20 74 68 65 20 66 75  specifies the fu
350d0 6e 63 74 69 6f 6e 2e 20 20 52 65 67 69 73 74 65  nction.  Registe
350e0 72 20 50 33 20 69 73 20 74 68 65 0a 2a 2a 20 61  r P3 is the.** a
350f0 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a  ccumulator..**.*
35100 2a 20 54 68 65 20 50 35 20 61 72 67 75 6d 65 6e  * The P5 argumen
35110 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66 72 6f  ts are taken fro
35120 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  m register P2 an
35130 64 20 69 74 73 0a 2a 2a 20 73 75 63 63 65 73 73  d its.** success
35140 6f 72 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ors..*/./* Opcod
35150 65 3a 20 41 67 67 49 6e 76 65 72 73 65 20 2a 20  e: AggInverse * 
35160 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
35170 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d 72  ynopsis: accum=r
35180 5b 50 33 5d 20 69 6e 76 65 72 73 65 28 72 5b 50  [P3] inverse(r[P
35190 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65  2@P5]).**.** Exe
351a0 63 75 74 65 20 74 68 65 20 78 49 6e 76 65 72 73  cute the xInvers
351b0 65 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61  e function for a
351c0 6e 20 61 67 67 72 65 67 61 74 65 2e 0a 2a 2a 20  n aggregate..** 
351d0 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 68 61 73  The function has
351e0 20 50 35 20 61 72 67 75 6d 65 6e 74 73 2e 20 20   P5 arguments.  
351f0 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
35200 74 6f 20 74 68 65 20 0a 2a 2a 20 46 75 6e 63 44  to the .** FuncD
35210 65 66 20 73 74 72 75 63 74 75 72 65 20 74 68 61  ef structure tha
35220 74 20 73 70 65 63 69 66 69 65 73 20 74 68 65 20  t specifies the 
35230 66 75 6e 63 74 69 6f 6e 2e 20 20 52 65 67 69 73  function.  Regis
35240 74 65 72 20 50 33 20 69 73 20 74 68 65 0a 2a 2a  ter P3 is the.**
35250 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a   accumulator..**
35260 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75 6d  .** The P5 argum
35270 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66  ents are taken f
35280 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20  rom register P2 
35290 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63 65  and its.** succe
352a0 73 73 6f 72 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  ssors..*/./* Opc
352b0 6f 64 65 3a 20 41 67 67 53 74 65 70 31 20 50 31  ode: AggStep1 P1
352c0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
352d0 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d  Synopsis: accum=
352e0 72 5b 50 33 5d 20 73 74 65 70 28 72 5b 50 32 40  r[P3] step(r[P2@
352f0 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75  P5]).**.** Execu
35300 74 65 20 74 68 65 20 78 53 74 65 70 20 28 69 66  te the xStep (if
35310 20 50 31 3d 3d 30 29 20 6f 72 20 78 49 6e 76 65   P1==0) or xInve
35320 72 73 65 20 28 69 66 20 50 31 21 3d 30 29 20 66  rse (if P1!=0) f
35330 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 0a 2a  unction for an.*
35340 2a 20 61 67 67 72 65 67 61 74 65 2e 20 20 54 68  * aggregate.  Th
35350 65 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50  e function has P
35360 35 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 50 34  5 arguments.  P4
35370 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
35380 20 74 68 65 20 0a 2a 2a 20 46 75 6e 63 44 65 66   the .** FuncDef
35390 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20   structure that 
353a0 73 70 65 63 69 66 69 65 73 20 74 68 65 20 66 75  specifies the fu
353b0 6e 63 74 69 6f 6e 2e 20 20 52 65 67 69 73 74 65  nction.  Registe
353c0 72 20 50 33 20 69 73 20 74 68 65 0a 2a 2a 20 61  r P3 is the.** a
353d0 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a  ccumulator..**.*
353e0 2a 20 54 68 65 20 50 35 20 61 72 67 75 6d 65 6e  * The P5 argumen
353f0 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66 72 6f  ts are taken fro
35400 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  m register P2 an
35410 64 20 69 74 73 0a 2a 2a 20 73 75 63 63 65 73 73  d its.** success
35420 6f 72 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ors..**.** This 
35430 6f 70 63 6f 64 65 20 69 73 20 69 6e 69 74 69 61  opcode is initia
35440 6c 6c 79 20 63 6f 64 65 64 20 61 73 20 4f 50 5f  lly coded as OP_
35450 41 67 67 53 74 65 70 30 2e 20 20 4f 6e 20 66 69  AggStep0.  On fi
35460 72 73 74 20 65 76 61 6c 75 61 74 69 6f 6e 2c 0a  rst evaluation,.
35470 2a 2a 20 74 68 65 20 46 75 6e 63 44 65 66 20 73  ** the FuncDef s
35480 74 6f 72 65 64 20 69 6e 20 50 34 20 69 73 20 63  tored in P4 is c
35490 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e  onverted into an
354a0 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
354b0 20 61 6e 64 0a 2a 2a 20 74 68 65 20 6f 70 63 6f   and.** the opco
354c0 64 65 20 69 73 20 63 68 61 6e 67 65 64 2e 20 20  de is changed.  
354d0 49 6e 20 74 68 69 73 20 77 61 79 2c 20 74 68 65  In this way, the
354e0 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
354f0 6f 66 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  of the.** sqlite
35500 33 5f 63 6f 6e 74 65 78 74 20 6f 6e 6c 79 20 68  3_context only h
35510 61 70 70 65 6e 73 20 6f 6e 63 65 2c 20 69 6e 73  appens once, ins
35520 74 65 61 64 20 6f 66 20 6f 6e 20 65 61 63 68 20  tead of on each 
35530 63 61 6c 6c 20 74 6f 20 74 68 65 0a 2a 2a 20 73  call to the.** s
35540 74 65 70 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f  tep function..*/
35550 0a 63 61 73 65 20 4f 50 5f 41 67 67 49 6e 76 65  .case OP_AggInve
35560 72 73 65 3a 0a 63 61 73 65 20 4f 50 5f 41 67 67  rse:.case OP_Agg
35570 53 74 65 70 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b  Step: {.  int n;
35580 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
35590 78 74 20 2a 70 43 74 78 3b 0a 0a 20 20 61 73 73  xt *pCtx;..  ass
355a0 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
355b0 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20 29 3b 0a  ==P4_FUNCDEF );.
355c0 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20    n = pOp->p5;. 
355d0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
355e0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28  >0 && pOp->p3<=(
355f0 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
35600 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 61 73 73  Cursor) );.  ass
35610 65 72 74 28 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f  ert( n==0 || (pO
35620 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p2>0 && pOp->
35630 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  p2+n<=(p->nMem+1
35640 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31   - p->nCursor)+1
35650 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
35660 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32 20 7c  Op->p3<pOp->p2 |
35670 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e  | pOp->p3>=pOp->
35680 70 32 2b 6e 20 29 3b 0a 20 20 70 43 74 78 20 3d  p2+n );.  pCtx =
35690 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
356a0 52 61 77 4e 4e 28 64 62 2c 20 6e 2a 73 69 7a 65  RawNN(db, n*size
356b0 6f 66 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  of(sqlite3_value
356c0 2a 29 20 2b 0a 20 20 20 20 20 20 20 20 20 20 20  *) +.           
356d0 20 20 20 20 28 73 69 7a 65 6f 66 28 70 43 74 78      (sizeof(pCtx
356e0 5b 30 5d 29 20 2b 20 73 69 7a 65 6f 66 28 4d 65  [0]) + sizeof(Me
356f0 6d 29 20 2d 20 73 69 7a 65 6f 66 28 73 71 6c 69  m) - sizeof(sqli
35700 74 65 33 5f 76 61 6c 75 65 2a 29 29 29 3b 0a 20  te3_value*)));. 
35710 20 69 66 28 20 70 43 74 78 3d 3d 30 20 29 20 67   if( pCtx==0 ) g
35720 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
35730 74 78 2d 3e 70 4d 65 6d 20 3d 20 30 3b 0a 20 20  tx->pMem = 0;.  
35740 70 43 74 78 2d 3e 70 4f 75 74 20 3d 20 28 4d 65  pCtx->pOut = (Me
35750 6d 2a 29 26 28 70 43 74 78 2d 3e 61 72 67 76 5b  m*)&(pCtx->argv[
35760 6e 5d 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n]);.  sqlite3Vd
35770 62 65 4d 65 6d 49 6e 69 74 28 70 43 74 78 2d 3e  beMemInit(pCtx->
35780 70 4f 75 74 2c 20 64 62 2c 20 4d 45 4d 5f 4e 75  pOut, db, MEM_Nu
35790 6c 6c 29 3b 0a 20 20 70 43 74 78 2d 3e 70 46 75  ll);.  pCtx->pFu
357a0 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75  nc = pOp->p4.pFu
357b0 6e 63 3b 0a 20 20 70 43 74 78 2d 3e 69 4f 70 20  nc;.  pCtx->iOp 
357c0 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f  = (int)(pOp - aO
357d0 70 29 3b 0a 20 20 70 43 74 78 2d 3e 70 56 64 62  p);.  pCtx->pVdb
357e0 65 20 3d 20 70 3b 0a 20 20 70 43 74 78 2d 3e 73  e = p;.  pCtx->s
357f0 6b 69 70 46 6c 61 67 20 3d 20 30 3b 0a 20 20 70  kipFlag = 0;.  p
35800 43 74 78 2d 3e 69 73 45 72 72 6f 72 20 3d 20 30  Ctx->isError = 0
35810 3b 0a 20 20 70 43 74 78 2d 3e 61 72 67 63 20 3d  ;.  pCtx->argc =
35820 20 6e 3b 0a 20 20 70 4f 70 2d 3e 70 34 74 79 70   n;.  pOp->p4typ
35830 65 20 3d 20 50 34 5f 46 55 4e 43 43 54 58 3b 0a  e = P4_FUNCCTX;.
35840 20 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78 20 3d    pOp->p4.pCtx =
35850 20 70 43 74 78 3b 0a 0a 20 20 2f 2a 20 4f 50 5f   pCtx;..  /* OP_
35860 41 67 67 49 6e 76 65 72 73 65 20 6d 75 73 74 20  AggInverse must 
35870 68 61 76 65 20 50 31 3d 3d 31 20 61 6e 64 20 4f  have P1==1 and O
35880 50 5f 41 67 67 53 74 65 70 20 6d 75 73 74 20 68  P_AggStep must h
35890 61 76 65 20 50 31 3d 3d 30 20 2a 2f 0a 20 20 61  ave P1==0 */.  a
358a0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3d 3d  ssert( pOp->p1==
358b0 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50  (pOp->opcode==OP
358c0 5f 41 67 67 49 6e 76 65 72 73 65 29 20 29 3b 0a  _AggInverse) );.
358d0 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d  .  pOp->opcode =
358e0 20 4f 50 5f 41 67 67 53 74 65 70 31 3b 0a 20 20   OP_AggStep1;.  
358f0 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
35900 69 6e 74 6f 20 4f 50 5f 41 67 67 53 74 65 70 20  into OP_AggStep 
35910 2a 2f 0a 7d 0a 63 61 73 65 20 4f 50 5f 41 67 67  */.}.case OP_Agg
35920 53 74 65 70 31 3a 20 7b 0a 20 20 69 6e 74 20 69  Step1: {.  int i
35930 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ;.  sqlite3_cont
35940 65 78 74 20 2a 70 43 74 78 3b 0a 20 20 4d 65 6d  ext *pCtx;.  Mem
35950 20 2a 70 4d 65 6d 3b 0a 0a 20 20 61 73 73 65 72   *pMem;..  asser
35960 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
35970 50 34 5f 46 55 4e 43 43 54 58 20 29 3b 0a 20 20  P4_FUNCCTX );.  
35980 70 43 74 78 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  pCtx = pOp->p4.p
35990 43 74 78 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 61  Ctx;.  pMem = &a
359a0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 0a 23  Mem[pOp->p3];..#
359b0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
359c0 55 47 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  UG.  if( pOp->p1
359d0 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20   ){.    /* This 
359e0 69 73 20 61 6e 20 4f 50 5f 41 67 67 49 6e 76 65  is an OP_AggInve
359f0 72 73 65 20 63 61 6c 6c 2e 20 20 56 65 72 69 66  rse call.  Verif
35a00 79 20 74 68 61 74 20 78 53 74 65 70 20 68 61 73  y that xStep has
35a10 20 61 6c 77 61 79 73 0a 20 20 20 20 2a 2a 20 62   always.    ** b
35a20 65 65 6e 20 63 61 6c 6c 65 64 20 61 74 20 6c 65  een called at le
35a30 61 73 74 20 6f 6e 63 65 20 70 72 69 6f 72 20 74  ast once prior t
35a40 6f 20 61 6e 79 20 78 49 6e 76 65 72 73 65 20 63  o any xInverse c
35a50 61 6c 6c 2e 20 2a 2f 0a 20 20 20 20 61 73 73 65  all. */.    asse
35a60 72 74 28 20 70 4d 65 6d 2d 3e 75 54 65 6d 70 3d  rt( pMem->uTemp=
35a70 3d 30 78 31 31 32 32 65 30 65 33 20 29 3b 0a 20  =0x1122e0e3 );. 
35a80 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54   }else{.    /* T
35a90 68 69 73 20 69 73 20 61 6e 20 4f 50 5f 41 67 67  his is an OP_Agg
35aa0 53 74 65 70 20 63 61 6c 6c 2e 20 20 4d 61 72 6b  Step call.  Mark
35ab0 20 69 74 20 61 73 20 73 75 63 68 2e 20 2a 2f 0a   it as such. */.
35ac0 20 20 20 20 70 4d 65 6d 2d 3e 75 54 65 6d 70 20      pMem->uTemp 
35ad0 3d 20 30 78 31 31 32 32 65 30 65 33 3b 0a 20 20  = 0x1122e0e3;.  
35ae0 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 49  }.#endif..  /* I
35af0 66 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  f this function 
35b00 69 73 20 69 6e 73 69 64 65 20 6f 66 20 61 20 74  is inside of a t
35b10 72 69 67 67 65 72 2c 20 74 68 65 20 72 65 67 69  rigger, the regi
35b20 73 74 65 72 20 61 72 72 61 79 20 69 6e 20 61 4d  ster array in aM
35b30 65 6d 5b 5d 0a 20 20 2a 2a 20 6d 69 67 68 74 20  em[].  ** might 
35b40 63 68 61 6e 67 65 20 66 72 6f 6d 20 6f 6e 65 20  change from one 
35b50 65 76 61 6c 75 61 74 69 6f 6e 20 74 6f 20 74 68  evaluation to th
35b60 65 20 6e 65 78 74 2e 20 20 54 68 65 20 6e 65 78  e next.  The nex
35b70 74 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 0a  t block of code.
35b80 20 20 2a 2a 20 63 68 65 63 6b 73 20 74 6f 20 73    ** checks to s
35b90 65 65 20 69 66 20 74 68 65 20 72 65 67 69 73 74  ee if the regist
35ba0 65 72 20 61 72 72 61 79 20 68 61 73 20 63 68 61  er array has cha
35bb0 6e 67 65 64 2c 20 61 6e 64 20 69 66 20 73 6f 20  nged, and if so 
35bc0 69 74 0a 20 20 2a 2a 20 72 65 69 6e 69 74 69 61  it.  ** reinitia
35bd0 6c 69 7a 65 73 20 74 68 65 20 72 65 6c 61 76 61  lizes the relava
35be0 6e 74 20 70 61 72 74 73 20 6f 66 20 74 68 65 20  nt parts of the 
35bf0 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
35c00 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 69 66 28 20  object */.  if( 
35c10 70 43 74 78 2d 3e 70 4d 65 6d 20 21 3d 20 70 4d  pCtx->pMem != pM
35c20 65 6d 20 29 7b 0a 20 20 20 20 70 43 74 78 2d 3e  em ){.    pCtx->
35c30 70 4d 65 6d 20 3d 20 70 4d 65 6d 3b 0a 20 20 20  pMem = pMem;.   
35c40 20 66 6f 72 28 69 3d 70 43 74 78 2d 3e 61 72 67   for(i=pCtx->arg
35c50 63 2d 31 3b 20 69 3e 3d 30 3b 20 69 2d 2d 29 20  c-1; i>=0; i--) 
35c60 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 20 3d 20  pCtx->argv[i] = 
35c70 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 2b 69 5d  &aMem[pOp->p2+i]
35c80 3b 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53 51  ;.  }..#ifdef SQ
35c90 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 66 6f 72  LITE_DEBUG.  for
35ca0 28 69 3d 30 3b 20 69 3c 70 43 74 78 2d 3e 61 72  (i=0; i<pCtx->ar
35cb0 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73  gc; i++){.    as
35cc0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
35cd0 28 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 29 20  (pCtx->argv[i]) 
35ce0 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
35cf0 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 69 2c  TRACE(pOp->p2+i,
35d00 20 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 29 3b   pCtx->argv[i]);
35d10 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 70  .  }.#endif..  p
35d20 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 61 73 73 65  Mem->n++;.  asse
35d30 72 74 28 20 70 43 74 78 2d 3e 70 4f 75 74 2d 3e  rt( pCtx->pOut->
35d40 66 6c 61 67 73 3d 3d 4d 45 4d 5f 4e 75 6c 6c 20  flags==MEM_Null 
35d50 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 74  );.  assert( pCt
35d60 78 2d 3e 69 73 45 72 72 6f 72 3d 3d 30 20 29 3b  x->isError==0 );
35d70 0a 20 20 61 73 73 65 72 74 28 20 70 43 74 78 2d  .  assert( pCtx-
35d80 3e 73 6b 69 70 46 6c 61 67 3d 3d 30 20 29 3b 0a  >skipFlag==0 );.
35d90 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
35da0 4d 49 54 5f 57 49 4e 44 4f 57 46 55 4e 43 0a 20  MIT_WINDOWFUNC. 
35db0 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a   if( pOp->p1 ){.
35dc0 20 20 20 20 28 70 43 74 78 2d 3e 70 46 75 6e 63      (pCtx->pFunc
35dd0 2d 3e 78 49 6e 76 65 72 73 65 29 28 70 43 74 78  ->xInverse)(pCtx
35de0 2c 70 43 74 78 2d 3e 61 72 67 63 2c 70 43 74 78  ,pCtx->argc,pCtx
35df0 2d 3e 61 72 67 76 29 3b 0a 20 20 7d 65 6c 73 65  ->argv);.  }else
35e00 0a 23 65 6e 64 69 66 0a 20 20 28 70 43 74 78 2d  .#endif.  (pCtx-
35e10 3e 70 46 75 6e 63 2d 3e 78 53 46 75 6e 63 29 28  >pFunc->xSFunc)(
35e20 70 43 74 78 2c 70 43 74 78 2d 3e 61 72 67 63 2c  pCtx,pCtx->argc,
35e30 70 43 74 78 2d 3e 61 72 67 76 29 3b 20 2f 2a 20  pCtx->argv); /* 
35e40 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32 33 32  IMP: R-24505-232
35e50 33 30 20 2a 2f 0a 0a 20 20 69 66 28 20 70 43 74  30 */..  if( pCt
35e60 78 2d 3e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20  x->isError ){.  
35e70 20 20 69 66 28 20 70 43 74 78 2d 3e 69 73 45 72    if( pCtx->isEr
35e80 72 6f 72 3e 30 20 29 7b 0a 20 20 20 20 20 20 73  ror>0 ){.      s
35e90 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28  qlite3VdbeError(
35ea0 70 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33  p, "%s", sqlite3
35eb0 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 43 74 78  _value_text(pCtx
35ec0 2d 3e 70 4f 75 74 29 29 3b 0a 20 20 20 20 20 20  ->pOut));.      
35ed0 72 63 20 3d 20 70 43 74 78 2d 3e 69 73 45 72 72  rc = pCtx->isErr
35ee0 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  or;.    }.    if
35ef0 28 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67  ( pCtx->skipFlag
35f00 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
35f10 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65  ( pOp[-1].opcode
35f20 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a  ==OP_CollSeq );.
35f30 20 20 20 20 20 20 69 20 3d 20 70 4f 70 5b 2d 31        i = pOp[-1
35f40 5d 2e 70 31 3b 0a 20 20 20 20 20 20 69 66 28 20  ].p1;.      if( 
35f50 69 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d  i ) sqlite3VdbeM
35f60 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d  emSetInt64(&aMem
35f70 5b 69 5d 2c 20 31 29 3b 0a 20 20 20 20 20 20 70  [i], 1);.      p
35f80 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67 20 3d 20  Ctx->skipFlag = 
35f90 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  0;.    }.    sql
35fa0 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
35fb0 73 65 28 70 43 74 78 2d 3e 70 4f 75 74 29 3b 0a  se(pCtx->pOut);.
35fc0 20 20 20 20 70 43 74 78 2d 3e 70 4f 75 74 2d 3e      pCtx->pOut->
35fd0 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
35fe0 3b 0a 20 20 20 20 70 43 74 78 2d 3e 69 73 45 72  ;.    pCtx->isEr
35ff0 72 6f 72 20 3d 20 30 3b 0a 20 20 20 20 69 66 28  ror = 0;.    if(
36000 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
36010 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
36020 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 43 74   }.  assert( pCt
36030 78 2d 3e 70 4f 75 74 2d 3e 66 6c 61 67 73 3d 3d  x->pOut->flags==
36040 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 61 73  MEM_Null );.  as
36050 73 65 72 74 28 20 70 43 74 78 2d 3e 73 6b 69 70  sert( pCtx->skip
36060 46 6c 61 67 3d 3d 30 20 29 3b 0a 20 20 62 72 65  Flag==0 );.  bre
36070 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
36080 3a 20 41 67 67 46 69 6e 61 6c 20 50 31 20 50 32  : AggFinal P1 P2
36090 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
360a0 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 31 5d  sis: accum=r[P1]
360b0 20 4e 3d 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69   N=P2.**.** P1 i
360c0 73 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63  s the memory loc
360d0 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 74 68  ation that is th
360e0 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 66 6f  e accumulator fo
360f0 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 0a 2a  r an aggregate.*
36100 2a 20 6f 72 20 77 69 6e 64 6f 77 20 66 75 6e 63  * or window func
36110 74 69 6f 6e 2e 20 20 45 78 65 63 75 74 65 20 74  tion.  Execute t
36120 68 65 20 66 69 6e 61 6c 69 7a 65 72 20 66 75 6e  he finalizer fun
36130 63 74 69 6f 6e 20 0a 2a 2a 20 66 6f 72 20 61 6e  ction .** for an
36140 20 61 67 67 72 65 67 61 74 65 20 61 6e 64 20 73   aggregate and s
36150 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
36160 69 6e 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20  in P1..**.** P2 
36170 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
36180 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20   arguments that 
36190 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f  the step functio
361a0 6e 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50  n takes and.** P
361b0 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
361c0 6f 20 74 68 65 20 46 75 6e 63 44 65 66 20 66 6f  o the FuncDef fo
361d0 72 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e  r this function.
361e0 20 20 54 68 65 20 50 32 0a 2a 2a 20 61 72 67 75    The P2.** argu
361f0 6d 65 6e 74 20 69 73 20 6e 6f 74 20 75 73 65 64  ment is not used
36200 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 2e   by this opcode.
36210 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 74 68 65    It is only the
36220 72 65 20 74 6f 20 64 69 73 61 6d 62 69 67 75 61  re to disambigua
36230 74 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20  te.** functions 
36240 74 68 61 74 20 63 61 6e 20 74 61 6b 65 20 76 61  that can take va
36250 72 79 69 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66  rying numbers of
36260 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 54 68 65   arguments.  The
36270 0a 2a 2a 20 50 34 20 61 72 67 75 6d 65 6e 74 20  .** P4 argument 
36280 69 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66  is only needed f
36290 6f 72 20 74 68 65 20 63 61 73 65 20 77 68 65 72  or the case wher
362a0 65 0a 2a 2a 20 74 68 65 20 73 74 65 70 20 66 75  e.** the step fu
362b0 6e 63 74 69 6f 6e 20 77 61 73 20 6e 6f 74 20 70  nction was not p
362c0 72 65 76 69 6f 75 73 6c 79 20 63 61 6c 6c 65 64  reviously called
362d0 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
362e0 41 67 67 56 61 6c 75 65 20 2a 20 50 32 20 50 33  AggValue * P2 P3
362f0 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
36300 73 3a 20 72 5b 50 33 5d 3d 76 61 6c 75 65 20 4e  s: r[P3]=value N
36310 3d 50 32 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65  =P2.**.** Invoke
36320 20 74 68 65 20 78 56 61 6c 75 65 28 29 20 66 75   the xValue() fu
36330 6e 63 74 69 6f 6e 20 61 6e 64 20 73 74 6f 72 65  nction and store
36340 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
36350 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a  egister P3..**.*
36360 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62  * P2 is the numb
36370 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
36380 74 68 61 74 20 74 68 65 20 73 74 65 70 20 66 75  that the step fu
36390 6e 63 74 69 6f 6e 20 74 61 6b 65 73 20 61 6e 64  nction takes and
363a0 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
363b0 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44  ter to the FuncD
363c0 65 66 20 66 6f 72 20 74 68 69 73 20 66 75 6e 63  ef for this func
363d0 74 69 6f 6e 2e 20 20 54 68 65 20 50 32 0a 2a 2a  tion.  The P2.**
363e0 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74   argument is not
363f0 20 75 73 65 64 20 62 79 20 74 68 69 73 20 6f 70   used by this op
36400 63 6f 64 65 2e 20 20 49 74 20 69 73 20 6f 6e 6c  code.  It is onl
36410 79 20 74 68 65 72 65 20 74 6f 20 64 69 73 61 6d  y there to disam
36420 62 69 67 75 61 74 65 0a 2a 2a 20 66 75 6e 63 74  biguate.** funct
36430 69 6f 6e 73 20 74 68 61 74 20 63 61 6e 20 74 61  ions that can ta
36440 6b 65 20 76 61 72 79 69 6e 67 20 6e 75 6d 62 65  ke varying numbe
36450 72 73 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e  rs of arguments.
36460 20 20 54 68 65 0a 2a 2a 20 50 34 20 61 72 67 75    The.** P4 argu
36470 6d 65 6e 74 20 69 73 20 6f 6e 6c 79 20 6e 65 65  ment is only nee
36480 64 65 64 20 66 6f 72 20 74 68 65 20 63 61 73 65  ded for the case
36490 20 77 68 65 72 65 0a 2a 2a 20 74 68 65 20 73 74   where.** the st
364a0 65 70 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20  ep function was 
364b0 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 63  not previously c
364c0 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  alled..*/.case O
364d0 50 5f 41 67 67 56 61 6c 75 65 3a 0a 63 61 73 65  P_AggValue:.case
364e0 20 4f 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b 0a   OP_AggFinal: {.
364f0 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61    Mem *pMem;.  a
36500 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
36510 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d   && pOp->p1<=(p-
36520 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
36530 72 73 6f 72 29 20 29 3b 0a 20 20 61 73 73 65 72  rsor) );.  asser
36540 74 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 7c 7c  t( pOp->p3==0 ||
36550 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
36560 5f 41 67 67 56 61 6c 75 65 20 29 3b 0a 20 20 70  _AggValue );.  p
36570 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
36580 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
36590 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 7e  (pMem->flags & ~
365a0 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67  (MEM_Null|MEM_Ag
365b0 67 29 29 3d 3d 30 20 29 3b 0a 23 69 66 6e 64 65  g))==0 );.#ifnde
365c0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49  f SQLITE_OMIT_WI
365d0 4e 44 4f 57 46 55 4e 43 0a 20 20 69 66 28 20 70  NDOWFUNC.  if( p
365e0 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 72 63  Op->p3 ){.    rc
365f0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
36600 6d 41 67 67 56 61 6c 75 65 28 70 4d 65 6d 2c 20  mAggValue(pMem, 
36610 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20  &aMem[pOp->p3], 
36620 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 29 3b 0a  pOp->p4.pFunc);.
36630 20 20 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d      pMem = &aMem
36640 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 7d 65 6c  [pOp->p3];.  }el
36650 73 65 0a 23 65 6e 64 69 66 0a 20 20 7b 0a 20 20  se.#endif.  {.  
36660 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
36670 62 65 4d 65 6d 46 69 6e 61 6c 69 7a 65 28 70 4d  beMemFinalize(pM
36680 65 6d 2c 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e  em, pOp->p4.pFun
36690 63 29 3b 0a 20 20 7d 0a 20 20 0a 20 20 69 66 28  c);.  }.  .  if(
366a0 20 72 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74   rc ){.    sqlit
366b0 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22  e3VdbeError(p, "
366c0 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  %s", sqlite3_val
366d0 75 65 5f 74 65 78 74 28 70 4d 65 6d 29 29 3b 0a  ue_text(pMem));.
366e0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
366f0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
36700 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  .  sqlite3VdbeCh
36710 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65  angeEncoding(pMe
36720 6d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  m, encoding);.  
36730 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
36740 49 5a 45 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28  IZE(pMem);.  if(
36750 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54   sqlite3VdbeMemT
36760 6f 6f 42 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20  ooBig(pMem) ){. 
36770 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
36780 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
36790 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
367a0 4f 4d 49 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f  OMIT_WAL./* Opco
367b0 64 65 3a 20 43 68 65 63 6b 70 6f 69 6e 74 20 50  de: Checkpoint P
367c0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
367d0 2a 20 43 68 65 63 6b 70 6f 69 6e 74 20 64 61 74  * Checkpoint dat
367e0 61 62 61 73 65 20 50 31 2e 20 54 68 69 73 20 69  abase P1. This i
367f0 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20 50 31 20  s a no-op if P1 
36800 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79  is not currently
36810 20 69 6e 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e   in.** WAL mode.
36820 20 50 61 72 61 6d 65 74 65 72 20 50 32 20 69 73   Parameter P2 is
36830 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 43   one of SQLITE_C
36840 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56  HECKPOINT_PASSIV
36850 45 2c 20 46 55 4c 4c 2c 0a 2a 2a 20 52 45 53 54  E, FULL,.** REST
36860 41 52 54 2c 20 6f 72 20 54 52 55 4e 43 41 54 45  ART, or TRUNCATE
36870 2e 20 20 57 72 69 74 65 20 31 20 6f 72 20 30 20  .  Write 1 or 0 
36880 69 6e 74 6f 20 6d 65 6d 5b 50 33 5d 20 69 66 20  into mem[P3] if 
36890 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 72  the checkpoint r
368a0 65 74 75 72 6e 73 0a 2a 2a 20 53 51 4c 49 54 45  eturns.** SQLITE
368b0 5f 42 55 53 59 20 6f 72 20 6e 6f 74 2c 20 72 65  _BUSY or not, re
368c0 73 70 65 63 74 69 76 65 6c 79 2e 20 20 57 72 69  spectively.  Wri
368d0 74 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  te the number of
368e0 20 70 61 67 65 73 20 69 6e 20 74 68 65 0a 2a 2a   pages in the.**
368f0 20 57 41 4c 20 61 66 74 65 72 20 74 68 65 20 63   WAL after the c
36900 68 65 63 6b 70 6f 69 6e 74 20 69 6e 74 6f 20 6d  heckpoint into m
36910 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 20 74 68 65  em[P3+1] and the
36920 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
36930 0a 2a 2a 20 69 6e 20 74 68 65 20 57 41 4c 20 74  .** in the WAL t
36940 68 61 74 20 68 61 76 65 20 62 65 65 6e 20 63 68  hat have been ch
36950 65 63 6b 70 6f 69 6e 74 65 64 20 61 66 74 65 72  eckpointed after
36960 20 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 0a   the checkpoint.
36970 2a 2a 20 63 6f 6d 70 6c 65 74 65 73 20 69 6e 74  ** completes int
36980 6f 20 6d 65 6d 5b 50 33 2b 32 5d 2e 20 20 48 6f  o mem[P3+2].  Ho
36990 77 65 76 65 72 20 6f 6e 20 61 6e 20 65 72 72 6f  wever on an erro
369a0 72 2c 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64  r, mem[P3+1] and
369b0 0a 2a 2a 20 6d 65 6d 5b 50 33 2b 32 5d 20 61 72  .** mem[P3+2] ar
369c0 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f  e initialized to
369d0 20 2d 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   -1..*/.case OP_
369e0 43 68 65 63 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20  Checkpoint: {.  
369f0 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20  int i;          
36a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36a10 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20  /* Loop counter 
36a20 2a 2f 0a 20 20 69 6e 74 20 61 52 65 73 5b 33 5d  */.  int aRes[3]
36a30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
36a40 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 73 20       /* Results 
36a50 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20  */.  Mem *pMem; 
36a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36a70 20 20 20 20 20 2f 2a 20 57 72 69 74 65 20 72 65       /* Write re
36a80 73 75 6c 74 73 20 68 65 72 65 20 2a 2f 0a 0a 20  sults here */.. 
36a90 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
36aa0 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 52 65  Only==0 );.  aRe
36ab0 73 5b 30 5d 20 3d 20 30 3b 0a 20 20 61 52 65 73  s[0] = 0;.  aRes
36ac0 5b 31 5d 20 3d 20 61 52 65 73 5b 32 5d 20 3d 20  [1] = aRes[2] = 
36ad0 2d 31 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  -1;.  assert( pO
36ae0 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48  p->p2==SQLITE_CH
36af0 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45  ECKPOINT_PASSIVE
36b00 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e  .       || pOp->
36b10 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b  p2==SQLITE_CHECK
36b20 50 4f 49 4e 54 5f 46 55 4c 4c 0a 20 20 20 20 20  POINT_FULL.     
36b30 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51    || pOp->p2==SQ
36b40 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f  LITE_CHECKPOINT_
36b50 52 45 53 54 41 52 54 0a 20 20 20 20 20 20 20 7c  RESTART.       |
36b60 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  | pOp->p2==SQLIT
36b70 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 54 52 55  E_CHECKPOINT_TRU
36b80 4e 43 41 54 45 0a 20 20 29 3b 0a 20 20 72 63 20  NCATE.  );.  rc 
36b90 3d 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f  = sqlite3Checkpo
36ba0 69 6e 74 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  int(db, pOp->p1,
36bb0 20 70 4f 70 2d 3e 70 32 2c 20 26 61 52 65 73 5b   pOp->p2, &aRes[
36bc0 31 5d 2c 20 26 61 52 65 73 5b 32 5d 29 3b 0a 20  1], &aRes[2]);. 
36bd0 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 69   if( rc ){.    i
36be0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 42 55  f( rc!=SQLITE_BU
36bf0 53 59 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  SY ) goto abort_
36c00 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
36c10 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
36c20 3b 0a 20 20 20 20 61 52 65 73 5b 30 5d 20 3d 20  ;.    aRes[0] = 
36c30 31 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30  1;.  }.  for(i=0
36c40 2c 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70  , pMem = &aMem[p
36c50 4f 70 2d 3e 70 33 5d 3b 20 69 3c 33 3b 20 69 2b  Op->p3]; i<3; i+
36c60 2b 2c 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20  +, pMem++){.    
36c70 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
36c80 74 49 6e 74 36 34 28 70 4d 65 6d 2c 20 28 69 36  tInt64(pMem, (i6
36c90 34 29 61 52 65 73 5b 69 5d 29 3b 0a 20 20 7d 20  4)aRes[i]);.  } 
36ca0 20 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 20     .  break;.}; 
36cb0 20 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65   .#endif..#ifnde
36cc0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
36cd0 41 47 4d 41 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  AGMA./* Opcode: 
36ce0 4a 6f 75 72 6e 61 6c 4d 6f 64 65 20 50 31 20 50  JournalMode P1 P
36cf0 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43  2 P3 * *.**.** C
36d00 68 61 6e 67 65 20 74 68 65 20 6a 6f 75 72 6e 61  hange the journa
36d10 6c 20 6d 6f 64 65 20 6f 66 20 64 61 74 61 62 61  l mode of databa
36d20 73 65 20 50 31 20 74 6f 20 50 33 2e 20 50 33 20  se P1 to P3. P3 
36d30 6d 75 73 74 20 62 65 20 6f 6e 65 20 6f 66 20 74  must be one of t
36d40 68 65 0a 2a 2a 20 50 41 47 45 52 5f 4a 4f 55 52  he.** PAGER_JOUR
36d50 4e 41 4c 4d 4f 44 45 5f 58 58 58 20 76 61 6c 75  NALMODE_XXX valu
36d60 65 73 2e 20 49 66 20 63 68 61 6e 67 69 6e 67 20  es. If changing 
36d70 62 65 74 77 65 65 6e 20 74 68 65 20 76 61 72 69  between the vari
36d80 6f 75 73 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20  ous rollback.** 
36d90 6d 6f 64 65 73 20 28 64 65 6c 65 74 65 2c 20 74  modes (delete, t
36da0 72 75 6e 63 61 74 65 2c 20 70 65 72 73 69 73 74  runcate, persist
36db0 2c 20 6f 66 66 20 61 6e 64 20 6d 65 6d 6f 72 79  , off and memory
36dc0 29 2c 20 74 68 69 73 20 69 73 20 61 20 73 69 6d  ), this is a sim
36dd0 70 6c 65 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e  ple.** operation
36de0 2e 20 4e 6f 20 49 4f 20 69 73 20 72 65 71 75 69  . No IO is requi
36df0 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63 68  red..**.** If ch
36e00 61 6e 67 69 6e 67 20 69 6e 74 6f 20 6f 72 20 6f  anging into or o
36e10 75 74 20 6f 66 20 57 41 4c 20 6d 6f 64 65 20 74  ut of WAL mode t
36e20 68 65 20 70 72 6f 63 65 64 75 72 65 20 69 73 20  he procedure is 
36e30 6d 6f 72 65 20 63 6f 6d 70 6c 69 63 61 74 65 64  more complicated
36e40 2e 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20  ..**.** Write a 
36e50 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e  string containin
36e60 67 20 74 68 65 20 66 69 6e 61 6c 20 6a 6f 75 72  g the final jour
36e70 6e 61 6c 2d 6d 6f 64 65 20 74 6f 20 72 65 67 69  nal-mode to regi
36e80 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
36e90 20 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 3a   OP_JournalMode:
36ea0 20 7b 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f   {    /* out2 */
36eb0 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20  .  Btree *pBt;  
36ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36ed0 20 20 20 2f 2a 20 42 74 72 65 65 20 74 6f 20 63     /* Btree to c
36ee0 68 61 6e 67 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f  hange journal mo
36ef0 64 65 20 6f 66 20 2a 2f 0a 20 20 50 61 67 65 72  de of */.  Pager
36f00 20 2a 70 50 61 67 65 72 3b 20 20 20 20 20 20 20   *pPager;       
36f10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
36f20 67 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77  ger associated w
36f30 69 74 68 20 70 42 74 20 2a 2f 0a 20 20 69 6e 74  ith pBt */.  int
36f40 20 65 4e 65 77 3b 20 20 20 20 20 20 20 20 20 20   eNew;          
36f50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
36f60 4e 65 77 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65  New journal mode
36f70 20 2a 2f 0a 20 20 69 6e 74 20 65 4f 6c 64 3b 20   */.  int eOld; 
36f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36f90 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 6c 64        /* The old
36fa0 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f   journal mode */
36fb0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
36fc0 4f 4d 49 54 5f 57 41 4c 0a 20 20 63 6f 6e 73 74  OMIT_WAL.  const
36fd0 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65   char *zFilename
36fe0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61  ;          /* Na
36ff0 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 66  me of database f
37000 69 6c 65 20 66 6f 72 20 70 50 61 67 65 72 20 2a  ile for pPager *
37010 2f 0a 23 65 6e 64 69 66 0a 0a 20 20 70 4f 75 74  /.#endif..  pOut
37020 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
37030 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 65 4e 65  e(p, pOp);.  eNe
37040 77 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61  w = pOp->p3;.  a
37050 73 73 65 72 74 28 20 65 4e 65 77 3d 3d 50 41 47  ssert( eNew==PAG
37060 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44  ER_JOURNALMODE_D
37070 45 4c 45 54 45 20 0a 20 20 20 20 20 20 20 7c 7c  ELETE .       ||
37080 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
37090 52 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54  RNALMODE_TRUNCAT
370a0 45 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65  E .       || eNe
370b0 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
370c0 4d 4f 44 45 5f 50 45 52 53 49 53 54 20 0a 20 20  MODE_PERSIST .  
370d0 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
370e0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
370f0 4f 46 46 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e  OFF.       || eN
37100 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
37110 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 0a 20 20 20  LMODE_MEMORY.   
37120 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
37130 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
37140 41 4c 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65  AL.       || eNe
37150 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
37160 4d 4f 44 45 5f 51 55 45 52 59 0a 20 20 29 3b 0a  MODE_QUERY.  );.
37170 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
37180 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
37190 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
371a0 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
371b0 3d 3d 30 20 29 3b 0a 0a 20 20 70 42 74 20 3d 20  ==0 );..  pBt = 
371c0 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
371d0 2e 70 42 74 3b 0a 20 20 70 50 61 67 65 72 20 3d  .pBt;.  pPager =
371e0 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67   sqlite3BtreePag
371f0 65 72 28 70 42 74 29 3b 0a 20 20 65 4f 6c 64 20  er(pBt);.  eOld 
37200 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 47 65  = sqlite3PagerGe
37210 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  tJournalMode(pPa
37220 67 65 72 29 3b 0a 20 20 69 66 28 20 65 4e 65 77  ger);.  if( eNew
37230 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
37240 4f 44 45 5f 51 55 45 52 59 20 29 20 65 4e 65 77  ODE_QUERY ) eNew
37250 20 3d 20 65 4f 6c 64 3b 0a 20 20 69 66 28 20 21   = eOld;.  if( !
37260 73 71 6c 69 74 65 33 50 61 67 65 72 4f 6b 54 6f  sqlite3PagerOkTo
37270 43 68 61 6e 67 65 4a 6f 75 72 6e 61 6c 4d 6f 64  ChangeJournalMod
37280 65 28 70 50 61 67 65 72 29 20 29 20 65 4e 65 77  e(pPager) ) eNew
37290 20 3d 20 65 4f 6c 64 3b 0a 0a 23 69 66 6e 64 65   = eOld;..#ifnde
372a0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
372b0 4c 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 20 3d 20  L.  zFilename = 
372c0 73 71 6c 69 74 65 33 50 61 67 65 72 46 69 6c 65  sqlite3PagerFile
372d0 6e 61 6d 65 28 70 50 61 67 65 72 2c 20 31 29 3b  name(pPager, 1);
372e0 0a 0a 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c  ..  /* Do not al
372f0 6c 6f 77 20 61 20 74 72 61 6e 73 69 74 69 6f 6e  low a transition
37300 20 74 6f 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65   to journal_mode
37310 3d 57 41 4c 20 66 6f 72 20 61 20 64 61 74 61 62  =WAL for a datab
37320 61 73 65 0a 20 20 2a 2a 20 69 6e 20 74 65 6d 70  ase.  ** in temp
37330 6f 72 61 72 79 20 73 74 6f 72 61 67 65 20 6f 72  orary storage or
37340 20 69 66 20 74 68 65 20 56 46 53 20 64 6f 65 73   if the VFS does
37350 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 73 68 61   not support sha
37360 72 65 64 20 6d 65 6d 6f 72 79 20 0a 20 20 2a 2f  red memory .  */
37370 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41 47  .  if( eNew==PAG
37380 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
37390 41 4c 0a 20 20 20 26 26 20 28 73 71 6c 69 74 65  AL.   && (sqlite
373a0 33 53 74 72 6c 65 6e 33 30 28 7a 46 69 6c 65 6e  3Strlen30(zFilen
373b0 61 6d 65 29 3d 3d 30 20 20 20 20 20 20 20 20 20  ame)==0         
373c0 20 20 2f 2a 20 54 65 6d 70 20 66 69 6c 65 20 2a    /* Temp file *
373d0 2f 0a 20 20 20 20 20 20 20 7c 7c 20 21 73 71 6c  /.       || !sql
373e0 69 74 65 33 50 61 67 65 72 57 61 6c 53 75 70 70  ite3PagerWalSupp
373f0 6f 72 74 65 64 28 70 50 61 67 65 72 29 29 20 20  orted(pPager))  
37400 20 2f 2a 20 4e 6f 20 73 68 61 72 65 64 2d 6d 65   /* No shared-me
37410 6d 6f 72 79 20 73 75 70 70 6f 72 74 20 2a 2f 0a  mory support */.
37420 20 20 29 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20    ){.    eNew = 
37430 65 4f 6c 64 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  eOld;.  }..  if(
37440 20 28 65 4e 65 77 21 3d 65 4f 6c 64 29 0a 20 20   (eNew!=eOld).  
37450 20 26 26 20 28 65 4f 6c 64 3d 3d 50 41 47 45 52   && (eOld==PAGER
37460 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
37470 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f   || eNew==PAGER_
37480 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 29  JOURNALMODE_WAL)
37490 0a 20 20 29 7b 0a 20 20 20 20 69 66 28 20 21 64  .  ){.    if( !d
374a0 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 7c 7c  b->autoCommit ||
374b0 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31   db->nVdbeRead>1
374c0 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   ){.      rc = S
374d0 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20  QLITE_ERROR;.   
374e0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
374f0 72 6f 72 28 70 2c 0a 20 20 20 20 20 20 20 20 20  ror(p,.         
37500 20 22 63 61 6e 6e 6f 74 20 63 68 61 6e 67 65 20   "cannot change 
37510 25 73 20 77 61 6c 20 6d 6f 64 65 20 66 72 6f 6d  %s wal mode from
37520 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61   within a transa
37530 63 74 69 6f 6e 22 2c 0a 20 20 20 20 20 20 20 20  ction",.        
37540 20 20 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a    (eNew==PAGER_J
37550 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f  OURNALMODE_WAL ?
37560 20 22 69 6e 74 6f 22 20 3a 20 22 6f 75 74 20 6f   "into" : "out o
37570 66 22 29 0a 20 20 20 20 20 20 29 3b 0a 20 20 20  f").      );.   
37580 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
37590 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
375a0 7d 65 6c 73 65 7b 0a 20 0a 20 20 20 20 20 20 69  }else{. .      i
375b0 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a  f( eOld==PAGER_J
375c0 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 29  OURNALMODE_WAL )
375d0 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20  {.        /* If 
375e0 6c 65 61 76 69 6e 67 20 57 41 4c 20 6d 6f 64 65  leaving WAL mode
375f0 2c 20 63 6c 6f 73 65 20 74 68 65 20 6c 6f 67 20  , close the log 
37600 66 69 6c 65 2e 20 49 66 20 73 75 63 63 65 73 73  file. If success
37610 66 75 6c 2c 20 74 68 65 20 63 61 6c 6c 0a 20 20  ful, the call.  
37620 20 20 20 20 20 20 2a 2a 20 74 6f 20 50 61 67 65        ** to Page
37630 72 43 6c 6f 73 65 57 61 6c 28 29 20 63 68 65 63  rCloseWal() chec
37640 6b 70 6f 69 6e 74 73 20 61 6e 64 20 64 65 6c 65  kpoints and dele
37650 74 65 73 20 74 68 65 20 77 72 69 74 65 2d 61 68  tes the write-ah
37660 65 61 64 2d 6c 6f 67 20 0a 20 20 20 20 20 20 20  ead-log .       
37670 20 2a 2a 20 66 69 6c 65 2e 20 41 6e 20 45 58 43   ** file. An EXC
37680 4c 55 53 49 56 45 20 6c 6f 63 6b 20 6d 61 79 20  LUSIVE lock may 
37690 73 74 69 6c 6c 20 62 65 20 68 65 6c 64 20 6f 6e  still be held on
376a0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
376b0 6c 65 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 61  le .        ** a
376c0 66 74 65 72 20 61 20 73 75 63 63 65 73 73 66 75  fter a successfu
376d0 6c 20 72 65 74 75 72 6e 2e 20 0a 20 20 20 20 20  l return. .     
376e0 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 63     */.        rc
376f0 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 43   = sqlite3PagerC
37700 6c 6f 73 65 57 61 6c 28 70 50 61 67 65 72 2c 20  loseWal(pPager, 
37710 64 62 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  db);.        if(
37720 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
37730 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
37740 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e  te3PagerSetJourn
37750 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65  alMode(pPager, e
37760 4e 65 77 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  New);.        }.
37770 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
37780 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eOld==PAGER_JOUR
37790 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 20 29  NALMODE_MEMORY )
377a0 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 43 61 6e  {.        /* Can
377b0 6e 6f 74 20 74 72 61 6e 73 69 74 69 6f 6e 20 64  not transition d
377c0 69 72 65 63 74 6c 79 20 66 72 6f 6d 20 4d 45 4d  irectly from MEM
377d0 4f 52 59 20 74 6f 20 57 41 4c 2e 20 20 55 73 65  ORY to WAL.  Use
377e0 20 6d 6f 64 65 20 4f 46 46 0a 20 20 20 20 20 20   mode OFF.      
377f0 20 20 2a 2a 20 61 73 20 61 6e 20 69 6e 74 65 72    ** as an inter
37800 6d 65 64 69 61 74 65 20 2a 2f 0a 20 20 20 20 20  mediate */.     
37810 20 20 20 73 71 6c 69 74 65 33 50 61 67 65 72 53     sqlite3PagerS
37820 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50  etJournalMode(pP
37830 61 67 65 72 2c 20 50 41 47 45 52 5f 4a 4f 55 52  ager, PAGER_JOUR
37840 4e 41 4c 4d 4f 44 45 5f 4f 46 46 29 3b 0a 20 20  NALMODE_OFF);.  
37850 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f      }.  .      /
37860 2a 20 4f 70 65 6e 20 61 20 74 72 61 6e 73 61 63  * Open a transac
37870 74 69 6f 6e 20 6f 6e 20 74 68 65 20 64 61 74 61  tion on the data
37880 62 61 73 65 20 66 69 6c 65 2e 20 52 65 67 61 72  base file. Regar
37890 64 6c 65 73 73 20 6f 66 20 74 68 65 20 6a 6f 75  dless of the jou
378a0 72 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20 6d 6f  rnal.      ** mo
378b0 64 65 2c 20 74 68 69 73 20 74 72 61 6e 73 61 63  de, this transac
378c0 74 69 6f 6e 20 61 6c 77 61 79 73 20 75 73 65 73  tion always uses
378d0 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72   a rollback jour
378e0 6e 61 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  nal..      */.  
378f0 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
37900 74 65 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e  te3BtreeIsInTran
37910 73 28 70 42 74 29 3d 3d 30 20 29 3b 0a 20 20 20  s(pBt)==0 );.   
37920 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
37930 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
37940 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
37950 65 53 65 74 56 65 72 73 69 6f 6e 28 70 42 74 2c  eSetVersion(pBt,
37960 20 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f   (eNew==PAGER_JO
37970 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20  URNALMODE_WAL ? 
37980 32 20 3a 20 31 29 29 3b 0a 20 20 20 20 20 20 7d  2 : 1));.      }
37990 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69  .    }.  }.#endi
379a0 66 20 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c 49  f /* ifndef SQLI
379b0 54 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a 0a  TE_OMIT_WAL */..
379c0 20 20 69 66 28 20 72 63 20 29 20 65 4e 65 77 20    if( rc ) eNew 
379d0 3d 20 65 4f 6c 64 3b 0a 20 20 65 4e 65 77 20 3d  = eOld;.  eNew =
379e0 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65 74   sqlite3PagerSet
379f0 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67  JournalMode(pPag
37a00 65 72 2c 20 65 4e 65 77 29 3b 0a 0a 20 20 70 4f  er, eNew);..  pO
37a10 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
37a20 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d  Str|MEM_Static|M
37a30 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d  EM_Term;.  pOut-
37a40 3e 7a 20 3d 20 28 63 68 61 72 20 2a 29 73 71 6c  >z = (char *)sql
37a50 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e  ite3JournalModen
37a60 61 6d 65 28 65 4e 65 77 29 3b 0a 20 20 70 4f 75  ame(eNew);.  pOu
37a70 74 2d 3e 6e 20 3d 20 73 71 6c 69 74 65 33 53 74  t->n = sqlite3St
37a80 72 6c 65 6e 33 30 28 70 4f 75 74 2d 3e 7a 29 3b  rlen30(pOut->z);
37a90 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53  .  pOut->enc = S
37aa0 51 4c 49 54 45 5f 55 54 46 38 3b 0a 20 20 73 71  QLITE_UTF8;.  sq
37ab0 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
37ac0 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e  ncoding(pOut, en
37ad0 63 6f 64 69 6e 67 29 3b 0a 20 20 69 66 28 20 72  coding);.  if( r
37ae0 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
37af0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62  ue_to_error;.  b
37b00 72 65 61 6b 3b 0a 7d 3b 0a 23 65 6e 64 69 66 20  reak;.};.#endif 
37b10 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  /* SQLITE_OMIT_P
37b20 52 41 47 4d 41 20 2a 2f 0a 0a 23 69 66 20 21 64  RAGMA */..#if !d
37b30 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
37b40 49 54 5f 56 41 43 55 55 4d 29 20 26 26 20 21 64  IT_VACUUM) && !d
37b50 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
37b60 49 54 5f 41 54 54 41 43 48 29 0a 2f 2a 20 4f 70  IT_ATTACH)./* Op
37b70 63 6f 64 65 3a 20 56 61 63 75 75 6d 20 50 31 20  code: Vacuum P1 
37b80 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56  P2 * * *.**.** V
37b90 61 63 75 75 6d 20 74 68 65 20 65 6e 74 69 72 65  acuum the entire
37ba0 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 50   database P1.  P
37bb0 31 20 69 73 20 30 20 66 6f 72 20 22 6d 61 69 6e  1 is 0 for "main
37bc0 22 2c 20 61 6e 64 20 32 20 6f 72 20 6d 6f 72 65  ", and 2 or more
37bd0 0a 2a 2a 20 66 6f 72 20 61 6e 20 61 74 74 61 63  .** for an attac
37be0 68 65 64 20 64 61 74 61 62 61 73 65 2e 20 20 54  hed database.  T
37bf0 68 65 20 22 74 65 6d 70 22 20 64 61 74 61 62 61  he "temp" databa
37c00 73 65 20 6d 61 79 20 6e 6f 74 20 62 65 20 76 61  se may not be va
37c10 63 75 75 6d 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  cuumed..**.** If
37c20 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
37c30 20 74 68 65 6e 20 69 74 20 69 73 20 61 20 72 65   then it is a re
37c40 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 61  gister holding a
37c50 20 73 74 72 69 6e 67 20 77 68 69 63 68 20 69 73   string which is
37c60 0a 2a 2a 20 74 68 65 20 66 69 6c 65 20 69 6e 74  .** the file int
37c70 6f 20 77 68 69 63 68 20 74 68 65 20 72 65 73 75  o which the resu
37c80 6c 74 20 6f 66 20 76 61 63 75 75 6d 20 73 68 6f  lt of vacuum sho
37c90 75 6c 64 20 62 65 20 77 72 69 74 74 65 6e 2e 20  uld be written. 
37ca0 20 57 68 65 6e 0a 2a 2a 20 50 32 20 69 73 20 7a   When.** P2 is z
37cb0 65 72 6f 2c 20 74 68 65 20 76 61 63 75 75 6d 20  ero, the vacuum 
37cc0 6f 76 65 72 77 72 69 74 65 73 20 74 68 65 20 6f  overwrites the o
37cd0 72 69 67 69 6e 61 6c 20 64 61 74 61 62 61 73 65  riginal database
37ce0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 63  ..*/.case OP_Vac
37cf0 75 75 6d 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  uum: {.  assert(
37d00 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
37d10 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
37d20 33 52 75 6e 56 61 63 75 75 6d 28 26 70 2d 3e 7a  3RunVacuum(&p->z
37d30 45 72 72 4d 73 67 2c 20 64 62 2c 20 70 4f 70 2d  ErrMsg, db, pOp-
37d40 3e 70 31 2c 0a 20 20 20 20 20 20 20 20 20 20 20  >p1,.           
37d50 20 20 20 20 20 20 20 20 20 20 20 20 20 70 4f 70               pOp
37d60 2d 3e 70 32 20 3f 20 26 61 4d 65 6d 5b 70 4f 70  ->p2 ? &aMem[pOp
37d70 2d 3e 70 32 5d 20 3a 20 30 29 3b 0a 20 20 69 66  ->p2] : 0);.  if
37d80 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
37d90 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
37da0 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
37db0 66 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  f..#if !defined(
37dc0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
37dd0 56 41 43 55 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64  VACUUM)./* Opcod
37de0 65 3a 20 49 6e 63 72 56 61 63 75 75 6d 20 50 31  e: IncrVacuum P1
37df0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
37e00 50 65 72 66 6f 72 6d 20 61 20 73 69 6e 67 6c 65  Perform a single
37e10 20 73 74 65 70 20 6f 66 20 74 68 65 20 69 6e 63   step of the inc
37e20 72 65 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 20  remental vacuum 
37e30 70 72 6f 63 65 64 75 72 65 20 6f 6e 0a 2a 2a 20  procedure on.** 
37e40 74 68 65 20 50 31 20 64 61 74 61 62 61 73 65 2e  the P1 database.
37e50 20 49 66 20 74 68 65 20 76 61 63 75 75 6d 20 68   If the vacuum h
37e60 61 73 20 66 69 6e 69 73 68 65 64 2c 20 6a 75 6d  as finished, jum
37e70 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
37e80 0a 2a 2a 20 50 32 2e 20 4f 74 68 65 72 77 69 73  .** P2. Otherwis
37e90 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  e, fall through 
37ea0 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
37eb0 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
37ec0 20 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d 3a 20   OP_IncrVacuum: 
37ed0 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
37ee0 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74   */.  Btree *pBt
37ef0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
37f00 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
37f10 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
37f20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
37f30 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
37f40 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61   pOp->p1) );.  a
37f50 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
37f60 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d  ly==0 );.  pBt =
37f70 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31   db->aDb[pOp->p1
37f80 5d 2e 70 42 74 3b 0a 20 20 72 63 20 3d 20 73 71  ].pBt;.  rc = sq
37f90 6c 69 74 65 33 42 74 72 65 65 49 6e 63 72 56 61  lite3BtreeIncrVa
37fa0 63 75 75 6d 28 70 42 74 29 3b 0a 20 20 56 64 62  cuum(pBt);.  Vdb
37fb0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 63 3d  eBranchTaken(rc=
37fc0 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 2c 32 29 3b  =SQLITE_DONE,2);
37fd0 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20  .  if( rc ){.   
37fe0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
37ff0 44 4f 4e 45 20 29 20 67 6f 74 6f 20 61 62 6f 72  DONE ) goto abor
38000 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
38010 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
38020 4f 4b 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d  OK;.    goto jum
38030 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62  p_to_p2;.  }.  b
38040 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
38050 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 78 70 69 72  /* Opcode: Expir
38060 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  e P1 P2 * * *.**
38070 0a 2a 2a 20 43 61 75 73 65 20 70 72 65 63 6f 6d  .** Cause precom
38080 70 69 6c 65 64 20 73 74 61 74 65 6d 65 6e 74 73  piled statements
38090 20 74 6f 20 65 78 70 69 72 65 2e 20 20 57 68 65   to expire.  Whe
380a0 6e 20 61 6e 20 65 78 70 69 72 65 64 20 73 74 61  n an expired sta
380b0 74 65 6d 65 6e 74 0a 2a 2a 20 69 73 20 65 78 65  tement.** is exe
380c0 63 75 74 65 64 20 75 73 69 6e 67 20 73 71 6c 69  cuted using sqli
380d0 74 65 33 5f 73 74 65 70 28 29 20 69 74 20 77 69  te3_step() it wi
380e0 6c 6c 20 65 69 74 68 65 72 20 61 75 74 6f 6d 61  ll either automa
380f0 74 69 63 61 6c 6c 79 0a 2a 2a 20 72 65 70 72 65  tically.** repre
38100 70 61 72 65 20 69 74 73 65 6c 66 20 28 69 66 20  pare itself (if 
38110 69 74 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c  it was originall
38120 79 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20  y created using 
38130 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f  sqlite3_prepare_
38140 76 32 28 29 29 0a 2a 2a 20 6f 72 20 69 74 20 77  v2()).** or it w
38150 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 53 51  ill fail with SQ
38160 4c 49 54 45 5f 53 43 48 45 4d 41 2e 0a 2a 2a 20  LITE_SCHEMA..** 
38170 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 30 2c 20  .** If P1 is 0, 
38180 74 68 65 6e 20 61 6c 6c 20 53 51 4c 20 73 74 61  then all SQL sta
38190 74 65 6d 65 6e 74 73 20 62 65 63 6f 6d 65 20 65  tements become e
381a0 78 70 69 72 65 64 2e 20 49 66 20 50 31 20 69 73  xpired. If P1 is
381b0 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68   non-zero,.** th
381c0 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63 75 72 72  en only the curr
381d0 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20  ently executing 
381e0 73 74 61 74 65 6d 65 6e 74 20 69 73 20 65 78 70  statement is exp
381f0 69 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  ired..**.** If P
38200 32 20 69 73 20 30 2c 20 74 68 65 6e 20 53 51 4c  2 is 0, then SQL
38210 20 73 74 61 74 65 6d 65 6e 74 73 20 61 72 65 20   statements are 
38220 65 78 70 69 72 65 64 20 69 6d 6d 65 64 69 61 74  expired immediat
38230 65 6c 79 2e 20 20 49 66 20 50 32 20 69 73 20 31  ely.  If P2 is 1
38240 2c 0a 2a 2a 20 74 68 65 6e 20 72 75 6e 6e 69 6e  ,.** then runnin
38250 67 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  g SQL statements
38260 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 74 6f 20   are allowed to 
38270 63 6f 6e 74 69 6e 75 65 20 74 6f 20 72 75 6e 20  continue to run 
38280 74 6f 20 63 6f 6d 70 6c 65 74 69 6f 6e 2e 0a 2a  to completion..*
38290 2a 20 54 68 65 20 50 32 3d 3d 31 20 63 61 73 65  * The P2==1 case
382a0 20 6f 63 63 75 72 73 20 77 68 65 6e 20 61 20 43   occurs when a C
382b0 52 45 41 54 45 20 49 4e 44 45 58 20 6f 72 20 73  REATE INDEX or s
382c0 69 6d 69 6c 61 72 20 73 63