/ Hex Artifact Content
Login

Artifact c27cc34be1d9169c1c191238025781684bdcd4ec:


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 2c 20 32  is an integer, 2
10d0: 20 6f 72 20 33 2c 20 74 68 61 74 20 69 6e 64 69   or 3, that indi
10e0: 63 65 73 20 68 6f 77 20 6d 61 6e 79 20 64 69 66  ces how many dif
10f0: 66 65 72 65 6e 74 20 77 61 79 73 20 74 68 65 0a  ferent ways the.
1100: 2a 2a 20 62 72 61 6e 63 68 20 63 61 6e 20 67 6f  ** branch can go
1110: 2e 20 20 49 74 20 69 73 20 75 73 75 61 6c 6c 79  .  It is usually
1120: 20 32 2e 20 20 22 49 22 20 69 73 20 74 68 65 20   2.  "I" is the 
1130: 64 69 72 65 63 74 69 6f 6e 20 74 68 65 20 62 72  direction the br
1140: 61 6e 63 68 0a 2a 2a 20 67 6f 65 73 2e 20 20 30  anch.** goes.  0
1150: 20 6d 65 61 6e 73 20 66 61 6c 6c 73 20 74 68 72   means falls thr
1160: 6f 75 67 68 2e 20 20 31 20 6d 65 61 6e 73 20 62  ough.  1 means b
1170: 72 61 6e 63 68 20 69 73 20 74 61 6b 65 6e 2e 20  ranch is taken. 
1180: 20 32 20 6d 65 61 6e 73 20 74 68 65 0a 2a 2a 20   2 means the.** 
1190: 73 65 63 6f 6e 64 20 61 6c 74 65 72 6e 61 74 69  second alternati
11a0: 76 65 20 62 72 61 6e 63 68 20 69 73 20 74 61 6b  ve branch is tak
11b0: 65 6e 2e 0a 2a 2a 0a 2a 2a 20 69 53 72 63 4c 69  en..**.** iSrcLi
11c0: 6e 65 20 69 73 20 74 68 65 20 73 6f 75 72 63 65  ne is the source
11d0: 20 63 6f 64 65 20 6c 69 6e 65 20 28 66 72 6f 6d   code line (from
11e0: 20 74 68 65 20 5f 5f 4c 49 4e 45 5f 5f 20 6d 61   the __LINE__ ma
11f0: 63 72 6f 29 20 74 68 61 74 0a 2a 2a 20 67 65 6e  cro) that.** gen
1200: 65 72 61 74 65 64 20 74 68 65 20 56 44 42 45 20  erated the VDBE 
1210: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 54 68  instruction.  Th
1220: 69 73 20 69 6e 73 74 72 75 6d 65 6e 74 61 74 69  is instrumentati
1230: 6f 6e 20 61 73 73 75 6d 65 73 20 74 68 61 74 20  on assumes that 
1240: 61 6c 6c 0a 2a 2a 20 73 6f 75 72 63 65 20 63 6f  all.** source co
1250: 64 65 20 69 73 20 69 6e 20 61 20 73 69 6e 67 6c  de is in a singl
1260: 65 20 66 69 6c 65 20 28 74 68 65 20 61 6d 61 6c  e file (the amal
1270: 67 61 6d 61 74 69 6f 6e 29 2e 20 20 53 70 65 63  gamation).  Spec
1280: 69 61 6c 20 76 61 6c 75 65 73 20 31 0a 2a 2a 20  ial values 1.** 
1290: 61 6e 64 20 32 20 66 6f 72 20 74 68 65 20 69 53  and 2 for the iS
12a0: 72 63 4c 69 6e 65 20 70 61 72 61 6d 65 74 65 72  rcLine parameter
12b0: 20 6d 65 61 6e 20 74 68 61 74 20 74 68 69 73 20   mean that this 
12c0: 70 61 72 74 69 63 75 6c 61 72 20 62 72 61 6e 63  particular branc
12d0: 68 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 74  h is.** always t
12e0: 61 6b 65 6e 20 6f 72 20 6e 65 76 65 72 20 74 61  aken or never ta
12f0: 6b 65 6e 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ken, respectivel
1300: 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  y..*/.#if !defin
1310: 65 64 28 53 51 4c 49 54 45 5f 56 44 42 45 5f 43  ed(SQLITE_VDBE_C
1320: 4f 56 45 52 41 47 45 29 0a 23 20 64 65 66 69 6e  OVERAGE).# defin
1330: 65 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65  e VdbeBranchTake
1340: 6e 28 49 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 64  n(I,M).#else.# d
1350: 65 66 69 6e 65 20 56 64 62 65 42 72 61 6e 63 68  efine VdbeBranch
1360: 54 61 6b 65 6e 28 49 2c 4d 29 20 76 64 62 65 54  Taken(I,M) vdbeT
1370: 61 6b 65 42 72 61 6e 63 68 28 70 4f 70 2d 3e 69  akeBranch(pOp->i
1380: 53 72 63 4c 69 6e 65 2c 49 2c 4d 29 0a 20 20 73  SrcLine,I,M).  s
1390: 74 61 74 69 63 20 76 6f 69 64 20 76 64 62 65 54  tatic void vdbeT
13a0: 61 6b 65 42 72 61 6e 63 68 28 69 6e 74 20 69 53  akeBranch(int iS
13b0: 72 63 4c 69 6e 65 2c 20 75 38 20 49 2c 20 75 38  rcLine, u8 I, u8
13c0: 20 4d 29 7b 0a 20 20 20 20 69 66 28 20 69 53 72   M){.    if( iSr
13d0: 63 4c 69 6e 65 3c 3d 32 20 26 26 20 41 4c 57 41  cLine<=2 && ALWA
13e0: 59 53 28 69 53 72 63 4c 69 6e 65 3e 30 29 20 29  YS(iSrcLine>0) )
13f0: 7b 0a 20 20 20 20 20 20 4d 20 3d 20 69 53 72 63  {.      M = iSrc
1400: 4c 69 6e 65 3b 0a 20 20 20 20 20 20 2f 2a 20 41  Line;.      /* A
1410: 73 73 65 72 74 20 74 68 65 20 74 72 75 74 68 20  ssert the truth 
1420: 6f 66 20 56 64 62 65 43 6f 76 65 72 61 67 65 41  of VdbeCoverageA
1430: 6c 77 61 79 73 54 61 6b 65 6e 28 29 20 61 6e 64  lwaysTaken() and
1440: 20 0a 20 20 20 20 20 20 2a 2a 20 56 64 62 65 43   .      ** VdbeC
1450: 6f 76 65 72 61 67 65 4e 65 76 65 72 54 61 6b 65  overageNeverTake
1460: 6e 28 29 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  n() */.      ass
1470: 65 72 74 28 20 28 4d 20 26 20 49 29 3d 3d 49 20  ert( (M & I)==I 
1480: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
1490: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 47      if( sqlite3G
14a0: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 56 64 62  lobalConfig.xVdb
14b0: 65 42 72 61 6e 63 68 3d 3d 30 20 29 20 72 65 74  eBranch==0 ) ret
14c0: 75 72 6e 3b 20 20 2f 2a 4e 4f 5f 54 45 53 54 2a  urn;  /*NO_TEST*
14d0: 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 47  /.      sqlite3G
14e0: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 56 64 62  lobalConfig.xVdb
14f0: 65 42 72 61 6e 63 68 28 73 71 6c 69 74 65 33 47  eBranch(sqlite3G
1500: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70 56 64 62  lobalConfig.pVdb
1510: 65 42 72 61 6e 63 68 41 72 67 2c 0a 20 20 20 20  eBranchArg,.    
1520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1540: 20 20 69 53 72 63 4c 69 6e 65 2c 49 2c 4d 29 3b    iSrcLine,I,M);
1550: 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69  .    }.  }.#endi
1560: 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74  f../*.** Convert
1570: 20 74 68 65 20 67 69 76 65 6e 20 72 65 67 69 73   the given regis
1580: 74 65 72 20 69 6e 74 6f 20 61 20 73 74 72 69 6e  ter into a strin
1590: 67 20 69 66 20 69 74 20 69 73 6e 27 74 20 6f 6e  g if it isn't on
15a0: 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e 20 52 65  e.** already. Re
15b0: 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66  turn non-zero if
15c0: 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c   a malloc() fail
15d0: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 74  s..*/.#define St
15e0: 72 69 6e 67 69 66 79 28 50 2c 20 65 6e 63 29 20  ringify(P, enc) 
15f0: 5c 0a 20 20 20 69 66 28 28 28 50 29 2d 3e 66 6c  \.   if(((P)->fl
1600: 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  ags&(MEM_Str|MEM
1610: 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26 20 73 71  _Blob))==0 && sq
1620: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69  lite3VdbeMemStri
1630: 6e 67 69 66 79 28 50 2c 65 6e 63 2c 30 29 29 20  ngify(P,enc,0)) 
1640: 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f 20 6e 6f  \.     { goto no
1650: 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20 41  _mem; }../*.** A
1660: 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69  n ephemeral stri
1670: 6e 67 20 76 61 6c 75 65 20 28 73 69 67 6e 69 66  ng value (signif
1680: 69 65 64 20 62 79 20 74 68 65 20 4d 45 4d 5f 45  ied by the MEM_E
1690: 70 68 65 6d 20 66 6c 61 67 29 20 63 6f 6e 74 61  phem flag) conta
16a0: 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72  ins.** a pointer
16b0: 20 74 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c   to a dynamicall
16c0: 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 74 72 69  y allocated stri
16d0: 6e 67 20 77 68 65 72 65 20 73 6f 6d 65 20 6f 74  ng where some ot
16e0: 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a 20 69 73  her entity.** is
16f0: 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72   responsible for
1700: 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68   deallocating th
1710: 61 74 20 73 74 72 69 6e 67 2e 20 20 42 65 63 61  at string.  Beca
1720: 75 73 65 20 74 68 65 20 72 65 67 69 73 74 65 72  use the register
1730: 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e  .** does not con
1740: 74 72 6f 6c 20 74 68 65 20 73 74 72 69 6e 67 2c  trol the string,
1750: 20 69 74 20 6d 69 67 68 74 20 62 65 20 64 65 6c   it might be del
1760: 65 74 65 64 20 77 69 74 68 6f 75 74 20 74 68 65  eted without the
1770: 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6b 6e 6f   register.** kno
1780: 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54  wing it..**.** T
1790: 68 69 73 20 72 6f 75 74 69 6e 65 20 63 6f 6e 76  his routine conv
17a0: 65 72 74 73 20 61 6e 20 65 70 68 65 6d 65 72 61  erts an ephemera
17b0: 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20  l string into a 
17c0: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
17d0: 63 61 74 65 64 0a 2a 2a 20 73 74 72 69 6e 67 20  cated.** string 
17e0: 74 68 61 74 20 74 68 65 20 72 65 67 69 73 74 65  that the registe
17f0: 72 20 69 74 73 65 6c 66 20 63 6f 6e 74 72 6f 6c  r itself control
1800: 73 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  s.  In other wor
1810: 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76 65 72  ds, it.** conver
1820: 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68 65 6d 20  ts an MEM_Ephem 
1830: 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20 73 74  string into a st
1840: 72 69 6e 67 20 77 69 74 68 20 50 2e 7a 3d 3d 50  ring with P.z==P
1850: 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a 23 64 65  .zMalloc..*/.#de
1860: 66 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61 6c  fine Deephemeral
1870: 69 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28 20  ize(P) \.   if( 
1880: 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  ((P)->flags&MEM_
1890: 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20 20  Ephem)!=0 \.    
18a0: 20 20 20 26 26 20 73 71 6c 69 74 65 33 56 64 62     && sqlite3Vdb
18b0: 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c  eMemMakeWriteabl
18c0: 65 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f 5f  e(P) ){ goto no_
18d0: 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74 75 72 6e  mem;}../* Return
18e0: 20 74 72 75 65 20 69 66 20 74 68 65 20 63 75 72   true if the cur
18f0: 73 6f 72 20 77 61 73 20 6f 70 65 6e 65 64 20 75  sor was opened u
1900: 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f 70 65 6e  sing the OP_Open
1910: 53 6f 72 74 65 72 20 6f 70 63 6f 64 65 2e 20 2a  Sorter opcode. *
1920: 2f 0a 23 64 65 66 69 6e 65 20 69 73 53 6f 72 74  /.#define isSort
1930: 65 72 28 78 29 20 28 28 78 29 2d 3e 65 43 75 72  er(x) ((x)->eCur
1940: 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 53 4f  Type==CURTYPE_SO
1950: 52 54 45 52 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  RTER)../*.** All
1960: 6f 63 61 74 65 20 56 64 62 65 43 75 72 73 6f 72  ocate VdbeCursor
1970: 20 6e 75 6d 62 65 72 20 69 43 75 72 2e 20 20 52   number iCur.  R
1980: 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72 20  eturn a pointer 
1990: 74 6f 20 69 74 2e 20 20 52 65 74 75 72 6e 20 4e  to it.  Return N
19a0: 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20 72 75 6e  ULL.** if we run
19b0: 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 2e 0a   out of memory..
19c0: 2a 2f 0a 73 74 61 74 69 63 20 56 64 62 65 43 75  */.static VdbeCu
19d0: 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74 65 43 75  rsor *allocateCu
19e0: 72 73 6f 72 28 0a 20 20 56 64 62 65 20 2a 70 2c  rsor(.  Vdbe *p,
19f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1a00: 20 54 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   The virtual mac
1a10: 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 69 43  hine */.  int iC
1a20: 75 72 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ur,             
1a30: 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65 20  /* Index of the 
1a40: 6e 65 77 20 56 64 62 65 43 75 72 73 6f 72 20 2a  new VdbeCursor *
1a50: 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 2c 20  /.  int nField, 
1a60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1a70: 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e  ber of fields in
1a80: 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
1a90: 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62  dex */.  int iDb
1aa0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
1ab0: 2a 20 44 61 74 61 62 61 73 65 20 74 68 65 20 63  * Database the c
1ac0: 75 72 73 6f 72 20 62 65 6c 6f 6e 67 73 20 74 6f  ursor belongs to
1ad0: 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20 20 75 38 20  , or -1 */.  u8 
1ae0: 65 43 75 72 54 79 70 65 20 20 20 20 20 20 20 20  eCurType        
1af0: 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68     /* Type of th
1b00: 65 20 6e 65 77 20 63 75 72 73 6f 72 20 2a 2f 0a  e new cursor */.
1b10: 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65  ){.  /* Find the
1b20: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61   memory cell tha
1b30: 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74  t will be used t
1b40: 6f 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62  o store the blob
1b50: 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20   of memory.  ** 
1b60: 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69  required for thi
1b70: 73 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72  s VdbeCursor str
1b80: 75 63 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f  ucture. It is co
1b90: 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20  nvenient to use 
1ba0: 61 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d  a .  ** vdbe mem
1bb0: 6f 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61  ory cell to mana
1bc0: 67 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c  ge the memory al
1bd0: 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65  location require
1be0: 64 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62  d for a.  ** Vdb
1bf0: 65 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72  eCursor structur
1c00: 65 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77  e for the follow
1c10: 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a  ing reasons:.  *
1c20: 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74  *.  **   * Somet
1c30: 69 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62  imes cursor numb
1c40: 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72  ers are used for
1c50: 20 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66   a couple of dif
1c60: 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20  ferent.  **     
1c70: 70 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64  purposes in a vd
1c80: 62 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20  be program. The 
1c90: 64 69 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d  different uses m
1ca0: 69 67 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a  ight require.  *
1cb0: 2a 20 20 20 20 20 64 69 66 66 65 72 65 6e 74 20  *     different 
1cc0: 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e  sized allocation
1cd0: 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  s. Memory cells 
1ce0: 70 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65  provide growable
1cf0: 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61  .  **     alloca
1d00: 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  tions..  **.  **
1d10: 20 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20     * When using 
1d20: 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41  ENABLE_MEMORY_MA
1d30: 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79  NAGEMENT, memory
1d40: 20 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61   cell buffers ca
1d50: 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72  n.  **     be fr
1d60: 65 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74  eed lazily via t
1d70: 68 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61  he sqlite3_relea
1d80: 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e  se_memory() API.
1d90: 20 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d   This.  **     m
1da0: 69 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d  inimizes the num
1db0: 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61  ber of malloc ca
1dc0: 6c 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65 20  lls made by the 
1dd0: 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a  system..  **.  *
1de0: 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  * The memory cel
1df0: 6c 20 66 6f 72 20 63 75 72 73 6f 72 20 30 20 69  l for cursor 0 i
1e00: 73 20 61 4d 65 6d 5b 30 5d 2e 20 54 68 65 20 72  s aMem[0]. The r
1e10: 65 73 74 20 61 72 65 20 61 6c 6c 6f 63 61 74 65  est are allocate
1e20: 64 20 66 72 6f 6d 0a 20 20 2a 2a 20 74 68 65 20  d from.  ** the 
1e30: 74 6f 70 20 6f 66 20 74 68 65 20 72 65 67 69 73  top of the regis
1e40: 74 65 72 20 73 70 61 63 65 2e 20 20 43 75 72 73  ter space.  Curs
1e50: 6f 72 20 31 20 69 73 20 61 74 20 4d 65 6d 5b 70  or 1 is at Mem[p
1e60: 2d 3e 6e 4d 65 6d 2d 31 5d 2e 0a 20 20 2a 2a 20  ->nMem-1]..  ** 
1e70: 43 75 72 73 6f 72 20 32 20 69 73 20 61 74 20 4d  Cursor 2 is at M
1e80: 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 32 5d 2e 20 41  em[p->nMem-2]. A
1e90: 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20 2a  nd so forth..  *
1ea0: 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20  /.  Mem *pMem = 
1eb0: 69 43 75 72 3e 30 20 3f 20 26 70 2d 3e 61 4d 65  iCur>0 ? &p->aMe
1ec0: 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d 20  m[p->nMem-iCur] 
1ed0: 3a 20 70 2d 3e 61 4d 65 6d 3b 0a 0a 20 20 69 6e  : p->aMem;..  in
1ee0: 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65 43  t nByte;.  VdbeC
1ef0: 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b 0a  ursor *pCx = 0;.
1f00: 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20 20    nByte = .     
1f10: 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56   ROUND8(sizeof(V
1f20: 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32 2a  dbeCursor)) + 2*
1f30: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
1f40: 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 65 43 75  ld + .      (eCu
1f50: 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
1f60: 54 52 45 45 3f 73 71 6c 69 74 65 33 42 74 72 65  TREE?sqlite3Btre
1f70: 65 43 75 72 73 6f 72 53 69 7a 65 28 29 3a 30 29  eCursorSize():0)
1f80: 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 43 75  ;..  assert( iCu
1f90: 72 3e 3d 30 20 26 26 20 69 43 75 72 3c 70 2d 3e  r>=0 && iCur<p->
1fa0: 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28  nCursor );.  if(
1fb0: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20   p->apCsr[iCur] 
1fc0: 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f  ){ /*OPTIMIZATIO
1fd0: 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20  N-IF-FALSE*/.   
1fe0: 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65   sqlite3VdbeFree
1ff0: 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43  Cursor(p, p->apC
2000: 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20 70  sr[iCur]);.    p
2010: 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20  ->apCsr[iCur] = 
2020: 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53 51 4c  0;.  }.  if( SQL
2030: 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33 56  ITE_OK==sqlite3V
2040: 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65  dbeMemClearAndRe
2050: 73 69 7a 65 28 70 4d 65 6d 2c 20 6e 42 79 74 65  size(pMem, nByte
2060: 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70 43 73  ) ){.    p->apCs
2070: 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20 3d 20  r[iCur] = pCx = 
2080: 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70 4d 65  (VdbeCursor*)pMe
2090: 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73 65 74  m->z;.    memset
20a0: 28 70 43 78 2c 20 30 2c 20 6f 66 66 73 65 74 6f  (pCx, 0, offseto
20b0: 66 28 56 64 62 65 43 75 72 73 6f 72 2c 70 41 6c  f(VdbeCursor,pAl
20c0: 74 43 75 72 73 6f 72 29 29 3b 0a 20 20 20 20 70  tCursor));.    p
20d0: 43 78 2d 3e 65 43 75 72 54 79 70 65 20 3d 20 65  Cx->eCurType = e
20e0: 43 75 72 54 79 70 65 3b 0a 20 20 20 20 70 43 78  CurType;.    pCx
20f0: 2d 3e 69 44 62 20 3d 20 69 44 62 3b 0a 20 20 20  ->iDb = iDb;.   
2100: 20 70 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e   pCx->nField = n
2110: 46 69 65 6c 64 3b 0a 20 20 20 20 70 43 78 2d 3e  Field;.    pCx->
2120: 61 4f 66 66 73 65 74 20 3d 20 26 70 43 78 2d 3e  aOffset = &pCx->
2130: 61 54 79 70 65 5b 6e 46 69 65 6c 64 5d 3b 0a 20  aType[nField];. 
2140: 20 20 20 69 66 28 20 65 43 75 72 54 79 70 65 3d     if( eCurType=
2150: 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
2160: 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e 75 63 2e  {.      pCx->uc.
2170: 70 43 75 72 73 6f 72 20 3d 20 28 42 74 43 75 72  pCursor = (BtCur
2180: 73 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20 20  sor*).          
2190: 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38 28  &pMem->z[ROUND8(
21a0: 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
21b0: 72 29 29 2b 32 2a 73 69 7a 65 6f 66 28 75 33 32  r))+2*sizeof(u32
21c0: 29 2a 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20 20  )*nField];.     
21d0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
21e0: 73 6f 72 5a 65 72 6f 28 70 43 78 2d 3e 75 63 2e  sorZero(pCx->uc.
21f0: 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a  pCursor);.    }.
2200: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 70 43 78    }.  return pCx
2210: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74  ;.}../*.** Try t
2220: 6f 20 63 6f 6e 76 65 72 74 20 61 20 76 61 6c 75  o convert a valu
2230: 65 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63  e into a numeric
2240: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2250: 69 66 20 77 65 20 63 61 6e 0a 2a 2a 20 64 6f 20  if we can.** do 
2260: 73 6f 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20  so without loss 
2270: 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20  of information. 
2280: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
2290: 20 69 66 20 74 68 65 20 73 74 72 69 6e 67 0a 2a   if the string.*
22a0: 2a 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20 61 20 6e  * looks like a n
22b0: 75 6d 62 65 72 2c 20 63 6f 6e 76 65 72 74 20 69  umber, convert i
22c0: 74 20 69 6e 74 6f 20 61 20 6e 75 6d 62 65 72 2e  t into a number.
22d0: 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74    If it does not
22e0: 0a 2a 2a 20 6c 6f 6f 6b 20 6c 69 6b 65 20 61 20  .** look like a 
22f0: 6e 75 6d 62 65 72 2c 20 6c 65 61 76 65 20 69 74  number, leave it
2300: 20 61 6c 6f 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66   alone..**.** If
2310: 20 74 68 65 20 62 54 72 79 46 6f 72 49 6e 74 20   the bTryForInt 
2320: 66 6c 61 67 20 69 73 20 74 72 75 65 2c 20 74 68  flag is true, th
2330: 65 6e 20 65 78 74 72 61 20 65 66 66 6f 72 74 20  en extra effort 
2340: 69 73 20 6d 61 64 65 20 74 6f 20 67 69 76 65 0a  is made to give.
2350: 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65  ** an integer re
2360: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20 53  presentation.  S
2370: 74 72 69 6e 67 73 20 74 68 61 74 20 6c 6f 6f 6b  trings that look
2380: 20 6c 69 6b 65 20 66 6c 6f 61 74 69 6e 67 20 70   like floating p
2390: 6f 69 6e 74 0a 2a 2a 20 76 61 6c 75 65 73 20 62  oint.** values b
23a0: 75 74 20 77 68 69 63 68 20 68 61 76 65 20 6e 6f  ut which have no
23b0: 20 66 72 61 63 74 69 6f 6e 61 6c 20 63 6f 6d 70   fractional comp
23c0: 6f 6e 65 6e 74 20 28 65 78 61 6d 70 6c 65 3a 20  onent (example: 
23d0: 27 34 38 2e 30 30 27 29 0a 2a 2a 20 77 69 6c 6c  '48.00').** will
23e0: 20 68 61 76 65 20 61 20 4d 45 4d 5f 49 6e 74 20   have a MEM_Int 
23f0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 77  representation w
2400: 68 65 6e 20 62 54 72 79 46 6f 72 49 6e 74 20 69  hen bTryForInt i
2410: 73 20 74 72 75 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  s true..**.** If
2420: 20 62 54 72 79 46 6f 72 49 6e 74 20 69 73 20 66   bTryForInt is f
2430: 61 6c 73 65 2c 20 74 68 65 6e 20 69 66 20 74 68  alse, then if th
2440: 65 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20 63  e input string c
2450: 6f 6e 74 61 69 6e 73 20 61 20 64 65 63 69 6d 61  ontains a decima
2460: 6c 0a 2a 2a 20 70 6f 69 6e 74 20 6f 72 20 65 78  l.** point or ex
2470: 70 6f 6e 65 6e 74 69 61 6c 20 6e 6f 74 61 74 69  ponential notati
2480: 6f 6e 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  on, the result i
2490: 73 20 6f 6e 6c 79 20 4d 45 4d 5f 52 65 61 6c 2c  s only MEM_Real,
24a0: 20 65 76 65 6e 0a 2a 2a 20 69 66 20 74 68 65 72   even.** if ther
24b0: 65 20 69 73 20 61 6e 20 65 78 61 63 74 20 69 6e  e is an exact in
24c0: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
24d0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 71 75 61 6e  tion of the quan
24e0: 74 69 74 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  tity..*/.static 
24f0: 76 6f 69 64 20 61 70 70 6c 79 4e 75 6d 65 72 69  void applyNumeri
2500: 63 41 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a 70  cAffinity(Mem *p
2510: 52 65 63 2c 20 69 6e 74 20 62 54 72 79 46 6f 72  Rec, int bTryFor
2520: 49 6e 74 29 7b 0a 20 20 64 6f 75 62 6c 65 20 72  Int){.  double r
2530: 56 61 6c 75 65 3b 0a 20 20 69 36 34 20 69 56 61  Value;.  i64 iVa
2540: 6c 75 65 3b 0a 20 20 75 38 20 65 6e 63 20 3d 20  lue;.  u8 enc = 
2550: 70 52 65 63 2d 3e 65 6e 63 3b 0a 20 20 61 73 73  pRec->enc;.  ass
2560: 65 72 74 28 20 28 70 52 65 63 2d 3e 66 6c 61 67  ert( (pRec->flag
2570: 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  s & (MEM_Str|MEM
2580: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d  _Int|MEM_Real))=
2590: 3d 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 69 66  =MEM_Str );.  if
25a0: 28 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 52  ( sqlite3AtoF(pR
25b0: 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75 65 2c 20  ec->z, &rValue, 
25c0: 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3d 3d 30  pRec->n, enc)==0
25d0: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28   ) return;.  if(
25e0: 20 30 3d 3d 73 71 6c 69 74 65 33 41 74 6f 69 36   0==sqlite3Atoi6
25f0: 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69 56 61 6c  4(pRec->z, &iVal
2600: 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63  ue, pRec->n, enc
2610: 29 20 29 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75  ) ){.    pRec->u
2620: 2e 69 20 3d 20 69 56 61 6c 75 65 3b 0a 20 20 20  .i = iValue;.   
2630: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20   pRec->flags |= 
2640: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 65 6c 73 65  MEM_Int;.  }else
2650: 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75 2e 72 20  {.    pRec->u.r 
2660: 3d 20 72 56 61 6c 75 65 3b 0a 20 20 20 20 70 52  = rValue;.    pR
2670: 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ec->flags |= MEM
2680: 5f 52 65 61 6c 3b 0a 20 20 20 20 69 66 28 20 62  _Real;.    if( b
2690: 54 72 79 46 6f 72 49 6e 74 20 29 20 73 71 6c 69  TryForInt ) sqli
26a0: 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66  te3VdbeIntegerAf
26b0: 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20  finity(pRec);.  
26c0: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65  }.}../*.** Proce
26d0: 73 73 69 6e 67 20 69 73 20 64 65 74 65 72 6d 69  ssing is determi
26e0: 6e 65 20 62 79 20 74 68 65 20 61 66 66 69 6e 69  ne by the affini
26f0: 74 79 20 70 61 72 61 6d 65 74 65 72 3a 0a 2a 2a  ty parameter:.**
2700: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  .** SQLITE_AFF_I
2710: 4e 54 45 47 45 52 3a 0a 2a 2a 20 53 51 4c 49 54  NTEGER:.** SQLIT
2720: 45 5f 41 46 46 5f 52 45 41 4c 3a 0a 2a 2a 20 53  E_AFF_REAL:.** S
2730: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
2740: 43 3a 0a 2a 2a 20 20 20 20 54 72 79 20 74 6f 20  C:.**    Try to 
2750: 63 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20  convert pRec to 
2760: 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65  an integer repre
2770: 73 65 6e 74 61 74 69 6f 6e 20 6f 72 20 61 20 0a  sentation or a .
2780: 2a 2a 20 20 20 20 66 6c 6f 61 74 69 6e 67 2d 70  **    floating-p
2790: 6f 69 6e 74 20 72 65 70 72 65 73 65 6e 74 61 74  oint representat
27a0: 69 6f 6e 20 69 66 20 61 6e 20 69 6e 74 65 67 65  ion if an intege
27b0: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
27c0: 0a 2a 2a 20 20 20 20 69 73 20 6e 6f 74 20 70 6f  .**    is not po
27d0: 73 73 69 62 6c 65 2e 20 20 4e 6f 74 65 20 74 68  ssible.  Note th
27e0: 61 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 72  at the integer r
27f0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73  epresentation is
2800: 0a 2a 2a 20 20 20 20 61 6c 77 61 79 73 20 70 72  .**    always pr
2810: 65 66 65 72 72 65 64 2c 20 65 76 65 6e 20 69 66  eferred, even if
2820: 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 69 73   the affinity is
2830: 20 52 45 41 4c 2c 20 62 65 63 61 75 73 65 0a 2a   REAL, because.*
2840: 2a 20 20 20 20 61 6e 20 69 6e 74 65 67 65 72 20  *    an integer 
2850: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69  representation i
2860: 73 20 6d 6f 72 65 20 73 70 61 63 65 20 65 66 66  s more space eff
2870: 69 63 69 65 6e 74 20 6f 6e 20 64 69 73 6b 2e 0a  icient on disk..
2880: 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46  **.** SQLITE_AFF
2890: 5f 54 45 58 54 3a 0a 2a 2a 20 20 20 20 43 6f 6e  _TEXT:.**    Con
28a0: 76 65 72 74 20 70 52 65 63 20 74 6f 20 61 20 74  vert pRec to a t
28b0: 65 78 74 20 72 65 70 72 65 73 65 6e 74 61 74 69  ext representati
28c0: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45  on..**.** SQLITE
28d0: 5f 41 46 46 5f 42 4c 4f 42 3a 0a 2a 2a 20 20 20  _AFF_BLOB:.**   
28e0: 20 4e 6f 2d 6f 70 2e 20 20 70 52 65 63 20 69 73   No-op.  pRec is
28f0: 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a 73   unchanged..*/.s
2900: 74 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c 79  tatic void apply
2910: 41 66 66 69 6e 69 74 79 28 0a 20 20 4d 65 6d 20  Affinity(.  Mem 
2920: 2a 70 52 65 63 2c 20 20 20 20 20 20 20 20 20 20  *pRec,          
2930: 2f 2a 20 54 68 65 20 76 61 6c 75 65 20 74 6f 20  /* The value to 
2940: 61 70 70 6c 79 20 61 66 66 69 6e 69 74 79 20 74  apply affinity t
2950: 6f 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69  o */.  char affi
2960: 6e 69 74 79 2c 20 20 20 20 20 20 2f 2a 20 54 68  nity,      /* Th
2970: 65 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65  e affinity to be
2980: 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 75 38   applied */.  u8
2990: 20 65 6e 63 20 20 20 20 20 20 20 20 20 20 20 20   enc            
29a0: 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 74 65    /* Use this te
29b0: 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 29  xt encoding */.)
29c0: 7b 0a 20 20 69 66 28 20 61 66 66 69 6e 69 74 79  {.  if( affinity
29d0: 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  >=SQLITE_AFF_NUM
29e0: 45 52 49 43 20 29 7b 0a 20 20 20 20 61 73 73 65  ERIC ){.    asse
29f0: 72 74 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51  rt( affinity==SQ
2a00: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
2a10: 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51   || affinity==SQ
2a20: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 0a 20 20  LITE_AFF_REAL.  
2a30: 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 61 66             || af
2a40: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2a50: 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20  FF_NUMERIC );.  
2a60: 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61    if( (pRec->fla
2a70: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
2a80: 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49   ){ /*OPTIMIZATI
2a90: 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20  ON-IF-FALSE*/.  
2aa0: 20 20 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66      if( (pRec->f
2ab0: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29  lags & MEM_Real)
2ac0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69  ==0 ){.        i
2ad0: 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26  f( pRec->flags &
2ae0: 20 4d 45 4d 5f 53 74 72 20 29 20 61 70 70 6c 79   MEM_Str ) apply
2af0: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
2b00: 70 52 65 63 2c 31 29 3b 0a 20 20 20 20 20 20 7d  pRec,1);.      }
2b10: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71  else{.        sq
2b20: 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67 65 72  lite3VdbeInteger
2b30: 41 66 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a  Affinity(pRec);.
2b40: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
2b50: 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69 6e 69  }else if( affini
2b60: 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54  ty==SQLITE_AFF_T
2b70: 45 58 54 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e  EXT ){.    /* On
2b80: 6c 79 20 61 74 74 65 6d 70 74 20 74 68 65 20 63  ly attempt the c
2b90: 6f 6e 76 65 72 73 69 6f 6e 20 74 6f 20 54 45 58  onversion to TEX
2ba0: 54 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e  T if there is an
2bb0: 20 69 6e 74 65 67 65 72 20 6f 72 20 72 65 61 6c   integer or real
2bc0: 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73 65 6e  .    ** represen
2bd0: 74 61 74 69 6f 6e 20 28 62 6c 6f 62 20 61 6e 64  tation (blob and
2be0: 20 4e 55 4c 4c 20 64 6f 20 6e 6f 74 20 67 65 74   NULL do not get
2bf0: 20 63 6f 6e 76 65 72 74 65 64 29 20 62 75 74 20   converted) but 
2c00: 6e 6f 20 73 74 72 69 6e 67 0a 20 20 20 20 2a 2a  no string.    **
2c10: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e   representation.
2c20: 20 20 49 74 20 77 6f 75 6c 64 20 62 65 20 68 61    It would be ha
2c30: 72 6d 6c 65 73 73 20 74 6f 20 72 65 70 65 61 74  rmless to repeat
2c40: 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20   the conversion 
2c50: 69 66 20 0a 20 20 20 20 2a 2a 20 74 68 65 72 65  if .    ** there
2c60: 20 69 73 20 61 6c 72 65 61 64 79 20 61 20 73 74   is already a st
2c70: 72 69 6e 67 20 72 65 70 2c 20 62 75 74 20 69 74  ring rep, but it
2c80: 20 69 73 20 70 6f 69 6e 74 6c 65 73 73 20 74 6f   is pointless to
2c90: 20 77 61 73 74 65 20 74 68 6f 73 65 0a 20 20 20   waste those.   
2ca0: 20 2a 2a 20 43 50 55 20 63 79 63 6c 65 73 2e 20   ** CPU cycles. 
2cb0: 2a 2f 0a 20 20 20 20 69 66 28 20 30 3d 3d 28 70  */.    if( 0==(p
2cc0: 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 53  Rec->flags&MEM_S
2cd0: 74 72 29 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a  tr) ){ /*OPTIMIZ
2ce0: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f  ATION-IF-FALSE*/
2cf0: 0a 20 20 20 20 20 20 69 66 28 20 28 70 52 65 63  .      if( (pRec
2d00: 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61  ->flags&(MEM_Rea
2d10: 6c 7c 4d 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20  l|MEM_Int)) ){. 
2d20: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
2d30: 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70  beMemStringify(p
2d40: 52 65 63 2c 20 65 6e 63 2c 20 31 29 3b 0a 20 20  Rec, enc, 1);.  
2d50: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
2d60: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  pRec->flags &= ~
2d70: 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e  (MEM_Real|MEM_In
2d80: 74 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a  t);.  }.}../*.**
2d90: 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   Try to convert 
2da0: 74 68 65 20 74 79 70 65 20 6f 66 20 61 20 66 75  the type of a fu
2db0: 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20  nction argument 
2dc0: 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75  or a result colu
2dd0: 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61 20 6e 75 6d  mn.** into a num
2de0: 65 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74  eric representat
2df0: 69 6f 6e 2e 20 20 55 73 65 20 65 69 74 68 65 72  ion.  Use either
2e00: 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c   INTEGER or REAL
2e10: 20 77 68 69 63 68 65 76 65 72 0a 2a 2a 20 69 73   whichever.** is
2e20: 20 61 70 70 72 6f 70 72 69 61 74 65 2e 20 20 42   appropriate.  B
2e30: 75 74 20 6f 6e 6c 79 20 64 6f 20 74 68 65 20 63  ut only do the c
2e40: 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20 69 74 20  onversion if it 
2e50: 69 73 20 70 6f 73 73 69 62 6c 65 20 77 69 74 68  is possible with
2e60: 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20 6f 66 20 69  out.** loss of i
2e70: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20 72  nformation and r
2e80: 65 74 75 72 6e 20 74 68 65 20 72 65 76 69 73 65  eturn the revise
2e90: 64 20 74 79 70 65 20 6f 66 20 74 68 65 20 61 72  d type of the ar
2ea0: 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73  gument..*/.int s
2eb0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 6e 75 6d  qlite3_value_num
2ec0: 65 72 69 63 5f 74 79 70 65 28 73 71 6c 69 74 65  eric_type(sqlite
2ed0: 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a  3_value *pVal){.
2ee0: 20 20 69 6e 74 20 65 54 79 70 65 20 3d 20 73 71    int eType = sq
2ef0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65  lite3_value_type
2f00: 28 70 56 61 6c 29 3b 0a 20 20 69 66 28 20 65 54  (pVal);.  if( eT
2f10: 79 70 65 3d 3d 53 51 4c 49 54 45 5f 54 45 58 54  ype==SQLITE_TEXT
2f20: 20 29 7b 0a 20 20 20 20 4d 65 6d 20 2a 70 4d 65   ){.    Mem *pMe
2f30: 6d 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a  m = (Mem*)pVal;.
2f40: 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
2f50: 41 66 66 69 6e 69 74 79 28 70 4d 65 6d 2c 20 30  Affinity(pMem, 0
2f60: 29 3b 0a 20 20 20 20 65 54 79 70 65 20 3d 20 73  );.    eType = s
2f70: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70  qlite3_value_typ
2f80: 65 28 70 56 61 6c 29 3b 0a 20 20 7d 0a 20 20 72  e(pVal);.  }.  r
2f90: 65 74 75 72 6e 20 65 54 79 70 65 3b 0a 7d 0a 0a  eturn eType;.}..
2fa0: 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74 65 64 20 76  /*.** Exported v
2fb0: 65 72 73 69 6f 6e 20 6f 66 20 61 70 70 6c 79 41  ersion of applyA
2fc0: 66 66 69 6e 69 74 79 28 29 2e 20 54 68 69 73 20  ffinity(). This 
2fd0: 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e 20 73 71 6c  one works on sql
2fe0: 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a  ite3_value*, .**
2ff0: 20 6e 6f 74 20 74 68 65 20 69 6e 74 65 72 6e 61   not the interna
3000: 6c 20 4d 65 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a  l Mem* type..*/.
3010: 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
3020: 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a  eApplyAffinity(.
3030: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
3040: 2a 70 56 61 6c 2c 20 0a 20 20 75 38 20 61 66 66  *pVal, .  u8 aff
3050: 69 6e 69 74 79 2c 20 0a 20 20 75 38 20 65 6e 63  inity, .  u8 enc
3060: 0a 29 7b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e  .){.  applyAffin
3070: 69 74 79 28 28 4d 65 6d 20 2a 29 70 56 61 6c 2c  ity((Mem *)pVal,
3080: 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 29 3b   affinity, enc);
3090: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 70 4d 65 6d 20 63  .}../*.** pMem c
30a0: 75 72 72 65 6e 74 6c 79 20 6f 6e 6c 79 20 68 6f  urrently only ho
30b0: 6c 64 73 20 61 20 73 74 72 69 6e 67 20 74 79 70  lds a string typ
30c0: 65 20 28 6f 72 20 6d 61 79 62 65 20 61 20 42 4c  e (or maybe a BL
30d0: 4f 42 20 74 68 61 74 20 77 65 20 63 61 6e 0a 2a  OB that we can.*
30e0: 2a 20 69 6e 74 65 72 70 72 65 74 20 61 73 20 61  * interpret as a
30f0: 20 73 74 72 69 6e 67 20 69 66 20 77 65 20 77 61   string if we wa
3100: 6e 74 20 74 6f 29 2e 20 20 43 6f 6d 70 75 74 65  nt to).  Compute
3110: 20 69 74 73 20 63 6f 72 72 65 73 70 6f 6e 64 69   its correspondi
3120: 6e 67 0a 2a 2a 20 6e 75 6d 65 72 69 63 20 74 79  ng.** numeric ty
3130: 70 65 2c 20 69 66 20 68 61 73 20 6f 6e 65 2e 20  pe, if has one. 
3140: 20 53 65 74 20 74 68 65 20 70 4d 65 6d 2d 3e 75   Set the pMem->u
3150: 2e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e 75 2e 69  .r and pMem->u.i
3160: 20 66 69 65 6c 64 73 0a 2a 2a 20 61 63 63 6f 72   fields.** accor
3170: 64 69 6e 67 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69  dingly..*/.stati
3180: 63 20 75 31 36 20 53 51 4c 49 54 45 5f 4e 4f 49  c u16 SQLITE_NOI
3190: 4e 4c 49 4e 45 20 63 6f 6d 70 75 74 65 4e 75 6d  NLINE computeNum
31a0: 65 72 69 63 54 79 70 65 28 4d 65 6d 20 2a 70 4d  ericType(Mem *pM
31b0: 65 6d 29 7b 0a 20 20 61 73 73 65 72 74 28 20 28  em){.  assert( (
31c0: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
31d0: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
31e0: 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )==0 );.  assert
31f0: 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
3200: 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c   (MEM_Str|MEM_Bl
3210: 6f 62 29 29 21 3d 30 20 29 3b 0a 20 20 69 66 28  ob))!=0 );.  if(
3220: 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 4d 65   sqlite3AtoF(pMe
3230: 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e 72  m->z, &pMem->u.r
3240: 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d  , pMem->n, pMem-
3250: 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a 20 20 20 20  >enc)==0 ){.    
3260: 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20  return 0;.  }.  
3270: 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f 69 36  if( sqlite3Atoi6
3280: 34 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d  4(pMem->z, &pMem
3290: 2d 3e 75 2e 69 2c 20 70 4d 65 6d 2d 3e 6e 2c 20  ->u.i, pMem->n, 
32a0: 70 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 53 51 4c 49  pMem->enc)==SQLI
32b0: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74  TE_OK ){.    ret
32c0: 75 72 6e 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d  urn MEM_Int;.  }
32d0: 0a 20 20 72 65 74 75 72 6e 20 4d 45 4d 5f 52 65  .  return MEM_Re
32e0: 61 6c 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  al;.}../*.** Ret
32f0: 75 72 6e 20 74 68 65 20 6e 75 6d 65 72 69 63 20  urn the numeric 
3300: 74 79 70 65 20 66 6f 72 20 70 4d 65 6d 2c 20 65  type for pMem, e
3310: 69 74 68 65 72 20 4d 45 4d 5f 49 6e 74 20 6f 72  ither MEM_Int or
3320: 20 4d 45 4d 5f 52 65 61 6c 20 6f 72 20 62 6f 74   MEM_Real or bot
3330: 68 20 6f 72 0a 2a 2a 20 6e 6f 6e 65 2e 20 20 0a  h or.** none.  .
3340: 2a 2a 0a 2a 2a 20 55 6e 6c 69 6b 65 20 61 70 70  **.** Unlike app
3350: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
3360: 79 28 29 2c 20 74 68 69 73 20 72 6f 75 74 69 6e  y(), this routin
3370: 65 20 64 6f 65 73 20 6e 6f 74 20 6d 6f 64 69 66  e does not modif
3380: 79 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 2e 0a 2a  y pMem->flags..*
3390: 2a 20 42 75 74 20 69 74 20 64 6f 65 73 20 73 65  * But it does se
33a0: 74 20 70 4d 65 6d 2d 3e 75 2e 72 20 61 6e 64 20  t pMem->u.r and 
33b0: 70 4d 65 6d 2d 3e 75 2e 69 20 61 70 70 72 6f 70  pMem->u.i approp
33c0: 72 69 61 74 65 6c 79 2e 0a 2a 2f 0a 73 74 61 74  riately..*/.stat
33d0: 69 63 20 75 31 36 20 6e 75 6d 65 72 69 63 54 79  ic u16 numericTy
33e0: 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20  pe(Mem *pMem){. 
33f0: 20 69 66 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73   if( pMem->flags
3400: 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
3410: 52 65 61 6c 29 20 29 7b 0a 20 20 20 20 72 65 74  Real) ){.    ret
3420: 75 72 6e 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  urn pMem->flags 
3430: 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
3440: 65 61 6c 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  eal);.  }.  if( 
3450: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
3460: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
3470: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 63   ){.    return c
3480: 6f 6d 70 75 74 65 4e 75 6d 65 72 69 63 54 79 70  omputeNumericTyp
3490: 65 28 70 4d 65 6d 29 3b 0a 20 20 7d 0a 20 20 72  e(pMem);.  }.  r
34a0: 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 23 69 66 64  eturn 0;.}..#ifd
34b0: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
34c0: 2f 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 6e 69  /*.** Write a ni
34d0: 63 65 20 73 74 72 69 6e 67 20 72 65 70 72 65 73  ce string repres
34e0: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
34f0: 63 6f 6e 74 65 6e 74 73 20 6f 66 20 63 65 6c 6c  contents of cell
3500: 20 70 4d 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75   pMem.** into bu
3510: 66 66 65 72 20 7a 42 75 66 2c 20 6c 65 6e 67 74  ffer zBuf, lengt
3520: 68 20 6e 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20  h nBuf..*/.void 
3530: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72  sqlite3VdbeMemPr
3540: 65 74 74 79 50 72 69 6e 74 28 4d 65 6d 20 2a 70  ettyPrint(Mem *p
3550: 4d 65 6d 2c 20 63 68 61 72 20 2a 7a 42 75 66 29  Mem, char *zBuf)
3560: 7b 0a 20 20 63 68 61 72 20 2a 7a 43 73 72 20 3d  {.  char *zCsr =
3570: 20 7a 42 75 66 3b 0a 20 20 69 6e 74 20 66 20 3d   zBuf;.  int f =
3580: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20   pMem->flags;.. 
3590: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
35a0: 61 72 20 2a 63 6f 6e 73 74 20 65 6e 63 6e 61 6d  ar *const encnam
35b0: 65 73 5b 5d 20 3d 20 7b 22 28 58 29 22 2c 20 22  es[] = {"(X)", "
35c0: 28 38 29 22 2c 20 22 28 31 36 4c 45 29 22 2c 20  (8)", "(16LE)", 
35d0: 22 28 31 36 42 45 29 22 7d 3b 0a 0a 20 20 69 66  "(16BE)"};..  if
35e0: 28 20 66 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a  ( f&MEM_Blob ){.
35f0: 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 63      int i;.    c
3600: 68 61 72 20 63 3b 0a 20 20 20 20 69 66 28 20 66  har c;.    if( f
3610: 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20   & MEM_Dyn ){.  
3620: 20 20 20 20 63 20 3d 20 27 7a 27 3b 0a 20 20 20      c = 'z';.   
3630: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3640: 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  (MEM_Static|MEM_
3650: 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20  Ephem))==0 );.  
3660: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
3670: 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20 20  MEM_Static ){.  
3680: 20 20 20 20 63 20 3d 20 27 74 27 3b 0a 20 20 20      c = 't';.   
3690: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
36a0: 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68  (MEM_Dyn|MEM_Eph
36b0: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
36c0: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
36d0: 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20  _Ephem ){.      
36e0: 63 20 3d 20 27 65 27 3b 0a 20 20 20 20 20 20 61  c = 'e';.      a
36f0: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
3700: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29  _Static|MEM_Dyn)
3710: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
3720: 65 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 73 27  e{.      c = 's'
3730: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c  ;.    }..    sql
3740: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
3750: 30 2c 20 7a 43 73 72 2c 20 22 25 63 22 2c 20 63  0, zCsr, "%c", c
3760: 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  );.    zCsr += s
3770: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
3780: 43 73 72 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  Csr);.    sqlite
3790: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
37a0: 7a 43 73 72 2c 20 22 25 64 5b 22 2c 20 70 4d 65  zCsr, "%d[", pMe
37b0: 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a 43 73 72 20  m->n);.    zCsr 
37c0: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
37d0: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 66 6f  30(zCsr);.    fo
37e0: 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20 69  r(i=0; i<16 && i
37f0: 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a  <pMem->n; i++){.
3800: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e        sqlite3_sn
3810: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
3820: 2c 20 22 25 30 32 58 22 2c 20 28 28 69 6e 74 29  , "%02X", ((int)
3830: 70 4d 65 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78 46  pMem->z[i] & 0xF
3840: 46 29 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20  F));.      zCsr 
3850: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3860: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a  30(zCsr);.    }.
3870: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31      for(i=0; i<1
3880: 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20  6 && i<pMem->n; 
3890: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 68 61 72  i++){.      char
38a0: 20 7a 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b   z = pMem->z[i];
38b0: 0a 20 20 20 20 20 20 69 66 28 20 7a 3c 33 32 20  .      if( z<32 
38c0: 7c 7c 20 7a 3e 31 32 36 20 29 20 2a 7a 43 73 72  || z>126 ) *zCsr
38d0: 2b 2b 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20  ++ = '.';.      
38e0: 65 6c 73 65 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a  else *zCsr++ = z
38f0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c  ;.    }..    sql
3900: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
3910: 30 2c 20 7a 43 73 72 2c 20 22 5d 25 73 22 2c 20  0, zCsr, "]%s", 
3920: 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65  encnames[pMem->e
3930: 6e 63 5d 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b  nc]);.    zCsr +
3940: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
3950: 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 69 66 28  0(zCsr);.    if(
3960: 20 66 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b   f & MEM_Zero ){
3970: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
3980: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
3990: 72 2c 22 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75  r,"+%dz",pMem->u
39a0: 2e 6e 5a 65 72 6f 29 3b 0a 20 20 20 20 20 20 7a  .nZero);.      z
39b0: 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74  Csr += sqlite3St
39c0: 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20  rlen30(zCsr);.  
39d0: 20 20 7d 0a 20 20 20 20 2a 7a 43 73 72 20 3d 20    }.    *zCsr = 
39e0: 27 5c 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66  '\0';.  }else if
39f0: 28 20 66 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b  ( f & MEM_Str ){
3a00: 0a 20 20 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20  .    int j, k;. 
3a10: 20 20 20 7a 42 75 66 5b 30 5d 20 3d 20 27 20 27     zBuf[0] = ' '
3a20: 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45  ;.    if( f & ME
3a30: 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 7a  M_Dyn ){.      z
3a40: 42 75 66 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20 20  Buf[1] = 'z';.  
3a50: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
3a60: 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d   (MEM_Static|MEM
3a70: 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20  _Ephem))==0 );. 
3a80: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26     }else if( f &
3a90: 20 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20   MEM_Static ){. 
3aa0: 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27       zBuf[1] = '
3ab0: 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  t';.      assert
3ac0: 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c  ( (f & (MEM_Dyn|
3ad0: 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29  MEM_Ephem))==0 )
3ae0: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
3af0: 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b  f & MEM_Ephem ){
3b00: 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d  .      zBuf[1] =
3b10: 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65   'e';.      asse
3b20: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74  rt( (f & (MEM_St
3b30: 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d  atic|MEM_Dyn))==
3b40: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  0 );.    }else{.
3b50: 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20        zBuf[1] = 
3b60: 27 73 27 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6b  's';.    }.    k
3b70: 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 2;.    sqlite
3b80: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
3b90: 26 7a 42 75 66 5b 6b 5d 2c 20 22 25 64 22 2c 20  &zBuf[k], "%d", 
3ba0: 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20  pMem->n);.    k 
3bb0: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3bc0: 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20  30(&zBuf[k]);.  
3bd0: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b    zBuf[k++] = '[
3be0: 27 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20  ';.    for(j=0; 
3bf0: 6a 3c 31 35 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e  j<15 && j<pMem->
3c00: 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 75  n; j++){.      u
3c10: 38 20 63 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d  8 c = pMem->z[j]
3c20: 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3e 3d 30  ;.      if( c>=0
3c30: 78 32 30 20 26 26 20 63 3c 30 78 37 66 20 29 7b  x20 && c<0x7f ){
3c40: 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b  .        zBuf[k+
3c50: 2b 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20 7d 65  +] = c;.      }e
3c60: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 42 75  lse{.        zBu
3c70: 66 5b 6b 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20  f[k++] = '.';.  
3c80: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
3c90: 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b  zBuf[k++] = ']';
3ca0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
3cb0: 72 69 6e 74 66 28 31 30 30 2c 26 7a 42 75 66 5b  rintf(100,&zBuf[
3cc0: 6b 5d 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65  k], encnames[pMe
3cd0: 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 6b 20  m->enc]);.    k 
3ce0: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3cf0: 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20  30(&zBuf[k]);.  
3d00: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b    zBuf[k++] = 0;
3d10: 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  .  }.}.#endif..#
3d20: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
3d30: 55 47 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 74  UG./*.** Print t
3d40: 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20 72 65  he value of a re
3d50: 67 69 73 74 65 72 20 66 6f 72 20 74 72 61 63 69  gister for traci
3d60: 6e 67 20 70 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a  ng purposes:.*/.
3d70: 73 74 61 74 69 63 20 76 6f 69 64 20 6d 65 6d 54  static void memT
3d80: 72 61 63 65 50 72 69 6e 74 28 4d 65 6d 20 2a 70  racePrint(Mem *p
3d90: 29 7b 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61 67  ){.  if( p->flag
3da0: 73 20 26 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65  s & MEM_Undefine
3db0: 64 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28  d ){.    printf(
3dc0: 22 20 75 6e 64 65 66 69 6e 65 64 22 29 3b 0a 20  " undefined");. 
3dd0: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c   }else if( p->fl
3de0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
3df0: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 4e  {.    printf(" N
3e00: 55 4c 4c 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69  ULL");.  }else i
3e10: 66 28 20 28 70 2d 3e 66 6c 61 67 73 20 26 20 28  f( (p->flags & (
3e20: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29  MEM_Int|MEM_Str)
3e30: 29 3d 3d 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  )==(MEM_Int|MEM_
3e40: 53 74 72 29 20 29 7b 0a 20 20 20 20 70 72 69 6e  Str) ){.    prin
3e50: 74 66 28 22 20 73 69 3a 25 6c 6c 64 22 2c 20 70  tf(" si:%lld", p
3e60: 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65 6c 73 65 20  ->u.i);.  }else 
3e70: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
3e80: 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 70 72  EM_Int ){.    pr
3e90: 69 6e 74 66 28 22 20 69 3a 25 6c 6c 64 22 2c 20  intf(" i:%lld", 
3ea0: 70 2d 3e 75 2e 69 29 3b 0a 23 69 66 6e 64 65 66  p->u.i);.#ifndef
3eb0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
3ec0: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 7d 65  ATING_POINT.  }e
3ed0: 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73  lse if( p->flags
3ee0: 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20   & MEM_Real ){. 
3ef0: 20 20 20 70 72 69 6e 74 66 28 22 20 72 3a 25 67     printf(" r:%g
3f00: 22 2c 20 70 2d 3e 75 2e 72 29 3b 0a 23 65 6e 64  ", p->u.r);.#end
3f10: 69 66 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  if.  }else if( p
3f20: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
3f30: 77 53 65 74 20 29 7b 0a 20 20 20 20 70 72 69 6e  wSet ){.    prin
3f40: 74 66 28 22 20 28 72 6f 77 73 65 74 29 22 29 3b  tf(" (rowset)");
3f50: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63 68  .  }else{.    ch
3f60: 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b 0a 20 20  ar zBuf[200];.  
3f70: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
3f80: 50 72 65 74 74 79 50 72 69 6e 74 28 70 2c 20 7a  PrettyPrint(p, z
3f90: 42 75 66 29 3b 0a 20 20 20 20 70 72 69 6e 74 66  Buf);.    printf
3fa0: 28 22 20 25 73 22 2c 20 7a 42 75 66 29 3b 0a 20  (" %s", zBuf);. 
3fb0: 20 7d 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61 67   }.  if( p->flag
3fc0: 73 20 26 20 4d 45 4d 5f 53 75 62 74 79 70 65 20  s & MEM_Subtype 
3fd0: 29 20 70 72 69 6e 74 66 28 22 20 73 75 62 74 79  ) printf(" subty
3fe0: 70 65 3d 30 78 25 30 32 78 22 2c 20 70 2d 3e 65  pe=0x%02x", p->e
3ff0: 53 75 62 74 79 70 65 29 3b 0a 7d 0a 73 74 61 74  Subtype);.}.stat
4000: 69 63 20 76 6f 69 64 20 72 65 67 69 73 74 65 72  ic void register
4010: 54 72 61 63 65 28 69 6e 74 20 69 52 65 67 2c 20  Trace(int iReg, 
4020: 4d 65 6d 20 2a 70 29 7b 0a 20 20 70 72 69 6e 74  Mem *p){.  print
4030: 66 28 22 52 45 47 5b 25 64 5d 20 3d 20 22 2c 20  f("REG[%d] = ", 
4040: 69 52 65 67 29 3b 0a 20 20 6d 65 6d 54 72 61 63  iReg);.  memTrac
4050: 65 50 72 69 6e 74 28 70 29 3b 0a 20 20 70 72 69  ePrint(p);.  pri
4060: 6e 74 66 28 22 5c 6e 22 29 3b 0a 7d 0a 23 65 6e  ntf("\n");.}.#en
4070: 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
4080: 54 45 5f 44 45 42 55 47 0a 23 20 20 64 65 66 69  TE_DEBUG.#  defi
4090: 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  ne REGISTER_TRAC
40a0: 45 28 52 2c 4d 29 20 69 66 28 64 62 2d 3e 66 6c  E(R,M) if(db->fl
40b0: 61 67 73 26 53 51 4c 49 54 45 5f 56 64 62 65 54  ags&SQLITE_VdbeT
40c0: 72 61 63 65 29 72 65 67 69 73 74 65 72 54 72 61  race)registerTra
40d0: 63 65 28 52 2c 4d 29 0a 23 65 6c 73 65 0a 23 20  ce(R,M).#else.# 
40e0: 20 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52   define REGISTER
40f0: 5f 54 52 41 43 45 28 52 2c 4d 29 0a 23 65 6e 64  _TRACE(R,M).#end
4100: 69 66 0a 0a 0a 23 69 66 64 65 66 20 56 44 42 45  if...#ifdef VDBE
4110: 5f 50 52 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a  _PROFILE../* .**
4120: 20 68 77 74 69 6d 65 2e 68 20 63 6f 6e 74 61 69   hwtime.h contai
4130: 6e 73 20 69 6e 6c 69 6e 65 20 61 73 73 65 6d 62  ns inline assemb
4140: 6c 65 72 20 63 6f 64 65 20 66 6f 72 20 69 6d 70  ler code for imp
4150: 6c 65 6d 65 6e 74 69 6e 67 20 0a 2a 2a 20 68 69  lementing .** hi
4160: 67 68 2d 70 65 72 66 6f 72 6d 61 6e 63 65 20 74  gh-performance t
4170: 69 6d 69 6e 67 20 72 6f 75 74 69 6e 65 73 2e 0a  iming routines..
4180: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 68 77 74  */.#include "hwt
4190: 69 6d 65 2e 68 22 0a 0a 23 65 6e 64 69 66 0a 0a  ime.h"..#endif..
41a0: 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 2f  #ifndef NDEBUG./
41b0: 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69  *.** This functi
41c0: 6f 6e 20 69 73 20 6f 6e 6c 79 20 63 61 6c 6c 65  on is only calle
41d0: 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e  d from within an
41e0: 20 61 73 73 65 72 74 28 29 20 65 78 70 72 65 73   assert() expres
41f0: 73 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63 68 65 63  sion. It.** chec
4200: 6b 73 20 74 68 61 74 20 74 68 65 20 73 71 6c 69  ks that the sqli
4210: 74 65 33 2e 6e 54 72 61 6e 73 61 63 74 69 6f 6e  te3.nTransaction
4220: 20 76 61 72 69 61 62 6c 65 20 69 73 20 63 6f 72   variable is cor
4230: 72 65 63 74 6c 79 20 73 65 74 20 74 6f 0a 2a 2a  rectly set to.**
4240: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e   the number of n
4250: 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  on-transaction s
4260: 61 76 65 70 6f 69 6e 74 73 20 63 75 72 72 65 6e  avepoints curren
4270: 74 6c 79 20 69 6e 20 74 68 65 20 0a 2a 2a 20 6c  tly in the .** l
4280: 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74  inked list start
4290: 69 6e 67 20 61 74 20 73 71 6c 69 74 65 33 2e 70  ing at sqlite3.p
42a0: 53 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a  Savepoint..** .*
42b0: 2a 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20  * Usage:.**.**  
42c0: 20 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b     assert( check
42d0: 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64  SavepointCount(d
42e0: 62 29 20 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20  b) );.*/.static 
42f0: 69 6e 74 20 63 68 65 63 6b 53 61 76 65 70 6f 69  int checkSavepoi
4300: 6e 74 43 6f 75 6e 74 28 73 71 6c 69 74 65 33 20  ntCount(sqlite3 
4310: 2a 64 62 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20  *db){.  int n = 
4320: 30 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  0;.  Savepoint *
4330: 70 3b 0a 20 20 66 6f 72 28 70 3d 64 62 2d 3e 70  p;.  for(p=db->p
4340: 53 61 76 65 70 6f 69 6e 74 3b 20 70 3b 20 70 3d  Savepoint; p; p=
4350: 70 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20  p->pNext) n++;. 
4360: 20 61 73 73 65 72 74 28 20 6e 3d 3d 28 64 62 2d   assert( n==(db-
4370: 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62  >nSavepoint + db
4380: 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
4390: 61 76 65 70 6f 69 6e 74 29 20 29 3b 0a 20 20 72  avepoint) );.  r
43a0: 65 74 75 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69  eturn 1;.}.#endi
43b0: 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  f../*.** Return 
43c0: 74 68 65 20 72 65 67 69 73 74 65 72 20 6f 66 20  the register of 
43d0: 70 4f 70 2d 3e 70 32 20 61 66 74 65 72 20 66 69  pOp->p2 after fi
43e0: 72 73 74 20 70 72 65 70 61 72 69 6e 67 20 69 74  rst preparing it
43f0: 20 74 6f 20 62 65 0a 2a 2a 20 6f 76 65 72 77 72   to be.** overwr
4400: 69 74 74 65 6e 20 77 69 74 68 20 61 6e 20 69 6e  itten with an in
4410: 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2f 0a  teger value..*/.
4420: 73 74 61 74 69 63 20 53 51 4c 49 54 45 5f 4e 4f  static SQLITE_NO
4430: 49 4e 4c 49 4e 45 20 4d 65 6d 20 2a 6f 75 74 32  INLINE Mem *out2
4440: 50 72 65 72 65 6c 65 61 73 65 57 69 74 68 43 6c  PrereleaseWithCl
4450: 65 61 72 28 4d 65 6d 20 2a 70 4f 75 74 29 7b 0a  ear(Mem *pOut){.
4460: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
4470: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
4480: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
4490: 45 4d 5f 49 6e 74 3b 0a 20 20 72 65 74 75 72 6e  EM_Int;.  return
44a0: 20 70 4f 75 74 3b 0a 7d 0a 73 74 61 74 69 63 20   pOut;.}.static 
44b0: 4d 65 6d 20 2a 6f 75 74 32 50 72 65 72 65 6c 65  Mem *out2Prerele
44c0: 61 73 65 28 56 64 62 65 20 2a 70 2c 20 56 64 62  ase(Vdbe *p, Vdb
44d0: 65 4f 70 20 2a 70 4f 70 29 7b 0a 20 20 4d 65 6d  eOp *pOp){.  Mem
44e0: 20 2a 70 4f 75 74 3b 0a 20 20 61 73 73 65 72 74   *pOut;.  assert
44f0: 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
4500: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
4510: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
4520: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
4530: 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pOut = &p->aMem[
4540: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41  pOp->p2];.  memA
4550: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
4560: 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 56 64 62  pOut);.  if( Vdb
4570: 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74  eMemDynamic(pOut
4580: 29 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54  ) ){ /*OPTIMIZAT
4590: 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20  ION-IF-FALSE*/. 
45a0: 20 20 20 72 65 74 75 72 6e 20 6f 75 74 32 50 72     return out2Pr
45b0: 65 72 65 6c 65 61 73 65 57 69 74 68 43 6c 65 61  ereleaseWithClea
45c0: 72 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65  r(pOut);.  }else
45d0: 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  {.    pOut->flag
45e0: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20  s = MEM_Int;.   
45f0: 20 72 65 74 75 72 6e 20 70 4f 75 74 3b 0a 20 20   return pOut;.  
4600: 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63  }.}.../*.** Exec
4610: 75 74 65 20 61 73 20 6d 75 63 68 20 6f 66 20 61  ute as much of a
4620: 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20 61 73   VDBE program as
4630: 20 77 65 20 63 61 6e 2e 0a 2a 2a 20 54 68 69 73   we can..** This
4640: 20 69 73 20 74 68 65 20 63 6f 72 65 20 6f 66 20   is the core of 
4650: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 2e 20  sqlite3_step(). 
4660: 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33   .*/.int sqlite3
4670: 56 64 62 65 45 78 65 63 28 0a 20 20 56 64 62 65  VdbeExec(.  Vdbe
4680: 20 2a 70 20 20 20 20 20 20 20 20 20 20 20 20 20   *p             
4690: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44         /* The VD
46a0: 42 45 20 2a 2f 0a 29 7b 0a 20 20 4f 70 20 2a 61  BE */.){.  Op *a
46b0: 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 20 20 20 20  Op = p->aOp;    
46c0: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
46d0: 20 70 2d 3e 61 4f 70 20 2a 2f 0a 20 20 4f 70 20   p->aOp */.  Op 
46e0: 2a 70 4f 70 20 3d 20 61 4f 70 3b 20 20 20 20 20  *pOp = aOp;     
46f0: 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65          /* Curre
4700: 6e 74 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a  nt operation */.
4710: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
4720: 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66  TE_DEBUG) || def
4730: 69 6e 65 64 28 56 44 42 45 5f 50 52 4f 46 49 4c  ined(VDBE_PROFIL
4740: 45 29 0a 20 20 4f 70 20 2a 70 4f 72 69 67 4f 70  E).  Op *pOrigOp
4750: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
4760: 2f 2a 20 56 61 6c 75 65 20 6f 66 20 70 4f 70 20  /* Value of pOp 
4770: 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68  at the top of th
4780: 65 20 6c 6f 6f 70 20 2a 2f 0a 23 65 6e 64 69 66  e loop */.#endif
4790: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
47a0: 45 42 55 47 0a 20 20 69 6e 74 20 6e 45 78 74 72  EBUG.  int nExtr
47b0: 61 44 65 6c 65 74 65 20 3d 20 30 3b 20 20 20 20  aDelete = 0;    
47c0: 20 20 2f 2a 20 56 65 72 69 66 69 65 73 20 46 4f    /* Verifies FO
47d0: 52 44 45 4c 45 54 45 20 61 6e 64 20 41 55 58 44  RDELETE and AUXD
47e0: 45 4c 45 54 45 20 66 6c 61 67 73 20 2a 2f 0a 23  ELETE flags */.#
47f0: 65 6e 64 69 66 0a 20 20 69 6e 74 20 72 63 20 3d  endif.  int rc =
4800: 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20   SQLITE_OK;     
4810: 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
4820: 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c 69 74  eturn */.  sqlit
4830: 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 20  e3 *db = p->db; 
4840: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
4850: 61 62 61 73 65 20 2a 2f 0a 20 20 75 38 20 72 65  abase */.  u8 re
4860: 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74  setSchemaOnFault
4870: 20 3d 20 30 3b 20 2f 2a 20 52 65 73 65 74 20 73   = 0; /* Reset s
4880: 63 68 65 6d 61 20 61 66 74 65 72 20 61 6e 20 65  chema after an e
4890: 72 72 6f 72 20 69 66 20 70 6f 73 69 74 69 76 65  rror if positive
48a0: 20 2a 2f 0a 20 20 75 38 20 65 6e 63 6f 64 69 6e   */.  u8 encodin
48b0: 67 20 3d 20 45 4e 43 28 64 62 29 3b 20 20 20 20  g = ENC(db);    
48c0: 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65   /* The database
48d0: 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69   encoding */.  i
48e0: 6e 74 20 69 43 6f 6d 70 61 72 65 20 3d 20 30 3b  nt iCompare = 0;
48f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
4900: 75 6c 74 20 6f 66 20 6c 61 73 74 20 63 6f 6d 70  ult of last comp
4910: 61 72 69 73 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69  arison */.  unsi
4920: 67 6e 65 64 20 6e 56 6d 53 74 65 70 20 3d 20 30  gned nVmStep = 0
4930: 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
4940: 20 6f 66 20 76 69 72 74 75 61 6c 20 6d 61 63 68   of virtual mach
4950: 69 6e 65 20 73 74 65 70 73 20 2a 2f 0a 23 69 66  ine steps */.#if
4960: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
4970: 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41  _PROGRESS_CALLBA
4980: 43 4b 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50  CK.  unsigned nP
4990: 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 30  rogressLimit = 0
49a0: 3b 2f 2a 20 49 6e 76 6f 6b 65 20 78 50 72 6f 67  ;/* Invoke xProg
49b0: 72 65 73 73 28 29 20 77 68 65 6e 20 6e 56 6d 53  ress() when nVmS
49c0: 74 65 70 20 72 65 61 63 68 65 73 20 74 68 69 73  tep reaches this
49d0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d   */.#endif.  Mem
49e0: 20 2a 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d   *aMem = p->aMem
49f0: 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20  ;       /* Copy 
4a00: 6f 66 20 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20  of p->aMem */.  
4a10: 4d 65 6d 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20  Mem *pIn1 = 0;  
4a20: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73             /* 1s
4a30: 74 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20  t input operand 
4a40: 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d  */.  Mem *pIn2 =
4a50: 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   0;             
4a60: 2f 2a 20 32 6e 64 20 69 6e 70 75 74 20 6f 70 65  /* 2nd input ope
4a70: 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  rand */.  Mem *p
4a80: 49 6e 33 20 3d 20 30 3b 20 20 20 20 20 20 20 20  In3 = 0;        
4a90: 20 20 20 20 20 2f 2a 20 33 72 64 20 69 6e 70 75       /* 3rd inpu
4aa0: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d  t operand */.  M
4ab0: 65 6d 20 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20  em *pOut = 0;   
4ac0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 75 74            /* Out
4ad0: 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 23  put operand */.#
4ae0: 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49  ifdef VDBE_PROFI
4af0: 4c 45 0a 20 20 75 36 34 20 73 74 61 72 74 3b 20  LE.  u64 start; 
4b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b10: 2f 2a 20 43 50 55 20 63 6c 6f 63 6b 20 63 6f 75  /* CPU clock cou
4b20: 6e 74 20 61 74 20 73 74 61 72 74 20 6f 66 20 6f  nt at start of o
4b30: 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a  pcode */.#endif.
4b40: 20 20 2f 2a 2a 2a 20 49 4e 53 45 52 54 20 53 54    /*** INSERT ST
4b50: 41 43 4b 20 55 4e 49 4f 4e 20 48 45 52 45 20 2a  ACK UNION HERE *
4b60: 2a 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70  **/..  assert( p
4b70: 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41  ->magic==VDBE_MA
4b80: 47 49 43 5f 52 55 4e 20 29 3b 20 20 2f 2a 20 73  GIC_RUN );  /* s
4b90: 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 76 65  qlite3_step() ve
4ba0: 72 69 66 69 65 73 20 74 68 69 73 20 2a 2f 0a 20  rifies this */. 
4bb0: 20 73 71 6c 69 74 65 33 56 64 62 65 45 6e 74 65   sqlite3VdbeEnte
4bc0: 72 28 70 29 3b 0a 20 20 69 66 28 20 70 2d 3e 72  r(p);.  if( p->r
4bd0: 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20  c==SQLITE_NOMEM 
4be0: 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68  ){.    /* This h
4bf0: 61 70 70 65 6e 73 20 69 66 20 61 20 6d 61 6c 6c  appens if a mall
4c00: 6f 63 28 29 20 69 6e 73 69 64 65 20 61 20 63 61  oc() inside a ca
4c10: 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 6f  ll to sqlite3_co
4c20: 6c 75 6d 6e 5f 74 65 78 74 28 29 20 6f 72 0a 20  lumn_text() or. 
4c30: 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f     ** sqlite3_co
4c40: 6c 75 6d 6e 5f 74 65 78 74 31 36 28 29 20 66 61  lumn_text16() fa
4c50: 69 6c 65 64 2e 20 20 2a 2f 0a 20 20 20 20 67 6f  iled.  */.    go
4c60: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20  to no_mem;.  }. 
4c70: 20 61 73 73 65 72 74 28 20 70 2d 3e 72 63 3d 3d   assert( p->rc==
4c80: 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d  SQLITE_OK || (p-
4c90: 3e 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54  >rc&0xff)==SQLIT
4ca0: 45 5f 42 55 53 59 20 29 3b 0a 20 20 61 73 73 65  E_BUSY );.  asse
4cb0: 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
4cc0: 20 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 21   || p->readOnly!
4cd0: 3d 30 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20  =0 );.  p->rc = 
4ce0: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 70 2d 3e  SQLITE_OK;.  p->
4cf0: 69 43 75 72 72 65 6e 74 54 69 6d 65 20 3d 20 30  iCurrentTime = 0
4d00: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 65  ;.  assert( p->e
4d10: 78 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20 20 70  xplain==0 );.  p
4d20: 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 30  ->pResultSet = 0
4d30: 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64  ;.  db->busyHand
4d40: 6c 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20  ler.nBusy = 0;. 
4d50: 20 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e   if( db->u1.isIn
4d60: 74 65 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f  terrupted ) goto
4d70: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e   abort_due_to_in
4d80: 74 65 72 72 75 70 74 3b 0a 20 20 73 71 6c 69 74  terrupt;.  sqlit
4d90: 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c  e3VdbeIOTraceSql
4da0: 28 70 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  (p);.#ifndef SQL
4db0: 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
4dc0: 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 66 28  S_CALLBACK.  if(
4dd0: 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 20 29   db->xProgress )
4de0: 7b 0a 20 20 20 20 75 33 32 20 69 50 72 69 6f 72  {.    u32 iPrior
4df0: 20 3d 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53   = p->aCounter[S
4e00: 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53  QLITE_STMTSTATUS
4e10: 5f 56 4d 5f 53 54 45 50 5d 3b 0a 20 20 20 20 61  _VM_STEP];.    a
4e20: 73 73 65 72 74 28 20 30 20 3c 20 64 62 2d 3e 6e  ssert( 0 < db->n
4e30: 50 72 6f 67 72 65 73 73 4f 70 73 20 29 3b 0a 20  ProgressOps );. 
4e40: 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69     nProgressLimi
4e50: 74 20 3d 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73  t = db->nProgres
4e60: 73 4f 70 73 20 2d 20 28 69 50 72 69 6f 72 20 25  sOps - (iPrior %
4e70: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
4e80: 73 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 23  s);.  }.#endif.#
4e90: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
4ea0: 55 47 0a 20 20 73 71 6c 69 74 65 33 42 65 67 69  UG.  sqlite3Begi
4eb0: 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b  nBenignMalloc();
4ec0: 0a 20 20 69 66 28 20 70 2d 3e 70 63 3d 3d 30 0a  .  if( p->pc==0.
4ed0: 20 20 20 26 26 20 28 70 2d 3e 64 62 2d 3e 66 6c     && (p->db->fl
4ee0: 61 67 73 20 26 20 28 53 51 4c 49 54 45 5f 56 64  ags & (SQLITE_Vd
4ef0: 62 65 4c 69 73 74 69 6e 67 7c 53 51 4c 49 54 45  beListing|SQLITE
4f00: 5f 56 64 62 65 45 51 50 7c 53 51 4c 49 54 45 5f  _VdbeEQP|SQLITE_
4f10: 56 64 62 65 54 72 61 63 65 29 29 21 3d 30 0a 20  VdbeTrace))!=0. 
4f20: 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20   ){.    int i;. 
4f30: 20 20 20 69 6e 74 20 6f 6e 63 65 20 3d 20 31 3b     int once = 1;
4f40: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
4f50: 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20  PrintSql(p);.   
4f60: 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67   if( p->db->flag
4f70: 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 4c  s & SQLITE_VdbeL
4f80: 69 73 74 69 6e 67 20 29 7b 0a 20 20 20 20 20 20  isting ){.      
4f90: 70 72 69 6e 74 66 28 22 56 44 42 45 20 50 72 6f  printf("VDBE Pro
4fa0: 67 72 61 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e 22  gram Listing:\n"
4fb0: 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30  );.      for(i=0
4fc0: 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29  ; i<p->nOp; i++)
4fd0: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
4fe0: 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64  3VdbePrintOp(std
4ff0: 6f 75 74 2c 20 69 2c 20 26 61 4f 70 5b 69 5d 29  out, i, &aOp[i])
5000: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
5010: 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66      if( p->db->f
5020: 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64  lags & SQLITE_Vd
5030: 62 65 45 51 50 20 29 7b 0a 20 20 20 20 20 20 66  beEQP ){.      f
5040: 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70  or(i=0; i<p->nOp
5050: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
5060: 69 66 28 20 61 4f 70 5b 69 5d 2e 6f 70 63 6f 64  if( aOp[i].opcod
5070: 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29 7b  e==OP_Explain ){
5080: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6f  .          if( o
5090: 6e 63 65 20 29 20 70 72 69 6e 74 66 28 22 56 44  nce ) printf("VD
50a0: 42 45 20 51 75 65 72 79 20 50 6c 61 6e 3a 5c 6e  BE Query Plan:\n
50b0: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70 72  ");.          pr
50c0: 69 6e 74 66 28 22 25 73 5c 6e 22 2c 20 61 4f 70  intf("%s\n", aOp
50d0: 5b 69 5d 2e 70 34 2e 7a 29 3b 0a 20 20 20 20 20  [i].p4.z);.     
50e0: 20 20 20 20 20 6f 6e 63 65 20 3d 20 30 3b 0a 20       once = 0;. 
50f0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
5100: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70  .    }.    if( p
5110: 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51  ->db->flags & SQ
5120: 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 29  LITE_VdbeTrace )
5130: 20 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 54    printf("VDBE T
5140: 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 7d 0a 20  race:\n");.  }. 
5150: 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67   sqlite3EndBenig
5160: 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64 69  nMalloc();.#endi
5170: 66 0a 20 20 66 6f 72 28 70 4f 70 3d 26 61 4f 70  f.  for(pOp=&aOp
5180: 5b 70 2d 3e 70 63 5d 3b 20 31 3b 20 70 4f 70 2b  [p->pc]; 1; pOp+
5190: 2b 29 7b 0a 20 20 20 20 2f 2a 20 45 72 72 6f 72  +){.    /* Error
51a0: 73 20 61 72 65 20 64 65 74 65 63 74 65 64 20 62  s are detected b
51b0: 79 20 69 6e 64 69 76 69 64 75 61 6c 20 6f 70 63  y individual opc
51c0: 6f 64 65 73 2c 20 77 69 74 68 20 61 6e 20 69 6d  odes, with an im
51d0: 6d 65 64 69 61 74 65 0a 20 20 20 20 2a 2a 20 6a  mediate.    ** j
51e0: 75 6d 70 73 20 74 6f 20 61 62 6f 72 74 5f 64 75  umps to abort_du
51f0: 65 5f 74 6f 5f 65 72 72 6f 72 2e 20 2a 2f 0a 20  e_to_error. */. 
5200: 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
5210: 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 0a 20 20 20  QLITE_OK );..   
5220: 20 61 73 73 65 72 74 28 20 70 4f 70 3e 3d 61 4f   assert( pOp>=aO
5230: 70 20 26 26 20 70 4f 70 3c 26 61 4f 70 5b 70 2d  p && pOp<&aOp[p-
5240: 3e 6e 4f 70 5d 29 3b 0a 23 69 66 64 65 66 20 56  >nOp]);.#ifdef V
5250: 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20  DBE_PROFILE.    
5260: 73 74 61 72 74 20 3d 20 73 71 6c 69 74 65 33 48  start = sqlite3H
5270: 77 74 69 6d 65 28 29 3b 0a 23 65 6e 64 69 66 0a  wtime();.#endif.
5280: 20 20 20 20 6e 56 6d 53 74 65 70 2b 2b 3b 0a 23      nVmStep++;.#
5290: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
52a0: 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41  BLE_STMT_SCANSTA
52b0: 54 55 53 0a 20 20 20 20 69 66 28 20 70 2d 3e 61  TUS.    if( p->a
52c0: 6e 45 78 65 63 20 29 20 70 2d 3e 61 6e 45 78 65  nExec ) p->anExe
52d0: 63 5b 28 69 6e 74 29 28 70 4f 70 2d 61 4f 70 29  c[(int)(pOp-aOp)
52e0: 5d 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20  ]++;.#endif..   
52f0: 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20 74   /* Only allow t
5300: 72 61 63 69 6e 67 20 69 66 20 53 51 4c 49 54 45  racing if SQLITE
5310: 5f 44 45 42 55 47 20 69 73 20 64 65 66 69 6e 65  _DEBUG is define
5320: 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66  d..    */.#ifdef
5330: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
5340: 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20    if( db->flags 
5350: 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61  & SQLITE_VdbeTra
5360: 63 65 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ce ){.      sqli
5370: 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73  te3VdbePrintOp(s
5380: 74 64 6f 75 74 2c 20 28 69 6e 74 29 28 70 4f 70  tdout, (int)(pOp
5390: 20 2d 20 61 4f 70 29 2c 20 70 4f 70 29 3b 0a 20   - aOp), pOp);. 
53a0: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20     }.#endif.    
53b0: 20 20 0a 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b    ..    /* Check
53c0: 20 74 6f 20 73 65 65 20 69 66 20 77 65 20 6e 65   to see if we ne
53d0: 65 64 20 74 6f 20 73 69 6d 75 6c 61 74 65 20 61  ed to simulate a
53e0: 6e 20 69 6e 74 65 72 72 75 70 74 2e 20 20 54 68  n interrupt.  Th
53f0: 69 73 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73 0a  is only happens.
5400: 20 20 20 20 2a 2a 20 69 66 20 77 65 20 68 61 76      ** if we hav
5410: 65 20 61 20 73 70 65 63 69 61 6c 20 74 65 73 74  e a special test
5420: 20 62 75 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a 23   build..    */.#
5430: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
5440: 54 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  T.    if( sqlite
5450: 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e  3_interrupt_coun
5460: 74 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  t>0 ){.      sql
5470: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63  ite3_interrupt_c
5480: 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 69 66  ount--;.      if
5490: 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  ( sqlite3_interr
54a0: 75 70 74 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b 0a  upt_count==0 ){.
54b0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
54c0: 69 6e 74 65 72 72 75 70 74 28 64 62 29 3b 0a 20  interrupt(db);. 
54d0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e       }.    }.#en
54e0: 64 69 66 0a 0a 20 20 20 20 2f 2a 20 53 61 6e 69  dif..    /* Sani
54f0: 74 79 20 63 68 65 63 6b 69 6e 67 20 6f 6e 20 6f  ty checking on o
5500: 74 68 65 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f  ther operands */
5510: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
5520: 45 42 55 47 0a 20 20 20 20 7b 0a 20 20 20 20 20  EBUG.    {.     
5530: 20 75 38 20 6f 70 50 72 6f 70 65 72 74 79 20 3d   u8 opProperty =
5540: 20 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72   sqlite3OpcodePr
5550: 6f 70 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63 6f  operty[pOp->opco
5560: 64 65 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 28  de];.      if( (
5570: 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46  opProperty & OPF
5580: 4c 47 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20  LG_IN1)!=0 ){.  
5590: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
55a0: 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 20 20 20  p->p1>0 );.     
55b0: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
55c0: 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p1<=(p->nMem+1 -
55d0: 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
55e0: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
55f0: 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
5600: 5b 70 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a 20 20  [pOp->p1]) );.  
5610: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
5620: 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65  lite3VdbeCheckMe
5630: 6d 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65  mInvariants(&aMe
5640: 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a 20  m[pOp->p1]) );. 
5650: 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f         REGISTER_
5660: 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 26  TRACE(pOp->p1, &
5670: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a  aMem[pOp->p1]);.
5680: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
5690: 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20  ( (opProperty & 
56a0: 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b  OPFLG_IN2)!=0 ){
56b0: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
56c0: 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
56d0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
56e0: 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p2<=(p->nMem+
56f0: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
5700: 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
5710: 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61  t( memIsValid(&a
5720: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20 29 3b  Mem[pOp->p2]) );
5730: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
5740: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63   sqlite3VdbeChec
5750: 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 26  kMemInvariants(&
5760: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20 29  aMem[pOp->p2]) )
5770: 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49 53 54  ;.        REGIST
5780: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
5790: 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  , &aMem[pOp->p2]
57a0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
57b0: 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79   if( (opProperty
57c0: 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29 21 3d 30   & OPFLG_IN3)!=0
57d0: 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
57e0: 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b  rt( pOp->p3>0 );
57f0: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
5800: 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
5810: 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
5820: 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  r) );.        as
5830: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
5840: 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29  (&aMem[pOp->p3])
5850: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
5860: 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 43  rt( sqlite3VdbeC
5870: 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74  heckMemInvariant
5880: 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  s(&aMem[pOp->p3]
5890: 29 20 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47  ) );.        REG
58a0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
58b0: 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  >p3, &aMem[pOp->
58c0: 70 33 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  p3]);.      }.  
58d0: 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65      if( (opPrope
58e0: 72 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32  rty & OPFLG_OUT2
58f0: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
5900: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
5910: 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  0 );.        ass
5920: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70  ert( pOp->p2<=(p
5930: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
5940: 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20  ursor) );.      
5950: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
5960: 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ge(p, &aMem[pOp-
5970: 3e 70 32 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20  >p2]);.      }. 
5980: 20 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70       if( (opProp
5990: 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54  erty & OPFLG_OUT
59a0: 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  3)!=0 ){.       
59b0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
59c0: 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  >0 );.        as
59d0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28  sert( pOp->p3<=(
59e0: 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
59f0: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20  Cursor) );.     
5a00: 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
5a10: 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70  nge(p, &aMem[pOp
5a20: 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 7d 0a  ->p3]);.      }.
5a30: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66      }.#endif.#if
5a40: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
5a50: 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65  DEBUG) || define
5a60: 64 28 56 44 42 45 5f 50 52 4f 46 49 4c 45 29 0a  d(VDBE_PROFILE).
5a70: 20 20 20 20 70 4f 72 69 67 4f 70 20 3d 20 70 4f      pOrigOp = pO
5a80: 70 3b 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 20  p;.#endif.  .   
5a90: 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70   switch( pOp->op
5aa0: 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a  code ){../******
5ab0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ac0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ad0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ae0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5af0: 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68 61 74 20  *******.** What 
5b00: 66 6f 6c 6c 6f 77 73 20 69 73 20 61 20 6d 61 73  follows is a mas
5b10: 73 69 76 65 20 73 77 69 74 63 68 20 73 74 61 74  sive switch stat
5b20: 65 6d 65 6e 74 20 77 68 65 72 65 20 65 61 63 68  ement where each
5b30: 20 63 61 73 65 20 69 6d 70 6c 65 6d 65 6e 74 73   case implements
5b40: 20 61 0a 2a 2a 20 73 65 70 61 72 61 74 65 20 69   a.** separate i
5b50: 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 20 74 68  nstruction in th
5b60: 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  e virtual machin
5b70: 65 2e 20 20 49 66 20 77 65 20 66 6f 6c 6c 6f 77  e.  If we follow
5b80: 20 74 68 65 20 75 73 75 61 6c 0a 2a 2a 20 69 6e   the usual.** in
5b90: 64 65 6e 74 61 74 69 6f 6e 20 63 6f 6e 76 65 6e  dentation conven
5ba0: 74 69 6f 6e 73 2c 20 65 61 63 68 20 63 61 73 65  tions, each case
5bb0: 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e   should be inden
5bc0: 74 65 64 20 62 79 20 36 20 73 70 61 63 65 73 2e  ted by 6 spaces.
5bd0: 20 20 42 75 74 0a 2a 2a 20 74 68 61 74 20 69 73    But.** that is
5be0: 20 61 20 6c 6f 74 20 6f 66 20 77 61 73 74 65 64   a lot of wasted
5bf0: 20 73 70 61 63 65 20 6f 6e 20 74 68 65 20 6c 65   space on the le
5c00: 66 74 20 6d 61 72 67 69 6e 2e 20 20 53 6f 20 74  ft margin.  So t
5c10: 68 65 20 63 6f 64 65 20 77 69 74 68 69 6e 0a 2a  he code within.*
5c20: 2a 20 74 68 65 20 73 77 69 74 63 68 20 73 74 61  * the switch sta
5c30: 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62 72 65 61  tement will brea
5c40: 6b 20 77 69 74 68 20 63 6f 6e 76 65 6e 74 69 6f  k with conventio
5c50: 6e 20 61 6e 64 20 62 65 20 66 6c 75 73 68 2d 6c  n and be flush-l
5c60: 65 66 74 2e 20 41 6e 6f 74 68 65 72 0a 2a 2a 20  eft. Another.** 
5c70: 62 69 67 20 63 6f 6d 6d 65 6e 74 20 28 73 69 6d  big comment (sim
5c80: 69 6c 61 72 20 74 6f 20 74 68 69 73 20 6f 6e 65  ilar to this one
5c90: 29 20 77 69 6c 6c 20 6d 61 72 6b 20 74 68 65 20  ) will mark the 
5ca0: 70 6f 69 6e 74 20 69 6e 20 74 68 65 20 63 6f 64  point in the cod
5cb0: 65 20 77 68 65 72 65 0a 2a 2a 20 77 65 20 74 72  e where.** we tr
5cc0: 61 6e 73 69 74 69 6f 6e 20 62 61 63 6b 20 74 6f  ansition back to
5cd0: 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74   normal indentat
5ce0: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66  ion..**.** The f
5cf0: 6f 72 6d 61 74 74 69 6e 67 20 6f 66 20 65 61 63  ormatting of eac
5d00: 68 20 63 61 73 65 20 69 73 20 69 6d 70 6f 72 74  h case is import
5d10: 61 6e 74 2e 20 20 54 68 65 20 6d 61 6b 65 66 69  ant.  The makefi
5d20: 6c 65 20 66 6f 72 20 53 51 4c 69 74 65 0a 2a 2a  le for SQLite.**
5d30: 20 67 65 6e 65 72 61 74 65 73 20 74 77 6f 20 43   generates two C
5d40: 20 66 69 6c 65 73 20 22 6f 70 63 6f 64 65 73 2e   files "opcodes.
5d50: 68 22 20 61 6e 64 20 22 6f 70 63 6f 64 65 73 2e  h" and "opcodes.
5d60: 63 22 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74  c" by scanning t
5d70: 68 69 73 0a 2a 2a 20 66 69 6c 65 20 6c 6f 6f 6b  his.** file look
5d80: 69 6e 67 20 66 6f 72 20 6c 69 6e 65 73 20 74 68  ing for lines th
5d90: 61 74 20 62 65 67 69 6e 20 77 69 74 68 20 22 63  at begin with "c
5da0: 61 73 65 20 4f 50 5f 22 2e 20 20 54 68 65 20 6f  ase OP_".  The o
5db0: 70 63 6f 64 65 73 2e 68 20 66 69 6c 65 73 0a 2a  pcodes.h files.*
5dc0: 2a 20 77 69 6c 6c 20 62 65 20 66 69 6c 6c 65 64  * will be filled
5dd0: 20 77 69 74 68 20 23 64 65 66 69 6e 65 73 20 74   with #defines t
5de0: 68 61 74 20 67 69 76 65 20 75 6e 69 71 75 65 20  hat give unique 
5df0: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73 20 74  integer values t
5e00: 6f 20 65 61 63 68 0a 2a 2a 20 6f 70 63 6f 64 65  o each.** opcode
5e10: 20 61 6e 64 20 74 68 65 20 6f 70 63 6f 64 65 73   and the opcodes
5e20: 2e 63 20 66 69 6c 65 20 69 73 20 66 69 6c 6c 65  .c file is fille
5e30: 64 20 77 69 74 68 20 61 6e 20 61 72 72 61 79 20  d with an array 
5e40: 6f 66 20 73 74 72 69 6e 67 73 20 77 68 65 72 65  of strings where
5e50: 0a 2a 2a 20 65 61 63 68 20 73 74 72 69 6e 67 20  .** each string 
5e60: 69 73 20 74 68 65 20 73 79 6d 62 6f 6c 69 63 20  is the symbolic 
5e70: 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 63 6f 72  name for the cor
5e80: 72 65 73 70 6f 6e 64 69 6e 67 20 6f 70 63 6f 64  responding opcod
5e90: 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 63 61  e.  If the.** ca
5ea0: 73 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  se statement is 
5eb0: 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f  followed by a co
5ec0: 6d 6d 65 6e 74 20 6f 66 20 74 68 65 20 66 6f 72  mment of the for
5ed0: 6d 20 22 2f 23 20 73 61 6d 65 20 61 73 20 2e 2e  m "/# same as ..
5ee0: 2e 20 23 2f 22 0a 2a 2a 20 74 68 61 74 20 63 6f  . #/".** that co
5ef0: 6d 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f  mment is used to
5f00: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 70   determine the p
5f10: 61 72 74 69 63 75 6c 61 72 20 76 61 6c 75 65 20  articular value 
5f20: 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 0a 2a  of the opcode..*
5f30: 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b 65 79 77 6f  *.** Other keywo
5f40: 72 64 73 20 69 6e 20 74 68 65 20 63 6f 6d 6d 65  rds in the comme
5f50: 6e 74 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20  nt that follows 
5f60: 65 61 63 68 20 63 61 73 65 20 61 72 65 20 75 73  each case are us
5f70: 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73 74 72 75  ed to.** constru
5f80: 63 74 20 74 68 65 20 4f 50 46 4c 47 5f 49 4e 49  ct the OPFLG_INI
5f90: 54 49 41 4c 49 5a 45 52 20 76 61 6c 75 65 20 74  TIALIZER value t
5fa0: 68 61 74 20 69 6e 69 74 69 61 6c 69 7a 65 73 20  hat initializes 
5fb0: 6f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d  opcodeProperty[]
5fc0: 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64 73 20 69 6e  ..** Keywords in
5fd0: 63 6c 75 64 65 3a 20 69 6e 31 2c 20 69 6e 32 2c  clude: in1, in2,
5fe0: 20 69 6e 33 2c 20 6f 75 74 32 2c 20 6f 75 74 33   in3, out2, out3
5ff0: 2e 20 20 53 65 65 0a 2a 2a 20 74 68 65 20 6d 6b  .  See.** the mk
6000: 6f 70 63 6f 64 65 68 2e 61 77 6b 20 73 63 72 69  opcodeh.awk scri
6010: 70 74 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  pt for additiona
6020: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
6030: 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e 74 61 74 69  *.** Documentati
6040: 6f 6e 20 61 62 6f 75 74 20 56 44 42 45 20 6f 70  on about VDBE op
6050: 63 6f 64 65 73 20 69 73 20 67 65 6e 65 72 61 74  codes is generat
6060: 65 64 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74  ed by scanning t
6070: 68 69 73 20 66 69 6c 65 0a 2a 2a 20 66 6f 72 20  his file.** for 
6080: 6c 69 6e 65 73 20 6f 66 20 74 68 61 74 20 63 6f  lines of that co
6090: 6e 74 61 69 6e 20 22 4f 70 63 6f 64 65 3a 22 2e  ntain "Opcode:".
60a0: 20 20 54 68 61 74 20 6c 69 6e 65 20 61 6e 64 20    That line and 
60b0: 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 0a 2a  all subsequent.*
60c0: 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69 6e 65 73 20  * comment lines 
60d0: 61 72 65 20 75 73 65 64 20 69 6e 20 74 68 65 20  are used in the 
60e0: 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74 68  generation of th
60f0: 65 20 6f 70 63 6f 64 65 2e 68 74 6d 6c 20 64 6f  e opcode.html do
6100: 63 75 6d 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 66  cumentation.** f
6110: 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 55 4d 4d 41  ile..**.** SUMMA
6120: 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 46 6f  RY:.**.**     Fo
6130: 72 6d 61 74 74 69 6e 67 20 69 73 20 69 6d 70 6f  rmatting is impo
6140: 72 74 61 6e 74 20 74 6f 20 73 63 72 69 70 74 73  rtant to scripts
6150: 20 74 68 61 74 20 73 63 61 6e 20 74 68 69 73 20   that scan this 
6160: 66 69 6c 65 2e 0a 2a 2a 20 20 20 20 20 44 6f 20  file..**     Do 
6170: 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72 6f 6d  not deviate from
6180: 20 74 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20   the formatting 
6190: 73 74 79 6c 65 20 63 75 72 72 65 6e 74 6c 79 20  style currently 
61a0: 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a  in use..**.*****
61b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
61c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
61d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
61e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
61f0: 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 4f 70  ********/../* Op
6200: 63 6f 64 65 3a 20 20 47 6f 74 6f 20 2a 20 50 32  code:  Goto * P2
6210: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6e 20   * * *.**.** An 
6220: 75 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 6a 75  unconditional ju
6230: 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32  mp to address P2
6240: 2e 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 69 6e  ..** The next in
6250: 73 74 72 75 63 74 69 6f 6e 20 65 78 65 63 75 74  struction execut
6260: 65 64 20 77 69 6c 6c 20 62 65 20 0a 2a 2a 20 74  ed will be .** t
6270: 68 65 20 6f 6e 65 20 61 74 20 69 6e 64 65 78 20  he one at index 
6280: 50 32 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69  P2 from the begi
6290: 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20 74 68 65 20  nning of.** the 
62a0: 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 54  program..**.** T
62b0: 68 65 20 50 31 20 70 61 72 61 6d 65 74 65 72 20  he P1 parameter 
62c0: 69 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20  is not actually 
62d0: 75 73 65 64 20 62 79 20 74 68 69 73 20 6f 70 63  used by this opc
62e0: 6f 64 65 2e 20 20 48 6f 77 65 76 65 72 2c 20 69  ode.  However, i
62f0: 74 0a 2a 2a 20 69 73 20 73 6f 6d 65 74 69 6d 65  t.** is sometime
6300: 73 20 73 65 74 20 74 6f 20 31 20 69 6e 73 74 65  s set to 1 inste
6310: 61 64 20 6f 66 20 30 20 61 73 20 61 20 68 69 6e  ad of 0 as a hin
6320: 74 20 74 6f 20 74 68 65 20 63 6f 6d 6d 61 6e 64  t to the command
6330: 2d 6c 69 6e 65 20 73 68 65 6c 6c 0a 2a 2a 20 74  -line shell.** t
6340: 68 61 74 20 74 68 69 73 20 47 6f 74 6f 20 69 73  hat this Goto is
6350: 20 74 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20 61   the bottom of a
6360: 20 6c 6f 6f 70 20 61 6e 64 20 74 68 61 74 20 74   loop and that t
6370: 68 65 20 6c 69 6e 65 73 20 66 72 6f 6d 20 50 32  he lines from P2
6380: 20 64 6f 77 6e 0a 2a 2a 20 74 6f 20 74 68 65 20   down.** to the 
6390: 63 75 72 72 65 6e 74 20 6c 69 6e 65 20 73 68 6f  current line sho
63a0: 75 6c 64 20 62 65 20 69 6e 64 65 6e 74 65 64 20  uld be indented 
63b0: 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70  for EXPLAIN outp
63c0: 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47  ut..*/.case OP_G
63d0: 6f 74 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 20  oto: {          
63e0: 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 6a 75     /* jump */.ju
63f0: 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65  mp_to_p2_and_che
6400: 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74  ck_for_interrupt
6410: 3a 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70  :.  pOp = &aOp[p
6420: 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a 0a 20 20  Op->p2 - 1];..  
6430: 2f 2a 20 4f 70 63 6f 64 65 73 20 74 68 61 74 20  /* Opcodes that 
6440: 61 72 65 20 75 73 65 64 20 61 73 20 74 68 65 20  are used as the 
6450: 62 6f 74 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70  bottom of a loop
6460: 20 28 4f 50 5f 4e 65 78 74 2c 20 4f 50 5f 50 72   (OP_Next, OP_Pr
6470: 65 76 2c 0a 20 20 2a 2a 20 4f 50 5f 56 4e 65 78  ev,.  ** OP_VNex
6480: 74 2c 20 4f 50 5f 52 6f 77 53 65 74 4e 65 78 74  t, OP_RowSetNext
6490: 2c 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72 4e 65  , or OP_SorterNe
64a0: 78 74 29 20 61 6c 6c 20 6a 75 6d 70 20 68 65 72  xt) all jump her
64b0: 65 20 75 70 6f 6e 0a 20 20 2a 2a 20 63 6f 6d 70  e upon.  ** comp
64c0: 6c 65 74 69 6f 6e 2e 20 20 43 68 65 63 6b 20 74  letion.  Check t
64d0: 6f 20 73 65 65 20 69 66 20 73 71 6c 69 74 65 33  o see if sqlite3
64e0: 5f 69 6e 74 65 72 72 75 70 74 28 29 20 68 61 73  _interrupt() has
64f0: 20 62 65 65 6e 20 63 61 6c 6c 65 64 0a 20 20 2a   been called.  *
6500: 2a 20 6f 72 20 69 66 20 74 68 65 20 70 72 6f 67  * or if the prog
6510: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 6e 65  ress callback ne
6520: 65 64 73 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65  eds to be invoke
6530: 64 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  d. .  **.  ** Th
6540: 69 73 20 63 6f 64 65 20 75 73 65 73 20 75 6e 73  is code uses uns
6550: 74 72 75 63 74 75 72 65 64 20 22 67 6f 74 6f 22  tructured "goto"
6560: 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e 64 20   statements and 
6570: 64 6f 65 73 20 6e 6f 74 20 6c 6f 6f 6b 20 63 6c  does not look cl
6580: 65 61 6e 2e 0a 20 20 2a 2a 20 42 75 74 20 74 68  ean..  ** But th
6590: 61 74 20 69 73 20 6e 6f 74 20 64 75 65 20 74 6f  at is not due to
65a0: 20 73 6c 6f 70 70 79 20 63 6f 64 69 6e 67 20 68   sloppy coding h
65b0: 61 62 69 74 73 2e 20 54 68 65 20 63 6f 64 65 20  abits. The code 
65c0: 69 73 20 77 72 69 74 74 65 6e 20 74 68 69 73 0a  is written this.
65d0: 20 20 2a 2a 20 77 61 79 20 66 6f 72 20 70 65 72    ** way for per
65e0: 66 6f 72 6d 61 6e 63 65 2c 20 74 6f 20 61 76 6f  formance, to avo
65f0: 69 64 20 68 61 76 69 6e 67 20 74 6f 20 72 75 6e  id having to run
6600: 20 74 68 65 20 69 6e 74 65 72 72 75 70 74 20 61   the interrupt a
6610: 6e 64 20 70 72 6f 67 72 65 73 73 0a 20 20 2a 2a  nd progress.  **
6620: 20 63 68 65 63 6b 73 20 6f 6e 20 65 76 65 72 79   checks on every
6630: 20 6f 70 63 6f 64 65 2e 20 20 54 68 69 73 20 68   opcode.  This h
6640: 65 6c 70 73 20 73 71 6c 69 74 65 33 5f 73 74 65  elps sqlite3_ste
6650: 70 28 29 20 74 6f 20 72 75 6e 20 61 62 6f 75 74  p() to run about
6660: 20 31 2e 35 25 0a 20 20 2a 2a 20 66 61 73 74 65   1.5%.  ** faste
6670: 72 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 22  r according to "
6680: 76 61 6c 67 72 69 6e 64 20 2d 2d 74 6f 6f 6c 3d  valgrind --tool=
6690: 63 61 63 68 65 67 72 69 6e 64 22 20 2a 2f 0a 63  cachegrind" */.c
66a0: 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
66b0: 70 74 3a 0a 20 20 69 66 28 20 64 62 2d 3e 75 31  pt:.  if( db->u1
66c0: 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29  .isInterrupted )
66d0: 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
66e0: 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 23 69  to_interrupt;.#i
66f0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
6700: 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42  T_PROGRESS_CALLB
6710: 41 43 4b 0a 20 20 2f 2a 20 43 61 6c 6c 20 74 68  ACK.  /* Call th
6720: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
6730: 61 63 6b 20 69 66 20 69 74 20 69 73 20 63 6f 6e  ack if it is con
6740: 66 69 67 75 72 65 64 20 61 6e 64 20 74 68 65 20  figured and the 
6750: 72 65 71 75 69 72 65 64 20 6e 75 6d 62 65 72 0a  required number.
6760: 20 20 2a 2a 20 6f 66 20 56 44 42 45 20 6f 70 73    ** of VDBE ops
6770: 20 68 61 76 65 20 62 65 65 6e 20 65 78 65 63 75   have been execu
6780: 74 65 64 20 28 65 69 74 68 65 72 20 73 69 6e 63  ted (either sinc
6790: 65 20 74 68 69 73 20 69 6e 76 6f 63 61 74 69 6f  e this invocatio
67a0: 6e 20 6f 66 0a 20 20 2a 2a 20 73 71 6c 69 74 65  n of.  ** sqlite
67b0: 33 56 64 62 65 45 78 65 63 28 29 20 6f 72 20 73  3VdbeExec() or s
67c0: 69 6e 63 65 20 6c 61 73 74 20 74 69 6d 65 20 74  ince last time t
67d0: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
67e0: 62 61 63 6b 20 77 61 73 20 63 61 6c 6c 65 64 29  back was called)
67f0: 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 70 72  ..  ** If the pr
6800: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
6810: 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f  returns non-zero
6820: 2c 20 65 78 69 74 20 74 68 65 20 76 69 72 74 75  , exit the virtu
6830: 61 6c 20 6d 61 63 68 69 6e 65 20 77 69 74 68 0a  al machine with.
6840: 20 20 2a 2a 20 61 20 72 65 74 75 72 6e 20 63 6f    ** a return co
6850: 64 65 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 2e  de SQLITE_ABORT.
6860: 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e  .  */.  if( db->
6870: 78 50 72 6f 67 72 65 73 73 21 3d 30 20 26 26 20  xProgress!=0 && 
6880: 6e 56 6d 53 74 65 70 3e 3d 6e 50 72 6f 67 72 65  nVmStep>=nProgre
6890: 73 73 4c 69 6d 69 74 20 29 7b 0a 20 20 20 20 61  ssLimit ){.    a
68a0: 73 73 65 72 74 28 20 64 62 2d 3e 6e 50 72 6f 67  ssert( db->nProg
68b0: 72 65 73 73 4f 70 73 21 3d 30 20 29 3b 0a 20 20  ressOps!=0 );.  
68c0: 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74    nProgressLimit
68d0: 20 3d 20 6e 56 6d 53 74 65 70 20 2b 20 64 62 2d   = nVmStep + db-
68e0: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 2d 20  >nProgressOps - 
68f0: 28 6e 56 6d 53 74 65 70 25 64 62 2d 3e 6e 50 72  (nVmStep%db->nPr
6900: 6f 67 72 65 73 73 4f 70 73 29 3b 0a 20 20 20 20  ogressOps);.    
6910: 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73  if( db->xProgres
6920: 73 28 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41  s(db->pProgressA
6930: 72 67 29 20 29 7b 0a 20 20 20 20 20 20 72 63 20  rg) ){.      rc 
6940: 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55  = SQLITE_INTERRU
6950: 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61  PT;.      goto a
6960: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
6970: 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e  r;.    }.  }.#en
6980: 64 69 66 0a 20 20 0a 20 20 62 72 65 61 6b 3b 0a  dif.  .  break;.
6990: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47  }../* Opcode:  G
69a0: 6f 73 75 62 20 50 31 20 50 32 20 2a 20 2a 20 2a  osub P1 P2 * * *
69b0: 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65  .**.** Write the
69c0: 20 63 75 72 72 65 6e 74 20 61 64 64 72 65 73 73   current address
69d0: 20 6f 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   onto register P
69e0: 31 0a 2a 2a 20 61 6e 64 20 74 68 65 6e 20 6a 75  1.** and then ju
69f0: 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32  mp to address P2
6a00: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 73  ..*/.case OP_Gos
6a10: 75 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ub: {           
6a20: 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73   /* jump */.  as
6a30: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
6a40: 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e  && pOp->p1<=(p->
6a50: 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
6a60: 73 6f 72 29 20 29 3b 0a 20 20 70 49 6e 31 20 3d  sor) );.  pIn1 =
6a70: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
6a80: 0a 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d  .  assert( VdbeM
6a90: 65 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d  emDynamic(pIn1)=
6aa0: 3d 30 20 29 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  =0 );.  memAbout
6ab0: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31  ToChange(p, pIn1
6ac0: 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  );.  pIn1->flags
6ad0: 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 49   = MEM_Int;.  pI
6ae0: 6e 31 2d 3e 75 2e 69 20 3d 20 28 69 6e 74 29 28  n1->u.i = (int)(
6af0: 70 4f 70 2d 61 4f 70 29 3b 0a 20 20 52 45 47 49  pOp-aOp);.  REGI
6b00: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
6b10: 70 31 2c 20 70 49 6e 31 29 3b 0a 0a 20 20 2f 2a  p1, pIn1);..  /*
6b20: 20 4d 6f 73 74 20 6a 75 6d 70 20 6f 70 65 72 61   Most jump opera
6b30: 74 69 6f 6e 73 20 64 6f 20 61 20 67 6f 74 6f 20  tions do a goto 
6b40: 74 6f 20 74 68 69 73 20 73 70 6f 74 20 69 6e 20  to this spot in 
6b50: 6f 72 64 65 72 20 74 6f 20 75 70 64 61 74 65 0a  order to update.
6b60: 20 20 2a 2a 20 74 68 65 20 70 4f 70 20 70 6f 69    ** the pOp poi
6b70: 6e 74 65 72 2e 20 2a 2f 0a 6a 75 6d 70 5f 74 6f  nter. */.jump_to
6b80: 5f 70 32 3a 0a 20 20 70 4f 70 20 3d 20 26 61 4f  _p2:.  pOp = &aO
6b90: 70 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a  p[pOp->p2 - 1];.
6ba0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
6bb0: 70 63 6f 64 65 3a 20 20 52 65 74 75 72 6e 20 50  pcode:  Return P
6bc0: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
6bd0: 4a 75 6d 70 20 74 6f 20 74 68 65 20 6e 65 78 74  Jump to the next
6be0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 66 74   instruction aft
6bf0: 65 72 20 74 68 65 20 61 64 64 72 65 73 73 20 69  er the address i
6c00: 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20  n register P1.  
6c10: 41 66 74 65 72 0a 2a 2a 20 74 68 65 20 6a 75 6d  After.** the jum
6c20: 70 2c 20 72 65 67 69 73 74 65 72 20 50 31 20 62  p, register P1 b
6c30: 65 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65 64  ecomes undefined
6c40: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 74  ..*/.case OP_Ret
6c50: 75 72 6e 3a 20 7b 20 20 20 20 20 20 20 20 20 20  urn: {          
6c60: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e   /* in1 */.  pIn
6c70: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
6c80: 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1];.  assert( pI
6c90: 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49  n1->flags==MEM_I
6ca0: 6e 74 20 29 3b 0a 20 20 70 4f 70 20 3d 20 26 61  nt );.  pOp = &a
6cb0: 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20  Op[pIn1->u.i];. 
6cc0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d   pIn1->flags = M
6cd0: 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20  EM_Undefined;.  
6ce0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
6cf0: 6f 64 65 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69  ode: InitCorouti
6d00: 6e 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ne P1 P2 P3 * *.
6d10: 2a 2a 0a 2a 2a 20 53 65 74 20 75 70 20 72 65 67  **.** Set up reg
6d20: 69 73 74 65 72 20 50 31 20 73 6f 20 74 68 61 74  ister P1 so that
6d30: 20 69 74 20 77 69 6c 6c 20 59 69 65 6c 64 20 74   it will Yield t
6d40: 6f 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 0a  o the coroutine.
6d50: 2a 2a 20 6c 6f 63 61 74 65 64 20 61 74 20 61 64  ** located at ad
6d60: 64 72 65 73 73 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  dress P3..**.** 
6d70: 49 66 20 50 32 21 3d 30 20 74 68 65 6e 20 74 68  If P2!=0 then th
6d80: 65 20 63 6f 72 6f 75 74 69 6e 65 20 69 6d 70 6c  e coroutine impl
6d90: 65 6d 65 6e 74 61 74 69 6f 6e 20 69 6d 6d 65 64  ementation immed
6da0: 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 73 0a 2a  iately follows.*
6db0: 2a 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20  * this opcode.  
6dc0: 53 6f 20 6a 75 6d 70 20 6f 76 65 72 20 74 68 65  So jump over the
6dd0: 20 63 6f 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65   coroutine imple
6de0: 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 0a 2a 2a 20  mentation to.** 
6df0: 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 0a 2a  address P2..**.*
6e00: 2a 20 53 65 65 20 61 6c 73 6f 3a 20 45 6e 64 43  * See also: EndC
6e10: 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65  oroutine.*/.case
6e20: 20 4f 50 5f 49 6e 69 74 43 6f 72 6f 75 74 69 6e   OP_InitCoroutin
6e30: 65 3a 20 7b 20 20 20 20 20 2f 2a 20 6a 75 6d 70  e: {     /* jump
6e40: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
6e50: 70 2d 3e 70 31 3e 30 20 26 26 20 20 70 4f 70 2d  p->p1>0 &&  pOp-
6e60: 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p1<=(p->nMem+1 
6e70: 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
6e80: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
6e90: 70 32 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 32  p2>=0 && pOp->p2
6ea0: 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 61 73 73  <p->nOp );.  ass
6eb0: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20  ert( pOp->p3>=0 
6ec0: 26 26 20 70 4f 70 2d 3e 70 33 3c 70 2d 3e 6e 4f  && pOp->p3<p->nO
6ed0: 70 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p );.  pOut = &a
6ee0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
6ef0: 61 73 73 65 72 74 28 20 21 56 64 62 65 4d 65 6d  assert( !VdbeMem
6f00: 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 20 29 3b  Dynamic(pOut) );
6f10: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70  .  pOut->u.i = p
6f20: 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a 20 20 70 4f  Op->p3 - 1;.  pO
6f30: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
6f40: 49 6e 74 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  Int;.  if( pOp->
6f50: 70 32 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  p2 ) goto jump_t
6f60: 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  o_p2;.  break;.}
6f70: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 45 6e  ../* Opcode:  En
6f80: 64 43 6f 72 6f 75 74 69 6e 65 20 50 31 20 2a 20  dCoroutine P1 * 
6f90: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  * * *.**.** The 
6fa0: 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20 74  instruction at t
6fb0: 68 65 20 61 64 64 72 65 73 73 20 69 6e 20 72 65  he address in re
6fc0: 67 69 73 74 65 72 20 50 31 20 69 73 20 61 20 59  gister P1 is a Y
6fd0: 69 65 6c 64 2e 0a 2a 2a 20 4a 75 6d 70 20 74 6f  ield..** Jump to
6fe0: 20 74 68 65 20 50 32 20 70 61 72 61 6d 65 74 65   the P2 paramete
6ff0: 72 20 6f 66 20 74 68 61 74 20 59 69 65 6c 64 2e  r of that Yield.
7000: 0a 2a 2a 20 41 66 74 65 72 20 74 68 65 20 6a 75  .** After the ju
7010: 6d 70 2c 20 72 65 67 69 73 74 65 72 20 50 31 20  mp, register P1 
7020: 62 65 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65  becomes undefine
7030: 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  d..**.** See als
7040: 6f 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65  o: InitCoroutine
7050: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6e 64 43  .*/.case OP_EndC
7060: 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20 20 20  oroutine: {     
7070: 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a        /* in1 */.
7080: 20 20 56 64 62 65 4f 70 20 2a 70 43 61 6c 6c 65    VdbeOp *pCalle
7090: 72 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  r;.  pIn1 = &aMe
70a0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
70b0: 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
70c0: 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  s==MEM_Int );.  
70d0: 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 75 2e  assert( pIn1->u.
70e0: 69 3e 3d 30 20 26 26 20 70 49 6e 31 2d 3e 75 2e  i>=0 && pIn1->u.
70f0: 69 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 43  i<p->nOp );.  pC
7100: 61 6c 6c 65 72 20 3d 20 26 61 4f 70 5b 70 49 6e  aller = &aOp[pIn
7110: 31 2d 3e 75 2e 69 5d 3b 0a 20 20 61 73 73 65 72  1->u.i];.  asser
7120: 74 28 20 70 43 61 6c 6c 65 72 2d 3e 6f 70 63 6f  t( pCaller->opco
7130: 64 65 3d 3d 4f 50 5f 59 69 65 6c 64 20 29 3b 0a  de==OP_Yield );.
7140: 20 20 61 73 73 65 72 74 28 20 70 43 61 6c 6c 65    assert( pCalle
7150: 72 2d 3e 70 32 3e 3d 30 20 26 26 20 70 43 61 6c  r->p2>=0 && pCal
7160: 6c 65 72 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29  ler->p2<p->nOp )
7170: 3b 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70  ;.  pOp = &aOp[p
7180: 43 61 6c 6c 65 72 2d 3e 70 32 20 2d 20 31 5d 3b  Caller->p2 - 1];
7190: 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d  .  pIn1->flags =
71a0: 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a   MEM_Undefined;.
71b0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
71c0: 70 63 6f 64 65 3a 20 20 59 69 65 6c 64 20 50 31  pcode:  Yield P1
71d0: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
71e0: 53 77 61 70 20 74 68 65 20 70 72 6f 67 72 61 6d  Swap the program
71f0: 20 63 6f 75 6e 74 65 72 20 77 69 74 68 20 74 68   counter with th
7200: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
7210: 74 65 72 20 50 31 2e 20 20 54 68 69 73 0a 2a 2a  ter P1.  This.**
7220: 20 68 61 73 20 74 68 65 20 65 66 66 65 63 74 20   has the effect 
7230: 6f 66 20 79 69 65 6c 64 69 6e 67 20 74 6f 20 61  of yielding to a
7240: 20 63 6f 72 6f 75 74 69 6e 65 2e 0a 2a 2a 0a 2a   coroutine..**.*
7250: 2a 20 49 66 20 74 68 65 20 63 6f 72 6f 75 74 69  * If the corouti
7260: 6e 65 20 74 68 61 74 20 69 73 20 6c 61 75 6e 63  ne that is launc
7270: 68 65 64 20 62 79 20 74 68 69 73 20 69 6e 73 74  hed by this inst
7280: 72 75 63 74 69 6f 6e 20 65 6e 64 73 20 77 69 74  ruction ends wit
7290: 68 0a 2a 2a 20 59 69 65 6c 64 20 6f 72 20 52 65  h.** Yield or Re
72a0: 74 75 72 6e 20 74 68 65 6e 20 63 6f 6e 74 69 6e  turn then contin
72b0: 75 65 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  ue to the next i
72c0: 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74  nstruction.  But
72d0: 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 72 6f 75   if.** the corou
72e0: 74 69 6e 65 20 6c 61 75 6e 63 68 65 64 20 62 79  tine launched by
72f0: 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
7300: 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20 45  n ends with.** E
7310: 6e 64 43 6f 72 6f 75 74 69 6e 65 2c 20 74 68 65  ndCoroutine, the
7320: 6e 20 6a 75 6d 70 20 74 6f 20 50 32 20 72 61 74  n jump to P2 rat
7330: 68 65 72 20 74 68 61 6e 20 63 6f 6e 74 69 6e 75  her than continu
7340: 69 6e 67 20 77 69 74 68 20 74 68 65 0a 2a 2a 20  ing with the.** 
7350: 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
7360: 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
7370: 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 0a  : InitCoroutine.
7380: 2a 2f 0a 63 61 73 65 20 4f 50 5f 59 69 65 6c 64  */.case OP_Yield
7390: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
73a0: 2a 20 69 6e 31 2c 20 6a 75 6d 70 20 2a 2f 0a 20  * in1, jump */. 
73b0: 20 69 6e 74 20 70 63 44 65 73 74 3b 0a 20 20 70   int pcDest;.  p
73c0: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
73d0: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
73e0: 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70  VdbeMemDynamic(p
73f0: 49 6e 31 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e  In1)==0 );.  pIn
7400: 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  1->flags = MEM_I
7410: 6e 74 3b 0a 20 20 70 63 44 65 73 74 20 3d 20 28  nt;.  pcDest = (
7420: 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20  int)pIn1->u.i;. 
7430: 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 28 69 6e   pIn1->u.i = (in
7440: 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20  t)(pOp - aOp);. 
7450: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
7460: 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a  pOp->p1, pIn1);.
7470: 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 63 44    pOp = &aOp[pcD
7480: 65 73 74 5d 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  est];.  break;.}
7490: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61  ../* Opcode:  Ha
74a0: 6c 74 49 66 4e 75 6c 6c 20 20 50 31 20 50 32 20  ltIfNull  P1 P2 
74b0: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
74c0: 70 73 69 73 3a 20 69 66 20 72 5b 50 33 5d 3d 6e  psis: if r[P3]=n
74d0: 75 6c 6c 20 68 61 6c 74 0a 2a 2a 0a 2a 2a 20 43  ull halt.**.** C
74e0: 68 65 63 6b 20 74 68 65 20 76 61 6c 75 65 20 69  heck the value i
74f0: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 20  n register P3.  
7500: 49 66 20 69 74 20 69 73 20 4e 55 4c 4c 20 74 68  If it is NULL th
7510: 65 6e 20 48 61 6c 74 20 75 73 69 6e 67 0a 2a 2a  en Halt using.**
7520: 20 70 61 72 61 6d 65 74 65 72 20 50 31 2c 20 50   parameter P1, P
7530: 32 2c 20 61 6e 64 20 50 34 20 61 73 20 69 66 20  2, and P4 as if 
7540: 74 68 69 73 20 77 65 72 65 20 61 20 48 61 6c 74  this were a Halt
7550: 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49   instruction.  I
7560: 66 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69  f the.** value i
7570: 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  n register P3 is
7580: 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   not NULL, then 
7590: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20  this routine is 
75a0: 61 20 6e 6f 2d 6f 70 2e 0a 2a 2a 20 54 68 65 20  a no-op..** The 
75b0: 50 35 20 70 61 72 61 6d 65 74 65 72 20 73 68 6f  P5 parameter sho
75c0: 75 6c 64 20 62 65 20 31 2e 0a 2a 2f 0a 63 61 73  uld be 1..*/.cas
75d0: 65 20 4f 50 5f 48 61 6c 74 49 66 4e 75 6c 6c 3a  e OP_HaltIfNull:
75e0: 20 7b 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a   {      /* in3 *
75f0: 2f 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  /.  pIn3 = &aMem
7600: 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28  [pOp->p3];.  if(
7610: 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
7620: 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20 62  MEM_Null)==0 ) b
7630: 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20  reak;.  /* Fall 
7640: 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f  through into OP_
7650: 48 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70  Halt */.}../* Op
7660: 63 6f 64 65 3a 20 20 48 61 6c 74 20 50 31 20 50  code:  Halt P1 P
7670: 32 20 2a 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20  2 * P4 P5.**.** 
7680: 45 78 69 74 20 69 6d 6d 65 64 69 61 74 65 6c 79  Exit immediately
7690: 2e 20 20 41 6c 6c 20 6f 70 65 6e 20 63 75 72 73  .  All open curs
76a0: 6f 72 73 2c 20 65 74 63 20 61 72 65 20 63 6c 6f  ors, etc are clo
76b0: 73 65 64 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63  sed.** automatic
76c0: 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69  ally..**.** P1 i
76d0: 73 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 64  s the result cod
76e0: 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71  e returned by sq
76f0: 6c 69 74 65 33 5f 65 78 65 63 28 29 2c 20 73 71  lite3_exec(), sq
7700: 6c 69 74 65 33 5f 72 65 73 65 74 28 29 2c 0a 2a  lite3_reset(),.*
7710: 2a 20 6f 72 20 73 71 6c 69 74 65 33 5f 66 69 6e  * or sqlite3_fin
7720: 61 6c 69 7a 65 28 29 2e 20 20 46 6f 72 20 61 20  alize().  For a 
7730: 6e 6f 72 6d 61 6c 20 68 61 6c 74 2c 20 74 68 69  normal halt, thi
7740: 73 20 73 68 6f 75 6c 64 20 62 65 20 53 51 4c 49  s should be SQLI
7750: 54 45 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f  TE_OK (0)..** Fo
7760: 72 20 65 72 72 6f 72 73 2c 20 69 74 20 63 61 6e  r errors, it can
7770: 20 62 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 76   be some other v
7780: 61 6c 75 65 2e 20 20 49 66 20 50 31 21 3d 30 20  alue.  If P1!=0 
7790: 74 68 65 6e 20 50 32 20 77 69 6c 6c 20 64 65 74  then P2 will det
77a0: 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65  ermine.** whethe
77b0: 72 20 6f 72 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c  r or not to roll
77c0: 62 61 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74  back the current
77d0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 44   transaction.  D
77e0: 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a  o not rollback.*
77f0: 2a 20 69 66 20 50 32 3d 3d 4f 45 5f 46 61 69 6c  * if P2==OE_Fail
7800: 2e 20 44 6f 20 74 68 65 20 72 6f 6c 6c 62 61 63  . Do the rollbac
7810: 6b 20 69 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c  k if P2==OE_Roll
7820: 62 61 63 6b 2e 20 20 49 66 20 50 32 3d 3d 4f 45  back.  If P2==OE
7830: 5f 41 62 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e 20  _Abort,.** then 
7840: 62 61 63 6b 20 6f 75 74 20 61 6c 6c 20 63 68 61  back out all cha
7850: 6e 67 65 73 20 74 68 61 74 20 68 61 76 65 20 6f  nges that have o
7860: 63 63 75 72 72 65 64 20 64 75 72 69 6e 67 20 74  ccurred during t
7870: 68 69 73 20 65 78 65 63 75 74 69 6f 6e 20 6f 66  his execution of
7880: 20 74 68 65 0a 2a 2a 20 56 44 42 45 2c 20 62 75   the.** VDBE, bu
7890: 74 20 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63  t do not rollbac
78a0: 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  k the transactio
78b0: 6e 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20  n. .**.** If P4 
78c0: 69 73 20 6e 6f 74 20 6e 75 6c 6c 20 74 68 65 6e  is not null then
78d0: 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20   it is an error 
78e0: 6d 65 73 73 61 67 65 20 73 74 72 69 6e 67 2e 0a  message string..
78f0: 2a 2a 0a 2a 2a 20 50 35 20 69 73 20 61 20 76 61  **.** P5 is a va
7900: 6c 75 65 20 62 65 74 77 65 65 6e 20 30 20 61 6e  lue between 0 an
7910: 64 20 34 2c 20 69 6e 63 6c 75 73 69 76 65 2c 20  d 4, inclusive, 
7920: 74 68 61 74 20 6d 6f 64 69 66 69 65 73 20 74 68  that modifies th
7930: 65 20 50 34 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a  e P4 string..**.
7940: 2a 2a 20 20 20 20 30 3a 20 20 28 6e 6f 20 63 68  **    0:  (no ch
7950: 61 6e 67 65 29 0a 2a 2a 20 20 20 20 31 3a 20 20  ange).**    1:  
7960: 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 74 72 61 69  NOT NULL contrai
7970: 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a  nt failed: P4.**
7980: 20 20 20 20 32 3a 20 20 55 4e 49 51 55 45 20 63      2:  UNIQUE c
7990: 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64  onstraint failed
79a0: 3a 20 50 34 0a 2a 2a 20 20 20 20 33 3a 20 20 43  : P4.**    3:  C
79b0: 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20  HECK constraint 
79c0: 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20  failed: P4.**   
79d0: 20 34 3a 20 20 46 4f 52 45 49 47 4e 20 4b 45 59   4:  FOREIGN KEY
79e0: 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c   constraint fail
79f0: 65 64 3a 20 50 34 0a 2a 2a 0a 2a 2a 20 49 66 20  ed: P4.**.** If 
7a00: 50 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 20 61  P5 is not zero a
7a10: 6e 64 20 50 34 20 69 73 20 4e 55 4c 4c 2c 20 74  nd P4 is NULL, t
7a20: 68 65 6e 20 65 76 65 72 79 74 68 69 6e 67 20 61  hen everything a
7a30: 66 74 65 72 20 74 68 65 20 22 3a 22 20 69 73 0a  fter the ":" is.
7a40: 2a 2a 20 6f 6d 69 74 74 65 64 2e 0a 2a 2a 0a 2a  ** omitted..**.*
7a50: 2a 20 54 68 65 72 65 20 69 73 20 61 6e 20 69 6d  * There is an im
7a60: 70 6c 69 65 64 20 22 48 61 6c 74 20 30 20 30 20  plied "Halt 0 0 
7a70: 30 22 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  0" instruction i
7a80: 6e 73 65 72 74 65 64 20 61 74 20 74 68 65 20 76  nserted at the v
7a90: 65 72 79 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 76  ery end of.** ev
7aa0: 65 72 79 20 70 72 6f 67 72 61 6d 2e 20 20 53 6f  ery program.  So
7ab0: 20 61 20 6a 75 6d 70 20 70 61 73 74 20 74 68 65   a jump past the
7ac0: 20 6c 61 73 74 20 69 6e 73 74 72 75 63 74 69 6f   last instructio
7ad0: 6e 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d  n of the program
7ae0: 0a 2a 2a 20 69 73 20 74 68 65 20 73 61 6d 65 20  .** is the same 
7af0: 61 73 20 65 78 65 63 75 74 69 6e 67 20 48 61 6c  as executing Hal
7b00: 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61  t..*/.case OP_Ha
7b10: 6c 74 3a 20 7b 0a 20 20 56 64 62 65 46 72 61 6d  lt: {.  VdbeFram
7b20: 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69 6e 74  e *pFrame;.  int
7b30: 20 70 63 78 3b 0a 0a 20 20 70 63 78 20 3d 20 28   pcx;..  pcx = (
7b40: 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b  int)(pOp - aOp);
7b50: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d  .  if( pOp->p1==
7b60: 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70 2d 3e  SQLITE_OK && p->
7b70: 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 2f 2a  pFrame ){.    /*
7b80: 20 48 61 6c 74 20 74 68 65 20 73 75 62 2d 70 72   Halt the sub-pr
7b90: 6f 67 72 61 6d 2e 20 52 65 74 75 72 6e 20 63 6f  ogram. Return co
7ba0: 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 70 61 72  ntrol to the par
7bb0: 65 6e 74 20 66 72 61 6d 65 2e 20 2a 2f 0a 20 20  ent frame. */.  
7bc0: 20 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46    pFrame = p->pF
7bd0: 72 61 6d 65 3b 0a 20 20 20 20 70 2d 3e 70 46 72  rame;.    p->pFr
7be0: 61 6d 65 20 3d 20 70 46 72 61 6d 65 2d 3e 70 50  ame = pFrame->pP
7bf0: 61 72 65 6e 74 3b 0a 20 20 20 20 70 2d 3e 6e 46  arent;.    p->nF
7c00: 72 61 6d 65 2d 2d 3b 0a 20 20 20 20 73 71 6c 69  rame--;.    sqli
7c10: 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65  te3VdbeSetChange
7c20: 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65  s(db, p->nChange
7c30: 29 3b 0a 20 20 20 20 70 63 78 20 3d 20 73 71 6c  );.    pcx = sql
7c40: 69 74 65 33 56 64 62 65 46 72 61 6d 65 52 65 73  ite3VdbeFrameRes
7c50: 74 6f 72 65 28 70 46 72 61 6d 65 29 3b 0a 20 20  tore(pFrame);.  
7c60: 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 4f    if( pOp->p2==O
7c70: 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20  E_Ignore ){.    
7c80: 20 20 2f 2a 20 49 6e 73 74 72 75 63 74 69 6f 6e    /* Instruction
7c90: 20 70 63 78 20 69 73 20 74 68 65 20 4f 50 5f 50   pcx is the OP_P
7ca0: 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6e 76 6f  rogram that invo
7cb0: 6b 65 64 20 74 68 65 20 73 75 62 2d 70 72 6f 67  ked the sub-prog
7cc0: 72 61 6d 20 0a 20 20 20 20 20 20 2a 2a 20 63 75  ram .      ** cu
7cd0: 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 68 61  rrently being ha
7ce0: 6c 74 65 64 2e 20 49 66 20 74 68 65 20 70 32 20  lted. If the p2 
7cf0: 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74  instruction of t
7d00: 68 69 73 20 4f 50 5f 48 61 6c 74 0a 20 20 20 20  his OP_Halt.    
7d10: 20 20 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e    ** instruction
7d20: 20 69 73 20 73 65 74 20 74 6f 20 4f 45 5f 49 67   is set to OE_Ig
7d30: 6e 6f 72 65 2c 20 74 68 65 6e 20 74 68 65 20 73  nore, then the s
7d40: 75 62 2d 70 72 6f 67 72 61 6d 20 69 73 20 74 68  ub-program is th
7d50: 72 6f 77 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20  rowing.      ** 
7d60: 61 6e 20 49 47 4e 4f 52 45 20 65 78 63 65 70 74  an IGNORE except
7d70: 69 6f 6e 2e 20 49 6e 20 74 68 69 73 20 63 61 73  ion. In this cas
7d80: 65 20 6a 75 6d 70 20 74 6f 20 74 68 65 20 61 64  e jump to the ad
7d90: 64 72 65 73 73 20 73 70 65 63 69 66 69 65 64 0a  dress specified.
7da0: 20 20 20 20 20 20 2a 2a 20 61 73 20 74 68 65 20        ** as the 
7db0: 70 32 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e  p2 of the callin
7dc0: 67 20 4f 50 5f 50 72 6f 67 72 61 6d 2e 20 20 2a  g OP_Program.  *
7dd0: 2f 0a 20 20 20 20 20 20 70 63 78 20 3d 20 70 2d  /.      pcx = p-
7de0: 3e 61 4f 70 5b 70 63 78 5d 2e 70 32 2d 31 3b 0a  >aOp[pcx].p2-1;.
7df0: 20 20 20 20 7d 0a 20 20 20 20 61 4f 70 20 3d 20      }.    aOp = 
7e00: 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 61 4d 65 6d  p->aOp;.    aMem
7e10: 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20   = p->aMem;.    
7e20: 70 4f 70 20 3d 20 26 61 4f 70 5b 70 63 78 5d 3b  pOp = &aOp[pcx];
7e30: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
7e40: 20 20 70 2d 3e 72 63 20 3d 20 70 4f 70 2d 3e 70    p->rc = pOp->p
7e50: 31 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41 63 74  1;.  p->errorAct
7e60: 69 6f 6e 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70  ion = (u8)pOp->p
7e70: 32 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 78  2;.  p->pc = pcx
7e80: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
7e90: 3e 70 35 3c 3d 34 20 29 3b 0a 20 20 69 66 28 20  >p5<=4 );.  if( 
7ea0: 70 2d 3e 72 63 20 29 7b 0a 20 20 20 20 69 66 28  p->rc ){.    if(
7eb0: 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20   pOp->p5 ){.    
7ec0: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63    static const c
7ed0: 68 61 72 20 2a 20 63 6f 6e 73 74 20 61 7a 54 79  har * const azTy
7ee0: 70 65 5b 5d 20 3d 20 7b 20 22 4e 4f 54 20 4e 55  pe[] = { "NOT NU
7ef0: 4c 4c 22 2c 20 22 55 4e 49 51 55 45 22 2c 20 22  LL", "UNIQUE", "
7f00: 43 48 45 43 4b 22 2c 0a 20 20 20 20 20 20 20 20  CHECK",.        
7f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f30: 20 20 20 20 20 22 46 4f 52 45 49 47 4e 20 4b 45       "FOREIGN KE
7f40: 59 22 20 7d 3b 0a 20 20 20 20 20 20 74 65 73 74  Y" };.      test
7f50: 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 31  case( pOp->p5==1
7f60: 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61   );.      testca
7f70: 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 32 20 29  se( pOp->p5==2 )
7f80: 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65  ;.      testcase
7f90: 28 20 70 4f 70 2d 3e 70 35 3d 3d 33 20 29 3b 0a  ( pOp->p5==3 );.
7fa0: 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
7fb0: 70 4f 70 2d 3e 70 35 3d 3d 34 20 29 3b 0a 20 20  pOp->p5==4 );.  
7fc0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
7fd0: 72 72 6f 72 28 70 2c 20 22 25 73 20 63 6f 6e 73  rror(p, "%s cons
7fe0: 74 72 61 69 6e 74 20 66 61 69 6c 65 64 22 2c 20  traint failed", 
7ff0: 61 7a 54 79 70 65 5b 70 4f 70 2d 3e 70 35 2d 31  azType[pOp->p5-1
8000: 5d 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4f  ]);.      if( pO
8010: 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 20  p->p4.z ){.     
8020: 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20     p->zErrMsg = 
8030: 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64  sqlite3MPrintf(d
8040: 62 2c 20 22 25 7a 3a 20 25 73 22 2c 20 70 2d 3e  b, "%z: %s", p->
8050: 7a 45 72 72 4d 73 67 2c 20 70 4f 70 2d 3e 70 34  zErrMsg, pOp->p4
8060: 2e 7a 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  .z);.      }.   
8070: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71   }else{.      sq
8080: 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70  lite3VdbeError(p
8090: 2c 20 22 25 73 22 2c 20 70 4f 70 2d 3e 70 34 2e  , "%s", pOp->p4.
80a0: 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  z);.    }.    sq
80b0: 6c 69 74 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70  lite3_log(pOp->p
80c0: 31 2c 20 22 61 62 6f 72 74 20 61 74 20 25 64 20  1, "abort at %d 
80d0: 69 6e 20 5b 25 73 5d 3a 20 25 73 22 2c 20 70 63  in [%s]: %s", pc
80e0: 78 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a  x, p->zSql, p->z
80f0: 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 72  ErrMsg);.  }.  r
8100: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 48  c = sqlite3VdbeH
8110: 61 6c 74 28 70 29 3b 0a 20 20 61 73 73 65 72 74  alt(p);.  assert
8120: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
8130: 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f  Y || rc==SQLITE_
8140: 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45  OK || rc==SQLITE
8150: 5f 45 52 52 4f 52 20 29 3b 0a 20 20 69 66 28 20  _ERROR );.  if( 
8160: 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  rc==SQLITE_BUSY 
8170: 29 7b 0a 20 20 20 20 70 2d 3e 72 63 20 3d 20 53  ){.    p->rc = S
8180: 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65  QLITE_BUSY;.  }e
8190: 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
81a0: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc==SQLITE_OK |
81b0: 7c 20 28 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d  | (p->rc&0xff)==
81c0: 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
81d0: 54 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  T );.    assert(
81e0: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc==SQLITE_OK |
81f0: 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43  | db->nDeferredC
8200: 6f 6e 73 3e 30 20 7c 7c 20 64 62 2d 3e 6e 44 65  ons>0 || db->nDe
8210: 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3e 30 20  ferredImmCons>0 
8220: 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 2d 3e 72  );.    rc = p->r
8230: 63 20 3f 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c ? SQLITE_ERROR
8240: 20 3a 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a   : SQLITE_DONE;.
8250: 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f    }.  goto vdbe_
8260: 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70  return;.}../* Op
8270: 63 6f 64 65 3a 20 49 6e 74 65 67 65 72 20 50 31  code: Integer P1
8280: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
8290: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 31 0a  opsis: r[P2]=P1.
82a0: 2a 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62 69 74  **.** The 32-bit
82b0: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50   integer value P
82c0: 31 20 69 73 20 77 72 69 74 74 65 6e 20 69 6e 74  1 is written int
82d0: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
82e0: 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 65  /.case OP_Intege
82f0: 72 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20  r: {         /* 
8300: 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d  out2 */.  pOut =
8310: 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
8320: 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d  p, pOp);.  pOut-
8330: 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  >u.i = pOp->p1;.
8340: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
8350: 70 63 6f 64 65 3a 20 49 6e 74 36 34 20 2a 20 50  pcode: Int64 * P
8360: 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
8370: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a  psis: r[P2]=P4.*
8380: 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
8390: 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74  nter to a 64-bit
83a0: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 0a   integer value..
83b0: 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20 76 61  ** Write that va
83c0: 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  lue into registe
83d0: 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
83e0: 5f 49 6e 74 36 34 3a 20 7b 20 20 20 20 20 20 20  _Int64: {       
83f0: 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
8400: 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
8410: 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
8420: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
8430: 34 2e 70 49 36 34 21 3d 30 20 29 3b 0a 20 20 70  4.pI64!=0 );.  p
8440: 4f 75 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70 2d  Out->u.i = *pOp-
8450: 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62 72 65 61  >p4.pI64;.  brea
8460: 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
8470: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
8480: 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f  NG_POINT./* Opco
8490: 64 65 3a 20 52 65 61 6c 20 2a 20 50 32 20 2a 20  de: Real * P2 * 
84a0: 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
84b0: 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a  : r[P2]=P4.**.**
84c0: 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
84d0: 20 74 6f 20 61 20 36 34 2d 62 69 74 20 66 6c 6f   to a 64-bit flo
84e0: 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75  ating point valu
84f0: 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74  e..** Write that
8500: 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69   value into regi
8510: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
8520: 20 4f 50 5f 52 65 61 6c 3a 20 7b 20 20 20 20 20   OP_Real: {     
8530: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
8540: 73 20 54 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74 32  s TK_FLOAT, out2
8550: 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74   */.  pOut = out
8560: 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
8570: 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  Op);.  pOut->fla
8580: 67 73 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20  gs = MEM_Real;. 
8590: 20 61 73 73 65 72 74 28 20 21 73 71 6c 69 74 65   assert( !sqlite
85a0: 33 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e  3IsNaN(*pOp->p4.
85b0: 70 52 65 61 6c 29 20 29 3b 0a 20 20 70 4f 75 74  pReal) );.  pOut
85c0: 2d 3e 75 2e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34  ->u.r = *pOp->p4
85d0: 2e 70 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b  .pReal;.  break;
85e0: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70  .}.#endif../* Op
85f0: 63 6f 64 65 3a 20 53 74 72 69 6e 67 38 20 2a 20  code: String8 * 
8600: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
8610: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34  opsis: r[P2]='P4
8620: 27 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74  '.**.** P4 point
8630: 73 20 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69  s to a nul termi
8640: 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74 72 69  nated UTF-8 stri
8650: 6e 67 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20  ng. This opcode 
8660: 69 73 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a  is transformed .
8670: 2a 2a 20 69 6e 74 6f 20 61 20 53 74 72 69 6e 67  ** into a String
8680: 20 6f 70 63 6f 64 65 20 62 65 66 6f 72 65 20 69   opcode before i
8690: 74 20 69 73 20 65 78 65 63 75 74 65 64 20 66 6f  t is executed fo
86a0: 72 20 74 68 65 20 66 69 72 73 74 20 74 69 6d 65  r the first time
86b0: 2e 20 20 44 75 72 69 6e 67 0a 2a 2a 20 74 68 69  .  During.** thi
86c0: 73 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e  s transformation
86d0: 2c 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20  , the length of 
86e0: 73 74 72 69 6e 67 20 50 34 20 69 73 20 63 6f 6d  string P4 is com
86f0: 70 75 74 65 64 20 61 6e 64 20 73 74 6f 72 65 64  puted and stored
8700: 0a 2a 2a 20 61 73 20 74 68 65 20 50 31 20 70 61  .** as the P1 pa
8710: 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 63 61 73 65  rameter..*/.case
8720: 20 4f 50 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20   OP_String8: {  
8730: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
8740: 73 20 54 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74  s TK_STRING, out
8750: 32 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  2 */.  assert( p
8760: 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20  Op->p4.z!=0 );. 
8770: 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
8780: 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
8790: 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20    pOp->opcode = 
87a0: 4f 50 5f 53 74 72 69 6e 67 3b 0a 20 20 70 4f 70  OP_String;.  pOp
87b0: 2d 3e 70 31 20 3d 20 73 71 6c 69 74 65 33 53 74  ->p1 = sqlite3St
87c0: 72 6c 65 6e 33 30 28 70 4f 70 2d 3e 70 34 2e 7a  rlen30(pOp->p4.z
87d0: 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  );..#ifndef SQLI
87e0: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20  TE_OMIT_UTF16.  
87f0: 69 66 28 20 65 6e 63 6f 64 69 6e 67 21 3d 53 51  if( encoding!=SQ
8800: 4c 49 54 45 5f 55 54 46 38 20 29 7b 0a 20 20 20  LITE_UTF8 ){.   
8810: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
8820: 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c  eMemSetStr(pOut,
8830: 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20   pOp->p4.z, -1, 
8840: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c  SQLITE_UTF8, SQL
8850: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
8860: 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
8870: 49 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51  ITE_OK || rc==SQ
8880: 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29 3b 0a 20  LITE_TOOBIG );. 
8890: 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b     if( SQLITE_OK
88a0: 21 3d 73 71 6c 69 74 65 33 56 64 62 65 43 68 61  !=sqlite3VdbeCha
88b0: 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74  ngeEncoding(pOut
88c0: 2c 20 65 6e 63 6f 64 69 6e 67 29 20 29 20 67 6f  , encoding) ) go
88d0: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61  to no_mem;.    a
88e0: 73 73 65 72 74 28 20 70 4f 75 74 2d 3e 73 7a 4d  ssert( pOut->szM
88f0: 61 6c 6c 6f 63 3e 30 20 26 26 20 70 4f 75 74 2d  alloc>0 && pOut-
8900: 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74 2d 3e  >zMalloc==pOut->
8910: 7a 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  z );.    assert(
8920: 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28   VdbeMemDynamic(
8930: 70 4f 75 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20  pOut)==0 );.    
8940: 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3d  pOut->szMalloc =
8950: 20 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c   0;.    pOut->fl
8960: 61 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61 74 69  ags |= MEM_Stati
8970: 63 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  c;.    if( pOp->
8980: 70 34 74 79 70 65 3d 3d 50 34 5f 44 59 4e 41 4d  p4type==P4_DYNAM
8990: 49 43 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  IC ){.      sqli
89a0: 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 4f  te3DbFree(db, pO
89b0: 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a  p->p4.z);.    }.
89c0: 20 20 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20      pOp->p4type 
89d0: 3d 20 50 34 5f 44 59 4e 41 4d 49 43 3b 0a 20 20  = P4_DYNAMIC;.  
89e0: 20 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f    pOp->p4.z = pO
89f0: 75 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e  ut->z;.    pOp->
8a00: 70 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20  p1 = pOut->n;.  
8a10: 7d 0a 20 20 74 65 73 74 63 61 73 65 28 20 72 63  }.  testcase( rc
8a20: 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20  ==SQLITE_TOOBIG 
8a30: 29 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20  );.#endif.  if( 
8a40: 70 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d  pOp->p1>db->aLim
8a50: 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
8a60: 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67  LENGTH] ){.    g
8a70: 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
8a80: 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53  .  assert( rc==S
8a90: 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 2f 2a  QLITE_OK );.  /*
8aa0: 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   Fall through to
8ab0: 20 74 68 65 20 6e 65 78 74 20 63 61 73 65 2c 20   the next case, 
8ac0: 4f 50 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20  OP_String */.}. 
8ad0: 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72   ./* Opcode: Str
8ae0: 69 6e 67 20 50 31 20 50 32 20 50 33 20 50 34 20  ing P1 P2 P3 P4 
8af0: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
8b00: 72 5b 50 32 5d 3d 27 50 34 27 20 28 6c 65 6e 3d  r[P2]='P4' (len=
8b10: 50 31 29 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74  P1).**.** The st
8b20: 72 69 6e 67 20 76 61 6c 75 65 20 50 34 20 6f 66  ring value P4 of
8b30: 20 6c 65 6e 67 74 68 20 50 31 20 28 62 79 74 65   length P1 (byte
8b40: 73 29 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  s) is stored in 
8b50: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
8b60: 2a 2a 20 49 66 20 50 33 20 69 73 20 6e 6f 74 20  ** If P3 is not 
8b70: 7a 65 72 6f 20 61 6e 64 20 74 68 65 20 63 6f 6e  zero and the con
8b80: 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
8b90: 20 50 33 20 69 73 20 65 71 75 61 6c 20 74 6f 20   P3 is equal to 
8ba0: 50 35 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20  P5, then.** the 
8bb0: 64 61 74 61 74 79 70 65 20 6f 66 20 74 68 65 20  datatype of the 
8bc0: 72 65 67 69 73 74 65 72 20 50 32 20 69 73 20 63  register P2 is c
8bd0: 6f 6e 76 65 72 74 65 64 20 74 6f 20 42 4c 4f 42  onverted to BLOB
8be0: 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 69  .  The content i
8bf0: 73 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 73 65  s.** the same se
8c00: 71 75 65 6e 63 65 20 6f 66 20 62 79 74 65 73 2c  quence of bytes,
8c10: 20 69 74 20 69 73 20 6d 65 72 65 6c 79 20 69 6e   it is merely in
8c20: 74 65 72 70 72 65 74 65 64 20 61 73 20 61 20 42  terpreted as a B
8c30: 4c 4f 42 20 69 6e 73 74 65 61 64 0a 2a 2a 20 6f  LOB instead.** o
8c40: 66 20 61 20 73 74 72 69 6e 67 2c 20 61 73 20 69  f a string, as i
8c50: 66 20 69 74 20 68 61 64 20 62 65 65 6e 20 43 41  f it had been CA
8c60: 53 54 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  ST.  In other wo
8c70: 72 64 73 3a 0a 2a 2a 0a 2a 2a 20 69 66 28 20 50  rds:.**.** if( P
8c80: 33 21 3d 30 20 61 6e 64 20 72 65 67 5b 50 33 5d  3!=0 and reg[P3]
8c90: 3d 3d 50 35 20 29 20 72 65 67 5b 50 32 5d 20 3a  ==P5 ) reg[P2] :
8ca0: 3d 20 43 41 53 54 28 72 65 67 5b 50 32 5d 20 61  = CAST(reg[P2] a
8cb0: 73 20 42 4c 4f 42 29 0a 2a 2f 0a 63 61 73 65 20  s BLOB).*/.case 
8cc0: 4f 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20 20  OP_String: {    
8cd0: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
8ce0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
8cf0: 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75  p4.z!=0 );.  pOu
8d00: 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
8d10: 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f  se(p, pOp);.  pO
8d20: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
8d30: 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d  Str|MEM_Static|M
8d40: 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d  EM_Term;.  pOut-
8d50: 3e 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a  >z = pOp->p4.z;.
8d60: 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d    pOut->n = pOp-
8d70: 3e 70 31 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63  >p1;.  pOut->enc
8d80: 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55   = encoding;.  U
8d90: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
8da0: 5a 45 28 70 4f 75 74 29 3b 0a 23 69 66 6e 64 65  ZE(pOut);.#ifnde
8db0: 66 20 53 51 4c 49 54 45 5f 4c 49 4b 45 5f 44 4f  f SQLITE_LIKE_DO
8dc0: 45 53 4e 54 5f 4d 41 54 43 48 5f 42 4c 4f 42 53  ESNT_MATCH_BLOBS
8dd0: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30  .  if( pOp->p3>0
8de0: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
8df0: 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
8e00: 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
8e10: 29 20 29 3b 0a 20 20 20 20 70 49 6e 33 20 3d 20  ) );.    pIn3 = 
8e20: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
8e30: 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 33      assert( pIn3
8e40: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
8e50: 74 20 29 3b 0a 20 20 20 20 69 66 28 20 70 49 6e  t );.    if( pIn
8e60: 33 2d 3e 75 2e 69 3d 3d 70 4f 70 2d 3e 70 35 20  3->u.i==pOp->p5 
8e70: 29 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20  ) pOut->flags = 
8e80: 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 61  MEM_Blob|MEM_Sta
8e90: 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20  tic|MEM_Term;.  
8ea0: 7d 0a 23 65 6e 64 69 66 0a 20 20 62 72 65 61 6b  }.#endif.  break
8eb0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
8ec0: 4e 75 6c 6c 20 50 31 20 50 32 20 50 33 20 2a 20  Null P1 P2 P3 * 
8ed0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
8ee0: 5b 50 32 2e 2e 50 33 5d 3d 4e 55 4c 4c 0a 2a 2a  [P2..P3]=NULL.**
8ef0: 0a 2a 2a 20 57 72 69 74 65 20 61 20 4e 55 4c 4c  .** Write a NULL
8f00: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 73 20   into registers 
8f10: 50 32 2e 20 20 49 66 20 50 33 20 67 72 65 61 74  P2.  If P3 great
8f20: 65 72 20 74 68 61 6e 20 50 32 2c 20 74 68 65 6e  er than P2, then
8f30: 20 61 6c 73 6f 20 77 72 69 74 65 0a 2a 2a 20 4e   also write.** N
8f40: 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ULL into registe
8f50: 72 20 50 33 20 61 6e 64 20 65 76 65 72 79 20 72  r P3 and every r
8f60: 65 67 69 73 74 65 72 20 69 6e 20 62 65 74 77 65  egister in betwe
8f70: 65 6e 20 50 32 20 61 6e 64 20 50 33 2e 20 20 49  en P2 and P3.  I
8f80: 66 20 50 33 0a 2a 2a 20 69 73 20 6c 65 73 73 20  f P3.** is less 
8f90: 74 68 61 6e 20 50 32 20 28 74 79 70 69 63 61 6c  than P2 (typical
8fa0: 6c 79 20 50 33 20 69 73 20 7a 65 72 6f 29 20 74  ly P3 is zero) t
8fb0: 68 65 6e 20 6f 6e 6c 79 20 72 65 67 69 73 74 65  hen only registe
8fc0: 72 20 50 32 20 69 73 0a 2a 2a 20 73 65 74 20 74  r P2 is.** set t
8fd0: 6f 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 49 66  o NULL..**.** If
8fe0: 20 74 68 65 20 50 31 20 76 61 6c 75 65 20 69 73   the P1 value is
8ff0: 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
9000: 61 6c 73 6f 20 73 65 74 20 74 68 65 20 4d 45 4d  also set the MEM
9010: 5f 43 6c 65 61 72 65 64 20 66 6c 61 67 20 73 6f  _Cleared flag so
9020: 20 74 68 61 74 0a 2a 2a 20 4e 55 4c 4c 20 76 61   that.** NULL va
9030: 6c 75 65 73 20 77 69 6c 6c 20 6e 6f 74 20 63 6f  lues will not co
9040: 6d 70 61 72 65 20 65 71 75 61 6c 20 65 76 65 6e  mpare equal even
9050: 20 69 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45   if SQLITE_NULLE
9060: 51 20 69 73 20 73 65 74 20 6f 6e 0a 2a 2a 20 4f  Q is set on.** O
9070: 50 5f 4e 65 20 6f 72 20 4f 50 5f 45 71 2e 0a 2a  P_Ne or OP_Eq..*
9080: 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20  /.case OP_Null: 
9090: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
90a0: 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74  ut2 */.  int cnt
90b0: 3b 0a 20 20 75 31 36 20 6e 75 6c 6c 46 6c 61 67  ;.  u16 nullFlag
90c0: 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ;.  pOut = out2P
90d0: 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
90e0: 29 3b 0a 20 20 63 6e 74 20 3d 20 70 4f 70 2d 3e  );.  cnt = pOp->
90f0: 70 33 2d 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73  p3-pOp->p2;.  as
9100: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28  sert( pOp->p3<=(
9110: 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
9120: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75  Cursor) );.  pOu
9130: 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c 46  t->flags = nullF
9140: 6c 61 67 20 3d 20 70 4f 70 2d 3e 70 31 20 3f 20  lag = pOp->p1 ? 
9150: 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 43 6c  (MEM_Null|MEM_Cl
9160: 65 61 72 65 64 29 20 3a 20 4d 45 4d 5f 4e 75 6c  eared) : MEM_Nul
9170: 6c 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 30  l;.  pOut->n = 0
9180: 3b 0a 20 20 77 68 69 6c 65 28 20 63 6e 74 3e 30  ;.  while( cnt>0
9190: 20 29 7b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a   ){.    pOut++;.
91a0: 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
91b0: 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20  ange(p, pOut);. 
91c0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
91d0: 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
91e0: 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
91f0: 3d 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 20 20  = nullFlag;.    
9200: 70 4f 75 74 2d 3e 6e 20 3d 20 30 3b 0a 20 20 20  pOut->n = 0;.   
9210: 20 63 6e 74 2d 2d 3b 0a 20 20 7d 0a 20 20 62 72   cnt--;.  }.  br
9220: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
9230: 65 3a 20 53 6f 66 74 4e 75 6c 6c 20 50 31 20 2a  e: SoftNull P1 *
9240: 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
9250: 69 73 3a 20 72 5b 50 31 5d 3d 4e 55 4c 4c 0a 2a  is: r[P1]=NULL.*
9260: 2a 0a 2a 2a 20 53 65 74 20 72 65 67 69 73 74 65  *.** Set registe
9270: 72 20 50 31 20 74 6f 20 68 61 76 65 20 74 68 65  r P1 to have the
9280: 20 76 61 6c 75 65 20 4e 55 4c 4c 20 61 73 20 73   value NULL as s
9290: 65 65 6e 20 62 79 20 74 68 65 20 4f 50 5f 4d 61  een by the OP_Ma
92a0: 6b 65 52 65 63 6f 72 64 0a 2a 2a 20 69 6e 73 74  keRecord.** inst
92b0: 72 75 63 74 69 6f 6e 2c 20 62 75 74 20 64 6f 20  ruction, but do 
92c0: 6e 6f 74 20 66 72 65 65 20 61 6e 79 20 73 74 72  not free any str
92d0: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d 65 6d 6f  ing or blob memo
92e0: 72 79 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ry associated wi
92f0: 74 68 0a 2a 2a 20 74 68 65 20 72 65 67 69 73 74  th.** the regist
9300: 65 72 2c 20 73 6f 20 74 68 61 74 20 69 66 20 74  er, so that if t
9310: 68 65 20 76 61 6c 75 65 20 77 61 73 20 61 20 73  he value was a s
9320: 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 68  tring or blob th
9330: 61 74 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f  at was.** previo
9340: 75 73 6c 79 20 63 6f 70 69 65 64 20 75 73 69 6e  usly copied usin
9350: 67 20 4f 50 5f 53 43 6f 70 79 2c 20 74 68 65 20  g OP_SCopy, the 
9360: 63 6f 70 69 65 73 20 77 69 6c 6c 20 63 6f 6e 74  copies will cont
9370: 69 6e 75 65 20 74 6f 20 62 65 20 76 61 6c 69 64  inue to be valid
9380: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 66  ..*/.case OP_Sof
9390: 74 4e 75 6c 6c 3a 20 7b 0a 20 20 61 73 73 65 72  tNull: {.  asser
93a0: 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20  t( pOp->p1>0 && 
93b0: 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p1<=(p->nMe
93c0: 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
93d0: 29 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  ) );.  pOut = &a
93e0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
93f0: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 28 70  pOut->flags = (p
9400: 4f 75 74 2d 3e 66 6c 61 67 73 7c 4d 45 4d 5f 4e  Out->flags|MEM_N
9410: 75 6c 6c 29 26 7e 4d 45 4d 5f 55 6e 64 65 66 69  ull)&~MEM_Undefi
9420: 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ned;.  break;.}.
9430: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 6c 6f 62  ./* Opcode: Blob
9440: 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
9450: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
9460: 3d 50 34 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a  =P4 (len=P1).**.
9470: 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20  ** P4 points to 
9480: 61 20 62 6c 6f 62 20 6f 66 20 64 61 74 61 20 50  a blob of data P
9490: 31 20 62 79 74 65 73 20 6c 6f 6e 67 2e 20 20 53  1 bytes long.  S
94a0: 74 6f 72 65 20 74 68 69 73 0a 2a 2a 20 62 6c 6f  tore this.** blo
94b0: 62 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  b in register P2
94c0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 6c 6f  ..*/.case OP_Blo
94d0: 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  b: {            
94e0: 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
94f0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
9500: 20 3c 3d 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c   <= SQLITE_MAX_L
9510: 45 4e 47 54 48 20 29 3b 0a 20 20 70 4f 75 74 20  ENGTH );.  pOut 
9520: 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
9530: 28 70 2c 20 70 4f 70 29 3b 0a 20 20 73 71 6c 69  (p, pOp);.  sqli
9540: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72  te3VdbeMemSetStr
9550: 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a  (pOut, pOp->p4.z
9560: 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30 29  , pOp->p1, 0, 0)
9570: 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  ;.  pOut->enc = 
9580: 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41  encoding;.  UPDA
9590: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
95a0: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
95b0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61  }../* Opcode: Va
95c0: 72 69 61 62 6c 65 20 50 31 20 50 32 20 2a 20 50  riable P1 P2 * P
95d0: 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
95e0: 20 72 5b 50 32 5d 3d 70 61 72 61 6d 65 74 65 72   r[P2]=parameter
95f0: 28 50 31 2c 50 34 29 0a 2a 2a 0a 2a 2a 20 54 72  (P1,P4).**.** Tr
9600: 61 6e 73 66 65 72 20 74 68 65 20 76 61 6c 75 65  ansfer the value
9610: 73 20 6f 66 20 62 6f 75 6e 64 20 70 61 72 61 6d  s of bound param
9620: 65 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67  eter P1 into reg
9630: 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 49  ister P2.**.** I
9640: 66 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 20  f the parameter 
9650: 69 73 20 6e 61 6d 65 64 2c 20 74 68 65 6e 20 69  is named, then i
9660: 74 73 20 6e 61 6d 65 20 61 70 70 65 61 72 73 20  ts name appears 
9670: 69 6e 20 50 34 2e 0a 2a 2a 20 54 68 65 20 50 34  in P4..** The P4
9680: 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20 62   value is used b
9690: 79 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70  y sqlite3_bind_p
96a0: 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 29 2e  arameter_name().
96b0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 72 69  .*/.case OP_Vari
96c0: 61 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20  able: {         
96d0: 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
96e0: 4d 65 6d 20 2a 70 56 61 72 3b 20 20 20 20 20 20  Mem *pVar;      
96f0: 20 2f 2a 20 56 61 6c 75 65 20 62 65 69 6e 67 20   /* Value being 
9700: 74 72 61 6e 73 66 65 72 72 65 64 20 2a 2f 0a 0a  transferred */..
9710: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
9720: 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d  1>0 && pOp->p1<=
9730: 70 2d 3e 6e 56 61 72 20 29 3b 0a 20 20 61 73 73  p->nVar );.  ass
9740: 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d  ert( pOp->p4.z==
9750: 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d  0 || pOp->p4.z==
9760: 73 71 6c 69 74 65 33 56 4c 69 73 74 4e 75 6d 54  sqlite3VListNumT
9770: 6f 4e 61 6d 65 28 70 2d 3e 70 56 4c 69 73 74 2c  oName(p->pVList,
9780: 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 70 56  pOp->p1) );.  pV
9790: 61 72 20 3d 20 26 70 2d 3e 61 56 61 72 5b 70 4f  ar = &p->aVar[pO
97a0: 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20 20 69 66  p->p1 - 1];.  if
97b0: 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
97c0: 54 6f 6f 42 69 67 28 70 56 61 72 29 20 29 7b 0a  TooBig(pVar) ){.
97d0: 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
97e0: 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26  ;.  }.  pOut = &
97f0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
9800: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
9810: 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c  hallowCopy(pOut,
9820: 20 70 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74 69   pVar, MEM_Stati
9830: 63 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  c);.  UPDATE_MAX
9840: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
9850: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
9860: 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20  Opcode: Move P1 
9870: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
9880: 6f 70 73 69 73 3a 20 72 5b 50 32 40 50 33 5d 3d  opsis: r[P2@P3]=
9890: 72 5b 50 31 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 4d  r[P1@P3].**.** M
98a0: 6f 76 65 20 74 68 65 20 50 33 20 76 61 6c 75 65  ove the P3 value
98b0: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
98c0: 2e 2e 50 31 2b 50 33 2d 31 20 6f 76 65 72 20 69  ..P1+P3-1 over i
98d0: 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 73  nto.** registers
98e0: 20 50 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20 52   P2..P2+P3-1.  R
98f0: 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b  egisters P1..P1+
9900: 50 33 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66 74  P3-1 are.** left
9910: 20 68 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e   holding a NULL.
9920: 20 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72    It is an error
9930: 20 66 6f 72 20 72 65 67 69 73 74 65 72 20 72 61   for register ra
9940: 6e 67 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50  nges.** P1..P1+P
9950: 33 2d 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50  3-1 and P2..P2+P
9960: 33 2d 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e 20  3-1 to overlap. 
9970: 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 0a   It is an error.
9980: 2a 2a 20 66 6f 72 20 50 33 20 74 6f 20 62 65 20  ** for P3 to be 
9990: 6c 65 73 73 20 74 68 61 6e 20 31 2e 0a 2a 2f 0a  less than 1..*/.
99a0: 63 61 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a  case OP_Move: {.
99b0: 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20    int n;        
99c0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
99d0: 72 65 67 69 73 74 65 72 73 20 6c 65 66 74 20 74  registers left t
99e0: 6f 20 63 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20  o copy */.  int 
99f0: 70 31 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p1;          /* 
9a00: 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79  Register to copy
9a10: 20 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70   from */.  int p
9a20: 32 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52  2;          /* R
9a30: 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20  egister to copy 
9a40: 74 6f 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70  to */..  n = pOp
9a50: 2d 3e 70 33 3b 0a 20 20 70 31 20 3d 20 70 4f 70  ->p3;.  p1 = pOp
9a60: 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70  ->p1;.  p2 = pOp
9a70: 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
9a80: 6e 3e 30 20 26 26 20 70 31 3e 30 20 26 26 20 70  n>0 && p1>0 && p
9a90: 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  2>0 );.  assert(
9aa0: 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b   p1+n<=p2 || p2+
9ab0: 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31  n<=p1 );..  pIn1
9ac0: 20 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20   = &aMem[p1];.  
9ad0: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32 5d  pOut = &aMem[p2]
9ae0: 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65  ;.  do{.    asse
9af0: 72 74 28 20 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b  rt( pOut<=&aMem[
9b00: 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
9b10: 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20  nCursor)] );.   
9b20: 20 61 73 73 65 72 74 28 20 70 49 6e 31 3c 3d 26   assert( pIn1<=&
9b30: 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20  aMem[(p->nMem+1 
9b40: 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29  - p->nCursor)] )
9b50: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
9b60: 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29  mIsValid(pIn1) )
9b70: 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f  ;.    memAboutTo
9b80: 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
9b90: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
9ba0: 4d 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49  MemMove(pOut, pI
9bb0: 6e 31 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  n1);.#ifdef SQLI
9bc0: 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28  TE_DEBUG.    if(
9bd0: 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f   pOut->pScopyFro
9be0: 6d 3e 3d 26 61 4d 65 6d 5b 70 31 5d 20 26 26 20  m>=&aMem[p1] && 
9bf0: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
9c00: 3c 70 4f 75 74 20 29 7b 0a 20 20 20 20 20 20 70  <pOut ){.      p
9c10: 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20  Out->pScopyFrom 
9c20: 2b 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 70 31 3b  += pOp->p2 - p1;
9c30: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  .    }.#endif.  
9c40: 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65    Deephemeralize
9c50: 28 70 4f 75 74 29 3b 0a 20 20 20 20 52 45 47 49  (pOut);.    REGI
9c60: 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c  STER_TRACE(p2++,
9c70: 20 70 4f 75 74 29 3b 0a 20 20 20 20 70 49 6e 31   pOut);.    pIn1
9c80: 2b 2b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a  ++;.    pOut++;.
9c90: 20 20 7d 77 68 69 6c 65 28 20 2d 2d 6e 20 29 3b    }while( --n );
9ca0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
9cb0: 4f 70 63 6f 64 65 3a 20 43 6f 70 79 20 50 31 20  Opcode: Copy P1 
9cc0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
9cd0: 6f 70 73 69 73 3a 20 72 5b 50 32 40 50 33 2b 31  opsis: r[P2@P3+1
9ce0: 5d 3d 72 5b 50 31 40 50 33 2b 31 5d 0a 2a 2a 0a  ]=r[P1@P3+1].**.
9cf0: 2a 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f  ** Make a copy o
9d00: 66 20 72 65 67 69 73 74 65 72 73 20 50 31 2e 2e  f registers P1..
9d10: 50 31 2b 50 33 20 69 6e 74 6f 20 72 65 67 69 73  P1+P3 into regis
9d20: 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33 2e 0a  ters P2..P2+P3..
9d30: 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
9d40: 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 64  uction makes a d
9d50: 65 65 70 20 63 6f 70 79 20 6f 66 20 74 68 65 20  eep copy of the 
9d60: 76 61 6c 75 65 2e 20 20 41 20 64 75 70 6c 69 63  value.  A duplic
9d70: 61 74 65 0a 2a 2a 20 69 73 20 6d 61 64 65 20 6f  ate.** is made o
9d80: 66 20 61 6e 79 20 73 74 72 69 6e 67 20 6f 72 20  f any string or 
9d90: 62 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2e 20 20  blob constant.  
9da0: 53 65 65 20 61 6c 73 6f 20 4f 50 5f 53 43 6f 70  See also OP_SCop
9db0: 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  y..*/.case OP_Co
9dc0: 70 79 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 0a  py: {.  int n;..
9dd0: 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20    n = pOp->p3;. 
9de0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
9df0: 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p1];.  pOut =
9e00: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
9e10: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 21  .  assert( pOut!
9e20: 3d 70 49 6e 31 20 29 3b 0a 20 20 77 68 69 6c 65  =pIn1 );.  while
9e30: 28 20 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ( 1 ){.    sqlit
9e40: 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
9e50: 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c  Copy(pOut, pIn1,
9e60: 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 20   MEM_Ephem);.   
9e70: 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28   Deephemeralize(
9e80: 70 4f 75 74 29 3b 0a 23 69 66 64 65 66 20 53 51  pOut);.#ifdef SQ
9e90: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 70  LITE_DEBUG.    p
9ea0: 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20  Out->pScopyFrom 
9eb0: 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  = 0;.#endif.    
9ec0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
9ed0: 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 2d 6e  Op->p2+pOp->p3-n
9ee0: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 69 66 28  , pOut);.    if(
9ef0: 20 28 6e 2d 2d 29 3d 3d 30 20 29 20 62 72 65 61   (n--)==0 ) brea
9f00: 6b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20  k;.    pOut++;. 
9f10: 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20     pIn1++;.  }. 
9f20: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
9f30: 63 6f 64 65 3a 20 53 43 6f 70 79 20 50 31 20 50  code: SCopy P1 P
9f40: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
9f50: 73 69 73 3a 20 72 5b 50 32 5d 3d 72 5b 50 31 5d  sis: r[P2]=r[P1]
9f60: 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 73 68  .**.** Make a sh
9f70: 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 72 65  allow copy of re
9f80: 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72  gister P1 into r
9f90: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
9fa0: 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
9fb0: 6f 6e 20 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c  on makes a shall
9fc0: 6f 77 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76  ow copy of the v
9fd0: 61 6c 75 65 2e 20 20 49 66 20 74 68 65 20 76 61  alue.  If the va
9fe0: 6c 75 65 0a 2a 2a 20 69 73 20 61 20 73 74 72 69  lue.** is a stri
9ff0: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e  ng or blob, then
a000: 20 74 68 65 20 63 6f 70 79 20 69 73 20 6f 6e 6c   the copy is onl
a010: 79 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  y a pointer to t
a020: 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 61  he.** original a
a030: 6e 64 20 68 65 6e 63 65 20 69 66 20 74 68 65 20  nd hence if the 
a040: 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e 67 65 73  original changes
a050: 20 73 6f 20 77 69 6c 6c 20 74 68 65 20 63 6f 70   so will the cop
a060: 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20 69 66 20  y..** Worse, if 
a070: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 69 73 20  the original is 
a080: 64 65 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65  deallocated, the
a090: 20 63 6f 70 79 20 62 65 63 6f 6d 65 73 20 69 6e   copy becomes in
a0a0: 76 61 6c 69 64 2e 0a 2a 2a 20 54 68 75 73 20 74  valid..** Thus t
a0b0: 68 65 20 70 72 6f 67 72 61 6d 20 6d 75 73 74 20  he program must 
a0c0: 67 75 61 72 61 6e 74 65 65 20 74 68 61 74 20 74  guarantee that t
a0d0: 68 65 20 6f 72 69 67 69 6e 61 6c 20 77 69 6c 6c  he original will
a0e0: 20 6e 6f 74 20 63 68 61 6e 67 65 0a 2a 2a 20 64   not change.** d
a0f0: 75 72 69 6e 67 20 74 68 65 20 6c 69 66 65 74 69  uring the lifeti
a100: 6d 65 20 6f 66 20 74 68 65 20 63 6f 70 79 2e 20  me of the copy. 
a110: 20 55 73 65 20 4f 50 5f 43 6f 70 79 20 74 6f 20   Use OP_Copy to 
a120: 6d 61 6b 65 20 61 20 63 6f 6d 70 6c 65 74 65 0a  make a complete.
a130: 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65  ** copy..*/.case
a140: 20 4f 50 5f 53 43 6f 70 79 3a 20 7b 20 20 20 20   OP_SCopy: {    
a150: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
a160: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
a170: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f  m[pOp->p1];.  pO
a180: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
a190: 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p2];.  assert( p
a1a0: 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73  Out!=pIn1 );.  s
a1b0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
a1c0: 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70  llowCopy(pOut, p
a1d0: 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b  In1, MEM_Ephem);
a1e0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
a1f0: 45 42 55 47 0a 20 20 69 66 28 20 70 4f 75 74 2d  EBUG.  if( pOut-
a200: 3e 70 53 63 6f 70 79 46 72 6f 6d 3d 3d 30 20 29  >pScopyFrom==0 )
a210: 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f   pOut->pScopyFro
a220: 6d 20 3d 20 70 49 6e 31 3b 0a 23 65 6e 64 69 66  m = pIn1;.#endif
a230: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
a240: 4f 70 63 6f 64 65 3a 20 49 6e 74 43 6f 70 79 20  Opcode: IntCopy 
a250: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
a260: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
a270: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73  [P1].**.** Trans
a280: 66 65 72 20 74 68 65 20 69 6e 74 65 67 65 72 20  fer the integer 
a290: 76 61 6c 75 65 20 68 65 6c 64 20 69 6e 20 72 65  value held in re
a2a0: 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72  gister P1 into r
a2b0: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
a2c0: 2a 20 54 68 69 73 20 69 73 20 61 6e 20 6f 70 74  * This is an opt
a2d0: 69 6d 69 7a 65 64 20 76 65 72 73 69 6f 6e 20 6f  imized version o
a2e0: 66 20 53 43 6f 70 79 20 74 68 61 74 20 77 6f 72  f SCopy that wor
a2f0: 6b 73 20 6f 6e 6c 79 20 66 6f 72 20 69 6e 74 65  ks only for inte
a300: 67 65 72 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a  ger.** values..*
a310: 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 43 6f 70  /.case OP_IntCop
a320: 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  y: {            
a330: 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e  /* out2 */.  pIn
a340: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
a350: 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  1];.  assert( (p
a360: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
a370: 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 70 4f  _Int)!=0 );.  pO
a380: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
a390: 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  p2];.  sqlite3Vd
a3a0: 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f  beMemSetInt64(pO
a3b0: 75 74 2c 20 70 49 6e 31 2d 3e 75 2e 69 29 3b 0a  ut, pIn1->u.i);.
a3c0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
a3d0: 70 63 6f 64 65 3a 20 52 65 73 75 6c 74 52 6f 77  pcode: ResultRow
a3e0: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
a3f0: 53 79 6e 6f 70 73 69 73 3a 20 6f 75 74 70 75 74  Synopsis: output
a400: 3d 72 5b 50 31 40 50 32 5d 0a 2a 2a 0a 2a 2a 20  =r[P1@P2].**.** 
a410: 54 68 65 20 72 65 67 69 73 74 65 72 73 20 50 31  The registers P1
a420: 20 74 68 72 6f 75 67 68 20 50 31 2b 50 32 2d 31   through P1+P2-1
a430: 20 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e 67 6c   contain a singl
a440: 65 20 72 6f 77 20 6f 66 0a 2a 2a 20 72 65 73 75  e row of.** resu
a450: 6c 74 73 2e 20 54 68 69 73 20 6f 70 63 6f 64 65  lts. This opcode
a460: 20 63 61 75 73 65 73 20 74 68 65 20 73 71 6c 69   causes the sqli
a470: 74 65 33 5f 73 74 65 70 28 29 20 63 61 6c 6c 20  te3_step() call 
a480: 74 6f 20 74 65 72 6d 69 6e 61 74 65 0a 2a 2a 20  to terminate.** 
a490: 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 52  with an SQLITE_R
a4a0: 4f 57 20 72 65 74 75 72 6e 20 63 6f 64 65 20 61  OW return code a
a4b0: 6e 64 20 69 74 20 73 65 74 73 20 75 70 20 74 68  nd it sets up th
a4c0: 65 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 0a 2a  e sqlite3_stmt.*
a4d0: 2a 20 73 74 72 75 63 74 75 72 65 20 74 6f 20 70  * structure to p
a4e0: 72 6f 76 69 64 65 20 61 63 63 65 73 73 20 74 6f  rovide access to
a4f0: 20 74 68 65 20 72 28 50 31 29 2e 2e 72 28 50 31   the r(P1)..r(P1
a500: 2b 50 32 2d 31 29 20 76 61 6c 75 65 73 20 61 73  +P2-1) values as
a510: 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20 72  .** the result r
a520: 6f 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  ow..*/.case OP_R
a530: 65 73 75 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d 65  esultRow: {.  Me
a540: 6d 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74 20 69  m *pMem;.  int i
a550: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6e  ;.  assert( p->n
a560: 52 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e  ResColumn==pOp->
a570: 70 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  p2 );.  assert( 
a580: 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61  pOp->p1>0 );.  a
a590: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 2b 70  ssert( pOp->p1+p
a5a0: 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p2<=(p->nMem
a5b0: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
a5c0: 2b 31 20 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53  +1 );..#ifndef S
a5d0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
a5e0: 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f  ESS_CALLBACK.  /
a5f0: 2a 20 52 75 6e 20 74 68 65 20 70 72 6f 67 72 65  * Run the progre
a600: 73 73 20 63 6f 75 6e 74 65 72 20 6a 75 73 74 20  ss counter just 
a610: 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67  before returning
a620: 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d  ..  */.  if( db-
a630: 3e 78 50 72 6f 67 72 65 73 73 21 3d 30 0a 20 20  >xProgress!=0.  
a640: 20 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e 50 72   && nVmStep>=nPr
a650: 6f 67 72 65 73 73 4c 69 6d 69 74 0a 20 20 20 26  ogressLimit.   &
a660: 26 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28  & db->xProgress(
a670: 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67  db->pProgressArg
a680: 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 72 63  )!=0.  ){.    rc
a690: 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52   = SQLITE_INTERR
a6a0: 55 50 54 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62  UPT;.    goto ab
a6b0: 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
a6c0: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20  ;.  }.#endif..  
a6d0: 2f 2a 20 49 66 20 74 68 69 73 20 73 74 61 74 65  /* If this state
a6e0: 6d 65 6e 74 20 68 61 73 20 76 69 6f 6c 61 74 65  ment has violate
a6f0: 64 20 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65  d immediate fore
a700: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
a710: 6e 74 73 2c 20 64 6f 0a 20 20 2a 2a 20 6e 6f 74  nts, do.  ** not
a720: 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   return the numb
a730: 65 72 20 6f 66 20 72 6f 77 73 20 6d 6f 64 69 66  er of rows modif
a740: 69 65 64 2e 20 41 6e 64 20 64 6f 20 6e 6f 74 20  ied. And do not 
a750: 52 45 4c 45 41 53 45 20 74 68 65 20 73 74 61 74  RELEASE the stat
a760: 65 6d 65 6e 74 0a 20 20 2a 2a 20 74 72 61 6e 73  ement.  ** trans
a770: 61 63 74 69 6f 6e 2e 20 49 74 20 6e 65 65 64 73  action. It needs
a780: 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61   to be rolled ba
a790: 63 6b 2e 20 20 2a 2f 0a 20 20 69 66 28 20 53 51  ck.  */.  if( SQ
a7a0: 4c 49 54 45 5f 4f 4b 21 3d 28 72 63 20 3d 20 73  LITE_OK!=(rc = s
a7b0: 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46  qlite3VdbeCheckF
a7c0: 6b 28 70 2c 20 30 29 29 20 29 7b 0a 20 20 20 20  k(p, 0)) ){.    
a7d0: 61 73 73 65 72 74 28 20 64 62 2d 3e 66 6c 61 67  assert( db->flag
a7e0: 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f  s&SQLITE_CountRo
a7f0: 77 73 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  ws );.    assert
a800: 28 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75  ( p->usesStmtJou
a810: 72 6e 61 6c 20 29 3b 0a 20 20 20 20 67 6f 74 6f  rnal );.    goto
a820: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
a830: 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49  ror;.  }..  /* I
a840: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 43 6f 75  f the SQLITE_Cou
a850: 6e 74 52 6f 77 73 20 66 6c 61 67 20 69 73 20 73  ntRows flag is s
a860: 65 74 20 69 6e 20 73 71 6c 69 74 65 33 2e 66 6c  et in sqlite3.fl
a870: 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 0a  ags mask, then .
a880: 20 20 2a 2a 20 44 4d 4c 20 73 74 61 74 65 6d 65    ** DML stateme
a890: 6e 74 73 20 69 6e 76 6f 6b 65 20 74 68 69 73 20  nts invoke this 
a8a0: 6f 70 63 6f 64 65 20 74 6f 20 72 65 74 75 72 6e  opcode to return
a8b0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
a8c0: 6f 77 73 20 0a 20 20 2a 2a 20 6d 6f 64 69 66 69  ows .  ** modifi
a8d0: 65 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20  ed to the user. 
a8e0: 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79  This is the only
a8f0: 20 77 61 79 20 74 68 61 74 20 61 20 56 4d 20 74   way that a VM t
a900: 68 61 74 0a 20 20 2a 2a 20 6f 70 65 6e 73 20 61  hat.  ** opens a
a910: 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
a920: 61 63 74 69 6f 6e 20 6d 61 79 20 69 6e 76 6f 6b  action may invok
a930: 65 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 20  e this opcode.. 
a940: 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 63 61 73 65   **.  ** In case
a950: 20 74 68 69 73 20 69 73 20 73 75 63 68 20 61 20   this is such a 
a960: 73 74 61 74 65 6d 65 6e 74 2c 20 63 6c 6f 73 65  statement, close
a970: 20 61 6e 79 20 73 74 61 74 65 6d 65 6e 74 20 74   any statement t
a980: 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20 2a 2a 20  ransaction.  ** 
a990: 6f 70 65 6e 65 64 20 62 79 20 74 68 69 73 20 56  opened by this V
a9a0: 4d 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69  M before returni
a9b0: 6e 67 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68  ng control to th
a9c0: 65 20 75 73 65 72 2e 20 54 68 69 73 20 69 73 20  e user. This is 
a9d0: 74 6f 0a 20 20 2a 2a 20 65 6e 73 75 72 65 20 74  to.  ** ensure t
a9e0: 68 61 74 20 73 74 61 74 65 6d 65 6e 74 2d 74 72  hat statement-tr
a9f0: 61 6e 73 61 63 74 69 6f 6e 73 20 61 72 65 20 61  ansactions are a
aa00: 6c 77 61 79 73 20 6e 65 73 74 65 64 2c 20 6e 6f  lways nested, no
aa10: 74 20 6f 76 65 72 6c 61 70 70 69 6e 67 2e 0a 20  t overlapping.. 
aa20: 20 2a 2a 20 49 66 20 74 68 65 20 6f 70 65 6e 20   ** If the open 
aa30: 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61  statement-transa
aa40: 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 63 6c 6f  ction is not clo
aa50: 73 65 64 20 68 65 72 65 2c 20 74 68 65 6e 20 74  sed here, then t
aa60: 68 65 20 75 73 65 72 0a 20 20 2a 2a 20 6d 61 79  he user.  ** may
aa70: 20 73 74 65 70 20 61 6e 6f 74 68 65 72 20 56 4d   step another VM
aa80: 20 74 68 61 74 20 6f 70 65 6e 73 20 69 74 73 20   that opens its 
aa90: 6f 77 6e 20 73 74 61 74 65 6d 65 6e 74 20 74 72  own statement tr
aaa0: 61 6e 73 61 63 74 69 6f 6e 2e 20 54 68 69 73 0a  ansaction. This.
aab0: 20 20 2a 2a 20 6d 61 79 20 6c 65 61 64 20 74 6f    ** may lead to
aac0: 20 6f 76 65 72 6c 61 70 70 69 6e 67 20 73 74 61   overlapping sta
aad0: 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
aae0: 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  ons..  **.  ** T
aaf0: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  he statement tra
ab00: 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 65 76 65  nsaction is neve
ab10: 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20 74 72  r a top-level tr
ab20: 61 6e 73 61 63 74 69 6f 6e 2e 20 20 48 65 6e 63  ansaction.  Henc
ab30: 65 0a 20 20 2a 2a 20 74 68 65 20 52 45 4c 45 41  e.  ** the RELEA
ab40: 53 45 20 63 61 6c 6c 20 62 65 6c 6f 77 20 63 61  SE call below ca
ab50: 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e 0a 20 20  n never fail..  
ab60: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  */.  assert( p->
ab70: 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 7c 7c  iStatement==0 ||
ab80: 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54   db->flags&SQLIT
ab90: 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20  E_CountRows );. 
aba0: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
abb0: 65 43 6c 6f 73 65 53 74 61 74 65 6d 65 6e 74 28  eCloseStatement(
abc0: 70 2c 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  p, SAVEPOINT_REL
abd0: 45 41 53 45 29 3b 0a 20 20 61 73 73 65 72 74 28  EASE);.  assert(
abe0: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
abf0: 3b 0a 0a 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61  ;..  /* Invalida
ac00: 74 65 20 61 6c 6c 20 65 70 68 65 6d 65 72 61 6c  te all ephemeral
ac10: 20 63 75 72 73 6f 72 20 72 6f 77 20 63 61 63 68   cursor row cach
ac20: 65 73 20 2a 2f 0a 20 20 70 2d 3e 63 61 63 68 65  es */.  p->cache
ac30: 43 74 72 20 3d 20 28 70 2d 3e 63 61 63 68 65 43  Ctr = (p->cacheC
ac40: 74 72 20 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a  tr + 2)|1;..  /*
ac50: 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 72   Make sure the r
ac60: 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63 75  esults of the cu
ac70: 72 72 65 6e 74 20 72 6f 77 20 61 72 65 20 5c 30  rrent row are \0
ac80: 30 30 20 74 65 72 6d 69 6e 61 74 65 64 0a 20 20  00 terminated.  
ac90: 2a 2a 20 61 6e 64 20 68 61 76 65 20 61 6e 20 61  ** and have an a
aca0: 73 73 69 67 6e 65 64 20 74 79 70 65 2e 20 20 54  ssigned type.  T
acb0: 68 65 20 72 65 73 75 6c 74 73 20 61 72 65 20 64  he results are d
acc0: 65 2d 65 70 68 65 6d 65 72 61 6c 69 7a 65 64 20  e-ephemeralized 
acd0: 61 73 0a 20 20 2a 2a 20 61 20 73 69 64 65 20 65  as.  ** a side e
ace0: 66 66 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 70 4d  ffect..  */.  pM
acf0: 65 6d 20 3d 20 70 2d 3e 70 52 65 73 75 6c 74 53  em = p->pResultS
ad00: 65 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  et = &aMem[pOp->
ad10: 70 31 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  p1];.  for(i=0; 
ad20: 69 3c 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b  i<pOp->p2; i++){
ad30: 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
ad40: 49 73 56 61 6c 69 64 28 26 70 4d 65 6d 5b 69 5d  IsValid(&pMem[i]
ad50: 29 20 29 3b 0a 20 20 20 20 44 65 65 70 68 65 6d  ) );.    Deephem
ad60: 65 72 61 6c 69 7a 65 28 26 70 4d 65 6d 5b 69 5d  eralize(&pMem[i]
ad70: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28  );.    assert( (
ad80: 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20  pMem[i].flags & 
ad90: 4d 45 4d 5f 45 70 68 65 6d 29 3d 3d 30 0a 20 20  MEM_Ephem)==0.  
ada0: 20 20 20 20 20 20 20 20 20 20 7c 7c 20 28 70 4d            || (pM
adb0: 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20 28 4d  em[i].flags & (M
adc0: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
add0: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69  )==0 );.    sqli
ade0: 74 65 33 56 64 62 65 4d 65 6d 4e 75 6c 54 65 72  te3VdbeMemNulTer
adf0: 6d 69 6e 61 74 65 28 26 70 4d 65 6d 5b 69 5d 29  minate(&pMem[i])
ae00: 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
ae10: 52 41 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c 20  RACE(pOp->p1+i, 
ae20: 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20  &pMem[i]);.  }. 
ae30: 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46   if( db->mallocF
ae40: 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f  ailed ) goto no_
ae50: 6d 65 6d 3b 0a 0a 20 20 69 66 28 20 64 62 2d 3e  mem;..  if( db->
ae60: 6d 54 72 61 63 65 20 26 20 53 51 4c 49 54 45 5f  mTrace & SQLITE_
ae70: 54 52 41 43 45 5f 52 4f 57 20 29 7b 0a 20 20 20  TRACE_ROW ){.   
ae80: 20 64 62 2d 3e 78 54 72 61 63 65 28 53 51 4c 49   db->xTrace(SQLI
ae90: 54 45 5f 54 52 41 43 45 5f 52 4f 57 2c 20 64 62  TE_TRACE_ROW, db
aea0: 2d 3e 70 54 72 61 63 65 41 72 67 2c 20 70 2c 20  ->pTraceArg, p, 
aeb0: 30 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65  0);.  }..  /* Re
aec0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 52 4f 57 0a  turn SQLITE_ROW.
aed0: 20 20 2a 2f 0a 20 20 70 2d 3e 70 63 20 3d 20 28    */.  p->pc = (
aee0: 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 20  int)(pOp - aOp) 
aef0: 2b 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49  + 1;.  rc = SQLI
af00: 54 45 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76  TE_ROW;.  goto v
af10: 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f  dbe_return;.}../
af20: 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74  * Opcode: Concat
af30: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
af40: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
af50: 3d 72 5b 50 32 5d 2b 72 5b 50 31 5d 0a 2a 2a 0a  =r[P2]+r[P1].**.
af60: 2a 2a 20 41 64 64 20 74 68 65 20 74 65 78 74 20  ** Add the text 
af70: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 6f  in register P1 o
af80: 6e 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74  nto the end of t
af90: 68 65 20 74 65 78 74 20 69 6e 0a 2a 2a 20 72 65  he text in.** re
afa0: 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 73 74  gister P2 and st
afb0: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
afc0: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
afd0: 2a 20 49 66 20 65 69 74 68 65 72 20 74 68 65 20  * If either the 
afe0: 50 31 20 6f 72 20 50 32 20 74 65 78 74 20 61 72  P1 or P2 text ar
aff0: 65 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72  e NULL then stor
b000: 65 20 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a  e NULL in P3..**
b010: 0a 2a 2a 20 20 20 50 33 20 3d 20 50 32 20 7c 7c  .**   P3 = P2 ||
b020: 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20   P1.**.** It is 
b030: 69 6c 6c 65 67 61 6c 20 66 6f 72 20 50 31 20 61  illegal for P1 a
b040: 6e 64 20 50 33 20 74 6f 20 62 65 20 74 68 65 20  nd P3 to be the 
b050: 73 61 6d 65 20 72 65 67 69 73 74 65 72 2e 20 53  same register. S
b060: 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20 69 66 20  ometimes,.** if 
b070: 50 33 20 69 73 20 74 68 65 20 73 61 6d 65 20 72  P3 is the same r
b080: 65 67 69 73 74 65 72 20 61 73 20 50 32 2c 20 74  egister as P2, t
b090: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
b0a0: 6e 20 69 73 20 61 62 6c 65 0a 2a 2a 20 74 6f 20  n is able.** to 
b0b0: 61 76 6f 69 64 20 61 20 6d 65 6d 63 70 79 28 29  avoid a memcpy()
b0c0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e  ..*/.case OP_Con
b0d0: 63 61 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  cat: {          
b0e0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 43   /* same as TK_C
b0f0: 4f 4e 43 41 54 2c 20 69 6e 31 2c 20 69 6e 32 2c  ONCAT, in1, in2,
b100: 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 6e   out3 */.  i64 n
b110: 42 79 74 65 3b 0a 0a 20 20 70 49 6e 31 20 3d 20  Byte;..  pIn1 = 
b120: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
b130: 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
b140: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20  Op->p2];.  pOut 
b150: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
b160: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
b170: 21 3d 70 4f 75 74 20 29 3b 0a 20 20 69 66 28 20  !=pOut );.  if( 
b180: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70  (pIn1->flags | p
b190: 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45  In2->flags) & ME
b1a0: 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71  M_Null ){.    sq
b1b0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
b1c0: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62  ull(pOut);.    b
b1d0: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 66 28 20  reak;.  }.  if( 
b1e0: 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29  ExpandBlob(pIn1)
b1f0: 20 7c 7c 20 45 78 70 61 6e 64 42 6c 6f 62 28 70   || ExpandBlob(p
b200: 49 6e 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  In2) ) goto no_m
b210: 65 6d 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28  em;.  Stringify(
b220: 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pIn1, encoding);
b230: 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e  .  Stringify(pIn
b240: 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  2, encoding);.  
b250: 6e 42 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e 20  nByte = pIn1->n 
b260: 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28  + pIn2->n;.  if(
b270: 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69   nByte>db->aLimi
b280: 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
b290: 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f  ENGTH] ){.    go
b2a0: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
b2b0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
b2c0: 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28  eMemGrow(pOut, (
b2d0: 69 6e 74 29 6e 42 79 74 65 2b 32 2c 20 70 4f 75  int)nByte+2, pOu
b2e0: 74 3d 3d 70 49 6e 32 29 20 29 7b 0a 20 20 20 20  t==pIn2) ){.    
b2f0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
b300: 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
b310: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 53 74 72 29  g(pOut, MEM_Str)
b320: 3b 0a 20 20 69 66 28 20 70 4f 75 74 21 3d 70 49  ;.  if( pOut!=pI
b330: 6e 32 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79  n2 ){.    memcpy
b340: 28 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e  (pOut->z, pIn2->
b350: 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d  z, pIn2->n);.  }
b360: 0a 20 20 6d 65 6d 63 70 79 28 26 70 4f 75 74 2d  .  memcpy(&pOut-
b370: 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e  >z[pIn2->n], pIn
b380: 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a  1->z, pIn1->n);.
b390: 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d    pOut->z[nByte]
b3a0: 3d 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42  =0;.  pOut->z[nB
b3b0: 79 74 65 2b 31 5d 20 3d 20 30 3b 0a 20 20 70 4f  yte+1] = 0;.  pO
b3c0: 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ut->flags |= MEM
b3d0: 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e  _Term;.  pOut->n
b3e0: 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20   = (int)nByte;. 
b3f0: 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63   pOut->enc = enc
b400: 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f  oding;.  UPDATE_
b410: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
b420: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
b430: 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 20 50  /* Opcode: Add P
b440: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
b450: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72  ynopsis: r[P3]=r
b460: 5b 50 31 5d 2b 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  [P1]+r[P2].**.**
b470: 20 41 64 64 20 74 68 65 20 76 61 6c 75 65 20 69   Add the value i
b480: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  n register P1 to
b490: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
b4a0: 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64  gister P2.** and
b4b0: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
b4c0: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
b4d0: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
b4e0: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
b4f0: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
b500: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
b510: 4d 75 6c 74 69 70 6c 79 20 50 31 20 50 32 20 50  Multiply P1 P2 P
b520: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
b530: 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2a 72  s: r[P3]=r[P1]*r
b540: 5b 50 32 5d 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75  [P2].**.**.** Mu
b550: 6c 74 69 70 6c 79 20 74 68 65 20 76 61 6c 75 65  ltiply the value
b560: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
b570: 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  by the value in 
b580: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61  register P2.** a
b590: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
b5a0: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
b5b0: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
b5c0: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
b5d0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
b5e0: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
b5f0: 3a 20 53 75 62 74 72 61 63 74 20 50 31 20 50 32  : Subtract P1 P2
b600: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
b610: 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d  sis: r[P3]=r[P2]
b620: 2d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 75 62  -r[P1].**.** Sub
b630: 74 72 61 63 74 20 74 68 65 20 76 61 6c 75 65 20  tract the value 
b640: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 66  in register P1 f
b650: 72 6f 6d 20 74 68 65 20 76 61 6c 75 65 20 69 6e  rom the value in
b660: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20   register P2.** 
b670: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
b680: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
b690: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
b6a0: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
b6b0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
b6c0: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
b6d0: 65 3a 20 44 69 76 69 64 65 20 50 31 20 50 32 20  e: Divide P1 P2 
b6e0: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
b6f0: 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2f  is: r[P3]=r[P2]/
b700: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 44 69 76 69  r[P1].**.** Divi
b710: 64 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  de the value in 
b720: 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74  register P1 by t
b730: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
b740: 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73  ster P2.** and s
b750: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
b760: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 28  in register P3 (
b770: 50 33 3d 50 32 2f 50 31 29 2e 20 49 66 20 74 68  P3=P2/P1). If th
b780: 65 20 76 61 6c 75 65 20 69 6e 20 0a 2a 2a 20 72  e value in .** r
b790: 65 67 69 73 74 65 72 20 50 31 20 69 73 20 7a 65  egister P1 is ze
b7a0: 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73  ro, then the res
b7b0: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20 49 66 20  ult is NULL. If 
b7c0: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
b7d0: 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65  .** NULL, the re
b7e0: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
b7f0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6d 61  ./* Opcode: Rema
b800: 69 6e 64 65 72 20 50 31 20 50 32 20 50 33 20 2a  inder P1 P2 P3 *
b810: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
b820: 72 5b 50 33 5d 3d 72 5b 50 32 5d 25 72 5b 50 31  r[P3]=r[P2]%r[P1
b830: 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65 20  ].**.** Compute 
b840: 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 61 66  the remainder af
b850: 74 65 72 20 69 6e 74 65 67 65 72 20 72 65 67 69  ter integer regi
b860: 73 74 65 72 20 50 32 20 69 73 20 64 69 76 69 64  ster P2 is divid
b870: 65 64 20 62 79 20 0a 2a 2a 20 72 65 67 69 73 74  ed by .** regist
b880: 65 72 20 50 31 20 61 6e 64 20 73 74 6f 72 65 20  er P1 and store 
b890: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
b8a0: 67 69 73 74 65 72 20 50 33 2e 20 0a 2a 2a 20 49  gister P3. .** I
b8b0: 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
b8c0: 65 67 69 73 74 65 72 20 50 31 20 69 73 20 7a 65  egister P1 is ze
b8d0: 72 6f 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  ro the result is
b8e0: 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69 74   NULL..** If eit
b8f0: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
b900: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
b910: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  is NULL..*/.case
b920: 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20   OP_Add:        
b930: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
b940: 6d 65 20 61 73 20 54 4b 5f 50 4c 55 53 2c 20 69  me as TK_PLUS, i
b950: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
b960: 0a 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63  .case OP_Subtrac
b970: 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t:              
b980: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4d 49  /* same as TK_MI
b990: 4e 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  NUS, in1, in2, o
b9a0: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d  ut3 */.case OP_M
b9b0: 75 6c 74 69 70 6c 79 3a 20 20 20 20 20 20 20 20  ultiply:        
b9c0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
b9d0: 20 54 4b 5f 53 54 41 52 2c 20 69 6e 31 2c 20 69   TK_STAR, in1, i
b9e0: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
b9f0: 20 4f 50 5f 44 69 76 69 64 65 3a 20 20 20 20 20   OP_Divide:     
ba00: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
ba10: 6d 65 20 61 73 20 54 4b 5f 53 4c 41 53 48 2c 20  me as TK_SLASH, 
ba20: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
ba30: 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6d 61 69 6e  /.case OP_Remain
ba40: 64 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20  der: {          
ba50: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52   /* same as TK_R
ba60: 45 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  EM, in1, in2, ou
ba70: 74 33 20 2a 2f 0a 20 20 63 68 61 72 20 62 49 6e  t3 */.  char bIn
ba80: 74 69 6e 74 3b 20 20 20 2f 2a 20 53 74 61 72 74  tint;   /* Start
ba90: 65 64 20 6f 75 74 20 61 73 20 74 77 6f 20 69 6e  ed out as two in
baa0: 74 65 67 65 72 20 6f 70 65 72 61 6e 64 73 20 2a  teger operands *
bab0: 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 3b 20 20  /.  u16 flags;  
bac0: 20 20 20 20 2f 2a 20 43 6f 6d 62 69 6e 65 64 20      /* Combined 
bad0: 4d 45 4d 5f 2a 20 66 6c 61 67 73 20 66 72 6f 6d  MEM_* flags from
bae0: 20 62 6f 74 68 20 69 6e 70 75 74 73 20 2a 2f 0a   both inputs */.
baf0: 20 20 75 31 36 20 74 79 70 65 31 3b 20 20 20 20    u16 type1;    
bb00: 20 20 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79 70    /* Numeric typ
bb10: 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e  e of left operan
bb20: 64 20 2a 2f 0a 20 20 75 31 36 20 74 79 70 65 32  d */.  u16 type2
bb30: 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 65 72 69  ;      /* Numeri
bb40: 63 20 74 79 70 65 20 6f 66 20 72 69 67 68 74 20  c type of right 
bb50: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34  operand */.  i64
bb60: 20 69 41 3b 20 20 20 20 20 20 20 20 20 2f 2a 20   iA;         /* 
bb70: 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66  Integer value of
bb80: 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f   left operand */
bb90: 0a 20 20 69 36 34 20 69 42 3b 20 20 20 20 20 20  .  i64 iB;      
bba0: 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61     /* Integer va
bbb0: 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65  lue of right ope
bbc0: 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65  rand */.  double
bbd0: 20 72 41 3b 20 20 20 20 20 20 2f 2a 20 52 65 61   rA;      /* Rea
bbe0: 6c 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20  l value of left 
bbf0: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75  operand */.  dou
bc00: 62 6c 65 20 72 42 3b 20 20 20 20 20 20 2f 2a 20  ble rB;      /* 
bc10: 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 72 69  Real value of ri
bc20: 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 0a  ght operand */..
bc30: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
bc40: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 74 79 70 65 31  Op->p1];.  type1
bc50: 20 3d 20 6e 75 6d 65 72 69 63 54 79 70 65 28 70   = numericType(p
bc60: 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26  In1);.  pIn2 = &
bc70: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
bc80: 20 74 79 70 65 32 20 3d 20 6e 75 6d 65 72 69 63   type2 = numeric
bc90: 54 79 70 65 28 70 49 6e 32 29 3b 0a 20 20 70 4f  Type(pIn2);.  pO
bca0: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
bcb0: 70 33 5d 3b 0a 20 20 66 6c 61 67 73 20 3d 20 70  p3];.  flags = p
bcc0: 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e  In1->flags | pIn
bcd0: 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20  2->flags;.  if( 
bce0: 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  (flags & MEM_Nul
bcf0: 6c 29 21 3d 30 20 29 20 67 6f 74 6f 20 61 72 69  l)!=0 ) goto ari
bd00: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
bd10: 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66 28 20 28 74  s_null;.  if( (t
bd20: 79 70 65 31 20 26 20 74 79 70 65 32 20 26 20 4d  ype1 & type2 & M
bd30: 45 4d 5f 49 6e 74 29 21 3d 30 20 29 7b 0a 20 20  EM_Int)!=0 ){.  
bd40: 20 20 69 41 20 3d 20 70 49 6e 31 2d 3e 75 2e 69    iA = pIn1->u.i
bd50: 3b 0a 20 20 20 20 69 42 20 3d 20 70 49 6e 32 2d  ;.    iB = pIn2-
bd60: 3e 75 2e 69 3b 0a 20 20 20 20 62 49 6e 74 69 6e  >u.i;.    bIntin
bd70: 74 20 3d 20 31 3b 0a 20 20 20 20 73 77 69 74 63  t = 1;.    switc
bd80: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
bd90: 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  {.      case OP_
bda0: 41 64 64 3a 20 20 20 20 20 20 20 69 66 28 20 73  Add:       if( s
bdb0: 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 26  qlite3AddInt64(&
bdc0: 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70  iB,iA) ) goto fp
bdd0: 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20  _math;  break;. 
bde0: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62       case OP_Sub
bdf0: 74 72 61 63 74 3a 20 20 69 66 28 20 73 71 6c 69  tract:  if( sqli
be00: 74 65 33 53 75 62 49 6e 74 36 34 28 26 69 42 2c  te3SubInt64(&iB,
be10: 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61  iA) ) goto fp_ma
be20: 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  th;  break;.    
be30: 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70    case OP_Multip
be40: 6c 79 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ly:  if( sqlite3
be50: 4d 75 6c 49 6e 74 36 34 28 26 69 42 2c 69 41 29  MulInt64(&iB,iA)
be60: 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b   ) goto fp_math;
be70: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
be80: 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b  ase OP_Divide: {
be90: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
bea0: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
beb0: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
bec0: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ull;.        if(
bed0: 20 69 41 3d 3d 2d 31 20 26 26 20 69 42 3d 3d 53   iA==-1 && iB==S
bee0: 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29 20  MALLEST_INT64 ) 
bef0: 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 0a 20 20  goto fp_math;.  
bf00: 20 20 20 20 20 20 69 42 20 2f 3d 20 69 41 3b 0a        iB /= iA;.
bf10: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
bf20: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66       }.      def
bf30: 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20  ault: {.        
bf40: 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f  if( iA==0 ) goto
bf50: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
bf60: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20  lt_is_null;.    
bf70: 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29      if( iA==-1 )
bf80: 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20   iA = 1;.       
bf90: 20 69 42 20 25 3d 20 69 41 3b 0a 20 20 20 20 20   iB %= iA;.     
bfa0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
bfb0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74  }.    }.    pOut
bfc0: 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a 20 20 20 20  ->u.i = iB;.    
bfd0: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
bfe0: 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
bff0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 62 49 6e 74   }else{.    bInt
c000: 69 6e 74 20 3d 20 30 3b 0a 66 70 5f 6d 61 74 68  int = 0;.fp_math
c010: 3a 0a 20 20 20 20 72 41 20 3d 20 73 71 6c 69 74  :.    rA = sqlit
c020: 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28  e3VdbeRealValue(
c030: 70 49 6e 31 29 3b 0a 20 20 20 20 72 42 20 3d 20  pIn1);.    rB = 
c040: 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56  sqlite3VdbeRealV
c050: 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 20 20  alue(pIn2);.    
c060: 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63  switch( pOp->opc
c070: 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73  ode ){.      cas
c080: 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20  e OP_Add:       
c090: 20 20 72 42 20 2b 3d 20 72 41 3b 20 20 20 20 20    rB += rA;     
c0a0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
c0b0: 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a  ase OP_Subtract:
c0c0: 20 20 20 20 72 42 20 2d 3d 20 72 41 3b 20 20 20      rB -= rA;   
c0d0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
c0e0: 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c   case OP_Multipl
c0f0: 79 3a 20 20 20 20 72 42 20 2a 3d 20 72 41 3b 20  y:    rB *= rA; 
c100: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
c110: 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64     case OP_Divid
c120: 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  e: {.        /* 
c130: 28 64 6f 75 62 6c 65 29 30 20 49 6e 20 63 61 73  (double)0 In cas
c140: 65 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  e of SQLITE_OMIT
c150: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 2e  _FLOATING_POINT.
c160: 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66  .. */.        if
c170: 28 20 72 41 3d 3d 28 64 6f 75 62 6c 65 29 30 20  ( rA==(double)0 
c180: 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69  ) goto arithmeti
c190: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
c1a0: 3b 0a 20 20 20 20 20 20 20 20 72 42 20 2f 3d 20  ;.        rB /= 
c1b0: 72 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  rA;.        brea
c1c0: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  k;.      }.     
c1d0: 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20   default: {.    
c1e0: 20 20 20 20 69 41 20 3d 20 28 69 36 34 29 72 41      iA = (i64)rA
c1f0: 3b 0a 20 20 20 20 20 20 20 20 69 42 20 3d 20 28  ;.        iB = (
c200: 69 36 34 29 72 42 3b 0a 20 20 20 20 20 20 20 20  i64)rB;.        
c210: 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f  if( iA==0 ) goto
c220: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
c230: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20  lt_is_null;.    
c240: 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29      if( iA==-1 )
c250: 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20   iA = 1;.       
c260: 20 72 42 20 3d 20 28 64 6f 75 62 6c 65 29 28 69   rB = (double)(i
c270: 42 20 25 20 69 41 29 3b 0a 20 20 20 20 20 20 20  B % iA);.       
c280: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
c290: 20 20 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c      }.#ifdef SQL
c2a0: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
c2b0: 47 5f 50 4f 49 4e 54 0a 20 20 20 20 70 4f 75 74  G_POINT.    pOut
c2c0: 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a 20 20 20 20  ->u.i = rB;.    
c2d0: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
c2e0: 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 23  Out, MEM_Int);.#
c2f0: 65 6c 73 65 0a 20 20 20 20 69 66 28 20 73 71 6c  else.    if( sql
c300: 69 74 65 33 49 73 4e 61 4e 28 72 42 29 20 29 7b  ite3IsNaN(rB) ){
c310: 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 72 69 74  .      goto arit
c320: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
c330: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20 20  _null;.    }.   
c340: 20 70 4f 75 74 2d 3e 75 2e 72 20 3d 20 72 42 3b   pOut->u.r = rB;
c350: 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
c360: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 52 65  lag(pOut, MEM_Re
c370: 61 6c 29 3b 0a 20 20 20 20 69 66 28 20 28 28 74  al);.    if( ((t
c380: 79 70 65 31 7c 74 79 70 65 32 29 26 4d 45 4d 5f  ype1|type2)&MEM_
c390: 52 65 61 6c 29 3d 3d 30 20 26 26 20 21 62 49 6e  Real)==0 && !bIn
c3a0: 74 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71  tint ){.      sq
c3b0: 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67 65 72  lite3VdbeInteger
c3c0: 41 66 66 69 6e 69 74 79 28 70 4f 75 74 29 3b 0a  Affinity(pOut);.
c3d0: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d      }.#endif.  }
c3e0: 0a 20 20 62 72 65 61 6b 3b 0a 0a 61 72 69 74 68  .  break;..arith
c3f0: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
c400: 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69 74 65 33 56  null:.  sqlite3V
c410: 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f  dbeMemSetNull(pO
c420: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
c430: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 6c  ./* Opcode: Coll
c440: 53 65 71 20 50 31 20 2a 20 2a 20 50 34 0a 2a 2a  Seq P1 * * P4.**
c450: 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
c460: 74 65 72 20 74 6f 20 61 20 43 6f 6c 6c 53 65 71  ter to a CollSeq
c470: 20 73 74 72 75 63 74 2e 20 49 66 20 74 68 65 20   struct. If the 
c480: 6e 65 78 74 20 63 61 6c 6c 20 74 6f 20 61 20 75  next call to a u
c490: 73 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20  ser function.** 
c4a0: 6f 72 20 61 67 67 72 65 67 61 74 65 20 63 61 6c  or aggregate cal
c4b0: 6c 73 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e  ls sqlite3GetFun
c4c0: 63 43 6f 6c 6c 53 65 71 28 29 2c 20 74 68 69 73  cCollSeq(), this
c4d0: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
c4e0: 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 72  nce will.** be r
c4f0: 65 74 75 72 6e 65 64 2e 20 54 68 69 73 20 69 73  eturned. This is
c500: 20 75 73 65 64 20 62 79 20 74 68 65 20 62 75 69   used by the bui
c510: 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d 61 78  lt-in min(), max
c520: 28 29 20 61 6e 64 20 6e 75 6c 6c 69 66 28 29 0a  () and nullif().
c530: 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a  ** functions..**
c540: 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 74  .** If P1 is not
c550: 20 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74 20 69   zero, then it i
c560: 73 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61  s a register tha
c570: 74 20 61 20 73 75 62 73 65 71 75 65 6e 74 20 6d  t a subsequent m
c580: 69 6e 28 29 20 6f 72 0a 2a 2a 20 6d 61 78 28 29  in() or.** max()
c590: 20 61 67 67 72 65 67 61 74 65 20 77 69 6c 6c 20   aggregate will 
c5a0: 73 65 74 20 74 6f 20 31 20 69 66 20 74 68 65 20  set to 1 if the 
c5b0: 63 75 72 72 65 6e 74 20 72 6f 77 20 69 73 20 6e  current row is n
c5c0: 6f 74 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20 6f  ot the minimum o
c5d0: 72 0a 2a 2a 20 6d 61 78 69 6d 75 6d 2e 20 20 54  r.** maximum.  T
c5e0: 68 65 20 50 31 20 72 65 67 69 73 74 65 72 20 69  he P1 register i
c5f0: 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f  s initialized to
c600: 20 30 20 62 79 20 74 68 69 73 20 69 6e 73 74 72   0 by this instr
c610: 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  uction..**.** Th
c620: 65 20 69 6e 74 65 72 66 61 63 65 20 75 73 65 64  e interface used
c630: 20 62 79 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e   by the implemen
c640: 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 61 66  tation of the af
c650: 6f 72 65 6d 65 6e 74 69 6f 6e 65 64 20 66 75 6e  orementioned fun
c660: 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65 74  ctions.** to ret
c670: 72 69 65 76 65 20 74 68 65 20 63 6f 6c 6c 61 74  rieve the collat
c680: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 73 65 74  ion sequence set
c690: 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20   by this opcode 
c6a0: 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65  is not available
c6b0: 0a 2a 2a 20 70 75 62 6c 69 63 6c 79 2e 20 20 4f  .** publicly.  O
c6c0: 6e 6c 79 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e  nly built-in fun
c6d0: 63 74 69 6f 6e 73 20 68 61 76 65 20 61 63 63 65  ctions have acce
c6e0: 73 73 20 74 6f 20 74 68 69 73 20 66 65 61 74 75  ss to this featu
c6f0: 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  re..*/.case OP_C
c700: 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20 61 73 73 65  ollSeq: {.  asse
c710: 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
c720: 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20  =P4_COLLSEQ );. 
c730: 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a   if( pOp->p1 ){.
c740: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
c750: 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d  emSetInt64(&aMem
c760: 5b 70 4f 70 2d 3e 70 31 5d 2c 20 30 29 3b 0a 20  [pOp->p1], 0);. 
c770: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
c780: 2a 20 4f 70 63 6f 64 65 3a 20 46 75 6e 63 74 69  * Opcode: Functi
c790: 6f 6e 30 20 50 31 20 50 32 20 50 33 20 50 34 20  on0 P1 P2 P3 P4 
c7a0: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
c7b0: 72 5b 50 33 5d 3d 66 75 6e 63 28 72 5b 50 32 40  r[P3]=func(r[P2@
c7c0: 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b  P5]).**.** Invok
c7d0: 65 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f  e a user functio
c7e0: 6e 20 28 50 34 20 69 73 20 61 20 70 6f 69 6e 74  n (P4 is a point
c7f0: 65 72 20 74 6f 20 61 20 46 75 6e 63 44 65 66 20  er to a FuncDef 
c800: 6f 62 6a 65 63 74 20 74 68 61 74 0a 2a 2a 20 64  object that.** d
c810: 65 66 69 6e 65 73 20 74 68 65 20 66 75 6e 63 74  efines the funct
c820: 69 6f 6e 29 20 77 69 74 68 20 50 35 20 61 72 67  ion) with P5 arg
c830: 75 6d 65 6e 74 73 20 74 61 6b 65 6e 20 66 72 6f  uments taken fro
c840: 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  m register P2 an
c850: 64 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e  d.** successors.
c860: 20 20 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20    The result of 
c870: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  the function is 
c880: 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
c890: 65 72 20 50 33 2e 0a 2a 2a 20 52 65 67 69 73 74  er P3..** Regist
c8a0: 65 72 20 50 33 20 6d 75 73 74 20 6e 6f 74 20 62  er P3 must not b
c8b0: 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 75 6e  e one of the fun
c8c0: 63 74 69 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a  ction inputs..**
c8d0: 0a 2a 2a 20 50 31 20 69 73 20 61 20 33 32 2d 62  .** P1 is a 32-b
c8e0: 69 74 20 62 69 74 6d 61 73 6b 20 69 6e 64 69 63  it bitmask indic
c8f0: 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72  ating whether or
c900: 20 6e 6f 74 20 65 61 63 68 20 61 72 67 75 6d 65   not each argume
c910: 6e 74 20 74 6f 20 74 68 65 20 0a 2a 2a 20 66 75  nt to the .** fu
c920: 6e 63 74 69 6f 6e 20 77 61 73 20 64 65 74 65 72  nction was deter
c930: 6d 69 6e 65 64 20 74 6f 20 62 65 20 63 6f 6e 73  mined to be cons
c940: 74 61 6e 74 20 61 74 20 63 6f 6d 70 69 6c 65 20  tant at compile 
c950: 74 69 6d 65 2e 20 49 66 20 74 68 65 20 66 69 72  time. If the fir
c960: 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 77  st.** argument w
c970: 61 73 20 63 6f 6e 73 74 61 6e 74 20 74 68 65 6e  as constant then
c980: 20 62 69 74 20 30 20 6f 66 20 50 31 20 69 73 20   bit 0 of P1 is 
c990: 73 65 74 2e 20 54 68 69 73 20 69 73 20 75 73 65  set. This is use
c9a0: 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 0a 2a  d to determine.*
c9b0: 2a 20 77 68 65 74 68 65 72 20 6d 65 74 61 20 64  * whether meta d
c9c0: 61 74 61 20 61 73 73 6f 63 69 61 74 65 64 20 77  ata associated w
c9d0: 69 74 68 20 61 20 75 73 65 72 20 66 75 6e 63 74  ith a user funct
c9e0: 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20 75 73 69  ion argument usi
c9f0: 6e 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  ng the.** sqlite
ca00: 33 5f 73 65 74 5f 61 75 78 64 61 74 61 28 29 20  3_set_auxdata() 
ca10: 41 50 49 20 6d 61 79 20 62 65 20 73 61 66 65 6c  API may be safel
ca20: 79 20 72 65 74 61 69 6e 65 64 20 75 6e 74 69 6c  y retained until
ca30: 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 76   the next.** inv
ca40: 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 69 73 20  ocation of this 
ca50: 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65  opcode..**.** Se
ca60: 65 20 61 6c 73 6f 3a 20 46 75 6e 63 74 69 6f 6e  e also: Function
ca70: 2c 20 41 67 67 53 74 65 70 2c 20 41 67 67 46 69  , AggStep, AggFi
ca80: 6e 61 6c 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  nal.*/./* Opcode
ca90: 3a 20 46 75 6e 63 74 69 6f 6e 20 50 31 20 50 32  : Function P1 P2
caa0: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
cab0: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 66 75 6e  opsis: r[P3]=fun
cac0: 63 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a  c(r[P2@P5]).**.*
cad0: 2a 20 49 6e 76 6f 6b 65 20 61 20 75 73 65 72 20  * Invoke a user 
cae0: 66 75 6e 63 74 69 6f 6e 20 28 50 34 20 69 73 20  function (P4 is 
caf0: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20  a pointer to an 
cb00: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
cb10: 6f 62 6a 65 63 74 20 74 68 61 74 0a 2a 2a 20 63  object that.** c
cb20: 6f 6e 74 61 69 6e 73 20 61 20 70 6f 69 6e 74 65  ontains a pointe
cb30: 72 20 74 6f 20 74 68 65 20 66 75 6e 63 74 69 6f  r to the functio
cb40: 6e 20 74 6f 20 62 65 20 72 75 6e 29 20 77 69 74  n to be run) wit
cb50: 68 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20 74  h P5 arguments t
cb60: 61 6b 65 6e 0a 2a 2a 20 66 72 6f 6d 20 72 65 67  aken.** from reg
cb70: 69 73 74 65 72 20 50 32 20 61 6e 64 20 73 75 63  ister P2 and suc
cb80: 63 65 73 73 6f 72 73 2e 20 20 54 68 65 20 72 65  cessors.  The re
cb90: 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63  sult of the func
cba0: 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 0a 2a  tion is stored.*
cbb0: 2a 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  * in register P3
cbc0: 2e 20 20 52 65 67 69 73 74 65 72 20 50 33 20 6d  .  Register P3 m
cbd0: 75 73 74 20 6e 6f 74 20 62 65 20 6f 6e 65 20 6f  ust not be one o
cbe0: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69  f the function i
cbf0: 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  nputs..**.** P1 
cc00: 69 73 20 61 20 33 32 2d 62 69 74 20 62 69 74 6d  is a 32-bit bitm
cc10: 61 73 6b 20 69 6e 64 69 63 61 74 69 6e 67 20 77  ask indicating w
cc20: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 65 61  hether or not ea
cc30: 63 68 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  ch argument to t
cc40: 68 65 20 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20  he .** function 
cc50: 77 61 73 20 64 65 74 65 72 6d 69 6e 65 64 20 74  was determined t
cc60: 6f 20 62 65 20 63 6f 6e 73 74 61 6e 74 20 61 74  o be constant at
cc70: 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65 2e 20 49   compile time. I
cc80: 66 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61  f the first.** a
cc90: 72 67 75 6d 65 6e 74 20 77 61 73 20 63 6f 6e 73  rgument was cons
cca0: 74 61 6e 74 20 74 68 65 6e 20 62 69 74 20 30 20  tant then bit 0 
ccb0: 6f 66 20 50 31 20 69 73 20 73 65 74 2e 20 54 68  of P1 is set. Th
ccc0: 69 73 20 69 73 20 75 73 65 64 20 74 6f 20 64 65  is is used to de
ccd0: 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68  termine.** wheth
cce0: 65 72 20 6d 65 74 61 20 64 61 74 61 20 61 73 73  er meta data ass
ccf0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 75  ociated with a u
cd00: 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 61 72 67  ser function arg
cd10: 75 6d 65 6e 74 20 75 73 69 6e 67 20 74 68 65 0a  ument using the.
cd20: 2a 2a 20 73 71 6c 69 74 65 33 5f 73 65 74 5f 61  ** sqlite3_set_a
cd30: 75 78 64 61 74 61 28 29 20 41 50 49 20 6d 61 79  uxdata() API may
cd40: 20 62 65 20 73 61 66 65 6c 79 20 72 65 74 61 69   be safely retai
cd50: 6e 65 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65  ned until the ne
cd60: 78 74 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e  xt.** invocation
cd70: 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65 2e   of this opcode.
cd80: 0a 2a 2a 0a 2a 2a 20 53 51 4c 20 66 75 6e 63 74  .**.** SQL funct
cd90: 69 6f 6e 73 20 61 72 65 20 69 6e 69 74 69 61 6c  ions are initial
cda0: 6c 79 20 63 6f 64 65 64 20 61 73 20 4f 50 5f 46  ly coded as OP_F
cdb0: 75 6e 63 74 69 6f 6e 30 20 77 69 74 68 20 50 34  unction0 with P4
cdc0: 20 70 6f 69 6e 74 69 6e 67 0a 2a 2a 20 74 6f 20   pointing.** to 
cdd0: 61 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74  a FuncDef object
cde0: 2e 20 20 42 75 74 20 6f 6e 20 66 69 72 73 74 20  .  But on first 
cdf0: 65 76 61 6c 75 61 74 69 6f 6e 2c 20 74 68 65 20  evaluation, the 
ce00: 50 34 20 6f 70 65 72 61 6e 64 20 69 73 0a 2a 2a  P4 operand is.**
ce10: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63   automatically c
ce20: 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e  onverted into an
ce30: 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
ce40: 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 65 20   object and the 
ce50: 6f 70 65 72 61 74 69 6f 6e 0a 2a 2a 20 63 68 61  operation.** cha
ce60: 6e 67 65 64 20 74 6f 20 74 68 69 73 20 4f 50 5f  nged to this OP_
ce70: 46 75 6e 63 74 69 6f 6e 20 6f 70 63 6f 64 65 2e  Function opcode.
ce80: 20 20 49 6e 20 74 68 69 73 20 77 61 79 2c 20 74    In this way, t
ce90: 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  he initializatio
cea0: 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 73 71 6c 69  n of.** the sqli
ceb0: 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65  te3_context obje
cec0: 63 74 20 6f 63 63 75 72 73 20 6f 6e 6c 79 20 6f  ct occurs only o
ced0: 6e 63 65 2c 20 72 61 74 68 65 72 20 74 68 61 6e  nce, rather than
cee0: 20 6f 6e 63 65 20 66 6f 72 20 65 61 63 68 0a 2a   once for each.*
cef0: 2a 20 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20  * evaluation of 
cf00: 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a  the function..**
cf10: 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 75  .** See also: Fu
cf20: 6e 63 74 69 6f 6e 30 2c 20 41 67 67 53 74 65 70  nction0, AggStep
cf30: 2c 20 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63 61  , AggFinal.*/.ca
cf40: 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 30 3a  se OP_Function0:
cf50: 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 73 71   {.  int n;.  sq
cf60: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70  lite3_context *p
cf70: 43 74 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  Ctx;..  assert( 
cf80: 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
cf90: 46 55 4e 43 44 45 46 20 29 3b 0a 20 20 6e 20 3d  FUNCDEF );.  n =
cfa0: 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65   pOp->p5;.  asse
cfb0: 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
cfc0: 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
cfd0: 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
cfe0: 72 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  r) );.  assert( 
cff0: 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32  n==0 || (pOp->p2
d000: 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c  >0 && pOp->p2+n<
d010: 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
d020: 3e 6e 43 75 72 73 6f 72 29 2b 31 29 20 29 3b 0a  >nCursor)+1) );.
d030: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
d040: 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f 70  3<pOp->p2 || pOp
d050: 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20  ->p3>=pOp->p2+n 
d060: 29 3b 0a 20 20 70 43 74 78 20 3d 20 73 71 6c 69  );.  pCtx = sqli
d070: 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e  te3DbMallocRawNN
d080: 28 64 62 2c 20 73 69 7a 65 6f 66 28 2a 70 43 74  (db, sizeof(*pCt
d090: 78 29 20 2b 20 28 6e 2d 31 29 2a 73 69 7a 65 6f  x) + (n-1)*sizeo
d0a0: 66 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  f(sqlite3_value*
d0b0: 29 29 3b 0a 20 20 69 66 28 20 70 43 74 78 3d 3d  ));.  if( pCtx==
d0c0: 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
d0d0: 0a 20 20 70 43 74 78 2d 3e 70 4f 75 74 20 3d 20  .  pCtx->pOut = 
d0e0: 30 3b 0a 20 20 70 43 74 78 2d 3e 70 46 75 6e 63  0;.  pCtx->pFunc
d0f0: 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63   = pOp->p4.pFunc
d100: 3b 0a 20 20 70 43 74 78 2d 3e 69 4f 70 20 3d 20  ;.  pCtx->iOp = 
d110: 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
d120: 3b 0a 20 20 70 43 74 78 2d 3e 70 56 64 62 65 20  ;.  pCtx->pVdbe 
d130: 3d 20 70 3b 0a 20 20 70 43 74 78 2d 3e 61 72 67  = p;.  pCtx->arg
d140: 63 20 3d 20 6e 3b 0a 20 20 70 4f 70 2d 3e 70 34  c = n;.  pOp->p4
d150: 74 79 70 65 20 3d 20 50 34 5f 46 55 4e 43 43 54  type = P4_FUNCCT
d160: 58 3b 0a 20 20 70 4f 70 2d 3e 70 34 2e 70 43 74  X;.  pOp->p4.pCt
d170: 78 20 3d 20 70 43 74 78 3b 0a 20 20 70 4f 70 2d  x = pCtx;.  pOp-
d180: 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 46 75 6e  >opcode = OP_Fun
d190: 63 74 69 6f 6e 3b 0a 20 20 2f 2a 20 46 61 6c 6c  ction;.  /* Fall
d1a0: 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50   through into OP
d1b0: 5f 46 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 0a 63  _Function */.}.c
d1c0: 61 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 3a  ase OP_Function:
d1d0: 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73 71   {.  int i;.  sq
d1e0: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70  lite3_context *p
d1f0: 43 74 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  Ctx;..  assert( 
d200: 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
d210: 46 55 4e 43 43 54 58 20 29 3b 0a 20 20 70 43 74  FUNCCTX );.  pCt
d220: 78 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78  x = pOp->p4.pCtx
d230: 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73 20  ;..  /* If this 
d240: 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e 73 69  function is insi
d250: 64 65 20 6f 66 20 61 20 74 72 69 67 67 65 72 2c  de of a trigger,
d260: 20 74 68 65 20 72 65 67 69 73 74 65 72 20 61 72   the register ar
d270: 72 61 79 20 69 6e 20 61 4d 65 6d 5b 5d 0a 20 20  ray in aMem[].  
d280: 2a 2a 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20  ** might change 
d290: 66 72 6f 6d 20 6f 6e 65 20 65 76 61 6c 75 61 74  from one evaluat
d2a0: 69 6f 6e 20 74 6f 20 74 68 65 20 6e 65 78 74 2e  ion to the next.
d2b0: 20 20 54 68 65 20 6e 65 78 74 20 62 6c 6f 63 6b    The next block
d2c0: 20 6f 66 20 63 6f 64 65 0a 20 20 2a 2a 20 63 68   of code.  ** ch
d2d0: 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20 74  ecks to see if t
d2e0: 68 65 20 72 65 67 69 73 74 65 72 20 61 72 72 61  he register arra
d2f0: 79 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20 61  y has changed, a
d300: 6e 64 20 69 66 20 73 6f 20 69 74 0a 20 20 2a 2a  nd if so it.  **
d310: 20 72 65 69 6e 69 74 69 61 6c 69 7a 65 73 20 74   reinitializes t
d320: 68 65 20 72 65 6c 61 76 61 6e 74 20 70 61 72 74  he relavant part
d330: 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  s of the sqlite3
d340: 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63 74 20  _context object 
d350: 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  */.  pOut = &aMe
d360: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66  m[pOp->p3];.  if
d370: 28 20 70 43 74 78 2d 3e 70 4f 75 74 20 21 3d 20  ( pCtx->pOut != 
d380: 70 4f 75 74 20 29 7b 0a 20 20 20 20 70 43 74 78  pOut ){.    pCtx
d390: 2d 3e 70 4f 75 74 20 3d 20 70 4f 75 74 3b 0a 20  ->pOut = pOut;. 
d3a0: 20 20 20 66 6f 72 28 69 3d 70 43 74 78 2d 3e 61     for(i=pCtx->a
d3b0: 72 67 63 2d 31 3b 20 69 3e 3d 30 3b 20 69 2d 2d  rgc-1; i>=0; i--
d3c0: 29 20 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 20  ) pCtx->argv[i] 
d3d0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 2b  = &aMem[pOp->p2+
d3e0: 69 5d 3b 0a 20 20 7d 0a 0a 20 20 6d 65 6d 41 62  i];.  }..  memAb
d3f0: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
d400: 43 74 78 2d 3e 70 4f 75 74 29 3b 0a 23 69 66 64  Ctx->pOut);.#ifd
d410: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
d420: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 43 74    for(i=0; i<pCt
d430: 78 2d 3e 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20  x->argc; i++){. 
d440: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
d450: 56 61 6c 69 64 28 70 43 74 78 2d 3e 61 72 67 76  Valid(pCtx->argv
d460: 5b 69 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49  [i]) );.    REGI
d470: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
d480: 70 32 2b 69 2c 20 70 43 74 78 2d 3e 61 72 67 76  p2+i, pCtx->argv
d490: 5b 69 5d 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  [i]);.  }.#endif
d4a0: 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
d4b0: 67 28 70 43 74 78 2d 3e 70 4f 75 74 2c 20 4d 45  g(pCtx->pOut, ME
d4c0: 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 70 43 74 78 2d  M_Null);.  pCtx-
d4d0: 3e 66 45 72 72 6f 72 4f 72 41 75 78 20 3d 20 30  >fErrorOrAux = 0
d4e0: 3b 0a 20 20 28 2a 70 43 74 78 2d 3e 70 46 75 6e  ;.  (*pCtx->pFun
d4f0: 63 2d 3e 78 53 46 75 6e 63 29 28 70 43 74 78 2c  c->xSFunc)(pCtx,
d500: 20 70 43 74 78 2d 3e 61 72 67 63 2c 20 70 43 74   pCtx->argc, pCt
d510: 78 2d 3e 61 72 67 76 29 3b 2f 2a 20 49 4d 50 3a  x->argv);/* IMP:
d520: 20 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a   R-24505-23230 *
d530: 2f 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 66  /..  /* If the f
d540: 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 65 64  unction returned
d550: 20 61 6e 20 65 72 72 6f 72 2c 20 74 68 72 6f 77   an error, throw
d560: 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f   an exception */
d570: 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 66 45 72  .  if( pCtx->fEr
d580: 72 6f 72 4f 72 41 75 78 20 29 7b 0a 20 20 20 20  rorOrAux ){.    
d590: 69 66 28 20 70 43 74 78 2d 3e 69 73 45 72 72 6f  if( pCtx->isErro
d5a0: 72 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  r ){.      sqlit
d5b0: 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22  e3VdbeError(p, "
d5c0: 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  %s", sqlite3_val
d5d0: 75 65 5f 74 65 78 74 28 70 43 74 78 2d 3e 70 4f  ue_text(pCtx->pO
d5e0: 75 74 29 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  ut));.      rc =
d5f0: 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 3b 0a   pCtx->isError;.
d600: 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
d610: 33 56 64 62 65 44 65 6c 65 74 65 41 75 78 44 61  3VdbeDeleteAuxDa
d620: 74 61 28 64 62 2c 20 26 70 2d 3e 70 41 75 78 44  ta(db, &p->pAuxD
d630: 61 74 61 2c 20 70 43 74 78 2d 3e 69 4f 70 2c 20  ata, pCtx->iOp, 
d640: 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 69 66  pOp->p1);.    if
d650: 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
d660: 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
d670: 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70 79 20 74    }..  /* Copy t
d680: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
d690: 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74 6f 20 72   function into r
d6a0: 65 67 69 73 74 65 72 20 50 33 20 2a 2f 0a 20 20  egister P3 */.  
d6b0: 69 66 28 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  if( pOut->flags 
d6c0: 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
d6d0: 6c 6f 62 29 20 29 7b 0a 20 20 20 20 73 71 6c 69  lob) ){.    sqli
d6e0: 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
d6f0: 6f 64 69 6e 67 28 70 43 74 78 2d 3e 70 4f 75 74  oding(pCtx->pOut
d700: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
d710: 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
d720: 4d 65 6d 54 6f 6f 42 69 67 28 70 43 74 78 2d 3e  MemTooBig(pCtx->
d730: 70 4f 75 74 29 20 29 20 67 6f 74 6f 20 74 6f 6f  pOut) ) goto too
d740: 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 52 45 47  _big;.  }..  REG
d750: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
d760: 3e 70 33 2c 20 70 43 74 78 2d 3e 70 4f 75 74 29  >p3, pCtx->pOut)
d770: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
d780: 4c 4f 42 53 49 5a 45 28 70 43 74 78 2d 3e 70 4f  LOBSIZE(pCtx->pO
d790: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
d7a0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 41  ./* Opcode: BitA
d7b0: 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  nd P1 P2 P3 * *.
d7c0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
d7d0: 33 5d 3d 72 5b 50 31 5d 26 72 5b 50 32 5d 0a 2a  3]=r[P1]&r[P2].*
d7e0: 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69  *.** Take the bi
d7f0: 74 2d 77 69 73 65 20 41 4e 44 20 6f 66 20 74 68  t-wise AND of th
d800: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
d810: 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61  ster P1 and P2 a
d820: 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20  nd.** store the 
d830: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
d840: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
d850: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
d860: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
d870: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
d880: 6f 64 65 3a 20 42 69 74 4f 72 20 50 31 20 50 32  ode: BitOr P1 P2
d890: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
d8a0: 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 31 5d  sis: r[P3]=r[P1]
d8b0: 7c 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b  |r[P2].**.** Tak
d8c0: 65 20 74 68 65 20 62 69 74 2d 77 69 73 65 20 4f  e the bit-wise O
d8d0: 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  R of the values 
d8e0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
d8f0: 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f  nd P2 and.** sto
d900: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
d910: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
d920: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
d930: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
d940: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
d950: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66  ./* Opcode: Shif
d960: 74 4c 65 66 74 20 50 31 20 50 32 20 50 33 20 2a  tLeft P1 P2 P3 *
d970: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
d980: 72 5b 50 33 5d 3d 72 5b 50 32 5d 3c 3c 72 5b 50  r[P3]=r[P2]<<r[P
d990: 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74  1].**.** Shift t
d9a0: 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  he integer value
d9b0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20   in register P2 
d9c0: 74 6f 20 74 68 65 20 6c 65 66 74 20 62 79 20 74  to the left by t
d9d0: 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20  he.** number of 
d9e0: 62 69 74 73 20 73 70 65 63 69 66 69 65 64 20 62  bits specified b
d9f0: 79 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e  y the integer in
da00: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
da10: 20 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   Store the resul
da20: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
da30: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
da40: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
da50: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
da60: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
da70: 53 68 69 66 74 52 69 67 68 74 20 50 31 20 50 32  ShiftRight P1 P2
da80: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
da90: 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d  sis: r[P3]=r[P2]
daa0: 3e 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68  >>r[P1].**.** Sh
dab0: 69 66 74 20 74 68 65 20 69 6e 74 65 67 65 72 20  ift the integer 
dac0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
dad0: 72 20 50 32 20 74 6f 20 74 68 65 20 72 69 67 68  r P2 to the righ
dae0: 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62  t by the.** numb
daf0: 65 72 20 6f 66 20 62 69 74 73 20 73 70 65 63 69  er of bits speci
db00: 66 69 65 64 20 62 79 20 74 68 65 20 69 6e 74 65  fied by the inte
db10: 67 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20  ger in register 
db20: 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65  P1..** Store the
db30: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
db40: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
db50: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
db60: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
db70: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
db80: 4f 50 5f 42 69 74 41 6e 64 3a 20 20 20 20 20 20  OP_BitAnd:      
db90: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
dba0: 6d 65 20 61 73 20 54 4b 5f 42 49 54 41 4e 44 2c  me as TK_BITAND,
dbb0: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
dbc0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4f 72  */.case OP_BitOr
dbd0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
dbe0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
dbf0: 5f 42 49 54 4f 52 2c 20 69 6e 31 2c 20 69 6e 32  _BITOR, in1, in2
dc00: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
dc10: 50 5f 53 68 69 66 74 4c 65 66 74 3a 20 20 20 20  P_ShiftLeft:    
dc20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
dc30: 65 20 61 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20  e as TK_LSHIFT, 
dc40: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
dc50: 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74 52  /.case OP_ShiftR
dc60: 69 67 68 74 3a 20 7b 20 20 20 20 20 20 20 20 20  ight: {         
dc70: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
dc80: 52 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32  RSHIFT, in1, in2
dc90: 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20  , out3 */.  i64 
dca0: 69 41 3b 0a 20 20 75 36 34 20 75 41 3b 0a 20 20  iA;.  u64 uA;.  
dcb0: 69 36 34 20 69 42 3b 0a 20 20 75 38 20 6f 70 3b  i64 iB;.  u8 op;
dcc0: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
dcd0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e  [pOp->p1];.  pIn
dce0: 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
dcf0: 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  2];.  pOut = &aM
dd00: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
dd10: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
dd20: 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26  | pIn2->flags) &
dd30: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
dd40: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
dd50: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
dd60: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69    break;.  }.  i
dd70: 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  A = sqlite3VdbeI
dd80: 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20  ntValue(pIn2);. 
dd90: 20 69 42 20 3d 20 73 71 6c 69 74 65 33 56 64 62   iB = sqlite3Vdb
dda0: 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b  eIntValue(pIn1);
ddb0: 0a 20 20 6f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63  .  op = pOp->opc
ddc0: 6f 64 65 3b 0a 20 20 69 66 28 20 6f 70 3d 3d 4f  ode;.  if( op==O
ddd0: 50 5f 42 69 74 41 6e 64 20 29 7b 0a 20 20 20 20  P_BitAnd ){.    
dde0: 69 41 20 26 3d 20 69 42 3b 0a 20 20 7d 65 6c 73  iA &= iB;.  }els
ddf0: 65 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74  e if( op==OP_Bit
de00: 4f 72 20 29 7b 0a 20 20 20 20 69 41 20 7c 3d 20  Or ){.    iA |= 
de10: 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  iB;.  }else if( 
de20: 69 42 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73  iB!=0 ){.    ass
de30: 65 72 74 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66  ert( op==OP_Shif
de40: 74 52 69 67 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50  tRight || op==OP
de50: 5f 53 68 69 66 74 4c 65 66 74 20 29 3b 0a 0a 20  _ShiftLeft );.. 
de60: 20 20 20 2f 2a 20 49 66 20 73 68 69 66 74 69 6e     /* If shiftin
de70: 67 20 62 79 20 61 20 6e 65 67 61 74 69 76 65 20  g by a negative 
de80: 61 6d 6f 75 6e 74 2c 20 73 68 69 66 74 20 69 6e  amount, shift in
de90: 20 74 68 65 20 6f 74 68 65 72 20 64 69 72 65 63   the other direc
dea0: 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 66 28 20  tion */.    if( 
deb0: 69 42 3c 30 20 29 7b 0a 20 20 20 20 20 20 61 73  iB<0 ){.      as
dec0: 73 65 72 74 28 20 4f 50 5f 53 68 69 66 74 52 69  sert( OP_ShiftRi
ded0: 67 68 74 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66  ght==OP_ShiftLef
dee0: 74 2b 31 20 29 3b 0a 20 20 20 20 20 20 6f 70 20  t+1 );.      op 
def0: 3d 20 32 2a 4f 50 5f 53 68 69 66 74 4c 65 66 74  = 2*OP_ShiftLeft
df00: 20 2b 20 31 20 2d 20 6f 70 3b 0a 20 20 20 20 20   + 1 - op;.     
df10: 20 69 42 20 3d 20 69 42 3e 28 2d 36 34 29 20 3f   iB = iB>(-64) ?
df20: 20 2d 69 42 20 3a 20 36 34 3b 0a 20 20 20 20 7d   -iB : 64;.    }
df30: 0a 0a 20 20 20 20 69 66 28 20 69 42 3e 3d 36 34  ..    if( iB>=64
df40: 20 29 7b 0a 20 20 20 20 20 20 69 41 20 3d 20 28   ){.      iA = (
df50: 69 41 3e 3d 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f  iA>=0 || op==OP_
df60: 53 68 69 66 74 4c 65 66 74 29 20 3f 20 30 20 3a  ShiftLeft) ? 0 :
df70: 20 2d 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a   -1;.    }else{.
df80: 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26 75 41        memcpy(&uA
df90: 2c 20 26 69 41 2c 20 73 69 7a 65 6f 66 28 75 41  , &iA, sizeof(uA
dfa0: 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6f 70  ));.      if( op
dfb0: 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 29  ==OP_ShiftLeft )
dfc0: 7b 0a 20 20 20 20 20 20 20 20 75 41 20 3c 3c 3d  {.        uA <<=
dfd0: 20 69 42 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65   iB;.      }else
dfe0: 7b 0a 20 20 20 20 20 20 20 20 75 41 20 3e 3e 3d  {.        uA >>=
dff0: 20 69 42 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20   iB;.        /* 
e000: 53 69 67 6e 2d 65 78 74 65 6e 64 20 6f 6e 20 61  Sign-extend on a
e010: 20 72 69 67 68 74 20 73 68 69 66 74 20 6f 66 20   right shift of 
e020: 61 20 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65  a negative numbe
e030: 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28  r */.        if(
e040: 20 69 41 3c 30 20 29 20 75 41 20 7c 3d 20 28 28   iA<0 ) uA |= ((
e050: 28 28 75 36 34 29 30 78 66 66 66 66 66 66 66 66  ((u64)0xffffffff
e060: 29 3c 3c 33 32 29 7c 30 78 66 66 66 66 66 66 66  )<<32)|0xfffffff
e070: 66 29 20 3c 3c 20 28 36 34 2d 69 42 29 3b 0a 20  f) << (64-iB);. 
e080: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d       }.      mem
e090: 63 70 79 28 26 69 41 2c 20 26 75 41 2c 20 73 69  cpy(&iA, &uA, si
e0a0: 7a 65 6f 66 28 69 41 29 29 3b 0a 20 20 20 20 7d  zeof(iA));.    }
e0b0: 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  .  }.  pOut->u.i
e0c0: 20 3d 20 69 41 3b 0a 20 20 4d 65 6d 53 65 74 54   = iA;.  MemSetT
e0d0: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
e0e0: 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b  M_Int);.  break;
e0f0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
e100: 64 64 49 6d 6d 20 20 50 31 20 50 32 20 2a 20 2a  ddImm  P1 P2 * *
e110: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
e120: 72 5b 50 31 5d 3d 72 5b 50 31 5d 2b 50 32 0a 2a  r[P1]=r[P1]+P2.*
e130: 2a 20 0a 2a 2a 20 41 64 64 20 74 68 65 20 63 6f  * .** Add the co
e140: 6e 73 74 61 6e 74 20 50 32 20 74 6f 20 74 68 65  nstant P2 to the
e150: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
e160: 65 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65  er P1..** The re
e170: 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 61  sult is always a
e180: 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a  n integer..**.**
e190: 20 54 6f 20 66 6f 72 63 65 20 61 6e 79 20 72 65   To force any re
e1a0: 67 69 73 74 65 72 20 74 6f 20 62 65 20 61 6e 20  gister to be an 
e1b0: 69 6e 74 65 67 65 72 2c 20 6a 75 73 74 20 61 64  integer, just ad
e1c0: 64 20 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  d 0..*/.case OP_
e1d0: 41 64 64 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20  AddImm: {       
e1e0: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
e1f0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
e200: 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p1];.  memAbo
e210: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49  utToChange(p, pI
e220: 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n1);.  sqlite3Vd
e230: 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
e240: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75  pIn1);.  pIn1->u
e250: 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  .i += pOp->p2;. 
e260: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
e270: 63 6f 64 65 3a 20 4d 75 73 74 42 65 49 6e 74 20  code: MustBeInt 
e280: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a  P1 P2 * * *.** .
e290: 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c  ** Force the val
e2a0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
e2b0: 31 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67  1 to be an integ
e2c0: 65 72 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  er.  If the valu
e2d0: 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f  e.** in P1 is no
e2e0: 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64  t an integer and
e2f0: 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65   cannot be conve
e300: 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74  rted into an int
e310: 65 67 65 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20  eger.** without 
e320: 64 61 74 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20  data loss, then 
e330: 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
e340: 20 74 6f 20 50 32 2c 20 6f 72 20 69 66 20 50 32   to P2, or if P2
e350: 3d 3d 30 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20  ==0.** raise an 
e360: 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 20  SQLITE_MISMATCH 
e370: 65 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  exception..*/.ca
e380: 73 65 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a  se OP_MustBeInt:
e390: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
e3a0: 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
e3b0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
e3c0: 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p1];.  if( (pI
e3d0: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
e3e0: 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61  Int)==0 ){.    a
e3f0: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e  pplyAffinity(pIn
e400: 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  1, SQLITE_AFF_NU
e410: 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29  MERIC, encoding)
e420: 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  ;.    VdbeBranch
e430: 54 61 6b 65 6e 28 28 70 49 6e 31 2d 3e 66 6c 61  Taken((pIn1->fla
e440: 67 73 26 4d 45 4d 5f 49 6e 74 29 3d 3d 30 2c 20  gs&MEM_Int)==0, 
e450: 32 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e  2);.    if( (pIn
e460: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
e470: 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  nt)==0 ){.      
e480: 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29  if( pOp->p2==0 )
e490: 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
e4a0: 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a  QLITE_MISMATCH;.
e4b0: 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
e4c0: 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
e4d0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
e4e0: 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f        goto jump_
e4f0: 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 7d 0a 20  to_p2;.      }. 
e500: 20 20 20 7d 0a 20 20 7d 0a 20 20 4d 65 6d 53 65     }.  }.  MemSe
e510: 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31 2c 20  tTypeFlag(pIn1, 
e520: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61  MEM_Int);.  brea
e530: 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
e540: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
e550: 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f  NG_POINT./* Opco
e560: 64 65 3a 20 52 65 61 6c 41 66 66 69 6e 69 74 79  de: RealAffinity
e570: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
e580: 2a 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31  * If register P1
e590: 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65   holds an intege
e5a0: 72 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  r convert it to 
e5b0: 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a  a real value..**
e5c0: 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
e5d0: 69 73 20 75 73 65 64 20 77 68 65 6e 20 65 78 74  is used when ext
e5e0: 72 61 63 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74  racting informat
e5f0: 69 6f 6e 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d  ion from a colum
e600: 6e 20 74 68 61 74 0a 2a 2a 20 68 61 73 20 52 45  n that.** has RE
e610: 41 4c 20 61 66 66 69 6e 69 74 79 2e 20 20 53 75  AL affinity.  Su
e620: 63 68 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73  ch column values
e630: 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 73 74   may still be st
e640: 6f 72 65 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67  ored as.** integ
e650: 65 72 73 2c 20 66 6f 72 20 73 70 61 63 65 20 65  ers, for space e
e660: 66 66 69 63 69 65 6e 63 79 2c 20 62 75 74 20 61  fficiency, but a
e670: 66 74 65 72 20 65 78 74 72 61 63 74 69 6f 6e 20  fter extraction 
e680: 77 65 20 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20  we want them.** 
e690: 74 6f 20 68 61 76 65 20 6f 6e 6c 79 20 61 20 72  to have only a r
e6a0: 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61  eal value..*/.ca
e6b0: 73 65 20 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69  se OP_RealAffini
e6c0: 74 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ty: {           
e6d0: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
e6e0: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
e6f0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
e700: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
e710: 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c  M_Int ){.    sql
e720: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c 69  ite3VdbeMemReali
e730: 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20  fy(pIn1);.  }.  
e740: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
e750: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
e760: 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63  OMIT_CAST./* Opc
e770: 6f 64 65 3a 20 43 61 73 74 20 50 31 20 50 32 20  ode: Cast P1 P2 
e780: 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
e790: 73 3a 20 61 66 66 69 6e 69 74 79 28 72 5b 50 31  s: affinity(r[P1
e7a0: 5d 29 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74  ]).**.** Force t
e7b0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
e7c0: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 74 68  ster P1 to be th
e7d0: 65 20 74 79 70 65 20 64 65 66 69 6e 65 64 20 62  e type defined b
e7e0: 79 20 50 32 2e 0a 2a 2a 20 0a 2a 2a 20 3c 75 6c  y P2..** .** <ul
e7f0: 3e 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22  >.** <li value="
e800: 39 37 22 3e 20 54 45 58 54 0a 2a 2a 20 3c 6c 69  97"> TEXT.** <li
e810: 20 76 61 6c 75 65 3d 22 39 38 22 3e 20 42 4c 4f   value="98"> BLO
e820: 42 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22  B.** <li value="
e830: 39 39 22 3e 20 4e 55 4d 45 52 49 43 0a 2a 2a 20  99"> NUMERIC.** 
e840: 3c 6c 69 20 76 61 6c 75 65 3d 22 31 30 30 22 3e  <li value="100">
e850: 20 49 4e 54 45 47 45 52 0a 2a 2a 20 3c 6c 69 20   INTEGER.** <li 
e860: 76 61 6c 75 65 3d 22 31 30 31 22 3e 20 52 45 41  value="101"> REA
e870: 4c 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a  L.** </ul>.**.**
e880: 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73   A NULL value is
e890: 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20   not changed by 
e8a0: 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49  this routine.  I
e8b0: 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a  t remains NULL..
e8c0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 61 73 74 3a  */.case OP_Cast:
e8d0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
e8e0: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
e8f0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
e900: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42  =SQLITE_AFF_BLOB
e910: 20 26 26 20 70 4f 70 2d 3e 70 32 3c 3d 53 51 4c   && pOp->p2<=SQL
e920: 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 29 3b 0a  ITE_AFF_REAL );.
e930: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
e940: 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  >p2==SQLITE_AFF_
e950: 54 45 58 54 20 29 3b 0a 20 20 74 65 73 74 63 61  TEXT );.  testca
e960: 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c  se( pOp->p2==SQL
e970: 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20 29 3b 0a  ITE_AFF_BLOB );.
e980: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
e990: 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  >p2==SQLITE_AFF_
e9a0: 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20 74 65 73  NUMERIC );.  tes
e9b0: 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d  tcase( pOp->p2==
e9c0: 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47  SQLITE_AFF_INTEG
e9d0: 45 52 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  ER );.  testcase
e9e0: 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  ( pOp->p2==SQLIT
e9f0: 45 5f 41 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20  E_AFF_REAL );.  
ea00: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
ea10: 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p1];.  memAbou
ea20: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e  tToChange(p, pIn
ea30: 31 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e  1);.  rc = Expan
ea40: 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 73  dBlob(pIn1);.  s
ea50: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 61 73  qlite3VdbeMemCas
ea60: 74 28 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 32 2c  t(pIn1, pOp->p2,
ea70: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50   encoding);.  UP
ea80: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
ea90: 45 28 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 72  E(pIn1);.  if( r
eaa0: 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
eab0: 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62  ue_to_error;.  b
eac0: 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
ead0: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41  * SQLITE_OMIT_CA
eae0: 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ST */../* Opcode
eaf0: 3a 20 45 71 20 50 31 20 50 32 20 50 33 20 50 34  : Eq P1 P2 P3 P4
eb00: 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
eb10: 20 49 46 20 72 5b 50 33 5d 3d 3d 72 5b 50 31 5d   IF r[P3]==r[P1]
eb20: 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74  .**.** Compare t
eb30: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
eb40: 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 33 2e  ister P1 and P3.
eb50: 20 20 49 66 20 72 65 67 28 50 33 29 3d 3d 72 65    If reg(P3)==re
eb60: 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20 6a 75  g(P1) then.** ju
eb70: 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32  mp to address P2
eb80: 2e 20 20 4f 72 20 69 66 20 74 68 65 20 53 51 4c  .  Or if the SQL
eb90: 49 54 45 5f 53 54 4f 52 45 50 32 20 66 6c 61 67  ITE_STOREP2 flag
eba0: 20 69 73 20 73 65 74 20 69 6e 20 50 35 2c 20 74   is set in P5, t
ebb0: 68 65 6e 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65  hen.** store the
ebc0: 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61   result of compa
ebd0: 72 69 73 6f 6e 20 69 6e 20 72 65 67 69 73 74 65  rison in registe
ebe0: 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  r P2..**.** The 
ebf0: 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
ec00: 70 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75  portion of P5 mu
ec10: 73 74 20 62 65 20 61 6e 20 61 66 66 69 6e 69 74  st be an affinit
ec20: 79 20 63 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a  y character -.**
ec30: 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54   SQLITE_AFF_TEXT
ec40: 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  , SQLITE_AFF_INT
ec50: 45 47 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72  EGER, and so for
ec60: 74 68 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 69  th. An attempt i
ec70: 73 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f  s made .** to co
ec80: 65 72 63 65 20 62 6f 74 68 20 69 6e 70 75 74 73  erce both inputs
ec90: 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68   according to th
eca0: 69 73 20 61 66 66 69 6e 69 74 79 20 62 65 66 6f  is affinity befo
ecb0: 72 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72  re the.** compar
ecc0: 69 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49 66  ison is made. If
ecd0: 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   the SQLITE_AFF_
ece0: 4d 41 53 4b 20 69 73 20 30 78 30 30 2c 20 74 68  MASK is 0x00, th
ecf0: 65 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66  en numeric.** af
ed00: 66 69 6e 69 74 79 20 69 73 20 75 73 65 64 2e 20  finity is used. 
ed10: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 61 66  Note that the af
ed20: 66 69 6e 69 74 79 20 63 6f 6e 76 65 72 73 69 6f  finity conversio
ed30: 6e 73 20 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a  ns are stored.**
ed40: 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 69   back into the i
ed50: 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20 50  nput registers P
ed60: 31 20 61 6e 64 20 50 33 2e 20 20 53 6f 20 74 68  1 and P3.  So th
ed70: 69 73 20 6f 70 63 6f 64 65 20 63 61 6e 20 63 61  is opcode can ca
ed80: 75 73 65 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e  use.** persisten
ed90: 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72 65 67  t changes to reg
eda0: 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33  isters P1 and P3
edb0: 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79  ..**.** Once any
edc0: 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61 76   conversions hav
edd0: 65 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61  e taken place, a
ede0: 6e 64 20 6e 65 69 74 68 65 72 20 76 61 6c 75 65  nd neither value
edf0: 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68   is NULL, .** th
ee00: 65 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d  e values are com
ee10: 70 61 72 65 64 2e 20 49 66 20 62 6f 74 68 20 76  pared. If both v
ee20: 61 6c 75 65 73 20 61 72 65 20 62 6c 6f 62 73 20  alues are blobs 
ee30: 74 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73  then memcmp() is
ee40: 0a 2a 2a 20 75 73 65 64 20 74 6f 20 64 65 74 65  .** used to dete
ee50: 72 6d 69 6e 65 20 74 68 65 20 72 65 73 75 6c 74  rmine the result
ee60: 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69  s of the compari
ee70: 73 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20 76 61  son.  If both va
ee80: 6c 75 65 73 0a 2a 2a 20 61 72 65 20 74 65 78 74  lues.** are text
ee90: 2c 20 74 68 65 6e 20 74 68 65 20 61 70 70 72 6f  , then the appro
eea0: 70 72 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67  priate collating
eeb0: 20 66 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 66   function specif
eec0: 69 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20  ied in.** P4 is 
eed0: 75 73 65 64 20 74 6f 20 64 6f 20 74 68 65 20 63  used to do the c
eee0: 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 50  omparison.  If P
eef0: 34 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69  4 is not specifi
ef00: 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d  ed then.** memcm
ef10: 70 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 63  p() is used to c
ef20: 6f 6d 70 61 72 65 20 74 65 78 74 20 73 74 72 69  ompare text stri
ef30: 6e 67 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c  ng.  If both val
ef40: 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72  ues are.** numer
ef50: 69 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65 72  ic, then a numer
ef60: 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  ic comparison is
ef70: 20 75 73 65 64 2e 20 49 66 20 74 68 65 20 74 77   used. If the tw
ef80: 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20  o values.** are 
ef90: 6f 66 20 64 69 66 66 65 72 65 6e 74 20 74 79 70  of different typ
efa0: 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72 73  es, then numbers
efb0: 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
efc0: 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72  less than.** str
efd0: 69 6e 67 73 20 61 6e 64 20 73 74 72 69 6e 67 73  ings and strings
efe0: 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
eff0: 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e  less than blobs.
f000: 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  .**.** If SQLITE
f010: 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69  _NULLEQ is set i
f020: 6e 20 50 35 20 74 68 65 6e 20 74 68 65 20 72 65  n P5 then the re
f030: 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73  sult of comparis
f040: 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 65 69 74  on is always eit
f050: 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66  her.** true or f
f060: 61 6c 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65  alse and is neve
f070: 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68  r NULL.  If both
f080: 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55   operands are NU
f090: 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  LL then the resu
f0a0: 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69  lt.** of compari
f0b0: 73 6f 6e 20 69 73 20 74 72 75 65 2e 20 20 49 66  son is true.  If
f0c0: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
f0d0: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65  is NULL then the
f0e0: 20 72 65 73 75 6c 74 20 69 73 20 66 61 6c 73 65   result is false
f0f0: 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20  ..** If neither 
f100: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
f110: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 68  the result is th
f120: 65 20 73 61 6d 65 20 61 73 20 69 74 20 77 6f 75  e same as it wou
f130: 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74 68 65 20  ld be if.** the 
f140: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c  SQLITE_NULLEQ fl
f150: 61 67 20 77 65 72 65 20 6f 6d 69 74 74 65 64 20  ag were omitted 
f160: 66 72 6f 6d 20 50 35 2e 0a 2a 2a 0a 2a 2a 20 49  from P5..**.** I
f170: 66 20 62 6f 74 68 20 53 51 4c 49 54 45 5f 53 54  f both SQLITE_ST
f180: 4f 52 45 50 32 20 61 6e 64 20 53 51 4c 49 54 45  OREP2 and SQLITE
f190: 5f 4b 45 45 50 4e 55 4c 4c 20 66 6c 61 67 73 20  _KEEPNULL flags 
f1a0: 61 72 65 20 73 65 74 20 74 68 65 6e 20 74 68 65  are set then the
f1b0: 0a 2a 2a 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  .** content of r
f1c0: 5b 50 32 5d 20 69 73 20 6f 6e 6c 79 20 63 68 61  [P2] is only cha
f1d0: 6e 67 65 64 20 69 66 20 74 68 65 20 6e 65 77 20  nged if the new 
f1e0: 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 20 6f 72  value is NULL or
f1f0: 20 30 20 28 66 61 6c 73 65 29 2e 0a 2a 2a 20 49   0 (false)..** I
f200: 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 61  n other words, a
f210: 20 70 72 69 6f 72 20 72 5b 50 32 5d 20 76 61 6c   prior r[P2] val
f220: 75 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 6f  ue will not be o
f230: 76 65 72 77 72 69 74 74 65 6e 20 62 79 20 31 20  verwritten by 1 
f240: 28 74 72 75 65 29 2e 0a 2a 2f 0a 2f 2a 20 4f 70  (true)..*/./* Op
f250: 63 6f 64 65 3a 20 4e 65 20 50 31 20 50 32 20 50  code: Ne P1 P2 P
f260: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
f270: 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 21 3d 72  sis: IF r[P3]!=r
f280: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  [P1].**.** This 
f290: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
f2a0: 74 68 65 20 45 71 20 6f 70 63 6f 64 65 20 65 78  the Eq opcode ex
f2b0: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
f2c0: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
f2d0: 2a 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 69  * the operands i
f2e0: 6e 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  n registers P1 a
f2f0: 6e 64 20 50 33 20 61 72 65 20 6e 6f 74 20 65 71  nd P3 are not eq
f300: 75 61 6c 2e 20 20 53 65 65 20 74 68 65 20 45 71  ual.  See the Eq
f310: 20 6f 70 63 6f 64 65 20 66 6f 72 0a 2a 2a 20 61   opcode for.** a
f320: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
f330: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ation..**.** If 
f340: 62 6f 74 68 20 53 51 4c 49 54 45 5f 53 54 4f 52  both SQLITE_STOR
f350: 45 50 32 20 61 6e 64 20 53 51 4c 49 54 45 5f 4b  EP2 and SQLITE_K
f360: 45 45 50 4e 55 4c 4c 20 66 6c 61 67 73 20 61 72  EEPNULL flags ar
f370: 65 20 73 65 74 20 74 68 65 6e 20 74 68 65 0a 2a  e set then the.*
f380: 2a 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 5b 50  * content of r[P
f390: 32 5d 20 69 73 20 6f 6e 6c 79 20 63 68 61 6e 67  2] is only chang
f3a0: 65 64 20 69 66 20 74 68 65 20 6e 65 77 20 76 61  ed if the new va
f3b0: 6c 75 65 20 69 73 20 4e 55 4c 4c 20 6f 72 20 31  lue is NULL or 1
f3c0: 20 28 74 72 75 65 29 2e 0a 2a 2a 20 49 6e 20 6f   (true)..** In o
f3d0: 74 68 65 72 20 77 6f 72 64 73 2c 20 61 20 70 72  ther words, a pr
f3e0: 69 6f 72 20 72 5b 50 32 5d 20 76 61 6c 75 65 20  ior r[P2] value 
f3f0: 77 69 6c 6c 20 6e 6f 74 20 62 65 20 6f 76 65 72  will not be over
f400: 77 72 69 74 74 65 6e 20 62 79 20 30 20 28 66 61  written by 0 (fa
f410: 6c 73 65 29 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  lse)..*/./* Opco
f420: 64 65 3a 20 4c 74 20 50 31 20 50 32 20 50 33 20  de: Lt P1 P2 P3 
f430: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
f440: 73 3a 20 49 46 20 72 5b 50 33 5d 3c 72 5b 50 31  s: IF r[P3]<r[P1
f450: 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20  ].**.** Compare 
f460: 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
f470: 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 33  gister P1 and P3
f480: 2e 20 20 49 66 20 72 65 67 28 50 33 29 3c 72 65  .  If reg(P3)<re
f490: 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20 6a 75  g(P1) then.** ju
f4a0: 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32  mp to address P2
f4b0: 2e 20 20 4f 72 20 69 66 20 74 68 65 20 53 51 4c  .  Or if the SQL
f4c0: 49 54 45 5f 53 54 4f 52 45 50 32 20 66 6c 61 67  ITE_STOREP2 flag
f4d0: 20 69 73 20 73 65 74 20 69 6e 20 50 35 20 73 74   is set in P5 st
f4e0: 6f 72 65 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c  ore.** the resul
f4f0: 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20  t of comparison 
f500: 28 30 20 6f 72 20 31 20 6f 72 20 4e 55 4c 4c 29  (0 or 1 or NULL)
f510: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
f520: 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  2..**.** If the 
f530: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
f540: 4c 20 62 69 74 20 6f 66 20 50 35 20 69 73 20 73  L bit of P5 is s
f550: 65 74 20 61 6e 64 20 65 69 74 68 65 72 20 72 65  et and either re
f560: 67 28 50 31 29 20 6f 72 0a 2a 2a 20 72 65 67 28  g(P1) or.** reg(
f570: 50 33 29 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e  P3) is NULL then
f580: 20 74 68 65 20 74 61 6b 65 20 74 68 65 20 6a 75   the take the ju
f590: 6d 70 2e 20 20 49 66 20 74 68 65 20 53 51 4c 49  mp.  If the SQLI
f5a0: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 0a 2a  TE_JUMPIFNULL .*
f5b0: 2a 20 62 69 74 20 69 73 20 63 6c 65 61 72 20 74  * bit is clear t
f5c0: 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  hen fall through
f5d0: 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   if either opera
f5e0: 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  nd is NULL..**.*
f5f0: 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46  * The SQLITE_AFF
f600: 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66  _MASK portion of
f610: 20 50 35 20 6d 75 73 74 20 62 65 20 61 6e 20 61   P5 must be an a
f620: 66 66 69 6e 69 74 79 20 63 68 61 72 61 63 74 65  ffinity characte
f630: 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46  r -.** SQLITE_AF
f640: 46 5f 54 45 58 54 2c 20 53 51 4c 49 54 45 5f 41  F_TEXT, SQLITE_A
f650: 46 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64 20  FF_INTEGER, and 
f660: 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61 74 74  so forth. An att
f670: 65 6d 70 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a  empt is made .**
f680: 20 74 6f 20 63 6f 65 72 63 65 20 62 6f 74 68 20   to coerce both 
f690: 69 6e 70 75 74 73 20 61 63 63 6f 72 64 69 6e 67  inputs according
f6a0: 20 74 6f 20 74 68 69 73 20 61 66 66 69 6e 69 74   to this affinit
f6b0: 79 20 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20  y before the.** 
f6c0: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d 61  comparison is ma
f6d0: 64 65 2e 20 49 66 20 74 68 65 20 53 51 4c 49 54  de. If the SQLIT
f6e0: 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20 30 78  E_AFF_MASK is 0x
f6f0: 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69 63  00, then numeric
f700: 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 69 73 20  .** affinity is 
f710: 75 73 65 64 2e 20 4e 6f 74 65 20 74 68 61 74 20  used. Note that 
f720: 74 68 65 20 61 66 66 69 6e 69 74 79 20 63 6f 6e  the affinity con
f730: 76 65 72 73 69 6f 6e 73 20 61 72 65 20 73 74 6f  versions are sto
f740: 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f  red.** back into
f750: 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73   the input regis
f760: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 20  ters P1 and P3. 
f770: 20 53 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20   So this opcode 
f780: 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65 72  can cause.** per
f790: 73 69 73 74 65 6e 74 20 63 68 61 6e 67 65 73 20  sistent changes 
f7a0: 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 31 20  to registers P1 
f7b0: 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e  and P3..**.** On
f7c0: 63 65 20 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f  ce any conversio
f7d0: 6e 73 20 68 61 76 65 20 74 61 6b 65 6e 20 70 6c  ns have taken pl
f7e0: 61 63 65 2c 20 61 6e 64 20 6e 65 69 74 68 65 72  ace, and neither
f7f0: 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20   value is NULL, 
f800: 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 61  .** the values a
f810: 72 65 20 63 6f 6d 70 61 72 65 64 2e 20 49 66 20  re compared. If 
f820: 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 20  both values are 
f830: 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d  blobs then memcm
f840: 70 28 29 20 69 73 0a 2a 2a 20 75 73 65 64 20 74  p() is.** used t
f850: 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  o determine the 
f860: 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63  results of the c
f870: 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 62  omparison.  If b
f880: 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72  oth values.** ar
f890: 65 20 74 65 78 74 2c 20 74 68 65 6e 20 74 68 65  e text, then the
f8a0: 20 61 70 70 72 6f 70 72 69 61 74 65 20 63 6f 6c   appropriate col
f8b0: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  lating function 
f8c0: 73 70 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20  specified in.** 
f8d0: 50 34 20 69 73 20 20 75 73 65 64 20 74 6f 20 64  P4 is  used to d
f8e0: 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  o the comparison
f8f0: 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  .  If P4 is not 
f900: 73 70 65 63 69 66 69 65 64 20 74 68 65 6e 0a 2a  specified then.*
f910: 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73 20 75 73  * memcmp() is us
f920: 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65  ed to compare te
f930: 78 74 20 73 74 72 69 6e 67 2e 20 20 49 66 20 62  xt string.  If b
f940: 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 0a 2a  oth values are.*
f950: 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e 20  * numeric, then 
f960: 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61 72  a numeric compar
f970: 69 73 6f 6e 20 69 73 20 75 73 65 64 2e 20 49 66  ison is used. If
f980: 20 74 68 65 20 74 77 6f 20 76 61 6c 75 65 73 0a   the two values.
f990: 2a 2a 20 61 72 65 20 6f 66 20 64 69 66 66 65 72  ** are of differ
f9a0: 65 6e 74 20 74 79 70 65 73 2c 20 74 68 65 6e 20  ent types, then 
f9b0: 6e 75 6d 62 65 72 73 20 61 72 65 20 63 6f 6e 73  numbers are cons
f9c0: 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e  idered less than
f9d0: 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e 64 20  .** strings and 
f9e0: 73 74 72 69 6e 67 73 20 61 72 65 20 63 6f 6e 73  strings are cons
f9f0: 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e  idered less than
fa00: 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70   blobs..*/./* Op
fa10: 63 6f 64 65 3a 20 4c 65 20 50 31 20 50 32 20 50  code: Le P1 P2 P
fa20: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
fa30: 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3c 3d 72  sis: IF r[P3]<=r
fa40: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  [P1].**.** This 
fa50: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
fa60: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
fa70: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
fa80: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
fa90: 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * the content of
faa0: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
fab0: 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75  less than or equ
fac0: 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e  al to the conten
fad0: 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72  t of.** register
fae0: 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74   P1.  See the Lt
faf0: 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69   opcode for addi
fb00: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
fb10: 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  on..*/./* Opcode
fb20: 3a 20 47 74 20 50 31 20 50 32 20 50 33 20 50 34  : Gt P1 P2 P3 P4
fb30: 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
fb40: 20 49 46 20 72 5b 50 33 5d 3e 72 5b 50 31 5d 0a   IF r[P3]>r[P1].
fb50: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
fb60: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c   just like the L
fb70: 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  t opcode except 
fb80: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
fb90: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
fba0: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
fbb0: 73 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74  ster P3 is great
fbc0: 65 72 20 74 68 61 6e 20 74 68 65 20 63 6f 6e 74  er than the cont
fbd0: 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74  ent of.** regist
fbe0: 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20  er P1.  See the 
fbf0: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  Lt opcode for ad
fc00: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
fc10: 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
fc20: 64 65 3a 20 47 65 20 50 31 20 50 32 20 50 33 20  de: Ge P1 P2 P3 
fc30: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
fc40: 73 3a 20 49 46 20 72 5b 50 33 5d 3e 3d 72 5b 50  s: IF r[P3]>=r[P
fc50: 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  1].**.** This wo
fc60: 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68  rks just like th
fc70: 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65  e Lt opcode exce
fc80: 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70  pt that the jump
fc90: 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20   is taken if.** 
fca0: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
fcb0: 65 67 69 73 74 65 72 20 50 33 20 69 73 20 67 72  egister P3 is gr
fcc0: 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
fcd0: 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65  ual to the conte
fce0: 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65  nt of.** registe
fcf0: 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c  r P1.  See the L
fd00: 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  t opcode for add
fd10: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
fd20: 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
fd30: 45 71 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Eq:             
fd40: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
fd50: 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  EQ, jump, in1, i
fd60: 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65  n3 */.case OP_Ne
fd70: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
fd80: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 45  /* same as TK_NE
fd90: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
fda0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74 3a 20   */.case OP_Lt: 
fdb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
fdc0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54 2c 20   same as TK_LT, 
fdd0: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
fde0: 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20  /.case OP_Le:   
fdf0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
fe00: 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20 6a 75  ame as TK_LE, ju
fe10: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
fe20: 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20 20  case OP_Gt:     
fe30: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
fe40: 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75 6d 70  e as TK_GT, jump
fe50: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61  , in1, in3 */.ca
fe60: 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20 20 20  se OP_Ge: {     
fe70: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
fe80: 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20  as TK_GE, jump, 
fe90: 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e  in1, in3 */.  in
fea0: 74 20 72 65 73 2c 20 72 65 73 32 3b 20 20 20 20  t res, res2;    
feb0: 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 74    /* Result of t
fec0: 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66  he comparison of
fed0: 20 70 49 6e 31 20 61 67 61 69 6e 73 74 20 70 49   pIn1 against pI
fee0: 6e 33 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66  n3 */.  char aff
fef0: 69 6e 69 74 79 3b 20 20 20 20 20 20 2f 2a 20 41  inity;      /* A
ff00: 66 66 69 6e 69 74 79 20 74 6f 20 75 73 65 20 66  ffinity to use f
ff10: 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20 2a 2f  or comparison */
ff20: 0a 20 20 75 31 36 20 66 6c 61 67 73 31 3b 20 20  .  u16 flags1;  
ff30: 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f         /* Copy o
ff40: 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20  f initial value 
ff50: 6f 66 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 2a  of pIn1->flags *
ff60: 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 33 3b 20  /.  u16 flags3; 
ff70: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20          /* Copy 
ff80: 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65  of initial value
ff90: 20 6f 66 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20   of pIn3->flags 
ffa0: 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  */..  pIn1 = &aM
ffb0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
ffc0: 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
ffd0: 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 31 20 3d  >p3];.  flags1 =
ffe0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a 20 20   pIn1->flags;.  
fff0: 66 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d 3e 66  flags3 = pIn3->f
10000 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66 6c 61  lags;.  if( (fla
10010 67 73 31 20 7c 20 66 6c 61 67 73 33 29 26 4d 45  gs1 | flags3)&ME
10020 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 2f 2a  M_Null ){.    /*
10030 20 4f 6e 65 20 6f 72 20 62 6f 74 68 20 6f 70 65   One or both ope
10040 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 2a  rands are NULL *
10050 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  /.    if( pOp->p
10060 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45  5 & SQLITE_NULLE
10070 51 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66  Q ){.      /* If
10080 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69   SQLITE_NULLEQ i
10090 73 20 73 65 74 20 28 77 68 69 63 68 20 77 69 6c  s set (which wil
100a0 6c 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20 69 66  l only happen if
100b0 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20 69 73   the operator is
100c0 0a 20 20 20 20 20 20 2a 2a 20 4f 50 5f 45 71 20  .      ** OP_Eq 
100d0 6f 72 20 4f 50 5f 4e 65 29 20 74 68 65 6e 20 74  or OP_Ne) then t
100e0 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 6f 72 20  ake the jump or 
100f0 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  not depending on
10100 20 77 68 65 74 68 65 72 0a 20 20 20 20 20 20 2a   whether.      *
10110 2a 20 6f 72 20 6e 6f 74 20 62 6f 74 68 20 6f 70  * or not both op
10120 65 72 61 6e 64 73 20 61 72 65 20 6e 75 6c 6c 2e  erands are null.
10130 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
10140 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
10150 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20 70 4f  ode==OP_Eq || pO
10160 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65  p->opcode==OP_Ne
10170 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
10180 28 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f  ( (flags1 & MEM_
10190 43 6c 65 61 72 65 64 29 3d 3d 30 20 29 3b 0a 20  Cleared)==0 );. 
101a0 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70 4f       assert( (pO
101b0 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4a  p->p5 & SQLITE_J
101c0 55 4d 50 49 46 4e 55 4c 4c 29 3d 3d 30 20 29 3b  UMPIFNULL)==0 );
101d0 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67  .      if( (flag
101e0 73 31 26 66 6c 61 67 73 33 26 4d 45 4d 5f 4e 75  s1&flags3&MEM_Nu
101f0 6c 6c 29 21 3d 30 0a 20 20 20 20 20 20 20 26 26  ll)!=0.       &&
10200 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 43 6c 65   (flags3&MEM_Cle
10210 61 72 65 64 29 3d 3d 30 0a 20 20 20 20 20 20 29  ared)==0.      )
10220 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20  {.        res = 
10230 30 3b 20 20 2f 2a 20 4f 70 65 72 61 6e 64 73 20  0;  /* Operands 
10240 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20  are equal */.   
10250 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
10260 20 20 72 65 73 20 3d 20 31 3b 20 20 2f 2a 20 4f    res = 1;  /* O
10270 70 65 72 61 6e 64 73 20 61 72 65 20 6e 6f 74 20  perands are not 
10280 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d  equal */.      }
10290 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
102a0 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 55 4c 4c    /* SQLITE_NULL
102b0 45 51 20 69 73 20 63 6c 65 61 72 20 61 6e 64 20  EQ is clear and 
102c0 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 6f 70 65  at least one ope
102d0 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 0a 20 20  rand is NULL,.  
102e0 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20      ** then the 
102f0 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73  result is always
10300 20 4e 55 4c 4c 2e 0a 20 20 20 20 20 20 2a 2a 20   NULL..      ** 
10310 54 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  The jump is take
10320 6e 20 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f  n if the SQLITE_
10330 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 69  JUMPIFNULL bit i
10340 73 20 73 65 74 2e 0a 20 20 20 20 20 20 2a 2f 0a  s set..      */.
10350 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70        if( pOp->p
10360 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  5 & SQLITE_STORE
10370 50 32 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4f  P2 ){.        pO
10380 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
10390 70 32 5d 3b 0a 20 20 20 20 20 20 20 20 69 43 6f  p2];.        iCo
103a0 6d 70 61 72 65 20 3d 20 31 3b 20 20 20 20 2f 2a  mpare = 1;    /*
103b0 20 4f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 6f   Operands are no
103c0 74 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20  t equal */.     
103d0 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
103e0 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20  nge(p, pOut);.  
103f0 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65        MemSetType
10400 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e  Flag(pOut, MEM_N
10410 75 6c 6c 29 3b 0a 20 20 20 20 20 20 20 20 52 45  ull);.        RE
10420 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
10430 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 20  ->p2, pOut);.   
10440 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
10450 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
10460 6e 28 32 2c 33 29 3b 0a 20 20 20 20 20 20 20 20  n(2,3);.        
10470 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  if( pOp->p5 & SQ
10480 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20  LITE_JUMPIFNULL 
10490 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  ){.          got
104a0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
104b0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
104c0 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
104d0 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
104e0 2f 2a 20 4e 65 69 74 68 65 72 20 6f 70 65 72 61  /* Neither opera
104f0 6e 64 20 69 73 20 4e 55 4c 4c 2e 20 20 44 6f 20  nd is NULL.  Do 
10500 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 2a 2f  a comparison. */
10510 0a 20 20 20 20 61 66 66 69 6e 69 74 79 20 3d 20  .    affinity = 
10520 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
10530 5f 41 46 46 5f 4d 41 53 4b 3b 0a 20 20 20 20 69  _AFF_MASK;.    i
10540 66 28 20 61 66 66 69 6e 69 74 79 3e 3d 53 51 4c  f( affinity>=SQL
10550 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20  ITE_AFF_NUMERIC 
10560 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c  ){.      if( (fl
10570 61 67 73 31 20 7c 20 66 6c 61 67 73 33 29 26 4d  ags1 | flags3)&M
10580 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20  EM_Str ){.      
10590 20 20 69 66 28 20 28 66 6c 61 67 73 31 20 26 20    if( (flags1 & 
105a0 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61  (MEM_Int|MEM_Rea
105b0 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d  l|MEM_Str))==MEM
105c0 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20 20 20  _Str ){.        
105d0 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66    applyNumericAf
105e0 66 69 6e 69 74 79 28 70 49 6e 31 2c 30 29 3b 0a  finity(pIn1,0);.
105f0 20 20 20 20 20 20 20 20 20 20 74 65 73 74 63 61            testca
10600 73 65 28 20 66 6c 61 67 73 33 21 3d 70 49 6e 33  se( flags3!=pIn3
10610 2d 3e 66 6c 61 67 73 20 29 3b 20 2f 2a 20 50 6f  ->flags ); /* Po
10620 73 73 69 62 6c 65 20 69 66 20 70 49 6e 31 3d 3d  ssible if pIn1==
10630 70 49 6e 33 20 2a 2f 0a 20 20 20 20 20 20 20 20  pIn3 */.        
10640 20 20 66 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d    flags3 = pIn3-
10650 3e 66 6c 61 67 73 3b 0a 20 20 20 20 20 20 20 20  >flags;.        
10660 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 66  }.        if( (f
10670 6c 61 67 73 33 20 26 20 28 4d 45 4d 5f 49 6e 74  lags3 & (MEM_Int
10680 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74  |MEM_Real|MEM_St
10690 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a  r))==MEM_Str ){.
106a0 20 20 20 20 20 20 20 20 20 20 61 70 70 6c 79 4e            applyN
106b0 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70  umericAffinity(p
106c0 49 6e 33 2c 30 29 3b 0a 20 20 20 20 20 20 20 20  In3,0);.        
106d0 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  }.      }.      
106e0 2f 2a 20 48 61 6e 64 6c 65 20 74 68 65 20 63 6f  /* Handle the co
106f0 6d 6d 6f 6e 20 63 61 73 65 20 6f 66 20 69 6e 74  mmon case of int
10700 65 67 65 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20  eger comparison 
10710 68 65 72 65 2c 20 61 73 20 61 6e 0a 20 20 20 20  here, as an.    
10720 20 20 2a 2a 20 6f 70 74 69 6d 69 7a 61 74 69 6f    ** optimizatio
10730 6e 2c 20 74 6f 20 61 76 6f 69 64 20 61 20 63 61  n, to avoid a ca
10740 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 4d 65 6d  ll to sqlite3Mem
10750 43 6f 6d 70 61 72 65 28 29 20 2a 2f 0a 20 20 20  Compare() */.   
10760 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c     if( (pIn1->fl
10770 61 67 73 20 26 20 70 49 6e 33 2d 3e 66 6c 61 67  ags & pIn3->flag
10780 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  s & MEM_Int)!=0 
10790 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  ){.        if( p
107a0 49 6e 33 2d 3e 75 2e 69 20 3e 20 70 49 6e 31 2d  In3->u.i > pIn1-
107b0 3e 75 2e 69 20 29 7b 20 72 65 73 20 3d 20 2b 31  >u.i ){ res = +1
107c0 3b 20 67 6f 74 6f 20 63 6f 6d 70 61 72 65 5f 6f  ; goto compare_o
107d0 70 3b 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28  p; }.        if(
107e0 20 70 49 6e 33 2d 3e 75 2e 69 20 3c 20 70 49 6e   pIn3->u.i < pIn
107f0 31 2d 3e 75 2e 69 20 29 7b 20 72 65 73 20 3d 20  1->u.i ){ res = 
10800 2d 31 3b 20 67 6f 74 6f 20 63 6f 6d 70 61 72 65  -1; goto compare
10810 5f 6f 70 3b 20 7d 0a 20 20 20 20 20 20 20 20 72  _op; }.        r
10820 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  es = 0;.        
10830 67 6f 74 6f 20 63 6f 6d 70 61 72 65 5f 6f 70 3b  goto compare_op;
10840 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
10850 73 65 20 69 66 28 20 61 66 66 69 6e 69 74 79 3d  se if( affinity=
10860 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54  =SQLITE_AFF_TEXT
10870 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 66   ){.      if( (f
10880 6c 61 67 73 31 20 26 20 4d 45 4d 5f 53 74 72 29  lags1 & MEM_Str)
10890 3d 3d 30 20 26 26 20 28 66 6c 61 67 73 31 20 26  ==0 && (flags1 &
108a0 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65   (MEM_Int|MEM_Re
108b0 61 6c 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  al))!=0 ){.     
108c0 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e     testcase( pIn
108d0 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
108e0 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20 74 65  nt );.        te
108f0 73 74 63 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c  stcase( pIn1->fl
10900 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29  ags & MEM_Real )
10910 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
10920 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66  3VdbeMemStringif
10930 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67  y(pIn1, encoding
10940 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 74 65  , 1);.        te
10950 73 74 63 61 73 65 28 20 28 66 6c 61 67 73 31 26  stcase( (flags1&
10960 4d 45 4d 5f 44 79 6e 29 20 21 3d 20 28 70 49 6e  MEM_Dyn) != (pIn
10970 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 44 79 6e  1->flags&MEM_Dyn
10980 29 20 29 3b 0a 20 20 20 20 20 20 20 20 66 6c 61  ) );.        fla
10990 67 73 31 20 3d 20 28 70 49 6e 31 2d 3e 66 6c 61  gs1 = (pIn1->fla
109a0 67 73 20 26 20 7e 4d 45 4d 5f 54 79 70 65 4d 61  gs & ~MEM_TypeMa
109b0 73 6b 29 20 7c 20 28 66 6c 61 67 73 31 20 26 20  sk) | (flags1 & 
109c0 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20  MEM_TypeMask);. 
109d0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
109e0 49 6e 31 21 3d 70 49 6e 33 20 29 3b 0a 20 20 20  In1!=pIn3 );.   
109f0 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28     }.      if( (
10a00 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f 53 74 72  flags3 & MEM_Str
10a10 29 3d 3d 30 20 26 26 20 28 66 6c 61 67 73 33 20  )==0 && (flags3 
10a20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
10a30 65 61 6c 29 29 21 3d 30 20 29 7b 0a 20 20 20 20  eal))!=0 ){.    
10a40 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49      testcase( pI
10a50 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
10a60 49 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20 74  Int );.        t
10a70 65 73 74 63 61 73 65 28 20 70 49 6e 33 2d 3e 66  estcase( pIn3->f
10a80 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20  lags & MEM_Real 
10a90 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
10aa0 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69  e3VdbeMemStringi
10ab0 66 79 28 70 49 6e 33 2c 20 65 6e 63 6f 64 69 6e  fy(pIn3, encodin
10ac0 67 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 74  g, 1);.        t
10ad0 65 73 74 63 61 73 65 28 20 28 66 6c 61 67 73 33  estcase( (flags3
10ae0 26 4d 45 4d 5f 44 79 6e 29 20 21 3d 20 28 70 49  &MEM_Dyn) != (pI
10af0 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 44 79  n3->flags&MEM_Dy
10b00 6e 29 20 29 3b 0a 20 20 20 20 20 20 20 20 66 6c  n) );.        fl
10b10 61 67 73 33 20 3d 20 28 70 49 6e 33 2d 3e 66 6c  ags3 = (pIn3->fl
10b20 61 67 73 20 26 20 7e 4d 45 4d 5f 54 79 70 65 4d  ags & ~MEM_TypeM
10b30 61 73 6b 29 20 7c 20 28 66 6c 61 67 73 33 20 26  ask) | (flags3 &
10b40 20 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a   MEM_TypeMask);.
10b50 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
10b60 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
10b70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45  4type==P4_COLLSE
10b80 51 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f  Q || pOp->p4.pCo
10b90 6c 6c 3d 3d 30 20 29 3b 0a 20 20 20 20 72 65 73  ll==0 );.    res
10ba0 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d   = sqlite3MemCom
10bb0 70 61 72 65 28 70 49 6e 33 2c 20 70 49 6e 31 2c  pare(pIn3, pIn1,
10bc0 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b   pOp->p4.pColl);
10bd0 0a 20 20 7d 0a 63 6f 6d 70 61 72 65 5f 6f 70 3a  .  }.compare_op:
10be0 0a 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e  .  switch( pOp->
10bf0 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 63 61  opcode ){.    ca
10c00 73 65 20 4f 50 5f 45 71 3a 20 20 20 20 72 65 73  se OP_Eq:    res
10c10 32 20 3d 20 72 65 73 3d 3d 30 3b 20 20 20 20 20  2 = res==0;     
10c20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
10c30 4f 50 5f 4e 65 3a 20 20 20 20 72 65 73 32 20 3d  OP_Ne:    res2 =
10c40 20 72 65 73 3b 20 20 20 20 20 20 20 20 62 72 65   res;        bre
10c50 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f  ak;.    case OP_
10c60 4c 74 3a 20 20 20 20 72 65 73 32 20 3d 20 72 65  Lt:    res2 = re
10c70 73 3c 30 3b 20 20 20 20 20 20 62 72 65 61 6b 3b  s<0;      break;
10c80 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 65 3a  .    case OP_Le:
10c90 20 20 20 20 72 65 73 32 20 3d 20 72 65 73 3c 3d      res2 = res<=
10ca0 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  0;     break;.  
10cb0 20 20 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20    case OP_Gt:   
10cc0 20 72 65 73 32 20 3d 20 72 65 73 3e 30 3b 20 20   res2 = res>0;  
10cd0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64      break;.    d
10ce0 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20 72 65  efault:       re
10cf0 73 32 20 3d 20 72 65 73 3e 3d 30 3b 20 20 20 20  s2 = res>=0;    
10d00 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f   break;.  }..  /
10d10 2a 20 55 6e 64 6f 20 61 6e 79 20 63 68 61 6e 67  * Undo any chang
10d20 65 73 20 6d 61 64 65 20 62 79 20 61 70 70 6c 79  es made by apply
10d30 41 66 66 69 6e 69 74 79 28 29 20 74 6f 20 74 68  Affinity() to th
10d40 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72  e input register
10d50 73 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  s. */.  assert( 
10d60 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
10d70 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61 67  EM_Dyn) == (flag
10d80 73 31 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b  s1 & MEM_Dyn) );
10d90 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d  .  pIn1->flags =
10da0 20 66 6c 61 67 73 31 3b 0a 20 20 61 73 73 65 72   flags1;.  asser
10db0 74 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  t( (pIn3->flags 
10dc0 26 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66  & MEM_Dyn) == (f
10dd0 6c 61 67 73 33 20 26 20 4d 45 4d 5f 44 79 6e 29  lags3 & MEM_Dyn)
10de0 20 29 3b 0a 20 20 70 49 6e 33 2d 3e 66 6c 61 67   );.  pIn3->flag
10df0 73 20 3d 20 66 6c 61 67 73 33 3b 0a 0a 20 20 69  s = flags3;..  i
10e00 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c  f( pOp->p5 & SQL
10e10 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20  ITE_STOREP2 ){. 
10e20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b     pOut = &aMem[
10e30 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 69 43  pOp->p2];.    iC
10e40 6f 6d 70 61 72 65 20 3d 20 72 65 73 3b 0a 20 20  ompare = res;.  
10e50 20 20 72 65 73 32 20 3d 20 72 65 73 32 21 3d 30    res2 = res2!=0
10e60 3b 20 20 2f 2a 20 46 6f 72 20 74 68 69 73 20 70  ;  /* For this p
10e70 61 74 68 20 72 65 73 32 20 6d 75 73 74 20 62 65  ath res2 must be
10e80 20 65 78 61 63 74 6c 79 20 30 20 6f 72 20 31 20   exactly 0 or 1 
10e90 2a 2f 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d  */.    if( (pOp-
10ea0 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4b 45 45  >p5 & SQLITE_KEE
10eb0 50 4e 55 4c 4c 29 21 3d 30 20 29 7b 0a 20 20 20  PNULL)!=0 ){.   
10ec0 20 20 20 2f 2a 20 54 68 65 20 4b 45 45 50 4e 55     /* The KEEPNU
10ed0 4c 4c 20 66 6c 61 67 20 70 72 65 76 65 6e 74 73  LL flag prevents
10ee0 20 4f 50 5f 45 71 20 66 72 6f 6d 20 6f 76 65 72   OP_Eq from over
10ef0 77 72 69 74 69 6e 67 20 61 20 4e 55 4c 4c 20 77  writing a NULL w
10f00 69 74 68 20 31 0a 20 20 20 20 20 20 2a 2a 20 61  ith 1.      ** a
10f10 6e 64 20 70 72 65 76 65 6e 74 73 20 4f 50 5f 4e  nd prevents OP_N
10f20 65 20 66 72 6f 6d 20 6f 76 65 72 77 72 69 74 69  e from overwriti
10f30 6e 67 20 4e 55 4c 4c 20 77 69 74 68 20 30 2e 20  ng NULL with 0. 
10f40 20 54 68 69 73 20 66 6c 61 67 0a 20 20 20 20 20   This flag.     
10f50 20 2a 2a 20 69 73 20 6f 6e 6c 79 20 75 73 65 64   ** is only used
10f60 20 69 6e 20 63 6f 6e 74 65 78 74 73 20 77 68 65   in contexts whe
10f70 72 65 20 65 69 74 68 65 72 3a 0a 20 20 20 20 20  re either:.     
10f80 20 2a 2a 20 20 20 28 31 29 20 6f 70 3d 3d 4f 50   **   (1) op==OP
10f90 5f 45 71 20 26 26 20 28 72 5b 50 32 5d 3d 3d 4e  _Eq && (r[P2]==N
10fa0 55 4c 4c 20 7c 7c 20 72 5b 50 32 5d 3d 3d 30 29  ULL || r[P2]==0)
10fb0 0a 20 20 20 20 20 20 2a 2a 20 20 20 28 32 29 20  .      **   (2) 
10fc0 6f 70 3d 3d 4f 50 5f 4e 65 20 26 26 20 28 72 5b  op==OP_Ne && (r[
10fd0 50 32 5d 3d 3d 4e 55 4c 4c 20 7c 7c 20 72 5b 50  P2]==NULL || r[P
10fe0 32 5d 3d 3d 31 29 0a 20 20 20 20 20 20 2a 2a 20  2]==1).      ** 
10ff0 54 68 65 72 65 66 6f 72 65 20 69 74 20 69 73 20  Therefore it is 
11000 6e 6f 74 20 6e 65 63 65 73 73 61 72 79 20 74 6f  not necessary to
11010 20 63 68 65 63 6b 20 74 68 65 20 63 6f 6e 74 65   check the conte
11020 6e 74 20 6f 66 20 72 5b 50 32 5d 20 66 6f 72 0a  nt of r[P2] for.
11030 20 20 20 20 20 20 2a 2a 20 4e 55 4c 4c 2e 20 2a        ** NULL. *
11040 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
11050 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
11060 4e 65 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  Ne || pOp->opcod
11070 65 3d 3d 4f 50 5f 45 71 20 29 3b 0a 20 20 20 20  e==OP_Eq );.    
11080 20 20 61 73 73 65 72 74 28 20 72 65 73 32 3d 3d    assert( res2==
11090 30 20 7c 7c 20 72 65 73 32 3d 3d 31 20 29 3b 0a  0 || res2==1 );.
110a0 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
110b0 72 65 73 32 3d 3d 30 20 26 26 20 70 4f 70 2d 3e  res2==0 && pOp->
110c0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 29 3b  opcode==OP_Eq );
110d0 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
110e0 20 72 65 73 32 3d 3d 31 20 26 26 20 70 4f 70 2d   res2==1 && pOp-
110f0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 29  >opcode==OP_Eq )
11100 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65  ;.      testcase
11110 28 20 72 65 73 32 3d 3d 30 20 26 26 20 70 4f 70  ( res2==0 && pOp
11120 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20  ->opcode==OP_Ne 
11130 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73  );.      testcas
11140 65 28 20 72 65 73 32 3d 3d 31 20 26 26 20 70 4f  e( res2==1 && pO
11150 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65  p->opcode==OP_Ne
11160 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 28 70   );.      if( (p
11170 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45  Op->opcode==OP_E
11180 71 29 3d 3d 72 65 73 32 20 29 20 62 72 65 61 6b  q)==res2 ) break
11190 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6d 65 6d 41  ;.    }.    memA
111a0 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
111b0 70 4f 75 74 29 3b 0a 20 20 20 20 4d 65 6d 53 65  pOut);.    MemSe
111c0 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
111d0 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f  MEM_Int);.    pO
111e0 75 74 2d 3e 75 2e 69 20 3d 20 72 65 73 32 3b 0a  ut->u.i = res2;.
111f0 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
11200 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74  CE(pOp->p2, pOut
11210 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
11220 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
11230 72 65 73 21 3d 30 2c 20 28 70 4f 70 2d 3e 70 35  res!=0, (pOp->p5
11240 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51   & SQLITE_NULLEQ
11250 29 3f 32 3a 33 29 3b 0a 20 20 20 20 69 66 28 20  )?2:3);.    if( 
11260 72 65 73 32 20 29 7b 0a 20 20 20 20 20 20 67 6f  res2 ){.      go
11270 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
11280 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
11290 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
112a0 45 6c 73 65 4e 6f 74 45 71 20 2a 20 50 32 20 2a  ElseNotEq * P2 *
112b0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   * *.**.** This 
112c0 6f 70 63 6f 64 65 20 6d 75 73 74 20 69 6d 6d 65  opcode must imme
112d0 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 20 61  diately follow a
112e0 6e 20 4f 50 5f 4c 74 20 6f 72 20 4f 50 5f 47 74  n OP_Lt or OP_Gt
112f0 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72   comparison oper
11300 61 74 6f 72 2e 0a 2a 2a 20 49 66 20 72 65 73 75  ator..** If resu
11310 6c 74 20 6f 66 20 61 6e 20 4f 50 5f 45 71 20 63  lt of an OP_Eq c
11320 6f 6d 70 61 72 69 73 6f 6e 20 6f 6e 20 74 68 65  omparison on the
11330 20 73 61 6d 65 20 74 77 6f 20 6f 70 65 72 61 6e   same two operan
11340 64 73 0a 2a 2a 20 77 6f 75 6c 64 20 68 61 76 65  ds.** would have
11350 20 62 65 20 4e 55 4c 4c 20 6f 72 20 66 61 6c 73   be NULL or fals
11360 65 20 28 30 29 2c 20 74 68 65 6e 20 74 68 65 6e  e (0), then then
11370 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a   jump to P2. .**
11380 20 49 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f   If the result o
11390 66 20 61 6e 20 4f 50 5f 45 71 20 63 6f 6d 70 61  f an OP_Eq compa
113a0 72 69 73 6f 6e 20 6f 6e 20 74 68 65 20 74 77 6f  rison on the two
113b0 20 70 72 65 76 69 6f 75 73 20 6f 70 65 72 61 6e   previous operan
113c0 64 73 0a 2a 2a 20 77 6f 75 6c 64 20 68 61 76 65  ds.** would have
113d0 20 62 65 65 6e 20 74 72 75 65 20 28 31 29 2c 20   been true (1), 
113e0 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
113f0 68 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6c  h..*/.case OP_El
11400 73 65 4e 6f 74 45 71 3a 20 7b 20 20 20 20 20 20  seNotEq: {      
11410 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 45   /* same as TK_E
11420 53 43 41 50 45 2c 20 6a 75 6d 70 20 2a 2f 0a 20  SCAPE, jump */. 
11430 20 61 73 73 65 72 74 28 20 70 4f 70 3e 61 4f 70   assert( pOp>aOp
11440 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
11450 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50  p[-1].opcode==OP
11460 5f 4c 74 20 7c 7c 20 70 4f 70 5b 2d 31 5d 2e 6f  _Lt || pOp[-1].o
11470 70 63 6f 64 65 3d 3d 4f 50 5f 47 74 20 29 3b 0a  pcode==OP_Gt );.
11480 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31    assert( pOp[-1
11490 5d 2e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54  ].p5 & SQLITE_ST
114a0 4f 52 45 50 32 20 29 3b 0a 20 20 56 64 62 65 42  OREP2 );.  VdbeB
114b0 72 61 6e 63 68 54 61 6b 65 6e 28 69 43 6f 6d 70  ranchTaken(iComp
114c0 61 72 65 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66  are!=0, 2);.  if
114d0 28 20 69 43 6f 6d 70 61 72 65 21 3d 30 20 29 20  ( iCompare!=0 ) 
114e0 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
114f0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a  .  break;.}.../*
11500 20 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75 74 61   Opcode: Permuta
11510 74 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a  tion * * * P4 *.
11520 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 70 65  **.** Set the pe
11530 72 6d 75 74 61 74 69 6f 6e 20 75 73 65 64 20 62  rmutation used b
11540 79 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65  y the OP_Compare
11550 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 74 68 65   operator in the
11560 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75 63   next.** instruc
11570 74 69 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d 75  tion.  The permu
11580 74 61 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64  tation is stored
11590 20 69 6e 20 74 68 65 20 50 34 20 6f 70 65 72 61   in the P4 opera
115a0 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65  nd..**.** The pe
115b0 72 6d 75 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c  rmutation is onl
115c0 79 20 76 61 6c 69 64 20 75 6e 74 69 6c 20 74 68  y valid until th
115d0 65 20 6e 65 78 74 20 4f 50 5f 43 6f 6d 70 61 72  e next OP_Compar
115e0 65 20 74 68 61 74 20 68 61 73 0a 2a 2a 20 74 68  e that has.** th
115f0 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  e OPFLAG_PERMUTE
11600 20 62 69 74 20 73 65 74 20 69 6e 20 50 35 2e 20   bit set in P5. 
11610 54 79 70 69 63 61 6c 6c 79 20 74 68 65 20 4f 50  Typically the OP
11620 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f  _Permutation sho
11630 75 6c 64 20 0a 2a 2a 20 6f 63 63 75 72 20 69 6d  uld .** occur im
11640 6d 65 64 69 61 74 65 6c 79 20 70 72 69 6f 72 20  mediately prior 
11650 74 6f 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72  to the OP_Compar
11660 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 69 72  e..**.** The fir
11670 73 74 20 69 6e 74 65 67 65 72 20 69 6e 20 74 68  st integer in th
11680 65 20 50 34 20 69 6e 74 65 67 65 72 20 61 72 72  e P4 integer arr
11690 61 79 20 69 73 20 74 68 65 20 6c 65 6e 67 74 68  ay is the length
116a0 20 6f 66 20 74 68 65 20 61 72 72 61 79 0a 2a 2a   of the array.**
116b0 20 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 62 65   and does not be
116c0 63 6f 6d 65 20 70 61 72 74 20 6f 66 20 74 68 65  come part of the
116d0 20 70 65 72 6d 75 74 61 74 69 6f 6e 2e 0a 2a 2f   permutation..*/
116e0 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d 75 74 61  .case OP_Permuta
116f0 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73 65 72 74  tion: {.  assert
11700 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
11710 34 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a 20 20  4_INTARRAY );.  
11720 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
11730 61 69 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ai );.  assert( 
11740 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f  pOp[1].opcode==O
11750 50 5f 43 6f 6d 70 61 72 65 20 29 3b 0a 20 20 61  P_Compare );.  a
11760 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 35  ssert( pOp[1].p5
11770 20 26 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54   & OPFLAG_PERMUT
11780 45 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  E );.  break;.}.
11790 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d 70  ./* Opcode: Comp
117a0 61 72 65 20 50 31 20 50 32 20 50 33 20 50 34 20  are P1 P2 P3 P4 
117b0 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
117c0 72 5b 50 31 40 50 33 5d 20 3c 2d 3e 20 72 5b 50  r[P1@P3] <-> r[P
117d0 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70  2@P3].**.** Comp
117e0 61 72 65 20 74 77 6f 20 76 65 63 74 6f 72 73 20  are two vectors 
117f0 6f 66 20 72 65 67 69 73 74 65 72 73 20 69 6e 20  of registers in 
11800 72 65 67 28 50 31 29 2e 2e 72 65 67 28 50 31 2b  reg(P1)..reg(P1+
11810 50 33 2d 31 29 20 28 63 61 6c 6c 20 74 68 69 73  P3-1) (call this
11820 0a 2a 2a 20 76 65 63 74 6f 72 20 22 41 22 29 20  .** vector "A") 
11830 61 6e 64 20 69 6e 20 72 65 67 28 50 32 29 2e 2e  and in reg(P2)..
11840 72 65 67 28 50 32 2b 50 33 2d 31 29 20 28 22 42  reg(P2+P3-1) ("B
11850 22 29 2e 20 20 53 61 76 65 20 74 68 65 20 72 65  ").  Save the re
11860 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 63  sult of.** the c
11870 6f 6d 70 61 72 69 73 6f 6e 20 66 6f 72 20 75 73  omparison for us
11880 65 20 62 79 20 74 68 65 20 6e 65 78 74 20 4f 50  e by the next OP
11890 5f 4a 75 6d 70 20 69 6e 73 74 72 75 63 74 2e 0a  _Jump instruct..
118a0 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20  **.** If P5 has 
118b0 74 68 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55  the OPFLAG_PERMU
118c0 54 45 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e  TE bit set, then
118d0 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 63 6f   the order of co
118e0 6d 70 61 72 69 73 6f 6e 20 69 73 0a 2a 2a 20 64  mparison is.** d
118f0 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65  etermined by the
11900 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50 5f   most recent OP_
11910 50 65 72 6d 75 74 61 74 69 6f 6e 20 6f 70 65 72  Permutation oper
11920 61 74 6f 72 2e 20 20 49 66 20 74 68 65 0a 2a 2a  ator.  If the.**
11930 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20   OPFLAG_PERMUTE 
11940 62 69 74 20 69 73 20 63 6c 65 61 72 2c 20 74 68  bit is clear, th
11950 65 6e 20 72 65 67 69 73 74 65 72 20 61 72 65 20  en register are 
11960 63 6f 6d 70 61 72 65 64 20 69 6e 20 73 65 71 75  compared in sequ
11970 65 6e 74 69 61 6c 0a 2a 2a 20 6f 72 64 65 72 2e  ential.** order.
11980 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 4b  .**.** P4 is a K
11990 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  eyInfo structure
119a0 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 63 6f   that defines co
119b0 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
119c0 73 20 61 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f 72  s and sort.** or
119d0 64 65 72 73 20 66 6f 72 20 74 68 65 20 63 6f 6d  ders for the com
119e0 70 61 72 69 73 6f 6e 2e 20 20 54 68 65 20 70 65  parison.  The pe
119f0 72 6d 75 74 61 74 69 6f 6e 20 61 70 70 6c 69 65  rmutation applie
11a00 73 20 74 6f 20 72 65 67 69 73 74 65 72 73 0a 2a  s to registers.*
11a10 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 20 4b 65 79  * only.  The Key
11a20 49 6e 66 6f 20 65 6c 65 6d 65 6e 74 73 20 61 72  Info elements ar
11a30 65 20 75 73 65 64 20 73 65 71 75 65 6e 74 69 61  e used sequentia
11a40 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  lly..**.** The c
11a50 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 20 73  omparison is a s
11a60 6f 72 74 20 63 6f 6d 70 61 72 69 73 6f 6e 2c 20  ort comparison, 
11a70 73 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70 61 72 65  so NULLs compare
11a80 20 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73   equal,.** NULLs
11a90 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 6e   are less than n
11aa0 75 6d 62 65 72 73 2c 20 6e 75 6d 62 65 72 73 20  umbers, numbers 
11ab0 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 73 74  are less than st
11ac0 72 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20 73 74  rings,.** and st
11ad0 72 69 6e 67 73 20 61 72 65 20 6c 65 73 73 20 74  rings are less t
11ae0 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61  han blobs..*/.ca
11af0 73 65 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 7b  se OP_Compare: {
11b00 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20  .  int n;.  int 
11b10 69 3b 0a 20 20 69 6e 74 20 70 31 3b 0a 20 20 69  i;.  int p1;.  i
11b20 6e 74 20 70 32 3b 0a 20 20 63 6f 6e 73 74 20 4b  nt p2;.  const K
11b30 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f  eyInfo *pKeyInfo
11b40 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 43  ;.  int idx;.  C
11b50 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20 20  ollSeq *pColl;  
11b60 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73    /* Collating s
11b70 65 71 75 65 6e 63 65 20 74 6f 20 75 73 65 20 6f  equence to use o
11b80 6e 20 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a 20  n this term */. 
11b90 20 69 6e 74 20 62 52 65 76 3b 20 20 20 20 20 20   int bRev;      
11ba0 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20      /* True for 
11bb0 44 45 53 43 45 4e 44 49 4e 47 20 73 6f 72 74 20  DESCENDING sort 
11bc0 6f 72 64 65 72 20 2a 2f 0a 20 20 69 6e 74 20 2a  order */.  int *
11bd0 61 50 65 72 6d 75 74 65 3b 20 20 20 20 20 2f 2a  aPermute;     /*
11be0 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   The permutation
11bf0 20 2a 2f 0a 0a 20 20 69 66 28 20 28 70 4f 70 2d   */..  if( (pOp-
11c00 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 45 52  >p5 & OPFLAG_PER
11c10 4d 55 54 45 29 3d 3d 30 20 29 7b 0a 20 20 20 20  MUTE)==0 ){.    
11c20 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20  aPermute = 0;.  
11c30 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
11c40 74 28 20 70 4f 70 3e 61 4f 70 20 29 3b 0a 20 20  t( pOp>aOp );.  
11c50 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31    assert( pOp[-1
11c60 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 50 65 72  ].opcode==OP_Per
11c70 6d 75 74 61 74 69 6f 6e 20 29 3b 0a 20 20 20 20  mutation );.    
11c80 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e  assert( pOp[-1].
11c90 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52  p4type==P4_INTAR
11ca0 52 41 59 20 29 3b 0a 20 20 20 20 61 50 65 72 6d  RAY );.    aPerm
11cb0 75 74 65 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34  ute = pOp[-1].p4
11cc0 2e 61 69 20 2b 20 31 3b 0a 20 20 20 20 61 73 73  .ai + 1;.    ass
11cd0 65 72 74 28 20 61 50 65 72 6d 75 74 65 21 3d 30  ert( aPermute!=0
11ce0 20 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d 20 70 4f   );.  }.  n = pO
11cf0 70 2d 3e 70 33 3b 0a 20 20 70 4b 65 79 49 6e 66  p->p3;.  pKeyInf
11d00 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79  o = pOp->p4.pKey
11d10 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20  Info;.  assert( 
11d20 6e 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  n>0 );.  assert(
11d30 20 70 4b 65 79 49 6e 66 6f 21 3d 30 20 29 3b 0a   pKeyInfo!=0 );.
11d40 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a    p1 = pOp->p1;.
11d50 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a    p2 = pOp->p2;.
11d60 23 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  #if SQLITE_DEBUG
11d70 0a 20 20 69 66 28 20 61 50 65 72 6d 75 74 65 20  .  if( aPermute 
11d80 29 7b 0a 20 20 20 20 69 6e 74 20 6b 2c 20 6d 78  ){.    int k, mx
11d90 20 3d 20 30 3b 0a 20 20 20 20 66 6f 72 28 6b 3d   = 0;.    for(k=
11da0 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20 69 66 28  0; k<n; k++) if(
11db0 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3e 6d 78 20   aPermute[k]>mx 
11dc0 29 20 6d 78 20 3d 20 61 50 65 72 6d 75 74 65 5b  ) mx = aPermute[
11dd0 6b 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  k];.    assert( 
11de0 70 31 3e 30 20 26 26 20 70 31 2b 6d 78 3c 3d 28  p1>0 && p1+mx<=(
11df0 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
11e00 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20  Cursor)+1 );.   
11e10 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 26 26   assert( p2>0 &&
11e20 20 70 32 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d   p2+mx<=(p->nMem
11e30 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
11e40 2b 31 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  +1 );.  }else{. 
11e50 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 30 20     assert( p1>0 
11e60 26 26 20 70 31 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65  && p1+n<=(p->nMe
11e70 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
11e80 29 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  )+1 );.    asser
11e90 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6e 3c  t( p2>0 && p2+n<
11ea0 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
11eb0 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20  >nCursor)+1 );. 
11ec0 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   }.#endif /* SQL
11ed0 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20 66  ITE_DEBUG */.  f
11ee0 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b  or(i=0; i<n; i++
11ef0 29 7b 0a 20 20 20 20 69 64 78 20 3d 20 61 50 65  ){.    idx = aPe
11f00 72 6d 75 74 65 20 3f 20 61 50 65 72 6d 75 74 65  rmute ? aPermute
11f10 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20 61 73 73  [i] : i;.    ass
11f20 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
11f30 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 20 29  &aMem[p1+idx]) )
11f40 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
11f50 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
11f60 32 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20 20 52  2+idx]) );.    R
11f70 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 31  EGISTER_TRACE(p1
11f80 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70 31 2b 69  +idx, &aMem[p1+i
11f90 64 78 5d 29 3b 0a 20 20 20 20 52 45 47 49 53 54  dx]);.    REGIST
11fa0 45 52 5f 54 52 41 43 45 28 70 32 2b 69 64 78 2c  ER_TRACE(p2+idx,
11fb0 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 3b   &aMem[p2+idx]);
11fc0 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 3c 70  .    assert( i<p
11fd0 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 20  KeyInfo->nField 
11fe0 29 3b 0a 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70  );.    pColl = p
11ff0 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69  KeyInfo->aColl[i
12000 5d 3b 0a 20 20 20 20 62 52 65 76 20 3d 20 70 4b  ];.    bRev = pK
12010 65 79 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64  eyInfo->aSortOrd
12020 65 72 5b 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70  er[i];.    iComp
12030 61 72 65 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d  are = sqlite3Mem
12040 43 6f 6d 70 61 72 65 28 26 61 4d 65 6d 5b 70 31  Compare(&aMem[p1
12050 2b 69 64 78 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b  +idx], &aMem[p2+
12060 69 64 78 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20  idx], pColl);.  
12070 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65 20 29    if( iCompare )
12080 7b 0a 20 20 20 20 20 20 69 66 28 20 62 52 65 76  {.      if( bRev
12090 20 29 20 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69   ) iCompare = -i
120a0 43 6f 6d 70 61 72 65 3b 0a 20 20 20 20 20 20 62  Compare;.      b
120b0 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  reak;.    }.  }.
120c0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
120d0 70 63 6f 64 65 3a 20 4a 75 6d 70 20 50 31 20 50  pcode: Jump P1 P
120e0 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a  2 P3 * *.**.** J
120f0 75 6d 70 20 74 6f 20 74 68 65 20 69 6e 73 74 72  ump to the instr
12100 75 63 74 69 6f 6e 20 61 74 20 61 64 64 72 65 73  uction at addres
12110 73 20 50 31 2c 20 50 32 2c 20 6f 72 20 50 33 20  s P1, P2, or P3 
12120 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65  depending on whe
12130 74 68 65 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d  ther.** in the m
12140 6f 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f  ost recent OP_Co
12150 6d 70 61 72 65 20 69 6e 73 74 72 75 63 74 69 6f  mpare instructio
12160 6e 20 74 68 65 20 50 31 20 76 65 63 74 6f 72 20  n the P1 vector 
12170 77 61 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a  was less than.**
12180 20 65 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72   equal to, or gr
12190 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 50  eater than the P
121a0 32 20 76 65 63 74 6f 72 2c 20 72 65 73 70 65 63  2 vector, respec
121b0 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20  tively..*/.case 
121c0 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20  OP_Jump: {      
121d0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
121e0 2f 0a 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65  /.  if( iCompare
121f0 3c 30 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72  <0 ){.    VdbeBr
12200 61 6e 63 68 54 61 6b 65 6e 28 30 2c 33 29 3b 20  anchTaken(0,3); 
12210 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e  pOp = &aOp[pOp->
12220 70 31 20 2d 20 31 5d 3b 0a 20 20 7d 65 6c 73 65  p1 - 1];.  }else
12230 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3d 3d 30   if( iCompare==0
12240 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e   ){.    VdbeBran
12250 63 68 54 61 6b 65 6e 28 31 2c 33 29 3b 20 70 4f  chTaken(1,3); pO
12260 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32  p = &aOp[pOp->p2
12270 20 2d 20 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a   - 1];.  }else{.
12280 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
12290 6b 65 6e 28 32 2c 33 29 3b 20 70 4f 70 20 3d 20  ken(2,3); pOp = 
122a0 26 61 4f 70 5b 70 4f 70 2d 3e 70 33 20 2d 20 31  &aOp[pOp->p3 - 1
122b0 5d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  ];.  }.  break;.
122c0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e  }../* Opcode: An
122d0 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
122e0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
122f0 5d 3d 28 72 5b 50 31 5d 20 26 26 20 72 5b 50 32  ]=(r[P1] && r[P2
12300 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68  ]).**.** Take th
12310 65 20 6c 6f 67 69 63 61 6c 20 41 4e 44 20 6f 66  e logical AND of
12320 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72   the values in r
12330 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20  egisters P1 and 
12340 50 32 20 61 6e 64 0a 2a 2a 20 77 72 69 74 65 20  P2 and.** write 
12350 74 68 65 20 72 65 73 75 6c 74 20 69 6e 74 6f 20  the result into 
12360 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a  register P3..**.
12370 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50 31 20  ** If either P1 
12380 6f 72 20 50 32 20 69 73 20 30 20 28 66 61 6c 73  or P2 is 0 (fals
12390 65 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  e) then the resu
123a0 6c 74 20 69 73 20 30 20 65 76 65 6e 20 69 66 0a  lt is 0 even if.
123b0 2a 2a 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70  ** the other inp
123c0 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e  ut is NULL.  A N
123d0 55 4c 4c 20 61 6e 64 20 74 72 75 65 20 6f 72 20  ULL and true or 
123e0 74 77 6f 20 4e 55 4c 4c 73 20 67 69 76 65 0a 2a  two NULLs give.*
123f0 2a 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e  * a NULL output.
12400 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .*/./* Opcode: O
12410 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  r P1 P2 P3 * *.*
12420 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
12430 5d 3d 28 72 5b 50 31 5d 20 7c 7c 20 72 5b 50 32  ]=(r[P1] || r[P2
12440 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68  ]).**.** Take th
12450 65 20 6c 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20  e logical OR of 
12460 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
12470 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32  gister P1 and P2
12480 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68   and.** store th
12490 65 20 61 6e 73 77 65 72 20 69 6e 20 72 65 67 69  e answer in regi
124a0 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49  ster P3..**.** I
124b0 66 20 65 69 74 68 65 72 20 50 31 20 6f 72 20 50  f either P1 or P
124c0 32 20 69 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72  2 is nonzero (tr
124d0 75 65 29 20 74 68 65 6e 20 74 68 65 20 72 65 73  ue) then the res
124e0 75 6c 74 20 69 73 20 31 20 28 74 72 75 65 29 0a  ult is 1 (true).
124f0 2a 2a 20 65 76 65 6e 20 69 66 20 74 68 65 20 6f  ** even if the o
12500 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
12510 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20  LL.  A NULL and 
12520 66 61 6c 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c  false or two NUL
12530 4c 73 0a 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c  Ls.** give a NUL
12540 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73  L output..*/.cas
12550 65 20 4f 50 5f 41 6e 64 3a 20 20 20 20 20 20 20  e OP_And:       
12560 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
12570 73 20 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69  s TK_AND, in1, i
12580 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
12590 20 4f 50 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20   OP_Or: {       
125a0 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
125b0 20 54 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32   TK_OR, in1, in2
125c0 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20  , out3 */.  int 
125d0 76 31 3b 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f  v1;    /* Left o
125e0 70 65 72 61 6e 64 3a 20 20 30 3d 3d 46 41 4c 53  perand:  0==FALS
125f0 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55  E, 1==TRUE, 2==U
12600 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a  NKNOWN or NULL *
12610 2f 0a 20 20 69 6e 74 20 76 32 3b 20 20 20 20 2f  /.  int v2;    /
12620 2a 20 52 69 67 68 74 20 6f 70 65 72 61 6e 64 3a  * Right operand:
12630 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52   0==FALSE, 1==TR
12640 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f  UE, 2==UNKNOWN o
12650 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 70 49 6e  r NULL */..  pIn
12660 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
12670 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  1];.  if( pIn1->
12680 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
12690 20 29 7b 0a 20 20 20 20 76 31 20 3d 20 32 3b 0a   ){.    v1 = 2;.
126a0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 31 20    }else{.    v1 
126b0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
126c0 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a  Value(pIn1)!=0;.
126d0 20 20 7d 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d    }.  pIn2 = &aM
126e0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69  em[pOp->p2];.  i
126f0 66 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26  f( pIn2->flags &
12700 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
12710 20 76 32 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65   v2 = 2;.  }else
12720 7b 0a 20 20 20 20 76 32 20 3d 20 73 71 6c 69 74  {.    v2 = sqlit
12730 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
12740 49 6e 32 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 69  In2)!=0;.  }.  i
12750 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
12760 4f 50 5f 41 6e 64 20 29 7b 0a 20 20 20 20 73 74  OP_And ){.    st
12770 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67  atic const unsig
12780 6e 65 64 20 63 68 61 72 20 61 6e 64 5f 6c 6f 67  ned char and_log
12790 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c 20 30  ic[] = { 0, 0, 0
127a0 2c 20 30 2c 20 31 2c 20 32 2c 20 30 2c 20 32 2c  , 0, 1, 2, 0, 2,
127b0 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 61   2 };.    v1 = a
127c0 6e 64 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32  nd_logic[v1*3+v2
127d0 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  ];.  }else{.    
127e0 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73  static const uns
127f0 69 67 6e 65 64 20 63 68 61 72 20 6f 72 5f 6c 6f  igned char or_lo
12800 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c 20  gic[] = { 0, 1, 
12810 32 2c 20 31 2c 20 31 2c 20 31 2c 20 32 2c 20 31  2, 1, 1, 1, 2, 1
12820 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20  , 2 };.    v1 = 
12830 6f 72 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32  or_logic[v1*3+v2
12840 5d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20  ];.  }.  pOut = 
12850 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
12860 20 20 69 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20    if( v1==2 ){. 
12870 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
12880 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c  g(pOut, MEM_Null
12890 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
128a0 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a  pOut->u.i = v1;.
128b0 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
128c0 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
128d0 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
128e0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  }../* Opcode: No
128f0 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
12900 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
12910 3d 20 21 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49  = !r[P1].**.** I
12920 6e 74 65 72 70 72 65 74 20 74 68 65 20 76 61 6c  nterpret the val
12930 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
12940 31 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76  1 as a boolean v
12950 61 6c 75 65 2e 20 20 53 74 6f 72 65 20 74 68 65  alue.  Store the
12960 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70  .** boolean comp
12970 6c 65 6d 65 6e 74 20 69 6e 20 72 65 67 69 73 74  lement in regist
12980 65 72 20 50 32 2e 20 20 49 66 20 74 68 65 20 76  er P2.  If the v
12990 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
129a0 20 50 31 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c   P1 is .** NULL,
129b0 20 74 68 65 6e 20 61 20 4e 55 4c 4c 20 69 73 20   then a NULL is 
129c0 73 74 6f 72 65 64 20 69 6e 20 50 32 2e 0a 2a 2f  stored in P2..*/
129d0 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20  .case OP_Not: { 
129e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
129f0 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54  * same as TK_NOT
12a00 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20  , in1, out2 */. 
12a10 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
12a20 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p1];.  pOut =
12a30 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
12a40 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
12a50 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
12a60 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
12a70 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  gs & MEM_Null)==
12a80 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  0 ){.    pOut->f
12a90 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
12aa0 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
12ab0 21 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56  !sqlite3VdbeIntV
12ac0 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 7d 0a  alue(pIn1);.  }.
12ad0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
12ae0 70 63 6f 64 65 3a 20 42 69 74 4e 6f 74 20 50 31  pcode: BitNot P1
12af0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
12b00 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 20 7e 72  opsis: r[P1]= ~r
12b10 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72  [P1].**.** Inter
12b20 70 72 65 74 20 74 68 65 20 63 6f 6e 74 65 6e 74  pret the content
12b30 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
12b40 61 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  as an integer.  
12b50 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20 6f 6e 65  Store the.** one
12b60 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66 20  s-complement of 
12b70 74 68 65 20 50 31 20 76 61 6c 75 65 20 69 6e 74  the P1 value int
12b80 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20  o register P2.  
12b90 49 66 20 50 31 20 68 6f 6c 64 73 0a 2a 2a 20 61  If P1 holds.** a
12ba0 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65   NULL then store
12bb0 20 61 20 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a   a NULL in P2..*
12bc0 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4e 6f 74  /.case OP_BitNot
12bd0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
12be0 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49  /* same as TK_BI
12bf0 54 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20  TNOT, in1, out2 
12c00 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
12c10 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f  m[pOp->p1];.  pO
12c20 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
12c30 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  p2];.  sqlite3Vd
12c40 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
12c50 74 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  t);.  if( (pIn1-
12c60 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
12c70 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 4f 75  l)==0 ){.    pOu
12c80 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  t->flags = MEM_I
12c90 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  nt;.    pOut->u.
12ca0 69 20 3d 20 7e 73 71 6c 69 74 65 33 56 64 62 65  i = ~sqlite3Vdbe
12cb0 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a  IntValue(pIn1);.
12cc0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
12cd0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 6e 63 65 20  /* Opcode: Once 
12ce0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
12cf0 2a 20 49 66 20 74 68 65 20 50 31 20 76 61 6c 75  * If the P1 valu
12d00 65 20 69 73 20 65 71 75 61 6c 20 74 6f 20 74 68  e is equal to th
12d10 65 20 50 31 20 76 61 6c 75 65 20 6f 6e 20 74 68  e P1 value on th
12d20 65 20 4f 50 5f 49 6e 69 74 20 6f 70 63 6f 64 65  e OP_Init opcode
12d30 20 61 74 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69   at.** instructi
12d40 6f 6e 20 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20  on 0, then jump 
12d50 74 6f 20 50 32 2e 20 20 49 66 20 74 68 65 20 74  to P2.  If the t
12d60 77 6f 20 50 31 20 76 61 6c 75 65 73 20 64 69 66  wo P1 values dif
12d70 66 65 72 2c 20 74 68 65 6e 0a 2a 2a 20 73 65 74  fer, then.** set
12d80 20 74 68 65 20 50 31 20 76 61 6c 75 65 20 6f 6e   the P1 value on
12d90 20 74 68 69 73 20 6f 70 63 6f 64 65 20 74 6f 20   this opcode to 
12da0 65 71 75 61 6c 20 74 68 65 20 50 31 20 76 61 6c  equal the P1 val
12db0 75 65 20 6f 6e 20 74 68 65 20 4f 50 5f 49 6e 69  ue on the OP_Ini
12dc0 74 0a 2a 2a 20 61 6e 64 20 66 61 6c 6c 20 74 68  t.** and fall th
12dd0 72 6f 75 67 68 2e 0a 2a 2f 0a 63 61 73 65 20 4f  rough..*/.case O
12de0 50 5f 4f 6e 63 65 3a 20 7b 20 20 20 20 20 20 20  P_Once: {       
12df0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
12e00 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 4f  .  assert( p->aO
12e10 70 5b 30 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  p[0].opcode==OP_
12e20 49 6e 69 74 20 29 3b 0a 20 20 56 64 62 65 42 72  Init );.  VdbeBr
12e30 61 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 61 4f 70  anchTaken(p->aOp
12e40 5b 30 5d 2e 70 31 3d 3d 70 4f 70 2d 3e 70 31 2c  [0].p1==pOp->p1,
12e50 20 32 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 4f   2);.  if( p->aO
12e60 70 5b 30 5d 2e 70 31 3d 3d 70 4f 70 2d 3e 70 31  p[0].p1==pOp->p1
12e70 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d   ){.    goto jum
12e80 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65  p_to_p2;.  }else
12e90 7b 0a 20 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20  {.    pOp->p1 = 
12ea0 70 2d 3e 61 4f 70 5b 30 5d 2e 70 31 3b 0a 20 20  p->aOp[0].p1;.  
12eb0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
12ec0 20 4f 70 63 6f 64 65 3a 20 49 66 20 50 31 20 50   Opcode: If P1 P
12ed0 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a  2 P3 * *.**.** J
12ee0 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
12ef0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
12f00 65 72 20 50 31 20 69 73 20 74 72 75 65 2e 20 20  er P1 is true.  
12f10 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20  The value.** is 
12f20 63 6f 6e 73 69 64 65 72 65 64 20 74 72 75 65 20  considered true 
12f30 69 66 20 69 74 20 69 73 20 6e 75 6d 65 72 69 63  if it is numeric
12f40 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20   and non-zero.  
12f50 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20  If the value.** 
12f60 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68  in P1 is NULL th
12f70 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  en take the jump
12f80 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20   if and only if 
12f90 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a  P3 is non-zero..
12fa0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  */./* Opcode: If
12fb0 4e 6f 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  Not P1 P2 P3 * *
12fc0 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50  .**.** Jump to P
12fd0 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  2 if the value i
12fe0 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
12ff0 20 46 61 6c 73 65 2e 20 20 54 68 65 20 76 61 6c   False.  The val
13000 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65  ue.** is conside
13010 72 65 64 20 66 61 6c 73 65 20 69 66 20 69 74 20  red false if it 
13020 68 61 73 20 61 20 6e 75 6d 65 72 69 63 20 76 61  has a numeric va
13030 6c 75 65 20 6f 66 20 7a 65 72 6f 2e 20 20 49 66  lue of zero.  If
13040 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e   the value.** in
13050 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e   P1 is NULL then
13060 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69   take the jump i
13070 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 50 33  f and only if P3
13080 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f   is non-zero..*/
13090 0a 63 61 73 65 20 4f 50 5f 49 66 3a 20 20 20 20  .case OP_If:    
130a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
130b0 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 63 61 73  jump, in1 */.cas
130c0 65 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b 20 20 20  e OP_IfNot: {   
130d0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
130e0 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 63  , in1 */.  int c
130f0 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
13100 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
13110 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
13120 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 63  EM_Null ){.    c
13130 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 65   = pOp->p3;.  }e
13140 6c 73 65 7b 0a 23 69 66 64 65 66 20 53 51 4c 49  lse{.#ifdef SQLI
13150 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
13160 5f 50 4f 49 4e 54 0a 20 20 20 20 63 20 3d 20 73  _POINT.    c = s
13170 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
13180 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 23 65 6c  ue(pIn1)!=0;.#el
13190 73 65 0a 20 20 20 20 63 20 3d 20 73 71 6c 69 74  se.    c = sqlit
131a0 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28  e3VdbeRealValue(
131b0 70 49 6e 31 29 21 3d 30 2e 30 3b 0a 23 65 6e 64  pIn1)!=0.0;.#end
131c0 69 66 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  if.    if( pOp->
131d0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 66 4e 6f 74  opcode==OP_IfNot
131e0 20 29 20 63 20 3d 20 21 63 3b 0a 20 20 7d 0a 20   ) c = !c;.  }. 
131f0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
13200 28 63 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28  (c!=0, 2);.  if(
13210 20 63 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a   c ){.    goto j
13220 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20  ump_to_p2;.  }. 
13230 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
13240 63 6f 64 65 3a 20 49 73 4e 75 6c 6c 20 50 31 20  code: IsNull P1 
13250 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
13260 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3d 3d  psis: if r[P1]==
13270 4e 55 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  NULL goto P2.**.
13280 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66  ** Jump to P2 if
13290 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
132a0 67 69 73 74 65 72 20 50 31 20 69 73 20 4e 55 4c  gister P1 is NUL
132b0 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73  L..*/.case OP_Is
132c0 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20  Null: {         
132d0 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
132e0 5f 49 53 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69  _ISNULL, jump, i
132f0 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
13300 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
13310 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
13320 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
13330 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 2c 20 32   MEM_Null)!=0, 2
13340 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
13350 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
13360 29 21 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f  )!=0 ){.    goto
13370 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
13380 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
13390 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c 20  Opcode: NotNull 
133a0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
133b0 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31  ynopsis: if r[P1
133c0 5d 21 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50 32 0a  ]!=NULL goto P2.
133d0 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32  **.** Jump to P2
133e0 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   if the value in
133f0 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
13400 6e 6f 74 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a 63  not NULL.  .*/.c
13410 61 73 65 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a 20  ase OP_NotNull: 
13420 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
13430 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 4e 55  same as TK_NOTNU
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 3d 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 3d 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 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20  e: Column P1 P2 
13500 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
13510 70 73 69 73 3a 20 72 5b 50 33 5d 3d 50 58 0a 2a  psis: r[P3]=PX.*
13520 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
13530 68 65 20 64 61 74 61 20 74 68 61 74 20 63 75 72  he data that cur
13540 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f  sor P1 points to
13550 20 61 73 20 61 20 73 74 72 75 63 74 75 72 65 20   as a structure 
13560 62 75 69 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 74  built using.** t
13570 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e  he MakeRecord in
13580 73 74 72 75 63 74 69 6f 6e 2e 20 20 28 53 65 65  struction.  (See
13590 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20   the MakeRecord 
135a0 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74  opcode for addit
135b0 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d 61  ional.** informa
135c0 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 66  tion about the f
135d0 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 64 61 74  ormat of the dat
135e0 61 2e 29 20 20 45 78 74 72 61 63 74 20 74 68 65  a.)  Extract the
135f0 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a   P2-th column.**
13600 20 66 72 6f 6d 20 74 68 69 73 20 72 65 63 6f 72   from this recor
13610 64 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65  d.  If there are
13620 20 6c 65 73 73 20 74 68 61 74 20 28 50 32 2b 31   less that (P2+1
13630 29 20 0a 2a 2a 20 76 61 6c 75 65 73 20 69 6e 20  ) .** values in 
13640 74 68 65 20 72 65 63 6f 72 64 2c 20 65 78 74 72  the record, extr
13650 61 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  act a NULL..**.*
13660 2a 20 54 68 65 20 76 61 6c 75 65 20 65 78 74 72  * The value extr
13670 61 63 74 65 64 20 69 73 20 73 74 6f 72 65 64 20  acted is stored 
13680 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
13690 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f 6c  **.** If the col
136a0 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 66 65 77  umn contains few
136b0 65 72 20 74 68 61 6e 20 50 32 20 66 69 65 6c 64  er than P2 field
136c0 73 2c 20 74 68 65 6e 20 65 78 74 72 61 63 74 20  s, then extract 
136d0 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20  a NULL.  Or,.** 
136e0 69 66 20 74 68 65 20 50 34 20 61 72 67 75 6d 65  if the P4 argume
136f0 6e 74 20 69 73 20 61 20 50 34 5f 4d 45 4d 20 75  nt is a P4_MEM u
13700 73 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  se the value of 
13710 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20  the P4 argument 
13720 61 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74  as.** the result
13730 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
13740 50 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45  PFLAG_CLEARCACHE
13750 20 62 69 74 20 69 73 20 73 65 74 20 6f 6e 20 50   bit is set on P
13760 35 20 61 6e 64 20 50 31 20 69 73 20 61 20 70 73  5 and P1 is a ps
13770 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f  eudo-table curso
13780 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63  r,.** then the c
13790 61 63 68 65 20 6f 66 20 74 68 65 20 63 75 72 73  ache of the curs
137a0 6f 72 20 69 73 20 72 65 73 65 74 20 70 72 69 6f  or is reset prio
137b0 72 20 74 6f 20 65 78 74 72 61 63 74 69 6e 67 20  r to extracting 
137c0 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 54  the column..** T
137d0 68 65 20 66 69 72 73 74 20 4f 50 5f 43 6f 6c 75  he first OP_Colu
137e0 6d 6e 20 61 67 61 69 6e 73 74 20 61 20 70 73 65  mn against a pse
137f0 75 64 6f 2d 74 61 62 6c 65 20 61 66 74 65 72 20  udo-table after 
13800 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
13810 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 72 65 67 69   content.** regi
13820 73 74 65 72 20 68 61 73 20 63 68 61 6e 67 65 64  ster has changed
13830 20 73 68 6f 75 6c 64 20 68 61 76 65 20 74 68 69   should have thi
13840 73 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a  s bit set..**.**
13850 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c   If the OPFLAG_L
13860 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46  ENGTHARG and OPF
13870 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20 62 69  LAG_TYPEOFARG bi
13880 74 73 20 61 72 65 20 73 65 74 20 6f 6e 20 50 35  ts are set on P5
13890 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 72 65 73   when.** the res
138a0 75 6c 74 20 69 73 20 67 75 61 72 61 6e 74 65 65  ult is guarantee
138b0 64 20 74 6f 20 6f 6e 6c 79 20 62 65 20 75 73 65  d to only be use
138c0 64 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e  d as the argumen
138d0 74 20 6f 66 20 61 20 6c 65 6e 67 74 68 28 29 0a  t of a length().
138e0 2a 2a 20 6f 72 20 74 79 70 65 6f 66 28 29 20 66  ** or typeof() f
138f0 75 6e 63 74 69 6f 6e 2c 20 72 65 73 70 65 63 74  unction, respect
13900 69 76 65 6c 79 2e 20 20 54 68 65 20 6c 6f 61 64  ively.  The load
13910 69 6e 67 20 6f 66 20 6c 61 72 67 65 20 62 6c 6f  ing of large blo
13920 62 73 20 63 61 6e 20 62 65 0a 2a 2a 20 73 6b 69  bs can be.** ski
13930 70 70 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28  pped for length(
13940 29 20 61 6e 64 20 61 6c 6c 20 63 6f 6e 74 65 6e  ) and all conten
13950 74 20 6c 6f 61 64 69 6e 67 20 63 61 6e 20 62 65  t loading can be
13960 20 73 6b 69 70 70 65 64 20 66 6f 72 20 74 79 70   skipped for typ
13970 65 6f 66 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  eof()..*/.case O
13980 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 69 6e  P_Column: {.  in
13990 74 20 70 32 3b 20 20 20 20 20 20 20 20 20 20 20  t p2;           
139a0 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65   /* column numbe
139b0 72 20 74 6f 20 72 65 74 72 69 65 76 65 20 2a 2f  r to retrieve */
139c0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
139d0 43 3b 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42  C;    /* The VDB
139e0 45 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 42 74  E cursor */.  Bt
139f0 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 20 20  Cursor *pCrsr;  
13a00 20 2f 2a 20 54 68 65 20 42 54 72 65 65 20 63 75   /* The BTree cu
13a10 72 73 6f 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61  rsor */.  u32 *a
13a20 4f 66 66 73 65 74 3b 20 20 20 20 20 20 2f 2a 20  Offset;      /* 
13a30 61 4f 66 66 73 65 74 5b 69 5d 20 69 73 20 6f 66  aOffset[i] is of
13a40 66 73 65 74 20 74 6f 20 73 74 61 72 74 20 6f 66  fset to start of
13a50 20 64 61 74 61 20 66 6f 72 20 69 2d 74 68 20 63   data for i-th c
13a60 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6c  olumn */.  int l
13a70 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  en;           /*
13a80 20 54 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74   The length of t
13a90 68 65 20 73 65 72 69 61 6c 69 7a 65 64 20 64 61  he serialized da
13aa0 74 61 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  ta for the colum
13ab0 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20  n */.  int i;   
13ac0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
13ad0 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4d  p counter */.  M
13ae0 65 6d 20 2a 70 44 65 73 74 3b 20 20 20 20 20 20  em *pDest;      
13af0 20 20 2f 2a 20 57 68 65 72 65 20 74 6f 20 77 72    /* Where to wr
13b00 69 74 65 20 74 68 65 20 65 78 74 72 61 63 74 65  ite the extracte
13b10 64 20 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d  d value */.  Mem
13b20 20 73 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   sMem;          
13b30 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74  /* For storing t
13b40 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20  he record being 
13b50 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e  decoded */.  con
13b60 73 74 20 75 38 20 2a 7a 44 61 74 61 3b 20 20 20  st u8 *zData;   
13b70 2f 2a 20 50 61 72 74 20 6f 66 20 74 68 65 20 72  /* Part of the r
13b80 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f  ecord being deco
13b90 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75  ded */.  const u
13ba0 38 20 2a 7a 48 64 72 3b 20 20 20 20 2f 2a 20 4e  8 *zHdr;    /* N
13bb0 65 78 74 20 75 6e 70 61 72 73 65 64 20 62 79 74  ext unparsed byt
13bc0 65 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20  e of the header 
13bd0 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a  */.  const u8 *z
13be0 45 6e 64 48 64 72 3b 20 2f 2a 20 50 6f 69 6e 74  EndHdr; /* Point
13bf0 65 72 20 74 6f 20 66 69 72 73 74 20 62 79 74 65  er to first byte
13c00 20 61 66 74 65 72 20 74 68 65 20 68 65 61 64 65   after the heade
13c10 72 20 2a 2f 0a 20 20 75 33 32 20 6f 66 66 73 65  r */.  u32 offse
13c20 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 66 66  t;        /* Off
13c30 73 65 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74  set into the dat
13c40 61 20 2a 2f 0a 20 20 75 36 34 20 6f 66 66 73 65  a */.  u64 offse
13c50 74 36 34 3b 20 20 20 20 20 20 2f 2a 20 36 34 2d  t64;      /* 64-
13c60 62 69 74 20 6f 66 66 73 65 74 20 2a 2f 0a 20 20  bit offset */.  
13c70 75 33 32 20 61 76 61 69 6c 3b 20 20 20 20 20 20  u32 avail;      
13c80 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
13c90 62 79 74 65 73 20 6f 66 20 61 76 61 69 6c 61 62  bytes of availab
13ca0 6c 65 20 64 61 74 61 20 2a 2f 0a 20 20 75 33 32  le data */.  u32
13cb0 20 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   t;             
13cc0 2f 2a 20 41 20 74 79 70 65 20 63 6f 64 65 20 66  /* A type code f
13cd0 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 20 68  rom the record h
13ce0 65 61 64 65 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a  eader */.  Mem *
13cf0 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  pReg;         /*
13d00 20 50 73 65 75 64 6f 54 61 62 6c 65 20 69 6e 70   PseudoTable inp
13d10 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 0a  ut register */..
13d20 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
13d30 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 32 20 3d  pOp->p1];.  p2 =
13d40 20 70 4f 70 2d 3e 70 32 3b 0a 0a 20 20 2f 2a 20   pOp->p2;..  /* 
13d50 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 63 61  If the cursor ca
13d60 63 68 65 20 69 73 20 73 74 61 6c 65 2c 20 62 72  che is stale, br
13d70 69 6e 67 20 69 74 20 75 70 2d 74 6f 2d 64 61 74  ing it up-to-dat
13d80 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69  e */.  rc = sqli
13d90 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76  te3VdbeCursorMov
13da0 65 74 6f 28 26 70 43 2c 20 26 70 32 29 3b 0a 20  eto(&pC, &p2);. 
13db0 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
13dc0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
13dd0 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  r;..  assert( pO
13de0 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
13df0 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p3<=(p->nMem+1 -
13e00 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
13e10 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b    pDest = &aMem[
13e20 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41  pOp->p3];.  memA
13e30 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
13e40 70 44 65 73 74 29 3b 0a 20 20 61 73 73 65 72 74  pDest);.  assert
13e50 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
13e60 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
13e70 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
13e80 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
13e90 74 28 20 70 32 3c 70 43 2d 3e 6e 46 69 65 6c 64  t( p2<pC->nField
13ea0 20 29 3b 0a 20 20 61 4f 66 66 73 65 74 20 3d 20   );.  aOffset = 
13eb0 70 43 2d 3e 61 4f 66 66 73 65 74 3b 0a 20 20 61  pC->aOffset;.  a
13ec0 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
13ed0 79 70 65 21 3d 43 55 52 54 59 50 45 5f 56 54 41  ype!=CURTYPE_VTA
13ee0 42 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  B );.  assert( p
13ef0 43 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52  C->eCurType!=CUR
13f00 54 59 50 45 5f 50 53 45 55 44 4f 20 7c 7c 20 70  TYPE_PSEUDO || p
13f10 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20  C->nullRow );.  
13f20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
13f30 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f 53 4f  Type!=CURTYPE_SO
13f40 52 54 45 52 20 29 3b 0a 0a 20 20 69 66 28 20 70  RTER );..  if( p
13f50 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 21 3d  C->cacheStatus!=
13f60 70 2d 3e 63 61 63 68 65 43 74 72 20 29 7b 20 20  p->cacheCtr ){  
13f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
13f80 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d  OPTIMIZATION-IF-
13f90 46 41 4c 53 45 2a 2f 0a 20 20 20 20 69 66 28 20  FALSE*/.    if( 
13fa0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  pC->nullRow ){. 
13fb0 20 20 20 20 20 69 66 28 20 70 43 2d 3e 65 43 75       if( pC->eCu
13fc0 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 50  rType==CURTYPE_P
13fd0 53 45 55 44 4f 20 29 7b 0a 20 20 20 20 20 20 20  SEUDO ){.       
13fe0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e   assert( pC->uc.
13ff0 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3e 30  pseudoTableReg>0
14000 20 29 3b 0a 20 20 20 20 20 20 20 20 70 52 65 67   );.        pReg
14010 20 3d 20 26 61 4d 65 6d 5b 70 43 2d 3e 75 63 2e   = &aMem[pC->uc.
14020 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 5d 3b  pseudoTableReg];
14030 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
14040 20 70 52 65 67 2d 3e 66 6c 61 67 73 20 26 20 4d   pReg->flags & M
14050 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 20  EM_Blob );.     
14060 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
14070 56 61 6c 69 64 28 70 52 65 67 29 20 29 3b 0a 20  Valid(pReg) );. 
14080 20 20 20 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f         pC->paylo
14090 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e 73 7a 52  adSize = pC->szR
140a0 6f 77 20 3d 20 61 76 61 69 6c 20 3d 20 70 52 65  ow = avail = pRe
140b0 67 2d 3e 6e 3b 0a 20 20 20 20 20 20 20 20 70 43  g->n;.        pC
140c0 2d 3e 61 52 6f 77 20 3d 20 28 75 38 2a 29 70 52  ->aRow = (u8*)pR
140d0 65 67 2d 3e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c  eg->z;.      }el
140e0 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  se{.        sqli
140f0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
14100 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20  l(pDest);.      
14110 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
14120 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20  _out;.      }.  
14130 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70    }else{.      p
14140 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43  Crsr = pC->uc.pC
14150 75 72 73 6f 72 3b 0a 20 20 20 20 20 20 61 73 73  ursor;.      ass
14160 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
14170 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
14180 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
14190 28 20 70 43 72 73 72 20 29 3b 0a 20 20 20 20 20  ( pCrsr );.     
141a0 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
141b0 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c  BtreeCursorIsVal
141c0 69 64 28 70 43 72 73 72 29 20 29 3b 0a 20 20 20  id(pCrsr) );.   
141d0 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69     pC->payloadSi
141e0 7a 65 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  ze = sqlite3Btre
141f0 65 50 61 79 6c 6f 61 64 53 69 7a 65 28 70 43 72  ePayloadSize(pCr
14200 73 72 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 61  sr);.      pC->a
14210 52 6f 77 20 3d 20 73 71 6c 69 74 65 33 42 74 72  Row = sqlite3Btr
14220 65 65 50 61 79 6c 6f 61 64 46 65 74 63 68 28 70  eePayloadFetch(p
14230 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20  Crsr, &avail);. 
14240 20 20 20 20 20 61 73 73 65 72 74 28 20 61 76 61       assert( ava
14250 69 6c 3c 3d 36 35 35 33 36 20 29 3b 20 20 2f 2a  il<=65536 );  /*
14260 20 4d 61 78 69 6d 75 6d 20 70 61 67 65 20 73 69   Maximum page si
14270 7a 65 20 69 73 20 36 34 4b 69 42 20 2a 2f 0a 20  ze is 64KiB */. 
14280 20 20 20 20 20 69 66 28 20 70 43 2d 3e 70 61 79       if( pC->pay
14290 6c 6f 61 64 53 69 7a 65 20 3c 3d 20 28 75 33 32  loadSize <= (u32
142a0 29 61 76 61 69 6c 20 29 7b 0a 20 20 20 20 20 20  )avail ){.      
142b0 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 70 43    pC->szRow = pC
142c0 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20  ->payloadSize;. 
142d0 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70       }else if( p
142e0 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3e  C->payloadSize >
142f0 20 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74   (u32)db->aLimit
14300 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
14310 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 20  NGTH] ){.       
14320 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
14330 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
14340 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20      pC->szRow = 
14350 61 76 61 69 6c 3b 0a 20 20 20 20 20 20 7d 0a 20  avail;.      }. 
14360 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 63 61 63     }.    pC->cac
14370 68 65 53 74 61 74 75 73 20 3d 20 70 2d 3e 63 61  heStatus = p->ca
14380 63 68 65 43 74 72 3b 0a 20 20 20 20 70 43 2d 3e  cheCtr;.    pC->
14390 69 48 64 72 4f 66 66 73 65 74 20 3d 20 67 65 74  iHdrOffset = get
143a0 56 61 72 69 6e 74 33 32 28 70 43 2d 3e 61 52 6f  Varint32(pC->aRo
143b0 77 2c 20 6f 66 66 73 65 74 29 3b 0a 20 20 20 20  w, offset);.    
143c0 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 3d  pC->nHdrParsed =
143d0 20 30 3b 0a 20 20 20 20 61 4f 66 66 73 65 74 5b   0;.    aOffset[
143e0 30 5d 20 3d 20 6f 66 66 73 65 74 3b 0a 0a 0a 20  0] = offset;... 
143f0 20 20 20 69 66 28 20 61 76 61 69 6c 3c 6f 66 66     if( avail<off
14400 73 65 74 20 29 7b 20 20 20 20 20 20 2f 2a 4f 50  set ){      /*OP
14410 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41  TIMIZATION-IF-FA
14420 4c 53 45 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 70  LSE*/.      /* p
14430 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20 6e 6f 74  C->aRow does not
14440 20 68 61 76 65 20 74 6f 20 68 6f 6c 64 20 74 68   have to hold th
14450 65 20 65 6e 74 69 72 65 20 72 6f 77 2c 20 62 75  e entire row, bu
14460 74 20 69 74 20 64 6f 65 73 20 61 74 20 6c 65 61  t it does at lea
14470 73 74 0a 20 20 20 20 20 20 2a 2a 20 6e 65 65 64  st.      ** need
14480 20 74 6f 20 63 6f 76 65 72 20 74 68 65 20 68 65   to cover the he
14490 61 64 65 72 20 6f 66 20 74 68 65 20 72 65 63 6f  ader of the reco
144a0 72 64 2e 20 20 49 66 20 70 43 2d 3e 61 52 6f 77  rd.  If pC->aRow
144b0 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69   does not contai
144c0 6e 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 63  n.      ** the c
144d0 6f 6d 70 6c 65 74 65 20 68 65 61 64 65 72 2c 20  omplete header, 
144e0 74 68 65 6e 20 73 65 74 20 69 74 20 74 6f 20 7a  then set it to z
144f0 65 72 6f 2c 20 66 6f 72 63 69 6e 67 20 74 68 65  ero, forcing the
14500 20 68 65 61 64 65 72 20 74 6f 20 62 65 0a 20 20   header to be.  
14510 20 20 20 20 2a 2a 20 64 79 6e 61 6d 69 63 61 6c      ** dynamical
14520 6c 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 2a 2f  ly allocated. */
14530 0a 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20  .      pC->aRow 
14540 3d 20 30 3b 0a 20 20 20 20 20 20 70 43 2d 3e 73  = 0;.      pC->s
14550 7a 52 6f 77 20 3d 20 30 3b 0a 0a 20 20 20 20 20  zRow = 0;..     
14560 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 20   /* Make sure a 
14570 63 6f 72 72 75 70 74 20 64 61 74 61 62 61 73 65  corrupt database
14580 20 68 61 73 20 6e 6f 74 20 67 69 76 65 6e 20 75   has not given u
14590 73 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 68 65  s an oversize he
145a0 61 64 65 72 2e 0a 20 20 20 20 20 20 2a 2a 20 44  ader..      ** D
145b0 6f 20 74 68 69 73 20 6e 6f 77 20 74 6f 20 61 76  o this now to av
145c0 6f 69 64 20 61 6e 20 6f 76 65 72 73 69 7a 65 20  oid an oversize 
145d0 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
145e0 6e 2e 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20  n..      **.    
145f0 20 20 2a 2a 20 54 79 70 65 20 65 6e 74 72 69 65    ** Type entrie
14600 73 20 63 61 6e 20 62 65 20 62 65 74 77 65 65 6e  s can be between
14610 20 31 20 61 6e 64 20 35 20 62 79 74 65 73 20 65   1 and 5 bytes e
14620 61 63 68 2e 20 20 42 75 74 20 34 20 61 6e 64 20  ach.  But 4 and 
14630 35 20 62 79 74 65 0a 20 20 20 20 20 20 2a 2a 20  5 byte.      ** 
14640 74 79 70 65 73 20 75 73 65 20 73 6f 20 6d 75 63  types use so muc
14650 68 20 64 61 74 61 20 73 70 61 63 65 20 74 68 61  h data space tha
14660 74 20 74 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79  t there can only
14670 20 62 65 20 34 30 39 36 20 61 6e 64 20 33 32 20   be 4096 and 32 
14680 6f 66 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 6d  of.      ** them
14690 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
146a0 20 53 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20   So the maximum 
146b0 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20 72 65  header length re
146c0 73 75 6c 74 73 20 66 72 6f 6d 20 61 0a 20 20 20  sults from a.   
146d0 20 20 20 2a 2a 20 33 2d 62 79 74 65 20 74 79 70     ** 3-byte typ
146e0 65 20 66 6f 72 20 65 61 63 68 20 6f 66 20 74 68  e for each of th
146f0 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 33 32 37  e maximum of 327
14700 36 38 20 63 6f 6c 75 6d 6e 73 20 70 6c 75 73 20  68 columns plus 
14710 74 68 72 65 65 0a 20 20 20 20 20 20 2a 2a 20 65  three.      ** e
14720 78 74 72 61 20 62 79 74 65 73 20 66 6f 72 20 74  xtra bytes for t
14730 68 65 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68  he header length
14740 20 69 74 73 65 6c 66 2e 20 20 33 32 37 36 38 2a   itself.  32768*
14750 33 20 2b 20 33 20 3d 20 39 38 33 30 37 2e 0a 20  3 + 3 = 98307.. 
14760 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66       */.      if
14770 28 20 6f 66 66 73 65 74 20 3e 20 39 38 33 30 37  ( offset > 98307
14780 20 7c 7c 20 6f 66 66 73 65 74 20 3e 20 70 43 2d   || offset > pC-
14790 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 29 7b 0a  >payloadSize ){.
147a0 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
147b0 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54  ITE_CORRUPT_BKPT
147c0 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  ;.        goto a
147d0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
147e0 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  r;.      }.    }
147f0 65 6c 73 65 20 69 66 28 20 6f 66 66 73 65 74 3e  else if( offset>
14800 30 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54  0 ){ /*OPTIMIZAT
14810 49 4f 4e 2d 49 46 2d 54 52 55 45 2a 2f 0a 20 20  ION-IF-TRUE*/.  
14820 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f      /* The follo
14830 77 69 6e 67 20 67 6f 74 6f 20 69 73 20 61 6e 20  wing goto is an 
14840 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 20 20 49  optimization.  I
14850 74 20 63 61 6e 20 62 65 20 6f 6d 69 74 74 65 64  t can be omitted
14860 20 61 6e 64 0a 20 20 20 20 20 20 2a 2a 20 65 76   and.      ** ev
14870 65 72 79 74 68 69 6e 67 20 77 69 6c 6c 20 73 74  erything will st
14880 69 6c 6c 20 77 6f 72 6b 2e 20 20 42 75 74 20 4f  ill work.  But O
14890 50 5f 43 6f 6c 75 6d 6e 20 69 73 20 6d 65 61 73  P_Column is meas
148a0 75 72 61 62 6c 79 20 66 61 73 74 65 72 0a 20 20  urably faster.  
148b0 20 20 20 20 2a 2a 20 62 79 20 73 6b 69 70 70 69      ** by skippi
148c0 6e 67 20 74 68 65 20 73 75 62 73 65 71 75 65 6e  ng the subsequen
148d0 74 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 2c 20 77  t conditional, w
148e0 68 69 63 68 20 69 73 20 61 6c 77 61 79 73 20 74  hich is always t
148f0 72 75 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  rue..      */.  
14900 20 20 20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e      zData = pC->
14910 61 52 6f 77 3b 0a 20 20 20 20 20 20 61 73 73 65  aRow;.      asse
14920 72 74 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73  rt( pC->nHdrPars
14930 65 64 3c 3d 70 32 20 29 3b 20 20 20 20 20 20 20  ed<=p2 );       
14940 20 20 2f 2a 20 43 6f 6e 64 69 74 69 6f 6e 61 6c    /* Conditional
14950 20 73 6b 69 70 70 65 64 20 2a 2f 0a 20 20 20 20   skipped */.    
14960 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
14970 5f 72 65 61 64 5f 68 65 61 64 65 72 3b 0a 20 20  _read_header;.  
14980 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61    }.  }..  /* Ma
14990 6b 65 20 73 75 72 65 20 61 74 20 6c 65 61 73 74  ke sure at least
149a0 20 74 68 65 20 66 69 72 73 74 20 70 32 2b 31 20   the first p2+1 
149b0 65 6e 74 72 69 65 73 20 6f 66 20 74 68 65 20 68  entries of the h
149c0 65 61 64 65 72 20 68 61 76 65 20 62 65 65 6e 0a  eader have been.
149d0 20 20 2a 2a 20 70 61 72 73 65 64 20 61 6e 64 20    ** parsed and 
149e0 76 61 6c 69 64 20 69 6e 66 6f 72 6d 61 74 69 6f  valid informatio
149f0 6e 20 69 73 20 69 6e 20 61 4f 66 66 73 65 74 5b  n is in aOffset[
14a00 5d 20 61 6e 64 20 70 43 2d 3e 61 54 79 70 65 5b  ] and pC->aType[
14a10 5d 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 70 43  ]..  */.  if( pC
14a20 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32  ->nHdrParsed<=p2
14a30 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68   ){.    /* If th
14a40 65 72 65 20 69 73 20 6d 6f 72 65 20 68 65 61 64  ere is more head
14a50 65 72 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72  er available for
14a60 20 70 61 72 73 69 6e 67 20 69 6e 20 74 68 65 20   parsing in the 
14a70 72 65 63 6f 72 64 2c 20 74 72 79 0a 20 20 20 20  record, try.    
14a80 2a 2a 20 74 6f 20 65 78 74 72 61 63 74 20 61 64  ** to extract ad
14a90 64 69 74 69 6f 6e 61 6c 20 66 69 65 6c 64 73 20  ditional fields 
14aa0 75 70 20 74 68 72 6f 75 67 68 20 74 68 65 20 70  up through the p
14ab0 32 2b 31 2d 74 68 20 66 69 65 6c 64 20 0a 20 20  2+1-th field .  
14ac0 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 43 2d    */.    if( pC-
14ad0 3e 69 48 64 72 4f 66 66 73 65 74 3c 61 4f 66 66  >iHdrOffset<aOff
14ae0 73 65 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20  set[0] ){.      
14af0 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 7a 44 61  /* Make sure zDa
14b00 74 61 20 70 6f 69 6e 74 73 20 74 6f 20 65 6e 6f  ta points to eno
14b10 75 67 68 20 6f 66 20 74 68 65 20 72 65 63 6f 72  ugh of the recor
14b20 64 20 74 6f 20 63 6f 76 65 72 20 74 68 65 20 68  d to cover the h
14b30 65 61 64 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20  eader. */.      
14b40 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20  if( pC->aRow==0 
14b50 29 7b 0a 20 20 20 20 20 20 20 20 6d 65 6d 73 65  ){.        memse
14b60 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69 7a 65  t(&sMem, 0, size
14b70 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20 20 20 20  of(sMem));.     
14b80 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
14b90 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28  dbeMemFromBtree(
14ba0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
14bb0 30 2c 20 61 4f 66 66 73 65 74 5b 30 5d 2c 20 26  0, aOffset[0], &
14bc0 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 69  sMem);.        i
14bd0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
14be0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
14bf0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
14c00 20 20 20 20 7a 44 61 74 61 20 3d 20 28 75 38 2a      zData = (u8*
14c10 29 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20 20 7d  )sMem.z;.      }
14c20 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 44  else{.        zD
14c30 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77 3b 0a  ata = pC->aRow;.
14c40 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20        }.  .     
14c50 20 2f 2a 20 46 69 6c 6c 20 69 6e 20 70 43 2d 3e   /* Fill in pC->
14c60 61 54 79 70 65 5b 69 5d 20 61 6e 64 20 61 4f 66  aType[i] and aOf
14c70 66 73 65 74 5b 69 5d 20 76 61 6c 75 65 73 20 74  fset[i] values t
14c80 68 72 6f 75 67 68 20 74 68 65 20 70 32 2d 74 68  hrough the p2-th
14c90 20 66 69 65 6c 64 2e 20 2a 2f 0a 20 20 20 20 6f   field. */.    o
14ca0 70 5f 63 6f 6c 75 6d 6e 5f 72 65 61 64 5f 68 65  p_column_read_he
14cb0 61 64 65 72 3a 0a 20 20 20 20 20 20 69 20 3d 20  ader:.      i = 
14cc0 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3b 0a  pC->nHdrParsed;.
14cd0 20 20 20 20 20 20 6f 66 66 73 65 74 36 34 20 3d        offset64 =
14ce0 20 61 4f 66 66 73 65 74 5b 69 5d 3b 0a 20 20 20   aOffset[i];.   
14cf0 20 20 20 7a 48 64 72 20 3d 20 7a 44 61 74 61 20     zHdr = zData 
14d00 2b 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74  + pC->iHdrOffset
14d10 3b 0a 20 20 20 20 20 20 7a 45 6e 64 48 64 72 20  ;.      zEndHdr 
14d20 3d 20 7a 44 61 74 61 20 2b 20 61 4f 66 66 73 65  = zData + aOffse
14d30 74 5b 30 5d 3b 0a 20 20 20 20 20 20 64 6f 7b 0a  t[0];.      do{.
14d40 20 20 20 20 20 20 20 20 69 66 28 20 28 74 20 3d          if( (t =
14d50 20 7a 48 64 72 5b 30 5d 29 3c 30 78 38 30 20 29   zHdr[0])<0x80 )
14d60 7b 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64 72  {.          zHdr
14d70 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 6f 66  ++;.          of
14d80 66 73 65 74 36 34 20 2b 3d 20 73 71 6c 69 74 65  fset64 += sqlite
14d90 33 56 64 62 65 4f 6e 65 42 79 74 65 53 65 72 69  3VdbeOneByteSeri
14da0 61 6c 54 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20  alTypeLen(t);.  
14db0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
14dc0 20 20 20 20 20 20 20 7a 48 64 72 20 2b 3d 20 73         zHdr += s
14dd0 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33  qlite3GetVarint3
14de0 32 28 7a 48 64 72 2c 20 26 74 29 3b 0a 20 20 20  2(zHdr, &t);.   
14df0 20 20 20 20 20 20 20 6f 66 66 73 65 74 36 34 20         offset64 
14e00 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  += sqlite3VdbeSe
14e10 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29 3b 0a  rialTypeLen(t);.
14e20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
14e30 20 20 70 43 2d 3e 61 54 79 70 65 5b 69 2b 2b 5d    pC->aType[i++]
14e40 20 3d 20 74 3b 0a 20 20 20 20 20 20 20 20 61 4f   = t;.        aO
14e50 66 66 73 65 74 5b 69 5d 20 3d 20 28 75 33 32 29  ffset[i] = (u32)
14e60 28 6f 66 66 73 65 74 36 34 20 26 20 30 78 66 66  (offset64 & 0xff
14e70 66 66 66 66 66 66 29 3b 0a 20 20 20 20 20 20 7d  ffffff);.      }
14e80 77 68 69 6c 65 28 20 69 3c 3d 70 32 20 26 26 20  while( i<=p2 && 
14e90 7a 48 64 72 3c 7a 45 6e 64 48 64 72 20 29 3b 0a  zHdr<zEndHdr );.
14ea0 0a 20 20 20 20 20 20 2f 2a 20 54 68 65 20 72 65  .      /* The re
14eb0 63 6f 72 64 20 69 73 20 63 6f 72 72 75 70 74 20  cord is corrupt 
14ec0 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20 66 6f  if any of the fo
14ed0 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 72 75 65  llowing are true
14ee0 3a 0a 20 20 20 20 20 20 2a 2a 20 28 31 29 20 74  :.      ** (1) t
14ef0 68 65 20 62 79 74 65 73 20 6f 66 20 74 68 65 20  he bytes of the 
14f00 68 65 61 64 65 72 20 65 78 74 65 6e 64 20 70 61  header extend pa
14f10 73 74 20 74 68 65 20 64 65 63 6c 61 72 65 64 20  st the declared 
14f20 68 65 61 64 65 72 20 73 69 7a 65 0a 20 20 20 20  header size.    
14f30 20 20 2a 2a 20 28 32 29 20 74 68 65 20 65 6e 74    ** (2) the ent
14f40 69 72 65 20 68 65 61 64 65 72 20 77 61 73 20 75  ire header was u
14f50 73 65 64 20 62 75 74 20 6e 6f 74 20 61 6c 6c 20  sed but not all 
14f60 64 61 74 61 20 77 61 73 20 75 73 65 64 0a 20 20  data was used.  
14f70 20 20 20 20 2a 2a 20 28 33 29 20 74 68 65 20 65      ** (3) the e
14f80 6e 64 20 6f 66 20 74 68 65 20 64 61 74 61 20 65  nd of the data e
14f90 78 74 65 6e 64 73 20 62 65 79 6f 6e 64 20 74 68  xtends beyond th
14fa0 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63  e end of the rec
14fb0 6f 72 64 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  ord..      */.  
14fc0 20 20 20 20 69 66 28 20 28 7a 48 64 72 3e 3d 7a      if( (zHdr>=z
14fd0 45 6e 64 48 64 72 20 26 26 20 28 7a 48 64 72 3e  EndHdr && (zHdr>
14fe0 7a 45 6e 64 48 64 72 20 7c 7c 20 6f 66 66 73 65  zEndHdr || offse
14ff0 74 36 34 21 3d 70 43 2d 3e 70 61 79 6c 6f 61 64  t64!=pC->payload
15000 53 69 7a 65 29 29 0a 20 20 20 20 20 20 20 7c 7c  Size)).       ||
15010 20 28 6f 66 66 73 65 74 36 34 20 3e 20 70 43 2d   (offset64 > pC-
15020 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20  >payloadSize).  
15030 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 69      ){.        i
15040 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29  f( pC->aRow==0 )
15050 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
15060 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20  elease(&sMem);. 
15070 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
15080 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b  TE_CORRUPT_BKPT;
15090 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
150a0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
150b0 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
150c0 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20   pC->nHdrParsed 
150d0 3d 20 69 3b 0a 20 20 20 20 20 20 70 43 2d 3e 69  = i;.      pC->i
150e0 48 64 72 4f 66 66 73 65 74 20 3d 20 28 75 33 32  HdrOffset = (u32
150f0 29 28 7a 48 64 72 20 2d 20 7a 44 61 74 61 29 3b  )(zHdr - zData);
15100 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61  .      if( pC->a
15110 52 6f 77 3d 3d 30 20 29 20 73 71 6c 69 74 65 33  Row==0 ) sqlite3
15120 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26  VdbeMemRelease(&
15130 73 4d 65 6d 29 3b 0a 20 20 20 20 7d 65 6c 73 65  sMem);.    }else
15140 7b 0a 20 20 20 20 20 20 74 20 3d 20 30 3b 0a 20  {.      t = 0;. 
15150 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 49 66 20     }..    /* If 
15160 61 66 74 65 72 20 74 72 79 69 6e 67 20 74 6f 20  after trying to 
15170 65 78 74 72 61 63 74 20 6e 65 77 20 65 6e 74 72  extract new entr
15180 69 65 73 20 66 72 6f 6d 20 74 68 65 20 68 65 61  ies from the hea
15190 64 65 72 2c 20 6e 48 64 72 50 61 72 73 65 64 20  der, nHdrParsed 
151a0 69 73 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20  is.    ** still 
151b0 6e 6f 74 20 75 70 20 74 6f 20 70 32 2c 20 74 68  not up to p2, th
151c0 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  at means that th
151d0 65 20 72 65 63 6f 72 64 20 68 61 73 20 66 65 77  e record has few
151e0 65 72 20 74 68 61 6e 20 70 32 0a 20 20 20 20 2a  er than p2.    *
151f0 2a 20 63 6f 6c 75 6d 6e 73 2e 20 20 53 6f 20 74  * columns.  So t
15200 68 65 20 72 65 73 75 6c 74 20 77 69 6c 6c 20 62  he result will b
15210 65 20 65 69 74 68 65 72 20 74 68 65 20 64 65 66  e either the def
15220 61 75 6c 74 20 76 61 6c 75 65 20 6f 72 20 61 20  ault value or a 
15230 4e 55 4c 4c 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  NULL..    */.   
15240 20 69 66 28 20 70 43 2d 3e 6e 48 64 72 50 61 72   if( pC->nHdrPar
15250 73 65 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20 20  sed<=p2 ){.     
15260 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
15270 3d 3d 50 34 5f 4d 45 4d 20 29 7b 0a 20 20 20 20  ==P4_MEM ){.    
15280 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
15290 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 44  emShallowCopy(pD
152a0 65 73 74 2c 20 70 4f 70 2d 3e 70 34 2e 70 4d 65  est, pOp->p4.pMe
152b0 6d 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a  m, MEM_Static);.
152c0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
152d0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
152e0 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74  MemSetNull(pDest
152f0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
15300 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
15310 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  out;.    }.  }el
15320 73 65 7b 0a 20 20 20 20 74 20 3d 20 70 43 2d 3e  se{.    t = pC->
15330 61 54 79 70 65 5b 70 32 5d 3b 0a 20 20 7d 0a 0a  aType[p2];.  }..
15340 20 20 2f 2a 20 45 78 74 72 61 63 74 20 74 68 65    /* Extract the
15350 20 63 6f 6e 74 65 6e 74 20 66 6f 72 20 74 68 65   content for the
15360 20 70 32 2b 31 2d 74 68 20 63 6f 6c 75 6d 6e 2e   p2+1-th column.
15370 20 20 43 6f 6e 74 72 6f 6c 20 63 61 6e 20 6f 6e    Control can on
15380 6c 79 0a 20 20 2a 2a 20 72 65 61 63 68 20 74 68  ly.  ** reach th
15390 69 73 20 70 6f 69 6e 74 20 69 66 20 61 4f 66 66  is point if aOff
153a0 73 65 74 5b 70 32 5d 2c 20 61 4f 66 66 73 65 74  set[p2], aOffset
153b0 5b 70 32 2b 31 5d 2c 20 61 6e 64 20 70 43 2d 3e  [p2+1], and pC->
153c0 61 54 79 70 65 5b 70 32 5d 20 61 72 65 0a 20 20  aType[p2] are.  
153d0 2a 2a 20 61 6c 6c 20 76 61 6c 69 64 2e 0a 20 20  ** all valid..  
153e0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 32 3c  */.  assert( p2<
153f0 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 29  pC->nHdrParsed )
15400 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d  ;.  assert( rc==
15410 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 61  SQLITE_OK );.  a
15420 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64  ssert( sqlite3Vd
15430 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69  beCheckMemInvari
15440 61 6e 74 73 28 70 44 65 73 74 29 20 29 3b 0a 20  ants(pDest) );. 
15450 20 69 66 28 20 56 64 62 65 4d 65 6d 44 79 6e 61   if( VdbeMemDyna
15460 6d 69 63 28 70 44 65 73 74 29 20 29 7b 0a 20 20  mic(pDest) ){.  
15470 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
15480 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a  SetNull(pDest);.
15490 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 74 3d    }.  assert( t=
154a0 3d 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 20 29  =pC->aType[p2] )
154b0 3b 0a 20 20 69 66 28 20 70 43 2d 3e 73 7a 52 6f  ;.  if( pC->szRo
154c0 77 3e 3d 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d  w>=aOffset[p2+1]
154d0 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20   ){.    /* This 
154e0 69 73 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61  is the common ca
154f0 73 65 20 77 68 65 72 65 20 74 68 65 20 64 65 73  se where the des
15500 69 72 65 64 20 63 6f 6e 74 65 6e 74 20 66 69 74  ired content fit
15510 73 20 6f 6e 20 74 68 65 20 6f 72 69 67 69 6e 61  s on the origina
15520 6c 0a 20 20 20 20 2a 2a 20 70 61 67 65 20 2d 20  l.    ** page - 
15530 77 68 65 72 65 20 74 68 65 20 63 6f 6e 74 65 6e  where the conten
15540 74 20 69 73 20 6e 6f 74 20 6f 6e 20 61 6e 20 6f  t is not on an o
15550 76 65 72 66 6c 6f 77 20 70 61 67 65 20 2a 2f 0a  verflow page */.
15560 20 20 20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e      zData = pC->
15570 61 52 6f 77 20 2b 20 61 4f 66 66 73 65 74 5b 70  aRow + aOffset[p
15580 32 5d 3b 0a 20 20 20 20 69 66 28 20 74 3c 31 32  2];.    if( t<12
15590 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
155a0 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 7a  3VdbeSerialGet(z
155b0 44 61 74 61 2c 20 74 2c 20 70 44 65 73 74 29 3b  Data, t, pDest);
155c0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
155d0 20 20 2f 2a 20 49 66 20 74 68 65 20 63 6f 6c 75    /* If the colu
155e0 6d 6e 20 76 61 6c 75 65 20 69 73 20 61 20 73 74  mn value is a st
155f0 72 69 6e 67 2c 20 77 65 20 6e 65 65 64 20 61 20  ring, we need a 
15600 70 65 72 73 69 73 74 65 6e 74 20 76 61 6c 75 65  persistent value
15610 2c 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a 20 61  , not.      ** a
15620 20 4d 45 4d 5f 45 70 68 65 6d 20 76 61 6c 75 65   MEM_Ephem value
15630 2e 20 20 54 68 69 73 20 62 72 61 6e 63 68 20 69  .  This branch i
15640 73 20 61 20 66 61 73 74 20 73 68 6f 72 74 2d 63  s a fast short-c
15650 75 74 20 74 68 61 74 20 69 73 20 65 71 75 69 76  ut that is equiv
15660 61 6c 65 6e 74 0a 20 20 20 20 20 20 2a 2a 20 74  alent.      ** t
15670 6f 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65  o calling sqlite
15680 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 29  3VdbeSerialGet()
15690 20 61 6e 64 20 73 71 6c 69 74 65 33 56 64 62 65   and sqlite3Vdbe
156a0 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 29  Deephemeralize()
156b0 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
156c0 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 31   static const u1
156d0 36 20 61 46 6c 61 67 5b 5d 20 3d 20 7b 20 4d 45  6 aFlag[] = { ME
156e0 4d 5f 42 6c 6f 62 2c 20 4d 45 4d 5f 53 74 72 7c  M_Blob, MEM_Str|
156f0 4d 45 4d 5f 54 65 72 6d 20 7d 3b 0a 20 20 20 20  MEM_Term };.    
15700 20 20 70 44 65 73 74 2d 3e 6e 20 3d 20 6c 65 6e    pDest->n = len
15710 20 3d 20 28 74 2d 31 32 29 2f 32 3b 0a 20 20 20   = (t-12)/2;.   
15720 20 20 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20     pDest->enc = 
15730 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 20 20 20 20  encoding;.      
15740 69 66 28 20 70 44 65 73 74 2d 3e 73 7a 4d 61 6c  if( pDest->szMal
15750 6c 6f 63 20 3c 20 6c 65 6e 2b 32 20 29 7b 0a 20  loc < len+2 ){. 
15760 20 20 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c         pDest->fl
15770 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
15780 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69          if( sqli
15790 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70  te3VdbeMemGrow(p
157a0 44 65 73 74 2c 20 6c 65 6e 2b 32 2c 20 30 29 20  Dest, len+2, 0) 
157b0 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
157c0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
157d0 20 20 20 20 70 44 65 73 74 2d 3e 7a 20 3d 20 70      pDest->z = p
157e0 44 65 73 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20  Dest->zMalloc;. 
157f0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d       }.      mem
15800 63 70 79 28 70 44 65 73 74 2d 3e 7a 2c 20 7a 44  cpy(pDest->z, zD
15810 61 74 61 2c 20 6c 65 6e 29 3b 0a 20 20 20 20 20  ata, len);.     
15820 20 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 5d 20 3d   pDest->z[len] =
15830 20 30 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d   0;.      pDest-
15840 3e 7a 5b 6c 65 6e 2b 31 5d 20 3d 20 30 3b 0a 20  >z[len+1] = 0;. 
15850 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67       pDest->flag
15860 73 20 3d 20 61 46 6c 61 67 5b 74 26 31 5d 3b 0a  s = aFlag[t&1];.
15870 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
15880 20 20 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20     pDest->enc = 
15890 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 20 20 2f 2a  encoding;.    /*
158a0 20 54 68 69 73 20 62 72 61 6e 63 68 20 68 61 70   This branch hap
158b0 70 65 6e 73 20 6f 6e 6c 79 20 77 68 65 6e 20 63  pens only when c
158c0 6f 6e 74 65 6e 74 20 69 73 20 6f 6e 20 6f 76 65  ontent is on ove
158d0 72 66 6c 6f 77 20 70 61 67 65 73 20 2a 2f 0a 20  rflow pages */. 
158e0 20 20 20 69 66 28 20 28 28 70 4f 70 2d 3e 70 35     if( ((pOp->p5
158f0 20 26 20 28 4f 50 46 4c 41 47 5f 4c 45 4e 47 54   & (OPFLAG_LENGT
15900 48 41 52 47 7c 4f 50 46 4c 41 47 5f 54 59 50 45  HARG|OPFLAG_TYPE
15910 4f 46 41 52 47 29 29 21 3d 30 0a 20 20 20 20 20  OFARG))!=0.     
15920 20 20 20 20 20 26 26 20 28 28 74 3e 3d 31 32 20       && ((t>=12 
15930 26 26 20 28 74 26 31 29 3d 3d 30 29 20 7c 7c 20  && (t&1)==0) || 
15940 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
15950 47 5f 54 59 50 45 4f 46 41 52 47 29 21 3d 30 29  G_TYPEOFARG)!=0)
15960 29 0a 20 20 20 20 20 7c 7c 20 28 6c 65 6e 20 3d  ).     || (len =
15970 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
15980 61 6c 54 79 70 65 4c 65 6e 28 74 29 29 3d 3d 30  alTypeLen(t))==0
15990 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 2f 2a  .    ){.      /*
159a0 20 43 6f 6e 74 65 6e 74 20 69 73 20 69 72 72 65   Content is irre
159b0 6c 65 76 61 6e 74 20 66 6f 72 0a 20 20 20 20 20  levant for.     
159c0 20 2a 2a 20 20 20 20 31 2e 20 74 68 65 20 74 79   **    1. the ty
159d0 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c  peof() function,
159e0 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 32 2e 20  .      **    2. 
159f0 74 68 65 20 6c 65 6e 67 74 68 28 58 29 20 66 75  the length(X) fu
15a00 6e 63 74 69 6f 6e 20 69 66 20 58 20 69 73 20 61  nction if X is a
15a10 20 62 6c 6f 62 2c 20 61 6e 64 0a 20 20 20 20 20   blob, and.     
15a20 20 2a 2a 20 20 20 20 33 2e 20 69 66 20 74 68 65   **    3. if the
15a30 20 63 6f 6e 74 65 6e 74 20 6c 65 6e 67 74 68 20   content length 
15a40 69 73 20 7a 65 72 6f 2e 0a 20 20 20 20 20 20 2a  is zero..      *
15a50 2a 20 53 6f 20 77 65 20 6d 69 67 68 74 20 61 73  * So we might as
15a60 20 77 65 6c 6c 20 75 73 65 20 62 6f 67 75 73 20   well use bogus 
15a70 63 6f 6e 74 65 6e 74 20 72 61 74 68 65 72 20 74  content rather t
15a80 68 61 6e 20 72 65 61 64 69 6e 67 0a 20 20 20 20  han reading.    
15a90 20 20 2a 2a 20 63 6f 6e 74 65 6e 74 20 66 72 6f    ** content fro
15aa0 6d 20 64 69 73 6b 2e 20 2a 2f 0a 20 20 20 20 20  m disk. */.     
15ab0 20 73 74 61 74 69 63 20 75 38 20 61 5a 65 72 6f   static u8 aZero
15ac0 5b 38 5d 3b 20 20 2f 2a 20 54 68 69 73 20 69 73  [8];  /* This is
15ad0 20 74 68 65 20 62 6f 67 75 73 20 63 6f 6e 74 65   the bogus conte
15ae0 6e 74 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69  nt */.      sqli
15af0 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74  te3VdbeSerialGet
15b00 28 61 5a 65 72 6f 2c 20 74 2c 20 70 44 65 73 74  (aZero, t, pDest
15b10 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
15b20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
15b30 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65  VdbeMemFromBtree
15b40 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
15b50 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 6c 65   aOffset[p2], le
15b60 6e 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20  n, pDest);.     
15b70 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
15b80 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
15b90 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
15ba0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
15bb0 65 72 69 61 6c 47 65 74 28 28 63 6f 6e 73 74 20  erialGet((const 
15bc0 75 38 2a 29 70 44 65 73 74 2d 3e 7a 2c 20 74 2c  u8*)pDest->z, t,
15bd0 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 70   pDest);.      p
15be0 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  Dest->flags &= ~
15bf0 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20 20 20 20 7d  MEM_Ephem;.    }
15c00 0a 20 20 7d 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f  .  }..op_column_
15c10 6f 75 74 3a 0a 20 20 55 50 44 41 54 45 5f 4d 41  out:.  UPDATE_MA
15c20 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74  X_BLOBSIZE(pDest
15c30 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
15c40 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65  ACE(pOp->p3, pDe
15c50 73 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  st);.  break;.}.
15c60 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 66 66 69  ./* Opcode: Affi
15c70 6e 69 74 79 20 50 31 20 50 32 20 2a 20 50 34 20  nity P1 P2 * P4 
15c80 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61  *.** Synopsis: a
15c90 66 66 69 6e 69 74 79 28 72 5b 50 31 40 50 32 5d  ffinity(r[P1@P2]
15ca0 29 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20 61 66  ).**.** Apply af
15cb0 66 69 6e 69 74 69 65 73 20 74 6f 20 61 20 72 61  finities to a ra
15cc0 6e 67 65 20 6f 66 20 50 32 20 72 65 67 69 73 74  nge of P2 regist
15cd0 65 72 73 20 73 74 61 72 74 69 6e 67 20 77 69 74  ers starting wit
15ce0 68 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  h P1..**.** P4 i
15cf0 73 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20  s a string that 
15d00 69 73 20 50 32 20 63 68 61 72 61 63 74 65 72 73  is P2 characters
15d10 20 6c 6f 6e 67 2e 20 54 68 65 20 6e 74 68 20 63   long. The nth c
15d20 68 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a  haracter of the.
15d30 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61  ** string indica
15d40 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61  tes the column a
15d50 66 66 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f  ffinity that sho
15d60 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72 20  uld be used for 
15d70 74 68 65 20 6e 74 68 0a 2a 2a 20 6d 65 6d 6f 72  the nth.** memor
15d80 79 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 72 61  y cell in the ra
15d90 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  nge..*/.case OP_
15da0 41 66 66 69 6e 69 74 79 3a 20 7b 0a 20 20 63 6f  Affinity: {.  co
15db0 6e 73 74 20 63 68 61 72 20 2a 7a 41 66 66 69 6e  nst char *zAffin
15dc0 69 74 79 3b 20 20 20 2f 2a 20 54 68 65 20 61 66  ity;   /* The af
15dd0 66 69 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70  finity to be app
15de0 6c 69 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 63  lied */.  char c
15df0 41 66 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  Aff;            
15e00 20 20 20 2f 2a 20 41 20 73 69 6e 67 6c 65 20 63     /* A single c
15e10 68 61 72 61 63 74 65 72 20 6f 66 20 61 66 66 69  haracter of affi
15e20 6e 69 74 79 20 2a 2f 0a 0a 20 20 7a 41 66 66 69  nity */..  zAffi
15e30 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  nity = pOp->p4.z
15e40 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66 66  ;.  assert( zAff
15e50 69 6e 69 74 79 21 3d 30 20 29 3b 0a 20 20 61 73  inity!=0 );.  as
15e60 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79 5b  sert( zAffinity[
15e70 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29 3b 0a 20  pOp->p2]==0 );. 
15e80 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
15e90 70 2d 3e 70 31 5d 3b 0a 20 20 77 68 69 6c 65 28  p->p1];.  while(
15ea0 20 28 63 41 66 66 20 3d 20 2a 28 7a 41 66 66 69   (cAff = *(zAffi
15eb0 6e 69 74 79 2b 2b 29 29 21 3d 30 20 29 7b 0a 20  nity++))!=0 ){. 
15ec0 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 20     assert( pIn1 
15ed0 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b 28 70 2d 3e  <= &p->aMem[(p->
15ee0 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
15ef0 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73  sor)] );.    ass
15f00 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
15f10 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 61 70 70  pIn1) );.    app
15f20 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c  lyAffinity(pIn1,
15f30 20 63 41 66 66 2c 20 65 6e 63 6f 64 69 6e 67 29   cAff, encoding)
15f40 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20  ;.    pIn1++;.  
15f50 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
15f60 20 4f 70 63 6f 64 65 3a 20 4d 61 6b 65 52 65 63   Opcode: MakeRec
15f70 6f 72 64 20 50 31 20 50 32 20 50 33 20 50 34 20  ord P1 P2 P3 P4 
15f80 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
15f90 5b 50 33 5d 3d 6d 6b 72 65 63 28 72 5b 50 31 40  [P3]=mkrec(r[P1@
15fa0 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76 65  P2]).**.** Conve
15fb0 72 74 20 50 32 20 72 65 67 69 73 74 65 72 73 20  rt P2 registers 
15fc0 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
15fd0 31 20 69 6e 74 6f 20 74 68 65 20 5b 72 65 63 6f  1 into the [reco
15fe0 72 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20 75 73  rd format].** us
15ff0 65 20 61 73 20 61 20 64 61 74 61 20 72 65 63 6f  e as a data reco
16000 72 64 20 69 6e 20 61 20 64 61 74 61 62 61 73 65  rd in a database
16010 20 74 61 62 6c 65 20 6f 72 20 61 73 20 61 20 6b   table or as a k
16020 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e 64 65  ey.** in an inde
16030 78 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d  x.  The OP_Colum
16040 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20 64 65 63  n opcode can dec
16050 6f 64 65 20 74 68 65 20 72 65 63 6f 72 64 20 6c  ode the record l
16060 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d  ater..**.** P4 m
16070 61 79 20 62 65 20 61 20 73 74 72 69 6e 67 20 74  ay be a string t
16080 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61 63  hat is P2 charac
16090 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65 20  ters long.  The 
160a0 6e 74 68 20 63 68 61 72 61 63 74 65 72 20 6f 66  nth character of
160b0 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69   the.** string i
160c0 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c  ndicates the col
160d0 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61  umn affinity tha
160e0 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64  t should be used
160f0 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20   for the nth.** 
16100 66 69 65 6c 64 20 6f 66 20 74 68 65 20 69 6e 64  field of the ind
16110 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  ex key..**.** Th
16120 65 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20 63  e mapping from c
16130 68 61 72 61 63 74 65 72 20 74 6f 20 61 66 66 69  haracter to affi
16140 6e 69 74 79 20 69 73 20 67 69 76 65 6e 20 62 79  nity is given by
16150 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   the SQLITE_AFF_
16160 0a 2a 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e  .** macros defin
16170 65 64 20 69 6e 20 73 71 6c 69 74 65 49 6e 74 2e  ed in sqliteInt.
16180 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69  h..**.** If P4 i
16190 73 20 4e 55 4c 4c 20 74 68 65 6e 20 61 6c 6c 20  s NULL then all 
161a0 69 6e 64 65 78 20 66 69 65 6c 64 73 20 68 61 76  index fields hav
161b0 65 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 42  e the affinity B
161c0 4c 4f 42 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  LOB..*/.case OP_
161d0 4d 61 6b 65 52 65 63 6f 72 64 3a 20 7b 0a 20 20  MakeRecord: {.  
161e0 75 38 20 2a 7a 4e 65 77 52 65 63 6f 72 64 3b 20  u8 *zNewRecord; 
161f0 20 20 20 20 20 20 20 2f 2a 20 41 20 62 75 66 66         /* A buff
16200 65 72 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 64  er to hold the d
16210 61 74 61 20 66 6f 72 20 74 68 65 20 6e 65 77 20  ata for the new 
16220 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20  record */.  Mem 
16230 2a 70 52 65 63 3b 20 20 20 20 20 20 20 20 20 20  *pRec;          
16240 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 65     /* The new re
16250 63 6f 72 64 20 2a 2f 0a 20 20 75 36 34 20 6e 44  cord */.  u64 nD
16260 61 74 61 3b 20 20 20 20 20 20 20 20 20 20 20 20  ata;            
16270 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
16280 74 65 73 20 6f 66 20 64 61 74 61 20 73 70 61 63  tes of data spac
16290 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 64 72 3b  e */.  int nHdr;
162a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
162b0 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
162c0 20 6f 66 20 68 65 61 64 65 72 20 73 70 61 63 65   of header space
162d0 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b   */.  i64 nByte;
162e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
162f0 44 61 74 61 20 73 70 61 63 65 20 72 65 71 75 69  Data space requi
16300 72 65 64 20 66 6f 72 20 74 68 69 73 20 72 65 63  red for this rec
16310 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20 6e 5a 65  ord */.  i64 nZe
16320 72 6f 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ro;             
16330 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72  /* Number of zer
16340 6f 20 62 79 74 65 73 20 61 74 20 74 68 65 20 65  o bytes at the e
16350 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  nd of the record
16360 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 61 72 69 6e   */.  int nVarin
16370 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
16380 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
16390 69 6e 20 61 20 76 61 72 69 6e 74 20 2a 2f 0a 20  in a varint */. 
163a0 20 75 33 32 20 73 65 72 69 61 6c 5f 74 79 70 65   u32 serial_type
163b0 3b 20 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20  ;       /* Type 
163c0 66 69 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  field */.  Mem *
163d0 70 44 61 74 61 30 3b 20 20 20 20 20 20 20 20 20  pData0;         
163e0 20 20 2f 2a 20 46 69 72 73 74 20 66 69 65 6c 64    /* First field
163f0 20 74 6f 20 62 65 20 63 6f 6d 62 69 6e 65 64 20   to be combined 
16400 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20  into the record 
16410 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74 3b  */.  Mem *pLast;
16420 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
16430 61 73 74 20 66 69 65 6c 64 20 6f 66 20 74 68 65  ast field of the
16440 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
16450 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20   nField;        
16460 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
16470 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72   fields in the r
16480 65 63 6f 72 64 20 2a 2f 0a 20 20 63 68 61 72 20  ecord */.  char 
16490 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 20 20  *zAffinity;     
164a0 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
164b0 79 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65  y string for the
164c0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
164d0 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20   file_format;   
164e0 20 20 20 20 2f 2a 20 46 69 6c 65 20 66 6f 72 6d      /* File form
164f0 61 74 20 74 6f 20 75 73 65 20 66 6f 72 20 65 6e  at to use for en
16500 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  coding */.  int 
16510 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
16520 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65 64     /* Space used
16530 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d   in zNewRecord[]
16540 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 69 6e 74   header */.  int
16550 20 6a 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   j;             
16560 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65      /* Space use
16570 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b  d in zNewRecord[
16580 5d 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 75  ] content */.  u
16590 33 32 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20  32 len;         
165a0 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20        /* Length 
165b0 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a 0a 20  of a field */.. 
165c0 20 2f 2a 20 41 73 73 75 6d 69 6e 67 20 74 68 65   /* Assuming the
165d0 20 72 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73   record contains
165e0 20 4e 20 66 69 65 6c 64 73 2c 20 74 68 65 20 72   N fields, the r
165f0 65 63 6f 72 64 20 66 6f 72 6d 61 74 20 6c 6f 6f  ecord format loo
16600 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65 20 74 68 69  ks.  ** like thi
16610 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d  s:.  **.  ** ---
16620 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16630 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16640 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16650 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16660 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c 20 68 64 72  -----.  ** | hdr
16670 2d 73 69 7a 65 20 7c 20 74 79 70 65 20 30 20 7c  -size | type 0 |
16680 20 74 79 70 65 20 31 20 7c 20 2e 2e 2e 20 7c 20   type 1 | ... | 
16690 74 79 70 65 20 4e 2d 31 20 7c 20 64 61 74 61 30  type N-1 | data0
166a0 20 7c 20 2e 2e 2e 20 7c 20 64 61 74 61 20 4e 2d   | ... | data N-
166b0 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d  1 | .  ** ------
166c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
166d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
166e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
166f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16700 2d 2d 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 61 74  --.  **.  ** Dat
16710 61 28 30 29 20 69 73 20 74 61 6b 65 6e 20 66 72  a(0) is taken fr
16720 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  om register P1. 
16730 20 44 61 74 61 28 31 29 20 63 6f 6d 65 73 20 66   Data(1) comes f
16740 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31 2b  rom register P1+
16750 31 0a 20 20 2a 2a 20 61 6e 64 20 73 6f 20 66 6f  1.  ** and so fo
16760 72 74 68 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 45  rth..  **.  ** E
16770 61 63 68 20 74 79 70 65 20 66 69 65 6c 64 20 69  ach type field i
16780 73 20 61 20 76 61 72 69 6e 74 20 72 65 70 72 65  s a varint repre
16790 73 65 6e 74 69 6e 67 20 74 68 65 20 73 65 72 69  senting the seri
167a0 61 6c 20 74 79 70 65 20 6f 66 20 74 68 65 20 0a  al type of the .
167b0 20 20 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69    ** correspondi
167c0 6e 67 20 64 61 74 61 20 65 6c 65 6d 65 6e 74 20  ng data element 
167d0 28 73 65 65 20 73 71 6c 69 74 65 33 56 64 62 65  (see sqlite3Vdbe
167e0 53 65 72 69 61 6c 54 79 70 65 28 29 29 2e 20 54  SerialType()). T
167f0 68 65 0a 20 20 2a 2a 20 68 64 72 2d 73 69 7a 65  he.  ** hdr-size
16800 20 66 69 65 6c 64 20 69 73 20 61 6c 73 6f 20 61   field is also a
16810 20 76 61 72 69 6e 74 20 77 68 69 63 68 20 69 73   varint which is
16820 20 74 68 65 20 6f 66 66 73 65 74 20 66 72 6f 6d   the offset from
16830 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20   the beginning. 
16840 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72   ** of the recor
16850 64 20 74 6f 20 64 61 74 61 30 2e 0a 20 20 2a 2f  d to data0..  */
16860 0a 20 20 6e 44 61 74 61 20 3d 20 30 3b 20 20 20  .  nData = 0;   
16870 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
16880 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61 74 61  of bytes of data
16890 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 48 64 72   space */.  nHdr
168a0 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f   = 0;          /
168b0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
168c0 73 20 6f 66 20 68 65 61 64 65 72 20 73 70 61 63  s of header spac
168d0 65 20 2a 2f 0a 20 20 6e 5a 65 72 6f 20 3d 20 30  e */.  nZero = 0
168e0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
168f0 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65  ber of zero byte
16900 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20  s at the end of 
16910 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
16920 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 31  nField = pOp->p1
16930 3b 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20  ;.  zAffinity = 
16940 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73  pOp->p4.z;.  ass
16950 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 26 26  ert( nField>0 &&
16960 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f   pOp->p2>0 && pO
16970 70 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d 28 70  p->p2+nField<=(p
16980 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
16990 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 70 44  ursor)+1 );.  pD
169a0 61 74 61 30 20 3d 20 26 61 4d 65 6d 5b 6e 46 69  ata0 = &aMem[nFi
169b0 65 6c 64 5d 3b 0a 20 20 6e 46 69 65 6c 64 20 3d  eld];.  nField =
169c0 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 4c 61 73   pOp->p2;.  pLas
169d0 74 20 3d 20 26 70 44 61 74 61 30 5b 6e 46 69 65  t = &pData0[nFie
169e0 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c 65 5f 66 6f  ld-1];.  file_fo
169f0 72 6d 61 74 20 3d 20 70 2d 3e 6d 69 6e 57 72 69  rmat = p->minWri
16a00 74 65 46 69 6c 65 46 6f 72 6d 61 74 3b 0a 0a 20  teFileFormat;.. 
16a10 20 2f 2a 20 49 64 65 6e 74 69 66 79 20 74 68 65   /* Identify the
16a20 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72   output register
16a30 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
16a40 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 31 20 7c 7c  p->p3<pOp->p1 ||
16a50 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70   pOp->p3>=pOp->p
16a60 31 2b 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 70  1+pOp->p2 );.  p
16a70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
16a80 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p3];.  memAbout
16a90 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
16aa0 29 3b 0a 0a 20 20 2f 2a 20 41 70 70 6c 79 20 74  );..  /* Apply t
16ab0 68 65 20 72 65 71 75 65 73 74 65 64 20 61 66 66  he requested aff
16ac0 69 6e 69 74 79 20 74 6f 20 61 6c 6c 20 69 6e 70  inity to all inp
16ad0 75 74 73 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72  uts.  */.  asser
16ae0 74 28 20 70 44 61 74 61 30 3c 3d 70 4c 61 73 74  t( pData0<=pLast
16af0 20 29 3b 0a 20 20 69 66 28 20 7a 41 66 66 69 6e   );.  if( zAffin
16b00 69 74 79 20 29 7b 0a 20 20 20 20 70 52 65 63 20  ity ){.    pRec 
16b10 3d 20 70 44 61 74 61 30 3b 0a 20 20 20 20 64 6f  = pData0;.    do
16b20 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66 66  {.      applyAff
16b30 69 6e 69 74 79 28 70 52 65 63 2b 2b 2c 20 2a 28  inity(pRec++, *(
16b40 7a 41 66 66 69 6e 69 74 79 2b 2b 29 2c 20 65 6e  zAffinity++), en
16b50 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 20 20 61  coding);.      a
16b60 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79  ssert( zAffinity
16b70 5b 30 5d 3d 3d 30 20 7c 7c 20 70 52 65 63 3c 3d  [0]==0 || pRec<=
16b80 70 4c 61 73 74 20 29 3b 0a 20 20 20 20 7d 77 68  pLast );.    }wh
16b90 69 6c 65 28 20 7a 41 66 66 69 6e 69 74 79 5b 30  ile( zAffinity[0
16ba0 5d 20 29 3b 0a 20 20 7d 0a 0a 23 69 66 64 65 66  ] );.  }..#ifdef
16bb0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4e   SQLITE_ENABLE_N
16bc0 55 4c 4c 5f 54 52 49 4d 0a 20 20 2f 2a 20 4e 55  ULL_TRIM.  /* NU
16bd0 4c 4c 73 20 63 61 6e 20 62 65 20 73 61 66 65 6c  LLs can be safel
16be0 79 20 74 72 69 6d 6d 65 64 20 66 72 6f 6d 20 74  y trimmed from t
16bf0 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65  he end of the re
16c00 63 6f 72 64 2c 20 61 73 20 6c 6f 6e 67 20 61 73  cord, as long as
16c10 0a 20 20 2a 2a 20 61 73 20 74 68 65 20 73 63 68  .  ** as the sch
16c20 65 6d 61 20 66 6f 72 6d 61 74 20 69 73 20 32 20  ema format is 2 
16c30 6f 72 20 6d 6f 72 65 20 61 6e 64 20 6e 6f 6e 65  or more and none
16c40 20 6f 66 20 74 68 65 20 6f 6d 69 74 74 65 64 20   of the omitted 
16c50 63 6f 6c 75 6d 6e 73 0a 20 20 2a 2a 20 68 61 76  columns.  ** hav
16c60 65 20 61 20 6e 6f 6e 2d 4e 55 4c 4c 20 64 65 66  e a non-NULL def
16c70 61 75 6c 74 20 76 61 6c 75 65 2e 20 20 41 6c 73  ault value.  Als
16c80 6f 2c 20 74 68 65 20 72 65 63 6f 72 64 20 6d 75  o, the record mu
16c90 73 74 20 62 65 20 6c 65 66 74 20 77 69 74 68 0a  st be left with.
16ca0 20 20 2a 2a 20 61 74 20 6c 65 61 73 74 20 6f 6e    ** at least on
16cb0 65 20 66 69 65 6c 64 2e 20 20 49 66 20 50 35 3e  e field.  If P5>
16cc0 30 20 74 68 65 6e 20 69 74 20 77 69 6c 6c 20 62  0 then it will b
16cd0 65 20 6f 6e 65 20 6d 6f 72 65 20 74 68 61 6e 20  e one more than 
16ce0 74 68 65 0a 20 20 2a 2a 20 69 6e 64 65 78 20 6f  the.  ** index o
16cf0 66 20 74 68 65 20 72 69 67 68 74 2d 6d 6f 73 74  f the right-most
16d00 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20 61 20 6e   column with a n
16d10 6f 6e 2d 4e 55 4c 4c 20 64 65 66 61 75 6c 74 20  on-NULL default 
16d20 76 61 6c 75 65 20 2a 2f 0a 20 20 69 66 28 20 70  value */.  if( p
16d30 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 77 68  Op->p5 ){.    wh
16d40 69 6c 65 28 20 28 70 4c 61 73 74 2d 3e 66 6c 61  ile( (pLast->fla
16d50 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d  gs & MEM_Null)!=
16d60 30 20 26 26 20 6e 46 69 65 6c 64 3e 70 4f 70 2d  0 && nField>pOp-
16d70 3e 70 35 20 29 7b 0a 20 20 20 20 20 20 70 4c 61  >p5 ){.      pLa
16d80 73 74 2d 2d 3b 0a 20 20 20 20 20 20 6e 46 69 65  st--;.      nFie
16d90 6c 64 2d 2d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  ld--;.    }.  }.
16da0 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 4c 6f 6f  #endif..  /* Loo
16db0 70 20 74 68 72 6f 75 67 68 20 74 68 65 20 65 6c  p through the el
16dc0 65 6d 65 6e 74 73 20 74 68 61 74 20 77 69 6c 6c  ements that will
16dd0 20 6d 61 6b 65 20 75 70 20 74 68 65 20 72 65 63   make up the rec
16de0 6f 72 64 20 74 6f 20 66 69 67 75 72 65 0a 20 20  ord to figure.  
16df0 2a 2a 20 6f 75 74 20 68 6f 77 20 6d 75 63 68 20  ** out how much 
16e00 73 70 61 63 65 20 69 73 20 72 65 71 75 69 72 65  space is require
16e10 64 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65  d for the new re
16e20 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20 70 52 65  cord..  */.  pRe
16e30 63 20 3d 20 70 4c 61 73 74 3b 0a 20 20 64 6f 7b  c = pLast;.  do{
16e40 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
16e50 49 73 56 61 6c 69 64 28 70 52 65 63 29 20 29 3b  IsValid(pRec) );
16e60 0a 20 20 20 20 70 52 65 63 2d 3e 75 54 65 6d 70  .    pRec->uTemp
16e70 20 3d 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d   = serial_type =
16e80 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
16e90 61 6c 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c  alType(pRec, fil
16ea0 65 5f 66 6f 72 6d 61 74 2c 20 26 6c 65 6e 29 3b  e_format, &len);
16eb0 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66  .    if( pRec->f
16ec0 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20  lags & MEM_Zero 
16ed0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6e 44 61  ){.      if( nDa
16ee0 74 61 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66  ta ){.        if
16ef0 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
16f00 45 78 70 61 6e 64 42 6c 6f 62 28 70 52 65 63 29  ExpandBlob(pRec)
16f10 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
16f20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
16f30 20 20 20 20 20 6e 5a 65 72 6f 20 2b 3d 20 70 52       nZero += pR
16f40 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20  ec->u.nZero;.   
16f50 20 20 20 20 20 6c 65 6e 20 2d 3d 20 70 52 65 63       len -= pRec
16f60 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 20  ->u.nZero;.     
16f70 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 6e 44 61   }.    }.    nDa
16f80 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20 20 20 74  ta += len;.    t
16f90 65 73 74 63 61 73 65 28 20 73 65 72 69 61 6c 5f  estcase( serial_
16fa0 74 79 70 65 3d 3d 31 32 37 20 29 3b 0a 20 20 20  type==127 );.   
16fb0 20 74 65 73 74 63 61 73 65 28 20 73 65 72 69 61   testcase( seria
16fc0 6c 5f 74 79 70 65 3d 3d 31 32 38 20 29 3b 0a 20  l_type==128 );. 
16fd0 20 20 20 6e 48 64 72 20 2b 3d 20 73 65 72 69 61     nHdr += seria
16fe0 6c 5f 74 79 70 65 3c 3d 31 32 37 20 3f 20 31 20  l_type<=127 ? 1 
16ff0 3a 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c  : sqlite3VarintL
17000 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29 3b  en(serial_type);
17010 0a 20 20 20 20 69 66 28 20 70 52 65 63 3d 3d 70  .    if( pRec==p
17020 44 61 74 61 30 20 29 20 62 72 65 61 6b 3b 0a 20  Data0 ) break;. 
17030 20 20 20 70 52 65 63 2d 2d 3b 0a 20 20 7d 77 68     pRec--;.  }wh
17040 69 6c 65 28 31 29 3b 0a 0a 20 20 2f 2a 20 45 56  ile(1);..  /* EV
17050 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 32 35  IDENCE-OF: R-225
17060 36 34 2d 31 31 36 34 37 20 54 68 65 20 68 65 61  64-11647 The hea
17070 64 65 72 20 62 65 67 69 6e 73 20 77 69 74 68 20  der begins with 
17080 61 20 73 69 6e 67 6c 65 20 76 61 72 69 6e 74 0a  a single varint.
17090 20 20 2a 2a 20 77 68 69 63 68 20 64 65 74 65 72    ** which deter
170a0 6d 69 6e 65 73 20 74 68 65 20 74 6f 74 61 6c 20  mines the total 
170b0 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  number of bytes 
170c0 69 6e 20 74 68 65 20 68 65 61 64 65 72 2e 20 54  in the header. T
170d0 68 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 76  he varint.  ** v
170e0 61 6c 75 65 20 69 73 20 74 68 65 20 73 69 7a 65  alue is the size
170f0 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 69   of the header i
17100 6e 20 62 79 74 65 73 20 69 6e 63 6c 75 64 69 6e  n bytes includin
17110 67 20 74 68 65 20 73 69 7a 65 20 76 61 72 69 6e  g the size varin
17120 74 0a 20 20 2a 2a 20 69 74 73 65 6c 66 2e 20 2a  t.  ** itself. *
17130 2f 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 48  /.  testcase( nH
17140 64 72 3d 3d 31 32 36 20 29 3b 0a 20 20 74 65 73  dr==126 );.  tes
17150 74 63 61 73 65 28 20 6e 48 64 72 3d 3d 31 32 37  tcase( nHdr==127
17160 20 29 3b 0a 20 20 69 66 28 20 6e 48 64 72 3c 3d   );.  if( nHdr<=
17170 31 32 36 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  126 ){.    /* Th
17180 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 2a 2f  e common case */
17190 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 31 3b 0a  .    nHdr += 1;.
171a0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
171b0 52 61 72 65 20 63 61 73 65 20 6f 66 20 61 20 72  Rare case of a r
171c0 65 61 6c 6c 79 20 6c 61 72 67 65 20 68 65 61 64  eally large head
171d0 65 72 20 2a 2f 0a 20 20 20 20 6e 56 61 72 69 6e  er */.    nVarin
171e0 74 20 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e  t = sqlite3Varin
171f0 74 4c 65 6e 28 6e 48 64 72 29 3b 0a 20 20 20 20  tLen(nHdr);.    
17200 6e 48 64 72 20 2b 3d 20 6e 56 61 72 69 6e 74 3b  nHdr += nVarint;
17210 0a 20 20 20 20 69 66 28 20 6e 56 61 72 69 6e 74  .    if( nVarint
17220 3c 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65  <sqlite3VarintLe
17230 6e 28 6e 48 64 72 29 20 29 20 6e 48 64 72 2b 2b  n(nHdr) ) nHdr++
17240 3b 0a 20 20 7d 0a 20 20 6e 42 79 74 65 20 3d 20  ;.  }.  nByte = 
17250 6e 48 64 72 2b 6e 44 61 74 61 3b 0a 20 20 69 66  nHdr+nData;.  if
17260 28 20 6e 42 79 74 65 2b 6e 5a 65 72 6f 3e 64 62  ( nByte+nZero>db
17270 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
17280 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
17290 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
172a0 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b  g;.  }..  /* Mak
172b0 65 20 73 75 72 65 20 74 68 65 20 6f 75 74 70 75  e sure the outpu
172c0 74 20 72 65 67 69 73 74 65 72 20 68 61 73 20 61  t register has a
172d0 20 62 75 66 66 65 72 20 6c 61 72 67 65 20 65 6e   buffer large en
172e0 6f 75 67 68 20 74 6f 20 73 74 6f 72 65 20 0a 20  ough to store . 
172f0 20 2a 2a 20 74 68 65 20 6e 65 77 20 72 65 63 6f   ** the new reco
17300 72 64 2e 20 54 68 65 20 6f 75 74 70 75 74 20 72  rd. The output r
17310 65 67 69 73 74 65 72 20 28 70 4f 70 2d 3e 70 33  egister (pOp->p3
17320 29 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64  ) is not allowed
17330 20 74 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e 65 20   to.  ** be one 
17340 6f 66 20 74 68 65 20 69 6e 70 75 74 20 72 65 67  of the input reg
17350 69 73 74 65 72 73 20 28 62 65 63 61 75 73 65 20  isters (because 
17360 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61  the following ca
17370 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74  ll to.  ** sqlit
17380 65 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e  e3VdbeMemClearAn
17390 64 52 65 73 69 7a 65 28 29 20 63 6f 75 6c 64 20  dResize() could 
173a0 63 6c 6f 62 62 65 72 20 74 68 65 20 76 61 6c 75  clobber the valu
173b0 65 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 75  e before it is u
173c0 73 65 64 29 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  sed)..  */.  if(
173d0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43   sqlite3VdbeMemC
173e0 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4f  learAndResize(pO
173f0 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 29 20  ut, (int)nByte) 
17400 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  ){.    goto no_m
17410 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e 65 77 52 65  em;.  }.  zNewRe
17420 63 6f 72 64 20 3d 20 28 75 38 20 2a 29 70 4f 75  cord = (u8 *)pOu
17430 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57 72 69 74  t->z;..  /* Writ
17440 65 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  e the record */.
17450 20 20 69 20 3d 20 70 75 74 56 61 72 69 6e 74 33    i = putVarint3
17460 32 28 7a 4e 65 77 52 65 63 6f 72 64 2c 20 6e 48  2(zNewRecord, nH
17470 64 72 29 3b 0a 20 20 6a 20 3d 20 6e 48 64 72 3b  dr);.  j = nHdr;
17480 0a 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61  .  assert( pData
17490 30 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 70 52  0<=pLast );.  pR
174a0 65 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20 64  ec = pData0;.  d
174b0 6f 7b 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79  o{.    serial_ty
174c0 70 65 20 3d 20 70 52 65 63 2d 3e 75 54 65 6d 70  pe = pRec->uTemp
174d0 3b 0a 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43  ;.    /* EVIDENC
174e0 45 2d 4f 46 3a 20 52 2d 30 36 35 32 39 2d 34 37  E-OF: R-06529-47
174f0 33 36 32 20 46 6f 6c 6c 6f 77 69 6e 67 20 74 68  362 Following th
17500 65 20 73 69 7a 65 20 76 61 72 69 6e 74 20 61 72  e size varint ar
17510 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 0a 20 20  e one or more.  
17520 20 20 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20    ** additional 
17530 76 61 72 69 6e 74 73 2c 20 6f 6e 65 20 70 65 72  varints, one per
17540 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 20 20   column. */.    
17550 69 20 2b 3d 20 70 75 74 56 61 72 69 6e 74 33 32  i += putVarint32
17560 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d 2c  (&zNewRecord[i],
17570 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 20 20   serial_type);  
17580 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 65 72            /* ser
17590 69 61 6c 20 74 79 70 65 20 2a 2f 0a 20 20 20 20  ial type */.    
175a0 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  /* EVIDENCE-OF: 
175b0 52 2d 36 34 35 33 36 2d 35 31 37 32 38 20 54 68  R-64536-51728 Th
175c0 65 20 76 61 6c 75 65 73 20 66 6f 72 20 65 61 63  e values for eac
175d0 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  h column in the 
175e0 72 65 63 6f 72 64 0a 20 20 20 20 2a 2a 20 69 6d  record.    ** im
175f0 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77  mediately follow
17600 20 74 68 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a   the header. */.
17610 20 20 20 20 6a 20 2b 3d 20 73 71 6c 69 74 65 33      j += sqlite3
17620 56 64 62 65 53 65 72 69 61 6c 50 75 74 28 26 7a  VdbeSerialPut(&z
17630 4e 65 77 52 65 63 6f 72 64 5b 6a 5d 2c 20 70 52  NewRecord[j], pR
17640 65 63 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29  ec, serial_type)
17650 3b 20 2f 2a 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a  ; /* content */.
17660 20 20 7d 77 68 69 6c 65 28 20 28 2b 2b 70 52 65    }while( (++pRe
17670 63 29 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 61  c)<=pLast );.  a
17680 73 73 65 72 74 28 20 69 3d 3d 6e 48 64 72 20 29  ssert( i==nHdr )
17690 3b 0a 20 20 61 73 73 65 72 74 28 20 6a 3d 3d 6e  ;.  assert( j==n
176a0 42 79 74 65 20 29 3b 0a 0a 20 20 61 73 73 65 72  Byte );..  asser
176b0 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
176c0 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
176d0 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
176e0 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  ) );.  pOut->n =
176f0 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70   (int)nByte;.  p
17700 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
17710 5f 42 6c 6f 62 3b 0a 20 20 69 66 28 20 6e 5a 65  _Blob;.  if( nZe
17720 72 6f 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e  ro ){.    pOut->
17730 75 2e 6e 5a 65 72 6f 20 3d 20 6e 5a 65 72 6f 3b  u.nZero = nZero;
17740 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
17750 20 7c 3d 20 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20   |= MEM_Zero;.  
17760 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  }.  pOut->enc = 
17770 53 51 4c 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a  SQLITE_UTF8;  /*
17780 20 49 6e 20 63 61 73 65 20 74 68 65 20 62 6c 6f   In case the blo
17790 62 20 69 73 20 65 76 65 72 20 63 6f 6e 76 65 72  b is ever conver
177a0 74 65 64 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20  ted to text */. 
177b0 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
177c0 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a  pOp->p3, pOut);.
177d0 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
177e0 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62  BSIZE(pOut);.  b
177f0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
17800 64 65 3a 20 43 6f 75 6e 74 20 50 31 20 50 32 20  de: Count P1 P2 
17810 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
17820 73 3a 20 72 5b 50 32 5d 3d 63 6f 75 6e 74 28 29  s: r[P2]=count()
17830 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65  .**.** Store the
17840 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69   number of entri
17850 65 73 20 28 61 6e 20 69 6e 74 65 67 65 72 20 76  es (an integer v
17860 61 6c 75 65 29 20 69 6e 20 74 68 65 20 74 61 62  alue) in the tab
17870 6c 65 20 6f 72 20 69 6e 64 65 78 20 0a 2a 2a 20  le or index .** 
17880 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f 72  opened by cursor
17890 20 50 31 20 69 6e 20 72 65 67 69 73 74 65 72 20   P1 in register 
178a0 50 32 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  P2.*/.#ifndef SQ
178b0 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43  LITE_OMIT_BTREEC
178c0 4f 55 4e 54 0a 63 61 73 65 20 4f 50 5f 43 6f 75  OUNT.case OP_Cou
178d0 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a  nt: {         /*
178e0 20 6f 75 74 32 20 2a 2f 0a 20 20 69 36 34 20 6e   out2 */.  i64 n
178f0 45 6e 74 72 79 3b 0a 20 20 42 74 43 75 72 73 6f  Entry;.  BtCurso
17900 72 20 2a 70 43 72 73 72 3b 0a 0a 20 20 61 73 73  r *pCrsr;..  ass
17910 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f  ert( p->apCsr[pO
17920 70 2d 3e 70 31 5d 2d 3e 65 43 75 72 54 79 70 65  p->p1]->eCurType
17930 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
17940 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 2d 3e  );.  pCrsr = p->
17950 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e  apCsr[pOp->p1]->
17960 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73  uc.pCursor;.  as
17970 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20  sert( pCrsr );. 
17980 20 6e 45 6e 74 72 79 20 3d 20 30 3b 20 20 2f 2a   nEntry = 0;  /*
17990 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e   Not needed.  On
179a0 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e  ly used to silen
179b0 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f  ce a warning. */
179c0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
179d0 74 72 65 65 43 6f 75 6e 74 28 70 43 72 73 72 2c  treeCount(pCrsr,
179e0 20 26 6e 45 6e 74 72 79 29 3b 0a 20 20 69 66 28   &nEntry);.  if(
179f0 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
17a00 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
17a10 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
17a20 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
17a30 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e 45    pOut->u.i = nE
17a40 6e 74 72 79 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ntry;.  break;.}
17a50 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f  .#endif../* Opco
17a60 64 65 3a 20 53 61 76 65 70 6f 69 6e 74 20 50 31  de: Savepoint P1
17a70 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
17a80 4f 70 65 6e 2c 20 72 65 6c 65 61 73 65 20 6f 72  Open, release or
17a90 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 73 61   rollback the sa
17aa0 76 65 70 6f 69 6e 74 20 6e 61 6d 65 64 20 62 79  vepoint named by
17ab0 20 70 61 72 61 6d 65 74 65 72 20 50 34 2c 20 64   parameter P4, d
17ac0 65 70 65 6e 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74  epending.** on t
17ad0 68 65 20 76 61 6c 75 65 20 6f 66 20 50 31 2e 20  he value of P1. 
17ae0 54 6f 20 6f 70 65 6e 20 61 20 6e 65 77 20 73 61  To open a new sa
17af0 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 30 2e 20  vepoint, P1==0. 
17b00 54 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d  To release (comm
17b10 69 74 29 20 61 6e 0a 2a 2a 20 65 78 69 73 74 69  it) an.** existi
17b20 6e 67 20 73 61 76 65 70 6f 69 6e 74 2c 20 50 31  ng savepoint, P1
17b30 3d 3d 31 2c 20 6f 72 20 74 6f 20 72 6f 6c 6c 62  ==1, or to rollb
17b40 61 63 6b 20 61 6e 20 65 78 69 73 74 69 6e 67 20  ack an existing 
17b50 73 61 76 65 70 6f 69 6e 74 20 50 31 3d 3d 32 2e  savepoint P1==2.
17b60 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 61 76 65  .*/.case OP_Save
17b70 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 70  point: {.  int p
17b80 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  1;              
17b90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
17ba0 6c 75 65 20 6f 66 20 50 31 20 6f 70 65 72 61 6e  lue of P1 operan
17bb0 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61  d */.  char *zNa
17bc0 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  me;             
17bd0 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
17be0 66 20 73 61 76 65 70 6f 69 6e 74 20 2a 2f 0a 20  f savepoint */. 
17bf0 20 69 6e 74 20 6e 4e 61 6d 65 3b 0a 20 20 53 61   int nName;.  Sa
17c00 76 65 70 6f 69 6e 74 20 2a 70 4e 65 77 3b 0a 20  vepoint *pNew;. 
17c10 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76   Savepoint *pSav
17c20 65 70 6f 69 6e 74 3b 0a 20 20 53 61 76 65 70 6f  epoint;.  Savepo
17c30 69 6e 74 20 2a 70 54 6d 70 3b 0a 20 20 69 6e 74  int *pTmp;.  int
17c40 20 69 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 69   iSavepoint;.  i
17c50 6e 74 20 69 69 3b 0a 0a 20 20 70 31 20 3d 20 70  nt ii;..  p1 = p
17c60 4f 70 2d 3e 70 31 3b 0a 20 20 7a 4e 61 6d 65 20  Op->p1;.  zName 
17c70 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20  = pOp->p4.z;..  
17c80 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 74  /* Assert that t
17c90 68 65 20 70 31 20 70 61 72 61 6d 65 74 65 72 20  he p1 parameter 
17ca0 69 73 20 76 61 6c 69 64 2e 20 41 6c 73 6f 20 74  is valid. Also t
17cb0 68 61 74 20 69 66 20 74 68 65 72 65 20 69 73 20  hat if there is 
17cc0 6e 6f 20 6f 70 65 6e 0a 20 20 2a 2a 20 74 72 61  no open.  ** tra
17cd0 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74  nsaction, then t
17ce0 68 65 72 65 20 63 61 6e 6e 6f 74 20 62 65 20 61  here cannot be a
17cf0 6e 79 20 73 61 76 65 70 6f 69 6e 74 73 2e 20 0a  ny savepoints. .
17d00 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 64    */.  assert( d
17d10 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3d 3d 30  b->pSavepoint==0
17d20 20 7c 7c 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d   || db->autoComm
17d30 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  it==0 );.  asser
17d40 74 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  t( p1==SAVEPOINT
17d50 5f 42 45 47 49 4e 7c 7c 70 31 3d 3d 53 41 56 45  _BEGIN||p1==SAVE
17d60 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 7c 7c 70  POINT_RELEASE||p
17d70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c  1==SAVEPOINT_ROL
17d80 4c 42 41 43 4b 20 29 3b 0a 20 20 61 73 73 65 72  LBACK );.  asser
17d90 74 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e  t( db->pSavepoin
17da0 74 20 7c 7c 20 64 62 2d 3e 69 73 54 72 61 6e 73  t || db->isTrans
17db0 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3d  actionSavepoint=
17dc0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
17dd0 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f  checkSavepointCo
17de0 75 6e 74 28 64 62 29 20 29 3b 0a 20 20 61 73 73  unt(db) );.  ass
17df0 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65  ert( p->bIsReade
17e00 72 20 29 3b 0a 0a 20 20 69 66 28 20 70 31 3d 3d  r );..  if( p1==
17e10 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20  SAVEPOINT_BEGIN 
17e20 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e  ){.    if( db->n
17e30 56 64 62 65 57 72 69 74 65 3e 30 20 29 7b 0a 20  VdbeWrite>0 ){. 
17e40 20 20 20 20 20 2f 2a 20 41 20 6e 65 77 20 73 61       /* A new sa
17e50 76 65 70 6f 69 6e 74 20 63 61 6e 6e 6f 74 20 62  vepoint cannot b
17e60 65 20 63 72 65 61 74 65 64 20 69 66 20 74 68 65  e created if the
17e70 72 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72  re are active wr
17e80 69 74 65 20 0a 20 20 20 20 20 20 2a 2a 20 73 74  ite .      ** st
17e90 61 74 65 6d 65 6e 74 73 20 28 69 2e 65 2e 20 6f  atements (i.e. o
17ea0 70 65 6e 20 72 65 61 64 2f 77 72 69 74 65 20 69  pen read/write i
17eb0 6e 63 72 65 6d 65 6e 74 61 6c 20 62 6c 6f 62 20  ncremental blob 
17ec0 68 61 6e 64 6c 65 73 29 2e 0a 20 20 20 20 20 20  handles)..      
17ed0 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  */.      sqlite3
17ee0 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 63 61  VdbeError(p, "ca
17ef0 6e 6e 6f 74 20 6f 70 65 6e 20 73 61 76 65 70 6f  nnot open savepo
17f00 69 6e 74 20 2d 20 53 51 4c 20 73 74 61 74 65 6d  int - SQL statem
17f10 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73  ents in progress
17f20 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53  ");.      rc = S
17f30 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
17f40 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 4e 61  }else{.      nNa
17f50 6d 65 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  me = sqlite3Strl
17f60 65 6e 33 30 28 7a 4e 61 6d 65 29 3b 0a 0a 23 69  en30(zName);..#i
17f70 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
17f80 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
17f90 20 20 20 20 20 2f 2a 20 54 68 69 73 20 63 61 6c       /* This cal
17fa0 6c 20 69 73 20 4f 6b 20 65 76 65 6e 20 69 66 20  l is Ok even if 
17fb0 74 68 69 73 20 73 61 76 65 70 6f 69 6e 74 20 69  this savepoint i
17fc0 73 20 61 63 74 75 61 6c 6c 79 20 61 20 74 72 61  s actually a tra
17fd0 6e 73 61 63 74 69 6f 6e 0a 20 20 20 20 20 20 2a  nsaction.      *
17fe0 2a 20 73 61 76 65 70 6f 69 6e 74 20 28 61 6e 64  * savepoint (and
17ff0 20 74 68 65 72 65 66 6f 72 65 20 73 68 6f 75 6c   therefore shoul
18000 64 20 6e 6f 74 20 70 72 6f 6d 70 74 20 78 53 61  d not prompt xSa
18010 76 65 70 6f 69 6e 74 28 29 29 20 63 61 6c 6c 62  vepoint()) callb
18020 61 63 6b 73 2e 0a 20 20 20 20 20 20 2a 2a 20 49  acks..      ** I
18030 66 20 74 68 69 73 20 69 73 20 61 20 74 72 61 6e  f this is a tran
18040 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e  saction savepoin
18050 74 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2c 20  t being opened, 
18060 69 74 20 69 73 20 67 75 61 72 61 6e 74 65 65 64  it is guaranteed
18070 0a 20 20 20 20 20 20 2a 2a 20 74 68 61 74 20 74  .      ** that t
18080 68 65 20 64 62 2d 3e 61 56 54 72 61 6e 73 5b 5d  he db->aVTrans[]
18090 20 61 72 72 61 79 20 69 73 20 65 6d 70 74 79 2e   array is empty.
180a0 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72    */.      asser
180b0 74 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  t( db->autoCommi
180c0 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 54 72  t==0 || db->nVTr
180d0 61 6e 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  ans==0 );.      
180e0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62  rc = sqlite3Vtab
180f0 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 53 41  Savepoint(db, SA
18100 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 0a 20  VEPOINT_BEGIN,. 
18110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
18130 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 64 62  b->nStatement+db
18140 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20  ->nSavepoint);. 
18150 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
18160 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
18170 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
18180 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20 20  ;.#endif..      
18190 2f 2a 20 43 72 65 61 74 65 20 61 20 6e 65 77 20  /* Create a new 
181a0 73 61 76 65 70 6f 69 6e 74 20 73 74 72 75 63 74  savepoint struct
181b0 75 72 65 2e 20 2a 2f 0a 20 20 20 20 20 20 70 4e  ure. */.      pN
181c0 65 77 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61  ew = sqlite3DbMa
181d0 6c 6c 6f 63 52 61 77 4e 4e 28 64 62 2c 20 73 69  llocRawNN(db, si
181e0 7a 65 6f 66 28 53 61 76 65 70 6f 69 6e 74 29 2b  zeof(Savepoint)+
181f0 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 20 20  nName+1);.      
18200 69 66 28 20 70 4e 65 77 20 29 7b 0a 20 20 20 20  if( pNew ){.    
18210 20 20 20 20 70 4e 65 77 2d 3e 7a 4e 61 6d 65 20      pNew->zName 
18220 3d 20 28 63 68 61 72 20 2a 29 26 70 4e 65 77 5b  = (char *)&pNew[
18230 31 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 63  1];.        memc
18240 70 79 28 70 4e 65 77 2d 3e 7a 4e 61 6d 65 2c 20  py(pNew->zName, 
18250 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2b 31 29 3b  zName, nName+1);
18260 0a 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a  .    .        /*
18270 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   If there is no 
18280 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e  open transaction
18290 2c 20 74 68 65 6e 20 6d 61 72 6b 20 74 68 69 73  , then mark this
182a0 20 61 73 20 61 20 73 70 65 63 69 61 6c 0a 20 20   as a special.  
182b0 20 20 20 20 20 20 2a 2a 20 22 74 72 61 6e 73 61        ** "transa
182c0 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 22  ction savepoint"
182d0 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28  . */.        if(
182e0 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
182f0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  ){.          db-
18300 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b  >autoCommit = 0;
18310 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 69  .          db->i
18320 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
18330 70 6f 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20 20  point = 1;.     
18340 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
18350 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69      db->nSavepoi
18360 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a  nt++;.        }.
18370 0a 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b  .        /* Link
18380 20 74 68 65 20 6e 65 77 20 73 61 76 65 70 6f 69   the new savepoi
18390 6e 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61  nt into the data
183a0 62 61 73 65 20 68 61 6e 64 6c 65 27 73 20 6c 69  base handle's li
183b0 73 74 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 70  st. */.        p
183c0 4e 65 77 2d 3e 70 4e 65 78 74 20 3d 20 64 62 2d  New->pNext = db-
183d0 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20  >pSavepoint;.   
183e0 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f       db->pSavepo
183f0 69 6e 74 20 3d 20 70 4e 65 77 3b 0a 20 20 20 20  int = pNew;.    
18400 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72      pNew->nDefer
18410 72 65 64 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44  redCons = db->nD
18420 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20  eferredCons;.   
18430 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65       pNew->nDefe
18440 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 64 62  rredImmCons = db
18450 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
18460 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ns;.      }.    
18470 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  }.  }else{.    i
18480 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 0a  Savepoint = 0;..
18490 20 20 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20      /* Find the 
184a0 6e 61 6d 65 64 20 73 61 76 65 70 6f 69 6e 74 2e  named savepoint.
184b0 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   If there is no 
184c0 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74 2c 20  such savepoint, 
184d0 74 68 65 6e 20 61 6e 0a 20 20 20 20 2a 2a 20 61  then an.    ** a
184e0 6e 20 65 72 72 6f 72 20 69 73 20 72 65 74 75 72  n error is retur
184f0 6e 65 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e  ned to the user.
18500 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28 0a 20 20    */.    for(.  
18510 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d      pSavepoint =
18520 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b   db->pSavepoint;
18530 20 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69   .      pSavepoi
18540 6e 74 20 26 26 20 73 71 6c 69 74 65 33 53 74 72  nt && sqlite3Str
18550 49 43 6d 70 28 70 53 61 76 65 70 6f 69 6e 74 2d  ICmp(pSavepoint-
18560 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 29 3b 0a  >zName, zName);.
18570 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74        pSavepoint
18580 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70   = pSavepoint->p
18590 4e 65 78 74 0a 20 20 20 20 29 7b 0a 20 20 20 20  Next.    ){.    
185a0 20 20 69 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a    iSavepoint++;.
185b0 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 21 70      }.    if( !p
185c0 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20  Savepoint ){.   
185d0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
185e0 72 6f 72 28 70 2c 20 22 6e 6f 20 73 75 63 68 20  ror(p, "no such 
185f0 73 61 76 65 70 6f 69 6e 74 3a 20 25 73 22 2c 20  savepoint: %s", 
18600 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 72 63  zName);.      rc
18610 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
18620 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 64  .    }else if( d
18630 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20  b->nVdbeWrite>0 
18640 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  && p1==SAVEPOINT
18650 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20  _RELEASE ){.    
18660 20 20 2f 2a 20 49 74 20 69 73 20 6e 6f 74 20 70    /* It is not p
18670 6f 73 73 69 62 6c 65 20 74 6f 20 72 65 6c 65 61  ossible to relea
18680 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 20 73 61  se (commit) a sa
18690 76 65 70 6f 69 6e 74 20 69 66 20 74 68 65 72 65  vepoint if there
186a0 20 61 72 65 20 0a 20 20 20 20 20 20 2a 2a 20 61   are .      ** a
186b0 63 74 69 76 65 20 77 72 69 74 65 20 73 74 61 74  ctive write stat
186c0 65 6d 65 6e 74 73 2e 0a 20 20 20 20 20 20 2a 2f  ements..      */
186d0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
186e0 62 65 45 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e  beError(p, "cann
186f0 6f 74 20 72 65 6c 65 61 73 65 20 73 61 76 65 70  ot release savep
18700 6f 69 6e 74 20 2d 20 22 0a 20 20 20 20 20 20 20  oint - ".       
18710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18720 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e     "SQL statemen
18730 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29  ts in progress")
18740 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  ;.      rc = SQL
18750 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65  ITE_BUSY;.    }e
18760 6c 73 65 7b 0a 0a 20 20 20 20 20 20 2f 2a 20 44  lse{..      /* D
18770 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72  etermine whether
18780 20 6f 72 20 6e 6f 74 20 74 68 69 73 20 69 73 20   or not this is 
18790 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61  a transaction sa
187a0 76 65 70 6f 69 6e 74 2e 20 49 66 20 73 6f 2c 0a  vepoint. If so,.
187b0 20 20 20 20 20 20 2a 2a 20 61 6e 64 20 74 68 69        ** and thi
187c0 73 20 69 73 20 61 20 52 45 4c 45 41 53 45 20 63  s is a RELEASE c
187d0 6f 6d 6d 61 6e 64 2c 20 74 68 65 6e 20 74 68 65  ommand, then the
187e0 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63   current transac
187f0 74 69 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 69  tion .      ** i
18800 73 20 63 6f 6d 6d 69 74 74 65 64 2e 20 0a 20 20  s committed. .  
18810 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74      */.      int
18820 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d   isTransaction =
18830 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65   pSavepoint->pNe
18840 78 74 3d 3d 30 20 26 26 20 64 62 2d 3e 69 73 54  xt==0 && db->isT
18850 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
18860 69 6e 74 3b 0a 20 20 20 20 20 20 69 66 28 20 69  int;.      if( i
18870 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 26 26 20  sTransaction && 
18880 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45  p1==SAVEPOINT_RE
18890 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20  LEASE ){.       
188a0 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74   if( (rc = sqlit
188b0 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c  e3VdbeCheckFk(p,
188c0 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20   1))!=SQLITE_OK 
188d0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  ){.          got
188e0 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
188f0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
18900 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
18910 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28  = 1;.        if(
18920 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74   sqlite3VdbeHalt
18930 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59  (p)==SQLITE_BUSY
18940 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 2d   ){.          p-
18950 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  >pc = (int)(pOp 
18960 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20 20 20 20  - aOp);.        
18970 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
18980 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20   = 0;.          
18990 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c  p->rc = rc = SQL
189a0 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20  ITE_BUSY;.      
189b0 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65      goto vdbe_re
189c0 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a  turn;.        }.
189d0 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72          db->isTr
189e0 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
189f0 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  nt = 0;.        
18a00 72 63 20 3d 20 70 2d 3e 72 63 3b 0a 20 20 20 20  rc = p->rc;.    
18a10 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
18a20 20 69 6e 74 20 69 73 53 63 68 65 6d 61 43 68 61   int isSchemaCha
18a30 6e 67 65 3b 0a 20 20 20 20 20 20 20 20 69 53 61  nge;.        iSa
18a40 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 6e 53  vepoint = db->nS
18a50 61 76 65 70 6f 69 6e 74 20 2d 20 69 53 61 76 65  avepoint - iSave
18a60 70 6f 69 6e 74 20 2d 20 31 3b 0a 20 20 20 20 20  point - 1;.     
18a70 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50     if( p1==SAVEP
18a80 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b  OINT_ROLLBACK ){
18a90 0a 20 20 20 20 20 20 20 20 20 20 69 73 53 63 68  .          isSch
18aa0 65 6d 61 43 68 61 6e 67 65 20 3d 20 28 64 62 2d  emaChange = (db-
18ab0 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
18ac0 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29 21 3d  InternChanges)!=
18ad0 30 3b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  0;.          for
18ae0 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44  (ii=0; ii<db->nD
18af0 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20  b; ii++){.      
18b00 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
18b10 65 33 42 74 72 65 65 54 72 69 70 41 6c 6c 43 75  e3BtreeTripAllCu
18b20 72 73 6f 72 73 28 64 62 2d 3e 61 44 62 5b 69 69  rsors(db->aDb[ii
18b30 5d 2e 70 42 74 2c 0a 20 20 20 20 20 20 20 20 20  ].pBt,.         
18b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
18b60 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42  LITE_ABORT_ROLLB
18b70 41 43 4b 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ACK,.           
18b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b90 20 20 20 20 20 20 20 20 20 20 20 20 69 73 53 63              isSc
18ba0 68 65 6d 61 43 68 61 6e 67 65 3d 3d 30 29 3b 0a  hemaChange==0);.
18bb0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20              if( 
18bc0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
18bd0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
18be0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
18bf0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c     }.        }el
18c00 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 69 73  se{.          is
18c10 53 63 68 65 6d 61 43 68 61 6e 67 65 20 3d 20 30  SchemaChange = 0
18c20 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
18c30 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69      for(ii=0; ii
18c40 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b  <db->nDb; ii++){
18c50 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20  .          rc = 
18c60 73 71 6c 69 74 65 33 42 74 72 65 65 53 61 76 65  sqlite3BtreeSave
18c70 70 6f 69 6e 74 28 64 62 2d 3e 61 44 62 5b 69 69  point(db->aDb[ii
18c80 5d 2e 70 42 74 2c 20 70 31 2c 20 69 53 61 76 65  ].pBt, p1, iSave
18c90 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  point);.        
18ca0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
18cb0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20  _OK ){.         
18cc0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
18cd0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
18ce0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
18cf0 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 73  }.        if( is
18d00 53 63 68 65 6d 61 43 68 61 6e 67 65 20 29 7b 0a  SchemaChange ){.
18d10 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
18d20 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53  3ExpirePreparedS
18d30 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20  tatements(db);. 
18d40 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
18d50 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f  ResetAllSchemasO
18d60 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b  fConnection(db);
18d70 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 66  .          db->f
18d80 6c 61 67 73 20 3d 20 28 64 62 2d 3e 66 6c 61 67  lags = (db->flag
18d90 73 20 7c 20 53 51 4c 49 54 45 5f 49 6e 74 65 72  s | SQLITE_Inter
18da0 6e 43 68 61 6e 67 65 73 29 3b 0a 20 20 20 20 20  nChanges);.     
18db0 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 0a     }.      }.  .
18dc0 20 20 20 20 20 20 2f 2a 20 52 65 67 61 72 64 6c        /* Regardl
18dd0 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 74  ess of whether t
18de0 68 69 73 20 69 73 20 61 20 52 45 4c 45 41 53 45  his is a RELEASE
18df0 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c 20 64 65   or ROLLBACK, de
18e00 73 74 72 6f 79 20 61 6c 6c 20 0a 20 20 20 20 20  stroy all .     
18e10 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74 73 20 6e   ** savepoints n
18e20 65 73 74 65 64 20 69 6e 73 69 64 65 20 6f 66 20  ested inside of 
18e30 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65  the savepoint be
18e40 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 2e  ing operated on.
18e50 20 2a 2f 0a 20 20 20 20 20 20 77 68 69 6c 65 28   */.      while(
18e60 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 21   db->pSavepoint!
18e70 3d 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20  =pSavepoint ){. 
18e80 20 20 20 20 20 20 20 70 54 6d 70 20 3d 20 64 62         pTmp = db
18e90 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20  ->pSavepoint;.  
18ea0 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70        db->pSavep
18eb0 6f 69 6e 74 20 3d 20 70 54 6d 70 2d 3e 70 4e 65  oint = pTmp->pNe
18ec0 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  xt;.        sqli
18ed0 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 54  te3DbFree(db, pT
18ee0 6d 70 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  mp);.        db-
18ef0 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20  >nSavepoint--;. 
18f00 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a       }..      /*
18f10 20 49 66 20 69 74 20 69 73 20 61 20 52 45 4c 45   If it is a RELE
18f20 41 53 45 2c 20 74 68 65 6e 20 64 65 73 74 72 6f  ASE, then destro
18f30 79 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20  y the savepoint 
18f40 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f  being operated o
18f50 6e 20 0a 20 20 20 20 20 20 2a 2a 20 74 6f 6f 2e  n .      ** too.
18f60 20 49 66 20 69 74 20 69 73 20 61 20 52 4f 4c 4c   If it is a ROLL
18f70 42 41 43 4b 20 54 4f 2c 20 74 68 65 6e 20 73 65  BACK TO, then se
18f80 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  t the number of 
18f90 64 65 66 65 72 72 65 64 20 0a 20 20 20 20 20 20  deferred .      
18fa0 2a 2a 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  ** constraint vi
18fb0 6f 6c 61 74 69 6f 6e 73 20 70 72 65 73 65 6e 74  olations present
18fc0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
18fd0 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 73 74   to the value st
18fe0 6f 72 65 64 0a 20 20 20 20 20 20 2a 2a 20 77 68  ored.      ** wh
18ff0 65 6e 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74  en the savepoint
19000 20 77 61 73 20 63 72 65 61 74 65 64 2e 20 20 2a   was created.  *
19010 2f 0a 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d  /.      if( p1==
19020 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
19030 45 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  E ){.        ass
19040 65 72 74 28 20 70 53 61 76 65 70 6f 69 6e 74 3d  ert( pSavepoint=
19050 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20  =db->pSavepoint 
19060 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70  );.        db->p
19070 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76  Savepoint = pSav
19080 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20  epoint->pNext;. 
19090 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62         sqlite3Db
190a0 46 72 65 65 28 64 62 2c 20 70 53 61 76 65 70 6f  Free(db, pSavepo
190b0 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66  int);.        if
190c0 28 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  ( !isTransaction
190d0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62   ){.          db
190e0 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a  ->nSavepoint--;.
190f0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
19100 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 64  }else{.        d
19110 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
19120 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e   = pSavepoint->n
19130 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20  DeferredCons;.  
19140 20 20 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72        db->nDefer
19150 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 70 53 61  redImmCons = pSa
19160 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72  vepoint->nDeferr
19170 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20  edImmCons;.     
19180 20 7d 0a 0a 20 20 20 20 20 20 69 66 28 20 21 69   }..      if( !i
19190 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 7c 7c 20  sTransaction || 
191a0 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f  p1==SAVEPOINT_RO
191b0 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20 20 20  LLBACK ){.      
191c0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74    rc = sqlite3Vt
191d0 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20  abSavepoint(db, 
191e0 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b  p1, iSavepoint);
191f0 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21  .        if( rc!
19200 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
19210 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
19220 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
19230 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63    }.  }.  if( rc
19240 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
19250 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 62  e_to_error;..  b
19260 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
19270 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74 20 50  de: AutoCommit P
19280 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
19290 20 53 65 74 20 74 68 65 20 64 61 74 61 62 61 73   Set the databas
192a0 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c  e auto-commit fl
192b0 61 67 20 74 6f 20 50 31 20 28 31 20 6f 72 20 30  ag to P1 (1 or 0
192c0 29 2e 20 49 66 20 50 32 20 69 73 20 74 72 75 65  ). If P2 is true
192d0 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61  , roll.** back a
192e0 6e 79 20 63 75 72 72 65 6e 74 6c 79 20 61 63 74  ny currently act
192f0 69 76 65 20 62 74 72 65 65 20 74 72 61 6e 73 61  ive btree transa
19300 63 74 69 6f 6e 73 2e 20 49 66 20 74 68 65 72 65  ctions. If there
19310 20 61 72 65 20 61 6e 79 20 61 63 74 69 76 65 0a   are any active.
19320 2a 2a 20 56 4d 73 20 28 61 70 61 72 74 20 66 72  ** VMs (apart fr
19330 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20 74 68  om this one), th
19340 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20 66 61  en a ROLLBACK fa
19350 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54 20 66  ils.  A COMMIT f
19360 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65 72 65  ails if.** there
19370 20 61 72 65 20 61 63 74 69 76 65 20 77 72 69 74   are active writ
19380 69 6e 67 20 56 4d 73 20 6f 72 20 61 63 74 69 76  ing VMs or activ
19390 65 20 56 4d 73 20 74 68 61 74 20 75 73 65 20 73  e VMs that use s
193a0 68 61 72 65 64 20 63 61 63 68 65 2e 0a 2a 2a 0a  hared cache..**.
193b0 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
193c0 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65 20 56  ion causes the V
193d0 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63 61  M to halt..*/.ca
193e0 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69 74  se OP_AutoCommit
193f0 3a 20 7b 0a 20 20 69 6e 74 20 64 65 73 69 72 65  : {.  int desire
19400 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 69  dAutoCommit;.  i
19410 6e 74 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a 0a 20  nt iRollback;.. 
19420 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
19430 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  it = pOp->p1;.  
19440 69 52 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f 70 2d  iRollback = pOp-
19450 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 64  >p2;.  assert( d
19460 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
19470 3d 3d 31 20 7c 7c 20 64 65 73 69 72 65 64 41 75  ==1 || desiredAu
19480 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20  toCommit==0 );. 
19490 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64   assert( desired
194a0 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c  AutoCommit==1 ||
194b0 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b   iRollback==0 );
194c0 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e  .  assert( db->n
194d0 56 64 62 65 41 63 74 69 76 65 3e 30 20 29 3b 20  VdbeActive>0 ); 
194e0 20 2f 2a 20 41 74 20 6c 65 61 73 74 20 74 68 69   /* At least thi
194f0 73 20 6f 6e 65 20 56 4d 20 69 73 20 61 63 74 69  s one VM is acti
19500 76 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  ve */.  assert( 
19510 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
19520 0a 20 20 69 66 28 20 64 65 73 69 72 65 64 41 75  .  if( desiredAu
19530 74 6f 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61 75  toCommit!=db->au
19540 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20  toCommit ){.    
19550 69 66 28 20 69 52 6f 6c 6c 62 61 63 6b 20 29 7b  if( iRollback ){
19560 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64  .      assert( d
19570 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
19580 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 73 71 6c  ==1 );.      sql
19590 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28  ite3RollbackAll(
195a0 64 62 2c 20 53 51 4c 49 54 45 5f 41 42 4f 52 54  db, SQLITE_ABORT
195b0 5f 52 4f 4c 4c 42 41 43 4b 29 3b 0a 20 20 20 20  _ROLLBACK);.    
195c0 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
195d0 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20   = 1;.    }else 
195e0 69 66 28 20 64 65 73 69 72 65 64 41 75 74 6f 43  if( desiredAutoC
195f0 6f 6d 6d 69 74 20 26 26 20 64 62 2d 3e 6e 56 64  ommit && db->nVd
19600 62 65 57 72 69 74 65 3e 30 20 29 7b 0a 20 20 20  beWrite>0 ){.   
19610 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 6e     /* If this in
19620 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d  struction implem
19630 65 6e 74 73 20 61 20 43 4f 4d 4d 49 54 20 61 6e  ents a COMMIT an
19640 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65 20  d other VMs are 
19650 77 72 69 74 69 6e 67 0a 20 20 20 20 20 20 2a 2a  writing.      **
19660 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72   return an error
19670 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74   indicating that
19680 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73 20 6d   the other VMs m
19690 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66 69 72  ust complete fir
196a0 73 74 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20  st. .      */.  
196b0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
196c0 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20  rror(p, "cannot 
196d0 63 6f 6d 6d 69 74 20 74 72 61 6e 73 61 63 74 69  commit transacti
196e0 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20 20 20 20  on - ".         
196f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19700 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73   "SQL statements
19710 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a   in progress");.
19720 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
19730 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67 6f  E_BUSY;.      go
19740 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
19750 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65  error;.    }else
19760 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74   if( (rc = sqlit
19770 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c  e3VdbeCheckFk(p,
19780 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20   1))!=SQLITE_OK 
19790 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64  ){.      goto vd
197a0 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d  be_return;.    }
197b0 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e  else{.      db->
197c0 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38  autoCommit = (u8
197d0 29 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d  )desiredAutoComm
197e0 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  it;.    }.    if
197f0 28 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c  ( sqlite3VdbeHal
19800 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53  t(p)==SQLITE_BUS
19810 59 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63  Y ){.      p->pc
19820 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61   = (int)(pOp - a
19830 4f 70 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61  Op);.      db->a
19840 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29  utoCommit = (u8)
19850 28 31 2d 64 65 73 69 72 65 64 41 75 74 6f 43 6f  (1-desiredAutoCo
19860 6d 6d 69 74 29 3b 0a 20 20 20 20 20 20 70 2d 3e  mmit);.      p->
19870 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45  rc = rc = SQLITE
19880 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67 6f 74  _BUSY;.      got
19890 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
198a0 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28     }.    assert(
198b0 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3d   db->nStatement=
198c0 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  =0 );.    sqlite
198d0 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73  3CloseSavepoints
198e0 28 64 62 29 3b 0a 20 20 20 20 69 66 28 20 70 2d  (db);.    if( p-
198f0 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29  >rc==SQLITE_OK )
19900 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
19910 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d 65  ITE_DONE;.    }e
19920 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  lse{.      rc = 
19930 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
19940 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20 76 64 62    }.    goto vdb
19950 65 5f 72 65 74 75 72 6e 3b 0a 20 20 7d 65 6c 73  e_return;.  }els
19960 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  e{.    sqlite3Vd
19970 62 65 45 72 72 6f 72 28 70 2c 0a 20 20 20 20 20  beError(p,.     
19980 20 20 20 28 21 64 65 73 69 72 65 64 41 75 74 6f     (!desiredAuto
19990 43 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f 74 20  Commit)?"cannot 
199a0 73 74 61 72 74 20 61 20 74 72 61 6e 73 61 63 74  start a transact
199b0 69 6f 6e 20 77 69 74 68 69 6e 20 61 20 74 72 61  ion within a tra
199c0 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20 20 20  nsaction":(.    
199d0 20 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b 29 3f      (iRollback)?
199e0 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b  "cannot rollback
199f0 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f   - no transactio
19a00 6e 20 69 73 20 61 63 74 69 76 65 22 3a 0a 20 20  n is active":.  
19a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20   "cannot commit 
19a30 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e  - no transaction
19a40 20 69 73 20 61 63 74 69 76 65 22 29 29 3b 0a 20   is active"));. 
19a50 20 20 20 20 20 20 20 20 0a 20 20 20 20 72 63 20          .    rc 
19a60 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
19a70 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
19a80 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
19a90 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
19aa0 4f 70 63 6f 64 65 3a 20 54 72 61 6e 73 61 63 74  Opcode: Transact
19ab0 69 6f 6e 20 50 31 20 50 32 20 50 33 20 50 34 20  ion P1 P2 P3 P4 
19ac0 50 35 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61  P5.**.** Begin a
19ad0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20   transaction on 
19ae0 64 61 74 61 62 61 73 65 20 50 31 20 69 66 20 61  database P1 if a
19af0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
19b00 6e 6f 74 20 61 6c 72 65 61 64 79 0a 2a 2a 20 61  not already.** a
19b10 63 74 69 76 65 2e 0a 2a 2a 20 49 66 20 50 32 20  ctive..** If P2 
19b20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
19b30 6e 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61  n a write-transa
19b40 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64  ction is started
19b50 2c 20 6f 72 20 69 66 20 61 20 0a 2a 2a 20 72 65  , or if a .** re
19b60 61 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  ad-transaction i
19b70 73 20 61 6c 72 65 61 64 79 20 61 63 74 69 76 65  s already active
19b80 2c 20 69 74 20 69 73 20 75 70 67 72 61 64 65 64  , it is upgraded
19b90 20 74 6f 20 61 20 77 72 69 74 65 2d 74 72 61 6e   to a write-tran
19ba0 73 61 63 74 69 6f 6e 2e 0a 2a 2a 20 49 66 20 50  saction..** If P
19bb0 32 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20  2 is zero, then 
19bc0 61 20 72 65 61 64 2d 74 72 61 6e 73 61 63 74 69  a read-transacti
19bd0 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2e 0a 2a  on is started..*
19be0 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69  *.** P1 is the i
19bf0 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61  ndex of the data
19c00 62 61 73 65 20 66 69 6c 65 20 6f 6e 20 77 68 69  base file on whi
19c10 63 68 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  ch the transacti
19c20 6f 6e 20 69 73 0a 2a 2a 20 73 74 61 72 74 65 64  on is.** started
19c30 2e 20 20 49 6e 64 65 78 20 30 20 69 73 20 74 68  .  Index 0 is th
19c40 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
19c50 66 69 6c 65 20 61 6e 64 20 69 6e 64 65 78 20 31  file and index 1
19c60 20 69 73 20 74 68 65 0a 2a 2a 20 66 69 6c 65 20   is the.** file 
19c70 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f 72 61  used for tempora
19c80 72 79 20 74 61 62 6c 65 73 2e 20 20 49 6e 64 69  ry tables.  Indi
19c90 63 65 73 20 6f 66 20 32 20 6f 72 20 6d 6f 72 65  ces of 2 or more
19ca0 20 61 72 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a   are used for.**
19cb0 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
19cc0 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20  ses..**.** If a 
19cd0 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f  write-transactio
19ce0 6e 20 69 73 20 73 74 61 72 74 65 64 20 61 6e 64  n is started and
19cf0 20 74 68 65 20 56 64 62 65 2e 75 73 65 73 53 74   the Vdbe.usesSt
19d00 6d 74 4a 6f 75 72 6e 61 6c 20 66 6c 61 67 20 69  mtJournal flag i
19d10 73 0a 2a 2a 20 74 72 75 65 20 28 74 68 69 73 20  s.** true (this 
19d20 66 6c 61 67 20 69 73 20 73 65 74 20 69 66 20 74  flag is set if t
19d30 68 65 20 56 64 62 65 20 6d 61 79 20 6d 6f 64 69  he Vdbe may modi
19d40 66 79 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65  fy more than one
19d50 20 72 6f 77 20 61 6e 64 20 6d 61 79 0a 2a 2a 20   row and may.** 
19d60 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65  throw an ABORT e
19d70 78 63 65 70 74 69 6f 6e 29 2c 20 61 20 73 74 61  xception), a sta
19d80 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
19d90 6f 6e 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 6f  on may also be o
19da0 70 65 6e 65 64 2e 0a 2a 2a 20 4d 6f 72 65 20 73  pened..** More s
19db0 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 61 20 73  pecifically, a s
19dc0 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
19dd0 74 69 6f 6e 20 69 73 20 6f 70 65 6e 65 64 20 69  tion is opened i
19de0 66 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  ff the database.
19df0 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73  ** connection is
19e00 20 63 75 72 72 65 6e 74 6c 79 20 6e 6f 74 20 69   currently not i
19e10 6e 20 61 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64  n autocommit mod
19e20 65 2c 20 6f 72 20 69 66 20 74 68 65 72 65 20 61  e, or if there a
19e30 72 65 20 6f 74 68 65 72 0a 2a 2a 20 61 63 74 69  re other.** acti
19e40 76 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 41  ve statements. A
19e50 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
19e60 61 63 74 69 6f 6e 20 61 6c 6c 6f 77 73 20 74 68  action allows th
19e70 65 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62  e changes made b
19e80 79 20 74 68 69 73 0a 2a 2a 20 56 44 42 45 20 74  y this.** VDBE t
19e90 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  o be rolled back
19ea0 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20   after an error 
19eb0 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20 74  without having t
19ec0 6f 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68 65 0a  o roll back the.
19ed0 2a 2a 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61  ** entire transa
19ee0 63 74 69 6f 6e 2e 20 49 66 20 6e 6f 20 65 72 72  ction. If no err
19ef0 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65  or is encountere
19f00 64 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  d, the statement
19f10 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20   transaction.** 
19f20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c  will automatical
19f30 6c 79 20 63 6f 6d 6d 69 74 20 77 68 65 6e 20 74  ly commit when t
19f40 68 65 20 56 44 42 45 20 68 61 6c 74 73 2e 0a 2a  he VDBE halts..*
19f50 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74 68  *.** If P5!=0 th
19f60 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20 61  en this opcode a
19f70 6c 73 6f 20 63 68 65 63 6b 73 20 74 68 65 20 73  lso checks the s
19f80 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 61 67 61  chema cookie aga
19f90 69 6e 73 74 20 50 33 0a 2a 2a 20 61 6e 64 20 74  inst P3.** and t
19fa0 68 65 20 73 63 68 65 6d 61 20 67 65 6e 65 72 61  he schema genera
19fb0 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 61 67 61  tion counter aga
19fc0 69 6e 73 74 20 50 34 2e 0a 2a 2a 20 54 68 65 20  inst P4..** The 
19fd0 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 20 69  cookie changes i
19fe0 74 73 20 76 61 6c 75 65 20 77 68 65 6e 65 76 65  ts value wheneve
19ff0 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  r the database s
1a000 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2e 0a 2a  chema changes..*
1a010 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e  * This operation
1a020 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65   is used to dete
1a030 63 74 20 77 68 65 6e 20 74 68 61 74 20 74 68 65  ct when that the
1a040 20 63 6f 6f 6b 69 65 20 68 61 73 20 63 68 61 6e   cookie has chan
1a050 67 65 64 0a 2a 2a 20 61 6e 64 20 74 68 61 74 20  ged.** and that 
1a060 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63  the current proc
1a070 65 73 73 20 6e 65 65 64 73 20 74 6f 20 72 65 72  ess needs to rer
1a080 65 61 64 20 74 68 65 20 73 63 68 65 6d 61 2e 20  ead the schema. 
1a090 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 0a 2a   If the schema.*
1a0a0 2a 20 63 6f 6f 6b 69 65 20 69 6e 20 50 33 20 64  * cookie in P3 d
1a0b0 69 66 66 65 72 73 20 66 72 6f 6d 20 74 68 65 20  iffers from the 
1a0c0 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 69 6e  schema cookie in
1a0d0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 65   the database he
1a0e0 61 64 65 72 20 6f 72 0a 2a 2a 20 69 66 20 74 68  ader or.** if th
1a0f0 65 20 73 63 68 65 6d 61 20 67 65 6e 65 72 61 74  e schema generat
1a100 69 6f 6e 20 63 6f 75 6e 74 65 72 20 69 6e 20 50  ion counter in P
1a110 34 20 64 69 66 66 65 72 73 20 66 72 6f 6d 20 74  4 differs from t
1a120 68 65 20 63 75 72 72 65 6e 74 0a 2a 2a 20 67 65  he current.** ge
1a130 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72  neration counter
1a140 2c 20 74 68 65 6e 20 61 6e 20 53 51 4c 49 54 45  , then an SQLITE
1a150 5f 53 43 48 45 4d 41 20 65 72 72 6f 72 20 69 73  _SCHEMA error is
1a160 20 72 61 69 73 65 64 20 61 6e 64 20 65 78 65 63   raised and exec
1a170 75 74 69 6f 6e 0a 2a 2a 20 68 61 6c 74 73 2e 20  ution.** halts. 
1a180 20 54 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65   The sqlite3_ste
1a190 70 28 29 20 77 72 61 70 70 65 72 20 66 75 6e 63  p() wrapper func
1a1a0 74 69 6f 6e 20 6d 69 67 68 74 20 74 68 65 6e 20  tion might then 
1a1b0 72 65 70 72 65 70 61 72 65 20 74 68 65 0a 2a 2a  reprepare the.**
1a1c0 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 72   statement and r
1a1d0 65 72 75 6e 20 69 74 20 66 72 6f 6d 20 74 68 65  erun it from the
1a1e0 20 62 65 67 69 6e 6e 69 6e 67 2e 0a 2a 2f 0a 63   beginning..*/.c
1a1f0 61 73 65 20 4f 50 5f 54 72 61 6e 73 61 63 74 69  ase OP_Transacti
1a200 6f 6e 3a 20 7b 0a 20 20 42 74 72 65 65 20 2a 70  on: {.  Btree *p
1a210 42 74 3b 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b  Bt;.  int iMeta;
1a220 0a 20 20 69 6e 74 20 69 47 65 6e 3b 0a 0a 20 20  .  int iGen;..  
1a230 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
1a240 61 64 65 72 20 29 3b 0a 20 20 61 73 73 65 72 74  ader );.  assert
1a250 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
1a260 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29   || pOp->p2==0 )
1a270 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1a280 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1a290 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  1<db->nDb );.  a
1a2a0 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
1a2b0 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
1a2c0 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 69 66  pOp->p1) );.  if
1a2d0 28 20 70 4f 70 2d 3e 70 32 20 26 26 20 28 64 62  ( pOp->p2 && (db
1a2e0 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
1a2f0 5f 51 75 65 72 79 4f 6e 6c 79 29 21 3d 30 20 29  _QueryOnly)!=0 )
1a300 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
1a310 45 5f 52 45 41 44 4f 4e 4c 59 3b 0a 20 20 20 20  E_READONLY;.    
1a320 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1a330 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70  o_error;.  }.  p
1a340 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70  Bt = db->aDb[pOp
1a350 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20 20 69 66  ->p1].pBt;..  if
1a360 28 20 70 42 74 20 29 7b 0a 20 20 20 20 72 63 20  ( pBt ){.    rc 
1a370 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65  = sqlite3BtreeBe
1a380 67 69 6e 54 72 61 6e 73 28 70 42 74 2c 20 70 4f  ginTrans(pBt, pO
1a390 70 2d 3e 70 32 29 3b 0a 20 20 20 20 74 65 73 74  p->p2);.    test
1a3a0 63 61 73 65 28 20 72 63 3d 3d 53 51 4c 49 54 45  case( rc==SQLITE
1a3b0 5f 42 55 53 59 5f 53 4e 41 50 53 48 4f 54 20 29  _BUSY_SNAPSHOT )
1a3c0 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20  ;.    testcase( 
1a3d0 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 5f  rc==SQLITE_BUSY_
1a3e0 52 45 43 4f 56 45 52 59 20 29 3b 0a 20 20 20 20  RECOVERY );.    
1a3f0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1a400 4b 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28  K ){.      if( (
1a410 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45  rc&0xff)==SQLITE
1a420 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20  _BUSY ){.       
1a430 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70   p->pc = (int)(p
1a440 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20  Op - aOp);.     
1a450 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20     p->rc = rc;. 
1a460 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65         goto vdbe
1a470 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d  _return;.      }
1a480 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
1a490 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1a4a0 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 70      }..    if( p
1a4b0 4f 70 2d 3e 70 32 20 26 26 20 70 2d 3e 75 73 65  Op->p2 && p->use
1a4c0 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20 20  sStmtJournal .  
1a4d0 20 20 20 26 26 20 28 64 62 2d 3e 61 75 74 6f 43     && (db->autoC
1a4e0 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e  ommit==0 || db->
1a4f0 6e 56 64 62 65 52 65 61 64 3e 31 29 20 0a 20 20  nVdbeRead>1) .  
1a500 20 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72    ){.      asser
1a510 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 49  t( sqlite3BtreeI
1a520 73 49 6e 54 72 61 6e 73 28 70 42 74 29 20 29 3b  sInTrans(pBt) );
1a530 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 69 53  .      if( p->iS
1a540 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20  tatement==0 ){. 
1a550 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64         assert( d
1a560 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3e 3d 30  b->nStatement>=0
1a570 20 26 26 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69   && db->nSavepoi
1a580 6e 74 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 20  nt>=0 );.       
1a590 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b   db->nStatement+
1a5a0 2b 3b 20 0a 20 20 20 20 20 20 20 20 70 2d 3e 69  +; .        p->i
1a5b0 53 74 61 74 65 6d 65 6e 74 20 3d 20 64 62 2d 3e  Statement = db->
1a5c0 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d  nSavepoint + db-
1a5d0 3e 6e 53 74 61 74 65 6d 65 6e 74 3b 0a 20 20 20  >nStatement;.   
1a5e0 20 20 20 7d 0a 0a 20 20 20 20 20 20 72 63 20 3d     }..      rc =
1a5f0 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65   sqlite3VtabSave
1a600 70 6f 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f  point(db, SAVEPO
1a610 49 4e 54 5f 42 45 47 49 4e 2c 20 70 2d 3e 69 53  INT_BEGIN, p->iS
1a620 74 61 74 65 6d 65 6e 74 2d 31 29 3b 0a 20 20 20  tatement-1);.   
1a630 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
1a640 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
1a650 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1a660 65 42 65 67 69 6e 53 74 6d 74 28 70 42 74 2c 20  eBeginStmt(pBt, 
1a670 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 29 3b 0a  p->iStatement);.
1a680 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f        }..      /
1a690 2a 20 53 74 6f 72 65 20 74 68 65 20 63 75 72 72  * Store the curr
1a6a0 65 6e 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65  ent value of the
1a6b0 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
1a6c0 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74  s deferred const
1a6d0 72 61 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20 63  raint.      ** c
1a6e0 6f 75 6e 74 65 72 2e 20 49 66 20 74 68 65 20 73  ounter. If the s
1a6f0 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
1a700 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62 65  tion needs to be
1a710 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a 20 20   rolled back,.  
1a720 20 20 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65      ** the value
1a730 20 6f 66 20 74 68 69 73 20 63 6f 75 6e 74 65 72   of this counter
1a740 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65 73   needs to be res
1a750 74 6f 72 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a 20  tored too.  */. 
1a760 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66       p->nStmtDef
1a770 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65  Cons = db->nDefe
1a780 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20  rredCons;.      
1a790 70 2d 3e 6e 53 74 6d 74 44 65 66 49 6d 6d 43 6f  p->nStmtDefImmCo
1a7a0 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72  ns = db->nDeferr
1a7b0 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 7d  edImmCons;.    }
1a7c0 0a 0a 20 20 20 20 2f 2a 20 47 61 74 68 65 72 20  ..    /* Gather 
1a7d0 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  the schema versi
1a7e0 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 68  on number for ch
1a7f0 65 63 6b 69 6e 67 3a 0a 20 20 20 20 2a 2a 20 49  ecking:.    ** I
1a800 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46  MPLEMENTATION-OF
1a810 3a 20 52 2d 30 33 31 38 39 2d 35 31 31 33 35 20  : R-03189-51135 
1a820 41 73 20 65 61 63 68 20 53 51 4c 20 73 74 61 74  As each SQL stat
1a830 65 6d 65 6e 74 20 72 75 6e 73 2c 20 74 68 65 20  ement runs, the 
1a840 73 63 68 65 6d 61 0a 20 20 20 20 2a 2a 20 76 65  schema.    ** ve
1a850 72 73 69 6f 6e 20 69 73 20 63 68 65 63 6b 65 64  rsion is checked
1a860 20 74 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20   to ensure that 
1a870 74 68 65 20 73 63 68 65 6d 61 20 68 61 73 20 6e  the schema has n
1a880 6f 74 20 63 68 61 6e 67 65 64 20 73 69 6e 63 65  ot changed since
1a890 20 74 68 65 0a 20 20 20 20 2a 2a 20 53 51 4c 20   the.    ** SQL 
1a8a0 73 74 61 74 65 6d 65 6e 74 20 77 61 73 20 70 72  statement was pr
1a8b0 65 70 61 72 65 64 2e 0a 20 20 20 20 2a 2f 0a 20  epared..    */. 
1a8c0 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47     sqlite3BtreeG
1a8d0 65 74 4d 65 74 61 28 70 42 74 2c 20 42 54 52 45  etMeta(pBt, BTRE
1a8e0 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e  E_SCHEMA_VERSION
1a8f0 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29  , (u32 *)&iMeta)
1a900 3b 0a 20 20 20 20 69 47 65 6e 20 3d 20 64 62 2d  ;.    iGen = db-
1a910 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53  >aDb[pOp->p1].pS
1a920 63 68 65 6d 61 2d 3e 69 47 65 6e 65 72 61 74 69  chema->iGenerati
1a930 6f 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  on;.  }else{.   
1a940 20 69 47 65 6e 20 3d 20 69 4d 65 74 61 20 3d 20   iGen = iMeta = 
1a950 30 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  0;.  }.  assert(
1a960 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70   pOp->p5==0 || p
1a970 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
1a980 4e 54 33 32 20 29 3b 0a 20 20 69 66 28 20 70 4f  NT32 );.  if( pO
1a990 70 2d 3e 70 35 20 26 26 20 28 69 4d 65 74 61 21  p->p5 && (iMeta!
1a9a0 3d 70 4f 70 2d 3e 70 33 20 7c 7c 20 69 47 65 6e  =pOp->p3 || iGen
1a9b0 21 3d 70 4f 70 2d 3e 70 34 2e 69 29 20 29 7b 0a  !=pOp->p4.i) ){.
1a9c0 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
1a9d0 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67  e(db, p->zErrMsg
1a9e0 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73  );.    p->zErrMs
1a9f0 67 20 3d 20 73 71 6c 69 74 65 33 44 62 53 74 72  g = sqlite3DbStr
1aa00 44 75 70 28 64 62 2c 20 22 64 61 74 61 62 61 73  Dup(db, "databas
1aa10 65 20 73 63 68 65 6d 61 20 68 61 73 20 63 68 61  e schema has cha
1aa20 6e 67 65 64 22 29 3b 0a 20 20 20 20 2f 2a 20 49  nged");.    /* I
1aa30 66 20 74 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f  f the schema-coo
1aa40 6b 69 65 20 66 72 6f 6d 20 74 68 65 20 64 61 74  kie from the dat
1aa50 61 62 61 73 65 20 66 69 6c 65 20 6d 61 74 63 68  abase file match
1aa60 65 73 20 74 68 65 20 63 6f 6f 6b 69 65 20 0a 20  es the cookie . 
1aa70 20 20 20 2a 2a 20 73 74 6f 72 65 64 20 77 69 74     ** stored wit
1aa80 68 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20  h the in-memory 
1aa90 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
1aaa0 66 20 74 68 65 20 73 63 68 65 6d 61 2c 20 64 6f  f the schema, do
1aab0 0a 20 20 20 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f  .    ** not relo
1aac0 61 64 20 74 68 65 20 73 63 68 65 6d 61 20 66 72  ad the schema fr
1aad0 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
1aae0 66 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20  file..    **.   
1aaf0 20 2a 2a 20 49 66 20 76 69 72 74 75 61 6c 2d 74   ** If virtual-t
1ab00 61 62 6c 65 73 20 61 72 65 20 69 6e 20 75 73 65  ables are in use
1ab10 2c 20 74 68 69 73 20 69 73 20 6e 6f 74 20 6a 75  , this is not ju
1ab20 73 74 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69  st an optimizati
1ab30 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66 74 65 6e  on..    ** Often
1ab40 2c 20 76 2d 74 61 62 6c 65 73 20 73 74 6f 72 65  , v-tables store
1ab50 20 74 68 65 69 72 20 64 61 74 61 20 69 6e 20 6f   their data in o
1ab60 74 68 65 72 20 53 51 4c 69 74 65 20 74 61 62 6c  ther SQLite tabl
1ab70 65 73 2c 20 77 68 69 63 68 0a 20 20 20 20 2a 2a  es, which.    **
1ab80 20 61 72 65 20 71 75 65 72 69 65 64 20 66 72 6f   are queried fro
1ab90 6d 20 77 69 74 68 69 6e 20 78 4e 65 78 74 28 29  m within xNext()
1aba0 20 61 6e 64 20 6f 74 68 65 72 20 76 2d 74 61 62   and other v-tab
1abb0 6c 65 20 6d 65 74 68 6f 64 73 20 75 73 69 6e 67  le methods using
1abc0 0a 20 20 20 20 2a 2a 20 70 72 65 70 61 72 65 64  .    ** prepared
1abd0 20 71 75 65 72 69 65 73 2e 20 49 66 20 73 75 63   queries. If suc
1abe0 68 20 61 20 71 75 65 72 79 20 69 73 20 6f 75 74  h a query is out
1abf0 2d 6f 66 2d 64 61 74 65 2c 20 77 65 20 64 6f 20  -of-date, we do 
1ac00 6e 6f 74 20 77 61 6e 74 20 74 6f 0a 20 20 20 20  not want to.    
1ac10 2a 2a 20 64 69 73 63 61 72 64 20 74 68 65 20 64  ** discard the d
1ac20 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20  atabase schema, 
1ac30 61 73 20 74 68 65 20 75 73 65 72 20 63 6f 64 65  as the user code
1ac40 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68   implementing th
1ac50 65 0a 20 20 20 20 2a 2a 20 76 2d 74 61 62 6c 65  e.    ** v-table
1ac60 20 77 6f 75 6c 64 20 68 61 76 65 20 74 6f 20 62   would have to b
1ac70 65 20 72 65 61 64 79 20 66 6f 72 20 74 68 65 20  e ready for the 
1ac80 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72  sqlite3_vtab str
1ac90 75 63 74 75 72 65 20 69 74 73 65 6c 66 0a 20 20  ucture itself.  
1aca0 20 20 2a 2a 20 74 6f 20 62 65 20 69 6e 76 61 6c    ** to be inval
1acb0 69 64 61 74 65 64 20 77 68 65 6e 65 76 65 72 20  idated whenever 
1acc0 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 69  sqlite3_step() i
1acd0 73 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69  s called from wi
1ace0 74 68 69 6e 20 0a 20 20 20 20 2a 2a 20 61 20 76  thin .    ** a v
1acf0 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 2e 0a 20  -table method.. 
1ad00 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 64 62     */.    if( db
1ad10 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
1ad20 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63  Schema->schema_c
1ad30 6f 6f 6b 69 65 21 3d 69 4d 65 74 61 20 29 7b 0a  ookie!=iMeta ){.
1ad40 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73        sqlite3Res
1ad50 65 74 4f 6e 65 53 63 68 65 6d 61 28 64 62 2c 20  etOneSchema(db, 
1ad60 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a  pOp->p1);.    }.
1ad70 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d      p->expired =
1ad80 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   1;.    rc = SQL
1ad90 49 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20 7d 0a  ITE_SCHEMA;.  }.
1ada0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
1adb0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1adc0 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  or;.  break;.}..
1add0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 64 43  /* Opcode: ReadC
1ade0 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a  ookie P1 P2 P3 *
1adf0 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f   *.**.** Read co
1ae00 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 33 20 66  okie number P3 f
1ae10 72 6f 6d 20 64 61 74 61 62 61 73 65 20 50 31 20  rom database P1 
1ae20 61 6e 64 20 77 72 69 74 65 20 69 74 20 69 6e 74  and write it int
1ae30 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
1ae40 2a 20 50 33 3d 3d 31 20 69 73 20 74 68 65 20 73  * P3==1 is the s
1ae50 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20  chema version.  
1ae60 50 33 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74  P3==2 is the dat
1ae70 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a  abase format..**
1ae80 20 50 33 3d 3d 33 20 69 73 20 74 68 65 20 72 65   P3==3 is the re
1ae90 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20  commended pager 
1aea0 63 61 63 68 65 20 73 69 7a 65 2c 20 61 6e 64 20  cache size, and 
1aeb0 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30  so forth.  P1==0
1aec0 20 69 73 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20   is.** the main 
1aed0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e  database file an
1aee0 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20 64  d P1==1 is the d
1aef0 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65  atabase file use
1af00 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65  d to store.** te
1af10 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a  mporary tables..
1af20 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 6d 75 73 74  **.** There must
1af30 20 62 65 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20   be a read-lock 
1af40 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
1af50 28 65 69 74 68 65 72 20 61 20 74 72 61 6e 73 61  (either a transa
1af60 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62 65  ction.** must be
1af70 20 73 74 61 72 74 65 64 20 6f 72 20 74 68 65 72   started or ther
1af80 65 20 6d 75 73 74 20 62 65 20 61 6e 20 6f 70 65  e must be an ope
1af90 6e 20 63 75 72 73 6f 72 29 20 62 65 66 6f 72 65  n cursor) before
1afa0 0a 2a 2a 20 65 78 65 63 75 74 69 6e 67 20 74 68  .** executing th
1afb0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  is instruction..
1afc0 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 64 43  */.case OP_ReadC
1afd0 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 20  ookie: {        
1afe0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
1aff0 2f 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20  /.  int iMeta;. 
1b000 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20   int iDb;.  int 
1b010 69 43 6f 6f 6b 69 65 3b 0a 0a 20 20 61 73 73 65  iCookie;..  asse
1b020 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
1b030 20 29 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d   );.  iDb = pOp-
1b040 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b 69 65 20 3d  >p1;.  iCookie =
1b050 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65   pOp->p3;.  asse
1b060 72 74 28 20 70 4f 70 2d 3e 70 33 3c 53 51 4c 49  rt( pOp->p3<SQLI
1b070 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20  TE_N_BTREE_META 
1b080 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62  );.  assert( iDb
1b090 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e  >=0 && iDb<db->n
1b0a0 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
1b0b0 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74  db->aDb[iDb].pBt
1b0c0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
1b0d0 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
1b0e0 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29  treeMask, iDb) )
1b0f0 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65  ;..  sqlite3Btre
1b100 65 47 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62  eGetMeta(db->aDb
1b110 5b 69 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b  [iDb].pBt, iCook
1b120 69 65 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74  ie, (u32 *)&iMet
1b130 61 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74  a);.  pOut = out
1b140 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
1b150 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  Op);.  pOut->u.i
1b160 20 3d 20 69 4d 65 74 61 3b 0a 20 20 62 72 65 61   = iMeta;.  brea
1b170 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1b180 20 53 65 74 43 6f 6f 6b 69 65 20 50 31 20 50 32   SetCookie P1 P2
1b190 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72   P3 * *.**.** Wr
1b1a0 69 74 65 20 74 68 65 20 69 6e 74 65 67 65 72 20  ite the integer 
1b1b0 76 61 6c 75 65 20 50 33 20 69 6e 74 6f 20 63 6f  value P3 into co
1b1c0 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 32 20 6f  okie number P2 o
1b1d0 66 20 64 61 74 61 62 61 73 65 20 50 31 2e 0a 2a  f database P1..*
1b1e0 2a 20 50 32 3d 3d 31 20 69 73 20 74 68 65 20 73  * P2==1 is the s
1b1f0 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20  chema version.  
1b200 50 32 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74  P2==2 is the dat
1b210 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a  abase format..**
1b220 20 50 32 3d 3d 33 20 69 73 20 74 68 65 20 72 65   P2==3 is the re
1b230 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20  commended pager 
1b240 63 61 63 68 65 20 0a 2a 2a 20 73 69 7a 65 2c 20  cache .** size, 
1b250 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50  and so forth.  P
1b260 31 3d 3d 30 20 69 73 20 74 68 65 20 6d 61 69 6e  1==0 is the main
1b270 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
1b280 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20  nd P1==1 is the 
1b290 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c  .** database fil
1b2a0 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  e used to store 
1b2b0 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
1b2c0 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e 73 61  ..**.** A transa
1b2d0 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 73 74  ction must be st
1b2e0 61 72 74 65 64 20 62 65 66 6f 72 65 20 65 78 65  arted before exe
1b2f0 63 75 74 69 6e 67 20 74 68 69 73 20 6f 70 63 6f  cuting this opco
1b300 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  de..*/.case OP_S
1b310 65 74 43 6f 6f 6b 69 65 3a 20 7b 0a 20 20 44 62  etCookie: {.  Db
1b320 20 2a 70 44 62 3b 0a 20 20 61 73 73 65 72 74 28   *pDb;.  assert(
1b330 20 70 4f 70 2d 3e 70 32 3c 53 51 4c 49 54 45 5f   pOp->p2<SQLITE_
1b340 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a  N_BTREE_META );.
1b350 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1b360 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1b370 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
1b380 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
1b390 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f  p->btreeMask, pO
1b3a0 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65  p->p1) );.  asse
1b3b0 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
1b3c0 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64  =0 );.  pDb = &d
1b3d0 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b  b->aDb[pOp->p1];
1b3e0 0a 20 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e  .  assert( pDb->
1b3f0 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  pBt!=0 );.  asse
1b400 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d  rt( sqlite3Schem
1b410 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 70  aMutexHeld(db, p
1b420 4f 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a 20 20  Op->p1, 0) );.  
1b430 2f 2a 20 53 65 65 20 6e 6f 74 65 20 61 62 6f 75  /* See note abou
1b440 74 20 69 6e 64 65 78 20 73 68 69 66 74 69 6e 67  t index shifting
1b450 20 6f 6e 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69   on OP_ReadCooki
1b460 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69  e */.  rc = sqli
1b470 74 65 33 42 74 72 65 65 55 70 64 61 74 65 4d 65  te3BtreeUpdateMe
1b480 74 61 28 70 44 62 2d 3e 70 42 74 2c 20 70 4f 70  ta(pDb->pBt, pOp
1b490 2d 3e 70 32 2c 20 70 4f 70 2d 3e 70 33 29 3b 0a  ->p2, pOp->p3);.
1b4a0 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42    if( pOp->p2==B
1b4b0 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53  TREE_SCHEMA_VERS
1b4c0 49 4f 4e 20 29 7b 0a 20 20 20 20 2f 2a 20 57 68  ION ){.    /* Wh
1b4d0 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f  en the schema co
1b4e0 6f 6b 69 65 20 63 68 61 6e 67 65 73 2c 20 72 65  okie changes, re
1b4f0 63 6f 72 64 20 74 68 65 20 6e 65 77 20 63 6f 6f  cord the new coo
1b500 6b 69 65 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2a  kie internally *
1b510 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65  /.    pDb->pSche
1b520 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69  ma->schema_cooki
1b530 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20  e = pOp->p3;.   
1b540 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51   db->flags |= SQ
1b550 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67  LITE_InternChang
1b560 65 73 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  es;.  }else if( 
1b570 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 46  pOp->p2==BTREE_F
1b580 49 4c 45 5f 46 4f 52 4d 41 54 20 29 7b 0a 20 20  ILE_FORMAT ){.  
1b590 20 20 2f 2a 20 52 65 63 6f 72 64 20 63 68 61 6e    /* Record chan
1b5a0 67 65 73 20 69 6e 20 74 68 65 20 66 69 6c 65 20  ges in the file 
1b5b0 66 6f 72 6d 61 74 20 2a 2f 0a 20 20 20 20 70 44  format */.    pD
1b5c0 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65  b->pSchema->file
1b5d0 5f 66 6f 72 6d 61 74 20 3d 20 70 4f 70 2d 3e 70  _format = pOp->p
1b5e0 33 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  3;.  }.  if( pOp
1b5f0 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20 2f  ->p1==1 ){.    /
1b600 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c  * Invalidate all
1b610 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
1b620 65 6e 74 73 20 77 68 65 6e 65 76 65 72 20 74 68  ents whenever th
1b630 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 0a  e TEMP database.
1b640 20 20 20 20 2a 2a 20 73 63 68 65 6d 61 20 69 73      ** schema is
1b650 20 63 68 61 6e 67 65 64 2e 20 20 54 69 63 6b 65   changed.  Ticke
1b660 74 20 23 31 36 34 34 20 2a 2f 0a 20 20 20 20 73  t #1644 */.    s
1b670 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70  qlite3ExpirePrep
1b680 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64  aredStatements(d
1b690 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72  b);.    p->expir
1b6a0 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66  ed = 0;.  }.  if
1b6b0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
1b6c0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1b6d0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1b6e0 70 63 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64 20  pcode: OpenRead 
1b6f0 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
1b700 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74  * Synopsis: root
1b710 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a  =P2 iDb=P3.**.**
1b720 20 4f 70 65 6e 20 61 20 72 65 61 64 2d 6f 6e 6c   Open a read-onl
1b730 79 20 63 75 72 73 6f 72 20 66 6f 72 20 74 68 65  y cursor for the
1b740 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
1b750 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20  whose root page 
1b760 69 73 0a 2a 2a 20 50 32 20 69 6e 20 61 20 64 61  is.** P2 in a da
1b770 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68  tabase file.  Th
1b780 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
1b790 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  is determined by
1b7a0 20 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20 6d   P3. .** P3==0 m
1b7b0 65 61 6e 73 20 74 68 65 20 6d 61 69 6e 20 64 61  eans the main da
1b7c0 74 61 62 61 73 65 2c 20 50 33 3d 3d 31 20 6d 65  tabase, P3==1 me
1b7d0 61 6e 73 20 74 68 65 20 64 61 74 61 62 61 73 65  ans the database
1b7e0 20 75 73 65 64 20 66 6f 72 20 0a 2a 2a 20 74 65   used for .** te
1b7f0 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2c 20  mporary tables, 
1b800 61 6e 64 20 50 33 3e 31 20 6d 65 61 6e 73 20 75  and P3>1 means u
1b810 73 65 64 20 74 68 65 20 63 6f 72 72 65 73 70 6f  sed the correspo
1b820 6e 64 69 6e 67 20 61 74 74 61 63 68 65 64 0a 2a  nding attached.*
1b830 2a 20 64 61 74 61 62 61 73 65 2e 20 20 47 69 76  * database.  Giv
1b840 65 20 74 68 65 20 6e 65 77 20 63 75 72 73 6f 72  e the new cursor
1b850 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 6f   an identifier o
1b860 66 20 50 31 2e 20 20 54 68 65 20 50 31 0a 2a 2a  f P1.  The P1.**
1b870 20 76 61 6c 75 65 73 20 6e 65 65 64 20 6e 6f 74   values need not
1b880 20 62 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 62   be contiguous b
1b890 75 74 20 61 6c 6c 20 50 31 20 76 61 6c 75 65 73  ut all P1 values
1b8a0 20 73 68 6f 75 6c 64 20 62 65 20 73 6d 61 6c 6c   should be small
1b8b0 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 49 74   integers..** It
1b8c0 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72   is an error for
1b8d0 20 50 31 20 74 6f 20 62 65 20 6e 65 67 61 74 69   P1 to be negati
1b8e0 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21  ve..**.** If P5!
1b8f0 3d 30 20 74 68 65 6e 20 75 73 65 20 74 68 65 20  =0 then use the 
1b900 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
1b910 74 65 72 20 50 32 20 61 73 20 74 68 65 20 72 6f  ter P2 as the ro
1b920 6f 74 20 70 61 67 65 2c 20 6e 6f 74 0a 2a 2a 20  ot page, not.** 
1b930 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50 32 20  the value of P2 
1b940 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54 68  itself..**.** Th
1b950 65 72 65 20 77 69 6c 6c 20 62 65 20 61 20 72 65  ere will be a re
1b960 61 64 20 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64  ad lock on the d
1b970 61 74 61 62 61 73 65 20 77 68 65 6e 65 76 65 72  atabase whenever
1b980 20 74 68 65 72 65 20 69 73 20 61 6e 0a 2a 2a 20   there is an.** 
1b990 6f 70 65 6e 20 63 75 72 73 6f 72 2e 20 20 49 66  open cursor.  If
1b9a0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77 61   the database wa
1b9b0 73 20 75 6e 6c 6f 63 6b 65 64 20 70 72 69 6f 72  s unlocked prior
1b9c0 20 74 6f 20 74 68 69 73 20 69 6e 73 74 72 75 63   to this instruc
1b9d0 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e 20 61 20 72  tion.** then a r
1b9e0 65 61 64 20 6c 6f 63 6b 20 69 73 20 61 63 71 75  ead lock is acqu
1b9f0 69 72 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  ired as part of 
1ba00 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
1ba10 2e 20 20 41 20 72 65 61 64 0a 2a 2a 20 6c 6f 63  .  A read.** loc
1ba20 6b 20 61 6c 6c 6f 77 73 20 6f 74 68 65 72 20 70  k allows other p
1ba30 72 6f 63 65 73 73 65 73 20 74 6f 20 72 65 61 64  rocesses to read
1ba40 20 74 68 65 20 64 61 74 61 62 61 73 65 20 62 75   the database bu
1ba50 74 20 70 72 6f 68 69 62 69 74 73 0a 2a 2a 20 61  t prohibits.** a
1ba60 6e 79 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73  ny other process
1ba70 20 66 72 6f 6d 20 6d 6f 64 69 66 79 69 6e 67 20   from modifying 
1ba80 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 54  the database.  T
1ba90 68 65 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 0a  he read lock is.
1baa0 2a 2a 20 72 65 6c 65 61 73 65 64 20 77 68 65 6e  ** released when
1bab0 20 61 6c 6c 20 63 75 72 73 6f 72 73 20 61 72 65   all cursors are
1bac0 20 63 6c 6f 73 65 64 2e 20 20 49 66 20 74 68 69   closed.  If thi
1bad0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74  s instruction at
1bae0 74 65 6d 70 74 73 0a 2a 2a 20 74 6f 20 67 65 74  tempts.** to get
1baf0 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 62 75 74   a read lock but
1bb00 20 66 61 69 6c 73 2c 20 74 68 65 20 73 63 72 69   fails, the scri
1bb10 70 74 20 74 65 72 6d 69 6e 61 74 65 73 20 77 69  pt terminates wi
1bb20 74 68 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f  th an.** SQLITE_
1bb30 42 55 53 59 20 65 72 72 6f 72 20 63 6f 64 65 2e  BUSY error code.
1bb40 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61  .**.** The P4 va
1bb50 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74 68 65  lue may be eithe
1bb60 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34  r an integer (P4
1bb70 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69  _INT32) or a poi
1bb80 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79  nter to.** a Key
1bb90 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 28  Info structure (
1bba0 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20  P4_KEYINFO). If 
1bbb0 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  it is a pointer 
1bbc0 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a  to a KeyInfo .**
1bbd0 20 73 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e   structure, then
1bbe0 20 73 61 69 64 20 73 74 72 75 63 74 75 72 65 20   said structure 
1bbf0 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74  defines the cont
1bc00 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e  ent and collatin
1bc10 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f  g .** sequence o
1bc20 66 20 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e  f the index bein
1bc30 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77  g opened. Otherw
1bc40 69 73 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e  ise, if P4 is an
1bc50 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c   integer .** val
1bc60 75 65 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f  ue, it is set to
1bc70 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
1bc80 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61  olumns in the ta
1bc90 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ble..**.** See a
1bca0 6c 73 6f 3a 20 4f 70 65 6e 57 72 69 74 65 2c 20  lso: OpenWrite, 
1bcb0 52 65 6f 70 65 6e 49 64 78 0a 2a 2f 0a 2f 2a 20  ReopenIdx.*/./* 
1bcc0 4f 70 63 6f 64 65 3a 20 52 65 6f 70 65 6e 49 64  Opcode: ReopenId
1bcd0 78 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  x P1 P2 P3 P4 P5
1bce0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f  .** Synopsis: ro
1bcf0 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a  ot=P2 iDb=P3.**.
1bd00 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e 49 64 78  ** The ReopenIdx
1bd10 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 65 78   opcode works ex
1bd20 61 63 74 6c 79 20 6c 69 6b 65 20 52 65 61 64 4f  actly like ReadO
1bd30 70 65 6e 20 65 78 63 65 70 74 20 74 68 61 74 20  pen except that 
1bd40 69 74 20 66 69 72 73 74 0a 2a 2a 20 63 68 65 63  it first.** chec
1bd50 6b 73 20 74 6f 20 73 65 65 20 69 66 20 74 68 65  ks to see if the
1bd60 20 63 75 72 73 6f 72 20 6f 6e 20 50 31 20 69 73   cursor on P1 is
1bd70 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 20 77 69   already open wi
1bd80 74 68 20 61 20 72 6f 6f 74 20 70 61 67 65 0a 2a  th a root page.*
1bd90 2a 20 6e 75 6d 62 65 72 20 6f 66 20 50 32 20 61  * number of P2 a
1bda0 6e 64 20 69 66 20 69 74 20 69 73 20 74 68 69 73  nd if it is this
1bdb0 20 6f 70 63 6f 64 65 20 62 65 63 6f 6d 65 73 20   opcode becomes 
1bdc0 61 20 6e 6f 2d 6f 70 2e 20 20 49 6e 20 6f 74 68  a no-op.  In oth
1bdd0 65 72 20 77 6f 72 64 73 2c 0a 2a 2a 20 69 66 20  er words,.** if 
1bde0 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c  the cursor is al
1bdf0 72 65 61 64 79 20 6f 70 65 6e 2c 20 64 6f 20 6e  ready open, do n
1be00 6f 74 20 72 65 6f 70 65 6e 20 69 74 2e 0a 2a 2a  ot reopen it..**
1be10 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e 49 64  .** The ReopenId
1be20 78 20 6f 70 63 6f 64 65 20 6d 61 79 20 6f 6e 6c  x opcode may onl
1be30 79 20 62 65 20 75 73 65 64 20 77 69 74 68 20 50  y be used with P
1be40 35 3d 3d 30 20 61 6e 64 20 77 69 74 68 20 50 34  5==0 and with P4
1be50 20 62 65 69 6e 67 0a 2a 2a 20 61 20 50 34 5f 4b   being.** a P4_K
1be60 45 59 49 4e 46 4f 20 6f 62 6a 65 63 74 2e 20 20  EYINFO object.  
1be70 46 75 72 74 68 65 72 6d 6f 72 65 2c 20 74 68 65  Furthermore, the
1be80 20 50 33 20 76 61 6c 75 65 20 6d 75 73 74 20 62   P3 value must b
1be90 65 20 74 68 65 20 73 61 6d 65 20 61 73 0a 2a 2a  e the same as.**
1bea0 20 65 76 65 72 79 20 6f 74 68 65 72 20 52 65 6f   every other Reo
1beb0 70 65 6e 49 64 78 20 6f 72 20 4f 70 65 6e 52 65  penIdx or OpenRe
1bec0 61 64 20 66 6f 72 20 74 68 65 20 73 61 6d 65 20  ad for the same 
1bed0 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e 0a 2a  cursor number..*
1bee0 2a 0a 2a 2a 20 53 65 65 20 74 68 65 20 4f 70 65  *.** See the Ope
1bef0 6e 52 65 61 64 20 6f 70 63 6f 64 65 20 64 6f 63  nRead opcode doc
1bf00 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20 61  umentation for a
1bf10 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
1bf20 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  ation..*/./* Opc
1bf30 6f 64 65 3a 20 4f 70 65 6e 57 72 69 74 65 20 50  ode: OpenWrite P
1bf40 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
1bf50 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d   Synopsis: root=
1bf60 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20  P2 iDb=P3.**.** 
1bf70 4f 70 65 6e 20 61 20 72 65 61 64 2f 77 72 69 74  Open a read/writ
1bf80 65 20 63 75 72 73 6f 72 20 6e 61 6d 65 64 20 50  e cursor named P
1bf90 31 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6f  1 on the table o
1bfa0 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f  r index whose ro
1bfb0 6f 74 0a 2a 2a 20 70 61 67 65 20 69 73 20 50 32  ot.** page is P2
1bfc0 2e 20 20 4f 72 20 69 66 20 50 35 21 3d 30 20 75  .  Or if P5!=0 u
1bfd0 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  se the content o
1bfe0 66 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f  f register P2 to
1bff0 20 66 69 6e 64 20 74 68 65 0a 2a 2a 20 72 6f 6f   find the.** roo
1c000 74 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  t page..**.** Th
1c010 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62  e P4 value may b
1c020 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65  e either an inte
1c030 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f  ger (P4_INT32) o
1c040 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a  r a pointer to.*
1c050 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75  * a KeyInfo stru
1c060 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46  cture (P4_KEYINF
1c070 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70  O). If it is a p
1c080 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49  ointer to a KeyI
1c090 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72  nfo .** structur
1c0a0 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74 72  e, then said str
1c0b0 75 63 74 75 72 65 20 64 65 66 69 6e 65 73 20 74  ucture defines t
1c0c0 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63  he content and c
1c0d0 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71  ollating .** seq
1c0e0 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64  uence of the ind
1c0f0 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e  ex being opened.
1c100 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50   Otherwise, if P
1c110 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  4 is an integer 
1c120 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73  .** value, it is
1c130 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62   set to the numb
1c140 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
1c150 20 74 68 65 20 74 61 62 6c 65 2c 20 6f 72 20 74   the table, or t
1c160 6f 20 74 68 65 0a 2a 2a 20 6c 61 72 67 65 73 74  o the.** largest
1c170 20 69 6e 64 65 78 20 6f 66 20 61 6e 79 20 63 6f   index of any co
1c180 6c 75 6d 6e 20 6f 66 20 74 68 65 20 74 61 62 6c  lumn of the tabl
1c190 65 20 74 68 61 74 20 69 73 20 61 63 74 75 61 6c  e that is actual
1c1a0 6c 79 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54  ly used..**.** T
1c1b0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
1c1c0 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
1c1d0 4f 70 65 6e 52 65 61 64 20 65 78 63 65 70 74 20  OpenRead except 
1c1e0 74 68 61 74 20 69 74 20 6f 70 65 6e 73 20 74 68  that it opens th
1c1f0 65 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20 72  e cursor.** in r
1c200 65 61 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e 20  ead/write mode. 
1c210 20 46 6f 72 20 61 20 67 69 76 65 6e 20 74 61 62   For a given tab
1c220 6c 65 2c 20 74 68 65 72 65 20 63 61 6e 20 62 65  le, there can be
1c230 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 65 61   one or more rea
1c240 64 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f 72  d-only.** cursor
1c250 73 20 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 65  s or a single re
1c260 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20  ad/write cursor 
1c270 62 75 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a  but not both..**
1c280 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65  .** See also Ope
1c290 6e 52 65 61 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  nRead..*/.case O
1c2a0 50 5f 52 65 6f 70 65 6e 49 64 78 3a 20 7b 0a 20  P_ReopenIdx: {. 
1c2b0 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20 4b   int nField;.  K
1c2c0 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f  eyInfo *pKeyInfo
1c2d0 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 69 6e  ;.  int p2;.  in
1c2e0 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 77 72 46  t iDb;.  int wrF
1c2f0 6c 61 67 3b 0a 20 20 42 74 72 65 65 20 2a 70 58  lag;.  Btree *pX
1c300 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
1c310 70 43 75 72 3b 0a 20 20 44 62 20 2a 70 44 62 3b  pCur;.  Db *pDb;
1c320 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
1c330 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70  >p5==0 || pOp->p
1c340 35 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51  5==OPFLAG_SEEKEQ
1c350 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1c360 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45  p->p4type==P4_KE
1c370 59 49 4e 46 4f 20 29 3b 0a 20 20 70 43 75 72 20  YINFO );.  pCur 
1c380 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1c390 70 31 5d 3b 0a 20 20 69 66 28 20 70 43 75 72 20  p1];.  if( pCur 
1c3a0 26 26 20 70 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f  && pCur->pgnoRoo
1c3b0 74 3d 3d 28 75 33 32 29 70 4f 70 2d 3e 70 32 20  t==(u32)pOp->p2 
1c3c0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
1c3d0 43 75 72 2d 3e 69 44 62 3d 3d 70 4f 70 2d 3e 70  Cur->iDb==pOp->p
1c3e0 33 20 29 3b 20 20 20 20 20 20 2f 2a 20 47 75 61  3 );      /* Gua
1c3f0 72 61 6e 74 65 65 64 20 62 79 20 74 68 65 20 63  ranteed by the c
1c400 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f  ode generator */
1c410 0a 20 20 20 20 67 6f 74 6f 20 6f 70 65 6e 5f 63  .    goto open_c
1c420 75 72 73 6f 72 5f 73 65 74 5f 68 69 6e 74 73 3b  ursor_set_hints;
1c430 0a 20 20 7d 0a 20 20 2f 2a 20 49 66 20 74 68 65  .  }.  /* If the
1c440 20 63 75 72 73 6f 72 20 69 73 20 6e 6f 74 20 63   cursor is not c
1c450 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 6f 72  urrently open or
1c460 20 69 73 20 6f 70 65 6e 20 6f 6e 20 61 20 64 69   is open on a di
1c470 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20 69 6e 64  fferent.  ** ind
1c480 65 78 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  ex, then fall th
1c490 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 4f 70  rough into OP_Op
1c4a0 65 6e 52 65 61 64 20 74 6f 20 66 6f 72 63 65 20  enRead to force 
1c4b0 61 20 72 65 6f 70 65 6e 20 2a 2f 0a 63 61 73 65  a reopen */.case
1c4c0 20 4f 50 5f 4f 70 65 6e 52 65 61 64 3a 0a 63 61   OP_OpenRead:.ca
1c4d0 73 65 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65 3a  se OP_OpenWrite:
1c4e0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
1c4f0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e  >opcode==OP_Open
1c500 57 72 69 74 65 20 7c 7c 20 70 4f 70 2d 3e 70 35  Write || pOp->p5
1c510 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d  ==0 || pOp->p5==
1c520 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b  OPFLAG_SEEKEQ );
1c530 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49  .  assert( p->bI
1c540 73 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73 73  sReader );.  ass
1c550 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
1c560 3d 3d 4f 50 5f 4f 70 65 6e 52 65 61 64 20 7c 7c  ==OP_OpenRead ||
1c570 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
1c580 5f 52 65 6f 70 65 6e 49 64 78 0a 20 20 20 20 20  _ReopenIdx.     
1c590 20 20 20 20 20 7c 7c 20 70 2d 3e 72 65 61 64 4f       || p->readO
1c5a0 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 69 66 28  nly==0 );..  if(
1c5b0 20 70 2d 3e 65 78 70 69 72 65 64 20 29 7b 0a 20   p->expired ){. 
1c5c0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 41     rc = SQLITE_A
1c5d0 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 3b 0a 20  BORT_ROLLBACK;. 
1c5e0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
1c5f0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a  e_to_error;.  }.
1c600 0a 20 20 6e 46 69 65 6c 64 20 3d 20 30 3b 0a 20  .  nField = 0;. 
1c610 20 70 4b 65 79 49 6e 66 6f 20 3d 20 30 3b 0a 20   pKeyInfo = 0;. 
1c620 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20   p2 = pOp->p2;. 
1c630 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a   iDb = pOp->p3;.
1c640 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30    assert( iDb>=0
1c650 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20   && iDb<db->nDb 
1c660 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d  );.  assert( DbM
1c670 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
1c680 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 20 20  Mask, iDb) );.  
1c690 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69  pDb = &db->aDb[i
1c6a0 44 62 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d  Db];.  pX = pDb-
1c6b0 3e 70 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20  >pBt;.  assert( 
1c6c0 70 58 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70  pX!=0 );.  if( p
1c6d0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f  Op->opcode==OP_O
1c6e0 70 65 6e 57 72 69 74 65 20 29 7b 0a 20 20 20 20  penWrite ){.    
1c6f0 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 46  assert( OPFLAG_F
1c700 4f 52 44 45 4c 45 54 45 3d 3d 42 54 52 45 45 5f  ORDELETE==BTREE_
1c710 46 4f 52 44 45 4c 45 54 45 20 29 3b 0a 20 20 20  FORDELETE );.   
1c720 20 77 72 46 6c 61 67 20 3d 20 42 54 52 45 45 5f   wrFlag = BTREE_
1c730 57 52 43 53 52 20 7c 20 28 70 4f 70 2d 3e 70 35  WRCSR | (pOp->p5
1c740 20 26 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c   & OPFLAG_FORDEL
1c750 45 54 45 29 3b 0a 20 20 20 20 61 73 73 65 72 74  ETE);.    assert
1c760 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d  ( sqlite3SchemaM
1c770 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62  utexHeld(db, iDb
1c780 2c 20 30 29 20 29 3b 0a 20 20 20 20 69 66 28 20  , 0) );.    if( 
1c790 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69  pDb->pSchema->fi
1c7a0 6c 65 5f 66 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d  le_format < p->m
1c7b0 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61  inWriteFileForma
1c7c0 74 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 69  t ){.      p->mi
1c7d0 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74  nWriteFileFormat
1c7e0 20 3d 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d   = pDb->pSchema-
1c7f0 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20 20  >file_format;.  
1c800 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
1c810 20 77 72 46 6c 61 67 20 3d 20 30 3b 0a 20 20 7d   wrFlag = 0;.  }
1c820 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  .  if( pOp->p5 &
1c830 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20   OPFLAG_P2ISREG 
1c840 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
1c850 32 3e 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72  2>0 );.    asser
1c860 74 28 20 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  t( p2<=(p->nMem+
1c870 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
1c880 29 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20 26 61  );.    pIn2 = &a
1c890 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 61 73 73  Mem[p2];.    ass
1c8a0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
1c8b0 70 49 6e 32 29 20 29 3b 0a 20 20 20 20 61 73 73  pIn2) );.    ass
1c8c0 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67  ert( (pIn2->flag
1c8d0 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  s & MEM_Int)!=0 
1c8e0 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
1c8f0 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
1c900 70 49 6e 32 29 3b 0a 20 20 20 20 70 32 20 3d 20  pIn2);.    p2 = 
1c910 28 69 6e 74 29 70 49 6e 32 2d 3e 75 2e 69 3b 0a  (int)pIn2->u.i;.
1c920 20 20 20 20 2f 2a 20 54 68 65 20 70 32 20 76 61      /* The p2 va
1c930 6c 75 65 20 61 6c 77 61 79 73 20 63 6f 6d 65 73  lue always comes
1c940 20 66 72 6f 6d 20 61 20 70 72 69 6f 72 20 4f 50   from a prior OP
1c950 5f 43 72 65 61 74 65 54 61 62 6c 65 20 6f 70 63  _CreateTable opc
1c960 6f 64 65 20 61 6e 64 0a 20 20 20 20 2a 2a 20 74  ode and.    ** t
1c970 68 61 74 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20  hat opcode will 
1c980 61 6c 77 61 79 73 20 73 65 74 20 74 68 65 20 70  always set the p
1c990 32 20 76 61 6c 75 65 20 74 6f 20 32 20 6f 72 20  2 value to 2 or 
1c9a0 6d 6f 72 65 20 6f 72 20 65 6c 73 65 20 66 61 69  more or else fai
1c9b0 6c 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74 68 65  l..    ** If the
1c9c0 72 65 20 77 65 72 65 20 61 20 66 61 69 6c 75 72  re were a failur
1c9d0 65 2c 20 74 68 65 20 70 72 65 70 61 72 65 64 20  e, the prepared 
1c9e0 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20  statement would 
1c9f0 68 61 76 65 20 68 61 6c 74 65 64 0a 20 20 20 20  have halted.    
1ca00 2a 2a 20 62 65 66 6f 72 65 20 72 65 61 63 68 69  ** before reachi
1ca10 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  ng this instruct
1ca20 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 73 73 65  ion. */.    asse
1ca30 72 74 28 20 70 32 3e 3d 32 20 29 3b 0a 20 20 7d  rt( p2>=2 );.  }
1ca40 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79  .  if( pOp->p4ty
1ca50 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29  pe==P4_KEYINFO )
1ca60 7b 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f 20 3d  {.    pKeyInfo =
1ca70 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66   pOp->p4.pKeyInf
1ca80 6f 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  o;.    assert( p
1ca90 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e  KeyInfo->enc==EN
1caa0 43 28 64 62 29 20 29 3b 0a 20 20 20 20 61 73 73  C(db) );.    ass
1cab0 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 64  ert( pKeyInfo->d
1cac0 62 3d 3d 64 62 20 29 3b 0a 20 20 20 20 6e 46 69  b==db );.    nFi
1cad0 65 6c 64 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e  eld = pKeyInfo->
1cae0 6e 46 69 65 6c 64 2b 70 4b 65 79 49 6e 66 6f 2d  nField+pKeyInfo-
1caf0 3e 6e 58 46 69 65 6c 64 3b 0a 20 20 7d 65 6c 73  >nXField;.  }els
1cb00 65 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70  e if( pOp->p4typ
1cb10 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 7b 0a 20  e==P4_INT32 ){. 
1cb20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d     nField = pOp-
1cb30 3e 70 34 2e 69 3b 0a 20 20 7d 0a 20 20 61 73 73  >p4.i;.  }.  ass
1cb40 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1cb50 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69  );.  assert( nFi
1cb60 65 6c 64 3e 3d 30 20 29 3b 0a 20 20 74 65 73 74  eld>=0 );.  test
1cb70 63 61 73 65 28 20 6e 46 69 65 6c 64 3d 3d 30 20  case( nField==0 
1cb80 29 3b 20 20 2f 2a 20 54 61 62 6c 65 20 77 69 74  );  /* Table wit
1cb90 68 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  h INTEGER PRIMAR
1cba0 59 20 4b 45 59 20 61 6e 64 20 6e 6f 74 68 69 6e  Y KEY and nothin
1cbb0 67 20 65 6c 73 65 20 2a 2f 0a 20 20 70 43 75 72  g else */.  pCur
1cbc0 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f   = allocateCurso
1cbd0 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 6e 46  r(p, pOp->p1, nF
1cbe0 69 65 6c 64 2c 20 69 44 62 2c 20 43 55 52 54 59  ield, iDb, CURTY
1cbf0 50 45 5f 42 54 52 45 45 29 3b 0a 20 20 69 66 28  PE_BTREE);.  if(
1cc00 20 70 43 75 72 3d 3d 30 20 29 20 67 6f 74 6f 20   pCur==0 ) goto 
1cc10 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 75 72 2d 3e  no_mem;.  pCur->
1cc20 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70  nullRow = 1;.  p
1cc30 43 75 72 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d  Cur->isOrdered =
1cc40 20 31 3b 0a 20 20 70 43 75 72 2d 3e 70 67 6e 6f   1;.  pCur->pgno
1cc50 52 6f 6f 74 20 3d 20 70 32 3b 0a 23 69 66 64 65  Root = p2;.#ifde
1cc60 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
1cc70 20 70 43 75 72 2d 3e 77 72 46 6c 61 67 20 3d 20   pCur->wrFlag = 
1cc80 77 72 46 6c 61 67 3b 0a 23 65 6e 64 69 66 0a 20  wrFlag;.#endif. 
1cc90 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1cca0 65 65 43 75 72 73 6f 72 28 70 58 2c 20 70 32 2c  eeCursor(pX, p2,
1ccb0 20 77 72 46 6c 61 67 2c 20 70 4b 65 79 49 6e 66   wrFlag, pKeyInf
1ccc0 6f 2c 20 70 43 75 72 2d 3e 75 63 2e 70 43 75 72  o, pCur->uc.pCur
1ccd0 73 6f 72 29 3b 0a 20 20 70 43 75 72 2d 3e 70 4b  sor);.  pCur->pK
1cce0 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66  eyInfo = pKeyInf
1ccf0 6f 3b 0a 20 20 2f 2a 20 53 65 74 20 74 68 65 20  o;.  /* Set the 
1cd00 56 64 62 65 43 75 72 73 6f 72 2e 69 73 54 61 62  VdbeCursor.isTab
1cd10 6c 65 20 76 61 72 69 61 62 6c 65 2e 20 50 72 65  le variable. Pre
1cd20 76 69 6f 75 73 20 76 65 72 73 69 6f 6e 73 20 6f  vious versions o
1cd30 66 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20 75 73  f.  ** SQLite us
1cd40 65 64 20 74 6f 20 63 68 65 63 6b 20 69 66 20 74  ed to check if t
1cd50 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 66 6c 61  he root-page fla
1cd60 67 73 20 77 65 72 65 20 73 61 6e 65 20 61 74 20  gs were sane at 
1cd70 74 68 69 73 20 70 6f 69 6e 74 0a 20 20 2a 2a 20  this point.  ** 
1cd80 61 6e 64 20 72 65 70 6f 72 74 20 64 61 74 61 62  and report datab
1cd90 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 20 69  ase corruption i
1cda0 66 20 74 68 65 79 20 77 65 72 65 20 6e 6f 74 2c  f they were not,
1cdb0 20 62 75 74 20 74 68 69 73 20 63 68 65 63 6b 20   but this check 
1cdc0 68 61 73 0a 20 20 2a 2a 20 73 69 6e 63 65 20 6d  has.  ** since m
1cdd0 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20 62 74  oved into the bt
1cde0 72 65 65 20 6c 61 79 65 72 2e 20 20 2a 2f 20 20  ree layer.  */  
1cdf0 0a 20 20 70 43 75 72 2d 3e 69 73 54 61 62 6c 65  .  pCur->isTable
1ce00 20 3d 20 70 4f 70 2d 3e 70 34 74 79 70 65 21 3d   = pOp->p4type!=
1ce10 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a 0a 6f 70 65  P4_KEYINFO;..ope
1ce20 6e 5f 63 75 72 73 6f 72 5f 73 65 74 5f 68 69 6e  n_cursor_set_hin
1ce30 74 73 3a 0a 20 20 61 73 73 65 72 74 28 20 4f 50  ts:.  assert( OP
1ce40 46 4c 41 47 5f 42 55 4c 4b 43 53 52 3d 3d 42 54  FLAG_BULKCSR==BT
1ce50 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 20 29 3b 0a  REE_BULKLOAD );.
1ce60 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47    assert( OPFLAG
1ce70 5f 53 45 45 4b 45 51 3d 3d 42 54 52 45 45 5f 53  _SEEKEQ==BTREE_S
1ce80 45 45 4b 5f 45 51 20 29 3b 0a 20 20 74 65 73 74  EEK_EQ );.  test
1ce90 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 20 26 20  case( pOp->p5 & 
1cea0 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 29  OPFLAG_BULKCSR )
1ceb0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
1cec0 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48 49  ENABLE_CURSOR_HI
1ced0 4e 54 53 0a 20 20 74 65 73 74 63 61 73 65 28 20  NTS.  testcase( 
1cee0 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47  pOp->p2 & OPFLAG
1cef0 5f 53 45 45 4b 45 51 20 29 3b 0a 23 65 6e 64 69  _SEEKEQ );.#endi
1cf00 66 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65  f.  sqlite3Btree
1cf10 43 75 72 73 6f 72 48 69 6e 74 46 6c 61 67 73 28  CursorHintFlags(
1cf20 70 43 75 72 2d 3e 75 63 2e 70 43 75 72 73 6f 72  pCur->uc.pCursor
1cf30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1cf40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf50 20 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46   (pOp->p5 & (OPF
1cf60 4c 41 47 5f 42 55 4c 4b 43 53 52 7c 4f 50 46 4c  LAG_BULKCSR|OPFL
1cf70 41 47 5f 53 45 45 4b 45 51 29 29 29 3b 0a 20 20  AG_SEEKEQ)));.  
1cf80 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
1cf90 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1cfa0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1cfb0 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 45 70 68   Opcode: OpenEph
1cfc0 65 6d 65 72 61 6c 20 50 31 20 50 32 20 2a 20 50  emeral P1 P2 * P
1cfd0 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
1cfe0 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a  : nColumn=P2.**.
1cff0 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75  ** Open a new cu
1d000 72 73 6f 72 20 50 31 20 74 6f 20 61 20 74 72 61  rsor P1 to a tra
1d010 6e 73 69 65 6e 74 20 74 61 62 6c 65 2e 0a 2a 2a  nsient table..**
1d020 20 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 61   The cursor is a
1d030 6c 77 61 79 73 20 6f 70 65 6e 65 64 20 72 65 61  lways opened rea
1d040 64 2f 77 72 69 74 65 20 65 76 65 6e 20 69 66 20  d/write even if 
1d050 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74  .** the main dat
1d060 61 62 61 73 65 20 69 73 20 72 65 61 64 2d 6f 6e  abase is read-on
1d070 6c 79 2e 20 20 54 68 65 20 65 70 68 65 6d 65 72  ly.  The ephemer
1d080 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 69 73 20 64  al.** table is d
1d090 65 6c 65 74 65 64 20 61 75 74 6f 6d 61 74 69 63  eleted automatic
1d0a0 61 6c 6c 79 20 77 68 65 6e 20 74 68 65 20 63 75  ally when the cu
1d0b0 72 73 6f 72 20 69 73 20 63 6c 6f 73 65 64 2e 0a  rsor is closed..
1d0c0 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20  **.** P2 is the 
1d0d0 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
1d0e0 73 20 69 6e 20 74 68 65 20 65 70 68 65 6d 65 72  s in the ephemer
1d0f0 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65  al table..** The
1d100 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 73 20 74   cursor points t
1d110 6f 20 61 20 42 54 72 65 65 20 74 61 62 6c 65 20  o a BTree table 
1d120 69 66 20 50 34 3d 3d 30 20 61 6e 64 20 74 6f 20  if P4==0 and to 
1d130 61 20 42 54 72 65 65 20 69 6e 64 65 78 0a 2a 2a  a BTree index.**
1d140 20 69 66 20 50 34 20 69 73 20 6e 6f 74 20 30 2e   if P4 is not 0.
1d150 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e    If P4 is not N
1d160 55 4c 4c 2c 20 69 74 20 70 6f 69 6e 74 73 20 74  ULL, it points t
1d170 6f 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75  o a KeyInfo stru
1d180 63 74 75 72 65 0a 2a 2a 20 74 68 61 74 20 64 65  cture.** that de
1d190 66 69 6e 65 73 20 74 68 65 20 66 6f 72 6d 61 74  fines the format
1d1a0 20 6f 66 20 6b 65 79 73 20 69 6e 20 74 68 65 20   of keys in the 
1d1b0 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  index..**.** The
1d1c0 20 50 35 20 70 61 72 61 6d 65 74 65 72 20 63 61   P5 parameter ca
1d1d0 6e 20 62 65 20 61 20 6d 61 73 6b 20 6f 66 20 74  n be a mask of t
1d1e0 68 65 20 42 54 52 45 45 5f 2a 20 66 6c 61 67 73  he BTREE_* flags
1d1f0 20 64 65 66 69 6e 65 64 0a 2a 2a 20 69 6e 20 62   defined.** in b
1d200 74 72 65 65 2e 68 2e 20 20 54 68 65 73 65 20 66  tree.h.  These f
1d210 6c 61 67 73 20 63 6f 6e 74 72 6f 6c 20 61 73 70  lags control asp
1d220 65 63 74 73 20 6f 66 20 74 68 65 20 6f 70 65 72  ects of the oper
1d230 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20  ation of.** the 
1d240 62 74 72 65 65 2e 20 20 54 68 65 20 42 54 52 45  btree.  The BTRE
1d250 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 61  E_OMIT_JOURNAL a
1d260 6e 64 20 42 54 52 45 45 5f 53 49 4e 47 4c 45 20  nd BTREE_SINGLE 
1d270 66 6c 61 67 73 20 61 72 65 0a 2a 2a 20 61 64 64  flags are.** add
1d280 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ed automatically
1d290 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
1d2a0 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78 20 50 31  OpenAutoindex P1
1d2b0 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
1d2c0 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d  nopsis: nColumn=
1d2d0 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  P2.**.** This op
1d2e0 63 6f 64 65 20 77 6f 72 6b 73 20 74 68 65 20 73  code works the s
1d2f0 61 6d 65 20 61 73 20 4f 50 5f 4f 70 65 6e 45 70  ame as OP_OpenEp
1d300 68 65 6d 65 72 61 6c 2e 20 20 49 74 20 68 61 73  hemeral.  It has
1d310 20 61 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20   a.** different 
1d320 6e 61 6d 65 20 74 6f 20 64 69 73 74 69 6e 67 75  name to distingu
1d330 69 73 68 20 69 74 73 20 75 73 65 2e 20 20 54 61  ish its use.  Ta
1d340 62 6c 65 73 20 63 72 65 61 74 65 64 20 75 73 69  bles created usi
1d350 6e 67 0a 2a 2a 20 62 79 20 74 68 69 73 20 6f 70  ng.** by this op
1d360 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65  code will be use
1d370 64 20 66 6f 72 20 61 75 74 6f 6d 61 74 69 63 61  d for automatica
1d380 6c 6c 79 20 63 72 65 61 74 65 64 20 74 72 61 6e  lly created tran
1d390 73 69 65 6e 74 0a 2a 2a 20 69 6e 64 69 63 65 73  sient.** indices
1d3a0 20 69 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f 0a 63 61   in joins..*/.ca
1d3b0 73 65 20 4f 50 5f 4f 70 65 6e 41 75 74 6f 69 6e  se OP_OpenAutoin
1d3c0 64 65 78 3a 20 0a 63 61 73 65 20 4f 50 5f 4f 70  dex: .case OP_Op
1d3d0 65 6e 45 70 68 65 6d 65 72 61 6c 3a 20 7b 0a 20  enEphemeral: {. 
1d3e0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78   VdbeCursor *pCx
1d3f0 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65  ;.  KeyInfo *pKe
1d400 79 49 6e 66 6f 3b 0a 0a 20 20 73 74 61 74 69 63  yInfo;..  static
1d410 20 63 6f 6e 73 74 20 69 6e 74 20 76 66 73 46 6c   const int vfsFl
1d420 61 67 73 20 3d 20 0a 20 20 20 20 20 20 53 51 4c  ags = .      SQL
1d430 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57 52 49  ITE_OPEN_READWRI
1d440 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54  TE |.      SQLIT
1d450 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20 7c 0a  E_OPEN_CREATE |.
1d460 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
1d470 4e 5f 45 58 43 4c 55 53 49 56 45 20 7c 0a 20 20  N_EXCLUSIVE |.  
1d480 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
1d490 44 45 4c 45 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a  DELETEONCLOSE |.
1d4a0 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
1d4b0 4e 5f 54 52 41 4e 53 49 45 4e 54 5f 44 42 3b 0a  N_TRANSIENT_DB;.
1d4c0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1d4d0 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  1>=0 );.  assert
1d4e0 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a  ( pOp->p2>=0 );.
1d4f0 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65    pCx = allocate
1d500 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
1d510 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20  1, pOp->p2, -1, 
1d520 43 55 52 54 59 50 45 5f 42 54 52 45 45 29 3b 0a  CURTYPE_BTREE);.
1d530 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67    if( pCx==0 ) g
1d540 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
1d550 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  x->nullRow = 1;.
1d560 20 20 70 43 78 2d 3e 69 73 45 70 68 65 6d 65 72    pCx->isEphemer
1d570 61 6c 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73  al = 1;.  rc = s
1d580 71 6c 69 74 65 33 42 74 72 65 65 4f 70 65 6e 28  qlite3BtreeOpen(
1d590 64 62 2d 3e 70 56 66 73 2c 20 30 2c 20 64 62 2c  db->pVfs, 0, db,
1d5a0 20 26 70 43 78 2d 3e 70 42 74 78 2c 20 0a 20 20   &pCx->pBtx, .  
1d5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d5c0 20 20 20 20 20 20 42 54 52 45 45 5f 4f 4d 49 54        BTREE_OMIT
1d5d0 5f 4a 4f 55 52 4e 41 4c 20 7c 20 42 54 52 45 45  _JOURNAL | BTREE
1d5e0 5f 53 49 4e 47 4c 45 20 7c 20 70 4f 70 2d 3e 70  _SINGLE | pOp->p
1d5f0 35 2c 20 76 66 73 46 6c 61 67 73 29 3b 0a 20 20  5, vfsFlags);.  
1d600 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
1d610 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  K ){.    rc = sq
1d620 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 54  lite3BtreeBeginT
1d630 72 61 6e 73 28 70 43 78 2d 3e 70 42 74 78 2c 20  rans(pCx->pBtx, 
1d640 31 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63  1);.  }.  if( rc
1d650 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
1d660 20 20 20 2f 2a 20 49 66 20 61 20 74 72 61 6e 73     /* If a trans
1d670 69 65 6e 74 20 69 6e 64 65 78 20 69 73 20 72 65  ient index is re
1d680 71 75 69 72 65 64 2c 20 63 72 65 61 74 65 20 69  quired, create i
1d690 74 20 62 79 20 63 61 6c 6c 69 6e 67 0a 20 20 20  t by calling.   
1d6a0 20 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65   ** sqlite3Btree
1d6b0 43 72 65 61 74 65 54 61 62 6c 65 28 29 20 77 69  CreateTable() wi
1d6c0 74 68 20 74 68 65 20 42 54 52 45 45 5f 42 4c 4f  th the BTREE_BLO
1d6d0 42 4b 45 59 20 66 6c 61 67 20 62 65 66 6f 72 65  BKEY flag before
1d6e0 0a 20 20 20 20 2a 2a 20 6f 70 65 6e 69 6e 67 20  .    ** opening 
1d6f0 69 74 2e 20 49 66 20 61 20 74 72 61 6e 73 69 65  it. If a transie
1d700 6e 74 20 74 61 62 6c 65 20 69 73 20 72 65 71 75  nt table is requ
1d710 69 72 65 64 2c 20 6a 75 73 74 20 75 73 65 20 74  ired, just use t
1d720 68 65 0a 20 20 20 20 2a 2a 20 61 75 74 6f 6d 61  he.    ** automa
1d730 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20  tically created 
1d740 74 61 62 6c 65 20 77 69 74 68 20 72 6f 6f 74 2d  table with root-
1d750 70 61 67 65 20 31 20 28 61 6e 20 42 4c 4f 42 5f  page 1 (an BLOB_
1d760 49 4e 54 4b 45 59 20 74 61 62 6c 65 29 2e 0a 20  INTKEY table).. 
1d770 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 70     */.    if( (p
1d780 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70  Cx->pKeyInfo = p
1d790 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70  KeyInfo = pOp->p
1d7a0 34 2e 70 4b 65 79 49 6e 66 6f 29 21 3d 30 20 29  4.pKeyInfo)!=0 )
1d7b0 7b 0a 20 20 20 20 20 20 69 6e 74 20 70 67 6e 6f  {.      int pgno
1d7c0 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
1d7d0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
1d7e0 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 20 20 20  KEYINFO );.     
1d7f0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1d800 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 70 43  eeCreateTable(pC
1d810 78 2d 3e 70 42 74 78 2c 20 26 70 67 6e 6f 2c 20  x->pBtx, &pgno, 
1d820 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 7c 20  BTREE_BLOBKEY | 
1d830 70 4f 70 2d 3e 70 35 29 3b 20 0a 20 20 20 20 20  pOp->p5); .     
1d840 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
1d850 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  OK ){.        as
1d860 73 65 72 74 28 20 70 67 6e 6f 3d 3d 4d 41 53 54  sert( pgno==MAST
1d870 45 52 5f 52 4f 4f 54 2b 31 20 29 3b 0a 20 20 20  ER_ROOT+1 );.   
1d880 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65       assert( pKe
1d890 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b  yInfo->db==db );
1d8a0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1d8b0 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d   pKeyInfo->enc==
1d8c0 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 20 20 20  ENC(db) );.     
1d8d0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1d8e0 74 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e  treeCursor(pCx->
1d8f0 70 42 74 78 2c 20 70 67 6e 6f 2c 20 42 54 52 45  pBtx, pgno, BTRE
1d900 45 5f 57 52 43 53 52 2c 0a 20 20 20 20 20 20 20  E_WRCSR,.       
1d910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d920 20 20 20 20 20 20 20 20 20 70 4b 65 79 49 6e 66           pKeyInf
1d930 6f 2c 20 70 43 78 2d 3e 75 63 2e 70 43 75 72 73  o, pCx->uc.pCurs
1d940 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  or);.      }.   
1d950 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20     pCx->isTable 
1d960 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  = 0;.    }else{.
1d970 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1d980 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 43  e3BtreeCursor(pC
1d990 78 2d 3e 70 42 74 78 2c 20 4d 41 53 54 45 52 5f  x->pBtx, MASTER_
1d9a0 52 4f 4f 54 2c 20 42 54 52 45 45 5f 57 52 43 53  ROOT, BTREE_WRCS
1d9b0 52 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  R,.             
1d9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d9d0 20 30 2c 20 70 43 78 2d 3e 75 63 2e 70 43 75 72   0, pCx->uc.pCur
1d9e0 73 6f 72 29 3b 0a 20 20 20 20 20 20 70 43 78 2d  sor);.      pCx-
1d9f0 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20  >isTable = 1;.  
1da00 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63    }.  }.  if( rc
1da10 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1da20 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 43  e_to_error;.  pC
1da30 78 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 28  x->isOrdered = (
1da40 70 4f 70 2d 3e 70 35 21 3d 42 54 52 45 45 5f 55  pOp->p5!=BTREE_U
1da50 4e 4f 52 44 45 52 45 44 29 3b 0a 20 20 62 72 65  NORDERED);.  bre
1da60 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1da70 3a 20 53 6f 72 74 65 72 4f 70 65 6e 20 50 31 20  : SorterOpen P1 
1da80 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  P2 P3 P4 *.**.**
1da90 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72   This opcode wor
1daa0 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f 70 65 6e 45  ks like OP_OpenE
1dab0 70 68 65 6d 65 72 61 6c 20 65 78 63 65 70 74 20  phemeral except 
1dac0 74 68 61 74 20 69 74 20 6f 70 65 6e 73 0a 2a 2a  that it opens.**
1dad0 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64   a transient ind
1dae0 65 78 20 74 68 61 74 20 69 73 20 73 70 65 63 69  ex that is speci
1daf0 66 69 63 61 6c 6c 79 20 64 65 73 69 67 6e 65 64  fically designed
1db00 20 74 6f 20 73 6f 72 74 20 6c 61 72 67 65 0a 2a   to sort large.*
1db10 2a 20 74 61 62 6c 65 73 20 75 73 69 6e 67 20 61  * tables using a
1db20 6e 20 65 78 74 65 72 6e 61 6c 20 6d 65 72 67 65  n external merge
1db30 2d 73 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d 2e  -sort algorithm.
1db40 0a 2a 2a 0a 2a 2a 20 49 66 20 61 72 67 75 6d 65  .**.** If argume
1db50 6e 74 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72  nt P3 is non-zer
1db60 6f 2c 20 74 68 65 6e 20 69 74 20 69 6e 64 69 63  o, then it indic
1db70 61 74 65 73 20 74 68 61 74 20 74 68 65 20 73 6f  ates that the so
1db80 72 74 65 72 20 6d 61 79 0a 2a 2a 20 61 73 73 75  rter may.** assu
1db90 6d 65 20 74 68 61 74 20 61 20 73 74 61 62 6c 65  me that a stable
1dba0 20 73 6f 72 74 20 63 6f 6e 73 69 64 65 72 69 6e   sort considerin
1dbb0 67 20 74 68 65 20 66 69 72 73 74 20 50 33 20 66  g the first P3 f
1dbc0 69 65 6c 64 73 20 6f 66 20 65 61 63 68 0a 2a 2a  ields of each.**
1dbd0 20 6b 65 79 20 69 73 20 73 75 66 66 69 63 69 65   key is sufficie
1dbe0 6e 74 20 74 6f 20 70 72 6f 64 75 63 65 20 74 68  nt to produce th
1dbf0 65 20 72 65 71 75 69 72 65 64 20 72 65 73 75 6c  e required resul
1dc00 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ts..*/.case OP_S
1dc10 6f 72 74 65 72 4f 70 65 6e 3a 20 7b 0a 20 20 56  orterOpen: {.  V
1dc20 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a  dbeCursor *pCx;.
1dc30 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1dc40 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  p1>=0 );.  asser
1dc50 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b  t( pOp->p2>=0 );
1dc60 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74  .  pCx = allocat
1dc70 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e  eCursor(p, pOp->
1dc80 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c  p1, pOp->p2, -1,
1dc90 20 43 55 52 54 59 50 45 5f 53 4f 52 54 45 52 29   CURTYPE_SORTER)
1dca0 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29  ;.  if( pCx==0 )
1dcb0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
1dcc0 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20  pCx->pKeyInfo = 
1dcd0 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f  pOp->p4.pKeyInfo
1dce0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 78 2d  ;.  assert( pCx-
1dcf0 3e 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64  >pKeyInfo->db==d
1dd00 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  b );.  assert( p
1dd10 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e  Cx->pKeyInfo->en
1dd20 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20  c==ENC(db) );.  
1dd30 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
1dd40 53 6f 72 74 65 72 49 6e 69 74 28 64 62 2c 20 70  SorterInit(db, p
1dd50 4f 70 2d 3e 70 33 2c 20 70 43 78 29 3b 0a 20 20  Op->p3, pCx);.  
1dd60 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
1dd70 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1dd80 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1dd90 20 4f 70 63 6f 64 65 3a 20 53 65 71 75 65 6e 63   Opcode: Sequenc
1dda0 65 54 65 73 74 20 50 31 20 50 32 20 2a 20 2a 20  eTest P1 P2 * * 
1ddb0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
1ddc0 66 28 20 63 75 72 73 6f 72 5b 50 31 5d 2e 63 74  f( cursor[P1].ct
1ddd0 72 2b 2b 20 29 20 70 63 20 3d 20 50 32 0a 2a 2a  r++ ) pc = P2.**
1dde0 0a 2a 2a 20 50 31 20 69 73 20 61 20 73 6f 72 74  .** P1 is a sort
1ddf0 65 72 20 63 75 72 73 6f 72 2e 20 49 66 20 74 68  er cursor. If th
1de00 65 20 73 65 71 75 65 6e 63 65 20 63 6f 75 6e 74  e sequence count
1de10 65 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  er is currently 
1de20 7a 65 72 6f 2c 20 6a 75 6d 70 0a 2a 2a 20 74 6f  zero, jump.** to
1de30 20 50 32 2e 20 52 65 67 61 72 64 6c 65 73 73 20   P2. Regardless 
1de40 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  of whether or no
1de50 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
1de60 6b 65 6e 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74  ken, increment t
1de70 68 65 0a 2a 2a 20 74 68 65 20 73 65 71 75 65 6e  he.** the sequen
1de80 63 65 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73  ce value..*/.cas
1de90 65 20 4f 50 5f 53 65 71 75 65 6e 63 65 54 65 73  e OP_SequenceTes
1dea0 74 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  t: {.  VdbeCurso
1deb0 72 20 2a 70 43 3b 0a 20 20 61 73 73 65 72 74 28  r *pC;.  assert(
1dec0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1ded0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1dee0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
1def0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1df00 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65   assert( isSorte
1df10 72 28 70 43 29 20 29 3b 0a 20 20 69 66 28 20 28  r(pC) );.  if( (
1df20 70 43 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 29 3d  pC->seqCount++)=
1df30 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a  =0 ){.    goto j
1df40 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20  ump_to_p2;.  }. 
1df50 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1df60 63 6f 64 65 3a 20 4f 70 65 6e 50 73 65 75 64 6f  code: OpenPseudo
1df70 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
1df80 20 53 79 6e 6f 70 73 69 73 3a 20 50 33 20 63 6f   Synopsis: P3 co
1df90 6c 75 6d 6e 73 20 69 6e 20 72 5b 50 32 5d 0a 2a  lumns in r[P2].*
1dfa0 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20  *.** Open a new 
1dfb0 63 75 72 73 6f 72 20 74 68 61 74 20 70 6f 69 6e  cursor that poin
1dfc0 74 73 20 74 6f 20 61 20 66 61 6b 65 20 74 61 62  ts to a fake tab
1dfd0 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  le that contains
1dfe0 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77   a single.** row
1dff0 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65 20 63   of data.  The c
1e000 6f 6e 74 65 6e 74 20 6f 66 20 74 68 61 74 20 6f  ontent of that o
1e010 6e 65 20 72 6f 77 20 69 73 20 74 68 65 20 63 6f  ne row is the co
1e020 6e 74 65 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 0a  ntent of memory.
1e030 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e 20  ** register P2. 
1e040 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
1e050 20 63 75 72 73 6f 72 20 50 31 20 62 65 63 6f 6d   cursor P1 becom
1e060 65 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  es an alias for 
1e070 74 68 65 20 0a 2a 2a 20 4d 45 4d 5f 42 6c 6f 62  the .** MEM_Blob
1e080 20 63 6f 6e 74 65 6e 74 20 63 6f 6e 74 61 69 6e   content contain
1e090 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
1e0a0 32 2e 0a 2a 2a 0a 2a 2a 20 41 20 70 73 65 75 64  2..**.** A pseud
1e0b0 6f 2d 74 61 62 6c 65 20 63 72 65 61 74 65 64 20  o-table created 
1e0c0 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69  by this opcode i
1e0d0 73 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 61  s used to hold a
1e0e0 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f   single.** row o
1e0f0 75 74 70 75 74 20 66 72 6f 6d 20 74 68 65 20 73  utput from the s
1e100 6f 72 74 65 72 20 73 6f 20 74 68 61 74 20 74 68  orter so that th
1e110 65 20 72 6f 77 20 63 61 6e 20 62 65 20 64 65 63  e row can be dec
1e120 6f 6d 70 6f 73 65 64 20 69 6e 74 6f 0a 2a 2a 20  omposed into.** 
1e130 69 6e 64 69 76 69 64 75 61 6c 20 63 6f 6c 75 6d  individual colum
1e140 6e 73 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f  ns using the OP_
1e150 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 20 20  Column opcode.  
1e160 54 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70  The OP_Column op
1e170 63 6f 64 65 0a 2a 2a 20 69 73 20 74 68 65 20 6f  code.** is the o
1e180 6e 6c 79 20 63 75 72 73 6f 72 20 6f 70 63 6f 64  nly cursor opcod
1e190 65 20 74 68 61 74 20 77 6f 72 6b 73 20 77 69 74  e that works wit
1e1a0 68 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  h a pseudo-table
1e1b0 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 74 68  ..**.** P3 is th
1e1c0 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c  e number of fiel
1e1d0 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  ds in the record
1e1e0 73 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 73  s that will be s
1e1f0 74 6f 72 65 64 20 62 79 0a 2a 2a 20 74 68 65 20  tored by.** the 
1e200 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f  pseudo-table..*/
1e210 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 50 73 65  .case OP_OpenPse
1e220 75 64 6f 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  udo: {.  VdbeCur
1e230 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73  sor *pCx;..  ass
1e240 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1e250 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1e260 2d 3e 70 33 3e 3d 30 20 29 3b 0a 20 20 70 43 78  ->p3>=0 );.  pCx
1e270 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f   = allocateCurso
1e280 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  r(p, pOp->p1, pO
1e290 70 2d 3e 70 33 2c 20 2d 31 2c 20 43 55 52 54 59  p->p3, -1, CURTY
1e2a0 50 45 5f 50 53 45 55 44 4f 29 3b 0a 20 20 69 66  PE_PSEUDO);.  if
1e2b0 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20  ( pCx==0 ) goto 
1e2c0 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e  no_mem;.  pCx->n
1e2d0 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43  ullRow = 1;.  pC
1e2e0 78 2d 3e 75 63 2e 70 73 65 75 64 6f 54 61 62 6c  x->uc.pseudoTabl
1e2f0 65 52 65 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  eReg = pOp->p2;.
1e300 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d    pCx->isTable =
1e310 20 31 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   1;.  assert( pO
1e320 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 62 72  p->p5==0 );.  br
1e330 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1e340 65 3a 20 43 6c 6f 73 65 20 50 31 20 2a 20 2a 20  e: Close P1 * * 
1e350 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 20  * *.**.** Close 
1e360 61 20 63 75 72 73 6f 72 20 70 72 65 76 69 6f 75  a cursor previou
1e370 73 6c 79 20 6f 70 65 6e 65 64 20 61 73 20 50 31  sly opened as P1
1e380 2e 20 20 49 66 20 50 31 20 69 73 20 6e 6f 74 0a  .  If P1 is not.
1e390 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65  ** currently ope
1e3a0 6e 2c 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  n, this instruct
1e3b0 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a  ion is a no-op..
1e3c0 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 6f 73 65  */.case OP_Close
1e3d0 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
1e3e0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1e3f0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
1e400 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 46  ;.  sqlite3VdbeF
1e410 72 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e  reeCursor(p, p->
1e420 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 29 3b  apCsr[pOp->p1]);
1e430 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d  .  p->apCsr[pOp-
1e440 3e 70 31 5d 20 3d 20 30 3b 0a 20 20 62 72 65 61  >p1] = 0;.  brea
1e450 6b 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c  k;.}..#ifdef SQL
1e460 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d  ITE_ENABLE_COLUM
1e470 4e 5f 55 53 45 44 5f 4d 41 53 4b 0a 2f 2a 20 4f  N_USED_MASK./* O
1e480 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 73 55 73  pcode: ColumnsUs
1e490 65 64 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  ed P1 * * P4 *.*
1e4a0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
1e4b0 20 28 77 68 69 63 68 20 6f 6e 6c 79 20 65 78 69   (which only exi
1e4c0 73 74 73 20 69 66 20 53 51 4c 69 74 65 20 77 61  sts if SQLite wa
1e4d0 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 0a  s compiled with.
1e4e0 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ** SQLITE_ENABLE
1e4f0 5f 43 4f 4c 55 4d 4e 5f 55 53 45 44 5f 4d 41 53  _COLUMN_USED_MAS
1e500 4b 29 20 69 64 65 6e 74 69 66 69 65 73 20 77 68  K) identifies wh
1e510 69 63 68 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74  ich columns of t
1e520 68 65 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69  he.** table or i
1e530 6e 64 65 78 20 66 6f 72 20 63 75 72 73 6f 72 20  ndex for cursor 
1e540 50 31 20 61 72 65 20 75 73 65 64 2e 20 20 50 34  P1 are used.  P4
1e550 20 69 73 20 61 20 36 34 2d 62 69 74 20 69 6e 74   is a 64-bit int
1e560 65 67 65 72 0a 2a 2a 20 28 50 34 5f 49 4e 54 36  eger.** (P4_INT6
1e570 34 29 20 69 6e 20 77 68 69 63 68 20 74 68 65 20  4) in which the 
1e580 66 69 72 73 74 20 36 33 20 62 69 74 73 20 61 72  first 63 bits ar
1e590 65 20 6f 6e 65 20 66 6f 72 20 65 61 63 68 20 6f  e one for each o
1e5a0 66 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20 36  f the.** first 6
1e5b0 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65  3 columns of the
1e5c0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
1e5d0 74 68 61 74 20 61 72 65 20 61 63 74 75 61 6c 6c  that are actuall
1e5e0 79 20 75 73 65 64 0a 2a 2a 20 62 79 20 74 68 65  y used.** by the
1e5f0 20 63 75 72 73 6f 72 2e 20 20 54 68 65 20 68 69   cursor.  The hi
1e600 67 68 2d 6f 72 64 65 72 20 62 69 74 20 69 73 20  gh-order bit is 
1e610 73 65 74 20 69 66 20 61 6e 79 20 63 6f 6c 75 6d  set if any colum
1e620 6e 20 61 66 74 65 72 0a 2a 2a 20 74 68 65 20 36  n after.** the 6
1e630 34 74 68 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a  4th is used..*/.
1e640 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 73 55  case OP_ColumnsU
1e650 73 65 64 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  sed: {.  VdbeCur
1e660 73 6f 72 20 2a 70 43 3b 0a 20 20 70 43 20 3d 20  sor *pC;.  pC = 
1e670 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1e680 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  ];.  assert( pC-
1e690 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
1e6a0 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43  PE_BTREE );.  pC
1e6b0 2d 3e 6d 61 73 6b 55 73 65 64 20 3d 20 2a 28 75  ->maskUsed = *(u
1e6c0 36 34 2a 29 70 4f 70 2d 3e 70 34 2e 70 49 36 34  64*)pOp->p4.pI64
1e6d0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
1e6e0 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  dif../* Opcode: 
1e6f0 53 65 65 6b 47 45 20 50 31 20 50 32 20 50 33 20  SeekGE P1 P2 P3 
1e700 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
1e710 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
1e720 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50  *.** If cursor P
1e730 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53  1 refers to an S
1e740 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65  QL table (B-Tree
1e750 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67   that uses integ
1e760 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73  er keys), .** us
1e770 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
1e780 65 67 69 73 74 65 72 20 50 33 20 61 73 20 74 68  egister P3 as th
1e790 65 20 6b 65 79 2e 20 20 49 66 20 63 75 72 73 6f  e key.  If curso
1e7a0 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20  r P1 refers .** 
1e7b0 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c  to an SQL index,
1e7c0 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20   then P3 is the 
1e7d0 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61  first in an arra
1e7e0 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  y of P4 register
1e7f0 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75  s .** that are u
1e800 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b  sed as an unpack
1e810 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a  ed index key. .*
1e820 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20  *.** Reposition 
1e830 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
1e840 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  t  it points to 
1e850 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74  the smallest ent
1e860 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67  ry that .** is g
1e870 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65  reater than or e
1e880 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
1e890 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20  value. If there 
1e8a0 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a  are no records .
1e8b0 2a 2a 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  ** greater than 
1e8c0 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
1e8d0 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f  key and P2 is no
1e8e0 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d  t zero, then jum
1e8f0 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49  p to P2..**.** I
1e900 66 20 74 68 65 20 63 75 72 73 6f 72 20 50 31 20  f the cursor P1 
1e910 77 61 73 20 6f 70 65 6e 65 64 20 75 73 69 6e 67  was opened using
1e920 20 74 68 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b   the OPFLAG_SEEK
1e930 45 51 20 66 6c 61 67 2c 20 74 68 65 6e 20 74 68  EQ flag, then th
1e940 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20 77 69 6c  is.** opcode wil
1e950 6c 20 61 6c 77 61 79 73 20 6c 61 6e 64 20 6f 6e  l always land on
1e960 20 61 20 72 65 63 6f 72 64 20 74 68 61 74 20 65   a record that e
1e970 71 75 61 6c 6c 79 20 65 71 75 61 6c 73 20 74 68  qually equals th
1e980 65 20 6b 65 79 2c 20 6f 72 0a 2a 2a 20 65 6c 73  e key, or.** els
1e990 65 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  e jump immediate
1e9a0 6c 79 20 74 6f 20 50 32 2e 20 20 57 68 65 6e 20  ly to P2.  When 
1e9b0 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 4f 50  the cursor is OP
1e9c0 46 4c 41 47 5f 53 45 45 4b 45 51 2c 20 74 68 69  FLAG_SEEKEQ, thi
1e9d0 73 0a 2a 2a 20 6f 70 63 6f 64 65 20 6d 75 73 74  s.** opcode must
1e9e0 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20   be followed by 
1e9f0 61 6e 20 49 64 78 4c 45 20 6f 70 63 6f 64 65 20  an IdxLE opcode 
1ea00 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 61 72  with the same ar
1ea10 67 75 6d 65 6e 74 73 2e 0a 2a 2a 20 54 68 65 20  guments..** The 
1ea20 49 64 78 4c 45 20 6f 70 63 6f 64 65 20 77 69 6c  IdxLE opcode wil
1ea30 6c 20 62 65 20 73 6b 69 70 70 65 64 20 69 66 20  l be skipped if 
1ea40 74 68 69 73 20 6f 70 63 6f 64 65 20 73 75 63 63  this opcode succ
1ea50 65 65 64 73 2c 20 62 75 74 20 74 68 65 0a 2a 2a  eeds, but the.**
1ea60 20 49 64 78 4c 45 20 6f 70 63 6f 64 65 20 77 69   IdxLE opcode wi
1ea70 6c 6c 20 62 65 20 75 73 65 64 20 6f 6e 20 73 75  ll be used on su
1ea80 62 73 65 71 75 65 6e 74 20 6c 6f 6f 70 20 69 74  bsequent loop it
1ea90 65 72 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  erations..**.** 
1eaa0 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76  This opcode leav
1eab0 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f  es the cursor co
1eac0 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65  nfigured to move
1ead0 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65   in forward orde
1eae0 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62  r,.** from the b
1eaf0 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20  eginning toward 
1eb00 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68  the end.  In oth
1eb10 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75  er words, the cu
1eb20 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69  rsor is.** confi
1eb30 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78  gured to use Nex
1eb40 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a  t, not Prev..**.
1eb50 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
1eb60 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65  nd, NotFound, Se
1eb70 65 6b 4c 74 2c 20 53 65 65 6b 47 74 2c 20 53 65  ekLt, SeekGt, Se
1eb80 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ekLe.*/./* Opcod
1eb90 65 3a 20 53 65 65 6b 47 54 20 50 31 20 50 32 20  e: SeekGT P1 P2 
1eba0 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
1ebb0 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
1ebc0 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f  ].**.** If curso
1ebd0 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
1ebe0 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
1ebf0 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
1ec00 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
1ec10 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69   use the value i
1ec20 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  n register P3 as
1ec30 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f   a key. If curso
1ec40 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20  r P1 refers .** 
1ec50 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c  to an SQL index,
1ec60 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20   then P3 is the 
1ec70 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61  first in an arra
1ec80 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  y of P4 register
1ec90 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75  s .** that are u
1eca0 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b  sed as an unpack
1ecb0 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a  ed index key. .*
1ecc0 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20  *.** Reposition 
1ecd0 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
1ece0 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  t  it points to 
1ecf0 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74  the smallest ent
1ed00 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67  ry that .** is g
1ed10 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20  reater than the 
1ed20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68  key value. If th
1ed30 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72  ere are no recor
1ed40 64 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  ds greater than 
1ed50 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20  .** the key and 
1ed60 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P2 is not zero, 
1ed70 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
1ed80 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
1ed90 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  de leaves the cu
1eda0 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20  rsor configured 
1edb0 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61  to move in forwa
1edc0 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f  rd order,.** fro
1edd0 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  m the beginning 
1ede0 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20  toward the end. 
1edf0 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
1ee00 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
1ee10 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  * configured to 
1ee20 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72  use Next, not Pr
1ee30 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ev..**.** See al
1ee40 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
1ee50 75 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65  und, SeekLt, See
1ee60 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f  kGe, SeekLe.*/./
1ee70 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c 54  * Opcode: SeekLT
1ee80 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 20 0a   P1 P2 P3 P4 * .
1ee90 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
1eea0 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
1eeb0 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1eec0 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61  ers to an SQL ta
1eed0 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74  ble (B-Tree that
1eee0 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65   uses integer ke
1eef0 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65  ys), .** use the
1ef00 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
1ef10 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20  er P3 as a key. 
1ef20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1ef30 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51  ers .** to an SQ
1ef40 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33  L index, then P3
1ef50 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e   is the first in
1ef60 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20   an array of P4 
1ef70 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68  registers .** th
1ef80 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61  at are used as a
1ef90 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
1efa0 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70   key. .**.** Rep
1efb0 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
1efc0 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f  1 so that  it po
1efd0 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67  ints to the larg
1efe0 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a  est entry that .
1eff0 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ** is less than 
1f000 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49  the key value. I
1f010 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72  f there are no r
1f020 65 63 6f 72 64 73 20 6c 65 73 73 20 74 68 61 6e  ecords less than
1f030 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64   .** the key and
1f040 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
1f050 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
1f060 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
1f070 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
1f080 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64  ursor configured
1f090 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65   to move in reve
1f0a0 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72  rse order,.** fr
1f0b0 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72  om the end towar
1f0c0 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e  d the beginning.
1f0d0 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
1f0e0 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a  , the cursor is.
1f0f0 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  ** configured to
1f100 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e   use Prev, not N
1f110 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ext..**.** See a
1f120 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
1f130 6f 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20 53 65  ound, SeekGt, Se
1f140 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a  ekGe, SeekLe.*/.
1f150 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c  /* Opcode: SeekL
1f160 45 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  E P1 P2 P3 P4 *.
1f170 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
1f180 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
1f190 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1f1a0 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61  ers to an SQL ta
1f1b0 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74  ble (B-Tree that
1f1c0 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65   uses integer ke
1f1d0 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65  ys), .** use the
1f1e0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
1f1f0 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20  er P3 as a key. 
1f200 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1f210 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51  ers .** to an SQ
1f220 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33  L index, then P3
1f230 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e   is the first in
1f240 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20   an array of P4 
1f250 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68  registers .** th
1f260 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61  at are used as a
1f270 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
1f280 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70   key. .**.** Rep
1f290 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
1f2a0 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69  1 so that it poi
1f2b0 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65  nts to the large
1f2c0 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  st entry that .*
1f2d0 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f  * is less than o
1f2e0 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
1f2f0 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65  ey value. If the
1f300 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
1f310 73 20 0a 2a 2a 20 6c 65 73 73 20 74 68 61 6e 20  s .** less than 
1f320 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
1f330 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f  key and P2 is no
1f340 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d  t zero, then jum
1f350 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  p to P2..**.** T
1f360 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65  his opcode leave
1f370 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e  s the cursor con
1f380 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20  figured to move 
1f390 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65 72  in reverse order
1f3a0 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e  ,.** from the en
1f3b0 64 20 74 6f 77 61 72 64 20 74 68 65 20 62 65 67  d toward the beg
1f3c0 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65  inning.  In othe
1f3d0 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72  r words, the cur
1f3e0 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67  sor is.** config
1f3f0 75 72 65 64 20 74 6f 20 75 73 65 20 50 72 65 76  ured to use Prev
1f400 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a  , not Next..**.*
1f410 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20  * If the cursor 
1f420 50 31 20 77 61 73 20 6f 70 65 6e 65 64 20 75 73  P1 was opened us
1f430 69 6e 67 20 74 68 65 20 4f 50 46 4c 41 47 5f 53  ing the OPFLAG_S
1f440 45 45 4b 45 51 20 66 6c 61 67 2c 20 74 68 65 6e  EEKEQ flag, then
1f450 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20   this.** opcode 
1f460 77 69 6c 6c 20 61 6c 77 61 79 73 20 6c 61 6e 64  will always land
1f470 20 6f 6e 20 61 20 72 65 63 6f 72 64 20 74 68 61   on a record tha
1f480 74 20 65 71 75 61 6c 6c 79 20 65 71 75 61 6c 73  t equally equals
1f490 20 74 68 65 20 6b 65 79 2c 20 6f 72 0a 2a 2a 20   the key, or.** 
1f4a0 65 6c 73 65 20 6a 75 6d 70 20 69 6d 6d 65 64 69  else jump immedi
1f4b0 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 57 68  ately to P2.  Wh
1f4c0 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  en the cursor is
1f4d0 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 2c 20   OPFLAG_SEEKEQ, 
1f4e0 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20 6d  this.** opcode m
1f4f0 75 73 74 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20  ust be followed 
1f500 62 79 20 61 6e 20 49 64 78 47 45 20 6f 70 63 6f  by an IdxGE opco
1f510 64 65 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  de with the same
1f520 20 61 72 67 75 6d 65 6e 74 73 2e 0a 2a 2a 20 54   arguments..** T
1f530 68 65 20 49 64 78 47 45 20 6f 70 63 6f 64 65 20  he IdxGE opcode 
1f540 77 69 6c 6c 20 62 65 20 73 6b 69 70 70 65 64 20  will be skipped 
1f550 69 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20 73  if this opcode s
1f560 75 63 63 65 65 64 73 2c 20 62 75 74 20 74 68 65  ucceeds, but the
1f570 0a 2a 2a 20 49 64 78 47 45 20 6f 70 63 6f 64 65  .** IdxGE opcode
1f580 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 6f 6e   will be used on
1f590 20 73 75 62 73 65 71 75 65 6e 74 20 6c 6f 6f 70   subsequent loop
1f5a0 20 69 74 65 72 61 74 69 6f 6e 73 2e 0a 2a 2a 0a   iterations..**.
1f5b0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
1f5c0 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65  nd, NotFound, Se
1f5d0 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65  ekGt, SeekGe, Se
1f5e0 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ekLt.*/.case OP_
1f5f0 53 65 65 6b 4c 54 3a 20 20 20 20 20 20 20 20 20  SeekLT:         
1f600 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1f610 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 45 3a 20  case OP_SeekLE: 
1f620 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
1f630 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
1f640 53 65 65 6b 47 45 3a 20 20 20 20 20 20 20 20 20  SeekGE:         
1f650 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1f660 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 54 3a 20  case OP_SeekGT: 
1f670 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c  {       /* jump,
1f680 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65   in3 */.  int re
1f690 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  s;           /* 
1f6a0 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73 75 6c  Comparison resul
1f6b0 74 20 2a 2f 0a 20 20 69 6e 74 20 6f 63 3b 20 20  t */.  int oc;  
1f6c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 63            /* Opc
1f6d0 6f 64 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ode */.  VdbeCur
1f6e0 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54  sor *pC;    /* T
1f6f0 68 65 20 63 75 72 73 6f 72 20 74 6f 20 73 65 65  he cursor to see
1f700 6b 20 2a 2f 0a 20 20 55 6e 70 61 63 6b 65 64 52  k */.  UnpackedR
1f710 65 63 6f 72 64 20 72 3b 20 20 2f 2a 20 54 68 65  ecord r;  /* The
1f720 20 6b 65 79 20 74 6f 20 73 65 65 6b 20 66 6f 72   key to seek for
1f730 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64   */.  int nField
1f740 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
1f750 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 6f 72  er of columns or
1f760 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 6b   fields in the k
1f770 65 79 20 2a 2f 0a 20 20 69 36 34 20 69 4b 65 79  ey */.  i64 iKey
1f780 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
1f790 65 20 72 6f 77 69 64 20 77 65 20 61 72 65 20 74  e rowid we are t
1f7a0 6f 20 73 65 65 6b 20 74 6f 20 2a 2f 0a 20 20 69  o seek to */.  i
1f7b0 6e 74 20 65 71 4f 6e 6c 79 3b 20 20 20 20 20 20  nt eqOnly;      
1f7c0 20 20 2f 2a 20 4f 6e 6c 79 20 69 6e 74 65 72 65    /* Only intere
1f7d0 73 74 65 64 20 69 6e 20 3d 3d 20 72 65 73 75 6c  sted in == resul
1f7e0 74 73 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28  ts */..  assert(
1f7f0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1f800 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1f810 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
1f820 4f 70 2d 3e 70 32 21 3d 30 20 29 3b 0a 20 20 70  Op->p2!=0 );.  p
1f830 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
1f840 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
1f850 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
1f860 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
1f870 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
1f880 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f  );.  assert( OP_
1f890 53 65 65 6b 4c 45 20 3d 3d 20 4f 50 5f 53 65 65  SeekLE == OP_See
1f8a0 6b 4c 54 2b 31 20 29 3b 0a 20 20 61 73 73 65 72  kLT+1 );.  asser
1f8b0 74 28 20 4f 50 5f 53 65 65 6b 47 45 20 3d 3d 20  t( OP_SeekGE == 
1f8c0 4f 50 5f 53 65 65 6b 4c 54 2b 32 20 29 3b 0a 20  OP_SeekLT+2 );. 
1f8d0 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
1f8e0 47 54 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b  GT == OP_SeekLT+
1f8f0 33 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  3 );.  assert( p
1f900 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a  C->isOrdered );.
1f910 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63    assert( pC->uc
1f920 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  .pCursor!=0 );. 
1f930 20 6f 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64   oc = pOp->opcod
1f940 65 3b 0a 20 20 65 71 4f 6e 6c 79 20 3d 20 30 3b  e;.  eqOnly = 0;
1f950 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
1f960 20 30 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54   0;.#ifdef SQLIT
1f970 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65  E_DEBUG.  pC->se
1f980 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f  ekOp = pOp->opco
1f990 64 65 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66  de;.#endif..  if
1f9a0 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b  ( pC->isTable ){
1f9b0 0a 20 20 20 20 2f 2a 20 54 68 65 20 42 54 52 45  .    /* The BTRE
1f9c0 45 5f 53 45 45 4b 5f 45 51 20 66 6c 61 67 20 69  E_SEEK_EQ flag i
1f9d0 73 20 6f 6e 6c 79 20 73 65 74 20 6f 6e 20 69 6e  s only set on in
1f9e0 64 65 78 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20  dex cursors */. 
1f9f0 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
1fa00 65 33 42 74 72 65 65 43 75 72 73 6f 72 48 61 73  e3BtreeCursorHas
1fa10 48 69 6e 74 28 70 43 2d 3e 75 63 2e 70 43 75 72  Hint(pC->uc.pCur
1fa20 73 6f 72 2c 20 42 54 52 45 45 5f 53 45 45 4b 5f  sor, BTREE_SEEK_
1fa30 45 51 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 20  EQ)==0.         
1fa40 20 20 20 20 20 7c 7c 20 43 4f 52 52 55 50 54 5f       || CORRUPT_
1fa50 44 42 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 54 68  DB );..    /* Th
1fa60 65 20 69 6e 70 75 74 20 76 61 6c 75 65 20 69 6e  e input value in
1fa70 20 50 33 20 6d 69 67 68 74 20 62 65 20 6f 66 20   P3 might be of 
1fa80 61 6e 79 20 74 79 70 65 3a 20 69 6e 74 65 67 65  any type: intege
1fa90 72 2c 20 72 65 61 6c 2c 20 73 74 72 69 6e 67 2c  r, real, string,
1faa0 0a 20 20 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f 72  .    ** blob, or
1fab0 20 4e 55 4c 4c 2e 20 20 42 75 74 20 69 74 20 6e   NULL.  But it n
1fac0 65 65 64 73 20 74 6f 20 62 65 20 61 6e 20 69 6e  eeds to be an in
1fad0 74 65 67 65 72 20 62 65 66 6f 72 65 20 77 65 20  teger before we 
1fae0 63 61 6e 20 64 6f 0a 20 20 20 20 2a 2a 20 74 68  can do.    ** th
1faf0 65 20 73 65 65 6b 2c 20 73 6f 20 63 6f 6e 76 65  e seek, so conve
1fb00 72 74 20 69 74 2e 20 2a 2f 0a 20 20 20 20 70 49  rt it. */.    pI
1fb10 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
1fb20 70 33 5d 3b 0a 20 20 20 20 69 66 28 20 28 70 49  p3];.    if( (pI
1fb30 6e 33 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  n3->flags & (MEM
1fb40 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45  _Int|MEM_Real|ME
1fb50 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72  M_Str))==MEM_Str
1fb60 20 29 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 4e   ){.      applyN
1fb70 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70  umericAffinity(p
1fb80 49 6e 33 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20  In3, 0);.    }. 
1fb90 20 20 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65     iKey = sqlite
1fba0 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
1fbb0 6e 33 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20  n3);..    /* If 
1fbc0 74 68 65 20 50 33 20 76 61 6c 75 65 20 63 6f 75  the P3 value cou
1fbd0 6c 64 20 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72  ld not be conver
1fbe0 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65  ted into an inte
1fbf0 67 65 72 20 77 69 74 68 6f 75 74 0a 20 20 20 20  ger without.    
1fc00 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72  ** loss of infor
1fc10 6d 61 74 69 6f 6e 2c 20 74 68 65 6e 20 73 70 65  mation, then spe
1fc20 63 69 61 6c 20 70 72 6f 63 65 73 73 69 6e 67 20  cial processing 
1fc30 69 73 20 72 65 71 75 69 72 65 64 2e 2e 2e 20 2a  is required... *
1fc40 2f 0a 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d  /.    if( (pIn3-
1fc50 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
1fc60 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66  )==0 ){.      if
1fc70 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
1fc80 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b   MEM_Real)==0 ){
1fc90 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74  .        /* If t
1fca0 68 65 20 50 33 20 76 61 6c 75 65 20 63 61 6e 6e  he P3 value cann
1fcb0 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20  ot be converted 
1fcc0 69 6e 74 6f 20 61 6e 79 20 6b 69 6e 64 20 6f 66  into any kind of
1fcd0 20 61 20 6e 75 6d 62 65 72 2c 0a 20 20 20 20 20   a number,.     
1fce0 20 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 73     ** then the s
1fcf0 65 65 6b 20 69 73 20 6e 6f 74 20 70 6f 73 73 69  eek is not possi
1fd00 62 6c 65 2c 20 73 6f 20 6a 75 6d 70 20 74 6f 20  ble, so jump to 
1fd10 50 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 56 64  P2 */.        Vd
1fd20 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c  beBranchTaken(1,
1fd30 32 29 3b 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  2); goto jump_to
1fd40 5f 70 32 3b 0a 20 20 20 20 20 20 20 20 62 72 65  _p2;.        bre
1fd50 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  ak;.      }..   
1fd60 20 20 20 2f 2a 20 49 66 20 74 68 65 20 61 70 70     /* If the app
1fd70 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b 65 79 20  roximation iKey 
1fd80 69 73 20 6c 61 72 67 65 72 20 74 68 61 6e 20 74  is larger than t
1fd90 68 65 20 61 63 74 75 61 6c 20 72 65 61 6c 20 73  he actual real s
1fda0 65 61 72 63 68 0a 20 20 20 20 20 20 2a 2a 20 74  earch.      ** t
1fdb0 65 72 6d 2c 20 73 75 62 73 74 69 74 75 74 65 20  erm, substitute 
1fdc0 3e 3d 20 66 6f 72 20 3e 20 61 6e 64 20 3c 20 66  >= for > and < f
1fdd0 6f 72 20 3c 3d 2e 20 65 2e 67 2e 20 69 66 20 74  or <=. e.g. if t
1fde0 68 65 20 73 65 61 72 63 68 20 74 65 72 6d 0a 20  he search term. 
1fdf0 20 20 20 20 20 2a 2a 20 69 73 20 34 2e 39 20 61       ** is 4.9 a
1fe00 6e 64 20 74 68 65 20 69 6e 74 65 67 65 72 20 61  nd the integer a
1fe10 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 35 3a 0a  pproximation 5:.
1fe20 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a        **.      *
1fe30 2a 20 20 20 20 20 20 20 20 28 78 20 3e 20 20 34  *        (x >  4
1fe40 2e 39 29 20 20 20 20 2d 3e 20 20 20 20 20 28 78  .9)    ->     (x
1fe50 20 3e 3d 20 35 29 0a 20 20 20 20 20 20 2a 2a 20   >= 5).      ** 
1fe60 20 20 20 20 20 20 20 28 78 20 3c 3d 20 34 2e 39         (x <= 4.9
1fe70 29 20 20 20 20 2d 3e 20 20 20 20 20 28 78 20 3c  )    ->     (x <
1fe80 20 20 35 29 0a 20 20 20 20 20 20 2a 2f 0a 20 20    5).      */.  
1fe90 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e      if( pIn3->u.
1fea0 72 3c 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29  r<(double)iKey )
1feb0 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
1fec0 28 20 4f 50 5f 53 65 65 6b 47 45 3d 3d 28 4f 50  ( OP_SeekGE==(OP
1fed0 5f 53 65 65 6b 47 54 2d 31 29 20 29 3b 0a 20 20  _SeekGT-1) );.  
1fee0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50        assert( OP
1fef0 5f 53 65 65 6b 4c 54 3d 3d 28 4f 50 5f 53 65 65  _SeekLT==(OP_See
1ff00 6b 4c 45 2d 31 29 20 29 3b 0a 20 20 20 20 20 20  kLE-1) );.      
1ff10 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f 53 65    assert( (OP_Se
1ff20 65 6b 4c 45 20 26 20 30 78 30 30 30 31 29 3d 3d  ekLE & 0x0001)==
1ff30 28 4f 50 5f 53 65 65 6b 47 54 20 26 20 30 78 30  (OP_SeekGT & 0x0
1ff40 30 30 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20  001) );.        
1ff50 69 66 28 20 28 6f 63 20 26 20 30 78 30 30 30 31  if( (oc & 0x0001
1ff60 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 20 26 20  )==(OP_SeekGT & 
1ff70 30 78 30 30 30 31 29 20 29 20 6f 63 2d 2d 3b 0a  0x0001) ) oc--;.
1ff80 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f        }..      /
1ff90 2a 20 49 66 20 74 68 65 20 61 70 70 72 6f 78 69  * If the approxi
1ffa0 6d 61 74 69 6f 6e 20 69 4b 65 79 20 69 73 20 73  mation iKey is s
1ffb0 6d 61 6c 6c 65 72 20 74 68 61 6e 20 74 68 65 20  maller than the 
1ffc0 61 63 74 75 61 6c 20 72 65 61 6c 20 73 65 61 72  actual real sear
1ffd0 63 68 0a 20 20 20 20 20 20 2a 2a 20 74 65 72 6d  ch.      ** term
1ffe0 2c 20 73 75 62 73 74 69 74 75 74 65 20 3c 3d 20  , substitute <= 
1fff0 66 6f 72 20 3c 20 61 6e 64 20 3e 20 66 6f 72 20  for < and > for 
20000 3e 3d 2e 20 20 2a 2f 0a 20 20 20 20 20 20 65 6c  >=.  */.      el
20010 73 65 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 72  se if( pIn3->u.r
20020 3e 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 7b  >(double)iKey ){
20030 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
20040 20 4f 50 5f 53 65 65 6b 4c 45 3d 3d 28 4f 50 5f   OP_SeekLE==(OP_
20050 53 65 65 6b 4c 54 2b 31 29 20 29 3b 0a 20 20 20  SeekLT+1) );.   
20060 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f       assert( OP_
20070 53 65 65 6b 47 54 3d 3d 28 4f 50 5f 53 65 65 6b  SeekGT==(OP_Seek
20080 47 45 2b 31 29 20 29 3b 0a 20 20 20 20 20 20 20  GE+1) );.       
20090 20 61 73 73 65 72 74 28 20 28 4f 50 5f 53 65 65   assert( (OP_See
200a0 6b 4c 54 20 26 20 30 78 30 30 30 31 29 3d 3d 28  kLT & 0x0001)==(
200b0 4f 50 5f 53 65 65 6b 47 45 20 26 20 30 78 30 30  OP_SeekGE & 0x00
200c0 30 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 69  01) );.        i
200d0 66 28 20 28 6f 63 20 26 20 30 78 30 30 30 31 29  f( (oc & 0x0001)
200e0 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 20 26 20 30  ==(OP_SeekLT & 0
200f0 78 30 30 30 31 29 20 29 20 6f 63 2b 2b 3b 0a 20  x0001) ) oc++;. 
20100 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 0a 20 20       }.    } .  
20110 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
20120 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
20130 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  d(pC->uc.pCursor
20140 2c 20 30 2c 20 28 75 36 34 29 69 4b 65 79 2c 20  , 0, (u64)iKey, 
20150 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43  0, &res);.    pC
20160 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d  ->movetoTarget =
20170 20 69 4b 65 79 3b 20 20 2f 2a 20 55 73 65 64 20   iKey;  /* Used 
20180 62 79 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a  by OP_Delete */.
20190 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
201a0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67  TE_OK ){.      g
201b0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
201c0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  _error;.    }.  
201d0 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 46 6f  }else{.    /* Fo
201e0 72 20 61 20 63 75 72 73 6f 72 20 77 69 74 68 20  r a cursor with 
201f0 74 68 65 20 42 54 52 45 45 5f 53 45 45 4b 5f 45  the BTREE_SEEK_E
20200 51 20 68 69 6e 74 2c 20 6f 6e 6c 79 20 74 68 65  Q hint, only the
20210 20 4f 50 5f 53 65 65 6b 47 45 20 61 6e 64 0a 20   OP_SeekGE and. 
20220 20 20 20 2a 2a 20 4f 50 5f 53 65 65 6b 4c 45 20     ** OP_SeekLE 
20230 6f 70 63 6f 64 65 73 20 61 72 65 20 61 6c 6c 6f  opcodes are allo
20240 77 65 64 2c 20 61 6e 64 20 74 68 65 73 65 20 6d  wed, and these m
20250 75 73 74 20 62 65 20 69 6d 6d 65 64 69 61 74 65  ust be immediate
20260 6c 79 20 66 6f 6c 6c 6f 77 65 64 0a 20 20 20 20  ly followed.    
20270 2a 2a 20 62 79 20 61 6e 20 4f 50 5f 49 64 78 47  ** by an OP_IdxG
20280 54 20 6f 72 20 4f 50 5f 49 64 78 4c 54 20 6f 70  T or OP_IdxLT op
20290 63 6f 64 65 2c 20 72 65 73 70 65 63 74 69 76 65  code, respective
202a0 6c 79 2c 20 77 69 74 68 20 74 68 65 20 73 61 6d  ly, with the sam
202b0 65 20 6b 65 79 2e 0a 20 20 20 20 2a 2f 0a 20 20  e key..    */.  
202c0 20 20 69 66 28 20 73 71 6c 69 74 65 33 42 74 72    if( sqlite3Btr
202d0 65 65 43 75 72 73 6f 72 48 61 73 48 69 6e 74 28  eeCursorHasHint(
202e0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
202f0 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 29 20 29  BTREE_SEEK_EQ) )
20300 7b 0a 20 20 20 20 20 20 65 71 4f 6e 6c 79 20 3d  {.      eqOnly =
20310 20 31 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   1;.      assert
20320 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
20330 50 5f 53 65 65 6b 47 45 20 7c 7c 20 70 4f 70 2d  P_SeekGE || pOp-
20340 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b  >opcode==OP_Seek
20350 4c 45 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  LE );.      asse
20360 72 74 28 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64  rt( pOp[1].opcod
20370 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 7c 7c 20 70  e==OP_IdxLT || p
20380 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50  Op[1].opcode==OP
20390 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20 20 20  _IdxGT );.      
203a0 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70  assert( pOp[1].p
203b0 31 3d 3d 70 4f 70 5b 30 5d 2e 70 31 20 29 3b 0a  1==pOp[0].p1 );.
203c0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
203d0 70 5b 31 5d 2e 70 32 3d 3d 70 4f 70 5b 30 5d 2e  p[1].p2==pOp[0].
203e0 70 32 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  p2 );.      asse
203f0 72 74 28 20 70 4f 70 5b 31 5d 2e 70 33 3d 3d 70  rt( pOp[1].p3==p
20400 4f 70 5b 30 5d 2e 70 33 20 29 3b 0a 20 20 20 20  Op[0].p3 );.    
20410 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d    assert( pOp[1]
20420 2e 70 34 2e 69 3d 3d 70 4f 70 5b 30 5d 2e 70 34  .p4.i==pOp[0].p4
20430 2e 69 20 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  .i );.    }..   
20440 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70   nField = pOp->p
20450 34 2e 69 3b 0a 20 20 20 20 61 73 73 65 72 74 28  4.i;.    assert(
20460 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
20470 5f 49 4e 54 33 32 20 29 3b 0a 20 20 20 20 61 73  _INT32 );.    as
20480 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 29  sert( nField>0 )
20490 3b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f  ;.    r.pKeyInfo
204a0 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b   = pC->pKeyInfo;
204b0 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20  .    r.nField = 
204c0 28 75 31 36 29 6e 46 69 65 6c 64 3b 0a 0a 20 20  (u16)nField;..  
204d0 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 6c 69    /* The next li
204e0 6e 65 20 6f 66 20 63 6f 64 65 20 63 6f 6d 70 75  ne of code compu
204f0 74 65 73 20 61 73 20 66 6f 6c 6c 6f 77 73 2c 20  tes as follows, 
20500 6f 6e 6c 79 20 66 61 73 74 65 72 3a 0a 20 20 20  only faster:.   
20510 20 2a 2a 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50   **   if( oc==OP
20520 5f 53 65 65 6b 47 54 20 7c 7c 20 6f 63 3d 3d 4f  _SeekGT || oc==O
20530 50 5f 53 65 65 6b 4c 45 20 29 7b 0a 20 20 20 20  P_SeekLE ){.    
20540 2a 2a 20 20 20 20 20 72 2e 64 65 66 61 75 6c 74  **     r.default
20550 5f 72 63 20 3d 20 2d 31 3b 0a 20 20 20 20 2a 2a  _rc = -1;.    **
20560 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2a 2a     }else{.    **
20570 20 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72       r.default_r
20580 63 20 3d 20 2b 31 3b 0a 20 20 20 20 2a 2a 20 20  c = +1;.    **  
20590 20 7d 0a 20 20 20 20 2a 2f 0a 20 20 20 20 72 2e   }.    */.    r.
205a0 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 28 28 31  default_rc = ((1
205b0 20 26 20 28 6f 63 20 2d 20 4f 50 5f 53 65 65 6b   & (oc - OP_Seek
205c0 4c 54 29 29 20 3f 20 2d 31 20 3a 20 2b 31 29 3b  LT)) ? -1 : +1);
205d0 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21  .    assert( oc!
205e0 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20 72 2e  =OP_SeekGT || r.
205f0 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2d 31 20 29  default_rc==-1 )
20600 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63  ;.    assert( oc
20610 21 3d 4f 50 5f 53 65 65 6b 4c 45 20 7c 7c 20 72  !=OP_SeekLE || r
20620 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2d 31 20  .default_rc==-1 
20630 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f  );.    assert( o
20640 63 21 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20  c!=OP_SeekGE || 
20650 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2b 31  r.default_rc==+1
20660 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
20670 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c  oc!=OP_SeekLT ||
20680 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2b   r.default_rc==+
20690 31 20 29 3b 0a 0a 20 20 20 20 72 2e 61 4d 65 6d  1 );..    r.aMem
206a0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
206b0 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ];.#ifdef SQLITE
206c0 5f 44 45 42 55 47 0a 20 20 20 20 7b 20 69 6e 74  _DEBUG.    { int
206d0 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72   i; for(i=0; i<r
206e0 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73  .nField; i++) as
206f0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
20700 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20  (&r.aMem[i]) ); 
20710 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 72 2e 65  }.#endif.    r.e
20720 71 53 65 65 6e 20 3d 20 30 3b 0a 20 20 20 20 72  qSeen = 0;.    r
20730 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
20740 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
20750 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26  C->uc.pCursor, &
20760 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a  r, 0, 0, &res);.
20770 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
20780 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67  TE_OK ){.      g
20790 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
207a0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  _error;.    }.  
207b0 20 20 69 66 28 20 65 71 4f 6e 6c 79 20 26 26 20    if( eqOnly && 
207c0 72 2e 65 71 53 65 65 6e 3d 3d 30 20 29 7b 0a 20  r.eqSeen==0 ){. 
207d0 20 20 20 20 20 61 73 73 65 72 74 28 20 72 65 73       assert( res
207e0 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 67 6f 74  !=0 );.      got
207f0 6f 20 73 65 65 6b 5f 6e 6f 74 5f 66 6f 75 6e 64  o seek_not_found
20800 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43  ;.    }.  }.  pC
20810 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
20820 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
20830 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
20840 53 54 41 4c 45 3b 0a 23 69 66 64 65 66 20 53 51  STALE;.#ifdef SQ
20850 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69  LITE_TEST.  sqli
20860 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74  te3_search_count
20870 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28  ++;.#endif.  if(
20880 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47 45 20 29   oc>=OP_SeekGE )
20890 7b 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f  {  assert( oc==O
208a0 50 5f 53 65 65 6b 47 45 20 7c 7c 20 6f 63 3d 3d  P_SeekGE || oc==
208b0 4f 50 5f 53 65 65 6b 47 54 20 29 3b 0a 20 20 20  OP_SeekGT );.   
208c0 20 69 66 28 20 72 65 73 3c 30 20 7c 7c 20 28 72   if( res<0 || (r
208d0 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f  es==0 && oc==OP_
208e0 53 65 65 6b 47 54 29 20 29 7b 0a 20 20 20 20 20  SeekGT) ){.     
208f0 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20   res = 0;.      
20900 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
20910 65 4e 65 78 74 28 70 43 2d 3e 75 63 2e 70 43 75  eNext(pC->uc.pCu
20920 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20  rsor, &res);.   
20930 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
20940 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
20950 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
20960 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
20970 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 7d 0a   res = 0;.    }.
20980 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
20990 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  ert( oc==OP_Seek
209a0 4c 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65  LT || oc==OP_See
209b0 6b 4c 45 20 29 3b 0a 20 20 20 20 69 66 28 20 72  kLE );.    if( r
209c0 65 73 3e 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20  es>0 || (res==0 
209d0 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54  && oc==OP_SeekLT
209e0 29 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d  ) ){.      res =
209f0 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   0;.      rc = s
20a00 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69  qlite3BtreePrevi
20a10 6f 75 73 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  ous(pC->uc.pCurs
20a20 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20  or, &res);.     
20a30 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
20a40 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
20a50 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
20a60 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f    }else{.      /
20a70 2a 20 72 65 73 20 6d 69 67 68 74 20 62 65 20 6e  * res might be n
20a80 65 67 61 74 69 76 65 20 62 65 63 61 75 73 65 20  egative because 
20a90 74 68 65 20 74 61 62 6c 65 20 69 73 20 65 6d 70  the table is emp
20aa0 74 79 2e 20 20 43 68 65 63 6b 20 74 6f 0a 20 20  ty.  Check to.  
20ab0 20 20 20 20 2a 2a 20 73 65 65 20 69 66 20 74 68      ** see if th
20ac0 69 73 20 69 73 20 74 68 65 20 63 61 73 65 2e 0a  is is the case..
20ad0 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 72        */.      r
20ae0 65 73 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  es = sqlite3Btre
20af0 65 45 6f 66 28 70 43 2d 3e 75 63 2e 70 43 75 72  eEof(pC->uc.pCur
20b00 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  sor);.    }.  }.
20b10 73 65 65 6b 5f 6e 6f 74 5f 66 6f 75 6e 64 3a 0a  seek_not_found:.
20b20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
20b30 32 3e 30 20 29 3b 0a 20 20 56 64 62 65 42 72 61  2>0 );.  VdbeBra
20b40 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c  nchTaken(res!=0,
20b50 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 7b  2);.  if( res ){
20b60 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  .    goto jump_t
20b70 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 20 69 66  o_p2;.  }else if
20b80 28 20 65 71 4f 6e 6c 79 20 29 7b 0a 20 20 20 20  ( eqOnly ){.    
20b90 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 6f  assert( pOp[1].o
20ba0 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20  pcode==OP_IdxLT 
20bb0 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65  || pOp[1].opcode
20bc0 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20  ==OP_IdxGT );.  
20bd0 20 20 70 4f 70 2b 2b 3b 20 2f 2a 20 53 6b 69 70    pOp++; /* Skip
20be0 20 74 68 65 20 4f 50 5f 49 64 78 4c 74 20 6f 72   the OP_IdxLt or
20bf0 20 4f 50 5f 49 64 78 47 54 20 74 68 61 74 20 66   OP_IdxGT that f
20c00 6f 6c 6c 6f 77 73 20 2a 2f 0a 20 20 7d 0a 20 20  ollows */.  }.  
20c10 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
20c20 6f 64 65 3a 20 46 6f 75 6e 64 20 50 31 20 50 32  ode: Found P1 P2
20c30 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
20c40 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
20c50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d  4].**.** If P4==
20c60 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
20c70 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20  P3 holds a blob 
20c80 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d  constructed by M
20c90 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a  akeRecord.  If.*
20ca0 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69  * P4>0 then regi
20cb0 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66  ster P3 is the f
20cc0 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73  irst of P4 regis
20cd0 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61  ters that form a
20ce0 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65  n unpacked.** re
20cf0 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73  cord..**.** Curs
20d00 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69  or P1 is on an i
20d10 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20  ndex btree.  If 
20d20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74  the record ident
20d30 69 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20  ified by P3 and 
20d40 50 34 0a 2a 2a 20 69 73 20 61 20 70 72 65 66 69  P4.** is a prefi
20d50 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69  x of any entry i
20d60 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70  n P1 then a jump
20d70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20 61   is made to P2 a
20d80 6e 64 0a 2a 2a 20 50 31 20 69 73 20 6c 65 66 74  nd.** P1 is left
20d90 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65   pointing at the
20da0 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e   matching entry.
20db0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72  .**.** This oper
20dc0 61 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65  ation leaves the
20dd0 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61   cursor in a sta
20de0 74 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 20  te where it can 
20df0 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69  be.** advanced i
20e00 6e 20 74 68 65 20 66 6f 72 77 61 72 64 20 64 69  n the forward di
20e10 72 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 4e 65  rection.  The Ne
20e20 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77  xt instruction w
20e30 69 6c 6c 20 77 6f 72 6b 2c 0a 2a 2a 20 62 75 74  ill work,.** but
20e40 20 6e 6f 74 20 74 68 65 20 50 72 65 76 20 69 6e   not the Prev in
20e50 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
20e60 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f   See also: NotFo
20e70 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c  und, NoConflict,
20e80 20 4e 6f 74 45 78 69 73 74 73 2e 20 53 65 65 6b   NotExists. Seek
20e90 47 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  Ge.*/./* Opcode:
20ea0 20 4e 6f 74 46 6f 75 6e 64 20 50 31 20 50 32 20   NotFound P1 P2 
20eb0 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
20ec0 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
20ed0 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30  ].**.** If P4==0
20ee0 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
20ef0 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63  3 holds a blob c
20f00 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61  onstructed by Ma
20f10 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a  keRecord.  If.**
20f20 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73   P4>0 then regis
20f30 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69  ter P3 is the fi
20f40 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74  rst of P4 regist
20f50 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e  ers that form an
20f60 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63   unpacked.** rec
20f70 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73  ord..** .** Curs
20f80 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69  or P1 is on an i
20f90 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20  ndex btree.  If 
20fa0 74 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74  the record ident
20fb0 69 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20  ified by P3 and 
20fc0 50 34 0a 2a 2a 20 69 73 20 6e 6f 74 20 74 68 65  P4.** is not the
20fd0 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65   prefix of any e
20fe0 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20  ntry in P1 then 
20ff0 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74  a jump is made t
21000 6f 20 50 32 2e 20 20 49 66 20 50 31 20 0a 2a 2a  o P2.  If P1 .**
21010 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 6e   does contain an
21020 20 65 6e 74 72 79 20 77 68 6f 73 65 20 70 72 65   entry whose pre
21030 66 69 78 20 6d 61 74 63 68 65 73 20 74 68 65 20  fix matches the 
21040 50 33 2f 50 34 20 72 65 63 6f 72 64 20 74 68 65  P3/P4 record the
21050 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66 61 6c  n control.** fal
21060 6c 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ls through to th
21070 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
21080 6f 6e 20 61 6e 64 20 50 31 20 69 73 20 6c 65 66  on and P1 is lef
21090 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68  t pointing at th
210a0 65 0a 2a 2a 20 6d 61 74 63 68 69 6e 67 20 65 6e  e.** matching en
210b0 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  try..**.** This 
210c0 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73  operation leaves
210d0 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61   the cursor in a
210e0 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20   state where it 
210f0 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61 64 76  cannot be.** adv
21100 61 6e 63 65 64 20 69 6e 20 65 69 74 68 65 72 20  anced in either 
21110 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f  direction.  In o
21120 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
21130 4e 65 78 74 20 61 6e 64 20 50 72 65 76 0a 2a 2a  Next and Prev.**
21140 20 6f 70 63 6f 64 65 73 20 64 6f 20 6e 6f 74 20   opcodes do not 
21150 77 6f 72 6b 20 61 66 74 65 72 20 74 68 69 73 20  work after this 
21160 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  operation..**.**
21170 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
21180 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20 4e 6f 43  , NotExists, NoC
21190 6f 6e 66 6c 69 63 74 0a 2a 2f 0a 2f 2a 20 4f 70  onflict.*/./* Op
211a0 63 6f 64 65 3a 20 4e 6f 43 6f 6e 66 6c 69 63 74  code: NoConflict
211b0 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
211c0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
211d0 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49  r[P3@P4].**.** I
211e0 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67  f P4==0 then reg
211f0 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61  ister P3 holds a
21200 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65   blob constructe
21210 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e  d by MakeRecord.
21220 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65    If.** P4>0 the
21230 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  n register P3 is
21240 20 74 68 65 20 66 69 72 73 74 20 6f 66 20 50 34   the first of P4
21250 20 72 65 67 69 73 74 65 72 73 20 74 68 61 74 20   registers that 
21260 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64  form an unpacked
21270 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a  .** record..** .
21280 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73 20  ** Cursor P1 is 
21290 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65  on an index btre
212a0 65 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f 72  e.  If the recor
212b0 64 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  d identified by 
212c0 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 63 6f 6e  P3 and P4.** con
212d0 74 61 69 6e 73 20 61 6e 79 20 4e 55 4c 4c 20 76  tains any NULL v
212e0 61 6c 75 65 2c 20 6a 75 6d 70 20 69 6d 6d 65 64  alue, jump immed
212f0 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49  iately to P2.  I
21300 66 20 61 6c 6c 20 74 65 72 6d 73 20 6f 66 20 74  f all terms of t
21310 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20 61 72 65  he.** record are
21320 20 6e 6f 74 2d 4e 55 4c 4c 20 74 68 65 6e 20 61   not-NULL then a
21330 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 74   check is done t
21340 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20 61  o determine if a
21350 6e 79 20 72 6f 77 20 69 6e 20 74 68 65 0a 2a 2a  ny row in the.**
21360 20 50 31 20 69 6e 64 65 78 20 62 74 72 65 65 20   P1 index btree 
21370 68 61 73 20 61 20 6d 61 74 63 68 69 6e 67 20 6b  has a matching k
21380 65 79 20 70 72 65 66 69 78 2e 20 20 49 66 20 74  ey prefix.  If t
21390 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 61 74 63  here are no matc
213a0 68 65 73 2c 20 6a 75 6d 70 0a 2a 2a 20 69 6d 6d  hes, jump.** imm
213b0 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20  ediately to P2. 
213c0 20 49 66 20 74 68 65 72 65 20 69 73 20 61 20 6d   If there is a m
213d0 61 74 63 68 2c 20 66 61 6c 6c 20 74 68 72 6f 75  atch, fall throu
213e0 67 68 20 61 6e 64 20 6c 65 61 76 65 20 74 68 65  gh and leave the
213f0 20 50 31 0a 2a 2a 20 63 75 72 73 6f 72 20 70 6f   P1.** cursor po
21400 69 6e 74 69 6e 67 20 74 6f 20 74 68 65 20 6d 61  inting to the ma
21410 74 63 68 69 6e 67 20 72 6f 77 2e 0a 2a 2a 0a 2a  tching row..**.*
21420 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  * This opcode is
21430 20 73 69 6d 69 6c 61 72 20 74 6f 20 4f 50 5f 4e   similar to OP_N
21440 6f 74 46 6f 75 6e 64 20 77 69 74 68 20 74 68 65  otFound with the
21450 20 65 78 63 65 70 74 69 6f 6e 73 20 74 68 61 74   exceptions that
21460 20 74 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20 69   the.** branch i
21470 73 20 61 6c 77 61 79 73 20 74 61 6b 65 6e 20 69  s always taken i
21480 66 20 61 6e 79 20 70 61 72 74 20 6f 66 20 74 68  f any part of th
21490 65 20 73 65 61 72 63 68 20 6b 65 79 20 69 6e 70  e search key inp
214a0 75 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  ut is NULL..**.*
214b0 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e  * This operation
214c0 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
214d0 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68  or in a state wh
214e0 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65  ere it cannot be
214f0 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20  .** advanced in 
21500 65 69 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e  either direction
21510 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
21520 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20  s, the Next and 
21530 50 72 65 76 0a 2a 2a 20 6f 70 63 6f 64 65 73 20  Prev.** opcodes 
21540 64 6f 20 6e 6f 74 20 77 6f 72 6b 20 61 66 74 65  do not work afte
21550 72 20 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e  r this operation
21560 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
21570 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 46 6f 75 6e  : NotFound, Foun
21580 64 2c 20 4e 6f 74 45 78 69 73 74 73 0a 2a 2f 0a  d, NotExists.*/.
21590 63 61 73 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69  case OP_NoConfli
215a0 63 74 3a 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c  ct:     /* jump,
215b0 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
215c0 4e 6f 74 46 6f 75 6e 64 3a 20 20 20 20 20 20 20  NotFound:       
215d0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
215e0 63 61 73 65 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b  case OP_Found: {
215f0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
21600 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 61 6c   in3 */.  int al
21610 72 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20 69  readyExists;.  i
21620 6e 74 20 74 61 6b 65 4a 75 6d 70 3b 0a 20 20 69  nt takeJump;.  i
21630 6e 74 20 69 69 3b 0a 20 20 56 64 62 65 43 75 72  nt ii;.  VdbeCur
21640 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72  sor *pC;.  int r
21650 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  es;.  UnpackedRe
21660 63 6f 72 64 20 2a 70 46 72 65 65 3b 0a 20 20 55  cord *pFree;.  U
21670 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 2a 70  npackedRecord *p
21680 49 64 78 4b 65 79 3b 0a 20 20 55 6e 70 61 63 6b  IdxKey;.  Unpack
21690 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 23 69 66  edRecord r;..#if
216a0 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
216b0 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
216c0 65 21 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74  e!=OP_NoConflict
216d0 20 29 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64   ) sqlite3_found
216e0 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66  _count++;.#endif
216f0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
21700 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
21710 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
21720 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
21730 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
21740 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
21750 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
21760 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
21770 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
21780 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70  BUG.  pC->seekOp
21790 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a   = pOp->opcode;.
217a0 23 65 6e 64 69 66 0a 20 20 70 49 6e 33 20 3d 20  #endif.  pIn3 = 
217b0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
217c0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
217d0 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
217e0 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72  BTREE );.  asser
217f0 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  t( pC->uc.pCurso
21800 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r!=0 );.  assert
21810 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  ( pC->isTable==0
21820 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   );.  if( pOp->p
21830 34 2e 69 3e 30 20 29 7b 0a 20 20 20 20 72 2e 70  4.i>0 ){.    r.p
21840 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b  KeyInfo = pC->pK
21850 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46  eyInfo;.    r.nF
21860 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d  ield = (u16)pOp-
21870 3e 70 34 2e 69 3b 0a 20 20 20 20 72 2e 61 4d 65  >p4.i;.    r.aMe
21880 6d 20 3d 20 70 49 6e 33 3b 0a 23 69 66 64 65 66  m = pIn3;.#ifdef
21890 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
218a0 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 72    for(ii=0; ii<r
218b0 2e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a  .nField; ii++){.
218c0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
218d0 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d  mIsValid(&r.aMem
218e0 5b 69 69 5d 29 20 29 3b 0a 20 20 20 20 20 20 61  [ii]) );.      a
218f0 73 73 65 72 74 28 20 28 72 2e 61 4d 65 6d 5b 69  ssert( (r.aMem[i
21900 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a  i].flags & MEM_Z
21910 65 72 6f 29 3d 3d 30 20 7c 7c 20 72 2e 61 4d 65  ero)==0 || r.aMe
21920 6d 5b 69 69 5d 2e 6e 3d 3d 30 20 29 3b 0a 20 20  m[ii].n==0 );.  
21930 20 20 20 20 69 66 28 20 69 69 20 29 20 52 45 47      if( ii ) REG
21940 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
21950 3e 70 33 2b 69 69 2c 20 26 72 2e 61 4d 65 6d 5b  >p3+ii, &r.aMem[
21960 69 69 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  ii]);.    }.#end
21970 69 66 0a 20 20 20 20 70 49 64 78 4b 65 79 20 3d  if.    pIdxKey =
21980 20 26 72 3b 0a 20 20 20 20 70 46 72 65 65 20 3d   &r;.    pFree =
21990 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   0;.  }else{.   
219a0 20 70 46 72 65 65 20 3d 20 70 49 64 78 4b 65 79   pFree = pIdxKey
219b0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 6c   = sqlite3VdbeAl
219c0 6c 6f 63 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  locUnpackedRecor
219d0 64 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 29 3b  d(pC->pKeyInfo);
219e0 0a 20 20 20 20 69 66 28 20 70 49 64 78 4b 65 79  .    if( pIdxKey
219f0 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
21a00 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  m;.    assert( p
21a10 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
21a20 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 28 76 6f  _Blob );.    (vo
21a30 69 64 29 45 78 70 61 6e 64 42 6c 6f 62 28 70 49  id)ExpandBlob(pI
21a40 6e 33 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  n3);.    sqlite3
21a50 56 64 62 65 52 65 63 6f 72 64 55 6e 70 61 63 6b  VdbeRecordUnpack
21a60 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 70  (pC->pKeyInfo, p
21a70 49 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c  In3->n, pIn3->z,
21a80 20 70 49 64 78 4b 65 79 29 3b 0a 20 20 7d 0a 20   pIdxKey);.  }. 
21a90 20 70 49 64 78 4b 65 79 2d 3e 64 65 66 61 75 6c   pIdxKey->defaul
21aa0 74 5f 72 63 20 3d 20 30 3b 0a 20 20 74 61 6b 65  t_rc = 0;.  take
21ab0 4a 75 6d 70 20 3d 20 30 3b 0a 20 20 69 66 28 20  Jump = 0;.  if( 
21ac0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
21ad0 4e 6f 43 6f 6e 66 6c 69 63 74 20 29 7b 0a 20 20  NoConflict ){.  
21ae0 20 20 2f 2a 20 46 6f 72 20 74 68 65 20 4f 50 5f    /* For the OP_
21af0 4e 6f 43 6f 6e 66 6c 69 63 74 20 6f 70 63 6f 64  NoConflict opcod
21b00 65 2c 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  e, take the jump
21b10 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65 0a 20   if any of the. 
21b20 20 20 20 2a 2a 20 69 6e 70 75 74 20 66 69 65 6c     ** input fiel
21b30 64 73 20 61 72 65 20 4e 55 4c 4c 2c 20 73 69 6e  ds are NULL, sin
21b40 63 65 20 61 6e 79 20 6b 65 79 20 77 69 74 68 20  ce any key with 
21b50 61 20 4e 55 4c 4c 20 77 69 6c 6c 20 6e 6f 74 0a  a NULL will not.
21b60 20 20 20 20 2a 2a 20 63 6f 6e 66 6c 69 63 74 20      ** conflict 
21b70 2a 2f 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b  */.    for(ii=0;
21b80 20 69 69 3c 70 49 64 78 4b 65 79 2d 3e 6e 46 69   ii<pIdxKey->nFi
21b90 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20  eld; ii++){.    
21ba0 20 20 69 66 28 20 70 49 64 78 4b 65 79 2d 3e 61    if( pIdxKey->a
21bb0 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20  Mem[ii].flags & 
21bc0 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
21bd0 20 20 20 20 74 61 6b 65 4a 75 6d 70 20 3d 20 31      takeJump = 1
21be0 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
21bf0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
21c00 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65   }.  rc = sqlite
21c10 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
21c20 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72  cked(pC->uc.pCur
21c30 73 6f 72 2c 20 70 49 64 78 4b 65 79 2c 20 30 2c  sor, pIdxKey, 0,
21c40 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28   0, &res);.  if(
21c50 20 70 46 72 65 65 20 29 20 73 71 6c 69 74 65 33   pFree ) sqlite3
21c60 44 62 46 72 65 65 28 64 62 2c 20 70 46 72 65 65  DbFree(db, pFree
21c70 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  );.  if( rc!=SQL
21c80 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 67 6f  ITE_OK ){.    go
21c90 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
21ca0 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 43 2d  error;.  }.  pC-
21cb0 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 72 65  >seekResult = re
21cc0 73 3b 0a 20 20 61 6c 72 65 61 64 79 45 78 69 73  s;.  alreadyExis
21cd0 74 73 20 3d 20 28 72 65 73 3d 3d 30 29 3b 0a 20  ts = (res==0);. 
21ce0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31   pC->nullRow = 1
21cf0 2d 61 6c 72 65 61 64 79 45 78 69 73 74 73 3b 0a  -alreadyExists;.
21d00 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
21d10 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  veto = 0;.  pC->
21d20 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
21d30 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28  CHE_STALE;.  if(
21d40 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
21d50 5f 46 6f 75 6e 64 20 29 7b 0a 20 20 20 20 56 64  _Found ){.    Vd
21d60 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 61 6c  beBranchTaken(al
21d70 72 65 61 64 79 45 78 69 73 74 73 21 3d 30 2c 32  readyExists!=0,2
21d80 29 3b 0a 20 20 20 20 69 66 28 20 61 6c 72 65 61  );.    if( alrea
21d90 64 79 45 78 69 73 74 73 20 29 20 67 6f 74 6f 20  dyExists ) goto 
21da0 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65  jump_to_p2;.  }e
21db0 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61  lse{.    VdbeBra
21dc0 6e 63 68 54 61 6b 65 6e 28 74 61 6b 65 4a 75 6d  nchTaken(takeJum
21dd0 70 7c 7c 61 6c 72 65 61 64 79 45 78 69 73 74 73  p||alreadyExists
21de0 3d 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20  ==0,2);.    if( 
21df0 74 61 6b 65 4a 75 6d 70 20 7c 7c 20 21 61 6c 72  takeJump || !alr
21e00 65 61 64 79 45 78 69 73 74 73 20 29 20 67 6f 74  eadyExists ) got
21e10 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
21e20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
21e30 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 52 6f 77   Opcode: SeekRow
21e40 69 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  id P1 P2 P3 * *.
21e50 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74  ** Synopsis: int
21e60 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20  key=r[P3].**.** 
21e70 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  P1 is the index 
21e80 6f 66 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e  of a cursor open
21e90 20 6f 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   on an SQL table
21ea0 20 62 74 72 65 65 20 28 77 69 74 68 20 69 6e 74   btree (with int
21eb0 65 67 65 72 0a 2a 2a 20 6b 65 79 73 29 2e 20 20  eger.** keys).  
21ec0 49 66 20 72 65 67 69 73 74 65 72 20 50 33 20 64  If register P3 d
21ed0 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20  oes not contain 
21ee0 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 69 66  an integer or if
21ef0 20 50 31 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20   P1 does not.** 
21f00 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f 72 64  contain a record
21f10 20 77 69 74 68 20 72 6f 77 69 64 20 50 33 20 74   with rowid P3 t
21f20 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  hen jump immedia
21f30 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 0a 2a 2a  tely to P2.  .**
21f40 20 4f 72 2c 20 69 66 20 50 32 20 69 73 20 30 2c   Or, if P2 is 0,
21f50 20 72 61 69 73 65 20 61 6e 20 53 51 4c 49 54 45   raise an SQLITE
21f60 5f 43 4f 52 52 55 50 54 20 65 72 72 6f 72 2e 20  _CORRUPT error. 
21f70 49 66 20 50 31 20 64 6f 65 73 20 63 6f 6e 74 61  If P1 does conta
21f80 69 6e 0a 2a 2a 20 61 20 72 65 63 6f 72 64 20 77  in.** a record w
21f90 69 74 68 20 72 6f 77 69 64 20 50 33 20 74 68 65  ith rowid P3 the
21fa0 6e 20 0a 2a 2a 20 6c 65 61 76 65 20 74 68 65 20  n .** leave the 
21fb0 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20  cursor pointing 
21fc0 61 74 20 74 68 61 74 20 72 65 63 6f 72 64 20 61  at that record a
21fd0 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  nd fall through 
21fe0 74 6f 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69  to the next.** i
21ff0 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
22000 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 45 78 69 73  * The OP_NotExis
22010 74 73 20 6f 70 63 6f 64 65 20 70 65 72 66 6f 72  ts opcode perfor
22020 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72  ms the same oper
22030 61 74 69 6f 6e 2c 20 62 75 74 20 77 69 74 68 20  ation, but with 
22040 4f 50 5f 4e 6f 74 45 78 69 73 74 73 0a 2a 2a 20  OP_NotExists.** 
22050 74 68 65 20 50 33 20 72 65 67 69 73 74 65 72 20  the P3 register 
22060 6d 75 73 74 20 62 65 20 67 75 61 72 61 6e 74 65  must be guarante
22070 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 61 6e  ed to contain an
22080 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20   integer value. 
22090 20 57 69 74 68 20 74 68 69 73 0a 2a 2a 20 6f 70   With this.** op
220a0 63 6f 64 65 2c 20 72 65 67 69 73 74 65 72 20 50  code, register P
220b0 33 20 6d 69 67 68 74 20 6e 6f 74 20 63 6f 6e 74  3 might not cont
220c0 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a  ain an integer..
220d0 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f 74  **.** The OP_Not
220e0 46 6f 75 6e 64 20 6f 70 63 6f 64 65 20 70 65 72  Found opcode per
220f0 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f  forms the same o
22100 70 65 72 61 74 69 6f 6e 20 6f 6e 20 69 6e 64 65  peration on inde
22110 78 20 62 74 72 65 65 73 0a 2a 2a 20 28 77 69 74  x btrees.** (wit
22120 68 20 61 72 62 69 74 72 61 72 79 20 6d 75 6c 74  h arbitrary mult
22130 69 2d 76 61 6c 75 65 20 6b 65 79 73 29 2e 0a 2a  i-value keys)..*
22140 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
22150 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
22160 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68  or in a state wh
22170 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65  ere it cannot be
22180 20 61 64 76 61 6e 63 65 64 0a 2a 2a 20 69 6e 20   advanced.** in 
22190 65 69 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e  either direction
221a0 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
221b0 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20  s, the Next and 
221c0 50 72 65 76 20 6f 70 63 6f 64 65 73 20 77 69 6c  Prev opcodes wil
221d0 6c 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20 66 6f  l.** not work fo
221e0 6c 6c 6f 77 69 6e 67 20 74 68 69 73 20 6f 70 63  llowing this opc
221f0 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ode..**.** See a
22200 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
22210 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74  ound, NoConflict
22220 2c 20 53 65 65 6b 52 6f 77 69 64 0a 2a 2f 0a 2f  , SeekRowid.*/./
22230 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 45 78 69  * Opcode: NotExi
22240 73 74 73 20 50 31 20 50 32 20 50 33 20 2a 20 2a  sts P1 P2 P3 * *
22250 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e  .** Synopsis: in
22260 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a  tkey=r[P3].**.**
22270 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78   P1 is the index
22280 20 6f 66 20 61 20 63 75 72 73 6f 72 20 6f 70 65   of a cursor ope
22290 6e 20 6f 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c  n on an SQL tabl
222a0 65 20 62 74 72 65 65 20 28 77 69 74 68 20 69 6e  e btree (with in
222b0 74 65 67 65 72 0a 2a 2a 20 6b 65 79 73 29 2e 20  teger.** keys). 
222c0 20 50 33 20 69 73 20 61 6e 20 69 6e 74 65 67 65   P3 is an intege
222d0 72 20 72 6f 77 69 64 2e 20 20 49 66 20 50 31 20  r rowid.  If P1 
222e0 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e  does not contain
222f0 20 61 20 72 65 63 6f 72 64 20 77 69 74 68 0a 2a   a record with.*
22300 2a 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20  * rowid P3 then 
22310 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
22320 20 74 6f 20 50 32 2e 20 20 4f 72 2c 20 69 66 20   to P2.  Or, if 
22330 50 32 20 69 73 20 30 2c 20 72 61 69 73 65 20 61  P2 is 0, raise a
22340 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 43 4f 52 52  n.** SQLITE_CORR
22350 55 50 54 20 65 72 72 6f 72 2e 20 49 66 20 50 31  UPT error. If P1
22360 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 20   does contain a 
22370 72 65 63 6f 72 64 20 77 69 74 68 20 72 6f 77 69  record with rowi
22380 64 20 50 33 20 74 68 65 6e 20 0a 2a 2a 20 6c 65  d P3 then .** le
22390 61 76 65 20 74 68 65 20 63 75 72 73 6f 72 20 70  ave the cursor p
223a0 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 61 74 20  ointing at that 
223b0 72 65 63 6f 72 64 20 61 6e 64 20 66 61 6c 6c 20  record and fall 
223c0 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
223d0 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69  ext.** instructi
223e0 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50  on..**.** The OP
223f0 5f 53 65 65 6b 52 6f 77 69 64 20 6f 70 63 6f 64  _SeekRowid opcod
22400 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73  e performs the s
22410 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75  ame operation bu
22420 74 20 61 6c 73 6f 20 61 6c 6c 6f 77 73 20 74 68  t also allows th
22430 65 0a 2a 2a 20 50 33 20 72 65 67 69 73 74 65 72  e.** P3 register
22440 20 74 6f 20 63 6f 6e 74 61 69 6e 20 61 20 6e 6f   to contain a no
22450 6e 2d 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2c  n-integer value,
22460 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20 74   in which case t
22470 68 65 20 6a 75 6d 70 20 69 73 0a 2a 2a 20 61 6c  he jump is.** al
22480 77 61 79 73 20 74 61 6b 65 6e 2e 20 20 54 68 69  ways taken.  Thi
22490 73 20 6f 70 63 6f 64 65 20 72 65 71 75 69 72 65  s opcode require
224a0 73 20 74 68 61 74 20 50 33 20 61 6c 77 61 79 73  s that P3 always
224b0 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65   contain an inte
224c0 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f  ger..**.** The O
224d0 50 5f 4e 6f 74 46 6f 75 6e 64 20 6f 70 63 6f 64  P_NotFound opcod
224e0 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73  e performs the s
224f0 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e  ame operation on
22500 20 69 6e 64 65 78 20 62 74 72 65 65 73 0a 2a 2a   index btrees.**
22510 20 28 77 69 74 68 20 61 72 62 69 74 72 61 72 79   (with arbitrary
22520 20 6d 75 6c 74 69 2d 76 61 6c 75 65 20 6b 65 79   multi-value key
22530 73 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  s)..**.** This o
22540 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65  pcode leaves the
22550 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61   cursor in a sta
22560 74 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e  te where it cann
22570 6f 74 20 62 65 20 61 64 76 61 6e 63 65 64 0a 2a  ot be advanced.*
22580 2a 20 69 6e 20 65 69 74 68 65 72 20 64 69 72 65  * in either dire
22590 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72  ction.  In other
225a0 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74   words, the Next
225b0 20 61 6e 64 20 50 72 65 76 20 6f 70 63 6f 64 65   and Prev opcode
225c0 73 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 77 6f  s will.** not wo
225d0 72 6b 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 69  rk following thi
225e0 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  s opcode..**.** 
225f0 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
22600 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e   NotFound, NoCon
22610 66 6c 69 63 74 2c 20 53 65 65 6b 52 6f 77 69 64  flict, SeekRowid
22620 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b  .*/.case OP_Seek
22630 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20  Rowid: {        
22640 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
22650 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
22660 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
22670 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
22680 20 20 75 36 34 20 69 4b 65 79 3b 0a 0a 20 20 70    u64 iKey;..  p
22690 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
226a0 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p3];.  if( (pIn
226b0 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  3->flags & MEM_I
226c0 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70  nt)==0 ){.    ap
226d0 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 33  plyAffinity(pIn3
226e0 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  , SQLITE_AFF_NUM
226f0 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  ERIC, encoding);
22700 0a 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e  .    if( (pIn3->
22710 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
22720 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  ==0 ) goto jump_
22730 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 2f 2a 20  to_p2;.  }.  /* 
22740 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74  Fall through int
22750 6f 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 2a  o OP_NotExists *
22760 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78 69  /.case OP_NotExi
22770 73 74 73 3a 20 20 20 20 20 20 20 20 20 20 2f 2a  sts:          /*
22780 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
22790 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
227a0 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p3];.  assert(
227b0 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn3->flags & M
227c0 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65  EM_Int );.  asse
227d0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
227e0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
227f0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
22800 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
22810 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
22820 30 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  0 );.#ifdef SQLI
22830 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73  TE_DEBUG.  pC->s
22840 65 65 6b 4f 70 20 3d 20 30 3b 0a 23 65 6e 64 69  eekOp = 0;.#endi
22850 66 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  f.  assert( pC->
22860 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73  isTable );.  ass
22870 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
22880 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
22890 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43   );.  pCrsr = pC
228a0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20  ->uc.pCursor;.  
228b0 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30  assert( pCrsr!=0
228c0 20 29 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20   );.  res = 0;. 
228d0 20 69 4b 65 79 20 3d 20 70 49 6e 33 2d 3e 75 2e   iKey = pIn3->u.
228e0 69 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  i;.  rc = sqlite
228f0 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
22900 63 6b 65 64 28 70 43 72 73 72 2c 20 30 2c 20 69  cked(pCrsr, 0, i
22910 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20  Key, 0, &res);. 
22920 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
22930 49 54 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30  ITE_OK || res==0
22940 20 29 3b 0a 20 20 70 43 2d 3e 6d 6f 76 65 74 6f   );.  pC->moveto
22950 54 61 72 67 65 74 20 3d 20 69 4b 65 79 3b 20 20  Target = iKey;  
22960 2f 2a 20 55 73 65 64 20 62 79 20 4f 50 5f 44 65  /* Used by OP_De
22970 6c 65 74 65 20 2a 2f 0a 20 20 70 43 2d 3e 6e 75  lete */.  pC->nu
22980 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 70 43 2d  llRow = 0;.  pC-
22990 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
229a0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43  ACHE_STALE;.  pC
229b0 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
229c0 20 3d 20 30 3b 0a 20 20 56 64 62 65 42 72 61 6e   = 0;.  VdbeBran
229d0 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32  chTaken(res!=0,2
229e0 29 3b 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73  );.  pC->seekRes
229f0 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 69 66 28  ult = res;.  if(
22a00 20 72 65 73 21 3d 30 20 29 7b 0a 20 20 20 20 61   res!=0 ){.    a
22a10 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
22a20 45 5f 4f 4b 20 29 3b 0a 20 20 20 20 69 66 28 20  E_OK );.    if( 
22a30 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20  pOp->p2==0 ){.  
22a40 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
22a50 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20  CORRUPT_BKPT;.  
22a60 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 67    }else{.      g
22a70 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
22a80 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20      }.  }.  if( 
22a90 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
22aa0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
22ab0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
22ac0 6f 64 65 3a 20 53 65 71 75 65 6e 63 65 20 50 31  ode: Sequence P1
22ad0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
22ae0 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 63 75 72  opsis: r[P2]=cur
22af0 73 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b 0a 2a 2a  sor[P1].ctr++.**
22b00 0a 2a 2a 20 46 69 6e 64 20 74 68 65 20 6e 65 78  .** Find the nex
22b10 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65 71 75  t available sequ
22b20 65 6e 63 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  ence number for 
22b30 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72  cursor P1..** Wr
22b40 69 74 65 20 74 68 65 20 73 65 71 75 65 6e 63 65  ite the sequence
22b50 20 6e 75 6d 62 65 72 20 69 6e 74 6f 20 72 65 67   number into reg
22b60 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65  ister P2..** The
22b70 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72   sequence number
22b80 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69   on the cursor i
22b90 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 66  s incremented af
22ba0 74 65 72 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74  ter this.** inst
22bb0 72 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61  ruction.  .*/.ca
22bc0 73 65 20 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20  se OP_Sequence: 
22bd0 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
22be0 75 74 32 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ut2 */.  assert(
22bf0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
22c00 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
22c10 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
22c20 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
22c30 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
22c40 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
22c50 31 5d 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55  1]->eCurType!=CU
22c60 52 54 59 50 45 5f 56 54 41 42 20 29 3b 0a 20 20  RTYPE_VTAB );.  
22c70 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
22c80 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
22c90 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e   pOut->u.i = p->
22ca0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e  apCsr[pOp->p1]->
22cb0 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20 62 72  seqCount++;.  br
22cc0 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f  eak;.}.../* Opco
22cd0 64 65 3a 20 4e 65 77 52 6f 77 69 64 20 50 31 20  de: NewRowid P1 
22ce0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
22cf0 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77  opsis: r[P2]=row
22d00 69 64 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61 20 6e  id.**.** Get a n
22d10 65 77 20 69 6e 74 65 67 65 72 20 72 65 63 6f 72  ew integer recor
22d20 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b 2e 61 20  d number (a.k.a 
22d30 22 72 6f 77 69 64 22 29 20 75 73 65 64 20 61 73  "rowid") used as
22d40 20 74 68 65 20 6b 65 79 20 74 6f 20 61 20 74 61   the key to a ta
22d50 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 65 63 6f  ble..** The reco
22d60 72 64 20 6e 75 6d 62 65 72 20 69 73 20 6e 6f 74  rd number is not
22d70 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64   previously used
22d80 20 61 73 20 61 20 6b 65 79 20 69 6e 20 74 68 65   as a key in the
22d90 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 74 61 62   database.** tab
22da0 6c 65 20 74 68 61 74 20 63 75 72 73 6f 72 20 50  le that cursor P
22db0 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 54 68  1 points to.  Th
22dc0 65 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d  e new record num
22dd0 62 65 72 20 69 73 20 77 72 69 74 74 65 6e 0a 2a  ber is written.*
22de0 2a 20 77 72 69 74 74 65 6e 20 74 6f 20 72 65 67  * written to reg
22df0 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
22e00 49 66 20 50 33 3e 30 20 74 68 65 6e 20 50 33 20  If P3>0 then P3 
22e10 69 73 20 61 20 72 65 67 69 73 74 65 72 20 69 6e  is a register in
22e20 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20   the root frame 
22e30 6f 66 20 74 68 69 73 20 56 44 42 45 20 74 68 61  of this VDBE tha
22e40 74 20 68 6f 6c 64 73 20 0a 2a 2a 20 74 68 65 20  t holds .** the 
22e50 6c 61 72 67 65 73 74 20 70 72 65 76 69 6f 75 73  largest previous
22e60 6c 79 20 67 65 6e 65 72 61 74 65 64 20 72 65 63  ly generated rec
22e70 6f 72 64 20 6e 75 6d 62 65 72 2e 20 4e 6f 20 6e  ord number. No n
22e80 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  ew record number
22e90 73 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f 77 65 64  s are.** allowed
22ea0 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e   to be less than
22eb0 20 74 68 69 73 20 76 61 6c 75 65 2e 20 57 68 65   this value. Whe
22ec0 6e 20 74 68 69 73 20 76 61 6c 75 65 20 72 65 61  n this value rea
22ed0 63 68 65 73 20 69 74 73 20 6d 61 78 69 6d 75 6d  ches its maximum
22ee0 2c 20 0a 2a 2a 20 61 6e 20 53 51 4c 49 54 45 5f  , .** an SQLITE_
22ef0 46 55 4c 4c 20 65 72 72 6f 72 20 69 73 20 67 65  FULL error is ge
22f00 6e 65 72 61 74 65 64 2e 20 54 68 65 20 50 33 20  nerated. The P3 
22f10 72 65 67 69 73 74 65 72 20 69 73 20 75 70 64 61  register is upda
22f20 74 65 64 20 77 69 74 68 20 74 68 65 20 27 0a 2a  ted with the '.*
22f30 2a 20 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f  * generated reco
22f40 72 64 20 6e 75 6d 62 65 72 2e 20 54 68 69 73 20  rd number. This 
22f50 50 33 20 6d 65 63 68 61 6e 69 73 6d 20 69 73 20  P3 mechanism is 
22f60 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69 6d 70  used to help imp
22f70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 41 55  lement the.** AU
22f80 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65 61 74  TOINCREMENT feat
22f90 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ure..*/.case OP_
22fa0 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20 20 20 20  NewRowid: {     
22fb0 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
22fc0 0a 20 20 69 36 34 20 76 3b 20 20 20 20 20 20 20  .  i64 v;       
22fd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
22fe0 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20   new rowid */.  
22ff0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20  VdbeCursor *pC; 
23000 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72         /* Cursor
23010 20 6f 66 20 74 61 62 6c 65 20 74 6f 20 67 65 74   of table to get
23020 20 74 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a   the new rowid *
23030 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20  /.  int res;    
23040 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
23050 73 75 6c 74 20 6f 66 20 61 6e 20 73 71 6c 69 74  sult of an sqlit
23060 65 33 42 74 72 65 65 4c 61 73 74 28 29 20 2a 2f  e3BtreeLast() */
23070 0a 20 20 69 6e 74 20 63 6e 74 3b 20 20 20 20 20  .  int cnt;     
23080 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75            /* Cou
23090 6e 74 65 72 20 74 6f 20 6c 69 6d 69 74 20 74 68  nter to limit th
230a0 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 65 61 72  e number of sear
230b0 63 68 65 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ches */.  Mem *p
230c0 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
230d0 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c   /* Register hol
230e0 64 69 6e 67 20 6c 61 72 67 65 73 74 20 72 6f 77  ding largest row
230f0 69 64 20 66 6f 72 20 41 55 54 4f 49 4e 43 52 45  id for AUTOINCRE
23100 4d 45 4e 54 20 2a 2f 0a 20 20 56 64 62 65 46 72  MENT */.  VdbeFr
23110 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20 20  ame *pFrame;    
23120 20 2f 2a 20 52 6f 6f 74 20 66 72 61 6d 65 20 6f   /* Root frame o
23130 66 20 56 44 42 45 20 2a 2f 0a 0a 20 20 76 20 3d  f VDBE */..  v =
23140 20 30 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20   0;.  res = 0;. 
23150 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
23160 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
23170 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
23180 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
23190 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
231a0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
231b0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
231c0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
231d0 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
231e0 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
231f0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
23200 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20  ->uc.pCursor!=0 
23210 29 3b 0a 20 20 7b 0a 20 20 20 20 2f 2a 20 54 68  );.  {.    /* Th
23220 65 20 6e 65 78 74 20 72 6f 77 69 64 20 6f 72 20  e next rowid or 
23230 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 64  record number (d
23240 69 66 66 65 72 65 6e 74 20 74 65 72 6d 73 20 66  ifferent terms f
23250 6f 72 20 74 68 65 20 73 61 6d 65 0a 20 20 20 20  or the same.    
23260 2a 2a 20 74 68 69 6e 67 29 20 69 73 20 6f 62 74  ** thing) is obt
23270 61 69 6e 65 64 20 69 6e 20 61 20 74 77 6f 2d 73  ained in a two-s
23280 74 65 70 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 20  tep algorithm.. 
23290 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 46 69 72     **.    ** Fir
232a0 73 74 20 77 65 20 61 74 74 65 6d 70 74 20 74 6f  st we attempt to
232b0 20 66 69 6e 64 20 74 68 65 20 6c 61 72 67 65 73   find the larges
232c0 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64  t existing rowid
232d0 20 61 6e 64 20 61 64 64 20 6f 6e 65 0a 20 20 20   and add one.   
232e0 20 2a 2a 20 74 6f 20 74 68 61 74 2e 20 20 42 75   ** to that.  Bu
232f0 74 20 69 66 20 74 68 65 20 6c 61 72 67 65 73 74  t if the largest
23300 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20   existing rowid 
23310 69 73 20 61 6c 72 65 61 64 79 20 74 68 65 20 6d  is already the m
23320 61 78 69 6d 75 6d 0a 20 20 20 20 2a 2a 20 70 6f  aximum.    ** po
23330 73 69 74 69 76 65 20 69 6e 74 65 67 65 72 2c 20  sitive integer, 
23340 77 65 20 68 61 76 65 20 74 6f 20 66 61 6c 6c 20  we have to fall 
23350 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 73  through to the s
23360 65 63 6f 6e 64 0a 20 20 20 20 2a 2a 20 70 72 6f  econd.    ** pro
23370 62 61 62 69 6c 69 73 74 69 63 20 61 6c 67 6f 72  babilistic algor
23380 69 74 68 6d 0a 20 20 20 20 2a 2a 0a 20 20 20 20  ithm.    **.    
23390 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 61 6c  ** The second al
233a0 67 6f 72 69 74 68 6d 20 69 73 20 74 6f 20 73 65  gorithm is to se
233b0 6c 65 63 74 20 61 20 72 6f 77 69 64 20 61 74 20  lect a rowid at 
233c0 72 61 6e 64 6f 6d 20 61 6e 64 20 73 65 65 20 69  random and see i
233d0 66 0a 20 20 20 20 2a 2a 20 69 74 20 61 6c 72 65  f.    ** it alre
233e0 61 64 79 20 65 78 69 73 74 73 20 69 6e 20 74 68  ady exists in th
233f0 65 20 74 61 62 6c 65 2e 20 20 49 66 20 69 74 20  e table.  If it 
23400 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20  does not exist, 
23410 77 65 20 68 61 76 65 0a 20 20 20 20 2a 2a 20 73  we have.    ** s
23420 75 63 63 65 65 64 65 64 2e 20 20 49 66 20 74 68  ucceeded.  If th
23430 65 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 64  e random rowid d
23440 6f 65 73 20 65 78 69 73 74 2c 20 77 65 20 73 65  oes exist, we se
23450 6c 65 63 74 20 61 20 6e 65 77 20 6f 6e 65 0a 20  lect a new one. 
23460 20 20 20 2a 2a 20 61 6e 64 20 74 72 79 20 61 67     ** and try ag
23470 61 69 6e 2c 20 75 70 20 74 6f 20 31 30 30 20 74  ain, up to 100 t
23480 69 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  imes..    */.   
23490 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
234a0 61 62 6c 65 20 29 3b 0a 0a 23 69 66 64 65 66 20  able );..#ifdef 
234b0 53 51 4c 49 54 45 5f 33 32 42 49 54 5f 52 4f 57  SQLITE_32BIT_ROW
234c0 49 44 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41  ID.#   define MA
234d0 58 5f 52 4f 57 49 44 20 30 78 37 66 66 66 66 66  X_ROWID 0x7fffff
234e0 66 66 0a 23 65 6c 73 65 0a 20 20 20 20 2f 2a 20  ff.#else.    /* 
234f0 53 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 20 63  Some compilers c
23500 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 63 6f  omplain about co
23510 6e 73 74 61 6e 74 73 20 6f 66 20 74 68 65 20 66  nstants of the f
23520 6f 72 6d 20 30 78 37 66 66 66 66 66 66 66 66 66  orm 0x7fffffffff
23530 66 66 66 66 66 66 2e 0a 20 20 20 20 2a 2a 20 4f  ffffff..    ** O
23540 74 68 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61  thers complain a
23550 62 6f 75 74 20 30 78 37 66 66 66 66 66 66 66 66  bout 0x7ffffffff
23560 66 66 66 66 66 66 66 66 4c 4c 2e 20 20 54 68 65  ffffffffLL.  The
23570 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
23580 20 73 65 65 6d 73 0a 20 20 20 20 2a 2a 20 74 6f   seems.    ** to
23590 20 70 72 6f 76 69 64 65 20 74 68 65 20 63 6f 6e   provide the con
235a0 73 74 61 6e 74 20 77 68 69 6c 65 20 6d 61 6b 69  stant while maki
235b0 6e 67 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73  ng all compilers
235c0 20 68 61 70 70 79 2e 0a 20 20 20 20 2a 2f 0a 23   happy..    */.#
235d0 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f     define MAX_RO
235e0 57 49 44 20 20 28 69 36 34 29 28 20 28 28 28 75  WID  (i64)( (((u
235f0 36 34 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c  64)0x7fffffff)<<
23600 33 32 29 20 7c 20 28 75 36 34 29 30 78 66 66 66  32) | (u64)0xfff
23610 66 66 66 66 66 20 29 0a 23 65 6e 64 69 66 0a 0a  fffff ).#endif..
23620 20 20 20 20 69 66 28 20 21 70 43 2d 3e 75 73 65      if( !pC->use
23630 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20  RandomRowid ){. 
23640 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
23650 33 42 74 72 65 65 4c 61 73 74 28 70 43 2d 3e 75  3BtreeLast(pC->u
23660 63 2e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29  c.pCursor, &res)
23670 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
23680 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
23690 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
236a0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
236b0 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
236c0 72 65 73 20 29 7b 0a 20 20 20 20 20 20 20 20 76  res ){.        v
236d0 20 3d 20 31 3b 20 20 20 2f 2a 20 49 4d 50 3a 20   = 1;   /* IMP: 
236e0 52 2d 36 31 39 31 34 2d 34 38 30 37 34 20 2a 2f  R-61914-48074 */
236f0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
23700 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
23710 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
23720 49 73 56 61 6c 69 64 28 70 43 2d 3e 75 63 2e 70  IsValid(pC->uc.p
23730 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20  Cursor) );.     
23740 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33 42 74     v = sqlite3Bt
23750 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70 43  reeIntegerKey(pC
23760 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20  ->uc.pCursor);. 
23770 20 20 20 20 20 20 20 69 66 28 20 76 3e 3d 4d 41         if( v>=MA
23780 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20 20 20  X_ROWID ){.     
23790 20 20 20 20 20 70 43 2d 3e 75 73 65 52 61 6e 64       pC->useRand
237a0 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a 20 20 20  omRowid = 1;.   
237b0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
237c0 20 20 20 20 20 20 76 2b 2b 3b 20 20 20 2f 2a 20        v++;   /* 
237d0 49 4d 50 3a 20 52 2d 32 39 35 33 38 2d 33 34 39  IMP: R-29538-349
237e0 38 37 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a  87 */.        }.
237f0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 23        }.    }..#
23800 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
23810 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
23820 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33  .    if( pOp->p3
23830 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 73 73   ){.      /* Ass
23840 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61  ert that P3 is a
23850 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65   valid memory ce
23860 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  ll. */.      ass
23870 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29  ert( pOp->p3>0 )
23880 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 70  ;.      if( p->p
23890 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 20  Frame ){.       
238a0 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70   for(pFrame=p->p
238b0 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70  Frame; pFrame->p
238c0 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70  Parent; pFrame=p
238d0 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b  Frame->pParent);
238e0 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65  .        /* Asse
238f0 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20  rt that P3 is a 
23900 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c  valid memory cel
23910 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73  l. */.        as
23920 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70  sert( pOp->p3<=p
23930 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  Frame->nMem );. 
23940 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 70         pMem = &p
23950 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d  Frame->aMem[pOp-
23960 3e 70 33 5d 3b 0a 20 20 20 20 20 20 7d 65 6c 73  >p3];.      }els
23970 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73  e{.        /* As
23980 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20  sert that P3 is 
23990 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63  a valid memory c
239a0 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  ell. */.        
239b0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
239c0 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
239d0 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
239e0 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65       pMem = &aMe
239f0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
23a00 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
23a10 61 6e 67 65 28 70 2c 20 70 4d 65 6d 29 3b 0a 20  ange(p, pMem);. 
23a20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73       }.      ass
23a30 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
23a40 70 4d 65 6d 29 20 29 3b 0a 0a 20 20 20 20 20 20  pMem) );..      
23a50 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
23a60 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a 20  Op->p3, pMem);. 
23a70 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
23a80 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 4d  MemIntegerify(pM
23a90 65 6d 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  em);.      asser
23aa0 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  t( (pMem->flags 
23ab0 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
23ac0 20 20 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c    /* mem(P3) hol
23ad0 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f  ds an integer */
23ae0 0a 20 20 20 20 20 20 69 66 28 20 70 4d 65 6d 2d  .      if( pMem-
23af0 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49 44 20  >u.i==MAX_ROWID 
23b00 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d  || pC->useRandom
23b10 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 20  Rowid ){.       
23b20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c   rc = SQLITE_FUL
23b30 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 31  L;   /* IMP: R-1
23b40 37 38 31 37 2d 30 30 36 33 30 20 2a 2f 0a 20 20  7817-00630 */.  
23b50 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
23b60 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
23b70 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
23b80 20 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29   v<pMem->u.i+1 )
23b90 7b 0a 20 20 20 20 20 20 20 20 76 20 3d 20 70 4d  {.        v = pM
23ba0 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20 20 20  em->u.i + 1;.   
23bb0 20 20 20 7d 0a 20 20 20 20 20 20 70 4d 65 6d 2d     }.      pMem-
23bc0 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20 7d 0a  >u.i = v;.    }.
23bd0 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70  #endif.    if( p
23be0 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69  C->useRandomRowi
23bf0 64 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 4d  d ){.      /* IM
23c00 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a  PLEMENTATION-OF:
23c10 20 52 2d 30 37 36 37 37 2d 34 31 38 38 31 20 49   R-07677-41881 I
23c20 66 20 74 68 65 20 6c 61 72 67 65 73 74 20 52 4f  f the largest RO
23c30 57 49 44 20 69 73 20 65 71 75 61 6c 20 74 6f 20  WID is equal to 
23c40 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72  the.      ** lar
23c50 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20 69 6e  gest possible in
23c60 74 65 67 65 72 20 28 39 32 32 33 33 37 32 30 33  teger (922337203
23c70 36 38 35 34 37 37 35 38 30 37 29 20 74 68 65 6e  6854775807) then
23c80 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 20 20   the database.  
23c90 20 20 20 20 2a 2a 20 65 6e 67 69 6e 65 20 73 74      ** engine st
23ca0 61 72 74 73 20 70 69 63 6b 69 6e 67 20 70 6f 73  arts picking pos
23cb0 69 74 69 76 65 20 63 61 6e 64 69 64 61 74 65 20  itive candidate 
23cc0 52 4f 57 49 44 73 20 61 74 20 72 61 6e 64 6f 6d  ROWIDs at random
23cd0 20 75 6e 74 69 6c 0a 20 20 20 20 20 20 2a 2a 20   until.      ** 
23ce0 69 74 20 66 69 6e 64 73 20 6f 6e 65 20 74 68 61  it finds one tha
23cf0 74 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75  t is not previou
23d00 73 6c 79 20 75 73 65 64 2e 20 2a 2f 0a 20 20 20  sly used. */.   
23d10 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
23d20 70 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 57 65 20  p3==0 );  /* We 
23d30 63 61 6e 6e 6f 74 20 62 65 20 69 6e 20 72 61 6e  cannot be in ran
23d40 64 6f 6d 20 72 6f 77 69 64 20 6d 6f 64 65 20 69  dom rowid mode i
23d50 66 20 74 68 69 73 20 69 73 0a 20 20 20 20 20 20  f this is.      
23d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d70 20 20 20 20 20 20 20 2a 2a 20 61 6e 20 41 55 54         ** an AUT
23d80 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65  OINCREMENT table
23d90 2e 20 2a 2f 0a 20 20 20 20 20 20 63 6e 74 20 3d  . */.      cnt =
23da0 20 30 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20   0;.      do{.  
23db0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 61        sqlite3_ra
23dc0 6e 64 6f 6d 6e 65 73 73 28 73 69 7a 65 6f 66 28  ndomness(sizeof(
23dd0 76 29 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20  v), &v);.       
23de0 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57 49 44   v &= (MAX_ROWID
23df0 3e 3e 31 29 3b 20 76 2b 2b 3b 20 20 2f 2a 20 45  >>1); v++;  /* E
23e00 6e 73 75 72 65 20 74 68 61 74 20 76 20 69 73 20  nsure that v is 
23e10 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72  greater than zer
23e20 6f 20 2a 2f 0a 20 20 20 20 20 20 7d 77 68 69 6c  o */.      }whil
23e30 65 28 20 20 28 28 72 63 20 3d 20 73 71 6c 69 74  e(  ((rc = sqlit
23e40 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
23e50 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75  acked(pC->uc.pCu
23e60 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 76 2c  rsor, 0, (u64)v,
23e70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ea0 20 20 30 2c 20 26 72 65 73 29 29 3d 3d 53 51 4c    0, &res))==SQL
23eb0 49 54 45 5f 4f 4b 29 0a 20 20 20 20 20 20 20 20  ITE_OK).        
23ec0 20 20 20 20 26 26 20 28 72 65 73 3d 3d 30 29 0a      && (res==0).
23ed0 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20 28              && (
23ee0 2b 2b 63 6e 74 3c 31 30 30 29 29 3b 0a 20 20 20  ++cnt<100));.   
23ef0 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f     if( rc ) goto
23f00 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
23f10 72 6f 72 3b 0a 20 20 20 20 20 20 69 66 28 20 72  ror;.      if( r
23f20 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  es==0 ){.       
23f30 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c   rc = SQLITE_FUL
23f40 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 33  L;   /* IMP: R-3
23f50 38 32 31 39 2d 35 33 30 30 32 20 2a 2f 0a 20 20  8219-53002 */.  
23f60 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
23f70 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
23f80 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73       }.      ass
23f90 65 72 74 28 20 76 3e 30 20 29 3b 20 20 2f 2a 20  ert( v>0 );  /* 
23fa0 45 56 3a 20 52 2d 34 30 38 31 32 2d 30 33 35 37  EV: R-40812-0357
23fb0 30 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20 70  0 */.    }.    p
23fc0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
23fd0 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63  o = 0;.    pC->c
23fe0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
23ff0 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20  HE_STALE;.  }.  
24000 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20  pOut->u.i = v;. 
24010 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
24020 63 6f 64 65 3a 20 49 6e 73 65 72 74 20 50 31 20  code: Insert P1 
24030 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
24040 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d  ynopsis: intkey=
24050 72 5b 50 33 5d 20 64 61 74 61 3d 72 5b 50 32 5d  r[P3] data=r[P2]
24060 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 6e 20  .**.** Write an 
24070 65 6e 74 72 79 20 69 6e 74 6f 20 74 68 65 20 74  entry into the t
24080 61 62 6c 65 20 6f 66 20 63 75 72 73 6f 72 20 50  able of cursor P
24090 31 2e 20 20 41 20 6e 65 77 20 65 6e 74 72 79 20  1.  A new entry 
240a0 69 73 0a 2a 2a 20 63 72 65 61 74 65 64 20 69 66  is.** created if
240b0 20 69 74 20 64 6f 65 73 6e 27 74 20 61 6c 72 65   it doesn't alre
240c0 61 64 79 20 65 78 69 73 74 20 6f 72 20 74 68 65  ady exist or the
240d0 20 64 61 74 61 20 66 6f 72 20 61 6e 20 65 78 69   data for an exi
240e0 73 74 69 6e 67 0a 2a 2a 20 65 6e 74 72 79 20 69  sting.** entry i
240f0 73 20 6f 76 65 72 77 72 69 74 74 65 6e 2e 20 20  s overwritten.  
24100 54 68 65 20 64 61 74 61 20 69 73 20 74 68 65 20  The data is the 
24110 76 61 6c 75 65 20 4d 45 4d 5f 42 6c 6f 62 20 73  value MEM_Blob s
24120 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
24130 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 32 2e 20  r.** number P2. 
24140 54 68 65 20 6b 65 79 20 69 73 20 73 74 6f 72 65  The key is store
24150 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
24160 2e 20 54 68 65 20 6b 65 79 20 6d 75 73 74 0a 2a  . The key must.*
24170 2a 20 62 65 20 61 20 4d 45 4d 5f 49 6e 74 2e 0a  * be a MEM_Int..
24180 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
24190 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67  LAG_NCHANGE flag
241a0 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20 74   of P5 is set, t
241b0 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61 6e  hen the row chan
241c0 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69  ge count is.** i
241d0 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65  ncremented (othe
241e0 72 77 69 73 65 20 6e 6f 74 29 2e 20 20 49 66 20  rwise not).  If 
241f0 74 68 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52  the OPFLAG_LASTR
24200 4f 57 49 44 20 66 6c 61 67 20 6f 66 20 50 35 20  OWID flag of P5 
24210 69 73 20 73 65 74 2c 0a 2a 2a 20 74 68 65 6e 20  is set,.** then 
24220 72 6f 77 69 64 20 69 73 20 73 74 6f 72 65 64 20  rowid is stored 
24230 66 6f 72 20 73 75 62 73 65 71 75 65 6e 74 20 72  for subsequent r
24240 65 74 75 72 6e 20 62 79 20 74 68 65 0a 2a 2a 20  eturn by the.** 
24250 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73  sqlite3_last_ins
24260 65 72 74 5f 72 6f 77 69 64 28 29 20 66 75 6e 63  ert_rowid() func
24270 74 69 6f 6e 20 28 6f 74 68 65 72 77 69 73 65 20  tion (otherwise 
24280 69 74 20 69 73 20 75 6e 6d 6f 64 69 66 69 65 64  it is unmodified
24290 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  )..**.** If the 
242a0 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
242b0 53 55 4c 54 20 66 6c 61 67 20 6f 66 20 50 35 20  SULT flag of P5 
242c0 69 73 20 73 65 74 2c 20 74 68 65 20 69 6d 70 6c  is set, the impl
242d0 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69 67 68 74  ementation might
242e0 0a 2a 2a 20 72 75 6e 20 66 61 73 74 65 72 20 62  .** run faster b
242f0 79 20 61 76 6f 69 64 69 6e 67 20 61 6e 20 75 6e  y avoiding an un
24300 6e 65 63 65 73 73 61 72 79 20 73 65 65 6b 20 6f  necessary seek o
24310 6e 20 63 75 72 73 6f 72 20 50 31 2e 20 20 48 6f  n cursor P1.  Ho
24320 77 65 76 65 72 2c 0a 2a 2a 20 74 68 65 20 4f 50  wever,.** the OP
24330 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
24340 4c 54 20 66 6c 61 67 20 6d 75 73 74 20 6f 6e 6c  LT flag must onl
24350 79 20 62 65 20 73 65 74 20 69 66 20 74 68 65 72  y be set if ther
24360 65 20 68 61 76 65 20 62 65 65 6e 20 6e 6f 20 70  e have been no p
24370 72 69 6f 72 0a 2a 2a 20 73 65 65 6b 73 20 6f 6e  rior.** seeks on
24380 20 74 68 65 20 63 75 72 73 6f 72 20 6f 72 20 69   the cursor or i
24390 66 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  f the most recen
243a0 74 20 73 65 65 6b 20 75 73 65 64 20 61 20 6b 65  t seek used a ke
243b0 79 20 65 71 75 61 6c 20 74 6f 20 50 33 2e 0a 2a  y equal to P3..*
243c0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
243d0 41 47 5f 49 53 55 50 44 41 54 45 20 66 6c 61 67  AG_ISUPDATE flag
243e0 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68   is set, then th
243f0 69 73 20 6f 70 63 6f 64 65 20 69 73 20 70 61 72  is opcode is par
24400 74 20 6f 66 20 61 6e 0a 2a 2a 20 55 50 44 41 54  t of an.** UPDAT
24410 45 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 4f 74  E operation.  Ot
24420 68 65 72 77 69 73 65 20 28 69 66 20 74 68 65 20  herwise (if the 
24430 66 6c 61 67 20 69 73 20 63 6c 65 61 72 29 20 74  flag is clear) t
24440 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 0a  hen this opcode.
24450 2a 2a 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e  ** is part of an
24460 20 49 4e 53 45 52 54 20 6f 70 65 72 61 74 69 6f   INSERT operatio
24470 6e 2e 20 20 54 68 65 20 64 69 66 66 65 72 65 6e  n.  The differen
24480 63 65 20 69 73 20 6f 6e 6c 79 20 69 6d 70 6f 72  ce is only impor
24490 74 61 6e 74 20 74 6f 0a 2a 2a 20 74 68 65 20 75  tant to.** the u
244a0 70 64 61 74 65 20 68 6f 6f 6b 2e 0a 2a 2a 0a 2a  pdate hook..**.*
244b0 2a 20 50 61 72 61 6d 65 74 65 72 20 50 34 20 6d  * Parameter P4 m
244c0 61 79 20 70 6f 69 6e 74 20 74 6f 20 61 20 54 61  ay point to a Ta
244d0 62 6c 65 20 73 74 72 75 63 74 75 72 65 2c 20 6f  ble structure, o
244e0 72 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 20 49  r may be NULL. I
244f0 66 20 69 74 20 69 73 20 0a 2a 2a 20 6e 6f 74 20  f it is .** not 
24500 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 75  NULL, then the u
24510 70 64 61 74 65 2d 68 6f 6f 6b 20 28 73 71 6c 69  pdate-hook (sqli
24520 74 65 33 2e 78 55 70 64 61 74 65 43 61 6c 6c 62  te3.xUpdateCallb
24530 61 63 6b 29 20 69 73 20 69 6e 76 6f 6b 65 64 20  ack) is invoked 
24540 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20  .** following a 
24550 73 75 63 63 65 73 73 66 75 6c 20 69 6e 73 65 72  successful inser
24560 74 2e 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e 49 4e  t..**.** (WARNIN
24570 47 2f 54 4f 44 4f 3a 20 49 66 20 50 31 20 69 73  G/TODO: If P1 is
24580 20 61 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72   a pseudo-cursor
24590 20 61 6e 64 20 50 32 20 69 73 20 64 79 6e 61 6d   and P2 is dynam
245a0 69 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61  ically.** alloca
245b0 74 65 64 2c 20 74 68 65 6e 20 6f 77 6e 65 72 73  ted, then owners
245c0 68 69 70 20 6f 66 20 50 32 20 69 73 20 74 72 61  hip of P2 is tra
245d0 6e 73 66 65 72 72 65 64 20 74 6f 20 74 68 65 20  nsferred to the 
245e0 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 0a 2a 2a  pseudo-cursor.**
245f0 20 61 6e 64 20 72 65 67 69 73 74 65 72 20 50 32   and register P2
24600 20 62 65 63 6f 6d 65 73 20 65 70 68 65 6d 65 72   becomes ephemer
24610 61 6c 2e 20 20 49 66 20 74 68 65 20 63 75 72 73  al.  If the curs
24620 6f 72 20 69 73 20 63 68 61 6e 67 65 64 2c 20 74  or is changed, t
24630 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 72  he.** value of r
24640 65 67 69 73 74 65 72 20 50 32 20 77 69 6c 6c 20  egister P2 will 
24650 74 68 65 6e 20 63 68 61 6e 67 65 2e 20 20 4d 61  then change.  Ma
24660 6b 65 20 73 75 72 65 20 74 68 69 73 20 64 6f 65  ke sure this doe
24670 73 20 6e 6f 74 0a 2a 2a 20 63 61 75 73 65 20 61  s not.** cause a
24680 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 29 0a 2a 2a  ny problems.).**
24690 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
246a0 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  tion only works 
246b0 6f 6e 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20  on tables.  The 
246c0 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72  equivalent instr
246d0 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 69 6e  uction.** for in
246e0 64 69 63 65 73 20 69 73 20 4f 50 5f 49 64 78 49  dices is OP_IdxI
246f0 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  nsert..*/./* Opc
24700 6f 64 65 3a 20 49 6e 73 65 72 74 49 6e 74 20 50  ode: InsertInt P
24710 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
24720 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65   Synopsis: intke
24730 79 3d 50 33 20 64 61 74 61 3d 72 5b 50 32 5d 0a  y=P3 data=r[P2].
24740 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
24750 20 65 78 61 63 74 6c 79 20 6c 69 6b 65 20 4f 50   exactly like OP
24760 5f 49 6e 73 65 72 74 20 65 78 63 65 70 74 20 74  _Insert except t
24770 68 61 74 20 74 68 65 20 6b 65 79 20 69 73 20 74  hat the key is t
24780 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 76 61  he.** integer va
24790 6c 75 65 20 50 33 2c 20 6e 6f 74 20 74 68 65 20  lue P3, not the 
247a0 76 61 6c 75 65 20 6f 66 20 74 68 65 20 69 6e 74  value of the int
247b0 65 67 65 72 20 73 74 6f 72 65 64 20 69 6e 20 72  eger stored in r
247c0 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63  egister P3..*/.c
247d0 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 3a 20 0a  ase OP_Insert: .
247e0 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 49 6e  case OP_InsertIn
247f0 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 44 61 74  t: {.  Mem *pDat
24800 61 3b 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20  a;       /* MEM 
24810 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 64 61 74  cell holding dat
24820 61 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64  a for the record
24830 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20   to be inserted 
24840 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4b 65 79 3b 20  */.  Mem *pKey; 
24850 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65         /* MEM ce
24860 6c 6c 20 68 6f 6c 64 69 6e 67 20 6b 65 79 20 20  ll holding key  
24870 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 2a  for the record *
24880 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
24890 70 43 3b 20 20 20 2f 2a 20 43 75 72 73 6f 72 20  pC;   /* Cursor 
248a0 74 6f 20 74 61 62 6c 65 20 69 6e 74 6f 20 77 68  to table into wh
248b0 69 63 68 20 69 6e 73 65 72 74 20 69 73 20 77 72  ich insert is wr
248c0 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 73  itten */.  int s
248d0 65 65 6b 52 65 73 75 6c 74 3b 20 20 20 2f 2a 20  eekResult;   /* 
248e0 52 65 73 75 6c 74 20 6f 66 20 70 72 69 6f 72 20  Result of prior 
248f0 73 65 65 6b 20 6f 72 20 30 20 69 66 20 6e 6f 20  seek or 0 if no 
24900 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c  USESEEKRESULT fl
24910 61 67 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ag */.  const ch
24920 61 72 20 2a 7a 44 62 3b 20 20 2f 2a 20 64 61 74  ar *zDb;  /* dat
24930 61 62 61 73 65 20 6e 61 6d 65 20 2d 20 75 73 65  abase name - use
24940 64 20 62 79 20 74 68 65 20 75 70 64 61 74 65 20  d by the update 
24950 68 6f 6f 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 20  hook */.  Table 
24960 2a 70 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54  *pTab;      /* T
24970 61 62 6c 65 20 73 74 72 75 63 74 75 72 65 20 2d  able structure -
24980 20 75 73 65 64 20 62 79 20 75 70 64 61 74 65 20   used by update 
24990 61 6e 64 20 70 72 65 2d 75 70 64 61 74 65 20 68  and pre-update h
249a0 6f 6f 6b 73 20 2a 2f 0a 20 20 69 6e 74 20 6f 70  ooks */.  int op
249b0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  ;           /* O
249c0 70 63 6f 64 65 20 66 6f 72 20 75 70 64 61 74 65  pcode for update
249d0 20 68 6f 6f 6b 3a 20 53 51 4c 49 54 45 5f 55 50   hook: SQLITE_UP
249e0 44 41 54 45 20 6f 72 20 53 51 4c 49 54 45 5f 49  DATE or SQLITE_I
249f0 4e 53 45 52 54 20 2a 2f 0a 20 20 42 74 72 65 65  NSERT */.  Btree
24a00 50 61 79 6c 6f 61 64 20 78 3b 20 20 20 2f 2a 20  Payload x;   /* 
24a10 50 61 79 6c 6f 61 64 20 74 6f 20 62 65 20 69 6e  Payload to be in
24a20 73 65 72 74 65 64 20 2a 2f 0a 0a 20 20 6f 70 20  serted */..  op 
24a30 3d 20 30 3b 0a 20 20 70 44 61 74 61 20 3d 20 26  = 0;.  pData = &
24a40 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
24a50 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
24a60 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
24a70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
24a80 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
24a90 64 28 70 44 61 74 61 29 20 29 3b 0a 20 20 70 43  d(pData) );.  pC
24aa0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
24ab0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
24ac0 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
24ad0 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
24ae0 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
24af0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
24b00 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  uc.pCursor!=0 );
24b10 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
24b20 73 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73 65  sTable );.  asse
24b30 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
24b40 3d 50 34 5f 54 41 42 4c 45 20 7c 7c 20 70 4f 70  =P4_TABLE || pOp
24b50 2d 3e 70 34 74 79 70 65 3e 3d 50 34 5f 53 54 41  ->p4type>=P4_STA
24b60 54 49 43 20 29 3b 0a 20 20 52 45 47 49 53 54 45  TIC );.  REGISTE
24b70 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
24b80 20 70 44 61 74 61 29 3b 0a 0a 20 20 69 66 28 20   pData);..  if( 
24b90 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
24ba0 49 6e 73 65 72 74 20 29 7b 0a 20 20 20 20 70 4b  Insert ){.    pK
24bb0 65 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ey = &aMem[pOp->
24bc0 70 33 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  p3];.    assert(
24bd0 20 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26 20 4d   pKey->flags & M
24be0 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 61 73  EM_Int );.    as
24bf0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
24c00 28 70 4b 65 79 29 20 29 3b 0a 20 20 20 20 52 45  (pKey) );.    RE
24c10 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
24c20 2d 3e 70 33 2c 20 70 4b 65 79 29 3b 0a 20 20 20  ->p3, pKey);.   
24c30 20 78 2e 6e 4b 65 79 20 3d 20 70 4b 65 79 2d 3e   x.nKey = pKey->
24c40 75 2e 69 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  u.i;.  }else{.  
24c50 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
24c60 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74  pcode==OP_Insert
24c70 49 6e 74 20 29 3b 0a 20 20 20 20 78 2e 6e 4b 65  Int );.    x.nKe
24c80 79 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d  y = pOp->p3;.  }
24c90 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74  ..  if( pOp->p4t
24ca0 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20 26 26  ype==P4_TABLE &&
24cb0 20 48 41 53 5f 55 50 44 41 54 45 5f 48 4f 4f 4b   HAS_UPDATE_HOOK
24cc0 28 64 62 29 20 29 7b 0a 20 20 20 20 61 73 73 65  (db) ){.    asse
24cd0 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
24ce0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
24cf0 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20  C->iDb>=0 );.   
24d00 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70   zDb = db->aDb[p
24d10 43 2d 3e 69 44 62 5d 2e 7a 44 62 53 4e 61 6d 65  C->iDb].zDbSName
24d20 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 70 4f 70  ;.    pTab = pOp
24d30 2d 3e 70 34 2e 70 54 61 62 3b 0a 20 20 20 20 61  ->p4.pTab;.    a
24d40 73 73 65 72 74 28 20 48 61 73 52 6f 77 69 64 28  ssert( HasRowid(
24d50 70 54 61 62 29 20 29 3b 0a 20 20 20 20 6f 70 20  pTab) );.    op 
24d60 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50  = ((pOp->p5 & OP
24d70 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20 3f  FLAG_ISUPDATE) ?
24d80 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 3a   SQLITE_UPDATE :
24d90 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 29 3b   SQLITE_INSERT);
24da0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 54  .  }else{.    pT
24db0 61 62 20 3d 20 30 3b 20 2f 2a 20 4e 6f 74 20 6e  ab = 0; /* Not n
24dc0 65 65 64 65 64 2e 20 20 53 69 6c 65 6e 63 65 20  eeded.  Silence 
24dd0 61 20 63 6f 6d 69 6c 65 72 20 77 61 72 6e 69 6e  a comiler warnin
24de0 67 2e 20 2a 2f 0a 20 20 20 20 7a 44 62 20 3d 20  g. */.    zDb = 
24df0 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65  0;  /* Not neede
24e00 64 2e 20 20 53 69 6c 65 6e 63 65 20 61 20 63 6f  d.  Silence a co
24e10 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 2e 20  mpiler warning. 
24e20 2a 2f 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53  */.  }..#ifdef S
24e30 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45  QLITE_ENABLE_PRE
24e40 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 2f 2a  UPDATE_HOOK.  /*
24e50 20 49 6e 76 6f 6b 65 20 74 68 65 20 70 72 65 2d   Invoke the pre-
24e60 75 70 64 61 74 65 20 68 6f 6f 6b 2c 20 69 66 20  update hook, if 
24e70 61 6e 79 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d  any */.  if( db-
24e80 3e 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62  >xPreUpdateCallb
24e90 61 63 6b 20 0a 20 20 20 26 26 20 70 4f 70 2d 3e  ack .   && pOp->
24ea0 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45  p4type==P4_TABLE
24eb0 0a 20 20 20 26 26 20 21 28 70 4f 70 2d 3e 70 35  .   && !(pOp->p5
24ec0 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41   & OPFLAG_ISUPDA
24ed0 54 45 29 0a 20 20 29 7b 0a 20 20 20 20 73 71 6c  TE).  ){.    sql
24ee0 69 74 65 33 56 64 62 65 50 72 65 55 70 64 61 74  ite3VdbePreUpdat
24ef0 65 48 6f 6f 6b 28 70 2c 20 70 43 2c 20 53 51 4c  eHook(p, pC, SQL
24f00 49 54 45 5f 49 4e 53 45 52 54 2c 20 7a 44 62 2c  ITE_INSERT, zDb,
24f10 20 70 54 61 62 2c 20 78 2e 6e 4b 65 79 2c 20 70   pTab, x.nKey, p
24f20 4f 70 2d 3e 70 32 29 3b 0a 20 20 7d 0a 23 65 6e  Op->p2);.  }.#en
24f30 64 69 66 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e  dif..  if( pOp->
24f40 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41  p5 & OPFLAG_NCHA
24f50 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65  NGE ) p->nChange
24f60 2b 2b 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  ++;.  if( pOp->p
24f70 35 20 26 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52  5 & OPFLAG_LASTR
24f80 4f 57 49 44 20 29 20 64 62 2d 3e 6c 61 73 74 52  OWID ) db->lastR
24f90 6f 77 69 64 20 3d 20 78 2e 6e 4b 65 79 3b 0a 20  owid = x.nKey;. 
24fa0 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67   if( pData->flag
24fb0 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
24fc0 20 20 20 20 78 2e 70 44 61 74 61 20 3d 20 30 3b      x.pData = 0;
24fd0 0a 20 20 20 20 78 2e 6e 44 61 74 61 20 3d 20 30  .    x.nData = 0
24fe0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
24ff0 73 73 65 72 74 28 20 70 44 61 74 61 2d 3e 66 6c  ssert( pData->fl
25000 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c  ags & (MEM_Blob|
25010 4d 45 4d 5f 53 74 72 29 20 29 3b 0a 20 20 20 20  MEM_Str) );.    
25020 78 2e 70 44 61 74 61 20 3d 20 70 44 61 74 61 2d  x.pData = pData-
25030 3e 7a 3b 0a 20 20 20 20 78 2e 6e 44 61 74 61 20  >z;.    x.nData 
25040 3d 20 70 44 61 74 61 2d 3e 6e 3b 0a 20 20 7d 0a  = pData->n;.  }.
25050 20 20 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 28    seekResult = (
25060 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
25070 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 29  G_USESEEKRESULT)
25080 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c   ? pC->seekResul
25090 74 20 3a 20 30 29 3b 0a 20 20 69 66 28 20 70 44  t : 0);.  if( pD
250a0 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ata->flags & MEM
250b0 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 78 2e 6e  _Zero ){.    x.n
250c0 5a 65 72 6f 20 3d 20 70 44 61 74 61 2d 3e 75 2e  Zero = pData->u.
250d0 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73 65 7b 0a  nZero;.  }else{.
250e0 20 20 20 20 78 2e 6e 5a 65 72 6f 20 3d 20 30 3b      x.nZero = 0;
250f0 0a 20 20 7d 0a 20 20 78 2e 70 4b 65 79 20 3d 20  .  }.  x.pKey = 
25100 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  0;.  rc = sqlite
25110 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d  3BtreeInsert(pC-
25120 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 78 2c  >uc.pCursor, &x,
25130 0a 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35 20  .      (pOp->p5 
25140 26 20 28 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44  & (OPFLAG_APPEND
25150 7c 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49  |OPFLAG_SAVEPOSI
25160 54 49 4f 4e 29 29 2c 20 73 65 65 6b 52 65 73 75  TION)), seekResu
25170 6c 74 0a 20 20 29 3b 0a 20 20 70 43 2d 3e 64 65  lt.  );.  pC->de
25180 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
25190 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
251a0 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
251b0 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  E;..  /* Invoke 
251c0 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20  the update-hook 
251d0 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a  if required. */.
251e0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
251f0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
25200 6f 72 3b 0a 20 20 69 66 28 20 64 62 2d 3e 78 55  or;.  if( db->xU
25210 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26  pdateCallback &&
25220 20 6f 70 20 29 7b 0a 20 20 20 20 64 62 2d 3e 78   op ){.    db->x
25230 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64  UpdateCallback(d
25240 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20 6f  b->pUpdateArg, o
25250 70 2c 20 7a 44 62 2c 20 70 54 61 62 2d 3e 7a 4e  p, zDb, pTab->zN
25260 61 6d 65 2c 20 78 2e 6e 4b 65 79 29 3b 0a 20 20  ame, x.nKey);.  
25270 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
25280 20 4f 70 63 6f 64 65 3a 20 44 65 6c 65 74 65 20   Opcode: Delete 
25290 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
252a0 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68 65 20  *.** Delete the 
252b0 72 65 63 6f 72 64 20 61 74 20 77 68 69 63 68 20  record at which 
252c0 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 69 73  the P1 cursor is
252d0 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
252e0 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ing..**.** If th
252f0 65 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53  e OPFLAG_SAVEPOS
25300 49 54 49 4f 4e 20 62 69 74 20 6f 66 20 74 68 65  ITION bit of the
25310 20 50 35 20 70 61 72 61 6d 65 74 65 72 20 69 73   P5 parameter is
25320 20 73 65 74 2c 20 74 68 65 6e 0a 2a 2a 20 74 68   set, then.** th
25330 65 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65  e cursor will be
25340 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61   left pointing a
25350 74 20 20 65 69 74 68 65 72 20 74 68 65 20 6e 65  t  either the ne
25360 78 74 20 6f 72 20 74 68 65 20 70 72 65 76 69 6f  xt or the previo
25370 75 73 0a 2a 2a 20 72 65 63 6f 72 64 20 69 6e 20  us.** record in 
25380 74 68 65 20 74 61 62 6c 65 2e 20 49 66 20 69 74  the table. If it
25390 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e   is left pointin
253a0 67 20 61 74 20 74 68 65 20 6e 65 78 74 20 72 65  g at the next re
253b0 63 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a 20 74 68  cord, then.** th
253c0 65 20 6e 65 78 74 20 4e 65 78 74 20 69 6e 73 74  e next Next inst
253d0 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20  ruction will be 
253e0 61 20 6e 6f 2d 6f 70 2e 20 41 73 20 61 20 72 65  a no-op. As a re
253f0 73 75 6c 74 2c 20 69 6e 20 74 68 69 73 20 63 61  sult, in this ca
25400 73 65 0a 2a 2a 20 69 74 20 69 73 20 6f 6b 20 74  se.** it is ok t
25410 6f 20 64 65 6c 65 74 65 20 61 20 72 65 63 6f 72  o delete a recor
25420 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20  d from within a 
25430 4e 65 78 74 20 6c 6f 6f 70 2e 20 49 66 20 0a 2a  Next loop. If .*
25440 2a 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53  * OPFLAG_SAVEPOS
25450 49 54 49 4f 4e 20 62 69 74 20 6f 66 20 50 35 20  ITION bit of P5 
25460 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 74  is clear, then t
25470 68 65 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62  he cursor will b
25480 65 0a 2a 2a 20 6c 65 66 74 20 69 6e 20 61 6e 20  e.** left in an 
25490 75 6e 64 65 66 69 6e 65 64 20 73 74 61 74 65 2e  undefined state.
254a0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
254b0 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20 62  FLAG_AUXDELETE b
254c0 69 74 20 69 73 20 73 65 74 20 6f 6e 20 50 35 2c  it is set on P5,
254d0 20 74 68 61 74 20 69 6e 64 69 63 61 74 65 73 20   that indicates 
254e0 74 68 61 74 20 74 68 69 73 0a 2a 2a 20 64 65 6c  that this.** del
254f0 65 74 65 20 6f 6e 65 20 6f 66 20 73 65 76 65 72  ete one of sever
25500 61 6c 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  al associated wi
25510 74 68 20 64 65 6c 65 74 69 6e 67 20 61 20 74 61  th deleting a ta
25520 62 6c 65 20 72 6f 77 20 61 6e 64 20 61 6c 6c 20  ble row and all 
25530 69 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65  its.** associate
25540 64 20 69 6e 64 65 78 20 65 6e 74 72 69 65 73 2e  d index entries.
25550 20 20 45 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66    Exactly one of
25560 20 74 68 6f 73 65 20 64 65 6c 65 74 65 73 20 69   those deletes i
25570 73 20 74 68 65 20 22 70 72 69 6d 61 72 79 22 0a  s the "primary".
25580 2a 2a 20 64 65 6c 65 74 65 2e 20 20 54 68 65 20  ** delete.  The 
25590 6f 74 68 65 72 73 20 61 72 65 20 61 6c 6c 20 6f  others are all o
255a0 6e 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45  n OPFLAG_FORDELE
255b0 54 45 20 63 75 72 73 6f 72 73 20 6f 72 20 65 6c  TE cursors or el
255c0 73 65 20 61 72 65 0a 2a 2a 20 6d 61 72 6b 65 64  se are.** marked
255d0 20 77 69 74 68 20 74 68 65 20 41 55 58 44 45 4c   with the AUXDEL
255e0 45 54 45 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20  ETE flag..**.** 
255f0 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  If the OPFLAG_NC
25600 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 32  HANGE flag of P2
25610 20 28 4e 42 3a 20 50 32 20 6e 6f 74 20 50 35 29   (NB: P2 not P5)
25620 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68   is set, then th
25630 65 20 72 6f 77 0a 2a 2a 20 63 68 61 6e 67 65 20  e row.** change 
25640 63 6f 75 6e 74 20 69 73 20 69 6e 63 72 65 6d 65  count is increme
25650 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73 65 20  nted (otherwise 
25660 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d  not)..**.** P1 m
25670 75 73 74 20 6e 6f 74 20 62 65 20 70 73 65 75 64  ust not be pseud
25680 6f 2d 74 61 62 6c 65 2e 20 20 49 74 20 68 61 73  o-table.  It has
25690 20 74 6f 20 62 65 20 61 20 72 65 61 6c 20 74 61   to be a real ta
256a0 62 6c 65 20 77 69 74 68 0a 2a 2a 20 6d 75 6c 74  ble with.** mult
256b0 69 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a  iple rows..**.**
256c0 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55   If P4 is not NU
256d0 4c 4c 20 74 68 65 6e 20 69 74 20 70 6f 69 6e 74  LL then it point
256e0 73 20 74 6f 20 61 20 54 61 62 6c 65 20 6f 62 6a  s to a Table obj
256f0 65 63 74 2e 20 49 6e 20 74 68 69 73 20 63 61 73  ect. In this cas
25700 65 20 65 69 74 68 65 72 20 0a 2a 2a 20 74 68 65  e either .** the
25710 20 75 70 64 61 74 65 20 6f 72 20 70 72 65 2d 75   update or pre-u
25720 70 64 61 74 65 20 68 6f 6f 6b 2c 20 6f 72 20 62  pdate hook, or b
25730 6f 74 68 2c 20 6d 61 79 20 62 65 20 69 6e 76 6f  oth, may be invo
25740 6b 65 64 2e 20 54 68 65 20 50 31 20 63 75 72 73  ked. The P1 curs
25750 6f 72 20 6d 75 73 74 0a 2a 2a 20 68 61 76 65 20  or must.** have 
25760 62 65 65 6e 20 70 6f 73 69 74 69 6f 6e 65 64 20  been positioned 
25770 75 73 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e  using OP_NotFoun
25780 64 20 70 72 69 6f 72 20 74 6f 20 69 6e 76 6f 6b  d prior to invok
25790 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 20  ing this opcode 
257a0 69 6e 20 0a 2a 2a 20 74 68 69 73 20 63 61 73 65  in .** this case
257b0 2e 20 53 70 65 63 69 66 69 63 61 6c 6c 79 2c 20  . Specifically, 
257c0 69 66 20 6f 6e 65 20 69 73 20 63 6f 6e 66 69 67  if one is config
257d0 75 72 65 64 2c 20 74 68 65 20 70 72 65 2d 75 70  ured, the pre-up
257e0 64 61 74 65 20 68 6f 6f 6b 20 69 73 20 0a 2a 2a  date hook is .**
257f0 20 69 6e 76 6f 6b 65 64 20 69 66 20 50 34 20 69   invoked if P4 i
25800 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 54 68 65 20  s not NULL. The 
25810 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 73 20 69  update-hook is i
25820 6e 76 6f 6b 65 64 20 69 66 20 6f 6e 65 20 69 73  nvoked if one is
25830 20 63 6f 6e 66 69 67 75 72 65 64 2c 20 0a 2a 2a   configured, .**
25840 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   P4 is not NULL,
25850 20 61 6e 64 20 74 68 65 20 4f 50 46 4c 41 47 5f   and the OPFLAG_
25860 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 69 73 20  NCHANGE flag is 
25870 73 65 74 20 69 6e 20 50 32 2e 0a 2a 2a 0a 2a 2a  set in P2..**.**
25880 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 49   If the OPFLAG_I
25890 53 55 50 44 41 54 45 20 66 6c 61 67 20 69 73 20  SUPDATE flag is 
258a0 73 65 74 20 69 6e 20 50 32 2c 20 74 68 65 6e 20  set in P2, then 
258b0 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  P3 contains the 
258c0 61 64 64 72 65 73 73 0a 2a 2a 20 6f 66 20 74 68  address.** of th
258d0 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68  e memory cell th
258e0 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  at contains the 
258f0 76 61 6c 75 65 20 74 68 61 74 20 74 68 65 20 72  value that the r
25900 6f 77 69 64 20 6f 66 20 74 68 65 20 72 6f 77 20  owid of the row 
25910 77 69 6c 6c 0a 2a 2a 20 62 65 20 73 65 74 20 74  will.** be set t
25920 6f 20 62 79 20 74 68 65 20 75 70 64 61 74 65 2e  o by the update.
25930 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 6c 65  .*/.case OP_Dele
25940 74 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  te: {.  VdbeCurs
25950 6f 72 20 2a 70 43 3b 0a 20 20 63 6f 6e 73 74 20  or *pC;.  const 
25960 63 68 61 72 20 2a 7a 44 62 3b 0a 20 20 54 61 62  char *zDb;.  Tab
25970 6c 65 20 2a 70 54 61 62 3b 0a 20 20 69 6e 74 20  le *pTab;.  int 
25980 6f 70 66 6c 61 67 73 3b 0a 0a 20 20 6f 70 66 6c  opflags;..  opfl
25990 61 67 73 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  ags = pOp->p2;. 
259a0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
259b0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
259c0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
259d0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
259e0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
259f0 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
25a00 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
25a10 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
25a20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
25a30 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29  >uc.pCursor!=0 )
25a40 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
25a50 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
25a60 30 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  0 );..#ifdef SQL
25a70 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20  ITE_DEBUG.  if( 
25a80 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
25a90 54 41 42 4c 45 20 26 26 20 48 61 73 52 6f 77 69  TABLE && HasRowi
25aa0 64 28 70 4f 70 2d 3e 70 34 2e 70 54 61 62 29 20  d(pOp->p4.pTab) 
25ab0 26 26 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 7b  && pOp->p5==0 ){
25ac0 0a 20 20 20 20 2f 2a 20 49 66 20 70 35 20 69 73  .    /* If p5 is
25ad0 20 7a 65 72 6f 2c 20 74 68 65 20 73 65 65 6b 20   zero, the seek 
25ae0 6f 70 65 72 61 74 69 6f 6e 20 74 68 61 74 20 70  operation that p
25af0 6f 73 69 74 69 6f 6e 65 64 20 74 68 65 20 63 75  ositioned the cu
25b00 72 73 6f 72 20 70 72 69 6f 72 20 74 6f 0a 20 20  rsor prior to.  
25b10 20 20 2a 2a 20 4f 50 5f 44 65 6c 65 74 65 20 77    ** OP_Delete w
25b20 69 6c 6c 20 68 61 76 65 20 61 6c 73 6f 20 73 65  ill have also se
25b30 74 20 74 68 65 20 70 43 2d 3e 6d 6f 76 65 74 6f  t the pC->moveto
25b40 54 61 72 67 65 74 20 66 69 65 6c 64 20 74 6f 20  Target field to 
25b50 74 68 65 20 72 6f 77 69 64 20 6f 66 0a 20 20 20  the rowid of.   
25b60 20 2a 2a 20 74 68 65 20 72 6f 77 20 74 68 61 74   ** the row that
25b70 20 69 73 20 62 65 69 6e 67 20 64 65 6c 65 74 65   is being delete
25b80 64 20 2a 2f 0a 20 20 20 20 69 36 34 20 69 4b 65  d */.    i64 iKe
25b90 79 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  y = sqlite3Btree
25ba0 49 6e 74 65 67 65 72 4b 65 79 28 70 43 2d 3e 75  IntegerKey(pC->u
25bb0 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  c.pCursor);.    
25bc0 61 73 73 65 72 74 28 20 70 43 2d 3e 6d 6f 76 65  assert( pC->move
25bd0 74 6f 54 61 72 67 65 74 3d 3d 69 4b 65 79 20 29  toTarget==iKey )
25be0 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20  ;.  }.#endif..  
25bf0 2f 2a 20 49 66 20 74 68 65 20 75 70 64 61 74 65  /* If the update
25c00 2d 68 6f 6f 6b 20 6f 72 20 70 72 65 2d 75 70 64  -hook or pre-upd
25c10 61 74 65 2d 68 6f 6f 6b 20 77 69 6c 6c 20 62 65  ate-hook will be
25c20 20 69 6e 76 6f 6b 65 64 2c 20 73 65 74 20 7a 44   invoked, set zD
25c30 62 20 74 6f 0a 20 20 2a 2a 20 74 68 65 20 6e 61  b to.  ** the na
25c40 6d 65 20 6f 66 20 74 68 65 20 64 62 20 74 6f 20  me of the db to 
25c50 70 61 73 73 20 61 73 20 74 6f 20 69 74 2e 20 41  pass as to it. A
25c60 6c 73 6f 20 73 65 74 20 6c 6f 63 61 6c 20 70 54  lso set local pT
25c70 61 62 20 74 6f 20 61 20 63 6f 70 79 0a 20 20 2a  ab to a copy.  *
25c80 2a 20 6f 66 20 70 34 2e 70 54 61 62 2e 20 46 69  * of p4.pTab. Fi
25c90 6e 61 6c 6c 79 2c 20 69 66 20 70 35 20 69 73 20  nally, if p5 is 
25ca0 74 72 75 65 2c 20 69 6e 64 69 63 61 74 69 6e 67  true, indicating
25cb0 20 74 68 61 74 20 74 68 69 73 20 63 75 72 73 6f   that this curso
25cc0 72 20 77 61 73 0a 20 20 2a 2a 20 6c 61 73 74 20  r was.  ** last 
25cd0 6d 6f 76 65 64 20 77 69 74 68 20 4f 50 5f 4e 65  moved with OP_Ne
25ce0 78 74 20 6f 72 20 4f 50 5f 50 72 65 76 2c 20 6e  xt or OP_Prev, n
25cf0 6f 74 20 53 65 65 6b 20 6f 72 20 4e 6f 74 46 6f  ot Seek or NotFo
25d00 75 6e 64 2c 20 73 65 74 20 0a 20 20 2a 2a 20 56  und, set .  ** V
25d10 64 62 65 43 75 72 73 6f 72 2e 6d 6f 76 65 74 6f  dbeCursor.moveto
25d20 54 61 72 67 65 74 20 74 6f 20 74 68 65 20 63 75  Target to the cu
25d30 72 72 65 6e 74 20 72 6f 77 69 64 2e 20 20 2a 2f  rrent rowid.  */
25d40 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79  .  if( pOp->p4ty
25d50 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20 26 26 20  pe==P4_TABLE && 
25d60 48 41 53 5f 55 50 44 41 54 45 5f 48 4f 4f 4b 28  HAS_UPDATE_HOOK(
25d70 64 62 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72  db) ){.    asser
25d80 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b  t( pC->iDb>=0 );
25d90 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
25da0 2d 3e 70 34 2e 70 54 61 62 21 3d 30 20 29 3b 0a  ->p4.pTab!=0 );.
25db0 20 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44      zDb = db->aD
25dc0 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 44 62 53 4e  b[pC->iDb].zDbSN
25dd0 61 6d 65 3b 0a 20 20 20 20 70 54 61 62 20 3d 20  ame;.    pTab = 
25de0 70 4f 70 2d 3e 70 34 2e 70 54 61 62 3b 0a 20 20  pOp->p4.pTab;.  
25df0 20 20 69 66 28 20 28 70 4f 70 2d 3e 70 35 20 26    if( (pOp->p5 &
25e00 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49   OPFLAG_SAVEPOSI
25e10 54 49 4f 4e 29 21 3d 30 20 26 26 20 70 43 2d 3e  TION)!=0 && pC->
25e20 69 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 20  isTable ){.     
25e30 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65   pC->movetoTarge
25e40 74 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  t = sqlite3Btree
25e50 49 6e 74 65 67 65 72 4b 65 79 28 70 43 2d 3e 75  IntegerKey(pC->u
25e60 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  c.pCursor);.    
25e70 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 7a  }.  }else{.    z
25e80 44 62 20 3d 20 30 3b 20 20 20 2f 2a 20 4e 6f 74  Db = 0;   /* Not
25e90 20 6e 65 65 64 65 64 2e 20 20 53 69 6c 65 6e 63   needed.  Silenc
25ea0 65 20 61 20 63 6f 6d 70 69 6c 65 72 20 77 61 72  e a compiler war
25eb0 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 70 54 61  ning. */.    pTa
25ec0 62 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e  b = 0;  /* Not n
25ed0 65 65 64 65 64 2e 20 20 53 69 6c 65 6e 63 65 20  eeded.  Silence 
25ee0 61 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69  a compiler warni
25ef0 6e 67 2e 20 2a 2f 0a 20 20 7d 0a 0a 23 69 66 64  ng. */.  }..#ifd
25f00 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
25f10 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a  _PREUPDATE_HOOK.
25f20 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
25f30 70 72 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20  pre-update-hook 
25f40 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a  if required. */.
25f50 20 20 69 66 28 20 64 62 2d 3e 78 50 72 65 55 70    if( db->xPreUp
25f60 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20  dateCallback && 
25f70 70 4f 70 2d 3e 70 34 2e 70 54 61 62 20 26 26 20  pOp->p4.pTab && 
25f80 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 20 29  HasRowid(pTab) )
25f90 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 21 28  {.    assert( !(
25fa0 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47  opflags & OPFLAG
25fb0 5f 49 53 55 50 44 41 54 45 29 20 7c 7c 20 28 61  _ISUPDATE) || (a
25fc0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 66 6c 61  Mem[pOp->p3].fla
25fd0 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 20 29 3b  gs & MEM_Int) );
25fe0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
25ff0 50 72 65 55 70 64 61 74 65 48 6f 6f 6b 28 70 2c  PreUpdateHook(p,
26000 20 70 43 2c 0a 20 20 20 20 20 20 20 20 28 6f 70   pC,.        (op
26010 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f 49  flags & OPFLAG_I
26020 53 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54  SUPDATE) ? SQLIT
26030 45 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54  E_UPDATE : SQLIT
26040 45 5f 44 45 4c 45 54 45 2c 20 0a 20 20 20 20 20  E_DELETE, .     
26050 20 20 20 7a 44 62 2c 20 70 54 61 62 2c 20 70 43     zDb, pTab, pC
26060 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 2c 0a  ->movetoTarget,.
26070 20 20 20 20 20 20 20 20 70 4f 70 2d 3e 70 33 0a          pOp->p3.
26080 20 20 20 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28      );.  }.  if(
26090 20 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41   opflags & OPFLA
260a0 47 5f 49 53 4e 4f 4f 50 20 29 20 62 72 65 61 6b  G_ISNOOP ) break
260b0 3b 0a 23 65 6e 64 69 66 0a 20 0a 20 20 2f 2a 20  ;.#endif. .  /* 
260c0 4f 6e 6c 79 20 66 6c 61 67 73 20 74 68 61 74 20  Only flags that 
260d0 63 61 6e 20 62 65 20 73 65 74 20 61 72 65 20 53  can be set are S
260e0 41 56 45 50 4f 49 53 54 49 4f 4e 20 61 6e 64 20  AVEPOISTION and 
260f0 41 55 58 44 45 4c 45 54 45 20 2a 2f 20 0a 20 20  AUXDELETE */ .  
26100 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35  assert( (pOp->p5
26110 20 26 20 7e 28 4f 50 46 4c 41 47 5f 53 41 56 45   & ~(OPFLAG_SAVE
26120 50 4f 53 49 54 49 4f 4e 7c 4f 50 46 4c 41 47 5f  POSITION|OPFLAG_
26130 41 55 58 44 45 4c 45 54 45 29 29 3d 3d 30 20 29  AUXDELETE))==0 )
26140 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c  ;.  assert( OPFL
26150 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 3d  AG_SAVEPOSITION=
26160 3d 42 54 52 45 45 5f 53 41 56 45 50 4f 53 49 54  =BTREE_SAVEPOSIT
26170 49 4f 4e 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ION );.  assert(
26180 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54   OPFLAG_AUXDELET
26190 45 3d 3d 42 54 52 45 45 5f 41 55 58 44 45 4c 45  E==BTREE_AUXDELE
261a0 54 45 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  TE );..#ifdef SQ
261b0 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28  LITE_DEBUG.  if(
261c0 20 70 2d 3e 70 46 72 61 6d 65 3d 3d 30 20 29 7b   p->pFrame==0 ){
261d0 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73 45  .    if( pC->isE
261e0 70 68 65 6d 65 72 61 6c 3d 3d 30 0a 20 20 20 20  phemeral==0.    
261f0 20 20 20 20 26 26 20 28 70 4f 70 2d 3e 70 35 20      && (pOp->p5 
26200 26 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45  & OPFLAG_AUXDELE
26210 54 45 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 26  TE)==0.        &
26220 26 20 28 70 43 2d 3e 77 72 46 6c 61 67 20 26 20  & (pC->wrFlag & 
26230 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45  OPFLAG_FORDELETE
26240 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20 20  )==0.      ){.  
26250 20 20 20 20 6e 45 78 74 72 61 44 65 6c 65 74 65      nExtraDelete
26260 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ++;.    }.    if
26270 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c  ( pOp->p2 & OPFL
26280 41 47 5f 4e 43 48 41 4e 47 45 20 29 7b 0a 20 20  AG_NCHANGE ){.  
26290 20 20 20 20 6e 45 78 74 72 61 44 65 6c 65 74 65      nExtraDelete
262a0 2d 2d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  --;.    }.  }.#e
262b0 6e 64 69 66 0a 0a 20 20 72 63 20 3d 20 73 71 6c  ndif..  rc = sql
262c0 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65 28  ite3BtreeDelete(
262d0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
262e0 70 4f 70 2d 3e 70 35 29 3b 0a 20 20 70 43 2d 3e  pOp->p5);.  pC->
262f0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
26300 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d  CHE_STALE;.  pC-
26310 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 30 3b  >seekResult = 0;
26320 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
26330 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
26340 72 6f 72 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  ror;..  /* Invok
26350 65 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  e the update-hoo
26360 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a  k if required. *
26370 2f 0a 20 20 69 66 28 20 6f 70 66 6c 61 67 73 20  /.  if( opflags 
26380 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  & OPFLAG_NCHANGE
26390 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e   ){.    p->nChan
263a0 67 65 2b 2b 3b 0a 20 20 20 20 69 66 28 20 64 62  ge++;.    if( db
263b0 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
263c0 6b 20 26 26 20 48 61 73 52 6f 77 69 64 28 70 54  k && HasRowid(pT
263d0 61 62 29 20 29 7b 0a 20 20 20 20 20 20 64 62 2d  ab) ){.      db-
263e0 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
263f0 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c  (db->pUpdateArg,
26400 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 20   SQLITE_DELETE, 
26410 7a 44 62 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65  zDb, pTab->zName
26420 2c 0a 20 20 20 20 20 20 20 20 20 20 70 43 2d 3e  ,.          pC->
26430 6d 6f 76 65 74 6f 54 61 72 67 65 74 29 3b 0a 20  movetoTarget);. 
26440 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d       assert( pC-
26450 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20 7d  >iDb>=0 );.    }
26460 0a 20 20 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d  .  }..  break;.}
26470 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 65  ./* Opcode: Rese
26480 74 43 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a 20 2a  tCount * * * * *
26490 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65  .**.** The value
264a0 20 6f 66 20 74 68 65 20 63 68 61 6e 67 65 20 63   of the change c
264b0 6f 75 6e 74 65 72 20 69 73 20 63 6f 70 69 65 64  ounter is copied
264c0 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
264d0 20 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e 67   handle.** chang
264e0 65 20 63 6f 75 6e 74 65 72 20 28 72 65 74 75 72  e counter (retur
264f0 6e 65 64 20 62 79 20 73 75 62 73 65 71 75 65 6e  ned by subsequen
26500 74 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74  t calls to sqlit
26510 65 33 5f 63 68 61 6e 67 65 73 28 29 29 2e 0a 2a  e3_changes())..*
26520 2a 20 54 68 65 6e 20 74 68 65 20 56 4d 73 20 69  * Then the VMs i
26530 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67 65 20 63  nternal change c
26540 6f 75 6e 74 65 72 20 72 65 73 65 74 73 20 74 6f  ounter resets to
26550 20 30 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 75   0..** This is u
26560 73 65 64 20 62 79 20 74 72 69 67 67 65 72 20 70  sed by trigger p
26570 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65  rograms..*/.case
26580 20 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74 3a 20   OP_ResetCount: 
26590 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 53  {.  sqlite3VdbeS
265a0 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d  etChanges(db, p-
265b0 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 70 2d 3e  >nChange);.  p->
265c0 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 62  nChange = 0;.  b
265d0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
265e0 64 65 3a 20 53 6f 72 74 65 72 43 6f 6d 70 61 72  de: SorterCompar
265f0 65 20 50 31 20 50 32 20 50 33 20 50 34 0a 2a 2a  e P1 P2 P3 P4.**
26600 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 6b 65   Synopsis: if ke
26610 79 28 50 31 29 21 3d 74 72 69 6d 28 72 5b 50 33  y(P1)!=trim(r[P3
26620 5d 2c 50 34 29 20 67 6f 74 6f 20 50 32 0a 2a 2a  ],P4) goto P2.**
26630 0a 2a 2a 20 50 31 20 69 73 20 61 20 73 6f 72 74  .** P1 is a sort
26640 65 72 20 63 75 72 73 6f 72 2e 20 54 68 69 73 20  er cursor. This 
26650 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 6d 70  instruction comp
26660 61 72 65 73 20 61 20 70 72 65 66 69 78 20 6f 66  ares a prefix of
26670 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20 62   the.** record b
26680 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65 72 20  lob in register 
26690 50 33 20 61 67 61 69 6e 73 74 20 61 20 70 72 65  P3 against a pre
266a0 66 69 78 20 6f 66 20 74 68 65 20 65 6e 74 72 79  fix of the entry
266b0 20 74 68 61 74 20 0a 2a 2a 20 74 68 65 20 73 6f   that .** the so
266c0 72 74 65 72 20 63 75 72 73 6f 72 20 63 75 72 72  rter cursor curr
266d0 65 6e 74 6c 79 20 70 6f 69 6e 74 73 20 74 6f 2e  ently points to.
266e0 20 20 4f 6e 6c 79 20 74 68 65 20 66 69 72 73 74    Only the first
266f0 20 50 34 20 66 69 65 6c 64 73 0a 2a 2a 20 6f 66   P4 fields.** of
26700 20 72 5b 50 33 5d 20 61 6e 64 20 74 68 65 20 73   r[P3] and the s
26710 6f 72 74 65 72 20 72 65 63 6f 72 64 20 61 72 65  orter record are
26720 20 63 6f 6d 70 61 72 65 64 2e 0a 2a 2a 0a 2a 2a   compared..**.**
26730 20 49 66 20 65 69 74 68 65 72 20 50 33 20 6f 72   If either P3 or
26740 20 74 68 65 20 73 6f 72 74 65 72 20 63 6f 6e 74   the sorter cont
26750 61 69 6e 73 20 61 20 4e 55 4c 4c 20 69 6e 20 6f  ains a NULL in o
26760 6e 65 20 6f 66 20 74 68 65 69 72 20 73 69 67 6e  ne of their sign
26770 69 66 69 63 61 6e 74 0a 2a 2a 20 66 69 65 6c 64  ificant.** field
26780 73 20 28 6e 6f 74 20 63 6f 75 6e 74 69 6e 67 20  s (not counting 
26790 74 68 65 20 50 34 20 66 69 65 6c 64 73 20 61 74  the P4 fields at
267a0 20 74 68 65 20 65 6e 64 20 77 68 69 63 68 20 61   the end which a
267b0 72 65 20 69 67 6e 6f 72 65 64 29 20 74 68 65 6e  re ignored) then
267c0 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73  .** the comparis
267d0 6f 6e 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f  on is assumed to
267e0 20 62 65 20 65 71 75 61 6c 2e 0a 2a 2a 0a 2a 2a   be equal..**.**
267f0 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   Fall through to
26800 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
26810 6e 20 69 66 20 74 68 65 20 74 77 6f 20 72 65 63  n if the two rec
26820 6f 72 64 73 20 63 6f 6d 70 61 72 65 20 65 71 75  ords compare equ
26830 61 6c 20 74 6f 0a 2a 2a 20 65 61 63 68 20 6f 74  al to.** each ot
26840 68 65 72 2e 20 20 4a 75 6d 70 20 74 6f 20 50 32  her.  Jump to P2
26850 20 69 66 20 74 68 65 79 20 61 72 65 20 64 69 66   if they are dif
26860 66 65 72 65 6e 74 2e 0a 2a 2f 0a 63 61 73 65 20  ferent..*/.case 
26870 4f 50 5f 53 6f 72 74 65 72 43 6f 6d 70 61 72 65  OP_SorterCompare
26880 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
26890 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b   *pC;.  int res;
268a0 0a 20 20 69 6e 74 20 6e 4b 65 79 43 6f 6c 3b 0a  .  int nKeyCol;.
268b0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
268c0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
268d0 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43  ert( isSorter(pC
268e0 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
268f0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
26900 4e 54 33 32 20 29 3b 0a 20 20 70 49 6e 33 20 3d  NT32 );.  pIn3 =
26910 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
26920 0a 20 20 6e 4b 65 79 43 6f 6c 20 3d 20 70 4f 70  .  nKeyCol = pOp
26930 2d 3e 70 34 2e 69 3b 0a 20 20 72 65 73 20 3d 20  ->p4.i;.  res = 
26940 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  0;.  rc = sqlite
26950 33 56 64 62 65 53 6f 72 74 65 72 43 6f 6d 70 61  3VdbeSorterCompa
26960 72 65 28 70 43 2c 20 70 49 6e 33 2c 20 6e 4b 65  re(pC, pIn3, nKe
26970 79 43 6f 6c 2c 20 26 72 65 73 29 3b 0a 20 20 56  yCol, &res);.  V
26980 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
26990 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20  es!=0,2);.  if( 
269a0 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
269b0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
269c0 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a  if( res ) goto j
269d0 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65  ump_to_p2;.  bre
269e0 61 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.};../* Opcod
269f0 65 3a 20 53 6f 72 74 65 72 44 61 74 61 20 50 31  e: SorterData P1
26a00 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
26a10 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61  nopsis: r[P2]=da
26a20 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69  ta.**.** Write i
26a30 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20  nto register P2 
26a40 74 68 65 20 63 75 72 72 65 6e 74 20 73 6f 72 74  the current sort
26a50 65 72 20 64 61 74 61 20 66 6f 72 20 73 6f 72 74  er data for sort
26a60 65 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a  er cursor P1..**
26a70 20 54 68 65 6e 20 63 6c 65 61 72 20 74 68 65 20   Then clear the 
26a80 63 6f 6c 75 6d 6e 20 68 65 61 64 65 72 20 63 61  column header ca
26a90 63 68 65 20 6f 6e 20 63 75 72 73 6f 72 20 50 33  che on cursor P3
26aa0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
26ab0 6f 64 65 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20  ode is normally 
26ac0 75 73 65 20 74 6f 20 6d 6f 76 65 20 61 20 72 65  use to move a re
26ad0 63 6f 72 64 20 6f 75 74 20 6f 66 20 74 68 65 20  cord out of the 
26ae0 73 6f 72 74 65 72 20 61 6e 64 20 69 6e 74 6f 0a  sorter and into.
26af0 2a 2a 20 61 20 72 65 67 69 73 74 65 72 20 74 68  ** a register th
26b00 61 74 20 69 73 20 74 68 65 20 73 6f 75 72 63 65  at is the source
26b10 20 66 6f 72 20 61 20 70 73 65 75 64 6f 2d 74 61   for a pseudo-ta
26b20 62 6c 65 20 63 75 72 73 6f 72 20 63 72 65 61 74  ble cursor creat
26b30 65 64 20 75 73 69 6e 67 0a 2a 2a 20 4f 70 65 6e  ed using.** Open
26b40 50 73 65 75 64 6f 2e 20 20 54 68 61 74 20 70 73  Pseudo.  That ps
26b50 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f  eudo-table curso
26b60 72 20 69 73 20 74 68 65 20 6f 6e 65 20 74 68 61  r is the one tha
26b70 74 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 20  t is identified 
26b80 62 79 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20  by.** parameter 
26b90 50 33 2e 20 20 43 6c 65 61 72 69 6e 67 20 74 68  P3.  Clearing th
26ba0 65 20 50 33 20 63 6f 6c 75 6d 6e 20 63 61 63 68  e P3 column cach
26bb0 65 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 69  e as part of thi
26bc0 73 20 6f 70 63 6f 64 65 20 73 61 76 65 73 0a 2a  s opcode saves.*
26bd0 2a 20 75 73 20 66 72 6f 6d 20 68 61 76 69 6e 67  * us from having
26be0 20 74 6f 20 69 73 73 75 65 20 61 20 73 65 70 61   to issue a sepa
26bf0 72 61 74 65 20 4e 75 6c 6c 52 6f 77 20 69 6e 73  rate NullRow ins
26c00 74 72 75 63 74 69 6f 6e 20 74 6f 20 63 6c 65 61  truction to clea
26c10 72 20 74 68 61 74 20 63 61 63 68 65 2e 0a 2a 2f  r that cache..*/
26c20 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 44  .case OP_SorterD
26c30 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ata: {.  VdbeCur
26c40 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 70 4f 75 74  sor *pC;..  pOut
26c50 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
26c60 5d 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  ];.  pC = p->apC
26c70 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
26c80 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28  ssert( isSorter(
26c90 70 43 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  pC) );.  rc = sq
26ca0 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 52  lite3VdbeSorterR
26cb0 6f 77 6b 65 79 28 70 43 2c 20 70 4f 75 74 29 3b  owkey(pC, pOut);
26cc0 0a 20 20 61 73 73 65 72 74 28 20 72 63 21 3d 53  .  assert( rc!=S
26cd0 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 4f 75  QLITE_OK || (pOu
26ce0 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42  t->flags & MEM_B
26cf0 6c 6f 62 29 20 29 3b 0a 20 20 61 73 73 65 72 74  lob) );.  assert
26d00 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
26d10 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
26d20 6f 72 20 29 3b 0a 20 20 69 66 28 20 72 63 20 29  or );.  if( rc )
26d30 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
26d40 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 2d 3e 61  to_error;.  p->a
26d50 70 43 73 72 5b 70 4f 70 2d 3e 70 33 5d 2d 3e 63  pCsr[pOp->p3]->c
26d60 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
26d70 48 45 5f 53 54 41 4c 45 3b 0a 20 20 62 72 65 61  HE_STALE;.  brea
26d80 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
26d90 20 52 6f 77 44 61 74 61 20 50 31 20 50 32 20 50   RowData P1 P2 P
26da0 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
26db0 73 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a  s: r[P2]=data.**
26dc0 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72  .** Write into r
26dd0 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63  egister P2 the c
26de0 6f 6d 70 6c 65 74 65 20 72 6f 77 20 63 6f 6e 74  omplete row cont
26df0 65 6e 74 20 66 6f 72 20 74 68 65 20 72 6f 77 20  ent for the row 
26e00 61 74 20 0a 2a 2a 20 77 68 69 63 68 20 63 75 72  at .** which cur
26e10 73 6f 72 20 50 31 20 69 73 20 63 75 72 72 65 6e  sor P1 is curren
26e20 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a  tly pointing..**
26e30 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74   There is no int
26e40 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74  erpretation of t
26e50 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 49 74  he data.  .** It
26e60 20 69 73 20 6a 75 73 74 20 63 6f 70 69 65 64 20   is just copied 
26e70 6f 6e 74 6f 20 74 68 65 20 50 32 20 72 65 67 69  onto the P2 regi
26e80 73 74 65 72 20 65 78 61 63 74 6c 79 20 61 73 20  ster exactly as 
26e90 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20  .** it is found 
26ea0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
26eb0 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63  file..**.** If c
26ec0 75 72 73 6f 72 20 50 31 20 69 73 20 61 6e 20 69  ursor P1 is an i
26ed0 6e 64 65 78 2c 20 74 68 65 6e 20 74 68 65 20 63  ndex, then the c
26ee0 6f 6e 74 65 6e 74 20 69 73 20 74 68 65 20 6b 65  ontent is the ke
26ef0 79 20 6f 66 20 74 68 65 20 72 6f 77 2e 0a 2a 2a  y of the row..**
26f00 20 49 66 20 63 75 72 73 6f 72 20 50 32 20 69 73   If cursor P2 is
26f10 20 61 20 74 61 62 6c 65 2c 20 74 68 65 6e 20 74   a table, then t
26f20 68 65 20 63 6f 6e 74 65 6e 74 20 65 78 74 72 61  he content extra
26f30 63 74 65 64 20 69 73 20 74 68 65 20 64 61 74 61  cted is the data
26f40 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
26f50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65  1 cursor must be
26f60 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76   pointing to a v
26f70 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20  alid row (not a 
26f80 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20  NULL row).** of 
26f90 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f  a real table, no
26fa0 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
26fb0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 21 3d 30  ..**.** If P3!=0
26fc0 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64   then this opcod
26fd0 65 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f 20  e is allowed to 
26fe0 6d 61 6b 65 20 61 6e 20 65 70 68 65 72 6d 65 72  make an ephermer
26ff0 61 6c 20 70 6f 69 6e 74 65 72 0a 2a 2a 20 69 6e  al pointer.** in
27000 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
27010 70 61 67 65 2e 20 20 54 68 61 74 20 6d 65 61 6e  page.  That mean
27020 73 20 74 68 61 74 20 74 68 65 20 63 6f 6e 74 65  s that the conte
27030 6e 74 20 6f 66 20 74 68 65 20 6f 75 74 70 75 74  nt of the output
27040 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 77 69 6c  .** register wil
27050 6c 20 62 65 20 69 6e 76 61 6c 69 64 61 74 65 64  l be invalidated
27060 20 61 73 20 73 6f 6f 6e 20 61 73 20 74 68 65 20   as soon as the 
27070 63 75 72 73 6f 72 20 6d 6f 76 65 73 20 2d 20 69  cursor moves - i
27080 6e 63 6c 75 64 69 6e 67 0a 2a 2a 20 6d 6f 76 65  ncluding.** move
27090 73 20 63 61 75 73 65 64 20 62 79 20 6f 74 68 65  s caused by othe
270a0 72 20 63 75 72 73 6f 72 73 20 74 68 61 74 20 22  r cursors that "
270b0 73 61 76 65 22 20 74 68 65 20 74 68 65 20 63 75  save" the the cu
270c0 72 72 65 6e 74 20 63 75 72 73 6f 72 73 0a 2a 2a  rrent cursors.**
270d0 20 70 6f 73 69 74 69 6f 6e 20 69 6e 20 6f 72 64   position in ord
270e0 65 72 20 74 68 61 74 20 74 68 65 79 20 63 61 6e  er that they can
270f0 20 77 72 69 74 65 20 74 6f 20 74 68 65 20 73 61   write to the sa
27100 6d 65 20 74 61 62 6c 65 2e 20 20 49 66 20 50 33  me table.  If P3
27110 3d 3d 30 0a 2a 2a 20 74 68 65 6e 20 61 20 63 6f  ==0.** then a co
27120 70 79 20 6f 66 20 74 68 65 20 64 61 74 61 20 69  py of the data i
27130 73 20 6d 61 64 65 20 69 6e 74 6f 20 6d 65 6d 6f  s made into memo
27140 72 79 2e 20 20 50 33 21 3d 30 20 69 73 20 66 61  ry.  P3!=0 is fa
27150 73 74 65 72 2c 20 62 75 74 0a 2a 2a 20 50 33 3d  ster, but.** P3=
27160 3d 30 20 69 73 20 73 61 66 65 72 2e 0a 2a 2a 0a  =0 is safer..**.
27170 2a 2a 20 49 66 20 50 33 21 3d 30 20 74 68 65 6e  ** If P3!=0 then
27180 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
27190 74 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20  the P2 register 
271a0 69 73 20 75 6e 73 75 69 74 61 62 6c 65 20 66 6f  is unsuitable fo
271b0 72 20 75 73 65 0a 2a 2a 20 69 6e 20 4f 50 5f 52  r use.** in OP_R
271c0 65 73 75 6c 74 20 61 6e 64 20 61 6e 79 20 4f 50  esult and any OP
271d0 5f 52 65 73 75 6c 74 20 77 69 6c 6c 20 69 6e 76  _Result will inv
271e0 61 6c 69 64 61 74 65 20 74 68 65 20 50 32 20 72  alidate the P2 r
271f0 65 67 69 73 74 65 72 20 63 6f 6e 74 65 6e 74 2e  egister content.
27200 0a 2a 2a 20 54 68 65 20 50 32 20 72 65 67 69 73  .** The P2 regis
27210 74 65 72 20 63 6f 6e 74 65 6e 74 20 69 73 20 69  ter content is i
27220 6e 76 61 6c 69 64 61 74 65 64 20 62 79 20 6f 70  nvalidated by op
27230 63 6f 64 65 73 20 6c 69 6b 65 20 4f 50 5f 46 75  codes like OP_Fu
27240 6e 63 74 69 6f 6e 20 6f 72 0a 2a 2a 20 62 79 20  nction or.** by 
27250 61 6e 79 20 75 73 65 20 6f 66 20 61 6e 6f 74 68  any use of anoth
27260 65 72 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69  er cursor pointi
27270 6e 67 20 74 6f 20 74 68 65 20 73 61 6d 65 20 74  ng to the same t
27280 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  able..*/.case OP
27290 5f 52 6f 77 44 61 74 61 3a 20 7b 0a 20 20 56 64  _RowData: {.  Vd
272a0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
272b0 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
272c0 0a 20 20 75 33 32 20 6e 3b 0a 0a 20 20 70 4f 75  .  u32 n;..  pOu
272d0 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
272e0 73 65 28 70 2c 20 70 4f 70 29 3b 0a 0a 20 20 61  se(p, pOp);..  a
272f0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
27300 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
27310 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
27320 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
27330 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
27340 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
27350 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
27360 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
27370 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72  .  assert( isSor
27380 74 65 72 28 70 43 29 3d 3d 30 20 29 3b 0a 20 20  ter(pC)==0 );.  
27390 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 75 6c 6c  assert( pC->null
273a0 52 6f 77 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  Row==0 );.  asse
273b0 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  rt( pC->uc.pCurs
273c0 6f 72 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72  or!=0 );.  pCrsr
273d0 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f   = pC->uc.pCurso
273e0 72 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f  r;..  /* The OP_
273f0 52 6f 77 44 61 74 61 20 6f 70 63 6f 64 65 73 20  RowData opcodes 
27400 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 20 4f 50  always follow OP
27410 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 0a 20 20  _NotExists or.  
27420 2a 2a 20 4f 50 5f 53 65 65 6b 52 6f 77 69 64 20  ** OP_SeekRowid 
27430 6f 72 20 4f 50 5f 52 65 77 69 6e 64 2f 4f 70 5f  or OP_Rewind/Op_
27440 4e 65 78 74 20 77 69 74 68 20 6e 6f 20 69 6e 74  Next with no int
27450 65 72 76 65 6e 69 6e 67 20 69 6e 73 74 72 75 63  ervening instruc
27460 74 69 6f 6e 73 0a 20 20 2a 2a 20 74 68 61 74 20  tions.  ** that 
27470 6d 69 67 68 74 20 69 6e 76 61 6c 69 64 61 74 65  might invalidate
27480 20 74 68 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a   the cursor..  *
27490 2a 20 49 66 20 74 68 69 73 20 77 68 65 72 65 20  * If this where 
274a0 6e 6f 74 20 74 68 65 20 63 61 73 65 2c 20 6f 6e  not the case, on
274b0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
274c0 67 20 61 73 73 65 72 74 28 29 73 0a 20 20 2a 2a  g assert()s.  **
274d0 20 77 6f 75 6c 64 20 66 61 69 6c 2e 20 20 53 68   would fail.  Sh
274e0 6f 75 6c 64 20 74 68 69 73 20 65 76 65 72 20 63  ould this ever c
274f0 68 61 6e 67 65 20 28 62 65 63 61 75 73 65 20 6f  hange (because o
27500 66 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65  f changes in the
27510 20 63 6f 64 65 0a 20 20 2a 2a 20 67 65 6e 65 72   code.  ** gener
27520 61 74 6f 72 29 20 74 68 65 6e 20 74 68 65 20 66  ator) then the f
27530 69 78 20 77 6f 75 6c 64 20 62 65 20 74 6f 20 69  ix would be to i
27540 6e 73 65 72 74 20 61 20 63 61 6c 6c 20 74 6f 0a  nsert a call to.
27550 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65    ** sqlite3Vdbe
27560 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 2e 0a  CursorMoveto()..
27570 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70    */.  assert( p
27580 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
27590 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  o==0 );.  assert
275a0 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  ( sqlite3BtreeCu
275b0 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73  rsorIsValid(pCrs
275c0 72 29 20 29 3b 0a 23 69 66 20 30 20 20 2f 2a 20  r) );.#if 0  /* 
275d0 4e 6f 74 20 72 65 71 75 69 72 65 64 20 64 75 65  Not required due
275e0 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73   to the previous
275f0 20 74 6f 20 61 73 73 65 72 74 28 29 20 73 74 61   to assert() sta
27600 74 65 6d 65 6e 74 73 20 2a 2f 0a 20 20 72 63 20  tements */.  rc 
27610 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
27620 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20  sorMoveto(pC);. 
27630 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
27640 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
27650 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65  due_to_error;.#e
27660 6e 64 69 66 0a 0a 20 20 6e 20 3d 20 73 71 6c 69  ndif..  n = sqli
27670 74 65 33 42 74 72 65 65 50 61 79 6c 6f 61 64 53  te3BtreePayloadS
27680 69 7a 65 28 70 43 72 73 72 29 3b 0a 20 20 69 66  ize(pCrsr);.  if
27690 28 20 6e 3e 28 75 33 32 29 64 62 2d 3e 61 4c 69  ( n>(u32)db->aLi
276a0 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
276b0 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20  _LENGTH] ){.    
276c0 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
276d0 7d 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 3d  }.  testcase( n=
276e0 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  =0 );.  rc = sql
276f0 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42  ite3VdbeMemFromB
27700 74 72 65 65 28 70 43 72 73 72 2c 20 30 2c 20 6e  tree(pCrsr, 0, n
27710 2c 20 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 72  , pOut);.  if( r
27720 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
27730 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69  ue_to_error;.  i
27740 66 28 20 21 70 4f 70 2d 3e 70 33 20 29 20 44 65  f( !pOp->p3 ) De
27750 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75  ephemeralize(pOu
27760 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  t);.  UPDATE_MAX
27770 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
27780 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
27790 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29  E(pOp->p2, pOut)
277a0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
277b0 20 4f 70 63 6f 64 65 3a 20 52 6f 77 69 64 20 50   Opcode: Rowid P
277c0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
277d0 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f  nopsis: r[P2]=ro
277e0 77 69 64 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20  wid.**.** Store 
277f0 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 61  in register P2 a
27800 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20  n integer which 
27810 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20 74 68  is the key of th
27820 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 68  e table entry th
27830 61 74 0a 2a 2a 20 50 31 20 69 73 20 63 75 72 72  at.** P1 is curr
27840 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a  ently point to..
27850 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62 65 20  **.** P1 can be 
27860 65 69 74 68 65 72 20 61 6e 20 6f 72 64 69 6e 61  either an ordina
27870 72 79 20 74 61 62 6c 65 20 6f 72 20 61 20 76 69  ry table or a vi
27880 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68  rtual table.  Th
27890 65 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62  ere used to.** b
278a0 65 20 61 20 73 65 70 61 72 61 74 65 20 4f 50 5f  e a separate OP_
278b0 56 52 6f 77 69 64 20 6f 70 63 6f 64 65 20 66 6f  VRowid opcode fo
278c0 72 20 75 73 65 20 77 69 74 68 20 76 69 72 74 75  r use with virtu
278d0 61 6c 20 74 61 62 6c 65 73 2c 20 62 75 74 20 74  al tables, but t
278e0 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64  his.** one opcod
278f0 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f 72 20  e now works for 
27900 62 6f 74 68 20 74 61 62 6c 65 20 74 79 70 65 73  both table types
27910 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
27920 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  id: {           
27930 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
27940 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
27950 43 3b 0a 20 20 69 36 34 20 76 3b 0a 20 20 73 71  C;.  i64 v;.  sq
27960 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
27970 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74  b;.  const sqlit
27980 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
27990 6c 65 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75  le;..  pOut = ou
279a0 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
279b0 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20  pOp);.  assert( 
279c0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
279d0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
279e0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
279f0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
27a00 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
27a10 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
27a20 43 75 72 54 79 70 65 21 3d 43 55 52 54 59 50 45  CurType!=CURTYPE
27a30 5f 50 53 45 55 44 4f 20 7c 7c 20 70 43 2d 3e 6e  _PSEUDO || pC->n
27a40 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 69 66 28 20  ullRow );.  if( 
27a50 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  pC->nullRow ){. 
27a60 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
27a70 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 62   MEM_Null;.    b
27a80 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 20 69 66  reak;.  }else if
27a90 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
27aa0 76 65 74 6f 20 29 7b 0a 20 20 20 20 76 20 3d 20  veto ){.    v = 
27ab0 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  pC->movetoTarget
27ac0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
27ad0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
27ae0 4c 45 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  LE.  }else if( p
27af0 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
27b00 54 59 50 45 5f 56 54 41 42 20 29 7b 0a 20 20 20  TYPE_VTAB ){.   
27b10 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e   assert( pC->uc.
27b20 70 56 43 75 72 21 3d 30 20 29 3b 0a 20 20 20 20  pVCur!=0 );.    
27b30 70 56 74 61 62 20 3d 20 70 43 2d 3e 75 63 2e 70  pVtab = pC->uc.p
27b40 56 43 75 72 2d 3e 70 56 74 61 62 3b 0a 20 20 20  VCur->pVtab;.   
27b50 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62   pModule = pVtab
27b60 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 61  ->pModule;.    a
27b70 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e  ssert( pModule->
27b80 78 52 6f 77 69 64 20 29 3b 0a 20 20 20 20 72 63  xRowid );.    rc
27b90 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77   = pModule->xRow
27ba0 69 64 28 70 43 2d 3e 75 63 2e 70 56 43 75 72 2c  id(pC->uc.pVCur,
27bb0 20 26 76 29 3b 0a 20 20 20 20 73 71 6c 69 74 65   &v);.    sqlite
27bc0 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
27bd0 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20  g(p, pVtab);.   
27be0 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
27bf0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
27c00 72 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  r;.#endif /* SQL
27c10 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
27c20 54 41 42 4c 45 20 2a 2f 0a 20 20 7d 65 6c 73 65  TABLE */.  }else
27c30 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
27c40 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
27c50 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 20  YPE_BTREE );.   
27c60 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e   assert( pC->uc.
27c70 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
27c80 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
27c90 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28  beCursorRestore(
27ca0 70 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20  pC);.    if( rc 
27cb0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
27cc0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69  _to_error;.    i
27cd0 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29  f( pC->nullRow )
27ce0 7b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c  {.      pOut->fl
27cf0 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
27d00 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
27d10 20 7d 0a 20 20 20 20 76 20 3d 20 73 71 6c 69 74   }.    v = sqlit
27d20 65 33 42 74 72 65 65 49 6e 74 65 67 65 72 4b 65  e3BtreeIntegerKe
27d30 79 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  y(pC->uc.pCursor
27d40 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75  );.  }.  pOut->u
27d50 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b  .i = v;.  break;
27d60 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
27d70 75 6c 6c 52 6f 77 20 50 31 20 2a 20 2a 20 2a 20  ullRow P1 * * * 
27d80 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65  *.**.** Move the
27d90 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20   cursor P1 to a 
27da0 6e 75 6c 6c 20 72 6f 77 2e 20 20 41 6e 79 20 4f  null row.  Any O
27db0 50 5f 43 6f 6c 75 6d 6e 20 6f 70 65 72 61 74 69  P_Column operati
27dc0 6f 6e 73 0a 2a 2a 20 74 68 61 74 20 6f 63 63 75  ons.** that occu
27dd0 72 20 77 68 69 6c 65 20 74 68 65 20 63 75 72 73  r while the curs
27de0 6f 72 20 69 73 20 6f 6e 20 74 68 65 20 6e 75 6c  or is on the nul
27df0 6c 20 72 6f 77 20 77 69 6c 6c 20 61 6c 77 61 79  l row will alway
27e00 73 0a 2a 2a 20 77 72 69 74 65 20 61 20 4e 55 4c  s.** write a NUL
27e10 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75  L..*/.case OP_Nu
27e20 6c 6c 52 6f 77 3a 20 7b 0a 20 20 56 64 62 65 43  llRow: {.  VdbeC
27e30 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73  ursor *pC;..  as
27e40 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
27e50 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
27e60 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
27e70 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
27e80 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
27e90 21 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c  !=0 );.  pC->nul
27ea0 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 2d 3e  lRow = 1;.  pC->
27eb0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
27ec0 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28  CHE_STALE;.  if(
27ed0 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
27ee0 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 7b 0a  URTYPE_BTREE ){.
27ef0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
27f00 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  uc.pCursor!=0 );
27f10 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
27f20 65 43 6c 65 61 72 43 75 72 73 6f 72 28 70 43 2d  eClearCursor(pC-
27f30 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20  >uc.pCursor);.  
27f40 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
27f50 20 4f 70 63 6f 64 65 3a 20 4c 61 73 74 20 50 31   Opcode: Last P1
27f60 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
27f70 20 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66   The next use of
27f80 20 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f   the Rowid or Co
27f90 6c 75 6d 6e 20 6f 72 20 50 72 65 76 20 69 6e 73  lumn or Prev ins
27fa0 74 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20  truction for P1 
27fb0 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74  .** will refer t
27fc0 6f 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79  o the last entry
27fd0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
27fe0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
27ff0 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65  .** If the table
28000 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70   or index is emp
28010 74 79 20 61 6e 64 20 50 32 3e 30 2c 20 74 68 65  ty and P2>0, the
28020 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  n jump immediate
28030 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20  ly to P2..** If 
28040 50 32 20 69 73 20 30 20 6f 72 20 69 66 20 74 68  P2 is 0 or if th
28050 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
28060 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66   is not empty, f
28070 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  all through.** t
28080 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  o the following 
28090 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
280a0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
280b0 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
280c0 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d   configured to m
280d0 6f 76 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f  ove in reverse o
280e0 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68  rder,.** from th
280f0 65 20 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65  e end toward the
28100 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20   beginning.  In 
28110 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
28120 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f   cursor is.** co
28130 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20  nfigured to use 
28140 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a  Prev, not Next..
28150 2a 2a 0a 2a 2a 20 49 66 20 50 33 20 69 73 20 2d  **.** If P3 is -
28160 31 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72 73  1, then the curs
28170 6f 72 20 69 73 20 70 6f 73 69 74 69 6f 6e 65 64  or is positioned
28180 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
28190 68 65 20 62 74 72 65 65 0a 2a 2a 20 66 6f 72 20  he btree.** for 
281a0 74 68 65 20 70 75 72 70 6f 73 65 20 6f 66 20 61  the purpose of a
281b0 70 70 65 6e 64 69 6e 67 20 61 20 6e 65 77 20 65  ppending a new e
281c0 6e 74 72 79 20 6f 6e 74 6f 20 74 68 65 20 62 74  ntry onto the bt
281d0 72 65 65 2e 20 20 49 6e 20 74 68 61 74 0a 2a 2a  ree.  In that.**
281e0 20 63 61 73 65 20 50 32 20 6d 75 73 74 20 62 65   case P2 must be
281f0 20 30 2e 20 20 49 74 20 69 73 20 61 73 73 75 6d   0.  It is assum
28200 65 64 20 74 68 61 74 20 74 68 65 20 63 75 72 73  ed that the curs
28210 6f 72 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20  or is used only 
28220 66 6f 72 0a 2a 2a 20 61 70 70 65 6e 64 69 6e 67  for.** appending
28230 20 61 6e 64 20 73 6f 20 69 66 20 74 68 65 20 63   and so if the c
28240 75 72 73 6f 72 20 69 73 20 76 61 6c 69 64 2c 20  ursor is valid, 
28250 74 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20  then the cursor 
28260 6d 75 73 74 20 61 6c 72 65 61 64 79 0a 2a 2a 20  must already.** 
28270 62 65 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74  be pointing at t
28280 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 62 74  he end of the bt
28290 72 65 65 20 61 6e 64 20 73 6f 20 6e 6f 20 63 68  ree and so no ch
282a0 61 6e 67 65 73 20 61 72 65 20 6d 61 64 65 20 74  anges are made t
282b0 6f 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 2e  o.** the cursor.
282c0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 61 73 74  .*/.case OP_Last
282d0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
282e0 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  mp */.  VdbeCurs
282f0 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
28300 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
28310 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28   res;..  assert(
28320 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
28330 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
28340 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
28350 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
28360 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
28370 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
28380 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
28390 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43 72  E_BTREE );.  pCr
283a0 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72  sr = pC->uc.pCur
283b0 73 6f 72 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a  sor;.  res = 0;.
283c0 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21    assert( pCrsr!
283d0 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 73 65 65 6b  =0 );.  pC->seek
283e0 52 65 73 75 6c 74 20 3d 20 70 4f 70 2d 3e 70 33  Result = pOp->p3
283f0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
28400 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b  DEBUG.  pC->seek
28410 4f 70 20 3d 20 4f 50 5f 4c 61 73 74 3b 0a 23 65  Op = OP_Last;.#e
28420 6e 64 69 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e  ndif.  if( pOp->
28430 70 33 3d 3d 30 20 7c 7c 20 21 73 71 6c 69 74 65  p3==0 || !sqlite
28440 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61  3BtreeCursorIsVa
28450 6c 69 64 4e 4e 28 70 43 72 73 72 29 20 29 7b 0a  lidNN(pCrsr) ){.
28460 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
28470 42 74 72 65 65 4c 61 73 74 28 70 43 72 73 72 2c  BtreeLast(pCrsr,
28480 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e   &res);.    pC->
28490 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65  nullRow = (u8)re
284a0 73 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72  s;.    pC->defer
284b0 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
284c0 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
284d0 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
284e0 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67  ;.    if( rc ) g
284f0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
28500 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69 66 28 20  _error;.    if( 
28510 70 4f 70 2d 3e 70 32 3e 30 20 29 7b 0a 20 20 20  pOp->p2>0 ){.   
28520 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
28530 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
28540 20 20 20 20 69 66 28 20 72 65 73 20 29 20 67 6f      if( res ) go
28550 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
28560 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
28570 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
28580 32 3d 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 62 72  2==0 );.  }.  br
28590 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f  eak;.}.../* Opco
285a0 64 65 3a 20 53 6f 72 74 65 72 53 6f 72 74 20 50  de: SorterSort P
285b0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
285c0 20 41 66 74 65 72 20 61 6c 6c 20 72 65 63 6f 72   After all recor
285d0 64 73 20 68 61 76 65 20 62 65 65 6e 20 69 6e 73  ds have been ins
285e0 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20 53  erted into the S
285f0 6f 72 74 65 72 20 6f 62 6a 65 63 74 0a 2a 2a 20  orter object.** 
28600 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 31  identified by P1
28610 2c 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70  , invoke this op
28620 63 6f 64 65 20 74 6f 20 61 63 74 75 61 6c 6c 79  code to actually
28630 20 64 6f 20 74 68 65 20 73 6f 72 74 69 6e 67 2e   do the sorting.
28640 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  .** Jump to P2 i
28650 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72  f there are no r
28660 65 63 6f 72 64 73 20 74 6f 20 62 65 20 73 6f 72  ecords to be sor
28670 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ted..**.** This 
28680 6f 70 63 6f 64 65 20 69 73 20 61 6e 20 61 6c 69  opcode is an ali
28690 61 73 20 66 6f 72 20 4f 50 5f 53 6f 72 74 20 61  as for OP_Sort a
286a0 6e 64 20 4f 50 5f 52 65 77 69 6e 64 20 74 68 61  nd OP_Rewind tha
286b0 74 20 69 73 20 75 73 65 64 0a 2a 2a 20 66 6f 72  t is used.** for
286c0 20 53 6f 72 74 65 72 20 6f 62 6a 65 63 74 73 2e   Sorter objects.
286d0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
286e0 6f 72 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ort P1 P2 * * *.
286f0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
28700 65 20 64 6f 65 73 20 65 78 61 63 74 6c 79 20 74  e does exactly t
28710 68 65 20 73 61 6d 65 20 74 68 69 6e 67 20 61 73  he same thing as
28720 20 4f 50 5f 52 65 77 69 6e 64 20 65 78 63 65 70   OP_Rewind excep
28730 74 20 74 68 61 74 0a 2a 2a 20 69 74 20 69 6e 63  t that.** it inc
28740 72 65 6d 65 6e 74 73 20 61 6e 20 75 6e 64 6f 63  rements an undoc
28750 75 6d 65 6e 74 65 64 20 67 6c 6f 62 61 6c 20 76  umented global v
28760 61 72 69 61 62 6c 65 20 75 73 65 64 20 66 6f 72  ariable used for
28770 20 74 65 73 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20   testing..**.** 
28780 53 6f 72 74 69 6e 67 20 69 73 20 61 63 63 6f 6d  Sorting is accom
28790 70 6c 69 73 68 65 64 20 62 79 20 77 72 69 74 69  plished by writi
287a0 6e 67 20 72 65 63 6f 72 64 73 20 69 6e 74 6f 20  ng records into 
287b0 61 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 2c  a sorting index,
287c0 0a 2a 2a 20 74 68 65 6e 20 72 65 77 69 6e 64 69  .** then rewindi
287d0 6e 67 20 74 68 61 74 20 69 6e 64 65 78 20 61 6e  ng that index an
287e0 64 20 70 6c 61 79 69 6e 67 20 69 74 20 62 61 63  d playing it bac
287f0 6b 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67  k from beginning
28800 20 74 6f 0a 2a 2a 20 65 6e 64 2e 20 20 57 65 20   to.** end.  We 
28810 75 73 65 20 74 68 65 20 4f 50 5f 53 6f 72 74 20  use the OP_Sort 
28820 6f 70 63 6f 64 65 20 69 6e 73 74 65 61 64 20 6f  opcode instead o
28830 66 20 4f 50 5f 52 65 77 69 6e 64 20 74 6f 20 64  f OP_Rewind to d
28840 6f 20 74 68 65 0a 2a 2a 20 72 65 77 69 6e 64 69  o the.** rewindi
28850 6e 67 20 73 6f 20 74 68 61 74 20 74 68 65 20 67  ng so that the g
28860 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 77  lobal variable w
28870 69 6c 6c 20 62 65 20 69 6e 63 72 65 6d 65 6e 74  ill be increment
28880 65 64 20 61 6e 64 0a 2a 2a 20 72 65 67 72 65 73  ed and.** regres
28890 73 69 6f 6e 20 74 65 73 74 73 20 63 61 6e 20 64  sion tests can d
288a0 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72  etermine whether
288b0 20 6f 72 20 6e 6f 74 20 74 68 65 20 6f 70 74 69   or not the opti
288c0 6d 69 7a 65 72 20 69 73 0a 2a 2a 20 63 6f 72 72  mizer is.** corr
288d0 65 63 74 6c 79 20 6f 70 74 69 6d 69 7a 69 6e 67  ectly optimizing
288e0 20 6f 75 74 20 73 6f 72 74 73 2e 0a 2a 2f 0a 63   out sorts..*/.c
288f0 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 53 6f 72  ase OP_SorterSor
28900 74 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f  t:    /* jump */
28910 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 3a 20 7b  .case OP_Sort: {
28920 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
28930 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
28940 5f 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f  _TEST.  sqlite3_
28950 73 6f 72 74 5f 63 6f 75 6e 74 2b 2b 3b 0a 20 20  sort_count++;.  
28960 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63  sqlite3_search_c
28970 6f 75 6e 74 2d 2d 3b 0a 23 65 6e 64 69 66 0a 20  ount--;.#endif. 
28980 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c   p->aCounter[SQL
28990 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 53  ITE_STMTSTATUS_S
289a0 4f 52 54 5d 2b 2b 3b 0a 20 20 2f 2a 20 46 61 6c  ORT]++;.  /* Fal
289b0 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f  l through into O
289c0 50 5f 52 65 77 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a  P_Rewind */.}./*
289d0 20 4f 70 63 6f 64 65 3a 20 52 65 77 69 6e 64 20   Opcode: Rewind 
289e0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
289f0 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f  * The next use o
28a00 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43  f the Rowid or C
28a10 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69 6e  olumn or Next in
28a20 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31  struction for P1
28a30 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20   .** will refer 
28a40 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6e 74  to the first ent
28a50 72 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ry in the databa
28a60 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  se table or inde
28a70 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62  x..** If the tab
28a80 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65  le or index is e
28a90 6d 70 74 79 2c 20 6a 75 6d 70 20 69 6d 6d 65 64  mpty, jump immed
28aa0 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a  iately to P2..**
28ab0 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   If the table or
28ac0 20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d   index is not em
28ad0 70 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  pty, fall throug
28ae0 68 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  h to the followi
28af0 6e 67 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69  ng .** instructi
28b00 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  on..**.** This o
28b10 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65  pcode leaves the
28b20 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72   cursor configur
28b30 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f  ed to move in fo
28b40 72 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20  rward order,.** 
28b50 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
28b60 6e 67 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e  ng toward the en
28b70 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  d.  In other wor
28b80 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69  ds, the cursor i
28b90 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20  s.** configured 
28ba0 74 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74  to use Next, not
28bb0 20 50 72 65 76 2e 0a 2a 2f 0a 63 61 73 65 20 4f   Prev..*/.case O
28bc0 50 5f 52 65 77 69 6e 64 3a 20 7b 20 20 20 20 20  P_Rewind: {     
28bd0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
28be0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
28bf0 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
28c00 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20  r;.  int res;.. 
28c10 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
28c20 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
28c30 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
28c40 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
28c50 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
28c60 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
28c70 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  rt( isSorter(pC)
28c80 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  ==(pOp->opcode==
28c90 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74 29 20 29  OP_SorterSort) )
28ca0 3b 0a 20 20 72 65 73 20 3d 20 31 3b 0a 23 69 66  ;.  res = 1;.#if
28cb0 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
28cc0 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20  .  pC->seekOp = 
28cd0 4f 50 5f 52 65 77 69 6e 64 3b 0a 23 65 6e 64 69  OP_Rewind;.#endi
28ce0 66 0a 20 20 69 66 28 20 69 73 53 6f 72 74 65 72  f.  if( isSorter
28cf0 28 70 43 29 20 29 7b 0a 20 20 20 20 72 63 20 3d  (pC) ){.    rc =
28d00 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
28d10 65 72 52 65 77 69 6e 64 28 70 43 2c 20 26 72 65  erRewind(pC, &re
28d20 73 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  s);.  }else{.   
28d30 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
28d40 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
28d50 54 52 45 45 20 29 3b 0a 20 20 20 20 70 43 72 73  TREE );.    pCrs
28d60 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  r = pC->uc.pCurs
28d70 6f 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  or;.    assert( 
28d80 70 43 72 73 72 20 29 3b 0a 20 20 20 20 72 63 20  pCrsr );.    rc 
28d90 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 69  = sqlite3BtreeFi
28da0 72 73 74 28 70 43 72 73 72 2c 20 26 72 65 73 29  rst(pCrsr, &res)
28db0 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  ;.    pC->deferr
28dc0 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
28dd0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
28de0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
28df0 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20  .  }.  if( rc ) 
28e00 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
28e10 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 43 2d 3e 6e  o_error;.  pC->n
28e20 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73  ullRow = (u8)res
28e30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
28e40 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  >p2>0 && pOp->p2
28e50 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 56 64 62  <p->nOp );.  Vdb
28e60 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
28e70 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65  !=0,2);.  if( re
28e80 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  s ) goto jump_to
28e90 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  _p2;.  break;.}.
28ea0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74  ./* Opcode: Next
28eb0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
28ec0 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 63 75  **.** Advance cu
28ed0 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
28ee0 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
28ef0 20 6e 65 78 74 20 6b 65 79 2f 64 61 74 61 20 70   next key/data p
28f00 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61  air in its.** ta
28f10 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49  ble or index.  I
28f20 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d  f there are no m
28f30 6f 72 65 20 6b 65 79 2f 76 61 6c 75 65 20 70 61  ore key/value pa
28f40 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  irs then fall th
28f50 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
28f60 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
28f70 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74  ction.  But if t
28f80 68 65 20 63 75 72 73 6f 72 20 61 64 76 61 6e 63  he cursor advanc
28f90 65 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c  e was successful
28fa0 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69  ,.** jump immedi
28fb0 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a  ately to P2..**.
28fc0 2a 2a 20 54 68 65 20 4e 65 78 74 20 6f 70 63 6f  ** The Next opco
28fd0 64 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64  de is only valid
28fe0 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20 53 65   following an Se
28ff0 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20 6f 72  ekGT, SeekGE, or
29000 0a 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 20 6f 70  .** OP_Rewind op
29010 63 6f 64 65 20 75 73 65 64 20 74 6f 20 70 6f 73  code used to pos
29020 69 74 69 6f 6e 20 74 68 65 20 63 75 72 73 6f 72  ition the cursor
29030 2e 20 20 4e 65 78 74 20 69 73 20 6e 6f 74 20 61  .  Next is not a
29040 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c  llowed.** to fol
29050 6c 6f 77 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b  low SeekLT, Seek
29060 4c 45 2c 20 6f 72 20 4f 50 5f 4c 61 73 74 2e 0a  LE, or OP_Last..
29070 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72  **.** The P1 cur
29080 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20  sor must be for 
29090 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f  a real table, no
290a0 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
290b0 2e 20 20 50 31 20 6d 75 73 74 20 68 61 76 65 0a  .  P1 must have.
290c0 2a 2a 20 62 65 65 6e 20 6f 70 65 6e 65 64 20 70  ** been opened p
290d0 72 69 6f 72 20 74 6f 20 74 68 69 73 20 6f 70 63  rior to this opc
290e0 6f 64 65 20 6f 72 20 74 68 65 20 70 72 6f 67 72  ode or the progr
290f0 61 6d 20 77 69 6c 6c 20 73 65 67 66 61 75 6c 74  am will segfault
29100 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33 20 76  ..**.** The P3 v
29110 61 6c 75 65 20 69 73 20 61 20 68 69 6e 74 20 74  alue is a hint t
29120 6f 20 74 68 65 20 62 74 72 65 65 20 69 6d 70 6c  o the btree impl
29130 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 49 66 20 50  ementation. If P
29140 33 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a 20 6d 65  3==1, that.** me
29150 61 6e 73 20 50 31 20 69 73 20 61 6e 20 53 51 4c  ans P1 is an SQL
29160 20 69 6e 64 65 78 20 61 6e 64 20 74 68 61 74 20   index and that 
29170 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
29180 20 63 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e   could have been
29190 0a 2a 2a 20 6f 6d 69 74 74 65 64 20 69 66 20 74  .** omitted if t
291a0 68 61 74 20 69 6e 64 65 78 20 68 61 64 20 62 65  hat index had be
291b0 65 6e 20 75 6e 69 71 75 65 2e 20 20 50 33 20 69  en unique.  P3 i
291c0 73 20 75 73 75 61 6c 6c 79 20 30 2e 20 20 50 33  s usually 0.  P3
291d0 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 65 69   is.** always ei
291e0 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a  ther 0 or 1..**.
291f0 2a 2a 20 50 34 20 69 73 20 61 6c 77 61 79 73 20  ** P4 is always 
29200 6f 66 20 74 79 70 65 20 50 34 5f 41 44 56 41 4e  of type P4_ADVAN
29210 43 45 2e 20 54 68 65 20 66 75 6e 63 74 69 6f 6e  CE. The function
29220 20 70 6f 69 6e 74 65 72 20 70 6f 69 6e 74 73 20   pointer points 
29230 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 42 74 72  to.** sqlite3Btr
29240 65 65 4e 65 78 74 28 29 2e 0a 2a 2a 0a 2a 2a 20  eeNext()..**.** 
29250 49 66 20 50 35 20 69 73 20 70 6f 73 69 74 69 76  If P5 is positiv
29260 65 20 61 6e 64 20 74 68 65 20 6a 75 6d 70 20 69  e and the jump i
29270 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76  s taken, then ev
29280 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e  ent counter.** n
29290 75 6d 62 65 72 20 50 35 2d 31 20 69 6e 20 74 68  umber P5-1 in th
292a0 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
292b0 6d 65 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e  ment is incremen
292c0 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ted..**.** See a
292d0 6c 73 6f 3a 20 50 72 65 76 2c 20 4e 65 78 74 49  lso: Prev, NextI
292e0 66 4f 70 65 6e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  fOpen.*/./* Opco
292f0 64 65 3a 20 4e 65 78 74 49 66 4f 70 65 6e 20 50  de: NextIfOpen P
29300 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
29310 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
29320 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
29330 4e 65 78 74 20 65 78 63 65 70 74 20 74 68 61 74  Next except that
29340 20 69 66 20 63 75 72 73 6f 72 20 50 31 20 69 73   if cursor P1 is
29350 20 6e 6f 74 0a 2a 2a 20 6f 70 65 6e 20 69 74 20   not.** open it 
29360 62 65 68 61 76 65 73 20 61 20 6e 6f 2d 6f 70 2e  behaves a no-op.
29370 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .*/./* Opcode: P
29380 72 65 76 20 50 31 20 50 32 20 50 33 20 50 34 20  rev P1 P2 P3 P4 
29390 50 35 0a 2a 2a 0a 2a 2a 20 42 61 63 6b 20 75 70  P5.**.** Back up
293a0 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
293b0 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  at it points to 
293c0 74 68 65 20 70 72 65 76 69 6f 75 73 20 6b 65 79  the previous key
293d0 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20 69 74  /data pair in it
293e0 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e  s.** table or in
293f0 64 65 78 2e 20 20 49 66 20 74 68 65 72 65 20 69  dex.  If there i
29400 73 20 6e 6f 20 70 72 65 76 69 6f 75 73 20 6b 65  s no previous ke
29410 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74 68  y/value pairs th
29420 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a  en fall through.
29430 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77  ** to the follow
29440 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ing instruction.
29450 20 20 42 75 74 20 69 66 20 74 68 65 20 63 75 72    But if the cur
29460 73 6f 72 20 62 61 63 6b 75 70 20 77 61 73 20 73  sor backup was s
29470 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75  uccessful,.** ju
29480 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
29490 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 54  o P2..**.**.** T
294a0 68 65 20 50 72 65 76 20 6f 70 63 6f 64 65 20 69  he Prev opcode i
294b0 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 66 6f 6c  s only valid fol
294c0 6c 6f 77 69 6e 67 20 61 6e 20 53 65 65 6b 4c 54  lowing an SeekLT
294d0 2c 20 53 65 65 6b 4c 45 2c 20 6f 72 0a 2a 2a 20  , SeekLE, or.** 
294e0 4f 50 5f 4c 61 73 74 20 6f 70 63 6f 64 65 20 75  OP_Last opcode u
294f0 73 65 64 20 74 6f 20 70 6f 73 69 74 69 6f 6e 20  sed to position 
29500 74 68 65 20 63 75 72 73 6f 72 2e 20 20 50 72 65  the cursor.  Pre
29510 76 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64  v is not allowed
29520 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77 20 53 65  .** to follow Se
29530 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20 6f 72  ekGT, SeekGE, or
29540 20 4f 50 5f 52 65 77 69 6e 64 2e 0a 2a 2a 0a 2a   OP_Rewind..**.*
29550 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20  * The P1 cursor 
29560 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20 72 65  must be for a re
29570 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20  al table, not a 
29580 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49  pseudo-table.  I
29590 66 20 50 31 20 69 73 0a 2a 2a 20 6e 6f 74 20 6f  f P1 is.** not o
295a0 70 65 6e 20 74 68 65 6e 20 74 68 65 20 62 65 68  pen then the beh
295b0 61 76 69 6f 72 20 69 73 20 75 6e 64 65 66 69 6e  avior is undefin
295c0 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33  ed..**.** The P3
295d0 20 76 61 6c 75 65 20 69 73 20 61 20 68 69 6e 74   value is a hint
295e0 20 74 6f 20 74 68 65 20 62 74 72 65 65 20 69 6d   to the btree im
295f0 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 49 66  plementation. If
29600 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a 20   P3==1, that.** 
29610 6d 65 61 6e 73 20 50 31 20 69 73 20 61 6e 20 53  means P1 is an S
29620 51 4c 20 69 6e 64 65 78 20 61 6e 64 20 74 68 61  QL index and tha
29630 74 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  t this instructi
29640 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65 20 62 65  on could have be
29650 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64 20 69 66  en.** omitted if
29660 20 74 68 61 74 20 69 6e 64 65 78 20 68 61 64 20   that index had 
29670 62 65 65 6e 20 75 6e 69 71 75 65 2e 20 20 50 33  been unique.  P3
29680 20 69 73 20 75 73 75 61 6c 6c 79 20 30 2e 20 20   is usually 0.  
29690 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20  P3 is.** always 
296a0 65 69 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a  either 0 or 1..*
296b0 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77 61 79  *.** P4 is alway
296c0 73 20 6f 66 20 74 79 70 65 20 50 34 5f 41 44 56  s of type P4_ADV
296d0 41 4e 43 45 2e 20 54 68 65 20 66 75 6e 63 74 69  ANCE. The functi
296e0 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69 6e 74  on pointer point
296f0 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 42  s to.** sqlite3B
29700 74 72 65 65 50 72 65 76 69 6f 75 73 28 29 2e 0a  treePrevious()..
29710 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70  **.** If P5 is p
29720 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68 65 20  ositive and the 
29730 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74  jump is taken, t
29740 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65  hen event counte
29750 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31  r.** number P5-1
29760 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64   in the prepared
29770 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e   statement is in
29780 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2f 0a 2f 2a  cremented..*/./*
29790 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 49 66 4f   Opcode: PrevIfO
297a0 70 65 6e 20 50 31 20 50 32 20 50 33 20 50 34 20  pen P1 P2 P3 P4 
297b0 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  P5.**.** This op
297c0 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73 74 20  code works just 
297d0 6c 69 6b 65 20 50 72 65 76 20 65 78 63 65 70 74  like Prev except
297e0 20 74 68 61 74 20 69 66 20 63 75 72 73 6f 72 20   that if cursor 
297f0 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 70 65  P1 is not.** ope
29800 6e 20 69 74 20 62 65 68 61 76 65 73 20 61 20 6e  n it behaves a n
29810 6f 2d 6f 70 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  o-op..*/./* Opco
29820 64 65 3a 20 53 6f 72 74 65 72 4e 65 78 74 20 50  de: SorterNext P
29830 31 20 50 32 20 2a 20 2a 20 50 35 0a 2a 2a 0a 2a  1 P2 * * P5.**.*
29840 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f  * This opcode wo
29850 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f 50  rks just like OP
29860 5f 4e 65 78 74 20 65 78 63 65 70 74 20 74 68 61  _Next except tha
29870 74 20 50 31 20 6d 75 73 74 20 62 65 20 61 0a 2a  t P1 must be a.*
29880 2a 20 73 6f 72 74 65 72 20 6f 62 6a 65 63 74 20  * sorter object 
29890 66 6f 72 20 77 68 69 63 68 20 74 68 65 20 4f 50  for which the OP
298a0 5f 53 6f 72 74 65 72 53 6f 72 74 20 6f 70 63 6f  _SorterSort opco
298b0 64 65 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 69  de has been.** i
298c0 6e 76 6f 6b 65 64 2e 20 20 54 68 69 73 20 6f 70  nvoked.  This op
298d0 63 6f 64 65 20 61 64 76 61 6e 63 65 73 20 74 68  code advances th
298e0 65 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20  e cursor to the 
298f0 6e 65 78 74 20 73 6f 72 74 65 64 0a 2a 2a 20 72  next sorted.** r
29900 65 63 6f 72 64 2c 20 6f 72 20 6a 75 6d 70 73 20  ecord, or jumps 
29910 74 6f 20 50 32 20 69 66 20 74 68 65 72 65 20 61  to P2 if there a
29920 72 65 20 6e 6f 20 6d 6f 72 65 20 73 6f 72 74 65  re no more sorte
29930 64 20 72 65 63 6f 72 64 73 2e 0a 2a 2f 0a 63 61  d records..*/.ca
29940 73 65 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74  se OP_SorterNext
29950 3a 20 7b 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a  : {  /* jump */.
29960 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
29970 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20  ;.  int res;..  
29980 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
29990 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
299a0 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29  ( isSorter(pC) )
299b0 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 72  ;.  res = 0;.  r
299c0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  c = sqlite3VdbeS
299d0 6f 72 74 65 72 4e 65 78 74 28 64 62 2c 20 70 43  orterNext(db, pC
299e0 2c 20 26 72 65 73 29 3b 0a 20 20 67 6f 74 6f 20  , &res);.  goto 
299f0 6e 65 78 74 5f 74 61 69 6c 3b 0a 63 61 73 65 20  next_tail;.case 
29a00 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 3a 20 20  OP_PrevIfOpen:  
29a10 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73    /* jump */.cas
29a20 65 20 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e 3a  e OP_NextIfOpen:
29a30 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
29a40 20 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f   if( p->apCsr[pO
29a50 70 2d 3e 70 31 5d 3d 3d 30 20 29 20 62 72 65 61  p->p1]==0 ) brea
29a60 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72  k;.  /* Fall thr
29a70 6f 75 67 68 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  ough */.case OP_
29a80 50 72 65 76 3a 20 20 20 20 20 20 20 20 20 20 2f  Prev:          /
29a90 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f  * jump */.case O
29aa0 50 5f 4e 65 78 74 3a 20 20 20 20 20 20 20 20 20  P_Next:         
29ab0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73   /* jump */.  as
29ac0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
29ad0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
29ae0 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
29af0 72 74 28 20 70 4f 70 2d 3e 70 35 3c 41 72 72 61  rt( pOp->p5<Arra
29b00 79 53 69 7a 65 28 70 2d 3e 61 43 6f 75 6e 74 65  ySize(p->aCounte
29b10 72 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  r) );.  pC = p->
29b20 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
29b30 20 20 72 65 73 20 3d 20 70 4f 70 2d 3e 70 33 3b    res = pOp->p3;
29b40 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
29b50 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
29b60 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
29b70 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
29b80 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
29b90 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
29ba0 20 20 61 73 73 65 72 74 28 20 72 65 73 3d 3d 30    assert( res==0
29bb0 20 7c 7c 20 28 72 65 73 3d 3d 31 20 26 26 20 70   || (res==1 && p
29bc0 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 29 20 29  C->isTable==0) )
29bd0 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 72 65  ;.  testcase( re
29be0 73 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72 74  s==1 );.  assert
29bf0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f  ( pOp->opcode!=O
29c00 50 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 70  P_Next || pOp->p
29c10 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69  4.xAdvance==sqli
29c20 74 65 33 42 74 72 65 65 4e 65 78 74 20 29 3b 0a  te3BtreeNext );.
29c30 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
29c40 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20 7c  pcode!=OP_Prev |
29c50 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e  | pOp->p4.xAdvan
29c60 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65  ce==sqlite3Btree
29c70 50 72 65 76 69 6f 75 73 20 29 3b 0a 20 20 61 73  Previous );.  as
29c80 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
29c90 65 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e  e!=OP_NextIfOpen
29ca0 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76   || pOp->p4.xAdv
29cb0 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72  ance==sqlite3Btr
29cc0 65 65 4e 65 78 74 20 29 3b 0a 20 20 61 73 73 65  eeNext );.  asse
29cd0 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21  rt( pOp->opcode!
29ce0 3d 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 20 7c  =OP_PrevIfOpen |
29cf0 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e  | pOp->p4.xAdvan
29d00 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65  ce==sqlite3Btree
29d10 50 72 65 76 69 6f 75 73 29 3b 0a 0a 20 20 2f 2a  Previous);..  /*
29d20 20 54 68 65 20 4e 65 78 74 20 6f 70 63 6f 64 65   The Next opcode
29d30 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 61 66   is only used af
29d40 74 65 72 20 53 65 65 6b 47 54 2c 20 53 65 65 6b  ter SeekGT, Seek
29d50 47 45 2c 20 61 6e 64 20 52 65 77 69 6e 64 2e 0a  GE, and Rewind..
29d60 20 20 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70    ** The Prev op
29d70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75 73 65  code is only use
29d80 64 20 61 66 74 65 72 20 53 65 65 6b 4c 54 2c 20  d after SeekLT, 
29d90 53 65 65 6b 4c 45 2c 20 61 6e 64 20 4c 61 73 74  SeekLE, and Last
29da0 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  . */.  assert( p
29db0 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e  Op->opcode!=OP_N
29dc0 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  ext || pOp->opco
29dd0 64 65 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70 65  de!=OP_NextIfOpe
29de0 6e 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e  n.       || pC->
29df0 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47  seekOp==OP_SeekG
29e00 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d  T || pC->seekOp=
29e10 3d 4f 50 5f 53 65 65 6b 47 45 0a 20 20 20 20 20  =OP_SeekGE.     
29e20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d    || pC->seekOp=
29e30 3d 4f 50 5f 52 65 77 69 6e 64 20 7c 7c 20 70 43  =OP_Rewind || pC
29e40 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 46 6f 75  ->seekOp==OP_Fou
29e50 6e 64 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  nd);.  assert( p
29e60 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50  Op->opcode!=OP_P
29e70 72 65 76 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  rev || pOp->opco
29e80 64 65 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70 65  de!=OP_PrevIfOpe
29e90 6e 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e  n.       || pC->
29ea0 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c  seekOp==OP_SeekL
29eb0 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d  T || pC->seekOp=
29ec0 3d 4f 50 5f 53 65 65 6b 4c 45 0a 20 20 20 20 20  =OP_SeekLE.     
29ed0 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d    || pC->seekOp=
29ee0 3d 4f 50 5f 4c 61 73 74 20 29 3b 0a 0a 20 20 72  =OP_Last );..  r
29ef0 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76  c = pOp->p4.xAdv
29f00 61 6e 63 65 28 70 43 2d 3e 75 63 2e 70 43 75 72  ance(pC->uc.pCur
29f10 73 6f 72 2c 20 26 72 65 73 29 3b 0a 6e 65 78 74  sor, &res);.next
29f20 5f 74 61 69 6c 3a 0a 20 20 70 43 2d 3e 63 61 63  _tail:.  pC->cac
29f30 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
29f40 5f 53 54 41 4c 45 3b 0a 20 20 56 64 62 65 42 72  _STALE;.  VdbeBr
29f50 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 3d 3d 30  anchTaken(res==0
29f60 2c 32 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  ,2);.  if( rc ) 
29f70 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
29f80 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 72  o_error;.  if( r
29f90 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 70 43 2d  es==0 ){.    pC-
29fa0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20  >nullRow = 0;.  
29fb0 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f    p->aCounter[pO
29fc0 70 2d 3e 70 35 5d 2b 2b 3b 0a 23 69 66 64 65 66  p->p5]++;.#ifdef
29fd0 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20   SQLITE_TEST.   
29fe0 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
29ff0 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a  count++;.#endif.
2a000 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
2a010 5f 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f  _p2_and_check_fo
2a020 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d  r_interrupt;.  }
2a030 65 6c 73 65 7b 0a 20 20 20 20 70 43 2d 3e 6e 75  else{.    pC->nu
2a040 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 7d 0a 20  llRow = 1;.  }. 
2a050 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f   goto check_for_
2a060 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a  interrupt;.}../*
2a070 20 4f 70 63 6f 64 65 3a 20 49 64 78 49 6e 73 65   Opcode: IdxInse
2a080 72 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50  rt P1 P2 P3 P4 P
2a090 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  5.** Synopsis: k
2a0a0 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52  ey=r[P2].**.** R
2a0b0 65 67 69 73 74 65 72 20 50 32 20 68 6f 6c 64 73  egister P2 holds
2a0c0 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 6b 65   an SQL index ke
2a0d0 79 20 6d 61 64 65 20 75 73 69 6e 67 20 74 68 65  y made using the
2a0e0 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20 69  .** MakeRecord i
2a0f0 6e 73 74 72 75 63 74 69 6f 6e 73 2e 20 20 54 68  nstructions.  Th
2a100 69 73 20 6f 70 63 6f 64 65 20 77 72 69 74 65 73  is opcode writes
2a110 20 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74   that key.** int
2a120 6f 20 74 68 65 20 69 6e 64 65 78 20 50 31 2e 20  o the index P1. 
2a130 20 44 61 74 61 20 66 6f 72 20 74 68 65 20 65 6e   Data for the en
2a140 74 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a  try is nil..**.*
2a150 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 7a  * If P4 is not z
2a160 65 72 6f 2c 20 74 68 65 6e 20 69 74 20 69 73 20  ero, then it is 
2a170 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 76 61  the number of va
2a180 6c 75 65 73 20 69 6e 20 74 68 65 20 75 6e 70 61  lues in the unpa
2a190 63 6b 65 64 0a 2a 2a 20 6b 65 79 20 6f 66 20 72  cked.** key of r
2a1a0 65 67 28 50 32 29 2e 20 20 49 6e 20 74 68 61 74  eg(P2).  In that
2a1b0 20 63 61 73 65 2c 20 50 33 20 69 73 20 74 68 65   case, P3 is the
2a1c0 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 66 69   index of the fi
2a1d0 72 73 74 20 72 65 67 69 73 74 65 72 0a 2a 2a 20  rst register.** 
2a1e0 66 6f 72 20 74 68 65 20 75 6e 70 61 63 6b 65 64  for the unpacked
2a1f0 20 6b 65 79 2e 20 20 54 68 65 20 61 76 61 69 6c   key.  The avail
2a200 61 62 69 6c 69 74 79 20 6f 66 20 74 68 65 20 75  ability of the u
2a210 6e 70 61 63 6b 65 64 20 6b 65 79 20 63 61 6e 20  npacked key can 
2a220 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 62 65 20  sometimes.** be 
2a230 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e  an optimization.
2a240 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73  .**.** If P5 has
2a250 20 74 68 65 20 4f 50 46 4c 41 47 5f 41 50 50 45   the OPFLAG_APPE
2a260 4e 44 20 62 69 74 20 73 65 74 2c 20 74 68 61 74  ND bit set, that
2a270 20 69 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68   is a hint to th
2a280 65 20 62 2d 74 72 65 65 20 6c 61 79 65 72 0a 2a  e b-tree layer.*
2a290 2a 20 74 68 61 74 20 74 68 69 73 20 69 6e 73 65  * that this inse
2a2a0 72 74 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20  rt is likely to 
2a2b0 62 65 20 61 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a  be an append..**
2a2c0 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74 68  .** If P5 has th
2a2d0 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
2a2e0 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74   bit set, then t
2a2f0 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  he change counte
2a300 72 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e  r is.** incremen
2a310 74 65 64 20 62 79 20 74 68 69 73 20 69 6e 73 74  ted by this inst
2a320 72 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65  ruction.  If the
2a330 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
2a340 62 69 74 20 69 73 20 63 6c 65 61 72 2c 0a 2a 2a  bit is clear,.**
2a350 20 74 68 65 6e 20 74 68 65 20 63 68 61 6e 67 65   then the change
2a360 20 63 6f 75 6e 74 65 72 20 69 73 20 75 6e 63 68   counter is unch
2a370 61 6e 67 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  anged..**.** If 
2a380 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45  the OPFLAG_USESE
2a390 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 6f 66  EKRESULT flag of
2a3a0 20 50 35 20 69 73 20 73 65 74 2c 20 74 68 65 20   P5 is set, the 
2a3b0 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d  implementation m
2a3c0 69 67 68 74 0a 2a 2a 20 72 75 6e 20 66 61 73 74  ight.** run fast
2a3d0 65 72 20 62 79 20 61 76 6f 69 64 69 6e 67 20 61  er by avoiding a
2a3e0 6e 20 75 6e 6e 65 63 65 73 73 61 72 79 20 73 65  n unnecessary se
2a3f0 65 6b 20 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e  ek on cursor P1.
2a400 20 20 48 6f 77 65 76 65 72 2c 0a 2a 2a 20 74 68    However,.** th
2a410 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b  e OPFLAG_USESEEK
2a420 52 45 53 55 4c 54 20 66 6c 61 67 20 6d 75 73 74  RESULT flag must
2a430 20 6f 6e 6c 79 20 62 65 20 73 65 74 20 69 66 20   only be set if 
2a440 74 68 65 72 65 20 68 61 76 65 20 62 65 65 6e 20  there have been 
2a450 6e 6f 20 70 72 69 6f 72 0a 2a 2a 20 73 65 65 6b  no prior.** seek
2a460 73 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20  s on the cursor 
2a470 6f 72 20 69 66 20 74 68 65 20 6d 6f 73 74 20 72  or if the most r
2a480 65 63 65 6e 74 20 73 65 65 6b 20 75 73 65 64 20  ecent seek used 
2a490 61 20 6b 65 79 20 65 71 75 69 76 61 6c 65 6e 74  a key equivalent
2a4a0 0a 2a 2a 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a  .** to P2. .**.*
2a4b0 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
2a4c0 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f  on only works fo
2a4d0 72 20 69 6e 64 69 63 65 73 2e 20 20 54 68 65 20  r indices.  The 
2a4e0 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72  equivalent instr
2a4f0 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61  uction.** for ta
2a500 62 6c 65 73 20 69 73 20 4f 50 5f 49 6e 73 65 72  bles is OP_Inser
2a510 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  t..*/./* Opcode:
2a520 20 53 6f 72 74 65 72 49 6e 73 65 72 74 20 50 31   SorterInsert P1
2a530 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
2a540 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32 5d  opsis: key=r[P2]
2a550 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
2a560 50 32 20 68 6f 6c 64 73 20 61 6e 20 53 51 4c 20  P2 holds an SQL 
2a570 69 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20 75  index key made u
2a580 73 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65  sing the.** Make
2a590 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69  Record instructi
2a5a0 6f 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ons.  This opcod
2a5b0 65 20 77 72 69 74 65 73 20 74 68 61 74 20 6b 65  e writes that ke
2a5c0 79 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 73 6f  y.** into the so
2a5d0 72 74 65 72 20 50 31 2e 20 20 44 61 74 61 20 66  rter P1.  Data f
2a5e0 6f 72 20 74 68 65 20 65 6e 74 72 79 20 69 73 20  or the entry is 
2a5f0 6e 69 6c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  nil..*/.case OP_
2a600 53 6f 72 74 65 72 49 6e 73 65 72 74 3a 20 20 20  SorterInsert:   
2a610 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 63 61      /* in2 */.ca
2a620 73 65 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 3a  se OP_IdxInsert:
2a630 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 32   {        /* in2
2a640 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
2a650 20 2a 70 43 3b 0a 20 20 42 74 72 65 65 50 61 79   *pC;.  BtreePay
2a660 6c 6f 61 64 20 78 3b 0a 0a 20 20 61 73 73 65 72  load x;..  asser
2a670 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
2a680 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
2a690 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
2a6a0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
2a6b0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
2a6c0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73   );.  assert( is
2a6d0 53 6f 72 74 65 72 28 70 43 29 3d 3d 28 70 4f 70  Sorter(pC)==(pOp
2a6e0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72  ->opcode==OP_Sor
2a6f0 74 65 72 49 6e 73 65 72 74 29 20 29 3b 0a 20 20  terInsert) );.  
2a700 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
2a710 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
2a720 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn2->flags & M
2a730 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 69 66 28  EM_Blob );.  if(
2a740 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41   pOp->p5 & OPFLA
2a750 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e  G_NCHANGE ) p->n
2a760 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 61 73 73 65  Change++;.  asse
2a770 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
2a780 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
2a790 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
2a7a0 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 20  OP_SorterInsert 
2a7b0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
2a7c0 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20  >isTable==0 );. 
2a7d0 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62   rc = ExpandBlob
2a7e0 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 72 63  (pIn2);.  if( rc
2a7f0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
2a800 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66  e_to_error;.  if
2a810 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
2a820 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 20 29  P_SorterInsert )
2a830 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
2a840 65 33 56 64 62 65 53 6f 72 74 65 72 57 72 69 74  e3VdbeSorterWrit
2a850 65 28 70 43 2c 20 70 49 6e 32 29 3b 0a 20 20 7d  e(pC, pIn2);.  }
2a860 65 6c 73 65 7b 0a 20 20 20 20 78 2e 6e 4b 65 79  else{.    x.nKey
2a870 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 20 20   = pIn2->n;.    
2a880 78 2e 70 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 7a  x.pKey = pIn2->z
2a890 3b 0a 20 20 20 20 78 2e 61 4d 65 6d 20 3d 20 61  ;.    x.aMem = a
2a8a0 4d 65 6d 20 2b 20 70 4f 70 2d 3e 70 33 3b 0a 20  Mem + pOp->p3;. 
2a8b0 20 20 20 78 2e 6e 4d 65 6d 20 3d 20 28 75 31 36     x.nMem = (u16
2a8c0 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20  )pOp->p4.i;.    
2a8d0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
2a8e0 65 49 6e 73 65 72 74 28 70 43 2d 3e 75 63 2e 70  eInsert(pC->uc.p
2a8f0 43 75 72 73 6f 72 2c 20 26 78 2c 0a 20 20 20 20  Cursor, &x,.    
2a900 20 20 20 20 20 28 70 4f 70 2d 3e 70 35 20 26 20       (pOp->p5 & 
2a910 28 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 7c 4f  (OPFLAG_APPEND|O
2a920 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49  PFLAG_SAVEPOSITI
2a930 4f 4e 29 29 2c 20 0a 20 20 20 20 20 20 20 20 28  ON)), .        (
2a940 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
2a950 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 29  G_USESEEKRESULT)
2a960 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c   ? pC->seekResul
2a970 74 20 3a 20 30 29 0a 20 20 20 20 20 20 20 20 29  t : 0).        )
2a980 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
2a990 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
2a9a0 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e 63  ==0 );.    pC->c
2a9b0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
2a9c0 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20  HE_STALE;.  }.  
2a9d0 69 66 28 20 72 63 29 20 67 6f 74 6f 20 61 62 6f  if( rc) goto abo
2a9e0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2a9f0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2aa00 4f 70 63 6f 64 65 3a 20 49 64 78 44 65 6c 65 74  Opcode: IdxDelet
2aa10 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
2aa20 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
2aa30 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 54  r[P2@P3].**.** T
2aa40 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50 33  he content of P3
2aa50 20 72 65 67 69 73 74 65 72 73 20 73 74 61 72 74   registers start
2aa60 69 6e 67 20 61 74 20 72 65 67 69 73 74 65 72 20  ing at register 
2aa70 50 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e  P2 form.** an un
2aa80 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
2aa90 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65  . This opcode re
2aaa0 6d 6f 76 65 73 20 74 68 61 74 20 65 6e 74 72 79  moves that entry
2aab0 20 66 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69 6e   from the .** in
2aac0 64 65 78 20 6f 70 65 6e 65 64 20 62 79 20 63 75  dex opened by cu
2aad0 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65  rsor P1..*/.case
2aae0 20 4f 50 5f 49 64 78 44 65 6c 65 74 65 3a 20 7b   OP_IdxDelete: {
2aaf0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
2ab00 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
2ab10 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  Crsr;.  int res;
2ab20 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
2ab30 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  d r;..  assert( 
2ab40 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 61  pOp->p3>0 );.  a
2ab50 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
2ab60 20 26 26 20 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d   && pOp->p2+pOp-
2ab70 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p3<=(p->nMem+1 
2ab80 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  - p->nCursor)+1 
2ab90 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
2aba0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
2abb0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
2abc0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
2abd0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2abe0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
2abf0 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
2ac00 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
2ac10 52 45 45 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  REE );.  pCrsr =
2ac20 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b   pC->uc.pCursor;
2ac30 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72  .  assert( pCrsr
2ac40 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
2ac50 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20   pOp->p5==0 );. 
2ac60 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
2ac70 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72 2e  ->pKeyInfo;.  r.
2ac80 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f  nField = (u16)pO
2ac90 70 2d 3e 70 33 3b 0a 20 20 72 2e 64 65 66 61 75  p->p3;.  r.defau
2aca0 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 72 2e 61  lt_rc = 0;.  r.a
2acb0 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
2acc0 3e 70 32 5d 3b 0a 20 20 72 63 20 3d 20 73 71 6c  >p2];.  rc = sql
2acd0 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
2ace0 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20 26  npacked(pCrsr, &
2acf0 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a  r, 0, 0, &res);.
2ad00 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
2ad10 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2ad20 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 3d 3d 30  or;.  if( res==0
2ad30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
2ad40 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65 28  ite3BtreeDelete(
2ad50 70 43 72 73 72 2c 20 42 54 52 45 45 5f 41 55 58  pCrsr, BTREE_AUX
2ad60 44 45 4c 45 54 45 29 3b 0a 20 20 20 20 69 66 28  DELETE);.    if(
2ad70 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
2ad80 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
2ad90 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d   }.  assert( pC-
2ada0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
2adb0 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68  =0 );.  pC->cach
2adc0 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
2add0 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 73 65 65  STALE;.  pC->see
2ade0 6b 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20 62  kResult = 0;.  b
2adf0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2ae00 64 65 3a 20 53 65 65 6b 20 50 31 20 2a 20 50 33  de: Seek P1 * P3
2ae10 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
2ae20 73 3a 20 4d 6f 76 65 20 50 33 20 74 6f 20 50 31  s: Move P3 to P1
2ae30 2e 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 50 31 20  .rowid.**.** P1 
2ae40 69 73 20 61 6e 20 6f 70 65 6e 20 69 6e 64 65 78  is an open index
2ae50 20 63 75 72 73 6f 72 20 61 6e 64 20 50 33 20 69   cursor and P3 i
2ae60 73 20 61 20 63 75 72 73 6f 72 20 6f 6e 20 74 68  s a cursor on th
2ae70 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a  e corresponding.
2ae80 2a 2a 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20  ** table.  This 
2ae90 6f 70 63 6f 64 65 20 64 6f 65 73 20 61 20 64 65  opcode does a de
2aea0 66 65 72 72 65 64 20 73 65 65 6b 20 6f 66 20 74  ferred seek of t
2aeb0 68 65 20 50 33 20 74 61 62 6c 65 20 63 75 72 73  he P3 table curs
2aec0 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20 72 6f 77  or.** to the row
2aed0 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64   that correspond
2aee0 73 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74  s to the current
2aef0 20 72 6f 77 20 6f 66 20 50 31 2e 0a 2a 2a 0a 2a   row of P1..**.*
2af00 2a 20 54 68 69 73 20 69 73 20 61 20 64 65 66 65  * This is a defe
2af10 72 72 65 64 20 73 65 65 6b 2e 20 20 4e 6f 74 68  rred seek.  Noth
2af20 69 6e 67 20 61 63 74 75 61 6c 6c 79 20 68 61 70  ing actually hap
2af30 70 65 6e 73 20 75 6e 74 69 6c 0a 2a 2a 20 74 68  pens until.** th
2af40 65 20 63 75 72 73 6f 72 20 69 73 20 75 73 65 64  e cursor is used
2af50 20 74 6f 20 72 65 61 64 20 61 20 72 65 63 6f 72   to read a recor
2af60 64 2e 20 20 54 68 61 74 20 77 61 79 2c 20 69 66  d.  That way, if
2af70 20 6e 6f 20 72 65 61 64 73 0a 2a 2a 20 6f 63 63   no reads.** occ
2af80 75 72 2c 20 6e 6f 20 75 6e 6e 65 63 65 73 73 61  ur, no unnecessa
2af90 72 79 20 49 2f 4f 20 68 61 70 70 65 6e 73 2e 0a  ry I/O happens..
2afa0 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20  **.** P4 may be 
2afb0 61 6e 20 61 72 72 61 79 20 6f 66 20 69 6e 74 65  an array of inte
2afc0 67 65 72 73 20 28 74 79 70 65 20 50 34 5f 49 4e  gers (type P4_IN
2afd0 54 41 52 52 41 59 29 20 63 6f 6e 74 61 69 6e 69  TARRAY) containi
2afe0 6e 67 0a 2a 2a 20 6f 6e 65 20 65 6e 74 72 79 20  ng.** one entry 
2aff0 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  for each column 
2b000 69 6e 20 74 68 65 20 50 33 20 74 61 62 6c 65 2e  in the P3 table.
2b010 20 20 49 66 20 61 72 72 61 79 20 65 6e 74 72 79    If array entry
2b020 20 61 28 69 29 0a 2a 2a 20 69 73 20 6e 6f 6e 2d   a(i).** is non-
2b030 7a 65 72 6f 2c 20 74 68 65 6e 20 72 65 61 64 69  zero, then readi
2b040 6e 67 20 63 6f 6c 75 6d 6e 20 61 28 69 29 2d 31  ng column a(i)-1
2b050 20 66 72 6f 6d 20 63 75 72 73 6f 72 20 50 33 20   from cursor P3 
2b060 69 73 20 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e  is .** equivalen
2b070 74 20 74 6f 20 70 65 72 66 6f 72 6d 69 6e 67 20  t to performing 
2b080 74 68 65 20 64 65 66 65 72 72 65 64 20 73 65 65  the deferred see
2b090 6b 20 61 6e 64 20 74 68 65 6e 20 72 65 61 64 69  k and then readi
2b0a0 6e 67 20 63 6f 6c 75 6d 6e 20 69 20 0a 2a 2a 20  ng column i .** 
2b0b0 66 72 6f 6d 20 50 31 2e 20 20 54 68 69 73 20 69  from P1.  This i
2b0c0 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 73 74  nformation is st
2b0d0 6f 72 65 64 20 69 6e 20 50 33 20 61 6e 64 20 75  ored in P3 and u
2b0e0 73 65 64 20 74 6f 20 72 65 64 69 72 65 63 74 0a  sed to redirect.
2b0f0 2a 2a 20 72 65 61 64 73 20 61 67 61 69 6e 73 74  ** reads against
2b100 20 50 33 20 6f 76 65 72 20 74 6f 20 50 31 2c 20   P3 over to P1, 
2b110 74 68 75 73 20 70 6f 73 73 69 62 6c 79 20 61 76  thus possibly av
2b120 6f 69 64 69 6e 67 20 74 68 65 20 6e 65 65 64 20  oiding the need 
2b130 74 6f 0a 2a 2a 20 73 65 65 6b 20 61 6e 64 20 72  to.** seek and r
2b140 65 61 64 20 63 75 72 73 6f 72 20 50 33 2e 0a 2a  ead cursor P3..*
2b150 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  /./* Opcode: Idx
2b160 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20  Rowid P1 P2 * * 
2b170 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
2b180 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a  [P2]=rowid.**.**
2b190 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69   Write into regi
2b1a0 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67  ster P2 an integ
2b1b0 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20  er which is the 
2b1c0 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68  last entry in th
2b1d0 65 20 72 65 63 6f 72 64 20 61 74 0a 2a 2a 20 74  e record at.** t
2b1e0 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e  he end of the in
2b1f0 64 65 78 20 6b 65 79 20 70 6f 69 6e 74 65 64 20  dex key pointed 
2b200 74 6f 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e  to by cursor P1.
2b210 20 20 54 68 69 73 20 69 6e 74 65 67 65 72 20 73    This integer s
2b220 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 74 68 65 20  hould be.** the 
2b230 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62  rowid of the tab
2b240 6c 65 20 65 6e 74 72 79 20 74 6f 20 77 68 69 63  le entry to whic
2b250 68 20 74 68 69 73 20 69 6e 64 65 78 20 65 6e 74  h this index ent
2b260 72 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a  ry points..**.**
2b270 20 53 65 65 20 61 6c 73 6f 3a 20 52 6f 77 69 64   See also: Rowid
2b280 2c 20 4d 61 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f  , MakeRecord..*/
2b290 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 3a 0a 63  .case OP_Seek:.c
2b2a0 61 73 65 20 4f 50 5f 49 64 78 52 6f 77 69 64 3a  ase OP_IdxRowid:
2b2b0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
2b2c0 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62  /* out2 */.  Vdb
2b2d0 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20  eCursor *pC;    
2b2e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
2b2f0 68 65 20 50 31 20 69 6e 64 65 78 20 63 75 72 73  he P1 index curs
2b300 6f 72 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  or */.  VdbeCurs
2b310 6f 72 20 2a 70 54 61 62 43 75 72 3b 20 20 20 20  or *pTabCur;    
2b320 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 32         /* The P2
2b330 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20 28 4f   table cursor (O
2b340 50 5f 53 65 65 6b 20 6f 6e 6c 79 29 20 2a 2f 0a  P_Seek only) */.
2b350 20 20 69 36 34 20 72 6f 77 69 64 3b 20 20 20 20    i64 rowid;    
2b360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b370 20 2f 2a 20 52 6f 77 69 64 20 74 68 61 74 20 50   /* Rowid that P
2b380 31 20 63 75 72 72 65 6e 74 20 70 6f 69 6e 74 73  1 current points
2b390 20 74 6f 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74   to */..  assert
2b3a0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
2b3b0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
2b3c0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
2b3d0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
2b3e0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
2b3f0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
2b400 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
2b410 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73  PE_BTREE );.  as
2b420 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75  sert( pC->uc.pCu
2b430 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73  rsor!=0 );.  ass
2b440 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
2b450 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
2b460 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
2b470 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  eto==0 );.  asse
2b480 72 74 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77  rt( !pC->nullRow
2b490 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
2b4a0 3d 4f 50 5f 49 64 78 52 6f 77 69 64 20 29 3b 0a  =OP_IdxRowid );.
2b4b0 0a 20 20 2f 2a 20 54 68 65 20 49 64 78 52 6f 77  .  /* The IdxRow
2b4c0 69 64 20 61 6e 64 20 53 65 65 6b 20 6f 70 63 6f  id and Seek opco
2b4d0 64 65 73 20 61 72 65 20 63 6f 6d 62 69 6e 65 64  des are combined
2b4e0 20 62 65 63 61 75 73 65 20 6f 66 20 74 68 65 20   because of the 
2b4f0 63 6f 6d 6d 6f 6e 61 6c 69 74 79 0a 20 20 2a 2a  commonality.  **
2b500 20 6f 66 20 73 71 6c 69 74 65 33 56 64 62 65 43   of sqlite3VdbeC
2b510 75 72 73 6f 72 52 65 73 74 6f 72 65 28 29 20 61  ursorRestore() a
2b520 6e 64 20 73 71 6c 69 74 65 33 56 64 62 65 49 64  nd sqlite3VdbeId
2b530 78 52 6f 77 69 64 28 29 2e 20 2a 2f 0a 20 20 72  xRowid(). */.  r
2b540 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
2b550 75 72 73 6f 72 52 65 73 74 6f 72 65 28 70 43 29  ursorRestore(pC)
2b560 3b 0a 0a 20 20 2f 2a 20 73 71 6c 69 74 65 33 56  ;..  /* sqlite3V
2b570 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28  beCursorRestore(
2b580 29 20 63 61 6e 20 6f 6e 6c 79 20 66 61 69 6c 20  ) can only fail 
2b590 69 66 20 74 68 65 20 72 65 63 6f 72 64 20 68 61  if the record ha
2b5a0 73 20 62 65 65 6e 20 64 65 6c 65 74 65 64 0a 20  s been deleted. 
2b5b0 20 2a 2a 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64   ** out from und
2b5c0 65 72 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20  er the cursor.  
2b5d0 54 68 61 74 20 77 69 6c 6c 20 6e 65 76 65 72 20  That will never 
2b5e0 68 61 70 70 65 6e 73 20 66 6f 72 20 61 6e 20 49  happens for an I
2b5f0 64 78 52 6f 77 69 64 0a 20 20 2a 2a 20 6f 72 20  dxRowid.  ** or 
2b600 53 65 65 6b 20 6f 70 63 6f 64 65 20 2a 2f 0a 20  Seek opcode */. 
2b610 20 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53   if( NEVER(rc!=S
2b620 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f  QLITE_OK) ) goto
2b630 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2b640 72 6f 72 3b 0a 0a 20 20 69 66 28 20 21 70 43 2d  ror;..  if( !pC-
2b650 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
2b660 72 6f 77 69 64 20 3d 20 30 3b 20 20 2f 2a 20 4e  rowid = 0;  /* N
2b670 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79  ot needed.  Only
2b680 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65   used to silence
2b690 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20   a warning. */. 
2b6a0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
2b6b0 64 62 65 49 64 78 52 6f 77 69 64 28 64 62 2c 20  dbeIdxRowid(db, 
2b6c0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
2b6d0 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 69 66 28  &rowid);.    if(
2b6e0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
2b6f0 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  {.      goto abo
2b700 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2b710 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70  .    }.    if( p
2b720 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53  Op->opcode==OP_S
2b730 65 65 6b 20 29 7b 0a 20 20 20 20 20 20 61 73 73  eek ){.      ass
2b740 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20  ert( pOp->p3>=0 
2b750 26 26 20 70 4f 70 2d 3e 70 33 3c 70 2d 3e 6e 43  && pOp->p3<p->nC
2b760 75 72 73 6f 72 20 29 3b 0a 20 20 20 20 20 20 70  ursor );.      p
2b770 54 61 62 43 75 72 20 3d 20 70 2d 3e 61 70 43 73  TabCur = p->apCs
2b780 72 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  r[pOp->p3];.    
2b790 20 20 61 73 73 65 72 74 28 20 70 54 61 62 43 75    assert( pTabCu
2b7a0 72 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73  r!=0 );.      as
2b7b0 73 65 72 74 28 20 70 54 61 62 43 75 72 2d 3e 65  sert( pTabCur->e
2b7c0 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
2b7d0 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20 20 20  _BTREE );.      
2b7e0 61 73 73 65 72 74 28 20 70 54 61 62 43 75 72 2d  assert( pTabCur-
2b7f0 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29  >uc.pCursor!=0 )
2b800 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
2b810 70 54 61 62 43 75 72 2d 3e 69 73 54 61 62 6c 65  pTabCur->isTable
2b820 20 29 3b 0a 20 20 20 20 20 20 70 54 61 62 43 75   );.      pTabCu
2b830 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a  r->nullRow = 0;.
2b840 20 20 20 20 20 20 70 54 61 62 43 75 72 2d 3e 6d        pTabCur->m
2b850 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20 72 6f  ovetoTarget = ro
2b860 77 69 64 3b 0a 20 20 20 20 20 20 70 54 61 62 43  wid;.      pTabC
2b870 75 72 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  ur->deferredMove
2b880 74 6f 20 3d 20 31 3b 0a 20 20 20 20 20 20 61 73  to = 1;.      as
2b890 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
2b8a0 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 7c  e==P4_INTARRAY |
2b8b0 7c 20 70 4f 70 2d 3e 70 34 2e 61 69 3d 3d 30 20  | pOp->p4.ai==0 
2b8c0 29 3b 0a 20 20 20 20 20 20 70 54 61 62 43 75 72  );.      pTabCur
2b8d0 2d 3e 61 41 6c 74 4d 61 70 20 3d 20 70 4f 70 2d  ->aAltMap = pOp-
2b8e0 3e 70 34 2e 61 69 3b 0a 20 20 20 20 20 20 70 54  >p4.ai;.      pT
2b8f0 61 62 43 75 72 2d 3e 70 41 6c 74 43 75 72 73 6f  abCur->pAltCurso
2b900 72 20 3d 20 70 43 3b 0a 20 20 20 20 7d 65 6c 73  r = pC;.    }els
2b910 65 7b 0a 20 20 20 20 20 20 70 4f 75 74 20 3d 20  e{.      pOut = 
2b920 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
2b930 2c 20 70 4f 70 29 3b 0a 20 20 20 20 20 20 70 4f  , pOp);.      pO
2b940 75 74 2d 3e 75 2e 69 20 3d 20 72 6f 77 69 64 3b  ut->u.i = rowid;
2b950 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
2b960 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
2b970 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 52  >opcode==OP_IdxR
2b980 6f 77 69 64 20 29 3b 0a 20 20 20 20 73 71 6c 69  owid );.    sqli
2b990 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
2b9a0 6c 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  l(&aMem[pOp->p2]
2b9b0 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
2b9c0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  }../* Opcode: Id
2b9d0 78 47 45 20 50 31 20 50 32 20 50 33 20 50 34 20  xGE P1 P2 P3 P4 
2b9e0 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
2b9f0 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
2ba00 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74  ** The P4 regist
2ba10 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e  er values beginn
2ba20 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d  ing with P3 form
2ba30 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
2ba40 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20  ex .** key that 
2ba50 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52  omits the PRIMAR
2ba60 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65 20  Y KEY.  Compare 
2ba70 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61  this key value a
2ba80 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78  gainst the index
2ba90 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20   .** that P1 is 
2baa0 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
2bab0 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20  ng to, ignoring 
2bac0 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
2bad0 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69 65  or ROWID .** fie
2bae0 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64 2e 0a  lds at the end..
2baf0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
2bb00 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 67  index entry is g
2bb10 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65  reater than or e
2bb20 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
2bb30 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75  value.** then ju
2bb40 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72  mp to P2.  Other
2bb50 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67  wise fall throug
2bb60 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
2bb70 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  struction..*/./*
2bb80 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 54 20 50   Opcode: IdxGT P
2bb90 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
2bba0 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
2bbb0 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68  [P3@P4].**.** Th
2bbc0 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61  e P4 register va
2bbd0 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77  lues beginning w
2bbe0 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75  ith P3 form an u
2bbf0 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a  npacked index .*
2bc00 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73  * key that omits
2bc10 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
2bc20 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20  .  Compare this 
2bc30 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73  key value agains
2bc40 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20  t the index .** 
2bc50 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65  that P1 is curre
2bc60 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f  ntly pointing to
2bc70 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50  , ignoring the P
2bc80 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f  RIMARY KEY or RO
2bc90 57 49 44 20 0a 2a 2a 20 66 69 65 6c 64 73 20 61  WID .** fields a
2bca0 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a  t the end..**.**
2bcb0 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78   If the P1 index
2bcc0 20 65 6e 74 72 79 20 69 73 20 67 72 65 61 74 65   entry is greate
2bcd0 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76  r than the key v
2bce0 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d  alue.** then jum
2bcf0 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72 77  p to P2.  Otherw
2bd00 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ise fall through
2bd10 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
2bd20 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  truction..*/./* 
2bd30 4f 70 63 6f 64 65 3a 20 49 64 78 4c 54 20 50 31  Opcode: IdxLT P1
2bd40 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
2bd50 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
2bd60 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65  P3@P4].**.** The
2bd70 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c   P4 register val
2bd80 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ues beginning wi
2bd90 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e  th P3 form an un
2bda0 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a  packed index .**
2bdb0 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20   key that omits 
2bdc0 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
2bdd0 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61  or ROWID.  Compa
2bde0 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75  re this key valu
2bdf0 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68 65  e against.** the
2be00 20 69 6e 64 65 78 20 74 68 61 74 20 50 31 20 69   index that P1 i
2be10 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
2be20 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e  ting to, ignorin
2be30 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  g the PRIMARY KE
2be40 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e  Y or.** ROWID on
2be50 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a   the P1 index..*
2be60 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69  *.** If the P1 i
2be70 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c 65  ndex entry is le
2be80 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20  ss than the key 
2be90 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70 20  value then jump 
2bea0 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68 65 72 77  to P2..** Otherw
2beb0 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ise fall through
2bec0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
2bed0 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  truction..*/./* 
2bee0 4f 70 63 6f 64 65 3a 20 49 64 78 4c 45 20 50 31  Opcode: IdxLE P1
2bef0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
2bf00 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
2bf10 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65  P3@P4].**.** The
2bf20 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c   P4 register val
2bf30 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ues beginning wi
2bf40 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e  th P3 form an un
2bf50 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a  packed index .**
2bf60 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20   key that omits 
2bf70 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
2bf80 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61  or ROWID.  Compa
2bf90 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75  re this key valu
2bfa0 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68 65  e against.** the
2bfb0 20 69 6e 64 65 78 20 74 68 61 74 20 50 31 20 69   index that P1 i
2bfc0 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
2bfd0 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e  ting to, ignorin
2bfe0 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  g the PRIMARY KE
2bff0 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e  Y or.** ROWID on
2c000 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a   the P1 index..*
2c010 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69  *.** If the P1 i
2c020 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c 65  ndex entry is le
2c030 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
2c040 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75   to the key valu
2c050 65 20 74 68 65 6e 20 6a 75 6d 70 0a 2a 2a 20 74  e then jump.** t
2c060 6f 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 20  o P2. Otherwise 
2c070 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
2c080 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
2c090 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
2c0a0 5f 49 64 78 4c 45 3a 20 20 20 20 20 20 20 20 20  _IdxLE:         
2c0b0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65   /* jump */.case
2c0c0 20 4f 50 5f 49 64 78 47 54 3a 20 20 20 20 20 20   OP_IdxGT:      
2c0d0 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63      /* jump */.c
2c0e0 61 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20 20 20  ase OP_IdxLT:   
2c0f0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
2c100 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 45 3a  /.case OP_IdxGE:
2c110 20 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d    {       /* jum
2c120 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  p */.  VdbeCurso
2c130 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73  r *pC;.  int res
2c140 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
2c150 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28  rd r;..  assert(
2c160 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
2c170 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
2c180 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
2c190 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
2c1a0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
2c1b0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
2c1c0 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20 61  isOrdered );.  a
2c1d0 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
2c1e0 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
2c1f0 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  EE );.  assert( 
2c200 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d  pC->uc.pCursor!=
2c210 30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  0);.  assert( pC
2c220 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
2c230 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
2c240 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70   pOp->p5==0 || p
2c250 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 61  Op->p5==1 );.  a
2c260 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
2c270 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
2c280 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
2c290 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72  C->pKeyInfo;.  r
2c2a0 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70  .nField = (u16)p
2c2b0 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 69 66 28 20  Op->p4.i;.  if( 
2c2c0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3c 4f 50 5f 49  pOp->opcode<OP_I
2c2d0 64 78 4c 54 20 29 7b 0a 20 20 20 20 61 73 73 65  dxLT ){.    asse
2c2e0 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
2c2f0 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c 20 70 4f 70  =OP_IdxLE || pOp
2c300 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
2c310 47 54 20 29 3b 0a 20 20 20 20 72 2e 64 65 66 61  GT );.    r.defa
2c320 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20 7d  ult_rc = -1;.  }
2c330 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
2c340 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
2c350 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d 3e  P_IdxGE || pOp->
2c360 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54  opcode==OP_IdxLT
2c370 20 29 3b 0a 20 20 20 20 72 2e 64 65 66 61 75 6c   );.    r.defaul
2c380 74 5f 72 63 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  t_rc = 0;.  }.  
2c390 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70  r.aMem = &aMem[p
2c3a0 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20  Op->p3];.#ifdef 
2c3b0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 7b  SQLITE_DEBUG.  {
2c3c0 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b   int i; for(i=0;
2c3d0 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b   i<r.nField; i++
2c3e0 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56  ) assert( memIsV
2c3f0 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29  alid(&r.aMem[i])
2c400 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 72   ); }.#endif.  r
2c410 65 73 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20  es = 0;  /* Not 
2c420 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73  needed.  Only us
2c430 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20  ed to silence a 
2c440 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63  warning. */.  rc
2c450 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64   = sqlite3VdbeId
2c460 78 4b 65 79 43 6f 6d 70 61 72 65 28 64 62 2c 20  xKeyCompare(db, 
2c470 70 43 2c 20 26 72 2c 20 26 72 65 73 29 3b 0a 20  pC, &r, &res);. 
2c480 20 61 73 73 65 72 74 28 20 28 4f 50 5f 49 64 78   assert( (OP_Idx
2c490 4c 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78 4c 54  LE&1)==(OP_IdxLT
2c4a0 26 31 29 20 26 26 20 28 4f 50 5f 49 64 78 47 45  &1) && (OP_IdxGE
2c4b0 26 31 29 3d 3d 28 4f 50 5f 49 64 78 47 54 26 31  &1)==(OP_IdxGT&1
2c4c0 29 20 29 3b 0a 20 20 69 66 28 20 28 70 4f 70 2d  ) );.  if( (pOp-
2c4d0 3e 6f 70 63 6f 64 65 26 31 29 3d 3d 28 4f 50 5f  >opcode&1)==(OP_
2c4e0 49 64 78 4c 54 26 31 29 20 29 7b 0a 20 20 20 20  IdxLT&1) ){.    
2c4f0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
2c500 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c  ode==OP_IdxLE ||
2c510 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
2c520 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20 20 72 65  _IdxLT );.    re
2c530 73 20 3d 20 2d 72 65 73 3b 0a 20 20 7d 65 6c 73  s = -res;.  }els
2c540 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
2c550 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
2c560 64 78 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  dxGE || pOp->opc
2c570 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b  ode==OP_IdxGT );
2c580 0a 20 20 20 20 72 65 73 2b 2b 3b 0a 20 20 7d 0a  .    res++;.  }.
2c590 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
2c5a0 6e 28 72 65 73 3e 30 2c 32 29 3b 0a 20 20 69 66  n(res>0,2);.  if
2c5b0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
2c5c0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2c5d0 20 20 69 66 28 20 72 65 73 3e 30 20 29 20 67 6f    if( res>0 ) go
2c5e0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
2c5f0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2c600 63 6f 64 65 3a 20 44 65 73 74 72 6f 79 20 50 31  code: Destroy P1
2c610 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
2c620 20 44 65 6c 65 74 65 20 61 6e 20 65 6e 74 69 72   Delete an entir
2c630 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
2c640 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20   or index whose 
2c650 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 74 68 65  root page in the
2c660 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c   database.** fil
2c670 65 20 69 73 20 67 69 76 65 6e 20 62 79 20 50 31  e is given by P1
2c680 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c  ..**.** The tabl
2c690 65 20 62 65 69 6e 67 20 64 65 73 74 72 6f 79 65  e being destroye
2c6a0 64 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e  d is in the main
2c6b0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
2c6c0 66 20 50 33 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20  f P3==0.  If.** 
2c6d0 50 33 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74  P3==1 then the t
2c6e0 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72  able to be clear
2c6f0 20 69 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c   is in the auxil
2c700 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69  iary database fi
2c710 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73  le.** that is us
2c720 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c  ed to store tabl
2c730 65 73 20 63 72 65 61 74 65 20 75 73 69 6e 67 20  es create using 
2c740 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59  CREATE TEMPORARY
2c750 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66   TABLE..**.** If
2c760 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20 65   AUTOVACUUM is e
2c770 6e 61 62 6c 65 64 20 74 68 65 6e 20 69 74 20 69  nabled then it i
2c780 73 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20  s possible that 
2c790 61 6e 6f 74 68 65 72 20 72 6f 6f 74 20 70 61 67  another root pag
2c7a0 65 0a 2a 2a 20 6d 69 67 68 74 20 62 65 20 6d 6f  e.** might be mo
2c7b0 76 65 64 20 69 6e 74 6f 20 74 68 65 20 6e 65 77  ved into the new
2c7c0 6c 79 20 64 65 6c 65 74 65 64 20 72 6f 6f 74 20  ly deleted root 
2c7d0 70 61 67 65 20 69 6e 20 6f 72 64 65 72 20 74 6f  page in order to
2c7e0 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f   keep all.** roo
2c7f0 74 20 70 61 67 65 73 20 63 6f 6e 74 69 67 75 6f  t pages contiguo
2c800 75 73 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e  us at the beginn
2c810 69 6e 67 20 6f 66 20 74 68 65 20 64 61 74 61 62  ing of the datab
2c820 61 73 65 2e 20 20 54 68 65 20 66 6f 72 6d 65 72  ase.  The former
2c830 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 74 68 65  .** value of the
2c840 20 72 6f 6f 74 20 70 61 67 65 20 74 68 61 74 20   root page that 
2c850 6d 6f 76 65 64 20 2d 20 69 74 73 20 76 61 6c 75  moved - its valu
2c860 65 20 62 65 66 6f 72 65 20 74 68 65 20 6d 6f 76  e before the mov
2c870 65 20 6f 63 63 75 72 72 65 64 20 2d 0a 2a 2a 20  e occurred -.** 
2c880 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
2c890 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 6e 6f  ister P2.  If no
2c8a0 20 70 61 67 65 20 0a 2a 2a 20 6d 6f 76 65 6d 65   page .** moveme
2c8b0 6e 74 20 77 61 73 20 72 65 71 75 69 72 65 64 20  nt was required 
2c8c0 28 62 65 63 61 75 73 65 20 74 68 65 20 74 61 62  (because the tab
2c8d0 6c 65 20 62 65 69 6e 67 20 64 72 6f 70 70 65 64  le being dropped
2c8e0 20 77 61 73 20 61 6c 72 65 61 64 79 20 0a 2a 2a   was already .**
2c8f0 20 74 68 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e   the last one in
2c900 20 74 68 65 20 64 61 74 61 62 61 73 65 29 20 74   the database) t
2c910 68 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74  hen a zero is st
2c920 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
2c930 20 50 32 2e 0a 2a 2a 20 49 66 20 41 55 54 4f 56   P2..** If AUTOV
2c940 41 43 55 55 4d 20 69 73 20 64 69 73 61 62 6c 65  ACUUM is disable
2c950 64 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73  d then a zero is
2c960 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
2c970 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65  ter P2..**.** Se
2c980 65 20 61 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f  e also: Clear.*/
2c990 0a 63 61 73 65 20 4f 50 5f 44 65 73 74 72 6f 79  .case OP_Destroy
2c9a0 3a 20 7b 20 20 20 20 20 2f 2a 20 6f 75 74 32 20  : {     /* out2 
2c9b0 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f 76 65 64 3b  */.  int iMoved;
2c9c0 0a 20 20 69 6e 74 20 69 44 62 3b 0a 0a 20 20 61  .  int iDb;..  a
2c9d0 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
2c9e0 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ly==0 );.  asser
2c9f0 74 28 20 70 4f 70 2d 3e 70 31 3e 31 20 29 3b 0a  t( pOp->p1>1 );.
2ca00 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
2ca10 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
2ca20 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
2ca30 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28   MEM_Null;.  if(
2ca40 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 20 3e   db->nVdbeRead >
2ca50 20 64 62 2d 3e 6e 56 44 65 73 74 72 6f 79 2b 31   db->nVDestroy+1
2ca60 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
2ca70 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20  ITE_LOCKED;.    
2ca80 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d  p->errorAction =
2ca90 20 4f 45 5f 41 62 6f 72 74 3b 0a 20 20 20 20 67   OE_Abort;.    g
2caa0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2cab0 5f 65 72 72 6f 72 3b 0a 20 20 7d 65 6c 73 65 7b  _error;.  }else{
2cac0 0a 20 20 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e  .    iDb = pOp->
2cad0 70 33 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  p3;.    assert( 
2cae0 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
2caf0 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b  reeMask, iDb) );
2cb00 0a 20 20 20 20 69 4d 6f 76 65 64 20 3d 20 30 3b  .    iMoved = 0;
2cb10 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e    /* Not needed.
2cb20 20 20 4f 6e 6c 79 20 74 6f 20 73 69 6c 65 6e 63    Only to silenc
2cb30 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a  e a warning. */.
2cb40 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2cb50 42 74 72 65 65 44 72 6f 70 54 61 62 6c 65 28 64  BtreeDropTable(d
2cb60 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c  b->aDb[iDb].pBt,
2cb70 20 70 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f 76 65   pOp->p1, &iMove
2cb80 64 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c  d);.    pOut->fl
2cb90 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
2cba0 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69     pOut->u.i = i
2cbb0 4d 6f 76 65 64 3b 0a 20 20 20 20 69 66 28 20 72  Moved;.    if( r
2cbc0 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
2cbd0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 69 66  ue_to_error;.#if
2cbe0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2cbf0 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 20 20  _AUTOVACUUM.    
2cc00 69 66 28 20 69 4d 6f 76 65 64 21 3d 30 20 29 7b  if( iMoved!=0 ){
2cc10 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f  .      sqlite3Ro
2cc20 6f 74 50 61 67 65 4d 6f 76 65 64 28 64 62 2c 20  otPageMoved(db, 
2cc30 69 44 62 2c 20 69 4d 6f 76 65 64 2c 20 70 4f 70  iDb, iMoved, pOp
2cc40 2d 3e 70 31 29 3b 0a 20 20 20 20 20 20 2f 2a 20  ->p1);.      /* 
2cc50 41 6c 6c 20 4f 50 5f 44 65 73 74 72 6f 79 20 6f  All OP_Destroy o
2cc60 70 65 72 61 74 69 6f 6e 73 20 6f 63 63 75 72 20  perations occur 
2cc70 6f 6e 20 74 68 65 20 73 61 6d 65 20 62 74 72 65  on the same btre
2cc80 65 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72  e */.      asser
2cc90 74 28 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e  t( resetSchemaOn
2cca0 46 61 75 6c 74 3d 3d 30 20 7c 7c 20 72 65 73 65  Fault==0 || rese
2ccb0 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d  tSchemaOnFault==
2ccc0 69 44 62 2b 31 20 29 3b 0a 20 20 20 20 20 20 72  iDb+1 );.      r
2ccd0 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c  esetSchemaOnFaul
2cce0 74 20 3d 20 69 44 62 2b 31 3b 0a 20 20 20 20 7d  t = iDb+1;.    }
2ccf0 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72  .#endif.  }.  br
2cd00 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2cd10 65 3a 20 43 6c 65 61 72 20 50 31 20 50 32 20 50  e: Clear P1 P2 P
2cd20 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61  3.**.** Delete a
2cd30 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74  ll contents of t
2cd40 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
2cd50 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65  e or index whose
2cd60 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 69 6e   root page.** in
2cd70 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
2cd80 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79 20 50  le is given by P
2cd90 31 2e 20 20 42 75 74 2c 20 75 6e 6c 69 6b 65 20  1.  But, unlike 
2cda0 44 65 73 74 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a  Destroy, do not.
2cdb0 2a 2a 20 72 65 6d 6f 76 65 20 74 68 65 20 74 61  ** remove the ta
2cdc0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 72 6f  ble or index fro
2cdd0 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  m the database f
2cde0 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74  ile..**.** The t
2cdf0 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72  able being clear
2ce00 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20   is in the main 
2ce10 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
2ce20 20 50 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50   P2==0.  If.** P
2ce30 32 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61  2==1 then the ta
2ce40 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20  ble to be clear 
2ce50 69 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69  is in the auxili
2ce60 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  ary database fil
2ce70 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65  e.** that is use
2ce80 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65  d to store table
2ce90 73 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43  s create using C
2cea0 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20  REATE TEMPORARY 
2ceb0 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  TABLE..**.** If 
2cec0 74 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20  the P3 value is 
2ced0 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74  non-zero, then t
2cee0 68 65 20 74 61 62 6c 65 20 72 65 66 65 72 72 65  he table referre
2cef0 64 20 74 6f 20 6d 75 73 74 20 62 65 20 61 6e 0a  d to must be an.
2cf00 2a 2a 20 69 6e 74 6b 65 79 20 74 61 62 6c 65 20  ** intkey table 
2cf10 28 61 6e 20 53 51 4c 20 74 61 62 6c 65 2c 20 6e  (an SQL table, n
2cf20 6f 74 20 61 6e 20 69 6e 64 65 78 29 2e 20 49 6e  ot an index). In
2cf30 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20 72   this case the r
2cf40 6f 77 20 63 68 61 6e 67 65 20 0a 2a 2a 20 63 6f  ow change .** co
2cf50 75 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  unt is increment
2cf60 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72  ed by the number
2cf70 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20   of rows in the 
2cf80 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61  table being clea
2cf90 72 65 64 2e 20 0a 2a 2a 20 49 66 20 50 33 20 69  red. .** If P3 i
2cfa0 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a  s greater than z
2cfb0 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 76 61  ero, then the va
2cfc0 6c 75 65 20 73 74 6f 72 65 64 20 69 6e 20 72 65  lue stored in re
2cfd0 67 69 73 74 65 72 20 50 33 20 69 73 0a 2a 2a 20  gister P3 is.** 
2cfe0 61 6c 73 6f 20 69 6e 63 72 65 6d 65 6e 74 65 64  also incremented
2cff0 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   by the number o
2d000 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61  f rows in the ta
2d010 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65  ble being cleare
2d020 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  d..**.** See als
2d030 6f 3a 20 44 65 73 74 72 6f 79 0a 2a 2f 0a 63 61  o: Destroy.*/.ca
2d040 73 65 20 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a 20  se OP_Clear: {. 
2d050 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 0a 20 0a   int nChange;. .
2d060 20 20 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20    nChange = 0;. 
2d070 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
2d080 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 73 73  Only==0 );.  ass
2d090 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
2d0a0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f  p->btreeMask, pO
2d0b0 70 2d 3e 70 32 29 20 29 3b 0a 20 20 72 63 20 3d  p->p2) );.  rc =
2d0c0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65   sqlite3BtreeCle
2d0d0 61 72 54 61 62 6c 65 28 0a 20 20 20 20 20 20 64  arTable(.      d
2d0e0 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e  b->aDb[pOp->p2].
2d0f0 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 28 70  pBt, pOp->p1, (p
2d100 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61 6e 67  Op->p3 ? &nChang
2d110 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20 69 66  e : 0).  );.  if
2d120 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20  ( pOp->p3 ){.   
2d130 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d 20 6e   p->nChange += n
2d140 43 68 61 6e 67 65 3b 0a 20 20 20 20 69 66 28 20  Change;.    if( 
2d150 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20 20  pOp->p3>0 ){.   
2d160 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
2d170 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d  Valid(&aMem[pOp-
2d180 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 6d  >p3]) );.      m
2d190 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
2d1a0 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  p, &aMem[pOp->p3
2d1b0 5d 29 3b 0a 20 20 20 20 20 20 61 4d 65 6d 5b 70  ]);.      aMem[p
2d1c0 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e  Op->p3].u.i += n
2d1d0 43 68 61 6e 67 65 3b 0a 20 20 20 20 7d 0a 20 20  Change;.    }.  
2d1e0 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  }.  if( rc ) got
2d1f0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2d200 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
2d210 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73  ../* Opcode: Res
2d220 65 74 53 6f 72 74 65 72 20 50 31 20 2a 20 2a 20  etSorter P1 * * 
2d230 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65  * *.**.** Delete
2d240 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 66 72   all contents fr
2d250 6f 6d 20 74 68 65 20 65 70 68 65 6d 65 72 61 6c  om the ephemeral
2d260 20 74 61 62 6c 65 20 6f 72 20 73 6f 72 74 65 72   table or sorter
2d270 0a 2a 2a 20 74 68 61 74 20 69 73 20 6f 70 65 6e  .** that is open
2d280 20 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a   on cursor P1..*
2d290 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
2d2a0 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20   only works for 
2d2b0 63 75 72 73 6f 72 73 20 75 73 65 64 20 66 6f 72  cursors used for
2d2c0 20 73 6f 72 74 69 6e 67 20 61 6e 64 0a 2a 2a 20   sorting and.** 
2d2d0 6f 70 65 6e 65 64 20 77 69 74 68 20 4f 50 5f 4f  opened with OP_O
2d2e0 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 72 20  penEphemeral or 
2d2f0 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e 2e 0a 2a  OP_SorterOpen..*
2d300 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74 53  /.case OP_ResetS
2d310 6f 72 74 65 72 3a 20 7b 0a 20 20 56 64 62 65 43  orter: {.  VdbeC
2d320 75 72 73 6f 72 20 2a 70 43 3b 0a 20 0a 20 20 61  ursor *pC;. .  a
2d330 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
2d340 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
2d350 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
2d360 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
2d370 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2d380 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 73  C!=0 );.  if( is
2d390 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20  Sorter(pC) ){.  
2d3a0 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72    sqlite3VdbeSor
2d3b0 74 65 72 52 65 73 65 74 28 64 62 2c 20 70 43 2d  terReset(db, pC-
2d3c0 3e 75 63 2e 70 53 6f 72 74 65 72 29 3b 0a 20 20  >uc.pSorter);.  
2d3d0 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
2d3e0 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
2d3f0 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
2d400 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
2d410 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 29 3b  ->isEphemeral );
2d420 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
2d430 33 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65  3BtreeClearTable
2d440 4f 66 43 75 72 73 6f 72 28 70 43 2d 3e 75 63 2e  OfCursor(pC->uc.
2d450 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 69 66  pCursor);.    if
2d460 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
2d470 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2d480 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
2d490 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74  /* Opcode: Creat
2d4a0 65 54 61 62 6c 65 20 50 31 20 50 32 20 2a 20 2a  eTable P1 P2 * *
2d4b0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2d4c0 72 5b 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d 50  r[P2]=root iDb=P
2d4d0 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65  1.**.** Allocate
2d4e0 20 61 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 20   a new table in 
2d4f0 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
2d500 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20  e file if P1==0 
2d510 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78  or in the.** aux
2d520 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20  iliary database 
2d530 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72  file if P1==1 or
2d540 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20   in an attached 
2d550 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50  database if.** P
2d560 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65 20  1>1.  Write the 
2d570 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
2d580 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c   of the new tabl
2d590 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74  e into.** regist
2d5a0 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20  er P2.**.** The 
2d5b0 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65  difference betwe
2d5c0 65 6e 20 61 20 74 61 62 6c 65 20 61 6e 64 20 61  en a table and a
2d5d0 6e 20 69 6e 64 65 78 20 69 73 20 74 68 69 73 3a  n index is this:
2d5e0 20 20 41 20 74 61 62 6c 65 20 6d 75 73 74 0a 2a    A table must.*
2d5f0 2a 20 68 61 76 65 20 61 20 34 2d 62 79 74 65 20  * have a 4-byte 
2d600 69 6e 74 65 67 65 72 20 6b 65 79 20 61 6e 64 20  integer key and 
2d610 63 61 6e 20 68 61 76 65 20 61 72 62 69 74 72 61  can have arbitra
2d620 72 79 20 64 61 74 61 2e 20 20 41 6e 20 69 6e 64  ry data.  An ind
2d630 65 78 0a 2a 2a 20 68 61 73 20 61 6e 20 61 72 62  ex.** has an arb
2d640 69 74 72 61 72 79 20 6b 65 79 20 62 75 74 20 6e  itrary key but n
2d650 6f 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 53 65  o data..**.** Se
2d660 65 20 61 6c 73 6f 3a 20 43 72 65 61 74 65 49 6e  e also: CreateIn
2d670 64 65 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  dex.*/./* Opcode
2d680 3a 20 43 72 65 61 74 65 49 6e 64 65 78 20 50 31  : CreateIndex P1
2d690 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
2d6a0 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f  opsis: r[P2]=roo
2d6b0 74 20 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41  t iDb=P1.**.** A
2d6c0 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 69 6e  llocate a new in
2d6d0 64 65 78 20 69 6e 20 74 68 65 20 6d 61 69 6e 20  dex in the main 
2d6e0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
2d6f0 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65   P1==0 or in the
2d700 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61  .** auxiliary da
2d710 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
2d720 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74  1==1 or in an at
2d730 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20  tached database 
2d740 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69  if.** P1>1.  Wri
2d750 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  te the root page
2d760 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e   number of the n
2d770 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a  ew table into.**
2d780 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
2d790 0a 2a 2a 20 53 65 65 20 64 6f 63 75 6d 65 6e 74  .** See document
2d7a0 61 74 69 6f 6e 20 6f 6e 20 4f 50 5f 43 72 65 61  ation on OP_Crea
2d7b0 74 65 54 61 62 6c 65 20 66 6f 72 20 61 64 64 69  teTable for addi
2d7c0 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
2d7d0 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  on..*/.case OP_C
2d7e0 72 65 61 74 65 49 6e 64 65 78 3a 20 20 20 20 20  reateIndex:     
2d7f0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
2d800 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65  /.case OP_Create
2d810 54 61 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20  Table: {        
2d820 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69    /* out2 */.  i
2d830 6e 74 20 70 67 6e 6f 3b 0a 20 20 69 6e 74 20 66  nt pgno;.  int f
2d840 6c 61 67 73 3b 0a 20 20 44 62 20 2a 70 44 62 3b  lags;.  Db *pDb;
2d850 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ..  pOut = out2P
2d860 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
2d870 29 3b 0a 20 20 70 67 6e 6f 20 3d 20 30 3b 0a 20  );.  pgno = 0;. 
2d880 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
2d890 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
2d8a0 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
2d8b0 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
2d8c0 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70  ->btreeMask, pOp
2d8d0 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65 72  ->p1) );.  asser
2d8e0 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
2d8f0 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62  0 );.  pDb = &db
2d900 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  ->aDb[pOp->p1];.
2d910 20 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70    assert( pDb->p
2d920 42 74 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70  Bt!=0 );.  if( p
2d930 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43  Op->opcode==OP_C
2d940 72 65 61 74 65 54 61 62 6c 65 20 29 7b 0a 20 20  reateTable ){.  
2d950 20 20 2f 2a 20 66 6c 61 67 73 20 3d 20 42 54 52    /* flags = BTR
2d960 45 45 5f 49 4e 54 4b 45 59 3b 20 2a 2f 0a 20 20  EE_INTKEY; */.  
2d970 20 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f    flags = BTREE_
2d980 49 4e 54 4b 45 59 3b 0a 20 20 7d 65 6c 73 65 7b  INTKEY;.  }else{
2d990 0a 20 20 20 20 66 6c 61 67 73 20 3d 20 42 54 52  .    flags = BTR
2d9a0 45 45 5f 42 4c 4f 42 4b 45 59 3b 0a 20 20 7d 0a  EE_BLOBKEY;.  }.
2d9b0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
2d9c0 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 70  reeCreateTable(p
2d9d0 44 62 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20  Db->pBt, &pgno, 
2d9e0 66 6c 61 67 73 29 3b 0a 20 20 69 66 28 20 72 63  flags);.  if( rc
2d9f0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
2da00 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 4f  e_to_error;.  pO
2da10 75 74 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f 3b 0a  ut->u.i = pgno;.
2da20 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2da30 70 63 6f 64 65 3a 20 50 61 72 73 65 53 63 68 65  pcode: ParseSche
2da40 6d 61 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  ma P1 * * P4 *.*
2da50 2a 0a 2a 2a 20 52 65 61 64 20 61 6e 64 20 70 61  *.** Read and pa
2da60 72 73 65 20 61 6c 6c 20 65 6e 74 72 69 65 73 20  rse all entries 
2da70 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54 45 5f  from the SQLITE_
2da80 4d 41 53 54 45 52 20 74 61 62 6c 65 20 6f 66 20  MASTER table of 
2da90 64 61 74 61 62 61 73 65 20 50 31 0a 2a 2a 20 74  database P1.** t
2daa0 68 61 74 20 6d 61 74 63 68 20 74 68 65 20 57 48  hat match the WH
2dab0 45 52 45 20 63 6c 61 75 73 65 20 50 34 2e 20 0a  ERE clause P4. .
2dac0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
2dad0 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 70 61  e invokes the pa
2dae0 72 73 65 72 20 74 6f 20 63 72 65 61 74 65 20 61  rser to create a
2daf0 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63   new virtual mac
2db00 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20 72 75  hine,.** then ru
2db10 6e 73 20 74 68 65 20 6e 65 77 20 76 69 72 74 75  ns the new virtu
2db20 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 74 20  al machine.  It 
2db30 69 73 20 74 68 75 73 20 61 20 72 65 2d 65 6e 74  is thus a re-ent
2db40 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a  rant opcode..*/.
2db50 63 61 73 65 20 4f 50 5f 50 61 72 73 65 53 63 68  case OP_ParseSch
2db60 65 6d 61 3a 20 7b 0a 20 20 69 6e 74 20 69 44 62  ema: {.  int iDb
2db70 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
2db80 7a 4d 61 73 74 65 72 3b 0a 20 20 63 68 61 72 20  zMaster;.  char 
2db90 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69 74 44 61 74  *zSql;.  InitDat
2dba0 61 20 69 6e 69 74 44 61 74 61 3b 0a 0a 20 20 2f  a initData;..  /
2dbb0 2a 20 41 6e 79 20 70 72 65 70 61 72 65 64 20 73  * Any prepared s
2dbc0 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 69 6e  tatement that in
2dbd0 76 6f 6b 65 73 20 74 68 69 73 20 6f 70 63 6f 64  vokes this opcod
2dbe0 65 20 77 69 6c 6c 20 68 6f 6c 64 20 6d 75 74 65  e will hold mute
2dbf0 78 65 73 0a 20 20 2a 2a 20 6f 6e 20 65 76 65 72  xes.  ** on ever
2dc00 79 20 62 74 72 65 65 2e 20 20 54 68 69 73 20 69  y btree.  This i
2dc10 73 20 61 20 70 72 65 72 65 71 75 69 73 69 74 65  s a prerequisite
2dc20 20 66 6f 72 20 69 6e 76 6f 6b 69 6e 67 20 0a 20   for invoking . 
2dc30 20 2a 2a 20 73 71 6c 69 74 65 33 49 6e 69 74 43   ** sqlite3InitC
2dc40 61 6c 6c 62 61 63 6b 28 29 2e 0a 20 20 2a 2f 0a  allback()..  */.
2dc50 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
2dc60 42 55 47 0a 20 20 66 6f 72 28 69 44 62 3d 30 3b  BUG.  for(iDb=0;
2dc70 20 69 44 62 3c 64 62 2d 3e 6e 44 62 3b 20 69 44   iDb<db->nDb; iD
2dc80 62 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74  b++){.    assert
2dc90 28 20 69 44 62 3d 3d 31 20 7c 7c 20 73 71 6c 69  ( iDb==1 || sqli
2dca0 74 65 33 42 74 72 65 65 48 6f 6c 64 73 4d 75 74  te3BtreeHoldsMut
2dcb0 65 78 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e  ex(db->aDb[iDb].
2dcc0 70 42 74 29 20 29 3b 0a 20 20 7d 0a 23 65 6e 64  pBt) );.  }.#end
2dcd0 69 66 0a 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d  if..  iDb = pOp-
2dce0 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20 69  >p1;.  assert( i
2dcf0 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d  Db>=0 && iDb<db-
2dd00 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
2dd10 28 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28  ( DbHasProperty(
2dd20 64 62 2c 20 69 44 62 2c 20 44 42 5f 53 63 68 65  db, iDb, DB_Sche
2dd30 6d 61 4c 6f 61 64 65 64 29 20 29 3b 0a 20 20 2f  maLoaded) );.  /
2dd40 2a 20 55 73 65 64 20 74 6f 20 62 65 20 61 20 63  * Used to be a c
2dd50 6f 6e 64 69 74 69 6f 6e 61 6c 20 2a 2f 20 7b 0a  onditional */ {.
2dd60 20 20 20 20 7a 4d 61 73 74 65 72 20 3d 20 4d 41      zMaster = MA
2dd70 53 54 45 52 5f 4e 41 4d 45 3b 0a 20 20 20 20 69  STER_NAME;.    i
2dd80 6e 69 74 44 61 74 61 2e 64 62 20 3d 20 64 62 3b  nitData.db = db;
2dd90 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 69 44  .    initData.iD
2dda0 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 20  b = pOp->p1;.   
2ddb0 20 69 6e 69 74 44 61 74 61 2e 70 7a 45 72 72 4d   initData.pzErrM
2ddc0 73 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73 67  sg = &p->zErrMsg
2ddd0 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c  ;.    zSql = sql
2dde0 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a  ite3MPrintf(db,.
2ddf0 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e         "SELECT n
2de00 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73  ame, rootpage, s
2de10 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25 73 20  ql FROM '%q'.%s 
2de20 57 48 45 52 45 20 25 73 20 4f 52 44 45 52 20 42  WHERE %s ORDER B
2de30 59 20 72 6f 77 69 64 22 2c 0a 20 20 20 20 20 20  Y rowid",.      
2de40 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 44   db->aDb[iDb].zD
2de50 62 53 4e 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c  bSName, zMaster,
2de60 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20   pOp->p4.z);.   
2de70 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a   if( zSql==0 ){.
2de80 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
2de90 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 3b 0a 20 20  E_NOMEM_BKPT;.  
2dea0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61    }else{.      a
2deb0 73 73 65 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e  ssert( db->init.
2dec0 62 75 73 79 3d 3d 30 20 29 3b 0a 20 20 20 20 20  busy==0 );.     
2ded0 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d   db->init.busy =
2dee0 20 31 3b 0a 20 20 20 20 20 20 69 6e 69 74 44 61   1;.      initDa
2def0 74 61 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f  ta.rc = SQLITE_O
2df00 4b 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  K;.      assert(
2df10 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c   !db->mallocFail
2df20 65 64 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  ed );.      rc =
2df30 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62   sqlite3_exec(db
2df40 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33 49  , zSql, sqlite3I
2df50 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e  nitCallback, &in
2df60 69 74 44 61 74 61 2c 20 30 29 3b 0a 20 20 20 20  itData, 0);.    
2df70 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
2df80 5f 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69 74 44  _OK ) rc = initD
2df90 61 74 61 2e 72 63 3b 0a 20 20 20 20 20 20 73 71  ata.rc;.      sq
2dfa0 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
2dfb0 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 64 62 2d  zSql);.      db-
2dfc0 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b 0a  >init.busy = 0;.
2dfd0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20      }.  }.  if( 
2dfe0 72 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  rc ){.    sqlite
2dff0 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73  3ResetAllSchemas
2e000 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29  OfConnection(db)
2e010 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51  ;.    if( rc==SQ
2e020 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20  LITE_NOMEM ){.  
2e030 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
2e040 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20  .    }.    goto 
2e050 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2e060 6f 72 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  or;.  }.  break;
2e070 20 20 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e    .}..#if !defin
2e080 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
2e090 4e 41 4c 59 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64  NALYZE)./* Opcod
2e0a0 65 3a 20 4c 6f 61 64 41 6e 61 6c 79 73 69 73 20  e: LoadAnalysis 
2e0b0 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
2e0c0 20 52 65 61 64 20 74 68 65 20 73 71 6c 69 74 65   Read the sqlite
2e0d0 5f 73 74 61 74 31 20 74 61 62 6c 65 20 66 6f 72  _stat1 table for
2e0e0 20 64 61 74 61 62 61 73 65 20 50 31 20 61 6e 64   database P1 and
2e0f0 20 6c 6f 61 64 20 74 68 65 20 63 6f 6e 74 65 6e   load the conten
2e100 74 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62  t.** of that tab
2e110 6c 65 20 69 6e 74 6f 20 74 68 65 20 69 6e 74 65  le into the inte
2e120 72 6e 61 6c 20 69 6e 64 65 78 20 68 61 73 68 20  rnal index hash 
2e130 74 61 62 6c 65 2e 20 20 54 68 69 73 20 77 69 6c  table.  This wil
2e140 6c 20 63 61 75 73 65 0a 2a 2a 20 74 68 65 20 61  l cause.** the a
2e150 6e 61 6c 79 73 69 73 20 74 6f 20 62 65 20 75 73  nalysis to be us
2e160 65 64 20 77 68 65 6e 20 70 72 65 70 61 72 69 6e  ed when preparin
2e170 67 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74  g all subsequent
2e180 20 71 75 65 72 69 65 73 2e 0a 2a 2f 0a 63 61 73   queries..*/.cas
2e190 65 20 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79 73 69  e OP_LoadAnalysi
2e1a0 73 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  s: {.  assert( p
2e1b0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
2e1c0 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
2e1d0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 41 6e    rc = sqlite3An
2e1e0 61 6c 79 73 69 73 4c 6f 61 64 28 64 62 2c 20 70  alysisLoad(db, p
2e1f0 4f 70 2d 3e 70 31 29 3b 0a 20 20 69 66 28 20 72  Op->p1);.  if( r
2e200 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
2e210 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62  ue_to_error;.  b
2e220 72 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64 69 66  reak;  .}.#endif
2e230 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c   /* !defined(SQL
2e240 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45  ITE_OMIT_ANALYZE
2e250 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ) */../* Opcode:
2e260 20 44 72 6f 70 54 61 62 6c 65 20 50 31 20 2a 20   DropTable P1 * 
2e270 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d  * P4 *.**.** Rem
2e280 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  ove the internal
2e290 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74   (in-memory) dat
2e2a0 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61  a structures tha
2e2b0 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68  t describe.** th
2e2c0 65 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 50 34  e table named P4
2e2d0 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e   in database P1.
2e2e0 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64    This is called
2e2f0 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 0a 2a   after a table.*
2e300 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f  * is dropped fro
2e310 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68  m disk (using th
2e320 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65  e Destroy opcode
2e330 29 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65  ) in order to ke
2e340 65 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65 72  ep .** the inter
2e350 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69  nal representati
2e360 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68  on of the.** sch
2e370 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77  ema consistent w
2e380 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64  ith what is on d
2e390 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  isk..*/.case OP_
2e3a0 44 72 6f 70 54 61 62 6c 65 3a 20 7b 0a 20 20 73  DropTable: {.  s
2e3b0 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
2e3c0 65 6c 65 74 65 54 61 62 6c 65 28 64 62 2c 20 70  eleteTable(db, p
2e3d0 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e  Op->p1, pOp->p4.
2e3e0 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  z);.  break;.}..
2e3f0 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 49  /* Opcode: DropI
2e400 6e 64 65 78 20 50 31 20 2a 20 2a 20 50 34 20 2a  ndex P1 * * P4 *
2e410 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68  .**.** Remove th
2e420 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d  e internal (in-m
2e430 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75  emory) data stru
2e440 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63  ctures that desc
2e450 72 69 62 65 0a 2a 2a 20 74 68 65 20 69 6e 64 65  ribe.** the inde
2e460 78 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61  x named P4 in da
2e470 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73  tabase P1.  This
2e480 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72   is called after
2e490 20 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 69 73 20   an index.** is 
2e4a0 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73  dropped from dis
2e4b0 6b 20 28 75 73 69 6e 67 20 74 68 65 20 44 65 73  k (using the Des
2e4c0 74 72 6f 79 20 6f 70 63 6f 64 65 29 0a 2a 2a 20  troy opcode).** 
2e4d0 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70  in order to keep
2e4e0 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65   the internal re
2e4f0 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
2e500 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f  the.** schema co
2e510 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68  nsistent with wh
2e520 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a  at is on disk..*
2e530 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 49 6e  /.case OP_DropIn
2e540 64 65 78 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  dex: {.  sqlite3
2e550 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49  UnlinkAndDeleteI
2e560 6e 64 65 78 28 64 62 2c 20 70 4f 70 2d 3e 70 31  ndex(db, pOp->p1
2e570 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
2e580 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2e590 6f 64 65 3a 20 44 72 6f 70 54 72 69 67 67 65 72  ode: DropTrigger
2e5a0 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
2e5b0 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e  ** Remove the in
2e5c0 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72  ternal (in-memor
2e5d0 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72  y) data structur
2e5e0 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65  es that describe
2e5f0 0a 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72 20  .** the trigger 
2e600 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61  named P4 in data
2e610 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69  base P1.  This i
2e620 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61  s called after a
2e630 20 74 72 69 67 67 65 72 0a 2a 2a 20 69 73 20 64   trigger.** is d
2e640 72 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73 6b  ropped from disk
2e650 20 28 75 73 69 6e 67 20 74 68 65 20 44 65 73 74   (using the Dest
2e660 72 6f 79 20 6f 70 63 6f 64 65 29 20 69 6e 20 6f  roy opcode) in o
2e670 72 64 65 72 20 74 6f 20 6b 65 65 70 20 0a 2a 2a  rder to keep .**
2e680 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65   the internal re
2e690 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
2e6a0 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f  the.** schema co
2e6b0 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68  nsistent with wh
2e6c0 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a  at is on disk..*
2e6d0 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 72  /.case OP_DropTr
2e6e0 69 67 67 65 72 3a 20 7b 0a 20 20 73 71 6c 69 74  igger: {.  sqlit
2e6f0 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
2e700 65 54 72 69 67 67 65 72 28 64 62 2c 20 70 4f 70  eTrigger(db, pOp
2e710 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ->p1, pOp->p4.z)
2e720 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23  ;.  break;.}...#
2e730 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2e740 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  IT_INTEGRITY_CHE
2e750 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  CK./* Opcode: In
2e760 74 65 67 72 69 74 79 43 6b 20 50 31 20 50 32 20  tegrityCk P1 P2 
2e770 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 44  P3 P4 P5.**.** D
2e780 6f 20 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66  o an analysis of
2e790 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 6f   the currently o
2e7a0 70 65 6e 20 64 61 74 61 62 61 73 65 2e 20 20 53  pen database.  S
2e7b0 74 6f 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73  tore in.** regis
2e7c0 74 65 72 20 50 31 20 74 68 65 20 74 65 78 74 20  ter P1 the text 
2e7d0 6f 66 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73  of an error mess
2e7e0 61 67 65 20 64 65 73 63 72 69 62 69 6e 67 20 61  age describing a
2e7f0 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20  ny problems..** 
2e800 49 66 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61  If no problems a
2e810 72 65 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20  re found, store 
2e820 61 20 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73 74  a NULL in regist
2e830 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  er P1..**.** The
2e840 20 72 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e   register P3 con
2e850 74 61 69 6e 73 20 74 68 65 20 6d 61 78 69 6d 75  tains the maximu
2e860 6d 20 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f  m number of allo
2e870 77 65 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41  wed errors..** A
2e880 74 20 6d 6f 73 74 20 72 65 67 28 50 33 29 20 65  t most reg(P3) e
2e890 72 72 6f 72 73 20 77 69 6c 6c 20 62 65 20 72 65  rrors will be re
2e8a0 70 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74  ported..** In ot
2e8b0 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 61  her words, the a
2e8c0 6e 61 6c 79 73 69 73 20 73 74 6f 70 73 20 61 73  nalysis stops as
2e8d0 20 73 6f 6f 6e 20 61 73 20 72 65 67 28 50 31 29   soon as reg(P1)
2e8e0 20 65 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20   errors are .** 
2e8f0 73 65 65 6e 2e 20 20 52 65 67 28 50 31 29 20 69  seen.  Reg(P1) i
2e900 73 20 75 70 64 61 74 65 64 20 77 69 74 68 20 74  s updated with t
2e910 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 72 72  he number of err
2e920 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a  ors remaining..*
2e930 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61  *.** The root pa
2e940 67 65 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c  ge numbers of al
2e950 6c 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20  l tables in the 
2e960 64 61 74 61 62 61 73 65 20 61 72 65 20 69 6e 74  database are int
2e970 65 67 65 72 73 0a 2a 2a 20 73 74 6f 72 65 64 20  egers.** stored 
2e980 69 6e 20 50 34 5f 49 4e 54 41 52 52 41 59 20 61  in P4_INTARRAY a
2e990 72 67 75 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49  rgument..**.** I
2e9a0 66 20 50 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f  f P5 is not zero
2e9b0 2c 20 74 68 65 20 63 68 65 63 6b 20 69 73 20 64  , the check is d
2e9c0 6f 6e 65 20 6f 6e 20 74 68 65 20 61 75 78 69 6c  one on the auxil
2e9d0 69 61 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a  iary database.**
2e9e0 20 66 69 6c 65 2c 20 6e 6f 74 20 74 68 65 20 6d   file, not the m
2e9f0 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
2ea00 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  e..**.** This op
2ea10 63 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f 20  code is used to 
2ea20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 69 6e  implement the in
2ea30 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20 70 72  tegrity_check pr
2ea40 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  agma..*/.case OP
2ea50 5f 49 6e 74 65 67 72 69 74 79 43 6b 3a 20 7b 0a  _IntegrityCk: {.
2ea60 20 20 69 6e 74 20 6e 52 6f 6f 74 3b 20 20 20 20    int nRoot;    
2ea70 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74    /* Number of t
2ea80 61 62 6c 65 73 20 74 6f 20 63 68 65 63 6b 2e 20  ables to check. 
2ea90 20 28 4e 75 6d 62 65 72 20 6f 66 20 72 6f 6f 74   (Number of root
2eaa0 20 70 61 67 65 73 2e 29 20 2a 2f 0a 20 20 69 6e   pages.) */.  in
2eab0 74 20 2a 61 52 6f 6f 74 3b 20 20 20 20 20 2f 2a  t *aRoot;     /*
2eac0 20 41 72 72 61 79 20 6f 66 20 72 6f 6f 74 70 61   Array of rootpa
2ead0 67 65 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 74  ge numbers for t
2eae0 61 62 6c 65 73 20 74 6f 20 62 65 20 63 68 65 63  ables to be chec
2eaf0 6b 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72  ked */.  int nEr
2eb00 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  r;       /* Numb
2eb10 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65 70  er of errors rep
2eb20 6f 72 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  orted */.  char 
2eb30 2a 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 65  *z;        /* Te
2eb40 78 74 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20  xt of the error 
2eb50 72 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d 20  report */.  Mem 
2eb60 2a 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20 52  *pnErr;     /* R
2eb70 65 67 69 73 74 65 72 20 6b 65 65 70 69 6e 67 20  egister keeping 
2eb80 74 72 61 63 6b 20 6f 66 20 65 72 72 6f 72 73 20  track of errors 
2eb90 72 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 0a 20 20  remaining */..  
2eba0 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
2ebb0 61 64 65 72 20 29 3b 0a 20 20 6e 52 6f 6f 74 20  ader );.  nRoot 
2ebc0 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 52 6f  = pOp->p2;.  aRo
2ebd0 6f 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b  ot = pOp->p4.ai;
2ebe0 0a 20 20 61 73 73 65 72 74 28 20 6e 52 6f 6f 74  .  assert( nRoot
2ebf0 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
2ec00 61 52 6f 6f 74 5b 6e 52 6f 6f 74 5d 3d 3d 30 20  aRoot[nRoot]==0 
2ec10 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
2ec20 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
2ec30 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  3<=(p->nMem+1 - 
2ec40 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
2ec50 20 70 6e 45 72 72 20 3d 20 26 61 4d 65 6d 5b 70   pnErr = &aMem[p
2ec60 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
2ec70 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73  t( (pnErr->flags
2ec80 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
2ec90 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e 45  ;.  assert( (pnE
2eca0 72 72 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  rr->flags & (MEM
2ecb0 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d  _Str|MEM_Blob))=
2ecc0 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26  =0 );.  pIn1 = &
2ecd0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2ece0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
2ecf0 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
2ed00 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
2ed10 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70  (p->btreeMask, p
2ed20 4f 70 2d 3e 70 35 29 20 29 3b 0a 20 20 7a 20 3d  Op->p5) );.  z =
2ed30 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74   sqlite3BtreeInt
2ed40 65 67 72 69 74 79 43 68 65 63 6b 28 64 62 2d 3e  egrityCheck(db->
2ed50 61 44 62 5b 70 4f 70 2d 3e 70 35 5d 2e 70 42 74  aDb[pOp->p5].pBt
2ed60 2c 20 61 52 6f 6f 74 2c 20 6e 52 6f 6f 74 2c 0a  , aRoot, nRoot,.
2ed70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ed80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ed90 20 28 69 6e 74 29 70 6e 45 72 72 2d 3e 75 2e 69   (int)pnErr->u.i
2eda0 2c 20 26 6e 45 72 72 29 3b 0a 20 20 70 6e 45 72  , &nErr);.  pnEr
2edb0 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72 3b 0a  r->u.i -= nErr;.
2edc0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2edd0 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20  SetNull(pIn1);. 
2ede0 20 69 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a   if( nErr==0 ){.
2edf0 20 20 20 20 61 73 73 65 72 74 28 20 7a 3d 3d 30      assert( z==0
2ee00 20 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20   );.  }else if( 
2ee10 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f  z==0 ){.    goto
2ee20 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65   no_mem;.  }else
2ee30 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
2ee40 65 4d 65 6d 53 65 74 53 74 72 28 70 49 6e 31 2c  eMemSetStr(pIn1,
2ee50 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55   z, -1, SQLITE_U
2ee60 54 46 38 2c 20 73 71 6c 69 74 65 33 5f 66 72 65  TF8, sqlite3_fre
2ee70 65 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54 45  e);.  }.  UPDATE
2ee80 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49  _MAX_BLOBSIZE(pI
2ee90 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n1);.  sqlite3Vd
2eea0 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
2eeb0 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29  (pIn1, encoding)
2eec0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
2eed0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
2eee0 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  IT_INTEGRITY_CHE
2eef0 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  CK */../* Opcode
2ef00 3a 20 52 6f 77 53 65 74 41 64 64 20 50 31 20 50  : RowSetAdd P1 P
2ef10 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
2ef20 73 69 73 3a 20 72 6f 77 73 65 74 28 50 31 29 3d  sis: rowset(P1)=
2ef30 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 49 6e 73 65  r[P2].**.** Inse
2ef40 72 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  rt the integer v
2ef50 61 6c 75 65 20 68 65 6c 64 20 62 79 20 72 65 67  alue held by reg
2ef60 69 73 74 65 72 20 50 32 20 69 6e 74 6f 20 61 20  ister P2 into a 
2ef70 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 0a 2a 2a  boolean index.**
2ef80 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73 74 65   held in registe
2ef90 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 61  r P1..**.** An a
2efa0 73 73 65 72 74 69 6f 6e 20 66 61 69 6c 73 20 69  ssertion fails i
2efb0 66 20 50 32 20 69 73 20 6e 6f 74 20 61 6e 20 69  f P2 is not an i
2efc0 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20  nteger..*/.case 
2efd0 4f 50 5f 52 6f 77 53 65 74 41 64 64 3a 20 7b 20  OP_RowSetAdd: { 
2efe0 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 69 6e        /* in1, in
2eff0 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  2 */.  pIn1 = &a
2f000 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2f010 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
2f020 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
2f030 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20   (pIn2->flags & 
2f040 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20  MEM_Int)!=0 );. 
2f050 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
2f060 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
2f070 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
2f080 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65  3VdbeMemSetRowSe
2f090 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28  t(pIn1);.    if(
2f0a0 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
2f0b0 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29  MEM_RowSet)==0 )
2f0c0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
2f0d0 7d 0a 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65  }.  sqlite3RowSe
2f0e0 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e  tInsert(pIn1->u.
2f0f0 70 52 6f 77 53 65 74 2c 20 70 49 6e 32 2d 3e 75  pRowSet, pIn2->u
2f100 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .i);.  break;.}.
2f110 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53  ./* Opcode: RowS
2f120 65 74 52 65 61 64 20 50 31 20 50 32 20 50 33 20  etRead P1 P2 P3 
2f130 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
2f140 20 72 5b 50 33 5d 3d 72 6f 77 73 65 74 28 50 31   r[P3]=rowset(P1
2f150 29 0a 2a 2a 0a 2a 2a 20 45 78 74 72 61 63 74 20  ).**.** Extract 
2f160 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c  the smallest val
2f170 75 65 20 66 72 6f 6d 20 62 6f 6f 6c 65 61 6e 20  ue from boolean 
2f180 69 6e 64 65 78 20 50 31 20 61 6e 64 20 70 75 74  index P1 and put
2f190 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f   that value into
2f1a0 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 33 2e  .** register P3.
2f1b0 20 20 4f 72 2c 20 69 66 20 62 6f 6f 6c 65 61 6e    Or, if boolean
2f1c0 20 69 6e 64 65 78 20 50 31 20 69 73 20 69 6e 69   index P1 is ini
2f1d0 74 69 61 6c 6c 79 20 65 6d 70 74 79 2c 20 6c 65  tially empty, le
2f1e0 61 76 65 20 50 33 0a 2a 2a 20 75 6e 63 68 61 6e  ave P3.** unchan
2f1f0 67 65 64 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20  ged and jump to 
2f200 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a  instruction P2..
2f210 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65  */.case OP_RowSe
2f220 74 52 65 61 64 3a 20 7b 20 20 20 20 20 20 20 2f  tRead: {       /
2f230 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 6f 75 74  * jump, in1, out
2f240 33 20 2a 2f 0a 20 20 69 36 34 20 76 61 6c 3b 0a  3 */.  i64 val;.
2f250 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
2f260 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
2f270 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
2f280 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 0a 20  EM_RowSet)==0 . 
2f290 20 20 7c 7c 20 73 71 6c 69 74 65 33 52 6f 77 53    || sqlite3RowS
2f2a0 65 74 4e 65 78 74 28 70 49 6e 31 2d 3e 75 2e 70  etNext(pIn1->u.p
2f2b0 52 6f 77 53 65 74 2c 20 26 76 61 6c 29 3d 3d 30  RowSet, &val)==0
2f2c0 0a 20 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65  .  ){.    /* The
2f2d0 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 69   boolean index i
2f2e0 73 20 65 6d 70 74 79 20 2a 2f 0a 20 20 20 20 73  s empty */.    s
2f2f0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
2f300 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 20 20  Null(pIn1);.    
2f310 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
2f320 31 2c 32 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6a  1,2);.    goto j
2f330 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68  ump_to_p2_and_ch
2f340 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70  eck_for_interrup
2f350 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  t;.  }else{.    
2f360 2f 2a 20 41 20 76 61 6c 75 65 20 77 61 73 20 70  /* A value was p
2f370 75 6c 6c 65 64 20 66 72 6f 6d 20 74 68 65 20 69  ulled from the i
2f380 6e 64 65 78 20 2a 2f 0a 20 20 20 20 56 64 62 65  ndex */.    Vdbe
2f390 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c 32 29  BranchTaken(0,2)
2f3a0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
2f3b0 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d  eMemSetInt64(&aM
2f3c0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76 61 6c  em[pOp->p3], val
2f3d0 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68  );.  }.  goto ch
2f3e0 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70  eck_for_interrup
2f3f0 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  t;.}../* Opcode:
2f400 20 52 6f 77 53 65 74 54 65 73 74 20 50 31 20 50   RowSetTest P1 P
2f410 32 20 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70  2 P3 P4.** Synop
2f420 73 69 73 3a 20 69 66 20 72 5b 50 33 5d 20 69 6e  sis: if r[P3] in
2f430 20 72 6f 77 73 65 74 28 50 31 29 20 67 6f 74 6f   rowset(P1) goto
2f440 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74   P2.**.** Regist
2f450 65 72 20 50 33 20 69 73 20 61 73 73 75 6d 65 64  er P3 is assumed
2f460 20 74 6f 20 68 6f 6c 64 20 61 20 36 34 2d 62 69   to hold a 64-bi
2f470 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e  t integer value.
2f480 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31 0a   If register P1.
2f490 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20 52 6f  ** contains a Ro
2f4a0 77 53 65 74 20 6f 62 6a 65 63 74 20 61 6e 64 20  wSet object and 
2f4b0 74 68 61 74 20 52 6f 77 53 65 74 20 6f 62 6a 65  that RowSet obje
2f4c0 63 74 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74  ct contains.** t
2f4d0 68 65 20 76 61 6c 75 65 20 68 65 6c 64 20 69 6e  he value held in
2f4e0 20 50 33 2c 20 6a 75 6d 70 20 74 6f 20 72 65 67   P3, jump to reg
2f4f0 69 73 74 65 72 20 50 32 2e 20 4f 74 68 65 72 77  ister P2. Otherw
2f500 69 73 65 2c 20 69 6e 73 65 72 74 20 74 68 65 0a  ise, insert the.
2f510 2a 2a 20 69 6e 74 65 67 65 72 20 69 6e 20 50 33  ** integer in P3
2f520 20 69 6e 74 6f 20 74 68 65 20 52 6f 77 53 65 74   into the RowSet
2f530 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20 6f 6e   and continue on
2f540 20 74 6f 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20   to the.** next 
2f550 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  opcode..**.** Th
2f560 65 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20  e RowSet object 
2f570 69 73 20 6f 70 74 69 6d 69 7a 65 64 20 66 6f 72  is optimized for
2f580 20 74 68 65 20 63 61 73 65 20 77 68 65 72 65 20   the case where 
2f590 73 75 63 63 65 73 73 69 76 65 20 73 65 74 73 0a  successive sets.
2f5a0 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73 2c 20  ** of integers, 
2f5b0 77 68 65 72 65 20 65 61 63 68 20 73 65 74 20 63  where each set c
2f5c0 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 75 70 6c 69  ontains no dupli
2f5d0 63 61 74 65 73 2e 20 45 61 63 68 20 73 65 74 0a  cates. Each set.
2f5e0 2a 2a 20 6f 66 20 76 61 6c 75 65 73 20 69 73 20  ** of values is 
2f5f0 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20  identified by a 
2f600 75 6e 69 71 75 65 20 50 34 20 76 61 6c 75 65 2e  unique P4 value.
2f610 20 54 68 65 20 66 69 72 73 74 20 73 65 74 0a 2a   The first set.*
2f620 2a 20 6d 75 73 74 20 68 61 76 65 20 50 34 3d 3d  * must have P4==
2f630 30 2c 20 74 68 65 20 66 69 6e 61 6c 20 73 65 74  0, the final set
2f640 20 50 34 3d 2d 31 2e 20 20 50 34 20 6d 75 73 74   P4=-1.  P4 must
2f650 20 62 65 20 65 69 74 68 65 72 20 2d 31 20 6f 72   be either -1 or
2f660 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65  .** non-negative
2f670 2e 20 20 46 6f 72 20 6e 6f 6e 2d 6e 65 67 61 74  .  For non-negat
2f680 69 76 65 20 76 61 6c 75 65 73 20 6f 66 20 50 34  ive values of P4
2f690 20 6f 6e 6c 79 20 74 68 65 20 6c 6f 77 65 72 20   only the lower 
2f6a0 34 0a 2a 2a 20 62 69 74 73 20 61 72 65 20 73 69  4.** bits are si
2f6b0 67 6e 69 66 69 63 61 6e 74 2e 0a 2a 2a 0a 2a 2a  gnificant..**.**
2f6c0 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 6f 70 74   This allows opt
2f6d0 69 6d 69 7a 61 74 69 6f 6e 73 3a 20 28 61 29 20  imizations: (a) 
2f6e0 77 68 65 6e 20 50 34 3d 3d 30 20 74 68 65 72 65  when P4==0 there
2f6f0 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 74   is no need to t
2f700 65 73 74 0a 2a 2a 20 74 68 65 20 72 6f 77 73 65  est.** the rowse
2f710 74 20 6f 62 6a 65 63 74 20 66 6f 72 20 50 33 2c  t object for P3,
2f720 20 61 73 20 69 74 20 69 73 20 67 75 61 72 61 6e   as it is guaran
2f730 74 65 65 64 20 6e 6f 74 20 74 6f 20 63 6f 6e 74  teed not to cont
2f740 61 69 6e 20 69 74 2c 0a 2a 2a 20 28 62 29 20 77  ain it,.** (b) w
2f750 68 65 6e 20 50 34 3d 3d 2d 31 20 74 68 65 72 65  hen P4==-1 there
2f760 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 69   is no need to i
2f770 6e 73 65 72 74 20 74 68 65 20 76 61 6c 75 65 2c  nsert the value,
2f780 20 61 73 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e   as it will.** n
2f790 65 76 65 72 20 62 65 20 74 65 73 74 65 64 20 66  ever be tested f
2f7a0 6f 72 2c 20 61 6e 64 20 28 63 29 20 77 68 65 6e  or, and (c) when
2f7b0 20 61 20 76 61 6c 75 65 20 74 68 61 74 20 69 73   a value that is
2f7c0 20 70 61 72 74 20 6f 66 20 73 65 74 20 58 20 69   part of set X i
2f7d0 73 0a 2a 2a 20 69 6e 73 65 72 74 65 64 2c 20 74  s.** inserted, t
2f7e0 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20  here is no need 
2f7f0 74 6f 20 73 65 61 72 63 68 20 74 6f 20 73 65 65  to search to see
2f800 20 69 66 20 74 68 65 20 73 61 6d 65 20 76 61 6c   if the same val
2f810 75 65 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f  ue was.** previo
2f820 75 73 6c 79 20 69 6e 73 65 72 74 65 64 20 61 73  usly inserted as
2f830 20 70 61 72 74 20 6f 66 20 73 65 74 20 58 20 28   part of set X (
2f840 6f 6e 6c 79 20 69 66 20 69 74 20 77 61 73 20 70  only if it was p
2f850 72 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73  reviously.** ins
2f860 65 72 74 65 64 20 61 73 20 70 61 72 74 20 6f 66  erted as part of
2f870 20 73 6f 6d 65 20 6f 74 68 65 72 20 73 65 74 29   some other set)
2f880 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
2f890 53 65 74 54 65 73 74 3a 20 7b 20 20 20 20 20 20  SetTest: {      
2f8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2f8b0 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  * jump, in1, in3
2f8c0 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 74 3b 0a   */.  int iSet;.
2f8d0 20 20 69 6e 74 20 65 78 69 73 74 73 3b 0a 0a 20    int exists;.. 
2f8e0 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
2f8f0 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d  p->p1];.  pIn3 =
2f900 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
2f910 0a 20 20 69 53 65 74 20 3d 20 70 4f 70 2d 3e 70  .  iSet = pOp->p
2f920 34 2e 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70  4.i;.  assert( p
2f930 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In3->flags&MEM_I
2f940 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74  nt );..  /* If t
2f950 68 65 72 65 20 69 73 20 61 6e 79 74 68 69 6e 67  here is anything
2f960 20 6f 74 68 65 72 20 74 68 61 6e 20 61 20 72 6f   other than a ro
2f970 77 73 65 74 20 6f 62 6a 65 63 74 20 69 6e 20 6d  wset object in m
2f980 65 6d 6f 72 79 20 63 65 6c 6c 20 50 31 2c 0a 20  emory cell P1,. 
2f990 20 2a 2a 20 64 65 6c 65 74 65 20 69 74 20 6e 6f   ** delete it no
2f9a0 77 20 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65  w and initialize
2f9b0 20 50 31 20 77 69 74 68 20 61 6e 20 65 6d 70 74   P1 with an empt
2f9c0 79 20 72 6f 77 73 65 74 0a 20 20 2a 2f 0a 20 20  y rowset.  */.  
2f9d0 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
2f9e0 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
2f9f0 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
2fa00 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74  VdbeMemSetRowSet
2fa10 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28 20  (pIn1);.    if( 
2fa20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
2fa30 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 20  EM_RowSet)==0 ) 
2fa40 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
2fa50 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
2fa60 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
2fa70 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  2 );.  assert( i
2fa80 53 65 74 3d 3d 2d 31 20 7c 7c 20 69 53 65 74 3e  Set==-1 || iSet>
2fa90 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 53 65 74  =0 );.  if( iSet
2faa0 20 29 7b 0a 20 20 20 20 65 78 69 73 74 73 20 3d   ){.    exists =
2fab0 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65   sqlite3RowSetTe
2fac0 73 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53  st(pIn1->u.pRowS
2fad0 65 74 2c 20 69 53 65 74 2c 20 70 49 6e 33 2d 3e  et, iSet, pIn3->
2fae0 75 2e 69 29 3b 0a 20 20 20 20 56 64 62 65 42 72  u.i);.    VdbeBr
2faf0 61 6e 63 68 54 61 6b 65 6e 28 65 78 69 73 74 73  anchTaken(exists
2fb00 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20  !=0,2);.    if( 
2fb10 65 78 69 73 74 73 20 29 20 67 6f 74 6f 20 6a 75  exists ) goto ju
2fb20 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
2fb30 69 66 28 20 69 53 65 74 3e 3d 30 20 29 7b 0a 20  if( iSet>=0 ){. 
2fb40 20 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74     sqlite3RowSet
2fb50 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e 70  Insert(pIn1->u.p
2fb60 52 6f 77 53 65 74 2c 20 70 49 6e 33 2d 3e 75 2e  RowSet, pIn3->u.
2fb70 69 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  i);.  }.  break;
2fb80 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  .}...#ifndef SQL
2fb90 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
2fba0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 6f  ../* Opcode: Pro
2fbb0 67 72 61 6d 20 50 31 20 50 32 20 50 33 20 50 34  gram P1 P2 P3 P4
2fbc0 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74   P5.**.** Execut
2fbd0 65 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  e the trigger pr
2fbe0 6f 67 72 61 6d 20 70 61 73 73 65 64 20 61 73 20  ogram passed as 
2fbf0 50 34 20 28 74 79 70 65 20 50 34 5f 53 55 42 50  P4 (type P4_SUBP
2fc00 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a 0a 2a 2a 20  ROGRAM). .**.** 
2fc10 50 31 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  P1 contains the 
2fc20 61 64 64 72 65 73 73 20 6f 66 20 74 68 65 20 6d  address of the m
2fc30 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74 20  emory cell that 
2fc40 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 66 69 72  contains the fir
2fc50 73 74 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65  st memory .** ce
2fc60 6c 6c 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f  ll in an array o
2fc70 66 20 76 61 6c 75 65 73 20 75 73 65 64 20 61 73  f values used as
2fc80 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68   arguments to th
2fc90 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20 50  e sub-program. P
2fca0 32 20 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 74  2 .** contains t
2fcb0 68 65 20 61 64 64 72 65 73 73 20 74 6f 20 6a 75  he address to ju
2fcc0 6d 70 20 74 6f 20 69 66 20 74 68 65 20 73 75 62  mp to if the sub
2fcd0 2d 70 72 6f 67 72 61 6d 20 74 68 72 6f 77 73 20  -program throws 
2fce0 61 6e 20 49 47 4e 4f 52 45 20 0a 2a 2a 20 65 78  an IGNORE .** ex
2fcf0 63 65 70 74 69 6f 6e 20 75 73 69 6e 67 20 74 68  ception using th
2fd00 65 20 52 41 49 53 45 28 29 20 66 75 6e 63 74 69  e RAISE() functi
2fd10 6f 6e 2e 20 52 65 67 69 73 74 65 72 20 50 33 20  on. Register P3 
2fd20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64  contains the add
2fd30 72 65 73 73 20 0a 2a 2a 20 6f 66 20 61 20 6d 65  ress .** of a me
2fd40 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68 69  mory cell in thi
2fd50 73 20 28 74 68 65 20 70 61 72 65 6e 74 29 20 56  s (the parent) V
2fd60 4d 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74  M that is used t
2fd70 6f 20 61 6c 6c 6f 63 61 74 65 20 74 68 65 20 0a  o allocate the .
2fd80 2a 2a 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72  ** memory requir
2fd90 65 64 20 62 79 20 74 68 65 20 73 75 62 2d 76 64  ed by the sub-vd
2fda0 62 65 20 61 74 20 72 75 6e 74 69 6d 65 2e 0a 2a  be at runtime..*
2fdb0 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
2fdc0 6e 74 65 72 20 74 6f 20 74 68 65 20 56 4d 20 63  nter to the VM c
2fdd0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72  ontaining the tr
2fde0 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a 2a  igger program..*
2fdf0 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f  *.** If P5 is no
2fe00 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 72 65 63  n-zero, then rec
2fe10 75 72 73 69 76 65 20 70 72 6f 67 72 61 6d 20 69  ursive program i
2fe20 6e 76 6f 63 61 74 69 6f 6e 20 69 73 20 65 6e 61  nvocation is ena
2fe30 62 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  bled..*/.case OP
2fe40 5f 50 72 6f 67 72 61 6d 3a 20 7b 20 20 20 20 20  _Program: {     
2fe50 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
2fe60 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20  int nMem;       
2fe70 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
2fe80 72 20 6f 66 20 6d 65 6d 6f 72 79 20 72 65 67 69  r of memory regi
2fe90 73 74 65 72 73 20 66 6f 72 20 73 75 62 2d 70 72  sters for sub-pr
2fea0 6f 67 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e  ogram */.  int n
2feb0 42 79 74 65 3b 20 20 20 20 20 20 20 20 20 20 20  Byte;           
2fec0 20 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 72     /* Bytes of r
2fed0 75 6e 74 69 6d 65 20 73 70 61 63 65 20 72 65 71  untime space req
2fee0 75 69 72 65 64 20 66 6f 72 20 73 75 62 2d 70 72  uired for sub-pr
2fef0 6f 67 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a  ogram */.  Mem *
2ff00 70 52 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  pRt;            
2ff10 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74     /* Register t
2ff20 6f 20 61 6c 6c 6f 63 61 74 65 20 72 75 6e 74 69  o allocate runti
2ff30 6d 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 4d 65  me space */.  Me
2ff40 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20  m *pMem;        
2ff50 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20 74 6f        /* Used to
2ff60 20 69 74 65 72 61 74 65 20 74 68 72 6f 75 67 68   iterate through
2ff70 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 2a 2f   memory cells */
2ff80 0a 20 20 4d 65 6d 20 2a 70 45 6e 64 3b 20 20 20  .  Mem *pEnd;   
2ff90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61             /* La
2ffa0 73 74 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69  st memory cell i
2ffb0 6e 20 6e 65 77 20 61 72 72 61 79 20 2a 2f 0a 20  n new array */. 
2ffc0 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61   VdbeFrame *pFra
2ffd0 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 65 77 20  me;      /* New 
2ffe0 76 64 62 65 20 66 72 61 6d 65 20 74 6f 20 65 78  vdbe frame to ex
2fff0 65 63 75 74 65 20 69 6e 20 2a 2f 0a 20 20 53 75  ecute in */.  Su
30000 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72  bProgram *pProgr
30010 61 6d 3b 20 20 20 2f 2a 20 53 75 62 2d 70 72 6f  am;   /* Sub-pro
30020 67 72 61 6d 20 74 6f 20 65 78 65 63 75 74 65 20  gram to execute 
30030 2a 2f 0a 20 20 76 6f 69 64 20 2a 74 3b 20 20 20  */.  void *t;   
30040 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
30050 54 6f 6b 65 6e 20 69 64 65 6e 74 69 66 79 69 6e  Token identifyin
30060 67 20 74 72 69 67 67 65 72 20 2a 2f 0a 0a 20 20  g trigger */..  
30070 70 50 72 6f 67 72 61 6d 20 3d 20 70 4f 70 2d 3e  pProgram = pOp->
30080 70 34 2e 70 50 72 6f 67 72 61 6d 3b 0a 20 20 70  p4.pProgram;.  p
30090 52 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  Rt = &aMem[pOp->
300a0 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p3];.  assert( p
300b0 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29  Program->nOp>0 )
300c0 3b 0a 20 20 0a 20 20 2f 2a 20 49 66 20 74 68 65  ;.  .  /* If the
300d0 20 70 35 20 66 6c 61 67 20 69 73 20 63 6c 65 61   p5 flag is clea
300e0 72 2c 20 74 68 65 6e 20 72 65 63 75 72 73 69 76  r, then recursiv
300f0 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20  e invocation of 
30100 74 72 69 67 67 65 72 73 20 69 73 20 0a 20 20 2a  triggers is .  *
30110 2a 20 64 69 73 61 62 6c 65 64 20 66 6f 72 20 62  * disabled for b
30120 61 63 6b 77 61 72 64 73 20 63 6f 6d 70 61 74 69  ackwards compati
30130 62 69 6c 69 74 79 20 28 70 35 20 69 73 20 73 65  bility (p5 is se
30140 74 20 69 66 20 74 68 69 73 20 73 75 62 2d 70 72  t if this sub-pr
30150 6f 67 72 61 6d 0a 20 20 2a 2a 20 69 73 20 72 65  ogram.  ** is re
30160 61 6c 6c 79 20 61 20 74 72 69 67 67 65 72 2c 20  ally a trigger, 
30170 6e 6f 74 20 61 20 66 6f 72 65 69 67 6e 20 6b 65  not a foreign ke
30180 79 20 61 63 74 69 6f 6e 2c 20 61 6e 64 20 74 68  y action, and th
30190 65 20 66 6c 61 67 20 73 65 74 0a 20 20 2a 2a 20  e flag set.  ** 
301a0 61 6e 64 20 63 6c 65 61 72 65 64 20 62 79 20 74  and cleared by t
301b0 68 65 20 22 50 52 41 47 4d 41 20 72 65 63 75 72  he "PRAGMA recur
301c0 73 69 76 65 5f 74 72 69 67 67 65 72 73 22 20 63  sive_triggers" c
301d0 6f 6d 6d 61 6e 64 20 69 73 20 63 6c 65 61 72 29  ommand is clear)
301e0 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20 49 74 20  ..  ** .  ** It 
301f0 69 73 20 72 65 63 75 72 73 69 76 65 20 69 6e 76  is recursive inv
30200 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67  ocation of trigg
30210 65 72 73 2c 20 61 74 20 74 68 65 20 53 51 4c 20  ers, at the SQL 
30220 6c 65 76 65 6c 2c 20 74 68 61 74 20 69 73 20 0a  level, that is .
30230 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 2e 20 49    ** disabled. I
30240 6e 20 73 6f 6d 65 20 63 61 73 65 73 20 61 20 73  n some cases a s
30250 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20 6d 61  ingle trigger ma
30260 79 20 67 65 6e 65 72 61 74 65 20 6d 6f 72 65 20  y generate more 
30270 74 68 61 6e 20 6f 6e 65 20 0a 20 20 2a 2a 20 53  than one .  ** S
30280 75 62 50 72 6f 67 72 61 6d 20 28 69 66 20 74 68  ubProgram (if th
30290 65 20 74 72 69 67 67 65 72 20 6d 61 79 20 62 65  e trigger may be
302a0 20 65 78 65 63 75 74 65 64 20 77 69 74 68 20 6d   executed with m
302b0 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 64 69 66  ore than one dif
302c0 66 65 72 65 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20  ferent .  ** ON 
302d0 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74  CONFLICT algorit
302e0 68 6d 29 2e 20 53 75 62 50 72 6f 67 72 61 6d 20  hm). SubProgram 
302f0 73 74 72 75 63 74 75 72 65 73 20 61 73 73 6f 63  structures assoc
30300 69 61 74 65 64 20 77 69 74 68 20 61 0a 20 20 2a  iated with a.  *
30310 2a 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72  * single trigger
30320 20 61 6c 6c 20 68 61 76 65 20 74 68 65 20 73 61   all have the sa
30330 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65  me value for the
30340 20 53 75 62 50 72 6f 67 72 61 6d 2e 74 6f 6b 65   SubProgram.toke
30350 6e 20 0a 20 20 2a 2a 20 76 61 72 69 61 62 6c 65  n .  ** variable
30360 2e 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d  .  */.  if( pOp-
30370 3e 70 35 20 29 7b 0a 20 20 20 20 74 20 3d 20 70  >p5 ){.    t = p
30380 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a  Program->token;.
30390 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70      for(pFrame=p
303a0 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65  ->pFrame; pFrame
303b0 20 26 26 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65   && pFrame->toke
303c0 6e 21 3d 74 3b 20 70 46 72 61 6d 65 3d 70 46 72  n!=t; pFrame=pFr
303d0 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20  ame->pParent);. 
303e0 20 20 20 69 66 28 20 70 46 72 61 6d 65 20 29 20     if( pFrame ) 
303f0 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66  break;.  }..  if
30400 28 20 70 2d 3e 6e 46 72 61 6d 65 3e 3d 64 62 2d  ( p->nFrame>=db-
30410 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
30420 49 4d 49 54 5f 54 52 49 47 47 45 52 5f 44 45 50  IMIT_TRIGGER_DEP
30430 54 48 5d 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  TH] ){.    rc = 
30440 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
30450 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
30460 6f 72 28 70 2c 20 22 74 6f 6f 20 6d 61 6e 79 20  or(p, "too many 
30470 6c 65 76 65 6c 73 20 6f 66 20 74 72 69 67 67 65  levels of trigge
30480 72 20 72 65 63 75 72 73 69 6f 6e 22 29 3b 0a 20  r recursion");. 
30490 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
304a0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a  e_to_error;.  }.
304b0 0a 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 70  .  /* Register p
304c0 52 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74  Rt is used to st
304d0 6f 72 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 72  ore the memory r
304e0 65 71 75 69 72 65 64 20 74 6f 20 73 61 76 65 20  equired to save 
304f0 74 68 65 20 73 74 61 74 65 0a 20 20 2a 2a 20 6f  the state.  ** o
30500 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72  f the current pr
30510 6f 67 72 61 6d 2c 20 61 6e 64 20 74 68 65 20 6d  ogram, and the m
30520 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 61  emory required a
30530 74 20 72 75 6e 74 69 6d 65 20 74 6f 20 65 78 65  t runtime to exe
30540 63 75 74 65 0a 20 20 2a 2a 20 74 68 65 20 74 72  cute.  ** the tr
30550 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 20 49  igger program. I
30560 66 20 74 68 69 73 20 74 72 69 67 67 65 72 20 68  f this trigger h
30570 61 73 20 62 65 65 6e 20 66 69 72 65 64 20 62 65  as been fired be
30580 66 6f 72 65 2c 20 74 68 65 6e 20 70 52 74 20 0a  fore, then pRt .
30590 20 20 2a 2a 20 69 73 20 61 6c 72 65 61 64 79 20    ** is already 
305a0 61 6c 6c 6f 63 61 74 65 64 2e 20 4f 74 68 65 72  allocated. Other
305b0 77 69 73 65 2c 20 69 74 20 6d 75 73 74 20 62 65  wise, it must be
305c0 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 20 2a   initialized.  *
305d0 2f 0a 20 20 69 66 28 20 28 70 52 74 2d 3e 66 6c  /.  if( (pRt->fl
305e0 61 67 73 26 4d 45 4d 5f 46 72 61 6d 65 29 3d 3d  ags&MEM_Frame)==
305f0 30 20 29 7b 0a 20 20 20 20 2f 2a 20 53 75 62 50  0 ){.    /* SubP
30600 72 6f 67 72 61 6d 2e 6e 4d 65 6d 20 69 73 20 73  rogram.nMem is s
30610 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  et to the number
30620 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73   of memory cells
30630 20 75 73 65 64 20 62 79 20 74 68 65 20 0a 20 20   used by the .  
30640 20 20 2a 2a 20 70 72 6f 67 72 61 6d 20 73 74 6f    ** program sto
30650 72 65 64 20 69 6e 20 53 75 62 50 72 6f 67 72 61  red in SubProgra
30660 6d 2e 61 4f 70 2e 20 41 73 20 77 65 6c 6c 20 61  m.aOp. As well a
30670 73 20 74 68 65 73 65 2c 20 6f 6e 65 20 6d 65 6d  s these, one mem
30680 6f 72 79 0a 20 20 20 20 2a 2a 20 63 65 6c 6c 20  ory.    ** cell 
30690 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  is required for 
306a0 65 61 63 68 20 63 75 72 73 6f 72 20 75 73 65 64  each cursor used
306b0 20 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e   by the program.
306c0 20 53 65 74 20 6c 6f 63 61 6c 0a 20 20 20 20 2a   Set local.    *
306d0 2a 20 76 61 72 69 61 62 6c 65 20 6e 4d 65 6d 20  * variable nMem 
306e0 28 61 6e 64 20 6c 61 74 65 72 2c 20 56 64 62 65  (and later, Vdbe
306f0 46 72 61 6d 65 2e 6e 43 68 69 6c 64 4d 65 6d 29  Frame.nChildMem)
30700 20 74 6f 20 74 68 69 73 20 76 61 6c 75 65 2e 0a   to this value..
30710 20 20 20 20 2a 2f 0a 20 20 20 20 6e 4d 65 6d 20      */.    nMem 
30720 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d  = pProgram->nMem
30730 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73   + pProgram->nCs
30740 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6e  r;.    assert( n
30750 4d 65 6d 3e 30 20 29 3b 0a 20 20 20 20 69 66 28  Mem>0 );.    if(
30760 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d   pProgram->nCsr=
30770 3d 30 20 29 20 6e 4d 65 6d 2b 2b 3b 0a 20 20 20  =0 ) nMem++;.   
30780 20 6e 42 79 74 65 20 3d 20 52 4f 55 4e 44 38 28   nByte = ROUND8(
30790 73 69 7a 65 6f 66 28 56 64 62 65 46 72 61 6d 65  sizeof(VdbeFrame
307a0 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )).             
307b0 20 2b 20 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f 66   + nMem * sizeof
307c0 28 4d 65 6d 29 0a 20 20 20 20 20 20 20 20 20 20  (Mem).          
307d0 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e      + pProgram->
307e0 6e 43 73 72 20 2a 20 73 69 7a 65 6f 66 28 56 64  nCsr * sizeof(Vd
307f0 62 65 43 75 72 73 6f 72 20 2a 29 3b 0a 20 20 20  beCursor *);.   
30800 20 70 46 72 61 6d 65 20 3d 20 73 71 6c 69 74 65   pFrame = sqlite
30810 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64 62  3DbMallocZero(db
30820 2c 20 6e 42 79 74 65 29 3b 0a 20 20 20 20 69 66  , nByte);.    if
30830 28 20 21 70 46 72 61 6d 65 20 29 7b 0a 20 20 20  ( !pFrame ){.   
30840 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
30850 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
30860 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28  3VdbeMemRelease(
30870 70 52 74 29 3b 0a 20 20 20 20 70 52 74 2d 3e 66  pRt);.    pRt->f
30880 6c 61 67 73 20 3d 20 4d 45 4d 5f 46 72 61 6d 65  lags = MEM_Frame
30890 3b 0a 20 20 20 20 70 52 74 2d 3e 75 2e 70 46 72  ;.    pRt->u.pFr
308a0 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 0a 20  ame = pFrame;.. 
308b0 20 20 20 70 46 72 61 6d 65 2d 3e 76 20 3d 20 70     pFrame->v = p
308c0 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43  ;.    pFrame->nC
308d0 68 69 6c 64 4d 65 6d 20 3d 20 6e 4d 65 6d 3b 0a  hildMem = nMem;.
308e0 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69      pFrame->nChi
308f0 6c 64 43 73 72 20 3d 20 70 50 72 6f 67 72 61 6d  ldCsr = pProgram
30900 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 70 46 72 61  ->nCsr;.    pFra
30910 6d 65 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70  me->pc = (int)(p
30920 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20 70  Op - aOp);.    p
30930 46 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d 20 70 2d  Frame->aMem = p-
30940 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d  >aMem;.    pFram
30950 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e 6e 4d 65  e->nMem = p->nMe
30960 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61  m;.    pFrame->a
30970 70 43 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 3b  pCsr = p->apCsr;
30980 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 75  .    pFrame->nCu
30990 72 73 6f 72 20 3d 20 70 2d 3e 6e 43 75 72 73 6f  rsor = p->nCurso
309a0 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61  r;.    pFrame->a
309b0 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20  Op = p->aOp;.   
309c0 20 70 46 72 61 6d 65 2d 3e 6e 4f 70 20 3d 20 70   pFrame->nOp = p
309d0 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d  ->nOp;.    pFram
309e0 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50 72 6f 67  e->token = pProg
309f0 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 23 69 66 64  ram->token;.#ifd
30a00 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
30a10 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53  _STMT_SCANSTATUS
30a20 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 6e 45  .    pFrame->anE
30a30 78 65 63 20 3d 20 70 2d 3e 61 6e 45 78 65 63 3b  xec = p->anExec;
30a40 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 70 45 6e  .#endif..    pEn
30a50 64 20 3d 20 26 56 64 62 65 46 72 61 6d 65 4d 65  d = &VdbeFrameMe
30a60 6d 28 70 46 72 61 6d 65 29 5b 70 46 72 61 6d 65  m(pFrame)[pFrame
30a70 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b 0a 20 20  ->nChildMem];.  
30a80 20 20 66 6f 72 28 70 4d 65 6d 3d 56 64 62 65 46    for(pMem=VdbeF
30a90 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 3b  rameMem(pFrame);
30aa0 20 70 4d 65 6d 21 3d 70 45 6e 64 3b 20 70 4d 65   pMem!=pEnd; pMe
30ab0 6d 2b 2b 29 7b 0a 20 20 20 20 20 20 70 4d 65 6d  m++){.      pMem
30ac0 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e  ->flags = MEM_Un
30ad0 64 65 66 69 6e 65 64 3b 0a 20 20 20 20 20 20 70  defined;.      p
30ae0 4d 65 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a 20 20  Mem->db = db;.  
30af0 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
30b00 20 70 46 72 61 6d 65 20 3d 20 70 52 74 2d 3e 75   pFrame = pRt->u
30b10 2e 70 46 72 61 6d 65 3b 0a 20 20 20 20 61 73 73  .pFrame;.    ass
30b20 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  ert( pProgram->n
30b30 4d 65 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e 43  Mem+pProgram->nC
30b40 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69  sr==pFrame->nChi
30b50 6c 64 4d 65 6d 20 0a 20 20 20 20 20 20 20 20 7c  ldMem .        |
30b60 7c 20 28 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73  | (pProgram->nCs
30b70 72 3d 3d 30 20 26 26 20 70 50 72 6f 67 72 61 6d  r==0 && pProgram
30b80 2d 3e 6e 4d 65 6d 2b 31 3d 3d 70 46 72 61 6d 65  ->nMem+1==pFrame
30b90 2d 3e 6e 43 68 69 6c 64 4d 65 6d 29 20 29 3b 0a  ->nChildMem) );.
30ba0 20 20 20 20 61 73 73 65 72 74 28 20 70 50 72 6f      assert( pPro
30bb0 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61  gram->nCsr==pFra
30bc0 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 29 3b  me->nChildCsr );
30bd0 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 69 6e  .    assert( (in
30be0 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3d 3d 70  t)(pOp - aOp)==p
30bf0 46 72 61 6d 65 2d 3e 70 63 20 29 3b 0a 20 20 7d  Frame->pc );.  }
30c00 0a 0a 20 20 70 2d 3e 6e 46 72 61 6d 65 2b 2b 3b  ..  p->nFrame++;
30c10 0a 20 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  .  pFrame->pPare
30c20 6e 74 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a  nt = p->pFrame;.
30c30 20 20 70 46 72 61 6d 65 2d 3e 6c 61 73 74 52 6f    pFrame->lastRo
30c40 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f  wid = db->lastRo
30c50 77 69 64 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e  wid;.  pFrame->n
30c60 43 68 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68 61  Change = p->nCha
30c70 6e 67 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e  nge;.  pFrame->n
30c80 44 62 43 68 61 6e 67 65 20 3d 20 70 2d 3e 64 62  DbChange = p->db
30c90 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 61 73 73  ->nChange;.  ass
30ca0 65 72 74 28 20 70 46 72 61 6d 65 2d 3e 70 41 75  ert( pFrame->pAu
30cb0 78 44 61 74 61 3d 3d 30 20 29 3b 0a 20 20 70 46  xData==0 );.  pF
30cc0 72 61 6d 65 2d 3e 70 41 75 78 44 61 74 61 20 3d  rame->pAuxData =
30cd0 20 70 2d 3e 70 41 75 78 44 61 74 61 3b 0a 20 20   p->pAuxData;.  
30ce0 70 2d 3e 70 41 75 78 44 61 74 61 20 3d 20 30 3b  p->pAuxData = 0;
30cf0 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20  .  p->nChange = 
30d00 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d  0;.  p->pFrame =
30d10 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d 3e 61 4d   pFrame;.  p->aM
30d20 65 6d 20 3d 20 61 4d 65 6d 20 3d 20 56 64 62 65  em = aMem = Vdbe
30d30 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29  FrameMem(pFrame)
30d40 3b 0a 20 20 70 2d 3e 6e 4d 65 6d 20 3d 20 70 46  ;.  p->nMem = pF
30d50 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 3b  rame->nChildMem;
30d60 0a 20 20 70 2d 3e 6e 43 75 72 73 6f 72 20 3d 20  .  p->nCursor = 
30d70 28 75 31 36 29 70 46 72 61 6d 65 2d 3e 6e 43 68  (u16)pFrame->nCh
30d80 69 6c 64 43 73 72 3b 0a 20 20 70 2d 3e 61 70 43  ildCsr;.  p->apC
30d90 73 72 20 3d 20 28 56 64 62 65 43 75 72 73 6f 72  sr = (VdbeCursor
30da0 20 2a 2a 29 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65   **)&aMem[p->nMe
30db0 6d 5d 3b 0a 20 20 70 2d 3e 61 4f 70 20 3d 20 61  m];.  p->aOp = a
30dc0 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 61  Op = pProgram->a
30dd0 4f 70 3b 0a 20 20 70 2d 3e 6e 4f 70 20 3d 20 70  Op;.  p->nOp = p
30de0 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3b 0a 23 69  Program->nOp;.#i
30df0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
30e00 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54  LE_STMT_SCANSTAT
30e10 55 53 0a 20 20 70 2d 3e 61 6e 45 78 65 63 20 3d  US.  p->anExec =
30e20 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 70 4f 70   0;.#endif.  pOp
30e30 20 3d 20 26 61 4f 70 5b 2d 31 5d 3b 0a 0a 20 20   = &aOp[-1];..  
30e40 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
30e50 6f 64 65 3a 20 50 61 72 61 6d 20 50 31 20 50 32  ode: Param P1 P2
30e60 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69   * * *.**.** Thi
30e70 73 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79  s opcode is only
30e80 20 65 76 65 72 20 70 72 65 73 65 6e 74 20 69 6e   ever present in
30e90 20 73 75 62 2d 70 72 6f 67 72 61 6d 73 20 63 61   sub-programs ca
30ea0 6c 6c 65 64 20 76 69 61 20 74 68 65 20 0a 2a 2a  lled via the .**
30eb0 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74   OP_Program inst
30ec0 72 75 63 74 69 6f 6e 2e 20 43 6f 70 79 20 61 20  ruction. Copy a 
30ed0 76 61 6c 75 65 20 63 75 72 72 65 6e 74 6c 79 20  value currently 
30ee0 73 74 6f 72 65 64 20 69 6e 20 61 20 6d 65 6d 6f  stored in a memo
30ef0 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66 20 74  ry .** cell of t
30f00 68 65 20 63 61 6c 6c 69 6e 67 20 28 70 61 72 65  he calling (pare
30f10 6e 74 29 20 66 72 61 6d 65 20 74 6f 20 63 65 6c  nt) frame to cel
30f20 6c 20 50 32 20 69 6e 20 74 68 65 20 63 75 72 72  l P2 in the curr
30f30 65 6e 74 20 66 72 61 6d 65 73 20 0a 2a 2a 20 61  ent frames .** a
30f40 64 64 72 65 73 73 20 73 70 61 63 65 2e 20 54 68  ddress space. Th
30f50 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72  is is used by tr
30f60 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 20 74  igger programs t
30f70 6f 20 61 63 63 65 73 73 20 74 68 65 20 6e 65 77  o access the new
30f80 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64 2e 2a  .* .** and old.*
30f90 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 54   values..**.** T
30fa0 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74 68  he address of th
30fb0 65 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 70 61  e cell in the pa
30fc0 72 65 6e 74 20 66 72 61 6d 65 20 69 73 20 64 65  rent frame is de
30fd0 74 65 72 6d 69 6e 65 64 20 62 79 20 61 64 64 69  termined by addi
30fe0 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20  ng.** the value 
30ff0 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d 65  of the P1 argume
31000 6e 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  nt to the value 
31010 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d 65  of the P1 argume
31020 6e 74 20 74 6f 20 74 68 65 0a 2a 2a 20 63 61 6c  nt to the.** cal
31030 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 20  ling OP_Program 
31040 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
31050 63 61 73 65 20 4f 50 5f 50 61 72 61 6d 3a 20 7b  case OP_Param: {
31060 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
31070 74 32 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d  t2 */.  VdbeFram
31080 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 4d 65 6d  e *pFrame;.  Mem
31090 20 2a 70 49 6e 3b 0a 20 20 70 4f 75 74 20 3d 20   *pIn;.  pOut = 
310a0 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
310b0 2c 20 70 4f 70 29 3b 0a 20 20 70 46 72 61 6d 65  , pOp);.  pFrame
310c0 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20   = p->pFrame;.  
310d0 70 49 6e 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61  pIn = &pFrame->a
310e0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 20 2b 20 70 46  Mem[pOp->p1 + pF
310f0 72 61 6d 65 2d 3e 61 4f 70 5b 70 46 72 61 6d 65  rame->aOp[pFrame
31100 2d 3e 70 63 5d 2e 70 31 5d 3b 20 20 20 0a 20 20  ->pc].p1];   .  
31110 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
31120 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20  allowCopy(pOut, 
31130 70 49 6e 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b  pIn, MEM_Ephem);
31140 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 65 6e  .  break;.}..#en
31150 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53  dif /* #ifndef S
31160 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
31170 45 52 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  ER */..#ifndef S
31180 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
31190 47 4e 5f 4b 45 59 0a 2f 2a 20 4f 70 63 6f 64 65  GN_KEY./* Opcode
311a0 3a 20 46 6b 43 6f 75 6e 74 65 72 20 50 31 20 50  : FkCounter P1 P
311b0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
311c0 73 69 73 3a 20 66 6b 63 74 72 5b 50 31 5d 2b 3d  sis: fkctr[P1]+=
311d0 50 32 0a 2a 2a 0a 2a 2a 20 49 6e 63 72 65 6d 65  P2.**.** Increme
311e0 6e 74 20 61 20 22 63 6f 6e 73 74 72 61 69 6e 74  nt a "constraint
311f0 20 63 6f 75 6e 74 65 72 22 20 62 79 20 50 32 20   counter" by P2 
31200 28 50 32 20 6d 61 79 20 62 65 20 6e 65 67 61 74  (P2 may be negat
31210 69 76 65 20 6f 72 20 70 6f 73 69 74 69 76 65 29  ive or positive)
31220 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f  ..** If P1 is no
31230 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 64 61 74 61  n-zero, the data
31240 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 20  base constraint 
31250 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65  counter is incre
31260 6d 65 6e 74 65 64 20 0a 2a 2a 20 28 64 65 66 65  mented .** (defe
31270 72 72 65 64 20 66 6f 72 65 69 67 6e 20 6b 65 79  rred foreign key
31280 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 20 4f   constraints). O
31290 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 31 20  therwise, if P1 
312a0 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 0a 2a 2a  is zero, the .**
312b0 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 75 6e 74   statement count
312c0 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  er is incremente
312d0 64 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72  d (immediate for
312e0 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
312f0 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ints)..*/.case O
31300 50 5f 46 6b 43 6f 75 6e 74 65 72 3a 20 7b 0a 20  P_FkCounter: {. 
31310 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26   if( db->flags &
31320 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73   SQLITE_DeferFKs
31330 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66   ){.    db->nDef
31340 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 2b 3d 20  erredImmCons += 
31350 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65  pOp->p2;.  }else
31360 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a   if( pOp->p1 ){.
31370 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65      db->nDeferre
31380 64 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32  dCons += pOp->p2
31390 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
313a0 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 20  ->nFkConstraint 
313b0 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 0a  += pOp->p2;.  }.
313c0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
313d0 70 63 6f 64 65 3a 20 46 6b 49 66 5a 65 72 6f 20  pcode: FkIfZero 
313e0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
313f0 79 6e 6f 70 73 69 73 3a 20 69 66 20 66 6b 63 74  ynopsis: if fkct
31400 72 5b 50 31 5d 3d 3d 30 20 67 6f 74 6f 20 50 32  r[P1]==0 goto P2
31410 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
31420 64 65 20 74 65 73 74 73 20 69 66 20 61 20 66 6f  de tests if a fo
31430 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
31440 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20  aint-counter is 
31450 63 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2e 0a  currently zero..
31460 2a 2a 20 49 66 20 73 6f 2c 20 6a 75 6d 70 20 74  ** If so, jump t
31470 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32  o instruction P2
31480 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c  . Otherwise, fal
31490 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
314a0 20 6e 65 78 74 20 0a 2a 2a 20 69 6e 73 74 72 75   next .** instru
314b0 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ction..**.** If 
314c0 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  P1 is non-zero, 
314d0 74 68 65 6e 20 74 68 65 20 6a 75 6d 70 20 69 73  then the jump is
314e0 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 64 61   taken if the da
314f0 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e  tabase constrain
31500 74 2d 63 6f 75 6e 74 65 72 0a 2a 2a 20 69 73 20  t-counter.** is 
31510 7a 65 72 6f 20 28 74 68 65 20 6f 6e 65 20 74 68  zero (the one th
31520 61 74 20 63 6f 75 6e 74 73 20 64 65 66 65 72 72  at counts deferr
31530 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  ed constraint vi
31540 6f 6c 61 74 69 6f 6e 73 29 2e 20 49 66 20 50 31  olations). If P1
31550 20 69 73 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68 65   is.** zero, the
31560 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
31570 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  f the statement 
31580 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74  constraint-count
31590 65 72 20 69 73 20 7a 65 72 6f 0a 2a 2a 20 28 69  er is zero.** (i
315a0 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e  mmediate foreign
315b0 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20   key constraint 
315c0 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 0a 2a 2f 0a  violations)..*/.
315d0 63 61 73 65 20 4f 50 5f 46 6b 49 66 5a 65 72 6f  case OP_FkIfZero
315e0 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  : {         /* j
315f0 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70  ump */.  if( pOp
31600 2d 3e 70 31 20 29 7b 0a 20 20 20 20 56 64 62 65  ->p1 ){.    Vdbe
31610 42 72 61 6e 63 68 54 61 6b 65 6e 28 64 62 2d 3e  BranchTaken(db->
31620 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30  nDeferredCons==0
31630 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65   && db->nDeferre
31640 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b  dImmCons==0, 2);
31650 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 44 65  .    if( db->nDe
31660 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26  ferredCons==0 &&
31670 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
31680 6d 43 6f 6e 73 3d 3d 30 20 29 20 67 6f 74 6f 20  mCons==0 ) goto 
31690 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65  jump_to_p2;.  }e
316a0 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61  lse{.    VdbeBra
316b0 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 6e 46 6b 43  nchTaken(p->nFkC
316c0 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26 26 20  onstraint==0 && 
316d0 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
316e0 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20 20 20  Cons==0, 2);.   
316f0 20 69 66 28 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74   if( p->nFkConst
31700 72 61 69 6e 74 3d 3d 30 20 26 26 20 64 62 2d 3e  raint==0 && db->
31710 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
31720 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  ==0 ) goto jump_
31730 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  to_p2;.  }.  bre
31740 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
31750 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
31760 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20  MIT_FOREIGN_KEY 
31770 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
31780 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52  TE_OMIT_AUTOINCR
31790 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  EMENT./* Opcode:
317a0 20 4d 65 6d 4d 61 78 20 50 31 20 50 32 20 2a 20   MemMax P1 P2 * 
317b0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
317c0 20 72 5b 50 31 5d 3d 6d 61 78 28 72 5b 50 31 5d   r[P1]=max(r[P1]
317d0 2c 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 50 31  ,r[P2]).**.** P1
317e0 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20 69   is a register i
317f0 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65  n the root frame
31800 20 6f 66 20 74 68 69 73 20 56 4d 20 28 74 68 65   of this VM (the
31810 20 72 6f 6f 74 20 66 72 61 6d 65 20 69 73 0a 2a   root frame is.*
31820 2a 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d  * different from
31830 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 72 61   the current fra
31840 6d 65 20 69 66 20 74 68 69 73 20 69 6e 73 74 72  me if this instr
31850 75 63 74 69 6f 6e 20 69 73 20 62 65 69 6e 67 20  uction is being 
31860 65 78 65 63 75 74 65 64 0a 2a 2a 20 77 69 74 68  executed.** with
31870 69 6e 20 61 20 73 75 62 2d 70 72 6f 67 72 61 6d  in a sub-program
31880 29 2e 20 53 65 74 20 74 68 65 20 76 61 6c 75 65  ). Set the value
31890 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
318a0 74 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f  to the maximum o
318b0 66 20 0a 2a 2a 20 69 74 73 20 63 75 72 72 65 6e  f .** its curren
318c0 74 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20  t value and the 
318d0 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
318e0 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r P2..**.** This
318f0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 72   instruction thr
31900 6f 77 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20  ows an error if 
31910 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  the memory cell 
31920 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79  is not initially
31930 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a  .** an integer..
31940 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d 4d 61  */.case OP_MemMa
31950 78 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69  x: {        /* i
31960 6e 32 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d  n2 */.  VdbeFram
31970 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69 66 28  e *pFrame;.  if(
31980 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20   p->pFrame ){.  
31990 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e    for(pFrame=p->
319a0 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e  pFrame; pFrame->
319b0 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d  pParent; pFrame=
319c0 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29  pFrame->pParent)
319d0 3b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 70 46  ;.    pIn1 = &pF
319e0 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  rame->aMem[pOp->
319f0 70 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  p1];.  }else{.  
31a00 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
31a10 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a 20 20 61  Op->p1];.  }.  a
31a20 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
31a30 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 73 71 6c  d(pIn1) );.  sql
31a40 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
31a50 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70  erify(pIn1);.  p
31a60 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
31a70 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56  >p2];.  sqlite3V
31a80 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
31a90 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 70 49  (pIn2);.  if( pI
31aa0 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e  n1->u.i<pIn2->u.
31ab0 69 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e  i){.    pIn1->u.
31ac0 69 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20  i = pIn2->u.i;. 
31ad0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
31ae0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
31af0 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
31b00 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  T */../* Opcode:
31b10 20 49 66 50 6f 73 20 50 31 20 50 32 20 50 33 20   IfPos P1 P2 P3 
31b20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
31b30 20 69 66 20 72 5b 50 31 5d 3e 30 20 74 68 65 6e   if r[P1]>0 then
31b40 20 72 5b 50 31 5d 2d 3d 50 33 2c 20 67 6f 74 6f   r[P1]-=P3, goto
31b50 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74   P2.**.** Regist
31b60 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74 61  er P1 must conta
31b70 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  in an integer..*
31b80 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f  * If the value o
31b90 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  f register P1 is
31ba0 20 31 20 6f 72 20 67 72 65 61 74 65 72 2c 20 73   1 or greater, s
31bb0 75 62 74 72 61 63 74 20 50 33 20 66 72 6f 6d 20  ubtract P3 from 
31bc0 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20  the.** value in 
31bd0 50 31 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 50  P1 and jump to P
31be0 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  2..**.** If the 
31bf0 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66  initial value of
31c00 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
31c10 6c 65 73 73 20 74 68 61 6e 20 31 2c 20 74 68 65  less than 1, the
31c20 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69  n the.** value i
31c30 73 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20  s unchanged and 
31c40 63 6f 6e 74 72 6f 6c 20 70 61 73 73 65 73 20 74  control passes t
31c50 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
31c60 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
31c70 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 50 6f 73  */.case OP_IfPos
31c80 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
31c90 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
31ca0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
31cb0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1];.  assert( pI
31cc0 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n1->flags&MEM_In
31cd0 74 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  t );.  VdbeBranc
31ce0 68 54 61 6b 65 6e 28 20 70 49 6e 31 2d 3e 75 2e  hTaken( pIn1->u.
31cf0 69 3e 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70  i>0, 2);.  if( p
31d00 49 6e 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20 20  In1->u.i>0 ){.  
31d10 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2d 3d 20 70    pIn1->u.i -= p
31d20 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 67 6f 74 6f  Op->p3;.    goto
31d30 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
31d40 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
31d50 4f 70 63 6f 64 65 3a 20 4f 66 66 73 65 74 4c 69  Opcode: OffsetLi
31d60 6d 69 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  mit P1 P2 P3 * *
31d70 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
31d80 20 72 5b 50 31 5d 3e 30 20 74 68 65 6e 20 72 5b   r[P1]>0 then r[
31d90 50 32 5d 3d 72 5b 50 31 5d 2b 6d 61 78 28 30 2c  P2]=r[P1]+max(0,
31da0 72 5b 50 33 5d 29 20 65 6c 73 65 20 72 5b 50 32  r[P3]) else r[P2
31db0 5d 3d 28 2d 31 29 0a 2a 2a 0a 2a 2a 20 54 68 69  ]=(-1).**.** Thi
31dc0 73 20 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d  s opcode perform
31dd0 73 20 61 20 63 6f 6d 6d 6f 6e 6c 79 20 75 73 65  s a commonly use
31de0 64 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 61 73  d computation as
31df0 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a 2a 2a  sociated with.**
31e00 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46 53 45   LIMIT and OFFSE
31e10 54 20 70 72 6f 63 65 73 73 2e 20 20 72 5b 50 31  T process.  r[P1
31e20 5d 20 68 6f 6c 64 73 20 74 68 65 20 6c 69 6d 69  ] holds the limi
31e30 74 20 63 6f 75 6e 74 65 72 2e 20 20 72 5b 50 33  t counter.  r[P3
31e40 5d 0a 2a 2a 20 68 6f 6c 64 73 20 74 68 65 20 6f  ].** holds the o
31e50 66 66 73 65 74 20 63 6f 75 6e 74 65 72 2e 20 20  ffset counter.  
31e60 54 68 65 20 6f 70 63 6f 64 65 20 63 6f 6d 70 75  The opcode compu
31e70 74 65 73 20 74 68 65 20 63 6f 6d 62 69 6e 65 64  tes the combined
31e80 20 76 61 6c 75 65 0a 2a 2a 20 6f 66 20 74 68 65   value.** of the
31e90 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46 53 45   LIMIT and OFFSE
31ea0 54 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68 61  T and stores tha
31eb0 74 20 76 61 6c 75 65 20 69 6e 20 72 5b 50 32 5d  t value in r[P2]
31ec0 2e 20 20 54 68 65 20 72 5b 50 32 5d 0a 2a 2a 20  .  The r[P2].** 
31ed0 76 61 6c 75 65 20 63 6f 6d 70 75 74 65 64 20 69  value computed i
31ee0 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  s the total numb
31ef0 65 72 20 6f 66 20 72 6f 77 73 20 74 68 61 74 20  er of rows that 
31f00 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65 0a  will need to be.
31f10 2a 2a 20 76 69 73 69 74 65 64 20 69 6e 20 6f 72  ** visited in or
31f20 64 65 72 20 74 6f 20 63 6f 6d 70 6c 65 74 65 20  der to complete 
31f30 74 68 65 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a  the query..**.**
31f40 20 49 66 20 72 5b 50 33 5d 20 69 73 20 7a 65 72   If r[P3] is zer
31f50 6f 20 6f 72 20 6e 65 67 61 74 69 76 65 2c 20 74  o or negative, t
31f60 68 61 74 20 6d 65 61 6e 73 20 74 68 65 72 65 20  hat means there 
31f70 69 73 20 6e 6f 20 4f 46 46 53 45 54 0a 2a 2a 20  is no OFFSET.** 
31f80 61 6e 64 20 72 5b 50 32 5d 20 69 73 20 73 65 74  and r[P2] is set
31f90 20 74 6f 20 62 65 20 74 68 65 20 76 61 6c 75 65   to be the value
31fa0 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 2c 20 72   of the LIMIT, r
31fb0 5b 50 31 5d 2e 0a 2a 2a 0a 2a 2a 20 69 66 20 72  [P1]..**.** if r
31fc0 5b 50 31 5d 20 69 73 20 7a 65 72 6f 20 6f 72 20  [P1] is zero or 
31fd0 6e 65 67 61 74 69 76 65 2c 20 74 68 61 74 20 6d  negative, that m
31fe0 65 61 6e 73 20 74 68 65 72 65 20 69 73 20 6e 6f  eans there is no
31ff0 20 4c 49 4d 49 54 0a 2a 2a 20 61 6e 64 20 72 5b   LIMIT.** and r[
32000 50 32 5d 20 69 73 20 73 65 74 20 74 6f 20 2d 31  P2] is set to -1
32010 2e 20 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 77 69  . .**.** Otherwi
32020 73 65 2c 20 72 5b 50 32 5d 20 69 73 20 73 65 74  se, r[P2] is set
32030 20 74 6f 20 74 68 65 20 73 75 6d 20 6f 66 20 72   to the sum of r
32040 5b 50 31 5d 20 61 6e 64 20 72 5b 50 33 5d 2e 0a  [P1] and r[P3]..
32050 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 66 66 73 65  */.case OP_Offse
32060 74 4c 69 6d 69 74 3a 20 7b 20 20 20 20 2f 2a 20  tLimit: {    /* 
32070 69 6e 31 2c 20 6f 75 74 32 2c 20 69 6e 33 20 2a  in1, out2, in3 *
32080 2f 0a 20 20 69 36 34 20 78 3b 0a 20 20 70 49 6e  /.  i64 x;.  pIn
32090 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
320a0 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d  1];.  pIn3 = &aM
320b0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70  em[pOp->p3];.  p
320c0 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
320d0 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
320e0 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
320f0 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
32100 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d  .  assert( pIn3-
32110 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
32120 20 29 3b 0a 20 20 78 20 3d 20 70 49 6e 31 2d 3e   );.  x = pIn1->
32130 75 2e 69 3b 0a 20 20 69 66 28 20 78 3c 3d 30 20  u.i;.  if( x<=0 
32140 7c 7c 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74  || sqlite3AddInt
32150 36 34 28 26 78 2c 20 70 49 6e 33 2d 3e 75 2e 69  64(&x, pIn3->u.i
32160 3e 30 3f 70 49 6e 33 2d 3e 75 2e 69 3a 30 29 20  >0?pIn3->u.i:0) 
32170 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65  ){.    /* If the
32180 20 4c 49 4d 49 54 20 69 73 20 6c 65 73 73 20 74   LIMIT is less t
32190 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
321a0 7a 65 72 6f 2c 20 6c 6f 6f 70 20 66 6f 72 65 76  zero, loop forev
321b0 65 72 2e 20 20 54 68 69 73 0a 20 20 20 20 2a 2a  er.  This.    **
321c0 20 69 73 20 64 6f 63 75 6d 65 6e 74 65 64 2e 20   is documented. 
321d0 20 42 75 74 20 61 6c 73 6f 2c 20 69 66 20 74 68   But also, if th
321e0 65 20 4c 49 4d 49 54 2b 4f 46 46 53 45 54 20 65  e LIMIT+OFFSET e
321f0 78 63 65 65 64 73 20 32 5e 36 33 20 74 68 65 6e  xceeds 2^63 then
32200 0a 20 20 20 20 2a 2a 20 61 6c 73 6f 20 6c 6f 6f  .    ** also loo
32210 70 20 66 6f 72 65 76 65 72 2e 20 20 54 68 69 73  p forever.  This
32220 20 69 73 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64   is undocumented
32230 2e 20 20 49 6e 20 66 61 63 74 2c 20 6f 6e 65 20  .  In fact, one 
32240 63 6f 75 6c 64 20 61 72 67 75 65 0a 20 20 20 20  could argue.    
32250 2a 2a 20 74 68 61 74 20 74 68 65 20 6c 6f 6f 70  ** that the loop
32260 20 73 68 6f 75 6c 64 20 74 65 72 6d 69 6e 61 74   should terminat
32270 65 2e 20 20 42 75 74 20 61 73 73 75 6d 69 6e 67  e.  But assuming
32280 20 31 20 62 69 6c 6c 69 6f 6e 20 69 74 65 72 61   1 billion itera
32290 74 69 6f 6e 73 0a 20 20 20 20 2a 2a 20 70 65 72  tions.    ** per
322a0 20 73 65 63 6f 6e 64 20 28 66 61 72 20 65 78 63   second (far exc
322b0 65 65 64 69 6e 67 20 74 68 65 20 63 61 70 61 62  eeding the capab
322c0 69 6c 69 74 69 65 73 20 6f 66 20 61 6e 79 20 63  ilities of any c
322d0 75 72 72 65 6e 74 20 68 61 72 64 77 61 72 65 29  urrent hardware)
322e0 0a 20 20 20 20 2a 2a 20 69 74 20 77 6f 75 6c 64  .    ** it would
322f0 20 74 61 6b 65 20 6e 65 61 72 6c 79 20 33 30 30   take nearly 300
32300 20 79 65 61 72 73 20 74 6f 20 61 63 74 75 61 6c   years to actual
32310 6c 79 20 72 65 61 63 68 20 74 68 65 20 6c 69 6d  ly reach the lim
32320 69 74 2e 20 20 53 6f 0a 20 20 20 20 2a 2a 20 6c  it.  So.    ** l
32330 6f 6f 70 69 6e 67 20 66 6f 72 65 76 65 72 20 69  ooping forever i
32340 73 20 61 20 72 65 61 73 6f 6e 61 62 6c 65 20 61  s a reasonable a
32350 70 70 72 6f 78 69 6d 61 74 69 6f 6e 2e 20 2a 2f  pproximation. */
32360 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
32370 20 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20   -1;.  }else{.  
32380 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 78 3b    pOut->u.i = x;
32390 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
323a0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f  ./* Opcode: IfNo
323b0 74 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20  tZero P1 P2 * * 
323c0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
323d0 66 20 72 5b 50 31 5d 21 3d 30 20 74 68 65 6e 20  f r[P1]!=0 then 
323e0 72 5b 50 31 5d 2d 2d 2c 20 67 6f 74 6f 20 50 32  r[P1]--, goto P2
323f0 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
32400 50 31 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20  P1 must contain 
32410 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20  an integer.  If 
32420 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
32430 65 67 69 73 74 65 72 20 50 31 20 69 73 0a 2a 2a  egister P1 is.**
32440 20 69 6e 69 74 69 61 6c 6c 79 20 67 72 65 61 74   initially great
32450 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68  er than zero, th
32460 65 6e 20 64 65 63 72 65 6d 65 6e 74 20 74 68 65  en decrement the
32470 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
32480 65 72 20 50 31 2e 0a 2a 2a 20 49 66 20 69 74 20  er P1..** If it 
32490 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 28 6e 65 67  is non-zero (neg
324a0 61 74 69 76 65 20 6f 72 20 70 6f 73 69 74 69 76  ative or positiv
324b0 65 29 20 61 6e 64 20 74 68 65 6e 20 61 6c 73 6f  e) and then also
324c0 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 0a 2a   jump to P2.  .*
324d0 2a 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31  * If register P1
324e0 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 7a 65   is initially ze
324f0 72 6f 2c 20 6c 65 61 76 65 20 69 74 20 75 6e 63  ro, leave it unc
32500 68 61 6e 67 65 64 20 61 6e 64 20 66 61 6c 6c 20  hanged and fall 
32510 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a 63 61 73 65  through..*/.case
32520 20 4f 50 5f 49 66 4e 6f 74 5a 65 72 6f 3a 20 7b   OP_IfNotZero: {
32530 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
32540 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
32550 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
32560 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
32570 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
32580 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
32590 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3c 30 2c  ken(pIn1->u.i<0,
325a0 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d   2);.  if( pIn1-
325b0 3e 75 2e 69 20 29 7b 0a 20 20 20 20 20 69 66 28  >u.i ){.     if(
325c0 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20 29 20 70   pIn1->u.i>0 ) p
325d0 49 6e 31 2d 3e 75 2e 69 2d 2d 3b 0a 20 20 20 20  In1->u.i--;.    
325e0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
325f0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
32600 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 63  ../* Opcode: Dec
32610 72 4a 75 6d 70 5a 65 72 6f 20 50 31 20 50 32 20  rJumpZero P1 P2 
32620 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
32630 73 3a 20 69 66 20 28 2d 2d 72 5b 50 31 5d 29 3d  s: if (--r[P1])=
32640 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  =0 goto P2.**.**
32650 20 52 65 67 69 73 74 65 72 20 50 31 20 6d 75 73   Register P1 mus
32660 74 20 68 6f 6c 64 20 61 6e 20 69 6e 74 65 67 65  t hold an intege
32670 72 2e 20 20 44 65 63 72 65 6d 65 6e 74 20 74 68  r.  Decrement th
32680 65 20 76 61 6c 75 65 20 69 6e 20 50 31 0a 2a 2a  e value in P1.**
32690 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 50 32 20   and jump to P2 
326a0 69 66 20 74 68 65 20 6e 65 77 20 76 61 6c 75 65  if the new value
326b0 20 69 73 20 65 78 61 63 74 6c 79 20 7a 65 72 6f   is exactly zero
326c0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 63  ..*/.case OP_Dec
326d0 72 4a 75 6d 70 5a 65 72 6f 3a 20 7b 20 20 20 20  rJumpZero: {    
326e0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
326f0 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
32700 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
32710 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
32720 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66  &MEM_Int );.  if
32730 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 53 4d 41 4c  ( pIn1->u.i>SMAL
32740 4c 45 53 54 5f 49 4e 54 36 34 20 29 20 70 49 6e  LEST_INT64 ) pIn
32750 31 2d 3e 75 2e 69 2d 2d 3b 0a 20 20 56 64 62 65  1->u.i--;.  Vdbe
32760 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49 6e 31  BranchTaken(pIn1
32770 2d 3e 75 2e 69 3d 3d 30 2c 20 32 29 3b 0a 20 20  ->u.i==0, 2);.  
32780 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30  if( pIn1->u.i==0
32790 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
327a0 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  p2;.  break;.}..
327b0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 53  ./* Opcode: AggS
327c0 74 65 70 30 20 2a 20 50 32 20 50 33 20 50 34 20  tep0 * P2 P3 P4 
327d0 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
327e0 61 63 63 75 6d 3d 72 5b 50 33 5d 20 73 74 65 70  accum=r[P3] step
327f0 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a  (r[P2@P5]).**.**
32800 20 45 78 65 63 75 74 65 20 74 68 65 20 73 74 65   Execute the ste
32810 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61  p function for a
32820 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20 54 68  n aggregate.  Th
32830 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 68 61  e.** function ha
32840 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73 2e 20  s P5 arguments. 
32850 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65    P4 is a pointe
32860 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66  r to the FuncDef
32870 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74 68  .** structure th
32880 61 74 20 73 70 65 63 69 66 69 65 73 20 74 68 65  at specifies the
32890 20 66 75 6e 63 74 69 6f 6e 2e 20 20 52 65 67 69   function.  Regi
328a0 73 74 65 72 20 50 33 20 69 73 20 74 68 65 0a 2a  ster P3 is the.*
328b0 2a 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a  * accumulator..*
328c0 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75  *.** The P5 argu
328d0 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20  ments are taken 
328e0 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32  from register P2
328f0 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63   and its.** succ
32900 65 73 73 6f 72 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70  essors..*/./* Op
32910 63 6f 64 65 3a 20 41 67 67 53 74 65 70 20 2a 20  code: AggStep * 
32920 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
32930 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d 72  ynopsis: accum=r
32940 5b 50 33 5d 20 73 74 65 70 28 72 5b 50 32 40 50  [P3] step(r[P2@P
32950 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74  5]).**.** Execut
32960 65 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74  e the step funct
32970 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65  ion for an aggre
32980 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20 66 75  gate.  The.** fu
32990 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20 61 72  nction has P5 ar
329a0 67 75 6d 65 6e 74 73 2e 20 20 20 50 34 20 69 73  guments.   P4 is
329b0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e   a pointer to an
329c0 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
329d0 0a 2a 2a 20 6f 62 6a 65 63 74 20 74 68 61 74 20  .** object that 
329e0 69 73 20 75 73 65 64 20 74 6f 20 72 75 6e 20 74  is used to run t
329f0 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 52 65  he function.  Re
32a00 67 69 73 74 65 72 20 50 33 20 69 73 0a 2a 2a 20  gister P3 is.** 
32a10 61 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74  as the accumulat
32a20 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35  or..**.** The P5
32a30 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74   arguments are t
32a40 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74  aken from regist
32a50 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a  er P2 and its.**
32a60 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2a 0a   successors..**.
32a70 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
32a80 73 20 69 6e 69 74 69 61 6c 6c 79 20 63 6f 64 65  s initially code
32a90 64 20 61 73 20 4f 50 5f 41 67 67 53 74 65 70 30  d as OP_AggStep0
32aa0 2e 20 20 4f 6e 20 66 69 72 73 74 20 65 76 61 6c  .  On first eval
32ab0 75 61 74 69 6f 6e 2c 0a 2a 2a 20 74 68 65 20 46  uation,.** the F
32ac0 75 6e 63 44 65 66 20 73 74 6f 72 65 64 20 69 6e  uncDef stored in
32ad0 20 50 34 20 69 73 20 63 6f 6e 76 65 72 74 65 64   P4 is converted
32ae0 20 69 6e 74 6f 20 61 6e 20 73 71 6c 69 74 65 33   into an sqlite3
32af0 5f 63 6f 6e 74 65 78 74 20 61 6e 64 0a 2a 2a 20  _context and.** 
32b00 74 68 65 20 6f 70 63 6f 64 65 20 69 73 20 63 68  the opcode is ch
32b10 61 6e 67 65 64 2e 20 20 49 6e 20 74 68 69 73 20  anged.  In this 
32b20 77 61 79 2c 20 74 68 65 20 69 6e 69 74 69 61 6c  way, the initial
32b30 69 7a 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  ization of the.*
32b40 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  * sqlite3_contex
32b50 74 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73 20 6f  t only happens o
32b60 6e 63 65 2c 20 69 6e 73 74 65 61 64 20 6f 66 20  nce, instead of 
32b70 6f 6e 20 65 61 63 68 20 63 61 6c 6c 20 74 6f 20  on each call to 
32b80 74 68 65 0a 2a 2a 20 73 74 65 70 20 66 75 6e 63  the.** step func
32b90 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
32ba0 5f 41 67 67 53 74 65 70 30 3a 20 7b 0a 20 20 69  _AggStep0: {.  i
32bb0 6e 74 20 6e 3b 0a 20 20 73 71 6c 69 74 65 33 5f  nt n;.  sqlite3_
32bc0 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a 0a  context *pCtx;..
32bd0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
32be0 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45  4type==P4_FUNCDE
32bf0 46 20 29 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e  F );.  n = pOp->
32c00 70 35 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  p5;.  assert( pO
32c10 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
32c20 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p3<=(p->nMem+1 -
32c30 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
32c40 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c    assert( n==0 |
32c50 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  | (pOp->p2>0 && 
32c60 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 28 70 2d 3e 6e  pOp->p2+n<=(p->n
32c70 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
32c80 6f 72 29 2b 31 29 20 29 3b 0a 20 20 61 73 73 65  or)+1) );.  asse
32c90 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d  rt( pOp->p3<pOp-
32ca0 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d  >p2 || pOp->p3>=
32cb0 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20 70  pOp->p2+n );.  p
32cc0 43 74 78 20 3d 20 73 71 6c 69 74 65 33 44 62 4d  Ctx = sqlite3DbM
32cd0 61 6c 6c 6f 63 52 61 77 4e 4e 28 64 62 2c 20 73  allocRawNN(db, s
32ce0 69 7a 65 6f 66 28 2a 70 43 74 78 29 20 2b 20 28  izeof(*pCtx) + (
32cf0 6e 2d 31 29 2a 73 69 7a 65 6f 66 28 73 71 6c 69  n-1)*sizeof(sqli
32d00 74 65 33 5f 76 61 6c 75 65 2a 29 29 3b 0a 20 20  te3_value*));.  
32d10 69 66 28 20 70 43 74 78 3d 3d 30 20 29 20 67 6f  if( pCtx==0 ) go
32d20 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 74  to no_mem;.  pCt
32d30 78 2d 3e 70 4d 65 6d 20 3d 20 30 3b 0a 20 20 70  x->pMem = 0;.  p
32d40 43 74 78 2d 3e 70 46 75 6e 63 20 3d 20 70 4f 70  Ctx->pFunc = pOp
32d50 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 70 43  ->p4.pFunc;.  pC
32d60 74 78 2d 3e 69 4f 70 20 3d 20 28 69 6e 74 29 28  tx->iOp = (int)(
32d70 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 70 43  pOp - aOp);.  pC
32d80 74 78 2d 3e 70 56 64 62 65 20 3d 20 70 3b 0a 20  tx->pVdbe = p;. 
32d90 20 70 43 74 78 2d 3e 61 72 67 63 20 3d 20 6e 3b   pCtx->argc = n;
32da0 0a 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d  .  pOp->p4type =
32db0 20 50 34 5f 46 55 4e 43 43 54 58 3b 0a 20 20 70   P4_FUNCCTX;.  p
32dc0 4f 70 2d 3e 70 34 2e 70 43 74 78 20 3d 20 70 43  Op->p4.pCtx = pC
32dd0 74 78 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64  tx;.  pOp->opcod
32de0 65 20 3d 20 4f 50 5f 41 67 67 53 74 65 70 3b 0a  e = OP_AggStep;.
32df0 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
32e00 68 20 69 6e 74 6f 20 4f 50 5f 41 67 67 53 74 65  h into OP_AggSte
32e10 70 20 2a 2f 0a 7d 0a 63 61 73 65 20 4f 50 5f 41  p */.}.case OP_A
32e20 67 67 53 74 65 70 3a 20 7b 0a 20 20 69 6e 74 20  ggStep: {.  int 
32e30 69 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  i;.  sqlite3_con
32e40 74 65 78 74 20 2a 70 43 74 78 3b 0a 20 20 4d 65  text *pCtx;.  Me
32e50 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d 65 6d 20 74  m *pMem;.  Mem t
32e60 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
32e70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e  ->p4type==P4_FUN
32e80 43 43 54 58 20 29 3b 0a 20 20 70 43 74 78 20 3d  CCTX );.  pCtx =
32e90 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78 3b 0a 20   pOp->p4.pCtx;. 
32ea0 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f   pMem = &aMem[pO
32eb0 70 2d 3e 70 33 5d 3b 0a 0a 20 20 2f 2a 20 49 66  p->p3];..  /* If
32ec0 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69   this function i
32ed0 73 20 69 6e 73 69 64 65 20 6f 66 20 61 20 74 72  s inside of a tr
32ee0 69 67 67 65 72 2c 20 74 68 65 20 72 65 67 69 73  igger, the regis
32ef0 74 65 72 20 61 72 72 61 79 20 69 6e 20 61 4d 65  ter array in aMe
32f00 6d 5b 5d 0a 20 20 2a 2a 20 6d 69 67 68 74 20 63  m[].  ** might c
32f10 68 61 6e 67 65 20 66 72 6f 6d 20 6f 6e 65 20 65  hange from one e
32f20 76 61 6c 75 61 74 69 6f 6e 20 74 6f 20 74 68 65  valuation to the
32f30 20 6e 65 78 74 2e 20 20 54 68 65 20 6e 65 78 74   next.  The next
32f40 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 0a 20   block of code. 
32f50 20 2a 2a 20 63 68 65 63 6b 73 20 74 6f 20 73 65   ** checks to se
32f60 65 20 69 66 20 74 68 65 20 72 65 67 69 73 74 65  e if the registe
32f70 72 20 61 72 72 61 79 20 68 61 73 20 63 68 61 6e  r array has chan
32f80 67 65 64 2c 20 61 6e 64 20 69 66 20 73 6f 20 69  ged, and if so i
32f90 74 0a 20 20 2a 2a 20 72 65 69 6e 69 74 69 61 6c  t.  ** reinitial
32fa0 69 7a 65 73 20 74 68 65 20 72 65 6c 61 76 61 6e  izes the relavan
32fb0 74 20 70 61 72 74 73 20 6f 66 20 74 68 65 20 73  t parts of the s
32fc0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f  qlite3_context o
32fd0 62 6a 65 63 74 20 2a 2f 0a 20 20 69 66 28 20 70  bject */.  if( p
32fe0 43 74 78 2d 3e 70 4d 65 6d 20 21 3d 20 70 4d 65  Ctx->pMem != pMe
32ff0 6d 20 29 7b 0a 20 20 20 20 70 43 74 78 2d 3e 70  m ){.    pCtx->p
33000 4d 65 6d 20 3d 20 70 4d 65 6d 3b 0a 20 20 20 20  Mem = pMem;.    
33010 66 6f 72 28 69 3d 70 43 74 78 2d 3e 61 72 67 63  for(i=pCtx->argc
33020 2d 31 3b 20 69 3e 3d 30 3b 20 69 2d 2d 29 20 70  -1; i>=0; i--) p
33030 43 74 78 2d 3e 61 72 67 76 5b 69 5d 20 3d 20 26  Ctx->argv[i] = &
33040 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 2b 69 5d 3b  aMem[pOp->p2+i];
33050 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c  .  }..#ifdef SQL
33060 49 54 45 5f 44 45 42 55 47 0a 20 20 66 6f 72 28  ITE_DEBUG.  for(
33070 69 3d 30 3b 20 69 3c 70 43 74 78 2d 3e 61 72 67  i=0; i<pCtx->arg
33080 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73  c; i++){.    ass
33090 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
330a0 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 29 20 29  pCtx->argv[i]) )
330b0 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
330c0 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 69 2c 20  RACE(pOp->p2+i, 
330d0 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 29 3b 0a  pCtx->argv[i]);.
330e0 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 70 4d    }.#endif..  pM
330f0 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 73 71 6c 69 74  em->n++;.  sqlit
33100 65 33 56 64 62 65 4d 65 6d 49 6e 69 74 28 26 74  e3VdbeMemInit(&t
33110 2c 20 64 62 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  , db, MEM_Null);
33120 0a 20 20 70 43 74 78 2d 3e 70 4f 75 74 20 3d 20  .  pCtx->pOut = 
33130 26 74 3b 0a 20 20 70 43 74 78 2d 3e 66 45 72 72  &t;.  pCtx->fErr
33140 6f 72 4f 72 41 75 78 20 3d 20 30 3b 0a 20 20 70  orOrAux = 0;.  p
33150 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67 20 3d 20  Ctx->skipFlag = 
33160 30 3b 0a 20 20 28 70 43 74 78 2d 3e 70 46 75 6e  0;.  (pCtx->pFun
33170 63 2d 3e 78 53 46 75 6e 63 29 28 70 43 74 78 2c  c->xSFunc)(pCtx,
33180 70 43 74 78 2d 3e 61 72 67 63 2c 70 43 74 78 2d  pCtx->argc,pCtx-
33190 3e 61 72 67 76 29 3b 20 2f 2a 20 49 4d 50 3a 20  >argv); /* IMP: 
331a0 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f  R-24505-23230 */
331b0 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 66 45 72  .  if( pCtx->fEr
331c0 72 6f 72 4f 72 41 75 78 20 29 7b 0a 20 20 20 20  rorOrAux ){.    
331d0 69 66 28 20 70 43 74 78 2d 3e 69 73 45 72 72 6f  if( pCtx->isErro
331e0 72 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  r ){.      sqlit
331f0 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22  e3VdbeError(p, "
33200 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  %s", sqlite3_val
33210 75 65 5f 74 65 78 74 28 26 74 29 29 3b 0a 20 20  ue_text(&t));.  
33220 20 20 20 20 72 63 20 3d 20 70 43 74 78 2d 3e 69      rc = pCtx->i
33230 73 45 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  sError;.    }.  
33240 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
33250 52 65 6c 65 61 73 65 28 26 74 29 3b 0a 20 20 20  Release(&t);.   
33260 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
33270 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
33280 72 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  r;.  }else{.    
33290 61 73 73 65 72 74 28 20 74 2e 66 6c 61 67 73 3d  assert( t.flags=
332a0 3d 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 7d  =MEM_Null );.  }
332b0 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 73 6b 69  .  if( pCtx->ski
332c0 70 46 6c 61 67 20 29 7b 0a 20 20 20 20 61 73 73  pFlag ){.    ass
332d0 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63  ert( pOp[-1].opc
332e0 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20  ode==OP_CollSeq 
332f0 29 3b 0a 20 20 20 20 69 20 3d 20 70 4f 70 5b 2d  );.    i = pOp[-
33300 31 5d 2e 70 31 3b 0a 20 20 20 20 69 66 28 20 69  1].p1;.    if( i
33310 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   ) sqlite3VdbeMe
33320 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b  mSetInt64(&aMem[
33330 69 5d 2c 20 31 29 3b 0a 20 20 7d 0a 20 20 62 72  i], 1);.  }.  br
33340 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
33350 65 3a 20 41 67 67 46 69 6e 61 6c 20 50 31 20 50  e: AggFinal P1 P
33360 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
33370 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 31  psis: accum=r[P1
33380 5d 20 4e 3d 50 32 0a 2a 2a 0a 2a 2a 20 45 78 65  ] N=P2.**.** Exe
33390 63 75 74 65 20 74 68 65 20 66 69 6e 61 6c 69 7a  cute the finaliz
333a0 65 72 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20  er function for 
333b0 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20 50  an aggregate.  P
333c0 31 20 69 73 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f  1 is.** the memo
333d0 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74  ry location that
333e0 20 69 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61   is the accumula
333f0 74 6f 72 20 66 6f 72 20 74 68 65 20 61 67 67 72  tor for the aggr
33400 65 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20  egate..**.** P2 
33410 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
33420 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20   arguments that 
33430 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f  the step functio
33440 6e 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50  n takes and.** P
33450 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
33460 6f 20 74 68 65 20 46 75 6e 63 44 65 66 20 66 6f  o the FuncDef fo
33470 72 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e  r this function.
33480 20 20 54 68 65 20 50 32 0a 2a 2a 20 61 72 67 75    The P2.** argu
33490 6d 65 6e 74 20 69 73 20 6e 6f 74 20 75 73 65 64  ment is not used
334a0 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 2e   by this opcode.
334b0 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 74 68 65    It is only the
334c0 72 65 20 74 6f 20 64 69 73 61 6d 62 69 67 75 61  re to disambigua
334d0 74 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20  te.** functions 
334e0 74 68 61 74 20 63 61 6e 20 74 61 6b 65 20 76 61  that can take va
334f0 72 79 69 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66  rying numbers of
33500 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 54 68 65   arguments.  The
33510 0a 2a 2a 20 50 34 20 61 72 67 75 6d 65 6e 74 20  .** P4 argument 
33520 69 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66  is only needed f
33530 6f 72 20 74 68 65 20 64 65 67 65 6e 65 72 61 74  or the degenerat
33540 65 20 63 61 73 65 20 77 68 65 72 65 0a 2a 2a 20  e case where.** 
33550 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f  the step functio
33560 6e 20 77 61 73 20 6e 6f 74 20 70 72 65 76 69 6f  n was not previo
33570 75 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a  usly called..*/.
33580 63 61 73 65 20 4f 50 5f 41 67 67 46 69 6e 61 6c  case OP_AggFinal
33590 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b  : {.  Mem *pMem;
335a0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
335b0 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  p1>0 && pOp->p1<
335c0 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
335d0 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70  >nCursor) );.  p
335e0 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
335f0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
33600 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 7e  (pMem->flags & ~
33610 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67  (MEM_Null|MEM_Ag
33620 67 29 29 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d  g))==0 );.  rc =
33630 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46   sqlite3VdbeMemF
33640 69 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c 20 70 4f  inalize(pMem, pO
33650 70 2d 3e 70 34 2e 70 46 75 6e 63 29 3b 0a 20 20  p->p4.pFunc);.  
33660 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 73 71  if( rc ){.    sq
33670 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70  lite3VdbeError(p
33680 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f  , "%s", sqlite3_
33690 76 61 6c 75 65 5f 74 65 78 74 28 70 4d 65 6d 29  value_text(pMem)
336a0 29 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  );.    goto abor
336b0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
336c0 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62    }.  sqlite3Vdb
336d0 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
336e0 70 4d 65 6d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pMem, encoding);
336f0 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
33700 4f 42 53 49 5a 45 28 70 4d 65 6d 29 3b 0a 20 20  OBSIZE(pMem);.  
33710 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
33720 65 6d 54 6f 6f 42 69 67 28 70 4d 65 6d 29 20 29  emTooBig(pMem) )
33730 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
33740 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ig;.  }.  break;
33750 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
33760 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 2f 2a 20 4f  TE_OMIT_WAL./* O
33770 70 63 6f 64 65 3a 20 43 68 65 63 6b 70 6f 69 6e  pcode: Checkpoin
33780 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
33790 2a 0a 2a 2a 20 43 68 65 63 6b 70 6f 69 6e 74 20  *.** Checkpoint 
337a0 64 61 74 61 62 61 73 65 20 50 31 2e 20 54 68 69  database P1. Thi
337b0 73 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20  s is a no-op if 
337c0 50 31 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e  P1 is not curren
337d0 74 6c 79 20 69 6e 0a 2a 2a 20 57 41 4c 20 6d 6f  tly in.** WAL mo
337e0 64 65 2e 20 50 61 72 61 6d 65 74 65 72 20 50 32  de. Parameter P2
337f0 20 69 73 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54   is one of SQLIT
33800 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53  E_CHECKPOINT_PAS
33810 53 49 56 45 2c 20 46 55 4c 4c 2c 0a 2a 2a 20 52  SIVE, FULL,.** R
33820 45 53 54 41 52 54 2c 20 6f 72 20 54 52 55 4e 43  ESTART, or TRUNC
33830 41 54 45 2e 20 20 57 72 69 74 65 20 31 20 6f 72  ATE.  Write 1 or
33840 20 30 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 5d 20   0 into mem[P3] 
33850 69 66 20 74 68 65 20 63 68 65 63 6b 70 6f 69 6e  if the checkpoin
33860 74 20 72 65 74 75 72 6e 73 0a 2a 2a 20 53 51 4c  t returns.** SQL
33870 49 54 45 5f 42 55 53 59 20 6f 72 20 6e 6f 74 2c  ITE_BUSY or not,
33880 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20   respectively.  
33890 57 72 69 74 65 20 74 68 65 20 6e 75 6d 62 65 72  Write the number
338a0 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65   of pages in the
338b0 0a 2a 2a 20 57 41 4c 20 61 66 74 65 72 20 74 68  .** WAL after th
338c0 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 69 6e 74  e checkpoint int
338d0 6f 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 20  o mem[P3+1] and 
338e0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  the number of pa
338f0 67 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 57 41  ges.** in the WA
33900 4c 20 74 68 61 74 20 68 61 76 65 20 62 65 65 6e  L that have been
33910 20 63 68 65 63 6b 70 6f 69 6e 74 65 64 20 61 66   checkpointed af
33920 74 65 72 20 74 68 65 20 63 68 65 63 6b 70 6f 69  ter the checkpoi
33930 6e 74 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 73 20  nt.** completes 
33940 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 32 5d 2e 20  into mem[P3+2]. 
33950 20 48 6f 77 65 76 65 72 20 6f 6e 20 61 6e 20 65   However on an e
33960 72 72 6f 72 2c 20 6d 65 6d 5b 50 33 2b 31 5d 20  rror, mem[P3+1] 
33970 61 6e 64 0a 2a 2a 20 6d 65 6d 5b 50 33 2b 32 5d  and.** mem[P3+2]
33980 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64   are initialized
33990 20 74 6f 20 2d 31 2e 0a 2a 2f 0a 63 61 73 65 20   to -1..*/.case 
339a0 4f 50 5f 43 68 65 63 6b 70 6f 69 6e 74 3a 20 7b  OP_Checkpoint: {
339b0 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20  .  int i;       
339c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
339d0 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74     /* Loop count
339e0 65 72 20 2a 2f 0a 20 20 69 6e 74 20 61 52 65 73  er */.  int aRes
339f0 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20  [3];            
33a00 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c          /* Resul
33a10 74 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  ts */.  Mem *pMe
33a20 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
33a30 20 20 20 20 20 20 20 20 2f 2a 20 57 72 69 74 65          /* Write
33a40 20 72 65 73 75 6c 74 73 20 68 65 72 65 20 2a 2f   results here */
33a50 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ..  assert( p->r
33a60 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
33a70 61 52 65 73 5b 30 5d 20 3d 20 30 3b 0a 20 20 61  aRes[0] = 0;.  a
33a80 52 65 73 5b 31 5d 20 3d 20 61 52 65 73 5b 32 5d  Res[1] = aRes[2]
33a90 20 3d 20 2d 31 3b 0a 20 20 61 73 73 65 72 74 28   = -1;.  assert(
33aa0 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45   pOp->p2==SQLITE
33ab0 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53  _CHECKPOINT_PASS
33ac0 49 56 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f  IVE.       || pO
33ad0 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48  p->p2==SQLITE_CH
33ae0 45 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c 0a 20 20  ECKPOINT_FULL.  
33af0 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d       || pOp->p2=
33b00 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49  =SQLITE_CHECKPOI
33b10 4e 54 5f 52 45 53 54 41 52 54 0a 20 20 20 20 20  NT_RESTART.     
33b20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51    || pOp->p2==SQ
33b30 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f  LITE_CHECKPOINT_
33b40 54 52 55 4e 43 41 54 45 0a 20 20 29 3b 0a 20 20  TRUNCATE.  );.  
33b50 72 63 20 3d 20 73 71 6c 69 74 65 33 43 68 65 63  rc = sqlite3Chec
33b60 6b 70 6f 69 6e 74 28 64 62 2c 20 70 4f 70 2d 3e  kpoint(db, pOp->
33b70 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 26 61 52  p1, pOp->p2, &aR
33b80 65 73 5b 31 5d 2c 20 26 61 52 65 73 5b 32 5d 29  es[1], &aRes[2])
33b90 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20  ;.  if( rc ){.  
33ba0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
33bb0 5f 42 55 53 59 20 29 20 67 6f 74 6f 20 61 62 6f  _BUSY ) goto abo
33bc0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
33bd0 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
33be0 5f 4f 4b 3b 0a 20 20 20 20 61 52 65 73 5b 30 5d  _OK;.    aRes[0]
33bf0 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 66 6f 72 28   = 1;.  }.  for(
33c00 69 3d 30 2c 20 70 4d 65 6d 20 3d 20 26 61 4d 65  i=0, pMem = &aMe
33c10 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 20 69 3c 33 3b  m[pOp->p3]; i<3;
33c20 20 69 2b 2b 2c 20 70 4d 65 6d 2b 2b 29 7b 0a 20   i++, pMem++){. 
33c30 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
33c40 6d 53 65 74 49 6e 74 36 34 28 70 4d 65 6d 2c 20  mSetInt64(pMem, 
33c50 28 69 36 34 29 61 52 65 73 5b 69 5d 29 3b 0a 20  (i64)aRes[i]);. 
33c60 20 7d 20 20 20 20 0a 20 20 62 72 65 61 6b 3b 0a   }    .  break;.
33c70 7d 3b 20 20 0a 23 65 6e 64 69 66 0a 0a 23 69 66  };  .#endif..#if
33c80 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
33c90 5f 50 52 41 47 4d 41 0a 2f 2a 20 4f 70 63 6f 64  _PRAGMA./* Opcod
33ca0 65 3a 20 4a 6f 75 72 6e 61 6c 4d 6f 64 65 20 50  e: JournalMode P
33cb0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
33cc0 2a 20 43 68 61 6e 67 65 20 74 68 65 20 6a 6f 75  * Change the jou
33cd0 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 64 61 74  rnal mode of dat
33ce0 61 62 61 73 65 20 50 31 20 74 6f 20 50 33 2e 20  abase P1 to P3. 
33cf0 50 33 20 6d 75 73 74 20 62 65 20 6f 6e 65 20 6f  P3 must be one o
33d00 66 20 74 68 65 0a 2a 2a 20 50 41 47 45 52 5f 4a  f the.** PAGER_J
33d10 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20 76  OURNALMODE_XXX v
33d20 61 6c 75 65 73 2e 20 49 66 20 63 68 61 6e 67 69  alues. If changi
33d30 6e 67 20 62 65 74 77 65 65 6e 20 74 68 65 20 76  ng between the v
33d40 61 72 69 6f 75 73 20 72 6f 6c 6c 62 61 63 6b 0a  arious rollback.
33d50 2a 2a 20 6d 6f 64 65 73 20 28 64 65 6c 65 74 65  ** modes (delete
33d60 2c 20 74 72 75 6e 63 61 74 65 2c 20 70 65 72 73  , truncate, pers
33d70 69 73 74 2c 20 6f 66 66 20 61 6e 64 20 6d 65 6d  ist, off and mem
33d80 6f 72 79 29 2c 20 74 68 69 73 20 69 73 20 61 20  ory), this is a 
33d90 73 69 6d 70 6c 65 0a 2a 2a 20 6f 70 65 72 61 74  simple.** operat
33da0 69 6f 6e 2e 20 4e 6f 20 49 4f 20 69 73 20 72 65  ion. No IO is re
33db0 71 75 69 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  quired..**.** If
33dc0 20 63 68 61 6e 67 69 6e 67 20 69 6e 74 6f 20 6f   changing into o
33dd0 72 20 6f 75 74 20 6f 66 20 57 41 4c 20 6d 6f 64  r out of WAL mod
33de0 65 20 74 68 65 20 70 72 6f 63 65 64 75 72 65 20  e the procedure 
33df0 69 73 20 6d 6f 72 65 20 63 6f 6d 70 6c 69 63 61  is more complica
33e00 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  ted..**.** Write
33e10 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69   a string contai
33e20 6e 69 6e 67 20 74 68 65 20 66 69 6e 61 6c 20 6a  ning the final j
33e30 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 74 6f 20 72  ournal-mode to r
33e40 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
33e50 61 73 65 20 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f  ase OP_JournalMo
33e60 64 65 3a 20 7b 20 20 20 20 2f 2a 20 6f 75 74 32  de: {    /* out2
33e70 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74   */.  Btree *pBt
33e80 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
33e90 20 20 20 20 20 20 2f 2a 20 42 74 72 65 65 20 74        /* Btree t
33ea0 6f 20 63 68 61 6e 67 65 20 6a 6f 75 72 6e 61 6c  o change journal
33eb0 20 6d 6f 64 65 20 6f 66 20 2a 2f 0a 20 20 50 61   mode of */.  Pa
33ec0 67 65 72 20 2a 70 50 61 67 65 72 3b 20 20 20 20  ger *pPager;    
33ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
33ee0 20 50 61 67 65 72 20 61 73 73 6f 63 69 61 74 65   Pager associate
33ef0 64 20 77 69 74 68 20 70 42 74 20 2a 2f 0a 20 20  d with pBt */.  
33f00 69 6e 74 20 65 4e 65 77 3b 20 20 20 20 20 20 20  int eNew;       
33f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f20 2f 2a 20 4e 65 77 20 6a 6f 75 72 6e 61 6c 20 6d  /* New journal m
33f30 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 65 4f 6c  ode */.  int eOl
33f40 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
33f50 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
33f60 6f 6c 64 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65  old journal mode
33f70 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
33f80 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 63 6f  TE_OMIT_WAL.  co
33f90 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e  nst char *zFilen
33fa0 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ame;          /*
33fb0 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73   Name of databas
33fc0 65 20 66 69 6c 65 20 66 6f 72 20 70 50 61 67 65  e file for pPage
33fd0 72 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 20 20 70  r */.#endif..  p
33fe0 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
33ff0 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
34000 65 4e 65 77 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  eNew = pOp->p3;.
34010 20 20 61 73 73 65 72 74 28 20 65 4e 65 77 3d 3d    assert( eNew==
34020 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
34030 45 5f 44 45 4c 45 54 45 20 0a 20 20 20 20 20 20  E_DELETE .      
34040 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f   || eNew==PAGER_
34050 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e  JOURNALMODE_TRUN
34060 43 41 54 45 20 0a 20 20 20 20 20 20 20 7c 7c 20  CATE .       || 
34070 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
34080 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53 54 20  NALMODE_PERSIST 
34090 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
340a0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
340b0 44 45 5f 4f 46 46 0a 20 20 20 20 20 20 20 7c 7c  DE_OFF.       ||
340c0 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
340d0 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 0a  RNALMODE_MEMORY.
340e0 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d         || eNew==
340f0 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
34100 45 5f 57 41 4c 0a 20 20 20 20 20 20 20 7c 7c 20  E_WAL.       || 
34110 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
34120 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 0a 20 20  NALMODE_QUERY.  
34130 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
34140 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
34150 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
34160 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
34170 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 70 42 74  nly==0 );..  pBt
34180 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
34190 70 31 5d 2e 70 42 74 3b 0a 20 20 70 50 61 67 65  p1].pBt;.  pPage
341a0 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  r = sqlite3Btree
341b0 50 61 67 65 72 28 70 42 74 29 3b 0a 20 20 65 4f  Pager(pBt);.  eO
341c0 6c 64 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  ld = sqlite3Page
341d0 72 47 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28  rGetJournalMode(
341e0 70 50 61 67 65 72 29 3b 0a 20 20 69 66 28 20 65  pPager);.  if( e
341f0 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
34200 41 4c 4d 4f 44 45 5f 51 55 45 52 59 20 29 20 65  ALMODE_QUERY ) e
34210 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 69 66  New = eOld;.  if
34220 28 20 21 73 71 6c 69 74 65 33 50 61 67 65 72 4f  ( !sqlite3PagerO
34230 6b 54 6f 43 68 61 6e 67 65 4a 6f 75 72 6e 61 6c  kToChangeJournal
34240 4d 6f 64 65 28 70 50 61 67 65 72 29 20 29 20 65  Mode(pPager) ) e
34250 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 0a 23 69 66  New = eOld;..#if
34260 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
34270 5f 57 41 4c 0a 20 20 7a 46 69 6c 65 6e 61 6d 65  _WAL.  zFilename
34280 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 46   = sqlite3PagerF
34290 69 6c 65 6e 61 6d 65 28 70 50 61 67 65 72 2c 20  ilename(pPager, 
342a0 31 29 3b 0a 0a 20 20 2f 2a 20 44 6f 20 6e 6f 74  1);..  /* Do not
342b0 20 61 6c 6c 6f 77 20 61 20 74 72 61 6e 73 69 74   allow a transit
342c0 69 6f 6e 20 74 6f 20 6a 6f 75 72 6e 61 6c 5f 6d  ion to journal_m
342d0 6f 64 65 3d 57 41 4c 20 66 6f 72 20 61 20 64 61  ode=WAL for a da
342e0 74 61 62 61 73 65 0a 20 20 2a 2a 20 69 6e 20 74  tabase.  ** in t
342f0 65 6d 70 6f 72 61 72 79 20 73 74 6f 72 61 67 65  emporary storage
34300 20 6f 72 20 69 66 20 74 68 65 20 56 46 53 20 64   or if the VFS d
34310 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 20  oes not support 
34320 73 68 61 72 65 64 20 6d 65 6d 6f 72 79 20 0a 20  shared memory . 
34330 20 2a 2f 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d   */.  if( eNew==
34340 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
34350 45 5f 57 41 4c 0a 20 20 20 26 26 20 28 73 71 6c  E_WAL.   && (sql
34360 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 46 69  ite3Strlen30(zFi
34370 6c 65 6e 61 6d 65 29 3d 3d 30 20 20 20 20 20 20  lename)==0      
34380 20 20 20 20 20 2f 2a 20 54 65 6d 70 20 66 69 6c       /* Temp fil
34390 65 20 2a 2f 0a 20 20 20 20 20 20 20 7c 7c 20 21  e */.       || !
343a0 73 71 6c 69 74 65 33 50 61 67 65 72 57 61 6c 53  sqlite3PagerWalS
343b0 75 70 70 6f 72 74 65 64 28 70 50 61 67 65 72 29  upported(pPager)
343c0 29 20 20 20 2f 2a 20 4e 6f 20 73 68 61 72 65 64  )   /* No shared
343d0 2d 6d 65 6d 6f 72 79 20 73 75 70 70 6f 72 74 20  -memory support 
343e0 2a 2f 0a 20 20 29 7b 0a 20 20 20 20 65 4e 65 77  */.  ){.    eNew
343f0 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 0a 20 20   = eOld;.  }..  
34400 69 66 28 20 28 65 4e 65 77 21 3d 65 4f 6c 64 29  if( (eNew!=eOld)
34410 0a 20 20 20 26 26 20 28 65 4f 6c 64 3d 3d 50 41  .   && (eOld==PA
34420 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
34430 57 41 4c 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47  WAL || eNew==PAG
34440 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
34450 41 4c 29 0a 20 20 29 7b 0a 20 20 20 20 69 66 28  AL).  ){.    if(
34460 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74   !db->autoCommit
34470 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65 61   || db->nVdbeRea
34480 64 3e 31 20 29 7b 0a 20 20 20 20 20 20 72 63 20  d>1 ){.      rc 
34490 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
344a0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
344b0 65 45 72 72 6f 72 28 70 2c 0a 20 20 20 20 20 20  eError(p,.      
344c0 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 68 61 6e      "cannot chan
344d0 67 65 20 25 73 20 77 61 6c 20 6d 6f 64 65 20 66  ge %s wal mode f
344e0 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 74 72 61  rom within a tra
344f0 6e 73 61 63 74 69 6f 6e 22 2c 0a 20 20 20 20 20  nsaction",.     
34500 20 20 20 20 20 28 65 4e 65 77 3d 3d 50 41 47 45       (eNew==PAGE
34510 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
34520 4c 20 3f 20 22 69 6e 74 6f 22 20 3a 20 22 6f 75  L ? "into" : "ou
34530 74 20 6f 66 22 29 0a 20 20 20 20 20 20 29 3b 0a  t of").      );.
34540 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
34550 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
34560 20 20 20 7d 65 6c 73 65 7b 0a 20 0a 20 20 20 20     }else{. .    
34570 20 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45    if( eOld==PAGE
34580 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
34590 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  L ){.        /* 
345a0 49 66 20 6c 65 61 76 69 6e 67 20 57 41 4c 20 6d  If leaving WAL m
345b0 6f 64 65 2c 20 63 6c 6f 73 65 20 74 68 65 20 6c  ode, close the l
345c0 6f 67 20 66 69 6c 65 2e 20 49 66 20 73 75 63 63  og file. If succ
345d0 65 73 73 66 75 6c 2c 20 74 68 65 20 63 61 6c 6c  essful, the call
345e0 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 6f 20 50  .        ** to P
345f0 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 29 20 63  agerCloseWal() c
34600 68 65 63 6b 70 6f 69 6e 74 73 20 61 6e 64 20 64  heckpoints and d
34610 65 6c 65 74 65 73 20 74 68 65 20 77 72 69 74 65  eletes the write
34620 2d 61 68 65 61 64 2d 6c 6f 67 20 0a 20 20 20 20  -ahead-log .    
34630 20 20 20 20 2a 2a 20 66 69 6c 65 2e 20 41 6e 20      ** file. An 
34640 45 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20 6d  EXCLUSIVE lock m
34650 61 79 20 73 74 69 6c 6c 20 62 65 20 68 65 6c 64  ay still be held
34660 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
34670 20 66 69 6c 65 20 0a 20 20 20 20 20 20 20 20 2a   file .        *
34680 2a 20 61 66 74 65 72 20 61 20 73 75 63 63 65 73  * after a succes
34690 73 66 75 6c 20 72 65 74 75 72 6e 2e 20 0a 20 20  sful return. .  
346a0 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20        */.       
346b0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 50 61 67   rc = sqlite3Pag
346c0 65 72 43 6c 6f 73 65 57 61 6c 28 70 50 61 67 65  erCloseWal(pPage
346d0 72 2c 20 64 62 29 3b 0a 20 20 20 20 20 20 20 20  r, db);.        
346e0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
346f0 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  K ){.          s
34700 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f  qlite3PagerSetJo
34710 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72  urnalMode(pPager
34720 2c 20 65 4e 65 77 29 3b 0a 20 20 20 20 20 20 20  , eNew);.       
34730 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69   }.      }else i
34740 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a  f( eOld==PAGER_J
34750 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52  OURNALMODE_MEMOR
34760 59 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  Y ){.        /* 
34770 43 61 6e 6e 6f 74 20 74 72 61 6e 73 69 74 69 6f  Cannot transitio
34780 6e 20 64 69 72 65 63 74 6c 79 20 66 72 6f 6d 20  n directly from 
34790 4d 45 4d 4f 52 59 20 74 6f 20 57 41 4c 2e 20 20  MEMORY to WAL.  
347a0 55 73 65 20 6d 6f 64 65 20 4f 46 46 0a 20 20 20  Use mode OFF.   
347b0 20 20 20 20 20 2a 2a 20 61 73 20 61 6e 20 69 6e       ** as an in
347c0 74 65 72 6d 65 64 69 61 74 65 20 2a 2f 0a 20 20  termediate */.  
347d0 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 67        sqlite3Pag
347e0 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65  erSetJournalMode
347f0 28 70 50 61 67 65 72 2c 20 50 41 47 45 52 5f 4a  (pPager, PAGER_J
34800 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 29 3b  OURNALMODE_OFF);
34810 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20  .      }.  .    
34820 20 20 2f 2a 20 4f 70 65 6e 20 61 20 74 72 61 6e    /* Open a tran
34830 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 20 64  saction on the d
34840 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 52 65  atabase file. Re
34850 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20  gardless of the 
34860 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 20 20 2a 2a  journal.      **
34870 20 6d 6f 64 65 2c 20 74 68 69 73 20 74 72 61 6e   mode, this tran
34880 73 61 63 74 69 6f 6e 20 61 6c 77 61 79 73 20 75  saction always u
34890 73 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a  ses a rollback j
348a0 6f 75 72 6e 61 6c 2e 0a 20 20 20 20 20 20 2a 2f  ournal..      */
348b0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73  .      assert( s
348c0 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e 54  qlite3BtreeIsInT
348d0 72 61 6e 73 28 70 42 74 29 3d 3d 30 20 29 3b 0a  rans(pBt)==0 );.
348e0 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
348f0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
34900 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
34910 74 72 65 65 53 65 74 56 65 72 73 69 6f 6e 28 70  treeSetVersion(p
34920 42 74 2c 20 28 65 4e 65 77 3d 3d 50 41 47 45 52  Bt, (eNew==PAGER
34930 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
34940 20 3f 20 32 20 3a 20 31 29 29 3b 0a 20 20 20 20   ? 2 : 1));.    
34950 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65    }.    }.  }.#e
34960 6e 64 69 66 20 2f 2a 20 69 66 6e 64 65 66 20 53  ndif /* ifndef S
34970 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a  QLITE_OMIT_WAL *
34980 2f 0a 0a 20 20 69 66 28 20 72 63 20 29 20 65 4e  /..  if( rc ) eN
34990 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 65 4e 65  ew = eOld;.  eNe
349a0 77 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  w = sqlite3Pager
349b0 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70  SetJournalMode(p
349c0 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a 0a 20  Pager, eNew);.. 
349d0 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
349e0 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69  EM_Str|MEM_Stati
349f0 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f  c|MEM_Term;.  pO
34a00 75 74 2d 3e 7a 20 3d 20 28 63 68 61 72 20 2a 29  ut->z = (char *)
34a10 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f  sqlite3JournalMo
34a20 64 65 6e 61 6d 65 28 65 4e 65 77 29 3b 0a 20 20  dename(eNew);.  
34a30 70 4f 75 74 2d 3e 6e 20 3d 20 73 71 6c 69 74 65  pOut->n = sqlite
34a40 33 53 74 72 6c 65 6e 33 30 28 70 4f 75 74 2d 3e  3Strlen30(pOut->
34a50 7a 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20  z);.  pOut->enc 
34a60 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 0a 20  = SQLITE_UTF8;. 
34a70 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
34a80 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c  geEncoding(pOut,
34a90 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 69 66   encoding);.  if
34aa0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
34ab0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
34ac0 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 23 65 6e 64    break;.};.#end
34ad0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
34ae0 54 5f 50 52 41 47 4d 41 20 2a 2f 0a 0a 23 69 66  T_PRAGMA */..#if
34af0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
34b00 5f 4f 4d 49 54 5f 56 41 43 55 55 4d 29 20 26 26  _OMIT_VACUUM) &&
34b10 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
34b20 5f 4f 4d 49 54 5f 41 54 54 41 43 48 29 0a 2f 2a  _OMIT_ATTACH)./*
34b30 20 4f 70 63 6f 64 65 3a 20 56 61 63 75 75 6d 20   Opcode: Vacuum 
34b40 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
34b50 20 56 61 63 75 75 6d 20 74 68 65 20 65 6e 74 69   Vacuum the enti
34b60 72 65 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  re database P1. 
34b70 20 50 31 20 69 73 20 30 20 66 6f 72 20 22 6d 61   P1 is 0 for "ma
34b80 69 6e 22 2c 20 61 6e 64 20 32 20 6f 72 20 6d 6f  in", and 2 or mo
34b90 72 65 0a 2a 2a 20 66 6f 72 20 61 6e 20 61 74 74  re.** for an att
34ba0 61 63 68 65 64 20 64 61 74 61 62 61 73 65 2e 20  ached database. 
34bb0 20 54 68 65 20 22 74 65 6d 70 22 20 64 61 74 61   The "temp" data
34bc0 62 61 73 65 20 6d 61 79 20 6e 6f 74 20 62 65 20  base may not be 
34bd0 76 61 63 75 75 6d 65 64 2e 0a 2a 2f 0a 63 61 73  vacuumed..*/.cas
34be0 65 20 4f 50 5f 56 61 63 75 75 6d 3a 20 7b 0a 20  e OP_Vacuum: {. 
34bf0 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
34c00 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 72 63 20  Only==0 );.  rc 
34c10 3d 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75  = sqlite3RunVacu
34c20 75 6d 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  um(&p->zErrMsg, 
34c30 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20  db, pOp->p1);.  
34c40 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
34c50 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
34c60 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
34c70 64 69 66 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  dif..#if !define
34c80 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  d(SQLITE_OMIT_AU
34c90 54 4f 56 41 43 55 55 4d 29 0a 2f 2a 20 4f 70 63  TOVACUUM)./* Opc
34ca0 6f 64 65 3a 20 49 6e 63 72 56 61 63 75 75 6d 20  ode: IncrVacuum 
34cb0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
34cc0 2a 20 50 65 72 66 6f 72 6d 20 61 20 73 69 6e 67  * Perform a sing
34cd0 6c 65 20 73 74 65 70 20 6f 66 20 74 68 65 20 69  le step of the i
34ce0 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61 63 75 75  ncremental vacuu
34cf0 6d 20 70 72 6f 63 65 64 75 72 65 20 6f 6e 0a 2a  m procedure on.*
34d00 2a 20 74 68 65 20 50 31 20 64 61 74 61 62 61 73  * the P1 databas
34d10 65 2e 20 49 66 20 74 68 65 20 76 61 63 75 75 6d  e. If the vacuum
34d20 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c 20 6a   has finished, j
34d30 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
34d40 6f 6e 0a 2a 2a 20 50 32 2e 20 4f 74 68 65 72 77  on.** P2. Otherw
34d50 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  ise, fall throug
34d60 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
34d70 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
34d80 73 65 20 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d  se OP_IncrVacuum
34d90 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
34da0 6d 70 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70  mp */.  Btree *p
34db0 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  Bt;..  assert( p
34dc0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
34dd0 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
34de0 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
34df0 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
34e00 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20  k, pOp->p1) );. 
34e10 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
34e20 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 42 74  Only==0 );.  pBt
34e30 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
34e40 70 31 5d 2e 70 42 74 3b 0a 20 20 72 63 20 3d 20  p1].pBt;.  rc = 
34e50 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 63 72  sqlite3BtreeIncr
34e60 56 61 63 75 75 6d 28 70 42 74 29 3b 0a 20 20 56  Vacuum(pBt);.  V
34e70 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
34e80 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 2c 32  c==SQLITE_DONE,2
34e90 29 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20  );.  if( rc ){. 
34ea0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
34eb0 45 5f 44 4f 4e 45 20 29 20 67 6f 74 6f 20 61 62  E_DONE ) goto ab
34ec0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
34ed0 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  ;.    rc = SQLIT
34ee0 45 5f 4f 4b 3b 0a 20 20 20 20 67 6f 74 6f 20 6a  E_OK;.    goto j
34ef0 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20  ump_to_p2;.  }. 
34f00 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
34f10 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 78 70  ../* Opcode: Exp
34f20 69 72 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ire P1 * * * *.*
34f30 2a 0a 2a 2a 20 43 61 75 73 65 20 70 72 65 63 6f  *.** Cause preco
34f40 6d 70 69 6c 65 64 20 73 74 61 74 65 6d 65 6e 74  mpiled statement
34f50 73 20 74 6f 20 65 78 70 69 72 65 2e 20 20 57 68  s to expire.  Wh
34f60 65 6e 20 61 6e 20 65 78 70 69 72 65 64 20 73 74  en an expired st
34f70 61 74 65 6d 65 6e 74 0a 2a 2a 20 69 73 20 65 78  atement.** is ex
34f80 65 63 75 74 65 64 20 75 73 69 6e 67 20 73 71 6c  ecuted using sql
34f90 69 74 65 33 5f 73 74 65 70 28 29 20 69 74 20 77  ite3_step() it w
34fa0 69 6c 6c 20 65 69 74 68 65 72 20 61 75 74 6f 6d  ill either autom
34fb0 61 74 69 63 61 6c 6c 79 0a 2a 2a 20 72 65 70 72  atically.** repr
34fc0 65 70 61 72 65 20 69 74 73 65 6c 66 20 28 69 66  epare itself (if
34fd0 20 69 74 20 77 61 73 20 6f 72 69 67 69 6e 61 6c   it was original
34fe0 6c 79 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  ly created using
34ff0 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
35000 5f 76 32 28 29 29 0a 2a 2a 20 6f 72 20 69 74 20  _v2()).** or it 
35010 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 53  will fail with S
35020 51 4c 49 54 45 5f 53 43 48 45 4d 41 2e 0a 2a 2a  QLITE_SCHEMA..**
35030 20 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 30 2c   .** If P1 is 0,
35040 20 74 68 65 6e 20 61 6c 6c 20 53 51 4c 20 73 74   then all SQL st
35050 61 74 65 6d 65 6e 74 73 20 62 65 63 6f 6d 65 20  atements become 
35060 65 78 70 69 72 65 64 2e 20 49 66 20 50 31 20 69  expired. If P1 i
35070 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74  s non-zero,.** t
35080 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63 75 72  hen only the cur
35090 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67  rently executing
350a0 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 65 78   statement is ex
350b0 70 69 72 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  pired..*/.case O
350c0 50 5f 45 78 70 69 72 65 3a 20 7b 0a 20 20 69 66  P_Expire: {.  if
350d0 28 20 21 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20  ( !pOp->p1 ){.  
350e0 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50    sqlite3ExpireP
350f0 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
35100 73 28 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  s(db);.  }else{.
35110 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d      p->expired =
35120 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
35130 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
35140 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43  TE_OMIT_SHARED_C
35150 41 43 48 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ACHE./* Opcode: 
35160 54 61 62 6c 65 4c 6f 63 6b 20 50 31 20 50 32 20  TableLock P1 P2 
35170 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
35180 73 69 73 3a 20 69 44 62 3d 50 31 20 72 6f 6f 74  sis: iDb=P1 root
35190 3d 50 32 20 77 72 69 74 65 3d 50 33 0a 2a 2a 0a  =P2 write=P3.**.
351a0 2a 2a 20 4f 62 74 61 69 6e 20 61 20 6c 6f 63 6b  ** Obtain a lock
351b0 20 6f 6e 20 61 20 70 61 72 74 69 63 75 6c 61 72   on a particular
351c0 20 74 61 62 6c 65 2e 20 54 68 69 73 20 69 6e 73   table. This ins
351d0 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79  truction is only
351e0 20 75 73 65 64 20 77 68 65 6e 0a 2a 2a 20 74 68   used when.** th
351f0 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 66  e shared-cache f
35200 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65  eature is enable
35210 64 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  d. .**.** P1 is 
35220 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  the index of the
35230 20 64 61 74 61 62 61 73 65 20 69 6e 20 73 71 6c   database in sql
35240 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 74 68  ite3.aDb[] of th
35250 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 6f 6e  e database.** on
35260 20 77 68 69 63 68 20 74 68 65 20 6c 6f 63 6b 20   which the lock 
35270 69 73 20 61 63 71 75 69 72 65 64 2e 20 20 41 20  is acquired.  A 
35280 72 65 61 64 6c 6f 63 6b 20 69 73 20 6f 62 74 61  readlock is obta
35290 69 6e 65 64 20 69 66 20 50 33 3d 3d 30 20 6f 72  ined if P3==0 or
352a0 0a 2a 2a 20 61 20 77 72 69 74 65 20 6c 6f 63 6b  .** a write lock
352b0 20 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a   if P3==1..**.**
352c0 20 50 32 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P2 contains the
352d0 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68   root-page of th
352e0 65 20 74 61 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e  e table to lock.
352f0 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74 61 69  .**.** P4 contai
35300 6e 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ns a pointer to 
35310 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
35320 74 61 62 6c 65 20 62 65 69 6e 67 20 6c 6f 63 6b  table being lock
35330 65 64 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79  ed. This is only
35340 0a 2a 2a 20 75 73 65 64 20 74 6f 20 67 65 6e 65  .** used to gene
35350 72 61 74 65 20 61 6e 20 65 72 72 6f 72 20 6d 65  rate an error me
35360 73 73 61 67 65 20 69 66 20 74 68 65 20 6c 6f 63  ssage if the loc
35370 6b 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74 61  k cannot be obta
35380 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ined..*/.case OP
35390 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20  _TableLock: {.  
353a0 75 38 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 3d  u8 isWriteLock =
353b0 20 28 75 38 29 70 4f 70 2d 3e 70 33 3b 0a 20 20   (u8)pOp->p3;.  
353c0 69 66 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 20  if( isWriteLock 
353d0 7c 7c 20 30 3d 3d 28 64 62 2d 3e 66 6c 61 67 73  || 0==(db->flags
353e0 26 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f  &SQLITE_ReadUnco
353f0 6d 6d 69 74 74 65 64 29 20 29 7b 0a 20 20 20 20  mmitted) ){.    
35400 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31  int p1 = pOp->p1
35410 3b 20 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ; .    assert( p
35420 31 3e 3d 30 20 26 26 20 70 31 3c 64 62 2d 3e 6e  1>=0 && p1<db->n
35430 44 62 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  Db );.    assert
35440 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
35450 62 74 72 65 65 4d 61 73 6b 2c 20 70 31 29 20 29  btreeMask, p1) )
35460 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 73  ;.    assert( is
35470 57 72 69 74 65 4c 6f 63 6b 3d 3d 30 20 7c 7c 20  WriteLock==0 || 
35480 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 31 20 29  isWriteLock==1 )
35490 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
354a0 65 33 42 74 72 65 65 4c 6f 63 6b 54 61 62 6c 65  e3BtreeLockTable
354b0 28 64 62 2d 3e 61 44 62 5b 70 31 5d 2e 70 42 74  (db->aDb[p1].pBt
354c0 2c 20 70 4f 70 2d 3e 70 32 2c 20 69 73 57 72 69  , pOp->p2, isWri
354d0 74 65 4c 6f 63 6b 29 3b 0a 20 20 20 20 69 66 28  teLock);.    if(
354e0 20 72 63 20 29 7b 0a 20 20 20 20 20 20 69 66 28   rc ){.      if(
354f0 20 28 72 63 26 30 78 46 46 29 3d 3d 53 51 4c 49   (rc&0xFF)==SQLI
35500 54 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20 20 20  TE_LOCKED ){.   
35510 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20       const char 
35520 2a 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a  *z = pOp->p4.z;.
35530 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
35540 64 62 65 45 72 72 6f 72 28 70 2c 20 22 64 61 74  dbeError(p, "dat
35550 61 62 61 73 65 20 74 61 62 6c 65 20 69 73 20 6c  abase table is l
35560 6f 63 6b 65 64 3a 20 25 73 22 2c 20 7a 29 3b 0a  ocked: %s", z);.
35570 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 67 6f        }.      go
35580 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
35590 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d  error;.    }.  }
355a0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
355b0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
355c0 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 20 2a  T_SHARED_CACHE *
355d0 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
355e0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
355f0 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
35600 42 65 67 69 6e 20 2a 20 2a 20 2a 20 50 34 20 2a  Begin * * * P4 *
35610 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65  .**.** P4 may be
35620 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e   a pointer to an
35630 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
35640 72 75 63 74 75 72 65 2e 20 49 66 20 73 6f 2c 20  ructure. If so, 
35650 63 61 6c 6c 20 74 68 65 20 0a 2a 2a 20 78 42 65  call the .** xBe
35660 67 69 6e 20 6d 65 74 68 6f 64 20 66 6f 72 20 74  gin method for t
35670 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  hat table..**.**
35680 20 41 6c 73 6f 2c 20 77 68 65 74 68 65 72 20 6f   Also, whether o
35690 72 20 6e 6f 74 20 50 34 20 69 73 20 73 65 74 2c  r not P4 is set,
356a0 20 63 68 65 63 6b 20 74 68 61 74 20 74 68 69 73   check that this
356b0 20 69 73 20 6e 6f 74 20 62 65 69 6e 67 20 63 61   is not being ca
356c0 6c 6c 65 64 20 66 72 6f 6d 0a 2a 2a 20 77 69 74  lled from.** wit
356d0 68 69 6e 20 61 20 63 61 6c 6c 62 61 63 6b 20 74  hin a callback t
356e0 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  o a virtual tabl
356f0 65 20 78 53 79 6e 63 28 29 20 6d 65 74 68 6f 64  e xSync() method
35700 2e 20 49 66 20 69 74 20 69 73 2c 20 74 68 65 20  . If it is, the 
35710 65 72 72 6f 72 0a 2a 2a 20 63 6f 64 65 20 77 69  error.** code wi
35720 6c 6c 20 62 65 20 73 65 74 20 74 6f 20 53 51 4c  ll be set to SQL
35730 49 54 45 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a 63  ITE_LOCKED..*/.c
35740 61 73 65 20 4f 50 5f 56 42 65 67 69 6e 3a 20 7b  ase OP_VBegin: {
35750 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62  .  VTable *pVTab
35760 3b 0a 20 20 70 56 54 61 62 20 3d 20 70 4f 70 2d  ;.  pVTab = pOp-
35770 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20 72 63 20  >p4.pVtab;.  rc 
35780 3d 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67  = sqlite3VtabBeg
35790 69 6e 28 64 62 2c 20 70 56 54 61 62 29 3b 0a 20  in(db, pVTab);. 
357a0 20 69 66 28 20 70 56 54 61 62 20 29 20 73 71 6c   if( pVTab ) sql
357b0 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72  ite3VtabImportEr
357c0 72 6d 73 67 28 70 2c 20 70 56 54 61 62 2d 3e 70  rmsg(p, pVTab->p
357d0 56 74 61 62 29 3b 0a 20 20 69 66 28 20 72 63 20  Vtab);.  if( rc 
357e0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
357f0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65  _to_error;.  bre
35800 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
35810 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
35820 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
35830 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
35840 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
35850 20 4f 70 63 6f 64 65 3a 20 56 43 72 65 61 74 65   Opcode: VCreate
35860 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
35870 2a 2a 20 50 32 20 69 73 20 61 20 72 65 67 69 73  ** P2 is a regis
35880 74 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 74  ter that holds t
35890 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 76 69 72  he name of a vir
358a0 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20 64 61  tual table in da
358b0 74 61 62 61 73 65 20 0a 2a 2a 20 50 31 2e 20 43  tabase .** P1. C
358c0 61 6c 6c 20 74 68 65 20 78 43 72 65 61 74 65 20  all the xCreate 
358d0 6d 65 74 68 6f 64 20 66 6f 72 20 74 68 61 74 20  method for that 
358e0 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  table..*/.case O
358f0 50 5f 56 43 72 65 61 74 65 3a 20 7b 0a 20 20 4d  P_VCreate: {.  M
35900 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20 20 20  em sMem;        
35910 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67    /* For storing
35920 20 74 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e   the record bein
35930 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63  g decoded */.  c
35940 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 62 3b  onst char *zTab;
35950 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
35960 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a   virtual table *
35970 2f 0a 0a 20 20 6d 65 6d 73 65 74 28 26 73 4d 65  /..  memset(&sMe
35980 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65  m, 0, sizeof(sMe
35990 6d 29 29 3b 0a 20 20 73 4d 65 6d 2e 64 62 20 3d  m));.  sMem.db =
359a0 20 64 62 3b 0a 20 20 2f 2a 20 42 65 63 61 75 73   db;.  /* Becaus
359b0 65 20 50 32 20 69 73 20 61 6c 77 61 79 73 20 61  e P2 is always a
359c0 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 2c 20   static string, 
359d0 69 74 20 69 73 20 69 6d 70 6f 73 73 69 62 6c 65  it is impossible
359e0 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 73 71   for the.  ** sq
359f0 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6f 70 79  lite3VdbeMemCopy
35a00 28 29 20 74 6f 20 66 61 69 6c 20 2a 2f 0a 20 20  () to fail */.  
35a10 61 73 73 65 72 74 28 20 28 61 4d 65 6d 5b 70 4f  assert( (aMem[pO
35a20 70 2d 3e 70 32 5d 2e 66 6c 61 67 73 20 26 20 4d  p->p2].flags & M
35a30 45 4d 5f 53 74 72 29 21 3d 30 20 29 3b 0a 20 20  EM_Str)!=0 );.  
35a40 61 73 73 65 72 74 28 20 28 61 4d 65 6d 5b 70 4f  assert( (aMem[pO
35a50 70 2d 3e 70 32 5d 2e 66 6c 61 67 73 20 26 20 4d  p->p2].flags & M
35a60 45 4d 5f 53 74 61 74 69 63 29 21 3d 30 20 29 3b  EM_Static)!=0 );
35a70 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
35a80 64 62 65 4d 65 6d 43 6f 70 79 28 26 73 4d 65 6d  dbeMemCopy(&sMem
35a90 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  , &aMem[pOp->p2]
35aa0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d  );.  assert( rc=
35ab0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20  =SQLITE_OK );.  
35ac0 7a 54 61 62 20 3d 20 28 63 6f 6e 73 74 20 63 68  zTab = (const ch
35ad0 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75  ar*)sqlite3_valu
35ae0 65 5f 74 65 78 74 28 26 73 4d 65 6d 29 3b 0a 20  e_text(&sMem);. 
35af0 20 61 73 73 65 72 74 28 20 7a 54 61 62 20 7c 7c   assert( zTab ||
35b00 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
35b10 64 20 29 3b 0a 20 20 69 66 28 20 7a 54 61 62 20  d );.  if( zTab 
35b20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
35b30 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74  te3VtabCallCreat
35b40 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 7a  e(db, pOp->p1, z
35b50 54 61 62 2c 20 26 70 2d 3e 7a 45 72 72 4d 73 67  Tab, &p->zErrMsg
35b60 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  );.  }.  sqlite3
35b70 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26  VdbeMemRelease(&
35b80 73 4d 65 6d 29 3b 0a 20 20 69 66 28 20 72 63 20  sMem);.  if( rc 
35b90 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
35ba0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65  _to_error;.  bre
35bb0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
35bc0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
35bd0 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
35be0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
35bf0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
35c00 20 4f 70 63 6f 64 65 3a 20 56 44 65 73 74 72 6f   Opcode: VDestro
35c10 79 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  y P1 * * P4 *.**
35c20 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61  .** P4 is the na
35c30 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20  me of a virtual 
35c40 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73  table in databas
35c50 65 20 50 31 2e 20 20 43 61 6c 6c 20 74 68 65 20  e P1.  Call the 
35c60 78 44 65 73 74 72 6f 79 20 6d 65 74 68 6f 64 0a  xDestroy method.
35c70 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65  ** of that table
35c80 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 44 65  ..*/.case OP_VDe
35c90 73 74 72 6f 79 3a 20 7b 0a 20 20 64 62 2d 3e 6e  stroy: {.  db->n
35ca0 56 44 65 73 74 72 6f 79 2b 2b 3b 0a 20 20 72 63  VDestroy++;.  rc
35cb0 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 43 61   = sqlite3VtabCa
35cc0 6c 6c 44 65 73 74 72 6f 79 28 64 62 2c 20 70 4f  llDestroy(db, pO
35cd0 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
35ce0 29 3b 0a 20 20 64 62 2d 3e 6e 56 44 65 73 74 72  );.  db->nVDestr
35cf0 6f 79 2d 2d 3b 0a 20 20 69 66 28 20 72 63 20 29  oy--;.  if( rc )
35d00 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
35d10 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
35d20 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
35d30 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
35d40 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
35d50 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
35d60 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
35d70 4f 70 63 6f 64 65 3a 20 56 4f 70 65 6e 20 50 31  Opcode: VOpen P1
35d80 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
35d90 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
35da0 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  to a virtual tab
35db0 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71  le object, an sq
35dc0 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63  lite3_vtab struc
35dd0 74 75 72 65 2e 0a 2a 2a 20 50 31 20 69 73 20 61  ture..** P1 is a
35de0 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e 20   cursor number. 
35df0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6f 70 65   This opcode ope
35e00 6e 73 20 61 20 63 75 72 73 6f 72 20 74 6f 20 74  ns a cursor to t
35e10 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61  he virtual.** ta
35e20 62 6c 65 20 61 6e 64 20 73 74 6f 72 65 73 20 74  ble and stores t
35e30 68 61 74 20 63 75 72 73 6f 72 20 69 6e 20 50 31  hat cursor in P1
35e40 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4f 70  ..*/.case OP_VOp
35e50 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  en: {.  VdbeCurs
35e60 6f 72 20 2a 70 43 75 72 3b 0a 20 20 73 71 6c 69  or *pCur;.  sqli
35e70 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20  te3_vtab_cursor 
35e80 2a 70 56 43 75 72 3b 0a 20 20 73 71 6c 69 74 65  *pVCur;.  sqlite
35e90 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
35ea0 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
35eb0 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
35ec0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49  .  assert( p->bI
35ed0 73 52 65 61 64 65 72 20 29 3b 0a 20 20 70 43 75  sReader );.  pCu
35ee0 72 20 3d 20 30 3b 0a 20 20 70 56 43 75 72 20 3d  r = 0;.  pVCur =
35ef0 20 30 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 4f   0;.  pVtab = pO
35f00 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74  p->p4.pVtab->pVt
35f10 61 62 3b 0a 20 20 69 66 28 20 70 56 74 61 62 3d  ab;.  if( pVtab=
35f20 3d 30 20 7c 7c 20 4e 45 56 45 52 28 70 56 74 61  =0 || NEVER(pVta
35f30 62 2d 3e 70 4d 6f 64 75 6c 65 3d 3d 30 29 20 29  b->pModule==0) )
35f40 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
35f50 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 67 6f  E_LOCKED;.    go
35f60 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
35f70 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 4d 6f  error;.  }.  pMo
35f80 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d  dule = pVtab->pM
35f90 6f 64 75 6c 65 3b 0a 20 20 72 63 20 3d 20 70 4d  odule;.  rc = pM
35fa0 6f 64 75 6c 65 2d 3e 78 4f 70 65 6e 28 70 56 74  odule->xOpen(pVt
35fb0 61 62 2c 20 26 70 56 43 75 72 29 3b 0a 20 20 73  ab, &pVCur);.  s
35fc0 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74  qlite3VtabImport
35fd0 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29  Errmsg(p, pVtab)
35fe0 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
35ff0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
36000 72 72 6f 72 3b 0a 0a 20 20 2f 2a 20 49 6e 69 74  rror;..  /* Init
36010 69 61 6c 69 7a 65 20 73 71 6c 69 74 65 33 5f 76  ialize sqlite3_v
36020 74 61 62 5f 63 75 72 73 6f 72 20 62 61 73 65 20  tab_cursor base 
36030 63 6c 61 73 73 20 2a 2f 0a 20 20 70 56 43 75 72  class */.  pVCur
36040 2d 3e 70 56 74 61 62 20 3d 20 70 56 74 61 62 3b  ->pVtab = pVtab;
36050 0a 0a 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a  ..  /* Initializ
36060 65 20 76 64 62 65 20 63 75 72 73 6f 72 20 6f 62  e vdbe cursor ob
36070 6a 65 63 74 20 2a 2f 0a 20 20 70 43 75 72 20 3d  ject */.  pCur =
36080 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28   allocateCursor(
36090 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 2d  p, pOp->p1, 0, -
360a0 31 2c 20 43 55 52 54 59 50 45 5f 56 54 41 42 29  1, CURTYPE_VTAB)
360b0 3b 0a 20 20 69 66 28 20 70 43 75 72 20 29 7b 0a  ;.  if( pCur ){.
360c0 20 20 20 20 70 43 75 72 2d 3e 75 63 2e 70 56 43      pCur->uc.pVC
360d0 75 72 20 3d 20 70 56 43 75 72 3b 0a 20 20 20 20  ur = pVCur;.    
360e0 70 56 74 61 62 2d 3e 6e 52 65 66 2b 2b 3b 0a 20  pVtab->nRef++;. 
360f0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
36100 72 74 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  rt( db->mallocFa
36110 69 6c 65 64 20 29 3b 0a 20 20 20 20 70 4d 6f 64  iled );.    pMod
36120 75 6c 65 2d 3e 78 43 6c 6f 73 65 28 70 56 43 75  ule->xClose(pVCu
36130 72 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f  r);.    goto no_
36140 6d 65 6d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  mem;.  }.  break
36150 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
36160 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
36170 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
36180 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
36190 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
361a0 70 63 6f 64 65 3a 20 56 46 69 6c 74 65 72 20 50  pcode: VFilter P
361b0 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
361c0 53 79 6e 6f 70 73 69 73 3a 20 69 70 6c 61 6e 3d  Synopsis: iplan=
361d0 72 5b 50 33 5d 20 7a 70 6c 61 6e 3d 27 50 34 27  r[P3] zplan='P4'
361e0 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 63  .**.** P1 is a c
361f0 75 72 73 6f 72 20 6f 70 65 6e 65 64 20 75 73 69  ursor opened usi
36200 6e 67 20 56 4f 70 65 6e 2e 20 20 50 32 20 69 73  ng VOpen.  P2 is
36210 20 61 6e 20 61 64 64 72 65 73 73 20 74 6f 20 6a   an address to j
36220 75 6d 70 20 74 6f 20 69 66 0a 2a 2a 20 74 68 65  ump to if.** the
36230 20 66 69 6c 74 65 72 65 64 20 72 65 73 75 6c 74   filtered result
36240 20 73 65 74 20 69 73 20 65 6d 70 74 79 2e 0a 2a   set is empty..*
36250 2a 0a 2a 2a 20 50 34 20 69 73 20 65 69 74 68 65  *.** P4 is eithe
36260 72 20 4e 55 4c 4c 20 6f 72 20 61 20 73 74 72 69  r NULL or a stri
36270 6e 67 20 74 68 61 74 20 77 61 73 20 67 65 6e 65  ng that was gene
36280 72 61 74 65 64 20 62 79 20 74 68 65 20 78 42 65  rated by the xBe
36290 73 74 49 6e 64 65 78 0a 2a 2a 20 6d 65 74 68 6f  stIndex.** metho
362a0 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e  d of the module.
362b0 20 20 54 68 65 20 69 6e 74 65 72 70 72 65 74 61    The interpreta
362c0 74 69 6f 6e 20 6f 66 20 74 68 65 20 50 34 20 73  tion of the P4 s
362d0 74 72 69 6e 67 20 69 73 20 6c 65 66 74 0a 2a 2a  tring is left.**
362e0 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 69   to the module i
362f0 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 2a  mplementation..*
36300 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
36310 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 78 46 69   invokes the xFi
36320 6c 74 65 72 20 6d 65 74 68 6f 64 20 6f 6e 20 74  lter method on t
36330 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
36340 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20 62 79   specified.** by
36350 20 50 31 2e 20 20 54 68 65 20 69 6e 74 65 67 65   P1.  The intege
36360 72 20 71 75 65 72 79 20 70 6c 61 6e 20 70 61 72  r query plan par
36370 61 6d 65 74 65 72 20 74 6f 20 78 46 69 6c 74 65  ameter to xFilte
36380 72 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  r is stored in r
36390 65 67 69 73 74 65 72 0a 2a 2a 20 50 33 2e 20 52  egister.** P3. R
363a0 65 67 69 73 74 65 72 20 50 33 2b 31 20 73 74 6f  egister P3+1 sto
363b0 72 65 73 20 74 68 65 20 61 72 67 63 20 70 61 72  res the argc par
363c0 61 6d 65 74 65 72 20 74 6f 20 62 65 20 70 61 73  ameter to be pas
363d0 73 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20 78 46  sed to the.** xF
363e0 69 6c 74 65 72 20 6d 65 74 68 6f 64 2e 20 52 65  ilter method. Re
363f0 67 69 73 74 65 72 73 20 50 33 2b 32 2e 2e 50 33  gisters P3+2..P3
36400 2b 31 2b 61 72 67 63 20 61 72 65 20 74 68 65 20  +1+argc are the 
36410 61 72 67 63 0a 2a 2a 20 61 64 64 69 74 69 6f 6e  argc.** addition
36420 61 6c 20 70 61 72 61 6d 65 74 65 72 73 20 77 68  al parameters wh
36430 69 63 68 20 61 72 65 20 70 61 73 73 65 64 20 74  ich are passed t
36440 6f 0a 2a 2a 20 78 46 69 6c 74 65 72 20 61 73 20  o.** xFilter as 
36450 61 72 67 76 2e 20 52 65 67 69 73 74 65 72 20 50  argv. Register P
36460 33 2b 32 20 62 65 63 6f 6d 65 73 20 61 72 67 76  3+2 becomes argv
36470 5b 30 5d 20 77 68 65 6e 20 70 61 73 73 65 64 20  [0] when passed 
36480 74 6f 20 78 46 69 6c 74 65 72 2e 0a 2a 2a 0a 2a  to xFilter..**.*
36490 2a 20 41 20 6a 75 6d 70 20 69 73 20 6d 61 64 65  * A jump is made
364a0 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 72 65   to P2 if the re
364b0 73 75 6c 74 20 73 65 74 20 61 66 74 65 72 20 66  sult set after f
364c0 69 6c 74 65 72 69 6e 67 20 77 6f 75 6c 64 20 62  iltering would b
364d0 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63 61 73 65  e empty..*/.case
364e0 20 4f 50 5f 56 46 69 6c 74 65 72 3a 20 7b 20 20   OP_VFilter: {  
364f0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e   /* jump */.  in
36500 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 51  t nArg;.  int iQ
36510 75 65 72 79 3b 0a 20 20 63 6f 6e 73 74 20 73 71  uery;.  const sq
36520 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
36530 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 51  odule;.  Mem *pQ
36540 75 65 72 79 3b 0a 20 20 4d 65 6d 20 2a 70 41 72  uery;.  Mem *pAr
36550 67 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  gc;.  sqlite3_vt
36560 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 43 75 72  ab_cursor *pVCur
36570 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ;.  sqlite3_vtab
36580 20 2a 70 56 74 61 62 3b 0a 20 20 56 64 62 65 43   *pVtab;.  VdbeC
36590 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 69  ursor *pCur;.  i
365a0 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 69 3b  nt res;.  int i;
365b0 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a  .  Mem **apArg;.
365c0 0a 20 20 70 51 75 65 72 79 20 3d 20 26 61 4d 65  .  pQuery = &aMe
365d0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 41  m[pOp->p3];.  pA
365e0 72 67 63 20 3d 20 26 70 51 75 65 72 79 5b 31 5d  rgc = &pQuery[1]
365f0 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70  ;.  pCur = p->ap
36600 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
36610 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
36620 69 64 28 70 51 75 65 72 79 29 20 29 3b 0a 20 20  id(pQuery) );.  
36630 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
36640 4f 70 2d 3e 70 33 2c 20 70 51 75 65 72 79 29 3b  Op->p3, pQuery);
36650 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d  .  assert( pCur-
36660 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
36670 50 45 5f 56 54 41 42 20 29 3b 0a 20 20 70 56 43  PE_VTAB );.  pVC
36680 75 72 20 3d 20 70 43 75 72 2d 3e 75 63 2e 70 56  ur = pCur->uc.pV
36690 43 75 72 3b 0a 20 20 70 56 74 61 62 20 3d 20 70  Cur;.  pVtab = p
366a0 56 43 75 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70  VCur->pVtab;.  p
366b0 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
366c0 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f 2a 20 47  pModule;..  /* G
366d0 72 61 62 20 74 68 65 20 69 6e 64 65 78 20 6e 75  rab the index nu
366e0 6d 62 65 72 20 61 6e 64 20 61 72 67 63 20 70 61  mber and argc pa
366f0 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 61 73  rameters */.  as
36700 73 65 72 74 28 20 28 70 51 75 65 72 79 2d 3e 66  sert( (pQuery->f
36710 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29 21 3d 30  lags&MEM_Int)!=0
36720 20 26 26 20 70 41 72 67 63 2d 3e 66 6c 61 67 73   && pArgc->flags
36730 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 6e  ==MEM_Int );.  n
36740 41 72 67 20 3d 20 28 69 6e 74 29 70 41 72 67 63  Arg = (int)pArgc
36750 2d 3e 75 2e 69 3b 0a 20 20 69 51 75 65 72 79 20  ->u.i;.  iQuery 
36760 3d 20 28 69 6e 74 29 70 51 75 65 72 79 2d 3e 75  = (int)pQuery->u
36770 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65  .i;..  /* Invoke
36780 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74   the xFilter met
36790 68 6f 64 20 2a 2f 0a 20 20 72 65 73 20 3d 20 30  hod */.  res = 0
367a0 3b 0a 20 20 61 70 41 72 67 20 3d 20 70 2d 3e 61  ;.  apArg = p->a
367b0 70 41 72 67 3b 0a 20 20 66 6f 72 28 69 20 3d 20  pArg;.  for(i = 
367c0 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b  0; i<nArg; i++){
367d0 0a 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20  .    apArg[i] = 
367e0 26 70 41 72 67 63 5b 69 2b 31 5d 3b 0a 20 20 7d  &pArgc[i+1];.  }
367f0 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d  .  rc = pModule-
36800 3e 78 46 69 6c 74 65 72 28 70 56 43 75 72 2c 20  >xFilter(pVCur, 
36810 69 51 75 65 72 79 2c 20 70 4f 70 2d 3e 70 34 2e  iQuery, pOp->p4.
36820 7a 2c 20 6e 41 72 67 2c 20 61 70 41 72 67 29 3b  z, nArg, apArg);
36830 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d  .  sqlite3VtabIm
36840 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56  portErrmsg(p, pV
36850 74 61 62 29 3b 0a 20 20 69 66 28 20 72 63 20 29  tab);.  if( rc )
36860 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
36870 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 72 65 73 20  to_error;.  res 
36880 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28  = pModule->xEof(
36890 70 56 43 75 72 29 3b 0a 20 20 70 43 75 72 2d 3e  pVCur);.  pCur->
368a0 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 56  nullRow = 0;.  V
368b0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
368c0 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20  es!=0,2);.  if( 
368d0 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  res ) goto jump_
368e0 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a  to_p2;.  break;.
368f0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
36900 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
36910 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
36920 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
36930 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
36940 6f 64 65 3a 20 56 43 6f 6c 75 6d 6e 20 50 31 20  ode: VColumn P1 
36950 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
36960 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 76 63 6f  opsis: r[P3]=vco
36970 6c 75 6d 6e 28 50 32 29 0a 2a 2a 0a 2a 2a 20 53  lumn(P2).**.** S
36980 74 6f 72 65 20 74 68 65 20 76 61 6c 75 65 20 6f  tore the value o
36990 66 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75  f the P2-th colu
369a0 6d 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 72 6f 77  mn of.** the row
369b0 20 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c 2d   of the virtual-
369c0 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 0a  table that the .
369d0 2a 2a 20 50 31 20 63 75 72 73 6f 72 20 69 73 20  ** P1 cursor is 
369e0 70 6f 69 6e 74 69 6e 67 20 74 6f 20 69 6e 74 6f  pointing to into
369f0 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f   register P3..*/
36a00 0a 63 61 73 65 20 4f 50 5f 56 43 6f 6c 75 6d 6e  .case OP_VColumn
36a10 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  : {.  sqlite3_vt
36a20 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e  ab *pVtab;.  con
36a30 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
36a40 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65  e *pModule;.  Me
36a50 6d 20 2a 70 44 65 73 74 3b 0a 20 20 73 71 6c 69  m *pDest;.  sqli
36a60 74 65 33 5f 63 6f 6e 74 65 78 74 20 73 43 6f 6e  te3_context sCon
36a70 74 65 78 74 3b 0a 0a 20 20 56 64 62 65 43 75 72  text;..  VdbeCur
36a80 73 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d 3e 61  sor *pCur = p->a
36a90 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
36aa0 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 65   assert( pCur->e
36ab0 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
36ac0 5f 56 54 41 42 20 29 3b 0a 20 20 61 73 73 65 72  _VTAB );.  asser
36ad0 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
36ae0 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
36af0 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
36b00 29 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26  ) );.  pDest = &
36b10 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
36b20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
36b30 65 28 70 2c 20 70 44 65 73 74 29 3b 0a 20 20 69  e(p, pDest);.  i
36b40 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77  f( pCur->nullRow
36b50 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
36b60 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44  dbeMemSetNull(pD
36b70 65 73 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  est);.    break;
36b80 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70  .  }.  pVtab = p
36b90 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 2d 3e 70  Cur->uc.pVCur->p
36ba0 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20  Vtab;.  pModule 
36bb0 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
36bc0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64  ;.  assert( pMod
36bd0 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b 0a  ule->xColumn );.
36be0 20 20 6d 65 6d 73 65 74 28 26 73 43 6f 6e 74 65    memset(&sConte
36bf0 78 74 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 43  xt, 0, sizeof(sC
36c00 6f 6e 74 65 78 74 29 29 3b 0a 20 20 73 43 6f 6e  ontext));.  sCon
36c10 74 65 78 74 2e 70 4f 75 74 20 3d 20 70 44 65 73  text.pOut = pDes
36c20 74 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  t;.  MemSetTypeF
36c30 6c 61 67 28 70 44 65 73 74 2c 20 4d 45 4d 5f 4e  lag(pDest, MEM_N
36c40 75 6c 6c 29 3b 0a 20 20 72 63 20 3d 20 70 4d 6f  ull);.  rc = pMo
36c50 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 28 70 43  dule->xColumn(pC
36c60 75 72 2d 3e 75 63 2e 70 56 43 75 72 2c 20 26 73  ur->uc.pVCur, &s
36c70 43 6f 6e 74 65 78 74 2c 20 70 4f 70 2d 3e 70 32  Context, pOp->p2
36c80 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62  );.  sqlite3Vtab
36c90 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20  ImportErrmsg(p, 
36ca0 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 73 43  pVtab);.  if( sC
36cb0 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f 72 20 29  ontext.isError )
36cc0 7b 0a 20 20 20 20 72 63 20 3d 20 73 43 6f 6e 74  {.    rc = sCont
36cd0 65 78 74 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d  ext.isError;.  }
36ce0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  .  sqlite3VdbeCh
36cf0 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 44 65  angeEncoding(pDe
36d00 73 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  st, encoding);. 
36d10 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
36d20 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b  pOp->p3, pDest);
36d30 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
36d40 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a 0a  OBSIZE(pDest);..
36d50 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
36d60 65 4d 65 6d 54 6f 6f 42 69 67 28 70 44 65 73 74  eMemTooBig(pDest
36d70 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ) ){.    goto to
36d80 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 69 66 28  o_big;.  }.  if(
36d90 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
36da0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
36db0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
36dc0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
36dd0 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
36de0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
36df0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
36e00 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4e 65  E./* Opcode: VNe
36e10 78 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  xt P1 P2 * * *.*
36e20 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 76 69 72  *.** Advance vir
36e30 74 75 61 6c 20 74 61 62 6c 65 20 50 31 20 74 6f  tual table P1 to
36e40 20 74 68 65 20 6e 65 78 74 20 72 6f 77 20 69 6e   the next row in
36e50 20 69 74 73 20 72 65 73 75 6c 74 20 73 65 74 20   its result set 
36e60 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 69  and.** jump to i
36e70 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 20  nstruction P2.  
36e80 4f 72 2c 20 69 66 20 74 68 65 20 76 69 72 74 75  Or, if the virtu
36e90 61 6c 20 74 61 62 6c 65 20 68 61 73 20 72 65 61  al table has rea
36ea0 63 68 65 64 0a 2a 2a 20 74 68 65 20 65 6e 64 20  ched.** the end 
36eb0 6f 66 20 69 74 73 20 72 65 73 75 6c 74 20 73 65  of its result se
36ec0 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  t, then fall thr
36ed0 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
36ee0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
36ef0 0a 63 61 73 65 20 4f 50 5f 56 4e 65 78 74 3a 20  .case OP_VNext: 
36f00 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20  {   /* jump */. 
36f10 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
36f20 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71  Vtab;.  const sq
36f30 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
36f40 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 72 65 73  odule;.  int res
36f50 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
36f60 70 43 75 72 3b 0a 0a 20 20 72 65 73 20 3d 20 30  pCur;..  res = 0
36f70 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70  ;.  pCur = p->ap
36f80 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
36f90 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 65 43  assert( pCur->eC
36fa0 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
36fb0 56 54 41 42 20 29 3b 0a 20 20 69 66 28 20 70 43  VTAB );.  if( pC
36fc0 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  ur->nullRow ){. 
36fd0 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
36fe0 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 75 63  pVtab = pCur->uc
36ff0 2e 70 56 43 75 72 2d 3e 70 56 74 61 62 3b 0a 20  .pVCur->pVtab;. 
37000 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62   pModule = pVtab
37010 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73  ->pModule;.  ass
37020 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e  ert( pModule->xN
37030 65 78 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76  ext );..  /* Inv
37040 6f 6b 65 20 74 68 65 20 78 4e 65 78 74 28 29 20  oke the xNext() 
37050 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f  method of the mo
37060 64 75 6c 65 2e 20 54 68 65 72 65 20 69 73 20 6e  dule. There is n
37070 6f 20 77 61 79 20 66 6f 72 20 74 68 65 0a 20 20  o way for the.  
37080 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 69 6d  ** underlying im
37090 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20  plementation to 
370a0 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20  return an error 
370b0 69 66 20 6f 6e 65 20 6f 63 63 75 72 73 20 64 75  if one occurs du
370c0 72 69 6e 67 0a 20 20 2a 2a 20 78 4e 65 78 74 28  ring.  ** xNext(
370d0 29 2e 20 49 6e 73 74 65 61 64 2c 20 69 66 20 61  ). Instead, if a
370e0 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20  n error occurs, 
370f0 74 72 75 65 20 69 73 20 72 65 74 75 72 6e 65 64  true is returned
37100 20 28 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61   (indicating tha
37110 74 20 0a 20 20 2a 2a 20 64 61 74 61 20 69 73 20  t .  ** data is 
37120 61 76 61 69 6c 61 62 6c 65 29 20 61 6e 64 20 74  available) and t
37130 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 72 65  he error code re
37140 74 75 72 6e 65 64 20 77 68 65 6e 20 78 43 6f 6c  turned when xCol
37150 75 6d 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f 6d 65  umn or.  ** some
37160 20 6f 74 68 65 72 20 6d 65 74 68 6f 64 20 69 73   other method is
37170 20 6e 65 78 74 20 69 6e 76 6f 6b 65 64 20 6f 6e   next invoked on
37180 20 74 68 65 20 73 61 76 65 20 76 69 72 74 75 61   the save virtua
37190 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72 2e 0a  l table cursor..
371a0 20 20 2a 2f 0a 20 20 72 63 20 3d 20 70 4d 6f 64    */.  rc = pMod
371b0 75 6c 65 2d 3e 78 4e 65 78 74 28 70 43 75 72 2d  ule->xNext(pCur-
371c0 3e 75 63 2e 70 56 43 75 72 29 3b 0a 20 20 73 71  >uc.pVCur);.  sq
371d0 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
371e0 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b  rrmsg(p, pVtab);
371f0 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
37200 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
37210 72 6f 72 3b 0a 20 20 72 65 73 20 3d 20 70 4d 6f  ror;.  res = pMo
37220 64 75 6c 65 2d 3e 78 45 6f 66 28 70 43 75 72 2d  dule->xEof(pCur-
37230 3e 75 63 2e 70 56 43 75 72 29 3b 0a 20 20 56 64  >uc.pVCur);.  Vd
37240 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 21 72  beBranchTaken(!r
37250 65 73 2c 32 29 3b 0a 20 20 69 66 28 20 21 72 65  es,2);.  if( !re
37260 73 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74  s ){.    /* If t
37270 68 65 72 65 20 69 73 20 64 61 74 61 2c 20 6a 75  here is data, ju
37280 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20  mp to P2 */.    
37290 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f  goto jump_to_p2_
372a0 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e  and_check_for_in
372b0 74 65 72 72 75 70 74 3b 0a 20 20 7d 0a 20 20 67  terrupt;.  }.  g
372c0 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e  oto check_for_in
372d0 74 65 72 72 75 70 74 3b 0a 7d 0a 23 65 6e 64 69  terrupt;.}.#endi
372e0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
372f0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
37300 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
37310 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
37320 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 52  LE./* Opcode: VR
37330 65 6e 61 6d 65 20 50 31 20 2a 20 2a 20 50 34 20  ename P1 * * P4 
37340 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  *.**.** P4 is a 
37350 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72  pointer to a vir
37360 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63  tual table objec
37370 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74  t, an sqlite3_vt
37380 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ab structure..**
37390 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76   This opcode inv
373a0 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65 73 70  okes the corresp
373b0 6f 6e 64 69 6e 67 20 78 52 65 6e 61 6d 65 20 6d  onding xRename m
373c0 65 74 68 6f 64 2e 20 54 68 65 20 76 61 6c 75 65  ethod. The value
373d0 0a 2a 2a 20 69 6e 20 72 65 67 69 73 74 65 72 20  .** in register 
373e0 50 31 20 69 73 20 70 61 73 73 65 64 20 61 73 20  P1 is passed as 
373f0 74 68 65 20 7a 4e 61 6d 65 20 61 72 67 75 6d 65  the zName argume
37400 6e 74 20 74 6f 20 74 68 65 20 78 52 65 6e 61 6d  nt to the xRenam
37410 65 20 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73  e method..*/.cas
37420 65 20 4f 50 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a  e OP_VRename: {.
37430 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
37440 70 56 74 61 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e  pVtab;.  Mem *pN
37450 61 6d 65 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20  ame;..  pVtab = 
37460 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70  pOp->p4.pVtab->p
37470 56 74 61 62 3b 0a 20 20 70 4e 61 6d 65 20 3d 20  Vtab;.  pName = 
37480 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
37490 20 20 61 73 73 65 72 74 28 20 70 56 74 61 62 2d    assert( pVtab-
374a0 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d  >pModule->xRenam
374b0 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d  e );.  assert( m
374c0 65 6d 49 73 56 61 6c 69 64 28 70 4e 61 6d 65 29  emIsValid(pName)
374d0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
374e0 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
374f0 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
37500 28 70 4f 70 2d 3e 70 31 2c 20 70 4e 61 6d 65 29  (pOp->p1, pName)
37510 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4e 61 6d  ;.  assert( pNam
37520 65 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53  e->flags & MEM_S
37530 74 72 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  tr );.  testcase
37540 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51  ( pName->enc==SQ
37550 4c 49 54 45 5f 55 54 46 38 20 29 3b 0a 20 20 74  LITE_UTF8 );.  t
37560 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e  estcase( pName->
37570 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31  enc==SQLITE_UTF1
37580 36 42 45 20 29 3b 0a 20 20 74 65 73 74 63 61 73  6BE );.  testcas
37590 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53  e( pName->enc==S
375a0 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 29 3b  QLITE_UTF16LE );
375b0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
375c0 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
375d0 67 28 70 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f  g(pName, SQLITE_
375e0 55 54 46 38 29 3b 0a 20 20 69 66 28 20 72 63 20  UTF8);.  if( rc 
375f0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
37600 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 72 63 20  _to_error;.  rc 
37610 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
37620 2d 3e 78 52 65 6e 61 6d 65 28 70 56 74 61 62 2c  ->xRename(pVtab,
37630 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a 20 20 73 71   pName->z);.  sq
37640 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
37650 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b  rrmsg(p, pVtab);
37660 0a 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20  .  p->expired = 
37670 30 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  0;.  if( rc ) go
37680 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
37690 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a  error;.  break;.
376a0 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  }.#endif..#ifnde
376b0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
376c0 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
376d0 63 6f 64 65 3a 20 56 55 70 64 61 74 65 20 50 31  code: VUpdate P1
376e0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
376f0 53 79 6e 6f 70 73 69 73 3a 20 64 61 74 61 3d 72  Synopsis: data=r
37700 5b 50 33 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 50 34  [P3@P2].**.** P4
37710 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
37720 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
37730 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69   object, an sqli
37740 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
37750 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  re..** This opco
37760 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 63  de invokes the c
37770 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 55 70  orresponding xUp
37780 64 61 74 65 20 6d 65 74 68 6f 64 2e 20 50 32 20  date method. P2 
37790 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 63 6f  values.** are co
377a0 6e 74 69 67 75 6f 75 73 20 6d 65 6d 6f 72 79 20  ntiguous memory 
377b0 63 65 6c 6c 73 20 73 74 61 72 74 69 6e 67 20 61  cells starting a
377c0 74 20 50 33 20 74 6f 20 70 61 73 73 20 74 6f 20  t P3 to pass to 
377d0 74 68 65 20 78 55 70 64 61 74 65 20 0a 2a 2a 20  the xUpdate .** 
377e0 69 6e 76 6f 63 61 74 69 6f 6e 2e 20 54 68 65 20  invocation. The 
377f0 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
37800 72 20 28 50 33 2b 50 32 2d 31 29 20 63 6f 72 72  r (P3+P2-1) corr
37810 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 0a  esponds to the .
37820 2a 2a 20 70 32 74 68 20 65 6c 65 6d 65 6e 74 20  ** p2th element 
37830 6f 66 20 74 68 65 20 61 72 67 76 20 61 72 72 61  of the argv arra
37840 79 20 70 61 73 73 65 64 20 74 6f 20 78 55 70 64  y passed to xUpd
37850 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 78  ate..**.** The x
37860 55 70 64 61 74 65 20 6d 65 74 68 6f 64 20 77 69  Update method wi
37870 6c 6c 20 64 6f 20 61 20 44 45 4c 45 54 45 20 6f  ll do a DELETE o
37880 72 20 61 6e 20 49 4e 53 45 52 54 20 6f 72 20 62  r an INSERT or b
37890 6f 74 68 2e 0a 2a 2a 20 54 68 65 20 61 72 67 76  oth..** The argv
378a0 5b 30 5d 20 65 6c 65 6d 65 6e 74 20 28 77 68 69  [0] element (whi
378b0 63 68 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  ch corresponds t
378c0 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 33  o memory cell P3
378d0 29 0a 2a 2a 20 69 73 20 74 68 65 20 72 6f 77 69  ).** is the rowi
378e0 64 20 6f 66 20 61 20 72 6f 77 20 74 6f 20 64 65  d of a row to de
378f0 6c 65 74 65 2e 20 20 49 66 20 61 72 67 76 5b 30  lete.  If argv[0
37900 5d 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 6e  ] is NULL then n
37910 6f 20 0a 2a 2a 20 64 65 6c 65 74 69 6f 6e 20 6f  o .** deletion o
37920 63 63 75 72 73 2e 20 20 54 68 65 20 61 72 67 76  ccurs.  The argv
37930 5b 31 5d 20 65 6c 65 6d 65 6e 74 20 69 73 20 74  [1] element is t
37940 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20  he rowid of the 
37950 6e 65 77 20 0a 2a 2a 20 72 6f 77 2e 20 20 54 68  new .** row.  Th
37960 69 73 20 63 61 6e 20 62 65 20 4e 55 4c 4c 20 74  is can be NULL t
37970 6f 20 68 61 76 65 20 74 68 65 20 76 69 72 74 75  o have the virtu
37980 61 6c 20 74 61 62 6c 65 20 73 65 6c 65 63 74 20  al table select 
37990 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 69  the new .** rowi
379a0 64 20 66 6f 72 20 69 74 73 65 6c 66 2e 20 20 54  d for itself.  T
379b0 68 65 20 73 75 62 73 65 71 75 65 6e 74 20 65 6c  he subsequent el
379c0 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 61 72  ements in the ar
379d0 72 61 79 20 61 72 65 20 0a 2a 2a 20 74 68 65 20  ray are .** the 
379e0 76 61 6c 75 65 73 20 6f 66 20 63 6f 6c 75 6d 6e  values of column
379f0 73 20 69 6e 20 74 68 65 20 6e 65 77 20 72 6f 77  s in the new row
37a00 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 3d 3d 31  ..**.** If P2==1
37a10 20 74 68 65 6e 20 6e 6f 20 69 6e 73 65 72 74 20   then no insert 
37a20 69 73 20 70 65 72 66 6f 72 6d 65 64 2e 20 20 61  is performed.  a
37a30 72 67 76 5b 30 5d 20 69 73 20 74 68 65 20 72 6f  rgv[0] is the ro
37a40 77 69 64 20 6f 66 0a 2a 2a 20 61 20 72 6f 77 20  wid of.** a row 
37a50 74 6f 20 64 65 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a  to delete..**.**
37a60 20 50 31 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e   P1 is a boolean
37a70 20 66 6c 61 67 2e 20 49 66 20 69 74 20 69 73 20   flag. If it is 
37a80 73 65 74 20 74 6f 20 74 72 75 65 20 61 6e 64 20  set to true and 
37a90 74 68 65 20 78 55 70 64 61 74 65 20 63 61 6c 6c  the xUpdate call
37aa0 0a 2a 2a 20 69 73 20 73 75 63 63 65 73 73 66 75  .** is successfu
37ab0 6c 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75  l, then the valu
37ac0 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71  e returned by sq
37ad0 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72  lite3_last_inser
37ae0 74 5f 72 6f 77 69 64 28 29 20 0a 2a 2a 20 69 73  t_rowid() .** is
37af0 20 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75   set to the valu
37b00 65 20 6f 66 20 74 68 65 20 72 6f 77 69 64 20 66  e of the rowid f
37b10 6f 72 20 74 68 65 20 72 6f 77 20 6a 75 73 74 20  or the row just 
37b20 69 6e 73 65 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  inserted..**.** 
37b30 50 35 20 69 73 20 74 68 65 20 65 72 72 6f 72 20  P5 is the error 
37b40 61 63 74 69 6f 6e 73 20 28 4f 45 5f 52 65 70 6c  actions (OE_Repl
37b50 61 63 65 2c 20 4f 45 5f 46 61 69 6c 2c 20 4f 45  ace, OE_Fail, OE
37b60 5f 49 67 6e 6f 72 65 2c 20 65 74 63 29 20 74 6f  _Ignore, etc) to
37b70 0a 2a 2a 20 61 70 70 6c 79 20 69 6e 20 74 68 65  .** apply in the
37b80 20 63 61 73 65 20 6f 66 20 61 20 63 6f 6e 73 74   case of a const
37b90 72 61 69 6e 74 20 66 61 69 6c 75 72 65 20 6f 6e  raint failure on
37ba0 20 61 6e 20 69 6e 73 65 72 74 20 6f 72 20 75 70   an insert or up
37bb0 64 61 74 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  date..*/.case OP
37bc0 5f 56 55 70 64 61 74 65 3a 20 7b 0a 20 20 73 71  _VUpdate: {.  sq
37bd0 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
37be0 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74  b;.  const sqlit
37bf0 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
37c00 6c 65 3b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a  le;.  int nArg;.
37c10 20 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74    int i;.  sqlit
37c20 65 5f 69 6e 74 36 34 20 72 6f 77 69 64 3b 0a 20  e_int64 rowid;. 
37c30 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 20 20   Mem **apArg;.  
37c40 4d 65 6d 20 2a 70 58 3b 0a 0a 20 20 61 73 73 65  Mem *pX;..  asse
37c50 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 31 20 20  rt( pOp->p2==1  
37c60 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35        || pOp->p5
37c70 3d 3d 4f 45 5f 46 61 69 6c 20 20 20 7c 7c 20 70  ==OE_Fail   || p
37c80 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 6f 6c 6c 62  Op->p5==OE_Rollb
37c90 61 63 6b 20 0a 20 20 20 20 20 20 20 7c 7c 20 70  ack .       || p
37ca0 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 41 62 6f 72 74  Op->p5==OE_Abort
37cb0 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f   || pOp->p5==OE_
37cc0 49 67 6e 6f 72 65 20 7c 7c 20 70 4f 70 2d 3e 70  Ignore || pOp->p
37cd0 35 3d 3d 4f 45 5f 52 65 70 6c 61 63 65 0a 20 20  5==OE_Replace.  
37ce0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
37cf0 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
37d00 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34   pVtab = pOp->p4
37d10 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20  .pVtab->pVtab;. 
37d20 20 69 66 28 20 70 56 74 61 62 3d 3d 30 20 7c 7c   if( pVtab==0 ||
37d30 20 4e 45 56 45 52 28 70 56 74 61 62 2d 3e 70 4d   NEVER(pVtab->pM
37d40 6f 64 75 6c 65 3d 3d 30 29 20 29 7b 0a 20 20 20  odule==0) ){.   
37d50 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43   rc = SQLITE_LOC
37d60 4b 45 44 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62  KED;.    goto ab
37d70 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
37d80 3b 0a 20 20 7d 0a 20 20 70 4d 6f 64 75 6c 65 20  ;.  }.  pModule 
37d90 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
37da0 3b 0a 20 20 6e 41 72 67 20 3d 20 70 4f 70 2d 3e  ;.  nArg = pOp->
37db0 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  p2;.  assert( pO
37dc0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 56 54  p->p4type==P4_VT
37dd0 41 42 20 29 3b 0a 20 20 69 66 28 20 41 4c 57 41  AB );.  if( ALWA
37de0 59 53 28 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64  YS(pModule->xUpd
37df0 61 74 65 29 20 29 7b 0a 20 20 20 20 75 38 20 76  ate) ){.    u8 v
37e00 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20  tabOnConflict = 
37e10 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69  db->vtabOnConfli
37e20 63 74 3b 0a 20 20 20 20 61 70 41 72 67 20 3d 20  ct;.    apArg = 
37e30 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 70 58  p->apArg;.    pX
37e40 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
37e50 5d 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  ];.    for(i=0; 
37e60 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20  i<nArg; i++){.  
37e70 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
37e80 73 56 61 6c 69 64 28 70 58 29 20 29 3b 0a 20 20  sValid(pX) );.  
37e90 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
37ea0 61 6e 67 65 28 70 2c 20 70 58 29 3b 0a 20 20 20  ange(p, pX);.   
37eb0 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 70 58     apArg[i] = pX
37ec0 3b 0a 20 20 20 20 20 20 70 58 2b 2b 3b 0a 20 20  ;.      pX++;.  
37ed0 20 20 7d 0a 20 20 20 20 64 62 2d 3e 76 74 61 62    }.    db->vtab
37ee0 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 70 4f 70  OnConflict = pOp
37ef0 2d 3e 70 35 3b 0a 20 20 20 20 72 63 20 3d 20 70  ->p5;.    rc = p
37f00 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 28  Module->xUpdate(
37f10 70 56 74 61 62 2c 20 6e 41 72 67 2c 20 61 70 41  pVtab, nArg, apA
37f20 72 67 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20  rg, &rowid);.   
37f30 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c   db->vtabOnConfl
37f40 69 63 74 20 3d 20 76 74 61 62 4f 6e 43 6f 6e 66  ict = vtabOnConf
37f50 6c 69 63 74 3b 0a 20 20 20 20 73 71 6c 69 74 65  lict;.    sqlite
37f60 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
37f70 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20  g(p, pVtab);.   
37f80 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
37f90 4f 4b 20 26 26 20 70 4f 70 2d 3e 70 31 20 29 7b  OK && pOp->p1 ){
37fa0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6e  .      assert( n
37fb0 41 72 67 3e 31 20 26 26 20 61 70 41 72 67 5b 30  Arg>1 && apArg[0
37fc0 5d 20 26 26 20 28 61 70 41 72 67 5b 30 5d 2d 3e  ] && (apArg[0]->
37fd0 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 29 20  flags&MEM_Null) 
37fe0 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6c 61 73  );.      db->las
37ff0 74 52 6f 77 69 64 20 3d 20 72 6f 77 69 64 3b 0a  tRowid = rowid;.
38000 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 72      }.    if( (r
38010 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f  c&0xff)==SQLITE_
38020 43 4f 4e 53 54 52 41 49 4e 54 20 26 26 20 70 4f  CONSTRAINT && pO
38030 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 62 43 6f  p->p4.pVtab->bCo
38040 6e 73 74 72 61 69 6e 74 20 29 7b 0a 20 20 20 20  nstraint ){.    
38050 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 3d 3d 4f    if( pOp->p5==O
38060 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20  E_Ignore ){.    
38070 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
38080 4f 4b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  OK;.      }else{
38090 0a 20 20 20 20 20 20 20 20 70 2d 3e 65 72 72 6f  .        p->erro
380a0 72 41 63 74 69 6f 6e 20 3d 20 28 28 70 4f 70 2d  rAction = ((pOp-
380b0 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c 61 63 65 29  >p5==OE_Replace)
380c0 20 3f 20 4f 45 5f 41 62 6f 72 74 20 3a 20 70 4f   ? OE_Abort : pO
380d0 70 2d 3e 70 35 29 3b 0a 20 20 20 20 20 20 7d 0a  p->p5);.      }.
380e0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
380f0 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20   p->nChange++;. 
38100 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72 63 20     }.    if( rc 
38110 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
38120 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20  _to_error;.  }. 
38130 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
38140 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
38150 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
38160 0a 23 69 66 6e 64 65 66 20 20 53 51 4c 49 54 45  .#ifndef  SQLITE
38170 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
38180 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  MAS./* Opcode: P
38190 61 67 65 63 6f 75 6e 74 20 50 31 20 50 32 20 2a  agecount P1 P2 *
381a0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
381b0 20 74 68 65 20 63 75 72 72 65 6e 74 20 6e 75 6d   the current num
381c0 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
381d0 64 61 74 61 62 61 73 65 20 50 31 20 74 6f 20 6d  database P1 to m
381e0 65 6d 6f 72 79 20 63 65 6c 6c 20 50 32 2e 0a 2a  emory cell P2..*
381f0 2f 0a 63 61 73 65 20 4f 50 5f 50 61 67 65 63 6f  /.case OP_Pageco
38200 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  unt: {          
38210 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70    /* out2 */.  p
38220 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
38230 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
38240 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69  pOut->u.i = sqli
38250 74 65 33 42 74 72 65 65 4c 61 73 74 50 61 67 65  te3BtreeLastPage
38260 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31  (db->aDb[pOp->p1
38270 5d 2e 70 42 74 29 3b 0a 20 20 62 72 65 61 6b 3b  ].pBt);.  break;
38280 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e  .}.#endif...#ifn
38290 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54  def  SQLITE_OMIT
382a0 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f  _PAGER_PRAGMAS./
382b0 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 78 50 67 63  * Opcode: MaxPgc
382c0 6e 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  nt P1 P2 P3 * *.
382d0 2a 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 73 65 74  **.**