/ Hex Artifact Content
Login

Artifact ef0fd44a2b4f70e006d050a98c6f563e19293d683975a95287668340764f99f1:


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 20 20 20 20 2a 28 7a 43  ;.    }.    *(zC
3740: 73 72 2b 2b 29 20 3d 20 63 3b 0a 20 20 20 20 73  sr++) = c;.    s
3750: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
3760: 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 64 5b 22  100, zCsr, "%d["
3770: 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20  , pMem->n);.    
3780: 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53  zCsr += sqlite3S
3790: 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20  trlen30(zCsr);. 
37a0: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36     for(i=0; i<16
37b0: 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69   && i<pMem->n; i
37c0: 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ++){.      sqlit
37d0: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
37e0: 20 7a 43 73 72 2c 20 22 25 30 32 58 22 2c 20 28   zCsr, "%02X", (
37f0: 28 69 6e 74 29 70 4d 65 6d 2d 3e 7a 5b 69 5d 20  (int)pMem->z[i] 
3800: 26 20 30 78 46 46 29 29 3b 0a 20 20 20 20 20 20  & 0xFF));.      
3810: 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53  zCsr += sqlite3S
3820: 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20  trlen30(zCsr);. 
3830: 20 20 20 7d 0a 20 20 20 20 66 6f 72 28 69 3d 30     }.    for(i=0
3840: 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d  ; i<16 && i<pMem
3850: 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  ->n; i++){.     
3860: 20 63 68 61 72 20 7a 20 3d 20 70 4d 65 6d 2d 3e   char z = pMem->
3870: 7a 5b 69 5d 3b 0a 20 20 20 20 20 20 69 66 28 20  z[i];.      if( 
3880: 7a 3c 33 32 20 7c 7c 20 7a 3e 31 32 36 20 29 20  z<32 || z>126 ) 
3890: 2a 7a 43 73 72 2b 2b 20 3d 20 27 2e 27 3b 0a 20  *zCsr++ = '.';. 
38a0: 20 20 20 20 20 65 6c 73 65 20 2a 7a 43 73 72 2b       else *zCsr+
38b0: 2b 20 3d 20 7a 3b 0a 20 20 20 20 7d 0a 20 20 20  + = z;.    }.   
38c0: 20 2a 28 7a 43 73 72 2b 2b 29 20 3d 20 27 5d 27   *(zCsr++) = ']'
38d0: 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45  ;.    if( f & ME
38e0: 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20  M_Zero ){.      
38f0: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
3900: 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b 25 64 7a  (100, zCsr,"+%dz
3910: 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65 72 6f 29  ",pMem->u.nZero)
3920: 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20  ;.      zCsr += 
3930: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3940: 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20  zCsr);.    }.   
3950: 20 2a 7a 43 73 72 20 3d 20 27 5c 30 27 3b 0a 20   *zCsr = '\0';. 
3960: 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d   }else if( f & M
3970: 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 69 6e  EM_Str ){.    in
3980: 74 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a 42 75 66  t j, k;.    zBuf
3990: 5b 30 5d 20 3d 20 27 20 27 3b 0a 20 20 20 20 69  [0] = ' ';.    i
39a0: 66 28 20 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29  f( f & MEM_Dyn )
39b0: 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20  {.      zBuf[1] 
39c0: 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73  = 'z';.      ass
39d0: 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53  ert( (f & (MEM_S
39e0: 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29  tatic|MEM_Ephem)
39f0: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
3a00: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74  e if( f & MEM_St
3a10: 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20 7a 42  atic ){.      zB
3a20: 75 66 5b 31 5d 20 3d 20 27 74 27 3b 0a 20 20 20  uf[1] = 't';.   
3a30: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3a40: 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68  (MEM_Dyn|MEM_Eph
3a50: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
3a60: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3a70: 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20  _Ephem ){.      
3a80: 7a 42 75 66 5b 31 5d 20 3d 20 27 65 27 3b 0a 20  zBuf[1] = 'e';. 
3a90: 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20       assert( (f 
3aa0: 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  & (MEM_Static|ME
3ab0: 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20 20  M_Dyn))==0 );.  
3ac0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a    }else{.      z
3ad0: 42 75 66 5b 31 5d 20 3d 20 27 73 27 3b 0a 20 20  Buf[1] = 's';.  
3ae0: 20 20 7d 0a 20 20 20 20 6b 20 3d 20 32 3b 0a 20    }.    k = 2;. 
3af0: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
3b00: 6e 74 66 28 31 30 30 2c 20 26 7a 42 75 66 5b 6b  ntf(100, &zBuf[k
3b10: 5d 2c 20 22 25 64 22 2c 20 70 4d 65 6d 2d 3e 6e  ], "%d", pMem->n
3b20: 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69  );.    k += sqli
3b30: 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a 42 75  te3Strlen30(&zBu
3b40: 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b  f[k]);.    zBuf[
3b50: 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20 20 20 20  k++] = '[';.    
3b60: 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35 20 26 26  for(j=0; j<15 &&
3b70: 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a 2b 2b 29   j<pMem->n; j++)
3b80: 7b 0a 20 20 20 20 20 20 75 38 20 63 20 3d 20 70  {.      u8 c = p
3b90: 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20 20 20 20  Mem->z[j];.     
3ba0: 20 69 66 28 20 63 3e 3d 30 78 32 30 20 26 26 20   if( c>=0x20 && 
3bb0: 63 3c 30 78 37 66 20 29 7b 0a 20 20 20 20 20 20  c<0x7f ){.      
3bc0: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 63 3b    zBuf[k++] = c;
3bd0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
3be0: 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20        zBuf[k++] 
3bf0: 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 7d 0a 20  = '.';.      }. 
3c00: 20 20 20 7d 0a 20 20 20 20 7a 42 75 66 5b 6b 2b     }.    zBuf[k+
3c10: 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20 20 20 73 71  +] = ']';.    sq
3c20: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
3c30: 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20 65 6e 63  00,&zBuf[k], enc
3c40: 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d  names[pMem->enc]
3c50: 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69  );.    k += sqli
3c60: 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a 42 75  te3Strlen30(&zBu
3c70: 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b  f[k]);.    zBuf[
3c80: 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d 0a 7d 0a  k++] = 0;.  }.}.
3c90: 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
3ca0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a  QLITE_DEBUG./*.*
3cb0: 2a 20 50 72 69 6e 74 20 74 68 65 20 76 61 6c 75  * Print the valu
3cc0: 65 20 6f 66 20 61 20 72 65 67 69 73 74 65 72 20  e of a register 
3cd0: 66 6f 72 20 74 72 61 63 69 6e 67 20 70 75 72 70  for tracing purp
3ce0: 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74 69 63 20  oses:.*/.static 
3cf0: 76 6f 69 64 20 6d 65 6d 54 72 61 63 65 50 72 69  void memTracePri
3d00: 6e 74 28 4d 65 6d 20 2a 70 29 7b 0a 20 20 69 66  nt(Mem *p){.  if
3d10: 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ( p->flags & MEM
3d20: 5f 55 6e 64 65 66 69 6e 65 64 20 29 7b 0a 20 20  _Undefined ){.  
3d30: 20 20 70 72 69 6e 74 66 28 22 20 75 6e 64 65 66    printf(" undef
3d40: 69 6e 65 64 22 29 3b 0a 20 20 7d 65 6c 73 65 20  ined");.  }else 
3d50: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
3d60: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70  EM_Null ){.    p
3d70: 72 69 6e 74 66 28 22 20 4e 55 4c 4c 22 29 3b 0a  rintf(" NULL");.
3d80: 20 20 7d 65 6c 73 65 20 69 66 28 20 28 70 2d 3e    }else if( (p->
3d90: 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74  flags & (MEM_Int
3da0: 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28 4d 45 4d  |MEM_Str))==(MEM
3db0: 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 20 29 7b  _Int|MEM_Str) ){
3dc0: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 73 69  .    printf(" si
3dd0: 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b  :%lld", p->u.i);
3de0: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e  .  }else if( p->
3df0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
3e00: 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20  ){.    printf(" 
3e10: 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29  i:%lld", p->u.i)
3e20: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
3e30: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
3e40: 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20 69 66 28  OINT.  }else if(
3e50: 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f   p->flags & MEM_
3e60: 52 65 61 6c 20 29 7b 0a 20 20 20 20 70 72 69 6e  Real ){.    prin
3e70: 74 66 28 22 20 72 3a 25 67 22 2c 20 70 2d 3e 75  tf(" r:%g", p->u
3e80: 2e 72 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65  .r);.#endif.  }e
3e90: 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73  lse if( p->flags
3ea0: 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 20 29 7b   & MEM_RowSet ){
3eb0: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 28 72  .    printf(" (r
3ec0: 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d 65 6c 73  owset)");.  }els
3ed0: 65 7b 0a 20 20 20 20 63 68 61 72 20 7a 42 75 66  e{.    char zBuf
3ee0: 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71 6c 69 74  [200];.    sqlit
3ef0: 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79 50  e3VdbeMemPrettyP
3f00: 72 69 6e 74 28 70 2c 20 7a 42 75 66 29 3b 0a 20  rint(p, zBuf);. 
3f10: 20 20 20 70 72 69 6e 74 66 28 22 20 25 73 22 2c     printf(" %s",
3f20: 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 20 20 69 66   zBuf);.  }.  if
3f30: 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ( p->flags & MEM
3f40: 5f 53 75 62 74 79 70 65 20 29 20 70 72 69 6e 74  _Subtype ) print
3f50: 66 28 22 20 73 75 62 74 79 70 65 3d 30 78 25 30  f(" subtype=0x%0
3f60: 32 78 22 2c 20 70 2d 3e 65 53 75 62 74 79 70 65  2x", p->eSubtype
3f70: 29 3b 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64  );.}.static void
3f80: 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28 69   registerTrace(i
3f90: 6e 74 20 69 52 65 67 2c 20 4d 65 6d 20 2a 70 29  nt iReg, Mem *p)
3fa0: 7b 0a 20 20 70 72 69 6e 74 66 28 22 52 45 47 5b  {.  printf("REG[
3fb0: 25 64 5d 20 3d 20 22 2c 20 69 52 65 67 29 3b 0a  %d] = ", iReg);.
3fc0: 20 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28    memTracePrint(
3fd0: 70 29 3b 0a 20 20 70 72 69 6e 74 66 28 22 5c 6e  p);.  printf("\n
3fe0: 22 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ");.}.#endif..#i
3ff0: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
4000: 47 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47 49  G.#  define REGI
4010: 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29 20  STER_TRACE(R,M) 
4020: 69 66 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c  if(db->flags&SQL
4030: 49 54 45 5f 56 64 62 65 54 72 61 63 65 29 72 65  ITE_VdbeTrace)re
4040: 67 69 73 74 65 72 54 72 61 63 65 28 52 2c 4d 29  gisterTrace(R,M)
4050: 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  .#else.#  define
4060: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
4070: 52 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 0a 23 69  R,M).#endif...#i
4080: 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c  fdef VDBE_PROFIL
4090: 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77 74 69 6d 65  E../* .** hwtime
40a0: 2e 68 20 63 6f 6e 74 61 69 6e 73 20 69 6e 6c 69  .h contains inli
40b0: 6e 65 20 61 73 73 65 6d 62 6c 65 72 20 63 6f 64  ne assembler cod
40c0: 65 20 66 6f 72 20 69 6d 70 6c 65 6d 65 6e 74 69  e for implementi
40d0: 6e 67 20 0a 2a 2a 20 68 69 67 68 2d 70 65 72 66  ng .** high-perf
40e0: 6f 72 6d 61 6e 63 65 20 74 69 6d 69 6e 67 20 72  ormance timing r
40f0: 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 23 69 6e 63  outines..*/.#inc
4100: 6c 75 64 65 20 22 68 77 74 69 6d 65 2e 68 22 0a  lude "hwtime.h".
4110: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
4120: 20 4e 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68   NDEBUG./*.** Th
4130: 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f  is function is o
4140: 6e 6c 79 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20  nly called from 
4150: 77 69 74 68 69 6e 20 61 6e 20 61 73 73 65 72 74  within an assert
4160: 28 29 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 49  () expression. I
4170: 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74 68 61 74  t.** checks that
4180: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 6e 54 72   the sqlite3.nTr
4190: 61 6e 73 61 63 74 69 6f 6e 20 76 61 72 69 61 62  ansaction variab
41a0: 6c 65 20 69 73 20 63 6f 72 72 65 63 74 6c 79 20  le is correctly 
41b0: 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 75  set to.** the nu
41c0: 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e  mber of non-tran
41d0: 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e  saction savepoin
41e0: 74 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  ts currently in 
41f0: 74 68 65 20 0a 2a 2a 20 6c 69 6e 6b 65 64 20 6c  the .** linked l
4200: 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 20  ist starting at 
4210: 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69  sqlite3.pSavepoi
4220: 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20 55 73 61 67 65  nt..** .** Usage
4230: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65  :.**.**     asse
4240: 72 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f 69  rt( checkSavepoi
4250: 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a 2a  ntCount(db) );.*
4260: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63 68 65  /.static int che
4270: 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74  ckSavepointCount
4280: 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20  (sqlite3 *db){. 
4290: 20 69 6e 74 20 6e 20 3d 20 30 3b 0a 20 20 53 61   int n = 0;.  Sa
42a0: 76 65 70 6f 69 6e 74 20 2a 70 3b 0a 20 20 66 6f  vepoint *p;.  fo
42b0: 72 28 70 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69  r(p=db->pSavepoi
42c0: 6e 74 3b 20 70 3b 20 70 3d 70 2d 3e 70 4e 65 78  nt; p; p=p->pNex
42d0: 74 29 20 6e 2b 2b 3b 0a 20 20 61 73 73 65 72 74  t) n++;.  assert
42e0: 28 20 6e 3d 3d 28 64 62 2d 3e 6e 53 61 76 65 70  ( n==(db->nSavep
42f0: 6f 69 6e 74 20 2b 20 64 62 2d 3e 69 73 54 72 61  oint + db->isTra
4300: 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
4310: 74 29 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 31  t) );.  return 1
4320: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ;.}.#endif../*.*
4330: 2a 20 52 65 74 75 72 6e 20 74 68 65 20 72 65 67  * Return the reg
4340: 69 73 74 65 72 20 6f 66 20 70 4f 70 2d 3e 70 32  ister of pOp->p2
4350: 20 61 66 74 65 72 20 66 69 72 73 74 20 70 72 65   after first pre
4360: 70 61 72 69 6e 67 20 69 74 20 74 6f 20 62 65 0a  paring it to be.
4370: 2a 2a 20 6f 76 65 72 77 72 69 74 74 65 6e 20 77  ** overwritten w
4380: 69 74 68 20 61 6e 20 69 6e 74 65 67 65 72 20 76  ith an integer v
4390: 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  alue..*/.static 
43a0: 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20  SQLITE_NOINLINE 
43b0: 4d 65 6d 20 2a 6f 75 74 32 50 72 65 72 65 6c 65  Mem *out2Prerele
43c0: 61 73 65 57 69 74 68 43 6c 65 61 72 28 4d 65 6d  aseWithClear(Mem
43d0: 20 2a 70 4f 75 74 29 7b 0a 20 20 73 71 6c 69 74   *pOut){.  sqlit
43e0: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
43f0: 28 70 4f 75 74 29 3b 0a 20 20 70 4f 75 74 2d 3e  (pOut);.  pOut->
4400: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
4410: 0a 20 20 72 65 74 75 72 6e 20 70 4f 75 74 3b 0a  .  return pOut;.
4420: 7d 0a 73 74 61 74 69 63 20 4d 65 6d 20 2a 6f 75  }.static Mem *ou
4430: 74 32 50 72 65 72 65 6c 65 61 73 65 28 56 64 62  t2Prerelease(Vdb
4440: 65 20 2a 70 2c 20 56 64 62 65 4f 70 20 2a 70 4f  e *p, VdbeOp *pO
4450: 70 29 7b 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 3b  p){.  Mem *pOut;
4460: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
4470: 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74  p2>0 );.  assert
4480: 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e  ( pOp->p2<=(p->n
4490: 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
44a0: 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  or) );.  pOut = 
44b0: 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  &p->aMem[pOp->p2
44c0: 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
44d0: 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
44e0: 20 20 69 66 28 20 56 64 62 65 4d 65 6d 44 79 6e    if( VdbeMemDyn
44f0: 61 6d 69 63 28 70 4f 75 74 29 20 29 7b 20 2f 2a  amic(pOut) ){ /*
4500: 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d  OPTIMIZATION-IF-
4510: 46 41 4c 53 45 2a 2f 0a 20 20 20 20 72 65 74 75  FALSE*/.    retu
4520: 72 6e 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73  rn out2Prereleas
4530: 65 57 69 74 68 43 6c 65 61 72 28 70 4f 75 74 29  eWithClear(pOut)
4540: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
4550: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
4560: 5f 49 6e 74 3b 0a 20 20 20 20 72 65 74 75 72 6e  _Int;.    return
4570: 20 70 4f 75 74 3b 0a 20 20 7d 0a 7d 0a 0a 0a 2f   pOut;.  }.}.../
4580: 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 61 73 20  *.** Execute as 
4590: 6d 75 63 68 20 6f 66 20 61 20 56 44 42 45 20 70  much of a VDBE p
45a0: 72 6f 67 72 61 6d 20 61 73 20 77 65 20 63 61 6e  rogram as we can
45b0: 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 74 68 65  ..** This is the
45c0: 20 63 6f 72 65 20 6f 66 20 73 71 6c 69 74 65 33   core of sqlite3
45d0: 5f 73 74 65 70 28 29 2e 20 20 0a 2a 2f 0a 69 6e  _step().  .*/.in
45e0: 74 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 65  t sqlite3VdbeExe
45f0: 63 28 0a 20 20 56 64 62 65 20 2a 70 20 20 20 20  c(.  Vdbe *p    
4600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4610: 2f 2a 20 54 68 65 20 56 44 42 45 20 2a 2f 0a 29  /* The VDBE */.)
4620: 7b 0a 20 20 4f 70 20 2a 61 4f 70 20 3d 20 70 2d  {.  Op *aOp = p-
4630: 3e 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20 2f  >aOp;          /
4640: 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4f 70  * Copy of p->aOp
4650: 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 20 3d 20   */.  Op *pOp = 
4660: 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  aOp;            
4670: 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70 65 72   /* Current oper
4680: 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 20 64 65 66  ation */.#if def
4690: 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
46a0: 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 56 44  G) || defined(VD
46b0: 42 45 5f 50 52 4f 46 49 4c 45 29 0a 20 20 4f 70  BE_PROFILE).  Op
46c0: 20 2a 70 4f 72 69 67 4f 70 3b 20 20 20 20 20 20   *pOrigOp;      
46d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
46e0: 65 20 6f 66 20 70 4f 70 20 61 74 20 74 68 65 20  e of pOp at the 
46f0: 74 6f 70 20 6f 66 20 74 68 65 20 6c 6f 6f 70 20  top of the loop 
4700: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  */.#endif.#ifdef
4710: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
4720: 69 6e 74 20 6e 45 78 74 72 61 44 65 6c 65 74 65  int nExtraDelete
4730: 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 56 65   = 0;      /* Ve
4740: 72 69 66 69 65 73 20 46 4f 52 44 45 4c 45 54 45  rifies FORDELETE
4750: 20 61 6e 64 20 41 55 58 44 45 4c 45 54 45 20 66   and AUXDELETE f
4760: 6c 61 67 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  lags */.#endif. 
4770: 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45   int rc = SQLITE
4780: 5f 4f 4b 3b 20 20 20 20 20 20 20 20 2f 2a 20 56  _OK;        /* V
4790: 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 2a  alue to return *
47a0: 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20  /.  sqlite3 *db 
47b0: 3d 20 70 2d 3e 64 62 3b 20 20 20 20 20 20 20 2f  = p->db;       /
47c0: 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20 2a  * The database *
47d0: 2f 0a 20 20 75 38 20 72 65 73 65 74 53 63 68 65  /.  u8 resetSche
47e0: 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 30 3b 20 2f  maOnFault = 0; /
47f0: 2a 20 52 65 73 65 74 20 73 63 68 65 6d 61 20 61  * Reset schema a
4800: 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 69 66  fter an error if
4810: 20 70 6f 73 69 74 69 76 65 20 2a 2f 0a 20 20 75   positive */.  u
4820: 38 20 65 6e 63 6f 64 69 6e 67 20 3d 20 45 4e 43  8 encoding = ENC
4830: 28 64 62 29 3b 20 20 20 20 20 2f 2a 20 54 68 65  (db);     /* The
4840: 20 64 61 74 61 62 61 73 65 20 65 6e 63 6f 64 69   database encodi
4850: 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 43 6f 6d  ng */.  int iCom
4860: 70 61 72 65 20 3d 20 30 3b 20 20 20 20 20 20 20  pare = 0;       
4870: 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20     /* Result of 
4880: 6c 61 73 74 20 63 6f 6d 70 61 72 69 73 6f 6e 20  last comparison 
4890: 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 56  */.  unsigned nV
48a0: 6d 53 74 65 70 20 3d 20 30 3b 20 20 20 20 20 20  mStep = 0;      
48b0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76 69 72  /* Number of vir
48c0: 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 73 74 65  tual machine ste
48d0: 70 73 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ps */.#ifndef SQ
48e0: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45  LITE_OMIT_PROGRE
48f0: 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 75 6e  SS_CALLBACK.  un
4900: 73 69 67 6e 65 64 20 6e 50 72 6f 67 72 65 73 73  signed nProgress
4910: 4c 69 6d 69 74 20 3d 20 30 3b 2f 2a 20 49 6e 76  Limit = 0;/* Inv
4920: 6f 6b 65 20 78 50 72 6f 67 72 65 73 73 28 29 20  oke xProgress() 
4930: 77 68 65 6e 20 6e 56 6d 53 74 65 70 20 72 65 61  when nVmStep rea
4940: 63 68 65 73 20 74 68 69 73 20 2a 2f 0a 23 65 6e  ches this */.#en
4950: 64 69 66 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 20  dif.  Mem *aMem 
4960: 3d 20 70 2d 3e 61 4d 65 6d 3b 20 20 20 20 20 20  = p->aMem;      
4970: 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61   /* Copy of p->a
4980: 4d 65 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49  Mem */.  Mem *pI
4990: 6e 31 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  n1 = 0;         
49a0: 20 20 20 20 2f 2a 20 31 73 74 20 69 6e 70 75 74      /* 1st input
49b0: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65   operand */.  Me
49c0: 6d 20 2a 70 49 6e 32 20 3d 20 30 3b 20 20 20 20  m *pIn2 = 0;    
49d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 32 6e 64 20           /* 2nd 
49e0: 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  input operand */
49f0: 0a 20 20 4d 65 6d 20 2a 70 49 6e 33 20 3d 20 30  .  Mem *pIn3 = 0
4a00: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
4a10: 20 33 72 64 20 69 6e 70 75 74 20 6f 70 65 72 61   3rd input opera
4a20: 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4f 75  nd */.  Mem *pOu
4a30: 74 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  t = 0;          
4a40: 20 20 20 2f 2a 20 4f 75 74 70 75 74 20 6f 70 65     /* Output ope
4a50: 72 61 6e 64 20 2a 2f 0a 23 69 66 64 65 66 20 56  rand */.#ifdef V
4a60: 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 75 36  DBE_PROFILE.  u6
4a70: 34 20 73 74 61 72 74 3b 20 20 20 20 20 20 20 20  4 start;        
4a80: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 50 55 20           /* CPU 
4a90: 63 6c 6f 63 6b 20 63 6f 75 6e 74 20 61 74 20 73  clock count at s
4aa0: 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65 20 2a  tart of opcode *
4ab0: 2f 0a 23 65 6e 64 69 66 0a 20 20 2f 2a 2a 2a 20  /.#endif.  /*** 
4ac0: 49 4e 53 45 52 54 20 53 54 41 43 4b 20 55 4e 49  INSERT STACK UNI
4ad0: 4f 4e 20 48 45 52 45 20 2a 2a 2a 2f 0a 0a 20 20  ON HERE ***/..  
4ae0: 61 73 73 65 72 74 28 20 70 2d 3e 6d 61 67 69 63  assert( p->magic
4af0: 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e  ==VDBE_MAGIC_RUN
4b00: 20 29 3b 20 20 2f 2a 20 73 71 6c 69 74 65 33 5f   );  /* sqlite3_
4b10: 73 74 65 70 28 29 20 76 65 72 69 66 69 65 73 20  step() verifies 
4b20: 74 68 69 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65  this */.  sqlite
4b30: 33 56 64 62 65 45 6e 74 65 72 28 70 29 3b 0a 20  3VdbeEnter(p);. 
4b40: 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49   if( p->rc==SQLI
4b50: 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20  TE_NOMEM ){.    
4b60: 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e 73 20  /* This happens 
4b70: 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 69 6e  if a malloc() in
4b80: 73 69 64 65 20 61 20 63 61 6c 6c 20 74 6f 20 73  side a call to s
4b90: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
4ba0: 78 74 28 29 20 6f 72 0a 20 20 20 20 2a 2a 20 73  xt() or.    ** s
4bb0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
4bc0: 78 74 31 36 28 29 20 66 61 69 6c 65 64 2e 20 20  xt16() failed.  
4bd0: 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  */.    goto no_m
4be0: 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  em;.  }.  assert
4bf0: 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f  ( p->rc==SQLITE_
4c00: 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63 26 30 78 66  OK || (p->rc&0xf
4c10: 66 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  f)==SQLITE_BUSY 
4c20: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
4c30: 62 49 73 52 65 61 64 65 72 20 7c 7c 20 70 2d 3e  bIsReader || p->
4c40: 72 65 61 64 4f 6e 6c 79 21 3d 30 20 29 3b 0a 20  readOnly!=0 );. 
4c50: 20 70 2d 3e 69 43 75 72 72 65 6e 74 54 69 6d 65   p->iCurrentTime
4c60: 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
4c70: 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d 30 20 29 3b  p->explain==0 );
4c80: 0a 20 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74  .  p->pResultSet
4c90: 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79   = 0;.  db->busy
4ca0: 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20  Handler.nBusy = 
4cb0: 30 3b 0a 20 20 69 66 28 20 64 62 2d 3e 75 31 2e  0;.  if( db->u1.
4cc0: 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29 20  isInterrupted ) 
4cd0: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
4ce0: 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 73  o_interrupt;.  s
4cf0: 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63  qlite3VdbeIOTrac
4d00: 65 53 71 6c 28 70 29 3b 0a 23 69 66 6e 64 65 66  eSql(p);.#ifndef
4d10: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
4d20: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
4d30: 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65   if( db->xProgre
4d40: 73 73 20 29 7b 0a 20 20 20 20 75 33 32 20 69 50  ss ){.    u32 iP
4d50: 72 69 6f 72 20 3d 20 70 2d 3e 61 43 6f 75 6e 74  rior = p->aCount
4d60: 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54  er[SQLITE_STMTST
4d70: 41 54 55 53 5f 56 4d 5f 53 54 45 50 5d 3b 0a 20  ATUS_VM_STEP];. 
4d80: 20 20 20 61 73 73 65 72 74 28 20 30 20 3c 20 64     assert( 0 < d
4d90: 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20  b->nProgressOps 
4da0: 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65 73 73  );.    nProgress
4db0: 4c 69 6d 69 74 20 3d 20 64 62 2d 3e 6e 50 72 6f  Limit = db->nPro
4dc0: 67 72 65 73 73 4f 70 73 20 2d 20 28 69 50 72 69  gressOps - (iPri
4dd0: 6f 72 20 25 20 64 62 2d 3e 6e 50 72 6f 67 72 65  or % db->nProgre
4de0: 73 73 4f 70 73 29 3b 0a 20 20 7d 0a 23 65 6e 64  ssOps);.  }.#end
4df0: 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
4e00: 5f 44 45 42 55 47 0a 20 20 73 71 6c 69 74 65 33  _DEBUG.  sqlite3
4e10: 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
4e20: 63 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70 63  c();.  if( p->pc
4e30: 3d 3d 30 0a 20 20 20 26 26 20 28 70 2d 3e 64 62  ==0.   && (p->db
4e40: 2d 3e 66 6c 61 67 73 20 26 20 28 53 51 4c 49 54  ->flags & (SQLIT
4e50: 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 7c 53 51  E_VdbeListing|SQ
4e60: 4c 49 54 45 5f 56 64 62 65 45 51 50 7c 53 51 4c  LITE_VdbeEQP|SQL
4e70: 49 54 45 5f 56 64 62 65 54 72 61 63 65 29 29 21  ITE_VdbeTrace))!
4e80: 3d 30 0a 20 20 29 7b 0a 20 20 20 20 69 6e 74 20  =0.  ){.    int 
4e90: 69 3b 0a 20 20 20 20 69 6e 74 20 6f 6e 63 65 20  i;.    int once 
4ea0: 3d 20 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 1;.    sqlite3
4eb0: 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29 3b  VdbePrintSql(p);
4ec0: 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e  .    if( p->db->
4ed0: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56  flags & SQLITE_V
4ee0: 64 62 65 4c 69 73 74 69 6e 67 20 29 7b 0a 20 20  dbeListing ){.  
4ef0: 20 20 20 20 70 72 69 6e 74 66 28 22 56 44 42 45      printf("VDBE
4f00: 20 50 72 6f 67 72 61 6d 20 4c 69 73 74 69 6e 67   Program Listing
4f10: 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 66 6f 72  :\n");.      for
4f20: 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20  (i=0; i<p->nOp; 
4f30: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 73 71  i++){.        sq
4f40: 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70  lite3VdbePrintOp
4f50: 28 73 74 64 6f 75 74 2c 20 69 2c 20 26 61 4f 70  (stdout, i, &aOp
4f60: 5b 69 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  [i]);.      }.  
4f70: 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e 64    }.    if( p->d
4f80: 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
4f90: 45 5f 56 64 62 65 45 51 50 20 29 7b 0a 20 20 20  E_VdbeEQP ){.   
4fa0: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d     for(i=0; i<p-
4fb0: 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  >nOp; i++){.    
4fc0: 20 20 20 20 69 66 28 20 61 4f 70 5b 69 5d 2e 6f      if( aOp[i].o
4fd0: 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69  pcode==OP_Explai
4fe0: 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  n ){.          i
4ff0: 66 28 20 6f 6e 63 65 20 29 20 70 72 69 6e 74 66  f( once ) printf
5000: 28 22 56 44 42 45 20 51 75 65 72 79 20 50 6c 61  ("VDBE Query Pla
5010: 6e 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20  n:\n");.        
5020: 20 20 70 72 69 6e 74 66 28 22 25 73 5c 6e 22 2c    printf("%s\n",
5030: 20 61 4f 70 5b 69 5d 2e 70 34 2e 7a 29 3b 0a 20   aOp[i].p4.z);. 
5040: 20 20 20 20 20 20 20 20 20 6f 6e 63 65 20 3d 20           once = 
5050: 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  0;.        }.   
5060: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69     }.    }.    i
5070: 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20  f( p->db->flags 
5080: 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61  & SQLITE_VdbeTra
5090: 63 65 20 29 20 20 70 72 69 6e 74 66 28 22 56 44  ce )  printf("VD
50a0: 42 45 20 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20  BE Trace:\n");. 
50b0: 20 7d 0a 20 20 73 71 6c 69 74 65 33 45 6e 64 42   }.  sqlite3EndB
50c0: 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23  enignMalloc();.#
50d0: 65 6e 64 69 66 0a 20 20 66 6f 72 28 70 4f 70 3d  endif.  for(pOp=
50e0: 26 61 4f 70 5b 70 2d 3e 70 63 5d 3b 20 31 3b 20  &aOp[p->pc]; 1; 
50f0: 70 4f 70 2b 2b 29 7b 0a 20 20 20 20 2f 2a 20 45  pOp++){.    /* E
5100: 72 72 6f 72 73 20 61 72 65 20 64 65 74 65 63 74  rrors are detect
5110: 65 64 20 62 79 20 69 6e 64 69 76 69 64 75 61 6c  ed by individual
5120: 20 6f 70 63 6f 64 65 73 2c 20 77 69 74 68 20 61   opcodes, with a
5130: 6e 20 69 6d 6d 65 64 69 61 74 65 0a 20 20 20 20  n immediate.    
5140: 2a 2a 20 6a 75 6d 70 73 20 74 6f 20 61 62 6f 72  ** jumps to abor
5150: 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 2e 20  t_due_to_error. 
5160: 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  */.    assert( r
5170: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a  c==SQLITE_OK );.
5180: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
5190: 3e 3d 61 4f 70 20 26 26 20 70 4f 70 3c 26 61 4f  >=aOp && pOp<&aO
51a0: 70 5b 70 2d 3e 6e 4f 70 5d 29 3b 0a 23 69 66 64  p[p->nOp]);.#ifd
51b0: 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a  ef VDBE_PROFILE.
51c0: 20 20 20 20 73 74 61 72 74 20 3d 20 73 71 6c 69      start = sqli
51d0: 74 65 33 48 77 74 69 6d 65 28 29 3b 0a 23 65 6e  te3Hwtime();.#en
51e0: 64 69 66 0a 20 20 20 20 6e 56 6d 53 74 65 70 2b  dif.    nVmStep+
51f0: 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  +;.#ifdef SQLITE
5200: 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41  _ENABLE_STMT_SCA
5210: 4e 53 54 41 54 55 53 0a 20 20 20 20 69 66 28 20  NSTATUS.    if( 
5220: 70 2d 3e 61 6e 45 78 65 63 20 29 20 70 2d 3e 61  p->anExec ) p->a
5230: 6e 45 78 65 63 5b 28 69 6e 74 29 28 70 4f 70 2d  nExec[(int)(pOp-
5240: 61 4f 70 29 5d 2b 2b 3b 0a 23 65 6e 64 69 66 0a  aOp)]++;.#endif.
5250: 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c  .    /* Only all
5260: 6f 77 20 74 72 61 63 69 6e 67 20 69 66 20 53 51  ow tracing if SQ
5270: 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20 64 65  LITE_DEBUG is de
5280: 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69  fined..    */.#i
5290: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
52a0: 47 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 66 6c  G.    if( db->fl
52b0: 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62  ags & SQLITE_Vdb
52c0: 65 54 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20  eTrace ){.      
52d0: 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74  sqlite3VdbePrint
52e0: 4f 70 28 73 74 64 6f 75 74 2c 20 28 69 6e 74 29  Op(stdout, (int)
52f0: 28 70 4f 70 20 2d 20 61 4f 70 29 2c 20 70 4f 70  (pOp - aOp), pOp
5300: 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  );.    }.#endif.
5310: 20 20 20 20 20 20 0a 0a 20 20 20 20 2f 2a 20 43        ..    /* C
5320: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77  heck to see if w
5330: 65 20 6e 65 65 64 20 74 6f 20 73 69 6d 75 6c 61  e need to simula
5340: 74 65 20 61 6e 20 69 6e 74 65 72 72 75 70 74 2e  te an interrupt.
5350: 20 20 54 68 69 73 20 6f 6e 6c 79 20 68 61 70 70    This only happ
5360: 65 6e 73 0a 20 20 20 20 2a 2a 20 69 66 20 77 65  ens.    ** if we
5370: 20 68 61 76 65 20 61 20 73 70 65 63 69 61 6c 20   have a special 
5380: 74 65 73 74 20 62 75 69 6c 64 2e 0a 20 20 20 20  test build..    
5390: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
53a0: 5f 54 45 53 54 0a 20 20 20 20 69 66 28 20 73 71  _TEST.    if( sq
53b0: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f  lite3_interrupt_
53c0: 63 6f 75 6e 74 3e 30 20 29 7b 0a 20 20 20 20 20  count>0 ){.     
53d0: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
53e0: 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20  pt_count--;.    
53f0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e    if( sqlite3_in
5400: 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3d 3d 30  terrupt_count==0
5410: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
5420: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 64 62  te3_interrupt(db
5430: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
5440: 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20  .#endif..    /* 
5450: 53 61 6e 69 74 79 20 63 68 65 63 6b 69 6e 67 20  Sanity checking 
5460: 6f 6e 20 6f 74 68 65 72 20 6f 70 65 72 61 6e 64  on other operand
5470: 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  s */.#ifdef SQLI
5480: 54 45 5f 44 45 42 55 47 0a 20 20 20 20 7b 0a 20  TE_DEBUG.    {. 
5490: 20 20 20 20 20 75 38 20 6f 70 50 72 6f 70 65 72       u8 opProper
54a0: 74 79 20 3d 20 73 71 6c 69 74 65 33 4f 70 63 6f  ty = sqlite3Opco
54b0: 64 65 50 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e  deProperty[pOp->
54c0: 6f 70 63 6f 64 65 5d 3b 0a 20 20 20 20 20 20 69  opcode];.      i
54d0: 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26  f( (opProperty &
54e0: 20 4f 50 46 4c 47 5f 49 4e 31 29 21 3d 30 20 29   OPFLG_IN1)!=0 )
54f0: 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
5500: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20  ( pOp->p1>0 );. 
5510: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
5520: 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p1<=(p->nMem
5530: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
5540: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
5550: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
5560: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20 29  aMem[pOp->p1]) )
5570: 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
5580: 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  ( sqlite3VdbeChe
5590: 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28  ckMemInvariants(
55a0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20  &aMem[pOp->p1]) 
55b0: 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49 53  );.        REGIS
55c0: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
55d0: 31 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  1, &aMem[pOp->p1
55e0: 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ]);.      }.    
55f0: 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74    if( (opPropert
5600: 79 20 26 20 4f 50 46 4c 47 5f 49 4e 32 29 21 3d  y & OPFLG_IN2)!=
5610: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  0 ){.        ass
5620: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29  ert( pOp->p2>0 )
5630: 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
5640: 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e  ( pOp->p2<=(p->n
5650: 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
5660: 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61  or) );.        a
5670: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
5680: 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  d(&aMem[pOp->p2]
5690: 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  ) );.        ass
56a0: 65 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65  ert( sqlite3Vdbe
56b0: 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e  CheckMemInvarian
56c0: 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  ts(&aMem[pOp->p2
56d0: 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20 52 45  ]) );.        RE
56e0: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
56f0: 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ->p2, &aMem[pOp-
5700: 3e 70 32 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20  >p2]);.      }. 
5710: 20 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70       if( (opProp
5720: 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 33  erty & OPFLG_IN3
5730: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
5740: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
5750: 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  0 );.        ass
5760: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  ert( pOp->p3<=(p
5770: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
5780: 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20  ursor) );.      
5790: 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
57a0: 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  alid(&aMem[pOp->
57b0: 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20  p3]) );.        
57c0: 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56  assert( sqlite3V
57d0: 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72  dbeCheckMemInvar
57e0: 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d  iants(&aMem[pOp-
57f0: 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 20  >p3]) );.       
5800: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
5810: 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70  pOp->p3, &aMem[p
5820: 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20  Op->p3]);.      
5830: 7d 0a 20 20 20 20 20 20 69 66 28 20 28 6f 70 50  }.      if( (opP
5840: 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f  roperty & OPFLG_
5850: 4f 55 54 32 29 21 3d 30 20 29 7b 0a 20 20 20 20  OUT2)!=0 ){.    
5860: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5870: 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 20  >p2>0 );.       
5880: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
5890: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
58a0: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
58b0: 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f        memAboutTo
58c0: 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b  Change(p, &aMem[
58d0: 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 20  pOp->p2]);.     
58e0: 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 6f 70   }.      if( (op
58f0: 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47  Property & OPFLG
5900: 5f 4f 55 54 33 29 21 3d 30 20 29 7b 0a 20 20 20  _OUT3)!=0 ){.   
5910: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5920: 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p3>0 );.      
5930: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5940: 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  3<=(p->nMem+1 - 
5950: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
5960: 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54         memAboutT
5970: 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d  oChange(p, &aMem
5980: 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20  [pOp->p3]);.    
5990: 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66    }.    }.#endif
59a0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
59b0: 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65  ITE_DEBUG) || de
59c0: 66 69 6e 65 64 28 56 44 42 45 5f 50 52 4f 46 49  fined(VDBE_PROFI
59d0: 4c 45 29 0a 20 20 20 20 70 4f 72 69 67 4f 70 20  LE).    pOrigOp 
59e0: 3d 20 70 4f 70 3b 0a 23 65 6e 64 69 66 0a 20 20  = pOp;.#endif.  
59f0: 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70  .    switch( pOp
5a00: 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a  ->opcode ){../**
5a10: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a20: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a30: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a40: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a50: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57  ***********.** W
5a60: 68 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20 61  hat follows is a
5a70: 20 6d 61 73 73 69 76 65 20 73 77 69 74 63 68 20   massive switch 
5a80: 73 74 61 74 65 6d 65 6e 74 20 77 68 65 72 65 20  statement where 
5a90: 65 61 63 68 20 63 61 73 65 20 69 6d 70 6c 65 6d  each case implem
5aa0: 65 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61 72 61  ents a.** separa
5ab0: 74 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  te instruction i
5ac0: 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61  n the virtual ma
5ad0: 63 68 69 6e 65 2e 20 20 49 66 20 77 65 20 66 6f  chine.  If we fo
5ae0: 6c 6c 6f 77 20 74 68 65 20 75 73 75 61 6c 0a 2a  llow the usual.*
5af0: 2a 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63 6f  * indentation co
5b00: 6e 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68 20  nventions, each 
5b10: 63 61 73 65 20 73 68 6f 75 6c 64 20 62 65 20 69  case should be i
5b20: 6e 64 65 6e 74 65 64 20 62 79 20 36 20 73 70 61  ndented by 6 spa
5b30: 63 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61  ces.  But.** tha
5b40: 74 20 69 73 20 61 20 6c 6f 74 20 6f 66 20 77 61  t is a lot of wa
5b50: 73 74 65 64 20 73 70 61 63 65 20 6f 6e 20 74 68  sted space on th
5b60: 65 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20 20  e left margin.  
5b70: 53 6f 20 74 68 65 20 63 6f 64 65 20 77 69 74 68  So the code with
5b80: 69 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74 63 68  in.** the switch
5b90: 20 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20   statement will 
5ba0: 62 72 65 61 6b 20 77 69 74 68 20 63 6f 6e 76 65  break with conve
5bb0: 6e 74 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c 75  ntion and be flu
5bc0: 73 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65 72  sh-left. Another
5bd0: 0a 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74 20  .** big comment 
5be0: 28 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69 73  (similar to this
5bf0: 20 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b 20   one) will mark 
5c00: 74 68 65 20 70 6f 69 6e 74 20 69 6e 20 74 68 65  the point in the
5c10: 20 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20 77   code where.** w
5c20: 65 20 74 72 61 6e 73 69 74 69 6f 6e 20 62 61 63  e transition bac
5c30: 6b 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64 65  k to normal inde
5c40: 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ntation..**.** T
5c50: 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f 66  he formatting of
5c60: 20 65 61 63 68 20 63 61 73 65 20 69 73 20 69 6d   each case is im
5c70: 70 6f 72 74 61 6e 74 2e 20 20 54 68 65 20 6d 61  portant.  The ma
5c80: 6b 65 66 69 6c 65 20 66 6f 72 20 53 51 4c 69 74  kefile for SQLit
5c90: 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73 20 74  e.** generates t
5ca0: 77 6f 20 43 20 66 69 6c 65 73 20 22 6f 70 63 6f  wo C files "opco
5cb0: 64 65 73 2e 68 22 20 61 6e 64 20 22 6f 70 63 6f  des.h" and "opco
5cc0: 64 65 73 2e 63 22 20 62 79 20 73 63 61 6e 6e 69  des.c" by scanni
5cd0: 6e 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65 20  ng this.** file 
5ce0: 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e 65  looking for line
5cf0: 73 20 74 68 61 74 20 62 65 67 69 6e 20 77 69 74  s that begin wit
5d00: 68 20 22 63 61 73 65 20 4f 50 5f 22 2e 20 20 54  h "case OP_".  T
5d10: 68 65 20 6f 70 63 6f 64 65 73 2e 68 20 66 69 6c  he opcodes.h fil
5d20: 65 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66 69  es.** will be fi
5d30: 6c 6c 65 64 20 77 69 74 68 20 23 64 65 66 69 6e  lled with #defin
5d40: 65 73 20 74 68 61 74 20 67 69 76 65 20 75 6e 69  es that give uni
5d50: 71 75 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  que integer valu
5d60: 65 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f 70  es to each.** op
5d70: 63 6f 64 65 20 61 6e 64 20 74 68 65 20 6f 70 63  code and the opc
5d80: 6f 64 65 73 2e 63 20 66 69 6c 65 20 69 73 20 66  odes.c file is f
5d90: 69 6c 6c 65 64 20 77 69 74 68 20 61 6e 20 61 72  illed with an ar
5da0: 72 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20 77  ray of strings w
5db0: 68 65 72 65 0a 2a 2a 20 65 61 63 68 20 73 74 72  here.** each str
5dc0: 69 6e 67 20 69 73 20 74 68 65 20 73 79 6d 62 6f  ing is the symbo
5dd0: 6c 69 63 20 6e 61 6d 65 20 66 6f 72 20 74 68 65  lic name for the
5de0: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 6f   corresponding o
5df0: 70 63 6f 64 65 2e 20 20 49 66 20 74 68 65 0a 2a  pcode.  If the.*
5e00: 2a 20 63 61 73 65 20 73 74 61 74 65 6d 65 6e 74  * case statement
5e10: 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20   is followed by 
5e20: 61 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68 65  a comment of the
5e30: 20 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20 61   form "/# same a
5e40: 73 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68 61  s ... #/".** tha
5e50: 74 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73 65  t comment is use
5e60: 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74  d to determine t
5e70: 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 76 61  he particular va
5e80: 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f 64  lue of the opcod
5e90: 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b  e..**.** Other k
5ea0: 65 79 77 6f 72 64 73 20 69 6e 20 74 68 65 20 63  eywords in the c
5eb0: 6f 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c 6c  omment that foll
5ec0: 6f 77 73 20 65 61 63 68 20 63 61 73 65 20 61 72  ows each case ar
5ed0: 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e  e used to.** con
5ee0: 73 74 72 75 63 74 20 74 68 65 20 4f 50 46 4c 47  struct the OPFLG
5ef0: 5f 49 4e 49 54 49 41 4c 49 5a 45 52 20 76 61 6c  _INITIALIZER val
5f00: 75 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c 69  ue that initiali
5f10: 7a 65 73 20 6f 70 63 6f 64 65 50 72 6f 70 65 72  zes opcodeProper
5f20: 74 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64  ty[]..** Keyword
5f30: 73 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c 20  s include: in1, 
5f40: 69 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32 2c 20  in2, in3, out2, 
5f50: 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20 74 68  out3.  See.** th
5f60: 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20  e mkopcodeh.awk 
5f70: 73 63 72 69 70 74 20 66 6f 72 20 61 64 64 69 74  script for addit
5f80: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
5f90: 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e  n..**.** Documen
5fa0: 74 61 74 69 6f 6e 20 61 62 6f 75 74 20 56 44 42  tation about VDB
5fb0: 45 20 6f 70 63 6f 64 65 73 20 69 73 20 67 65 6e  E opcodes is gen
5fc0: 65 72 61 74 65 64 20 62 79 20 73 63 61 6e 6e 69  erated by scanni
5fd0: 6e 67 20 74 68 69 73 20 66 69 6c 65 0a 2a 2a 20  ng this file.** 
5fe0: 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74 68 61  for lines of tha
5ff0: 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63 6f 64  t contain "Opcod
6000: 65 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e 65 20  e:".  That line 
6010: 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71 75 65  and all subseque
6020: 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69  nt.** comment li
6030: 6e 65 73 20 61 72 65 20 75 73 65 64 20 69 6e 20  nes are used in 
6040: 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f  the generation o
6050: 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 68 74 6d  f the opcode.htm
6060: 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a  l documentation.
6070: 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53  ** file..**.** S
6080: 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20  UMMARY:.**.**   
6090: 20 20 46 6f 72 6d 61 74 74 69 6e 67 20 69 73 20    Formatting is 
60a0: 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73 63 72  important to scr
60b0: 69 70 74 73 20 74 68 61 74 20 73 63 61 6e 20 74  ipts that scan t
60c0: 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20 20 20  his file..**    
60d0: 20 44 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20   Do not deviate 
60e0: 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61 74 74  from the formatt
60f0: 69 6e 67 20 73 74 79 6c 65 20 63 75 72 72 65 6e  ing style curren
6100: 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a  tly in use..**.*
6110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f  ************/../
6160: 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74 6f 20  * Opcode:  Goto 
6170: 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  * P2 * * *.**.**
6180: 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61   An unconditiona
6190: 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73  l jump to addres
61a0: 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e 65 78  s P2..** The nex
61b0: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 78  t instruction ex
61c0: 65 63 75 74 65 64 20 77 69 6c 6c 20 62 65 20 0a  ecuted will be .
61d0: 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74 20 69 6e  ** the one at in
61e0: 64 65 78 20 50 32 20 66 72 6f 6d 20 74 68 65 20  dex P2 from the 
61f0: 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20  beginning of.** 
6200: 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a  the program..**.
6210: 2a 2a 20 54 68 65 20 50 31 20 70 61 72 61 6d 65  ** The P1 parame
6220: 74 65 72 20 69 73 20 6e 6f 74 20 61 63 74 75 61  ter is not actua
6230: 6c 6c 79 20 75 73 65 64 20 62 79 20 74 68 69 73  lly used by this
6240: 20 6f 70 63 6f 64 65 2e 20 20 48 6f 77 65 76 65   opcode.  Howeve
6250: 72 2c 20 69 74 0a 2a 2a 20 69 73 20 73 6f 6d 65  r, it.** is some
6260: 74 69 6d 65 73 20 73 65 74 20 74 6f 20 31 20 69  times set to 1 i
6270: 6e 73 74 65 61 64 20 6f 66 20 30 20 61 73 20 61  nstead of 0 as a
6280: 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63 6f 6d   hint to the com
6290: 6d 61 6e 64 2d 6c 69 6e 65 20 73 68 65 6c 6c 0a  mand-line shell.
62a0: 2a 2a 20 74 68 61 74 20 74 68 69 73 20 47 6f 74  ** that this Got
62b0: 6f 20 69 73 20 74 68 65 20 62 6f 74 74 6f 6d 20  o is the bottom 
62c0: 6f 66 20 61 20 6c 6f 6f 70 20 61 6e 64 20 74 68  of a loop and th
62d0: 61 74 20 74 68 65 20 6c 69 6e 65 73 20 66 72 6f  at the lines fro
62e0: 6d 20 50 32 20 64 6f 77 6e 0a 2a 2a 20 74 6f 20  m P2 down.** to 
62f0: 74 68 65 20 63 75 72 72 65 6e 74 20 6c 69 6e 65  the current line
6300: 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e   should be inden
6310: 74 65 64 20 66 6f 72 20 45 58 50 4c 41 49 4e 20  ted for EXPLAIN 
6320: 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20  output..*/.case 
6330: 4f 50 5f 47 6f 74 6f 3a 20 7b 20 20 20 20 20 20  OP_Goto: {      
6340: 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
6350: 2f 0a 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64  /.jump_to_p2_and
6360: 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72  _check_for_inter
6370: 72 75 70 74 3a 0a 20 20 70 4f 70 20 3d 20 26 61  rupt:.  pOp = &a
6380: 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b  Op[pOp->p2 - 1];
6390: 0a 0a 20 20 2f 2a 20 4f 70 63 6f 64 65 73 20 74  ..  /* Opcodes t
63a0: 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
63b0: 74 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20 61 20  the bottom of a 
63c0: 6c 6f 6f 70 20 28 4f 50 5f 4e 65 78 74 2c 20 4f  loop (OP_Next, O
63d0: 50 5f 50 72 65 76 2c 0a 20 20 2a 2a 20 4f 50 5f  P_Prev,.  ** OP_
63e0: 56 4e 65 78 74 2c 20 4f 50 5f 52 6f 77 53 65 74  VNext, OP_RowSet
63f0: 4e 65 78 74 2c 20 6f 72 20 4f 50 5f 53 6f 72 74  Next, or OP_Sort
6400: 65 72 4e 65 78 74 29 20 61 6c 6c 20 6a 75 6d 70  erNext) all jump
6410: 20 68 65 72 65 20 75 70 6f 6e 0a 20 20 2a 2a 20   here upon.  ** 
6420: 63 6f 6d 70 6c 65 74 69 6f 6e 2e 20 20 43 68 65  completion.  Che
6430: 63 6b 20 74 6f 20 73 65 65 20 69 66 20 73 71 6c  ck to see if sql
6440: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29  ite3_interrupt()
6450: 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64   has been called
6460: 0a 20 20 2a 2a 20 6f 72 20 69 66 20 74 68 65 20  .  ** or if the 
6470: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
6480: 6b 20 6e 65 65 64 73 20 74 6f 20 62 65 20 69 6e  k needs to be in
6490: 76 6f 6b 65 64 2e 20 0a 20 20 2a 2a 0a 20 20 2a  voked. .  **.  *
64a0: 2a 20 54 68 69 73 20 63 6f 64 65 20 75 73 65 73  * This code uses
64b0: 20 75 6e 73 74 72 75 63 74 75 72 65 64 20 22 67   unstructured "g
64c0: 6f 74 6f 22 20 73 74 61 74 65 6d 65 6e 74 73 20  oto" statements 
64d0: 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 6c 6f 6f  and does not loo
64e0: 6b 20 63 6c 65 61 6e 2e 0a 20 20 2a 2a 20 42 75  k clean..  ** Bu
64f0: 74 20 74 68 61 74 20 69 73 20 6e 6f 74 20 64 75  t that is not du
6500: 65 20 74 6f 20 73 6c 6f 70 70 79 20 63 6f 64 69  e to sloppy codi
6510: 6e 67 20 68 61 62 69 74 73 2e 20 54 68 65 20 63  ng habits. The c
6520: 6f 64 65 20 69 73 20 77 72 69 74 74 65 6e 20 74  ode is written t
6530: 68 69 73 0a 20 20 2a 2a 20 77 61 79 20 66 6f 72  his.  ** way for
6540: 20 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 74 6f   performance, to
6550: 20 61 76 6f 69 64 20 68 61 76 69 6e 67 20 74 6f   avoid having to
6560: 20 72 75 6e 20 74 68 65 20 69 6e 74 65 72 72 75   run the interru
6570: 70 74 20 61 6e 64 20 70 72 6f 67 72 65 73 73 0a  pt and progress.
6580: 20 20 2a 2a 20 63 68 65 63 6b 73 20 6f 6e 20 65    ** checks on e
6590: 76 65 72 79 20 6f 70 63 6f 64 65 2e 20 20 54 68  very opcode.  Th
65a0: 69 73 20 68 65 6c 70 73 20 73 71 6c 69 74 65 33  is helps sqlite3
65b0: 5f 73 74 65 70 28 29 20 74 6f 20 72 75 6e 20 61  _step() to run a
65c0: 62 6f 75 74 20 31 2e 35 25 0a 20 20 2a 2a 20 66  bout 1.5%.  ** f
65d0: 61 73 74 65 72 20 61 63 63 6f 72 64 69 6e 67 20  aster according 
65e0: 74 6f 20 22 76 61 6c 67 72 69 6e 64 20 2d 2d 74  to "valgrind --t
65f0: 6f 6f 6c 3d 63 61 63 68 65 67 72 69 6e 64 22 20  ool=cachegrind" 
6600: 2a 2f 0a 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  */.check_for_int
6610: 65 72 72 75 70 74 3a 0a 20 20 69 66 28 20 64 62  errupt:.  if( db
6620: 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74  ->u1.isInterrupt
6630: 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  ed ) goto abort_
6640: 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74  due_to_interrupt
6650: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
6660: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
6670: 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20 43 61 6c  ALLBACK.  /* Cal
6680: 6c 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63  l the progress c
6690: 61 6c 6c 62 61 63 6b 20 69 66 20 69 74 20 69 73  allback if it is
66a0: 20 63 6f 6e 66 69 67 75 72 65 64 20 61 6e 64 20   configured and 
66b0: 74 68 65 20 72 65 71 75 69 72 65 64 20 6e 75 6d  the required num
66c0: 62 65 72 0a 20 20 2a 2a 20 6f 66 20 56 44 42 45  ber.  ** of VDBE
66d0: 20 6f 70 73 20 68 61 76 65 20 62 65 65 6e 20 65   ops have been e
66e0: 78 65 63 75 74 65 64 20 28 65 69 74 68 65 72 20  xecuted (either 
66f0: 73 69 6e 63 65 20 74 68 69 73 20 69 6e 76 6f 63  since this invoc
6700: 61 74 69 6f 6e 20 6f 66 0a 20 20 2a 2a 20 73 71  ation of.  ** sq
6710: 6c 69 74 65 33 56 64 62 65 45 78 65 63 28 29 20  lite3VdbeExec() 
6720: 6f 72 20 73 69 6e 63 65 20 6c 61 73 74 20 74 69  or since last ti
6730: 6d 65 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  me the progress 
6740: 63 61 6c 6c 62 61 63 6b 20 77 61 73 20 63 61 6c  callback was cal
6750: 6c 65 64 29 2e 0a 20 20 2a 2a 20 49 66 20 74 68  led)..  ** If th
6760: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
6770: 61 63 6b 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d  ack returns non-
6780: 7a 65 72 6f 2c 20 65 78 69 74 20 74 68 65 20 76  zero, exit the v
6790: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 77  irtual machine w
67a0: 69 74 68 0a 20 20 2a 2a 20 61 20 72 65 74 75 72  ith.  ** a retur
67b0: 6e 20 63 6f 64 65 20 53 51 4c 49 54 45 5f 41 42  n code SQLITE_AB
67c0: 4f 52 54 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ORT..  */.  if( 
67d0: 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d 30  db->xProgress!=0
67e0: 20 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e 50 72   && nVmStep>=nPr
67f0: 6f 67 72 65 73 73 4c 69 6d 69 74 20 29 7b 0a 20  ogressLimit ){. 
6800: 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e     assert( db->n
6810: 50 72 6f 67 72 65 73 73 4f 70 73 21 3d 30 20 29  ProgressOps!=0 )
6820: 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c  ;.    nProgressL
6830: 69 6d 69 74 20 3d 20 6e 56 6d 53 74 65 70 20 2b  imit = nVmStep +
6840: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
6850: 73 20 2d 20 28 6e 56 6d 53 74 65 70 25 64 62 2d  s - (nVmStep%db-
6860: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a  >nProgressOps);.
6870: 20 20 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f      if( db->xPro
6880: 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f 67 72  gress(db->pProgr
6890: 65 73 73 41 72 67 29 20 29 7b 0a 20 20 20 20 20  essArg) ){.     
68a0: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54   rc = SQLITE_INT
68b0: 45 52 52 55 50 54 3b 0a 20 20 20 20 20 20 67 6f  ERRUPT;.      go
68c0: 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
68d0: 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d  error;.    }.  }
68e0: 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 62 72 65  .#endif.  .  bre
68f0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
6900: 3a 20 20 47 6f 73 75 62 20 50 31 20 50 32 20 2a  :  Gosub P1 P2 *
6910: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
6920: 20 74 68 65 20 63 75 72 72 65 6e 74 20 61 64 64   the current add
6930: 72 65 73 73 20 6f 6e 74 6f 20 72 65 67 69 73 74  ress onto regist
6940: 65 72 20 50 31 0a 2a 2a 20 61 6e 64 20 74 68 65  er P1.** and the
6950: 6e 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73  n jump to addres
6960: 73 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  s P2..*/.case OP
6970: 5f 47 6f 73 75 62 3a 20 7b 20 20 20 20 20 20 20  _Gosub: {       
6980: 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
6990: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
69a0: 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d  1>0 && pOp->p1<=
69b0: 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
69c0: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 49  nCursor) );.  pI
69d0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
69e0: 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 56  p1];.  assert( V
69f0: 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 49  dbeMemDynamic(pI
6a00: 6e 31 29 3d 3d 30 20 29 3b 0a 20 20 6d 65 6d 41  n1)==0 );.  memA
6a10: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
6a20: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 66  pIn1);.  pIn1->f
6a30: 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
6a40: 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 28 69    pIn1->u.i = (i
6a50: 6e 74 29 28 70 4f 70 2d 61 4f 70 29 3b 0a 20 20  nt)(pOp-aOp);.  
6a60: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
6a70: 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 0a  Op->p1, pIn1);..
6a80: 20 20 2f 2a 20 4d 6f 73 74 20 6a 75 6d 70 20 6f    /* Most jump o
6a90: 70 65 72 61 74 69 6f 6e 73 20 64 6f 20 61 20 67  perations do a g
6aa0: 6f 74 6f 20 74 6f 20 74 68 69 73 20 73 70 6f 74  oto to this spot
6ab0: 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 75 70 64   in order to upd
6ac0: 61 74 65 0a 20 20 2a 2a 20 74 68 65 20 70 4f 70  ate.  ** the pOp
6ad0: 20 70 6f 69 6e 74 65 72 2e 20 2a 2f 0a 6a 75 6d   pointer. */.jum
6ae0: 70 5f 74 6f 5f 70 32 3a 0a 20 20 70 4f 70 20 3d  p_to_p2:.  pOp =
6af0: 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d 20   &aOp[pOp->p2 - 
6b00: 31 5d 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  1];.  break;.}..
6b10: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 52 65 74 75  /* Opcode:  Retu
6b20: 72 6e 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  rn P1 * * * *.**
6b30: 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20  .** Jump to the 
6b40: 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
6b50: 20 61 66 74 65 72 20 74 68 65 20 61 64 64 72 65   after the addre
6b60: 73 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ss in register P
6b70: 31 2e 20 20 41 66 74 65 72 0a 2a 2a 20 74 68 65  1.  After.** the
6b80: 20 6a 75 6d 70 2c 20 72 65 67 69 73 74 65 72 20   jump, register 
6b90: 50 31 20 62 65 63 6f 6d 65 73 20 75 6e 64 65 66  P1 becomes undef
6ba0: 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ined..*/.case OP
6bb0: 5f 52 65 74 75 72 6e 3a 20 7b 20 20 20 20 20 20  _Return: {      
6bc0: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
6bd0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
6be0: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
6bf0: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d  ( pIn1->flags==M
6c00: 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 4f 70 20  EM_Int );.  pOp 
6c10: 3d 20 26 61 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69  = &aOp[pIn1->u.i
6c20: 5d 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ];.  pIn1->flags
6c30: 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64   = MEM_Undefined
6c40: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
6c50: 20 4f 70 63 6f 64 65 3a 20 49 6e 69 74 43 6f 72   Opcode: InitCor
6c60: 6f 75 74 69 6e 65 20 50 31 20 50 32 20 50 33 20  outine P1 P2 P3 
6c70: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 75 70  * *.**.** Set up
6c80: 20 72 65 67 69 73 74 65 72 20 50 31 20 73 6f 20   register P1 so 
6c90: 74 68 61 74 20 69 74 20 77 69 6c 6c 20 59 69 65  that it will Yie
6ca0: 6c 64 20 74 6f 20 74 68 65 20 63 6f 72 6f 75 74  ld to the corout
6cb0: 69 6e 65 0a 2a 2a 20 6c 6f 63 61 74 65 64 20 61  ine.** located a
6cc0: 74 20 61 64 64 72 65 73 73 20 50 33 2e 0a 2a 2a  t address P3..**
6cd0: 0a 2a 2a 20 49 66 20 50 32 21 3d 30 20 74 68 65  .** If P2!=0 the
6ce0: 6e 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20  n the coroutine 
6cf0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69  implementation i
6d00: 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f  mmediately follo
6d10: 77 73 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f 64  ws.** this opcod
6d20: 65 2e 20 20 53 6f 20 6a 75 6d 70 20 6f 76 65 72  e.  So jump over
6d30: 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 69   the coroutine i
6d40: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f  mplementation to
6d50: 0a 2a 2a 20 61 64 64 72 65 73 73 20 50 32 2e 0a  .** address P2..
6d60: 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
6d70: 45 6e 64 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a  EndCoroutine.*/.
6d80: 63 61 73 65 20 4f 50 5f 49 6e 69 74 43 6f 72 6f  case OP_InitCoro
6d90: 75 74 69 6e 65 3a 20 7b 20 20 20 20 20 2f 2a 20  utine: {     /* 
6da0: 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74  jump */.  assert
6db0: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 20  ( pOp->p1>0 &&  
6dc0: 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p1<=(p->nMe
6dd0: 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
6de0: 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
6df0: 4f 70 2d 3e 70 32 3e 3d 30 20 26 26 20 70 4f 70  Op->p2>=0 && pOp
6e00: 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20  ->p2<p->nOp );. 
6e10: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
6e20: 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 70  >=0 && pOp->p3<p
6e30: 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f 75 74 20  ->nOp );.  pOut 
6e40: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
6e50: 3b 0a 20 20 61 73 73 65 72 74 28 20 21 56 64 62  ;.  assert( !Vdb
6e60: 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74  eMemDynamic(pOut
6e70: 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  ) );.  pOut->u.i
6e80: 20 3d 20 70 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a   = pOp->p3 - 1;.
6e90: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
6ea0: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 69 66 28 20 70  MEM_Int;.  if( p
6eb0: 4f 70 2d 3e 70 32 20 29 20 67 6f 74 6f 20 6a 75  Op->p2 ) goto ju
6ec0: 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61  mp_to_p2;.  brea
6ed0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
6ee0: 20 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65 20 50    EndCoroutine P
6ef0: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
6f00: 54 68 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  The instruction 
6f10: 61 74 20 74 68 65 20 61 64 64 72 65 73 73 20 69  at the address i
6f20: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
6f30: 20 61 20 59 69 65 6c 64 2e 0a 2a 2a 20 4a 75 6d   a Yield..** Jum
6f40: 70 20 74 6f 20 74 68 65 20 50 32 20 70 61 72 61  p to the P2 para
6f50: 6d 65 74 65 72 20 6f 66 20 74 68 61 74 20 59 69  meter of that Yi
6f60: 65 6c 64 2e 0a 2a 2a 20 41 66 74 65 72 20 74 68  eld..** After th
6f70: 65 20 6a 75 6d 70 2c 20 72 65 67 69 73 74 65 72  e jump, register
6f80: 20 50 31 20 62 65 63 6f 6d 65 73 20 75 6e 64 65   P1 becomes unde
6f90: 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  fined..**.** See
6fa0: 20 61 6c 73 6f 3a 20 49 6e 69 74 43 6f 72 6f 75   also: InitCorou
6fb0: 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  tine.*/.case OP_
6fc0: 45 6e 64 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20  EndCoroutine: { 
6fd0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
6fe0: 20 2a 2f 0a 20 20 56 64 62 65 4f 70 20 2a 70 43   */.  VdbeOp *pC
6ff0: 61 6c 6c 65 72 3b 0a 20 20 70 49 6e 31 20 3d 20  aller;.  pIn1 = 
7000: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
7010: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
7020: 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29  flags==MEM_Int )
7030: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
7040: 2d 3e 75 2e 69 3e 3d 30 20 26 26 20 70 49 6e 31  ->u.i>=0 && pIn1
7050: 2d 3e 75 2e 69 3c 70 2d 3e 6e 4f 70 20 29 3b 0a  ->u.i<p->nOp );.
7060: 20 20 70 43 61 6c 6c 65 72 20 3d 20 26 61 4f 70    pCaller = &aOp
7070: 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20 20 61  [pIn1->u.i];.  a
7080: 73 73 65 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e  ssert( pCaller->
7090: 6f 70 63 6f 64 65 3d 3d 4f 50 5f 59 69 65 6c 64  opcode==OP_Yield
70a0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
70b0: 61 6c 6c 65 72 2d 3e 70 32 3e 3d 30 20 26 26 20  aller->p2>=0 && 
70c0: 70 43 61 6c 6c 65 72 2d 3e 70 32 3c 70 2d 3e 6e  pCaller->p2<p->n
70d0: 4f 70 20 29 3b 0a 20 20 70 4f 70 20 3d 20 26 61  Op );.  pOp = &a
70e0: 4f 70 5b 70 43 61 6c 6c 65 72 2d 3e 70 32 20 2d  Op[pCaller->p2 -
70f0: 20 31 5d 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61   1];.  pIn1->fla
7100: 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e  gs = MEM_Undefin
7110: 65 64 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  ed;.  break;.}..
7120: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 59 69 65 6c  /* Opcode:  Yiel
7130: 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  d P1 P2 * * *.**
7140: 0a 2a 2a 20 53 77 61 70 20 74 68 65 20 70 72 6f  .** Swap the pro
7150: 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 77 69 74  gram counter wit
7160: 68 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  h the value in r
7170: 65 67 69 73 74 65 72 20 50 31 2e 20 20 54 68 69  egister P1.  Thi
7180: 73 0a 2a 2a 20 68 61 73 20 74 68 65 20 65 66 66  s.** has the eff
7190: 65 63 74 20 6f 66 20 79 69 65 6c 64 69 6e 67 20  ect of yielding 
71a0: 74 6f 20 61 20 63 6f 72 6f 75 74 69 6e 65 2e 0a  to a coroutine..
71b0: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f 72  **.** If the cor
71c0: 6f 75 74 69 6e 65 20 74 68 61 74 20 69 73 20 6c  outine that is l
71d0: 61 75 6e 63 68 65 64 20 62 79 20 74 68 69 73 20  aunched by this 
71e0: 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e 64 73  instruction ends
71f0: 20 77 69 74 68 0a 2a 2a 20 59 69 65 6c 64 20 6f   with.** Yield o
7200: 72 20 52 65 74 75 72 6e 20 74 68 65 6e 20 63 6f  r Return then co
7210: 6e 74 69 6e 75 65 20 74 6f 20 74 68 65 20 6e 65  ntinue to the ne
7220: 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  xt instruction. 
7230: 20 42 75 74 20 69 66 0a 2a 2a 20 74 68 65 20 63   But if.** the c
7240: 6f 72 6f 75 74 69 6e 65 20 6c 61 75 6e 63 68 65  oroutine launche
7250: 64 20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75  d by this instru
7260: 63 74 69 6f 6e 20 65 6e 64 73 20 77 69 74 68 0a  ction ends with.
7270: 2a 2a 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65 2c  ** EndCoroutine,
7280: 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
7290: 20 72 61 74 68 65 72 20 74 68 61 6e 20 63 6f 6e   rather than con
72a0: 74 69 6e 75 69 6e 67 20 77 69 74 68 20 74 68 65  tinuing with the
72b0: 0a 2a 2a 20 6e 65 78 74 20 69 6e 73 74 72 75 63  .** next instruc
72c0: 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  tion..**.** See 
72d0: 61 6c 73 6f 3a 20 49 6e 69 74 43 6f 72 6f 75 74  also: InitCorout
72e0: 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 59  ine.*/.case OP_Y
72f0: 69 65 6c 64 3a 20 7b 20 20 20 20 20 20 20 20 20  ield: {         
7300: 20 20 20 2f 2a 20 69 6e 31 2c 20 6a 75 6d 70 20     /* in1, jump 
7310: 2a 2f 0a 20 20 69 6e 74 20 70 63 44 65 73 74 3b  */.  int pcDest;
7320: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
7330: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
7340: 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d  rt( VdbeMemDynam
7350: 69 63 28 70 49 6e 31 29 3d 3d 30 20 29 3b 0a 20  ic(pIn1)==0 );. 
7360: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d   pIn1->flags = M
7370: 45 4d 5f 49 6e 74 3b 0a 20 20 70 63 44 65 73 74  EM_Int;.  pcDest
7380: 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e   = (int)pIn1->u.
7390: 69 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d  i;.  pIn1->u.i =
73a0: 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
73b0: 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
73c0: 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e  ACE(pOp->p1, pIn
73d0: 31 29 3b 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70  1);.  pOp = &aOp
73e0: 5b 70 63 44 65 73 74 5d 3b 0a 20 20 62 72 65 61  [pcDest];.  brea
73f0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
7400: 20 20 48 61 6c 74 49 66 4e 75 6c 6c 20 20 50 31    HaltIfNull  P1
7410: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
7420: 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
7430: 33 5d 3d 6e 75 6c 6c 20 68 61 6c 74 0a 2a 2a 0a  3]=null halt.**.
7440: 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 76 61 6c  ** Check the val
7450: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
7460: 33 2e 20 20 49 66 20 69 74 20 69 73 20 4e 55 4c  3.  If it is NUL
7470: 4c 20 74 68 65 6e 20 48 61 6c 74 20 75 73 69 6e  L then Halt usin
7480: 67 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 50  g.** parameter P
7490: 31 2c 20 50 32 2c 20 61 6e 64 20 50 34 20 61 73  1, P2, and P4 as
74a0: 20 69 66 20 74 68 69 73 20 77 65 72 65 20 61 20   if this were a 
74b0: 48 61 6c 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  Halt instruction
74c0: 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 76 61 6c  .  If the.** val
74d0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
74e0: 33 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74  3 is not NULL, t
74f0: 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65  hen this routine
7500: 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2a 20   is a no-op..** 
7510: 54 68 65 20 50 35 20 70 61 72 61 6d 65 74 65 72  The P5 parameter
7520: 20 73 68 6f 75 6c 64 20 62 65 20 31 2e 0a 2a 2f   should be 1..*/
7530: 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 49 66 4e  .case OP_HaltIfN
7540: 75 6c 6c 3a 20 7b 20 20 20 20 20 20 2f 2a 20 69  ull: {      /* i
7550: 6e 33 20 2a 2f 0a 20 20 70 49 6e 33 20 3d 20 26  n3 */.  pIn3 = &
7560: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
7570: 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67   if( (pIn3->flag
7580: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30  s & MEM_Null)==0
7590: 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46   ) break;.  /* F
75a0: 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f  all through into
75b0: 20 4f 50 5f 48 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f   OP_Halt */.}../
75c0: 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74 20  * Opcode:  Halt 
75d0: 50 31 20 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a  P1 P2 * P4 P5.**
75e0: 0a 2a 2a 20 45 78 69 74 20 69 6d 6d 65 64 69 61  .** Exit immedia
75f0: 74 65 6c 79 2e 20 20 41 6c 6c 20 6f 70 65 6e 20  tely.  All open 
7600: 63 75 72 73 6f 72 73 2c 20 65 74 63 20 61 72 65  cursors, etc are
7610: 20 63 6c 6f 73 65 64 0a 2a 2a 20 61 75 74 6f 6d   closed.** autom
7620: 61 74 69 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20  atically..**.** 
7630: 50 31 20 69 73 20 74 68 65 20 72 65 73 75 6c 74  P1 is the result
7640: 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64 20 62   code returned b
7650: 79 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29  y sqlite3_exec()
7660: 2c 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28  , sqlite3_reset(
7670: 29 2c 0a 2a 2a 20 6f 72 20 73 71 6c 69 74 65 33  ),.** or sqlite3
7680: 5f 66 69 6e 61 6c 69 7a 65 28 29 2e 20 20 46 6f  _finalize().  Fo
7690: 72 20 61 20 6e 6f 72 6d 61 6c 20 68 61 6c 74 2c  r a normal halt,
76a0: 20 74 68 69 73 20 73 68 6f 75 6c 64 20 62 65 20   this should be 
76b0: 53 51 4c 49 54 45 5f 4f 4b 20 28 30 29 2e 0a 2a  SQLITE_OK (0)..*
76c0: 2a 20 46 6f 72 20 65 72 72 6f 72 73 2c 20 69 74  * For errors, it
76d0: 20 63 61 6e 20 62 65 20 73 6f 6d 65 20 6f 74 68   can be some oth
76e0: 65 72 20 76 61 6c 75 65 2e 20 20 49 66 20 50 31  er value.  If P1
76f0: 21 3d 30 20 74 68 65 6e 20 50 32 20 77 69 6c 6c  !=0 then P2 will
7700: 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68   determine.** wh
7710: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 6f 20  ether or not to 
7720: 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 63 75 72  rollback the cur
7730: 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  rent transaction
7740: 2e 20 20 44 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61  .  Do not rollba
7750: 63 6b 0a 2a 2a 20 69 66 20 50 32 3d 3d 4f 45 5f  ck.** if P2==OE_
7760: 46 61 69 6c 2e 20 44 6f 20 74 68 65 20 72 6f 6c  Fail. Do the rol
7770: 6c 62 61 63 6b 20 69 66 20 50 32 3d 3d 4f 45 5f  lback if P2==OE_
7780: 52 6f 6c 6c 62 61 63 6b 2e 20 20 49 66 20 50 32  Rollback.  If P2
7790: 3d 3d 4f 45 5f 41 62 6f 72 74 2c 0a 2a 2a 20 74  ==OE_Abort,.** t
77a0: 68 65 6e 20 62 61 63 6b 20 6f 75 74 20 61 6c 6c  hen back out all
77b0: 20 63 68 61 6e 67 65 73 20 74 68 61 74 20 68 61   changes that ha
77c0: 76 65 20 6f 63 63 75 72 72 65 64 20 64 75 72 69  ve occurred duri
77d0: 6e 67 20 74 68 69 73 20 65 78 65 63 75 74 69 6f  ng this executio
77e0: 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 56 44 42 45  n of the.** VDBE
77f0: 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 72 6f 6c  , but do not rol
7800: 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61  lback the transa
7810: 63 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20 49 66  ction. .**.** If
7820: 20 50 34 20 69 73 20 6e 6f 74 20 6e 75 6c 6c 20   P4 is not null 
7830: 74 68 65 6e 20 69 74 20 69 73 20 61 6e 20 65 72  then it is an er
7840: 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74 72 69  ror message stri
7850: 6e 67 2e 0a 2a 2a 0a 2a 2a 20 50 35 20 69 73 20  ng..**.** P5 is 
7860: 61 20 76 61 6c 75 65 20 62 65 74 77 65 65 6e 20  a value between 
7870: 30 20 61 6e 64 20 34 2c 20 69 6e 63 6c 75 73 69  0 and 4, inclusi
7880: 76 65 2c 20 74 68 61 74 20 6d 6f 64 69 66 69 65  ve, that modifie
7890: 73 20 74 68 65 20 50 34 20 73 74 72 69 6e 67 2e  s the P4 string.
78a0: 0a 2a 2a 0a 2a 2a 20 20 20 20 30 3a 20 20 28 6e  .**.**    0:  (n
78b0: 6f 20 63 68 61 6e 67 65 29 0a 2a 2a 20 20 20 20  o change).**    
78c0: 31 3a 20 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e  1:  NOT NULL con
78d0: 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50  traint failed: P
78e0: 34 0a 2a 2a 20 20 20 20 32 3a 20 20 55 4e 49 51  4.**    2:  UNIQ
78f0: 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61  UE constraint fa
7900: 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20 33  iled: P4.**    3
7910: 3a 20 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61  :  CHECK constra
7920: 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a  int failed: P4.*
7930: 2a 20 20 20 20 34 3a 20 20 46 4f 52 45 49 47 4e  *    4:  FOREIGN
7940: 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 20   KEY constraint 
7950: 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 0a 2a 2a  failed: P4.**.**
7960: 20 49 66 20 50 35 20 69 73 20 6e 6f 74 20 7a 65   If P5 is not ze
7970: 72 6f 20 61 6e 64 20 50 34 20 69 73 20 4e 55 4c  ro and P4 is NUL
7980: 4c 2c 20 74 68 65 6e 20 65 76 65 72 79 74 68 69  L, then everythi
7990: 6e 67 20 61 66 74 65 72 20 74 68 65 20 22 3a 22  ng after the ":"
79a0: 20 69 73 0a 2a 2a 20 6f 6d 69 74 74 65 64 2e 0a   is.** omitted..
79b0: 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 61  **.** There is a
79c0: 6e 20 69 6d 70 6c 69 65 64 20 22 48 61 6c 74 20  n implied "Halt 
79d0: 30 20 30 20 30 22 20 69 6e 73 74 72 75 63 74 69  0 0 0" instructi
79e0: 6f 6e 20 69 6e 73 65 72 74 65 64 20 61 74 20 74  on inserted at t
79f0: 68 65 20 76 65 72 79 20 65 6e 64 20 6f 66 0a 2a  he very end of.*
7a00: 2a 20 65 76 65 72 79 20 70 72 6f 67 72 61 6d 2e  * every program.
7a10: 20 20 53 6f 20 61 20 6a 75 6d 70 20 70 61 73 74    So a jump past
7a20: 20 74 68 65 20 6c 61 73 74 20 69 6e 73 74 72 75   the last instru
7a30: 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 70 72 6f  ction of the pro
7a40: 67 72 61 6d 0a 2a 2a 20 69 73 20 74 68 65 20 73  gram.** is the s
7a50: 61 6d 65 20 61 73 20 65 78 65 63 75 74 69 6e 67  ame as executing
7a60: 20 48 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f   Halt..*/.case O
7a70: 50 5f 48 61 6c 74 3a 20 7b 0a 20 20 56 64 62 65  P_Halt: {.  Vdbe
7a80: 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20  Frame *pFrame;. 
7a90: 20 69 6e 74 20 70 63 78 3b 0a 0a 20 20 70 63 78   int pcx;..  pcx
7aa0: 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61   = (int)(pOp - a
7ab0: 4f 70 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  Op);.  if( pOp->
7ac0: 70 31 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  p1==SQLITE_OK &&
7ad0: 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20   p->pFrame ){.  
7ae0: 20 20 2f 2a 20 48 61 6c 74 20 74 68 65 20 73 75    /* Halt the su
7af0: 62 2d 70 72 6f 67 72 61 6d 2e 20 52 65 74 75 72  b-program. Retur
7b00: 6e 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65  n control to the
7b10: 20 70 61 72 65 6e 74 20 66 72 61 6d 65 2e 20 2a   parent frame. *
7b20: 2f 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20 70  /.    pFrame = p
7b30: 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 20 20 70 2d  ->pFrame;.    p-
7b40: 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65  >pFrame = pFrame
7b50: 2d 3e 70 50 61 72 65 6e 74 3b 0a 20 20 20 20 70  ->pParent;.    p
7b60: 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20 20 20  ->nFrame--;.    
7b70: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68  sqlite3VdbeSetCh
7b80: 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68  anges(db, p->nCh
7b90: 61 6e 67 65 29 3b 0a 20 20 20 20 70 63 78 20 3d  ange);.    pcx =
7ba0: 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 61 6d   sqlite3VdbeFram
7bb0: 65 52 65 73 74 6f 72 65 28 70 46 72 61 6d 65 29  eRestore(pFrame)
7bc0: 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
7bd0: 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a  2==OE_Ignore ){.
7be0: 20 20 20 20 20 20 2f 2a 20 49 6e 73 74 72 75 63        /* Instruc
7bf0: 74 69 6f 6e 20 70 63 78 20 69 73 20 74 68 65 20  tion pcx is the 
7c00: 4f 50 5f 50 72 6f 67 72 61 6d 20 74 68 61 74 20  OP_Program that 
7c10: 69 6e 76 6f 6b 65 64 20 74 68 65 20 73 75 62 2d  invoked the sub-
7c20: 70 72 6f 67 72 61 6d 20 0a 20 20 20 20 20 20 2a  program .      *
7c30: 2a 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e  * currently bein
7c40: 67 20 68 61 6c 74 65 64 2e 20 49 66 20 74 68 65  g halted. If the
7c50: 20 70 32 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   p2 instruction 
7c60: 6f 66 20 74 68 69 73 20 4f 50 5f 48 61 6c 74 0a  of this OP_Halt.
7c70: 20 20 20 20 20 20 2a 2a 20 69 6e 73 74 72 75 63        ** instruc
7c80: 74 69 6f 6e 20 69 73 20 73 65 74 20 74 6f 20 4f  tion is set to O
7c90: 45 5f 49 67 6e 6f 72 65 2c 20 74 68 65 6e 20 74  E_Ignore, then t
7ca0: 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 69  he sub-program i
7cb0: 73 20 74 68 72 6f 77 69 6e 67 0a 20 20 20 20 20  s throwing.     
7cc0: 20 2a 2a 20 61 6e 20 49 47 4e 4f 52 45 20 65 78   ** an IGNORE ex
7cd0: 63 65 70 74 69 6f 6e 2e 20 49 6e 20 74 68 69 73  ception. In this
7ce0: 20 63 61 73 65 20 6a 75 6d 70 20 74 6f 20 74 68   case jump to th
7cf0: 65 20 61 64 64 72 65 73 73 20 73 70 65 63 69 66  e address specif
7d00: 69 65 64 0a 20 20 20 20 20 20 2a 2a 20 61 73 20  ied.      ** as 
7d10: 74 68 65 20 70 32 20 6f 66 20 74 68 65 20 63 61  the p2 of the ca
7d20: 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d  lling OP_Program
7d30: 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 63 78 20  .  */.      pcx 
7d40: 3d 20 70 2d 3e 61 4f 70 5b 70 63 78 5d 2e 70 32  = p->aOp[pcx].p2
7d50: 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 4f  -1;.    }.    aO
7d60: 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20  p = p->aOp;.    
7d70: 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a  aMem = p->aMem;.
7d80: 20 20 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70      pOp = &aOp[p
7d90: 63 78 5d 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  cx];.    break;.
7da0: 20 20 7d 0a 20 20 70 2d 3e 72 63 20 3d 20 70 4f    }.  p->rc = pO
7db0: 70 2d 3e 70 31 3b 0a 20 20 70 2d 3e 65 72 72 6f  p->p1;.  p->erro
7dc0: 72 41 63 74 69 6f 6e 20 3d 20 28 75 38 29 70 4f  rAction = (u8)pO
7dd0: 70 2d 3e 70 32 3b 0a 20 20 70 2d 3e 70 63 20 3d  p->p2;.  p->pc =
7de0: 20 70 63 78 3b 0a 20 20 61 73 73 65 72 74 28 20   pcx;.  assert( 
7df0: 70 4f 70 2d 3e 70 35 3c 3d 34 20 29 3b 0a 20 20  pOp->p5<=4 );.  
7e00: 69 66 28 20 70 2d 3e 72 63 20 29 7b 0a 20 20 20  if( p->rc ){.   
7e10: 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a   if( pOp->p5 ){.
7e20: 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e        static con
7e30: 73 74 20 63 68 61 72 20 2a 20 63 6f 6e 73 74 20  st char * const 
7e40: 61 7a 54 79 70 65 5b 5d 20 3d 20 7b 20 22 4e 4f  azType[] = { "NO
7e50: 54 20 4e 55 4c 4c 22 2c 20 22 55 4e 49 51 55 45  T NULL", "UNIQUE
7e60: 22 2c 20 22 43 48 45 43 4b 22 2c 0a 20 20 20 20  ", "CHECK",.    
7e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e90: 20 20 20 20 20 20 20 20 20 22 46 4f 52 45 49 47           "FOREIG
7ea0: 4e 20 4b 45 59 22 20 7d 3b 0a 20 20 20 20 20 20  N KEY" };.      
7eb0: 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
7ec0: 35 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 74 65  5==1 );.      te
7ed0: 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d  stcase( pOp->p5=
7ee0: 3d 32 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74  =2 );.      test
7ef0: 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 33  case( pOp->p5==3
7f00: 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61   );.      testca
7f10: 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 34 20 29  se( pOp->p5==4 )
7f20: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
7f30: 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 20  dbeError(p, "%s 
7f40: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
7f50: 64 22 2c 20 61 7a 54 79 70 65 5b 70 4f 70 2d 3e  d", azType[pOp->
7f60: 70 35 2d 31 5d 29 3b 0a 20 20 20 20 20 20 69 66  p5-1]);.      if
7f70: 28 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20  ( pOp->p4.z ){. 
7f80: 20 20 20 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73         p->zErrMs
7f90: 67 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e  g = sqlite3MPrin
7fa0: 74 66 28 64 62 2c 20 22 25 7a 3a 20 25 73 22 2c  tf(db, "%z: %s",
7fb0: 20 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 70 4f 70   p->zErrMsg, pOp
7fc0: 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 20 20 7d  ->p4.z);.      }
7fd0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
7fe0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
7ff0: 6f 72 28 70 2c 20 22 25 73 22 2c 20 70 4f 70 2d  or(p, "%s", pOp-
8000: 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20 20  >p4.z);.    }.  
8010: 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 70 4f    sqlite3_log(pO
8020: 70 2d 3e 70 31 2c 20 22 61 62 6f 72 74 20 61 74  p->p1, "abort at
8030: 20 25 64 20 69 6e 20 5b 25 73 5d 3a 20 25 73 22   %d in [%s]: %s"
8040: 2c 20 70 63 78 2c 20 70 2d 3e 7a 53 71 6c 2c 20  , pcx, p->zSql, 
8050: 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d  p->zErrMsg);.  }
8060: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
8070: 64 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 61 73  dbeHalt(p);.  as
8080: 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
8090: 5f 42 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c  _BUSY || rc==SQL
80a0: 49 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51  ITE_OK || rc==SQ
80b0: 4c 49 54 45 5f 45 52 52 4f 52 20 29 3b 0a 20 20  LITE_ERROR );.  
80c0: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  if( rc==SQLITE_B
80d0: 55 53 59 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63  USY ){.    p->rc
80e0: 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
80f0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
8100: 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
8110: 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63 26 30 78 66  OK || (p->rc&0xf
8120: 66 29 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54  f)==SQLITE_CONST
8130: 52 41 49 4e 54 20 29 3b 0a 20 20 20 20 61 73 73  RAINT );.    ass
8140: 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
8150: 4f 4b 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72  OK || db->nDefer
8160: 72 65 64 43 6f 6e 73 3e 30 20 7c 7c 20 64 62 2d  redCons>0 || db-
8170: 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
8180: 73 3e 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  s>0 );.    rc = 
8190: 70 2d 3e 72 63 20 3f 20 53 51 4c 49 54 45 5f 45  p->rc ? SQLITE_E
81a0: 52 52 4f 52 20 3a 20 53 51 4c 49 54 45 5f 44 4f  RROR : SQLITE_DO
81b0: 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76  NE;.  }.  goto v
81c0: 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f  dbe_return;.}../
81d0: 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 65  * Opcode: Intege
81e0: 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  r P1 P2 * * *.**
81f0: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
8200: 3d 50 31 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33 32  =P1.**.** The 32
8210: 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c  -bit integer val
8220: 75 65 20 50 31 20 69 73 20 77 72 69 74 74 65 6e  ue P1 is written
8230: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
8240: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  2..*/.case OP_In
8250: 74 65 67 65 72 3a 20 7b 20 20 20 20 20 20 20 20  teger: {        
8260: 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f   /* out2 */.  pO
8270: 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
8280: 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70  ase(p, pOp);.  p
8290: 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e  Out->u.i = pOp->
82a0: 70 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  p1;.  break;.}..
82b0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 36 34  /* Opcode: Int64
82c0: 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20   * P2 * P4 *.** 
82d0: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
82e0: 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  P4.**.** P4 is a
82f0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34   pointer to a 64
8300: 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c  -bit integer val
8310: 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61  ue..** Write tha
8320: 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67  t value into reg
8330: 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
8340: 65 20 4f 50 5f 49 6e 74 36 34 3a 20 7b 20 20 20  e OP_Int64: {   
8350: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
8360: 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  */.  pOut = out2
8370: 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
8380: 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  p);.  assert( pO
8390: 70 2d 3e 70 34 2e 70 49 36 34 21 3d 30 20 29 3b  p->p4.pI64!=0 );
83a0: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 2a  .  pOut->u.i = *
83b0: 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20  pOp->p4.pI64;.  
83c0: 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65  break;.}..#ifnde
83d0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
83e0: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20  OATING_POINT./* 
83f0: 4f 70 63 6f 64 65 3a 20 52 65 61 6c 20 2a 20 50  Opcode: Real * P
8400: 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
8410: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a  psis: r[P2]=P4.*
8420: 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
8430: 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74  nter to a 64-bit
8440: 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
8450: 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20  value..** Write 
8460: 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20  that value into 
8470: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
8480: 63 61 73 65 20 4f 50 5f 52 65 61 6c 3a 20 7b 20  case OP_Real: { 
8490: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
84a0: 6d 65 20 61 73 20 54 4b 5f 46 4c 4f 41 54 2c 20  me as TK_FLOAT, 
84b0: 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d  out2 */.  pOut =
84c0: 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
84d0: 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d  p, pOp);.  pOut-
84e0: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 52 65 61  >flags = MEM_Rea
84f0: 6c 3b 0a 20 20 61 73 73 65 72 74 28 20 21 73 71  l;.  assert( !sq
8500: 6c 69 74 65 33 49 73 4e 61 4e 28 2a 70 4f 70 2d  lite3IsNaN(*pOp-
8510: 3e 70 34 2e 70 52 65 61 6c 29 20 29 3b 0a 20 20  >p4.pReal) );.  
8520: 70 4f 75 74 2d 3e 75 2e 72 20 3d 20 2a 70 4f 70  pOut->u.r = *pOp
8530: 2d 3e 70 34 2e 70 52 65 61 6c 3b 0a 20 20 62 72  ->p4.pReal;.  br
8540: 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  eak;.}.#endif../
8550: 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67  * Opcode: String
8560: 38 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a  8 * P2 * P4 *.**
8570: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
8580: 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20 50 34 20 70  ='P4'.**.** P4 p
8590: 6f 69 6e 74 73 20 74 6f 20 61 20 6e 75 6c 20 74  oints to a nul t
85a0: 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20  erminated UTF-8 
85b0: 73 74 72 69 6e 67 2e 20 54 68 69 73 20 6f 70 63  string. This opc
85c0: 6f 64 65 20 69 73 20 74 72 61 6e 73 66 6f 72 6d  ode is transform
85d0: 65 64 20 0a 2a 2a 20 69 6e 74 6f 20 61 20 53 74  ed .** into a St
85e0: 72 69 6e 67 20 6f 70 63 6f 64 65 20 62 65 66 6f  ring opcode befo
85f0: 72 65 20 69 74 20 69 73 20 65 78 65 63 75 74 65  re it is execute
8600: 64 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20  d for the first 
8610: 74 69 6d 65 2e 20 20 44 75 72 69 6e 67 0a 2a 2a  time.  During.**
8620: 20 74 68 69 73 20 74 72 61 6e 73 66 6f 72 6d 61   this transforma
8630: 74 69 6f 6e 2c 20 74 68 65 20 6c 65 6e 67 74 68  tion, the length
8640: 20 6f 66 20 73 74 72 69 6e 67 20 50 34 20 69 73   of string P4 is
8650: 20 63 6f 6d 70 75 74 65 64 20 61 6e 64 20 73 74   computed and st
8660: 6f 72 65 64 0a 2a 2a 20 61 73 20 74 68 65 20 50  ored.** as the P
8670: 31 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a  1 parameter..*/.
8680: 63 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 38 3a  case OP_String8:
8690: 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61   {         /* sa
86a0: 6d 65 20 61 73 20 54 4b 5f 53 54 52 49 4e 47 2c  me as TK_STRING,
86b0: 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73 65 72   out2 */.  asser
86c0: 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20  t( pOp->p4.z!=0 
86d0: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  );.  pOut = out2
86e0: 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
86f0: 70 29 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64  p);.  pOp->opcod
8700: 65 20 3d 20 4f 50 5f 53 74 72 69 6e 67 3b 0a 20  e = OP_String;. 
8710: 20 70 4f 70 2d 3e 70 31 20 3d 20 73 71 6c 69 74   pOp->p1 = sqlit
8720: 65 33 53 74 72 6c 65 6e 33 30 28 70 4f 70 2d 3e  e3Strlen30(pOp->
8730: 70 34 2e 7a 29 3b 0a 0a 23 69 66 6e 64 65 66 20  p4.z);..#ifndef 
8740: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
8750: 36 0a 20 20 69 66 28 20 65 6e 63 6f 64 69 6e 67  6.  if( encoding
8760: 21 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29 7b  !=SQLITE_UTF8 ){
8770: 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
8780: 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70  3VdbeMemSetStr(p
8790: 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20  Out, pOp->p4.z, 
87a0: 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c  -1, SQLITE_UTF8,
87b0: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
87c0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d  .    assert( rc=
87d0: 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63  =SQLITE_OK || rc
87e0: 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20  ==SQLITE_TOOBIG 
87f0: 29 3b 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54  );.    if( SQLIT
8800: 45 5f 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64 62  E_OK!=sqlite3Vdb
8810: 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
8820: 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 20  pOut, encoding) 
8830: 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
8840: 20 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 2d     assert( pOut-
8850: 3e 73 7a 4d 61 6c 6c 6f 63 3e 30 20 26 26 20 70  >szMalloc>0 && p
8860: 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f  Out->zMalloc==pO
8870: 75 74 2d 3e 7a 20 29 3b 0a 20 20 20 20 61 73 73  ut->z );.    ass
8880: 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61  ert( VdbeMemDyna
8890: 6d 69 63 28 70 4f 75 74 29 3d 3d 30 20 29 3b 0a  mic(pOut)==0 );.
88a0: 20 20 20 20 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c      pOut->szMall
88b0: 6f 63 20 3d 20 30 3b 0a 20 20 20 20 70 4f 75 74  oc = 0;.    pOut
88c0: 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 53  ->flags |= MEM_S
88d0: 74 61 74 69 63 3b 0a 20 20 20 20 69 66 28 20 70  tatic;.    if( p
88e0: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 44  Op->p4type==P4_D
88f0: 59 4e 41 4d 49 43 20 29 7b 0a 20 20 20 20 20 20  YNAMIC ){.      
8900: 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
8910: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
8920: 20 20 7d 0a 20 20 20 20 70 4f 70 2d 3e 70 34 74    }.    pOp->p4t
8930: 79 70 65 20 3d 20 50 34 5f 44 59 4e 41 4d 49 43  ype = P4_DYNAMIC
8940: 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34 2e 7a 20  ;.    pOp->p4.z 
8950: 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20 20 20 20 70  = pOut->z;.    p
8960: 4f 70 2d 3e 70 31 20 3d 20 70 4f 75 74 2d 3e 6e  Op->p1 = pOut->n
8970: 3b 0a 20 20 7d 0a 20 20 74 65 73 74 63 61 73 65  ;.  }.  testcase
8980: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f  ( rc==SQLITE_TOO
8990: 42 49 47 20 29 3b 0a 23 65 6e 64 69 66 0a 20 20  BIG );.#endif.  
89a0: 69 66 28 20 70 4f 70 2d 3e 70 31 3e 64 62 2d 3e  if( pOp->p1>db->
89b0: 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
89c0: 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
89d0: 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
89e0: 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 72  .  }.  assert( r
89f0: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a  c==SQLITE_OK );.
8a00: 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
8a10: 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61  h to the next ca
8a20: 73 65 2c 20 4f 50 5f 53 74 72 69 6e 67 20 2a 2f  se, OP_String */
8a30: 0a 7d 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a  .}.  ./* Opcode:
8a40: 20 53 74 72 69 6e 67 20 50 31 20 50 32 20 50 33   String P1 P2 P3
8a50: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
8a60: 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27 20 28  is: r[P2]='P4' (
8a70: 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 54 68  len=P1).**.** Th
8a80: 65 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20 50  e string value P
8a90: 34 20 6f 66 20 6c 65 6e 67 74 68 20 50 31 20 28  4 of length P1 (
8aa0: 62 79 74 65 73 29 20 69 73 20 73 74 6f 72 65 64  bytes) is stored
8ab0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
8ac0: 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 20 69 73 20  .**.** If P3 is 
8ad0: 6e 6f 74 20 7a 65 72 6f 20 61 6e 64 20 74 68 65  not zero and the
8ae0: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
8af0: 73 74 65 72 20 50 33 20 69 73 20 65 71 75 61 6c  ster P3 is equal
8b00: 20 74 6f 20 50 35 2c 20 74 68 65 6e 0a 2a 2a 20   to P5, then.** 
8b10: 74 68 65 20 64 61 74 61 74 79 70 65 20 6f 66 20  the datatype of 
8b20: 74 68 65 20 72 65 67 69 73 74 65 72 20 50 32 20  the register P2 
8b30: 69 73 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20  is converted to 
8b40: 42 4c 4f 42 2e 20 20 54 68 65 20 63 6f 6e 74 65  BLOB.  The conte
8b50: 6e 74 20 69 73 0a 2a 2a 20 74 68 65 20 73 61 6d  nt is.** the sam
8b60: 65 20 73 65 71 75 65 6e 63 65 20 6f 66 20 62 79  e sequence of by
8b70: 74 65 73 2c 20 69 74 20 69 73 20 6d 65 72 65 6c  tes, it is merel
8b80: 79 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73  y interpreted as
8b90: 20 61 20 42 4c 4f 42 20 69 6e 73 74 65 61 64 0a   a BLOB instead.
8ba0: 2a 2a 20 6f 66 20 61 20 73 74 72 69 6e 67 2c 20  ** of a string, 
8bb0: 61 73 20 69 66 20 69 74 20 68 61 64 20 62 65 65  as if it had bee
8bc0: 6e 20 43 41 53 54 2e 20 20 49 6e 20 6f 74 68 65  n CAST.  In othe
8bd0: 72 20 77 6f 72 64 73 3a 0a 2a 2a 0a 2a 2a 20 69  r words:.**.** i
8be0: 66 28 20 50 33 21 3d 30 20 61 6e 64 20 72 65 67  f( P3!=0 and reg
8bf0: 5b 50 33 5d 3d 3d 50 35 20 29 20 72 65 67 5b 50  [P3]==P5 ) reg[P
8c00: 32 5d 20 3a 3d 20 43 41 53 54 28 72 65 67 5b 50  2] := CAST(reg[P
8c10: 32 5d 20 61 73 20 42 4c 4f 42 29 0a 2a 2f 0a 63  2] as BLOB).*/.c
8c20: 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 3a 20 7b  ase OP_String: {
8c30: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
8c40: 32 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  2 */.  assert( p
8c50: 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20  Op->p4.z!=0 );. 
8c60: 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
8c70: 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
8c80: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
8c90: 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74  MEM_Str|MEM_Stat
8ca0: 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70  ic|MEM_Term;.  p
8cb0: 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70 2d 3e 70 34  Out->z = pOp->p4
8cc0: 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20  .z;.  pOut->n = 
8cd0: 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 4f 75 74 2d  pOp->p1;.  pOut-
8ce0: 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b  >enc = encoding;
8cf0: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
8d00: 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 23 69  OBSIZE(pOut);.#i
8d10: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4c 49 4b  fndef SQLITE_LIK
8d20: 45 5f 44 4f 45 53 4e 54 5f 4d 41 54 43 48 5f 42  E_DOESNT_MATCH_B
8d30: 4c 4f 42 53 0a 20 20 69 66 28 20 70 4f 70 2d 3e  LOBS.  if( pOp->
8d40: 70 33 3e 30 20 29 7b 0a 20 20 20 20 61 73 73 65  p3>0 ){.    asse
8d50: 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d  rt( pOp->p3<=(p-
8d60: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
8d70: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 70 49 6e  rsor) );.    pIn
8d80: 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
8d90: 33 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  3];.    assert( 
8da0: 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
8db0: 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 69 66 28  M_Int );.    if(
8dc0: 20 70 49 6e 33 2d 3e 75 2e 69 3d 3d 70 4f 70 2d   pIn3->u.i==pOp-
8dd0: 3e 70 35 20 29 20 70 4f 75 74 2d 3e 66 6c 61 67  >p5 ) pOut->flag
8de0: 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d  s = MEM_Blob|MEM
8df0: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d  _Static|MEM_Term
8e00: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 62  ;.  }.#endif.  b
8e10: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
8e20: 64 65 3a 20 4e 75 6c 6c 20 50 31 20 50 32 20 50  de: Null P1 P2 P
8e30: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
8e40: 73 3a 20 72 5b 50 32 2e 2e 50 33 5d 3d 4e 55 4c  s: r[P2..P3]=NUL
8e50: 4c 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20  L.**.** Write a 
8e60: 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74  NULL into regist
8e70: 65 72 73 20 50 32 2e 20 20 49 66 20 50 33 20 67  ers P2.  If P3 g
8e80: 72 65 61 74 65 72 20 74 68 61 6e 20 50 32 2c 20  reater than P2, 
8e90: 74 68 65 6e 20 61 6c 73 6f 20 77 72 69 74 65 0a  then also write.
8ea0: 2a 2a 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67  ** NULL into reg
8eb0: 69 73 74 65 72 20 50 33 20 61 6e 64 20 65 76 65  ister P3 and eve
8ec0: 72 79 20 72 65 67 69 73 74 65 72 20 69 6e 20 62  ry register in b
8ed0: 65 74 77 65 65 6e 20 50 32 20 61 6e 64 20 50 33  etween P2 and P3
8ee0: 2e 20 20 49 66 20 50 33 0a 2a 2a 20 69 73 20 6c  .  If P3.** is l
8ef0: 65 73 73 20 74 68 61 6e 20 50 32 20 28 74 79 70  ess than P2 (typ
8f00: 69 63 61 6c 6c 79 20 50 33 20 69 73 20 7a 65 72  ically P3 is zer
8f10: 6f 29 20 74 68 65 6e 20 6f 6e 6c 79 20 72 65 67  o) then only reg
8f20: 69 73 74 65 72 20 50 32 20 69 73 0a 2a 2a 20 73  ister P2 is.** s
8f30: 65 74 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  et to NULL..**.*
8f40: 2a 20 49 66 20 74 68 65 20 50 31 20 76 61 6c 75  * If the P1 valu
8f50: 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  e is non-zero, t
8f60: 68 65 6e 20 61 6c 73 6f 20 73 65 74 20 74 68 65  hen also set the
8f70: 20 4d 45 4d 5f 43 6c 65 61 72 65 64 20 66 6c 61   MEM_Cleared fla
8f80: 67 20 73 6f 20 74 68 61 74 0a 2a 2a 20 4e 55 4c  g so that.** NUL
8f90: 4c 20 76 61 6c 75 65 73 20 77 69 6c 6c 20 6e 6f  L values will no
8fa0: 74 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20  t compare equal 
8fb0: 65 76 65 6e 20 69 66 20 53 51 4c 49 54 45 5f 4e  even if SQLITE_N
8fc0: 55 4c 4c 45 51 20 69 73 20 73 65 74 20 6f 6e 0a  ULLEQ is set on.
8fd0: 2a 2a 20 4f 50 5f 4e 65 20 6f 72 20 4f 50 5f 45  ** OP_Ne or OP_E
8fe0: 71 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75  q..*/.case OP_Nu
8ff0: 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ll: {           
9000: 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74  /* out2 */.  int
9010: 20 63 6e 74 3b 0a 20 20 75 31 36 20 6e 75 6c 6c   cnt;.  u16 null
9020: 46 6c 61 67 3b 0a 20 20 70 4f 75 74 20 3d 20 6f  Flag;.  pOut = o
9030: 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
9040: 20 70 4f 70 29 3b 0a 20 20 63 6e 74 20 3d 20 70   pOp);.  cnt = p
9050: 4f 70 2d 3e 70 33 2d 70 4f 70 2d 3e 70 32 3b 0a  Op->p3-pOp->p2;.
9060: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
9070: 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  3<=(p->nMem+1 - 
9080: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
9090: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e   pOut->flags = n
90a0: 75 6c 6c 46 6c 61 67 20 3d 20 70 4f 70 2d 3e 70  ullFlag = pOp->p
90b0: 31 20 3f 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45  1 ? (MEM_Null|ME
90c0: 4d 5f 43 6c 65 61 72 65 64 29 20 3a 20 4d 45 4d  M_Cleared) : MEM
90d0: 5f 4e 75 6c 6c 3b 0a 20 20 70 4f 75 74 2d 3e 6e  _Null;.  pOut->n
90e0: 20 3d 20 30 3b 0a 20 20 77 68 69 6c 65 28 20 63   = 0;.  while( c
90f0: 6e 74 3e 30 20 29 7b 0a 20 20 20 20 70 4f 75 74  nt>0 ){.    pOut
9100: 2b 2b 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74  ++;.    memAbout
9110: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
9120: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
9130: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
9140: 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c  t);.    pOut->fl
9150: 61 67 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 3b 0a  ags = nullFlag;.
9160: 20 20 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 30 3b      pOut->n = 0;
9170: 0a 20 20 20 20 63 6e 74 2d 2d 3b 0a 20 20 7d 0a  .    cnt--;.  }.
9180: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
9190: 70 63 6f 64 65 3a 20 53 6f 66 74 4e 75 6c 6c 20  pcode: SoftNull 
91a0: 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  P1 * * * *.** Sy
91b0: 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 4e 55  nopsis: r[P1]=NU
91c0: 4c 4c 0a 2a 2a 0a 2a 2a 20 53 65 74 20 72 65 67  LL.**.** Set reg
91d0: 69 73 74 65 72 20 50 31 20 74 6f 20 68 61 76 65  ister P1 to have
91e0: 20 74 68 65 20 76 61 6c 75 65 20 4e 55 4c 4c 20   the value NULL 
91f0: 61 73 20 73 65 65 6e 20 62 79 20 74 68 65 20 4f  as seen by the O
9200: 50 5f 4d 61 6b 65 52 65 63 6f 72 64 0a 2a 2a 20  P_MakeRecord.** 
9210: 69 6e 73 74 72 75 63 74 69 6f 6e 2c 20 62 75 74  instruction, but
9220: 20 64 6f 20 6e 6f 74 20 66 72 65 65 20 61 6e 79   do not free any
9230: 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20   string or blob 
9240: 6d 65 6d 6f 72 79 20 61 73 73 6f 63 69 61 74 65  memory associate
9250: 64 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 72 65  d with.** the re
9260: 67 69 73 74 65 72 2c 20 73 6f 20 74 68 61 74 20  gister, so that 
9270: 69 66 20 74 68 65 20 76 61 6c 75 65 20 77 61 73  if the value was
9280: 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f   a string or blo
9290: 62 20 74 68 61 74 20 77 61 73 0a 2a 2a 20 70 72  b that was.** pr
92a0: 65 76 69 6f 75 73 6c 79 20 63 6f 70 69 65 64 20  eviously copied 
92b0: 75 73 69 6e 67 20 4f 50 5f 53 43 6f 70 79 2c 20  using OP_SCopy, 
92c0: 74 68 65 20 63 6f 70 69 65 73 20 77 69 6c 6c 20  the copies will 
92d0: 63 6f 6e 74 69 6e 75 65 20 74 6f 20 62 65 20 76  continue to be v
92e0: 61 6c 69 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  alid..*/.case OP
92f0: 5f 53 6f 66 74 4e 75 6c 6c 3a 20 7b 0a 20 20 61  _SoftNull: {.  a
9300: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
9310: 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d   && pOp->p1<=(p-
9320: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
9330: 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 20  rsor) );.  pOut 
9340: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
9350: 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
9360: 3d 20 28 70 4f 75 74 2d 3e 66 6c 61 67 73 7c 4d  = (pOut->flags|M
9370: 45 4d 5f 4e 75 6c 6c 29 26 7e 4d 45 4d 5f 55 6e  EM_Null)&~MEM_Un
9380: 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b  defined;.  break
9390: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
93a0: 42 6c 6f 62 20 50 31 20 50 32 20 2a 20 50 34 20  Blob P1 P2 * P4 
93b0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
93c0: 5b 50 32 5d 3d 50 34 20 28 6c 65 6e 3d 50 31 29  [P2]=P4 (len=P1)
93d0: 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73  .**.** P4 points
93e0: 20 74 6f 20 61 20 62 6c 6f 62 20 6f 66 20 64 61   to a blob of da
93f0: 74 61 20 50 31 20 62 79 74 65 73 20 6c 6f 6e 67  ta P1 bytes long
9400: 2e 20 20 53 74 6f 72 65 20 74 68 69 73 0a 2a 2a  .  Store this.**
9410: 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65   blob in registe
9420: 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
9430: 5f 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20 20  _Blob: {        
9440: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
9450: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
9460: 2d 3e 70 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d  ->p1 <= SQLITE_M
9470: 41 58 5f 4c 45 4e 47 54 48 20 29 3b 0a 20 20 70  AX_LENGTH );.  p
9480: 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
9490: 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
94a0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
94b0: 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e  tStr(pOut, pOp->
94c0: 70 34 2e 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20 30  p4.z, pOp->p1, 0
94d0: 2c 20 30 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e  , 0);.  pOut->en
94e0: 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20  c = encoding;.  
94f0: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
9500: 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  IZE(pOut);.  bre
9510: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
9520: 3a 20 56 61 72 69 61 62 6c 65 20 50 31 20 50 32  : Variable P1 P2
9530: 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
9540: 73 69 73 3a 20 72 5b 50 32 5d 3d 70 61 72 61 6d  sis: r[P2]=param
9550: 65 74 65 72 28 50 31 2c 50 34 29 0a 2a 2a 0a 2a  eter(P1,P4).**.*
9560: 2a 20 54 72 61 6e 73 66 65 72 20 74 68 65 20 76  * Transfer the v
9570: 61 6c 75 65 73 20 6f 66 20 62 6f 75 6e 64 20 70  alues of bound p
9580: 61 72 61 6d 65 74 65 72 20 50 31 20 69 6e 74 6f  arameter P1 into
9590: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a   register P2.**.
95a0: 2a 2a 20 49 66 20 74 68 65 20 70 61 72 61 6d 65  ** If the parame
95b0: 74 65 72 20 69 73 20 6e 61 6d 65 64 2c 20 74 68  ter is named, th
95c0: 65 6e 20 69 74 73 20 6e 61 6d 65 20 61 70 70 65  en its name appe
95d0: 61 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 20 54 68  ars in P4..** Th
95e0: 65 20 50 34 20 76 61 6c 75 65 20 69 73 20 75 73  e P4 value is us
95f0: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 62 69  ed by sqlite3_bi
9600: 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d  nd_parameter_nam
9610: 65 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  e()..*/.case OP_
9620: 56 61 72 69 61 62 6c 65 3a 20 7b 20 20 20 20 20  Variable: {     
9630: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
9640: 2f 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b 20 20  /.  Mem *pVar;  
9650: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 62 65       /* Value be
9660: 69 6e 67 20 74 72 61 6e 73 66 65 72 72 65 64 20  ing transferred 
9670: 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  */..  assert( pO
9680: 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p1>0 && pOp->
9690: 70 31 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20  p1<=p->nVar );. 
96a0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
96b0: 2e 7a 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34  .z==0 || pOp->p4
96c0: 2e 7a 3d 3d 73 71 6c 69 74 65 33 56 4c 69 73 74  .z==sqlite3VList
96d0: 4e 75 6d 54 6f 4e 61 6d 65 28 70 2d 3e 70 56 4c  NumToName(p->pVL
96e0: 69 73 74 2c 70 4f 70 2d 3e 70 31 29 20 29 3b 0a  ist,pOp->p1) );.
96f0: 20 20 70 56 61 72 20 3d 20 26 70 2d 3e 61 56 61    pVar = &p->aVa
9700: 72 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a  r[pOp->p1 - 1];.
9710: 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
9720: 65 4d 65 6d 54 6f 6f 42 69 67 28 70 56 61 72 29  eMemTooBig(pVar)
9730: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
9740: 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  _big;.  }.  pOut
9750: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
9760: 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  ];.  sqlite3Vdbe
9770: 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70  MemShallowCopy(p
9780: 4f 75 74 2c 20 70 56 61 72 2c 20 4d 45 4d 5f 53  Out, pVar, MEM_S
9790: 74 61 74 69 63 29 3b 0a 20 20 55 50 44 41 54 45  tatic);.  UPDATE
97a0: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
97b0: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
97c0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f 76 65  ./* Opcode: Move
97d0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
97e0: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 40   Synopsis: r[P2@
97f0: 50 33 5d 3d 72 5b 50 31 40 50 33 5d 0a 2a 2a 0a  P3]=r[P1@P3].**.
9800: 2a 2a 20 4d 6f 76 65 20 74 68 65 20 50 33 20 76  ** Move the P3 v
9810: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
9820: 72 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 6f 76  r P1..P1+P3-1 ov
9830: 65 72 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73  er into.** regis
9840: 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33 2d 31  ters P2..P2+P3-1
9850: 2e 20 20 52 65 67 69 73 74 65 72 73 20 50 31 2e  .  Registers P1.
9860: 2e 50 31 2b 50 33 2d 31 20 61 72 65 0a 2a 2a 20  .P1+P3-1 are.** 
9870: 6c 65 66 74 20 68 6f 6c 64 69 6e 67 20 61 20 4e  left holding a N
9880: 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 6e 20 65  ULL.  It is an e
9890: 72 72 6f 72 20 66 6f 72 20 72 65 67 69 73 74 65  rror for registe
98a0: 72 20 72 61 6e 67 65 73 0a 2a 2a 20 50 31 2e 2e  r ranges.** P1..
98b0: 50 31 2b 50 33 2d 31 20 61 6e 64 20 50 32 2e 2e  P1+P3-1 and P2..
98c0: 50 32 2b 50 33 2d 31 20 74 6f 20 6f 76 65 72 6c  P2+P3-1 to overl
98d0: 61 70 2e 20 20 49 74 20 69 73 20 61 6e 20 65 72  ap.  It is an er
98e0: 72 6f 72 0a 2a 2a 20 66 6f 72 20 50 33 20 74 6f  ror.** for P3 to
98f0: 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20 31 2e   be less than 1.
9900: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f 76 65  .*/.case OP_Move
9910: 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20  : {.  int n;    
9920: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
9930: 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 6c 65   of registers le
9940: 66 74 20 74 6f 20 63 6f 70 79 20 2a 2f 0a 20 20  ft to copy */.  
9950: 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20 20  int p1;         
9960: 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20   /* Register to 
9970: 63 6f 70 79 20 66 72 6f 6d 20 2a 2f 0a 20 20 69  copy from */.  i
9980: 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20 20 20  nt p2;          
9990: 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 63  /* Register to c
99a0: 6f 70 79 20 74 6f 20 2a 2f 0a 0a 20 20 6e 20 3d  opy to */..  n =
99b0: 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 31 20 3d   pOp->p3;.  p1 =
99c0: 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d   pOp->p1;.  p2 =
99d0: 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65   pOp->p2;.  asse
99e0: 72 74 28 20 6e 3e 30 20 26 26 20 70 31 3e 30 20  rt( n>0 && p1>0 
99f0: 26 26 20 70 32 3e 30 20 29 3b 0a 20 20 61 73 73  && p2>0 );.  ass
9a00: 65 72 74 28 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c  ert( p1+n<=p2 ||
9a10: 20 70 32 2b 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20   p2+n<=p1 );..  
9a20: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 31 5d  pIn1 = &aMem[p1]
9a30: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
9a40: 5b 70 32 5d 3b 0a 20 20 64 6f 7b 0a 20 20 20 20  [p2];.  do{.    
9a50: 61 73 73 65 72 74 28 20 70 4f 75 74 3c 3d 26 61  assert( pOut<=&a
9a60: 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  Mem[(p->nMem+1 -
9a70: 20 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b   p->nCursor)] );
9a80: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e  .    assert( pIn
9a90: 31 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65  1<=&aMem[(p->nMe
9aa0: 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
9ab0: 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  )] );.    assert
9ac0: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e  ( memIsValid(pIn
9ad0: 31 29 20 29 3b 0a 20 20 20 20 6d 65 6d 41 62 6f  1) );.    memAbo
9ae0: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f  utToChange(p, pO
9af0: 75 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ut);.    sqlite3
9b00: 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f 75 74  VdbeMemMove(pOut
9b10: 2c 20 70 49 6e 31 29 3b 0a 23 69 66 64 65 66 20  , pIn1);.#ifdef 
9b20: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
9b30: 20 69 66 28 20 70 4f 75 74 2d 3e 70 53 63 6f 70   if( pOut->pScop
9b40: 79 46 72 6f 6d 3e 3d 26 61 4d 65 6d 5b 70 31 5d  yFrom>=&aMem[p1]
9b50: 20 26 26 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79   && pOut->pScopy
9b60: 46 72 6f 6d 3c 70 4f 75 74 20 29 7b 0a 20 20 20  From<pOut ){.   
9b70: 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46     pOut->pScopyF
9b80: 72 6f 6d 20 2b 3d 20 70 4f 70 2d 3e 70 32 20 2d  rom += pOp->p2 -
9b90: 20 70 31 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69   p1;.    }.#endi
9ba0: 66 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72 61  f.    Deephemera
9bb0: 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 20 20 20 20  lize(pOut);.    
9bc0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
9bd0: 32 2b 2b 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  2++, pOut);.    
9be0: 70 49 6e 31 2b 2b 3b 0a 20 20 20 20 70 4f 75 74  pIn1++;.    pOut
9bf0: 2b 2b 3b 0a 20 20 7d 77 68 69 6c 65 28 20 2d 2d  ++;.  }while( --
9c00: 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  n );.  break;.}.
9c10: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 70 79  ./* Opcode: Copy
9c20: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
9c30: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 40   Synopsis: r[P2@
9c40: 50 33 2b 31 5d 3d 72 5b 50 31 40 50 33 2b 31 5d  P3+1]=r[P1@P3+1]
9c50: 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 63 6f  .**.** Make a co
9c60: 70 79 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  py of registers 
9c70: 50 31 2e 2e 50 31 2b 50 33 20 69 6e 74 6f 20 72  P1..P1+P3 into r
9c80: 65 67 69 73 74 65 72 73 20 50 32 2e 2e 50 32 2b  egisters P2..P2+
9c90: 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  P3..**.** This i
9ca0: 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73  nstruction makes
9cb0: 20 61 20 64 65 65 70 20 63 6f 70 79 20 6f 66 20   a deep copy of 
9cc0: 74 68 65 20 76 61 6c 75 65 2e 20 20 41 20 64 75  the value.  A du
9cd0: 70 6c 69 63 61 74 65 0a 2a 2a 20 69 73 20 6d 61  plicate.** is ma
9ce0: 64 65 20 6f 66 20 61 6e 79 20 73 74 72 69 6e 67  de of any string
9cf0: 20 6f 72 20 62 6c 6f 62 20 63 6f 6e 73 74 61 6e   or blob constan
9d00: 74 2e 20 20 53 65 65 20 61 6c 73 6f 20 4f 50 5f  t.  See also OP_
9d10: 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f  SCopy..*/.case O
9d20: 50 5f 43 6f 70 79 3a 20 7b 0a 20 20 69 6e 74 20  P_Copy: {.  int 
9d30: 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70  n;..  n = pOp->p
9d40: 33 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  3;.  pIn1 = &aMe
9d50: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f  m[pOp->p1];.  pO
9d60: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
9d70: 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p2];.  assert( p
9d80: 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 77  Out!=pIn1 );.  w
9d90: 68 69 6c 65 28 20 31 20 29 7b 0a 20 20 20 20 73  hile( 1 ){.    s
9da0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
9db0: 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70  llowCopy(pOut, p
9dc0: 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b  In1, MEM_Ephem);
9dd0: 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c  .    Deephemeral
9de0: 69 7a 65 28 70 4f 75 74 29 3b 0a 23 69 66 64 65  ize(pOut);.#ifde
9df0: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
9e00: 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46     pOut->pScopyF
9e10: 72 6f 6d 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a  rom = 0;.#endif.
9e20: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
9e30: 43 45 28 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e  CE(pOp->p2+pOp->
9e40: 70 33 2d 6e 2c 20 70 4f 75 74 29 3b 0a 20 20 20  p3-n, pOut);.   
9e50: 20 69 66 28 20 28 6e 2d 2d 29 3d 3d 30 20 29 20   if( (n--)==0 ) 
9e60: 62 72 65 61 6b 3b 0a 20 20 20 20 70 4f 75 74 2b  break;.    pOut+
9e70: 2b 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20  +;.    pIn1++;. 
9e80: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
9e90: 2a 20 4f 70 63 6f 64 65 3a 20 53 43 6f 70 79 20  * Opcode: SCopy 
9ea0: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
9eb0: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
9ec0: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20  [P1].**.** Make 
9ed0: 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f  a shallow copy o
9ee0: 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 6e  f register P1 in
9ef0: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
9f00: 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
9f10: 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 73  uction makes a s
9f20: 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 74  hallow copy of t
9f30: 68 65 20 76 61 6c 75 65 2e 20 20 49 66 20 74 68  he value.  If th
9f40: 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 61 20  e value.** is a 
9f50: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 2c 20  string or blob, 
9f60: 74 68 65 6e 20 74 68 65 20 63 6f 70 79 20 69 73  then the copy is
9f70: 20 6f 6e 6c 79 20 61 20 70 6f 69 6e 74 65 72 20   only a pointer 
9f80: 74 6f 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e  to the.** origin
9f90: 61 6c 20 61 6e 64 20 68 65 6e 63 65 20 69 66 20  al and hence if 
9fa0: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 63 68 61  the original cha
9fb0: 6e 67 65 73 20 73 6f 20 77 69 6c 6c 20 74 68 65  nges so will the
9fc0: 20 63 6f 70 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c   copy..** Worse,
9fd0: 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c   if the original
9fe0: 20 69 73 20 64 65 61 6c 6c 6f 63 61 74 65 64 2c   is deallocated,
9ff0: 20 74 68 65 20 63 6f 70 79 20 62 65 63 6f 6d 65   the copy become
a000: 73 20 69 6e 76 61 6c 69 64 2e 0a 2a 2a 20 54 68  s invalid..** Th
a010: 75 73 20 74 68 65 20 70 72 6f 67 72 61 6d 20 6d  us the program m
a020: 75 73 74 20 67 75 61 72 61 6e 74 65 65 20 74 68  ust guarantee th
a030: 61 74 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  at the original 
a040: 77 69 6c 6c 20 6e 6f 74 20 63 68 61 6e 67 65 0a  will not change.
a050: 2a 2a 20 64 75 72 69 6e 67 20 74 68 65 20 6c 69  ** during the li
a060: 66 65 74 69 6d 65 20 6f 66 20 74 68 65 20 63 6f  fetime of the co
a070: 70 79 2e 20 20 55 73 65 20 4f 50 5f 43 6f 70 79  py.  Use OP_Copy
a080: 20 74 6f 20 6d 61 6b 65 20 61 20 63 6f 6d 70 6c   to make a compl
a090: 65 74 65 0a 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a  ete.** copy..*/.
a0a0: 63 61 73 65 20 4f 50 5f 53 43 6f 70 79 3a 20 7b  case OP_SCopy: {
a0b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
a0c0: 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  ut2 */.  pIn1 = 
a0d0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
a0e0: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
a0f0: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
a100: 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b  t( pOut!=pIn1 );
a110: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
a120: 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75  mShallowCopy(pOu
a130: 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68  t, pIn1, MEM_Eph
a140: 65 6d 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  em);.#ifdef SQLI
a150: 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70  TE_DEBUG.  if( p
a160: 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3d  Out->pScopyFrom=
a170: 3d 30 20 29 20 70 4f 75 74 2d 3e 70 53 63 6f 70  =0 ) pOut->pScop
a180: 79 46 72 6f 6d 20 3d 20 70 49 6e 31 3b 0a 23 65  yFrom = pIn1;.#e
a190: 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ndif.  break;.}.
a1a0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 43  ./* Opcode: IntC
a1b0: 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  opy P1 P2 * * *.
a1c0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
a1d0: 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54  2]=r[P1].**.** T
a1e0: 72 61 6e 73 66 65 72 20 74 68 65 20 69 6e 74 65  ransfer the inte
a1f0: 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20 69  ger value held i
a200: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 6e  n register P1 in
a210: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
a220: 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 6e  **.** This is an
a230: 20 6f 70 74 69 6d 69 7a 65 64 20 76 65 72 73 69   optimized versi
a240: 6f 6e 20 6f 66 20 53 43 6f 70 79 20 74 68 61 74  on of SCopy that
a250: 20 77 6f 72 6b 73 20 6f 6e 6c 79 20 66 6f 72 20   works only for 
a260: 69 6e 74 65 67 65 72 0a 2a 2a 20 76 61 6c 75 65  integer.** value
a270: 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  s..*/.case OP_In
a280: 74 43 6f 70 79 3a 20 7b 20 20 20 20 20 20 20 20  tCopy: {        
a290: 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
a2a0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
a2b0: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
a2c0: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
a2d0: 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a   MEM_Int)!=0 );.
a2e0: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
a2f0: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74  Op->p2];.  sqlit
a300: 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
a310: 34 28 70 4f 75 74 2c 20 70 49 6e 31 2d 3e 75 2e  4(pOut, pIn1->u.
a320: 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  i);.  break;.}..
a330: 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 75 6c  /* Opcode: Resul
a340: 74 52 6f 77 20 50 31 20 50 32 20 2a 20 2a 20 2a  tRow P1 P2 * * *
a350: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6f 75  .** Synopsis: ou
a360: 74 70 75 74 3d 72 5b 50 31 40 50 32 5d 0a 2a 2a  tput=r[P1@P2].**
a370: 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72  .** The register
a380: 73 20 50 31 20 74 68 72 6f 75 67 68 20 50 31 2b  s P1 through P1+
a390: 50 32 2d 31 20 63 6f 6e 74 61 69 6e 20 61 20 73  P2-1 contain a s
a3a0: 69 6e 67 6c 65 20 72 6f 77 20 6f 66 0a 2a 2a 20  ingle row of.** 
a3b0: 72 65 73 75 6c 74 73 2e 20 54 68 69 73 20 6f 70  results. This op
a3c0: 63 6f 64 65 20 63 61 75 73 65 73 20 74 68 65 20  code causes the 
a3d0: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 63  sqlite3_step() c
a3e0: 61 6c 6c 20 74 6f 20 74 65 72 6d 69 6e 61 74 65  all to terminate
a3f0: 0a 2a 2a 20 77 69 74 68 20 61 6e 20 53 51 4c 49  .** with an SQLI
a400: 54 45 5f 52 4f 57 20 72 65 74 75 72 6e 20 63 6f  TE_ROW return co
a410: 64 65 20 61 6e 64 20 69 74 20 73 65 74 73 20 75  de and it sets u
a420: 70 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74  p the sqlite3_st
a430: 6d 74 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20  mt.** structure 
a440: 74 6f 20 70 72 6f 76 69 64 65 20 61 63 63 65 73  to provide acces
a450: 73 20 74 6f 20 74 68 65 20 72 28 50 31 29 2e 2e  s to the r(P1)..
a460: 72 28 50 31 2b 50 32 2d 31 29 20 76 61 6c 75 65  r(P1+P2-1) value
a470: 73 20 61 73 0a 2a 2a 20 74 68 65 20 72 65 73 75  s as.** the resu
a480: 6c 74 20 72 6f 77 2e 0a 2a 2f 0a 63 61 73 65 20  lt row..*/.case 
a490: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 3a 20 7b 0a  OP_ResultRow: {.
a4a0: 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 69    Mem *pMem;.  i
a4b0: 6e 74 20 69 3b 0a 20 20 61 73 73 65 72 74 28 20  nt i;.  assert( 
a4c0: 70 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3d 3d 70  p->nResColumn==p
a4d0: 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 61 73 73 65  Op->p2 );.  asse
a4e0: 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b  rt( pOp->p1>0 );
a4f0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
a500: 70 31 2b 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e  p1+pOp->p2<=(p->
a510: 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
a520: 73 6f 72 29 2b 31 20 29 3b 0a 0a 23 69 66 6e 64  sor)+1 );..#ifnd
a530: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
a540: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
a550: 0a 20 20 2f 2a 20 52 75 6e 20 74 68 65 20 70 72  .  /* Run the pr
a560: 6f 67 72 65 73 73 20 63 6f 75 6e 74 65 72 20 6a  ogress counter j
a570: 75 73 74 20 62 65 66 6f 72 65 20 72 65 74 75 72  ust before retur
a580: 6e 69 6e 67 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  ning..  */.  if(
a590: 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d   db->xProgress!=
a5a0: 30 0a 20 20 20 26 26 20 6e 56 6d 53 74 65 70 3e  0.   && nVmStep>
a5b0: 3d 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 0a  =nProgressLimit.
a5c0: 20 20 20 26 26 20 64 62 2d 3e 78 50 72 6f 67 72     && db->xProgr
a5d0: 65 73 73 28 64 62 2d 3e 70 50 72 6f 67 72 65 73  ess(db->pProgres
a5e0: 73 41 72 67 29 21 3d 30 0a 20 20 29 7b 0a 20 20  sArg)!=0.  ){.  
a5f0: 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e    rc = SQLITE_IN
a600: 54 45 52 52 55 50 54 3b 0a 20 20 20 20 67 6f 74  TERRUPT;.    got
a610: 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
a620: 72 72 6f 72 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  rror;.  }.#endif
a630: 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73 20 73  ..  /* If this s
a640: 74 61 74 65 6d 65 6e 74 20 68 61 73 20 76 69 6f  tatement has vio
a650: 6c 61 74 65 64 20 69 6d 6d 65 64 69 61 74 65 20  lated immediate 
a660: 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
a670: 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20 20 2a 2a  traints, do.  **
a680: 20 6e 6f 74 20 72 65 74 75 72 6e 20 74 68 65 20   not return the 
a690: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 6d  number of rows m
a6a0: 6f 64 69 66 69 65 64 2e 20 41 6e 64 20 64 6f 20  odified. And do 
a6b0: 6e 6f 74 20 52 45 4c 45 41 53 45 20 74 68 65 20  not RELEASE the 
a6c0: 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a 2a 20 74  statement.  ** t
a6d0: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 74 20 6e  ransaction. It n
a6e0: 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65  eeds to be rolle
a6f0: 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20 20 69 66  d back.  */.  if
a700: 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 28 72 63  ( SQLITE_OK!=(rc
a710: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68   = sqlite3VdbeCh
a720: 65 63 6b 46 6b 28 70 2c 20 30 29 29 20 29 7b 0a  eckFk(p, 0)) ){.
a730: 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
a740: 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f 75  flags&SQLITE_Cou
a750: 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20 20 61 73  ntRows );.    as
a760: 73 65 72 74 28 20 70 2d 3e 75 73 65 73 53 74 6d  sert( p->usesStm
a770: 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20 20 20 20  tJournal );.    
a780: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
a790: 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20  o_error;.  }..  
a7a0: 2f 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  /* If the SQLITE
a7b0: 5f 43 6f 75 6e 74 52 6f 77 73 20 66 6c 61 67 20  _CountRows flag 
a7c0: 69 73 20 73 65 74 20 69 6e 20 73 71 6c 69 74 65  is set in sqlite
a7d0: 33 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68  3.flags mask, th
a7e0: 65 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20 73 74 61  en .  ** DML sta
a7f0: 74 65 6d 65 6e 74 73 20 69 6e 76 6f 6b 65 20 74  tements invoke t
a800: 68 69 73 20 6f 70 63 6f 64 65 20 74 6f 20 72 65  his opcode to re
a810: 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  turn the number 
a820: 6f 66 20 72 6f 77 73 20 0a 20 20 2a 2a 20 6d 6f  of rows .  ** mo
a830: 64 69 66 69 65 64 20 74 6f 20 74 68 65 20 75 73  dified to the us
a840: 65 72 2e 20 54 68 69 73 20 69 73 20 74 68 65 20  er. This is the 
a850: 6f 6e 6c 79 20 77 61 79 20 74 68 61 74 20 61 20  only way that a 
a860: 56 4d 20 74 68 61 74 0a 20 20 2a 2a 20 6f 70 65  VM that.  ** ope
a870: 6e 73 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74  ns a statement t
a880: 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 69  ransaction may i
a890: 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64  nvoke this opcod
a8a0: 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20  e..  **.  ** In 
a8b0: 63 61 73 65 20 74 68 69 73 20 69 73 20 73 75 63  case this is suc
a8c0: 68 20 61 20 73 74 61 74 65 6d 65 6e 74 2c 20 63  h a statement, c
a8d0: 6c 6f 73 65 20 61 6e 79 20 73 74 61 74 65 6d 65  lose any stateme
a8e0: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20  nt transaction. 
a8f0: 20 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 74 68   ** opened by th
a900: 69 73 20 56 4d 20 62 65 66 6f 72 65 20 72 65 74  is VM before ret
a910: 75 72 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c 20 74  urning control t
a920: 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68 69 73  o the user. This
a930: 20 69 73 20 74 6f 0a 20 20 2a 2a 20 65 6e 73 75   is to.  ** ensu
a940: 72 65 20 74 68 61 74 20 73 74 61 74 65 6d 65 6e  re that statemen
a950: 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61  t-transactions a
a960: 72 65 20 61 6c 77 61 79 73 20 6e 65 73 74 65 64  re always nested
a970: 2c 20 6e 6f 74 20 6f 76 65 72 6c 61 70 70 69 6e  , not overlappin
a980: 67 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 6f  g..  ** If the o
a990: 70 65 6e 20 73 74 61 74 65 6d 65 6e 74 2d 74 72  pen statement-tr
a9a0: 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74  ansaction is not
a9b0: 20 63 6c 6f 73 65 64 20 68 65 72 65 2c 20 74 68   closed here, th
a9c0: 65 6e 20 74 68 65 20 75 73 65 72 0a 20 20 2a 2a  en the user.  **
a9d0: 20 6d 61 79 20 73 74 65 70 20 61 6e 6f 74 68 65   may step anothe
a9e0: 72 20 56 4d 20 74 68 61 74 20 6f 70 65 6e 73 20  r VM that opens 
a9f0: 69 74 73 20 6f 77 6e 20 73 74 61 74 65 6d 65 6e  its own statemen
aa00: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 54  t transaction. T
aa10: 68 69 73 0a 20 20 2a 2a 20 6d 61 79 20 6c 65 61  his.  ** may lea
aa20: 64 20 74 6f 20 6f 76 65 72 6c 61 70 70 69 6e 67  d to overlapping
aa30: 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
aa40: 61 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20  actions..  **.  
aa50: 2a 2a 20 54 68 65 20 73 74 61 74 65 6d 65 6e 74  ** The statement
aa60: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
aa70: 6e 65 76 65 72 20 61 20 74 6f 70 2d 6c 65 76 65  never a top-leve
aa80: 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20  l transaction.  
aa90: 48 65 6e 63 65 0a 20 20 2a 2a 20 74 68 65 20 52  Hence.  ** the R
aaa0: 45 4c 45 41 53 45 20 63 61 6c 6c 20 62 65 6c 6f  ELEASE call belo
aab0: 77 20 63 61 6e 20 6e 65 76 65 72 20 66 61 69 6c  w can never fail
aac0: 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ..  */.  assert(
aad0: 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d   p->iStatement==
aae0: 30 20 7c 7c 20 64 62 2d 3e 66 6c 61 67 73 26 53  0 || db->flags&S
aaf0: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
ab00: 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
ab10: 33 56 64 62 65 43 6c 6f 73 65 53 74 61 74 65 6d  3VdbeCloseStatem
ab20: 65 6e 74 28 70 2c 20 53 41 56 45 50 4f 49 4e 54  ent(p, SAVEPOINT
ab30: 5f 52 45 4c 45 41 53 45 29 3b 0a 20 20 61 73 73  _RELEASE);.  ass
ab40: 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
ab50: 4f 4b 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76 61  OK );..  /* Inva
ab60: 6c 69 64 61 74 65 20 61 6c 6c 20 65 70 68 65 6d  lidate all ephem
ab70: 65 72 61 6c 20 63 75 72 73 6f 72 20 72 6f 77 20  eral cursor row 
ab80: 63 61 63 68 65 73 20 2a 2f 0a 20 20 70 2d 3e 63  caches */.  p->c
ab90: 61 63 68 65 43 74 72 20 3d 20 28 70 2d 3e 63 61  acheCtr = (p->ca
aba0: 63 68 65 43 74 72 20 2b 20 32 29 7c 31 3b 0a 0a  cheCtr + 2)|1;..
abb0: 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74    /* Make sure t
abc0: 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68  he results of th
abd0: 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 61 72  e current row ar
abe0: 65 20 5c 30 30 30 20 74 65 72 6d 69 6e 61 74 65  e \000 terminate
abf0: 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61 76 65 20  d.  ** and have 
ac00: 61 6e 20 61 73 73 69 67 6e 65 64 20 74 79 70 65  an assigned type
ac10: 2e 20 20 54 68 65 20 72 65 73 75 6c 74 73 20 61  .  The results a
ac20: 72 65 20 64 65 2d 65 70 68 65 6d 65 72 61 6c 69  re de-ephemerali
ac30: 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61 20 73 69  zed as.  ** a si
ac40: 64 65 20 65 66 66 65 63 74 2e 0a 20 20 2a 2f 0a  de effect..  */.
ac50: 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70 52 65 73    pMem = p->pRes
ac60: 75 6c 74 53 65 74 20 3d 20 26 61 4d 65 6d 5b 70  ultSet = &aMem[p
ac70: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 69  Op->p1];.  for(i
ac80: 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32 3b 20 69  =0; i<pOp->p2; i
ac90: 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ++){.    assert(
aca0: 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 70 4d 65   memIsValid(&pMe
acb0: 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20 44 65 65  m[i]) );.    Dee
acc0: 70 68 65 6d 65 72 61 6c 69 7a 65 28 26 70 4d 65  phemeralize(&pMe
acd0: 6d 5b 69 5d 29 3b 0a 20 20 20 20 61 73 73 65 72  m[i]);.    asser
ace0: 74 28 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67  t( (pMem[i].flag
acf0: 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d 29 3d 3d  s & MEM_Ephem)==
ad00: 30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c  0.            ||
ad10: 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20   (pMem[i].flags 
ad20: 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
ad30: 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  lob))==0 );.    
ad40: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75  sqlite3VdbeMemNu
ad50: 6c 54 65 72 6d 69 6e 61 74 65 28 26 70 4d 65 6d  lTerminate(&pMem
ad60: 5b 69 5d 29 3b 0a 20 20 20 20 52 45 47 49 53 54  [i]);.    REGIST
ad70: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
ad80: 2b 69 2c 20 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20  +i, &pMem[i]);. 
ad90: 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c   }.  if( db->mal
ada0: 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f  locFailed ) goto
adb0: 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20 69 66 28 20   no_mem;..  if( 
adc0: 64 62 2d 3e 6d 54 72 61 63 65 20 26 20 53 51 4c  db->mTrace & SQL
add0: 49 54 45 5f 54 52 41 43 45 5f 52 4f 57 20 29 7b  ITE_TRACE_ROW ){
ade0: 0a 20 20 20 20 64 62 2d 3e 78 54 72 61 63 65 28  .    db->xTrace(
adf0: 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 52 4f 57  SQLITE_TRACE_ROW
ae00: 2c 20 64 62 2d 3e 70 54 72 61 63 65 41 72 67 2c  , db->pTraceArg,
ae10: 20 70 2c 20 30 29 3b 0a 20 20 7d 0a 0a 20 20 2f   p, 0);.  }..  /
ae20: 2a 20 52 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  * Return SQLITE_
ae30: 52 4f 57 0a 20 20 2a 2f 0a 20 20 70 2d 3e 70 63  ROW.  */.  p->pc
ae40: 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61   = (int)(pOp - a
ae50: 4f 70 29 20 2b 20 31 3b 0a 20 20 72 63 20 3d 20  Op) + 1;.  rc = 
ae60: 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20 67 6f  SQLITE_ROW;.  go
ae70: 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
ae80: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
ae90: 6e 63 61 74 20 50 31 20 50 32 20 50 33 20 2a 20  ncat P1 P2 P3 * 
aea0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
aeb0: 5b 50 33 5d 3d 72 5b 50 32 5d 2b 72 5b 50 31 5d  [P3]=r[P2]+r[P1]
aec0: 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 74  .**.** Add the t
aed0: 65 78 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ext in register 
aee0: 50 31 20 6f 6e 74 6f 20 74 68 65 20 65 6e 64 20  P1 onto the end 
aef0: 6f 66 20 74 68 65 20 74 65 78 74 20 69 6e 0a 2a  of the text in.*
af00: 2a 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  * register P2 an
af10: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
af20: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
af30: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
af40: 74 68 65 20 50 31 20 6f 72 20 50 32 20 74 65 78  the P1 or P2 tex
af50: 74 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20  t are NULL then 
af60: 73 74 6f 72 65 20 4e 55 4c 4c 20 69 6e 20 50 33  store NULL in P3
af70: 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20 3d 20 50  ..**.**   P3 = P
af80: 32 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74  2 || P1.**.** It
af90: 20 69 73 20 69 6c 6c 65 67 61 6c 20 66 6f 72 20   is illegal for 
afa0: 50 31 20 61 6e 64 20 50 33 20 74 6f 20 62 65 20  P1 and P3 to be 
afb0: 74 68 65 20 73 61 6d 65 20 72 65 67 69 73 74 65  the same registe
afc0: 72 2e 20 53 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a  r. Sometimes,.**
afd0: 20 69 66 20 50 33 20 69 73 20 74 68 65 20 73 61   if P3 is the sa
afe0: 6d 65 20 72 65 67 69 73 74 65 72 20 61 73 20 50  me register as P
aff0: 32 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  2, the implement
b000: 61 74 69 6f 6e 20 69 73 20 61 62 6c 65 0a 2a 2a  ation is able.**
b010: 20 74 6f 20 61 76 6f 69 64 20 61 20 6d 65 6d 63   to avoid a memc
b020: 70 79 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  py()..*/.case OP
b030: 5f 43 6f 6e 63 61 74 3a 20 7b 20 20 20 20 20 20  _Concat: {      
b040: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
b050: 54 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e 31 2c 20  TK_CONCAT, in1, 
b060: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69  in2, out3 */.  i
b070: 36 34 20 6e 42 79 74 65 3b 0a 0a 20 20 70 49 6e  64 nByte;..  pIn
b080: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
b090: 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1];.  pIn2 = &aM
b0a0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70  em[pOp->p2];.  p
b0b0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
b0c0: 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p3];.  assert( 
b0d0: 70 49 6e 31 21 3d 70 4f 75 74 20 29 3b 0a 20 20  pIn1!=pOut );.  
b0e0: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
b0f0: 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20   | pIn2->flags) 
b100: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
b110: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
b120: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
b130: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
b140: 69 66 28 20 45 78 70 61 6e 64 42 6c 6f 62 28 70  if( ExpandBlob(p
b150: 49 6e 31 29 20 7c 7c 20 45 78 70 61 6e 64 42 6c  In1) || ExpandBl
b160: 6f 62 28 70 49 6e 32 29 20 29 20 67 6f 74 6f 20  ob(pIn2) ) goto 
b170: 6e 6f 5f 6d 65 6d 3b 0a 20 20 53 74 72 69 6e 67  no_mem;.  String
b180: 69 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69  ify(pIn1, encodi
b190: 6e 67 29 3b 0a 20 20 53 74 72 69 6e 67 69 66 79  ng);.  Stringify
b1a0: 28 70 49 6e 32 2c 20 65 6e 63 6f 64 69 6e 67 29  (pIn2, encoding)
b1b0: 3b 0a 20 20 6e 42 79 74 65 20 3d 20 70 49 6e 31  ;.  nByte = pIn1
b1c0: 2d 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20  ->n + pIn2->n;. 
b1d0: 20 69 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61   if( nByte>db->a
b1e0: 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
b1f0: 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
b200: 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
b210: 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65    }.  if( sqlite
b220: 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75  3VdbeMemGrow(pOu
b230: 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2b 32 2c  t, (int)nByte+2,
b240: 20 70 4f 75 74 3d 3d 70 49 6e 32 29 20 29 7b 0a   pOut==pIn2) ){.
b250: 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
b260: 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70  .  }.  MemSetTyp
b270: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
b280: 53 74 72 29 3b 0a 20 20 69 66 28 20 70 4f 75 74  Str);.  if( pOut
b290: 21 3d 70 49 6e 32 20 29 7b 0a 20 20 20 20 6d 65  !=pIn2 ){.    me
b2a0: 6d 63 70 79 28 70 4f 75 74 2d 3e 7a 2c 20 70 49  mcpy(pOut->z, pI
b2b0: 6e 32 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b  n2->z, pIn2->n);
b2c0: 0a 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70  .  }.  memcpy(&p
b2d0: 4f 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c  Out->z[pIn2->n],
b2e0: 20 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e   pIn1->z, pIn1->
b2f0: 6e 29 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42  n);.  pOut->z[nB
b300: 79 74 65 5d 3d 30 3b 0a 20 20 70 4f 75 74 2d 3e  yte]=0;.  pOut->
b310: 7a 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a  z[nByte+1] = 0;.
b320: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d    pOut->flags |=
b330: 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75   MEM_Term;.  pOu
b340: 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74  t->n = (int)nByt
b350: 65 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d  e;.  pOut->enc =
b360: 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44   encoding;.  UPD
b370: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
b380: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
b390: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
b3a0: 64 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  dd P1 P2 P3 * *.
b3b0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
b3c0: 33 5d 3d 72 5b 50 31 5d 2b 72 5b 50 32 5d 0a 2a  3]=r[P1]+r[P2].*
b3d0: 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 76 61 6c  *.** Add the val
b3e0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
b3f0: 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69  1 to the value i
b400: 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  n register P2.**
b410: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
b420: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
b430: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
b440: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
b450: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
b460: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
b470: 64 65 3a 20 4d 75 6c 74 69 70 6c 79 20 50 31 20  de: Multiply P1 
b480: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
b490: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50  opsis: r[P3]=r[P
b4a0: 31 5d 2a 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 0a 2a  1]*r[P2].**.**.*
b4b0: 2a 20 4d 75 6c 74 69 70 6c 79 20 74 68 65 20 76  * Multiply the v
b4c0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
b4d0: 20 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65   P1 by the value
b4e0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a   in register P2.
b4f0: 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  ** and store the
b500: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
b510: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
b520: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
b530: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
b540: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
b550: 63 6f 64 65 3a 20 53 75 62 74 72 61 63 74 20 50  code: Subtract P
b560: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
b570: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72  ynopsis: r[P3]=r
b580: 5b 50 32 5d 2d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P2]-r[P1].**.**
b590: 20 53 75 62 74 72 61 63 74 20 74 68 65 20 76 61   Subtract the va
b5a0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
b5b0: 50 31 20 66 72 6f 6d 20 74 68 65 20 76 61 6c 75  P1 from the valu
b5c0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
b5d0: 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68  .** and store th
b5e0: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
b5f0: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
b600: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
b610: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
b620: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
b630: 70 63 6f 64 65 3a 20 44 69 76 69 64 65 20 50 31  pcode: Divide P1
b640: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
b650: 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b  nopsis: r[P3]=r[
b660: 50 32 5d 2f 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  P2]/r[P1].**.** 
b670: 44 69 76 69 64 65 20 74 68 65 20 76 61 6c 75 65  Divide the value
b680: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
b690: 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  by the value in 
b6a0: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61  register P2.** a
b6b0: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
b6c0: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
b6d0: 50 33 20 28 50 33 3d 50 32 2f 50 31 29 2e 20 49  P3 (P3=P2/P1). I
b6e0: 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 0a  f the value in .
b6f0: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 69  ** register P1 i
b700: 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65  s zero, then the
b710: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
b720: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
b730: 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68   is .** NULL, th
b740: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
b750: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
b760: 52 65 6d 61 69 6e 64 65 72 20 50 31 20 50 32 20  Remainder P1 P2 
b770: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
b780: 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 25  is: r[P3]=r[P2]%
b790: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70  r[P1].**.** Comp
b7a0: 75 74 65 20 74 68 65 20 72 65 6d 61 69 6e 64 65  ute the remainde
b7b0: 72 20 61 66 74 65 72 20 69 6e 74 65 67 65 72 20  r after integer 
b7c0: 72 65 67 69 73 74 65 72 20 50 32 20 69 73 20 64  register P2 is d
b7d0: 69 76 69 64 65 64 20 62 79 20 0a 2a 2a 20 72 65  ivided by .** re
b7e0: 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 73 74  gister P1 and st
b7f0: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
b800: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 0a  n register P3. .
b810: 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
b820: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
b830: 73 20 7a 65 72 6f 20 74 68 65 20 72 65 73 75 6c  s zero the resul
b840: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66  t is NULL..** If
b850: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
b860: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
b870: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
b880: 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20  case OP_Add:    
b890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b8a0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 50 4c 55  * same as TK_PLU
b8b0: 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  S, in1, in2, out
b8c0: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 75 62  3 */.case OP_Sub
b8d0: 74 72 61 63 74 3a 20 20 20 20 20 20 20 20 20 20  tract:          
b8e0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
b8f0: 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c 20 69 6e  K_MINUS, in1, in
b900: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
b910: 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20  OP_Multiply:    
b920: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
b930: 65 20 61 73 20 54 4b 5f 53 54 41 52 2c 20 69 6e  e as TK_STAR, in
b940: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
b950: 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20  case OP_Divide: 
b960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b970: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 4c 41  * same as TK_SLA
b980: 53 48 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  SH, in1, in2, ou
b990: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  t3 */.case OP_Re
b9a0: 6d 61 69 6e 64 65 72 3a 20 7b 20 20 20 20 20 20  mainder: {      
b9b0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
b9c0: 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20 69 6e 32  TK_REM, in1, in2
b9d0: 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 63 68 61 72  , out3 */.  char
b9e0: 20 62 49 6e 74 69 6e 74 3b 20 20 20 2f 2a 20 53   bIntint;   /* S
b9f0: 74 61 72 74 65 64 20 6f 75 74 20 61 73 20 74 77  tarted out as tw
ba00: 6f 20 69 6e 74 65 67 65 72 20 6f 70 65 72 61 6e  o integer operan
ba10: 64 73 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67  ds */.  u16 flag
ba20: 73 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d 62 69  s;      /* Combi
ba30: 6e 65 64 20 4d 45 4d 5f 2a 20 66 6c 61 67 73 20  ned MEM_* flags 
ba40: 66 72 6f 6d 20 62 6f 74 68 20 69 6e 70 75 74 73  from both inputs
ba50: 20 2a 2f 0a 20 20 75 31 36 20 74 79 70 65 31 3b   */.  u16 type1;
ba60: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 65 72 69 63        /* Numeric
ba70: 20 74 79 70 65 20 6f 66 20 6c 65 66 74 20 6f 70   type of left op
ba80: 65 72 61 6e 64 20 2a 2f 0a 20 20 75 31 36 20 74  erand */.  u16 t
ba90: 79 70 65 32 3b 20 20 20 20 20 20 2f 2a 20 4e 75  ype2;      /* Nu
baa0: 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20 72 69  meric type of ri
bab0: 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  ght operand */. 
bac0: 20 69 36 34 20 69 41 3b 20 20 20 20 20 20 20 20   i64 iA;        
bad0: 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75   /* Integer valu
bae0: 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e  e of left operan
baf0: 64 20 2a 2f 0a 20 20 69 36 34 20 69 42 3b 20 20  d */.  i64 iB;  
bb00: 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65         /* Intege
bb10: 72 20 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74  r value of right
bb20: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f   operand */.  do
bb30: 75 62 6c 65 20 72 41 3b 20 20 20 20 20 20 2f 2a  uble rA;      /*
bb40: 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 6c   Real value of l
bb50: 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  eft operand */. 
bb60: 20 64 6f 75 62 6c 65 20 72 42 3b 20 20 20 20 20   double rB;     
bb70: 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65 20 6f   /* Real value o
bb80: 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20  f right operand 
bb90: 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  */..  pIn1 = &aM
bba0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 74  em[pOp->p1];.  t
bbb0: 79 70 65 31 20 3d 20 6e 75 6d 65 72 69 63 54 79  ype1 = numericTy
bbc0: 70 65 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32  pe(pIn1);.  pIn2
bbd0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
bbe0: 5d 3b 0a 20 20 74 79 70 65 32 20 3d 20 6e 75 6d  ];.  type2 = num
bbf0: 65 72 69 63 54 79 70 65 28 70 49 6e 32 29 3b 0a  ericType(pIn2);.
bc00: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
bc10: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73  Op->p3];.  flags
bc20: 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c   = pIn1->flags |
bc30: 20 70 49 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20   pIn2->flags;.  
bc40: 69 66 28 20 28 66 6c 61 67 73 20 26 20 4d 45 4d  if( (flags & MEM
bc50: 5f 4e 75 6c 6c 29 21 3d 30 20 29 20 67 6f 74 6f  _Null)!=0 ) goto
bc60: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
bc70: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66  lt_is_null;.  if
bc80: 28 20 28 74 79 70 65 31 20 26 20 74 79 70 65 32  ( (type1 & type2
bc90: 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
bca0: 7b 0a 20 20 20 20 69 41 20 3d 20 70 49 6e 31 2d  {.    iA = pIn1-
bcb0: 3e 75 2e 69 3b 0a 20 20 20 20 69 42 20 3d 20 70  >u.i;.    iB = p
bcc0: 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 62 49  In2->u.i;.    bI
bcd0: 6e 74 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20 73  ntint = 1;.    s
bce0: 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
bcf0: 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65  de ){.      case
bd00: 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 69   OP_Add:       i
bd10: 66 28 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74  f( sqlite3AddInt
bd20: 36 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74  64(&iB,iA) ) got
bd30: 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61  o fp_math;  brea
bd40: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  k;.      case OP
bd50: 5f 53 75 62 74 72 61 63 74 3a 20 20 69 66 28 20  _Subtract:  if( 
bd60: 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28  sqlite3SubInt64(
bd70: 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66  &iB,iA) ) goto f
bd80: 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a  p_math;  break;.
bd90: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75        case OP_Mu
bda0: 6c 74 69 70 6c 79 3a 20 20 69 66 28 20 73 71 6c  ltiply:  if( sql
bdb0: 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 26 69 42  ite3MulInt64(&iB
bdc0: 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d  ,iA) ) goto fp_m
bdd0: 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20  ath;  break;.   
bde0: 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64     case OP_Divid
bdf0: 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28  e: {.        if(
be00: 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72   iA==0 ) goto ar
be10: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
be20: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20  is_null;.       
be30: 20 69 66 28 20 69 41 3d 3d 2d 31 20 26 26 20 69   if( iA==-1 && i
be40: 42 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36  B==SMALLEST_INT6
be50: 34 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68  4 ) goto fp_math
be60: 3b 0a 20 20 20 20 20 20 20 20 69 42 20 2f 3d 20  ;.        iB /= 
be70: 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  iA;.        brea
be80: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  k;.      }.     
be90: 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20   default: {.    
bea0: 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20      if( iA==0 ) 
beb0: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
bec0: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
bed0: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
bee0: 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20  -1 ) iA = 1;.   
bef0: 20 20 20 20 20 69 42 20 25 3d 20 69 41 3b 0a 20       iB %= iA;. 
bf00: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
bf10: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
bf20: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a  pOut->u.i = iB;.
bf30: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
bf40: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
bf50: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
bf60: 62 49 6e 74 69 6e 74 20 3d 20 30 3b 0a 66 70 5f  bIntint = 0;.fp_
bf70: 6d 61 74 68 3a 0a 20 20 20 20 72 41 20 3d 20 73  math:.    rA = s
bf80: 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61  qlite3VdbeRealVa
bf90: 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 20 20 72  lue(pIn1);.    r
bfa0: 42 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  B = sqlite3VdbeR
bfb0: 65 61 6c 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a  ealValue(pIn2);.
bfc0: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
bfd0: 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20  >opcode ){.     
bfe0: 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20   case OP_Add:   
bff0: 20 20 20 20 20 20 72 42 20 2b 3d 20 72 41 3b 20        rB += rA; 
c000: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
c010: 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72     case OP_Subtr
c020: 61 63 74 3a 20 20 20 20 72 42 20 2d 3d 20 72 41  act:    rB -= rA
c030: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
c040: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c       case OP_Mul
c050: 74 69 70 6c 79 3a 20 20 20 20 72 42 20 2a 3d 20  tiply:    rB *= 
c060: 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b  rA;       break;
c070: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44  .      case OP_D
c080: 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20  ivide: {.       
c090: 20 2f 2a 20 28 64 6f 75 62 6c 65 29 30 20 49 6e   /* (double)0 In
c0a0: 20 63 61 73 65 20 6f 66 20 53 51 4c 49 54 45 5f   case of SQLITE_
c0b0: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
c0c0: 49 4e 54 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20  INT... */.      
c0d0: 20 20 69 66 28 20 72 41 3d 3d 28 64 6f 75 62 6c    if( rA==(doubl
c0e0: 65 29 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68  e)0 ) goto arith
c0f0: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
c100: 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 72 42  null;.        rB
c110: 20 2f 3d 20 72 41 3b 0a 20 20 20 20 20 20 20 20   /= rA;.        
c120: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
c130: 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a       default: {.
c140: 20 20 20 20 20 20 20 20 69 41 20 3d 20 28 69 36          iA = (i6
c150: 34 29 72 41 3b 0a 20 20 20 20 20 20 20 20 69 42  4)rA;.        iB
c160: 20 3d 20 28 69 36 34 29 72 42 3b 0a 20 20 20 20   = (i64)rB;.    
c170: 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20      if( iA==0 ) 
c180: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
c190: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
c1a0: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
c1b0: 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20  -1 ) iA = 1;.   
c1c0: 20 20 20 20 20 72 42 20 3d 20 28 64 6f 75 62 6c       rB = (doubl
c1d0: 65 29 28 69 42 20 25 20 69 41 29 3b 0a 20 20 20  e)(iB % iA);.   
c1e0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
c1f0: 20 20 7d 0a 20 20 20 20 7d 0a 23 69 66 64 65 66    }.    }.#ifdef
c200: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
c210: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20  ATING_POINT.    
c220: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a  pOut->u.i = rB;.
c230: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
c240: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
c250: 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20 69 66 28  );.#else.    if(
c260: 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 72 42   sqlite3IsNaN(rB
c270: 29 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  ) ){.      goto 
c280: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
c290: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d  t_is_null;.    }
c2a0: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 72 20 3d  .    pOut->u.r =
c2b0: 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   rB;.    MemSetT
c2c0: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
c2d0: 4d 5f 52 65 61 6c 29 3b 0a 20 20 20 20 69 66 28  M_Real);.    if(
c2e0: 20 28 28 74 79 70 65 31 7c 74 79 70 65 32 29 26   ((type1|type2)&
c2f0: 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 26 26 20  MEM_Real)==0 && 
c300: 21 62 49 6e 74 69 6e 74 20 29 7b 0a 20 20 20 20  !bIntint ){.    
c310: 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74    sqlite3VdbeInt
c320: 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 4f 75  egerAffinity(pOu
c330: 74 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  t);.    }.#endif
c340: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 61  .  }.  break;..a
c350: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
c360: 5f 69 73 5f 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69  _is_null:.  sqli
c370: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
c380: 6c 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  l(pOut);.  break
c390: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
c3a0: 43 6f 6c 6c 53 65 71 20 50 31 20 2a 20 2a 20 50  CollSeq P1 * * P
c3b0: 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  4.**.** P4 is a 
c3c0: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 43 6f 6c  pointer to a Col
c3d0: 6c 53 65 71 20 73 74 72 75 63 74 2e 20 49 66 20  lSeq struct. If 
c3e0: 74 68 65 20 6e 65 78 74 20 63 61 6c 6c 20 74 6f  the next call to
c3f0: 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e   a user function
c400: 0a 2a 2a 20 6f 72 20 61 67 67 72 65 67 61 74 65  .** or aggregate
c410: 20 63 61 6c 6c 73 20 73 71 6c 69 74 65 33 47 65   calls sqlite3Ge
c420: 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 2c 20  tFuncCollSeq(), 
c430: 74 68 69 73 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  this collation s
c440: 65 71 75 65 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20  equence will.** 
c450: 62 65 20 72 65 74 75 72 6e 65 64 2e 20 54 68 69  be returned. Thi
c460: 73 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65  s is used by the
c470: 20 62 75 69 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c   built-in min(),
c480: 20 6d 61 78 28 29 20 61 6e 64 20 6e 75 6c 6c 69   max() and nulli
c490: 66 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73  f().** functions
c4a0: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73  ..**.** If P1 is
c4b0: 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
c4c0: 69 74 20 69 73 20 61 20 72 65 67 69 73 74 65 72  it is a register
c4d0: 20 74 68 61 74 20 61 20 73 75 62 73 65 71 75 65   that a subseque
c4e0: 6e 74 20 6d 69 6e 28 29 20 6f 72 0a 2a 2a 20 6d  nt min() or.** m
c4f0: 61 78 28 29 20 61 67 67 72 65 67 61 74 65 20 77  ax() aggregate w
c500: 69 6c 6c 20 73 65 74 20 74 6f 20 31 20 69 66 20  ill set to 1 if 
c510: 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20  the current row 
c520: 69 73 20 6e 6f 74 20 74 68 65 20 6d 69 6e 69 6d  is not the minim
c530: 75 6d 20 6f 72 0a 2a 2a 20 6d 61 78 69 6d 75 6d  um or.** maximum
c540: 2e 20 20 54 68 65 20 50 31 20 72 65 67 69 73 74  .  The P1 regist
c550: 65 72 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65  er is initialize
c560: 64 20 74 6f 20 30 20 62 79 20 74 68 69 73 20 69  d to 0 by this i
c570: 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
c580: 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20  * The interface 
c590: 75 73 65 64 20 62 79 20 74 68 65 20 69 6d 70 6c  used by the impl
c5a0: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  ementation of th
c5b0: 65 20 61 66 6f 72 65 6d 65 6e 74 69 6f 6e 65 64  e aforementioned
c5c0: 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f   functions.** to
c5d0: 20 72 65 74 72 69 65 76 65 20 74 68 65 20 63 6f   retrieve the co
c5e0: 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
c5f0: 20 73 65 74 20 62 79 20 74 68 69 73 20 6f 70 63   set by this opc
c600: 6f 64 65 20 69 73 20 6e 6f 74 20 61 76 61 69 6c  ode is not avail
c610: 61 62 6c 65 0a 2a 2a 20 70 75 62 6c 69 63 6c 79  able.** publicly
c620: 2e 20 20 4f 6e 6c 79 20 62 75 69 6c 74 2d 69 6e  .  Only built-in
c630: 20 66 75 6e 63 74 69 6f 6e 73 20 68 61 76 65 20   functions have 
c640: 61 63 63 65 73 73 20 74 6f 20 74 68 69 73 20 66  access to this f
c650: 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20  eature..*/.case 
c660: 4f 50 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20  OP_CollSeq: {.  
c670: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
c680: 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20  ype==P4_COLLSEQ 
c690: 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  );.  if( pOp->p1
c6a0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
c6b0: 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26  dbeMemSetInt64(&
c6c0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 30  aMem[pOp->p1], 0
c6d0: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
c6e0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 75  }../* Opcode: Fu
c6f0: 6e 63 74 69 6f 6e 30 20 50 31 20 50 32 20 50 33  nction0 P1 P2 P3
c700: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
c710: 69 73 3a 20 72 5b 50 33 5d 3d 66 75 6e 63 28 72  is: r[P3]=func(r
c720: 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 49  [P2@P5]).**.** I
c730: 6e 76 6f 6b 65 20 61 20 75 73 65 72 20 66 75 6e  nvoke a user fun
c740: 63 74 69 6f 6e 20 28 50 34 20 69 73 20 61 20 70  ction (P4 is a p
c750: 6f 69 6e 74 65 72 20 74 6f 20 61 20 46 75 6e 63  ointer to a Func
c760: 44 65 66 20 6f 62 6a 65 63 74 20 74 68 61 74 0a  Def object that.
c770: 2a 2a 20 64 65 66 69 6e 65 73 20 74 68 65 20 66  ** defines the f
c780: 75 6e 63 74 69 6f 6e 29 20 77 69 74 68 20 50 35  unction) with P5
c790: 20 61 72 67 75 6d 65 6e 74 73 20 74 61 6b 65 6e   arguments taken
c7a0: 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
c7b0: 32 20 61 6e 64 0a 2a 2a 20 73 75 63 63 65 73 73  2 and.** success
c7c0: 6f 72 73 2e 20 20 54 68 65 20 72 65 73 75 6c 74  ors.  The result
c7d0: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
c7e0: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
c7f0: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 52 65  gister P3..** Re
c800: 67 69 73 74 65 72 20 50 33 20 6d 75 73 74 20 6e  gister P3 must n
c810: 6f 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65  ot be one of the
c820: 20 66 75 6e 63 74 69 6f 6e 20 69 6e 70 75 74 73   function inputs
c830: 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  ..**.** P1 is a 
c840: 33 32 2d 62 69 74 20 62 69 74 6d 61 73 6b 20 69  32-bit bitmask i
c850: 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74 68 65  ndicating whethe
c860: 72 20 6f 72 20 6e 6f 74 20 65 61 63 68 20 61 72  r or not each ar
c870: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 0a 2a  gument to the .*
c880: 2a 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 64  * function was d
c890: 65 74 65 72 6d 69 6e 65 64 20 74 6f 20 62 65 20  etermined to be 
c8a0: 63 6f 6e 73 74 61 6e 74 20 61 74 20 63 6f 6d 70  constant at comp
c8b0: 69 6c 65 20 74 69 6d 65 2e 20 49 66 20 74 68 65  ile time. If the
c8c0: 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65   first.** argume
c8d0: 6e 74 20 77 61 73 20 63 6f 6e 73 74 61 6e 74 20  nt was constant 
c8e0: 74 68 65 6e 20 62 69 74 20 30 20 6f 66 20 50 31  then bit 0 of P1
c8f0: 20 69 73 20 73 65 74 2e 20 54 68 69 73 20 69 73   is set. This is
c900: 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69   used to determi
c910: 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6d 65  ne.** whether me
c920: 74 61 20 64 61 74 61 20 61 73 73 6f 63 69 61 74  ta data associat
c930: 65 64 20 77 69 74 68 20 61 20 75 73 65 72 20 66  ed with a user f
c940: 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74  unction argument
c950: 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 73 71   using the.** sq
c960: 6c 69 74 65 33 5f 73 65 74 5f 61 75 78 64 61 74  lite3_set_auxdat
c970: 61 28 29 20 41 50 49 20 6d 61 79 20 62 65 20 73  a() API may be s
c980: 61 66 65 6c 79 20 72 65 74 61 69 6e 65 64 20 75  afely retained u
c990: 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 0a 2a 2a  ntil the next.**
c9a0: 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74   invocation of t
c9b0: 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  his opcode..**.*
c9c0: 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 75 6e 63  * See also: Func
c9d0: 74 69 6f 6e 2c 20 41 67 67 53 74 65 70 2c 20 41  tion, AggStep, A
c9e0: 67 67 46 69 6e 61 6c 0a 2a 2f 0a 2f 2a 20 4f 70  ggFinal.*/./* Op
c9f0: 63 6f 64 65 3a 20 46 75 6e 63 74 69 6f 6e 20 50  code: Function P
ca00: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
ca10: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
ca20: 3d 66 75 6e 63 28 72 5b 50 32 40 50 35 5d 29 0a  =func(r[P2@P5]).
ca30: 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75  **.** Invoke a u
ca40: 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 28 50 34  ser function (P4
ca50: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
ca60: 20 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74   an sqlite3_cont
ca70: 65 78 74 20 6f 62 6a 65 63 74 20 74 68 61 74 0a  ext object that.
ca80: 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20 70 6f  ** contains a po
ca90: 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66 75 6e  inter to the fun
caa0: 63 74 69 6f 6e 20 74 6f 20 62 65 20 72 75 6e 29  ction to be run)
cab0: 20 77 69 74 68 20 50 35 20 61 72 67 75 6d 65 6e   with P5 argumen
cac0: 74 73 20 74 61 6b 65 6e 0a 2a 2a 20 66 72 6f 6d  ts taken.** from
cad0: 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64   register P2 and
cae0: 20 73 75 63 63 65 73 73 6f 72 73 2e 20 20 54 68   successors.  Th
caf0: 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
cb00: 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 74 6f 72  function is stor
cb10: 65 64 0a 2a 2a 20 69 6e 20 72 65 67 69 73 74 65  ed.** in registe
cb20: 72 20 50 33 2e 20 20 52 65 67 69 73 74 65 72 20  r P3.  Register 
cb30: 50 33 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 6f  P3 must not be o
cb40: 6e 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  ne of the functi
cb50: 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a  on inputs..**.**
cb60: 20 50 31 20 69 73 20 61 20 33 32 2d 62 69 74 20   P1 is a 32-bit 
cb70: 62 69 74 6d 61 73 6b 20 69 6e 64 69 63 61 74 69  bitmask indicati
cb80: 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ng whether or no
cb90: 74 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20  t each argument 
cba0: 74 6f 20 74 68 65 20 0a 2a 2a 20 66 75 6e 63 74  to the .** funct
cbb0: 69 6f 6e 20 77 61 73 20 64 65 74 65 72 6d 69 6e  ion was determin
cbc0: 65 64 20 74 6f 20 62 65 20 63 6f 6e 73 74 61 6e  ed to be constan
cbd0: 74 20 61 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d  t at compile tim
cbe0: 65 2e 20 49 66 20 74 68 65 20 66 69 72 73 74 0a  e. If the first.
cbf0: 2a 2a 20 61 72 67 75 6d 65 6e 74 20 77 61 73 20  ** argument was 
cc00: 63 6f 6e 73 74 61 6e 74 20 74 68 65 6e 20 62 69  constant then bi
cc10: 74 20 30 20 6f 66 20 50 31 20 69 73 20 73 65 74  t 0 of P1 is set
cc20: 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20 74  . This is used t
cc30: 6f 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77  o determine.** w
cc40: 68 65 74 68 65 72 20 6d 65 74 61 20 64 61 74 61  hether meta data
cc50: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
cc60: 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e   a user function
cc70: 20 61 72 67 75 6d 65 6e 74 20 75 73 69 6e 67 20   argument using 
cc80: 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73  the.** sqlite3_s
cc90: 65 74 5f 61 75 78 64 61 74 61 28 29 20 41 50 49  et_auxdata() API
cca0: 20 6d 61 79 20 62 65 20 73 61 66 65 6c 79 20 72   may be safely r
ccb0: 65 74 61 69 6e 65 64 20 75 6e 74 69 6c 20 74 68  etained until th
ccc0: 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f 63 61  e next.** invoca
ccd0: 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 6f 70 63  tion of this opc
cce0: 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 20 66  ode..**.** SQL f
ccf0: 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 69 6e 69  unctions are ini
cd00: 74 69 61 6c 6c 79 20 63 6f 64 65 64 20 61 73 20  tially coded as 
cd10: 4f 50 5f 46 75 6e 63 74 69 6f 6e 30 20 77 69 74  OP_Function0 wit
cd20: 68 20 50 34 20 70 6f 69 6e 74 69 6e 67 0a 2a 2a  h P4 pointing.**
cd30: 20 74 6f 20 61 20 46 75 6e 63 44 65 66 20 6f 62   to a FuncDef ob
cd40: 6a 65 63 74 2e 20 20 42 75 74 20 6f 6e 20 66 69  ject.  But on fi
cd50: 72 73 74 20 65 76 61 6c 75 61 74 69 6f 6e 2c 20  rst evaluation, 
cd60: 74 68 65 20 50 34 20 6f 70 65 72 61 6e 64 20 69  the P4 operand i
cd70: 73 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c  s.** automatical
cd80: 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  ly converted int
cd90: 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e  o an sqlite3_con
cda0: 74 65 78 74 20 6f 62 6a 65 63 74 20 61 6e 64 20  text object and 
cdb0: 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 0a 2a 2a  the operation.**
cdc0: 20 63 68 61 6e 67 65 64 20 74 6f 20 74 68 69 73   changed to this
cdd0: 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 20 6f 70 63   OP_Function opc
cde0: 6f 64 65 2e 20 20 49 6e 20 74 68 69 73 20 77 61  ode.  In this wa
cdf0: 79 2c 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a  y, the initializ
ce00: 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20  ation of.** the 
ce10: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
ce20: 6f 62 6a 65 63 74 20 6f 63 63 75 72 73 20 6f 6e  object occurs on
ce30: 6c 79 20 6f 6e 63 65 2c 20 72 61 74 68 65 72 20  ly once, rather 
ce40: 74 68 61 6e 20 6f 6e 63 65 20 66 6f 72 20 65 61  than once for ea
ce50: 63 68 0a 2a 2a 20 65 76 61 6c 75 61 74 69 6f 6e  ch.** evaluation
ce60: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
ce70: 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
ce80: 3a 20 46 75 6e 63 74 69 6f 6e 30 2c 20 41 67 67  : Function0, Agg
ce90: 53 74 65 70 2c 20 41 67 67 46 69 6e 61 6c 0a 2a  Step, AggFinal.*
cea0: 2f 0a 63 61 73 65 20 4f 50 5f 46 75 6e 63 74 69  /.case OP_Functi
ceb0: 6f 6e 30 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a  on0: {.  int n;.
cec0: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
ced0: 74 20 2a 70 43 74 78 3b 0a 0a 20 20 61 73 73 65  t *pCtx;..  asse
cee0: 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
cef0: 3d 50 34 5f 46 55 4e 43 44 45 46 20 29 3b 0a 20  =P4_FUNCDEF );. 
cf00: 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20   n = pOp->p5;.  
cf10: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
cf20: 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  0 && pOp->p3<=(p
cf30: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
cf40: 75 72 73 6f 72 29 20 29 3b 0a 20 20 61 73 73 65  ursor) );.  asse
cf50: 72 74 28 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70  rt( n==0 || (pOp
cf60: 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
cf70: 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  2+n<=(p->nMem+1 
cf80: 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 29  - p->nCursor)+1)
cf90: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
cfa0: 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c  p->p3<pOp->p2 ||
cfb0: 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70   pOp->p3>=pOp->p
cfc0: 32 2b 6e 20 29 3b 0a 20 20 70 43 74 78 20 3d 20  2+n );.  pCtx = 
cfd0: 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
cfe0: 61 77 4e 4e 28 64 62 2c 20 73 69 7a 65 6f 66 28  awNN(db, sizeof(
cff0: 2a 70 43 74 78 29 20 2b 20 28 6e 2d 31 29 2a 73  *pCtx) + (n-1)*s
d000: 69 7a 65 6f 66 28 73 71 6c 69 74 65 33 5f 76 61  izeof(sqlite3_va
d010: 6c 75 65 2a 29 29 3b 0a 20 20 69 66 28 20 70 43  lue*));.  if( pC
d020: 74 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  tx==0 ) goto no_
d030: 6d 65 6d 3b 0a 20 20 70 43 74 78 2d 3e 70 4f 75  mem;.  pCtx->pOu
d040: 74 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d 3e 70  t = 0;.  pCtx->p
d050: 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Func = pOp->p4.p
d060: 46 75 6e 63 3b 0a 20 20 70 43 74 78 2d 3e 69 4f  Func;.  pCtx->iO
d070: 70 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20  p = (int)(pOp - 
d080: 61 4f 70 29 3b 0a 20 20 70 43 74 78 2d 3e 70 56  aOp);.  pCtx->pV
d090: 64 62 65 20 3d 20 70 3b 0a 20 20 70 43 74 78 2d  dbe = p;.  pCtx-
d0a0: 3e 61 72 67 63 20 3d 20 6e 3b 0a 20 20 70 4f 70  >argc = n;.  pOp
d0b0: 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 46 55  ->p4type = P4_FU
d0c0: 4e 43 43 54 58 3b 0a 20 20 70 4f 70 2d 3e 70 34  NCCTX;.  pOp->p4
d0d0: 2e 70 43 74 78 20 3d 20 70 43 74 78 3b 0a 20 20  .pCtx = pCtx;.  
d0e0: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50  pOp->opcode = OP
d0f0: 5f 46 75 6e 63 74 69 6f 6e 3b 0a 20 20 2f 2a 20  _Function;.  /* 
d100: 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74  Fall through int
d110: 6f 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 20 2a 2f  o OP_Function */
d120: 0a 7d 0a 63 61 73 65 20 4f 50 5f 46 75 6e 63 74  .}.case OP_Funct
d130: 69 6f 6e 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a  ion: {.  int i;.
d140: 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
d150: 74 20 2a 70 43 74 78 3b 0a 0a 20 20 61 73 73 65  t *pCtx;..  asse
d160: 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
d170: 3d 50 34 5f 46 55 4e 43 43 54 58 20 29 3b 0a 20  =P4_FUNCCTX );. 
d180: 20 70 43 74 78 20 3d 20 70 4f 70 2d 3e 70 34 2e   pCtx = pOp->p4.
d190: 70 43 74 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74  pCtx;..  /* If t
d1a0: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  his function is 
d1b0: 69 6e 73 69 64 65 20 6f 66 20 61 20 74 72 69 67  inside of a trig
d1c0: 67 65 72 2c 20 74 68 65 20 72 65 67 69 73 74 65  ger, the registe
d1d0: 72 20 61 72 72 61 79 20 69 6e 20 61 4d 65 6d 5b  r array in aMem[
d1e0: 5d 0a 20 20 2a 2a 20 6d 69 67 68 74 20 63 68 61  ].  ** might cha
d1f0: 6e 67 65 20 66 72 6f 6d 20 6f 6e 65 20 65 76 61  nge from one eva
d200: 6c 75 61 74 69 6f 6e 20 74 6f 20 74 68 65 20 6e  luation to the n
d210: 65 78 74 2e 20 20 54 68 65 20 6e 65 78 74 20 62  ext.  The next b
d220: 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 0a 20 20 2a  lock of code.  *
d230: 2a 20 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20  * checks to see 
d240: 69 66 20 74 68 65 20 72 65 67 69 73 74 65 72 20  if the register 
d250: 61 72 72 61 79 20 68 61 73 20 63 68 61 6e 67 65  array has change
d260: 64 2c 20 61 6e 64 20 69 66 20 73 6f 20 69 74 0a  d, and if so it.
d270: 20 20 2a 2a 20 72 65 69 6e 69 74 69 61 6c 69 7a    ** reinitializ
d280: 65 73 20 74 68 65 20 72 65 6c 61 76 61 6e 74 20  es the relavant 
d290: 70 61 72 74 73 20 6f 66 20 74 68 65 20 73 71 6c  parts of the sql
d2a0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a  ite3_context obj
d2b0: 65 63 74 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20  ect */.  pOut = 
d2c0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
d2d0: 20 20 69 66 28 20 70 43 74 78 2d 3e 70 4f 75 74    if( pCtx->pOut
d2e0: 20 21 3d 20 70 4f 75 74 20 29 7b 0a 20 20 20 20   != pOut ){.    
d2f0: 70 43 74 78 2d 3e 70 4f 75 74 20 3d 20 70 4f 75  pCtx->pOut = pOu
d300: 74 3b 0a 20 20 20 20 66 6f 72 28 69 3d 70 43 74  t;.    for(i=pCt
d310: 78 2d 3e 61 72 67 63 2d 31 3b 20 69 3e 3d 30 3b  x->argc-1; i>=0;
d320: 20 69 2d 2d 29 20 70 43 74 78 2d 3e 61 72 67 76   i--) pCtx->argv
d330: 5b 69 5d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  [i] = &aMem[pOp-
d340: 3e 70 32 2b 69 5d 3b 0a 20 20 7d 0a 0a 20 20 6d  >p2+i];.  }..  m
d350: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
d360: 70 2c 20 70 4f 75 74 29 3b 0a 23 69 66 64 65 66  p, pOut);.#ifdef
d370: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
d380: 66 6f 72 28 69 3d 30 3b 20 69 3c 70 43 74 78 2d  for(i=0; i<pCtx-
d390: 3e 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20  >argc; i++){.   
d3a0: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
d3b0: 6c 69 64 28 70 43 74 78 2d 3e 61 72 67 76 5b 69  lid(pCtx->argv[i
d3c0: 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54  ]) );.    REGIST
d3d0: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
d3e0: 2b 69 2c 20 70 43 74 78 2d 3e 61 72 67 76 5b 69  +i, pCtx->argv[i
d3f0: 5d 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ]);.  }.#endif. 
d400: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
d410: 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  pOut, MEM_Null);
d420: 0a 20 20 70 43 74 78 2d 3e 66 45 72 72 6f 72 4f  .  pCtx->fErrorO
d430: 72 41 75 78 20 3d 20 30 3b 0a 20 20 28 2a 70 43  rAux = 0;.  (*pC
d440: 74 78 2d 3e 70 46 75 6e 63 2d 3e 78 53 46 75 6e  tx->pFunc->xSFun
d450: 63 29 28 70 43 74 78 2c 20 70 43 74 78 2d 3e 61  c)(pCtx, pCtx->a
d460: 72 67 63 2c 20 70 43 74 78 2d 3e 61 72 67 76 29  rgc, pCtx->argv)
d470: 3b 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30 35  ;/* IMP: R-24505
d480: 2d 32 33 32 33 30 20 2a 2f 0a 0a 20 20 2f 2a 20  -23230 */..  /* 
d490: 49 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  If the function 
d4a0: 72 65 74 75 72 6e 65 64 20 61 6e 20 65 72 72 6f  returned an erro
d4b0: 72 2c 20 74 68 72 6f 77 20 61 6e 20 65 78 63 65  r, throw an exce
d4c0: 70 74 69 6f 6e 20 2a 2f 0a 20 20 69 66 28 20 70  ption */.  if( p
d4d0: 43 74 78 2d 3e 66 45 72 72 6f 72 4f 72 41 75 78  Ctx->fErrorOrAux
d4e0: 20 29 7b 0a 20 20 20 20 69 66 28 20 70 43 74 78   ){.    if( pCtx
d4f0: 2d 3e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20  ->isError ){.   
d500: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
d510: 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 73 71 6c  ror(p, "%s", sql
d520: 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
d530: 70 4f 75 74 29 29 3b 0a 20 20 20 20 20 20 72 63  pOut));.      rc
d540: 20 3d 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72   = pCtx->isError
d550: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
d560: 74 65 33 56 64 62 65 44 65 6c 65 74 65 41 75 78  te3VdbeDeleteAux
d570: 44 61 74 61 28 64 62 2c 20 26 70 2d 3e 70 41 75  Data(db, &p->pAu
d580: 78 44 61 74 61 2c 20 70 43 74 78 2d 3e 69 4f 70  xData, pCtx->iOp
d590: 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20  , pOp->p1);.    
d5a0: 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
d5b0: 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
d5c0: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70 79  ;.  }..  /* Copy
d5d0: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
d5e0: 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74 6f  he function into
d5f0: 20 72 65 67 69 73 74 65 72 20 50 33 20 2a 2f 0a   register P3 */.
d600: 20 20 69 66 28 20 70 4f 75 74 2d 3e 66 6c 61 67    if( pOut->flag
d610: 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  s & (MEM_Str|MEM
d620: 5f 42 6c 6f 62 29 20 29 7b 0a 20 20 20 20 73 71  _Blob) ){.    sq
d630: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
d640: 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e  ncoding(pOut, en
d650: 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 69 66 28  coding);.    if(
d660: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54   sqlite3VdbeMemT
d670: 6f 6f 42 69 67 28 70 4f 75 74 29 20 29 20 67 6f  ooBig(pOut) ) go
d680: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
d690: 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
d6a0: 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29  E(pOp->p3, pOut)
d6b0: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
d6c0: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
d6d0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
d6e0: 63 6f 64 65 3a 20 42 69 74 41 6e 64 20 50 31 20  code: BitAnd P1 
d6f0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
d700: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50  opsis: r[P3]=r[P
d710: 31 5d 26 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54  1]&r[P2].**.** T
d720: 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73 65  ake the bit-wise
d730: 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75   AND of the valu
d740: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
d750: 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20  1 and P2 and.** 
d760: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
d770: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
d780: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
d790: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
d7a0: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
d7b0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42  .*/./* Opcode: B
d7c0: 69 74 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20  itOr P1 P2 P3 * 
d7d0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
d7e0: 5b 50 33 5d 3d 72 5b 50 31 5d 7c 72 5b 50 32 5d  [P3]=r[P1]|r[P2]
d7f0: 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20  .**.** Take the 
d800: 62 69 74 2d 77 69 73 65 20 4f 52 20 6f 66 20 74  bit-wise OR of t
d810: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
d820: 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20  ister P1 and P2 
d830: 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65  and.** store the
d840: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
d850: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
d860: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
d870: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
d880: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
d890: 63 6f 64 65 3a 20 53 68 69 66 74 4c 65 66 74 20  code: ShiftLeft 
d8a0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
d8b0: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
d8c0: 72 5b 50 32 5d 3c 3c 72 5b 50 31 5d 0a 2a 2a 0a  r[P2]<<r[P1].**.
d8d0: 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e 74  ** Shift the int
d8e0: 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65  eger value in re
d8f0: 67 69 73 74 65 72 20 50 32 20 74 6f 20 74 68 65  gister P2 to the
d900: 20 6c 65 66 74 20 62 79 20 74 68 65 0a 2a 2a 20   left by the.** 
d910: 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73  number of bits s
d920: 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20  pecified by the 
d930: 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69 73  integer in regis
d940: 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65  ter P1..** Store
d950: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
d960: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
d970: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
d980: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
d990: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
d9a0: 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 52  * Opcode: ShiftR
d9b0: 69 67 68 74 20 50 31 20 50 32 20 50 33 20 2a 20  ight P1 P2 P3 * 
d9c0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
d9d0: 5b 50 33 5d 3d 72 5b 50 32 5d 3e 3e 72 5b 50 31  [P3]=r[P2]>>r[P1
d9e0: 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68  ].**.** Shift th
d9f0: 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  e integer value 
da00: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74  in register P2 t
da10: 6f 20 74 68 65 20 72 69 67 68 74 20 62 79 20 74  o the right by t
da20: 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20  he.** number of 
da30: 62 69 74 73 20 73 70 65 63 69 66 69 65 64 20 62  bits specified b
da40: 79 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e  y the integer in
da50: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
da60: 20 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   Store the resul
da70: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
da80: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
da90: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
daa0: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
dab0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74  ..*/.case OP_Bit
dac0: 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20 20  And:            
dad0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
dae0: 54 4b 5f 42 49 54 41 4e 44 2c 20 69 6e 31 2c 20  TK_BITAND, in1, 
daf0: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
db00: 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20 20 20  e OP_BitOr:     
db10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
db20: 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4f 52  same as TK_BITOR
db30: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
db40: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66   */.case OP_Shif
db50: 74 4c 65 66 74 3a 20 20 20 20 20 20 20 20 20 20  tLeft:          
db60: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
db70: 4b 5f 4c 53 48 49 46 54 2c 20 69 6e 31 2c 20 69  K_LSHIFT, in1, i
db80: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
db90: 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3a 20   OP_ShiftRight: 
dba0: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73  {           /* s
dbb0: 61 6d 65 20 61 73 20 54 4b 5f 52 53 48 49 46 54  ame as TK_RSHIFT
dbc0: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
dbd0: 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 0a 20 20   */.  i64 iA;.  
dbe0: 75 36 34 20 75 41 3b 0a 20 20 69 36 34 20 69 42  u64 uA;.  i64 iB
dbf0: 3b 0a 20 20 75 38 20 6f 70 3b 0a 0a 20 20 70 49  ;.  u8 op;..  pI
dc00: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
dc10: 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  p1];.  pIn2 = &a
dc20: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
dc30: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
dc40: 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p3];.  if( (pI
dc50: 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32  n1->flags | pIn2
dc60: 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e  ->flags) & MEM_N
dc70: 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ull ){.    sqlit
dc80: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
dc90: 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61  (pOut);.    brea
dca0: 6b 3b 0a 20 20 7d 0a 20 20 69 41 20 3d 20 73 71  k;.  }.  iA = sq
dcb0: 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
dcc0: 65 28 70 49 6e 32 29 3b 0a 20 20 69 42 20 3d 20  e(pIn2);.  iB = 
dcd0: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
dce0: 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 6f 70 20  lue(pIn1);.  op 
dcf0: 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20  = pOp->opcode;. 
dd00: 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 41   if( op==OP_BitA
dd10: 6e 64 20 29 7b 0a 20 20 20 20 69 41 20 26 3d 20  nd ){.    iA &= 
dd20: 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  iB;.  }else if( 
dd30: 6f 70 3d 3d 4f 50 5f 42 69 74 4f 72 20 29 7b 0a  op==OP_BitOr ){.
dd40: 20 20 20 20 69 41 20 7c 3d 20 69 42 3b 0a 20 20      iA |= iB;.  
dd50: 7d 65 6c 73 65 20 69 66 28 20 69 42 21 3d 30 20  }else if( iB!=0 
dd60: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f  ){.    assert( o
dd70: 70 3d 3d 4f 50 5f 53 68 69 66 74 52 69 67 68 74  p==OP_ShiftRight
dd80: 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74   || op==OP_Shift
dd90: 4c 65 66 74 20 29 3b 0a 0a 20 20 20 20 2f 2a 20  Left );..    /* 
dda0: 49 66 20 73 68 69 66 74 69 6e 67 20 62 79 20 61  If shifting by a
ddb0: 20 6e 65 67 61 74 69 76 65 20 61 6d 6f 75 6e 74   negative amount
ddc0: 2c 20 73 68 69 66 74 20 69 6e 20 74 68 65 20 6f  , shift in the o
ddd0: 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 20 2a  ther direction *
dde0: 2f 0a 20 20 20 20 69 66 28 20 69 42 3c 30 20 29  /.    if( iB<0 )
ddf0: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
de00: 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3d 3d 4f  OP_ShiftRight==O
de10: 50 5f 53 68 69 66 74 4c 65 66 74 2b 31 20 29 3b  P_ShiftLeft+1 );
de20: 0a 20 20 20 20 20 20 6f 70 20 3d 20 32 2a 4f 50  .      op = 2*OP
de30: 5f 53 68 69 66 74 4c 65 66 74 20 2b 20 31 20 2d  _ShiftLeft + 1 -
de40: 20 6f 70 3b 0a 20 20 20 20 20 20 69 42 20 3d 20   op;.      iB = 
de50: 69 42 3e 28 2d 36 34 29 20 3f 20 2d 69 42 20 3a  iB>(-64) ? -iB :
de60: 20 36 34 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20   64;.    }..    
de70: 69 66 28 20 69 42 3e 3d 36 34 20 29 7b 0a 20 20  if( iB>=64 ){.  
de80: 20 20 20 20 69 41 20 3d 20 28 69 41 3e 3d 30 20      iA = (iA>=0 
de90: 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c  || op==OP_ShiftL
dea0: 65 66 74 29 20 3f 20 30 20 3a 20 2d 31 3b 0a 20  eft) ? 0 : -1;. 
deb0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
dec0: 6d 65 6d 63 70 79 28 26 75 41 2c 20 26 69 41 2c  memcpy(&uA, &iA,
ded0: 20 73 69 7a 65 6f 66 28 75 41 29 29 3b 0a 20 20   sizeof(uA));.  
dee0: 20 20 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 53      if( op==OP_S
def0: 68 69 66 74 4c 65 66 74 20 29 7b 0a 20 20 20 20  hiftLeft ){.    
df00: 20 20 20 20 75 41 20 3c 3c 3d 20 69 42 3b 0a 20      uA <<= iB;. 
df10: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
df20: 20 20 20 20 75 41 20 3e 3e 3d 20 69 42 3b 0a 20      uA >>= iB;. 
df30: 20 20 20 20 20 20 20 2f 2a 20 53 69 67 6e 2d 65         /* Sign-e
df40: 78 74 65 6e 64 20 6f 6e 20 61 20 72 69 67 68 74  xtend on a right
df50: 20 73 68 69 66 74 20 6f 66 20 61 20 6e 65 67 61   shift of a nega
df60: 74 69 76 65 20 6e 75 6d 62 65 72 20 2a 2f 0a 20  tive number */. 
df70: 20 20 20 20 20 20 20 69 66 28 20 69 41 3c 30 20         if( iA<0 
df80: 29 20 75 41 20 7c 3d 20 28 28 28 28 75 36 34 29  ) uA |= ((((u64)
df90: 30 78 66 66 66 66 66 66 66 66 29 3c 3c 33 32 29  0xffffffff)<<32)
dfa0: 7c 30 78 66 66 66 66 66 66 66 66 29 20 3c 3c 20  |0xffffffff) << 
dfb0: 28 36 34 2d 69 42 29 3b 0a 20 20 20 20 20 20 7d  (64-iB);.      }
dfc0: 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26 69  .      memcpy(&i
dfd0: 41 2c 20 26 75 41 2c 20 73 69 7a 65 6f 66 28 69  A, &uA, sizeof(i
dfe0: 41 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  A));.    }.  }. 
dff0: 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 41 3b   pOut->u.i = iA;
e000: 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
e010: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
e020: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
e030: 20 4f 70 63 6f 64 65 3a 20 41 64 64 49 6d 6d 20   Opcode: AddImm 
e040: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
e050: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d  Synopsis: r[P1]=
e060: 72 5b 50 31 5d 2b 50 32 0a 2a 2a 20 0a 2a 2a 20  r[P1]+P2.** .** 
e070: 41 64 64 20 74 68 65 20 63 6f 6e 73 74 61 6e 74  Add the constant
e080: 20 50 32 20 74 6f 20 74 68 65 20 76 61 6c 75 65   P2 to the value
e090: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
e0a0: 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 20 69  .** The result i
e0b0: 73 20 61 6c 77 61 79 73 20 61 6e 20 69 6e 74 65  s always an inte
e0c0: 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f  ger..**.** To fo
e0d0: 72 63 65 20 61 6e 79 20 72 65 67 69 73 74 65 72  rce any register
e0e0: 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65   to be an intege
e0f0: 72 2c 20 6a 75 73 74 20 61 64 64 20 30 2e 0a 2a  r, just add 0..*
e100: 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 49 6d 6d  /.case OP_AddImm
e110: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
e120: 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  * in1 */.  pIn1 
e130: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
e140: 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
e150: 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20  ange(p, pIn1);. 
e160: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
e170: 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b  ntegerify(pIn1);
e180: 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20  .  pIn1->u.i += 
e190: 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72 65 61 6b  pOp->p2;.  break
e1a0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
e1b0: 4d 75 73 74 42 65 49 6e 74 20 50 31 20 50 32 20  MustBeInt P1 P2 
e1c0: 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72  * * *.** .** For
e1d0: 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ce the value in 
e1e0: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62  register P1 to b
e1f0: 65 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49  e an integer.  I
e200: 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  f the value.** i
e210: 6e 20 50 31 20 69 73 20 6e 6f 74 20 61 6e 20 69  n P1 is not an i
e220: 6e 74 65 67 65 72 20 61 6e 64 20 63 61 6e 6e 6f  nteger and canno
e230: 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69  t be converted i
e240: 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a  nto an integer.*
e250: 2a 20 77 69 74 68 6f 75 74 20 64 61 74 61 20 6c  * without data l
e260: 6f 73 73 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69  oss, then jump i
e270: 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
e280: 2c 20 6f 72 20 69 66 20 50 32 3d 3d 30 0a 2a 2a  , or if P2==0.**
e290: 20 72 61 69 73 65 20 61 6e 20 53 51 4c 49 54 45   raise an SQLITE
e2a0: 5f 4d 49 53 4d 41 54 43 48 20 65 78 63 65 70 74  _MISMATCH except
e2b0: 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
e2c0: 4d 75 73 74 42 65 49 6e 74 3a 20 7b 20 20 20 20  MustBeInt: {    
e2d0: 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
e2e0: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
e2f0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
e300: 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
e310: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d  ags & MEM_Int)==
e320: 30 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 41 66  0 ){.    applyAf
e330: 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c  finity(pIn1, SQL
e340: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c  ITE_AFF_NUMERIC,
e350: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
e360: 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
e370: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pIn1->flags&MEM
e380: 5f 49 6e 74 29 3d 3d 30 2c 20 32 29 3b 0a 20 20  _Int)==0, 2);.  
e390: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
e3a0: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
e3b0: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f   ){.      if( pO
e3c0: 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20  p->p2==0 ){.    
e3d0: 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
e3e0: 4d 49 53 4d 41 54 43 48 3b 0a 20 20 20 20 20 20  MISMATCH;.      
e3f0: 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
e400: 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
e410: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
e420: 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
e430: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
e440: 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46   }.  MemSetTypeF
e450: 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e  lag(pIn1, MEM_In
e460: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
e470: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
e480: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
e490: 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  NT./* Opcode: Re
e4a0: 61 6c 41 66 66 69 6e 69 74 79 20 50 31 20 2a 20  alAffinity P1 * 
e4b0: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72  * * *.**.** If r
e4c0: 65 67 69 73 74 65 72 20 50 31 20 68 6f 6c 64 73  egister P1 holds
e4d0: 20 61 6e 20 69 6e 74 65 67 65 72 20 63 6f 6e 76   an integer conv
e4e0: 65 72 74 20 69 74 20 74 6f 20 61 20 72 65 61 6c  ert it to a real
e4f0: 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68   value..**.** Th
e500: 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65  is opcode is use
e510: 64 20 77 68 65 6e 20 65 78 74 72 61 63 74 69 6e  d when extractin
e520: 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72  g information fr
e530: 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74 68 61 74  om a column that
e540: 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20 61 66 66  .** has REAL aff
e550: 69 6e 69 74 79 2e 20 20 53 75 63 68 20 63 6f 6c  inity.  Such col
e560: 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61 79 20 73  umn values may s
e570: 74 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 61  till be stored a
e580: 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73 2c 20 66  s.** integers, f
e590: 6f 72 20 73 70 61 63 65 20 65 66 66 69 63 69 65  or space efficie
e5a0: 6e 63 79 2c 20 62 75 74 20 61 66 74 65 72 20 65  ncy, but after e
e5b0: 78 74 72 61 63 74 69 6f 6e 20 77 65 20 77 61 6e  xtraction we wan
e5c0: 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20 68 61 76  t them.** to hav
e5d0: 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c 20 76 61  e only a real va
e5e0: 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  lue..*/.case OP_
e5f0: 52 65 61 6c 41 66 66 69 6e 69 74 79 3a 20 7b 20  RealAffinity: { 
e600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e610: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e   /* in1 */.  pIn
e620: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
e630: 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  1];.  if( pIn1->
e640: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
e650: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
e660: 62 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 49 6e  beMemRealify(pIn
e670: 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  1);.  }.  break;
e680: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  .}.#endif..#ifnd
e690: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ef SQLITE_OMIT_C
e6a0: 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  AST./* Opcode: C
e6b0: 61 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ast P1 P2 * * *.
e6c0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 66 66  ** Synopsis: aff
e6d0: 69 6e 69 74 79 28 72 5b 50 31 5d 29 0a 2a 2a 0a  inity(r[P1]).**.
e6e0: 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c  ** Force the val
e6f0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
e700: 31 20 74 6f 20 62 65 20 74 68 65 20 74 79 70 65  1 to be the type
e710: 20 64 65 66 69 6e 65 64 20 62 79 20 50 32 2e 0a   defined by P2..
e720: 2a 2a 20 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c  ** .** <ul>.** <
e730: 6c 69 20 76 61 6c 75 65 3d 22 39 37 22 3e 20 54  li value="97"> T
e740: 45 58 54 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65  EXT.** <li value
e750: 3d 22 39 38 22 3e 20 42 4c 4f 42 0a 2a 2a 20 3c  ="98"> BLOB.** <
e760: 6c 69 20 76 61 6c 75 65 3d 22 39 39 22 3e 20 4e  li value="99"> N
e770: 55 4d 45 52 49 43 0a 2a 2a 20 3c 6c 69 20 76 61  UMERIC.** <li va
e780: 6c 75 65 3d 22 31 30 30 22 3e 20 49 4e 54 45 47  lue="100"> INTEG
e790: 45 52 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d  ER.** <li value=
e7a0: 22 31 30 31 22 3e 20 52 45 41 4c 0a 2a 2a 20 3c  "101"> REAL.** <
e7b0: 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c  /ul>.**.** A NUL
e7c0: 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63  L value is not c
e7d0: 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72  hanged by this r
e7e0: 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61  outine.  It rema
e7f0: 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  ins NULL..*/.cas
e800: 65 20 4f 50 5f 43 61 73 74 3a 20 7b 20 20 20 20  e OP_Cast: {    
e810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
e820: 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74   in1 */.  assert
e830: 28 20 70 4f 70 2d 3e 70 32 3e 3d 53 51 4c 49 54  ( pOp->p2>=SQLIT
e840: 45 5f 41 46 46 5f 42 4c 4f 42 20 26 26 20 70 4f  E_AFF_BLOB && pO
e850: 70 2d 3e 70 32 3c 3d 53 51 4c 49 54 45 5f 41 46  p->p2<=SQLITE_AF
e860: 46 5f 52 45 41 4c 20 29 3b 0a 20 20 74 65 73 74  F_REAL );.  test
e870: 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53  case( pOp->p2==S
e880: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29  QLITE_AFF_TEXT )
e890: 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f  ;.  testcase( pO
e8a0: 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46  p->p2==SQLITE_AF
e8b0: 46 5f 42 4c 4f 42 20 29 3b 0a 20 20 74 65 73 74  F_BLOB );.  test
e8c0: 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53  case( pOp->p2==S
e8d0: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
e8e0: 43 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  C );.  testcase(
e8f0: 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45   pOp->p2==SQLITE
e900: 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 29 3b 0a  _AFF_INTEGER );.
e910: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
e920: 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  >p2==SQLITE_AFF_
e930: 52 45 41 4c 20 29 3b 0a 20 20 70 49 6e 31 20 3d  REAL );.  pIn1 =
e940: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
e950: 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
e960: 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20  nge(p, pIn1);.  
e970: 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28  rc = ExpandBlob(
e980: 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33  pIn1);.  sqlite3
e990: 56 64 62 65 4d 65 6d 43 61 73 74 28 70 49 6e 31  VdbeMemCast(pIn1
e9a0: 2c 20 70 4f 70 2d 3e 70 32 2c 20 65 6e 63 6f 64  , pOp->p2, encod
e9b0: 69 6e 67 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  ing);.  UPDATE_M
e9c0: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31  AX_BLOBSIZE(pIn1
e9d0: 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
e9e0: 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
e9f0: 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a  error;.  break;.
ea00: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
ea10: 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a  TE_OMIT_CAST */.
ea20: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 71 20 50  ./* Opcode: Eq P
ea30: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
ea40: 20 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b   Synopsis: IF r[
ea50: 50 33 5d 3d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  P3]==r[P1].**.**
ea60: 20 43 6f 6d 70 61 72 65 20 74 68 65 20 76 61 6c   Compare the val
ea70: 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ues in register 
ea80: 50 31 20 61 6e 64 20 50 33 2e 20 20 49 66 20 72  P1 and P3.  If r
ea90: 65 67 28 50 33 29 3d 3d 72 65 67 28 50 31 29 20  eg(P3)==reg(P1) 
eaa0: 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20  then.** jump to 
eab0: 61 64 64 72 65 73 73 20 50 32 2e 20 20 4f 72 20  address P2.  Or 
eac0: 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f 53 54  if the SQLITE_ST
ead0: 4f 52 45 50 32 20 66 6c 61 67 20 69 73 20 73 65  OREP2 flag is se
eae0: 74 20 69 6e 20 50 35 2c 20 74 68 65 6e 0a 2a 2a  t in P5, then.**
eaf0: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
eb00: 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20  t of comparison 
eb10: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
eb20: 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  **.** The SQLITE
eb30: 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f  _AFF_MASK portio
eb40: 6e 20 6f 66 20 50 35 20 6d 75 73 74 20 62 65 20  n of P5 must be 
eb50: 61 6e 20 61 66 66 69 6e 69 74 79 20 63 68 61 72  an affinity char
eb60: 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54  acter -.** SQLIT
eb70: 45 5f 41 46 46 5f 54 45 58 54 2c 20 53 51 4c 49  E_AFF_TEXT, SQLI
eb80: 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c 20  TE_AFF_INTEGER, 
eb90: 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e  and so forth. An
eba0: 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65   attempt is made
ebb0: 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20 62   .** to coerce b
ebc0: 6f 74 68 20 69 6e 70 75 74 73 20 61 63 63 6f 72  oth inputs accor
ebd0: 64 69 6e 67 20 74 6f 20 74 68 69 73 20 61 66 66  ding to this aff
ebe0: 69 6e 69 74 79 20 62 65 66 6f 72 65 20 74 68 65  inity before the
ebf0: 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69  .** comparison i
ec00: 73 20 6d 61 64 65 2e 20 49 66 20 74 68 65 20 53  s made. If the S
ec10: 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69  QLITE_AFF_MASK i
ec20: 73 20 30 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d  s 0x00, then num
ec30: 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79  eric.** affinity
ec40: 20 69 73 20 75 73 65 64 2e 20 4e 6f 74 65 20 74   is used. Note t
ec50: 68 61 74 20 74 68 65 20 61 66 66 69 6e 69 74 79  hat the affinity
ec60: 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72 65   conversions are
ec70: 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20   stored.** back 
ec80: 69 6e 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72  into the input r
ec90: 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20  egisters P1 and 
eca0: 50 33 2e 20 20 53 6f 20 74 68 69 73 20 6f 70 63  P3.  So this opc
ecb0: 6f 64 65 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a  ode can cause.**
ecc0: 20 70 65 72 73 69 73 74 65 6e 74 20 63 68 61 6e   persistent chan
ecd0: 67 65 73 20 74 6f 20 72 65 67 69 73 74 65 72 73  ges to registers
ece0: 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a   P1 and P3..**.*
ecf0: 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65  * Once any conve
ed00: 72 73 69 6f 6e 73 20 68 61 76 65 20 74 61 6b 65  rsions have take
ed10: 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69  n place, and nei
ed20: 74 68 65 72 20 76 61 6c 75 65 20 69 73 20 4e 55  ther value is NU
ed30: 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75  LL, .** the valu
ed40: 65 73 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e  es are compared.
ed50: 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20   If both values 
ed60: 61 72 65 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d  are blobs then m
ed70: 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73  emcmp() is.** us
ed80: 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  ed to determine 
ed90: 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
eda0: 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  he comparison.  
edb0: 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a  If both values.*
edc0: 2a 20 61 72 65 20 74 65 78 74 2c 20 74 68 65 6e  * are text, then
edd0: 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65   the appropriate
ede0: 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
edf0: 69 6f 6e 20 73 70 65 63 69 66 69 65 64 20 69 6e  ion specified in
ee00: 0a 2a 2a 20 50 34 20 69 73 20 75 73 65 64 20 74  .** P4 is used t
ee10: 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70 61 72 69  o do the compari
ee20: 73 6f 6e 2e 20 20 49 66 20 50 34 20 69 73 20 6e  son.  If P4 is n
ee30: 6f 74 20 73 70 65 63 69 66 69 65 64 20 74 68 65  ot specified the
ee40: 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73  n.** memcmp() is
ee50: 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65   used to compare
ee60: 20 74 65 78 74 20 73 74 72 69 6e 67 2e 20 20 49   text string.  I
ee70: 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72  f both values ar
ee80: 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68  e.** numeric, th
ee90: 65 6e 20 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d  en a numeric com
eea0: 70 61 72 69 73 6f 6e 20 69 73 20 75 73 65 64 2e  parison is used.
eeb0: 20 49 66 20 74 68 65 20 74 77 6f 20 76 61 6c 75   If the two valu
eec0: 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69 66  es.** are of dif
eed0: 66 65 72 65 6e 74 20 74 79 70 65 73 2c 20 74 68  ferent types, th
eee0: 65 6e 20 6e 75 6d 62 65 72 73 20 61 72 65 20 63  en numbers are c
eef0: 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74  onsidered less t
ef00: 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61  han.** strings a
ef10: 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65 20 63  nd strings are c
ef20: 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20 74  onsidered less t
ef30: 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a  han blobs..**.**
ef40: 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45   If SQLITE_NULLE
ef50: 51 20 69 73 20 73 65 74 20 69 6e 20 50 35 20 74  Q is set in P5 t
ef60: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f  hen the result o
ef70: 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  f comparison is 
ef80: 61 6c 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a  always either.**
ef90: 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61   true or false a
efa0: 6e 64 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c  nd is never NULL
efb0: 2e 20 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61  .  If both opera
efc0: 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65  nds are NULL the
efd0: 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20  n the result.** 
efe0: 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  of comparison is
eff0: 20 74 72 75 65 2e 20 20 49 66 20 65 69 74 68 65   true.  If eithe
f000: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
f010: 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  L then the resul
f020: 74 20 69 73 20 66 61 6c 73 65 2e 0a 2a 2a 20 49  t is false..** I
f030: 66 20 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e  f neither operan
f040: 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 20 72 65  d is NULL the re
f050: 73 75 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65  sult is the same
f060: 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20   as it would be 
f070: 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45  if.** the SQLITE
f080: 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72  _NULLEQ flag wer
f090: 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50  e omitted from P
f0a0: 35 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 62 6f 74 68  5..**.** If both
f0b0: 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
f0c0: 61 6e 64 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e  and SQLITE_KEEPN
f0d0: 55 4c 4c 20 66 6c 61 67 73 20 61 72 65 20 73 65  ULL flags are se
f0e0: 74 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 63 6f  t then the.** co
f0f0: 6e 74 65 6e 74 20 6f 66 20 72 5b 50 32 5d 20 69  ntent of r[P2] i
f100: 73 20 6f 6e 6c 79 20 63 68 61 6e 67 65 64 20 69  s only changed i
f110: 66 20 74 68 65 20 6e 65 77 20 76 61 6c 75 65 20  f the new value 
f120: 69 73 20 4e 55 4c 4c 20 6f 72 20 30 20 28 66 61  is NULL or 0 (fa
f130: 6c 73 65 29 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65  lse)..** In othe
f140: 72 20 77 6f 72 64 73 2c 20 61 20 70 72 69 6f 72  r words, a prior
f150: 20 72 5b 50 32 5d 20 76 61 6c 75 65 20 77 69 6c   r[P2] value wil
f160: 6c 20 6e 6f 74 20 62 65 20 6f 76 65 72 77 72 69  l not be overwri
f170: 74 74 65 6e 20 62 79 20 31 20 28 74 72 75 65 29  tten by 1 (true)
f180: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
f190: 4e 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Ne P1 P2 P3 P4 P
f1a0: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49  5.** Synopsis: I
f1b0: 46 20 72 5b 50 33 5d 21 3d 72 5b 50 31 5d 0a 2a  F r[P3]!=r[P1].*
f1c0: 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
f1d0: 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 45 71  just like the Eq
f1e0: 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74   opcode except t
f1f0: 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hat the jump is 
f200: 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20  taken if.** the 
f210: 6f 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69  operands in regi
f220: 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 20  sters P1 and P3 
f230: 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20  are not equal.  
f240: 53 65 65 20 74 68 65 20 45 71 20 6f 70 63 6f 64  See the Eq opcod
f250: 65 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f  e for.** additio
f260: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
f270: 0a 2a 2a 0a 2a 2a 20 49 66 20 62 6f 74 68 20 53  .**.** If both S
f280: 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 61 6e  QLITE_STOREP2 an
f290: 64 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e 55 4c  d SQLITE_KEEPNUL
f2a0: 4c 20 66 6c 61 67 73 20 61 72 65 20 73 65 74 20  L flags are set 
f2b0: 74 68 65 6e 20 74 68 65 0a 2a 2a 20 63 6f 6e 74  then the.** cont
f2c0: 65 6e 74 20 6f 66 20 72 5b 50 32 5d 20 69 73 20  ent of r[P2] is 
f2d0: 6f 6e 6c 79 20 63 68 61 6e 67 65 64 20 69 66 20  only changed if 
f2e0: 74 68 65 20 6e 65 77 20 76 61 6c 75 65 20 69 73  the new value is
f2f0: 20 4e 55 4c 4c 20 6f 72 20 31 20 28 74 72 75 65   NULL or 1 (true
f300: 29 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77  )..** In other w
f310: 6f 72 64 73 2c 20 61 20 70 72 69 6f 72 20 72 5b  ords, a prior r[
f320: 50 32 5d 20 76 61 6c 75 65 20 77 69 6c 6c 20 6e  P2] value will n
f330: 6f 74 20 62 65 20 6f 76 65 72 77 72 69 74 74 65  ot be overwritte
f340: 6e 20 62 79 20 30 20 28 66 61 6c 73 65 29 2e 0a  n by 0 (false)..
f350: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74  */./* Opcode: Lt
f360: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
f370: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46 20  ** Synopsis: IF 
f380: 72 5b 50 33 5d 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a  r[P3]<r[P1].**.*
f390: 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20 76 61  * Compare the va
f3a0: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
f3b0: 20 50 31 20 61 6e 64 20 50 33 2e 20 20 49 66 20   P1 and P3.  If 
f3c0: 72 65 67 28 50 33 29 3c 72 65 67 28 50 31 29 20  reg(P3)<reg(P1) 
f3d0: 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20  then.** jump to 
f3e0: 61 64 64 72 65 73 73 20 50 32 2e 20 20 4f 72 20  address P2.  Or 
f3f0: 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f 53 54  if the SQLITE_ST
f400: 4f 52 45 50 32 20 66 6c 61 67 20 69 73 20 73 65  OREP2 flag is se
f410: 74 20 69 6e 20 50 35 20 73 74 6f 72 65 0a 2a 2a  t in P5 store.**
f420: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63   the result of c
f430: 6f 6d 70 61 72 69 73 6f 6e 20 28 30 20 6f 72 20  omparison (0 or 
f440: 31 20 6f 72 20 4e 55 4c 4c 29 20 69 6e 74 6f 20  1 or NULL) into 
f450: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
f460: 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  ** If the SQLITE
f470: 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20  _JUMPIFNULL bit 
f480: 6f 66 20 50 35 20 69 73 20 73 65 74 20 61 6e 64  of P5 is set and
f490: 20 65 69 74 68 65 72 20 72 65 67 28 50 31 29 20   either reg(P1) 
f4a0: 6f 72 0a 2a 2a 20 72 65 67 28 50 33 29 20 69 73  or.** reg(P3) is
f4b0: 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 74   NULL then the t
f4c0: 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20 20 49  ake the jump.  I
f4d0: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d  f the SQLITE_JUM
f4e0: 50 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74 20  PIFNULL .** bit 
f4f0: 69 73 20 63 6c 65 61 72 20 74 68 65 6e 20 66 61  is clear then fa
f500: 6c 6c 20 74 68 72 6f 75 67 68 20 69 66 20 65 69  ll through if ei
f510: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
f520: 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  NULL..**.** The 
f530: 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
f540: 70 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75  portion of P5 mu
f550: 73 74 20 62 65 20 61 6e 20 61 66 66 69 6e 69 74  st be an affinit
f560: 79 20 63 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a  y character -.**
f570: 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54   SQLITE_AFF_TEXT
f580: 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  , SQLITE_AFF_INT
f590: 45 47 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72  EGER, and so for
f5a0: 74 68 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 69  th. An attempt i
f5b0: 73 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f  s made .** to co
f5c0: 65 72 63 65 20 62 6f 74 68 20 69 6e 70 75 74 73  erce both inputs
f5d0: 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68   according to th
f5e0: 69 73 20 61 66 66 69 6e 69 74 79 20 62 65 66 6f  is affinity befo
f5f0: 72 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72  re the.** compar
f600: 69 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49 66  ison is made. If
f610: 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   the SQLITE_AFF_
f620: 4d 41 53 4b 20 69 73 20 30 78 30 30 2c 20 74 68  MASK is 0x00, th
f630: 65 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66  en numeric.** af
f640: 66 69 6e 69 74 79 20 69 73 20 75 73 65 64 2e 20  finity is used. 
f650: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 61 66  Note that the af
f660: 66 69 6e 69 74 79 20 63 6f 6e 76 65 72 73 69 6f  finity conversio
f670: 6e 73 20 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a  ns are stored.**
f680: 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 69   back into the i
f690: 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20 50  nput registers P
f6a0: 31 20 61 6e 64 20 50 33 2e 20 20 53 6f 20 74 68  1 and P3.  So th
f6b0: 69 73 20 6f 70 63 6f 64 65 20 63 61 6e 20 63 61  is opcode can ca
f6c0: 75 73 65 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e  use.** persisten
f6d0: 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72 65 67  t changes to reg
f6e0: 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33  isters P1 and P3
f6f0: 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79  ..**.** Once any
f700: 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61 76   conversions hav
f710: 65 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61  e taken place, a
f720: 6e 64 20 6e 65 69 74 68 65 72 20 76 61 6c 75 65  nd neither value
f730: 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68   is NULL, .** th
f740: 65 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d  e values are com
f750: 70 61 72 65 64 2e 20 49 66 20 62 6f 74 68 20 76  pared. If both v
f760: 61 6c 75 65 73 20 61 72 65 20 62 6c 6f 62 73 20  alues are blobs 
f770: 74 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73  then memcmp() is
f780: 0a 2a 2a 20 75 73 65 64 20 74 6f 20 64 65 74 65  .** used to dete
f790: 72 6d 69 6e 65 20 74 68 65 20 72 65 73 75 6c 74  rmine the result
f7a0: 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69  s of the compari
f7b0: 73 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20 76 61  son.  If both va
f7c0: 6c 75 65 73 0a 2a 2a 20 61 72 65 20 74 65 78 74  lues.** are text
f7d0: 2c 20 74 68 65 6e 20 74 68 65 20 61 70 70 72 6f  , then the appro
f7e0: 70 72 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67  priate collating
f7f0: 20 66 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 66   function specif
f800: 69 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20  ied in.** P4 is 
f810: 20 75 73 65 64 20 74 6f 20 64 6f 20 74 68 65 20   used to do the 
f820: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20  comparison.  If 
f830: 50 34 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66  P4 is not specif
f840: 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63  ied then.** memc
f850: 6d 70 28 29 20 69 73 20 75 73 65 64 20 74 6f 20  mp() is used to 
f860: 63 6f 6d 70 61 72 65 20 74 65 78 74 20 73 74 72  compare text str
f870: 69 6e 67 2e 20 20 49 66 20 62 6f 74 68 20 76 61  ing.  If both va
f880: 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65  lues are.** nume
f890: 72 69 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65  ric, then a nume
f8a0: 72 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69  ric comparison i
f8b0: 73 20 75 73 65 64 2e 20 49 66 20 74 68 65 20 74  s used. If the t
f8c0: 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65  wo values.** are
f8d0: 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 74 79   of different ty
f8e0: 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72  pes, then number
f8f0: 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64  s are considered
f900: 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74   less than.** st
f910: 72 69 6e 67 73 20 61 6e 64 20 73 74 72 69 6e 67  rings and string
f920: 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64  s are considered
f930: 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73   less than blobs
f940: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
f950: 4c 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Le P1 P2 P3 P4 P
f960: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49  5.** Synopsis: I
f970: 46 20 72 5b 50 33 5d 3c 3d 72 5b 50 31 5d 0a 2a  F r[P3]<=r[P1].*
f980: 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
f990: 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74  just like the Lt
f9a0: 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74   opcode except t
f9b0: 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hat the jump is 
f9c0: 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20  taken if.** the 
f9d0: 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
f9e0: 74 65 72 20 50 33 20 69 73 20 6c 65 73 73 20 74  ter P3 is less t
f9f0: 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
fa00: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a  the content of.*
fa10: 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20  * register P1.  
fa20: 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  See the Lt opcod
fa30: 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
fa40: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
fa50: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 74 20 50  ./* Opcode: Gt P
fa60: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
fa70: 20 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b   Synopsis: IF r[
fa80: 50 33 5d 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  P3]>r[P1].**.** 
fa90: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
faa0: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
fab0: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
fac0: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
fad0: 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   if.** the conte
fae0: 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
faf0: 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  3 is greater tha
fb00: 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  n the content of
fb10: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e  .** register P1.
fb20: 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63    See the Lt opc
fb30: 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
fb40: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
fb50: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 65  */./* Opcode: Ge
fb60: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
fb70: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46 20  ** Synopsis: IF 
fb80: 72 5b 50 33 5d 3e 3d 72 5b 50 31 5d 0a 2a 2a 0a  r[P3]>=r[P1].**.
fb90: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
fba0: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
fbb0: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
fbc0: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
fbd0: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f  ken if.** the co
fbe0: 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
fbf0: 72 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20  r P3 is greater 
fc00: 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
fc10: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
fc20: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  ** register P1. 
fc30: 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f   See the Lt opco
fc40: 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  de for additiona
fc50: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
fc60: 2f 0a 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20  /.case OP_Eq:   
fc70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
fc80: 61 6d 65 20 61 73 20 54 4b 5f 45 51 2c 20 6a 75  ame as TK_EQ, ju
fc90: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
fca0: 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 20  case OP_Ne:     
fcb0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
fcc0: 65 20 61 73 20 54 4b 5f 4e 45 2c 20 6a 75 6d 70  e as TK_NE, jump
fcd0: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61  , in1, in3 */.ca
fce0: 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 20 20 20  se OP_Lt:       
fcf0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
fd00: 61 73 20 54 4b 5f 4c 54 2c 20 6a 75 6d 70 2c 20  as TK_LT, jump, 
fd10: 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  in1, in3 */.case
fd20: 20 4f 50 5f 4c 65 3a 20 20 20 20 20 20 20 20 20   OP_Le:         
fd30: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
fd40: 20 54 4b 5f 4c 45 2c 20 6a 75 6d 70 2c 20 69 6e   TK_LE, jump, in
fd50: 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  1, in3 */.case O
fd60: 50 5f 47 74 3a 20 20 20 20 20 20 20 20 20 20 20  P_Gt:           
fd70: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
fd80: 4b 5f 47 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_GT, jump, in1,
fd90: 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
fda0: 47 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  Ge: {           
fdb0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
fdc0: 47 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  GE, jump, in1, i
fdd0: 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 2c  n3 */.  int res,
fde0: 20 72 65 73 32 3b 20 20 20 20 20 20 2f 2a 20 52   res2;      /* R
fdf0: 65 73 75 6c 74 20 6f 66 20 74 68 65 20 63 6f 6d  esult of the com
fe00: 70 61 72 69 73 6f 6e 20 6f 66 20 70 49 6e 31 20  parison of pIn1 
fe10: 61 67 61 69 6e 73 74 20 70 49 6e 33 20 2a 2f 0a  against pIn3 */.
fe20: 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b    char affinity;
fe30: 20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74        /* Affinit
fe40: 79 20 74 6f 20 75 73 65 20 66 6f 72 20 63 6f 6d  y to use for com
fe50: 70 61 72 69 73 6f 6e 20 2a 2f 0a 20 20 75 31 36  parison */.  u16
fe60: 20 66 6c 61 67 73 31 3b 20 20 20 20 20 20 20 20   flags1;        
fe70: 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69 74   /* Copy of init
fe80: 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 70 49 6e  ial value of pIn
fe90: 31 2d 3e 66 6c 61 67 73 20 2a 2f 0a 20 20 75 31  1->flags */.  u1
fea0: 36 20 66 6c 61 67 73 33 3b 20 20 20 20 20 20 20  6 flags3;       
feb0: 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69    /* Copy of ini
fec0: 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 70 49  tial value of pI
fed0: 6e 33 2d 3e 66 6c 61 67 73 20 2a 2f 0a 0a 20 20  n3->flags */..  
fee0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
fef0: 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20  ->p1];.  pIn3 = 
ff00: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
ff10: 20 20 66 6c 61 67 73 31 20 3d 20 70 49 6e 31 2d    flags1 = pIn1-
ff20: 3e 66 6c 61 67 73 3b 0a 20 20 66 6c 61 67 73 33  >flags;.  flags3
ff30: 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a   = pIn3->flags;.
ff40: 20 20 69 66 28 20 28 66 6c 61 67 73 31 20 7c 20    if( (flags1 | 
ff50: 66 6c 61 67 73 33 29 26 4d 45 4d 5f 4e 75 6c 6c  flags3)&MEM_Null
ff60: 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 65 20 6f   ){.    /* One o
ff70: 72 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20  r both operands 
ff80: 61 72 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20  are NULL */.    
ff90: 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  if( pOp->p5 & SQ
ffa0: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 29 7b 0a 20  LITE_NULLEQ ){. 
ffb0: 20 20 20 20 20 2f 2a 20 49 66 20 53 51 4c 49 54       /* If SQLIT
ffc0: 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20  E_NULLEQ is set 
ffd0: 28 77 68 69 63 68 20 77 69 6c 6c 20 6f 6e 6c 79  (which will only
ffe0: 20 68 61 70 70 65 6e 20 69 66 20 74 68 65 20 6f   happen if the o
fff0: 70 65 72 61 74 6f 72 20 69 73 0a 20 20 20 20 20  perator is.     
10000 20 2a 2a 20 4f 50 5f 45 71 20 6f 72 20 4f 50 5f   ** OP_Eq or OP_
10010 4e 65 29 20 74 68 65 6e 20 74 61 6b 65 20 74 68  Ne) then take th
10020 65 20 6a 75 6d 70 20 6f 72 20 6e 6f 74 20 64 65  e jump or not de
10030 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68  pending on wheth
10040 65 72 0a 20 20 20 20 20 20 2a 2a 20 6f 72 20 6e  er.      ** or n
10050 6f 74 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73  ot both operands
10060 20 61 72 65 20 6e 75 6c 6c 2e 0a 20 20 20 20 20   are null..     
10070 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
10080 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
10090 50 5f 45 71 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  P_Eq || pOp->opc
100a0 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20  ode==OP_Ne );.  
100b0 20 20 20 20 61 73 73 65 72 74 28 20 28 66 6c 61      assert( (fla
100c0 67 73 31 20 26 20 4d 45 4d 5f 43 6c 65 61 72 65  gs1 & MEM_Cleare
100d0 64 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 61  d)==0 );.      a
100e0 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 20  ssert( (pOp->p5 
100f0 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  & SQLITE_JUMPIFN
10100 55 4c 4c 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20  ULL)==0 );.     
10110 20 69 66 28 20 28 66 6c 61 67 73 31 26 66 6c 61   if( (flags1&fla
10120 67 73 33 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30  gs3&MEM_Null)!=0
10130 0a 20 20 20 20 20 20 20 26 26 20 28 66 6c 61 67  .       && (flag
10140 73 33 26 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d  s3&MEM_Cleared)=
10150 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20  =0.      ){.    
10160 20 20 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a      res = 0;  /*
10170 20 4f 70 65 72 61 6e 64 73 20 61 72 65 20 65 71   Operands are eq
10180 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c  ual */.      }el
10190 73 65 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20  se{.        res 
101a0 3d 20 31 3b 20 20 2f 2a 20 4f 70 65 72 61 6e 64  = 1;  /* Operand
101b0 73 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 20  s are not equal 
101c0 2a 2f 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  */.      }.    }
101d0 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 53  else{.      /* S
101e0 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20  QLITE_NULLEQ is 
101f0 63 6c 65 61 72 20 61 6e 64 20 61 74 20 6c 65 61  clear and at lea
10200 73 74 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20 69  st one operand i
10210 73 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 2a 2a  s NULL,.      **
10220 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
10230 20 69 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e   is always NULL.
10240 0a 20 20 20 20 20 20 2a 2a 20 54 68 65 20 6a 75  .      ** The ju
10250 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74  mp is taken if t
10260 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46  he SQLITE_JUMPIF
10270 4e 55 4c 4c 20 62 69 74 20 69 73 20 73 65 74 2e  NULL bit is set.
10280 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
10290 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  if( pOp->p5 & SQ
102a0 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a  LITE_STOREP2 ){.
102b0 20 20 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26          pOut = &
102c0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
102d0 20 20 20 20 20 20 20 69 43 6f 6d 70 61 72 65 20         iCompare 
102e0 3d 20 31 3b 20 20 20 20 2f 2a 20 4f 70 65 72 61  = 1;    /* Opera
102f0 6e 64 73 20 61 72 65 20 6e 6f 74 20 65 71 75 61  nds are not equa
10300 6c 20 2a 2f 0a 20 20 20 20 20 20 20 20 6d 65 6d  l */.        mem
10310 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
10320 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 20 20   pOut);.        
10330 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
10340 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  Out, MEM_Null);.
10350 20 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52          REGISTER
10360 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
10370 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c  pOut);.      }el
10380 73 65 7b 0a 20 20 20 20 20 20 20 20 56 64 62 65  se{.        Vdbe
10390 42 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33 29  BranchTaken(2,3)
103a0 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 4f  ;.        if( pO
103b0 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4a  p->p5 & SQLITE_J
103c0 55 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a 20 20 20  UMPIFNULL ){.   
103d0 20 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70         goto jump
103e0 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 20 20  _to_p2;.        
103f0 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  }.      }.      
10400 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d  break;.    }.  }
10410 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 4e 65 69  else{.    /* Nei
10420 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
10430 4e 55 4c 4c 2e 20 20 44 6f 20 61 20 63 6f 6d 70  NULL.  Do a comp
10440 61 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61  arison. */.    a
10450 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70  ffinity = pOp->p
10460 35 20 26 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  5 & SQLITE_AFF_M
10470 41 53 4b 3b 0a 20 20 20 20 69 66 28 20 61 66 66  ASK;.    if( aff
10480 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41 46  inity>=SQLITE_AF
10490 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20 20 20  F_NUMERIC ){.   
104a0 20 20 20 69 66 28 20 28 66 6c 61 67 73 31 20 7c     if( (flags1 |
104b0 20 66 6c 61 67 73 33 29 26 4d 45 4d 5f 53 74 72   flags3)&MEM_Str
104c0 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
104d0 28 66 6c 61 67 73 31 20 26 20 28 4d 45 4d 5f 49  (flags1 & (MEM_I
104e0 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f  nt|MEM_Real|MEM_
104f0 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29  Str))==MEM_Str )
10500 7b 0a 20 20 20 20 20 20 20 20 20 20 61 70 70 6c  {.          appl
10510 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
10520 28 70 49 6e 31 2c 30 29 3b 0a 20 20 20 20 20 20  (pIn1,0);.      
10530 20 20 20 20 74 65 73 74 63 61 73 65 28 20 66 6c      testcase( fl
10540 61 67 73 33 21 3d 70 49 6e 33 2d 3e 66 6c 61 67  ags3!=pIn3->flag
10550 73 20 29 3b 20 2f 2a 20 50 6f 73 73 69 62 6c 65  s ); /* Possible
10560 20 69 66 20 70 49 6e 31 3d 3d 70 49 6e 33 20 2a   if pIn1==pIn3 *
10570 2f 0a 20 20 20 20 20 20 20 20 20 20 66 6c 61 67  /.          flag
10580 73 33 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73  s3 = pIn3->flags
10590 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
105a0 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 33 20      if( (flags3 
105b0 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
105c0 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d  eal|MEM_Str))==M
105d0 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20  EM_Str ){.      
105e0 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
105f0 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 30 29  Affinity(pIn3,0)
10600 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
10610 20 20 7d 0a 20 20 20 20 20 20 2f 2a 20 48 61 6e    }.      /* Han
10620 64 6c 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63  dle the common c
10630 61 73 65 20 6f 66 20 69 6e 74 65 67 65 72 20 63  ase of integer c
10640 6f 6d 70 61 72 69 73 6f 6e 20 68 65 72 65 2c 20  omparison here, 
10650 61 73 20 61 6e 0a 20 20 20 20 20 20 2a 2a 20 6f  as an.      ** o
10660 70 74 69 6d 69 7a 61 74 69 6f 6e 2c 20 74 6f 20  ptimization, to 
10670 61 76 6f 69 64 20 61 20 63 61 6c 6c 20 74 6f 20  avoid a call to 
10680 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72  sqlite3MemCompar
10690 65 28 29 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  e() */.      if(
106a0 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
106b0 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
106c0 4d 5f 49 6e 74 29 21 3d 30 20 29 7b 0a 20 20 20  M_Int)!=0 ){.   
106d0 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 75       if( pIn3->u
106e0 2e 69 20 3e 20 70 49 6e 31 2d 3e 75 2e 69 20 29  .i > pIn1->u.i )
106f0 7b 20 72 65 73 20 3d 20 2b 31 3b 20 67 6f 74 6f  { res = +1; goto
10700 20 63 6f 6d 70 61 72 65 5f 6f 70 3b 20 7d 0a 20   compare_op; }. 
10710 20 20 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d         if( pIn3-
10720 3e 75 2e 69 20 3c 20 70 49 6e 31 2d 3e 75 2e 69  >u.i < pIn1->u.i
10730 20 29 7b 20 72 65 73 20 3d 20 2d 31 3b 20 67 6f   ){ res = -1; go
10740 74 6f 20 63 6f 6d 70 61 72 65 5f 6f 70 3b 20 7d  to compare_op; }
10750 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 30  .        res = 0
10760 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 63  ;.        goto c
10770 6f 6d 70 61 72 65 5f 6f 70 3b 0a 20 20 20 20 20  ompare_op;.     
10780 20 7d 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28   }.    }else if(
10790 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54   affinity==SQLIT
107a0 45 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a 20 20  E_AFF_TEXT ){.  
107b0 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 31 20      if( (flags1 
107c0 26 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26 26  & MEM_Str)==0 &&
107d0 20 28 66 6c 61 67 73 31 20 26 20 28 4d 45 4d 5f   (flags1 & (MEM_
107e0 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 21 3d  Int|MEM_Real))!=
107f0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 74 65 73  0 ){.        tes
10800 74 63 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61  tcase( pIn1->fla
10810 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a  gs & MEM_Int );.
10820 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65          testcase
10830 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
10840 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20 20  MEM_Real );.    
10850 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
10860 65 6d 53 74 72 69 6e 67 69 66 79 28 70 49 6e 31  emStringify(pIn1
10870 2c 20 65 6e 63 6f 64 69 6e 67 2c 20 31 29 3b 0a  , encoding, 1);.
10880 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65          testcase
10890 28 20 28 66 6c 61 67 73 31 26 4d 45 4d 5f 44 79  ( (flags1&MEM_Dy
108a0 6e 29 20 21 3d 20 28 70 49 6e 31 2d 3e 66 6c 61  n) != (pIn1->fla
108b0 67 73 26 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20  gs&MEM_Dyn) );. 
108c0 20 20 20 20 20 20 20 66 6c 61 67 73 31 20 3d 20         flags1 = 
108d0 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 7e  (pIn1->flags & ~
108e0 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20  MEM_TypeMask) | 
108f0 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 54 79  (flags1 & MEM_Ty
10900 70 65 4d 61 73 6b 29 3b 0a 20 20 20 20 20 20 20  peMask);.       
10910 20 61 73 73 65 72 74 28 20 70 49 6e 31 21 3d 70   assert( pIn1!=p
10920 49 6e 33 20 29 3b 0a 20 20 20 20 20 20 7d 0a 20  In3 );.      }. 
10930 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 33       if( (flags3
10940 20 26 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26   & MEM_Str)==0 &
10950 26 20 28 66 6c 61 67 73 33 20 26 20 28 4d 45 4d  & (flags3 & (MEM
10960 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 21  _Int|MEM_Real))!
10970 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 74 65  =0 ){.        te
10980 73 74 63 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c  stcase( pIn3->fl
10990 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
109a0 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73  .        testcas
109b0 65 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  e( pIn3->flags &
109c0 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20   MEM_Real );.   
109d0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
109e0 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70 49 6e  MemStringify(pIn
109f0 33 2c 20 65 6e 63 6f 64 69 6e 67 2c 20 31 29 3b  3, encoding, 1);
10a00 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73  .        testcas
10a10 65 28 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 44  e( (flags3&MEM_D
10a20 79 6e 29 20 21 3d 20 28 70 49 6e 33 2d 3e 66 6c  yn) != (pIn3->fl
10a30 61 67 73 26 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a  ags&MEM_Dyn) );.
10a40 20 20 20 20 20 20 20 20 66 6c 61 67 73 33 20 3d          flags3 =
10a50 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
10a60 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c  ~MEM_TypeMask) |
10a70 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f 54   (flags3 & MEM_T
10a80 79 70 65 4d 61 73 6b 29 3b 0a 20 20 20 20 20 20  ypeMask);.      
10a90 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65  }.    }.    asse
10aa0 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
10ab0 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20 70  =P4_COLLSEQ || p
10ac0 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20  Op->p4.pColl==0 
10ad0 29 3b 0a 20 20 20 20 72 65 73 20 3d 20 73 71 6c  );.    res = sql
10ae0 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 70  ite3MemCompare(p
10af0 49 6e 33 2c 20 70 49 6e 31 2c 20 70 4f 70 2d 3e  In3, pIn1, pOp->
10b00 70 34 2e 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 63  p4.pColl);.  }.c
10b10 6f 6d 70 61 72 65 5f 6f 70 3a 0a 20 20 73 77 69  ompare_op:.  swi
10b20 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  tch( pOp->opcode
10b30 20 29 7b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f   ){.    case OP_
10b40 45 71 3a 20 20 20 20 72 65 73 32 20 3d 20 72 65  Eq:    res2 = re
10b50 73 3d 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b  s==0;     break;
10b60 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4e 65 3a  .    case OP_Ne:
10b70 20 20 20 20 72 65 73 32 20 3d 20 72 65 73 3b 20      res2 = res; 
10b80 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
10b90 20 20 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20    case OP_Lt:   
10ba0 20 72 65 73 32 20 3d 20 72 65 73 3c 30 3b 20 20   res2 = res<0;  
10bb0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
10bc0 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 72 65  ase OP_Le:    re
10bd0 73 32 20 3d 20 72 65 73 3c 3d 30 3b 20 20 20 20  s2 = res<=0;    
10be0 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
10bf0 20 4f 50 5f 47 74 3a 20 20 20 20 72 65 73 32 20   OP_Gt:    res2 
10c00 3d 20 72 65 73 3e 30 3b 20 20 20 20 20 20 62 72  = res>0;      br
10c10 65 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74  eak;.    default
10c20 3a 20 20 20 20 20 20 20 72 65 73 32 20 3d 20 72  :       res2 = r
10c30 65 73 3e 3d 30 3b 20 20 20 20 20 62 72 65 61 6b  es>=0;     break
10c40 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 55 6e 64 6f  ;.  }..  /* Undo
10c50 20 61 6e 79 20 63 68 61 6e 67 65 73 20 6d 61 64   any changes mad
10c60 65 20 62 79 20 61 70 70 6c 79 41 66 66 69 6e 69  e by applyAffini
10c70 74 79 28 29 20 74 6f 20 74 68 65 20 69 6e 70 75  ty() to the inpu
10c80 74 20 72 65 67 69 73 74 65 72 73 2e 20 2a 2f 0a  t registers. */.
10c90 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 31 2d    assert( (pIn1-
10ca0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e  >flags & MEM_Dyn
10cb0 29 20 3d 3d 20 28 66 6c 61 67 73 31 20 26 20 4d  ) == (flags1 & M
10cc0 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 70 49 6e  EM_Dyn) );.  pIn
10cd0 31 2d 3e 66 6c 61 67 73 20 3d 20 66 6c 61 67 73  1->flags = flags
10ce0 31 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 49  1;.  assert( (pI
10cf0 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
10d00 44 79 6e 29 20 3d 3d 20 28 66 6c 61 67 73 33 20  Dyn) == (flags3 
10d10 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20  & MEM_Dyn) );.  
10d20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 3d 20 66 6c  pIn3->flags = fl
10d30 61 67 73 33 3b 0a 0a 20 20 69 66 28 20 70 4f 70  ags3;..  if( pOp
10d40 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54  ->p5 & SQLITE_ST
10d50 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 70 4f 75  OREP2 ){.    pOu
10d60 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
10d70 32 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61 72 65  2];.    iCompare
10d80 20 3d 20 72 65 73 3b 0a 20 20 20 20 72 65 73 32   = res;.    res2
10d90 20 3d 20 72 65 73 32 21 3d 30 3b 20 20 2f 2a 20   = res2!=0;  /* 
10da0 46 6f 72 20 74 68 69 73 20 70 61 74 68 20 72 65  For this path re
10db0 73 32 20 6d 75 73 74 20 62 65 20 65 78 61 63 74  s2 must be exact
10dc0 6c 79 20 30 20 6f 72 20 31 20 2a 2f 0a 20 20 20  ly 0 or 1 */.   
10dd0 20 69 66 28 20 28 70 4f 70 2d 3e 70 35 20 26 20   if( (pOp->p5 & 
10de0 53 51 4c 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 29  SQLITE_KEEPNULL)
10df0 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  !=0 ){.      /* 
10e00 54 68 65 20 4b 45 45 50 4e 55 4c 4c 20 66 6c 61  The KEEPNULL fla
10e10 67 20 70 72 65 76 65 6e 74 73 20 4f 50 5f 45 71  g prevents OP_Eq
10e20 20 66 72 6f 6d 20 6f 76 65 72 77 72 69 74 69 6e   from overwritin
10e30 67 20 61 20 4e 55 4c 4c 20 77 69 74 68 20 31 0a  g a NULL with 1.
10e40 20 20 20 20 20 20 2a 2a 20 61 6e 64 20 70 72 65        ** and pre
10e50 76 65 6e 74 73 20 4f 50 5f 4e 65 20 66 72 6f 6d  vents OP_Ne from
10e60 20 6f 76 65 72 77 72 69 74 69 6e 67 20 4e 55 4c   overwriting NUL
10e70 4c 20 77 69 74 68 20 30 2e 20 20 54 68 69 73 20  L with 0.  This 
10e80 66 6c 61 67 0a 20 20 20 20 20 20 2a 2a 20 69 73  flag.      ** is
10e90 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e 20 63 6f   only used in co
10ea0 6e 74 65 78 74 73 20 77 68 65 72 65 20 65 69 74  ntexts where eit
10eb0 68 65 72 3a 0a 20 20 20 20 20 20 2a 2a 20 20 20  her:.      **   
10ec0 28 31 29 20 6f 70 3d 3d 4f 50 5f 45 71 20 26 26  (1) op==OP_Eq &&
10ed0 20 28 72 5b 50 32 5d 3d 3d 4e 55 4c 4c 20 7c 7c   (r[P2]==NULL ||
10ee0 20 72 5b 50 32 5d 3d 3d 30 29 0a 20 20 20 20 20   r[P2]==0).     
10ef0 20 2a 2a 20 20 20 28 32 29 20 6f 70 3d 3d 4f 50   **   (2) op==OP
10f00 5f 4e 65 20 26 26 20 28 72 5b 50 32 5d 3d 3d 4e  _Ne && (r[P2]==N
10f10 55 4c 4c 20 7c 7c 20 72 5b 50 32 5d 3d 3d 31 29  ULL || r[P2]==1)
10f20 0a 20 20 20 20 20 20 2a 2a 20 54 68 65 72 65 66  .      ** Theref
10f30 6f 72 65 20 69 74 20 69 73 20 6e 6f 74 20 6e 65  ore it is not ne
10f40 63 65 73 73 61 72 79 20 74 6f 20 63 68 65 63 6b  cessary to check
10f50 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
10f60 72 5b 50 32 5d 20 66 6f 72 0a 20 20 20 20 20 20  r[P2] for.      
10f70 2a 2a 20 4e 55 4c 4c 2e 20 2a 2f 0a 20 20 20 20  ** NULL. */.    
10f80 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
10f90 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 7c 7c 20  pcode==OP_Ne || 
10fa0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
10fb0 45 71 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  Eq );.      asse
10fc0 72 74 28 20 72 65 73 32 3d 3d 30 20 7c 7c 20 72  rt( res2==0 || r
10fd0 65 73 32 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20  es2==1 );.      
10fe0 74 65 73 74 63 61 73 65 28 20 72 65 73 32 3d 3d  testcase( res2==
10ff0 30 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  0 && pOp->opcode
11000 3d 3d 4f 50 5f 45 71 20 29 3b 0a 20 20 20 20 20  ==OP_Eq );.     
11010 20 74 65 73 74 63 61 73 65 28 20 72 65 73 32 3d   testcase( res2=
11020 3d 31 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f 64  =1 && pOp->opcod
11030 65 3d 3d 4f 50 5f 45 71 20 29 3b 0a 20 20 20 20  e==OP_Eq );.    
11040 20 20 74 65 73 74 63 61 73 65 28 20 72 65 73 32    testcase( res2
11050 3d 3d 30 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f  ==0 && pOp->opco
11060 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20  de==OP_Ne );.   
11070 20 20 20 74 65 73 74 63 61 73 65 28 20 72 65 73     testcase( res
11080 32 3d 3d 31 20 26 26 20 70 4f 70 2d 3e 6f 70 63  2==1 && pOp->opc
11090 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20  ode==OP_Ne );.  
110a0 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70      if( (pOp->op
110b0 63 6f 64 65 3d 3d 4f 50 5f 45 71 29 3d 3d 72 65  code==OP_Eq)==re
110c0 73 32 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20  s2 ) break;.    
110d0 7d 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f  }.    memAboutTo
110e0 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
110f0 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
11100 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
11110 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  t);.    pOut->u.
11120 69 20 3d 20 72 65 73 32 3b 0a 20 20 20 20 52 45  i = res2;.    RE
11130 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
11140 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 7d  ->p2, pOut);.  }
11150 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72  else{.    VdbeBr
11160 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30  anchTaken(res!=0
11170 2c 20 28 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c  , (pOp->p5 & SQL
11180 49 54 45 5f 4e 55 4c 4c 45 51 29 3f 32 3a 33 29  ITE_NULLEQ)?2:3)
11190 3b 0a 20 20 20 20 69 66 28 20 72 65 73 32 20 29  ;.    if( res2 )
111a0 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d  {.      goto jum
111b0 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20  p_to_p2;.    }. 
111c0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
111d0 2a 20 4f 70 63 6f 64 65 3a 20 45 6c 73 65 4e 6f  * Opcode: ElseNo
111e0 74 45 71 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a  tEq * P2 * * *.*
111f0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
11200 20 6d 75 73 74 20 69 6d 6d 65 64 69 61 74 65 6c   must immediatel
11210 79 20 66 6f 6c 6c 6f 77 20 61 6e 20 4f 50 5f 4c  y follow an OP_L
11220 74 20 6f 72 20 4f 50 5f 47 74 20 63 6f 6d 70 61  t or OP_Gt compa
11230 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 0a  rison operator..
11240 2a 2a 20 49 66 20 72 65 73 75 6c 74 20 6f 66 20  ** If result of 
11250 61 6e 20 4f 50 5f 45 71 20 63 6f 6d 70 61 72 69  an OP_Eq compari
11260 73 6f 6e 20 6f 6e 20 74 68 65 20 73 61 6d 65 20  son on the same 
11270 74 77 6f 20 6f 70 65 72 61 6e 64 73 0a 2a 2a 20  two operands.** 
11280 77 6f 75 6c 64 20 68 61 76 65 20 62 65 20 4e 55  would have be NU
11290 4c 4c 20 6f 72 20 66 61 6c 73 65 20 28 30 29 2c  LL or false (0),
112a0 20 74 68 65 6e 20 74 68 65 6e 20 6a 75 6d 70 20   then then jump 
112b0 74 6f 20 50 32 2e 20 0a 2a 2a 20 49 66 20 74 68  to P2. .** If th
112c0 65 20 72 65 73 75 6c 74 20 6f 66 20 61 6e 20 4f  e result of an O
112d0 50 5f 45 71 20 63 6f 6d 70 61 72 69 73 6f 6e 20  P_Eq comparison 
112e0 6f 6e 20 74 68 65 20 74 77 6f 20 70 72 65 76 69  on the two previ
112f0 6f 75 73 20 6f 70 65 72 61 6e 64 73 0a 2a 2a 20  ous operands.** 
11300 77 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e 20  would have been 
11310 74 72 75 65 20 28 31 29 2c 20 74 68 65 6e 20 66  true (1), then f
11320 61 6c 6c 20 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a  all through..*/.
11330 63 61 73 65 20 4f 50 5f 45 6c 73 65 4e 6f 74 45  case OP_ElseNotE
11340 71 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 73 61  q: {       /* sa
11350 6d 65 20 61 73 20 54 4b 5f 45 53 43 41 50 45 2c  me as TK_ESCAPE,
11360 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72   jump */.  asser
11370 74 28 20 70 4f 70 3e 61 4f 70 20 29 3b 0a 20 20  t( pOp>aOp );.  
11380 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e  assert( pOp[-1].
11390 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4c 74 20 7c 7c  opcode==OP_Lt ||
113a0 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d   pOp[-1].opcode=
113b0 3d 4f 50 5f 47 74 20 29 3b 0a 20 20 61 73 73 65  =OP_Gt );.  asse
113c0 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 35 20 26  rt( pOp[-1].p5 &
113d0 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
113e0 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  );.  VdbeBranchT
113f0 61 6b 65 6e 28 69 43 6f 6d 70 61 72 65 21 3d 30  aken(iCompare!=0
11400 2c 20 32 29 3b 0a 20 20 69 66 28 20 69 43 6f 6d  , 2);.  if( iCom
11410 70 61 72 65 21 3d 30 20 29 20 67 6f 74 6f 20 6a  pare!=0 ) goto j
11420 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65  ump_to_p2;.  bre
11430 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.}.../* Opcod
11440 65 3a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20 2a  e: Permutation *
11450 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
11460 53 65 74 20 74 68 65 20 70 65 72 6d 75 74 61 74  Set the permutat
11470 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20  ion used by the 
11480 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61  OP_Compare opera
11490 74 6f 72 20 69 6e 20 74 68 65 20 6e 65 78 74 0a  tor in the next.
114a0 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  ** instruction. 
114b0 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   The permutation
114c0 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68   is stored in th
114d0 65 20 50 34 20 6f 70 65 72 61 6e 64 2e 0a 2a 2a  e P4 operand..**
114e0 0a 2a 2a 20 54 68 65 20 70 65 72 6d 75 74 61 74  .** The permutat
114f0 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69  ion is only vali
11500 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74  d until the next
11510 20 4f 50 5f 43 6f 6d 70 61 72 65 20 74 68 61 74   OP_Compare that
11520 20 68 61 73 0a 2a 2a 20 74 68 65 20 4f 50 46 4c   has.** the OPFL
11530 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20 73  AG_PERMUTE bit s
11540 65 74 20 69 6e 20 50 35 2e 20 54 79 70 69 63 61  et in P5. Typica
11550 6c 6c 79 20 74 68 65 20 4f 50 5f 50 65 72 6d 75  lly the OP_Permu
11560 74 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 0a 2a  tation should .*
11570 2a 20 6f 63 63 75 72 20 69 6d 6d 65 64 69 61 74  * occur immediat
11580 65 6c 79 20 70 72 69 6f 72 20 74 6f 20 74 68 65  ely prior to the
11590 20 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2a 0a   OP_Compare..**.
115a0 2a 2a 20 54 68 65 20 66 69 72 73 74 20 69 6e 74  ** The first int
115b0 65 67 65 72 20 69 6e 20 74 68 65 20 50 34 20 69  eger in the P4 i
115c0 6e 74 65 67 65 72 20 61 72 72 61 79 20 69 73 20  nteger array is 
115d0 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68  the length of th
115e0 65 20 61 72 72 61 79 0a 2a 2a 20 61 6e 64 20 64  e array.** and d
115f0 6f 65 73 20 6e 6f 74 20 62 65 63 6f 6d 65 20 70  oes not become p
11600 61 72 74 20 6f 66 20 74 68 65 20 70 65 72 6d 75  art of the permu
11610 74 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  tation..*/.case 
11620 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 3a 20  OP_Permutation: 
11630 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  {.  assert( pOp-
11640 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41  >p4type==P4_INTA
11650 52 52 41 59 20 29 3b 0a 20 20 61 73 73 65 72 74  RRAY );.  assert
11660 28 20 70 4f 70 2d 3e 70 34 2e 61 69 20 29 3b 0a  ( pOp->p4.ai );.
11670 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d    assert( pOp[1]
11680 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6d 70  .opcode==OP_Comp
11690 61 72 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28  are );.  assert(
116a0 20 70 4f 70 5b 31 5d 2e 70 35 20 26 20 4f 50 46   pOp[1].p5 & OPF
116b0 4c 41 47 5f 50 45 52 4d 55 54 45 20 29 3b 0a 20  LAG_PERMUTE );. 
116c0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
116d0 63 6f 64 65 3a 20 43 6f 6d 70 61 72 65 20 50 31  code: Compare P1
116e0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
116f0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 40 50  Synopsis: r[P1@P
11700 33 5d 20 3c 2d 3e 20 72 5b 50 32 40 50 33 5d 0a  3] <-> r[P2@P3].
11710 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 77  **.** Compare tw
11720 6f 20 76 65 63 74 6f 72 73 20 6f 66 20 72 65 67  o vectors of reg
11730 69 73 74 65 72 73 20 69 6e 20 72 65 67 28 50 31  isters in reg(P1
11740 29 2e 2e 72 65 67 28 50 31 2b 50 33 2d 31 29 20  )..reg(P1+P3-1) 
11750 28 63 61 6c 6c 20 74 68 69 73 0a 2a 2a 20 76 65  (call this.** ve
11760 63 74 6f 72 20 22 41 22 29 20 61 6e 64 20 69 6e  ctor "A") and in
11770 20 72 65 67 28 50 32 29 2e 2e 72 65 67 28 50 32   reg(P2)..reg(P2
11780 2b 50 33 2d 31 29 20 28 22 42 22 29 2e 20 20 53  +P3-1) ("B").  S
11790 61 76 65 20 74 68 65 20 72 65 73 75 6c 74 20 6f  ave the result o
117a0 66 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69  f.** the compari
117b0 73 6f 6e 20 66 6f 72 20 75 73 65 20 62 79 20 74  son for use by t
117c0 68 65 20 6e 65 78 74 20 4f 50 5f 4a 75 6d 70 20  he next OP_Jump 
117d0 69 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20  instruct..**.** 
117e0 49 66 20 50 35 20 68 61 73 20 74 68 65 20 4f 50  If P5 has the OP
117f0 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74  FLAG_PERMUTE bit
11800 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 6f   set, then the o
11810 72 64 65 72 20 6f 66 20 63 6f 6d 70 61 72 69 73  rder of comparis
11820 6f 6e 20 69 73 0a 2a 2a 20 64 65 74 65 72 6d 69  on is.** determi
11830 6e 65 64 20 62 79 20 74 68 65 20 6d 6f 73 74 20  ned by the most 
11840 72 65 63 65 6e 74 20 4f 50 5f 50 65 72 6d 75 74  recent OP_Permut
11850 61 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 20  ation operator. 
11860 20 49 66 20 74 68 65 0a 2a 2a 20 4f 50 46 4c 41   If the.** OPFLA
11870 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20 69 73  G_PERMUTE bit is
11880 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65 67   clear, then reg
11890 69 73 74 65 72 20 61 72 65 20 63 6f 6d 70 61 72  ister are compar
118a0 65 64 20 69 6e 20 73 65 71 75 65 6e 74 69 61 6c  ed in sequential
118b0 0a 2a 2a 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a  .** order..**.**
118c0 20 50 34 20 69 73 20 61 20 4b 65 79 49 6e 66 6f   P4 is a KeyInfo
118d0 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20   structure that 
118e0 64 65 66 69 6e 65 73 20 63 6f 6c 6c 61 74 69 6e  defines collatin
118f0 67 20 73 65 71 75 65 6e 63 65 73 20 61 6e 64 20  g sequences and 
11900 73 6f 72 74 0a 2a 2a 20 6f 72 64 65 72 73 20 66  sort.** orders f
11910 6f 72 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  or the compariso
11920 6e 2e 20 20 54 68 65 20 70 65 72 6d 75 74 61 74  n.  The permutat
11930 69 6f 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 72  ion applies to r
11940 65 67 69 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79  egisters.** only
11950 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 65  .  The KeyInfo e
11960 6c 65 6d 65 6e 74 73 20 61 72 65 20 75 73 65 64  lements are used
11970 20 73 65 71 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a   sequentially..*
11980 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 70 61 72 69  *.** The compari
11990 73 6f 6e 20 69 73 20 61 20 73 6f 72 74 20 63 6f  son is a sort co
119a0 6d 70 61 72 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c  mparison, so NUL
119b0 4c 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c  Ls compare equal
119c0 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72 65 20 6c  ,.** NULLs are l
119d0 65 73 73 20 74 68 61 6e 20 6e 75 6d 62 65 72 73  ess than numbers
119e0 2c 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6c 65  , numbers are le
119f0 73 73 20 74 68 61 6e 20 73 74 72 69 6e 67 73 2c  ss than strings,
11a00 0a 2a 2a 20 61 6e 64 20 73 74 72 69 6e 67 73 20  .** and strings 
11a10 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 62 6c  are less than bl
11a20 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  obs..*/.case OP_
11a30 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 69 6e 74  Compare: {.  int
11a40 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69   n;.  int i;.  i
11a50 6e 74 20 70 31 3b 0a 20 20 69 6e 74 20 70 32 3b  nt p1;.  int p2;
11a60 0a 20 20 63 6f 6e 73 74 20 4b 65 79 49 6e 66 6f  .  const KeyInfo
11a70 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e   *pKeyInfo;.  in
11a80 74 20 69 64 78 3b 0a 20 20 43 6f 6c 6c 53 65 71  t idx;.  CollSeq
11a90 20 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43   *pColl;    /* C
11aa0 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
11ab0 65 20 74 6f 20 75 73 65 20 6f 6e 20 74 68 69 73  e to use on this
11ac0 20 74 65 72 6d 20 2a 2f 0a 20 20 69 6e 74 20 62   term */.  int b
11ad0 52 65 76 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Rev;          /*
11ae0 20 54 72 75 65 20 66 6f 72 20 44 45 53 43 45 4e   True for DESCEN
11af0 44 49 4e 47 20 73 6f 72 74 20 6f 72 64 65 72 20  DING sort order 
11b00 2a 2f 0a 20 20 69 6e 74 20 2a 61 50 65 72 6d 75  */.  int *aPermu
11b10 74 65 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 70  te;     /* The p
11b20 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 0a 20  ermutation */.. 
11b30 20 69 66 28 20 28 70 4f 70 2d 3e 70 35 20 26 20   if( (pOp->p5 & 
11b40 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 29 3d  OPFLAG_PERMUTE)=
11b50 3d 30 20 29 7b 0a 20 20 20 20 61 50 65 72 6d 75  =0 ){.    aPermu
11b60 74 65 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b  te = 0;.  }else{
11b70 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
11b80 3e 61 4f 70 20 29 3b 0a 20 20 20 20 61 73 73 65  >aOp );.    asse
11b90 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f  rt( pOp[-1].opco
11ba0 64 65 3d 3d 4f 50 5f 50 65 72 6d 75 74 61 74 69  de==OP_Permutati
11bb0 6f 6e 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  on );.    assert
11bc0 28 20 70 4f 70 5b 2d 31 5d 2e 70 34 74 79 70 65  ( pOp[-1].p4type
11bd0 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 29 3b  ==P4_INTARRAY );
11be0 0a 20 20 20 20 61 50 65 72 6d 75 74 65 20 3d 20  .    aPermute = 
11bf0 70 4f 70 5b 2d 31 5d 2e 70 34 2e 61 69 20 2b 20  pOp[-1].p4.ai + 
11c00 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 61  1;.    assert( a
11c10 50 65 72 6d 75 74 65 21 3d 30 20 29 3b 0a 20 20  Permute!=0 );.  
11c20 7d 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b  }.  n = pOp->p3;
11c30 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f  .  pKeyInfo = pO
11c40 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a  p->p4.pKeyInfo;.
11c50 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20 29 3b    assert( n>0 );
11c60 0a 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49  .  assert( pKeyI
11c70 6e 66 6f 21 3d 30 20 29 3b 0a 20 20 70 31 20 3d  nfo!=0 );.  p1 =
11c80 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d   pOp->p1;.  p2 =
11c90 20 70 4f 70 2d 3e 70 32 3b 0a 23 69 66 64 65 66   pOp->p2;.#ifdef
11ca0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
11cb0 69 66 28 20 61 50 65 72 6d 75 74 65 20 29 7b 0a  if( aPermute ){.
11cc0 20 20 20 20 69 6e 74 20 6b 2c 20 6d 78 20 3d 20      int k, mx = 
11cd0 30 3b 0a 20 20 20 20 66 6f 72 28 6b 3d 30 3b 20  0;.    for(k=0; 
11ce0 6b 3c 6e 3b 20 6b 2b 2b 29 20 69 66 28 20 61 50  k<n; k++) if( aP
11cf0 65 72 6d 75 74 65 5b 6b 5d 3e 6d 78 20 29 20 6d  ermute[k]>mx ) m
11d00 78 20 3d 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3b  x = aPermute[k];
11d10 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e  .    assert( p1>
11d20 30 20 26 26 20 70 31 2b 6d 78 3c 3d 28 70 2d 3e  0 && p1+mx<=(p->
11d30 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
11d40 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20 61 73  sor)+1 );.    as
11d50 73 65 72 74 28 20 70 32 3e 30 20 26 26 20 70 32  sert( p2>0 && p2
11d60 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  +mx<=(p->nMem+1 
11d70 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  - p->nCursor)+1 
11d80 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
11d90 61 73 73 65 72 74 28 20 70 31 3e 30 20 26 26 20  assert( p1>0 && 
11da0 70 31 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  p1+n<=(p->nMem+1
11db0 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31   - p->nCursor)+1
11dc0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
11dd0 70 32 3e 30 20 26 26 20 70 32 2b 6e 3c 3d 28 70  p2>0 && p2+n<=(p
11de0 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
11df0 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 0a  ursor)+1 );.  }.
11e00 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
11e10 5f 44 45 42 55 47 20 2a 2f 0a 20 20 66 6f 72 28  _DEBUG */.  for(
11e20 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a  i=0; i<n; i++){.
11e30 20 20 20 20 69 64 78 20 3d 20 61 50 65 72 6d 75      idx = aPermu
11e40 74 65 20 3f 20 61 50 65 72 6d 75 74 65 5b 69 5d  te ? aPermute[i]
11e50 20 3a 20 69 3b 0a 20 20 20 20 61 73 73 65 72 74   : i;.    assert
11e60 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
11e70 65 6d 5b 70 31 2b 69 64 78 5d 29 20 29 3b 0a 20  em[p1+idx]) );. 
11e80 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
11e90 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 32 2b 69  Valid(&aMem[p2+i
11ea0 64 78 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49  dx]) );.    REGI
11eb0 53 54 45 52 5f 54 52 41 43 45 28 70 31 2b 69 64  STER_TRACE(p1+id
11ec0 78 2c 20 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d  x, &aMem[p1+idx]
11ed0 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
11ee0 54 52 41 43 45 28 70 32 2b 69 64 78 2c 20 26 61  TRACE(p2+idx, &a
11ef0 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a 20 20  Mem[p2+idx]);.  
11f00 20 20 61 73 73 65 72 74 28 20 69 3c 70 4b 65 79    assert( i<pKey
11f10 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a  Info->nField );.
11f20 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70 4b 65 79      pColl = pKey
11f30 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b 0a  Info->aColl[i];.
11f40 20 20 20 20 62 52 65 76 20 3d 20 70 4b 65 79 49      bRev = pKeyI
11f50 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64 65 72 5b  nfo->aSortOrder[
11f60 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61 72 65  i];.    iCompare
11f70 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d   = sqlite3MemCom
11f80 70 61 72 65 28 26 61 4d 65 6d 5b 70 31 2b 69 64  pare(&aMem[p1+id
11f90 78 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78  x], &aMem[p2+idx
11fa0 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20 20 69  ], pColl);.    i
11fb0 66 28 20 69 43 6f 6d 70 61 72 65 20 29 7b 0a 20  f( iCompare ){. 
11fc0 20 20 20 20 20 69 66 28 20 62 52 65 76 20 29 20       if( bRev ) 
11fd0 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69 43 6f 6d  iCompare = -iCom
11fe0 70 61 72 65 3b 0a 20 20 20 20 20 20 62 72 65 61  pare;.      brea
11ff0 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  k;.    }.  }.  b
12000 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
12010 64 65 3a 20 4a 75 6d 70 20 50 31 20 50 32 20 50  de: Jump P1 P2 P
12020 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  3 * *.**.** Jump
12030 20 74 6f 20 74 68 65 20 69 6e 73 74 72 75 63 74   to the instruct
12040 69 6f 6e 20 61 74 20 61 64 64 72 65 73 73 20 50  ion at address P
12050 31 2c 20 50 32 2c 20 6f 72 20 50 33 20 64 65 70  1, P2, or P3 dep
12060 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
12070 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 6f 73 74  r.** in the most
12080 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f 6d 70 61   recent OP_Compa
12090 72 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  re instruction t
120a0 68 65 20 50 31 20 76 65 63 74 6f 72 20 77 61 73  he P1 vector was
120b0 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 65 71   less than.** eq
120c0 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74  ual to, or great
120d0 65 72 20 74 68 61 6e 20 74 68 65 20 50 32 20 76  er than the P2 v
120e0 65 63 74 6f 72 2c 20 72 65 73 70 65 63 74 69 76  ector, respectiv
120f0 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ely..*/.case OP_
12100 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20 20 20 20  Jump: {         
12110 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
12120 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3c 30 20   if( iCompare<0 
12130 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  ){.    VdbeBranc
12140 68 54 61 6b 65 6e 28 30 2c 33 29 3b 20 70 4f 70  hTaken(0,3); pOp
12150 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 31 20   = &aOp[pOp->p1 
12160 2d 20 31 5d 3b 0a 20 20 7d 65 6c 73 65 20 69 66  - 1];.  }else if
12170 28 20 69 43 6f 6d 70 61 72 65 3d 3d 30 20 29 7b  ( iCompare==0 ){
12180 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
12190 61 6b 65 6e 28 31 2c 33 29 3b 20 70 4f 70 20 3d  aken(1,3); pOp =
121a0 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d 20   &aOp[pOp->p2 - 
121b0 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  1];.  }else{.   
121c0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
121d0 28 32 2c 33 29 3b 20 70 4f 70 20 3d 20 26 61 4f  (2,3); pOp = &aO
121e0 70 5b 70 4f 70 2d 3e 70 33 20 2d 20 31 5d 3b 0a  p[pOp->p3 - 1];.
121f0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
12200 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64 20 50  /* Opcode: And P
12210 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
12220 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28  ynopsis: r[P3]=(
12230 72 5b 50 31 5d 20 26 26 20 72 5b 50 32 5d 29 0a  r[P1] && r[P2]).
12240 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c  **.** Take the l
12250 6f 67 69 63 61 6c 20 41 4e 44 20 6f 66 20 74 68  ogical AND of th
12260 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
12270 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 32 20  sters P1 and P2 
12280 61 6e 64 0a 2a 2a 20 77 72 69 74 65 20 74 68 65  and.** write the
12290 20 72 65 73 75 6c 74 20 69 6e 74 6f 20 72 65 67   result into reg
122a0 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  ister P3..**.** 
122b0 49 66 20 65 69 74 68 65 72 20 50 31 20 6f 72 20  If either P1 or 
122c0 50 32 20 69 73 20 30 20 28 66 61 6c 73 65 29 20  P2 is 0 (false) 
122d0 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
122e0 69 73 20 30 20 65 76 65 6e 20 69 66 0a 2a 2a 20  is 0 even if.** 
122f0 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20  the other input 
12300 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c  is NULL.  A NULL
12310 20 61 6e 64 20 74 72 75 65 20 6f 72 20 74 77 6f   and true or two
12320 20 4e 55 4c 4c 73 20 67 69 76 65 0a 2a 2a 20 61   NULLs give.** a
12330 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f   NULL output..*/
12340 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 72 20 50  ./* Opcode: Or P
12350 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
12360 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28  ynopsis: r[P3]=(
12370 72 5b 50 31 5d 20 7c 7c 20 72 5b 50 32 5d 29 0a  r[P1] || r[P2]).
12380 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c  **.** Take the l
12390 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20 74 68 65  ogical OR of the
123a0 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
123b0 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e  ter P1 and P2 an
123c0 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 61  d.** store the a
123d0 6e 73 77 65 72 20 69 6e 20 72 65 67 69 73 74 65  nswer in registe
123e0 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65  r P3..**.** If e
123f0 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20 69  ither P1 or P2 i
12400 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75 65 29  s nonzero (true)
12410 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
12420 20 69 73 20 31 20 28 74 72 75 65 29 0a 2a 2a 20   is 1 (true).** 
12430 65 76 65 6e 20 69 66 20 74 68 65 20 6f 74 68 65  even if the othe
12440 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e  r input is NULL.
12450 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66 61 6c    A NULL and fal
12460 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 0a  se or two NULLs.
12470 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c 20 6f  ** give a NULL o
12480 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  utput..*/.case O
12490 50 5f 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20  P_And:          
124a0 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
124b0 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c  K_AND, in1, in2,
124c0 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
124d0 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20  _Or: {          
124e0 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
124f0 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  _OR, in1, in2, o
12500 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76 31 3b  ut3 */.  int v1;
12510 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 70 65 72      /* Left oper
12520 61 6e 64 3a 20 20 30 3d 3d 46 41 4c 53 45 2c 20  and:  0==FALSE, 
12530 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e  1==TRUE, 2==UNKN
12540 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20  OWN or NULL */. 
12550 20 69 6e 74 20 76 32 3b 20 20 20 20 2f 2a 20 52   int v2;    /* R
12560 69 67 68 74 20 6f 70 65 72 61 6e 64 3a 20 30 3d  ight operand: 0=
12570 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c  =FALSE, 1==TRUE,
12580 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e   2==UNKNOWN or N
12590 55 4c 4c 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d  ULL */..  pIn1 =
125a0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
125b0 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
125c0 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
125d0 0a 20 20 20 20 76 31 20 3d 20 32 3b 0a 20 20 7d  .    v1 = 2;.  }
125e0 65 6c 73 65 7b 0a 20 20 20 20 76 31 20 3d 20 73  else{.    v1 = s
125f0 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
12600 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 20 20 7d  ue(pIn1)!=0;.  }
12610 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
12620 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20  pOp->p2];.  if( 
12630 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn2->flags & ME
12640 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 32  M_Null ){.    v2
12650 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   = 2;.  }else{. 
12660 20 20 20 76 32 20 3d 20 73 71 6c 69 74 65 33 56     v2 = sqlite3V
12670 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32  dbeIntValue(pIn2
12680 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20  )!=0;.  }.  if( 
12690 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
126a0 41 6e 64 20 29 7b 0a 20 20 20 20 73 74 61 74 69  And ){.    stati
126b0 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  c const unsigned
126c0 20 63 68 61 72 20 61 6e 64 5f 6c 6f 67 69 63 5b   char and_logic[
126d0 5d 20 3d 20 7b 20 30 2c 20 30 2c 20 30 2c 20 30  ] = { 0, 0, 0, 0
126e0 2c 20 31 2c 20 32 2c 20 30 2c 20 32 2c 20 32 20  , 1, 2, 0, 2, 2 
126f0 7d 3b 0a 20 20 20 20 76 31 20 3d 20 61 6e 64 5f  };.    v1 = and_
12700 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a  logic[v1*3+v2];.
12710 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 74 61    }else{.    sta
12720 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  tic const unsign
12730 65 64 20 63 68 61 72 20 6f 72 5f 6c 6f 67 69 63  ed char or_logic
12740 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c 20 32 2c 20  [] = { 0, 1, 2, 
12750 31 2c 20 31 2c 20 31 2c 20 32 2c 20 31 2c 20 32  1, 1, 1, 2, 1, 2
12760 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 6f 72 5f   };.    v1 = or_
12770 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a  logic[v1*3+v2];.
12780 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d    }.  pOut = &aM
12790 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
127a0 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20 20 20 20  f( v1==2 ){.    
127b0 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
127c0 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  Out, MEM_Null);.
127d0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75    }else{.    pOu
127e0 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a 20 20 20  t->u.i = v1;.   
127f0 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
12800 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
12810 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
12820 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 20 50  /* Opcode: Not P
12830 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
12840 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 20 21  nopsis: r[P2]= !
12850 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65  r[P1].**.** Inte
12860 72 70 72 65 74 20 74 68 65 20 76 61 6c 75 65 20  rpret the value 
12870 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
12880 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  s a boolean valu
12890 65 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a  e.  Store the.**
128a0 20 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d   boolean complem
128b0 65 6e 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ent in register 
128c0 50 32 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  P2.  If the valu
128d0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
128e0 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68   is .** NULL, th
128f0 65 6e 20 61 20 4e 55 4c 4c 20 69 73 20 73 74 6f  en a NULL is sto
12900 72 65 64 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61  red in P2..*/.ca
12910 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20 20  se OP_Not: {    
12920 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
12930 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 2c 20 69  ame as TK_NOT, i
12940 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49  n1, out2 */.  pI
12950 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
12960 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p1];.  pOut = &a
12970 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
12980 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
12990 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 69  tNull(pOut);.  i
129a0 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
129b0 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
129c0 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  {.    pOut->flag
129d0 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20  s = MEM_Int;.   
129e0 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 21 73 71   pOut->u.i = !sq
129f0 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
12a00 65 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62  e(pIn1);.  }.  b
12a10 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
12a20 64 65 3a 20 42 69 74 4e 6f 74 20 50 31 20 50 32  de: BitNot P1 P2
12a30 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
12a40 69 73 3a 20 72 5b 50 31 5d 3d 20 7e 72 5b 50 31  is: r[P1]= ~r[P1
12a50 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65  ].**.** Interpre
12a60 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  t the content of
12a70 20 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20   register P1 as 
12a80 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 53 74 6f  an integer.  Sto
12a90 72 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d 63  re the.** ones-c
12aa0 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  omplement of the
12ab0 20 50 31 20 76 61 6c 75 65 20 69 6e 74 6f 20 72   P1 value into r
12ac0 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20  egister P2.  If 
12ad0 50 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e 55  P1 holds.** a NU
12ae0 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 61 20  LL then store a 
12af0 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63  NULL in P2..*/.c
12b00 61 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b  ase OP_BitNot: {
12b10 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12b20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f  same as TK_BITNO
12b30 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a  T, in1, out2 */.
12b40 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
12b50 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20  Op->p1];.  pOut 
12b60 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
12b70 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
12b80 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
12b90 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
12ba0 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d  ags & MEM_Null)=
12bb0 3d 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e  =0 ){.    pOut->
12bc0 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
12bd0 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
12be0 20 7e 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74   ~sqlite3VdbeInt
12bf0 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 7d  Value(pIn1);.  }
12c00 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
12c10 4f 70 63 6f 64 65 3a 20 4f 6e 63 65 20 50 31 20  Opcode: Once P1 
12c20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46  P2 * * *.**.** F
12c30 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
12c40 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
12c50 69 6f 6e 20 74 68 65 20 66 69 72 73 74 20 74 69  ion the first ti
12c60 6d 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69  me this opcode i
12c70 73 0a 2a 2a 20 65 6e 63 6f 75 6e 74 65 72 65 64  s.** encountered
12c80 20 6f 6e 20 65 61 63 68 20 69 6e 76 6f 63 61 74   on each invocat
12c90 69 6f 6e 20 6f 66 20 74 68 65 20 62 79 74 65 2d  ion of the byte-
12ca0 63 6f 64 65 20 70 72 6f 67 72 61 6d 2e 20 20 4a  code program.  J
12cb0 75 6d 70 20 74 6f 20 50 32 0a 2a 2a 20 6f 6e 20  ump to P2.** on 
12cc0 74 68 65 20 73 65 63 6f 6e 64 20 61 6e 64 20 61  the second and a
12cd0 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20 65 6e  ll subsequent en
12ce0 63 6f 75 6e 74 65 72 73 20 64 75 72 69 6e 67 20  counters during 
12cf0 74 68 65 20 73 61 6d 65 20 69 6e 76 6f 63 61 74  the same invocat
12d00 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 6f 70 2d 6c  ion..**.** Top-l
12d10 65 76 65 6c 20 70 72 6f 67 72 61 6d 73 20 64 65  evel programs de
12d20 74 65 72 6d 69 6e 65 20 66 69 72 73 74 20 69 6e  termine first in
12d30 76 6f 63 61 74 69 6f 6e 20 62 79 20 63 6f 6d 70  vocation by comp
12d40 61 72 69 6e 67 20 74 68 65 20 50 31 0a 2a 2a 20  aring the P1.** 
12d50 6f 70 65 72 61 6e 64 20 61 67 61 69 6e 73 74 20  operand against 
12d60 74 68 65 20 50 31 20 6f 70 65 72 61 6e 64 20 6f  the P1 operand o
12d70 6e 20 74 68 65 20 4f 50 5f 49 6e 69 74 20 6f 70  n the OP_Init op
12d80 63 6f 64 65 20 61 74 20 74 68 65 20 62 65 67 69  code at the begi
12d90 6e 6e 69 6e 67 0a 2a 2a 20 6f 66 20 74 68 65 20  nning.** of the 
12da0 70 72 6f 67 72 61 6d 2e 20 20 49 66 20 74 68 65  program.  If the
12db0 20 50 31 20 76 61 6c 75 65 73 20 64 69 66 66 65   P1 values diffe
12dc0 72 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  r, then fall thr
12dd0 6f 75 67 68 20 61 6e 64 20 6d 61 6b 65 0a 2a 2a  ough and make.**
12de0 20 74 68 65 20 50 31 20 6f 66 20 74 68 69 73 20   the P1 of this 
12df0 6f 70 63 6f 64 65 20 65 71 75 61 6c 20 74 6f 20  opcode equal to 
12e00 74 68 65 20 50 31 20 6f 66 20 4f 50 5f 49 6e 69  the P1 of OP_Ini
12e10 74 2e 20 20 49 66 20 50 31 20 76 61 6c 75 65 73  t.  If P1 values
12e20 20 61 72 65 0a 2a 2a 20 74 68 65 20 73 61 6d 65   are.** the same
12e30 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a   then take the j
12e40 75 6d 70 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 73  ump..**.** For s
12e50 75 62 70 72 6f 67 72 61 6d 73 2c 20 74 68 65 72  ubprograms, ther
12e60 65 20 69 73 20 61 20 62 69 74 6d 61 73 6b 20 69  e is a bitmask i
12e70 6e 20 74 68 65 20 56 64 62 65 46 72 61 6d 65 20  n the VdbeFrame 
12e80 74 68 61 74 20 64 65 74 65 72 6d 69 6e 65 73 0a  that determines.
12e90 2a 2a 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ** whether or no
12ea0 74 20 74 68 65 20 6a 75 6d 70 20 73 68 6f 75 6c  t the jump shoul
12eb0 64 20 62 65 20 74 61 6b 65 6e 2e 20 20 54 68 65  d be taken.  The
12ec0 20 62 69 74 6d 61 73 6b 20 69 73 20 6e 65 63 65   bitmask is nece
12ed0 73 73 61 72 79 0a 2a 2a 20 62 65 63 61 75 73 65  ssary.** because
12ee0 20 74 68 65 20 73 65 6c 66 2d 61 6c 74 65 72 69   the self-alteri
12ef0 6e 67 20 63 6f 64 65 20 74 72 69 63 6b 20 64 6f  ng code trick do
12f00 65 73 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 72 20  es not work for 
12f10 72 65 63 75 72 73 69 76 65 0a 2a 2a 20 74 72 69  recursive.** tri
12f20 67 67 65 72 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ggers..*/.case O
12f30 50 5f 4f 6e 63 65 3a 20 7b 20 20 20 20 20 20 20  P_Once: {       
12f40 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
12f50 0a 20 20 75 33 32 20 69 41 64 64 72 3b 20 20 20  .  u32 iAddr;   
12f60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12f70 41 64 64 72 65 73 73 20 6f 66 20 74 68 69 73 20  Address of this 
12f80 69 6e 73 74 72 75 63 74 69 6f 6e 20 2a 2f 0a 20  instruction */. 
12f90 20 61 73 73 65 72 74 28 20 70 2d 3e 61 4f 70 5b   assert( p->aOp[
12fa0 30 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e  0].opcode==OP_In
12fb0 69 74 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70  it );.  if( p->p
12fc0 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 69 41 64  Frame ){.    iAd
12fd0 64 72 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d  dr = (int)(pOp -
12fe0 20 70 2d 3e 61 4f 70 29 3b 0a 20 20 20 20 69 66   p->aOp);.    if
12ff0 28 20 28 70 2d 3e 70 46 72 61 6d 65 2d 3e 61 4f  ( (p->pFrame->aO
13000 6e 63 65 5b 69 41 64 64 72 2f 38 5d 20 26 20 28  nce[iAddr/8] & (
13010 31 3c 3c 28 69 41 64 64 72 20 26 20 37 29 29 29  1<<(iAddr & 7)))
13020 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 56 64 62  !=0 ){.      Vdb
13030 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 20  eBranchTaken(1, 
13040 32 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a  2);.      goto j
13050 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d  ump_to_p2;.    }
13060 0a 20 20 20 20 70 2d 3e 70 46 72 61 6d 65 2d 3e  .    p->pFrame->
13070 61 4f 6e 63 65 5b 69 41 64 64 72 2f 38 5d 20 7c  aOnce[iAddr/8] |
13080 3d 20 31 3c 3c 28 69 41 64 64 72 20 26 20 37 29  = 1<<(iAddr & 7)
13090 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  ;.  }else{.    i
130a0 66 28 20 70 2d 3e 61 4f 70 5b 30 5d 2e 70 31 3d  f( p->aOp[0].p1=
130b0 3d 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20  =pOp->p1 ){.    
130c0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
130d0 6e 28 31 2c 20 32 29 3b 0a 20 20 20 20 20 20 67  n(1, 2);.      g
130e0 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
130f0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 56 64 62 65      }.  }.  Vdbe
13100 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c 20 32  BranchTaken(0, 2
13110 29 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70  );.  pOp->p1 = p
13120 2d 3e 61 4f 70 5b 30 5d 2e 70 31 3b 0a 20 20 62  ->aOp[0].p1;.  b
13130 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
13140 64 65 3a 20 49 66 20 50 31 20 50 32 20 50 33 20  de: If P1 P2 P3 
13150 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74  * *.**.** Jump t
13160 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75  o P2 if the valu
13170 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
13180 20 69 73 20 74 72 75 65 2e 20 20 54 68 65 20 76   is true.  The v
13190 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 69  alue.** is consi
131a0 64 65 72 65 64 20 74 72 75 65 20 69 66 20 69 74  dered true if it
131b0 20 69 73 20 6e 75 6d 65 72 69 63 20 61 6e 64 20   is numeric and 
131c0 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 49 66 20 74 68  non-zero.  If th
131d0 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31  e value.** in P1
131e0 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61   is NULL then ta
131f0 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61  ke the jump if a
13200 6e 64 20 6f 6e 6c 79 20 69 66 20 50 33 20 69 73  nd only if P3 is
13210 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 2f 2a   non-zero..*/./*
13220 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74 20 50   Opcode: IfNot P
13230 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
13240 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20  * Jump to P2 if 
13250 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
13260 69 73 74 65 72 20 50 31 20 69 73 20 46 61 6c 73  ister P1 is Fals
13270 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a  e.  The value.**
13280 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 66   is considered f
13290 61 6c 73 65 20 69 66 20 69 74 20 68 61 73 20 61  alse if it has a
132a0 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 20 6f   numeric value o
132b0 66 20 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20  f zero.  If the 
132c0 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69  value.** in P1 i
132d0 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65  s NULL then take
132e0 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e 64   the jump if and
132f0 20 6f 6e 6c 79 20 69 66 20 50 33 20 69 73 20 6e   only if P3 is n
13300 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65  on-zero..*/.case
13310 20 4f 50 5f 49 66 3a 20 20 20 20 20 20 20 20 20   OP_If:         
13320 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
13330 20 69 6e 31 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in1 */.case OP_
13340 49 66 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20  IfNot: {        
13350 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
13360 20 2a 2f 0a 20 20 69 6e 74 20 63 3b 0a 20 20 70   */.  int c;.  p
13370 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
13380 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31  >p1];.  if( pIn1
13390 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
133a0 6c 6c 20 29 7b 0a 20 20 20 20 63 20 3d 20 70 4f  ll ){.    c = pO
133b0 70 2d 3e 70 33 3b 0a 20 20 7d 65 6c 73 65 7b 0a  p->p3;.  }else{.
133c0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
133d0 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
133e0 54 0a 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65  T.    c = sqlite
133f0 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
13400 6e 31 29 21 3d 30 3b 0a 23 65 6c 73 65 0a 20 20  n1)!=0;.#else.  
13410 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62    c = sqlite3Vdb
13420 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29  eRealValue(pIn1)
13430 21 3d 30 2e 30 3b 0a 23 65 6e 64 69 66 0a 20 20  !=0.0;.#endif.  
13440 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
13450 65 3d 3d 4f 50 5f 49 66 4e 6f 74 20 29 20 63 20  e==OP_IfNot ) c 
13460 3d 20 21 63 3b 0a 20 20 7d 0a 20 20 56 64 62 65  = !c;.  }.  Vdbe
13470 42 72 61 6e 63 68 54 61 6b 65 6e 28 63 21 3d 30  BranchTaken(c!=0
13480 2c 20 32 29 3b 0a 20 20 69 66 28 20 63 20 29 7b  , 2);.  if( c ){
13490 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  .    goto jump_t
134a0 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61  o_p2;.  }.  brea
134b0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
134c0 20 49 73 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20   IsNull P1 P2 * 
134d0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
134e0 20 69 66 20 72 5b 50 31 5d 3d 3d 4e 55 4c 4c 20   if r[P1]==NULL 
134f0 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75  goto P2.**.** Ju
13500 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  mp to P2 if the 
13510 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
13520 72 20 50 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  r P1 is NULL..*/
13530 0a 63 61 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a  .case OP_IsNull:
13540 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
13550 20 73 61 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55   same as TK_ISNU
13560 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f  LL, jump, in1 */
13570 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
13580 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56 64 62 65  pOp->p1];.  Vdbe
13590 42 72 61 6e 63 68 54 61 6b 65 6e 28 20 28 70 49  BranchTaken( (pI
135a0 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
135b0 4e 75 6c 6c 29 21 3d 30 2c 20 32 29 3b 0a 20 20  Null)!=0, 2);.  
135c0 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
135d0 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20   & MEM_Null)!=0 
135e0 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  ){.    goto jump
135f0 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
13600 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
13610 65 3a 20 4e 6f 74 4e 75 6c 6c 20 50 31 20 50 32  e: NotNull P1 P2
13620 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
13630 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d 4e 55  is: if r[P1]!=NU
13640 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  LL goto P2.**.**
13650 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
13660 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
13670 73 74 65 72 20 50 31 20 69 73 20 6e 6f 74 20 4e  ster P1 is not N
13680 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f  ULL.  .*/.case O
13690 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20 20  P_NotNull: {    
136a0 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
136b0 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a  as TK_NOTNULL, j
136c0 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
136d0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
136e0 70 31 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  p1];.  VdbeBranc
136f0 68 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66  hTaken( (pIn1->f
13700 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
13710 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28  ==0, 2);.  if( (
13720 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
13730 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20  M_Null)==0 ){.  
13740 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
13750 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
13760 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  }../* Opcode: If
13770 4e 75 6c 6c 52 6f 77 20 50 31 20 50 32 20 50 33  NullRow P1 P2 P3
13780 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
13790 3a 20 69 66 20 50 31 2e 6e 75 6c 6c 52 6f 77 20  : if P1.nullRow 
137a0 74 68 65 6e 20 72 5b 50 33 5d 3d 4e 55 4c 4c 2c  then r[P3]=NULL,
137b0 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 43   goto P2.**.** C
137c0 68 65 63 6b 20 74 68 65 20 63 75 72 73 6f 72 20  heck the cursor 
137d0 50 31 20 74 6f 20 73 65 65 20 69 66 20 69 74 20  P1 to see if it 
137e0 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
137f0 6e 74 69 6e 67 20 61 74 20 61 20 4e 55 4c 4c 20  nting at a NULL 
13800 72 6f 77 2e 0a 2a 2a 20 49 66 20 69 74 20 69 73  row..** If it is
13810 2c 20 74 68 65 6e 20 73 65 74 20 72 65 67 69 73  , then set regis
13820 74 65 72 20 50 33 20 74 6f 20 4e 55 4c 4c 20 61  ter P3 to NULL a
13830 6e 64 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  nd jump immediat
13840 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66  ely to P2..** If
13850 20 50 31 20 69 73 20 6e 6f 74 20 6f 6e 20 61 20   P1 is not on a 
13860 4e 55 4c 4c 20 72 6f 77 2c 20 74 68 65 6e 20 66  NULL row, then f
13870 61 6c 6c 20 74 68 72 6f 75 67 68 20 77 69 74 68  all through with
13880 6f 75 74 20 6d 61 6b 69 6e 67 20 61 6e 79 0a 2a  out making any.*
13890 2a 20 63 68 61 6e 67 65 73 2e 0a 2a 2f 0a 63 61  * changes..*/.ca
138a0 73 65 20 4f 50 5f 49 66 4e 75 6c 6c 52 6f 77 3a  se OP_IfNullRow:
138b0 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75   {         /* ju
138c0 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  mp */.  assert( 
138d0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
138e0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
138f0 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 70 43   );.  if( p->apC
13900 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 6e 75 6c  sr[pOp->p1]->nul
13910 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c 69  lRow ){.    sqli
13920 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
13930 6c 28 61 4d 65 6d 20 2b 20 70 4f 70 2d 3e 70 33  l(aMem + pOp->p3
13940 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  );.    goto jump
13950 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
13960 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
13970 65 3a 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20  e: Column P1 P2 
13980 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
13990 70 73 69 73 3a 20 72 5b 50 33 5d 3d 50 58 0a 2a  psis: r[P3]=PX.*
139a0 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
139b0 68 65 20 64 61 74 61 20 74 68 61 74 20 63 75 72  he data that cur
139c0 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f  sor P1 points to
139d0 20 61 73 20 61 20 73 74 72 75 63 74 75 72 65 20   as a structure 
139e0 62 75 69 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 74  built using.** t
139f0 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e  he MakeRecord in
13a00 73 74 72 75 63 74 69 6f 6e 2e 20 20 28 53 65 65  struction.  (See
13a10 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20   the MakeRecord 
13a20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74  opcode for addit
13a30 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d 61  ional.** informa
13a40 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 66  tion about the f
13a50 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 64 61 74  ormat of the dat
13a60 61 2e 29 20 20 45 78 74 72 61 63 74 20 74 68 65  a.)  Extract the
13a70 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a   P2-th column.**
13a80 20 66 72 6f 6d 20 74 68 69 73 20 72 65 63 6f 72   from this recor
13a90 64 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65  d.  If there are
13aa0 20 6c 65 73 73 20 74 68 61 74 20 28 50 32 2b 31   less that (P2+1
13ab0 29 20 0a 2a 2a 20 76 61 6c 75 65 73 20 69 6e 20  ) .** values in 
13ac0 74 68 65 20 72 65 63 6f 72 64 2c 20 65 78 74 72  the record, extr
13ad0 61 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  act a NULL..**.*
13ae0 2a 20 54 68 65 20 76 61 6c 75 65 20 65 78 74 72  * The value extr
13af0 61 63 74 65 64 20 69 73 20 73 74 6f 72 65 64 20  acted is stored 
13b00 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
13b10 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 72 65 63  **.** If the rec
13b20 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20 66 65 77  ord contains few
13b30 65 72 20 74 68 61 6e 20 50 32 20 66 69 65 6c 64  er than P2 field
13b40 73 2c 20 74 68 65 6e 20 65 78 74 72 61 63 74 20  s, then extract 
13b50 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20  a NULL.  Or,.** 
13b60 69 66 20 74 68 65 20 50 34 20 61 72 67 75 6d 65  if the P4 argume
13b70 6e 74 20 69 73 20 61 20 50 34 5f 4d 45 4d 20 75  nt is a P4_MEM u
13b80 73 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  se the value of 
13b90 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20  the P4 argument 
13ba0 61 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74  as.** the result
13bb0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
13bc0 50 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45  PFLAG_CLEARCACHE
13bd0 20 62 69 74 20 69 73 20 73 65 74 20 6f 6e 20 50   bit is set on P
13be0 35 20 61 6e 64 20 50 31 20 69 73 20 61 20 70 73  5 and P1 is a ps
13bf0 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f  eudo-table curso
13c00 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63  r,.** then the c
13c10 61 63 68 65 20 6f 66 20 74 68 65 20 63 75 72 73  ache of the curs
13c20 6f 72 20 69 73 20 72 65 73 65 74 20 70 72 69 6f  or is reset prio
13c30 72 20 74 6f 20 65 78 74 72 61 63 74 69 6e 67 20  r to extracting 
13c40 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 54  the column..** T
13c50 68 65 20 66 69 72 73 74 20 4f 50 5f 43 6f 6c 75  he first OP_Colu
13c60 6d 6e 20 61 67 61 69 6e 73 74 20 61 20 70 73 65  mn against a pse
13c70 75 64 6f 2d 74 61 62 6c 65 20 61 66 74 65 72 20  udo-table after 
13c80 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
13c90 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 72 65 67 69   content.** regi
13ca0 73 74 65 72 20 68 61 73 20 63 68 61 6e 67 65 64  ster has changed
13cb0 20 73 68 6f 75 6c 64 20 68 61 76 65 20 74 68 69   should have thi
13cc0 73 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a  s bit set..**.**
13cd0 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c   If the OPFLAG_L
13ce0 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46  ENGTHARG and OPF
13cf0 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20 62 69  LAG_TYPEOFARG bi
13d00 74 73 20 61 72 65 20 73 65 74 20 6f 6e 20 50 35  ts are set on P5
13d10 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 72 65 73   then.** the res
13d20 75 6c 74 20 69 73 20 67 75 61 72 61 6e 74 65 65  ult is guarantee
13d30 64 20 74 6f 20 6f 6e 6c 79 20 62 65 20 75 73 65  d to only be use
13d40 64 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e  d as the argumen
13d50 74 20 6f 66 20 61 20 6c 65 6e 67 74 68 28 29 0a  t of a length().
13d60 2a 2a 20 6f 72 20 74 79 70 65 6f 66 28 29 20 66  ** or typeof() f
13d70 75 6e 63 74 69 6f 6e 2c 20 72 65 73 70 65 63 74  unction, respect
13d80 69 76 65 6c 79 2e 20 20 54 68 65 20 6c 6f 61 64  ively.  The load
13d90 69 6e 67 20 6f 66 20 6c 61 72 67 65 20 62 6c 6f  ing of large blo
13da0 62 73 20 63 61 6e 20 62 65 0a 2a 2a 20 73 6b 69  bs can be.** ski
13db0 70 70 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28  pped for length(
13dc0 29 20 61 6e 64 20 61 6c 6c 20 63 6f 6e 74 65 6e  ) and all conten
13dd0 74 20 6c 6f 61 64 69 6e 67 20 63 61 6e 20 62 65  t loading can be
13de0 20 73 6b 69 70 70 65 64 20 66 6f 72 20 74 79 70   skipped for typ
13df0 65 6f 66 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  eof()..*/.case O
13e00 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 69 6e  P_Column: {.  in
13e10 74 20 70 32 3b 20 20 20 20 20 20 20 20 20 20 20  t p2;           
13e20 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65   /* column numbe
13e30 72 20 74 6f 20 72 65 74 72 69 65 76 65 20 2a 2f  r to retrieve */
13e40 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
13e50 43 3b 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42  C;    /* The VDB
13e60 45 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 42 74  E cursor */.  Bt
13e70 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 20 20  Cursor *pCrsr;  
13e80 20 2f 2a 20 54 68 65 20 42 54 72 65 65 20 63 75   /* The BTree cu
13e90 72 73 6f 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61  rsor */.  u32 *a
13ea0 4f 66 66 73 65 74 3b 20 20 20 20 20 20 2f 2a 20  Offset;      /* 
13eb0 61 4f 66 66 73 65 74 5b 69 5d 20 69 73 20 6f 66  aOffset[i] is of
13ec0 66 73 65 74 20 74 6f 20 73 74 61 72 74 20 6f 66  fset to start of
13ed0 20 64 61 74 61 20 66 6f 72 20 69 2d 74 68 20 63   data for i-th c
13ee0 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6c  olumn */.  int l
13ef0 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  en;           /*
13f00 20 54 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74   The length of t
13f10 68 65 20 73 65 72 69 61 6c 69 7a 65 64 20 64 61  he serialized da
13f20 74 61 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d  ta for the colum
13f30 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20  n */.  int i;   
13f40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
13f50 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4d  p counter */.  M
13f60 65 6d 20 2a 70 44 65 73 74 3b 20 20 20 20 20 20  em *pDest;      
13f70 20 20 2f 2a 20 57 68 65 72 65 20 74 6f 20 77 72    /* Where to wr
13f80 69 74 65 20 74 68 65 20 65 78 74 72 61 63 74 65  ite the extracte
13f90 64 20 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d  d value */.  Mem
13fa0 20 73 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20   sMem;          
13fb0 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74  /* For storing t
13fc0 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20  he record being 
13fd0 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e  decoded */.  con
13fe0 73 74 20 75 38 20 2a 7a 44 61 74 61 3b 20 20 20  st u8 *zData;   
13ff0 2f 2a 20 50 61 72 74 20 6f 66 20 74 68 65 20 72  /* Part of the r
14000 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f  ecord being deco
14010 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75  ded */.  const u
14020 38 20 2a 7a 48 64 72 3b 20 20 20 20 2f 2a 20 4e  8 *zHdr;    /* N
14030 65 78 74 20 75 6e 70 61 72 73 65 64 20 62 79 74  ext unparsed byt
14040 65 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20  e of the header 
14050 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a  */.  const u8 *z
14060 45 6e 64 48 64 72 3b 20 2f 2a 20 50 6f 69 6e 74  EndHdr; /* Point
14070 65 72 20 74 6f 20 66 69 72 73 74 20 62 79 74 65  er to first byte
14080 20 61 66 74 65 72 20 74 68 65 20 68 65 61 64 65   after the heade
14090 72 20 2a 2f 0a 20 20 75 33 32 20 6f 66 66 73 65  r */.  u32 offse
140a0 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 66 66  t;        /* Off
140b0 73 65 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74  set into the dat
140c0 61 20 2a 2f 0a 20 20 75 36 34 20 6f 66 66 73 65  a */.  u64 offse
140d0 74 36 34 3b 20 20 20 20 20 20 2f 2a 20 36 34 2d  t64;      /* 64-
140e0 62 69 74 20 6f 66 66 73 65 74 20 2a 2f 0a 20 20  bit offset */.  
140f0 75 33 32 20 61 76 61 69 6c 3b 20 20 20 20 20 20  u32 avail;      
14100 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
14110 62 79 74 65 73 20 6f 66 20 61 76 61 69 6c 61 62  bytes of availab
14120 6c 65 20 64 61 74 61 20 2a 2f 0a 20 20 75 33 32  le data */.  u32
14130 20 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   t;             
14140 2f 2a 20 41 20 74 79 70 65 20 63 6f 64 65 20 66  /* A type code f
14150 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 20 68  rom the record h
14160 65 61 64 65 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a  eader */.  Mem *
14170 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  pReg;         /*
14180 20 50 73 65 75 64 6f 54 61 62 6c 65 20 69 6e 70   PseudoTable inp
14190 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 0a  ut register */..
141a0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
141b0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 32 20 3d  pOp->p1];.  p2 =
141c0 20 70 4f 70 2d 3e 70 32 3b 0a 0a 20 20 2f 2a 20   pOp->p2;..  /* 
141d0 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 63 61  If the cursor ca
141e0 63 68 65 20 69 73 20 73 74 61 6c 65 2c 20 62 72  che is stale, br
141f0 69 6e 67 20 69 74 20 75 70 2d 74 6f 2d 64 61 74  ing it up-to-dat
14200 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69  e */.  rc = sqli
14210 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76  te3VdbeCursorMov
14220 65 74 6f 28 26 70 43 2c 20 26 70 32 29 3b 0a 20  eto(&pC, &p2);. 
14230 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
14240 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
14250 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  r;..  assert( pO
14260 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
14270 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p3<=(p->nMem+1 -
14280 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
14290 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b    pDest = &aMem[
142a0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41  pOp->p3];.  memA
142b0 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
142c0 70 44 65 73 74 29 3b 0a 20 20 61 73 73 65 72 74  pDest);.  assert
142d0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
142e0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
142f0 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
14300 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
14310 74 28 20 70 32 3c 70 43 2d 3e 6e 46 69 65 6c 64  t( p2<pC->nField
14320 20 29 3b 0a 20 20 61 4f 66 66 73 65 74 20 3d 20   );.  aOffset = 
14330 70 43 2d 3e 61 4f 66 66 73 65 74 3b 0a 20 20 61  pC->aOffset;.  a
14340 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
14350 79 70 65 21 3d 43 55 52 54 59 50 45 5f 56 54 41  ype!=CURTYPE_VTA
14360 42 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  B );.  assert( p
14370 43 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52  C->eCurType!=CUR
14380 54 59 50 45 5f 50 53 45 55 44 4f 20 7c 7c 20 70  TYPE_PSEUDO || p
14390 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20  C->nullRow );.  
143a0 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
143b0 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f 53 4f  Type!=CURTYPE_SO
143c0 52 54 45 52 20 29 3b 0a 0a 20 20 69 66 28 20 70  RTER );..  if( p
143d0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 21 3d  C->cacheStatus!=
143e0 70 2d 3e 63 61 63 68 65 43 74 72 20 29 7b 20 20  p->cacheCtr ){  
143f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
14400 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d  OPTIMIZATION-IF-
14410 46 41 4c 53 45 2a 2f 0a 20 20 20 20 69 66 28 20  FALSE*/.    if( 
14420 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  pC->nullRow ){. 
14430 20 20 20 20 20 69 66 28 20 70 43 2d 3e 65 43 75       if( pC->eCu
14440 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 50  rType==CURTYPE_P
14450 53 45 55 44 4f 20 29 7b 0a 20 20 20 20 20 20 20  SEUDO ){.       
14460 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e   assert( pC->uc.
14470 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3e 30  pseudoTableReg>0
14480 20 29 3b 0a 20 20 20 20 20 20 20 20 70 52 65 67   );.        pReg
14490 20 3d 20 26 61 4d 65 6d 5b 70 43 2d 3e 75 63 2e   = &aMem[pC->uc.
144a0 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 5d 3b  pseudoTableReg];
144b0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
144c0 20 70 52 65 67 2d 3e 66 6c 61 67 73 20 26 20 4d   pReg->flags & M
144d0 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 20  EM_Blob );.     
144e0 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
144f0 56 61 6c 69 64 28 70 52 65 67 29 20 29 3b 0a 20  Valid(pReg) );. 
14500 20 20 20 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f         pC->paylo
14510 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e 73 7a 52  adSize = pC->szR
14520 6f 77 20 3d 20 61 76 61 69 6c 20 3d 20 70 52 65  ow = avail = pRe
14530 67 2d 3e 6e 3b 0a 20 20 20 20 20 20 20 20 70 43  g->n;.        pC
14540 2d 3e 61 52 6f 77 20 3d 20 28 75 38 2a 29 70 52  ->aRow = (u8*)pR
14550 65 67 2d 3e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c  eg->z;.      }el
14560 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  se{.        sqli
14570 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
14580 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20  l(pDest);.      
14590 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
145a0 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20  _out;.      }.  
145b0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70    }else{.      p
145c0 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43  Crsr = pC->uc.pC
145d0 75 72 73 6f 72 3b 0a 20 20 20 20 20 20 61 73 73  ursor;.      ass
145e0 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
145f0 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
14600 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
14610 28 20 70 43 72 73 72 20 29 3b 0a 20 20 20 20 20  ( pCrsr );.     
14620 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
14630 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c  BtreeCursorIsVal
14640 69 64 28 70 43 72 73 72 29 20 29 3b 0a 20 20 20  id(pCrsr) );.   
14650 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69     pC->payloadSi
14660 7a 65 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  ze = sqlite3Btre
14670 65 50 61 79 6c 6f 61 64 53 69 7a 65 28 70 43 72  ePayloadSize(pCr
14680 73 72 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 61  sr);.      pC->a
14690 52 6f 77 20 3d 20 73 71 6c 69 74 65 33 42 74 72  Row = sqlite3Btr
146a0 65 65 50 61 79 6c 6f 61 64 46 65 74 63 68 28 70  eePayloadFetch(p
146b0 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20  Crsr, &avail);. 
146c0 20 20 20 20 20 61 73 73 65 72 74 28 20 61 76 61       assert( ava
146d0 69 6c 3c 3d 36 35 35 33 36 20 29 3b 20 20 2f 2a  il<=65536 );  /*
146e0 20 4d 61 78 69 6d 75 6d 20 70 61 67 65 20 73 69   Maximum page si
146f0 7a 65 20 69 73 20 36 34 4b 69 42 20 2a 2f 0a 20  ze is 64KiB */. 
14700 20 20 20 20 20 69 66 28 20 70 43 2d 3e 70 61 79       if( pC->pay
14710 6c 6f 61 64 53 69 7a 65 20 3c 3d 20 28 75 33 32  loadSize <= (u32
14720 29 61 76 61 69 6c 20 29 7b 0a 20 20 20 20 20 20  )avail ){.      
14730 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 70 43    pC->szRow = pC
14740 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20  ->payloadSize;. 
14750 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70       }else if( p
14760 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3e  C->payloadSize >
14770 20 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74   (u32)db->aLimit
14780 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
14790 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 20  NGTH] ){.       
147a0 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
147b0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
147c0 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20      pC->szRow = 
147d0 61 76 61 69 6c 3b 0a 20 20 20 20 20 20 7d 0a 20  avail;.      }. 
147e0 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 63 61 63     }.    pC->cac
147f0 68 65 53 74 61 74 75 73 20 3d 20 70 2d 3e 63 61  heStatus = p->ca
14800 63 68 65 43 74 72 3b 0a 20 20 20 20 70 43 2d 3e  cheCtr;.    pC->
14810 69 48 64 72 4f 66 66 73 65 74 20 3d 20 67 65 74  iHdrOffset = get
14820 56 61 72 69 6e 74 33 32 28 70 43 2d 3e 61 52 6f  Varint32(pC->aRo
14830 77 2c 20 6f 66 66 73 65 74 29 3b 0a 20 20 20 20  w, offset);.    
14840 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 3d  pC->nHdrParsed =
14850 20 30 3b 0a 20 20 20 20 61 4f 66 66 73 65 74 5b   0;.    aOffset[
14860 30 5d 20 3d 20 6f 66 66 73 65 74 3b 0a 0a 0a 20  0] = offset;... 
14870 20 20 20 69 66 28 20 61 76 61 69 6c 3c 6f 66 66     if( avail<off
14880 73 65 74 20 29 7b 20 20 20 20 20 20 2f 2a 4f 50  set ){      /*OP
14890 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41  TIMIZATION-IF-FA
148a0 4c 53 45 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 70  LSE*/.      /* p
148b0 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20 6e 6f 74  C->aRow does not
148c0 20 68 61 76 65 20 74 6f 20 68 6f 6c 64 20 74 68   have to hold th
148d0 65 20 65 6e 74 69 72 65 20 72 6f 77 2c 20 62 75  e entire row, bu
148e0 74 20 69 74 20 64 6f 65 73 20 61 74 20 6c 65 61  t it does at lea
148f0 73 74 0a 20 20 20 20 20 20 2a 2a 20 6e 65 65 64  st.      ** need
14900 20 74 6f 20 63 6f 76 65 72 20 74 68 65 20 68 65   to cover the he
14910 61 64 65 72 20 6f 66 20 74 68 65 20 72 65 63 6f  ader of the reco
14920 72 64 2e 20 20 49 66 20 70 43 2d 3e 61 52 6f 77  rd.  If pC->aRow
14930 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69   does not contai
14940 6e 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 63  n.      ** the c
14950 6f 6d 70 6c 65 74 65 20 68 65 61 64 65 72 2c 20  omplete header, 
14960 74 68 65 6e 20 73 65 74 20 69 74 20 74 6f 20 7a  then set it to z
14970 65 72 6f 2c 20 66 6f 72 63 69 6e 67 20 74 68 65  ero, forcing the
14980 20 68 65 61 64 65 72 20 74 6f 20 62 65 0a 20 20   header to be.  
14990 20 20 20 20 2a 2a 20 64 79 6e 61 6d 69 63 61 6c      ** dynamical
149a0 6c 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 2a 2f  ly allocated. */
149b0 0a 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20  .      pC->aRow 
149c0 3d 20 30 3b 0a 20 20 20 20 20 20 70 43 2d 3e 73  = 0;.      pC->s
149d0 7a 52 6f 77 20 3d 20 30 3b 0a 0a 20 20 20 20 20  zRow = 0;..     
149e0 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 20   /* Make sure a 
149f0 63 6f 72 72 75 70 74 20 64 61 74 61 62 61 73 65  corrupt database
14a00 20 68 61 73 20 6e 6f 74 20 67 69 76 65 6e 20 75   has not given u
14a10 73 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 68 65  s an oversize he
14a20 61 64 65 72 2e 0a 20 20 20 20 20 20 2a 2a 20 44  ader..      ** D
14a30 6f 20 74 68 69 73 20 6e 6f 77 20 74 6f 20 61 76  o this now to av
14a40 6f 69 64 20 61 6e 20 6f 76 65 72 73 69 7a 65 20  oid an oversize 
14a50 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
14a60 6e 2e 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20  n..      **.    
14a70 20 20 2a 2a 20 54 79 70 65 20 65 6e 74 72 69 65    ** Type entrie
14a80 73 20 63 61 6e 20 62 65 20 62 65 74 77 65 65 6e  s can be between
14a90 20 31 20 61 6e 64 20 35 20 62 79 74 65 73 20 65   1 and 5 bytes e
14aa0 61 63 68 2e 20 20 42 75 74 20 34 20 61 6e 64 20  ach.  But 4 and 
14ab0 35 20 62 79 74 65 0a 20 20 20 20 20 20 2a 2a 20  5 byte.      ** 
14ac0 74 79 70 65 73 20 75 73 65 20 73 6f 20 6d 75 63  types use so muc
14ad0 68 20 64 61 74 61 20 73 70 61 63 65 20 74 68 61  h data space tha
14ae0 74 20 74 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79  t there can only
14af0 20 62 65 20 34 30 39 36 20 61 6e 64 20 33 32 20   be 4096 and 32 
14b00 6f 66 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 6d  of.      ** them
14b10 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
14b20 20 53 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20   So the maximum 
14b30 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20 72 65  header length re
14b40 73 75 6c 74 73 20 66 72 6f 6d 20 61 0a 20 20 20  sults from a.   
14b50 20 20 20 2a 2a 20 33 2d 62 79 74 65 20 74 79 70     ** 3-byte typ
14b60 65 20 66 6f 72 20 65 61 63 68 20 6f 66 20 74 68  e for each of th
14b70 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 33 32 37  e maximum of 327
14b80 36 38 20 63 6f 6c 75 6d 6e 73 20 70 6c 75 73 20  68 columns plus 
14b90 74 68 72 65 65 0a 20 20 20 20 20 20 2a 2a 20 65  three.      ** e
14ba0 78 74 72 61 20 62 79 74 65 73 20 66 6f 72 20 74  xtra bytes for t
14bb0 68 65 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68  he header length
14bc0 20 69 74 73 65 6c 66 2e 20 20 33 32 37 36 38 2a   itself.  32768*
14bd0 33 20 2b 20 33 20 3d 20 39 38 33 30 37 2e 0a 20  3 + 3 = 98307.. 
14be0 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66       */.      if
14bf0 28 20 6f 66 66 73 65 74 20 3e 20 39 38 33 30 37  ( offset > 98307
14c00 20 7c 7c 20 6f 66 66 73 65 74 20 3e 20 70 43 2d   || offset > pC-
14c10 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 29 7b 0a  >payloadSize ){.
14c20 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
14c30 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54  ITE_CORRUPT_BKPT
14c40 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  ;.        goto a
14c50 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
14c60 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  r;.      }.    }
14c70 65 6c 73 65 20 69 66 28 20 6f 66 66 73 65 74 3e  else if( offset>
14c80 30 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54  0 ){ /*OPTIMIZAT
14c90 49 4f 4e 2d 49 46 2d 54 52 55 45 2a 2f 0a 20 20  ION-IF-TRUE*/.  
14ca0 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f      /* The follo
14cb0 77 69 6e 67 20 67 6f 74 6f 20 69 73 20 61 6e 20  wing goto is an 
14cc0 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 20 20 49  optimization.  I
14cd0 74 20 63 61 6e 20 62 65 20 6f 6d 69 74 74 65 64  t can be omitted
14ce0 20 61 6e 64 0a 20 20 20 20 20 20 2a 2a 20 65 76   and.      ** ev
14cf0 65 72 79 74 68 69 6e 67 20 77 69 6c 6c 20 73 74  erything will st
14d00 69 6c 6c 20 77 6f 72 6b 2e 20 20 42 75 74 20 4f  ill work.  But O
14d10 50 5f 43 6f 6c 75 6d 6e 20 69 73 20 6d 65 61 73  P_Column is meas
14d20 75 72 61 62 6c 79 20 66 61 73 74 65 72 0a 20 20  urably faster.  
14d30 20 20 20 20 2a 2a 20 62 79 20 73 6b 69 70 70 69      ** by skippi
14d40 6e 67 20 74 68 65 20 73 75 62 73 65 71 75 65 6e  ng the subsequen
14d50 74 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 2c 20 77  t conditional, w
14d60 68 69 63 68 20 69 73 20 61 6c 77 61 79 73 20 74  hich is always t
14d70 72 75 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  rue..      */.  
14d80 20 20 20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e      zData = pC->
14d90 61 52 6f 77 3b 0a 20 20 20 20 20 20 61 73 73 65  aRow;.      asse
14da0 72 74 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73  rt( pC->nHdrPars
14db0 65 64 3c 3d 70 32 20 29 3b 20 20 20 20 20 20 20  ed<=p2 );       
14dc0 20 20 2f 2a 20 43 6f 6e 64 69 74 69 6f 6e 61 6c    /* Conditional
14dd0 20 73 6b 69 70 70 65 64 20 2a 2f 0a 20 20 20 20   skipped */.    
14de0 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
14df0 5f 72 65 61 64 5f 68 65 61 64 65 72 3b 0a 20 20  _read_header;.  
14e00 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61    }.  }..  /* Ma
14e10 6b 65 20 73 75 72 65 20 61 74 20 6c 65 61 73 74  ke sure at least
14e20 20 74 68 65 20 66 69 72 73 74 20 70 32 2b 31 20   the first p2+1 
14e30 65 6e 74 72 69 65 73 20 6f 66 20 74 68 65 20 68  entries of the h
14e40 65 61 64 65 72 20 68 61 76 65 20 62 65 65 6e 0a  eader have been.
14e50 20 20 2a 2a 20 70 61 72 73 65 64 20 61 6e 64 20    ** parsed and 
14e60 76 61 6c 69 64 20 69 6e 66 6f 72 6d 61 74 69 6f  valid informatio
14e70 6e 20 69 73 20 69 6e 20 61 4f 66 66 73 65 74 5b  n is in aOffset[
14e80 5d 20 61 6e 64 20 70 43 2d 3e 61 54 79 70 65 5b  ] and pC->aType[
14e90 5d 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 70 43  ]..  */.  if( pC
14ea0 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32  ->nHdrParsed<=p2
14eb0 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68   ){.    /* If th
14ec0 65 72 65 20 69 73 20 6d 6f 72 65 20 68 65 61 64  ere is more head
14ed0 65 72 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72  er available for
14ee0 20 70 61 72 73 69 6e 67 20 69 6e 20 74 68 65 20   parsing in the 
14ef0 72 65 63 6f 72 64 2c 20 74 72 79 0a 20 20 20 20  record, try.    
14f00 2a 2a 20 74 6f 20 65 78 74 72 61 63 74 20 61 64  ** to extract ad
14f10 64 69 74 69 6f 6e 61 6c 20 66 69 65 6c 64 73 20  ditional fields 
14f20 75 70 20 74 68 72 6f 75 67 68 20 74 68 65 20 70  up through the p
14f30 32 2b 31 2d 74 68 20 66 69 65 6c 64 20 0a 20 20  2+1-th field .  
14f40 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 43 2d    */.    if( pC-
14f50 3e 69 48 64 72 4f 66 66 73 65 74 3c 61 4f 66 66  >iHdrOffset<aOff
14f60 73 65 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20  set[0] ){.      
14f70 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 7a 44 61  /* Make sure zDa
14f80 74 61 20 70 6f 69 6e 74 73 20 74 6f 20 65 6e 6f  ta points to eno
14f90 75 67 68 20 6f 66 20 74 68 65 20 72 65 63 6f 72  ugh of the recor
14fa0 64 20 74 6f 20 63 6f 76 65 72 20 74 68 65 20 68  d to cover the h
14fb0 65 61 64 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20  eader. */.      
14fc0 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20  if( pC->aRow==0 
14fd0 29 7b 0a 20 20 20 20 20 20 20 20 6d 65 6d 73 65  ){.        memse
14fe0 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69 7a 65  t(&sMem, 0, size
14ff0 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20 20 20 20  of(sMem));.     
15000 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
15010 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28  dbeMemFromBtree(
15020 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
15030 30 2c 20 61 4f 66 66 73 65 74 5b 30 5d 2c 20 26  0, aOffset[0], &
15040 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 69  sMem);.        i
15050 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
15060 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
15070 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
15080 20 20 20 20 7a 44 61 74 61 20 3d 20 28 75 38 2a      zData = (u8*
15090 29 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20 20 7d  )sMem.z;.      }
150a0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 44  else{.        zD
150b0 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77 3b 0a  ata = pC->aRow;.
150c0 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20        }.  .     
150d0 20 2f 2a 20 46 69 6c 6c 20 69 6e 20 70 43 2d 3e   /* Fill in pC->
150e0 61 54 79 70 65 5b 69 5d 20 61 6e 64 20 61 4f 66  aType[i] and aOf
150f0 66 73 65 74 5b 69 5d 20 76 61 6c 75 65 73 20 74  fset[i] values t
15100 68 72 6f 75 67 68 20 74 68 65 20 70 32 2d 74 68  hrough the p2-th
15110 20 66 69 65 6c 64 2e 20 2a 2f 0a 20 20 20 20 6f   field. */.    o
15120 70 5f 63 6f 6c 75 6d 6e 5f 72 65 61 64 5f 68 65  p_column_read_he
15130 61 64 65 72 3a 0a 20 20 20 20 20 20 69 20 3d 20  ader:.      i = 
15140 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3b 0a  pC->nHdrParsed;.
15150 20 20 20 20 20 20 6f 66 66 73 65 74 36 34 20 3d        offset64 =
15160 20 61 4f 66 66 73 65 74 5b 69 5d 3b 0a 20 20 20   aOffset[i];.   
15170 20 20 20 7a 48 64 72 20 3d 20 7a 44 61 74 61 20     zHdr = zData 
15180 2b 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74  + pC->iHdrOffset
15190 3b 0a 20 20 20 20 20 20 7a 45 6e 64 48 64 72 20  ;.      zEndHdr 
151a0 3d 20 7a 44 61 74 61 20 2b 20 61 4f 66 66 73 65  = zData + aOffse
151b0 74 5b 30 5d 3b 0a 20 20 20 20 20 20 64 6f 7b 0a  t[0];.      do{.
151c0 20 20 20 20 20 20 20 20 69 66 28 20 28 74 20 3d          if( (t =
151d0 20 7a 48 64 72 5b 30 5d 29 3c 30 78 38 30 20 29   zHdr[0])<0x80 )
151e0 7b 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64 72  {.          zHdr
151f0 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 6f 66  ++;.          of
15200 66 73 65 74 36 34 20 2b 3d 20 73 71 6c 69 74 65  fset64 += sqlite
15210 33 56 64 62 65 4f 6e 65 42 79 74 65 53 65 72 69  3VdbeOneByteSeri
15220 61 6c 54 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20  alTypeLen(t);.  
15230 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
15240 20 20 20 20 20 20 20 7a 48 64 72 20 2b 3d 20 73         zHdr += s
15250 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33  qlite3GetVarint3
15260 32 28 7a 48 64 72 2c 20 26 74 29 3b 0a 20 20 20  2(zHdr, &t);.   
15270 20 20 20 20 20 20 20 6f 66 66 73 65 74 36 34 20         offset64 
15280 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  += sqlite3VdbeSe
15290 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29 3b 0a  rialTypeLen(t);.
152a0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
152b0 20 20 70 43 2d 3e 61 54 79 70 65 5b 69 2b 2b 5d    pC->aType[i++]
152c0 20 3d 20 74 3b 0a 20 20 20 20 20 20 20 20 61 4f   = t;.        aO
152d0 66 66 73 65 74 5b 69 5d 20 3d 20 28 75 33 32 29  ffset[i] = (u32)
152e0 28 6f 66 66 73 65 74 36 34 20 26 20 30 78 66 66  (offset64 & 0xff
152f0 66 66 66 66 66 66 29 3b 0a 20 20 20 20 20 20 7d  ffffff);.      }
15300 77 68 69 6c 65 28 20 69 3c 3d 70 32 20 26 26 20  while( i<=p2 && 
15310 7a 48 64 72 3c 7a 45 6e 64 48 64 72 20 29 3b 0a  zHdr<zEndHdr );.
15320 0a 20 20 20 20 20 20 2f 2a 20 54 68 65 20 72 65  .      /* The re
15330 63 6f 72 64 20 69 73 20 63 6f 72 72 75 70 74 20  cord is corrupt 
15340 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20 66 6f  if any of the fo
15350 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 72 75 65  llowing are true
15360 3a 0a 20 20 20 20 20 20 2a 2a 20 28 31 29 20 74  :.      ** (1) t
15370 68 65 20 62 79 74 65 73 20 6f 66 20 74 68 65 20  he bytes of the 
15380 68 65 61 64 65 72 20 65 78 74 65 6e 64 20 70 61  header extend pa
15390 73 74 20 74 68 65 20 64 65 63 6c 61 72 65 64 20  st the declared 
153a0 68 65 61 64 65 72 20 73 69 7a 65 0a 20 20 20 20  header size.    
153b0 20 20 2a 2a 20 28 32 29 20 74 68 65 20 65 6e 74    ** (2) the ent
153c0 69 72 65 20 68 65 61 64 65 72 20 77 61 73 20 75  ire header was u
153d0 73 65 64 20 62 75 74 20 6e 6f 74 20 61 6c 6c 20  sed but not all 
153e0 64 61 74 61 20 77 61 73 20 75 73 65 64 0a 20 20  data was used.  
153f0 20 20 20 20 2a 2a 20 28 33 29 20 74 68 65 20 65      ** (3) the e
15400 6e 64 20 6f 66 20 74 68 65 20 64 61 74 61 20 65  nd of the data e
15410 78 74 65 6e 64 73 20 62 65 79 6f 6e 64 20 74 68  xtends beyond th
15420 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63  e end of the rec
15430 6f 72 64 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  ord..      */.  
15440 20 20 20 20 69 66 28 20 28 7a 48 64 72 3e 3d 7a      if( (zHdr>=z
15450 45 6e 64 48 64 72 20 26 26 20 28 7a 48 64 72 3e  EndHdr && (zHdr>
15460 7a 45 6e 64 48 64 72 20 7c 7c 20 6f 66 66 73 65  zEndHdr || offse
15470 74 36 34 21 3d 70 43 2d 3e 70 61 79 6c 6f 61 64  t64!=pC->payload
15480 53 69 7a 65 29 29 0a 20 20 20 20 20 20 20 7c 7c  Size)).       ||
15490 20 28 6f 66 66 73 65 74 36 34 20 3e 20 70 43 2d   (offset64 > pC-
154a0 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20  >payloadSize).  
154b0 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 69      ){.        i
154c0 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29  f( pC->aRow==0 )
154d0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
154e0 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20  elease(&sMem);. 
154f0 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
15500 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b  TE_CORRUPT_BKPT;
15510 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
15520 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
15530 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
15540 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20   pC->nHdrParsed 
15550 3d 20 69 3b 0a 20 20 20 20 20 20 70 43 2d 3e 69  = i;.      pC->i
15560 48 64 72 4f 66 66 73 65 74 20 3d 20 28 75 33 32  HdrOffset = (u32
15570 29 28 7a 48 64 72 20 2d 20 7a 44 61 74 61 29 3b  )(zHdr - zData);
15580 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61  .      if( pC->a
15590 52 6f 77 3d 3d 30 20 29 20 73 71 6c 69 74 65 33  Row==0 ) sqlite3
155a0 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26  VdbeMemRelease(&
155b0 73 4d 65 6d 29 3b 0a 20 20 20 20 7d 65 6c 73 65  sMem);.    }else
155c0 7b 0a 20 20 20 20 20 20 74 20 3d 20 30 3b 0a 20  {.      t = 0;. 
155d0 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 49 66 20     }..    /* If 
155e0 61 66 74 65 72 20 74 72 79 69 6e 67 20 74 6f 20  after trying to 
155f0 65 78 74 72 61 63 74 20 6e 65 77 20 65 6e 74 72  extract new entr
15600 69 65 73 20 66 72 6f 6d 20 74 68 65 20 68 65 61  ies from the hea
15610 64 65 72 2c 20 6e 48 64 72 50 61 72 73 65 64 20  der, nHdrParsed 
15620 69 73 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20  is.    ** still 
15630 6e 6f 74 20 75 70 20 74 6f 20 70 32 2c 20 74 68  not up to p2, th
15640 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  at means that th
15650 65 20 72 65 63 6f 72 64 20 68 61 73 20 66 65 77  e record has few
15660 65 72 20 74 68 61 6e 20 70 32 0a 20 20 20 20 2a  er than p2.    *
15670 2a 20 63 6f 6c 75 6d 6e 73 2e 20 20 53 6f 20 74  * columns.  So t
15680 68 65 20 72 65 73 75 6c 74 20 77 69 6c 6c 20 62  he result will b
15690 65 20 65 69 74 68 65 72 20 74 68 65 20 64 65 66  e either the def
156a0 61 75 6c 74 20 76 61 6c 75 65 20 6f 72 20 61 20  ault value or a 
156b0 4e 55 4c 4c 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  NULL..    */.   
156c0 20 69 66 28 20 70 43 2d 3e 6e 48 64 72 50 61 72   if( pC->nHdrPar
156d0 73 65 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20 20  sed<=p2 ){.     
156e0 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
156f0 3d 3d 50 34 5f 4d 45 4d 20 29 7b 0a 20 20 20 20  ==P4_MEM ){.    
15700 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
15710 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 44  emShallowCopy(pD
15720 65 73 74 2c 20 70 4f 70 2d 3e 70 34 2e 70 4d 65  est, pOp->p4.pMe
15730 6d 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a  m, MEM_Static);.
15740 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
15750 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
15760 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74  MemSetNull(pDest
15770 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
15780 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
15790 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  out;.    }.  }el
157a0 73 65 7b 0a 20 20 20 20 74 20 3d 20 70 43 2d 3e  se{.    t = pC->
157b0 61 54 79 70 65 5b 70 32 5d 3b 0a 20 20 7d 0a 0a  aType[p2];.  }..
157c0 20 20 2f 2a 20 45 78 74 72 61 63 74 20 74 68 65    /* Extract the
157d0 20 63 6f 6e 74 65 6e 74 20 66 6f 72 20 74 68 65   content for the
157e0 20 70 32 2b 31 2d 74 68 20 63 6f 6c 75 6d 6e 2e   p2+1-th column.
157f0 20 20 43 6f 6e 74 72 6f 6c 20 63 61 6e 20 6f 6e    Control can on
15800 6c 79 0a 20 20 2a 2a 20 72 65 61 63 68 20 74 68  ly.  ** reach th
15810 69 73 20 70 6f 69 6e 74 20 69 66 20 61 4f 66 66  is point if aOff
15820 73 65 74 5b 70 32 5d 2c 20 61 4f 66 66 73 65 74  set[p2], aOffset
15830 5b 70 32 2b 31 5d 2c 20 61 6e 64 20 70 43 2d 3e  [p2+1], and pC->
15840 61 54 79 70 65 5b 70 32 5d 20 61 72 65 0a 20 20  aType[p2] are.  
15850 2a 2a 20 61 6c 6c 20 76 61 6c 69 64 2e 0a 20 20  ** all valid..  
15860 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 32 3c  */.  assert( p2<
15870 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 29  pC->nHdrParsed )
15880 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d  ;.  assert( rc==
15890 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 61  SQLITE_OK );.  a
158a0 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64  ssert( sqlite3Vd
158b0 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69  beCheckMemInvari
158c0 61 6e 74 73 28 70 44 65 73 74 29 20 29 3b 0a 20  ants(pDest) );. 
158d0 20 69 66 28 20 56 64 62 65 4d 65 6d 44 79 6e 61   if( VdbeMemDyna
158e0 6d 69 63 28 70 44 65 73 74 29 20 29 7b 0a 20 20  mic(pDest) ){.  
158f0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
15900 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a  SetNull(pDest);.
15910 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 74 3d    }.  assert( t=
15920 3d 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 20 29  =pC->aType[p2] )
15930 3b 0a 20 20 69 66 28 20 70 43 2d 3e 73 7a 52 6f  ;.  if( pC->szRo
15940 77 3e 3d 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d  w>=aOffset[p2+1]
15950 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20   ){.    /* This 
15960 69 73 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61  is the common ca
15970 73 65 20 77 68 65 72 65 20 74 68 65 20 64 65 73  se where the des
15980 69 72 65 64 20 63 6f 6e 74 65 6e 74 20 66 69 74  ired content fit
15990 73 20 6f 6e 20 74 68 65 20 6f 72 69 67 69 6e 61  s on the origina
159a0 6c 0a 20 20 20 20 2a 2a 20 70 61 67 65 20 2d 20  l.    ** page - 
159b0 77 68 65 72 65 20 74 68 65 20 63 6f 6e 74 65 6e  where the conten
159c0 74 20 69 73 20 6e 6f 74 20 6f 6e 20 61 6e 20 6f  t is not on an o
159d0 76 65 72 66 6c 6f 77 20 70 61 67 65 20 2a 2f 0a  verflow page */.
159e0 20 20 20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e      zData = pC->
159f0 61 52 6f 77 20 2b 20 61 4f 66 66 73 65 74 5b 70  aRow + aOffset[p
15a00 32 5d 3b 0a 20 20 20 20 69 66 28 20 74 3c 31 32  2];.    if( t<12
15a10 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
15a20 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 7a  3VdbeSerialGet(z
15a30 44 61 74 61 2c 20 74 2c 20 70 44 65 73 74 29 3b  Data, t, pDest);
15a40 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
15a50 20 20 2f 2a 20 49 66 20 74 68 65 20 63 6f 6c 75    /* If the colu
15a60 6d 6e 20 76 61 6c 75 65 20 69 73 20 61 20 73 74  mn value is a st
15a70 72 69 6e 67 2c 20 77 65 20 6e 65 65 64 20 61 20  ring, we need a 
15a80 70 65 72 73 69 73 74 65 6e 74 20 76 61 6c 75 65  persistent value
15a90 2c 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a 20 61  , not.      ** a
15aa0 20 4d 45 4d 5f 45 70 68 65 6d 20 76 61 6c 75 65   MEM_Ephem value
15ab0 2e 20 20 54 68 69 73 20 62 72 61 6e 63 68 20 69  .  This branch i
15ac0 73 20 61 20 66 61 73 74 20 73 68 6f 72 74 2d 63  s a fast short-c
15ad0 75 74 20 74 68 61 74 20 69 73 20 65 71 75 69 76  ut that is equiv
15ae0 61 6c 65 6e 74 0a 20 20 20 20 20 20 2a 2a 20 74  alent.      ** t
15af0 6f 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65  o calling sqlite
15b00 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 29  3VdbeSerialGet()
15b10 20 61 6e 64 20 73 71 6c 69 74 65 33 56 64 62 65   and sqlite3Vdbe
15b20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 29  Deephemeralize()
15b30 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
15b40 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 31   static const u1
15b50 36 20 61 46 6c 61 67 5b 5d 20 3d 20 7b 20 4d 45  6 aFlag[] = { ME
15b60 4d 5f 42 6c 6f 62 2c 20 4d 45 4d 5f 53 74 72 7c  M_Blob, MEM_Str|
15b70 4d 45 4d 5f 54 65 72 6d 20 7d 3b 0a 20 20 20 20  MEM_Term };.    
15b80 20 20 70 44 65 73 74 2d 3e 6e 20 3d 20 6c 65 6e    pDest->n = len
15b90 20 3d 20 28 74 2d 31 32 29 2f 32 3b 0a 20 20 20   = (t-12)/2;.   
15ba0 20 20 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20     pDest->enc = 
15bb0 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 20 20 20 20  encoding;.      
15bc0 69 66 28 20 70 44 65 73 74 2d 3e 73 7a 4d 61 6c  if( pDest->szMal
15bd0 6c 6f 63 20 3c 20 6c 65 6e 2b 32 20 29 7b 0a 20  loc < len+2 ){. 
15be0 20 20 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c         pDest->fl
15bf0 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
15c00 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69          if( sqli
15c10 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70  te3VdbeMemGrow(p
15c20 44 65 73 74 2c 20 6c 65 6e 2b 32 2c 20 30 29 20  Dest, len+2, 0) 
15c30 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
15c40 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
15c50 20 20 20 20 70 44 65 73 74 2d 3e 7a 20 3d 20 70      pDest->z = p
15c60 44 65 73 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20  Dest->zMalloc;. 
15c70 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d       }.      mem
15c80 63 70 79 28 70 44 65 73 74 2d 3e 7a 2c 20 7a 44  cpy(pDest->z, zD
15c90 61 74 61 2c 20 6c 65 6e 29 3b 0a 20 20 20 20 20  ata, len);.     
15ca0 20 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 5d 20 3d   pDest->z[len] =
15cb0 20 30 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d   0;.      pDest-
15cc0 3e 7a 5b 6c 65 6e 2b 31 5d 20 3d 20 30 3b 0a 20  >z[len+1] = 0;. 
15cd0 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67       pDest->flag
15ce0 73 20 3d 20 61 46 6c 61 67 5b 74 26 31 5d 3b 0a  s = aFlag[t&1];.
15cf0 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
15d00 20 20 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20     pDest->enc = 
15d10 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 20 20 2f 2a  encoding;.    /*
15d20 20 54 68 69 73 20 62 72 61 6e 63 68 20 68 61 70   This branch hap
15d30 70 65 6e 73 20 6f 6e 6c 79 20 77 68 65 6e 20 63  pens only when c
15d40 6f 6e 74 65 6e 74 20 69 73 20 6f 6e 20 6f 76 65  ontent is on ove
15d50 72 66 6c 6f 77 20 70 61 67 65 73 20 2a 2f 0a 20  rflow pages */. 
15d60 20 20 20 69 66 28 20 28 28 70 4f 70 2d 3e 70 35     if( ((pOp->p5
15d70 20 26 20 28 4f 50 46 4c 41 47 5f 4c 45 4e 47 54   & (OPFLAG_LENGT
15d80 48 41 52 47 7c 4f 50 46 4c 41 47 5f 54 59 50 45  HARG|OPFLAG_TYPE
15d90 4f 46 41 52 47 29 29 21 3d 30 0a 20 20 20 20 20  OFARG))!=0.     
15da0 20 20 20 20 20 26 26 20 28 28 74 3e 3d 31 32 20       && ((t>=12 
15db0 26 26 20 28 74 26 31 29 3d 3d 30 29 20 7c 7c 20  && (t&1)==0) || 
15dc0 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
15dd0 47 5f 54 59 50 45 4f 46 41 52 47 29 21 3d 30 29  G_TYPEOFARG)!=0)
15de0 29 0a 20 20 20 20 20 7c 7c 20 28 6c 65 6e 20 3d  ).     || (len =
15df0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
15e00 61 6c 54 79 70 65 4c 65 6e 28 74 29 29 3d 3d 30  alTypeLen(t))==0
15e10 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 2f 2a  .    ){.      /*
15e20 20 43 6f 6e 74 65 6e 74 20 69 73 20 69 72 72 65   Content is irre
15e30 6c 65 76 61 6e 74 20 66 6f 72 0a 20 20 20 20 20  levant for.     
15e40 20 2a 2a 20 20 20 20 31 2e 20 74 68 65 20 74 79   **    1. the ty
15e50 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c  peof() function,
15e60 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 32 2e 20  .      **    2. 
15e70 74 68 65 20 6c 65 6e 67 74 68 28 58 29 20 66 75  the length(X) fu
15e80 6e 63 74 69 6f 6e 20 69 66 20 58 20 69 73 20 61  nction if X is a
15e90 20 62 6c 6f 62 2c 20 61 6e 64 0a 20 20 20 20 20   blob, and.     
15ea0 20 2a 2a 20 20 20 20 33 2e 20 69 66 20 74 68 65   **    3. if the
15eb0 20 63 6f 6e 74 65 6e 74 20 6c 65 6e 67 74 68 20   content length 
15ec0 69 73 20 7a 65 72 6f 2e 0a 20 20 20 20 20 20 2a  is zero..      *
15ed0 2a 20 53 6f 20 77 65 20 6d 69 67 68 74 20 61 73  * So we might as
15ee0 20 77 65 6c 6c 20 75 73 65 20 62 6f 67 75 73 20   well use bogus 
15ef0 63 6f 6e 74 65 6e 74 20 72 61 74 68 65 72 20 74  content rather t
15f00 68 61 6e 20 72 65 61 64 69 6e 67 0a 20 20 20 20  han reading.    
15f10 20 20 2a 2a 20 63 6f 6e 74 65 6e 74 20 66 72 6f    ** content fro
15f20 6d 20 64 69 73 6b 2e 20 0a 20 20 20 20 20 20 2a  m disk. .      *
15f30 2a 0a 20 20 20 20 20 20 2a 2a 20 41 6c 74 68 6f  *.      ** Altho
15f40 75 67 68 20 73 71 6c 69 74 65 33 56 64 62 65 53  ugh sqlite3VdbeS
15f50 65 72 69 61 6c 47 65 74 28 29 20 6d 61 79 20 72  erialGet() may r
15f60 65 61 64 20 61 74 20 6d 6f 73 74 20 38 20 62 79  ead at most 8 by
15f70 74 65 73 20 66 72 6f 6d 20 74 68 65 0a 20 20 20  tes from the.   
15f80 20 20 20 2a 2a 20 62 75 66 66 65 72 20 70 61 73     ** buffer pas
15f90 73 65 64 20 74 6f 20 69 74 2c 20 64 65 62 75 67  sed to it, debug
15fa0 67 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 56 64  ging function Vd
15fb0 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e 74  beMemPrettyPrint
15fc0 28 29 20 6d 61 79 0a 20 20 20 20 20 20 2a 2a 20  () may.      ** 
15fd0 72 65 61 64 20 75 70 20 74 6f 20 31 36 2e 20 53  read up to 16. S
15fe0 6f 20 31 36 20 62 79 74 65 73 20 6f 66 20 62 6f  o 16 bytes of bo
15ff0 67 75 73 20 63 6f 6e 74 65 6e 74 20 69 73 20 73  gus content is s
16000 75 70 70 6c 69 65 64 2e 0a 20 20 20 20 20 20 2a  upplied..      *
16010 2f 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 75  /.      static u
16020 38 20 61 5a 65 72 6f 5b 31 36 5d 3b 20 20 2f 2a  8 aZero[16];  /*
16030 20 54 68 69 73 20 69 73 20 74 68 65 20 62 6f 67   This is the bog
16040 75 73 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20  us content */.  
16050 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
16060 65 72 69 61 6c 47 65 74 28 61 5a 65 72 6f 2c 20  erialGet(aZero, 
16070 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d  t, pDest);.    }
16080 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d  else{.      rc =
16090 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46   sqlite3VdbeMemF
160a0 72 6f 6d 42 74 72 65 65 28 70 43 2d 3e 75 63 2e  romBtree(pC->uc.
160b0 70 43 75 72 73 6f 72 2c 20 61 4f 66 66 73 65 74  pCursor, aOffset
160c0 5b 70 32 5d 2c 20 6c 65 6e 2c 20 70 44 65 73 74  [p2], len, pDest
160d0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
160e0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
160f0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
16100 72 72 6f 72 3b 0a 20 20 20 20 20 20 73 71 6c 69  rror;.      sqli
16110 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74  te3VdbeSerialGet
16120 28 28 63 6f 6e 73 74 20 75 38 2a 29 70 44 65 73  ((const u8*)pDes
16130 74 2d 3e 7a 2c 20 74 2c 20 70 44 65 73 74 29 3b  t->z, t, pDest);
16140 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c  .      pDest->fl
16150 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 45 70 68 65  ags &= ~MEM_Ephe
16160 6d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 6f 70  m;.    }.  }..op
16170 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20 55  _column_out:.  U
16180 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
16190 5a 45 28 70 44 65 73 74 29 3b 0a 20 20 52 45 47  ZE(pDest);.  REG
161a0 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
161b0 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 62  >p3, pDest);.  b
161c0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
161d0 64 65 3a 20 41 66 66 69 6e 69 74 79 20 50 31 20  de: Affinity P1 
161e0 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
161f0 6f 70 73 69 73 3a 20 61 66 66 69 6e 69 74 79 28  opsis: affinity(
16200 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20  r[P1@P2]).**.** 
16210 41 70 70 6c 79 20 61 66 66 69 6e 69 74 69 65 73  Apply affinities
16220 20 74 6f 20 61 20 72 61 6e 67 65 20 6f 66 20 50   to a range of P
16230 32 20 72 65 67 69 73 74 65 72 73 20 73 74 61 72  2 registers star
16240 74 69 6e 67 20 77 69 74 68 20 50 31 2e 0a 2a 2a  ting with P1..**
16250 0a 2a 2a 20 50 34 20 69 73 20 61 20 73 74 72 69  .** P4 is a stri
16260 6e 67 20 74 68 61 74 20 69 73 20 50 32 20 63 68  ng that is P2 ch
16270 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 54  aracters long. T
16280 68 65 20 6e 74 68 20 63 68 61 72 61 63 74 65 72  he nth character
16290 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e   of the.** strin
162a0 67 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20  g indicates the 
162b0 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20  column affinity 
162c0 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75  that should be u
162d0 73 65 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a  sed for the nth.
162e0 2a 2a 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69  ** memory cell i
162f0 6e 20 74 68 65 20 72 61 6e 67 65 2e 0a 2a 2f 0a  n the range..*/.
16300 63 61 73 65 20 4f 50 5f 41 66 66 69 6e 69 74 79  case OP_Affinity
16310 3a 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  : {.  const char
16320 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 2f   *zAffinity;   /
16330 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74  * The affinity t
16340 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a  o be applied */.
16350 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70  .  zAffinity = p
16360 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65  Op->p4.z;.  asse
16370 72 74 28 20 7a 41 66 66 69 6e 69 74 79 21 3d 30  rt( zAffinity!=0
16380 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
16390 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 61 73 73  p->p2>0 );.  ass
163a0 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79 5b 70  ert( zAffinity[p
163b0 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29 3b 0a 20 20  Op->p2]==0 );.  
163c0 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
163d0 2d 3e 70 31 5d 3b 0a 20 20 64 6f 7b 0a 20 20 20  ->p1];.  do{.   
163e0 20 61 73 73 65 72 74 28 20 70 49 6e 31 20 3c 3d   assert( pIn1 <=
163f0 20 26 70 2d 3e 61 4d 65 6d 5b 28 70 2d 3e 6e 4d   &p->aMem[(p->nM
16400 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
16410 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72  r)] );.    asser
16420 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49  t( memIsValid(pI
16430 6e 31 29 20 29 3b 0a 20 20 20 20 61 70 70 6c 79  n1) );.    apply
16440 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 2a  Affinity(pIn1, *
16450 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29 2c 20 65  (zAffinity++), e
16460 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 70 49  ncoding);.    pI
16470 6e 31 2b 2b 3b 0a 20 20 7d 77 68 69 6c 65 28 20  n1++;.  }while( 
16480 7a 41 66 66 69 6e 69 74 79 5b 30 5d 20 29 3b 0a  zAffinity[0] );.
16490 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
164a0 70 63 6f 64 65 3a 20 4d 61 6b 65 52 65 63 6f 72  pcode: MakeRecor
164b0 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  d P1 P2 P3 P4 *.
164c0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
164d0 33 5d 3d 6d 6b 72 65 63 28 72 5b 50 31 40 50 32  3]=mkrec(r[P1@P2
164e0 5d 29 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74  ]).**.** Convert
164f0 20 50 32 20 72 65 67 69 73 74 65 72 73 20 62 65   P2 registers be
16500 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 31 20  ginning with P1 
16510 69 6e 74 6f 20 74 68 65 20 5b 72 65 63 6f 72 64  into the [record
16520 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20 75 73 65 20   format].** use 
16530 61 73 20 61 20 64 61 74 61 20 72 65 63 6f 72 64  as a data record
16540 20 69 6e 20 61 20 64 61 74 61 62 61 73 65 20 74   in a database t
16550 61 62 6c 65 20 6f 72 20 61 73 20 61 20 6b 65 79  able or as a key
16560 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e 64 65 78 2e  .** in an index.
16570 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20    The OP_Column 
16580 6f 70 63 6f 64 65 20 63 61 6e 20 64 65 63 6f 64  opcode can decod
16590 65 20 74 68 65 20 72 65 63 6f 72 64 20 6c 61 74  e the record lat
165a0 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79  er..**.** P4 may
165b0 20 62 65 20 61 20 73 74 72 69 6e 67 20 74 68 61   be a string tha
165c0 74 20 69 73 20 50 32 20 63 68 61 72 61 63 74 65  t is P2 characte
165d0 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65 20 6e 74  rs long.  The nt
165e0 68 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 74  h character of t
165f0 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64  he.** string ind
16600 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d  icates the colum
16610 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61 74 20  n affinity that 
16620 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66  should be used f
16630 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20 66 69  or the nth.** fi
16640 65 6c 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78  eld of the index
16650 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20   key..**.** The 
16660 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20 63 68 61  mapping from cha
16670 72 61 63 74 65 72 20 74 6f 20 61 66 66 69 6e 69  racter to affini
16680 74 79 20 69 73 20 67 69 76 65 6e 20 62 79 20 74  ty is given by t
16690 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 0a 2a  he SQLITE_AFF_.*
166a0 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64  * macros defined
166b0 20 69 6e 20 73 71 6c 69 74 65 49 6e 74 2e 68 2e   in sqliteInt.h.
166c0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20  .**.** If P4 is 
166d0 4e 55 4c 4c 20 74 68 65 6e 20 61 6c 6c 20 69 6e  NULL then all in
166e0 64 65 78 20 66 69 65 6c 64 73 20 68 61 76 65 20  dex fields have 
166f0 74 68 65 20 61 66 66 69 6e 69 74 79 20 42 4c 4f  the affinity BLO
16700 42 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61  B..*/.case OP_Ma
16710 6b 65 52 65 63 6f 72 64 3a 20 7b 0a 20 20 75 38  keRecord: {.  u8
16720 20 2a 7a 4e 65 77 52 65 63 6f 72 64 3b 20 20 20   *zNewRecord;   
16730 20 20 20 20 20 2f 2a 20 41 20 62 75 66 66 65 72       /* A buffer
16740 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 64 61 74   to hold the dat
16750 61 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65  a for the new re
16760 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  cord */.  Mem *p
16770 52 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  Rec;            
16780 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 65 63 6f   /* The new reco
16790 72 64 20 2a 2f 0a 20 20 75 36 34 20 6e 44 61 74  rd */.  u64 nDat
167a0 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  a;             /
167b0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
167c0 73 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20  s of data space 
167d0 2a 2f 0a 20 20 69 6e 74 20 6e 48 64 72 3b 20 20  */.  int nHdr;  
167e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
167f0 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f  umber of bytes o
16800 66 20 68 65 61 64 65 72 20 73 70 61 63 65 20 2a  f header space *
16810 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b 20 20  /.  i64 nByte;  
16820 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
16830 74 61 20 73 70 61 63 65 20 72 65 71 75 69 72 65  ta space require
16840 64 20 66 6f 72 20 74 68 69 73 20 72 65 63 6f 72  d for this recor
16850 64 20 2a 2f 0a 20 20 69 36 34 20 6e 5a 65 72 6f  d */.  i64 nZero
16860 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
16870 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20   Number of zero 
16880 62 79 74 65 73 20 61 74 20 74 68 65 20 65 6e 64  bytes at the end
16890 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a   of the record *
168a0 2f 0a 20 20 69 6e 74 20 6e 56 61 72 69 6e 74 3b  /.  int nVarint;
168b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
168c0 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e  mber of bytes in
168d0 20 61 20 76 61 72 69 6e 74 20 2a 2f 0a 20 20 75   a varint */.  u
168e0 33 32 20 73 65 72 69 61 6c 5f 74 79 70 65 3b 20  32 serial_type; 
168f0 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 66 69        /* Type fi
16900 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44  eld */.  Mem *pD
16910 61 74 61 30 3b 20 20 20 20 20 20 20 20 20 20 20  ata0;           
16920 2f 2a 20 46 69 72 73 74 20 66 69 65 6c 64 20 74  /* First field t
16930 6f 20 62 65 20 63 6f 6d 62 69 6e 65 64 20 69 6e  o be combined in
16940 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  to the record */
16950 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74 3b 20 20  .  Mem *pLast;  
16960 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73            /* Las
16970 74 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 72  t field of the r
16980 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  ecord */.  int n
16990 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 20  Field;          
169a0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66    /* Number of f
169b0 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63  ields in the rec
169c0 6f 72 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ord */.  char *z
169d0 41 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20  Affinity;       
169e0 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20  /* The affinity 
169f0 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20 72  string for the r
16a00 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 66  ecord */.  int f
16a10 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20  ile_format;     
16a20 20 20 2f 2a 20 46 69 6c 65 20 66 6f 72 6d 61 74    /* File format
16a30 20 74 6f 20 75 73 65 20 66 6f 72 20 65 6e 63 6f   to use for enco
16a40 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 3b  ding */.  int i;
16a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a60 20 2f 2a 20 53 70 61 63 65 20 75 73 65 64 20 69   /* Space used i
16a70 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d 20 68  n zNewRecord[] h
16a80 65 61 64 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6a  eader */.  int j
16a90 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
16aa0 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65 64 20    /* Space used 
16ab0 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d 20  in zNewRecord[] 
16ac0 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 75 33 32  content */.  u32
16ad0 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20   len;           
16ae0 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66      /* Length of
16af0 20 61 20 66 69 65 6c 64 20 2a 2f 0a 0a 20 20 2f   a field */..  /
16b00 2a 20 41 73 73 75 6d 69 6e 67 20 74 68 65 20 72  * Assuming the r
16b10 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20 4e  ecord contains N
16b20 20 66 69 65 6c 64 73 2c 20 74 68 65 20 72 65 63   fields, the rec
16b30 6f 72 64 20 66 6f 72 6d 61 74 20 6c 6f 6f 6b 73  ord format looks
16b40 0a 20 20 2a 2a 20 6c 69 6b 65 20 74 68 69 73 3a  .  ** like this:
16b50 0a 20 20 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d  .  **.  ** -----
16b60 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16b70 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16b80 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16b90 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16ba0 2d 2d 2d 0a 20 20 2a 2a 20 7c 20 68 64 72 2d 73  ---.  ** | hdr-s
16bb0 69 7a 65 20 7c 20 74 79 70 65 20 30 20 7c 20 74  ize | type 0 | t
16bc0 79 70 65 20 31 20 7c 20 2e 2e 2e 20 7c 20 74 79  ype 1 | ... | ty
16bd0 70 65 20 4e 2d 31 20 7c 20 64 61 74 61 30 20 7c  pe N-1 | data0 |
16be0 20 2e 2e 2e 20 7c 20 64 61 74 61 20 4e 2d 31 20   ... | data N-1 
16bf0 7c 20 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d  | .  ** --------
16c00 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16c10 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16c20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16c30 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16c40 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 61 74 61 28  .  **.  ** Data(
16c50 30 29 20 69 73 20 74 61 6b 65 6e 20 66 72 6f 6d  0) is taken from
16c60 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 44   register P1.  D
16c70 61 74 61 28 31 29 20 63 6f 6d 65 73 20 66 72 6f  ata(1) comes fro
16c80 6d 20 72 65 67 69 73 74 65 72 20 50 31 2b 31 0a  m register P1+1.
16c90 20 20 2a 2a 20 61 6e 64 20 73 6f 20 66 6f 72 74    ** and so fort
16ca0 68 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 45 61 63  h..  **.  ** Eac
16cb0 68 20 74 79 70 65 20 66 69 65 6c 64 20 69 73 20  h type field is 
16cc0 61 20 76 61 72 69 6e 74 20 72 65 70 72 65 73 65  a varint represe
16cd0 6e 74 69 6e 67 20 74 68 65 20 73 65 72 69 61 6c  nting the serial
16ce0 20 74 79 70 65 20 6f 66 20 74 68 65 20 0a 20 20   type of the .  
16cf0 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  ** corresponding
16d00 20 64 61 74 61 20 65 6c 65 6d 65 6e 74 20 28 73   data element (s
16d10 65 65 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  ee sqlite3VdbeSe
16d20 72 69 61 6c 54 79 70 65 28 29 29 2e 20 54 68 65  rialType()). The
16d30 0a 20 20 2a 2a 20 68 64 72 2d 73 69 7a 65 20 66  .  ** hdr-size f
16d40 69 65 6c 64 20 69 73 20 61 6c 73 6f 20 61 20 76  ield is also a v
16d50 61 72 69 6e 74 20 77 68 69 63 68 20 69 73 20 74  arint which is t
16d60 68 65 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74  he offset from t
16d70 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20 2a  he beginning.  *
16d80 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  * of the record 
16d90 74 6f 20 64 61 74 61 30 2e 0a 20 20 2a 2f 0a 20  to data0..  */. 
16da0 20 6e 44 61 74 61 20 3d 20 30 3b 20 20 20 20 20   nData = 0;     
16db0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
16dc0 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 20 73   bytes of data s
16dd0 70 61 63 65 20 2a 2f 0a 20 20 6e 48 64 72 20 3d  pace */.  nHdr =
16de0 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20   0;          /* 
16df0 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
16e00 6f 66 20 68 65 61 64 65 72 20 73 70 61 63 65 20  of header space 
16e10 2a 2f 0a 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 20  */.  nZero = 0; 
16e20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
16e30 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20  r of zero bytes 
16e40 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
16e50 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 6e 46  e record */.  nF
16e60 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  ield = pOp->p1;.
16e70 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70 4f    zAffinity = pO
16e80 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72  p->p4.z;.  asser
16e90 74 28 20 6e 46 69 65 6c 64 3e 30 20 26 26 20 70  t( nField>0 && p
16ea0 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d  Op->p2>0 && pOp-
16eb0 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d 28 70 2d 3e  >p2+nField<=(p->
16ec0 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
16ed0 73 6f 72 29 2b 31 20 29 3b 0a 20 20 70 44 61 74  sor)+1 );.  pDat
16ee0 61 30 20 3d 20 26 61 4d 65 6d 5b 6e 46 69 65 6c  a0 = &aMem[nFiel
16ef0 64 5d 3b 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70  d];.  nField = p
16f00 4f 70 2d 3e 70 32 3b 0a 20 20 70 4c 61 73 74 20  Op->p2;.  pLast 
16f10 3d 20 26 70 44 61 74 61 30 5b 6e 46 69 65 6c 64  = &pData0[nField
16f20 2d 31 5d 3b 0a 20 20 66 69 6c 65 5f 66 6f 72 6d  -1];.  file_form
16f30 61 74 20 3d 20 70 2d 3e 6d 69 6e 57 72 69 74 65  at = p->minWrite
16f40 46 69 6c 65 46 6f 72 6d 61 74 3b 0a 0a 20 20 2f  FileFormat;..  /
16f50 2a 20 49 64 65 6e 74 69 66 79 20 74 68 65 20 6f  * Identify the o
16f60 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20 2a  utput register *
16f70 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
16f80 3e 70 33 3c 70 4f 70 2d 3e 70 31 20 7c 7c 20 70  >p3<pOp->p1 || p
16f90 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 31 2b  Op->p3>=pOp->p1+
16fa0 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 70 4f 75  pOp->p2 );.  pOu
16fb0 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
16fc0 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  3];.  memAboutTo
16fd0 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
16fe0 0a 0a 20 20 2f 2a 20 41 70 70 6c 79 20 74 68 65  ..  /* Apply the
16ff0 20 72 65 71 75 65 73 74 65 64 20 61 66 66 69 6e   requested affin
17000 69 74 79 20 74 6f 20 61 6c 6c 20 69 6e 70 75 74  ity to all input
17010 73 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  s.  */.  assert(
17020 20 70 44 61 74 61 30 3c 3d 70 4c 61 73 74 20 29   pData0<=pLast )
17030 3b 0a 20 20 69 66 28 20 7a 41 66 66 69 6e 69 74  ;.  if( zAffinit
17040 79 20 29 7b 0a 20 20 20 20 70 52 65 63 20 3d 20  y ){.    pRec = 
17050 70 44 61 74 61 30 3b 0a 20 20 20 20 64 6f 7b 0a  pData0;.    do{.
17060 20 20 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e        applyAffin
17070 69 74 79 28 70 52 65 63 2b 2b 2c 20 2a 28 7a 41  ity(pRec++, *(zA
17080 66 66 69 6e 69 74 79 2b 2b 29 2c 20 65 6e 63 6f  ffinity++), enco
17090 64 69 6e 67 29 3b 0a 20 20 20 20 20 20 61 73 73  ding);.      ass
170a0 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79 5b 30  ert( zAffinity[0
170b0 5d 3d 3d 30 20 7c 7c 20 70 52 65 63 3c 3d 70 4c  ]==0 || pRec<=pL
170c0 61 73 74 20 29 3b 0a 20 20 20 20 7d 77 68 69 6c  ast );.    }whil
170d0 65 28 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d 20  e( zAffinity[0] 
170e0 29 3b 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53  );.  }..#ifdef S
170f0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4e 55 4c  QLITE_ENABLE_NUL
17100 4c 5f 54 52 49 4d 0a 20 20 2f 2a 20 4e 55 4c 4c  L_TRIM.  /* NULL
17110 73 20 63 61 6e 20 62 65 20 73 61 66 65 6c 79 20  s can be safely 
17120 74 72 69 6d 6d 65 64 20 66 72 6f 6d 20 74 68 65  trimmed from the
17130 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f   end of the reco
17140 72 64 2c 20 61 73 20 6c 6f 6e 67 20 61 73 0a 20  rd, as long as. 
17150 20 2a 2a 20 61 73 20 74 68 65 20 73 63 68 65 6d   ** as the schem
17160 61 20 66 6f 72 6d 61 74 20 69 73 20 32 20 6f 72  a format is 2 or
17170 20 6d 6f 72 65 20 61 6e 64 20 6e 6f 6e 65 20 6f   more and none o
17180 66 20 74 68 65 20 6f 6d 69 74 74 65 64 20 63 6f  f the omitted co
17190 6c 75 6d 6e 73 0a 20 20 2a 2a 20 68 61 76 65 20  lumns.  ** have 
171a0 61 20 6e 6f 6e 2d 4e 55 4c 4c 20 64 65 66 61 75  a non-NULL defau
171b0 6c 74 20 76 61 6c 75 65 2e 20 20 41 6c 73 6f 2c  lt value.  Also,
171c0 20 74 68 65 20 72 65 63 6f 72 64 20 6d 75 73 74   the record must
171d0 20 62 65 20 6c 65 66 74 20 77 69 74 68 0a 20 20   be left with.  
171e0 2a 2a 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20  ** at least one 
171f0 66 69 65 6c 64 2e 20 20 49 66 20 50 35 3e 30 20  field.  If P5>0 
17200 74 68 65 6e 20 69 74 20 77 69 6c 6c 20 62 65 20  then it will be 
17210 6f 6e 65 20 6d 6f 72 65 20 74 68 61 6e 20 74 68  one more than th
17220 65 0a 20 20 2a 2a 20 69 6e 64 65 78 20 6f 66 20  e.  ** index of 
17230 74 68 65 20 72 69 67 68 74 2d 6d 6f 73 74 20 63  the right-most c
17240 6f 6c 75 6d 6e 20 77 69 74 68 20 61 20 6e 6f 6e  olumn with a non
17250 2d 4e 55 4c 4c 20 64 65 66 61 75 6c 74 20 76 61  -NULL default va
17260 6c 75 65 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70  lue */.  if( pOp
17270 2d 3e 70 35 20 29 7b 0a 20 20 20 20 77 68 69 6c  ->p5 ){.    whil
17280 65 28 20 28 70 4c 61 73 74 2d 3e 66 6c 61 67 73  e( (pLast->flags
17290 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20   & MEM_Null)!=0 
172a0 26 26 20 6e 46 69 65 6c 64 3e 70 4f 70 2d 3e 70  && nField>pOp->p
172b0 35 20 29 7b 0a 20 20 20 20 20 20 70 4c 61 73 74  5 ){.      pLast
172c0 2d 2d 3b 0a 20 20 20 20 20 20 6e 46 69 65 6c 64  --;.      nField
172d0 2d 2d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  --;.    }.  }.#e
172e0 6e 64 69 66 0a 0a 20 20 2f 2a 20 4c 6f 6f 70 20  ndif..  /* Loop 
172f0 74 68 72 6f 75 67 68 20 74 68 65 20 65 6c 65 6d  through the elem
17300 65 6e 74 73 20 74 68 61 74 20 77 69 6c 6c 20 6d  ents that will m
17310 61 6b 65 20 75 70 20 74 68 65 20 72 65 63 6f 72  ake up the recor
17320 64 20 74 6f 20 66 69 67 75 72 65 0a 20 20 2a 2a  d to figure.  **
17330 20 6f 75 74 20 68 6f 77 20 6d 75 63 68 20 73 70   out how much sp
17340 61 63 65 20 69 73 20 72 65 71 75 69 72 65 64 20  ace is required 
17350 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63 6f  for the new reco
17360 72 64 2e 0a 20 20 2a 2f 0a 20 20 70 52 65 63 20  rd..  */.  pRec 
17370 3d 20 70 4c 61 73 74 3b 0a 20 20 64 6f 7b 0a 20  = pLast;.  do{. 
17380 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
17390 56 61 6c 69 64 28 70 52 65 63 29 20 29 3b 0a 20  Valid(pRec) );. 
173a0 20 20 20 70 52 65 63 2d 3e 75 54 65 6d 70 20 3d     pRec->uTemp =
173b0 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 73   serial_type = s
173c0 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
173d0 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c 65 5f  Type(pRec, file_
173e0 66 6f 72 6d 61 74 2c 20 26 6c 65 6e 29 3b 0a 20  format, &len);. 
173f0 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c 61     if( pRec->fla
17400 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b  gs & MEM_Zero ){
17410 0a 20 20 20 20 20 20 69 66 28 20 6e 44 61 74 61  .      if( nData
17420 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
17430 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78  sqlite3VdbeMemEx
17440 70 61 6e 64 42 6c 6f 62 28 70 52 65 63 29 20 29  pandBlob(pRec) )
17450 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
17460 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
17470 20 20 20 6e 5a 65 72 6f 20 2b 3d 20 70 52 65 63     nZero += pRec
17480 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 20  ->u.nZero;.     
17490 20 20 20 6c 65 6e 20 2d 3d 20 70 52 65 63 2d 3e     len -= pRec->
174a0 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 20 20 7d  u.nZero;.      }
174b0 0a 20 20 20 20 7d 0a 20 20 20 20 6e 44 61 74 61  .    }.    nData
174c0 20 2b 3d 20 6c 65 6e 3b 0a 20 20 20 20 74 65 73   += len;.    tes
174d0 74 63 61 73 65 28 20 73 65 72 69 61 6c 5f 74 79  tcase( serial_ty
174e0 70 65 3d 3d 31 32 37 20 29 3b 0a 20 20 20 20 74  pe==127 );.    t
174f0 65 73 74 63 61 73 65 28 20 73 65 72 69 61 6c 5f  estcase( serial_
17500 74 79 70 65 3d 3d 31 32 38 20 29 3b 0a 20 20 20  type==128 );.   
17510 20 6e 48 64 72 20 2b 3d 20 73 65 72 69 61 6c 5f   nHdr += serial_
17520 74 79 70 65 3c 3d 31 32 37 20 3f 20 31 20 3a 20  type<=127 ? 1 : 
17530 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e  sqlite3VarintLen
17540 28 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20  (serial_type);. 
17550 20 20 20 69 66 28 20 70 52 65 63 3d 3d 70 44 61     if( pRec==pDa
17560 74 61 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20  ta0 ) break;.   
17570 20 70 52 65 63 2d 2d 3b 0a 20 20 7d 77 68 69 6c   pRec--;.  }whil
17580 65 28 31 29 3b 0a 0a 20 20 2f 2a 20 45 56 49 44  e(1);..  /* EVID
17590 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 32 35 36 34  ENCE-OF: R-22564
175a0 2d 31 31 36 34 37 20 54 68 65 20 68 65 61 64 65  -11647 The heade
175b0 72 20 62 65 67 69 6e 73 20 77 69 74 68 20 61 20  r begins with a 
175c0 73 69 6e 67 6c 65 20 76 61 72 69 6e 74 0a 20 20  single varint.  
175d0 2a 2a 20 77 68 69 63 68 20 64 65 74 65 72 6d 69  ** which determi
175e0 6e 65 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75  nes the total nu
175f0 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e  mber of bytes in
17600 20 74 68 65 20 68 65 61 64 65 72 2e 20 54 68 65   the header. The
17610 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 76 61 6c   varint.  ** val
17620 75 65 20 69 73 20 74 68 65 20 73 69 7a 65 20 6f  ue is the size o
17630 66 20 74 68 65 20 68 65 61 64 65 72 20 69 6e 20  f the header in 
17640 62 79 74 65 73 20 69 6e 63 6c 75 64 69 6e 67 20  bytes including 
17650 74 68 65 20 73 69 7a 65 20 76 61 72 69 6e 74 0a  the size varint.
17660 20 20 2a 2a 20 69 74 73 65 6c 66 2e 20 2a 2f 0a    ** itself. */.
17670 20 20 74 65 73 74 63 61 73 65 28 20 6e 48 64 72    testcase( nHdr
17680 3d 3d 31 32 36 20 29 3b 0a 20 20 74 65 73 74 63  ==126 );.  testc
17690 61 73 65 28 20 6e 48 64 72 3d 3d 31 32 37 20 29  ase( nHdr==127 )
176a0 3b 0a 20 20 69 66 28 20 6e 48 64 72 3c 3d 31 32  ;.  if( nHdr<=12
176b0 36 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20  6 ){.    /* The 
176c0 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 2a 2f 0a 20  common case */. 
176d0 20 20 20 6e 48 64 72 20 2b 3d 20 31 3b 0a 20 20     nHdr += 1;.  
176e0 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 52 61  }else{.    /* Ra
176f0 72 65 20 63 61 73 65 20 6f 66 20 61 20 72 65 61  re case of a rea
17700 6c 6c 79 20 6c 61 72 67 65 20 68 65 61 64 65 72  lly large header
17710 20 2a 2f 0a 20 20 20 20 6e 56 61 72 69 6e 74 20   */.    nVarint 
17720 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c  = sqlite3VarintL
17730 65 6e 28 6e 48 64 72 29 3b 0a 20 20 20 20 6e 48  en(nHdr);.    nH
17740 64 72 20 2b 3d 20 6e 56 61 72 69 6e 74 3b 0a 20  dr += nVarint;. 
17750 20 20 20 69 66 28 20 6e 56 61 72 69 6e 74 3c 73     if( nVarint<s
17760 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28  qlite3VarintLen(
17770 6e 48 64 72 29 20 29 20 6e 48 64 72 2b 2b 3b 0a  nHdr) ) nHdr++;.
17780 20 20 7d 0a 20 20 6e 42 79 74 65 20 3d 20 6e 48    }.  nByte = nH
17790 64 72 2b 6e 44 61 74 61 3b 0a 20 20 69 66 28 20  dr+nData;.  if( 
177a0 6e 42 79 74 65 2b 6e 5a 65 72 6f 3e 64 62 2d 3e  nByte+nZero>db->
177b0 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
177c0 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
177d0 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
177e0 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20  .  }..  /* Make 
177f0 73 75 72 65 20 74 68 65 20 6f 75 74 70 75 74 20  sure the output 
17800 72 65 67 69 73 74 65 72 20 68 61 73 20 61 20 62  register has a b
17810 75 66 66 65 72 20 6c 61 72 67 65 20 65 6e 6f 75  uffer large enou
17820 67 68 20 74 6f 20 73 74 6f 72 65 20 0a 20 20 2a  gh to store .  *
17830 2a 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64  * the new record
17840 2e 20 54 68 65 20 6f 75 74 70 75 74 20 72 65 67  . The output reg
17850 69 73 74 65 72 20 28 70 4f 70 2d 3e 70 33 29 20  ister (pOp->p3) 
17860 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 74  is not allowed t
17870 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e 65 20 6f 66  o.  ** be one of
17880 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73   the input regis
17890 74 65 72 73 20 28 62 65 63 61 75 73 65 20 74 68  ters (because th
178a0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c  e following call
178b0 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33   to.  ** sqlite3
178c0 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52  VdbeMemClearAndR
178d0 65 73 69 7a 65 28 29 20 63 6f 75 6c 64 20 63 6c  esize() could cl
178e0 6f 62 62 65 72 20 74 68 65 20 76 61 6c 75 65 20  obber the value 
178f0 62 65 66 6f 72 65 20 69 74 20 69 73 20 75 73 65  before it is use
17900 64 29 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73  d)..  */.  if( s
17910 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65  qlite3VdbeMemCle
17920 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4f 75 74  arAndResize(pOut
17930 2c 20 28 69 6e 74 29 6e 42 79 74 65 29 20 29 7b  , (int)nByte) ){
17940 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  .    goto no_mem
17950 3b 0a 20 20 7d 0a 20 20 7a 4e 65 77 52 65 63 6f  ;.  }.  zNewReco
17960 72 64 20 3d 20 28 75 38 20 2a 29 70 4f 75 74 2d  rd = (u8 *)pOut-
17970 3e 7a 3b 0a 0a 20 20 2f 2a 20 57 72 69 74 65 20  >z;..  /* Write 
17980 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
17990 69 20 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28  i = putVarint32(
179a0 7a 4e 65 77 52 65 63 6f 72 64 2c 20 6e 48 64 72  zNewRecord, nHdr
179b0 29 3b 0a 20 20 6a 20 3d 20 6e 48 64 72 3b 0a 20  );.  j = nHdr;. 
179c0 20 61 73 73 65 72 74 28 20 70 44 61 74 61 30 3c   assert( pData0<
179d0 3d 70 4c 61 73 74 20 29 3b 0a 20 20 70 52 65 63  =pLast );.  pRec
179e0 20 3d 20 70 44 61 74 61 30 3b 0a 20 20 64 6f 7b   = pData0;.  do{
179f0 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65  .    serial_type
17a00 20 3d 20 70 52 65 63 2d 3e 75 54 65 6d 70 3b 0a   = pRec->uTemp;.
17a10 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d      /* EVIDENCE-
17a20 4f 46 3a 20 52 2d 30 36 35 32 39 2d 34 37 33 36  OF: R-06529-4736
17a30 32 20 46 6f 6c 6c 6f 77 69 6e 67 20 74 68 65 20  2 Following the 
17a40 73 69 7a 65 20 76 61 72 69 6e 74 20 61 72 65 20  size varint are 
17a50 6f 6e 65 20 6f 72 20 6d 6f 72 65 0a 20 20 20 20  one or more.    
17a60 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 76 61  ** additional va
17a70 72 69 6e 74 73 2c 20 6f 6e 65 20 70 65 72 20 63  rints, one per c
17a80 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 20 20 69 20  olumn. */.    i 
17a90 2b 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28 26  += putVarint32(&
17aa0 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d 2c 20 73  zNewRecord[i], s
17ab0 65 72 69 61 6c 5f 74 79 70 65 29 3b 20 20 20 20  erial_type);    
17ac0 20 20 20 20 20 20 20 20 2f 2a 20 73 65 72 69 61          /* seria
17ad0 6c 20 74 79 70 65 20 2a 2f 0a 20 20 20 20 2f 2a  l type */.    /*
17ae0 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
17af0 36 34 35 33 36 2d 35 31 37 32 38 20 54 68 65 20  64536-51728 The 
17b00 76 61 6c 75 65 73 20 66 6f 72 20 65 61 63 68 20  values for each 
17b10 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 72 65  column in the re
17b20 63 6f 72 64 0a 20 20 20 20 2a 2a 20 69 6d 6d 65  cord.    ** imme
17b30 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 20 74  diately follow t
17b40 68 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a 20 20  he header. */.  
17b50 20 20 6a 20 2b 3d 20 73 71 6c 69 74 65 33 56 64    j += sqlite3Vd
17b60 62 65 53 65 72 69 61 6c 50 75 74 28 26 7a 4e 65  beSerialPut(&zNe
17b70 77 52 65 63 6f 72 64 5b 6a 5d 2c 20 70 52 65 63  wRecord[j], pRec
17b80 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 20  , serial_type); 
17b90 2f 2a 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20  /* content */.  
17ba0 7d 77 68 69 6c 65 28 20 28 2b 2b 70 52 65 63 29  }while( (++pRec)
17bb0 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 61 73 73  <=pLast );.  ass
17bc0 65 72 74 28 20 69 3d 3d 6e 48 64 72 20 29 3b 0a  ert( i==nHdr );.
17bd0 20 20 61 73 73 65 72 74 28 20 6a 3d 3d 6e 42 79    assert( j==nBy
17be0 74 65 20 29 3b 0a 0a 20 20 61 73 73 65 72 74 28  te );..  assert(
17bf0 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f   pOp->p3>0 && pO
17c00 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p3<=(p->nMem+
17c10 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
17c20 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28  );.  pOut->n = (
17c30 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75  int)nByte;.  pOu
17c40 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42  t->flags = MEM_B
17c50 6c 6f 62 3b 0a 20 20 69 66 28 20 6e 5a 65 72 6f  lob;.  if( nZero
17c60 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e   ){.    pOut->u.
17c70 6e 5a 65 72 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20  nZero = nZero;. 
17c80 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c     pOut->flags |
17c90 3d 20 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a  = MEM_Zero;.  }.
17ca0 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
17cb0 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b  (pOp->p3, pOut);
17cc0 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
17cd0 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
17ce0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
17cf0 6f 64 65 3a 20 43 6f 75 6e 74 20 50 31 20 50 32  ode: Count P1 P2
17d00 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
17d10 69 73 3a 20 72 5b 50 32 5d 3d 63 6f 75 6e 74 28  is: r[P2]=count(
17d20 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68  ).**.** Store th
17d30 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  e number of entr
17d40 69 65 73 20 28 61 6e 20 69 6e 74 65 67 65 72 20  ies (an integer 
17d50 76 61 6c 75 65 29 20 69 6e 20 74 68 65 20 74 61  value) in the ta
17d60 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 0a 2a 2a  ble or index .**
17d70 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f   opened by curso
17d80 72 20 50 31 20 69 6e 20 72 65 67 69 73 74 65 72  r P1 in register
17d90 20 50 32 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53   P2.*/.#ifndef S
17da0 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45  QLITE_OMIT_BTREE
17db0 43 4f 55 4e 54 0a 63 61 73 65 20 4f 50 5f 43 6f  COUNT.case OP_Co
17dc0 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 2f  unt: {         /
17dd0 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 36 34 20  * out2 */.  i64 
17de0 6e 45 6e 74 72 79 3b 0a 20 20 42 74 43 75 72 73  nEntry;.  BtCurs
17df0 6f 72 20 2a 70 43 72 73 72 3b 0a 0a 20 20 61 73  or *pCrsr;..  as
17e00 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70  sert( p->apCsr[p
17e10 4f 70 2d 3e 70 31 5d 2d 3e 65 43 75 72 54 79 70  Op->p1]->eCurTyp
17e20 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
17e30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 2d   );.  pCrsr = p-
17e40 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d  >apCsr[pOp->p1]-
17e50 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61  >uc.pCursor;.  a
17e60 73 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a  ssert( pCrsr );.
17e70 20 20 6e 45 6e 74 72 79 20 3d 20 30 3b 20 20 2f    nEntry = 0;  /
17e80 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f  * Not needed.  O
17e90 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65  nly used to sile
17ea0 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a  nce a warning. *
17eb0 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  /.  rc = sqlite3
17ec0 42 74 72 65 65 43 6f 75 6e 74 28 70 43 72 73 72  BtreeCount(pCrsr
17ed0 2c 20 26 6e 45 6e 74 72 79 29 3b 0a 20 20 69 66  , &nEntry);.  if
17ee0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
17ef0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
17f00 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
17f10 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
17f20 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e  .  pOut->u.i = n
17f30 45 6e 74 72 79 3b 0a 20 20 62 72 65 61 6b 3b 0a  Entry;.  break;.
17f40 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63  }.#endif../* Opc
17f50 6f 64 65 3a 20 53 61 76 65 70 6f 69 6e 74 20 50  ode: Savepoint P
17f60 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
17f70 20 4f 70 65 6e 2c 20 72 65 6c 65 61 73 65 20 6f   Open, release o
17f80 72 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 73  r rollback the s
17f90 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65 64 20 62  avepoint named b
17fa0 79 20 70 61 72 61 6d 65 74 65 72 20 50 34 2c 20  y parameter P4, 
17fb0 64 65 70 65 6e 64 69 6e 67 0a 2a 2a 20 6f 6e 20  depending.** on 
17fc0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50 31 2e  the value of P1.
17fd0 20 54 6f 20 6f 70 65 6e 20 61 20 6e 65 77 20 73   To open a new s
17fe0 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 30 2e  avepoint, P1==0.
17ff0 20 54 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d   To release (com
18000 6d 69 74 29 20 61 6e 0a 2a 2a 20 65 78 69 73 74  mit) an.** exist
18010 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 2c 20 50  ing savepoint, P
18020 31 3d 3d 31 2c 20 6f 72 20 74 6f 20 72 6f 6c 6c  1==1, or to roll
18030 62 61 63 6b 20 61 6e 20 65 78 69 73 74 69 6e 67  back an existing
18040 20 73 61 76 65 70 6f 69 6e 74 20 50 31 3d 3d 32   savepoint P1==2
18050 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 61 76  ..*/.case OP_Sav
18060 65 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20  epoint: {.  int 
18070 70 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  p1;             
18080 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
18090 61 6c 75 65 20 6f 66 20 50 31 20 6f 70 65 72 61  alue of P1 opera
180a0 6e 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e  nd */.  char *zN
180b0 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
180c0 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
180d0 6f 66 20 73 61 76 65 70 6f 69 6e 74 20 2a 2f 0a  of savepoint */.
180e0 20 20 69 6e 74 20 6e 4e 61 6d 65 3b 0a 20 20 53    int nName;.  S
180f0 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65 77 3b 0a  avepoint *pNew;.
18100 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61    Savepoint *pSa
18110 76 65 70 6f 69 6e 74 3b 0a 20 20 53 61 76 65 70  vepoint;.  Savep
18120 6f 69 6e 74 20 2a 70 54 6d 70 3b 0a 20 20 69 6e  oint *pTmp;.  in
18130 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20  t iSavepoint;.  
18140 69 6e 74 20 69 69 3b 0a 0a 20 20 70 31 20 3d 20  int ii;..  p1 = 
18150 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 4e 61 6d 65  pOp->p1;.  zName
18160 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 0a 20   = pOp->p4.z;.. 
18170 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20   /* Assert that 
18180 74 68 65 20 70 31 20 70 61 72 61 6d 65 74 65 72  the p1 parameter
18190 20 69 73 20 76 61 6c 69 64 2e 20 41 6c 73 6f 20   is valid. Also 
181a0 74 68 61 74 20 69 66 20 74 68 65 72 65 20 69 73  that if there is
181b0 20 6e 6f 20 6f 70 65 6e 0a 20 20 2a 2a 20 74 72   no open.  ** tr
181c0 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20  ansaction, then 
181d0 74 68 65 72 65 20 63 61 6e 6e 6f 74 20 62 65 20  there cannot be 
181e0 61 6e 79 20 73 61 76 65 70 6f 69 6e 74 73 2e 20  any savepoints. 
181f0 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
18200 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3d 3d  db->pSavepoint==
18210 30 20 7c 7c 20 64 62 2d 3e 61 75 74 6f 43 6f 6d  0 || db->autoCom
18220 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  mit==0 );.  asse
18230 72 74 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e  rt( p1==SAVEPOIN
18240 54 5f 42 45 47 49 4e 7c 7c 70 31 3d 3d 53 41 56  T_BEGIN||p1==SAV
18250 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 7c 7c  EPOINT_RELEASE||
18260 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f  p1==SAVEPOINT_RO
18270 4c 4c 42 41 43 4b 20 29 3b 0a 20 20 61 73 73 65  LLBACK );.  asse
18280 72 74 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  rt( db->pSavepoi
18290 6e 74 20 7c 7c 20 64 62 2d 3e 69 73 54 72 61 6e  nt || db->isTran
182a0 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
182b0 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
182c0 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43   checkSavepointC
182d0 6f 75 6e 74 28 64 62 29 20 29 3b 0a 20 20 61 73  ount(db) );.  as
182e0 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
182f0 65 72 20 29 3b 0a 0a 20 20 69 66 28 20 70 31 3d  er );..  if( p1=
18300 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e  =SAVEPOINT_BEGIN
18310 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e   ){.    if( db->
18320 6e 56 64 62 65 57 72 69 74 65 3e 30 20 29 7b 0a  nVdbeWrite>0 ){.
18330 20 20 20 20 20 20 2f 2a 20 41 20 6e 65 77 20 73        /* A new s
18340 61 76 65 70 6f 69 6e 74 20 63 61 6e 6e 6f 74 20  avepoint cannot 
18350 62 65 20 63 72 65 61 74 65 64 20 69 66 20 74 68  be created if th
18360 65 72 65 20 61 72 65 20 61 63 74 69 76 65 20 77  ere are active w
18370 72 69 74 65 20 0a 20 20 20 20 20 20 2a 2a 20 73  rite .      ** s
18380 74 61 74 65 6d 65 6e 74 73 20 28 69 2e 65 2e 20  tatements (i.e. 
18390 6f 70 65 6e 20 72 65 61 64 2f 77 72 69 74 65 20  open read/write 
183a0 69 6e 63 72 65 6d 65 6e 74 61 6c 20 62 6c 6f 62  incremental blob
183b0 20 68 61 6e 64 6c 65 73 29 2e 0a 20 20 20 20 20   handles)..     
183c0 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65   */.      sqlite
183d0 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 63  3VdbeError(p, "c
183e0 61 6e 6e 6f 74 20 6f 70 65 6e 20 73 61 76 65 70  annot open savep
183f0 6f 69 6e 74 20 2d 20 53 51 4c 20 73 74 61 74 65  oint - SQL state
18400 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73  ments in progres
18410 73 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  s");.      rc = 
18420 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20  SQLITE_BUSY;.   
18430 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 4e   }else{.      nN
18440 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 53 74 72  ame = sqlite3Str
18450 6c 65 6e 33 30 28 7a 4e 61 6d 65 29 3b 0a 0a 23  len30(zName);..#
18460 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
18470 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
18480 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 63 61        /* This ca
18490 6c 6c 20 69 73 20 4f 6b 20 65 76 65 6e 20 69 66  ll is Ok even if
184a0 20 74 68 69 73 20 73 61 76 65 70 6f 69 6e 74 20   this savepoint 
184b0 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20 74 72  is actually a tr
184c0 61 6e 73 61 63 74 69 6f 6e 0a 20 20 20 20 20 20  ansaction.      
184d0 2a 2a 20 73 61 76 65 70 6f 69 6e 74 20 28 61 6e  ** savepoint (an
184e0 64 20 74 68 65 72 65 66 6f 72 65 20 73 68 6f 75  d therefore shou
184f0 6c 64 20 6e 6f 74 20 70 72 6f 6d 70 74 20 78 53  ld not prompt xS
18500 61 76 65 70 6f 69 6e 74 28 29 29 20 63 61 6c 6c  avepoint()) call
18510 62 61 63 6b 73 2e 0a 20 20 20 20 20 20 2a 2a 20  backs..      ** 
18520 49 66 20 74 68 69 73 20 69 73 20 61 20 74 72 61  If this is a tra
18530 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
18540 6e 74 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2c  nt being opened,
18550 20 69 74 20 69 73 20 67 75 61 72 61 6e 74 65 65   it is guarantee
18560 64 0a 20 20 20 20 20 20 2a 2a 20 74 68 61 74 20  d.      ** that 
18570 74 68 65 20 64 62 2d 3e 61 56 54 72 61 6e 73 5b  the db->aVTrans[
18580 5d 20 61 72 72 61 79 20 69 73 20 65 6d 70 74 79  ] array is empty
18590 2e 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65  .  */.      asse
185a0 72 74 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  rt( db->autoComm
185b0 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 54  it==0 || db->nVT
185c0 72 61 6e 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20  rans==0 );.     
185d0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
185e0 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 53  bSavepoint(db, S
185f0 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 0a  AVEPOINT_BEGIN,.
18600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18620 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 64  db->nStatement+d
18630 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 29 3b 0a  b->nSavepoint);.
18640 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
18650 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
18660 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
18670 72 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20  r;.#endif..     
18680 20 2f 2a 20 43 72 65 61 74 65 20 61 20 6e 65 77   /* Create a new
18690 20 73 61 76 65 70 6f 69 6e 74 20 73 74 72 75 63   savepoint struc
186a0 74 75 72 65 2e 20 2a 2f 0a 20 20 20 20 20 20 70  ture. */.      p
186b0 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 44 62 4d  New = sqlite3DbM
186c0 61 6c 6c 6f 63 52 61 77 4e 4e 28 64 62 2c 20 73  allocRawNN(db, s
186d0 69 7a 65 6f 66 28 53 61 76 65 70 6f 69 6e 74 29  izeof(Savepoint)
186e0 2b 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 20  +nName+1);.     
186f0 20 69 66 28 20 70 4e 65 77 20 29 7b 0a 20 20 20   if( pNew ){.   
18700 20 20 20 20 20 70 4e 65 77 2d 3e 7a 4e 61 6d 65       pNew->zName
18710 20 3d 20 28 63 68 61 72 20 2a 29 26 70 4e 65 77   = (char *)&pNew
18720 5b 31 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d  [1];.        mem
18730 63 70 79 28 70 4e 65 77 2d 3e 7a 4e 61 6d 65 2c  cpy(pNew->zName,
18740 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2b 31 29   zName, nName+1)
18750 3b 0a 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f  ;.    .        /
18760 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f  * If there is no
18770 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f   open transactio
18780 6e 2c 20 74 68 65 6e 20 6d 61 72 6b 20 74 68 69  n, then mark thi
18790 73 20 61 73 20 61 20 73 70 65 63 69 61 6c 0a 20  s as a special. 
187a0 20 20 20 20 20 20 20 2a 2a 20 22 74 72 61 6e 73         ** "trans
187b0 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74  action savepoint
187c0 22 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66  ". */.        if
187d0 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74  ( db->autoCommit
187e0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62   ){.          db
187f0 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30  ->autoCommit = 0
18800 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  ;.          db->
18810 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
18820 65 70 6f 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20  epoint = 1;.    
18830 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
18840 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f       db->nSavepo
18850 69 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d  int++;.        }
18860 0a 0a 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e  ..        /* Lin
18870 6b 20 74 68 65 20 6e 65 77 20 73 61 76 65 70 6f  k the new savepo
18880 69 6e 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74  int into the dat
18890 61 62 61 73 65 20 68 61 6e 64 6c 65 27 73 20 6c  abase handle's l
188a0 69 73 74 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  ist. */.        
188b0 70 4e 65 77 2d 3e 70 4e 65 78 74 20 3d 20 64 62  pNew->pNext = db
188c0 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20  ->pSavepoint;.  
188d0 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70        db->pSavep
188e0 6f 69 6e 74 20 3d 20 70 4e 65 77 3b 0a 20 20 20  oint = pNew;.   
188f0 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65       pNew->nDefe
18900 72 72 65 64 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e  rredCons = db->n
18910 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20  DeferredCons;.  
18920 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66        pNew->nDef
18930 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 64  erredImmCons = d
18940 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
18950 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ons;.      }.   
18960 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
18970 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a  iSavepoint = 0;.
18980 0a 20 20 20 20 2f 2a 20 46 69 6e 64 20 74 68 65  .    /* Find the
18990 20 6e 61 6d 65 64 20 73 61 76 65 70 6f 69 6e 74   named savepoint
189a0 2e 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f  . If there is no
189b0 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74 2c   such savepoint,
189c0 20 74 68 65 6e 20 61 6e 0a 20 20 20 20 2a 2a 20   then an.    ** 
189d0 61 6e 20 65 72 72 6f 72 20 69 73 20 72 65 74 75  an error is retu
189e0 72 6e 65 64 20 74 6f 20 74 68 65 20 75 73 65 72  rned to the user
189f0 2e 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28 0a 20  .  */.    for(. 
18a00 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20       pSavepoint 
18a10 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  = db->pSavepoint
18a20 3b 20 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f  ; .      pSavepo
18a30 69 6e 74 20 26 26 20 73 71 6c 69 74 65 33 53 74  int && sqlite3St
18a40 72 49 43 6d 70 28 70 53 61 76 65 70 6f 69 6e 74  rICmp(pSavepoint
18a50 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 29 3b  ->zName, zName);
18a60 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e  .      pSavepoin
18a70 74 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e  t = pSavepoint->
18a80 70 4e 65 78 74 0a 20 20 20 20 29 7b 0a 20 20 20  pNext.    ){.   
18a90 20 20 20 69 53 61 76 65 70 6f 69 6e 74 2b 2b 3b     iSavepoint++;
18aa0 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 21  .    }.    if( !
18ab0 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20  pSavepoint ){.  
18ac0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
18ad0 72 72 6f 72 28 70 2c 20 22 6e 6f 20 73 75 63 68  rror(p, "no such
18ae0 20 73 61 76 65 70 6f 69 6e 74 3a 20 25 73 22 2c   savepoint: %s",
18af0 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 72   zName);.      r
18b00 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
18b10 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
18b20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30  db->nVdbeWrite>0
18b30 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e   && p1==SAVEPOIN
18b40 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20  T_RELEASE ){.   
18b50 20 20 20 2f 2a 20 49 74 20 69 73 20 6e 6f 74 20     /* It is not 
18b60 70 6f 73 73 69 62 6c 65 20 74 6f 20 72 65 6c 65  possible to rele
18b70 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 20 73  ase (commit) a s
18b80 61 76 65 70 6f 69 6e 74 20 69 66 20 74 68 65 72  avepoint if ther
18b90 65 20 61 72 65 20 0a 20 20 20 20 20 20 2a 2a 20  e are .      ** 
18ba0 61 63 74 69 76 65 20 77 72 69 74 65 20 73 74 61  active write sta
18bb0 74 65 6d 65 6e 74 73 2e 0a 20 20 20 20 20 20 2a  tements..      *
18bc0 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  /.      sqlite3V
18bd0 64 62 65 45 72 72 6f 72 28 70 2c 20 22 63 61 6e  dbeError(p, "can
18be0 6e 6f 74 20 72 65 6c 65 61 73 65 20 73 61 76 65  not release save
18bf0 70 6f 69 6e 74 20 2d 20 22 0a 20 20 20 20 20 20  point - ".      
18c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c10 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65      "SQL stateme
18c20 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22  nts in progress"
18c30 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  );.      rc = SQ
18c40 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d  LITE_BUSY;.    }
18c50 65 6c 73 65 7b 0a 0a 20 20 20 20 20 20 2f 2a 20  else{..      /* 
18c60 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65  Determine whethe
18c70 72 20 6f 72 20 6e 6f 74 20 74 68 69 73 20 69 73  r or not this is
18c80 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73   a transaction s
18c90 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 73 6f 2c  avepoint. If so,
18ca0 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64 20 74 68  .      ** and th
18cb0 69 73 20 69 73 20 61 20 52 45 4c 45 41 53 45 20  is is a RELEASE 
18cc0 63 6f 6d 6d 61 6e 64 2c 20 74 68 65 6e 20 74 68  command, then th
18cd0 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61  e current transa
18ce0 63 74 69 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20  ction .      ** 
18cf0 69 73 20 63 6f 6d 6d 69 74 74 65 64 2e 20 0a 20  is committed. . 
18d00 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 6e       */.      in
18d10 74 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20  t isTransaction 
18d20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e  = pSavepoint->pN
18d30 65 78 74 3d 3d 30 20 26 26 20 64 62 2d 3e 69 73  ext==0 && db->is
18d40 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
18d50 6f 69 6e 74 3b 0a 20 20 20 20 20 20 69 66 28 20  oint;.      if( 
18d60 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 26 26  isTransaction &&
18d70 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52   p1==SAVEPOINT_R
18d80 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20  ELEASE ){.      
18d90 20 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69    if( (rc = sqli
18da0 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70  te3VdbeCheckFk(p
18db0 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b  , 1))!=SQLITE_OK
18dc0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f   ){.          go
18dd0 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
18de0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
18df0 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
18e00 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66   = 1;.        if
18e10 28 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c  ( sqlite3VdbeHal
18e20 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53  t(p)==SQLITE_BUS
18e30 59 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70  Y ){.          p
18e40 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70  ->pc = (int)(pOp
18e50 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20 20 20   - aOp);.       
18e60 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
18e70 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20  t = 0;.         
18e80 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51   p->rc = rc = SQ
18e90 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20  LITE_BUSY;.     
18ea0 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
18eb0 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d  eturn;.        }
18ec0 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54  .        db->isT
18ed0 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
18ee0 69 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  int = 0;.       
18ef0 20 72 63 20 3d 20 70 2d 3e 72 63 3b 0a 20 20 20   rc = p->rc;.   
18f00 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
18f10 20 20 69 6e 74 20 69 73 53 63 68 65 6d 61 43 68    int isSchemaCh
18f20 61 6e 67 65 3b 0a 20 20 20 20 20 20 20 20 69 53  ange;.        iS
18f30 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 6e  avepoint = db->n
18f40 53 61 76 65 70 6f 69 6e 74 20 2d 20 69 53 61 76  Savepoint - iSav
18f50 65 70 6f 69 6e 74 20 2d 20 31 3b 0a 20 20 20 20  epoint - 1;.    
18f60 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45      if( p1==SAVE
18f70 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29  POINT_ROLLBACK )
18f80 7b 0a 20 20 20 20 20 20 20 20 20 20 69 73 53 63  {.          isSc
18f90 68 65 6d 61 43 68 61 6e 67 65 20 3d 20 28 64 62  hemaChange = (db
18fa0 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
18fb0 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29 21  _InternChanges)!
18fc0 3d 30 3b 0a 20 20 20 20 20 20 20 20 20 20 66 6f  =0;.          fo
18fd0 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e  r(ii=0; ii<db->n
18fe0 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20  Db; ii++){.     
18ff0 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
19000 74 65 33 42 74 72 65 65 54 72 69 70 41 6c 6c 43  te3BtreeTripAllC
19010 75 72 73 6f 72 73 28 64 62 2d 3e 61 44 62 5b 69  ursors(db->aDb[i
19020 69 5d 2e 70 42 74 2c 0a 20 20 20 20 20 20 20 20  i].pBt,.        
19030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
19050 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c  QLITE_ABORT_ROLL
19060 42 41 43 4b 2c 0a 20 20 20 20 20 20 20 20 20 20  BACK,.          
19070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19080 20 20 20 20 20 20 20 20 20 20 20 20 20 69 73 53               isS
19090 63 68 65 6d 61 43 68 61 6e 67 65 3d 3d 30 29 3b  chemaChange==0);
190a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28  .            if(
190b0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
190c0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
190d0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
190e0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 65      }.        }e
190f0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 69  lse{.          i
19100 73 53 63 68 65 6d 61 43 68 61 6e 67 65 20 3d 20  sSchemaChange = 
19110 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  0;.        }.   
19120 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69       for(ii=0; i
19130 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29  i<db->nDb; ii++)
19140 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d  {.          rc =
19150 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 61 76   sqlite3BtreeSav
19160 65 70 6f 69 6e 74 28 64 62 2d 3e 61 44 62 5b 69  epoint(db->aDb[i
19170 69 5d 2e 70 42 74 2c 20 70 31 2c 20 69 53 61 76  i].pBt, p1, iSav
19180 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20  epoint);.       
19190 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
191a0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
191b0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
191c0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
191d0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
191e0 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 69   }.        if( i
191f0 73 53 63 68 65 6d 61 43 68 61 6e 67 65 20 29 7b  sSchemaChange ){
19200 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
19210 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64  e3ExpirePrepared
19220 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a  Statements(db);.
19230 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
19240 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73  3ResetAllSchemas
19250 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29  OfConnection(db)
19260 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  ;.          db->
19270 66 6c 61 67 73 20 3d 20 28 64 62 2d 3e 66 6c 61  flags = (db->fla
19280 67 73 20 7c 20 53 51 4c 49 54 45 5f 49 6e 74 65  gs | SQLITE_Inte
19290 72 6e 43 68 61 6e 67 65 73 29 3b 0a 20 20 20 20  rnChanges);.    
192a0 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
192b0 0a 20 20 20 20 20 20 2f 2a 20 52 65 67 61 72 64  .      /* Regard
192c0 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20  less of whether 
192d0 74 68 69 73 20 69 73 20 61 20 52 45 4c 45 41 53  this is a RELEAS
192e0 45 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c 20 64  E or ROLLBACK, d
192f0 65 73 74 72 6f 79 20 61 6c 6c 20 0a 20 20 20 20  estroy all .    
19300 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74 73 20    ** savepoints 
19310 6e 65 73 74 65 64 20 69 6e 73 69 64 65 20 6f 66  nested inside of
19320 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62   the savepoint b
19330 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e  eing operated on
19340 2e 20 2a 2f 0a 20 20 20 20 20 20 77 68 69 6c 65  . */.      while
19350 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  ( db->pSavepoint
19360 21 3d 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a  !=pSavepoint ){.
19370 20 20 20 20 20 20 20 20 70 54 6d 70 20 3d 20 64          pTmp = d
19380 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20  b->pSavepoint;. 
19390 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65         db->pSave
193a0 70 6f 69 6e 74 20 3d 20 70 54 6d 70 2d 3e 70 4e  point = pTmp->pN
193b0 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  ext;.        sql
193c0 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
193d0 54 6d 70 29 3b 0a 20 20 20 20 20 20 20 20 64 62  Tmp);.        db
193e0 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a  ->nSavepoint--;.
193f0 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f        }..      /
19400 2a 20 49 66 20 69 74 20 69 73 20 61 20 52 45 4c  * If it is a REL
19410 45 41 53 45 2c 20 74 68 65 6e 20 64 65 73 74 72  EASE, then destr
19420 6f 79 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74  oy the savepoint
19430 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20   being operated 
19440 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 74 6f 6f  on .      ** too
19450 2e 20 49 66 20 69 74 20 69 73 20 61 20 52 4f 4c  . If it is a ROL
19460 4c 42 41 43 4b 20 54 4f 2c 20 74 68 65 6e 20 73  LBACK TO, then s
19470 65 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  et the number of
19480 20 64 65 66 65 72 72 65 64 20 0a 20 20 20 20 20   deferred .     
19490 20 2a 2a 20 63 6f 6e 73 74 72 61 69 6e 74 20 76   ** constraint v
194a0 69 6f 6c 61 74 69 6f 6e 73 20 70 72 65 73 65 6e  iolations presen
194b0 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  t in the databas
194c0 65 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 73  e to the value s
194d0 74 6f 72 65 64 0a 20 20 20 20 20 20 2a 2a 20 77  tored.      ** w
194e0 68 65 6e 20 74 68 65 20 73 61 76 65 70 6f 69 6e  hen the savepoin
194f0 74 20 77 61 73 20 63 72 65 61 74 65 64 2e 20 20  t was created.  
19500 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 31 3d  */.      if( p1=
19510 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41  =SAVEPOINT_RELEA
19520 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  SE ){.        as
19530 73 65 72 74 28 20 70 53 61 76 65 70 6f 69 6e 74  sert( pSavepoint
19540 3d 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  ==db->pSavepoint
19550 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e   );.        db->
19560 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61  pSavepoint = pSa
19570 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a  vepoint->pNext;.
19580 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44          sqlite3D
19590 62 46 72 65 65 28 64 62 2c 20 70 53 61 76 65 70  bFree(db, pSavep
195a0 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69  oint);.        i
195b0 66 28 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f  f( !isTransactio
195c0 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64  n ){.          d
195d0 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b  b->nSavepoint--;
195e0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
195f0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
19600 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
19610 73 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e  s = pSavepoint->
19620 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20  nDeferredCons;. 
19630 20 20 20 20 20 20 20 64 62 2d 3e 6e 44 65 66 65         db->nDefe
19640 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 70 53  rredImmCons = pS
19650 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72  avepoint->nDefer
19660 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20  redImmCons;.    
19670 20 20 7d 0a 0a 20 20 20 20 20 20 69 66 28 20 21    }..      if( !
19680 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 7c 7c  isTransaction ||
19690 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52   p1==SAVEPOINT_R
196a0 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20 20  OLLBACK ){.     
196b0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
196c0 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c  tabSavepoint(db,
196d0 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29   p1, iSavepoint)
196e0 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63  ;.        if( rc
196f0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f  !=SQLITE_OK ) go
19700 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
19710 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20  error;.      }. 
19720 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72     }.  }.  if( r
19730 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
19740 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20  ue_to_error;..  
19750 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
19760 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74 20  ode: AutoCommit 
19770 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
19780 2a 20 53 65 74 20 74 68 65 20 64 61 74 61 62 61  * Set the databa
19790 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66  se auto-commit f
197a0 6c 61 67 20 74 6f 20 50 31 20 28 31 20 6f 72 20  lag to P1 (1 or 
197b0 30 29 2e 20 49 66 20 50 32 20 69 73 20 74 72 75  0). If P2 is tru
197c0 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20  e, roll.** back 
197d0 61 6e 79 20 63 75 72 72 65 6e 74 6c 79 20 61 63  any currently ac
197e0 74 69 76 65 20 62 74 72 65 65 20 74 72 61 6e 73  tive btree trans
197f0 61 63 74 69 6f 6e 73 2e 20 49 66 20 74 68 65 72  actions. If ther
19800 65 20 61 72 65 20 61 6e 79 20 61 63 74 69 76 65  e are any active
19810 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72 74 20 66  .** VMs (apart f
19820 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20 74  rom this one), t
19830 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20 66  hen a ROLLBACK f
19840 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54 20  ails.  A COMMIT 
19850 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65 72  fails if.** ther
19860 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72 69  e are active wri
19870 74 69 6e 67 20 56 4d 73 20 6f 72 20 61 63 74 69  ting VMs or acti
19880 76 65 20 56 4d 73 20 74 68 61 74 20 75 73 65 20  ve VMs that use 
19890 73 68 61 72 65 64 20 63 61 63 68 65 2e 0a 2a 2a  shared cache..**
198a0 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
198b0 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65 20  tion causes the 
198c0 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63  VM to halt..*/.c
198d0 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69  ase OP_AutoCommi
198e0 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65 73 69 72  t: {.  int desir
198f0 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20  edAutoCommit;.  
19900 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a 0a  int iRollback;..
19910 20 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d    desiredAutoCom
19920 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  mit = pOp->p1;. 
19930 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f 70   iRollback = pOp
19940 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
19950 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
19960 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72 65 64 41  t==1 || desiredA
19970 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a  utoCommit==0 );.
19980 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65    assert( desire
19990 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c  dAutoCommit==1 |
199a0 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d 30 20 29  | iRollback==0 )
199b0 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  ;.  assert( db->
199c0 6e 56 64 62 65 41 63 74 69 76 65 3e 30 20 29 3b  nVdbeActive>0 );
199d0 20 20 2f 2a 20 41 74 20 6c 65 61 73 74 20 74 68    /* At least th
199e0 69 73 20 6f 6e 65 20 56 4d 20 69 73 20 61 63 74  is one VM is act
199f0 69 76 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ive */.  assert(
19a00 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b   p->bIsReader );
19a10 0a 0a 20 20 69 66 28 20 64 65 73 69 72 65 64 41  ..  if( desiredA
19a20 75 74 6f 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61  utoCommit!=db->a
19a30 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20  utoCommit ){.   
19a40 20 69 66 28 20 69 52 6f 6c 6c 62 61 63 6b 20 29   if( iRollback )
19a50 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
19a60 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
19a70 74 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 73 71  t==1 );.      sq
19a80 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c  lite3RollbackAll
19a90 28 64 62 2c 20 53 51 4c 49 54 45 5f 41 42 4f 52  (db, SQLITE_ABOR
19aa0 54 5f 52 4f 4c 4c 42 41 43 4b 29 3b 0a 20 20 20  T_ROLLBACK);.   
19ab0 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
19ac0 74 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65  t = 1;.    }else
19ad0 20 69 66 28 20 64 65 73 69 72 65 64 41 75 74 6f   if( desiredAuto
19ae0 43 6f 6d 6d 69 74 20 26 26 20 64 62 2d 3e 6e 56  Commit && db->nV
19af0 64 62 65 57 72 69 74 65 3e 30 20 29 7b 0a 20 20  dbeWrite>0 ){.  
19b00 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69      /* If this i
19b10 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65  nstruction imple
19b20 6d 65 6e 74 73 20 61 20 43 4f 4d 4d 49 54 20 61  ments a COMMIT a
19b30 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65  nd other VMs are
19b40 20 77 72 69 74 69 6e 67 0a 20 20 20 20 20 20 2a   writing.      *
19b50 2a 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f  * return an erro
19b60 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61  r indicating tha
19b70 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73 20  t the other VMs 
19b80 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66 69  must complete fi
19b90 72 73 74 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20  rst. .      */. 
19ba0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
19bb0 45 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74  Error(p, "cannot
19bc0 20 63 6f 6d 6d 69 74 20 74 72 61 6e 73 61 63 74   commit transact
19bd0 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20 20 20  ion - ".        
19be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19bf0 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74    "SQL statement
19c00 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b  s in progress");
19c10 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
19c20 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67  TE_BUSY;.      g
19c30 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
19c40 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73  _error;.    }els
19c50 65 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69  e if( (rc = sqli
19c60 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70  te3VdbeCheckFk(p
19c70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b  , 1))!=SQLITE_OK
19c80 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76   ){.      goto v
19c90 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
19ca0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d  }else{.      db-
19cb0 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75  >autoCommit = (u
19cc0 38 29 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  8)desiredAutoCom
19cd0 6d 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  mit;.    }.    i
19ce0 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 48 61  f( sqlite3VdbeHa
19cf0 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55  lt(p)==SQLITE_BU
19d00 53 59 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 70  SY ){.      p->p
19d10 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20  c = (int)(pOp - 
19d20 61 4f 70 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e  aOp);.      db->
19d30 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38  autoCommit = (u8
19d40 29 28 31 2d 64 65 73 69 72 65 64 41 75 74 6f 43  )(1-desiredAutoC
19d50 6f 6d 6d 69 74 29 3b 0a 20 20 20 20 20 20 70 2d  ommit);.      p-
19d60 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54  >rc = rc = SQLIT
19d70 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67 6f  E_BUSY;.      go
19d80 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
19d90 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74      }.    assert
19da0 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74  ( db->nStatement
19db0 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  ==0 );.    sqlit
19dc0 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74  e3CloseSavepoint
19dd0 73 28 64 62 29 3b 0a 20 20 20 20 69 66 28 20 70  s(db);.    if( p
19de0 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ->rc==SQLITE_OK 
19df0 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
19e00 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d  LITE_DONE;.    }
19e10 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d  else{.      rc =
19e20 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
19e30 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20 76 64     }.    goto vd
19e40 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 7d 65 6c  be_return;.  }el
19e50 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  se{.    sqlite3V
19e60 64 62 65 45 72 72 6f 72 28 70 2c 0a 20 20 20 20  dbeError(p,.    
19e70 20 20 20 20 28 21 64 65 73 69 72 65 64 41 75 74      (!desiredAut
19e80 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f 74  oCommit)?"cannot
19e90 20 73 74 61 72 74 20 61 20 74 72 61 6e 73 61 63   start a transac
19ea0 74 69 6f 6e 20 77 69 74 68 69 6e 20 61 20 74 72  tion within a tr
19eb0 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20 20  ansaction":(.   
19ec0 20 20 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b 29       (iRollback)
19ed0 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63  ?"cannot rollbac
19ee0 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69  k - no transacti
19ef0 6f 6e 20 69 73 20 61 63 74 69 76 65 22 3a 0a 20  on is active":. 
19f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f10 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74    "cannot commit
19f20 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f   - no transactio
19f30 6e 20 69 73 20 61 63 74 69 76 65 22 29 29 3b 0a  n is active"));.
19f40 20 20 20 20 20 20 20 20 20 0a 20 20 20 20 72 63           .    rc
19f50 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
19f60 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f  .    goto abort_
19f70 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
19f80 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
19f90 20 4f 70 63 6f 64 65 3a 20 54 72 61 6e 73 61 63   Opcode: Transac
19fa0 74 69 6f 6e 20 50 31 20 50 32 20 50 33 20 50 34  tion P1 P2 P3 P4
19fb0 20 50 35 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20   P5.**.** Begin 
19fc0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e  a transaction on
19fd0 20 64 61 74 61 62 61 73 65 20 50 31 20 69 66 20   database P1 if 
19fe0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  a transaction is
19ff0 20 6e 6f 74 20 61 6c 72 65 61 64 79 0a 2a 2a 20   not already.** 
1a000 61 63 74 69 76 65 2e 0a 2a 2a 20 49 66 20 50 32  active..** If P2
1a010 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
1a020 65 6e 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73  en a write-trans
1a030 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65  action is starte
1a040 64 2c 20 6f 72 20 69 66 20 61 20 0a 2a 2a 20 72  d, or if a .** r
1a050 65 61 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  ead-transaction 
1a060 69 73 20 61 6c 72 65 61 64 79 20 61 63 74 69 76  is already activ
1a070 65 2c 20 69 74 20 69 73 20 75 70 67 72 61 64 65  e, it is upgrade
1a080 64 20 74 6f 20 61 20 77 72 69 74 65 2d 74 72 61  d to a write-tra
1a090 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2a 20 49 66 20  nsaction..** If 
1a0a0 50 32 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e  P2 is zero, then
1a0b0 20 61 20 72 65 61 64 2d 74 72 61 6e 73 61 63 74   a read-transact
1a0c0 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2e 0a  ion is started..
1a0d0 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20  **.** P1 is the 
1a0e0 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74  index of the dat
1a0f0 61 62 61 73 65 20 66 69 6c 65 20 6f 6e 20 77 68  abase file on wh
1a100 69 63 68 20 74 68 65 20 74 72 61 6e 73 61 63 74  ich the transact
1a110 69 6f 6e 20 69 73 0a 2a 2a 20 73 74 61 72 74 65  ion is.** starte
1a120 64 2e 20 20 49 6e 64 65 78 20 30 20 69 73 20 74  d.  Index 0 is t
1a130 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
1a140 20 66 69 6c 65 20 61 6e 64 20 69 6e 64 65 78 20   file and index 
1a150 31 20 69 73 20 74 68 65 0a 2a 2a 20 66 69 6c 65  1 is the.** file
1a160 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f 72   used for tempor
1a170 61 72 79 20 74 61 62 6c 65 73 2e 20 20 49 6e 64  ary tables.  Ind
1a180 69 63 65 73 20 6f 66 20 32 20 6f 72 20 6d 6f 72  ices of 2 or mor
1a190 65 20 61 72 65 20 75 73 65 64 20 66 6f 72 0a 2a  e are used for.*
1a1a0 2a 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  * attached datab
1a1b0 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61  ases..**.** If a
1a1c0 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69   write-transacti
1a1d0 6f 6e 20 69 73 20 73 74 61 72 74 65 64 20 61 6e  on is started an
1a1e0 64 20 74 68 65 20 56 64 62 65 2e 75 73 65 73 53  d the Vdbe.usesS
1a1f0 74 6d 74 4a 6f 75 72 6e 61 6c 20 66 6c 61 67 20  tmtJournal flag 
1a200 69 73 0a 2a 2a 20 74 72 75 65 20 28 74 68 69 73  is.** true (this
1a210 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 66 20   flag is set if 
1a220 74 68 65 20 56 64 62 65 20 6d 61 79 20 6d 6f 64  the Vdbe may mod
1a230 69 66 79 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  ify more than on
1a240 65 20 72 6f 77 20 61 6e 64 20 6d 61 79 0a 2a 2a  e row and may.**
1a250 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20   throw an ABORT 
1a260 65 78 63 65 70 74 69 6f 6e 29 2c 20 61 20 73 74  exception), a st
1a270 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
1a280 69 6f 6e 20 6d 61 79 20 61 6c 73 6f 20 62 65 20  ion may also be 
1a290 6f 70 65 6e 65 64 2e 0a 2a 2a 20 4d 6f 72 65 20  opened..** More 
1a2a0 73 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 61 20  specifically, a 
1a2b0 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
1a2c0 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e 65 64 20  ction is opened 
1a2d0 69 66 66 20 74 68 65 20 64 61 74 61 62 61 73 65  iff the database
1a2e0 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69  .** connection i
1a2f0 73 20 63 75 72 72 65 6e 74 6c 79 20 6e 6f 74 20  s currently not 
1a300 69 6e 20 61 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f  in autocommit mo
1a310 64 65 2c 20 6f 72 20 69 66 20 74 68 65 72 65 20  de, or if there 
1a320 61 72 65 20 6f 74 68 65 72 0a 2a 2a 20 61 63 74  are other.** act
1a330 69 76 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 20  ive statements. 
1a340 41 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  A statement tran
1a350 73 61 63 74 69 6f 6e 20 61 6c 6c 6f 77 73 20 74  saction allows t
1a360 68 65 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20  he changes made 
1a370 62 79 20 74 68 69 73 0a 2a 2a 20 56 44 42 45 20  by this.** VDBE 
1a380 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63  to be rolled bac
1a390 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72  k after an error
1a3a0 20 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20   without having 
1a3b0 74 6f 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68 65  to roll back the
1a3c0 0a 2a 2a 20 65 6e 74 69 72 65 20 74 72 61 6e 73  .** entire trans
1a3d0 61 63 74 69 6f 6e 2e 20 49 66 20 6e 6f 20 65 72  action. If no er
1a3e0 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72  ror is encounter
1a3f0 65 64 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e  ed, the statemen
1a400 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a  t transaction.**
1a410 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61   will automatica
1a420 6c 6c 79 20 63 6f 6d 6d 69 74 20 77 68 65 6e 20  lly commit when 
1a430 74 68 65 20 56 44 42 45 20 68 61 6c 74 73 2e 0a  the VDBE halts..
1a440 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74  **.** If P5!=0 t
1a450 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20  hen this opcode 
1a460 61 6c 73 6f 20 63 68 65 63 6b 73 20 74 68 65 20  also checks the 
1a470 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 61 67  schema cookie ag
1a480 61 69 6e 73 74 20 50 33 0a 2a 2a 20 61 6e 64 20  ainst P3.** and 
1a490 74 68 65 20 73 63 68 65 6d 61 20 67 65 6e 65 72  the schema gener
1a4a0 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 61 67  ation counter ag
1a4b0 61 69 6e 73 74 20 50 34 2e 0a 2a 2a 20 54 68 65  ainst P4..** The
1a4c0 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 20   cookie changes 
1a4d0 69 74 73 20 76 61 6c 75 65 20 77 68 65 6e 65 76  its value whenev
1a4e0 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  er the database 
1a4f0 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2e 0a  schema changes..
1a500 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f  ** This operatio
1a510 6e 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74  n is used to det
1a520 65 63 74 20 77 68 65 6e 20 74 68 61 74 20 74 68  ect when that th
1a530 65 20 63 6f 6f 6b 69 65 20 68 61 73 20 63 68 61  e cookie has cha
1a540 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 74 68 61 74  nged.** and that
1a550 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f   the current pro
1a560 63 65 73 73 20 6e 65 65 64 73 20 74 6f 20 72 65  cess needs to re
1a570 72 65 61 64 20 74 68 65 20 73 63 68 65 6d 61 2e  read the schema.
1a580 20 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 0a    If the schema.
1a590 2a 2a 20 63 6f 6f 6b 69 65 20 69 6e 20 50 33 20  ** cookie in P3 
1a5a0 64 69 66 66 65 72 73 20 66 72 6f 6d 20 74 68 65  differs from the
1a5b0 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 69   schema cookie i
1a5c0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  n the database h
1a5d0 65 61 64 65 72 20 6f 72 0a 2a 2a 20 69 66 20 74  eader or.** if t
1a5e0 68 65 20 73 63 68 65 6d 61 20 67 65 6e 65 72 61  he schema genera
1a5f0 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 69 6e 20  tion counter in 
1a600 50 34 20 64 69 66 66 65 72 73 20 66 72 6f 6d 20  P4 differs from 
1a610 74 68 65 20 63 75 72 72 65 6e 74 0a 2a 2a 20 67  the current.** g
1a620 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65  eneration counte
1a630 72 2c 20 74 68 65 6e 20 61 6e 20 53 51 4c 49 54  r, then an SQLIT
1a640 45 5f 53 43 48 45 4d 41 20 65 72 72 6f 72 20 69  E_SCHEMA error i
1a650 73 20 72 61 69 73 65 64 20 61 6e 64 20 65 78 65  s raised and exe
1a660 63 75 74 69 6f 6e 0a 2a 2a 20 68 61 6c 74 73 2e  cution.** halts.
1a670 20 20 54 68 65 20 73 71 6c 69 74 65 33 5f 73 74    The sqlite3_st
1a680 65 70 28 29 20 77 72 61 70 70 65 72 20 66 75 6e  ep() wrapper fun
1a690 63 74 69 6f 6e 20 6d 69 67 68 74 20 74 68 65 6e  ction might then
1a6a0 20 72 65 70 72 65 70 61 72 65 20 74 68 65 0a 2a   reprepare the.*
1a6b0 2a 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20  * statement and 
1a6c0 72 65 72 75 6e 20 69 74 20 66 72 6f 6d 20 74 68  rerun it from th
1a6d0 65 20 62 65 67 69 6e 6e 69 6e 67 2e 0a 2a 2f 0a  e beginning..*/.
1a6e0 63 61 73 65 20 4f 50 5f 54 72 61 6e 73 61 63 74  case OP_Transact
1a6f0 69 6f 6e 3a 20 7b 0a 20 20 42 74 72 65 65 20 2a  ion: {.  Btree *
1a700 70 42 74 3b 0a 20 20 69 6e 74 20 69 4d 65 74 61  pBt;.  int iMeta
1a710 3b 0a 20 20 69 6e 74 20 69 47 65 6e 3b 0a 0a 20  ;.  int iGen;.. 
1a720 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52   assert( p->bIsR
1a730 65 61 64 65 72 20 29 3b 0a 20 20 61 73 73 65 72  eader );.  asser
1a740 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
1a750 30 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 30 20  0 || pOp->p2==0 
1a760 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1a770 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1a780 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
1a790 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
1a7a0 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
1a7b0 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 69   pOp->p1) );.  i
1a7c0 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20 28 64  f( pOp->p2 && (d
1a7d0 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
1a7e0 45 5f 51 75 65 72 79 4f 6e 6c 79 29 21 3d 30 20  E_QueryOnly)!=0 
1a7f0 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
1a800 54 45 5f 52 45 41 44 4f 4e 4c 59 3b 0a 20 20 20  TE_READONLY;.   
1a810 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1a820 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20  to_error;.  }.  
1a830 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f  pBt = db->aDb[pO
1a840 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20 20 69  p->p1].pBt;..  i
1a850 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20 72 63  f( pBt ){.    rc
1a860 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42   = sqlite3BtreeB
1a870 65 67 69 6e 54 72 61 6e 73 28 70 42 74 2c 20 70  eginTrans(pBt, p
1a880 4f 70 2d 3e 70 32 29 3b 0a 20 20 20 20 74 65 73  Op->p2);.    tes
1a890 74 63 61 73 65 28 20 72 63 3d 3d 53 51 4c 49 54  tcase( rc==SQLIT
1a8a0 45 5f 42 55 53 59 5f 53 4e 41 50 53 48 4f 54 20  E_BUSY_SNAPSHOT 
1a8b0 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28  );.    testcase(
1a8c0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59   rc==SQLITE_BUSY
1a8d0 5f 52 45 43 4f 56 45 52 59 20 29 3b 0a 20 20 20  _RECOVERY );.   
1a8e0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1a8f0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  OK ){.      if( 
1a900 28 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54  (rc&0xff)==SQLIT
1a910 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20  E_BUSY ){.      
1a920 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28    p->pc = (int)(
1a930 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20  pOp - aOp);.    
1a940 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a      p->rc = rc;.
1a950 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62          goto vdb
1a960 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20  e_return;.      
1a970 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  }.      goto abo
1a980 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1a990 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20  .    }..    if( 
1a9a0 70 4f 70 2d 3e 70 32 20 26 26 20 70 2d 3e 75 73  pOp->p2 && p->us
1a9b0 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20  esStmtJournal . 
1a9c0 20 20 20 20 26 26 20 28 64 62 2d 3e 61 75 74 6f      && (db->auto
1a9d0 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d  Commit==0 || db-
1a9e0 3e 6e 56 64 62 65 52 65 61 64 3e 31 29 20 0a 20  >nVdbeRead>1) . 
1a9f0 20 20 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65     ){.      asse
1aa00 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
1aa10 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29 20 29  IsInTrans(pBt) )
1aa20 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 69  ;.      if( p->i
1aa30 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a  Statement==0 ){.
1aa40 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1aa50 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3e 3d  db->nStatement>=
1aa60 30 20 26 26 20 64 62 2d 3e 6e 53 61 76 65 70 6f  0 && db->nSavepo
1aa70 69 6e 74 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20  int>=0 );.      
1aa80 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74    db->nStatement
1aa90 2b 2b 3b 20 0a 20 20 20 20 20 20 20 20 70 2d 3e  ++; .        p->
1aaa0 69 53 74 61 74 65 6d 65 6e 74 20 3d 20 64 62 2d  iStatement = db-
1aab0 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62  >nSavepoint + db
1aac0 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3b 0a 20 20  ->nStatement;.  
1aad0 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 72 63 20      }..      rc 
1aae0 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76  = sqlite3VtabSav
1aaf0 65 70 6f 69 6e 74 28 64 62 2c 20 53 41 56 45 50  epoint(db, SAVEP
1ab00 4f 49 4e 54 5f 42 45 47 49 4e 2c 20 70 2d 3e 69  OINT_BEGIN, p->i
1ab10 53 74 61 74 65 6d 65 6e 74 2d 31 29 3b 0a 20 20  Statement-1);.  
1ab20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
1ab30 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
1ab40 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1ab50 65 65 42 65 67 69 6e 53 74 6d 74 28 70 42 74 2c  eeBeginStmt(pBt,
1ab60 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 29 3b   p->iStatement);
1ab70 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
1ab80 2f 2a 20 53 74 6f 72 65 20 74 68 65 20 63 75 72  /* Store the cur
1ab90 72 65 6e 74 20 76 61 6c 75 65 20 6f 66 20 74 68  rent value of th
1aba0 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
1abb0 65 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73  es deferred cons
1abc0 74 72 61 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20  traint.      ** 
1abd0 63 6f 75 6e 74 65 72 2e 20 49 66 20 74 68 65 20  counter. If the 
1abe0 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
1abf0 63 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62  ction needs to b
1ac00 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a 20  e rolled back,. 
1ac10 20 20 20 20 20 2a 2a 20 74 68 65 20 76 61 6c 75       ** the valu
1ac20 65 20 6f 66 20 74 68 69 73 20 63 6f 75 6e 74 65  e of this counte
1ac30 72 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65  r needs to be re
1ac40 73 74 6f 72 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a  stored too.  */.
1ac50 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65        p->nStmtDe
1ac60 66 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66  fCons = db->nDef
1ac70 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20  erredCons;.     
1ac80 20 70 2d 3e 6e 53 74 6d 74 44 65 66 49 6d 6d 43   p->nStmtDefImmC
1ac90 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72  ons = db->nDefer
1aca0 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20  redImmCons;.    
1acb0 7d 0a 0a 20 20 20 20 2f 2a 20 47 61 74 68 65 72  }..    /* Gather
1acc0 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73   the schema vers
1acd0 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 63  ion number for c
1ace0 68 65 63 6b 69 6e 67 3a 0a 20 20 20 20 2a 2a 20  hecking:.    ** 
1acf0 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f  IMPLEMENTATION-O
1ad00 46 3a 20 52 2d 30 33 31 38 39 2d 35 31 31 33 35  F: R-03189-51135
1ad10 20 41 73 20 65 61 63 68 20 53 51 4c 20 73 74 61   As each SQL sta
1ad20 74 65 6d 65 6e 74 20 72 75 6e 73 2c 20 74 68 65  tement runs, the
1ad30 20 73 63 68 65 6d 61 0a 20 20 20 20 2a 2a 20 76   schema.    ** v
1ad40 65 72 73 69 6f 6e 20 69 73 20 63 68 65 63 6b 65  ersion is checke
1ad50 64 20 74 6f 20 65 6e 73 75 72 65 20 74 68 61 74  d to ensure that
1ad60 20 74 68 65 20 73 63 68 65 6d 61 20 68 61 73 20   the schema has 
1ad70 6e 6f 74 20 63 68 61 6e 67 65 64 20 73 69 6e 63  not changed sinc
1ad80 65 20 74 68 65 0a 20 20 20 20 2a 2a 20 53 51 4c  e the.    ** SQL
1ad90 20 73 74 61 74 65 6d 65 6e 74 20 77 61 73 20 70   statement was p
1ada0 72 65 70 61 72 65 64 2e 0a 20 20 20 20 2a 2f 0a  repared..    */.
1adb0 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
1adc0 47 65 74 4d 65 74 61 28 70 42 74 2c 20 42 54 52  GetMeta(pBt, BTR
1add0 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f  EE_SCHEMA_VERSIO
1ade0 4e 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61  N, (u32 *)&iMeta
1adf0 29 3b 0a 20 20 20 20 69 47 65 6e 20 3d 20 64 62  );.    iGen = db
1ae00 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
1ae10 53 63 68 65 6d 61 2d 3e 69 47 65 6e 65 72 61 74  Schema->iGenerat
1ae20 69 6f 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ion;.  }else{.  
1ae30 20 20 69 47 65 6e 20 3d 20 69 4d 65 74 61 20 3d    iGen = iMeta =
1ae40 20 30 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74   0;.  }.  assert
1ae50 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20  ( pOp->p5==0 || 
1ae60 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
1ae70 49 4e 54 33 32 20 29 3b 0a 20 20 69 66 28 20 70  INT32 );.  if( p
1ae80 4f 70 2d 3e 70 35 20 26 26 20 28 69 4d 65 74 61  Op->p5 && (iMeta
1ae90 21 3d 70 4f 70 2d 3e 70 33 20 7c 7c 20 69 47 65  !=pOp->p3 || iGe
1aea0 6e 21 3d 70 4f 70 2d 3e 70 34 2e 69 29 20 29 7b  n!=pOp->p4.i) ){
1aeb0 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72  .    sqlite3DbFr
1aec0 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73  ee(db, p->zErrMs
1aed0 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d  g);.    p->zErrM
1aee0 73 67 20 3d 20 73 71 6c 69 74 65 33 44 62 53 74  sg = sqlite3DbSt
1aef0 72 44 75 70 28 64 62 2c 20 22 64 61 74 61 62 61  rDup(db, "databa
1af00 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 63 68  se schema has ch
1af10 61 6e 67 65 64 22 29 3b 0a 20 20 20 20 2f 2a 20  anged");.    /* 
1af20 49 66 20 74 68 65 20 73 63 68 65 6d 61 2d 63 6f  If the schema-co
1af30 6f 6b 69 65 20 66 72 6f 6d 20 74 68 65 20 64 61  okie from the da
1af40 74 61 62 61 73 65 20 66 69 6c 65 20 6d 61 74 63  tabase file matc
1af50 68 65 73 20 74 68 65 20 63 6f 6f 6b 69 65 20 0a  hes the cookie .
1af60 20 20 20 20 2a 2a 20 73 74 6f 72 65 64 20 77 69      ** stored wi
1af70 74 68 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79  th the in-memory
1af80 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
1af90 6f 66 20 74 68 65 20 73 63 68 65 6d 61 2c 20 64  of the schema, d
1afa0 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74 20 72 65 6c  o.    ** not rel
1afb0 6f 61 64 20 74 68 65 20 73 63 68 65 6d 61 20 66  oad the schema f
1afc0 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
1afd0 20 66 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20 20   file..    **.  
1afe0 20 20 2a 2a 20 49 66 20 76 69 72 74 75 61 6c 2d    ** If virtual-
1aff0 74 61 62 6c 65 73 20 61 72 65 20 69 6e 20 75 73  tables are in us
1b000 65 2c 20 74 68 69 73 20 69 73 20 6e 6f 74 20 6a  e, this is not j
1b010 75 73 74 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74  ust an optimizat
1b020 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66 74 65  ion..    ** Ofte
1b030 6e 2c 20 76 2d 74 61 62 6c 65 73 20 73 74 6f 72  n, v-tables stor
1b040 65 20 74 68 65 69 72 20 64 61 74 61 20 69 6e 20  e their data in 
1b050 6f 74 68 65 72 20 53 51 4c 69 74 65 20 74 61 62  other SQLite tab
1b060 6c 65 73 2c 20 77 68 69 63 68 0a 20 20 20 20 2a  les, which.    *
1b070 2a 20 61 72 65 20 71 75 65 72 69 65 64 20 66 72  * are queried fr
1b080 6f 6d 20 77 69 74 68 69 6e 20 78 4e 65 78 74 28  om within xNext(
1b090 29 20 61 6e 64 20 6f 74 68 65 72 20 76 2d 74 61  ) and other v-ta
1b0a0 62 6c 65 20 6d 65 74 68 6f 64 73 20 75 73 69 6e  ble methods usin
1b0b0 67 0a 20 20 20 20 2a 2a 20 70 72 65 70 61 72 65  g.    ** prepare
1b0c0 64 20 71 75 65 72 69 65 73 2e 20 49 66 20 73 75  d queries. If su
1b0d0 63 68 20 61 20 71 75 65 72 79 20 69 73 20 6f 75  ch a query is ou
1b0e0 74 2d 6f 66 2d 64 61 74 65 2c 20 77 65 20 64 6f  t-of-date, we do
1b0f0 20 6e 6f 74 20 77 61 6e 74 20 74 6f 0a 20 20 20   not want to.   
1b100 20 2a 2a 20 64 69 73 63 61 72 64 20 74 68 65 20   ** discard the 
1b110 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c  database schema,
1b120 20 61 73 20 74 68 65 20 75 73 65 72 20 63 6f 64   as the user cod
1b130 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74  e implementing t
1b140 68 65 0a 20 20 20 20 2a 2a 20 76 2d 74 61 62 6c  he.    ** v-tabl
1b150 65 20 77 6f 75 6c 64 20 68 61 76 65 20 74 6f 20  e would have to 
1b160 62 65 20 72 65 61 64 79 20 66 6f 72 20 74 68 65  be ready for the
1b170 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
1b180 72 75 63 74 75 72 65 20 69 74 73 65 6c 66 0a 20  ructure itself. 
1b190 20 20 20 2a 2a 20 74 6f 20 62 65 20 69 6e 76 61     ** to be inva
1b1a0 6c 69 64 61 74 65 64 20 77 68 65 6e 65 76 65 72  lidated whenever
1b1b0 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
1b1c0 69 73 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77  is called from w
1b1d0 69 74 68 69 6e 20 0a 20 20 20 20 2a 2a 20 61 20  ithin .    ** a 
1b1e0 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 2e 0a  v-table method..
1b1f0 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 64      */.    if( d
1b200 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
1b210 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f  pSchema->schema_
1b220 63 6f 6f 6b 69 65 21 3d 69 4d 65 74 61 20 29 7b  cookie!=iMeta ){
1b230 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65  .      sqlite3Re
1b240 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 64 62 2c  setOneSchema(db,
1b250 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d   pOp->p1);.    }
1b260 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20  .    p->expired 
1b270 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 53 51  = 1;.    rc = SQ
1b280 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20 7d  LITE_SCHEMA;.  }
1b290 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
1b2a0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1b2b0 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ror;.  break;.}.
1b2c0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 64  ./* Opcode: Read
1b2d0 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20  Cookie P1 P2 P3 
1b2e0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 63  * *.**.** Read c
1b2f0 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 33 20  ookie number P3 
1b300 66 72 6f 6d 20 64 61 74 61 62 61 73 65 20 50 31  from database P1
1b310 20 61 6e 64 20 77 72 69 74 65 20 69 74 20 69 6e   and write it in
1b320 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
1b330 2a 2a 20 50 33 3d 3d 31 20 69 73 20 74 68 65 20  ** P3==1 is the 
1b340 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20  schema version. 
1b350 20 50 33 3d 3d 32 20 69 73 20 74 68 65 20 64 61   P3==2 is the da
1b360 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a  tabase format..*
1b370 2a 20 50 33 3d 3d 33 20 69 73 20 74 68 65 20 72  * P3==3 is the r
1b380 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72  ecommended pager
1b390 20 63 61 63 68 65 20 73 69 7a 65 2c 20 61 6e 64   cache size, and
1b3a0 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d   so forth.  P1==
1b3b0 30 20 69 73 0a 2a 2a 20 74 68 65 20 6d 61 69 6e  0 is.** the main
1b3c0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
1b3d0 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20  nd P1==1 is the 
1b3e0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73  database file us
1b3f0 65 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74  ed to store.** t
1b400 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e  emporary tables.
1b410 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 6d 75 73  .**.** There mus
1b420 74 20 62 65 20 61 20 72 65 61 64 2d 6c 6f 63 6b  t be a read-lock
1b430 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
1b440 20 28 65 69 74 68 65 72 20 61 20 74 72 61 6e 73   (either a trans
1b450 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62  action.** must b
1b460 65 20 73 74 61 72 74 65 64 20 6f 72 20 74 68 65  e started or the
1b470 72 65 20 6d 75 73 74 20 62 65 20 61 6e 20 6f 70  re must be an op
1b480 65 6e 20 63 75 72 73 6f 72 29 20 62 65 66 6f 72  en cursor) befor
1b490 65 0a 2a 2a 20 65 78 65 63 75 74 69 6e 67 20 74  e.** executing t
1b4a0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  his instruction.
1b4b0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 64  .*/.case OP_Read
1b4c0 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20  Cookie: {       
1b4d0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
1b4e0 2a 2f 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a  */.  int iMeta;.
1b4f0 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74    int iDb;.  int
1b500 20 69 43 6f 6f 6b 69 65 3b 0a 0a 20 20 61 73 73   iCookie;..  ass
1b510 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65  ert( p->bIsReade
1b520 72 20 29 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70  r );.  iDb = pOp
1b530 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b 69 65 20  ->p1;.  iCookie 
1b540 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73  = pOp->p3;.  ass
1b550 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 53 51 4c  ert( pOp->p3<SQL
1b560 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41  ITE_N_BTREE_META
1b570 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44   );.  assert( iD
1b580 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e  b>=0 && iDb<db->
1b590 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
1b5a0 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42   db->aDb[iDb].pB
1b5b0 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  t!=0 );.  assert
1b5c0 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
1b5d0 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20  btreeMask, iDb) 
1b5e0 29 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42 74 72  );..  sqlite3Btr
1b5f0 65 65 47 65 74 4d 65 74 61 28 64 62 2d 3e 61 44  eeGetMeta(db->aD
1b600 62 5b 69 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f  b[iDb].pBt, iCoo
1b610 6b 69 65 2c 20 28 75 33 32 20 2a 29 26 69 4d 65  kie, (u32 *)&iMe
1b620 74 61 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75  ta);.  pOut = ou
1b630 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
1b640 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  pOp);.  pOut->u.
1b650 69 20 3d 20 69 4d 65 74 61 3b 0a 20 20 62 72 65  i = iMeta;.  bre
1b660 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1b670 3a 20 53 65 74 43 6f 6f 6b 69 65 20 50 31 20 50  : SetCookie P1 P
1b680 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57  2 P3 * *.**.** W
1b690 72 69 74 65 20 74 68 65 20 69 6e 74 65 67 65 72  rite the integer
1b6a0 20 76 61 6c 75 65 20 50 33 20 69 6e 74 6f 20 63   value P3 into c
1b6b0 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 32 20  ookie number P2 
1b6c0 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 2e 0a  of database P1..
1b6d0 2a 2a 20 50 32 3d 3d 31 20 69 73 20 74 68 65 20  ** P2==1 is the 
1b6e0 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20  schema version. 
1b6f0 20 50 32 3d 3d 32 20 69 73 20 74 68 65 20 64 61   P2==2 is the da
1b700 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a  tabase format..*
1b710 2a 20 50 32 3d 3d 33 20 69 73 20 74 68 65 20 72  * P2==3 is the r
1b720 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72  ecommended pager
1b730 20 63 61 63 68 65 20 0a 2a 2a 20 73 69 7a 65 2c   cache .** size,
1b740 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20   and so forth.  
1b750 50 31 3d 3d 30 20 69 73 20 74 68 65 20 6d 61 69  P1==0 is the mai
1b760 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
1b770 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65  and P1==1 is the
1b780 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69   .** database fi
1b790 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  le used to store
1b7a0 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
1b7b0 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e 73  s..**.** A trans
1b7c0 61 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 73  action must be s
1b7d0 74 61 72 74 65 64 20 62 65 66 6f 72 65 20 65 78  tarted before ex
1b7e0 65 63 75 74 69 6e 67 20 74 68 69 73 20 6f 70 63  ecuting this opc
1b7f0 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ode..*/.case OP_
1b800 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 0a 20 20 44  SetCookie: {.  D
1b810 62 20 2a 70 44 62 3b 0a 20 20 61 73 73 65 72 74  b *pDb;.  assert
1b820 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c 49 54 45  ( pOp->p2<SQLITE
1b830 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b  _N_BTREE_META );
1b840 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1b850 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1b860 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
1b870 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
1b880 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70  (p->btreeMask, p
1b890 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73  Op->p1) );.  ass
1b8a0 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
1b8b0 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26  ==0 );.  pDb = &
1b8c0 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
1b8d0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44 62 2d  ;.  assert( pDb-
1b8e0 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73  >pBt!=0 );.  ass
1b8f0 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65  ert( sqlite3Sche
1b900 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20  maMutexHeld(db, 
1b910 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a 20  pOp->p1, 0) );. 
1b920 20 2f 2a 20 53 65 65 20 6e 6f 74 65 20 61 62 6f   /* See note abo
1b930 75 74 20 69 6e 64 65 78 20 73 68 69 66 74 69 6e  ut index shiftin
1b940 67 20 6f 6e 20 4f 50 5f 52 65 61 64 43 6f 6f 6b  g on OP_ReadCook
1b950 69 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c  ie */.  rc = sql
1b960 69 74 65 33 42 74 72 65 65 55 70 64 61 74 65 4d  ite3BtreeUpdateM
1b970 65 74 61 28 70 44 62 2d 3e 70 42 74 2c 20 70 4f  eta(pDb->pBt, pO
1b980 70 2d 3e 70 32 2c 20 70 4f 70 2d 3e 70 33 29 3b  p->p2, pOp->p3);
1b990 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d  .  if( pOp->p2==
1b9a0 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52  BTREE_SCHEMA_VER
1b9b0 53 49 4f 4e 20 29 7b 0a 20 20 20 20 2f 2a 20 57  SION ){.    /* W
1b9c0 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20 63  hen the schema c
1b9d0 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 2c 20 72  ookie changes, r
1b9e0 65 63 6f 72 64 20 74 68 65 20 6e 65 77 20 63 6f  ecord the new co
1b9f0 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c 6c 79 20  okie internally 
1ba00 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68  */.    pDb->pSch
1ba10 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b  ema->schema_cook
1ba20 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  ie = pOp->p3;.  
1ba30 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53    db->flags |= S
1ba40 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e  QLITE_InternChan
1ba50 67 65 73 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  ges;.  }else if(
1ba60 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f   pOp->p2==BTREE_
1ba70 46 49 4c 45 5f 46 4f 52 4d 41 54 20 29 7b 0a 20  FILE_FORMAT ){. 
1ba80 20 20 20 2f 2a 20 52 65 63 6f 72 64 20 63 68 61     /* Record cha
1ba90 6e 67 65 73 20 69 6e 20 74 68 65 20 66 69 6c 65  nges in the file
1baa0 20 66 6f 72 6d 61 74 20 2a 2f 0a 20 20 20 20 70   format */.    p
1bab0 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c  Db->pSchema->fil
1bac0 65 5f 66 6f 72 6d 61 74 20 3d 20 70 4f 70 2d 3e  e_format = pOp->
1bad0 70 33 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f  p3;.  }.  if( pO
1bae0 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20  p->p1==1 ){.    
1baf0 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c  /* Invalidate al
1bb00 6c 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  l prepared state
1bb10 6d 65 6e 74 73 20 77 68 65 6e 65 76 65 72 20 74  ments whenever t
1bb20 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65  he TEMP database
1bb30 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d 61 20 69  .    ** schema i
1bb40 73 20 63 68 61 6e 67 65 64 2e 20 20 54 69 63 6b  s changed.  Tick
1bb50 65 74 20 23 31 36 34 34 20 2a 2f 0a 20 20 20 20  et #1644 */.    
1bb60 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
1bb70 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
1bb80 64 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69  db);.    p->expi
1bb90 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69  red = 0;.  }.  i
1bba0 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
1bbb0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1bbc0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1bbd0 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64  Opcode: OpenRead
1bbe0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
1bbf0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f  ** Synopsis: roo
1bc00 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a  t=P2 iDb=P3.**.*
1bc10 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2d 6f 6e  * Open a read-on
1bc20 6c 79 20 63 75 72 73 6f 72 20 66 6f 72 20 74 68  ly cursor for th
1bc30 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
1bc40 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65   whose root page
1bc50 20 69 73 0a 2a 2a 20 50 32 20 69 6e 20 61 20 64   is.** P2 in a d
1bc60 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54  atabase file.  T
1bc70 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
1bc80 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
1bc90 79 20 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20  y P3. .** P3==0 
1bca0 6d 65 61 6e 73 20 74 68 65 20 6d 61 69 6e 20 64  means the main d
1bcb0 61 74 61 62 61 73 65 2c 20 50 33 3d 3d 31 20 6d  atabase, P3==1 m
1bcc0 65 61 6e 73 20 74 68 65 20 64 61 74 61 62 61 73  eans the databas
1bcd0 65 20 75 73 65 64 20 66 6f 72 20 0a 2a 2a 20 74  e used for .** t
1bce0 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2c  emporary tables,
1bcf0 20 61 6e 64 20 50 33 3e 31 20 6d 65 61 6e 73 20   and P3>1 means 
1bd00 75 73 65 64 20 74 68 65 20 63 6f 72 72 65 73 70  used the corresp
1bd10 6f 6e 64 69 6e 67 20 61 74 74 61 63 68 65 64 0a  onding attached.
1bd20 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 20 47 69  ** database.  Gi
1bd30 76 65 20 74 68 65 20 6e 65 77 20 63 75 72 73 6f  ve the new curso
1bd40 72 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20  r an identifier 
1bd50 6f 66 20 50 31 2e 20 20 54 68 65 20 50 31 0a 2a  of P1.  The P1.*
1bd60 2a 20 76 61 6c 75 65 73 20 6e 65 65 64 20 6e 6f  * values need no
1bd70 74 20 62 65 20 63 6f 6e 74 69 67 75 6f 75 73 20  t be contiguous 
1bd80 62 75 74 20 61 6c 6c 20 50 31 20 76 61 6c 75 65  but all P1 value
1bd90 73 20 73 68 6f 75 6c 64 20 62 65 20 73 6d 61 6c  s should be smal
1bda0 6c 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 49  l integers..** I
1bdb0 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f  t is an error fo
1bdc0 72 20 50 31 20 74 6f 20 62 65 20 6e 65 67 61 74  r P1 to be negat
1bdd0 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  ive..**.** If P5
1bde0 21 3d 30 20 74 68 65 6e 20 75 73 65 20 74 68 65  !=0 then use the
1bdf0 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
1be00 73 74 65 72 20 50 32 20 61 73 20 74 68 65 20 72  ster P2 as the r
1be10 6f 6f 74 20 70 61 67 65 2c 20 6e 6f 74 0a 2a 2a  oot page, not.**
1be20 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50 32   the value of P2
1be30 20 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54   itself..**.** T
1be40 68 65 72 65 20 77 69 6c 6c 20 62 65 20 61 20 72  here will be a r
1be50 65 61 64 20 6c 6f 63 6b 20 6f 6e 20 74 68 65 20  ead lock on the 
1be60 64 61 74 61 62 61 73 65 20 77 68 65 6e 65 76 65  database wheneve
1be70 72 20 74 68 65 72 65 20 69 73 20 61 6e 0a 2a 2a  r there is an.**
1be80 20 6f 70 65 6e 20 63 75 72 73 6f 72 2e 20 20 49   open cursor.  I
1be90 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77  f the database w
1bea0 61 73 20 75 6e 6c 6f 63 6b 65 64 20 70 72 69 6f  as unlocked prio
1beb0 72 20 74 6f 20 74 68 69 73 20 69 6e 73 74 72 75  r to this instru
1bec0 63 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e 20 61 20  ction.** then a 
1bed0 72 65 61 64 20 6c 6f 63 6b 20 69 73 20 61 63 71  read lock is acq
1bee0 75 69 72 65 64 20 61 73 20 70 61 72 74 20 6f 66  uired as part of
1bef0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
1bf00 6e 2e 20 20 41 20 72 65 61 64 0a 2a 2a 20 6c 6f  n.  A read.** lo
1bf10 63 6b 20 61 6c 6c 6f 77 73 20 6f 74 68 65 72 20  ck allows other 
1bf20 70 72 6f 63 65 73 73 65 73 20 74 6f 20 72 65 61  processes to rea
1bf30 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 62  d the database b
1bf40 75 74 20 70 72 6f 68 69 62 69 74 73 0a 2a 2a 20  ut prohibits.** 
1bf50 61 6e 79 20 6f 74 68 65 72 20 70 72 6f 63 65 73  any other proces
1bf60 73 20 66 72 6f 6d 20 6d 6f 64 69 66 79 69 6e 67  s from modifying
1bf70 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20   the database.  
1bf80 54 68 65 20 72 65 61 64 20 6c 6f 63 6b 20 69 73  The read lock is
1bf90 0a 2a 2a 20 72 65 6c 65 61 73 65 64 20 77 68 65  .** released whe
1bfa0 6e 20 61 6c 6c 20 63 75 72 73 6f 72 73 20 61 72  n all cursors ar
1bfb0 65 20 63 6c 6f 73 65 64 2e 20 20 49 66 20 74 68  e closed.  If th
1bfc0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61  is instruction a
1bfd0 74 74 65 6d 70 74 73 0a 2a 2a 20 74 6f 20 67 65  ttempts.** to ge
1bfe0 74 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 62 75  t a read lock bu
1bff0 74 20 66 61 69 6c 73 2c 20 74 68 65 20 73 63 72  t fails, the scr
1c000 69 70 74 20 74 65 72 6d 69 6e 61 74 65 73 20 77  ipt terminates w
1c010 69 74 68 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45  ith an.** SQLITE
1c020 5f 42 55 53 59 20 65 72 72 6f 72 20 63 6f 64 65  _BUSY error code
1c030 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76  ..**.** The P4 v
1c040 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74 68  alue may be eith
1c050 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50  er an integer (P
1c060 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f  4_INT32) or a po
1c070 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65  inter to.** a Ke
1c080 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20  yInfo structure 
1c090 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66  (P4_KEYINFO). If
1c0a0 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72   it is a pointer
1c0b0 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a   to a KeyInfo .*
1c0c0 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74 68 65  * structure, the
1c0d0 6e 20 73 61 69 64 20 73 74 72 75 63 74 75 72 65  n said structure
1c0e0 20 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e   defines the con
1c0f0 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69  tent and collati
1c100 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20  ng .** sequence 
1c110 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62 65 69  of the index bei
1c120 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72  ng opened. Other
1c130 77 69 73 65 2c 20 69 66 20 50 34 20 69 73 20 61  wise, if P4 is a
1c140 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61  n integer .** va
1c150 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74 20 74  lue, it is set t
1c160 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  o the number of 
1c170 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74  columns in the t
1c180 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  able..**.** See 
1c190 61 6c 73 6f 3a 20 4f 70 65 6e 57 72 69 74 65 2c  also: OpenWrite,
1c1a0 20 52 65 6f 70 65 6e 49 64 78 0a 2a 2f 0a 2f 2a   ReopenIdx.*/./*
1c1b0 20 4f 70 63 6f 64 65 3a 20 52 65 6f 70 65 6e 49   Opcode: ReopenI
1c1c0 64 78 20 50 31 20 50 32 20 50 33 20 50 34 20 50  dx P1 P2 P3 P4 P
1c1d0 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  5.** Synopsis: r
1c1e0 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a  oot=P2 iDb=P3.**
1c1f0 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e 49 64  .** The ReopenId
1c200 78 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 65  x opcode works e
1c210 78 61 63 74 6c 79 20 6c 69 6b 65 20 52 65 61 64  xactly like Read
1c220 4f 70 65 6e 20 65 78 63 65 70 74 20 74 68 61 74  Open except that
1c230 20 69 74 20 66 69 72 73 74 0a 2a 2a 20 63 68 65   it first.** che
1c240 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20 74 68  cks to see if th
1c250 65 20 63 75 72 73 6f 72 20 6f 6e 20 50 31 20 69  e cursor on P1 i
1c260 73 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 20 77  s already open w
1c270 69 74 68 20 61 20 72 6f 6f 74 20 70 61 67 65 0a  ith a root page.
1c280 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 50 32 20  ** number of P2 
1c290 61 6e 64 20 69 66 20 69 74 20 69 73 20 74 68 69  and if it is thi
1c2a0 73 20 6f 70 63 6f 64 65 20 62 65 63 6f 6d 65 73  s opcode becomes
1c2b0 20 61 20 6e 6f 2d 6f 70 2e 20 20 49 6e 20 6f 74   a no-op.  In ot
1c2c0 68 65 72 20 77 6f 72 64 73 2c 0a 2a 2a 20 69 66  her words,.** if
1c2d0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 61   the cursor is a
1c2e0 6c 72 65 61 64 79 20 6f 70 65 6e 2c 20 64 6f 20  lready open, do 
1c2f0 6e 6f 74 20 72 65 6f 70 65 6e 20 69 74 2e 0a 2a  not reopen it..*
1c300 2a 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e 49  *.** The ReopenI
1c310 64 78 20 6f 70 63 6f 64 65 20 6d 61 79 20 6f 6e  dx opcode may on
1c320 6c 79 20 62 65 20 75 73 65 64 20 77 69 74 68 20  ly be used with 
1c330 50 35 3d 3d 30 20 61 6e 64 20 77 69 74 68 20 50  P5==0 and with P
1c340 34 20 62 65 69 6e 67 0a 2a 2a 20 61 20 50 34 5f  4 being.** a P4_
1c350 4b 45 59 49 4e 46 4f 20 6f 62 6a 65 63 74 2e 20  KEYINFO object. 
1c360 20 46 75 72 74 68 65 72 6d 6f 72 65 2c 20 74 68   Furthermore, th
1c370 65 20 50 33 20 76 61 6c 75 65 20 6d 75 73 74 20  e P3 value must 
1c380 62 65 20 74 68 65 20 73 61 6d 65 20 61 73 0a 2a  be the same as.*
1c390 2a 20 65 76 65 72 79 20 6f 74 68 65 72 20 52 65  * every other Re
1c3a0 6f 70 65 6e 49 64 78 20 6f 72 20 4f 70 65 6e 52  openIdx or OpenR
1c3b0 65 61 64 20 66 6f 72 20 74 68 65 20 73 61 6d 65  ead for the same
1c3c0 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e 0a   cursor number..
1c3d0 2a 2a 0a 2a 2a 20 53 65 65 20 74 68 65 20 4f 70  **.** See the Op
1c3e0 65 6e 52 65 61 64 20 6f 70 63 6f 64 65 20 64 6f  enRead opcode do
1c3f0 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20  cumentation for 
1c400 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
1c410 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70  mation..*/./* Op
1c420 63 6f 64 65 3a 20 4f 70 65 6e 57 72 69 74 65 20  code: OpenWrite 
1c430 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
1c440 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74  * Synopsis: root
1c450 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a  =P2 iDb=P3.**.**
1c460 20 4f 70 65 6e 20 61 20 72 65 61 64 2f 77 72 69   Open a read/wri
1c470 74 65 20 63 75 72 73 6f 72 20 6e 61 6d 65 64 20  te cursor named 
1c480 50 31 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20  P1 on the table 
1c490 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72  or index whose r
1c4a0 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 69 73 20 50  oot.** page is P
1c4b0 32 2e 20 20 4f 72 20 69 66 20 50 35 21 3d 30 20  2.  Or if P5!=0 
1c4c0 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  use the content 
1c4d0 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20 74  of register P2 t
1c4e0 6f 20 66 69 6e 64 20 74 68 65 0a 2a 2a 20 72 6f  o find the.** ro
1c4f0 6f 74 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54  ot page..**.** T
1c500 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20  he P4 value may 
1c510 62 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74  be either an int
1c520 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20  eger (P4_INT32) 
1c530 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a  or a pointer to.
1c540 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72  ** a KeyInfo str
1c550 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e  ucture (P4_KEYIN
1c560 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61 20  FO). If it is a 
1c570 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79  pointer to a Key
1c580 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75  Info .** structu
1c590 72 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74  re, then said st
1c5a0 72 75 63 74 75 72 65 20 64 65 66 69 6e 65 73 20  ructure defines 
1c5b0 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20  the content and 
1c5c0 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65  collating .** se
1c5d0 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e  quence of the in
1c5e0 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64  dex being opened
1c5f0 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20  . Otherwise, if 
1c600 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  P4 is an integer
1c610 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69   .** value, it i
1c620 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d  s set to the num
1c630 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
1c640 6e 20 74 68 65 20 74 61 62 6c 65 2c 20 6f 72 20  n the table, or 
1c650 74 6f 20 74 68 65 0a 2a 2a 20 6c 61 72 67 65 73  to the.** larges
1c660 74 20 69 6e 64 65 78 20 6f 66 20 61 6e 79 20 63  t index of any c
1c670 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 74 61 62  olumn of the tab
1c680 6c 65 20 74 68 61 74 20 69 73 20 61 63 74 75 61  le that is actua
1c690 6c 6c 79 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20  lly used..**.** 
1c6a0 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
1c6b0 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
1c6c0 20 4f 70 65 6e 52 65 61 64 20 65 78 63 65 70 74   OpenRead except
1c6d0 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73 20 74   that it opens t
1c6e0 68 65 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20  he cursor.** in 
1c6f0 72 65 61 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e  read/write mode.
1c700 20 20 46 6f 72 20 61 20 67 69 76 65 6e 20 74 61    For a given ta
1c710 62 6c 65 2c 20 74 68 65 72 65 20 63 61 6e 20 62  ble, there can b
1c720 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 65  e one or more re
1c730 61 64 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f  ad-only.** curso
1c740 72 73 20 6f 72 20 61 20 73 69 6e 67 6c 65 20 72  rs or a single r
1c750 65 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72  ead/write cursor
1c760 20 62 75 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a   but not both..*
1c770 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70  *.** See also Op
1c780 65 6e 52 65 61 64 2e 0a 2a 2f 0a 63 61 73 65 20  enRead..*/.case 
1c790 4f 50 5f 52 65 6f 70 65 6e 49 64 78 3a 20 7b 0a  OP_ReopenIdx: {.
1c7a0 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20    int nField;.  
1c7b0 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
1c7c0 6f 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 69  o;.  int p2;.  i
1c7d0 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 77 72  nt iDb;.  int wr
1c7e0 46 6c 61 67 3b 0a 20 20 42 74 72 65 65 20 2a 70  Flag;.  Btree *p
1c7f0 58 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  X;.  VdbeCursor 
1c800 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a 70 44 62  *pCur;.  Db *pDb
1c810 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
1c820 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  ->p5==0 || pOp->
1c830 70 35 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45  p5==OPFLAG_SEEKE
1c840 51 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Q );.  assert( p
1c850 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b  Op->p4type==P4_K
1c860 45 59 49 4e 46 4f 20 29 3b 0a 20 20 70 43 75 72  EYINFO );.  pCur
1c870 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1c880 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 43 75 72  >p1];.  if( pCur
1c890 20 26 26 20 70 43 75 72 2d 3e 70 67 6e 6f 52 6f   && pCur->pgnoRo
1c8a0 6f 74 3d 3d 28 75 33 32 29 70 4f 70 2d 3e 70 32  ot==(u32)pOp->p2
1c8b0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
1c8c0 70 43 75 72 2d 3e 69 44 62 3d 3d 70 4f 70 2d 3e  pCur->iDb==pOp->
1c8d0 70 33 20 29 3b 20 20 20 20 20 20 2f 2a 20 47 75  p3 );      /* Gu
1c8e0 61 72 61 6e 74 65 65 64 20 62 79 20 74 68 65 20  aranteed by the 
1c8f0 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a  code generator *
1c900 2f 0a 20 20 20 20 67 6f 74 6f 20 6f 70 65 6e 5f  /.    goto open_
1c910 63 75 72 73 6f 72 5f 73 65 74 5f 68 69 6e 74 73  cursor_set_hints
1c920 3b 0a 20 20 7d 0a 20 20 2f 2a 20 49 66 20 74 68  ;.  }.  /* If th
1c930 65 20 63 75 72 73 6f 72 20 69 73 20 6e 6f 74 20  e cursor is not 
1c940 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 6f  currently open o
1c950 72 20 69 73 20 6f 70 65 6e 20 6f 6e 20 61 20 64  r is open on a d
1c960 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20 69 6e  ifferent.  ** in
1c970 64 65 78 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74  dex, then fall t
1c980 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 4f  hrough into OP_O
1c990 70 65 6e 52 65 61 64 20 74 6f 20 66 6f 72 63 65  penRead to force
1c9a0 20 61 20 72 65 6f 70 65 6e 20 2a 2f 0a 63 61 73   a reopen */.cas
1c9b0 65 20 4f 50 5f 4f 70 65 6e 52 65 61 64 3a 0a 63  e OP_OpenRead:.c
1c9c0 61 73 65 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65  ase OP_OpenWrite
1c9d0 3a 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  :..  assert( pOp
1c9e0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65  ->opcode==OP_Ope
1c9f0 6e 57 72 69 74 65 20 7c 7c 20 70 4f 70 2d 3e 70  nWrite || pOp->p
1ca00 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d  5==0 || pOp->p5=
1ca10 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 29  =OPFLAG_SEEKEQ )
1ca20 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  ;.  assert( p->b
1ca30 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73  IsReader );.  as
1ca40 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
1ca50 65 3d 3d 4f 50 5f 4f 70 65 6e 52 65 61 64 20 7c  e==OP_OpenRead |
1ca60 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
1ca70 50 5f 52 65 6f 70 65 6e 49 64 78 0a 20 20 20 20  P_ReopenIdx.    
1ca80 20 20 20 20 20 20 7c 7c 20 70 2d 3e 72 65 61 64        || p->read
1ca90 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 69 66  Only==0 );..  if
1caa0 28 20 70 2d 3e 65 78 70 69 72 65 64 20 29 7b 0a  ( p->expired ){.
1cab0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
1cac0 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 3b 0a  ABORT_ROLLBACK;.
1cad0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
1cae0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
1caf0 0a 0a 20 20 6e 46 69 65 6c 64 20 3d 20 30 3b 0a  ..  nField = 0;.
1cb00 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 30 3b 0a    pKeyInfo = 0;.
1cb10 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a    p2 = pOp->p2;.
1cb20 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b    iDb = pOp->p3;
1cb30 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d  .  assert( iDb>=
1cb40 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62  0 && iDb<db->nDb
1cb50 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
1cb60 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
1cb70 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 20  eMask, iDb) );. 
1cb80 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b   pDb = &db->aDb[
1cb90 69 44 62 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62  iDb];.  pX = pDb
1cba0 2d 3e 70 42 74 3b 0a 20 20 61 73 73 65 72 74 28  ->pBt;.  assert(
1cbb0 20 70 58 21 3d 30 20 29 3b 0a 20 20 69 66 28 20   pX!=0 );.  if( 
1cbc0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
1cbd0 4f 70 65 6e 57 72 69 74 65 20 29 7b 0a 20 20 20  OpenWrite ){.   
1cbe0 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f   assert( OPFLAG_
1cbf0 46 4f 52 44 45 4c 45 54 45 3d 3d 42 54 52 45 45  FORDELETE==BTREE
1cc00 5f 46 4f 52 44 45 4c 45 54 45 20 29 3b 0a 20 20  _FORDELETE );.  
1cc10 20 20 77 72 46 6c 61 67 20 3d 20 42 54 52 45 45    wrFlag = BTREE
1cc20 5f 57 52 43 53 52 20 7c 20 28 70 4f 70 2d 3e 70  _WRCSR | (pOp->p
1cc30 35 20 26 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45  5 & OPFLAG_FORDE
1cc40 4c 45 54 45 29 3b 0a 20 20 20 20 61 73 73 65 72  LETE);.    asser
1cc50 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  t( sqlite3Schema
1cc60 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44  MutexHeld(db, iD
1cc70 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 69 66 28  b, 0) );.    if(
1cc80 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66   pDb->pSchema->f
1cc90 69 6c 65 5f 66 6f 72 6d 61 74 20 3c 20 70 2d 3e  ile_format < p->
1cca0 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d  minWriteFileForm
1ccb0 61 74 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d  at ){.      p->m
1ccc0 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61  inWriteFileForma
1ccd0 74 20 3d 20 70 44 62 2d 3e 70 53 63 68 65 6d 61  t = pDb->pSchema
1cce0 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20  ->file_format;. 
1ccf0 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
1cd00 20 20 77 72 46 6c 61 67 20 3d 20 30 3b 0a 20 20    wrFlag = 0;.  
1cd10 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  }.  if( pOp->p5 
1cd20 26 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47  & OPFLAG_P2ISREG
1cd30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
1cd40 70 32 3e 30 20 29 3b 0a 20 20 20 20 61 73 73 65  p2>0 );.    asse
1cd50 72 74 28 20 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d  rt( p2<=(p->nMem
1cd60 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
1cd70 20 29 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20 26   );.    pIn2 = &
1cd80 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 61 73  aMem[p2];.    as
1cd90 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
1cda0 28 70 49 6e 32 29 20 29 3b 0a 20 20 20 20 61 73  (pIn2) );.    as
1cdb0 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61  sert( (pIn2->fla
1cdc0 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
1cdd0 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   );.    sqlite3V
1cde0 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
1cdf0 28 70 49 6e 32 29 3b 0a 20 20 20 20 70 32 20 3d  (pIn2);.    p2 =
1ce00 20 28 69 6e 74 29 70 49 6e 32 2d 3e 75 2e 69 3b   (int)pIn2->u.i;
1ce10 0a 20 20 20 20 2f 2a 20 54 68 65 20 70 32 20 76  .    /* The p2 v
1ce20 61 6c 75 65 20 61 6c 77 61 79 73 20 63 6f 6d 65  alue always come
1ce30 73 20 66 72 6f 6d 20 61 20 70 72 69 6f 72 20 4f  s from a prior O
1ce40 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 6f 70  P_CreateTable op
1ce50 63 6f 64 65 20 61 6e 64 0a 20 20 20 20 2a 2a 20  code and.    ** 
1ce60 74 68 61 74 20 6f 70 63 6f 64 65 20 77 69 6c 6c  that opcode will
1ce70 20 61 6c 77 61 79 73 20 73 65 74 20 74 68 65 20   always set the 
1ce80 70 32 20 76 61 6c 75 65 20 74 6f 20 32 20 6f 72  p2 value to 2 or
1ce90 20 6d 6f 72 65 20 6f 72 20 65 6c 73 65 20 66 61   more or else fa
1cea0 69 6c 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74 68  il..    ** If th
1ceb0 65 72 65 20 77 65 72 65 20 61 20 66 61 69 6c 75  ere were a failu
1cec0 72 65 2c 20 74 68 65 20 70 72 65 70 61 72 65 64  re, the prepared
1ced0 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64   statement would
1cee0 20 68 61 76 65 20 68 61 6c 74 65 64 0a 20 20 20   have halted.   
1cef0 20 2a 2a 20 62 65 66 6f 72 65 20 72 65 61 63 68   ** before reach
1cf00 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75 63  ing this instruc
1cf10 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 73 73  tion. */.    ass
1cf20 65 72 74 28 20 70 32 3e 3d 32 20 29 3b 0a 20 20  ert( p2>=2 );.  
1cf30 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74  }.  if( pOp->p4t
1cf40 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20  ype==P4_KEYINFO 
1cf50 29 7b 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f 20  ){.    pKeyInfo 
1cf60 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e  = pOp->p4.pKeyIn
1cf70 66 6f 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  fo;.    assert( 
1cf80 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45  pKeyInfo->enc==E
1cf90 4e 43 28 64 62 29 20 29 3b 0a 20 20 20 20 61 73  NC(db) );.    as
1cfa0 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e  sert( pKeyInfo->
1cfb0 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20 20 6e 46  db==db );.    nF
1cfc0 69 65 6c 64 20 3d 20 70 4b 65 79 49 6e 66 6f 2d  ield = pKeyInfo-
1cfd0 3e 6e 46 69 65 6c 64 2b 70 4b 65 79 49 6e 66 6f  >nField+pKeyInfo
1cfe0 2d 3e 6e 58 46 69 65 6c 64 3b 0a 20 20 7d 65 6c  ->nXField;.  }el
1cff0 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79  se if( pOp->p4ty
1d000 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 7b 0a  pe==P4_INT32 ){.
1d010 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70      nField = pOp
1d020 2d 3e 70 34 2e 69 3b 0a 20 20 7d 0a 20 20 61 73  ->p4.i;.  }.  as
1d030 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1d040 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46   );.  assert( nF
1d050 69 65 6c 64 3e 3d 30 20 29 3b 0a 20 20 74 65 73  ield>=0 );.  tes
1d060 74 63 61 73 65 28 20 6e 46 69 65 6c 64 3d 3d 30  tcase( nField==0
1d070 20 29 3b 20 20 2f 2a 20 54 61 62 6c 65 20 77 69   );  /* Table wi
1d080 74 68 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  th INTEGER PRIMA
1d090 52 59 20 4b 45 59 20 61 6e 64 20 6e 6f 74 68 69  RY KEY and nothi
1d0a0 6e 67 20 65 6c 73 65 20 2a 2f 0a 20 20 70 43 75  ng else */.  pCu
1d0b0 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73  r = allocateCurs
1d0c0 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 6e  or(p, pOp->p1, n
1d0d0 46 69 65 6c 64 2c 20 69 44 62 2c 20 43 55 52 54  Field, iDb, CURT
1d0e0 59 50 45 5f 42 54 52 45 45 29 3b 0a 20 20 69 66  YPE_BTREE);.  if
1d0f0 28 20 70 43 75 72 3d 3d 30 20 29 20 67 6f 74 6f  ( pCur==0 ) goto
1d100 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 75 72 2d   no_mem;.  pCur-
1d110 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20  >nullRow = 1;.  
1d120 70 43 75 72 2d 3e 69 73 4f 72 64 65 72 65 64 20  pCur->isOrdered 
1d130 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e 70 67 6e  = 1;.  pCur->pgn
1d140 6f 52 6f 6f 74 20 3d 20 70 32 3b 0a 23 69 66 64  oRoot = p2;.#ifd
1d150 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
1d160 20 20 70 43 75 72 2d 3e 77 72 46 6c 61 67 20 3d    pCur->wrFlag =
1d170 20 77 72 46 6c 61 67 3b 0a 23 65 6e 64 69 66 0a   wrFlag;.#endif.
1d180 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1d190 72 65 65 43 75 72 73 6f 72 28 70 58 2c 20 70 32  reeCursor(pX, p2
1d1a0 2c 20 77 72 46 6c 61 67 2c 20 70 4b 65 79 49 6e  , wrFlag, pKeyIn
1d1b0 66 6f 2c 20 70 43 75 72 2d 3e 75 63 2e 70 43 75  fo, pCur->uc.pCu
1d1c0 72 73 6f 72 29 3b 0a 20 20 70 43 75 72 2d 3e 70  rsor);.  pCur->p
1d1d0 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e  KeyInfo = pKeyIn
1d1e0 66 6f 3b 0a 20 20 2f 2a 20 53 65 74 20 74 68 65  fo;.  /* Set the
1d1f0 20 56 64 62 65 43 75 72 73 6f 72 2e 69 73 54 61   VdbeCursor.isTa
1d200 62 6c 65 20 76 61 72 69 61 62 6c 65 2e 20 50 72  ble variable. Pr
1d210 65 76 69 6f 75 73 20 76 65 72 73 69 6f 6e 73 20  evious versions 
1d220 6f 66 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20 75  of.  ** SQLite u
1d230 73 65 64 20 74 6f 20 63 68 65 63 6b 20 69 66 20  sed to check if 
1d240 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 66 6c  the root-page fl
1d250 61 67 73 20 77 65 72 65 20 73 61 6e 65 20 61 74  ags were sane at
1d260 20 74 68 69 73 20 70 6f 69 6e 74 0a 20 20 2a 2a   this point.  **
1d270 20 61 6e 64 20 72 65 70 6f 72 74 20 64 61 74 61   and report data
1d280 62 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 20  base corruption 
1d290 69 66 20 74 68 65 79 20 77 65 72 65 20 6e 6f 74  if they were not
1d2a0 2c 20 62 75 74 20 74 68 69 73 20 63 68 65 63 6b  , but this check
1d2b0 20 68 61 73 0a 20 20 2a 2a 20 73 69 6e 63 65 20   has.  ** since 
1d2c0 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20 62  moved into the b
1d2d0 74 72 65 65 20 6c 61 79 65 72 2e 20 20 2a 2f 20  tree layer.  */ 
1d2e0 20 0a 20 20 70 43 75 72 2d 3e 69 73 54 61 62 6c   .  pCur->isTabl
1d2f0 65 20 3d 20 70 4f 70 2d 3e 70 34 74 79 70 65 21  e = pOp->p4type!
1d300 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a 0a 6f 70  =P4_KEYINFO;..op
1d310 65 6e 5f 63 75 72 73 6f 72 5f 73 65 74 5f 68 69  en_cursor_set_hi
1d320 6e 74 73 3a 0a 20 20 61 73 73 65 72 74 28 20 4f  nts:.  assert( O
1d330 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 3d 3d 42  PFLAG_BULKCSR==B
1d340 54 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 20 29 3b  TREE_BULKLOAD );
1d350 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41  .  assert( OPFLA
1d360 47 5f 53 45 45 4b 45 51 3d 3d 42 54 52 45 45 5f  G_SEEKEQ==BTREE_
1d370 53 45 45 4b 5f 45 51 20 29 3b 0a 20 20 74 65 73  SEEK_EQ );.  tes
1d380 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 20 26  tcase( pOp->p5 &
1d390 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20   OPFLAG_BULKCSR 
1d3a0 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
1d3b0 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48  _ENABLE_CURSOR_H
1d3c0 49 4e 54 53 0a 20 20 74 65 73 74 63 61 73 65 28  INTS.  testcase(
1d3d0 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41   pOp->p2 & OPFLA
1d3e0 47 5f 53 45 45 4b 45 51 20 29 3b 0a 23 65 6e 64  G_SEEKEQ );.#end
1d3f0 69 66 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65  if.  sqlite3Btre
1d400 65 43 75 72 73 6f 72 48 69 6e 74 46 6c 61 67 73  eCursorHintFlags
1d410 28 70 43 75 72 2d 3e 75 63 2e 70 43 75 72 73 6f  (pCur->uc.pCurso
1d420 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r,.             
1d430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d440 20 20 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50    (pOp->p5 & (OP
1d450 46 4c 41 47 5f 42 55 4c 4b 43 53 52 7c 4f 50 46  FLAG_BULKCSR|OPF
1d460 4c 41 47 5f 53 45 45 4b 45 51 29 29 29 3b 0a 20  LAG_SEEKEQ)));. 
1d470 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
1d480 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1d490 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  r;.  break;.}../
1d4a0 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 45 70  * Opcode: OpenEp
1d4b0 68 65 6d 65 72 61 6c 20 50 31 20 50 32 20 2a 20  hemeral P1 P2 * 
1d4c0 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
1d4d0 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a  s: nColumn=P2.**
1d4e0 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63  .** Open a new c
1d4f0 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20 74 72  ursor P1 to a tr
1d500 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 2e 0a 2a  ansient table..*
1d510 2a 20 54 68 65 20 63 75 72 73 6f 72 20 69 73 20  * The cursor is 
1d520 61 6c 77 61 79 73 20 6f 70 65 6e 65 64 20 72 65  always opened re
1d530 61 64 2f 77 72 69 74 65 20 65 76 65 6e 20 69 66  ad/write even if
1d540 20 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61   .** the main da
1d550 74 61 62 61 73 65 20 69 73 20 72 65 61 64 2d 6f  tabase is read-o
1d560 6e 6c 79 2e 20 20 54 68 65 20 65 70 68 65 6d 65  nly.  The epheme
1d570 72 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 69 73 20  ral.** table is 
1d580 64 65 6c 65 74 65 64 20 61 75 74 6f 6d 61 74 69  deleted automati
1d590 63 61 6c 6c 79 20 77 68 65 6e 20 74 68 65 20 63  cally when the c
1d5a0 75 72 73 6f 72 20 69 73 20 63 6c 6f 73 65 64 2e  ursor is closed.
1d5b0 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65  .**.** P2 is the
1d5c0 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
1d5d0 6e 73 20 69 6e 20 74 68 65 20 65 70 68 65 6d 65  ns in the epheme
1d5e0 72 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68  ral table..** Th
1d5f0 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 73 20  e cursor points 
1d600 74 6f 20 61 20 42 54 72 65 65 20 74 61 62 6c 65  to a BTree table
1d610 20 69 66 20 50 34 3d 3d 30 20 61 6e 64 20 74 6f   if P4==0 and to
1d620 20 61 20 42 54 72 65 65 20 69 6e 64 65 78 0a 2a   a BTree index.*
1d630 2a 20 69 66 20 50 34 20 69 73 20 6e 6f 74 20 30  * if P4 is not 0
1d640 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  .  If P4 is not 
1d650 4e 55 4c 4c 2c 20 69 74 20 70 6f 69 6e 74 73 20  NULL, it points 
1d660 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72  to a KeyInfo str
1d670 75 63 74 75 72 65 0a 2a 2a 20 74 68 61 74 20 64  ucture.** that d
1d680 65 66 69 6e 65 73 20 74 68 65 20 66 6f 72 6d 61  efines the forma
1d690 74 20 6f 66 20 6b 65 79 73 20 69 6e 20 74 68 65  t of keys in the
1d6a0 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68   index..**.** Th
1d6b0 65 20 50 35 20 70 61 72 61 6d 65 74 65 72 20 63  e P5 parameter c
1d6c0 61 6e 20 62 65 20 61 20 6d 61 73 6b 20 6f 66 20  an be a mask of 
1d6d0 74 68 65 20 42 54 52 45 45 5f 2a 20 66 6c 61 67  the BTREE_* flag
1d6e0 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20 69 6e 20  s defined.** in 
1d6f0 62 74 72 65 65 2e 68 2e 20 20 54 68 65 73 65 20  btree.h.  These 
1d700 66 6c 61 67 73 20 63 6f 6e 74 72 6f 6c 20 61 73  flags control as
1d710 70 65 63 74 73 20 6f 66 20 74 68 65 20 6f 70 65  pects of the ope
1d720 72 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65  ration of.** the
1d730 20 62 74 72 65 65 2e 20 20 54 68 65 20 42 54 52   btree.  The BTR
1d740 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20  EE_OMIT_JOURNAL 
1d750 61 6e 64 20 42 54 52 45 45 5f 53 49 4e 47 4c 45  and BTREE_SINGLE
1d760 20 66 6c 61 67 73 20 61 72 65 0a 2a 2a 20 61 64   flags are.** ad
1d770 64 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ded automaticall
1d780 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  y..*/./* Opcode:
1d790 20 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78 20 50   OpenAutoindex P
1d7a0 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  1 P2 * P4 *.** S
1d7b0 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e  ynopsis: nColumn
1d7c0 3d 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  =P2.**.** This o
1d7d0 70 63 6f 64 65 20 77 6f 72 6b 73 20 74 68 65 20  pcode works the 
1d7e0 73 61 6d 65 20 61 73 20 4f 50 5f 4f 70 65 6e 45  same as OP_OpenE
1d7f0 70 68 65 6d 65 72 61 6c 2e 20 20 49 74 20 68 61  phemeral.  It ha
1d800 73 20 61 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74  s a.** different
1d810 20 6e 61 6d 65 20 74 6f 20 64 69 73 74 69 6e 67   name to disting
1d820 75 69 73 68 20 69 74 73 20 75 73 65 2e 20 20 54  uish its use.  T
1d830 61 62 6c 65 73 20 63 72 65 61 74 65 64 20 75 73  ables created us
1d840 69 6e 67 0a 2a 2a 20 62 79 20 74 68 69 73 20 6f  ing.** by this o
1d850 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73  pcode will be us
1d860 65 64 20 66 6f 72 20 61 75 74 6f 6d 61 74 69 63  ed for automatic
1d870 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74 72 61  ally created tra
1d880 6e 73 69 65 6e 74 0a 2a 2a 20 69 6e 64 69 63 65  nsient.** indice
1d890 73 20 69 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f 0a 63  s in joins..*/.c
1d8a0 61 73 65 20 4f 50 5f 4f 70 65 6e 41 75 74 6f 69  ase OP_OpenAutoi
1d8b0 6e 64 65 78 3a 20 0a 63 61 73 65 20 4f 50 5f 4f  ndex: .case OP_O
1d8c0 70 65 6e 45 70 68 65 6d 65 72 61 6c 3a 20 7b 0a  penEphemeral: {.
1d8d0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1d8e0 78 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b  x;.  KeyInfo *pK
1d8f0 65 79 49 6e 66 6f 3b 0a 0a 20 20 73 74 61 74 69  eyInfo;..  stati
1d900 63 20 63 6f 6e 73 74 20 69 6e 74 20 76 66 73 46  c const int vfsF
1d910 6c 61 67 73 20 3d 20 0a 20 20 20 20 20 20 53 51  lags = .      SQ
1d920 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57 52  LITE_OPEN_READWR
1d930 49 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49  ITE |.      SQLI
1d940 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20 7c  TE_OPEN_CREATE |
1d950 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
1d960 45 4e 5f 45 58 43 4c 55 53 49 56 45 20 7c 0a 20  EN_EXCLUSIVE |. 
1d970 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
1d980 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f 53 45 20 7c  _DELETEONCLOSE |
1d990 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
1d9a0 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f 44 42 3b  EN_TRANSIENT_DB;
1d9b0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1d9c0 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  p1>=0 );.  asser
1d9d0 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b  t( pOp->p2>=0 );
1d9e0 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74  .  pCx = allocat
1d9f0 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e  eCursor(p, pOp->
1da00 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c  p1, pOp->p2, -1,
1da10 20 43 55 52 54 59 50 45 5f 42 54 52 45 45 29 3b   CURTYPE_BTREE);
1da20 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20  .  if( pCx==0 ) 
1da30 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
1da40 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  Cx->nullRow = 1;
1da50 0a 20 20 70 43 78 2d 3e 69 73 45 70 68 65 6d 65  .  pCx->isEpheme
1da60 72 61 6c 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20  ral = 1;.  rc = 
1da70 73 71 6c 69 74 65 33 42 74 72 65 65 4f 70 65 6e  sqlite3BtreeOpen
1da80 28 64 62 2d 3e 70 56 66 73 2c 20 30 2c 20 64 62  (db->pVfs, 0, db
1da90 2c 20 26 70 43 78 2d 3e 70 42 74 78 2c 20 0a 20  , &pCx->pBtx, . 
1daa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dab0 20 20 20 20 20 20 20 42 54 52 45 45 5f 4f 4d 49         BTREE_OMI
1dac0 54 5f 4a 4f 55 52 4e 41 4c 20 7c 20 42 54 52 45  T_JOURNAL | BTRE
1dad0 45 5f 53 49 4e 47 4c 45 20 7c 20 70 4f 70 2d 3e  E_SINGLE | pOp->
1dae0 70 35 2c 20 76 66 73 46 6c 61 67 73 29 3b 0a 20  p5, vfsFlags);. 
1daf0 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
1db00 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  OK ){.    rc = s
1db10 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e  qlite3BtreeBegin
1db20 54 72 61 6e 73 28 70 43 78 2d 3e 70 42 74 78 2c  Trans(pCx->pBtx,
1db30 20 31 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72   1);.  }.  if( r
1db40 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
1db50 20 20 20 20 2f 2a 20 49 66 20 61 20 74 72 61 6e      /* If a tran
1db60 73 69 65 6e 74 20 69 6e 64 65 78 20 69 73 20 72  sient index is r
1db70 65 71 75 69 72 65 64 2c 20 63 72 65 61 74 65 20  equired, create 
1db80 69 74 20 62 79 20 63 61 6c 6c 69 6e 67 0a 20 20  it by calling.  
1db90 20 20 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65    ** sqlite3Btre
1dba0 65 43 72 65 61 74 65 54 61 62 6c 65 28 29 20 77  eCreateTable() w
1dbb0 69 74 68 20 74 68 65 20 42 54 52 45 45 5f 42 4c  ith the BTREE_BL
1dbc0 4f 42 4b 45 59 20 66 6c 61 67 20 62 65 66 6f 72  OBKEY flag befor
1dbd0 65 0a 20 20 20 20 2a 2a 20 6f 70 65 6e 69 6e 67  e.    ** opening
1dbe0 20 69 74 2e 20 49 66 20 61 20 74 72 61 6e 73 69   it. If a transi
1dbf0 65 6e 74 20 74 61 62 6c 65 20 69 73 20 72 65 71  ent table is req
1dc00 75 69 72 65 64 2c 20 6a 75 73 74 20 75 73 65 20  uired, just use 
1dc10 74 68 65 0a 20 20 20 20 2a 2a 20 61 75 74 6f 6d  the.    ** autom
1dc20 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64  atically created
1dc30 20 74 61 62 6c 65 20 77 69 74 68 20 72 6f 6f 74   table with root
1dc40 2d 70 61 67 65 20 31 20 28 61 6e 20 42 4c 4f 42  -page 1 (an BLOB
1dc50 5f 49 4e 54 4b 45 59 20 74 61 62 6c 65 29 2e 0a  _INTKEY table)..
1dc60 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 28      */.    if( (
1dc70 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20  pCx->pKeyInfo = 
1dc80 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e  pKeyInfo = pOp->
1dc90 70 34 2e 70 4b 65 79 49 6e 66 6f 29 21 3d 30 20  p4.pKeyInfo)!=0 
1dca0 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 70 67 6e  ){.      int pgn
1dcb0 6f 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  o;.      assert(
1dcc0 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1dcd0 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 20 20  _KEYINFO );.    
1dce0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1dcf0 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 70  reeCreateTable(p
1dd00 43 78 2d 3e 70 42 74 78 2c 20 26 70 67 6e 6f 2c  Cx->pBtx, &pgno,
1dd10 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 7c   BTREE_BLOBKEY |
1dd20 20 70 4f 70 2d 3e 70 35 29 3b 20 0a 20 20 20 20   pOp->p5); .    
1dd30 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1dd40 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 61  _OK ){.        a
1dd50 73 73 65 72 74 28 20 70 67 6e 6f 3d 3d 4d 41 53  ssert( pgno==MAS
1dd60 54 45 52 5f 52 4f 4f 54 2b 31 20 29 3b 0a 20 20  TER_ROOT+1 );.  
1dd70 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4b        assert( pK
1dd80 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29  eyInfo->db==db )
1dd90 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
1dda0 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d  ( pKeyInfo->enc=
1ddb0 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 20 20  =ENC(db) );.    
1ddc0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1ddd0 42 74 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d  BtreeCursor(pCx-
1dde0 3e 70 42 74 78 2c 20 70 67 6e 6f 2c 20 42 54 52  >pBtx, pgno, BTR
1ddf0 45 45 5f 57 52 43 53 52 2c 0a 20 20 20 20 20 20  EE_WRCSR,.      
1de00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de10 20 20 20 20 20 20 20 20 20 20 70 4b 65 79 49 6e            pKeyIn
1de20 66 6f 2c 20 70 43 78 2d 3e 75 63 2e 70 43 75 72  fo, pCx->uc.pCur
1de30 73 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  sor);.      }.  
1de40 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65      pCx->isTable
1de50 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b   = 0;.    }else{
1de60 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
1de70 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70  te3BtreeCursor(p
1de80 43 78 2d 3e 70 42 74 78 2c 20 4d 41 53 54 45 52  Cx->pBtx, MASTER
1de90 5f 52 4f 4f 54 2c 20 42 54 52 45 45 5f 57 52 43  _ROOT, BTREE_WRC
1dea0 53 52 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  SR,.            
1deb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dec0 20 20 30 2c 20 70 43 78 2d 3e 75 63 2e 70 43 75    0, pCx->uc.pCu
1ded0 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 70 43 78  rsor);.      pCx
1dee0 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20  ->isTable = 1;. 
1def0 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72     }.  }.  if( r
1df00 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
1df10 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70  ue_to_error;.  p
1df20 43 78 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20  Cx->isOrdered = 
1df30 28 70 4f 70 2d 3e 70 35 21 3d 42 54 52 45 45 5f  (pOp->p5!=BTREE_
1df40 55 4e 4f 52 44 45 52 45 44 29 3b 0a 20 20 62 72  UNORDERED);.  br
1df50 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1df60 65 3a 20 53 6f 72 74 65 72 4f 70 65 6e 20 50 31  e: SorterOpen P1
1df70 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a   P2 P3 P4 *.**.*
1df80 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f  * This opcode wo
1df90 72 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f 70 65 6e  rks like OP_Open
1dfa0 45 70 68 65 6d 65 72 61 6c 20 65 78 63 65 70 74  Ephemeral except
1dfb0 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73 0a 2a   that it opens.*
1dfc0 2a 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e  * a transient in
1dfd0 64 65 78 20 74 68 61 74 20 69 73 20 73 70 65 63  dex that is spec
1dfe0 69 66 69 63 61 6c 6c 79 20 64 65 73 69 67 6e 65  ifically designe
1dff0 64 20 74 6f 20 73 6f 72 74 20 6c 61 72 67 65 0a  d to sort large.
1e000 2a 2a 20 74 61 62 6c 65 73 20 75 73 69 6e 67 20  ** tables using 
1e010 61 6e 20 65 78 74 65 72 6e 61 6c 20 6d 65 72 67  an external merg
1e020 65 2d 73 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d  e-sort algorithm
1e030 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 72 67 75 6d  ..**.** If argum
1e040 65 6e 74 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65  ent P3 is non-ze
1e050 72 6f 2c 20 74 68 65 6e 20 69 74 20 69 6e 64 69  ro, then it indi
1e060 63 61 74 65 73 20 74 68 61 74 20 74 68 65 20 73  cates that the s
1e070 6f 72 74 65 72 20 6d 61 79 0a 2a 2a 20 61 73 73  orter may.** ass
1e080 75 6d 65 20 74 68 61 74 20 61 20 73 74 61 62 6c  ume that a stabl
1e090 65 20 73 6f 72 74 20 63 6f 6e 73 69 64 65 72 69  e sort consideri
1e0a0 6e 67 20 74 68 65 20 66 69 72 73 74 20 50 33 20  ng the first P3 
1e0b0 66 69 65 6c 64 73 20 6f 66 20 65 61 63 68 0a 2a  fields of each.*
1e0c0 2a 20 6b 65 79 20 69 73 20 73 75 66 66 69 63 69  * key is suffici
1e0d0 65 6e 74 20 74 6f 20 70 72 6f 64 75 63 65 20 74  ent to produce t
1e0e0 68 65 20 72 65 71 75 69 72 65 64 20 72 65 73 75  he required resu
1e0f0 6c 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  lts..*/.case OP_
1e100 53 6f 72 74 65 72 4f 70 65 6e 3a 20 7b 0a 20 20  SorterOpen: {.  
1e110 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b  VdbeCursor *pCx;
1e120 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
1e130 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65  >p1>=0 );.  asse
1e140 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29  rt( pOp->p2>=0 )
1e150 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61  ;.  pCx = alloca
1e160 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
1e170 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31  >p1, pOp->p2, -1
1e180 2c 20 43 55 52 54 59 50 45 5f 53 4f 52 54 45 52  , CURTYPE_SORTER
1e190 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20  );.  if( pCx==0 
1e1a0 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
1e1b0 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d   pCx->pKeyInfo =
1e1c0 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66   pOp->p4.pKeyInf
1e1d0 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 78  o;.  assert( pCx
1e1e0 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d  ->pKeyInfo->db==
1e1f0 64 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  db );.  assert( 
1e200 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65  pCx->pKeyInfo->e
1e210 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20  nc==ENC(db) );. 
1e220 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
1e230 65 53 6f 72 74 65 72 49 6e 69 74 28 64 62 2c 20  eSorterInit(db, 
1e240 70 4f 70 2d 3e 70 33 2c 20 70 43 78 29 3b 0a 20  pOp->p3, pCx);. 
1e250 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
1e260 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1e270 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  r;.  break;.}../
1e280 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71 75 65 6e  * Opcode: Sequen
1e290 63 65 54 65 73 74 20 50 31 20 50 32 20 2a 20 2a  ceTest P1 P2 * *
1e2a0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
1e2b0 69 66 28 20 63 75 72 73 6f 72 5b 50 31 5d 2e 63  if( cursor[P1].c
1e2c0 74 72 2b 2b 20 29 20 70 63 20 3d 20 50 32 0a 2a  tr++ ) pc = P2.*
1e2d0 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 73 6f 72  *.** P1 is a sor
1e2e0 74 65 72 20 63 75 72 73 6f 72 2e 20 49 66 20 74  ter cursor. If t
1e2f0 68 65 20 73 65 71 75 65 6e 63 65 20 63 6f 75 6e  he sequence coun
1e300 74 65 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79  ter is currently
1e310 20 7a 65 72 6f 2c 20 6a 75 6d 70 0a 2a 2a 20 74   zero, jump.** t
1e320 6f 20 50 32 2e 20 52 65 67 61 72 64 6c 65 73 73  o P2. Regardless
1e330 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e   of whether or n
1e340 6f 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  ot the jump is t
1e350 61 6b 65 6e 2c 20 69 6e 63 72 65 6d 65 6e 74 20  aken, increment 
1e360 74 68 65 0a 2a 2a 20 74 68 65 20 73 65 71 75 65  the.** the seque
1e370 6e 63 65 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61  nce value..*/.ca
1e380 73 65 20 4f 50 5f 53 65 71 75 65 6e 63 65 54 65  se OP_SequenceTe
1e390 73 74 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  st: {.  VdbeCurs
1e3a0 6f 72 20 2a 70 43 3b 0a 20 20 61 73 73 65 72 74  or *pC;.  assert
1e3b0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1e3c0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
1e3d0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
1e3e0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
1e3f0 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74    assert( isSort
1e400 65 72 28 70 43 29 20 29 3b 0a 20 20 69 66 28 20  er(pC) );.  if( 
1e410 28 70 43 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 29  (pC->seqCount++)
1e420 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  ==0 ){.    goto 
1e430 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
1e440 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1e450 70 63 6f 64 65 3a 20 4f 70 65 6e 50 73 65 75 64  pcode: OpenPseud
1e460 6f 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  o P1 P2 P3 * *.*
1e470 2a 20 53 79 6e 6f 70 73 69 73 3a 20 50 33 20 63  * Synopsis: P3 c
1e480 6f 6c 75 6d 6e 73 20 69 6e 20 72 5b 50 32 5d 0a  olumns in r[P2].
1e490 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77  **.** Open a new
1e4a0 20 63 75 72 73 6f 72 20 74 68 61 74 20 70 6f 69   cursor that poi
1e4b0 6e 74 73 20 74 6f 20 61 20 66 61 6b 65 20 74 61  nts to a fake ta
1e4c0 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ble that contain
1e4d0 73 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f  s a single.** ro
1e4e0 77 20 6f 66 20 64 61 74 61 2e 20 20 54 68 65 20  w of data.  The 
1e4f0 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 61 74 20  content of that 
1e500 6f 6e 65 20 72 6f 77 20 69 73 20 74 68 65 20 63  one row is the c
1e510 6f 6e 74 65 6e 74 20 6f 66 20 6d 65 6d 6f 72 79  ontent of memory
1e520 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e  .** register P2.
1e530 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
1e540 2c 20 63 75 72 73 6f 72 20 50 31 20 62 65 63 6f  , cursor P1 beco
1e550 6d 65 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72  mes an alias for
1e560 20 74 68 65 20 0a 2a 2a 20 4d 45 4d 5f 42 6c 6f   the .** MEM_Blo
1e570 62 20 63 6f 6e 74 65 6e 74 20 63 6f 6e 74 61 69  b content contai
1e580 6e 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  ned in register 
1e590 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 20 70 73 65 75  P2..**.** A pseu
1e5a0 64 6f 2d 74 61 62 6c 65 20 63 72 65 61 74 65 64  do-table created
1e5b0 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20   by this opcode 
1e5c0 69 73 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20  is used to hold 
1e5d0 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20  a single.** row 
1e5e0 6f 75 74 70 75 74 20 66 72 6f 6d 20 74 68 65 20  output from the 
1e5f0 73 6f 72 74 65 72 20 73 6f 20 74 68 61 74 20 74  sorter so that t
1e600 68 65 20 72 6f 77 20 63 61 6e 20 62 65 20 64 65  he row can be de
1e610 63 6f 6d 70 6f 73 65 64 20 69 6e 74 6f 0a 2a 2a  composed into.**
1e620 20 69 6e 64 69 76 69 64 75 61 6c 20 63 6f 6c 75   individual colu
1e630 6d 6e 73 20 75 73 69 6e 67 20 74 68 65 20 4f 50  mns using the OP
1e640 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 20  _Column opcode. 
1e650 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f   The OP_Column o
1e660 70 63 6f 64 65 0a 2a 2a 20 69 73 20 74 68 65 20  pcode.** is the 
1e670 6f 6e 6c 79 20 63 75 72 73 6f 72 20 6f 70 63 6f  only cursor opco
1e680 64 65 20 74 68 61 74 20 77 6f 72 6b 73 20 77 69  de that works wi
1e690 74 68 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  th a pseudo-tabl
1e6a0 65 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 74  e..**.** P3 is t
1e6b0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65  he number of fie
1e6c0 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  lds in the recor
1e6d0 64 73 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20  ds that will be 
1e6e0 73 74 6f 72 65 64 20 62 79 0a 2a 2a 20 74 68 65  stored by.** the
1e6f0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a   pseudo-table..*
1e700 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 50 73  /.case OP_OpenPs
1e710 65 75 64 6f 3a 20 7b 0a 20 20 56 64 62 65 43 75  eudo: {.  VdbeCu
1e720 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73  rsor *pCx;..  as
1e730 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1e740 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1e750 70 2d 3e 70 33 3e 3d 30 20 29 3b 0a 20 20 70 43  p->p3>=0 );.  pC
1e760 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73  x = allocateCurs
1e770 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  or(p, pOp->p1, p
1e780 4f 70 2d 3e 70 33 2c 20 2d 31 2c 20 43 55 52 54  Op->p3, -1, CURT
1e790 59 50 45 5f 50 53 45 55 44 4f 29 3b 0a 20 20 69  YPE_PSEUDO);.  i
1e7a0 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f  f( pCx==0 ) goto
1e7b0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e   no_mem;.  pCx->
1e7c0 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70  nullRow = 1;.  p
1e7d0 43 78 2d 3e 75 63 2e 70 73 65 75 64 6f 54 61 62  Cx->uc.pseudoTab
1e7e0 6c 65 52 65 67 20 3d 20 70 4f 70 2d 3e 70 32 3b  leReg = pOp->p2;
1e7f0 0a 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20  .  pCx->isTable 
1e800 3d 20 31 3b 0a 20 20 61 73 73 65 72 74 28 20 70  = 1;.  assert( p
1e810 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 62  Op->p5==0 );.  b
1e820 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1e830 64 65 3a 20 43 6c 6f 73 65 20 50 31 20 2a 20 2a  de: Close P1 * *
1e840 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65   * *.**.** Close
1e850 20 61 20 63 75 72 73 6f 72 20 70 72 65 76 69 6f   a cursor previo
1e860 75 73 6c 79 20 6f 70 65 6e 65 64 20 61 73 20 50  usly opened as P
1e870 31 2e 20 20 49 66 20 50 31 20 69 73 20 6e 6f 74  1.  If P1 is not
1e880 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 6f 70  .** currently op
1e890 65 6e 2c 20 74 68 69 73 20 69 6e 73 74 72 75 63  en, this instruc
1e8a0 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 2e  tion is a no-op.
1e8b0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 6f 73  .*/.case OP_Clos
1e8c0 65 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  e: {.  assert( p
1e8d0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1e8e0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1e8f0 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
1e900 46 72 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d  FreeCursor(p, p-
1e910 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 29  >apCsr[pOp->p1])
1e920 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  ;.  p->apCsr[pOp
1e930 2d 3e 70 31 5d 20 3d 20 30 3b 0a 20 20 62 72 65  ->p1] = 0;.  bre
1e940 61 6b 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51  ak;.}..#ifdef SQ
1e950 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55  LITE_ENABLE_COLU
1e960 4d 4e 5f 55 53 45 44 5f 4d 41 53 4b 0a 2f 2a 20  MN_USED_MASK./* 
1e970 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 73 55  Opcode: ColumnsU
1e980 73 65 64 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  sed P1 * * P4 *.
1e990 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
1e9a0 65 20 28 77 68 69 63 68 20 6f 6e 6c 79 20 65 78  e (which only ex
1e9b0 69 73 74 73 20 69 66 20 53 51 4c 69 74 65 20 77  ists if SQLite w
1e9c0 61 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68  as compiled with
1e9d0 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  .** SQLITE_ENABL
1e9e0 45 5f 43 4f 4c 55 4d 4e 5f 55 53 45 44 5f 4d 41  E_COLUMN_USED_MA
1e9f0 53 4b 29 20 69 64 65 6e 74 69 66 69 65 73 20 77  SK) identifies w
1ea00 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  hich columns of 
1ea10 74 68 65 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20  the.** table or 
1ea20 69 6e 64 65 78 20 66 6f 72 20 63 75 72 73 6f 72  index for cursor
1ea30 20 50 31 20 61 72 65 20 75 73 65 64 2e 20 20 50   P1 are used.  P
1ea40 34 20 69 73 20 61 20 36 34 2d 62 69 74 20 69 6e  4 is a 64-bit in
1ea50 74 65 67 65 72 0a 2a 2a 20 28 50 34 5f 49 4e 54  teger.** (P4_INT
1ea60 36 34 29 20 69 6e 20 77 68 69 63 68 20 74 68 65  64) in which the
1ea70 20 66 69 72 73 74 20 36 33 20 62 69 74 73 20 61   first 63 bits a
1ea80 72 65 20 6f 6e 65 20 66 6f 72 20 65 61 63 68 20  re one for each 
1ea90 6f 66 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20  of the.** first 
1eaa0 36 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  63 columns of th
1eab0 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
1eac0 20 74 68 61 74 20 61 72 65 20 61 63 74 75 61 6c   that are actual
1ead0 6c 79 20 75 73 65 64 0a 2a 2a 20 62 79 20 74 68  ly used.** by th
1eae0 65 20 63 75 72 73 6f 72 2e 20 20 54 68 65 20 68  e cursor.  The h
1eaf0 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20 69 73  igh-order bit is
1eb00 20 73 65 74 20 69 66 20 61 6e 79 20 63 6f 6c 75   set if any colu
1eb10 6d 6e 20 61 66 74 65 72 0a 2a 2a 20 74 68 65 20  mn after.** the 
1eb20 36 34 74 68 20 69 73 20 75 73 65 64 2e 0a 2a 2f  64th is used..*/
1eb30 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 73  .case OP_Columns
1eb40 55 73 65 64 3a 20 7b 0a 20 20 56 64 62 65 43 75  Used: {.  VdbeCu
1eb50 72 73 6f 72 20 2a 70 43 3b 0a 20 20 70 43 20 3d  rsor *pC;.  pC =
1eb60 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1eb70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
1eb80 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
1eb90 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70  YPE_BTREE );.  p
1eba0 43 2d 3e 6d 61 73 6b 55 73 65 64 20 3d 20 2a 28  C->maskUsed = *(
1ebb0 75 36 34 2a 29 70 4f 70 2d 3e 70 34 2e 70 49 36  u64*)pOp->p4.pI6
1ebc0 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  4;.  break;.}.#e
1ebd0 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ndif../* Opcode:
1ebe0 20 53 65 65 6b 47 45 20 50 31 20 50 32 20 50 33   SeekGE P1 P2 P3
1ebf0 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
1ec00 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
1ec10 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20  **.** If cursor 
1ec20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20  P1 refers to an 
1ec30 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65  SQL table (B-Tre
1ec40 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65  e that uses inte
1ec50 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75  ger keys), .** u
1ec60 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  se the value in 
1ec70 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20 74  register P3 as t
1ec80 68 65 20 6b 65 79 2e 20 20 49 66 20 63 75 72 73  he key.  If curs
1ec90 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
1eca0 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
1ecb0 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
1ecc0 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
1ecd0 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
1ece0 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
1ecf0 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
1ed00 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
1ed10 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
1ed20 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
1ed30 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  at  it points to
1ed40 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e   the smallest en
1ed50 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
1ed60 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
1ed70 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
1ed80 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65   value. If there
1ed90 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
1eda0 0a 2a 2a 20 67 72 65 61 74 65 72 20 74 68 61 6e  .** greater than
1edb0 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
1edc0 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e   key and P2 is n
1edd0 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75  ot zero, then ju
1ede0 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
1edf0 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 50 31  If the cursor P1
1ee00 20 77 61 73 20 6f 70 65 6e 65 64 20 75 73 69 6e   was opened usin
1ee10 67 20 74 68 65 20 4f 50 46 4c 41 47 5f 53 45 45  g the OPFLAG_SEE
1ee20 4b 45 51 20 66 6c 61 67 2c 20 74 68 65 6e 20 74  KEQ flag, then t
1ee30 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20 77 69  his.** opcode wi
1ee40 6c 6c 20 61 6c 77 61 79 73 20 6c 61 6e 64 20 6f  ll always land o
1ee50 6e 20 61 20 72 65 63 6f 72 64 20 74 68 61 74 20  n a record that 
1ee60 65 71 75 61 6c 6c 79 20 65 71 75 61 6c 73 20 74  equally equals t
1ee70 68 65 20 6b 65 79 2c 20 6f 72 0a 2a 2a 20 65 6c  he key, or.** el
1ee80 73 65 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  se jump immediat
1ee90 65 6c 79 20 74 6f 20 50 32 2e 20 20 57 68 65 6e  ely to P2.  When
1eea0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 4f   the cursor is O
1eeb0 50 46 4c 41 47 5f 53 45 45 4b 45 51 2c 20 74 68  PFLAG_SEEKEQ, th
1eec0 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20 6d 75 73  is.** opcode mus
1eed0 74 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79  t be followed by
1eee0 20 61 6e 20 49 64 78 4c 45 20 6f 70 63 6f 64 65   an IdxLE opcode
1eef0 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 61   with the same a
1ef00 72 67 75 6d 65 6e 74 73 2e 0a 2a 2a 20 54 68 65  rguments..** The
1ef10 20 49 64 78 4c 45 20 6f 70 63 6f 64 65 20 77 69   IdxLE opcode wi
1ef20 6c 6c 20 62 65 20 73 6b 69 70 70 65 64 20 69 66  ll be skipped if
1ef30 20 74 68 69 73 20 6f 70 63 6f 64 65 20 73 75 63   this opcode suc
1ef40 63 65 65 64 73 2c 20 62 75 74 20 74 68 65 0a 2a  ceeds, but the.*
1ef50 2a 20 49 64 78 4c 45 20 6f 70 63 6f 64 65 20 77  * IdxLE opcode w
1ef60 69 6c 6c 20 62 65 20 75 73 65 64 20 6f 6e 20 73  ill be used on s
1ef70 75 62 73 65 71 75 65 6e 74 20 6c 6f 6f 70 20 69  ubsequent loop i
1ef80 74 65 72 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  terations..**.**
1ef90 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
1efa0 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63  ves the cursor c
1efb0 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76  onfigured to mov
1efc0 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64  e in forward ord
1efd0 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  er,.** from the 
1efe0 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64  beginning toward
1eff0 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74   the end.  In ot
1f000 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63  her words, the c
1f010 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66  ursor is.** conf
1f020 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65  igured to use Ne
1f030 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a  xt, not Prev..**
1f040 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
1f050 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53  und, NotFound, S
1f060 65 65 6b 4c 74 2c 20 53 65 65 6b 47 74 2c 20 53  eekLt, SeekGt, S
1f070 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  eekLe.*/./* Opco
1f080 64 65 3a 20 53 65 65 6b 47 54 20 50 31 20 50 32  de: SeekGT P1 P2
1f090 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
1f0a0 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
1f0b0 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73  4].**.** If curs
1f0c0 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
1f0d0 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
1f0e0 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
1f0f0 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
1f100 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  * use the value 
1f110 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
1f120 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73  s a key. If curs
1f130 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
1f140 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
1f150 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
1f160 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
1f170 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
1f180 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
1f190 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
1f1a0 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
1f1b0 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
1f1c0 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
1f1d0 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  at  it points to
1f1e0 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e   the smallest en
1f1f0 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
1f200 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65  greater than the
1f210 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74   key value. If t
1f220 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f  here are no reco
1f230 72 64 73 20 67 72 65 61 74 65 72 20 74 68 61 6e  rds greater than
1f240 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64   .** the key and
1f250 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
1f260 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
1f270 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
1f280 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
1f290 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64  ursor configured
1f2a0 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77   to move in forw
1f2b0 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72  ard order,.** fr
1f2c0 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
1f2d0 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e   toward the end.
1f2e0 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
1f2f0 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a  , the cursor is.
1f300 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  ** configured to
1f310 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50   use Next, not P
1f320 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  rev..**.** See a
1f330 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
1f340 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53 65  ound, SeekLt, Se
1f350 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a  ekGe, SeekLe.*/.
1f360 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c  /* Opcode: SeekL
1f370 54 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 20  T P1 P2 P3 P4 * 
1f380 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
1f390 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
1f3a0 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1f3b0 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74  fers to an SQL t
1f3c0 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61  able (B-Tree tha
1f3d0 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b  t uses integer k
1f3e0 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68  eys), .** use th
1f3f0 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
1f400 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e  ter P3 as a key.
1f410 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1f420 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53  fers .** to an S
1f430 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50  QL index, then P
1f440 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  3 is the first i
1f450 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34  n an array of P4
1f460 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74   registers .** t
1f470 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
1f480 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
1f490 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65  x key. .**.** Re
1f4a0 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20  position cursor 
1f4b0 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70  P1 so that  it p
1f4c0 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72  oints to the lar
1f4d0 67 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20  gest entry that 
1f4e0 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e  .** is less than
1f4f0 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
1f500 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
1f510 72 65 63 6f 72 64 73 20 6c 65 73 73 20 74 68 61  records less tha
1f520 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e  n .** the key an
1f530 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f  d P2 is not zero
1f540 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
1f550 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  2..**.** This op
1f560 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20  code leaves the 
1f570 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65  cursor configure
1f580 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76  d to move in rev
1f590 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66  erse order,.** f
1f5a0 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61  rom the end towa
1f5b0 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  rd the beginning
1f5c0 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
1f5d0 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  s, the cursor is
1f5e0 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74  .** configured t
1f5f0 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20  o use Prev, not 
1f600 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  Next..**.** See 
1f610 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
1f620 46 6f 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20 53  Found, SeekGt, S
1f630 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f  eekGe, SeekLe.*/
1f640 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
1f650 4c 45 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  LE P1 P2 P3 P4 *
1f660 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
1f670 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
1f680 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1f690 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74  fers to an SQL t
1f6a0 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61  able (B-Tree tha
1f6b0 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b  t uses integer k
1f6c0 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68  eys), .** use th
1f6d0 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
1f6e0 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e  ter P3 as a key.
1f6f0 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1f700 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53  fers .** to an S
1f710 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50  QL index, then P
1f720 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  3 is the first i
1f730 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34  n an array of P4
1f740 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74   registers .** t
1f750 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
1f760 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
1f770 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65  x key. .**.** Re
1f780 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20  position cursor 
1f790 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f  P1 so that it po
1f7a0 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67  ints to the larg
1f7b0 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a  est entry that .
1f7c0 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ** is less than 
1f7d0 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
1f7e0 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68  key value. If th
1f7f0 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72  ere are no recor
1f800 64 73 20 0a 2a 2a 20 6c 65 73 73 20 74 68 61 6e  ds .** less than
1f810 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
1f820 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e   key and P2 is n
1f830 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75  ot zero, then ju
1f840 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
1f850 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76  This opcode leav
1f860 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f  es the cursor co
1f870 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65  nfigured to move
1f880 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65   in reverse orde
1f890 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65  r,.** from the e
1f8a0 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20 62 65  nd toward the be
1f8b0 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68  ginning.  In oth
1f8c0 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75  er words, the cu
1f8d0 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69  rsor is.** confi
1f8e0 67 75 72 65 64 20 74 6f 20 75 73 65 20 50 72 65  gured to use Pre
1f8f0 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a  v, not Next..**.
1f900 2a 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f 72  ** If the cursor
1f910 20 50 31 20 77 61 73 20 6f 70 65 6e 65 64 20 75   P1 was opened u
1f920 73 69 6e 67 20 74 68 65 20 4f 50 46 4c 41 47 5f  sing the OPFLAG_
1f930 53 45 45 4b 45 51 20 66 6c 61 67 2c 20 74 68 65  SEEKEQ flag, the
1f940 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65  n this.** opcode
1f950 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 6c 61 6e   will always lan
1f960 64 20 6f 6e 20 61 20 72 65 63 6f 72 64 20 74 68  d on a record th
1f970 61 74 20 65 71 75 61 6c 6c 79 20 65 71 75 61 6c  at equally equal
1f980 73 20 74 68 65 20 6b 65 79 2c 20 6f 72 0a 2a 2a  s the key, or.**
1f990 20 65 6c 73 65 20 6a 75 6d 70 20 69 6d 6d 65 64   else jump immed
1f9a0 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 57  iately to P2.  W
1f9b0 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69  hen the cursor i
1f9c0 73 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 2c  s OPFLAG_SEEKEQ,
1f9d0 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20   this.** opcode 
1f9e0 6d 75 73 74 20 62 65 20 66 6f 6c 6c 6f 77 65 64  must be followed
1f9f0 20 62 79 20 61 6e 20 49 64 78 47 45 20 6f 70 63   by an IdxGE opc
1fa00 6f 64 65 20 77 69 74 68 20 74 68 65 20 73 61 6d  ode with the sam
1fa10 65 20 61 72 67 75 6d 65 6e 74 73 2e 0a 2a 2a 20  e arguments..** 
1fa20 54 68 65 20 49 64 78 47 45 20 6f 70 63 6f 64 65  The IdxGE opcode
1fa30 20 77 69 6c 6c 20 62 65 20 73 6b 69 70 70 65 64   will be skipped
1fa40 20 69 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20   if this opcode 
1fa50 73 75 63 63 65 65 64 73 2c 20 62 75 74 20 74 68  succeeds, but th
1fa60 65 0a 2a 2a 20 49 64 78 47 45 20 6f 70 63 6f 64  e.** IdxGE opcod
1fa70 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 6f  e will be used o
1fa80 6e 20 73 75 62 73 65 71 75 65 6e 74 20 6c 6f 6f  n subsequent loo
1fa90 70 20 69 74 65 72 61 74 69 6f 6e 73 2e 0a 2a 2a  p iterations..**
1faa0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
1fab0 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53  und, NotFound, S
1fac0 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53  eekGt, SeekGe, S
1fad0 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f 50  eekLt.*/.case OP
1fae0 5f 53 65 65 6b 4c 54 3a 20 20 20 20 20 20 20 20  _SeekLT:        
1faf0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1fb00 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 45 3a  .case OP_SeekLE:
1fb10 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
1fb20 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
1fb30 5f 53 65 65 6b 47 45 3a 20 20 20 20 20 20 20 20  _SeekGE:        
1fb40 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1fb50 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 54 3a  .case OP_SeekGT:
1fb60 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70   {       /* jump
1fb70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72  , in3 */.  int r
1fb80 65 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  es;           /*
1fb90 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73 75   Comparison resu
1fba0 6c 74 20 2a 2f 0a 20 20 69 6e 74 20 6f 63 3b 20  lt */.  int oc; 
1fbb0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70             /* Op
1fbc0 63 6f 64 65 20 2a 2f 0a 20 20 56 64 62 65 43 75  code */.  VdbeCu
1fbd0 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20  rsor *pC;    /* 
1fbe0 54 68 65 20 63 75 72 73 6f 72 20 74 6f 20 73 65  The cursor to se
1fbf0 65 6b 20 2a 2f 0a 20 20 55 6e 70 61 63 6b 65 64  ek */.  Unpacked
1fc00 52 65 63 6f 72 64 20 72 3b 20 20 2f 2a 20 54 68  Record r;  /* Th
1fc10 65 20 6b 65 79 20 74 6f 20 73 65 65 6b 20 66 6f  e key to seek fo
1fc20 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c  r */.  int nFiel
1fc30 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  d;        /* Num
1fc40 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 6f  ber of columns o
1fc50 72 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  r fields in the 
1fc60 6b 65 79 20 2a 2f 0a 20 20 69 36 34 20 69 4b 65  key */.  i64 iKe
1fc70 79 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  y;          /* T
1fc80 68 65 20 72 6f 77 69 64 20 77 65 20 61 72 65 20  he rowid we are 
1fc90 74 6f 20 73 65 65 6b 20 74 6f 20 2a 2f 0a 20 20  to seek to */.  
1fca0 69 6e 74 20 65 71 4f 6e 6c 79 3b 20 20 20 20 20  int eqOnly;     
1fcb0 20 20 20 2f 2a 20 4f 6e 6c 79 20 69 6e 74 65 72     /* Only inter
1fcc0 65 73 74 65 64 20 69 6e 20 3d 3d 20 72 65 73 75  ested in == resu
1fcd0 6c 74 73 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74  lts */..  assert
1fce0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1fcf0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
1fd00 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
1fd10 70 4f 70 2d 3e 70 32 21 3d 30 20 29 3b 0a 20 20  pOp->p2!=0 );.  
1fd20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
1fd30 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1fd40 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
1fd50 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
1fd60 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
1fd70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50   );.  assert( OP
1fd80 5f 53 65 65 6b 4c 45 20 3d 3d 20 4f 50 5f 53 65  _SeekLE == OP_Se
1fd90 65 6b 4c 54 2b 31 20 29 3b 0a 20 20 61 73 73 65  ekLT+1 );.  asse
1fda0 72 74 28 20 4f 50 5f 53 65 65 6b 47 45 20 3d 3d  rt( OP_SeekGE ==
1fdb0 20 4f 50 5f 53 65 65 6b 4c 54 2b 32 20 29 3b 0a   OP_SeekLT+2 );.
1fdc0 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
1fdd0 6b 47 54 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54  kGT == OP_SeekLT
1fde0 2b 33 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  +3 );.  assert( 
1fdf0 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b  pC->isOrdered );
1fe00 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75  .  assert( pC->u
1fe10 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  c.pCursor!=0 );.
1fe20 20 20 6f 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f    oc = pOp->opco
1fe30 64 65 3b 0a 20 20 65 71 4f 6e 6c 79 20 3d 20 30  de;.  eqOnly = 0
1fe40 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
1fe50 3d 20 30 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  = 0;.#ifdef SQLI
1fe60 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73  TE_DEBUG.  pC->s
1fe70 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63  eekOp = pOp->opc
1fe80 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 69  ode;.#endif..  i
1fe90 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  f( pC->isTable )
1fea0 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 42 54 52  {.    /* The BTR
1feb0 45 45 5f 53 45 45 4b 5f 45 51 20 66 6c 61 67 20  EE_SEEK_EQ flag 
1fec0 69 73 20 6f 6e 6c 79 20 73 65 74 20 6f 6e 20 69  is only set on i
1fed0 6e 64 65 78 20 63 75 72 73 6f 72 73 20 2a 2f 0a  ndex cursors */.
1fee0 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
1fef0 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 48 61  te3BtreeCursorHa
1ff00 73 48 69 6e 74 28 70 43 2d 3e 75 63 2e 70 43 75  sHint(pC->uc.pCu
1ff10 72 73 6f 72 2c 20 42 54 52 45 45 5f 53 45 45 4b  rsor, BTREE_SEEK
1ff20 5f 45 51 29 3d 3d 30 0a 20 20 20 20 20 20 20 20  _EQ)==0.        
1ff30 20 20 20 20 20 20 7c 7c 20 43 4f 52 52 55 50 54        || CORRUPT
1ff40 5f 44 42 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 54  _DB );..    /* T
1ff50 68 65 20 69 6e 70 75 74 20 76 61 6c 75 65 20 69  he input value i
1ff60 6e 20 50 33 20 6d 69 67 68 74 20 62 65 20 6f 66  n P3 might be of
1ff70 20 61 6e 79 20 74 79 70 65 3a 20 69 6e 74 65 67   any type: integ
1ff80 65 72 2c 20 72 65 61 6c 2c 20 73 74 72 69 6e 67  er, real, string
1ff90 2c 0a 20 20 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f  ,.    ** blob, o
1ffa0 72 20 4e 55 4c 4c 2e 20 20 42 75 74 20 69 74 20  r NULL.  But it 
1ffb0 6e 65 65 64 73 20 74 6f 20 62 65 20 61 6e 20 69  needs to be an i
1ffc0 6e 74 65 67 65 72 20 62 65 66 6f 72 65 20 77 65  nteger before we
1ffd0 20 63 61 6e 20 64 6f 0a 20 20 20 20 2a 2a 20 74   can do.    ** t
1ffe0 68 65 20 73 65 65 6b 2c 20 73 6f 20 63 6f 6e 76  he seek, so conv
1fff0 65 72 74 20 69 74 2e 20 2a 2f 0a 20 20 20 20 70  ert it. */.    p
20000 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
20010 3e 70 33 5d 3b 0a 20 20 20 20 69 66 28 20 28 70  >p3];.    if( (p
20020 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  In3->flags & (ME
20030 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d  M_Int|MEM_Real|M
20040 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74  EM_Str))==MEM_St
20050 72 20 29 7b 0a 20 20 20 20 20 20 61 70 70 6c 79  r ){.      apply
20060 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
20070 70 49 6e 33 2c 20 30 29 3b 0a 20 20 20 20 7d 0a  pIn3, 0);.    }.
20080 20 20 20 20 69 4b 65 79 20 3d 20 73 71 6c 69 74      iKey = sqlit
20090 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
200a0 49 6e 33 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66  In3);..    /* If
200b0 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 63 6f   the P3 value co
200c0 75 6c 64 20 6e 6f 74 20 62 65 20 63 6f 6e 76 65  uld not be conve
200d0 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74  rted into an int
200e0 65 67 65 72 20 77 69 74 68 6f 75 74 0a 20 20 20  eger without.   
200f0 20 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f   ** loss of info
20100 72 6d 61 74 69 6f 6e 2c 20 74 68 65 6e 20 73 70  rmation, then sp
20110 65 63 69 61 6c 20 70 72 6f 63 65 73 73 69 6e 67  ecial processing
20120 20 69 73 20 72 65 71 75 69 72 65 64 2e 2e 2e 20   is required... 
20130 2a 2f 0a 20 20 20 20 69 66 28 20 28 70 49 6e 33  */.    if( (pIn3
20140 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
20150 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69  t)==0 ){.      i
20160 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  f( (pIn3->flags 
20170 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29  & MEM_Real)==0 )
20180 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20  {.        /* If 
20190 74 68 65 20 50 33 20 76 61 6c 75 65 20 63 61 6e  the P3 value can
201a0 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64  not be converted
201b0 20 69 6e 74 6f 20 61 6e 79 20 6b 69 6e 64 20 6f   into any kind o
201c0 66 20 61 20 6e 75 6d 62 65 72 2c 0a 20 20 20 20  f a number,.    
201d0 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20      ** then the 
201e0 73 65 65 6b 20 69 73 20 6e 6f 74 20 70 6f 73 73  seek is not poss
201f0 69 62 6c 65 2c 20 73 6f 20 6a 75 6d 70 20 74 6f  ible, so jump to
20200 20 50 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 56   P2 */.        V
20210 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31  dbeBranchTaken(1
20220 2c 32 29 3b 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  ,2); goto jump_t
20230 6f 5f 70 32 3b 0a 20 20 20 20 20 20 20 20 62 72  o_p2;.        br
20240 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  eak;.      }..  
20250 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 61 70      /* If the ap
20260 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b 65 79  proximation iKey
20270 20 69 73 20 6c 61 72 67 65 72 20 74 68 61 6e 20   is larger than 
20280 74 68 65 20 61 63 74 75 61 6c 20 72 65 61 6c 20  the actual real 
20290 73 65 61 72 63 68 0a 20 20 20 20 20 20 2a 2a 20  search.      ** 
202a0 74 65 72 6d 2c 20 73 75 62 73 74 69 74 75 74 65  term, substitute
202b0 20 3e 3d 20 66 6f 72 20 3e 20 61 6e 64 20 3c 20   >= for > and < 
202c0 66 6f 72 20 3c 3d 2e 20 65 2e 67 2e 20 69 66 20  for <=. e.g. if 
202d0 74 68 65 20 73 65 61 72 63 68 20 74 65 72 6d 0a  the search term.
202e0 20 20 20 20 20 20 2a 2a 20 69 73 20 34 2e 39 20        ** is 4.9 
202f0 61 6e 64 20 74 68 65 20 69 6e 74 65 67 65 72 20  and the integer 
20300 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 35 3a  approximation 5:
20310 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20  .      **.      
20320 2a 2a 20 20 20 20 20 20 20 20 28 78 20 3e 20 20  **        (x >  
20330 34 2e 39 29 20 20 20 20 2d 3e 20 20 20 20 20 28  4.9)    ->     (
20340 78 20 3e 3d 20 35 29 0a 20 20 20 20 20 20 2a 2a  x >= 5).      **
20350 20 20 20 20 20 20 20 20 28 78 20 3c 3d 20 34 2e          (x <= 4.
20360 39 29 20 20 20 20 2d 3e 20 20 20 20 20 28 78 20  9)    ->     (x 
20370 3c 20 20 35 29 0a 20 20 20 20 20 20 2a 2f 0a 20  <  5).      */. 
20380 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 75       if( pIn3->u
20390 2e 72 3c 28 64 6f 75 62 6c 65 29 69 4b 65 79 20  .r<(double)iKey 
203a0 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
203b0 74 28 20 4f 50 5f 53 65 65 6b 47 45 3d 3d 28 4f  t( OP_SeekGE==(O
203c0 50 5f 53 65 65 6b 47 54 2d 31 29 20 29 3b 0a 20  P_SeekGT-1) );. 
203d0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f         assert( O
203e0 50 5f 53 65 65 6b 4c 54 3d 3d 28 4f 50 5f 53 65  P_SeekLT==(OP_Se
203f0 65 6b 4c 45 2d 31 29 20 29 3b 0a 20 20 20 20 20  ekLE-1) );.     
20400 20 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f 53     assert( (OP_S
20410 65 65 6b 4c 45 20 26 20 30 78 30 30 30 31 29 3d  eekLE & 0x0001)=
20420 3d 28 4f 50 5f 53 65 65 6b 47 54 20 26 20 30 78  =(OP_SeekGT & 0x
20430 30 30 30 31 29 20 29 3b 0a 20 20 20 20 20 20 20  0001) );.       
20440 20 69 66 28 20 28 6f 63 20 26 20 30 78 30 30 30   if( (oc & 0x000
20450 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 20 26  1)==(OP_SeekGT &
20460 20 30 78 30 30 30 31 29 20 29 20 6f 63 2d 2d 3b   0x0001) ) oc--;
20470 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
20480 2f 2a 20 49 66 20 74 68 65 20 61 70 70 72 6f 78  /* If the approx
20490 69 6d 61 74 69 6f 6e 20 69 4b 65 79 20 69 73 20  imation iKey is 
204a0 73 6d 61 6c 6c 65 72 20 74 68 61 6e 20 74 68 65  smaller than the
204b0 20 61 63 74 75 61 6c 20 72 65 61 6c 20 73 65 61   actual real sea
204c0 72 63 68 0a 20 20 20 20 20 20 2a 2a 20 74 65 72  rch.      ** ter
204d0 6d 2c 20 73 75 62 73 74 69 74 75 74 65 20 3c 3d  m, substitute <=
204e0 20 66 6f 72 20 3c 20 61 6e 64 20 3e 20 66 6f 72   for < and > for
204f0 20 3e 3d 2e 20 20 2a 2f 0a 20 20 20 20 20 20 65   >=.  */.      e
20500 6c 73 65 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e  lse if( pIn3->u.
20510 72 3e 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29  r>(double)iKey )
20520 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
20530 28 20 4f 50 5f 53 65 65 6b 4c 45 3d 3d 28 4f 50  ( OP_SeekLE==(OP
20540 5f 53 65 65 6b 4c 54 2b 31 29 20 29 3b 0a 20 20  _SeekLT+1) );.  
20550 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50        assert( OP
20560 5f 53 65 65 6b 47 54 3d 3d 28 4f 50 5f 53 65 65  _SeekGT==(OP_See
20570 6b 47 45 2b 31 29 20 29 3b 0a 20 20 20 20 20 20  kGE+1) );.      
20580 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f 53 65    assert( (OP_Se
20590 65 6b 4c 54 20 26 20 30 78 30 30 30 31 29 3d 3d  ekLT & 0x0001)==
205a0 28 4f 50 5f 53 65 65 6b 47 45 20 26 20 30 78 30  (OP_SeekGE & 0x0
205b0 30 30 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20  001) );.        
205c0 69 66 28 20 28 6f 63 20 26 20 30 78 30 30 30 31  if( (oc & 0x0001
205d0 29 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 20 26 20  )==(OP_SeekLT & 
205e0 30 78 30 30 30 31 29 20 29 20 6f 63 2b 2b 3b 0a  0x0001) ) oc++;.
205f0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 0a 20        }.    } . 
20600 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
20610 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
20620 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  ed(pC->uc.pCurso
20630 72 2c 20 30 2c 20 28 75 36 34 29 69 4b 65 79 2c  r, 0, (u64)iKey,
20640 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70   0, &res);.    p
20650 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20  C->movetoTarget 
20660 3d 20 69 4b 65 79 3b 20 20 2f 2a 20 55 73 65 64  = iKey;  /* Used
20670 20 62 79 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f   by OP_Delete */
20680 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c  .    if( rc!=SQL
20690 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
206a0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
206b0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20  o_error;.    }. 
206c0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 46   }else{.    /* F
206d0 6f 72 20 61 20 63 75 72 73 6f 72 20 77 69 74 68  or a cursor with
206e0 20 74 68 65 20 42 54 52 45 45 5f 53 45 45 4b 5f   the BTREE_SEEK_
206f0 45 51 20 68 69 6e 74 2c 20 6f 6e 6c 79 20 74 68  EQ hint, only th
20700 65 20 4f 50 5f 53 65 65 6b 47 45 20 61 6e 64 0a  e OP_SeekGE and.
20710 20 20 20 20 2a 2a 20 4f 50 5f 53 65 65 6b 4c 45      ** OP_SeekLE
20720 20 6f 70 63 6f 64 65 73 20 61 72 65 20 61 6c 6c   opcodes are all
20730 6f 77 65 64 2c 20 61 6e 64 20 74 68 65 73 65 20  owed, and these 
20740 6d 75 73 74 20 62 65 20 69 6d 6d 65 64 69 61 74  must be immediat
20750 65 6c 79 20 66 6f 6c 6c 6f 77 65 64 0a 20 20 20  ely followed.   
20760 20 2a 2a 20 62 79 20 61 6e 20 4f 50 5f 49 64 78   ** by an OP_Idx
20770 47 54 20 6f 72 20 4f 50 5f 49 64 78 4c 54 20 6f  GT or OP_IdxLT o
20780 70 63 6f 64 65 2c 20 72 65 73 70 65 63 74 69 76  pcode, respectiv
20790 65 6c 79 2c 20 77 69 74 68 20 74 68 65 20 73 61  ely, with the sa
207a0 6d 65 20 6b 65 79 2e 0a 20 20 20 20 2a 2f 0a 20  me key..    */. 
207b0 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 42 74     if( sqlite3Bt
207c0 72 65 65 43 75 72 73 6f 72 48 61 73 48 69 6e 74  reeCursorHasHint
207d0 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
207e0 20 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 29 20   BTREE_SEEK_EQ) 
207f0 29 7b 0a 20 20 20 20 20 20 65 71 4f 6e 6c 79 20  ){.      eqOnly 
20800 3d 20 31 3b 0a 20 20 20 20 20 20 61 73 73 65 72  = 1;.      asser
20810 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
20820 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20 70 4f 70  OP_SeekGE || pOp
20830 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65  ->opcode==OP_See
20840 6b 4c 45 20 29 3b 0a 20 20 20 20 20 20 61 73 73  kLE );.      ass
20850 65 72 74 28 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f  ert( pOp[1].opco
20860 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 7c 7c 20  de==OP_IdxLT || 
20870 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f  pOp[1].opcode==O
20880 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20 20  P_IdxGT );.     
20890 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e   assert( pOp[1].
208a0 70 31 3d 3d 70 4f 70 5b 30 5d 2e 70 31 20 29 3b  p1==pOp[0].p1 );
208b0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
208c0 4f 70 5b 31 5d 2e 70 32 3d 3d 70 4f 70 5b 30 5d  Op[1].p2==pOp[0]
208d0 2e 70 32 20 29 3b 0a 20 20 20 20 20 20 61 73 73  .p2 );.      ass
208e0 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 33 3d 3d  ert( pOp[1].p3==
208f0 70 4f 70 5b 30 5d 2e 70 33 20 29 3b 0a 20 20 20  pOp[0].p3 );.   
20900 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31     assert( pOp[1
20910 5d 2e 70 34 2e 69 3d 3d 70 4f 70 5b 30 5d 2e 70  ].p4.i==pOp[0].p
20920 34 2e 69 20 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  4.i );.    }..  
20930 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e    nField = pOp->
20940 70 34 2e 69 3b 0a 20 20 20 20 61 73 73 65 72 74  p4.i;.    assert
20950 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
20960 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 20 20 61  4_INT32 );.    a
20970 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20  ssert( nField>0 
20980 29 3b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66  );.    r.pKeyInf
20990 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  o = pC->pKeyInfo
209a0 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d  ;.    r.nField =
209b0 20 28 75 31 36 29 6e 46 69 65 6c 64 3b 0a 0a 20   (u16)nField;.. 
209c0 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 6c     /* The next l
209d0 69 6e 65 20 6f 66 20 63 6f 64 65 20 63 6f 6d 70  ine of code comp
209e0 75 74 65 73 20 61 73 20 66 6f 6c 6c 6f 77 73 2c  utes as follows,
209f0 20 6f 6e 6c 79 20 66 61 73 74 65 72 3a 0a 20 20   only faster:.  
20a00 20 20 2a 2a 20 20 20 69 66 28 20 6f 63 3d 3d 4f    **   if( oc==O
20a10 50 5f 53 65 65 6b 47 54 20 7c 7c 20 6f 63 3d 3d  P_SeekGT || oc==
20a20 4f 50 5f 53 65 65 6b 4c 45 20 29 7b 0a 20 20 20  OP_SeekLE ){.   
20a30 20 2a 2a 20 20 20 20 20 72 2e 64 65 66 61 75 6c   **     r.defaul
20a40 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20 20 20 2a  t_rc = -1;.    *
20a50 2a 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2a  *   }else{.    *
20a60 2a 20 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f  *     r.default_
20a70 72 63 20 3d 20 2b 31 3b 0a 20 20 20 20 2a 2a 20  rc = +1;.    ** 
20a80 20 20 7d 0a 20 20 20 20 2a 2f 0a 20 20 20 20 72    }.    */.    r
20a90 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 28 28  .default_rc = ((
20aa0 31 20 26 20 28 6f 63 20 2d 20 4f 50 5f 53 65 65  1 & (oc - OP_See
20ab0 6b 4c 54 29 29 20 3f 20 2d 31 20 3a 20 2b 31 29  kLT)) ? -1 : +1)
20ac0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63  ;.    assert( oc
20ad0 21 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20 72  !=OP_SeekGT || r
20ae0 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2d 31 20  .default_rc==-1 
20af0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f  );.    assert( o
20b00 63 21 3d 4f 50 5f 53 65 65 6b 4c 45 20 7c 7c 20  c!=OP_SeekLE || 
20b10 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2d 31  r.default_rc==-1
20b20 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
20b30 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c  oc!=OP_SeekGE ||
20b40 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2b   r.default_rc==+
20b50 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  1 );.    assert(
20b60 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c   oc!=OP_SeekLT |
20b70 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d  | r.default_rc==
20b80 2b 31 20 29 3b 0a 0a 20 20 20 20 72 2e 61 4d 65  +1 );..    r.aMe
20b90 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
20ba0 33 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  3];.#ifdef SQLIT
20bb0 45 5f 44 45 42 55 47 0a 20 20 20 20 7b 20 69 6e  E_DEBUG.    { in
20bc0 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c  t i; for(i=0; i<
20bd0 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61  r.nField; i++) a
20be0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
20bf0 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b  d(&r.aMem[i]) );
20c00 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 72 2e   }.#endif.    r.
20c10 65 71 53 65 65 6e 20 3d 20 30 3b 0a 20 20 20 20  eqSeen = 0;.    
20c20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
20c30 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
20c40 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
20c50 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b  &r, 0, 0, &res);
20c60 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c  .    if( rc!=SQL
20c70 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
20c80 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
20c90 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20  o_error;.    }. 
20ca0 20 20 20 69 66 28 20 65 71 4f 6e 6c 79 20 26 26     if( eqOnly &&
20cb0 20 72 2e 65 71 53 65 65 6e 3d 3d 30 20 29 7b 0a   r.eqSeen==0 ){.
20cc0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72 65        assert( re
20cd0 73 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 67 6f  s!=0 );.      go
20ce0 74 6f 20 73 65 65 6b 5f 6e 6f 74 5f 66 6f 75 6e  to seek_not_foun
20cf0 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70  d;.    }.  }.  p
20d00 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
20d10 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63  o = 0;.  pC->cac
20d20 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
20d30 5f 53 54 41 4c 45 3b 0a 23 69 66 64 65 66 20 53  _STALE;.#ifdef S
20d40 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c  QLITE_TEST.  sql
20d50 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e  ite3_search_coun
20d60 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66  t++;.#endif.  if
20d70 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47 45 20  ( oc>=OP_SeekGE 
20d80 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d  ){  assert( oc==
20d90 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20 6f 63 3d  OP_SeekGE || oc=
20da0 3d 4f 50 5f 53 65 65 6b 47 54 20 29 3b 0a 20 20  =OP_SeekGT );.  
20db0 20 20 69 66 28 20 72 65 73 3c 30 20 7c 7c 20 28    if( res<0 || (
20dc0 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50  res==0 && oc==OP
20dd0 5f 53 65 65 6b 47 54 29 20 29 7b 0a 20 20 20 20  _SeekGT) ){.    
20de0 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20    res = 0;.     
20df0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
20e00 65 65 4e 65 78 74 28 70 43 2d 3e 75 63 2e 70 43  eeNext(pC->uc.pC
20e10 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20  ursor, &res);.  
20e20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
20e30 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
20e40 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
20e50 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
20e60 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 7d    res = 0;.    }
20e70 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
20e80 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65  sert( oc==OP_See
20e90 6b 4c 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kLT || oc==OP_Se
20ea0 65 6b 4c 45 20 29 3b 0a 20 20 20 20 69 66 28 20  ekLE );.    if( 
20eb0 72 65 73 3e 30 20 7c 7c 20 28 72 65 73 3d 3d 30  res>0 || (res==0
20ec0 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c   && oc==OP_SeekL
20ed0 54 29 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20  T) ){.      res 
20ee0 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  = 0;.      rc = 
20ef0 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76  sqlite3BtreePrev
20f00 69 6f 75 73 28 70 43 2d 3e 75 63 2e 70 43 75 72  ious(pC->uc.pCur
20f10 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  sor, &res);.    
20f20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
20f30 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
20f40 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
20f50 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
20f60 2f 2a 20 72 65 73 20 6d 69 67 68 74 20 62 65 20  /* res might be 
20f70 6e 65 67 61 74 69 76 65 20 62 65 63 61 75 73 65  negative because
20f80 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 65 6d   the table is em
20f90 70 74 79 2e 20 20 43 68 65 63 6b 20 74 6f 0a 20  pty.  Check to. 
20fa0 20 20 20 20 20 2a 2a 20 73 65 65 20 69 66 20 74       ** see if t
20fb0 68 69 73 20 69 73 20 74 68 65 20 63 61 73 65 2e  his is the case.
20fc0 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
20fd0 72 65 73 20 3d 20 73 71 6c 69 74 65 33 42 74 72  res = sqlite3Btr
20fe0 65 65 45 6f 66 28 70 43 2d 3e 75 63 2e 70 43 75  eeEof(pC->uc.pCu
20ff0 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  rsor);.    }.  }
21000 0a 73 65 65 6b 5f 6e 6f 74 5f 66 6f 75 6e 64 3a  .seek_not_found:
21010 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
21020 70 32 3e 30 20 29 3b 0a 20 20 56 64 62 65 42 72  p2>0 );.  VdbeBr
21030 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30  anchTaken(res!=0
21040 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29  ,2);.  if( res )
21050 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f  {.    goto jump_
21060 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 20 69  to_p2;.  }else i
21070 66 28 20 65 71 4f 6e 6c 79 20 29 7b 0a 20 20 20  f( eqOnly ){.   
21080 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e   assert( pOp[1].
21090 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54  opcode==OP_IdxLT
210a0 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64   || pOp[1].opcod
210b0 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20  e==OP_IdxGT );. 
210c0 20 20 20 70 4f 70 2b 2b 3b 20 2f 2a 20 53 6b 69     pOp++; /* Ski
210d0 70 20 74 68 65 20 4f 50 5f 49 64 78 4c 74 20 6f  p the OP_IdxLt o
210e0 72 20 4f 50 5f 49 64 78 47 54 20 74 68 61 74 20  r OP_IdxGT that 
210f0 66 6f 6c 6c 6f 77 73 20 2a 2f 0a 20 20 7d 0a 20  follows */.  }. 
21100 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
21110 63 6f 64 65 3a 20 46 6f 75 6e 64 20 50 31 20 50  code: Found P1 P
21120 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
21130 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
21140 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d  P4].**.** If P4=
21150 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72  =0 then register
21160 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62   P3 holds a blob
21170 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20   constructed by 
21180 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a  MakeRecord.  If.
21190 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67  ** P4>0 then reg
211a0 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20  ister P3 is the 
211b0 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69  first of P4 regi
211c0 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20  sters that form 
211d0 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72  an unpacked.** r
211e0 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72  ecord..**.** Cur
211f0 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20  sor P1 is on an 
21200 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66  index btree.  If
21210 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e   the record iden
21220 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e 64  tified by P3 and
21230 20 50 34 0a 2a 2a 20 69 73 20 61 20 70 72 65 66   P4.** is a pref
21240 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20  ix of any entry 
21250 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d  in P1 then a jum
21260 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20  p is made to P2 
21270 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20 6c 65 66  and.** P1 is lef
21280 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68  t pointing at th
21290 65 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79  e matching entry
212a0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65  ..**.** This ope
212b0 72 61 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68  ration leaves th
212c0 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74  e cursor in a st
212d0 61 74 65 20 77 68 65 72 65 20 69 74 20 63 61 6e  ate where it can
212e0 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20   be.** advanced 
212f0 69 6e 20 74 68 65 20 66 6f 72 77 61 72 64 20 64  in the forward d
21300 69 72 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 4e  irection.  The N
21310 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
21320 77 69 6c 6c 20 77 6f 72 6b 2c 0a 2a 2a 20 62 75  will work,.** bu
21330 74 20 6e 6f 74 20 74 68 65 20 50 72 65 76 20 69  t not the Prev i
21340 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
21350 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46  * See also: NotF
21360 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74  ound, NoConflict
21370 2c 20 4e 6f 74 45 78 69 73 74 73 2e 20 53 65 65  , NotExists. See
21380 6b 47 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  kGe.*/./* Opcode
21390 3a 20 4e 6f 74 46 6f 75 6e 64 20 50 31 20 50 32  : NotFound P1 P2
213a0 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
213b0 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
213c0 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d  4].**.** If P4==
213d0 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
213e0 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20  P3 holds a blob 
213f0 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d  constructed by M
21400 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a  akeRecord.  If.*
21410 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69  * P4>0 then regi
21420 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66  ster P3 is the f
21430 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73  irst of P4 regis
21440 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61  ters that form a
21450 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65  n unpacked.** re
21460 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72  cord..** .** Cur
21470 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20  sor P1 is on an 
21480 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66  index btree.  If
21490 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e   the record iden
214a0 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e 64  tified by P3 and
214b0 20 50 34 0a 2a 2a 20 69 73 20 6e 6f 74 20 74 68   P4.** is not th
214c0 65 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20  e prefix of any 
214d0 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e  entry in P1 then
214e0 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20   a jump is made 
214f0 74 6f 20 50 32 2e 20 20 49 66 20 50 31 20 0a 2a  to P2.  If P1 .*
21500 2a 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61  * does contain a
21510 6e 20 65 6e 74 72 79 20 77 68 6f 73 65 20 70 72  n entry whose pr
21520 65 66 69 78 20 6d 61 74 63 68 65 73 20 74 68 65  efix matches the
21530 20 50 33 2f 50 34 20 72 65 63 6f 72 64 20 74 68   P3/P4 record th
21540 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66 61  en control.** fa
21550 6c 6c 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74  lls through to t
21560 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
21570 69 6f 6e 20 61 6e 64 20 50 31 20 69 73 20 6c 65  ion and P1 is le
21580 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74  ft pointing at t
21590 68 65 0a 2a 2a 20 6d 61 74 63 68 69 6e 67 20 65  he.** matching e
215a0 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ntry..**.** This
215b0 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65   operation leave
215c0 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20  s the cursor in 
215d0 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74  a state where it
215e0 20 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61 64   cannot be.** ad
215f0 76 61 6e 63 65 64 20 69 6e 20 65 69 74 68 65 72  vanced in either
21600 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20   direction.  In 
21610 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
21620 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76 0a 2a   Next and Prev.*
21630 2a 20 6f 70 63 6f 64 65 73 20 64 6f 20 6e 6f 74  * opcodes do not
21640 20 77 6f 72 6b 20 61 66 74 65 72 20 74 68 69 73   work after this
21650 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a   operation..**.*
21660 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
21670 64 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20 4e 6f  d, NotExists, No
21680 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a 2f 2a 20 4f  Conflict.*/./* O
21690 70 63 6f 64 65 3a 20 4e 6f 43 6f 6e 66 6c 69 63  pcode: NoConflic
216a0 74 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  t P1 P2 P3 P4 *.
216b0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
216c0 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
216d0 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65  If P4==0 then re
216e0 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20  gister P3 holds 
216f0 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74  a blob construct
21700 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64  ed by MakeRecord
21710 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68  .  If.** P4>0 th
21720 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69  en register P3 i
21730 73 20 74 68 65 20 66 69 72 73 74 20 6f 66 20 50  s the first of P
21740 34 20 72 65 67 69 73 74 65 72 73 20 74 68 61 74  4 registers that
21750 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65   form an unpacke
21760 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20  d.** record..** 
21770 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73  .** Cursor P1 is
21780 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72   on an index btr
21790 65 65 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f  ee.  If the reco
217a0 72 64 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  rd identified by
217b0 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 63 6f   P3 and P4.** co
217c0 6e 74 61 69 6e 73 20 61 6e 79 20 4e 55 4c 4c 20  ntains any NULL 
217d0 76 61 6c 75 65 2c 20 6a 75 6d 70 20 69 6d 6d 65  value, jump imme
217e0 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20  diately to P2.  
217f0 49 66 20 61 6c 6c 20 74 65 72 6d 73 20 6f 66 20  If all terms of 
21800 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20 61 72  the.** record ar
21810 65 20 6e 6f 74 2d 4e 55 4c 4c 20 74 68 65 6e 20  e not-NULL then 
21820 61 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20  a check is done 
21830 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20  to determine if 
21840 61 6e 79 20 72 6f 77 20 69 6e 20 74 68 65 0a 2a  any row in the.*
21850 2a 20 50 31 20 69 6e 64 65 78 20 62 74 72 65 65  * P1 index btree
21860 20 68 61 73 20 61 20 6d 61 74 63 68 69 6e 67 20   has a matching 
21870 6b 65 79 20 70 72 65 66 69 78 2e 20 20 49 66 20  key prefix.  If 
21880 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 61 74  there are no mat
21890 63 68 65 73 2c 20 6a 75 6d 70 0a 2a 2a 20 69 6d  ches, jump.** im
218a0 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
218b0 20 20 49 66 20 74 68 65 72 65 20 69 73 20 61 20    If there is a 
218c0 6d 61 74 63 68 2c 20 66 61 6c 6c 20 74 68 72 6f  match, fall thro
218d0 75 67 68 20 61 6e 64 20 6c 65 61 76 65 20 74 68  ugh and leave th
218e0 65 20 50 31 0a 2a 2a 20 63 75 72 73 6f 72 20 70  e P1.** cursor p
218f0 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 65 20 6d  ointing to the m
21900 61 74 63 68 69 6e 67 20 72 6f 77 2e 0a 2a 2a 0a  atching row..**.
21910 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
21920 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 4f 50 5f  s similar to OP_
21930 4e 6f 74 46 6f 75 6e 64 20 77 69 74 68 20 74 68  NotFound with th
21940 65 20 65 78 63 65 70 74 69 6f 6e 73 20 74 68 61  e exceptions tha
21950 74 20 74 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20  t the.** branch 
21960 69 73 20 61 6c 77 61 79 73 20 74 61 6b 65 6e 20  is always taken 
21970 69 66 20 61 6e 79 20 70 61 72 74 20 6f 66 20 74  if any part of t
21980 68 65 20 73 65 61 72 63 68 20 6b 65 79 20 69 6e  he search key in
21990 70 75 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a  put is NULL..**.
219a0 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f  ** This operatio
219b0 6e 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  n leaves the cur
219c0 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77  sor in a state w
219d0 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62  here it cannot b
219e0 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69 6e  e.** advanced in
219f0 20 65 69 74 68 65 72 20 64 69 72 65 63 74 69 6f   either directio
21a00 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  n.  In other wor
21a10 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64  ds, the Next and
21a20 20 50 72 65 76 0a 2a 2a 20 6f 70 63 6f 64 65 73   Prev.** opcodes
21a30 20 64 6f 20 6e 6f 74 20 77 6f 72 6b 20 61 66 74   do not work aft
21a40 65 72 20 74 68 69 73 20 6f 70 65 72 61 74 69 6f  er this operatio
21a50 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  n..**.** See als
21a60 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 46 6f 75  o: NotFound, Fou
21a70 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 0a 2a 2f  nd, NotExists.*/
21a80 0a 63 61 73 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c  .case OP_NoConfl
21a90 69 63 74 3a 20 20 20 20 20 2f 2a 20 6a 75 6d 70  ict:     /* jump
21aa0 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
21ab0 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20 20 20 20 20  _NotFound:      
21ac0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
21ad0 0a 63 61 73 65 20 4f 50 5f 46 6f 75 6e 64 3a 20  .case OP_Found: 
21ae0 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
21af0 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 61  , in3 */.  int a
21b00 6c 72 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20  lreadyExists;.  
21b10 69 6e 74 20 74 61 6b 65 4a 75 6d 70 3b 0a 20 20  int takeJump;.  
21b20 69 6e 74 20 69 69 3b 0a 20 20 56 64 62 65 43 75  int ii;.  VdbeCu
21b30 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20  rsor *pC;.  int 
21b40 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52  res;.  UnpackedR
21b50 65 63 6f 72 64 20 2a 70 46 72 65 65 3b 0a 20 20  ecord *pFree;.  
21b60 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 2a  UnpackedRecord *
21b70 70 49 64 78 4b 65 79 3b 0a 20 20 55 6e 70 61 63  pIdxKey;.  Unpac
21b80 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 23 69  kedRecord r;..#i
21b90 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
21ba0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
21bb0 64 65 21 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63  de!=OP_NoConflic
21bc0 74 20 29 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e  t ) sqlite3_foun
21bd0 64 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69  d_count++;.#endi
21be0 66 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  f..  assert( pOp
21bf0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
21c00 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
21c10 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
21c20 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
21c30 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
21c40 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
21c50 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
21c60 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
21c70 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f  EBUG.  pC->seekO
21c80 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b  p = pOp->opcode;
21c90 0a 23 65 6e 64 69 66 0a 20 20 70 49 6e 33 20 3d  .#endif.  pIn3 =
21ca0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
21cb0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
21cc0 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
21cd0 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65  _BTREE );.  asse
21ce0 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  rt( pC->uc.pCurs
21cf0 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  or!=0 );.  asser
21d00 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  t( pC->isTable==
21d10 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  0 );.  if( pOp->
21d20 70 34 2e 69 3e 30 20 29 7b 0a 20 20 20 20 72 2e  p4.i>0 ){.    r.
21d30 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70  pKeyInfo = pC->p
21d40 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e  KeyInfo;.    r.n
21d50 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70  Field = (u16)pOp
21d60 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 72 2e 61 4d  ->p4.i;.    r.aM
21d70 65 6d 20 3d 20 70 49 6e 33 3b 0a 23 69 66 64 65  em = pIn3;.#ifde
21d80 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
21d90 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c     for(ii=0; ii<
21da0 72 2e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b  r.nField; ii++){
21db0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d  .      assert( m
21dc0 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65  emIsValid(&r.aMe
21dd0 6d 5b 69 69 5d 29 20 29 3b 0a 20 20 20 20 20 20  m[ii]) );.      
21de0 61 73 73 65 72 74 28 20 28 72 2e 61 4d 65 6d 5b  assert( (r.aMem[
21df0 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ii].flags & MEM_
21e00 5a 65 72 6f 29 3d 3d 30 20 7c 7c 20 72 2e 61 4d  Zero)==0 || r.aM
21e10 65 6d 5b 69 69 5d 2e 6e 3d 3d 30 20 29 3b 0a 20  em[ii].n==0 );. 
21e20 20 20 20 20 20 69 66 28 20 69 69 20 29 20 52 45       if( ii ) RE
21e30 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
21e40 2d 3e 70 33 2b 69 69 2c 20 26 72 2e 61 4d 65 6d  ->p3+ii, &r.aMem
21e50 5b 69 69 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e  [ii]);.    }.#en
21e60 64 69 66 0a 20 20 20 20 70 49 64 78 4b 65 79 20  dif.    pIdxKey 
21e70 3d 20 26 72 3b 0a 20 20 20 20 70 46 72 65 65 20  = &r;.    pFree 
21e80 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  = 0;.  }else{.  
21e90 20 20 70 46 72 65 65 20 3d 20 70 49 64 78 4b 65    pFree = pIdxKe
21ea0 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  y = sqlite3VdbeA
21eb0 6c 6c 6f 63 55 6e 70 61 63 6b 65 64 52 65 63 6f  llocUnpackedReco
21ec0 72 64 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 29  rd(pC->pKeyInfo)
21ed0 3b 0a 20 20 20 20 69 66 28 20 70 49 64 78 4b 65  ;.    if( pIdxKe
21ee0 79 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  y==0 ) goto no_m
21ef0 65 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  em;.    assert( 
21f00 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
21f10 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 28 76  M_Blob );.    (v
21f20 6f 69 64 29 45 78 70 61 6e 64 42 6c 6f 62 28 70  oid)ExpandBlob(p
21f30 49 6e 33 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  In3);.    sqlite
21f40 33 56 64 62 65 52 65 63 6f 72 64 55 6e 70 61 63  3VdbeRecordUnpac
21f50 6b 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20  k(pC->pKeyInfo, 
21f60 70 49 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a  pIn3->n, pIn3->z
21f70 2c 20 70 49 64 78 4b 65 79 29 3b 0a 20 20 7d 0a  , pIdxKey);.  }.
21f80 20 20 70 49 64 78 4b 65 79 2d 3e 64 65 66 61 75    pIdxKey->defau
21f90 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 74 61 6b  lt_rc = 0;.  tak
21fa0 65 4a 75 6d 70 20 3d 20 30 3b 0a 20 20 69 66 28  eJump = 0;.  if(
21fb0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
21fc0 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 29 7b 0a 20  _NoConflict ){. 
21fd0 20 20 20 2f 2a 20 46 6f 72 20 74 68 65 20 4f 50     /* For the OP
21fe0 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 6f 70 63 6f  _NoConflict opco
21ff0 64 65 2c 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  de, take the jum
22000 70 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65 0a  p if any of the.
22010 20 20 20 20 2a 2a 20 69 6e 70 75 74 20 66 69 65      ** input fie
22020 6c 64 73 20 61 72 65 20 4e 55 4c 4c 2c 20 73 69  lds are NULL, si
22030 6e 63 65 20 61 6e 79 20 6b 65 79 20 77 69 74 68  nce any key with
22040 20 61 20 4e 55 4c 4c 20 77 69 6c 6c 20 6e 6f 74   a NULL will not
22050 0a 20 20 20 20 2a 2a 20 63 6f 6e 66 6c 69 63 74  .    ** conflict
22060 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69 69 3d 30   */.    for(ii=0
22070 3b 20 69 69 3c 70 49 64 78 4b 65 79 2d 3e 6e 46  ; ii<pIdxKey->nF
22080 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20  ield; ii++){.   
22090 20 20 20 69 66 28 20 70 49 64 78 4b 65 79 2d 3e     if( pIdxKey->
220a0 61 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67 73 20 26  aMem[ii].flags &
220b0 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
220c0 20 20 20 20 20 74 61 6b 65 4a 75 6d 70 20 3d 20       takeJump = 
220d0 31 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  1;.        break
220e0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
220f0 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
22100 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
22110 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75  acked(pC->uc.pCu
22120 72 73 6f 72 2c 20 70 49 64 78 4b 65 79 2c 20 30  rsor, pIdxKey, 0
22130 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 69 66  , 0, &res);.  if
22140 28 20 70 46 72 65 65 20 29 20 73 71 6c 69 74 65  ( pFree ) sqlite
22150 33 44 62 46 72 65 65 4e 4e 28 64 62 2c 20 70 46  3DbFreeNN(db, pF
22160 72 65 65 29 3b 0a 20 20 69 66 28 20 72 63 21 3d  ree);.  if( rc!=
22170 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
22180 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
22190 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20  to_error;.  }.  
221a0 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d  pC->seekResult =
221b0 20 72 65 73 3b 0a 20 20 61 6c 72 65 61 64 79 45   res;.  alreadyE
221c0 78 69 73 74 73 20 3d 20 28 72 65 73 3d 3d 30 29  xists = (res==0)
221d0 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
221e0 3d 20 31 2d 61 6c 72 65 61 64 79 45 78 69 73 74  = 1-alreadyExist
221f0 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65  s;.  pC->deferre
22200 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70  dMoveto = 0;.  p
22210 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
22220 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
22230 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
22240 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a 20 20 20  =OP_Found ){.   
22250 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
22260 28 61 6c 72 65 61 64 79 45 78 69 73 74 73 21 3d  (alreadyExists!=
22270 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 61 6c  0,2);.    if( al
22280 72 65 61 64 79 45 78 69 73 74 73 20 29 20 67 6f  readyExists ) go
22290 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
222a0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65   }else{.    Vdbe
222b0 42 72 61 6e 63 68 54 61 6b 65 6e 28 74 61 6b 65  BranchTaken(take
222c0 4a 75 6d 70 7c 7c 61 6c 72 65 61 64 79 45 78 69  Jump||alreadyExi
222d0 73 74 73 3d 3d 30 2c 32 29 3b 0a 20 20 20 20 69  sts==0,2);.    i
222e0 66 28 20 74 61 6b 65 4a 75 6d 70 20 7c 7c 20 21  f( takeJump || !
222f0 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 29 20  alreadyExists ) 
22300 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
22310 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
22320 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
22330 52 6f 77 69 64 20 50 31 20 50 32 20 50 33 20 2a  Rowid P1 P2 P3 *
22340 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
22350 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a  intkey=r[P3].**.
22360 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64  ** P1 is the ind
22370 65 78 20 6f 66 20 61 20 63 75 72 73 6f 72 20 6f  ex of a cursor o
22380 70 65 6e 20 6f 6e 20 61 6e 20 53 51 4c 20 74 61  pen on an SQL ta
22390 62 6c 65 20 62 74 72 65 65 20 28 77 69 74 68 20  ble btree (with 
223a0 69 6e 74 65 67 65 72 0a 2a 2a 20 6b 65 79 73 29  integer.** keys)
223b0 2e 20 20 49 66 20 72 65 67 69 73 74 65 72 20 50  .  If register P
223c0 33 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61  3 does not conta
223d0 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72  in an integer or
223e0 20 69 66 20 50 31 20 64 6f 65 73 20 6e 6f 74 0a   if P1 does not.
223f0 2a 2a 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63  ** contain a rec
22400 6f 72 64 20 77 69 74 68 20 72 6f 77 69 64 20 50  ord with rowid P
22410 33 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65  3 then jump imme
22420 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20  diately to P2.  
22430 0a 2a 2a 20 4f 72 2c 20 69 66 20 50 32 20 69 73  .** Or, if P2 is
22440 20 30 2c 20 72 61 69 73 65 20 61 6e 20 53 51 4c   0, raise an SQL
22450 49 54 45 5f 43 4f 52 52 55 50 54 20 65 72 72 6f  ITE_CORRUPT erro
22460 72 2e 20 49 66 20 50 31 20 64 6f 65 73 20 63 6f  r. If P1 does co
22470 6e 74 61 69 6e 0a 2a 2a 20 61 20 72 65 63 6f 72  ntain.** a recor
22480 64 20 77 69 74 68 20 72 6f 77 69 64 20 50 33 20  d with rowid P3 
22490 74 68 65 6e 20 0a 2a 2a 20 6c 65 61 76 65 20 74  then .** leave t
224a0 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69  he cursor pointi
224b0 6e 67 20 61 74 20 74 68 61 74 20 72 65 63 6f 72  ng at that recor
224c0 64 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75  d and fall throu
224d0 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 0a 2a  gh to the next.*
224e0 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  * instruction..*
224f0 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 45  *.** The OP_NotE
22500 78 69 73 74 73 20 6f 70 63 6f 64 65 20 70 65 72  xists opcode per
22510 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f  forms the same o
22520 70 65 72 61 74 69 6f 6e 2c 20 62 75 74 20 77 69  peration, but wi
22530 74 68 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 0a  th OP_NotExists.
22540 2a 2a 20 74 68 65 20 50 33 20 72 65 67 69 73 74  ** the P3 regist
22550 65 72 20 6d 75 73 74 20 62 65 20 67 75 61 72 61  er must be guara
22560 6e 74 65 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e  nteed to contain
22570 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75   an integer valu
22580 65 2e 20 20 57 69 74 68 20 74 68 69 73 0a 2a 2a  e.  With this.**
22590 20 6f 70 63 6f 64 65 2c 20 72 65 67 69 73 74 65   opcode, registe
225a0 72 20 50 33 20 6d 69 67 68 74 20 6e 6f 74 20 63  r P3 might not c
225b0 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65  ontain an intege
225c0 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f  r..**.** The OP_
225d0 4e 6f 74 46 6f 75 6e 64 20 6f 70 63 6f 64 65 20  NotFound opcode 
225e0 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d  performs the sam
225f0 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e 20 69  e operation on i
22600 6e 64 65 78 20 62 74 72 65 65 73 0a 2a 2a 20 28  ndex btrees.** (
22610 77 69 74 68 20 61 72 62 69 74 72 61 72 79 20 6d  with arbitrary m
22620 75 6c 74 69 2d 76 61 6c 75 65 20 6b 65 79 73 29  ulti-value keys)
22630 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
22640 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
22650 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65  ursor in a state
22660 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74   where it cannot
22670 20 62 65 20 61 64 76 61 6e 63 65 64 0a 2a 2a 20   be advanced.** 
22680 69 6e 20 65 69 74 68 65 72 20 64 69 72 65 63 74  in either direct
22690 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ion.  In other w
226a0 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61  ords, the Next a
226b0 6e 64 20 50 72 65 76 20 6f 70 63 6f 64 65 73 20  nd Prev opcodes 
226c0 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b  will.** not work
226d0 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 69 73 20   following this 
226e0 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65  opcode..**.** Se
226f0 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
22700 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c  otFound, NoConfl
22710 69 63 74 2c 20 53 65 65 6b 52 6f 77 69 64 0a 2a  ict, SeekRowid.*
22720 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  /./* Opcode: Not
22730 45 78 69 73 74 73 20 50 31 20 50 32 20 50 33 20  Exists P1 P2 P3 
22740 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
22750 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a   intkey=r[P3].**
22760 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e  .** P1 is the in
22770 64 65 78 20 6f 66 20 61 20 63 75 72 73 6f 72 20  dex of a cursor 
22780 6f 70 65 6e 20 6f 6e 20 61 6e 20 53 51 4c 20 74  open on an SQL t
22790 61 62 6c 65 20 62 74 72 65 65 20 28 77 69 74 68  able btree (with
227a0 20 69 6e 74 65 67 65 72 0a 2a 2a 20 6b 65 79 73   integer.** keys
227b0 29 2e 20 20 50 33 20 69 73 20 61 6e 20 69 6e 74  ).  P3 is an int
227c0 65 67 65 72 20 72 6f 77 69 64 2e 20 20 49 66 20  eger rowid.  If 
227d0 50 31 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74  P1 does not cont
227e0 61 69 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74  ain a record wit
227f0 68 0a 2a 2a 20 72 6f 77 69 64 20 50 33 20 74 68  h.** rowid P3 th
22800 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  en jump immediat
22810 65 6c 79 20 74 6f 20 50 32 2e 20 20 4f 72 2c 20  ely to P2.  Or, 
22820 69 66 20 50 32 20 69 73 20 30 2c 20 72 61 69 73  if P2 is 0, rais
22830 65 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 43  e an.** SQLITE_C
22840 4f 52 52 55 50 54 20 65 72 72 6f 72 2e 20 49 66  ORRUPT error. If
22850 20 50 31 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e   P1 does contain
22860 20 61 20 72 65 63 6f 72 64 20 77 69 74 68 20 72   a record with r
22870 6f 77 69 64 20 50 33 20 74 68 65 6e 20 0a 2a 2a  owid P3 then .**
22880 20 6c 65 61 76 65 20 74 68 65 20 63 75 72 73 6f   leave the curso
22890 72 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68  r pointing at th
228a0 61 74 20 72 65 63 6f 72 64 20 61 6e 64 20 66 61  at record and fa
228b0 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
228c0 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75  e next.** instru
228d0 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ction..**.** The
228e0 20 4f 50 5f 53 65 65 6b 52 6f 77 69 64 20 6f 70   OP_SeekRowid op
228f0 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74 68  code performs th
22900 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e  e same operation
22910 20 62 75 74 20 61 6c 73 6f 20 61 6c 6c 6f 77 73   but also allows
22920 20 74 68 65 0a 2a 2a 20 50 33 20 72 65 67 69 73   the.** P3 regis
22930 74 65 72 20 74 6f 20 63 6f 6e 74 61 69 6e 20 61  ter to contain a
22940 20 6e 6f 6e 2d 69 6e 74 65 67 65 72 20 76 61 6c   non-integer val
22950 75 65 2c 20 69 6e 20 77 68 69 63 68 20 63 61 73  ue, in which cas
22960 65 20 74 68 65 20 6a 75 6d 70 20 69 73 0a 2a 2a  e the jump is.**
22970 20 61 6c 77 61 79 73 20 74 61 6b 65 6e 2e 20 20   always taken.  
22980 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 71 75  This opcode requ
22990 69 72 65 73 20 74 68 61 74 20 50 33 20 61 6c 77  ires that P3 alw
229a0 61 79 73 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69  ays contain an i
229b0 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68  nteger..**.** Th
229c0 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 6f 70  e OP_NotFound op
229d0 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74 68  code performs th
229e0 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e  e same operation
229f0 20 6f 6e 20 69 6e 64 65 78 20 62 74 72 65 65 73   on index btrees
22a00 0a 2a 2a 20 28 77 69 74 68 20 61 72 62 69 74 72  .** (with arbitr
22a10 61 72 79 20 6d 75 6c 74 69 2d 76 61 6c 75 65 20  ary multi-value 
22a20 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  keys)..**.** Thi
22a30 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20  s opcode leaves 
22a40 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20  the cursor in a 
22a50 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63  state where it c
22a60 61 6e 6e 6f 74 20 62 65 20 61 64 76 61 6e 63 65  annot be advance
22a70 64 0a 2a 2a 20 69 6e 20 65 69 74 68 65 72 20 64  d.** in either d
22a80 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74  irection.  In ot
22a90 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e  her words, the N
22aa0 65 78 74 20 61 6e 64 20 50 72 65 76 20 6f 70 63  ext and Prev opc
22ab0 6f 64 65 73 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74  odes will.** not
22ac0 20 77 6f 72 6b 20 66 6f 6c 6c 6f 77 69 6e 67 20   work following 
22ad0 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a  this opcode..**.
22ae0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
22af0 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f  nd, NotFound, No
22b00 43 6f 6e 66 6c 69 63 74 2c 20 53 65 65 6b 52 6f  Conflict, SeekRo
22b10 77 69 64 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  wid.*/.case OP_S
22b20 65 65 6b 52 6f 77 69 64 3a 20 7b 20 20 20 20 20  eekRowid: {     
22b30 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
22b40 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
22b50 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
22b60 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65  *pCrsr;.  int re
22b70 73 3b 0a 20 20 75 36 34 20 69 4b 65 79 3b 0a 0a  s;.  u64 iKey;..
22b80 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
22b90 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28  Op->p3];.  if( (
22ba0 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
22bb0 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20  M_Int)==0 ){.   
22bc0 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
22bd0 49 6e 33 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f  In3, SQLITE_AFF_
22be0 4e 55 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e  NUMERIC, encodin
22bf0 67 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e  g);.    if( (pIn
22c00 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  3->flags & MEM_I
22c10 6e 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75  nt)==0 ) goto ju
22c20 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
22c30 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
22c40 69 6e 74 6f 20 4f 50 5f 4e 6f 74 45 78 69 73 74  into OP_NotExist
22c50 73 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74  s */.case OP_Not
22c60 45 78 69 73 74 73 3a 20 20 20 20 20 20 20 20 20  Exists:         
22c70 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
22c80 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
22c90 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65  pOp->p3];.  asse
22ca0 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  rt( pIn3->flags 
22cb0 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61  & MEM_Int );.  a
22cc0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
22cd0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
22ce0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
22cf0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
22d00 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
22d10 43 21 3d 30 20 29 3b 0a 23 69 66 64 65 66 20 53  C!=0 );.#ifdef S
22d20 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43  QLITE_DEBUG.  pC
22d30 2d 3e 73 65 65 6b 4f 70 20 3d 20 30 3b 0a 23 65  ->seekOp = 0;.#e
22d40 6e 64 69 66 0a 20 20 61 73 73 65 72 74 28 20 70  ndif.  assert( p
22d50 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
22d60 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
22d70 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
22d80 52 45 45 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  REE );.  pCrsr =
22d90 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b   pC->uc.pCursor;
22da0 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72  .  assert( pCrsr
22db0 21 3d 30 20 29 3b 0a 20 20 72 65 73 20 3d 20 30  !=0 );.  res = 0
22dc0 3b 0a 20 20 69 4b 65 79 20 3d 20 70 49 6e 33 2d  ;.  iKey = pIn3-
22dd0 3e 75 2e 69 3b 0a 20 20 72 63 20 3d 20 73 71 6c  >u.i;.  rc = sql
22de0 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
22df0 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20 30  npacked(pCrsr, 0
22e00 2c 20 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29  , iKey, 0, &res)
22e10 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d  ;.  assert( rc==
22e20 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 65 73  SQLITE_OK || res
22e30 3d 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 6d 6f 76  ==0 );.  pC->mov
22e40 65 74 6f 54 61 72 67 65 74 20 3d 20 69 4b 65 79  etoTarget = iKey
22e50 3b 20 20 2f 2a 20 55 73 65 64 20 62 79 20 4f 50  ;  /* Used by OP
22e60 5f 44 65 6c 65 74 65 20 2a 2f 0a 20 20 70 43 2d  _Delete */.  pC-
22e70 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20  >nullRow = 0;.  
22e80 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
22e90 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
22ea0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
22eb0 65 74 6f 20 3d 20 30 3b 0a 20 20 56 64 62 65 42  eto = 0;.  VdbeB
22ec0 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d  ranchTaken(res!=
22ed0 30 2c 32 29 3b 0a 20 20 70 43 2d 3e 73 65 65 6b  0,2);.  pC->seek
22ee0 52 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20  Result = res;.  
22ef0 69 66 28 20 72 65 73 21 3d 30 20 29 7b 0a 20 20  if( res!=0 ){.  
22f00 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
22f10 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 20 20 69  LITE_OK );.    i
22f20 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b  f( pOp->p2==0 ){
22f30 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
22f40 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b  TE_CORRUPT_BKPT;
22f50 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
22f60 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
22f70 32 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69  2;.    }.  }.  i
22f80 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
22f90 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
22fa0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
22fb0 4f 70 63 6f 64 65 3a 20 53 65 71 75 65 6e 63 65  Opcode: Sequence
22fc0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
22fd0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
22fe0 63 75 72 73 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b  cursor[P1].ctr++
22ff0 0a 2a 2a 0a 2a 2a 20 46 69 6e 64 20 74 68 65 20  .**.** Find the 
23000 6e 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20 73  next available s
23010 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 66  equence number f
23020 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a  or cursor P1..**
23030 20 57 72 69 74 65 20 74 68 65 20 73 65 71 75 65   Write the seque
23040 6e 63 65 20 6e 75 6d 62 65 72 20 69 6e 74 6f 20  nce number into 
23050 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20  register P2..** 
23060 54 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d  The sequence num
23070 62 65 72 20 6f 6e 20 74 68 65 20 63 75 72 73 6f  ber on the curso
23080 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  r is incremented
23090 20 61 66 74 65 72 20 74 68 69 73 0a 2a 2a 20 69   after this.** i
230a0 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f  nstruction.  .*/
230b0 0a 63 61 73 65 20 4f 50 5f 53 65 71 75 65 6e 63  .case OP_Sequenc
230c0 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  e: {           /
230d0 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73 65  * out2 */.  asse
230e0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
230f0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
23100 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
23110 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  ( p->apCsr[pOp->
23120 70 31 5d 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  p1]!=0 );.  asse
23130 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  rt( p->apCsr[pOp
23140 2d 3e 70 31 5d 2d 3e 65 43 75 72 54 79 70 65 21  ->p1]->eCurType!
23150 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20 29 3b  =CURTYPE_VTAB );
23160 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
23170 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
23180 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
23190 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
231a0 5d 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20  ]->seqCount++;. 
231b0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f   break;.}.../* O
231c0 70 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69 64 20  pcode: NewRowid 
231d0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
231e0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
231f0 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 47 65 74 20  rowid.**.** Get 
23200 61 20 6e 65 77 20 69 6e 74 65 67 65 72 20 72 65  a new integer re
23210 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b  cord number (a.k
23220 2e 61 20 22 72 6f 77 69 64 22 29 20 75 73 65 64  .a "rowid") used
23230 20 61 73 20 74 68 65 20 6b 65 79 20 74 6f 20 61   as the key to a
23240 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72   table..** The r
23250 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20  ecord number is 
23260 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75  not previously u
23270 73 65 64 20 61 73 20 61 20 6b 65 79 20 69 6e 20  sed as a key in 
23280 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
23290 74 61 62 6c 65 20 74 68 61 74 20 63 75 72 73 6f  table that curso
232a0 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20  r P1 points to. 
232b0 20 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20   The new record 
232c0 6e 75 6d 62 65 72 20 69 73 20 77 72 69 74 74 65  number is writte
232d0 6e 0a 2a 2a 20 77 72 69 74 74 65 6e 20 74 6f 20  n.** written to 
232e0 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
232f0 2a 2a 20 49 66 20 50 33 3e 30 20 74 68 65 6e 20  ** If P3>0 then 
23300 50 33 20 69 73 20 61 20 72 65 67 69 73 74 65 72  P3 is a register
23310 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61   in the root fra
23320 6d 65 20 6f 66 20 74 68 69 73 20 56 44 42 45 20  me of this VDBE 
23330 74 68 61 74 20 68 6f 6c 64 73 20 0a 2a 2a 20 74  that holds .** t
23340 68 65 20 6c 61 72 67 65 73 74 20 70 72 65 76 69  he largest previ
23350 6f 75 73 6c 79 20 67 65 6e 65 72 61 74 65 64 20  ously generated 
23360 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 4e  record number. N
23370 6f 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d  o new record num
23380 62 65 72 73 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f  bers are.** allo
23390 77 65 64 20 74 6f 20 62 65 20 6c 65 73 73 20 74  wed to be less t
233a0 68 61 6e 20 74 68 69 73 20 76 61 6c 75 65 2e 20  han this value. 
233b0 57 68 65 6e 20 74 68 69 73 20 76 61 6c 75 65 20  When this value 
233c0 72 65 61 63 68 65 73 20 69 74 73 20 6d 61 78 69  reaches its maxi
233d0 6d 75 6d 2c 20 0a 2a 2a 20 61 6e 20 53 51 4c 49  mum, .** an SQLI
233e0 54 45 5f 46 55 4c 4c 20 65 72 72 6f 72 20 69 73  TE_FULL error is
233f0 20 67 65 6e 65 72 61 74 65 64 2e 20 54 68 65 20   generated. The 
23400 50 33 20 72 65 67 69 73 74 65 72 20 69 73 20 75  P3 register is u
23410 70 64 61 74 65 64 20 77 69 74 68 20 74 68 65 20  pdated with the 
23420 27 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 72  '.** generated r
23430 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 54 68  ecord number. Th
23440 69 73 20 50 33 20 6d 65 63 68 61 6e 69 73 6d 20  is P3 mechanism 
23450 69 73 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20  is used to help 
23460 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a  implement the.**
23470 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66   AUTOINCREMENT f
23480 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20  eature..*/.case 
23490 4f 50 5f 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20  OP_NewRowid: {  
234a0 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
234b0 20 2a 2f 0a 20 20 69 36 34 20 76 3b 20 20 20 20   */.  i64 v;    
234c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
234d0 54 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f  The new rowid */
234e0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
234f0 43 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72  C;        /* Cur
23500 73 6f 72 20 6f 66 20 74 61 62 6c 65 20 74 6f 20  sor of table to 
23510 67 65 74 20 74 68 65 20 6e 65 77 20 72 6f 77 69  get the new rowi
23520 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20  d */.  int res; 
23530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23540 20 52 65 73 75 6c 74 20 6f 66 20 61 6e 20 73 71   Result of an sq
23550 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 29  lite3BtreeLast()
23560 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 20 20   */.  int cnt;  
23570 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23580 43 6f 75 6e 74 65 72 20 74 6f 20 6c 69 6d 69 74  Counter to limit
23590 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73   the number of s
235a0 65 61 72 63 68 65 73 20 2a 2f 0a 20 20 4d 65 6d  earches */.  Mem
235b0 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20   *pMem;         
235c0 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
235d0 68 6f 6c 64 69 6e 67 20 6c 61 72 67 65 73 74 20  holding largest 
235e0 72 6f 77 69 64 20 66 6f 72 20 41 55 54 4f 49 4e  rowid for AUTOIN
235f0 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 56 64 62  CREMENT */.  Vdb
23600 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20  eFrame *pFrame; 
23610 20 20 20 20 2f 2a 20 52 6f 6f 74 20 66 72 61 6d      /* Root fram
23620 65 20 6f 66 20 56 44 42 45 20 2a 2f 0a 0a 20 20  e of VDBE */..  
23630 76 20 3d 20 30 3b 0a 20 20 72 65 73 20 3d 20 30  v = 0;.  res = 0
23640 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ;.  pOut = out2P
23650 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
23660 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
23670 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
23680 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
23690 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
236a0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
236b0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
236c0 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
236d0 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
236e0 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28  REE );.  assert(
236f0 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21   pC->uc.pCursor!
23700 3d 30 20 29 3b 0a 20 20 7b 0a 20 20 20 20 2f 2a  =0 );.  {.    /*
23710 20 54 68 65 20 6e 65 78 74 20 72 6f 77 69 64 20   The next rowid 
23720 6f 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  or record number
23730 20 28 64 69 66 66 65 72 65 6e 74 20 74 65 72 6d   (different term
23740 73 20 66 6f 72 20 74 68 65 20 73 61 6d 65 0a 20  s for the same. 
23750 20 20 20 2a 2a 20 74 68 69 6e 67 29 20 69 73 20     ** thing) is 
23760 6f 62 74 61 69 6e 65 64 20 69 6e 20 61 20 74 77  obtained in a tw
23770 6f 2d 73 74 65 70 20 61 6c 67 6f 72 69 74 68 6d  o-step algorithm
23780 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
23790 46 69 72 73 74 20 77 65 20 61 74 74 65 6d 70 74  First we attempt
237a0 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 72   to find the lar
237b0 67 65 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f  gest existing ro
237c0 77 69 64 20 61 6e 64 20 61 64 64 20 6f 6e 65 0a  wid and add one.
237d0 20 20 20 20 2a 2a 20 74 6f 20 74 68 61 74 2e 20      ** to that. 
237e0 20 42 75 74 20 69 66 20 74 68 65 20 6c 61 72 67   But if the larg
237f0 65 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77  est existing row
23800 69 64 20 69 73 20 61 6c 72 65 61 64 79 20 74 68  id is already th
23810 65 20 6d 61 78 69 6d 75 6d 0a 20 20 20 20 2a 2a  e maximum.    **
23820 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65   positive intege
23830 72 2c 20 77 65 20 68 61 76 65 20 74 6f 20 66 61  r, we have to fa
23840 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
23850 65 20 73 65 63 6f 6e 64 0a 20 20 20 20 2a 2a 20  e second.    ** 
23860 70 72 6f 62 61 62 69 6c 69 73 74 69 63 20 61 6c  probabilistic al
23870 67 6f 72 69 74 68 6d 0a 20 20 20 20 2a 2a 0a 20  gorithm.    **. 
23880 20 20 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64     ** The second
23890 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 74 6f   algorithm is to
238a0 20 73 65 6c 65 63 74 20 61 20 72 6f 77 69 64 20   select a rowid 
238b0 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 73 65  at random and se
238c0 65 20 69 66 0a 20 20 20 20 2a 2a 20 69 74 20 61  e if.    ** it a
238d0 6c 72 65 61 64 79 20 65 78 69 73 74 73 20 69 6e  lready exists in
238e0 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20   the table.  If 
238f0 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  it does not exis
23900 74 2c 20 77 65 20 68 61 76 65 0a 20 20 20 20 2a  t, we have.    *
23910 2a 20 73 75 63 63 65 65 64 65 64 2e 20 20 49 66  * succeeded.  If
23920 20 74 68 65 20 72 61 6e 64 6f 6d 20 72 6f 77 69   the random rowi
23930 64 20 64 6f 65 73 20 65 78 69 73 74 2c 20 77 65  d does exist, we
23940 20 73 65 6c 65 63 74 20 61 20 6e 65 77 20 6f 6e   select a new on
23950 65 0a 20 20 20 20 2a 2a 20 61 6e 64 20 74 72 79  e.    ** and try
23960 20 61 67 61 69 6e 2c 20 75 70 20 74 6f 20 31 30   again, up to 10
23970 30 20 74 69 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a  0 times..    */.
23980 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
23990 69 73 54 61 62 6c 65 20 29 3b 0a 0a 23 69 66 64  isTable );..#ifd
239a0 65 66 20 53 51 4c 49 54 45 5f 33 32 42 49 54 5f  ef SQLITE_32BIT_
239b0 52 4f 57 49 44 0a 23 20 20 20 64 65 66 69 6e 65  ROWID.#   define
239c0 20 4d 41 58 5f 52 4f 57 49 44 20 30 78 37 66 66   MAX_ROWID 0x7ff
239d0 66 66 66 66 66 0a 23 65 6c 73 65 0a 20 20 20 20  fffff.#else.    
239e0 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70 69 6c 65 72  /* Some compiler
239f0 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74  s complain about
23a00 20 63 6f 6e 73 74 61 6e 74 73 20 6f 66 20 74 68   constants of th
23a10 65 20 66 6f 72 6d 20 30 78 37 66 66 66 66 66 66  e form 0x7ffffff
23a20 66 66 66 66 66 66 66 66 66 2e 0a 20 20 20 20 2a  fffffffff..    *
23a30 2a 20 4f 74 68 65 72 73 20 63 6f 6d 70 6c 61 69  * Others complai
23a40 6e 20 61 62 6f 75 74 20 30 78 37 66 66 66 66 66  n about 0x7fffff
23a50 66 66 66 66 66 66 66 66 66 66 66 4c 4c 2e 20 20  fffffffffffLL.  
23a60 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
23a70 63 72 6f 20 73 65 65 6d 73 0a 20 20 20 20 2a 2a  cro seems.    **
23a80 20 74 6f 20 70 72 6f 76 69 64 65 20 74 68 65 20   to provide the 
23a90 63 6f 6e 73 74 61 6e 74 20 77 68 69 6c 65 20 6d  constant while m
23aa0 61 6b 69 6e 67 20 61 6c 6c 20 63 6f 6d 70 69 6c  aking all compil
23ab0 65 72 73 20 68 61 70 70 79 2e 0a 20 20 20 20 2a  ers happy..    *
23ac0 2f 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58  /.#   define MAX
23ad0 5f 52 4f 57 49 44 20 20 28 69 36 34 29 28 20 28  _ROWID  (i64)( (
23ae0 28 28 75 36 34 29 30 78 37 66 66 66 66 66 66 66  ((u64)0x7fffffff
23af0 29 3c 3c 33 32 29 20 7c 20 28 75 36 34 29 30 78  )<<32) | (u64)0x
23b00 66 66 66 66 66 66 66 66 20 29 0a 23 65 6e 64 69  ffffffff ).#endi
23b10 66 0a 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e  f..    if( !pC->
23b20 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29  useRandomRowid )
23b30 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  {.      rc = sql
23b40 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43  ite3BtreeLast(pC
23b50 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 72  ->uc.pCursor, &r
23b60 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  es);.      if( r
23b70 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
23b80 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
23b90 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
23ba0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
23bb0 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20  f( res ){.      
23bc0 20 20 76 20 3d 20 31 3b 20 20 20 2f 2a 20 49 4d    v = 1;   /* IM
23bd0 50 3a 20 52 2d 36 31 39 31 34 2d 34 38 30 37 34  P: R-61914-48074
23be0 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   */.      }else{
23bf0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
23c00 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
23c10 73 6f 72 49 73 56 61 6c 69 64 28 70 43 2d 3e 75  sorIsValid(pC->u
23c20 63 2e 70 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  c.pCursor) );.  
23c30 20 20 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65        v = sqlite
23c40 33 42 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79  3BtreeIntegerKey
23c50 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29  (pC->uc.pCursor)
23c60 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 76 3e  ;.        if( v>
23c70 3d 4d 41 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20  =MAX_ROWID ){.  
23c80 20 20 20 20 20 20 20 20 70 43 2d 3e 75 73 65 52          pC->useR
23c90 61 6e 64 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a  andomRowid = 1;.
23ca0 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
23cb0 20 20 20 20 20 20 20 20 20 76 2b 2b 3b 20 20 20           v++;   
23cc0 2f 2a 20 49 4d 50 3a 20 52 2d 32 39 35 33 38 2d  /* IMP: R-29538-
23cd0 33 34 39 38 37 20 2a 2f 0a 20 20 20 20 20 20 20  34987 */.       
23ce0 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d   }.      }.    }
23cf0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
23d00 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d  _OMIT_AUTOINCREM
23d10 45 4e 54 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  ENT.    if( pOp-
23d20 3e 70 33 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  >p3 ){.      /* 
23d30 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69  Assert that P3 i
23d40 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79  s a valid memory
23d50 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20   cell. */.      
23d60 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
23d70 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  0 );.      if( p
23d80 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20  ->pFrame ){.    
23d90 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70      for(pFrame=p
23da0 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65  ->pFrame; pFrame
23db0 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d  ->pParent; pFram
23dc0 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  e=pFrame->pParen
23dd0 74 29 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41  t);.        /* A
23de0 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73  ssert that P3 is
23df0 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20   a valid memory 
23e00 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20  cell. */.       
23e10 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
23e20 3c 3d 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29  <=pFrame->nMem )
23e30 3b 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d  ;.        pMem =
23e40 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70   &pFrame->aMem[p
23e50 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 7d  Op->p3];.      }
23e60 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a  else{.        /*
23e70 20 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20   Assert that P3 
23e80 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72  is a valid memor
23e90 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20  y cell. */.     
23ea0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
23eb0 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p3<=(p->nMem+1 -
23ec0 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
23ed0 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26          pMem = &
23ee0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
23ef0 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54         memAboutT
23f00 6f 43 68 61 6e 67 65 28 70 2c 20 70 4d 65 6d 29  oChange(p, pMem)
23f10 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
23f20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
23f30 69 64 28 70 4d 65 6d 29 20 29 3b 0a 0a 20 20 20  id(pMem) );..   
23f40 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
23f50 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d 29  E(pOp->p3, pMem)
23f60 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
23f70 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
23f80 28 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 61 73  (pMem);.      as
23f90 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61  sert( (pMem->fla
23fa0 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
23fb0 20 29 3b 20 20 2f 2a 20 6d 65 6d 28 50 33 29 20   );  /* mem(P3) 
23fc0 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72  holds an integer
23fd0 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 4d   */.      if( pM
23fe0 65 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57  em->u.i==MAX_ROW
23ff0 49 44 20 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e  ID || pC->useRan
24000 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20  domRowid ){.    
24010 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
24020 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20  FULL;   /* IMP: 
24030 52 2d 31 37 38 31 37 2d 30 30 36 33 30 20 2a 2f  R-17817-00630 */
24040 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
24050 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
24060 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
24070 69 66 28 20 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b  if( v<pMem->u.i+
24080 31 20 29 7b 0a 20 20 20 20 20 20 20 20 76 20 3d  1 ){.        v =
24090 20 70 4d 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a   pMem->u.i + 1;.
240a0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 4d        }.      pM
240b0 65 6d 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20  em->u.i = v;.   
240c0 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66   }.#endif.    if
240d0 28 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52  ( pC->useRandomR
240e0 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 2f 2a  owid ){.      /*
240f0 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d   IMPLEMENTATION-
24100 4f 46 3a 20 52 2d 30 37 36 37 37 2d 34 31 38 38  OF: R-07677-4188
24110 31 20 49 66 20 74 68 65 20 6c 61 72 67 65 73 74  1 If the largest
24120 20 52 4f 57 49 44 20 69 73 20 65 71 75 61 6c 20   ROWID is equal 
24130 74 6f 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20  to the.      ** 
24140 6c 61 72 67 65 73 74 20 70 6f 73 73 69 62 6c 65  largest possible
24150 20 69 6e 74 65 67 65 72 20 28 39 32 32 33 33 37   integer (922337
24160 32 30 33 36 38 35 34 37 37 35 38 30 37 29 20 74  2036854775807) t
24170 68 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  hen the database
24180 0a 20 20 20 20 20 20 2a 2a 20 65 6e 67 69 6e 65  .      ** engine
24190 20 73 74 61 72 74 73 20 70 69 63 6b 69 6e 67 20   starts picking 
241a0 70 6f 73 69 74 69 76 65 20 63 61 6e 64 69 64 61  positive candida
241b0 74 65 20 52 4f 57 49 44 73 20 61 74 20 72 61 6e  te ROWIDs at ran
241c0 64 6f 6d 20 75 6e 74 69 6c 0a 20 20 20 20 20 20  dom until.      
241d0 2a 2a 20 69 74 20 66 69 6e 64 73 20 6f 6e 65 20  ** it finds one 
241e0 74 68 61 74 20 69 73 20 6e 6f 74 20 70 72 65 76  that is not prev
241f0 69 6f 75 73 6c 79 20 75 73 65 64 2e 20 2a 2f 0a  iously used. */.
24200 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
24210 70 2d 3e 70 33 3d 3d 30 20 29 3b 20 20 2f 2a 20  p->p3==0 );  /* 
24220 57 65 20 63 61 6e 6e 6f 74 20 62 65 20 69 6e 20  We cannot be in 
24230 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 6d 6f 64  random rowid mod
24240 65 20 69 66 20 74 68 69 73 20 69 73 0a 20 20 20  e if this is.   
24250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24260 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 6e 20            ** an 
24270 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61  AUTOINCREMENT ta
24280 62 6c 65 2e 20 2a 2f 0a 20 20 20 20 20 20 63 6e  ble. */.      cn
24290 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 64 6f 7b  t = 0;.      do{
242a0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
242b0 5f 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a 65  _randomness(size
242c0 6f 66 28 76 29 2c 20 26 76 29 3b 0a 20 20 20 20  of(v), &v);.    
242d0 20 20 20 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f      v &= (MAX_RO
242e0 57 49 44 3e 3e 31 29 3b 20 76 2b 2b 3b 20 20 2f  WID>>1); v++;  /
242f0 2a 20 45 6e 73 75 72 65 20 74 68 61 74 20 76 20  * Ensure that v 
24300 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
24310 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20 7d 77  zero */.      }w
24320 68 69 6c 65 28 20 20 28 28 72 63 20 3d 20 73 71  hile(  ((rc = sq
24330 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
24340 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e  Unpacked(pC->uc.
24350 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34  pCursor, 0, (u64
24360 29 76 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  )v,.            
24370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24390 20 20 20 20 20 30 2c 20 26 72 65 73 29 29 3d 3d       0, &res))==
243a0 53 51 4c 49 54 45 5f 4f 4b 29 0a 20 20 20 20 20  SQLITE_OK).     
243b0 20 20 20 20 20 20 20 26 26 20 28 72 65 73 3d 3d         && (res==
243c0 30 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 26  0).            &
243d0 26 20 28 2b 2b 63 6e 74 3c 31 30 30 29 29 3b 0a  & (++cnt<100));.
243e0 20 20 20 20 20 20 69 66 28 20 72 63 20 29 20 67        if( rc ) g
243f0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
24400 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 69 66  _error;.      if
24410 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20  ( res==0 ){.    
24420 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
24430 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20  FULL;   /* IMP: 
24440 52 2d 33 38 32 31 39 2d 35 33 30 30 32 20 2a 2f  R-38219-53002 */
24450 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
24460 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
24470 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
24480 61 73 73 65 72 74 28 20 76 3e 30 20 29 3b 20 20  assert( v>0 );  
24490 2f 2a 20 45 56 3a 20 52 2d 34 30 38 31 32 2d 30  /* EV: R-40812-0
244a0 33 35 37 30 20 2a 2f 0a 20 20 20 20 7d 0a 20 20  3570 */.    }.  
244b0 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
244c0 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43  veto = 0;.    pC
244d0 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
244e0 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d  CACHE_STALE;.  }
244f0 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76  .  pOut->u.i = v
24500 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
24510 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 20   Opcode: Insert 
24520 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
24530 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b  * Synopsis: intk
24540 65 79 3d 72 5b 50 33 5d 20 64 61 74 61 3d 72 5b  ey=r[P3] data=r[
24550 50 32 5d 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  P2].**.** Write 
24560 61 6e 20 65 6e 74 72 79 20 69 6e 74 6f 20 74 68  an entry into th
24570 65 20 74 61 62 6c 65 20 6f 66 20 63 75 72 73 6f  e table of curso
24580 72 20 50 31 2e 20 20 41 20 6e 65 77 20 65 6e 74  r P1.  A new ent
24590 72 79 20 69 73 0a 2a 2a 20 63 72 65 61 74 65 64  ry is.** created
245a0 20 69 66 20 69 74 20 64 6f 65 73 6e 27 74 20 61   if it doesn't a
245b0 6c 72 65 61 64 79 20 65 78 69 73 74 20 6f 72 20  lready exist or 
245c0 74 68 65 20 64 61 74 61 20 66 6f 72 20 61 6e 20  the data for an 
245d0 65 78 69 73 74 69 6e 67 0a 2a 2a 20 65 6e 74 72  existing.** entr
245e0 79 20 69 73 20 6f 76 65 72 77 72 69 74 74 65 6e  y is overwritten
245f0 2e 20 20 54 68 65 20 64 61 74 61 20 69 73 20 74  .  The data is t
24600 68 65 20 76 61 6c 75 65 20 4d 45 4d 5f 42 6c 6f  he value MEM_Blo
24610 62 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  b stored in regi
24620 73 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50  ster.** number P
24630 32 2e 20 54 68 65 20 6b 65 79 20 69 73 20 73 74  2. The key is st
24640 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
24650 20 50 33 2e 20 54 68 65 20 6b 65 79 20 6d 75 73   P3. The key mus
24660 74 0a 2a 2a 20 62 65 20 61 20 4d 45 4d 5f 49 6e  t.** be a MEM_In
24670 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  t..**.** If the 
24680 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66  OPFLAG_NCHANGE f
24690 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74  lag of P5 is set
246a0 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63  , then the row c
246b0 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a  hange count is.*
246c0 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f  * incremented (o
246d0 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 20 20  therwise not).  
246e0 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 41  If the OPFLAG_LA
246f0 53 54 52 4f 57 49 44 20 66 6c 61 67 20 6f 66 20  STROWID flag of 
24700 50 35 20 69 73 20 73 65 74 2c 0a 2a 2a 20 74 68  P5 is set,.** th
24710 65 6e 20 72 6f 77 69 64 20 69 73 20 73 74 6f 72  en rowid is stor
24720 65 64 20 66 6f 72 20 73 75 62 73 65 71 75 65 6e  ed for subsequen
24730 74 20 72 65 74 75 72 6e 20 62 79 20 74 68 65 0a  t return by the.
24740 2a 2a 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f  ** sqlite3_last_
24750 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 66  insert_rowid() f
24760 75 6e 63 74 69 6f 6e 20 28 6f 74 68 65 72 77 69  unction (otherwi
24770 73 65 20 69 74 20 69 73 20 75 6e 6d 6f 64 69 66  se it is unmodif
24780 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ied)..**.** If t
24790 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45  he OPFLAG_USESEE
247a0 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 6f 66 20  KRESULT flag of 
247b0 50 35 20 69 73 20 73 65 74 2c 20 74 68 65 20 69  P5 is set, the i
247c0 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69  mplementation mi
247d0 67 68 74 0a 2a 2a 20 72 75 6e 20 66 61 73 74 65  ght.** run faste
247e0 72 20 62 79 20 61 76 6f 69 64 69 6e 67 20 61 6e  r by avoiding an
247f0 20 75 6e 6e 65 63 65 73 73 61 72 79 20 73 65 65   unnecessary see
24800 6b 20 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e 20  k on cursor P1. 
24810 20 48 6f 77 65 76 65 72 2c 0a 2a 2a 20 74 68 65   However,.** the
24820 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
24830 45 53 55 4c 54 20 66 6c 61 67 20 6d 75 73 74 20  ESULT flag must 
24840 6f 6e 6c 79 20 62 65 20 73 65 74 20 69 66 20 74  only be set if t
24850 68 65 72 65 20 68 61 76 65 20 62 65 65 6e 20 6e  here have been n
24860 6f 20 70 72 69 6f 72 0a 2a 2a 20 73 65 65 6b 73  o prior.** seeks
24870 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20 6f   on the cursor o
24880 72 20 69 66 20 74 68 65 20 6d 6f 73 74 20 72 65  r if the most re
24890 63 65 6e 74 20 73 65 65 6b 20 75 73 65 64 20 61  cent seek used a
248a0 20 6b 65 79 20 65 71 75 61 6c 20 74 6f 20 50 33   key equal to P3
248b0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
248c0 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 66  PFLAG_ISUPDATE f
248d0 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e  lag is set, then
248e0 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   this opcode is 
248f0 70 61 72 74 20 6f 66 20 61 6e 0a 2a 2a 20 55 50  part of an.** UP
24900 44 41 54 45 20 6f 70 65 72 61 74 69 6f 6e 2e 20  DATE operation. 
24910 20 4f 74 68 65 72 77 69 73 65 20 28 69 66 20 74   Otherwise (if t
24920 68 65 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72  he flag is clear
24930 29 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f  ) then this opco
24940 64 65 0a 2a 2a 20 69 73 20 70 61 72 74 20 6f 66  de.** is part of
24950 20 61 6e 20 49 4e 53 45 52 54 20 6f 70 65 72 61   an INSERT opera
24960 74 69 6f 6e 2e 20 20 54 68 65 20 64 69 66 66 65  tion.  The diffe
24970 72 65 6e 63 65 20 69 73 20 6f 6e 6c 79 20 69 6d  rence is only im
24980 70 6f 72 74 61 6e 74 20 74 6f 0a 2a 2a 20 74 68  portant to.** th
24990 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 2e 0a 2a  e update hook..*
249a0 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72 20 50  *.** Parameter P
249b0 34 20 6d 61 79 20 70 6f 69 6e 74 20 74 6f 20 61  4 may point to a
249c0 20 54 61 62 6c 65 20 73 74 72 75 63 74 75 72 65   Table structure
249d0 2c 20 6f 72 20 6d 61 79 20 62 65 20 4e 55 4c 4c  , or may be NULL
249e0 2e 20 49 66 20 69 74 20 69 73 20 0a 2a 2a 20 6e  . If it is .** n
249f0 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68  ot NULL, then th
24a00 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 28 73  e update-hook (s
24a10 71 6c 69 74 65 33 2e 78 55 70 64 61 74 65 43 61  qlite3.xUpdateCa
24a20 6c 6c 62 61 63 6b 29 20 69 73 20 69 6e 76 6f 6b  llback) is invok
24a30 65 64 20 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67  ed .** following
24a40 20 61 20 73 75 63 63 65 73 73 66 75 6c 20 69 6e   a successful in
24a50 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 28 57 41 52  sert..**.** (WAR
24a60 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49 66 20 50 31  NING/TODO: If P1
24a70 20 69 73 20 61 20 70 73 65 75 64 6f 2d 63 75 72   is a pseudo-cur
24a80 73 6f 72 20 61 6e 64 20 50 32 20 69 73 20 64 79  sor and P2 is dy
24a90 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c  namically.** all
24aa0 6f 63 61 74 65 64 2c 20 74 68 65 6e 20 6f 77 6e  ocated, then own
24ab0 65 72 73 68 69 70 20 6f 66 20 50 32 20 69 73 20  ership of P2 is 
24ac0 74 72 61 6e 73 66 65 72 72 65 64 20 74 6f 20 74  transferred to t
24ad0 68 65 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72  he pseudo-cursor
24ae0 0a 2a 2a 20 61 6e 64 20 72 65 67 69 73 74 65 72  .** and register
24af0 20 50 32 20 62 65 63 6f 6d 65 73 20 65 70 68 65   P2 becomes ephe
24b00 6d 65 72 61 6c 2e 20 20 49 66 20 74 68 65 20 63  meral.  If the c
24b10 75 72 73 6f 72 20 69 73 20 63 68 61 6e 67 65 64  ursor is changed
24b20 2c 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f  , the.** value o
24b30 66 20 72 65 67 69 73 74 65 72 20 50 32 20 77 69  f register P2 wi
24b40 6c 6c 20 74 68 65 6e 20 63 68 61 6e 67 65 2e 20  ll then change. 
24b50 20 4d 61 6b 65 20 73 75 72 65 20 74 68 69 73 20   Make sure this 
24b60 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63 61 75 73  does not.** caus
24b70 65 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 29  e any problems.)
24b80 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
24b90 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72  ruction only wor
24ba0 6b 73 20 6f 6e 20 74 61 62 6c 65 73 2e 20 20 54  ks on tables.  T
24bb0 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e  he equivalent in
24bc0 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72  struction.** for
24bd0 20 69 6e 64 69 63 65 73 20 69 73 20 4f 50 5f 49   indices is OP_I
24be0 64 78 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20  dxInsert..*/./* 
24bf0 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 49 6e  Opcode: InsertIn
24c00 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  t P1 P2 P3 P4 P5
24c10 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e  .** Synopsis: in
24c20 74 6b 65 79 3d 50 33 20 64 61 74 61 3d 72 5b 50  tkey=P3 data=r[P
24c30 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  2].**.** This wo
24c40 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65  rks exactly like
24c50 20 4f 50 5f 49 6e 73 65 72 74 20 65 78 63 65 70   OP_Insert excep
24c60 74 20 74 68 61 74 20 74 68 65 20 6b 65 79 20 69  t that the key i
24c70 73 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72  s the.** integer
24c80 20 76 61 6c 75 65 20 50 33 2c 20 6e 6f 74 20 74   value P3, not t
24c90 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
24ca0 69 6e 74 65 67 65 72 20 73 74 6f 72 65 64 20 69  integer stored i
24cb0 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
24cc0 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74  /.case OP_Insert
24cd0 3a 20 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72  : .case OP_Inser
24ce0 74 49 6e 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70  tInt: {.  Mem *p
24cf0 44 61 74 61 3b 20 20 20 20 20 20 20 2f 2a 20 4d  Data;       /* M
24d00 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20  EM cell holding 
24d10 64 61 74 61 20 66 6f 72 20 74 68 65 20 72 65 63  data for the rec
24d20 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74  ord to be insert
24d30 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4b 65  ed */.  Mem *pKe
24d40 79 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d  y;        /* MEM
24d50 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 6b 65   cell holding ke
24d60 79 20 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72  y  for the recor
24d70 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  d */.  VdbeCurso
24d80 72 20 2a 70 43 3b 20 20 20 2f 2a 20 43 75 72 73  r *pC;   /* Curs
24d90 6f 72 20 74 6f 20 74 61 62 6c 65 20 69 6e 74 6f  or to table into
24da0 20 77 68 69 63 68 20 69 6e 73 65 72 74 20 69 73   which insert is
24db0 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e   written */.  in
24dc0 74 20 73 65 65 6b 52 65 73 75 6c 74 3b 20 20 20  t seekResult;   
24dd0 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 70 72 69  /* Result of pri
24de0 6f 72 20 73 65 65 6b 20 6f 72 20 30 20 69 66 20  or seek or 0 if 
24df0 6e 6f 20 55 53 45 53 45 45 4b 52 45 53 55 4c 54  no USESEEKRESULT
24e00 20 66 6c 61 67 20 2a 2f 0a 20 20 63 6f 6e 73 74   flag */.  const
24e10 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 2f 2a 20   char *zDb;  /* 
24e20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 2d 20  database name - 
24e30 75 73 65 64 20 62 79 20 74 68 65 20 75 70 64 61  used by the upda
24e40 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 54 61 62  te hook */.  Tab
24e50 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 2f  le *pTab;      /
24e60 2a 20 54 61 62 6c 65 20 73 74 72 75 63 74 75 72  * Table structur
24e70 65 20 2d 20 75 73 65 64 20 62 79 20 75 70 64 61  e - used by upda
24e80 74 65 20 61 6e 64 20 70 72 65 2d 75 70 64 61 74  te and pre-updat
24e90 65 20 68 6f 6f 6b 73 20 2a 2f 0a 20 20 69 6e 74  e hooks */.  int
24ea0 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f   op;           /
24eb0 2a 20 4f 70 63 6f 64 65 20 66 6f 72 20 75 70 64  * Opcode for upd
24ec0 61 74 65 20 68 6f 6f 6b 3a 20 53 51 4c 49 54 45  ate hook: SQLITE
24ed0 5f 55 50 44 41 54 45 20 6f 72 20 53 51 4c 49 54  _UPDATE or SQLIT
24ee0 45 5f 49 4e 53 45 52 54 20 2a 2f 0a 20 20 42 74  E_INSERT */.  Bt
24ef0 72 65 65 50 61 79 6c 6f 61 64 20 78 3b 20 20 20  reePayload x;   
24f00 2f 2a 20 50 61 79 6c 6f 61 64 20 74 6f 20 62 65  /* Payload to be
24f10 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 0a 20 20   inserted */..  
24f20 6f 70 20 3d 20 30 3b 0a 20 20 70 44 61 74 61 20  op = 0;.  pData 
24f30 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
24f40 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
24f50 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
24f60 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
24f70 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
24f80 61 6c 69 64 28 70 44 61 74 61 29 20 29 3b 0a 20  alid(pData) );. 
24f90 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
24fa0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
24fb0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
24fc0 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
24fd0 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
24fe0 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  E );.  assert( p
24ff0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30  C->uc.pCursor!=0
25000 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
25010 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
25020 49 53 4e 4f 4f 50 29 20 7c 7c 20 70 43 2d 3e 69  ISNOOP) || pC->i
25030 73 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73 65  sTable );.  asse
25040 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
25050 3d 50 34 5f 54 41 42 4c 45 20 7c 7c 20 70 4f 70  =P4_TABLE || pOp
25060 2d 3e 70 34 74 79 70 65 3e 3d 50 34 5f 53 54 41  ->p4type>=P4_STA
25070 54 49 43 20 29 3b 0a 20 20 52 45 47 49 53 54 45  TIC );.  REGISTE
25080 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
25090 20 70 44 61 74 61 29 3b 0a 0a 20 20 69 66 28 20   pData);..  if( 
250a0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
250b0 49 6e 73 65 72 74 20 29 7b 0a 20 20 20 20 70 4b  Insert ){.    pK
250c0 65 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ey = &aMem[pOp->
250d0 70 33 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  p3];.    assert(
250e0 20 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26 20 4d   pKey->flags & M
250f0 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 61 73  EM_Int );.    as
25100 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
25110 28 70 4b 65 79 29 20 29 3b 0a 20 20 20 20 52 45  (pKey) );.    RE
25120 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
25130 2d 3e 70 33 2c 20 70 4b 65 79 29 3b 0a 20 20 20  ->p3, pKey);.   
25140 20 78 2e 6e 4b 65 79 20 3d 20 70 4b 65 79 2d 3e   x.nKey = pKey->
25150 75 2e 69 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  u.i;.  }else{.  
25160 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
25170 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74  pcode==OP_Insert
25180 49 6e 74 20 29 3b 0a 20 20 20 20 78 2e 6e 4b 65  Int );.    x.nKe
25190 79 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d  y = pOp->p3;.  }
251a0 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74  ..  if( pOp->p4t
251b0 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20 26 26  ype==P4_TABLE &&
251c0 20 48 41 53 5f 55 50 44 41 54 45 5f 48 4f 4f 4b   HAS_UPDATE_HOOK
251d0 28 64 62 29 20 29 7b 0a 20 20 20 20 61 73 73 65  (db) ){.    asse
251e0 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29  rt( pC->iDb>=0 )
251f0 3b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e  ;.    zDb = db->
25200 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 44 62  aDb[pC->iDb].zDb
25210 53 4e 61 6d 65 3b 0a 20 20 20 20 70 54 61 62 20  SName;.    pTab 
25220 3d 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 3b 0a  = pOp->p4.pTab;.
25230 20 20 20 20 61 73 73 65 72 74 28 20 28 70 4f 70      assert( (pOp
25240 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53  ->p5 & OPFLAG_IS
25250 4e 4f 4f 50 29 20 7c 7c 20 48 61 73 52 6f 77 69  NOOP) || HasRowi
25260 64 28 70 54 61 62 29 20 29 3b 0a 20 20 20 20 6f  d(pTab) );.    o
25270 70 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20  p = ((pOp->p5 & 
25280 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29  OPFLAG_ISUPDATE)
25290 20 3f 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45   ? SQLITE_UPDATE
252a0 20 3a 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54   : SQLITE_INSERT
252b0 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
252c0 70 54 61 62 20 3d 20 30 3b 20 2f 2a 20 4e 6f 74  pTab = 0; /* Not
252d0 20 6e 65 65 64 65 64 2e 20 20 53 69 6c 65 6e 63   needed.  Silenc
252e0 65 20 61 20 63 6f 6d 70 69 6c 65 72 20 77 61 72  e a compiler war
252f0 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 7a 44 62  ning. */.    zDb
25300 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65   = 0;  /* Not ne
25310 65 64 65 64 2e 20 20 53 69 6c 65 6e 63 65 20 61  eded.  Silence a
25320 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e   compiler warnin
25330 67 2e 20 2a 2f 0a 20 20 7d 0a 0a 23 69 66 64 65  g. */.  }..#ifde
25340 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
25350 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20  PREUPDATE_HOOK. 
25360 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 70   /* Invoke the p
25370 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 2c 20  re-update hook, 
25380 69 66 20 61 6e 79 20 2a 2f 0a 20 20 69 66 28 20  if any */.  if( 
25390 64 62 2d 3e 78 50 72 65 55 70 64 61 74 65 43 61  db->xPreUpdateCa
253a0 6c 6c 62 61 63 6b 20 0a 20 20 20 26 26 20 70 4f  llback .   && pO
253b0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41  p->p4type==P4_TA
253c0 42 4c 45 0a 20 20 20 26 26 20 21 28 70 4f 70 2d  BLE.   && !(pOp-
253d0 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 55  >p5 & OPFLAG_ISU
253e0 50 44 41 54 45 29 0a 20 20 29 7b 0a 20 20 20 20  PDATE).  ){.    
253f0 73 71 6c 69 74 65 33 56 64 62 65 50 72 65 55 70  sqlite3VdbePreUp
25400 64 61 74 65 48 6f 6f 6b 28 70 2c 20 70 43 2c 20  dateHook(p, pC, 
25410 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 2c 20 7a  SQLITE_INSERT, z
25420 44 62 2c 20 70 54 61 62 2c 20 78 2e 6e 4b 65 79  Db, pTab, x.nKey
25430 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 7d 0a  , pOp->p2);.  }.
25440 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
25450 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 29 20  OPFLAG_ISNOOP ) 
25460 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20  break;.#endif.. 
25470 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f   if( pOp->p5 & O
25480 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20  PFLAG_NCHANGE ) 
25490 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20  p->nChange++;.  
254a0 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50  if( pOp->p5 & OP
254b0 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 29  FLAG_LASTROWID )
254c0 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d   db->lastRowid =
254d0 20 78 2e 6e 4b 65 79 3b 0a 20 20 69 66 28 20 70   x.nKey;.  if( p
254e0 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45  Data->flags & ME
254f0 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 78 2e  M_Null ){.    x.
25500 70 44 61 74 61 20 3d 20 30 3b 0a 20 20 20 20 78  pData = 0;.    x
25510 2e 6e 44 61 74 61 20 3d 20 30 3b 0a 20 20 7d 65  .nData = 0;.  }e
25520 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
25530 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20   pData->flags & 
25540 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74  (MEM_Blob|MEM_St
25550 72 29 20 29 3b 0a 20 20 20 20 78 2e 70 44 61 74  r) );.    x.pDat
25560 61 20 3d 20 70 44 61 74 61 2d 3e 7a 3b 0a 20 20  a = pData->z;.  
25570 20 20 78 2e 6e 44 61 74 61 20 3d 20 70 44 61 74    x.nData = pDat
25580 61 2d 3e 6e 3b 0a 20 20 7d 0a 20 20 73 65 65 6b  a->n;.  }.  seek
25590 52 65 73 75 6c 74 20 3d 20 28 28 70 4f 70 2d 3e  Result = ((pOp->
255a0 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53  p5 & OPFLAG_USES
255b0 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d  EEKRESULT) ? pC-
255c0 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29  >seekResult : 0)
255d0 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66  ;.  if( pData->f
255e0 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20  lags & MEM_Zero 
255f0 29 7b 0a 20 20 20 20 78 2e 6e 5a 65 72 6f 20 3d  ){.    x.nZero =
25600 20 70 44 61 74 61 2d 3e 75 2e 6e 5a 65 72 6f 3b   pData->u.nZero;
25610 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 78 2e  .  }else{.    x.
25620 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 7d 0a 20  nZero = 0;.  }. 
25630 20 78 2e 70 4b 65 79 20 3d 20 30 3b 0a 20 20 72   x.pKey = 0;.  r
25640 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
25650 49 6e 73 65 72 74 28 70 43 2d 3e 75 63 2e 70 43  Insert(pC->uc.pC
25660 75 72 73 6f 72 2c 20 26 78 2c 0a 20 20 20 20 20  ursor, &x,.     
25670 20 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46   (pOp->p5 & (OPF
25680 4c 41 47 5f 41 50 50 45 4e 44 7c 4f 50 46 4c 41  LAG_APPEND|OPFLA
25690 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 29 29  G_SAVEPOSITION))
256a0 2c 20 73 65 65 6b 52 65 73 75 6c 74 0a 20 20 29  , seekResult.  )
256b0 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64  ;.  pC->deferred
256c0 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43  Moveto = 0;.  pC
256d0 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
256e0 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20  CACHE_STALE;..  
256f0 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70  /* Invoke the up
25700 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71  date-hook if req
25710 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20  uired. */.  if( 
25720 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
25730 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
25740 69 66 28 20 64 62 2d 3e 78 55 70 64 61 74 65 43  if( db->xUpdateC
25750 61 6c 6c 62 61 63 6b 20 26 26 20 6f 70 20 29 7b  allback && op ){
25760 0a 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65  .    db->xUpdate
25770 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70  Callback(db->pUp
25780 64 61 74 65 41 72 67 2c 20 6f 70 2c 20 7a 44 62  dateArg, op, zDb
25790 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 20 78  , pTab->zName, x
257a0 2e 6e 4b 65 79 29 3b 0a 20 20 7d 0a 20 20 62 72  .nKey);.  }.  br
257b0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
257c0 65 3a 20 44 65 6c 65 74 65 20 50 31 20 50 32 20  e: Delete P1 P2 
257d0 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 44  P3 P4 P5.**.** D
257e0 65 6c 65 74 65 20 74 68 65 20 72 65 63 6f 72 64  elete the record
257f0 20 61 74 20 77 68 69 63 68 20 74 68 65 20 50 31   at which the P1
25800 20 63 75 72 73 6f 72 20 69 73 20 63 75 72 72 65   cursor is curre
25810 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a  ntly pointing..*
25820 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
25830 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20  AG_SAVEPOSITION 
25840 62 69 74 20 6f 66 20 74 68 65 20 50 35 20 70 61  bit of the P5 pa
25850 72 61 6d 65 74 65 72 20 69 73 20 73 65 74 2c 20  rameter is set, 
25860 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 75 72 73  then.** the curs
25870 6f 72 20 77 69 6c 6c 20 62 65 20 6c 65 66 74 20  or will be left 
25880 70 6f 69 6e 74 69 6e 67 20 61 74 20 20 65 69 74  pointing at  eit
25890 68 65 72 20 74 68 65 20 6e 65 78 74 20 6f 72 20  her the next or 
258a0 74 68 65 20 70 72 65 76 69 6f 75 73 0a 2a 2a 20  the previous.** 
258b0 72 65 63 6f 72 64 20 69 6e 20 74 68 65 20 74 61  record in the ta
258c0 62 6c 65 2e 20 49 66 20 69 74 20 69 73 20 6c 65  ble. If it is le
258d0 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74  ft pointing at t
258e0 68 65 20 6e 65 78 74 20 72 65 63 6f 72 64 2c 20  he next record, 
258f0 74 68 65 6e 0a 2a 2a 20 74 68 65 20 6e 65 78 74  then.** the next
25900 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   Next instructio
25910 6e 20 77 69 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f  n will be a no-o
25920 70 2e 20 41 73 20 61 20 72 65 73 75 6c 74 2c 20  p. As a result, 
25930 69 6e 20 74 68 69 73 20 63 61 73 65 0a 2a 2a 20  in this case.** 
25940 69 74 20 69 73 20 6f 6b 20 74 6f 20 64 65 6c 65  it is ok to dele
25950 74 65 20 61 20 72 65 63 6f 72 64 20 66 72 6f 6d  te a record from
25960 20 77 69 74 68 69 6e 20 61 20 4e 65 78 74 20 6c   within a Next l
25970 6f 6f 70 2e 20 49 66 20 0a 2a 2a 20 4f 50 46 4c  oop. If .** OPFL
25980 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20  AG_SAVEPOSITION 
25990 62 69 74 20 6f 66 20 50 35 20 69 73 20 63 6c 65  bit of P5 is cle
259a0 61 72 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72  ar, then the cur
259b0 73 6f 72 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 6c  sor will be.** l
259c0 65 66 74 20 69 6e 20 61 6e 20 75 6e 64 65 66 69  eft in an undefi
259d0 6e 65 64 20 73 74 61 74 65 2e 0a 2a 2a 0a 2a 2a  ned state..**.**
259e0 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 41   If the OPFLAG_A
259f0 55 58 44 45 4c 45 54 45 20 62 69 74 20 69 73 20  UXDELETE bit is 
25a00 73 65 74 20 6f 6e 20 50 35 2c 20 74 68 61 74 20  set on P5, that 
25a10 69 6e 64 69 63 61 74 65 73 20 74 68 61 74 20 74  indicates that t
25a20 68 69 73 0a 2a 2a 20 64 65 6c 65 74 65 20 6f 6e  his.** delete on
25a30 65 20 6f 66 20 73 65 76 65 72 61 6c 20 61 73 73  e of several ass
25a40 6f 63 69 61 74 65 64 20 77 69 74 68 20 64 65 6c  ociated with del
25a50 65 74 69 6e 67 20 61 20 74 61 62 6c 65 20 72 6f  eting a table ro
25a60 77 20 61 6e 64 20 61 6c 6c 20 69 74 73 0a 2a 2a  w and all its.**
25a70 20 61 73 73 6f 63 69 61 74 65 64 20 69 6e 64 65   associated inde
25a80 78 20 65 6e 74 72 69 65 73 2e 20 20 45 78 61 63  x entries.  Exac
25a90 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68 6f 73 65  tly one of those
25aa0 20 64 65 6c 65 74 65 73 20 69 73 20 74 68 65 20   deletes is the 
25ab0 22 70 72 69 6d 61 72 79 22 0a 2a 2a 20 64 65 6c  "primary".** del
25ac0 65 74 65 2e 20 20 54 68 65 20 6f 74 68 65 72 73  ete.  The others
25ad0 20 61 72 65 20 61 6c 6c 20 6f 6e 20 4f 50 46 4c   are all on OPFL
25ae0 41 47 5f 46 4f 52 44 45 4c 45 54 45 20 63 75 72  AG_FORDELETE cur
25af0 73 6f 72 73 20 6f 72 20 65 6c 73 65 20 61 72 65  sors or else are
25b00 0a 2a 2a 20 6d 61 72 6b 65 64 20 77 69 74 68 20  .** marked with 
25b10 74 68 65 20 41 55 58 44 45 4c 45 54 45 20 66 6c  the AUXDELETE fl
25b20 61 67 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ag..**.** If the
25b30 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
25b40 66 6c 61 67 20 6f 66 20 50 32 20 28 4e 42 3a 20  flag of P2 (NB: 
25b50 50 32 20 6e 6f 74 20 50 35 29 20 69 73 20 73 65  P2 not P5) is se
25b60 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77 0a  t, then the row.
25b70 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20  ** change count 
25b80 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28  is incremented (
25b90 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 0a  otherwise not)..
25ba0 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73 74 20 6e 6f  **.** P1 must no
25bb0 74 20 62 65 20 70 73 65 75 64 6f 2d 74 61 62 6c  t be pseudo-tabl
25bc0 65 2e 20 20 49 74 20 68 61 73 20 74 6f 20 62 65  e.  It has to be
25bd0 20 61 20 72 65 61 6c 20 74 61 62 6c 65 20 77 69   a real table wi
25be0 74 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 72  th.** multiple r
25bf0 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  ows..**.** If P4
25c00 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65   is not NULL the
25c10 6e 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 61  n it points to a
25c20 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 2e 20 49   Table object. I
25c30 6e 20 74 68 69 73 20 63 61 73 65 20 65 69 74 68  n this case eith
25c40 65 72 20 0a 2a 2a 20 74 68 65 20 75 70 64 61 74  er .** the updat
25c50 65 20 6f 72 20 70 72 65 2d 75 70 64 61 74 65 20  e or pre-update 
25c60 68 6f 6f 6b 2c 20 6f 72 20 62 6f 74 68 2c 20 6d  hook, or both, m
25c70 61 79 20 62 65 20 69 6e 76 6f 6b 65 64 2e 20 54  ay be invoked. T
25c80 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73  he P1 cursor mus
25c90 74 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 70  t.** have been p
25ca0 6f 73 69 74 69 6f 6e 65 64 20 75 73 69 6e 67 20  ositioned using 
25cb0 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 70 72 69 6f  OP_NotFound prio
25cc0 72 20 74 6f 20 69 6e 76 6f 6b 69 6e 67 20 74 68  r to invoking th
25cd0 69 73 20 6f 70 63 6f 64 65 20 69 6e 20 0a 2a 2a  is opcode in .**
25ce0 20 74 68 69 73 20 63 61 73 65 2e 20 53 70 65 63   this case. Spec
25cf0 69 66 69 63 61 6c 6c 79 2c 20 69 66 20 6f 6e 65  ifically, if one
25d00 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64 2c 20   is configured, 
25d10 74 68 65 20 70 72 65 2d 75 70 64 61 74 65 20 68  the pre-update h
25d20 6f 6f 6b 20 69 73 20 0a 2a 2a 20 69 6e 76 6f 6b  ook is .** invok
25d30 65 64 20 69 66 20 50 34 20 69 73 20 6e 6f 74 20  ed if P4 is not 
25d40 4e 55 4c 4c 2e 20 54 68 65 20 75 70 64 61 74 65  NULL. The update
25d50 2d 68 6f 6f 6b 20 69 73 20 69 6e 76 6f 6b 65 64  -hook is invoked
25d60 20 69 66 20 6f 6e 65 20 69 73 20 63 6f 6e 66 69   if one is confi
25d70 67 75 72 65 64 2c 20 0a 2a 2a 20 50 34 20 69 73  gured, .** P4 is
25d80 20 6e 6f 74 20 4e 55 4c 4c 2c 20 61 6e 64 20 74   not NULL, and t
25d90 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47  he OPFLAG_NCHANG
25da0 45 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e  E flag is set in
25db0 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   P2..**.** If th
25dc0 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54  e OPFLAG_ISUPDAT
25dd0 45 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e  E flag is set in
25de0 20 50 32 2c 20 74 68 65 6e 20 50 33 20 63 6f 6e   P2, then P3 con
25df0 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73  tains the addres
25e00 73 0a 2a 2a 20 6f 66 20 74 68 65 20 6d 65 6d 6f  s.** of the memo
25e10 72 79 20 63 65 6c 6c 20 74 68 61 74 20 63 6f 6e  ry cell that con
25e20 74 61 69 6e 73 20 74 68 65 20 76 61 6c 75 65 20  tains the value 
25e30 74 68 61 74 20 74 68 65 20 72 6f 77 69 64 20 6f  that the rowid o
25e40 66 20 74 68 65 20 72 6f 77 20 77 69 6c 6c 0a 2a  f the row will.*
25e50 2a 20 62 65 20 73 65 74 20 74 6f 20 62 79 20 74  * be set to by t
25e60 68 65 20 75 70 64 61 74 65 2e 0a 2a 2f 0a 63 61  he update..*/.ca
25e70 73 65 20 4f 50 5f 44 65 6c 65 74 65 3a 20 7b 0a  se OP_Delete: {.
25e80 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
25e90 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
25ea0 7a 44 62 3b 0a 20 20 54 61 62 6c 65 20 2a 70 54  zDb;.  Table *pT
25eb0 61 62 3b 0a 20 20 69 6e 74 20 6f 70 66 6c 61 67  ab;.  int opflag
25ec0 73 3b 0a 0a 20 20 6f 70 66 6c 61 67 73 20 3d 20  s;..  opflags = 
25ed0 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72  pOp->p2;.  asser
25ee0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
25ef0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
25f00 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
25f10 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
25f20 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
25f30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
25f40 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
25f50 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61  YPE_BTREE );.  a
25f60 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43  ssert( pC->uc.pC
25f70 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73  ursor!=0 );.  as
25f80 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
25f90 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 0a  edMoveto==0 );..
25fa0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
25fb0 42 55 47 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  BUG.  if( pOp->p
25fc0 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20  4type==P4_TABLE 
25fd0 26 26 20 48 61 73 52 6f 77 69 64 28 70 4f 70 2d  && HasRowid(pOp-
25fe0 3e 70 34 2e 70 54 61 62 29 20 26 26 20 70 4f 70  >p4.pTab) && pOp
25ff0 2d 3e 70 35 3d 3d 30 20 29 7b 0a 20 20 20 20 2f  ->p5==0 ){.    /
26000 2a 20 49 66 20 70 35 20 69 73 20 7a 65 72 6f 2c  * If p5 is zero,
26010 20 74 68 65 20 73 65 65 6b 20 6f 70 65 72 61 74   the seek operat
26020 69 6f 6e 20 74 68 61 74 20 70 6f 73 69 74 69 6f  ion that positio
26030 6e 65 64 20 74 68 65 20 63 75 72 73 6f 72 20 70  ned the cursor p
26040 72 69 6f 72 20 74 6f 0a 20 20 20 20 2a 2a 20 4f  rior to.    ** O
26050 50 5f 44 65 6c 65 74 65 20 77 69 6c 6c 20 68 61  P_Delete will ha
26060 76 65 20 61 6c 73 6f 20 73 65 74 20 74 68 65 20  ve also set the 
26070 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  pC->movetoTarget
26080 20 66 69 65 6c 64 20 74 6f 20 74 68 65 20 72 6f   field to the ro
26090 77 69 64 20 6f 66 0a 20 20 20 20 2a 2a 20 74 68  wid of.    ** th
260a0 65 20 72 6f 77 20 74 68 61 74 20 69 73 20 62 65  e row that is be
260b0 69 6e 67 20 64 65 6c 65 74 65 64 20 2a 2f 0a 20  ing deleted */. 
260c0 20 20 20 69 36 34 20 69 4b 65 79 20 3d 20 73 71     i64 iKey = sq
260d0 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65 67 65  lite3BtreeIntege
260e0 72 4b 65 79 28 70 43 2d 3e 75 63 2e 70 43 75 72  rKey(pC->uc.pCur
260f0 73 6f 72 29 3b 0a 20 20 20 20 61 73 73 65 72 74  sor);.    assert
26100 28 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67  ( pC->movetoTarg
26110 65 74 3d 3d 69 4b 65 79 20 29 3b 0a 20 20 7d 0a  et==iKey );.  }.
26120 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 49 66 20  #endif..  /* If 
26130 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20  the update-hook 
26140 6f 72 20 70 72 65 2d 75 70 64 61 74 65 2d 68 6f  or pre-update-ho
26150 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b  ok will be invok
26160 65 64 2c 20 73 65 74 20 7a 44 62 20 74 6f 0a 20  ed, set zDb to. 
26170 20 2a 2a 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   ** the name of 
26180 74 68 65 20 64 62 20 74 6f 20 70 61 73 73 20 61  the db to pass a
26190 73 20 74 6f 20 69 74 2e 20 41 6c 73 6f 20 73 65  s to it. Also se
261a0 74 20 6c 6f 63 61 6c 20 70 54 61 62 20 74 6f 20  t local pTab to 
261b0 61 20 63 6f 70 79 0a 20 20 2a 2a 20 6f 66 20 70  a copy.  ** of p
261c0 34 2e 70 54 61 62 2e 20 46 69 6e 61 6c 6c 79 2c  4.pTab. Finally,
261d0 20 69 66 20 70 35 20 69 73 20 74 72 75 65 2c 20   if p5 is true, 
261e0 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74 20  indicating that 
261f0 74 68 69 73 20 63 75 72 73 6f 72 20 77 61 73 0a  this cursor was.
26200 20 20 2a 2a 20 6c 61 73 74 20 6d 6f 76 65 64 20    ** last moved 
26210 77 69 74 68 20 4f 50 5f 4e 65 78 74 20 6f 72 20  with OP_Next or 
26220 4f 50 5f 50 72 65 76 2c 20 6e 6f 74 20 53 65 65  OP_Prev, not See
26230 6b 20 6f 72 20 4e 6f 74 46 6f 75 6e 64 2c 20 73  k or NotFound, s
26240 65 74 20 0a 20 20 2a 2a 20 56 64 62 65 43 75 72  et .  ** VdbeCur
26250 73 6f 72 2e 6d 6f 76 65 74 6f 54 61 72 67 65 74  sor.movetoTarget
26260 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20   to the current 
26270 72 6f 77 69 64 2e 20 20 2a 2f 0a 20 20 69 66 28  rowid.  */.  if(
26280 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
26290 5f 54 41 42 4c 45 20 26 26 20 48 41 53 5f 55 50  _TABLE && HAS_UP
262a0 44 41 54 45 5f 48 4f 4f 4b 28 64 62 29 20 29 7b  DATE_HOOK(db) ){
262b0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
262c0 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20 61  >iDb>=0 );.    a
262d0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 70  ssert( pOp->p4.p
262e0 54 61 62 21 3d 30 20 29 3b 0a 20 20 20 20 7a 44  Tab!=0 );.    zD
262f0 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e  b = db->aDb[pC->
26300 69 44 62 5d 2e 7a 44 62 53 4e 61 6d 65 3b 0a 20  iDb].zDbSName;. 
26310 20 20 20 70 54 61 62 20 3d 20 70 4f 70 2d 3e 70     pTab = pOp->p
26320 34 2e 70 54 61 62 3b 0a 20 20 20 20 69 66 28 20  4.pTab;.    if( 
26330 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
26340 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 29 21  G_SAVEPOSITION)!
26350 3d 30 20 26 26 20 70 43 2d 3e 69 73 54 61 62 6c  =0 && pC->isTabl
26360 65 20 29 7b 0a 20 20 20 20 20 20 70 43 2d 3e 6d  e ){.      pC->m
26370 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20 73 71  ovetoTarget = sq
26380 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65 67 65  lite3BtreeIntege
26390 72 4b 65 79 28 70 43 2d 3e 75 63 2e 70 43 75 72  rKey(pC->uc.pCur
263a0 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  sor);.    }.  }e
263b0 6c 73 65 7b 0a 20 20 20 20 7a 44 62 20 3d 20 30  lse{.    zDb = 0
263c0 3b 20 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65  ;   /* Not neede
263d0 64 2e 20 20 53 69 6c 65 6e 63 65 20 61 20 63 6f  d.  Silence a co
263e0 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 2e 20  mpiler warning. 
263f0 2a 2f 0a 20 20 20 20 70 54 61 62 20 3d 20 30 3b  */.    pTab = 0;
26400 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e    /* Not needed.
26410 20 20 53 69 6c 65 6e 63 65 20 61 20 63 6f 6d 70    Silence a comp
26420 69 6c 65 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f  iler warning. */
26430 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c  .  }..#ifdef SQL
26440 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50  ITE_ENABLE_PREUP
26450 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 2f 2a 20 49  DATE_HOOK.  /* I
26460 6e 76 6f 6b 65 20 74 68 65 20 70 72 65 2d 75 70  nvoke the pre-up
26470 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71  date-hook if req
26480 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20  uired. */.  if( 
26490 64 62 2d 3e 78 50 72 65 55 70 64 61 74 65 43 61  db->xPreUpdateCa
264a0 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70  llback && pOp->p
264b0 34 2e 70 54 61 62 20 29 7b 0a 20 20 20 20 61 73  4.pTab ){.    as
264c0 73 65 72 74 28 20 21 28 6f 70 66 6c 61 67 73 20  sert( !(opflags 
264d0 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54  & OPFLAG_ISUPDAT
264e0 45 29 20 0a 20 20 20 20 20 20 20 20 20 7c 7c 20  E) .         || 
264f0 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 3d 3d  HasRowid(pTab)==
26500 30 20 0a 20 20 20 20 20 20 20 20 20 7c 7c 20 28  0 .         || (
26510 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 66 6c  aMem[pOp->p3].fl
26520 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 20 0a  ags & MEM_Int) .
26530 20 20 20 20 29 3b 0a 20 20 20 20 73 71 6c 69 74      );.    sqlit
26540 65 33 56 64 62 65 50 72 65 55 70 64 61 74 65 48  e3VdbePreUpdateH
26550 6f 6f 6b 28 70 2c 20 70 43 2c 0a 20 20 20 20 20  ook(p, pC,.     
26560 20 20 20 28 6f 70 66 6c 61 67 73 20 26 20 4f 50     (opflags & OP
26570 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20 3f  FLAG_ISUPDATE) ?
26580 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 3a   SQLITE_UPDATE :
26590 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 20   SQLITE_DELETE, 
265a0 0a 20 20 20 20 20 20 20 20 7a 44 62 2c 20 70 54  .        zDb, pT
265b0 61 62 2c 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61  ab, pC->movetoTa
265c0 72 67 65 74 2c 0a 20 20 20 20 20 20 20 20 70 4f  rget,.        pO
265d0 70 2d 3e 70 33 0a 20 20 20 20 29 3b 0a 20 20 7d  p->p3.    );.  }
265e0 0a 20 20 69 66 28 20 6f 70 66 6c 61 67 73 20 26  .  if( opflags &
265f0 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 29   OPFLAG_ISNOOP )
26600 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 20   break;.#endif. 
26610 0a 20 20 2f 2a 20 4f 6e 6c 79 20 66 6c 61 67 73  .  /* Only flags
26620 20 74 68 61 74 20 63 61 6e 20 62 65 20 73 65 74   that can be set
26630 20 61 72 65 20 53 41 56 45 50 4f 49 53 54 49 4f   are SAVEPOISTIO
26640 4e 20 61 6e 64 20 41 55 58 44 45 4c 45 54 45 20  N and AUXDELETE 
26650 2a 2f 20 0a 20 20 61 73 73 65 72 74 28 20 28 70  */ .  assert( (p
26660 4f 70 2d 3e 70 35 20 26 20 7e 28 4f 50 46 4c 41  Op->p5 & ~(OPFLA
26670 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 7c 4f  G_SAVEPOSITION|O
26680 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 29  PFLAG_AUXDELETE)
26690 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )==0 );.  assert
266a0 28 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53  ( OPFLAG_SAVEPOS
266b0 49 54 49 4f 4e 3d 3d 42 54 52 45 45 5f 53 41 56  ITION==BTREE_SAV
266c0 45 50 4f 53 49 54 49 4f 4e 20 29 3b 0a 20 20 61  EPOSITION );.  a
266d0 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 41 55  ssert( OPFLAG_AU
266e0 58 44 45 4c 45 54 45 3d 3d 42 54 52 45 45 5f 41  XDELETE==BTREE_A
266f0 55 58 44 45 4c 45 54 45 20 29 3b 0a 0a 23 69 66  UXDELETE );..#if
26700 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
26710 0a 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65  .  if( p->pFrame
26720 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 70  ==0 ){.    if( p
26730 43 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 3d 3d  C->isEphemeral==
26740 30 0a 20 20 20 20 20 20 20 20 26 26 20 28 70 4f  0.        && (pO
26750 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 41  p->p5 & OPFLAG_A
26760 55 58 44 45 4c 45 54 45 29 3d 3d 30 0a 20 20 20  UXDELETE)==0.   
26770 20 20 20 20 20 26 26 20 28 70 43 2d 3e 77 72 46       && (pC->wrF
26780 6c 61 67 20 26 20 4f 50 46 4c 41 47 5f 46 4f 52  lag & OPFLAG_FOR
26790 44 45 4c 45 54 45 29 3d 3d 30 0a 20 20 20 20 20  DELETE)==0.     
267a0 20 29 7b 0a 20 20 20 20 20 20 6e 45 78 74 72 61   ){.      nExtra
267b0 44 65 6c 65 74 65 2b 2b 3b 0a 20 20 20 20 7d 0a  Delete++;.    }.
267c0 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20      if( pOp->p2 
267d0 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  & OPFLAG_NCHANGE
267e0 20 29 7b 0a 20 20 20 20 20 20 6e 45 78 74 72 61   ){.      nExtra
267f0 44 65 6c 65 74 65 2d 2d 3b 0a 20 20 20 20 7d 0a  Delete--;.    }.
26800 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 72 63    }.#endif..  rc
26810 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
26820 65 6c 65 74 65 28 70 43 2d 3e 75 63 2e 70 43 75  elete(pC->uc.pCu
26830 72 73 6f 72 2c 20 70 4f 70 2d 3e 70 35 29 3b 0a  rsor, pOp->p5);.
26840 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
26850 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
26860 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c  .  pC->seekResul
26870 74 20 3d 20 30 3b 0a 20 20 69 66 28 20 72 63 20  t = 0;.  if( rc 
26880 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
26890 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 2f 2a  _to_error;..  /*
268a0 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61   Invoke the upda
268b0 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69  te-hook if requi
268c0 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 6f 70  red. */.  if( op
268d0 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f 4e  flags & OPFLAG_N
268e0 43 48 41 4e 47 45 20 29 7b 0a 20 20 20 20 70 2d  CHANGE ){.    p-
268f0 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 20 20  >nChange++;.    
26900 69 66 28 20 64 62 2d 3e 78 55 70 64 61 74 65 43  if( db->xUpdateC
26910 61 6c 6c 62 61 63 6b 20 26 26 20 48 61 73 52 6f  allback && HasRo
26920 77 69 64 28 70 54 61 62 29 20 29 7b 0a 20 20 20  wid(pTab) ){.   
26930 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61     db->xUpdateCa
26940 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61  llback(db->pUpda
26950 74 65 41 72 67 2c 20 53 51 4c 49 54 45 5f 44 45  teArg, SQLITE_DE
26960 4c 45 54 45 2c 20 7a 44 62 2c 20 70 54 61 62 2d  LETE, zDb, pTab-
26970 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20  >zName,.        
26980 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67    pC->movetoTarg
26990 65 74 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  et);.      asser
269a0 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b  t( pC->iDb>=0 );
269b0 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 62 72  .    }.  }..  br
269c0 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65  eak;.}./* Opcode
269d0 3a 20 52 65 73 65 74 43 6f 75 6e 74 20 2a 20 2a  : ResetCount * *
269e0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
269f0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 68   value of the ch
26a00 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20  ange counter is 
26a10 63 6f 70 69 65 64 20 74 6f 20 74 68 65 20 64 61  copied to the da
26a20 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a 2a  tabase handle.**
26a30 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20   change counter 
26a40 28 72 65 74 75 72 6e 65 64 20 62 79 20 73 75 62  (returned by sub
26a50 73 65 71 75 65 6e 74 20 63 61 6c 6c 73 20 74 6f  sequent calls to
26a60 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73   sqlite3_changes
26a70 28 29 29 2e 0a 2a 2a 20 54 68 65 6e 20 74 68 65  ())..** Then the
26a80 20 56 4d 73 20 69 6e 74 65 72 6e 61 6c 20 63 68   VMs internal ch
26a90 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 72 65 73  ange counter res
26aa0 65 74 73 20 74 6f 20 30 2e 0a 2a 2a 20 54 68 69  ets to 0..** Thi
26ab0 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72 69  s is used by tri
26ac0 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 0a 2a  gger programs..*
26ad0 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74 43  /.case OP_ResetC
26ae0 6f 75 6e 74 3a 20 7b 0a 20 20 73 71 6c 69 74 65  ount: {.  sqlite
26af0 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73 28  3VdbeSetChanges(
26b00 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b  db, p->nChange);
26b10 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20  .  p->nChange = 
26b20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  0;.  break;.}../
26b30 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72  * Opcode: Sorter
26b40 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50 33  Compare P1 P2 P3
26b50 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P4.** Synopsis:
26b60 20 69 66 20 6b 65 79 28 50 31 29 21 3d 74 72 69   if key(P1)!=tri
26b70 6d 28 72 5b 50 33 5d 2c 50 34 29 20 67 6f 74 6f  m(r[P3],P4) goto
26b80 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20   P2.**.** P1 is 
26b90 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 2e  a sorter cursor.
26ba0 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
26bb0 6e 20 63 6f 6d 70 61 72 65 73 20 61 20 70 72 65  n compares a pre
26bc0 66 69 78 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65  fix of the.** re
26bd0 63 6f 72 64 20 62 6c 6f 62 20 69 6e 20 72 65 67  cord blob in reg
26be0 69 73 74 65 72 20 50 33 20 61 67 61 69 6e 73 74  ister P3 against
26bf0 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68 65   a prefix of the
26c00 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20   entry that .** 
26c10 74 68 65 20 73 6f 72 74 65 72 20 63 75 72 73 6f  the sorter curso
26c20 72 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  r currently poin
26c30 74 73 20 74 6f 2e 20 20 4f 6e 6c 79 20 74 68 65  ts to.  Only the
26c40 20 66 69 72 73 74 20 50 34 20 66 69 65 6c 64 73   first P4 fields
26c50 0a 2a 2a 20 6f 66 20 72 5b 50 33 5d 20 61 6e 64  .** of r[P3] and
26c60 20 74 68 65 20 73 6f 72 74 65 72 20 72 65 63 6f   the sorter reco
26c70 72 64 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e  rd are compared.
26c80 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  .**.** If either
26c90 20 50 33 20 6f 72 20 74 68 65 20 73 6f 72 74 65   P3 or the sorte
26ca0 72 20 63 6f 6e 74 61 69 6e 73 20 61 20 4e 55 4c  r contains a NUL
26cb0 4c 20 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65 69  L in one of thei
26cc0 72 20 73 69 67 6e 69 66 69 63 61 6e 74 0a 2a 2a  r significant.**
26cd0 20 66 69 65 6c 64 73 20 28 6e 6f 74 20 63 6f 75   fields (not cou
26ce0 6e 74 69 6e 67 20 74 68 65 20 50 34 20 66 69 65  nting the P4 fie
26cf0 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64 20 77  lds at the end w
26d00 68 69 63 68 20 61 72 65 20 69 67 6e 6f 72 65 64  hich are ignored
26d10 29 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f  ) then.** the co
26d20 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 73 73 75  mparison is assu
26d30 6d 65 64 20 74 6f 20 62 65 20 65 71 75 61 6c 2e  med to be equal.
26d40 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c 20 74 68 72 6f  .**.** Fall thro
26d50 75 67 68 20 74 6f 20 6e 65 78 74 20 69 6e 73 74  ugh to next inst
26d60 72 75 63 74 69 6f 6e 20 69 66 20 74 68 65 20 74  ruction if the t
26d70 77 6f 20 72 65 63 6f 72 64 73 20 63 6f 6d 70 61  wo records compa
26d80 72 65 20 65 71 75 61 6c 20 74 6f 0a 2a 2a 20 65  re equal to.** e
26d90 61 63 68 20 6f 74 68 65 72 2e 20 20 4a 75 6d 70  ach other.  Jump
26da0 20 74 6f 20 50 32 20 69 66 20 74 68 65 79 20 61   to P2 if they a
26db0 72 65 20 64 69 66 66 65 72 65 6e 74 2e 0a 2a 2f  re different..*/
26dc0 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 43  .case OP_SorterC
26dd0 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 56 64 62 65  ompare: {.  Vdbe
26de0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e  Cursor *pC;.  in
26df0 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 6e 4b 65  t res;.  int nKe
26e00 79 43 6f 6c 3b 0a 0a 20 20 70 43 20 3d 20 70 2d  yCol;..  pC = p-
26e10 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
26e20 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72  .  assert( isSor
26e30 74 65 72 28 70 43 29 20 29 3b 0a 20 20 61 73 73  ter(pC) );.  ass
26e40 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
26e50 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
26e60 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
26e70 2d 3e 70 33 5d 3b 0a 20 20 6e 4b 65 79 43 6f 6c  ->p3];.  nKeyCol
26e80 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20   = pOp->p4.i;.  
26e90 72 65 73 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20  res = 0;.  rc = 
26ea0 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
26eb0 72 43 6f 6d 70 61 72 65 28 70 43 2c 20 70 49 6e  rCompare(pC, pIn
26ec0 33 2c 20 6e 4b 65 79 43 6f 6c 2c 20 26 72 65 73  3, nKeyCol, &res
26ed0 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  );.  VdbeBranchT
26ee0 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a  aken(res!=0,2);.
26ef0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
26f00 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
26f10 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 20 29 20  or;.  if( res ) 
26f20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
26f30 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 0a 2f 2a  .  break;.};../*
26f40 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 44   Opcode: SorterD
26f50 61 74 61 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ata P1 P2 P3 * *
26f60 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
26f70 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57  P2]=data.**.** W
26f80 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74  rite into regist
26f90 65 72 20 50 32 20 74 68 65 20 63 75 72 72 65 6e  er P2 the curren
26fa0 74 20 73 6f 72 74 65 72 20 64 61 74 61 20 66 6f  t sorter data fo
26fb0 72 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 20  r sorter cursor 
26fc0 50 31 2e 0a 2a 2a 20 54 68 65 6e 20 63 6c 65 61  P1..** Then clea
26fd0 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 68 65 61  r the column hea
26fe0 64 65 72 20 63 61 63 68 65 20 6f 6e 20 63 75 72  der cache on cur
26ff0 73 6f 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68  sor P3..**.** Th
27000 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f 72  is opcode is nor
27010 6d 61 6c 6c 79 20 75 73 65 20 74 6f 20 6d 6f 76  mally use to mov
27020 65 20 61 20 72 65 63 6f 72 64 20 6f 75 74 20 6f  e a record out o
27030 66 20 74 68 65 20 73 6f 72 74 65 72 20 61 6e 64  f the sorter and
27040 20 69 6e 74 6f 0a 2a 2a 20 61 20 72 65 67 69 73   into.** a regis
27050 74 65 72 20 74 68 61 74 20 69 73 20 74 68 65 20  ter that is the 
27060 73 6f 75 72 63 65 20 66 6f 72 20 61 20 70 73 65  source for a pse
27070 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72  udo-table cursor
27080 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 0a 2a   created using.*
27090 2a 20 4f 70 65 6e 50 73 65 75 64 6f 2e 20 20 54  * OpenPseudo.  T
270a0 68 61 74 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  hat pseudo-table
270b0 20 63 75 72 73 6f 72 20 69 73 20 74 68 65 20 6f   cursor is the o
270c0 6e 65 20 74 68 61 74 20 69 73 20 69 64 65 6e 74  ne that is ident
270d0 69 66 69 65 64 20 62 79 0a 2a 2a 20 70 61 72 61  ified by.** para
270e0 6d 65 74 65 72 20 50 33 2e 20 20 43 6c 65 61 72  meter P3.  Clear
270f0 69 6e 67 20 74 68 65 20 50 33 20 63 6f 6c 75 6d  ing the P3 colum
27100 6e 20 63 61 63 68 65 20 61 73 20 70 61 72 74 20  n cache as part 
27110 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20 73  of this opcode s
27120 61 76 65 73 0a 2a 2a 20 75 73 20 66 72 6f 6d 20  aves.** us from 
27130 68 61 76 69 6e 67 20 74 6f 20 69 73 73 75 65 20  having to issue 
27140 61 20 73 65 70 61 72 61 74 65 20 4e 75 6c 6c 52  a separate NullR
27150 6f 77 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  ow instruction t
27160 6f 20 63 6c 65 61 72 20 74 68 61 74 20 63 61 63  o clear that cac
27170 68 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  he..*/.case OP_S
27180 6f 72 74 65 72 44 61 74 61 3a 20 7b 0a 20 20 56  orterData: {.  V
27190 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a  dbeCursor *pC;..
271a0 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
271b0 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 43 20 3d 20  Op->p2];.  pC = 
271c0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
271d0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  ];.  assert( isS
271e0 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 72  orter(pC) );.  r
271f0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  c = sqlite3VdbeS
27200 6f 72 74 65 72 52 6f 77 6b 65 79 28 70 43 2c 20  orterRowkey(pC, 
27210 70 4f 75 74 29 3b 0a 20 20 61 73 73 65 72 74 28  pOut);.  assert(
27220 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc!=SQLITE_OK |
27230 7c 20 28 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26  | (pOut->flags &
27240 20 4d 45 4d 5f 42 6c 6f 62 29 20 29 3b 0a 20 20   MEM_Blob) );.  
27250 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
27260 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
27270 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66  >nCursor );.  if
27280 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
27290 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
272a0 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e    p->apCsr[pOp->
272b0 70 33 5d 2d 3e 63 61 63 68 65 53 74 61 74 75 73  p3]->cacheStatus
272c0 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
272d0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
272e0 70 63 6f 64 65 3a 20 52 6f 77 44 61 74 61 20 50  pcode: RowData P
272f0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
27300 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64  ynopsis: r[P2]=d
27310 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  ata.**.** Write 
27320 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
27330 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f   the complete ro
27340 77 20 63 6f 6e 74 65 6e 74 20 66 6f 72 20 74 68  w content for th
27350 65 20 72 6f 77 20 61 74 20 0a 2a 2a 20 77 68 69  e row at .** whi
27360 63 68 20 63 75 72 73 6f 72 20 50 31 20 69 73 20  ch cursor P1 is 
27370 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
27380 6e 67 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73 20  ng..** There is 
27390 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f  no interpretatio
273a0 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20 20  n of the data.  
273b0 0a 2a 2a 20 49 74 20 69 73 20 6a 75 73 74 20 63  .** It is just c
273c0 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20 50  opied onto the P
273d0 32 20 72 65 67 69 73 74 65 72 20 65 78 61 63 74  2 register exact
273e0 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73 20  ly as .** it is 
273f0 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61 74  found in the dat
27400 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a  abase file..**.*
27410 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 69  * If cursor P1 i
27420 73 20 61 6e 20 69 6e 64 65 78 2c 20 74 68 65 6e  s an index, then
27430 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 20   the content is 
27440 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65 20 72  the key of the r
27450 6f 77 2e 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72  ow..** If cursor
27460 20 50 32 20 69 73 20 61 20 74 61 62 6c 65 2c 20   P2 is a table, 
27470 74 68 65 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74  then the content
27480 20 65 78 74 72 61 63 74 65 64 20 69 73 20 74 68   extracted is th
27490 65 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 49 66  e data..**.** If
274a0 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   the P1 cursor m
274b0 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20  ust be pointing 
274c0 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28  to a valid row (
274d0 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a  not a NULL row).
274e0 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62  ** of a real tab
274f0 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f  le, not a pseudo
27500 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  -table..**.** If
27510 20 50 33 21 3d 30 20 74 68 65 6e 20 74 68 69 73   P3!=0 then this
27520 20 6f 70 63 6f 64 65 20 69 73 20 61 6c 6c 6f 77   opcode is allow
27530 65 64 20 74 6f 20 6d 61 6b 65 20 61 6e 20 65 70  ed to make an ep
27540 68 65 72 6d 65 72 61 6c 20 70 6f 69 6e 74 65 72  hermeral pointer
27550 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 64 61 74  .** into the dat
27560 61 62 61 73 65 20 70 61 67 65 2e 20 20 54 68 61  abase page.  Tha
27570 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  t means that the
27580 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20   content of the 
27590 6f 75 74 70 75 74 0a 2a 2a 20 72 65 67 69 73 74  output.** regist
275a0 65 72 20 77 69 6c 6c 20 62 65 20 69 6e 76 61 6c  er will be inval
275b0 69 64 61 74 65 64 20 61 73 20 73 6f 6f 6e 20 61  idated as soon a
275c0 73 20 74 68 65 20 63 75 72 73 6f 72 20 6d 6f 76  s the cursor mov
275d0 65 73 20 2d 20 69 6e 63 6c 75 64 69 6e 67 0a 2a  es - including.*
275e0 2a 20 6d 6f 76 65 73 20 63 61 75 73 65 64 20 62  * moves caused b
275f0 79 20 6f 74 68 65 72 20 63 75 72 73 6f 72 73 20  y other cursors 
27600 74 68 61 74 20 22 73 61 76 65 22 20 74 68 65 20  that "save" the 
27610 74 68 65 20 63 75 72 72 65 6e 74 20 63 75 72 73  the current curs
27620 6f 72 73 0a 2a 2a 20 70 6f 73 69 74 69 6f 6e 20  ors.** position 
27630 69 6e 20 6f 72 64 65 72 20 74 68 61 74 20 74 68  in order that th
27640 65 79 20 63 61 6e 20 77 72 69 74 65 20 74 6f 20  ey can write to 
27650 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65 2e 20  the same table. 
27660 20 49 66 20 50 33 3d 3d 30 0a 2a 2a 20 74 68 65   If P3==0.** the
27670 6e 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20  n a copy of the 
27680 64 61 74 61 20 69 73 20 6d 61 64 65 20 69 6e 74  data is made int
27690 6f 20 6d 65 6d 6f 72 79 2e 20 20 50 33 21 3d 30  o memory.  P3!=0
276a0 20 69 73 20 66 61 73 74 65 72 2c 20 62 75 74 0a   is faster, but.
276b0 2a 2a 20 50 33 3d 3d 30 20 69 73 20 73 61 66 65  ** P3==0 is safe
276c0 72 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 21 3d  r..**.** If P3!=
276d0 30 20 74 68 65 6e 20 74 68 65 20 63 6f 6e 74 65  0 then the conte
276e0 6e 74 20 6f 66 20 74 68 65 20 50 32 20 72 65 67  nt of the P2 reg
276f0 69 73 74 65 72 20 69 73 20 75 6e 73 75 69 74 61  ister is unsuita
27700 62 6c 65 20 66 6f 72 20 75 73 65 0a 2a 2a 20 69  ble for use.** i
27710 6e 20 4f 50 5f 52 65 73 75 6c 74 20 61 6e 64 20  n OP_Result and 
27720 61 6e 79 20 4f 50 5f 52 65 73 75 6c 74 20 77 69  any OP_Result wi
27730 6c 6c 20 69 6e 76 61 6c 69 64 61 74 65 20 74 68  ll invalidate th
27740 65 20 50 32 20 72 65 67 69 73 74 65 72 20 63 6f  e P2 register co
27750 6e 74 65 6e 74 2e 0a 2a 2a 20 54 68 65 20 50 32  ntent..** The P2
27760 20 72 65 67 69 73 74 65 72 20 63 6f 6e 74 65 6e   register conten
27770 74 20 69 73 20 69 6e 76 61 6c 69 64 61 74 65 64  t is invalidated
27780 20 62 79 20 6f 70 63 6f 64 65 73 20 6c 69 6b 65   by opcodes like
27790 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 20 6f 72 0a   OP_Function or.
277a0 2a 2a 20 62 79 20 61 6e 79 20 75 73 65 20 6f 66  ** by any use of
277b0 20 61 6e 6f 74 68 65 72 20 63 75 72 73 6f 72 20   another cursor 
277c0 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 65 20  pointing to the 
277d0 73 61 6d 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63  same table..*/.c
277e0 61 73 65 20 4f 50 5f 52 6f 77 44 61 74 61 3a 20  ase OP_RowData: 
277f0 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
27800 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
27810 70 43 72 73 72 3b 0a 20 20 75 33 32 20 6e 3b 0a  pCrsr;.  u32 n;.
27820 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
27830 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
27840 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
27850 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
27860 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
27870 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
27880 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
27890 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
278a0 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
278b0 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
278c0 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28  REE );.  assert(
278d0 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 30   isSorter(pC)==0
278e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
278f0 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b 0a  ->nullRow==0 );.
27900 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63    assert( pC->uc
27910 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  .pCursor!=0 );. 
27920 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e   pCrsr = pC->uc.
27930 70 43 75 72 73 6f 72 3b 0a 0a 20 20 2f 2a 20 54  pCursor;..  /* T
27940 68 65 20 4f 50 5f 52 6f 77 44 61 74 61 20 6f 70  he OP_RowData op
27950 63 6f 64 65 73 20 61 6c 77 61 79 73 20 66 6f 6c  codes always fol
27960 6c 6f 77 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73  low OP_NotExists
27970 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 53 65 65 6b   or.  ** OP_Seek
27980 52 6f 77 69 64 20 6f 72 20 4f 50 5f 52 65 77 69  Rowid or OP_Rewi
27990 6e 64 2f 4f 70 5f 4e 65 78 74 20 77 69 74 68 20  nd/Op_Next with 
279a0 6e 6f 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 69  no intervening i
279b0 6e 73 74 72 75 63 74 69 6f 6e 73 0a 20 20 2a 2a  nstructions.  **
279c0 20 74 68 61 74 20 6d 69 67 68 74 20 69 6e 76 61   that might inva
279d0 6c 69 64 61 74 65 20 74 68 65 20 63 75 72 73 6f  lidate the curso
279e0 72 2e 0a 20 20 2a 2a 20 49 66 20 74 68 69 73 20  r..  ** If this 
279f0 77 68 65 72 65 20 6e 6f 74 20 74 68 65 20 63 61  where not the ca
27a00 73 65 2c 20 6f 6e 20 6f 66 20 74 68 65 20 66 6f  se, on of the fo
27a10 6c 6c 6f 77 69 6e 67 20 61 73 73 65 72 74 28 29  llowing assert()
27a20 73 0a 20 20 2a 2a 20 77 6f 75 6c 64 20 66 61 69  s.  ** would fai
27a30 6c 2e 20 20 53 68 6f 75 6c 64 20 74 68 69 73 20  l.  Should this 
27a40 65 76 65 72 20 63 68 61 6e 67 65 20 28 62 65 63  ever change (bec
27a50 61 75 73 65 20 6f 66 20 63 68 61 6e 67 65 73 20  ause of changes 
27a60 69 6e 20 74 68 65 20 63 6f 64 65 0a 20 20 2a 2a  in the code.  **
27a70 20 67 65 6e 65 72 61 74 6f 72 29 20 74 68 65 6e   generator) then
27a80 20 74 68 65 20 66 69 78 20 77 6f 75 6c 64 20 62   the fix would b
27a90 65 20 74 6f 20 69 6e 73 65 72 74 20 61 20 63 61  e to insert a ca
27aa0 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74  ll to.  ** sqlit
27ab0 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
27ac0 74 6f 28 29 2e 0a 20 20 2a 2f 0a 20 20 61 73 73  to()..  */.  ass
27ad0 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
27ae0 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
27af0 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
27b00 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69  treeCursorIsVali
27b10 64 28 70 43 72 73 72 29 20 29 3b 0a 23 69 66 20  d(pCrsr) );.#if 
27b20 30 20 20 2f 2a 20 4e 6f 74 20 72 65 71 75 69 72  0  /* Not requir
27b30 65 64 20 64 75 65 20 74 6f 20 74 68 65 20 70 72  ed due to the pr
27b40 65 76 69 6f 75 73 20 74 6f 20 61 73 73 65 72 74  evious to assert
27b50 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 2a 2f  () statements */
27b60 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
27b70 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
27b80 70 43 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53  pC);.  if( rc!=S
27b90 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20  QLITE_OK ) goto 
27ba0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
27bb0 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 6e 20  or;.#endif..  n 
27bc0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61  = sqlite3BtreePa
27bd0 79 6c 6f 61 64 53 69 7a 65 28 70 43 72 73 72 29  yloadSize(pCrsr)
27be0 3b 0a 20 20 69 66 28 20 6e 3e 28 75 33 32 29 64  ;.  if( n>(u32)d
27bf0 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
27c00 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
27c10 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
27c20 69 67 3b 0a 20 20 7d 0a 20 20 74 65 73 74 63 61  ig;.  }.  testca
27c30 73 65 28 20 6e 3d 3d 30 20 29 3b 0a 20 20 72 63  se( n==0 );.  rc
27c40 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
27c50 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73 72  mFromBtree(pCrsr
27c60 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 29 3b 0a 20  , 0, n, pOut);. 
27c70 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
27c80 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
27c90 72 3b 0a 20 20 69 66 28 20 21 70 4f 70 2d 3e 70  r;.  if( !pOp->p
27ca0 33 20 29 20 44 65 65 70 68 65 6d 65 72 61 6c 69  3 ) Deephemerali
27cb0 7a 65 28 70 4f 75 74 29 3b 0a 20 20 55 50 44 41  ze(pOut);.  UPDA
27cc0 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
27cd0 70 4f 75 74 29 3b 0a 20 20 52 45 47 49 53 54 45  pOut);.  REGISTE
27ce0 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
27cf0 20 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b   pOut);.  break;
27d00 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
27d10 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a  owid P1 P2 * * *
27d20 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
27d30 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20  P2]=rowid.**.** 
27d40 53 74 6f 72 65 20 69 6e 20 72 65 67 69 73 74 65  Store in registe
27d50 72 20 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20  r P2 an integer 
27d60 77 68 69 63 68 20 69 73 20 74 68 65 20 6b 65 79  which is the key
27d70 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e   of the table en
27d80 74 72 79 20 74 68 61 74 0a 2a 2a 20 50 31 20 69  try that.** P1 i
27d90 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
27da0 74 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 63  t to..**.** P1 c
27db0 61 6e 20 62 65 20 65 69 74 68 65 72 20 61 6e 20  an be either an 
27dc0 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 20 6f  ordinary table o
27dd0 72 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  r a virtual tabl
27de0 65 2e 20 20 54 68 65 72 65 20 75 73 65 64 20 74  e.  There used t
27df0 6f 0a 2a 2a 20 62 65 20 61 20 73 65 70 61 72 61  o.** be a separa
27e00 74 65 20 4f 50 5f 56 52 6f 77 69 64 20 6f 70 63  te OP_VRowid opc
27e10 6f 64 65 20 66 6f 72 20 75 73 65 20 77 69 74 68  ode for use with
27e20 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 2c   virtual tables,
27e30 20 62 75 74 20 74 68 69 73 0a 2a 2a 20 6f 6e 65   but this.** one
27e40 20 6f 70 63 6f 64 65 20 6e 6f 77 20 77 6f 72 6b   opcode now work
27e50 73 20 66 6f 72 20 62 6f 74 68 20 74 61 62 6c 65  s for both table
27e60 20 74 79 70 65 73 2e 0a 2a 2f 0a 63 61 73 65 20   types..*/.case 
27e70 4f 50 5f 52 6f 77 69 64 3a 20 7b 20 20 20 20 20  OP_Rowid: {     
27e80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
27e90 75 74 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ut2 */.  VdbeCur
27ea0 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34 20 76  sor *pC;.  i64 v
27eb0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ;.  sqlite3_vtab
27ec0 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74   *pVtab;.  const
27ed0 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
27ee0 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 70 4f 75  *pModule;..  pOu
27ef0 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
27f00 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73  se(p, pOp);.  as
27f10 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
27f20 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
27f30 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
27f40 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
27f50 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
27f60 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
27f70 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21 3d 43   pC->eCurType!=C
27f80 55 52 54 59 50 45 5f 50 53 45 55 44 4f 20 7c 7c  URTYPE_PSEUDO ||
27f90 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a   pC->nullRow );.
27fa0 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f    if( pC->nullRo
27fb0 77 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  w ){.    pOut->f
27fc0 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
27fd0 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 65  .    break;.  }e
27fe0 6c 73 65 20 69 66 28 20 70 43 2d 3e 64 65 66 65  lse if( pC->defe
27ff0 72 72 65 64 4d 6f 76 65 74 6f 20 29 7b 0a 20 20  rredMoveto ){.  
28000 20 20 76 20 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f    v = pC->moveto
28010 54 61 72 67 65 74 3b 0a 23 69 66 6e 64 65 66 20  Target;.#ifndef 
28020 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
28030 55 41 4c 54 41 42 4c 45 0a 20 20 7d 65 6c 73 65  UALTABLE.  }else
28040 20 69 66 28 20 70 43 2d 3e 65 43 75 72 54 79 70   if( pC->eCurTyp
28050 65 3d 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20  e==CURTYPE_VTAB 
28060 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
28070 43 2d 3e 75 63 2e 70 56 43 75 72 21 3d 30 20 29  C->uc.pVCur!=0 )
28080 3b 0a 20 20 20 20 70 56 74 61 62 20 3d 20 70 43  ;.    pVtab = pC
28090 2d 3e 75 63 2e 70 56 43 75 72 2d 3e 70 56 74 61  ->uc.pVCur->pVta
280a0 62 3b 0a 20 20 20 20 70 4d 6f 64 75 6c 65 20 3d  b;.    pModule =
280b0 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b   pVtab->pModule;
280c0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4d 6f  .    assert( pMo
280d0 64 75 6c 65 2d 3e 78 52 6f 77 69 64 20 29 3b 0a  dule->xRowid );.
280e0 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65      rc = pModule
280f0 2d 3e 78 52 6f 77 69 64 28 70 43 2d 3e 75 63 2e  ->xRowid(pC->uc.
28100 70 56 43 75 72 2c 20 26 76 29 3b 0a 20 20 20 20  pVCur, &v);.    
28110 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
28120 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62  tErrmsg(p, pVtab
28130 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20  );.    if( rc ) 
28140 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
28150 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66 20  o_error;.#endif 
28160 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
28170 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 20  IRTUALTABLE */. 
28180 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
28190 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
281a0 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
281b0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
281c0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30  C->uc.pCursor!=0
281d0 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   );.    rc = sql
281e0 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 52 65  ite3VdbeCursorRe
281f0 73 74 6f 72 65 28 70 43 29 3b 0a 20 20 20 20 69  store(pC);.    i
28200 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
28210 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
28220 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c  .    if( pC->nul
28230 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 70 4f  lRow ){.      pO
28240 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
28250 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 62 72 65 61  Null;.      brea
28260 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 76 20 3d  k;.    }.    v =
28270 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74   sqlite3BtreeInt
28280 65 67 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e 70  egerKey(pC->uc.p
28290 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 70  Cursor);.  }.  p
282a0 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20  Out->u.i = v;.  
282b0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
282c0 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77 20 50 31 20  ode: NullRow P1 
282d0 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f  * * * *.**.** Mo
282e0 76 65 20 74 68 65 20 63 75 72 73 6f 72 20 50 31  ve the cursor P1
282f0 20 74 6f 20 61 20 6e 75 6c 6c 20 72 6f 77 2e 20   to a null row. 
28300 20 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f   Any OP_Column o
28310 70 65 72 61 74 69 6f 6e 73 0a 2a 2a 20 74 68 61  perations.** tha
28320 74 20 6f 63 63 75 72 20 77 68 69 6c 65 20 74 68  t occur while th
28330 65 20 63 75 72 73 6f 72 20 69 73 20 6f 6e 20 74  e cursor is on t
28340 68 65 20 6e 75 6c 6c 20 72 6f 77 20 77 69 6c 6c  he null row will
28350 20 61 6c 77 61 79 73 0a 2a 2a 20 77 72 69 74 65   always.** write
28360 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65   a NULL..*/.case
28370 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a 20   OP_NullRow: {. 
28380 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
28390 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
283a0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
283b0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
283c0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
283d0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
283e0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70  rt( pC!=0 );.  p
283f0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  C->nullRow = 1;.
28400 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
28410 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
28420 0a 20 20 69 66 28 20 70 43 2d 3e 65 43 75 72 54  .  if( pC->eCurT
28430 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
28440 45 45 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  EE ){.    assert
28450 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  ( pC->uc.pCursor
28460 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  !=0 );.    sqlit
28470 65 33 42 74 72 65 65 43 6c 65 61 72 43 75 72 73  e3BtreeClearCurs
28480 6f 72 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  or(pC->uc.pCurso
28490 72 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  r);.  }.  break;
284a0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  .}../* Opcode: L
284b0 61 73 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ast P1 P2 P3 * *
284c0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20  .**.** The next 
284d0 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64  use of the Rowid
284e0 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 50 72   or Column or Pr
284f0 65 76 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66  ev instruction f
28500 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72  or P1 .** will r
28510 65 66 65 72 20 74 6f 20 74 68 65 20 6c 61 73 74  efer to the last
28520 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61   entry in the da
28530 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
28540 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65  index..** If the
28550 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
28560 69 73 20 65 6d 70 74 79 20 61 6e 64 20 50 32 3e  is empty and P2>
28570 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d  0, then jump imm
28580 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a  ediately to P2..
28590 2a 2a 20 49 66 20 50 32 20 69 73 20 30 20 6f 72  ** If P2 is 0 or
285a0 20 69 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   if the table or
285b0 20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d   index is not em
285c0 70 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  pty, fall throug
285d0 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c  h.** to the foll
285e0 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f  owing instructio
285f0 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  n..**.** This op
28600 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20  code leaves the 
28610 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65  cursor configure
28620 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76  d to move in rev
28630 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66  erse order,.** f
28640 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61  rom the end towa
28650 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  rd the beginning
28660 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
28670 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  s, the cursor is
28680 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74  .** configured t
28690 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20  o use Prev, not 
286a0 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  Next..**.** If P
286b0 33 20 69 73 20 2d 31 2c 20 74 68 65 6e 20 74 68  3 is -1, then th
286c0 65 20 63 75 72 73 6f 72 20 69 73 20 70 6f 73 69  e cursor is posi
286d0 74 69 6f 6e 65 64 20 61 74 20 74 68 65 20 65 6e  tioned at the en
286e0 64 20 6f 66 20 74 68 65 20 62 74 72 65 65 0a 2a  d of the btree.*
286f0 2a 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73  * for the purpos
28700 65 20 6f 66 20 61 70 70 65 6e 64 69 6e 67 20 61  e of appending a
28710 20 6e 65 77 20 65 6e 74 72 79 20 6f 6e 74 6f 20   new entry onto 
28720 74 68 65 20 62 74 72 65 65 2e 20 20 49 6e 20 74  the btree.  In t
28730 68 61 74 0a 2a 2a 20 63 61 73 65 20 50 32 20 6d  hat.** case P2 m
28740 75 73 74 20 62 65 20 30 2e 20 20 49 74 20 69 73  ust be 0.  It is
28750 20 61 73 73 75 6d 65 64 20 74 68 61 74 20 74 68   assumed that th
28760 65 20 63 75 72 73 6f 72 20 69 73 20 75 73 65 64  e cursor is used
28770 20 6f 6e 6c 79 20 66 6f 72 0a 2a 2a 20 61 70 70   only for.** app
28780 65 6e 64 69 6e 67 20 61 6e 64 20 73 6f 20 69 66  ending and so if
28790 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 76   the cursor is v
287a0 61 6c 69 64 2c 20 74 68 65 6e 20 74 68 65 20 63  alid, then the c
287b0 75 72 73 6f 72 20 6d 75 73 74 20 61 6c 72 65 61  ursor must alrea
287c0 64 79 0a 2a 2a 20 62 65 20 70 6f 69 6e 74 69 6e  dy.** be pointin
287d0 67 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20  g at the end of 
287e0 74 68 65 20 62 74 72 65 65 20 61 6e 64 20 73 6f  the btree and so
287f0 20 6e 6f 20 63 68 61 6e 67 65 73 20 61 72 65 20   no changes are 
28800 6d 61 64 65 20 74 6f 0a 2a 2a 20 74 68 65 20 63  made to.** the c
28810 75 72 73 6f 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ursor..*/.case O
28820 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20 20 20  P_Last: {       
28830 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64   /* jump */.  Vd
28840 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
28850 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
28860 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61  .  int res;..  a
28870 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
28880 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
28890 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
288a0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
288b0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
288c0 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
288d0 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
288e0 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
288f0 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75  .  pCrsr = pC->u
28900 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 72 65 73  c.pCursor;.  res
28910 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
28920 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 70 43  pCrsr!=0 );.  pC
28930 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 70  ->seekResult = p
28940 4f 70 2d 3e 70 33 3b 0a 23 69 66 64 65 66 20 53  Op->p3;.#ifdef S
28950 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43  QLITE_DEBUG.  pC
28960 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 4c 61  ->seekOp = OP_La
28970 73 74 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28  st;.#endif.  if(
28980 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 7c 7c 20 21   pOp->p3==0 || !
28990 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
289a0 6f 72 49 73 56 61 6c 69 64 4e 4e 28 70 43 72 73  orIsValidNN(pCrs
289b0 72 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  r) ){.    rc = s
289c0 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28  qlite3BtreeLast(
289d0 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20  pCrsr, &res);.  
289e0 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
289f0 28 75 38 29 72 65 73 3b 0a 20 20 20 20 70 43 2d  (u8)res;.    pC-
28a00 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
28a10 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63  = 0;.    pC->cac
28a20 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
28a30 5f 53 54 41 4c 45 3b 0a 20 20 20 20 69 66 28 20  _STALE;.    if( 
28a40 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
28a50 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
28a60 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3e 30 20    if( pOp->p2>0 
28a70 29 7b 0a 20 20 20 20 20 20 56 64 62 65 42 72 61  ){.      VdbeBra
28a80 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c  nchTaken(res!=0,
28a90 32 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 65  2);.      if( re
28aa0 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  s ) goto jump_to
28ab0 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  _p2;.    }.  }el
28ac0 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
28ad0 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20 20  pOp->p2==0 );.  
28ae0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
28af0 20 4f 70 63 6f 64 65 3a 20 49 66 53 6d 61 6c 6c   Opcode: IfSmall
28b00 65 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  er P1 P2 P3 * *.
28b10 2a 2a 0a 2a 2a 20 45 73 74 69 6d 61 74 65 20 74  **.** Estimate t
28b20 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
28b30 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 50  s in the table P
28b40 31 2e 20 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  1.  Jump to P2 i
28b50 66 20 74 68 61 74 0a 2a 2a 20 65 73 74 69 6d 61  f that.** estima
28b60 74 65 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  te is less than 
28b70 61 70 70 72 6f 78 69 6d 61 74 65 6c 79 20 32 2a  approximately 2*
28b80 2a 28 30 2e 31 2a 50 33 29 2e 0a 2a 2f 0a 63 61  *(0.1*P3)..*/.ca
28b90 73 65 20 4f 50 5f 49 66 53 6d 61 6c 6c 65 72 3a  se OP_IfSmaller:
28ba0 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
28bb0 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  p */.  VdbeCurso
28bc0 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
28bd0 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
28be0 72 65 73 3b 0a 20 20 69 36 34 20 73 7a 3b 0a 0a  res;.  i64 sz;..
28bf0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
28c00 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
28c10 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
28c20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
28c30 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
28c40 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72  ( pC!=0 );.  pCr
28c50 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72  sr = pC->uc.pCur
28c60 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70  sor;.  assert( p
28c70 43 72 73 72 20 29 3b 0a 20 20 72 63 20 3d 20 73  Crsr );.  rc = s
28c80 71 6c 69 74 65 33 42 74 72 65 65 46 69 72 73 74  qlite3BtreeFirst
28c90 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20  (pCrsr, &res);. 
28ca0 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
28cb0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
28cc0 72 3b 0a 20 20 69 66 28 20 72 65 73 3d 3d 30 20  r;.  if( res==0 
28cd0 29 7b 0a 20 20 20 20 73 7a 20 3d 20 73 71 6c 69  ){.    sz = sqli
28ce0 74 65 33 42 74 72 65 65 52 6f 77 43 6f 75 6e 74  te3BtreeRowCount
28cf0 45 73 74 28 70 43 72 73 72 29 3b 0a 20 20 20 20  Est(pCrsr);.    
28d00 69 66 28 20 41 4c 57 41 59 53 28 73 7a 3e 3d 30  if( ALWAYS(sz>=0
28d10 29 20 26 26 20 73 71 6c 69 74 65 33 4c 6f 67 45  ) && sqlite3LogE
28d20 73 74 28 28 75 36 34 29 73 7a 29 3c 70 4f 70 2d  st((u64)sz)<pOp-
28d30 3e 70 33 20 29 20 72 65 73 20 3d 20 31 3b 0a 20  >p3 ) res = 1;. 
28d40 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54   }.  VdbeBranchT
28d50 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a  aken(res!=0,2);.
28d60 20 20 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f    if( res ) goto
28d70 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62   jump_to_p2;.  b
28d80 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63  reak;.}.../* Opc
28d90 6f 64 65 3a 20 53 6f 72 74 65 72 53 6f 72 74 20  ode: SorterSort 
28da0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
28db0 2a 20 41 66 74 65 72 20 61 6c 6c 20 72 65 63 6f  * After all reco
28dc0 72 64 73 20 68 61 76 65 20 62 65 65 6e 20 69 6e  rds have been in
28dd0 73 65 72 74 65 64 20 69 6e 74 6f 20 74 68 65 20  serted into the 
28de0 53 6f 72 74 65 72 20 6f 62 6a 65 63 74 0a 2a 2a  Sorter object.**
28df0 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50   identified by P
28e00 31 2c 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f  1, invoke this o
28e10 70 63 6f 64 65 20 74 6f 20 61 63 74 75 61 6c 6c  pcode to actuall
28e20 79 20 64 6f 20 74 68 65 20 73 6f 72 74 69 6e 67  y do the sorting
28e30 2e 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20  ..** Jump to P2 
28e40 69 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  if there are no 
28e50 72 65 63 6f 72 64 73 20 74 6f 20 62 65 20 73 6f  records to be so
28e60 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  rted..**.** This
28e70 20 6f 70 63 6f 64 65 20 69 73 20 61 6e 20 61 6c   opcode is an al
28e80 69 61 73 20 66 6f 72 20 4f 50 5f 53 6f 72 74 20  ias for OP_Sort 
28e90 61 6e 64 20 4f 50 5f 52 65 77 69 6e 64 20 74 68  and OP_Rewind th
28ea0 61 74 20 69 73 20 75 73 65 64 0a 2a 2a 20 66 6f  at is used.** fo
28eb0 72 20 53 6f 72 74 65 72 20 6f 62 6a 65 63 74 73  r Sorter objects
28ec0 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
28ed0 53 6f 72 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  Sort P1 P2 * * *
28ee0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
28ef0 64 65 20 64 6f 65 73 20 65 78 61 63 74 6c 79 20  de does exactly 
28f00 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67 20 61  the same thing a
28f10 73 20 4f 50 5f 52 65 77 69 6e 64 20 65 78 63 65  s OP_Rewind exce
28f20 70 74 20 74 68 61 74 0a 2a 2a 20 69 74 20 69 6e  pt that.** it in
28f30 63 72 65 6d 65 6e 74 73 20 61 6e 20 75 6e 64 6f  crements an undo
28f40 63 75 6d 65 6e 74 65 64 20 67 6c 6f 62 61 6c 20  cumented global 
28f50 76 61 72 69 61 62 6c 65 20 75 73 65 64 20 66 6f  variable used fo
28f60 72 20 74 65 73 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a  r testing..**.**
28f70 20 53 6f 72 74 69 6e 67 20 69 73 20 61 63 63 6f   Sorting is acco
28f80 6d 70 6c 69 73 68 65 64 20 62 79 20 77 72 69 74  mplished by writ
28f90 69 6e 67 20 72 65 63 6f 72 64 73 20 69 6e 74 6f  ing records into
28fa0 20 61 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78   a sorting index
28fb0 2c 0a 2a 2a 20 74 68 65 6e 20 72 65 77 69 6e 64  ,.** then rewind
28fc0 69 6e 67 20 74 68 61 74 20 69 6e 64 65 78 20 61  ing that index a
28fd0 6e 64 20 70 6c 61 79 69 6e 67 20 69 74 20 62 61  nd playing it ba
28fe0 63 6b 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e  ck from beginnin
28ff0 67 20 74 6f 0a 2a 2a 20 65 6e 64 2e 20 20 57 65  g to.** end.  We
29000 20 75 73 65 20 74 68 65 20 4f 50 5f 53 6f 72 74   use the OP_Sort
29010 20 6f 70 63 6f 64 65 20 69 6e 73 74 65 61 64 20   opcode instead 
29020 6f 66 20 4f 50 5f 52 65 77 69 6e 64 20 74 6f 20  of OP_Rewind to 
29030 64 6f 20 74 68 65 0a 2a 2a 20 72 65 77 69 6e 64  do the.** rewind
29040 69 6e 67 20 73 6f 20 74 68 61 74 20 74 68 65 20  ing so that the 
29050 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
29060 77 69 6c 6c 20 62 65 20 69 6e 63 72 65 6d 65 6e  will be incremen
29070 74 65 64 20 61 6e 64 0a 2a 2a 20 72 65 67 72 65  ted and.** regre
29080 73 73 69 6f 6e 20 74 65 73 74 73 20 63 61 6e 20  ssion tests can 
29090 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65  determine whethe
290a0 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 6f 70 74  r or not the opt
290b0 69 6d 69 7a 65 72 20 69 73 0a 2a 2a 20 63 6f 72  imizer is.** cor
290c0 72 65 63 74 6c 79 20 6f 70 74 69 6d 69 7a 69 6e  rectly optimizin
290d0 67 20 6f 75 74 20 73 6f 72 74 73 2e 0a 2a 2f 0a  g out sorts..*/.
290e0 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 53 6f  case OP_SorterSo
290f0 72 74 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a  rt:    /* jump *
29100 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 3a 20  /.case OP_Sort: 
29110 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
29120 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
29130 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33  E_TEST.  sqlite3
29140 5f 73 6f 72 74 5f 63 6f 75 6e 74 2b 2b 3b 0a 20  _sort_count++;. 
29150 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
29160 63 6f 75 6e 74 2d 2d 3b 0a 23 65 6e 64 69 66 0a  count--;.#endif.
29170 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51    p->aCounter[SQ
29180 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f  LITE_STMTSTATUS_
29190 53 4f 52 54 5d 2b 2b 3b 0a 20 20 2f 2a 20 46 61  SORT]++;.  /* Fa
291a0 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20  ll through into 
291b0 4f 50 5f 52 65 77 69 6e 64 20 2a 2f 0a 7d 0a 2f  OP_Rewind */.}./
291c0 2a 20 4f 70 63 6f 64 65 3a 20 52 65 77 69 6e 64  * Opcode: Rewind
291d0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
291e0 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65 20  ** The next use 
291f0 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72 20  of the Rowid or 
29200 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69  Column or Next i
29210 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20 50  nstruction for P
29220 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72  1 .** will refer
29230 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6e   to the first en
29240 74 72 79 20 69 6e 20 74 68 65 20 64 61 74 61 62  try in the datab
29250 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  ase table or ind
29260 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61  ex..** If the ta
29270 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
29280 65 6d 70 74 79 2c 20 6a 75 6d 70 20 69 6d 6d 65  empty, jump imme
29290 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
292a0 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f  * If the table o
292b0 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65  r index is not e
292c0 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75  mpty, fall throu
292d0 67 68 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77  gh to the follow
292e0 69 6e 67 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74  ing .** instruct
292f0 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ion..**.** This 
29300 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68  opcode leaves th
29310 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75  e cursor configu
29320 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66  red to move in f
29330 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a  orward order,.**
29340 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e   from the beginn
29350 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65 20 65  ing toward the e
29360 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  nd.  In other wo
29370 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20  rds, the cursor 
29380 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64  is.** configured
29390 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f   to use Next, no
293a0 74 20 50 72 65 76 2e 0a 2a 2f 0a 63 61 73 65 20  t Prev..*/.case 
293b0 4f 50 5f 52 65 77 69 6e 64 3a 20 7b 20 20 20 20  OP_Rewind: {    
293c0 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
293d0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
293e0 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
293f0 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a  sr;.  int res;..
29400 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
29410 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
29420 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
29430 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
29440 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
29450 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
29460 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43  ert( isSorter(pC
29470 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  )==(pOp->opcode=
29480 3d 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74 29 20  =OP_SorterSort) 
29490 29 3b 0a 20 20 72 65 73 20 3d 20 31 3b 0a 23 69  );.  res = 1;.#i
294a0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
294b0 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d  G.  pC->seekOp =
294c0 20 4f 50 5f 52 65 77 69 6e 64 3b 0a 23 65 6e 64   OP_Rewind;.#end
294d0 69 66 0a 20 20 69 66 28 20 69 73 53 6f 72 74 65  if.  if( isSorte
294e0 72 28 70 43 29 20 29 7b 0a 20 20 20 20 72 63 20  r(pC) ){.    rc 
294f0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  = sqlite3VdbeSor
29500 74 65 72 52 65 77 69 6e 64 28 70 43 2c 20 26 72  terRewind(pC, &r
29510 65 73 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  es);.  }else{.  
29520 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
29530 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
29540 42 54 52 45 45 20 29 3b 0a 20 20 20 20 70 43 72  BTREE );.    pCr
29550 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72  sr = pC->uc.pCur
29560 73 6f 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28  sor;.    assert(
29570 20 70 43 72 73 72 20 29 3b 0a 20 20 20 20 72 63   pCrsr );.    rc
29580 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 46   = sqlite3BtreeF
29590 69 72 73 74 28 70 43 72 73 72 2c 20 26 72 65 73  irst(pCrsr, &res
295a0 29 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72  );.    pC->defer
295b0 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
295c0 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
295d0 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
295e0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29  ;.  }.  if( rc )
295f0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
29600 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 43 2d 3e  to_error;.  pC->
29610 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65  nullRow = (u8)re
29620 73 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  s;.  assert( pOp
29630 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
29640 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 56 64  2<p->nOp );.  Vd
29650 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
29660 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72  s!=0,2);.  if( r
29670 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  es ) goto jump_t
29680 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  o_p2;.  break;.}
29690 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78  ../* Opcode: Nex
296a0 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  t P1 P2 P3 P4 P5
296b0 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 63  .**.** Advance c
296c0 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
296d0 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
296e0 65 20 6e 65 78 74 20 6b 65 79 2f 64 61 74 61 20  e next key/data 
296f0 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74  pair in its.** t
29700 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20  able or index.  
29710 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
29720 6d 6f 72 65 20 6b 65 79 2f 76 61 6c 75 65 20 70  more key/value p
29730 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74  airs then fall t
29740 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65  hrough.** to the
29750 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72   following instr
29760 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20  uction.  But if 
29770 74 68 65 20 63 75 72 73 6f 72 20 61 64 76 61 6e  the cursor advan
29780 63 65 20 77 61 73 20 73 75 63 63 65 73 73 66 75  ce was successfu
29790 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64  l,.** jump immed
297a0 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a  iately to P2..**
297b0 0a 2a 2a 20 54 68 65 20 4e 65 78 74 20 6f 70 63  .** The Next opc
297c0 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69  ode is only vali
297d0 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20 53  d following an S
297e0 65 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20 6f  eekGT, SeekGE, o
297f0 72 0a 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 20 6f  r.** OP_Rewind o
29800 70 63 6f 64 65 20 75 73 65 64 20 74 6f 20 70 6f  pcode used to po
29810 73 69 74 69 6f 6e 20 74 68 65 20 63 75 72 73 6f  sition the curso
29820 72 2e 20 20 4e 65 78 74 20 69 73 20 6e 6f 74 20  r.  Next is not 
29830 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f  allowed.** to fo
29840 6c 6c 6f 77 20 53 65 65 6b 4c 54 2c 20 53 65 65  llow SeekLT, See
29850 6b 4c 45 2c 20 6f 72 20 4f 50 5f 4c 61 73 74 2e  kLE, or OP_Last.
29860 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75  .**.** The P1 cu
29870 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72  rsor must be for
29880 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e   a real table, n
29890 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  ot a pseudo-tabl
298a0 65 2e 20 20 50 31 20 6d 75 73 74 20 68 61 76 65  e.  P1 must have
298b0 0a 2a 2a 20 62 65 65 6e 20 6f 70 65 6e 65 64 20  .** been opened 
298c0 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20 6f 70  prior to this op
298d0 63 6f 64 65 20 6f 72 20 74 68 65 20 70 72 6f 67  code or the prog
298e0 72 61 6d 20 77 69 6c 6c 20 73 65 67 66 61 75 6c  ram will segfaul
298f0 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33 20  t..**.** The P3 
29900 76 61 6c 75 65 20 69 73 20 61 20 68 69 6e 74 20  value is a hint 
29910 74 6f 20 74 68 65 20 62 74 72 65 65 20 69 6d 70  to the btree imp
29920 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 49 66 20  lementation. If 
29930 50 33 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a 20 6d  P3==1, that.** m
29940 65 61 6e 73 20 50 31 20 69 73 20 61 6e 20 53 51  eans P1 is an SQ
29950 4c 20 69 6e 64 65 78 20 61 6e 64 20 74 68 61 74  L index and that
29960 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
29970 6e 20 63 6f 75 6c 64 20 68 61 76 65 20 62 65 65  n could have bee
29980 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64 20 69 66 20  n.** omitted if 
29990 74 68 61 74 20 69 6e 64 65 78 20 68 61 64 20 62  that index had b
299a0 65 65 6e 20 75 6e 69 71 75 65 2e 20 20 50 33 20  een unique.  P3 
299b0 69 73 20 75 73 75 61 6c 6c 79 20 30 2e 20 20 50  is usually 0.  P
299c0 33 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 65  3 is.** always e
299d0 69 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2a  ither 0 or 1..**
299e0 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77 61 79 73  .** P4 is always
299f0 20 6f 66 20 74 79 70 65 20 50 34 5f 41 44 56 41   of type P4_ADVA
29a00 4e 43 45 2e 20 54 68 65 20 66 75 6e 63 74 69 6f  NCE. The functio
29a10 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69 6e 74 73  n pointer points
29a20 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 42 74   to.** sqlite3Bt
29a30 72 65 65 4e 65 78 74 28 29 2e 0a 2a 2a 0a 2a 2a  reeNext()..**.**
29a40 20 49 66 20 50 35 20 69 73 20 70 6f 73 69 74 69   If P5 is positi
29a50 76 65 20 61 6e 64 20 74 68 65 20 6a 75 6d 70 20  ve and the jump 
29a60 69 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65  is taken, then e
29a70 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20  vent counter.** 
29a80 6e 75 6d 62 65 72 20 50 35 2d 31 20 69 6e 20 74  number P5-1 in t
29a90 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74  he prepared stat
29aa0 65 6d 65 6e 74 20 69 73 20 69 6e 63 72 65 6d 65  ement is increme
29ab0 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  nted..**.** See 
29ac0 61 6c 73 6f 3a 20 50 72 65 76 2c 20 4e 65 78 74  also: Prev, Next
29ad0 49 66 4f 70 65 6e 0a 2a 2f 0a 2f 2a 20 4f 70 63  IfOpen.*/./* Opc
29ae0 6f 64 65 3a 20 4e 65 78 74 49 66 4f 70 65 6e 20  ode: NextIfOpen 
29af0 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
29b00 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
29b10 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
29b20 20 4e 65 78 74 20 65 78 63 65 70 74 20 74 68 61   Next except tha
29b30 74 20 69 66 20 63 75 72 73 6f 72 20 50 31 20 69  t if cursor P1 i
29b40 73 20 6e 6f 74 0a 2a 2a 20 6f 70 65 6e 20 69 74  s not.** open it
29b50 20 62 65 68 61 76 65 73 20 61 20 6e 6f 2d 6f 70   behaves a no-op
29b60 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
29b70 50 72 65 76 20 50 31 20 50 32 20 50 33 20 50 34  Prev P1 P2 P3 P4
29b80 20 50 35 0a 2a 2a 0a 2a 2a 20 42 61 63 6b 20 75   P5.**.** Back u
29b90 70 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  p cursor P1 so t
29ba0 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  hat it points to
29bb0 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 6b 65   the previous ke
29bc0 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20 69  y/data pair in i
29bd0 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69  ts.** table or i
29be0 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72 65 20  ndex.  If there 
29bf0 69 73 20 6e 6f 20 70 72 65 76 69 6f 75 73 20 6b  is no previous k
29c00 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74  ey/value pairs t
29c10 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  hen fall through
29c20 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  .** to the follo
29c30 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e  wing instruction
29c40 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 63 75  .  But if the cu
29c50 72 73 6f 72 20 62 61 63 6b 75 70 20 77 61 73 20  rsor backup was 
29c60 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a  successful,.** j
29c70 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
29c80 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 0a 2a 2a 20  to P2..**.**.** 
29c90 54 68 65 20 50 72 65 76 20 6f 70 63 6f 64 65 20  The Prev opcode 
29ca0 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 66 6f  is only valid fo
29cb0 6c 6c 6f 77 69 6e 67 20 61 6e 20 53 65 65 6b 4c  llowing an SeekL
29cc0 54 2c 20 53 65 65 6b 4c 45 2c 20 6f 72 0a 2a 2a  T, SeekLE, or.**
29cd0 20 4f 50 5f 4c 61 73 74 20 6f 70 63 6f 64 65 20   OP_Last opcode 
29ce0 75 73 65 64 20 74 6f 20 70 6f 73 69 74 69 6f 6e  used to position
29cf0 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 50 72   the cursor.  Pr
29d00 65 76 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65  ev is not allowe
29d10 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77 20 53  d.** to follow S
29d20 65 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20 6f  eekGT, SeekGE, o
29d30 72 20 4f 50 5f 52 65 77 69 6e 64 2e 0a 2a 2a 0a  r OP_Rewind..**.
29d40 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f 72  ** The P1 cursor
29d50 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20 72   must be for a r
29d60 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61  eal table, not a
29d70 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20   pseudo-table.  
29d80 49 66 20 50 31 20 69 73 0a 2a 2a 20 6e 6f 74 20  If P1 is.** not 
29d90 6f 70 65 6e 20 74 68 65 6e 20 74 68 65 20 62 65  open then the be
29da0 68 61 76 69 6f 72 20 69 73 20 75 6e 64 65 66 69  havior is undefi
29db0 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  ned..**.** The P
29dc0 33 20 76 61 6c 75 65 20 69 73 20 61 20 68 69 6e  3 value is a hin
29dd0 74 20 74 6f 20 74 68 65 20 62 74 72 65 65 20 69  t to the btree i
29de0 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 49  mplementation. I
29df0 66 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a  f P3==1, that.**
29e00 20 6d 65 61 6e 73 20 50 31 20 69 73 20 61 6e 20   means P1 is an 
29e10 53 51 4c 20 69 6e 64 65 78 20 61 6e 64 20 74 68  SQL index and th
29e20 61 74 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  at this instruct
29e30 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65 20 62  ion could have b
29e40 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64 20 69  een.** omitted i
29e50 66 20 74 68 61 74 20 69 6e 64 65 78 20 68 61 64  f that index had
29e60 20 62 65 65 6e 20 75 6e 69 71 75 65 2e 20 20 50   been unique.  P
29e70 33 20 69 73 20 75 73 75 61 6c 6c 79 20 30 2e 20  3 is usually 0. 
29e80 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73   P3 is.** always
29e90 20 65 69 74 68 65 72 20 30 20 6f 72 20 31 2e 0a   either 0 or 1..
29ea0 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77 61  **.** P4 is alwa
29eb0 79 73 20 6f 66 20 74 79 70 65 20 50 34 5f 41 44  ys of type P4_AD
29ec0 56 41 4e 43 45 2e 20 54 68 65 20 66 75 6e 63 74  VANCE. The funct
29ed0 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69 6e  ion pointer poin
29ee0 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33  ts to.** sqlite3
29ef0 42 74 72 65 65 50 72 65 76 69 6f 75 73 28 29 2e  BtreePrevious().
29f00 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
29f10 70 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68 65  positive and the
29f20 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20   jump is taken, 
29f30 74 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74  then event count
29f40 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d  er.** number P5-
29f50 31 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65  1 in the prepare
29f60 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69  d statement is i
29f70 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2f 0a 2f  ncremented..*/./
29f80 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 49 66  * Opcode: PrevIf
29f90 4f 70 65 6e 20 50 31 20 50 32 20 50 33 20 50 34  Open P1 P2 P3 P4
29fa0 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f   P5.**.** This o
29fb0 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73 74  pcode works just
29fc0 20 6c 69 6b 65 20 50 72 65 76 20 65 78 63 65 70   like Prev excep
29fd0 74 20 74 68 61 74 20 69 66 20 63 75 72 73 6f 72  t that if cursor
29fe0 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 70   P1 is not.** op
29ff0 65 6e 20 69 74 20 62 65 68 61 76 65 73 20 61 20  en it behaves a 
2a000 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  no-op..*/./* Opc
2a010 6f 64 65 3a 20 53 6f 72 74 65 72 4e 65 78 74 20  ode: SorterNext 
2a020 50 31 20 50 32 20 2a 20 2a 20 50 35 0a 2a 2a 0a  P1 P2 * * P5.**.
2a030 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  ** This opcode w
2a040 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f  orks just like O
2a050 50 5f 4e 65 78 74 20 65 78 63 65 70 74 20 74 68  P_Next except th
2a060 61 74 20 50 31 20 6d 75 73 74 20 62 65 20 61 0a  at P1 must be a.
2a070 2a 2a 20 73 6f 72 74 65 72 20 6f 62 6a 65 63 74  ** sorter object
2a080 20 66 6f 72 20 77 68 69 63 68 20 74 68 65 20 4f   for which the O
2a090 50 5f 53 6f 72 74 65 72 53 6f 72 74 20 6f 70 63  P_SorterSort opc
2a0a0 6f 64 65 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20  ode has been.** 
2a0b0 69 6e 76 6f 6b 65 64 2e 20 20 54 68 69 73 20 6f  invoked.  This o
2a0c0 70 63 6f 64 65 20 61 64 76 61 6e 63 65 73 20 74  pcode advances t
2a0d0 68 65 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65  he cursor to the
2a0e0 20 6e 65 78 74 20 73 6f 72 74 65 64 0a 2a 2a 20   next sorted.** 
2a0f0 72 65 63 6f 72 64 2c 20 6f 72 20 6a 75 6d 70 73  record, or jumps
2a100 20 74 6f 20 50 32 20 69 66 20 74 68 65 72 65 20   to P2 if there 
2a110 61 72 65 20 6e 6f 20 6d 6f 72 65 20 73 6f 72 74  are no more sort
2a120 65 64 20 72 65 63 6f 72 64 73 2e 0a 2a 2f 0a 63  ed records..*/.c
2a130 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78  ase OP_SorterNex
2a140 74 3a 20 7b 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f  t: {  /* jump */
2a150 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
2a160 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20  C;.  int res;.. 
2a170 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
2a180 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2a190 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  t( isSorter(pC) 
2a1a0 29 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20  );.  res = 0;.  
2a1b0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
2a1c0 53 6f 72 74 65 72 4e 65 78 74 28 64 62 2c 20 70  SorterNext(db, p
2a1d0 43 2c 20 26 72 65 73 29 3b 0a 20 20 67 6f 74 6f  C, &res);.  goto
2a1e0 20 6e 65 78 74 5f 74 61 69 6c 3b 0a 63 61 73 65   next_tail;.case
2a1f0 20 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 3a 20   OP_PrevIfOpen: 
2a200 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61     /* jump */.ca
2a210 73 65 20 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e  se OP_NextIfOpen
2a220 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a  :    /* jump */.
2a230 20 20 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 70    if( p->apCsr[p
2a240 4f 70 2d 3e 70 31 5d 3d 3d 30 20 29 20 62 72 65  Op->p1]==0 ) bre
2a250 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68  ak;.  /* Fall th
2a260 72 6f 75 67 68 20 2a 2f 0a 63 61 73 65 20 4f 50  rough */.case OP
2a270 5f 50 72 65 76 3a 20 20 20 20 20 20 20 20 20 20  _Prev:          
2a280 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
2a290 4f 50 5f 4e 65 78 74 3a 20 20 20 20 20 20 20 20  OP_Next:        
2a2a0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61    /* jump */.  a
2a2b0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
2a2c0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
2a2d0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
2a2e0 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 41 72 72  ert( pOp->p5<Arr
2a2f0 61 79 53 69 7a 65 28 70 2d 3e 61 43 6f 75 6e 74  aySize(p->aCount
2a300 65 72 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  er) );.  pC = p-
2a310 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
2a320 0a 20 20 72 65 73 20 3d 20 70 4f 70 2d 3e 70 33  .  res = pOp->p3
2a330 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
2a340 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
2a350 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
2a360 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  o==0 );.  assert
2a370 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
2a380 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
2a390 0a 20 20 61 73 73 65 72 74 28 20 72 65 73 3d 3d  .  assert( res==
2a3a0 30 20 7c 7c 20 28 72 65 73 3d 3d 31 20 26 26 20  0 || (res==1 && 
2a3b0 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 29 20  pC->isTable==0) 
2a3c0 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 72  );.  testcase( r
2a3d0 65 73 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72  es==1 );.  asser
2a3e0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
2a3f0 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e  OP_Next || pOp->
2a400 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c  p4.xAdvance==sql
2a410 69 74 65 33 42 74 72 65 65 4e 65 78 74 20 29 3b  ite3BtreeNext );
2a420 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2a430 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20  opcode!=OP_Prev 
2a440 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61  || pOp->p4.xAdva
2a450 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65  nce==sqlite3Btre
2a460 65 50 72 65 76 69 6f 75 73 20 29 3b 0a 20 20 61  ePrevious );.  a
2a470 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
2a480 64 65 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70 65  de!=OP_NextIfOpe
2a490 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64  n || pOp->p4.xAd
2a4a0 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74  vance==sqlite3Bt
2a4b0 72 65 65 4e 65 78 74 20 29 3b 0a 20 20 61 73 73  reeNext );.  ass
2a4c0 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
2a4d0 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 20  !=OP_PrevIfOpen 
2a4e0 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61  || pOp->p4.xAdva
2a4f0 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65  nce==sqlite3Btre
2a500 65 50 72 65 76 69 6f 75 73 29 3b 0a 0a 20 20 2f  ePrevious);..  /
2a510 2a 20 54 68 65 20 4e 65 78 74 20 6f 70 63 6f 64  * The Next opcod
2a520 65 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 61  e is only used a
2a530 66 74 65 72 20 53 65 65 6b 47 54 2c 20 53 65 65  fter SeekGT, See
2a540 6b 47 45 2c 20 61 6e 64 20 52 65 77 69 6e 64 2e  kGE, and Rewind.
2a550 0a 20 20 2a 2a 20 54 68 65 20 50 72 65 76 20 6f  .  ** The Prev o
2a560 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75 73  pcode is only us
2a570 65 64 20 61 66 74 65 72 20 53 65 65 6b 4c 54 2c  ed after SeekLT,
2a580 20 53 65 65 6b 4c 45 2c 20 61 6e 64 20 4c 61 73   SeekLE, and Las
2a590 74 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  t. */.  assert( 
2a5a0 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
2a5b0 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  Next || pOp->opc
2a5c0 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70  ode!=OP_NextIfOp
2a5d0 65 6e 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d  en.       || pC-
2a5e0 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b  >seekOp==OP_Seek
2a5f0 47 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70  GT || pC->seekOp
2a600 3d 3d 4f 50 5f 53 65 65 6b 47 45 0a 20 20 20 20  ==OP_SeekGE.    
2a610 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70     || pC->seekOp
2a620 3d 3d 4f 50 5f 52 65 77 69 6e 64 20 7c 7c 20 70  ==OP_Rewind || p
2a630 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 46 6f  C->seekOp==OP_Fo
2a640 75 6e 64 29 3b 0a 20 20 61 73 73 65 72 74 28 20  und);.  assert( 
2a650 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
2a660 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  Prev || pOp->opc
2a670 6f 64 65 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70  ode!=OP_PrevIfOp
2a680 65 6e 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d  en.       || pC-
2a690 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b  >seekOp==OP_Seek
2a6a0 4c 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70  LT || pC->seekOp
2a6b0 3d 3d 4f 50 5f 53 65 65 6b 4c 45 0a 20 20 20 20  ==OP_SeekLE.    
2a6c0 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70     || pC->seekOp
2a6d0 3d 3d 4f 50 5f 4c 61 73 74 20 29 3b 0a 0a 20 20  ==OP_Last );..  
2a6e0 72 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 78 41 64  rc = pOp->p4.xAd
2a6f0 76 61 6e 63 65 28 70 43 2d 3e 75 63 2e 70 43 75  vance(pC->uc.pCu
2a700 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 6e 65 78  rsor, &res);.nex
2a710 74 5f 74 61 69 6c 3a 0a 20 20 70 43 2d 3e 63 61  t_tail:.  pC->ca
2a720 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
2a730 45 5f 53 54 41 4c 45 3b 0a 20 20 56 64 62 65 42  E_STALE;.  VdbeB
2a740 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 3d 3d  ranchTaken(res==
2a750 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 63 20 29  0,2);.  if( rc )
2a760 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
2a770 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20  to_error;.  if( 
2a780 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 70 43  res==0 ){.    pC
2a790 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20  ->nullRow = 0;. 
2a7a0 20 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 70     p->aCounter[p
2a7b0 4f 70 2d 3e 70 35 5d 2b 2b 3b 0a 23 69 66 64 65  Op->p5]++;.#ifde
2a7c0 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
2a7d0 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68    sqlite3_search
2a7e0 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66  _count++;.#endif
2a7f0 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  .    goto jump_t
2a800 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66  o_p2_and_check_f
2a810 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20 20  or_interrupt;.  
2a820 7d 65 6c 73 65 7b 0a 20 20 20 20 70 43 2d 3e 6e  }else{.    pC->n
2a830 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 7d 0a  ullRow = 1;.  }.
2a840 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72    goto check_for
2a850 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f  _interrupt;.}../
2a860 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 49 6e 73  * Opcode: IdxIns
2a870 65 72 74 20 50 31 20 50 32 20 50 33 20 50 34 20  ert P1 P2 P3 P4 
2a880 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
2a890 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  key=r[P2].**.** 
2a8a0 52 65 67 69 73 74 65 72 20 50 32 20 68 6f 6c 64  Register P2 hold
2a8b0 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 6b  s an SQL index k
2a8c0 65 79 20 6d 61 64 65 20 75 73 69 6e 67 20 74 68  ey made using th
2a8d0 65 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20  e.** MakeRecord 
2a8e0 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e 20 20 54  instructions.  T
2a8f0 68 69 73 20 6f 70 63 6f 64 65 20 77 72 69 74 65  his opcode write
2a900 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e  s that key.** in
2a910 74 6f 20 74 68 65 20 69 6e 64 65 78 20 50 31 2e  to the index P1.
2a920 20 20 44 61 74 61 20 66 6f 72 20 74 68 65 20 65    Data for the e
2a930 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a  ntry is nil..**.
2a940 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  ** If P4 is not 
2a950 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74 20 69 73  zero, then it is
2a960 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 76   the number of v
2a970 61 6c 75 65 73 20 69 6e 20 74 68 65 20 75 6e 70  alues in the unp
2a980 61 63 6b 65 64 0a 2a 2a 20 6b 65 79 20 6f 66 20  acked.** key of 
2a990 72 65 67 28 50 32 29 2e 20 20 49 6e 20 74 68 61  reg(P2).  In tha
2a9a0 74 20 63 61 73 65 2c 20 50 33 20 69 73 20 74 68  t case, P3 is th
2a9b0 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 66  e index of the f
2a9c0 69 72 73 74 20 72 65 67 69 73 74 65 72 0a 2a 2a  irst register.**
2a9d0 20 66 6f 72 20 74 68 65 20 75 6e 70 61 63 6b 65   for the unpacke
2a9e0 64 20 6b 65 79 2e 20 20 54 68 65 20 61 76 61 69  d key.  The avai
2a9f0 6c 61 62 69 6c 69 74 79 20 6f 66 20 74 68 65 20  lability of the 
2aa00 75 6e 70 61 63 6b 65 64 20 6b 65 79 20 63 61 6e  unpacked key can
2aa10 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 62 65   sometimes.** be
2aa20 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e   an optimization
2aa30 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61  ..**.** If P5 ha
2aa40 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 41 50 50  s the OPFLAG_APP
2aa50 45 4e 44 20 62 69 74 20 73 65 74 2c 20 74 68 61  END bit set, tha
2aa60 74 20 69 73 20 61 20 68 69 6e 74 20 74 6f 20 74  t is a hint to t
2aa70 68 65 20 62 2d 74 72 65 65 20 6c 61 79 65 72 0a  he b-tree layer.
2aa80 2a 2a 20 74 68 61 74 20 74 68 69 73 20 69 6e 73  ** that this ins
2aa90 65 72 74 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f  ert is likely to
2aaa0 20 62 65 20 61 6e 20 61 70 70 65 6e 64 2e 0a 2a   be an append..*
2aab0 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74  *.** If P5 has t
2aac0 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47  he OPFLAG_NCHANG
2aad0 45 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20  E bit set, then 
2aae0 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  the change count
2aaf0 65 72 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65  er is.** increme
2ab00 6e 74 65 64 20 62 79 20 74 68 69 73 20 69 6e 73  nted by this ins
2ab10 74 72 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68  truction.  If th
2ab20 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
2ab30 20 62 69 74 20 69 73 20 63 6c 65 61 72 2c 0a 2a   bit is clear,.*
2ab40 2a 20 74 68 65 6e 20 74 68 65 20 63 68 61 6e 67  * then the chang
2ab50 65 20 63 6f 75 6e 74 65 72 20 69 73 20 75 6e 63  e counter is unc
2ab60 68 61 6e 67 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  hanged..**.** If
2ab70 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53   the OPFLAG_USES
2ab80 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 6f  EEKRESULT flag o
2ab90 66 20 50 35 20 69 73 20 73 65 74 2c 20 74 68 65  f P5 is set, the
2aba0 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
2abb0 6d 69 67 68 74 0a 2a 2a 20 72 75 6e 20 66 61 73  might.** run fas
2abc0 74 65 72 20 62 79 20 61 76 6f 69 64 69 6e 67 20  ter by avoiding 
2abd0 61 6e 20 75 6e 6e 65 63 65 73 73 61 72 79 20 73  an unnecessary s
2abe0 65 65 6b 20 6f 6e 20 63 75 72 73 6f 72 20 50 31  eek on cursor P1
2abf0 2e 20 20 48 6f 77 65 76 65 72 2c 0a 2a 2a 20 74  .  However,.** t
2ac00 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45  he OPFLAG_USESEE
2ac10 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 6d 75 73  KRESULT flag mus
2ac20 74 20 6f 6e 6c 79 20 62 65 20 73 65 74 20 69 66  t only be set if
2ac30 20 74 68 65 72 65 20 68 61 76 65 20 62 65 65 6e   there have been
2ac40 20 6e 6f 20 70 72 69 6f 72 0a 2a 2a 20 73 65 65   no prior.** see
2ac50 6b 73 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72  ks on the cursor
2ac60 20 6f 72 20 69 66 20 74 68 65 20 6d 6f 73 74 20   or if the most 
2ac70 72 65 63 65 6e 74 20 73 65 65 6b 20 75 73 65 64  recent seek used
2ac80 20 61 20 6b 65 79 20 65 71 75 69 76 61 6c 65 6e   a key equivalen
2ac90 74 0a 2a 2a 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a  t.** to P2. .**.
2aca0 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
2acb0 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66  ion only works f
2acc0 6f 72 20 69 6e 64 69 63 65 73 2e 20 20 54 68 65  or indices.  The
2acd0 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74   equivalent inst
2ace0 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74  ruction.** for t
2acf0 61 62 6c 65 73 20 69 73 20 4f 50 5f 49 6e 73 65  ables is OP_Inse
2ad00 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  rt..*/./* Opcode
2ad10 3a 20 53 6f 72 74 65 72 49 6e 73 65 72 74 20 50  : SorterInsert P
2ad20 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
2ad30 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32  nopsis: key=r[P2
2ad40 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  ].**.** Register
2ad50 20 50 32 20 68 6f 6c 64 73 20 61 6e 20 53 51 4c   P2 holds an SQL
2ad60 20 69 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20   index key made 
2ad70 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b  using the.** Mak
2ad80 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74  eRecord instruct
2ad90 69 6f 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f  ions.  This opco
2ada0 64 65 20 77 72 69 74 65 73 20 74 68 61 74 20 6b  de writes that k
2adb0 65 79 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 73  ey.** into the s
2adc0 6f 72 74 65 72 20 50 31 2e 20 20 44 61 74 61 20  orter P1.  Data 
2add0 66 6f 72 20 74 68 65 20 65 6e 74 72 79 20 69 73  for the entry is
2ade0 20 6e 69 6c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50   nil..*/.case OP
2adf0 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 3a 20 20  _SorterInsert:  
2ae00 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 63       /* in2 */.c
2ae10 61 73 65 20 4f 50 5f 49 64 78 49 6e 73 65 72 74  ase OP_IdxInsert
2ae20 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e  : {        /* in
2ae30 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  2 */.  VdbeCurso
2ae40 72 20 2a 70 43 3b 0a 20 20 42 74 72 65 65 50 61  r *pC;.  BtreePa
2ae50 79 6c 6f 61 64 20 78 3b 0a 0a 20 20 61 73 73 65  yload x;..  asse
2ae60 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
2ae70 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
2ae80 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
2ae90 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
2aea0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
2aeb0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  0 );.  assert( i
2aec0 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 28 70 4f  sSorter(pC)==(pO
2aed0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f  p->opcode==OP_So
2aee0 72 74 65 72 49 6e 73 65 72 74 29 20 29 3b 0a 20  rterInsert) );. 
2aef0 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
2af00 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74  p->p2];.  assert
2af10 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20  ( pIn2->flags & 
2af20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 69 66  MEM_Blob );.  if
2af30 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ( pOp->p5 & OPFL
2af40 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e  AG_NCHANGE ) p->
2af50 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 61 73 73  nChange++;.  ass
2af60 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
2af70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
2af80 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
2af90 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74  =OP_SorterInsert
2afa0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
2afb0 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a  ->isTable==0 );.
2afc0 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f    rc = ExpandBlo
2afd0 62 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 72  b(pIn2);.  if( r
2afe0 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
2aff0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69  ue_to_error;.  i
2b000 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
2b010 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 20  OP_SorterInsert 
2b020 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
2b030 74 65 33 56 64 62 65 53 6f 72 74 65 72 57 72 69  te3VdbeSorterWri
2b040 74 65 28 70 43 2c 20 70 49 6e 32 29 3b 0a 20 20  te(pC, pIn2);.  
2b050 7d 65 6c 73 65 7b 0a 20 20 20 20 78 2e 6e 4b 65  }else{.    x.nKe
2b060 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 20  y = pIn2->n;.   
2b070 20 78 2e 70 4b 65 79 20 3d 20 70 49 6e 32 2d 3e   x.pKey = pIn2->
2b080 7a 3b 0a 20 20 20 20 78 2e 61 4d 65 6d 20 3d 20  z;.    x.aMem = 
2b090 61 4d 65 6d 20 2b 20 70 4f 70 2d 3e 70 33 3b 0a  aMem + pOp->p3;.
2b0a0 20 20 20 20 78 2e 6e 4d 65 6d 20 3d 20 28 75 31      x.nMem = (u1
2b0b0 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20  6)pOp->p4.i;.   
2b0c0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2b0d0 65 65 49 6e 73 65 72 74 28 70 43 2d 3e 75 63 2e  eeInsert(pC->uc.
2b0e0 70 43 75 72 73 6f 72 2c 20 26 78 2c 0a 20 20 20  pCursor, &x,.   
2b0f0 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35 20 26        (pOp->p5 &
2b100 20 28 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 7c   (OPFLAG_APPEND|
2b110 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54  OPFLAG_SAVEPOSIT
2b120 49 4f 4e 29 29 2c 20 0a 20 20 20 20 20 20 20 20  ION)), .        
2b130 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ((pOp->p5 & OPFL
2b140 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
2b150 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73 75  ) ? pC->seekResu
2b160 6c 74 20 3a 20 30 29 0a 20 20 20 20 20 20 20 20  lt : 0).        
2b170 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
2b180 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
2b190 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e  o==0 );.    pC->
2b1a0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
2b1b0 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20  CHE_STALE;.  }. 
2b1c0 20 69 66 28 20 72 63 29 20 67 6f 74 6f 20 61 62   if( rc) goto ab
2b1d0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2b1e0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
2b1f0 20 4f 70 63 6f 64 65 3a 20 49 64 78 44 65 6c 65   Opcode: IdxDele
2b200 74 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  te P1 P2 P3 * *.
2b210 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
2b220 3d 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20  =r[P2@P3].**.** 
2b230 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50  The content of P
2b240 33 20 72 65 67 69 73 74 65 72 73 20 73 74 61 72  3 registers star
2b250 74 69 6e 67 20 61 74 20 72 65 67 69 73 74 65 72  ting at register
2b260 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75   P2 form.** an u
2b270 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
2b280 79 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72  y. This opcode r
2b290 65 6d 6f 76 65 73 20 74 68 61 74 20 65 6e 74 72  emoves that entr
2b2a0 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69  y from the .** i
2b2b0 6e 64 65 78 20 6f 70 65 6e 65 64 20 62 79 20 63  ndex opened by c
2b2c0 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73  ursor P1..*/.cas
2b2d0 65 20 4f 50 5f 49 64 78 44 65 6c 65 74 65 3a 20  e OP_IdxDelete: 
2b2e0 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
2b2f0 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
2b300 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
2b310 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
2b320 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28  rd r;..  assert(
2b330 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20   pOp->p3>0 );.  
2b340 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
2b350 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 70 4f 70  0 && pOp->p2+pOp
2b360 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p3<=(p->nMem+1
2b370 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31   - p->nCursor)+1
2b380 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
2b390 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
2b3a0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
2b3b0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
2b3c0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
2b3d0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
2b3e0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
2b3f0 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
2b400 54 52 45 45 20 29 3b 0a 20 20 70 43 72 73 72 20  TREE );.  pCrsr 
2b410 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  = pC->uc.pCursor
2b420 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73  ;.  assert( pCrs
2b430 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r!=0 );.  assert
2b440 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a  ( pOp->p5==0 );.
2b450 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
2b460 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72  C->pKeyInfo;.  r
2b470 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70  .nField = (u16)p
2b480 4f 70 2d 3e 70 33 3b 0a 20 20 72 2e 64 65 66 61  Op->p3;.  r.defa
2b490 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 72 2e  ult_rc = 0;.  r.
2b4a0 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  aMem = &aMem[pOp
2b4b0 2d 3e 70 32 5d 3b 0a 20 20 72 63 20 3d 20 73 71  ->p2];.  rc = sq
2b4c0 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
2b4d0 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20  Unpacked(pCrsr, 
2b4e0 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b  &r, 0, 0, &res);
2b4f0 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
2b500 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2b510 72 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 3d 3d  ror;.  if( res==
2b520 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  0 ){.    rc = sq
2b530 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65  lite3BtreeDelete
2b540 28 70 43 72 73 72 2c 20 42 54 52 45 45 5f 41 55  (pCrsr, BTREE_AU
2b550 58 44 45 4c 45 54 45 29 3b 0a 20 20 20 20 69 66  XDELETE);.    if
2b560 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
2b570 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2b580 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 43    }.  assert( pC
2b590 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
2b5a0 3d 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 63 61 63  ==0 );.  pC->cac
2b5b0 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
2b5c0 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 73 65  _STALE;.  pC->se
2b5d0 65 6b 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20  ekResult = 0;.  
2b5e0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2b5f0 6f 64 65 3a 20 53 65 65 6b 20 50 31 20 2a 20 50  ode: Seek P1 * P
2b600 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
2b610 69 73 3a 20 4d 6f 76 65 20 50 33 20 74 6f 20 50  is: Move P3 to P
2b620 31 2e 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 50 31  1.rowid.**.** P1
2b630 20 69 73 20 61 6e 20 6f 70 65 6e 20 69 6e 64 65   is an open inde
2b640 78 20 63 75 72 73 6f 72 20 61 6e 64 20 50 33 20  x cursor and P3 
2b650 69 73 20 61 20 63 75 72 73 6f 72 20 6f 6e 20 74  is a cursor on t
2b660 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
2b670 0a 2a 2a 20 74 61 62 6c 65 2e 20 20 54 68 69 73  .** table.  This
2b680 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 61 20 64   opcode does a d
2b690 65 66 65 72 72 65 64 20 73 65 65 6b 20 6f 66 20  eferred seek of 
2b6a0 74 68 65 20 50 33 20 74 61 62 6c 65 20 63 75 72  the P3 table cur
2b6b0 73 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20 72 6f  sor.** to the ro
2b6c0 77 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e  w that correspon
2b6d0 64 73 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e  ds to the curren
2b6e0 74 20 72 6f 77 20 6f 66 20 50 31 2e 0a 2a 2a 0a  t row of P1..**.
2b6f0 2a 2a 20 54 68 69 73 20 69 73 20 61 20 64 65 66  ** This is a def
2b700 65 72 72 65 64 20 73 65 65 6b 2e 20 20 4e 6f 74  erred seek.  Not
2b710 68 69 6e 67 20 61 63 74 75 61 6c 6c 79 20 68 61  hing actually ha
2b720 70 70 65 6e 73 20 75 6e 74 69 6c 0a 2a 2a 20 74  ppens until.** t
2b730 68 65 20 63 75 72 73 6f 72 20 69 73 20 75 73 65  he cursor is use
2b740 64 20 74 6f 20 72 65 61 64 20 61 20 72 65 63 6f  d to read a reco
2b750 72 64 2e 20 20 54 68 61 74 20 77 61 79 2c 20 69  rd.  That way, i
2b760 66 20 6e 6f 20 72 65 61 64 73 0a 2a 2a 20 6f 63  f no reads.** oc
2b770 63 75 72 2c 20 6e 6f 20 75 6e 6e 65 63 65 73 73  cur, no unnecess
2b780 61 72 79 20 49 2f 4f 20 68 61 70 70 65 6e 73 2e  ary I/O happens.
2b790 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65  .**.** P4 may be
2b7a0 20 61 6e 20 61 72 72 61 79 20 6f 66 20 69 6e 74   an array of int
2b7b0 65 67 65 72 73 20 28 74 79 70 65 20 50 34 5f 49  egers (type P4_I
2b7c0 4e 54 41 52 52 41 59 29 20 63 6f 6e 74 61 69 6e  NTARRAY) contain
2b7d0 69 6e 67 0a 2a 2a 20 6f 6e 65 20 65 6e 74 72 79  ing.** one entry
2b7e0 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
2b7f0 20 69 6e 20 74 68 65 20 50 33 20 74 61 62 6c 65   in the P3 table
2b800 2e 20 20 49 66 20 61 72 72 61 79 20 65 6e 74 72  .  If array entr
2b810 79 20 61 28 69 29 0a 2a 2a 20 69 73 20 6e 6f 6e  y a(i).** is non
2b820 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 72 65 61 64  -zero, then read
2b830 69 6e 67 20 63 6f 6c 75 6d 6e 20 61 28 69 29 2d  ing column a(i)-
2b840 31 20 66 72 6f 6d 20 63 75 72 73 6f 72 20 50 33  1 from cursor P3
2b850 20 69 73 20 0a 2a 2a 20 65 71 75 69 76 61 6c 65   is .** equivale
2b860 6e 74 20 74 6f 20 70 65 72 66 6f 72 6d 69 6e 67  nt to performing
2b870 20 74 68 65 20 64 65 66 65 72 72 65 64 20 73 65   the deferred se
2b880 65 6b 20 61 6e 64 20 74 68 65 6e 20 72 65 61 64  ek and then read
2b890 69 6e 67 20 63 6f 6c 75 6d 6e 20 69 20 0a 2a 2a  ing column i .**
2b8a0 20 66 72 6f 6d 20 50 31 2e 20 20 54 68 69 73 20   from P1.  This 
2b8b0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 73  information is s
2b8c0 74 6f 72 65 64 20 69 6e 20 50 33 20 61 6e 64 20  tored in P3 and 
2b8d0 75 73 65 64 20 74 6f 20 72 65 64 69 72 65 63 74  used to redirect
2b8e0 0a 2a 2a 20 72 65 61 64 73 20 61 67 61 69 6e 73  .** reads agains
2b8f0 74 20 50 33 20 6f 76 65 72 20 74 6f 20 50 31 2c  t P3 over to P1,
2b900 20 74 68 75 73 20 70 6f 73 73 69 62 6c 79 20 61   thus possibly a
2b910 76 6f 69 64 69 6e 67 20 74 68 65 20 6e 65 65 64  voiding the need
2b920 20 74 6f 0a 2a 2a 20 73 65 65 6b 20 61 6e 64 20   to.** seek and 
2b930 72 65 61 64 20 63 75 72 73 6f 72 20 50 33 2e 0a  read cursor P3..
2b940 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  */./* Opcode: Id
2b950 78 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a  xRowid P1 P2 * *
2b960 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2b970 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a  r[P2]=rowid.**.*
2b980 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67  * Write into reg
2b990 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65  ister P2 an inte
2b9a0 67 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65  ger which is the
2b9b0 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74   last entry in t
2b9c0 68 65 20 72 65 63 6f 72 64 20 61 74 0a 2a 2a 20  he record at.** 
2b9d0 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69  the end of the i
2b9e0 6e 64 65 78 20 6b 65 79 20 70 6f 69 6e 74 65 64  ndex key pointed
2b9f0 20 74 6f 20 62 79 20 63 75 72 73 6f 72 20 50 31   to by cursor P1
2ba00 2e 20 20 54 68 69 73 20 69 6e 74 65 67 65 72 20  .  This integer 
2ba10 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 74 68 65  should be.** the
2ba20 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61   rowid of the ta
2ba30 62 6c 65 20 65 6e 74 72 79 20 74 6f 20 77 68 69  ble entry to whi
2ba40 63 68 20 74 68 69 73 20 69 6e 64 65 78 20 65 6e  ch this index en
2ba50 74 72 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a  try points..**.*
2ba60 2a 20 53 65 65 20 61 6c 73 6f 3a 20 52 6f 77 69  * See also: Rowi
2ba70 64 2c 20 4d 61 6b 65 52 65 63 6f 72 64 2e 0a 2a  d, MakeRecord..*
2ba80 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 3a 0a  /.case OP_Seek:.
2ba90 63 61 73 65 20 4f 50 5f 49 64 78 52 6f 77 69 64  case OP_IdxRowid
2baa0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
2bab0 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56 64   /* out2 */.  Vd
2bac0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20  beCursor *pC;   
2bad0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2bae0 54 68 65 20 50 31 20 69 6e 64 65 78 20 63 75 72  The P1 index cur
2baf0 73 6f 72 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  sor */.  VdbeCur
2bb00 73 6f 72 20 2a 70 54 61 62 43 75 72 3b 20 20 20  sor *pTabCur;   
2bb10 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50          /* The P
2bb20 32 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20 28  2 table cursor (
2bb30 4f 50 5f 53 65 65 6b 20 6f 6e 6c 79 29 20 2a 2f  OP_Seek only) */
2bb40 0a 20 20 69 36 34 20 72 6f 77 69 64 3b 20 20 20  .  i64 rowid;   
2bb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bb60 20 20 2f 2a 20 52 6f 77 69 64 20 74 68 61 74 20    /* Rowid that 
2bb70 50 31 20 63 75 72 72 65 6e 74 20 70 6f 69 6e 74  P1 current point
2bb80 73 20 74 6f 20 2a 2f 0a 0a 20 20 61 73 73 65 72  s to */..  asser
2bb90 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
2bba0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
2bbb0 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
2bbc0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
2bbd0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
2bbe0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
2bbf0 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
2bc00 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61  YPE_BTREE );.  a
2bc10 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43  ssert( pC->uc.pC
2bc20 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73  ursor!=0 );.  as
2bc30 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
2bc40 65 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  e==0 );.  assert
2bc50 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
2bc60 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73  veto==0 );.  ass
2bc70 65 72 74 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f  ert( !pC->nullRo
2bc80 77 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  w || pOp->opcode
2bc90 3d 3d 4f 50 5f 49 64 78 52 6f 77 69 64 20 29 3b  ==OP_IdxRowid );
2bca0 0a 0a 20 20 2f 2a 20 54 68 65 20 49 64 78 52 6f  ..  /* The IdxRo
2bcb0 77 69 64 20 61 6e 64 20 53 65 65 6b 20 6f 70 63  wid and Seek opc
2bcc0 6f 64 65 73 20 61 72 65 20 63 6f 6d 62 69 6e 65  odes are combine
2bcd0 64 20 62 65 63 61 75 73 65 20 6f 66 20 74 68 65  d because of the
2bce0 20 63 6f 6d 6d 6f 6e 61 6c 69 74 79 0a 20 20 2a   commonality.  *
2bcf0 2a 20 6f 66 20 73 71 6c 69 74 65 33 56 64 62 65  * of sqlite3Vdbe
2bd00 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 29 20  CursorRestore() 
2bd10 61 6e 64 20 73 71 6c 69 74 65 33 56 64 62 65 49  and sqlite3VdbeI
2bd20 64 78 52 6f 77 69 64 28 29 2e 20 2a 2f 0a 20 20  dxRowid(). */.  
2bd30 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
2bd40 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 70 43  CursorRestore(pC
2bd50 29 3b 0a 0a 20 20 2f 2a 20 73 71 6c 69 74 65 33  );..  /* sqlite3
2bd60 56 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65  VbeCursorRestore
2bd70 28 29 20 63 61 6e 20 6f 6e 6c 79 20 66 61 69 6c  () can only fail
2bd80 20 69 66 20 74 68 65 20 72 65 63 6f 72 64 20 68   if the record h
2bd90 61 73 20 62 65 65 6e 20 64 65 6c 65 74 65 64 0a  as been deleted.
2bda0 20 20 2a 2a 20 6f 75 74 20 66 72 6f 6d 20 75 6e    ** out from un
2bdb0 64 65 72 20 74 68 65 20 63 75 72 73 6f 72 2e 20  der the cursor. 
2bdc0 20 54 68 61 74 20 77 69 6c 6c 20 6e 65 76 65 72   That will never
2bdd0 20 68 61 70 70 65 6e 73 20 66 6f 72 20 61 6e 20   happens for an 
2bde0 49 64 78 52 6f 77 69 64 0a 20 20 2a 2a 20 6f 72  IdxRowid.  ** or
2bdf0 20 53 65 65 6b 20 6f 70 63 6f 64 65 20 2a 2f 0a   Seek opcode */.
2be00 20 20 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d    if( NEVER(rc!=
2be10 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74  SQLITE_OK) ) got
2be20 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2be30 72 72 6f 72 3b 0a 0a 20 20 69 66 28 20 21 70 43  rror;..  if( !pC
2be40 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20  ->nullRow ){.   
2be50 20 72 6f 77 69 64 20 3d 20 30 3b 20 20 2f 2a 20   rowid = 0;  /* 
2be60 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c  Not needed.  Onl
2be70 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63  y used to silenc
2be80 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a  e a warning. */.
2be90 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2bea0 56 64 62 65 49 64 78 52 6f 77 69 64 28 64 62 2c  VdbeIdxRowid(db,
2beb0 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c   pC->uc.pCursor,
2bec0 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 69 66   &rowid);.    if
2bed0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
2bee0 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  ){.      goto ab
2bef0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2bf00 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
2bf10 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2bf20 53 65 65 6b 20 29 7b 0a 20 20 20 20 20 20 61 73  Seek ){.      as
2bf30 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30  sert( pOp->p3>=0
2bf40 20 26 26 20 70 4f 70 2d 3e 70 33 3c 70 2d 3e 6e   && pOp->p3<p->n
2bf50 43 75 72 73 6f 72 20 29 3b 0a 20 20 20 20 20 20  Cursor );.      
2bf60 70 54 61 62 43 75 72 20 3d 20 70 2d 3e 61 70 43  pTabCur = p->apC
2bf70 73 72 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  sr[pOp->p3];.   
2bf80 20 20 20 61 73 73 65 72 74 28 20 70 54 61 62 43     assert( pTabC
2bf90 75 72 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 61  ur!=0 );.      a
2bfa0 73 73 65 72 74 28 20 70 54 61 62 43 75 72 2d 3e  ssert( pTabCur->
2bfb0 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
2bfc0 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20 20  E_BTREE );.     
2bfd0 20 61 73 73 65 72 74 28 20 70 54 61 62 43 75 72   assert( pTabCur
2bfe0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20  ->uc.pCursor!=0 
2bff0 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
2c000 20 70 54 61 62 43 75 72 2d 3e 69 73 54 61 62 6c   pTabCur->isTabl
2c010 65 20 29 3b 0a 20 20 20 20 20 20 70 54 61 62 43  e );.      pTabC
2c020 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b  ur->nullRow = 0;
2c030 0a 20 20 20 20 20 20 70 54 61 62 43 75 72 2d 3e  .      pTabCur->
2c040 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20 72  movetoTarget = r
2c050 6f 77 69 64 3b 0a 20 20 20 20 20 20 70 54 61 62  owid;.      pTab
2c060 43 75 72 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76  Cur->deferredMov
2c070 65 74 6f 20 3d 20 31 3b 0a 20 20 20 20 20 20 61  eto = 1;.      a
2c080 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
2c090 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59 20  pe==P4_INTARRAY 
2c0a0 7c 7c 20 70 4f 70 2d 3e 70 34 2e 61 69 3d 3d 30  || pOp->p4.ai==0
2c0b0 20 29 3b 0a 20 20 20 20 20 20 70 54 61 62 43 75   );.      pTabCu
2c0c0 72 2d 3e 61 41 6c 74 4d 61 70 20 3d 20 70 4f 70  r->aAltMap = pOp
2c0d0 2d 3e 70 34 2e 61 69 3b 0a 20 20 20 20 20 20 70  ->p4.ai;.      p
2c0e0 54 61 62 43 75 72 2d 3e 70 41 6c 74 43 75 72 73  TabCur->pAltCurs
2c0f0 6f 72 20 3d 20 70 43 3b 0a 20 20 20 20 7d 65 6c  or = pC;.    }el
2c100 73 65 7b 0a 20 20 20 20 20 20 70 4f 75 74 20 3d  se{.      pOut =
2c110 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
2c120 70 2c 20 70 4f 70 29 3b 0a 20 20 20 20 20 20 70  p, pOp);.      p
2c130 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f 77 69 64  Out->u.i = rowid
2c140 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
2c150 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
2c160 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
2c170 52 6f 77 69 64 20 29 3b 0a 20 20 20 20 73 71 6c  Rowid );.    sql
2c180 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
2c190 6c 6c 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  ll(&aMem[pOp->p2
2c1a0 5d 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ]);.  }.  break;
2c1b0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
2c1c0 64 78 47 45 20 50 31 20 50 32 20 50 33 20 50 34  dxGE P1 P2 P3 P4
2c1d0 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
2c1e0 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
2c1f0 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
2c200 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
2c210 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
2c220 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
2c230 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
2c240 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41   omits the PRIMA
2c250 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65  RY KEY.  Compare
2c260 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20   this key value 
2c270 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65  against the inde
2c280 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73  x .** that P1 is
2c290 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
2c2a0 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67  ing to, ignoring
2c2b0 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
2c2c0 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69   or ROWID .** fi
2c2d0 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64 2e  elds at the end.
2c2e0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
2c2f0 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20   index entry is 
2c300 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
2c310 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
2c320 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a   value.** then j
2c330 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65  ump to P2.  Othe
2c340 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75  rwise fall throu
2c350 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
2c360 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f  nstruction..*/./
2c370 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 54 20  * Opcode: IdxGT 
2c380 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
2c390 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
2c3a0 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54  r[P3@P4].**.** T
2c3b0 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76  he P4 register v
2c3c0 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20  alues beginning 
2c3d0 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20  with P3 form an 
2c3e0 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a  unpacked index .
2c3f0 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74  ** key that omit
2c400 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  s the PRIMARY KE
2c410 59 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73  Y.  Compare this
2c420 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e   key value again
2c430 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a  st the index .**
2c440 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72   that P1 is curr
2c450 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74  ently pointing t
2c460 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20  o, ignoring the 
2c470 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52  PRIMARY KEY or R
2c480 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c 64 73 20  OWID .** fields 
2c490 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a  at the end..**.*
2c4a0 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65  * If the P1 inde
2c4b0 78 20 65 6e 74 72 79 20 69 73 20 67 72 65 61 74  x entry is great
2c4c0 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20  er than the key 
2c4d0 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75  value.** then ju
2c4e0 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72  mp to P2.  Other
2c4f0 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67  wise fall throug
2c500 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
2c510 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  struction..*/./*
2c520 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 54 20 50   Opcode: IdxLT P
2c530 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
2c540 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
2c550 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68  [P3@P4].**.** Th
2c560 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61  e P4 register va
2c570 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77  lues beginning w
2c580 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75  ith P3 form an u
2c590 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a  npacked index .*
2c5a0 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73  * key that omits
2c5b0 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
2c5c0 20 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70   or ROWID.  Comp
2c5d0 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c  are this key val
2c5e0 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68  ue against.** th
2c5f0 65 20 69 6e 64 65 78 20 74 68 61 74 20 50 31 20  e index that P1 
2c600 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
2c610 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69  nting to, ignori
2c620 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  ng the PRIMARY K
2c630 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f  EY or.** ROWID o
2c640 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a  n the P1 index..
2c650 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
2c660 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c  index entry is l
2c670 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79  ess than the key
2c680 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70   value then jump
2c690 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68 65 72   to P2..** Other
2c6a0 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67  wise fall throug
2c6b0 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
2c6c0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  struction..*/./*
2c6d0 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 45 20 50   Opcode: IdxLE P
2c6e0 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
2c6f0 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
2c700 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68  [P3@P4].**.** Th
2c710 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61  e P4 register va
2c720 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77  lues beginning w
2c730 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75  ith P3 form an u
2c740 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a  npacked index .*
2c750 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73  * key that omits
2c760 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
2c770 20 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70   or ROWID.  Comp
2c780 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c  are this key val
2c790 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68  ue against.** th
2c7a0 65 20 69 6e 64 65 78 20 74 68 61 74 20 50 31 20  e index that P1 
2c7b0 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
2c7c0 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69  nting to, ignori
2c7d0 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  ng the PRIMARY K
2c7e0 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f  EY or.** ROWID o
2c7f0 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a  n the P1 index..
2c800 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
2c810 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c  index entry is l
2c820 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ess than or equa
2c830 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c  l to the key val
2c840 75 65 20 74 68 65 6e 20 6a 75 6d 70 0a 2a 2a 20  ue then jump.** 
2c850 74 6f 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65  to P2. Otherwise
2c860 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
2c870 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
2c880 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
2c890 50 5f 49 64 78 4c 45 3a 20 20 20 20 20 20 20 20  P_IdxLE:        
2c8a0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73    /* jump */.cas
2c8b0 65 20 4f 50 5f 49 64 78 47 54 3a 20 20 20 20 20  e OP_IdxGT:     
2c8c0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
2c8d0 63 61 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20 20  case OP_IdxLT:  
2c8e0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
2c8f0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 45  */.case OP_IdxGE
2c900 3a 20 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75  :  {       /* ju
2c910 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  mp */.  VdbeCurs
2c920 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65  or *pC;.  int re
2c930 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  s;.  UnpackedRec
2c940 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74  ord r;..  assert
2c950 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
2c960 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
2c970 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
2c980 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
2c990 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
2c9a0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
2c9b0 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20  >isOrdered );.  
2c9c0 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
2c9d0 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
2c9e0 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28  REE );.  assert(
2c9f0 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21   pC->uc.pCursor!
2ca00 3d 30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  =0);.  assert( p
2ca10 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
2ca20 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  o==0 );.  assert
2ca30 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20  ( pOp->p5==0 || 
2ca40 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20  pOp->p5==1 );.  
2ca50 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
2ca60 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
2ca70 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20  .  r.pKeyInfo = 
2ca80 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  pC->pKeyInfo;.  
2ca90 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29  r.nField = (u16)
2caa0 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 69 66 28  pOp->p4.i;.  if(
2cab0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3c 4f 50 5f   pOp->opcode<OP_
2cac0 49 64 78 4c 54 20 29 7b 0a 20 20 20 20 61 73 73  IdxLT ){.    ass
2cad0 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
2cae0 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c 20 70 4f  ==OP_IdxLE || pO
2caf0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
2cb00 78 47 54 20 29 3b 0a 20 20 20 20 72 2e 64 65 66  xGT );.    r.def
2cb10 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20  ault_rc = -1;.  
2cb20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
2cb30 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
2cb40 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d  OP_IdxGE || pOp-
2cb50 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c  >opcode==OP_IdxL
2cb60 54 20 29 3b 0a 20 20 20 20 72 2e 64 65 66 61 75  T );.    r.defau
2cb70 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 7d 0a 20  lt_rc = 0;.  }. 
2cb80 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b   r.aMem = &aMem[
2cb90 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66  pOp->p3];.#ifdef
2cba0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
2cbb0 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30  { int i; for(i=0
2cbc0 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b  ; i<r.nField; i+
2cbd0 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73  +) assert( memIs
2cbe0 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d  Valid(&r.aMem[i]
2cbf0 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20  ) ); }.#endif.  
2cc00 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74  res = 0;  /* Not
2cc10 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75   needed.  Only u
2cc20 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61  sed to silence a
2cc30 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72   warning. */.  r
2cc40 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  c = sqlite3VdbeI
2cc50 64 78 4b 65 79 43 6f 6d 70 61 72 65 28 64 62 2c  dxKeyCompare(db,
2cc60 20 70 43 2c 20 26 72 2c 20 26 72 65 73 29 3b 0a   pC, &r, &res);.
2cc70 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f 49 64    assert( (OP_Id
2cc80 78 4c 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78 4c  xLE&1)==(OP_IdxL
2cc90 54 26 31 29 20 26 26 20 28 4f 50 5f 49 64 78 47  T&1) && (OP_IdxG
2cca0 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78 47 54 26  E&1)==(OP_IdxGT&
2ccb0 31 29 20 29 3b 0a 20 20 69 66 28 20 28 70 4f 70  1) );.  if( (pOp
2ccc0 2d 3e 6f 70 63 6f 64 65 26 31 29 3d 3d 28 4f 50  ->opcode&1)==(OP
2ccd0 5f 49 64 78 4c 54 26 31 29 20 29 7b 0a 20 20 20  _IdxLT&1) ){.   
2cce0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
2ccf0 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c  code==OP_IdxLE |
2cd00 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
2cd10 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20 20 72  P_IdxLT );.    r
2cd20 65 73 20 3d 20 2d 72 65 73 3b 0a 20 20 7d 65 6c  es = -res;.  }el
2cd30 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
2cd40 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2cd50 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70  IdxGE || pOp->op
2cd60 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29  code==OP_IdxGT )
2cd70 3b 0a 20 20 20 20 72 65 73 2b 2b 3b 0a 20 20 7d  ;.    res++;.  }
2cd80 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
2cd90 65 6e 28 72 65 73 3e 30 2c 32 29 3b 0a 20 20 69  en(res>0,2);.  i
2cda0 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
2cdb0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2cdc0 0a 20 20 69 66 28 20 72 65 73 3e 30 20 29 20 67  .  if( res>0 ) g
2cdd0 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
2cde0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2cdf0 70 63 6f 64 65 3a 20 44 65 73 74 72 6f 79 20 50  pcode: Destroy P
2ce00 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
2ce10 2a 20 44 65 6c 65 74 65 20 61 6e 20 65 6e 74 69  * Delete an enti
2ce20 72 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  re database tabl
2ce30 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65  e or index whose
2ce40 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 74 68   root page in th
2ce50 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69  e database.** fi
2ce60 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79 20 50  le is given by P
2ce70 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62  1..**.** The tab
2ce80 6c 65 20 62 65 69 6e 67 20 64 65 73 74 72 6f 79  le being destroy
2ce90 65 64 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69  ed is in the mai
2cea0 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
2ceb0 69 66 20 50 33 3d 3d 30 2e 20 20 49 66 0a 2a 2a  if P3==0.  If.**
2cec0 20 50 33 3d 3d 31 20 74 68 65 6e 20 74 68 65 20   P3==1 then the 
2ced0 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61  table to be clea
2cee0 72 20 69 73 20 69 6e 20 74 68 65 20 61 75 78 69  r is in the auxi
2cef0 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66  liary database f
2cf00 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75  ile.** that is u
2cf10 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62  sed to store tab
2cf20 6c 65 73 20 63 72 65 61 74 65 20 75 73 69 6e 67  les create using
2cf30 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52   CREATE TEMPORAR
2cf40 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49  Y TABLE..**.** I
2cf50 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20  f AUTOVACUUM is 
2cf60 65 6e 61 62 6c 65 64 20 74 68 65 6e 20 69 74 20  enabled then it 
2cf70 69 73 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74  is possible that
2cf80 20 61 6e 6f 74 68 65 72 20 72 6f 6f 74 20 70 61   another root pa
2cf90 67 65 0a 2a 2a 20 6d 69 67 68 74 20 62 65 20 6d  ge.** might be m
2cfa0 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20 6e 65  oved into the ne
2cfb0 77 6c 79 20 64 65 6c 65 74 65 64 20 72 6f 6f 74  wly deleted root
2cfc0 20 70 61 67 65 20 69 6e 20 6f 72 64 65 72 20 74   page in order t
2cfd0 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20 72 6f  o keep all.** ro
2cfe0 6f 74 20 70 61 67 65 73 20 63 6f 6e 74 69 67 75  ot pages contigu
2cff0 6f 75 73 20 61 74 20 74 68 65 20 62 65 67 69 6e  ous at the begin
2d000 6e 69 6e 67 20 6f 66 20 74 68 65 20 64 61 74 61  ning of the data
2d010 62 61 73 65 2e 20 20 54 68 65 20 66 6f 72 6d 65  base.  The forme
2d020 72 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 74 68  r.** value of th
2d030 65 20 72 6f 6f 74 20 70 61 67 65 20 74 68 61 74  e root page that
2d040 20 6d 6f 76 65 64 20 2d 20 69 74 73 20 76 61 6c   moved - its val
2d050 75 65 20 62 65 66 6f 72 65 20 74 68 65 20 6d 6f  ue before the mo
2d060 76 65 20 6f 63 63 75 72 72 65 64 20 2d 0a 2a 2a  ve occurred -.**
2d070 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
2d080 67 69 73 74 65 72 20 50 32 2e 20 49 66 20 6e 6f  gister P2. If no
2d090 20 70 61 67 65 20 6d 6f 76 65 6d 65 6e 74 20 77   page movement w
2d0a0 61 73 20 72 65 71 75 69 72 65 64 20 28 62 65 63  as required (bec
2d0b0 61 75 73 65 20 74 68 65 0a 2a 2a 20 74 61 62 6c  ause the.** tabl
2d0c0 65 20 62 65 69 6e 67 20 64 72 6f 70 70 65 64 20  e being dropped 
2d0d0 77 61 73 20 61 6c 72 65 61 64 79 20 74 68 65 20  was already the 
2d0e0 6c 61 73 74 20 6f 6e 65 20 69 6e 20 74 68 65 20  last one in the 
2d0f0 64 61 74 61 62 61 73 65 29 20 74 68 65 6e 20 61  database) then a
2d100 20 0a 2a 2a 20 7a 65 72 6f 20 69 73 20 73 74 6f   .** zero is sto
2d110 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
2d120 50 32 2e 20 20 49 66 20 41 55 54 4f 56 41 43 55  P2.  If AUTOVACU
2d130 55 4d 20 69 73 20 64 69 73 61 62 6c 65 64 20 74  UM is disabled t
2d140 68 65 6e 20 61 20 7a 65 72 6f 20 0a 2a 2a 20 69  hen a zero .** i
2d150 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
2d160 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  ster P2..**.** T
2d170 68 69 73 20 6f 70 63 6f 64 65 20 74 68 72 6f 77  his opcode throw
2d180 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68  s an error if th
2d190 65 72 65 20 61 72 65 20 61 6e 79 20 61 63 74 69  ere are any acti
2d1a0 76 65 20 72 65 61 64 65 72 20 56 4d 73 20 77 68  ve reader VMs wh
2d1b0 65 6e 0a 2a 2a 20 69 74 20 69 73 20 69 6e 76 6f  en.** it is invo
2d1c0 6b 65 64 2e 20 54 68 69 73 20 69 73 20 64 6f 6e  ked. This is don
2d1d0 65 20 74 6f 20 61 76 6f 69 64 20 74 68 65 20 64  e to avoid the d
2d1e0 69 66 66 69 63 75 6c 74 79 20 61 73 73 6f 63 69  ifficulty associ
2d1f0 61 74 65 64 20 77 69 74 68 20 0a 2a 2a 20 75 70  ated with .** up
2d200 64 61 74 69 6e 67 20 65 78 69 73 74 69 6e 67 20  dating existing 
2d210 63 75 72 73 6f 72 73 20 77 68 65 6e 20 61 20 72  cursors when a r
2d220 6f 6f 74 20 70 61 67 65 20 69 73 20 6d 6f 76 65  oot page is move
2d230 64 20 69 6e 20 61 6e 20 41 55 54 4f 56 41 43 55  d in an AUTOVACU
2d240 55 4d 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e  UM .** database.
2d250 20 54 68 69 73 20 65 72 72 6f 72 20 69 73 20 74   This error is t
2d260 68 72 6f 77 6e 20 65 76 65 6e 20 69 66 20 74 68  hrown even if th
2d270 65 20 64 61 74 61 62 61 73 65 20 69 73 20 6e 6f  e database is no
2d280 74 20 61 6e 20 41 55 54 4f 56 41 43 55 55 4d 20  t an AUTOVACUUM 
2d290 0a 2a 2a 20 64 62 20 69 6e 20 6f 72 64 65 72 20  .** db in order 
2d2a0 74 6f 20 61 76 6f 69 64 20 69 6e 74 72 6f 64 75  to avoid introdu
2d2b0 63 69 6e 67 20 61 6e 20 69 6e 63 6f 6d 70 61 74  cing an incompat
2d2c0 69 62 69 6c 69 74 79 20 62 65 74 77 65 65 6e 20  ibility between 
2d2d0 61 75 74 6f 76 61 63 75 75 6d 20 0a 2a 2a 20 61  autovacuum .** a
2d2e0 6e 64 20 6e 6f 6e 2d 61 75 74 6f 76 61 63 75 75  nd non-autovacuu
2d2f0 6d 20 6d 6f 64 65 73 2e 0a 2a 2a 0a 2a 2a 20 53  m modes..**.** S
2d300 65 65 20 61 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a  ee also: Clear.*
2d310 2f 0a 63 61 73 65 20 4f 50 5f 44 65 73 74 72 6f  /.case OP_Destro
2d320 79 3a 20 7b 20 20 20 20 20 2f 2a 20 6f 75 74 32  y: {     /* out2
2d330 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f 76 65 64   */.  int iMoved
2d340 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 0a 20 20  ;.  int iDb;..  
2d350 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
2d360 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  nly==0 );.  asse
2d370 72 74 28 20 70 4f 70 2d 3e 70 31 3e 31 20 29 3b  rt( pOp->p1>1 );
2d380 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
2d390 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
2d3a0 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
2d3b0 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69 66  = MEM_Null;.  if
2d3c0 28 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 20  ( db->nVdbeRead 
2d3d0 3e 20 64 62 2d 3e 6e 56 44 65 73 74 72 6f 79 2b  > db->nVDestroy+
2d3e0 31 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  1 ){.    rc = SQ
2d3f0 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20  LITE_LOCKED;.   
2d400 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20   p->errorAction 
2d410 3d 20 4f 45 5f 41 62 6f 72 74 3b 0a 20 20 20 20  = OE_Abort;.    
2d420 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2d430 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 65 6c 73 65  o_error;.  }else
2d440 7b 0a 20 20 20 20 69 44 62 20 3d 20 70 4f 70 2d  {.    iDb = pOp-
2d450 3e 70 33 3b 0a 20 20 20 20 61 73 73 65 72 74 28  >p3;.    assert(
2d460 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
2d470 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29  treeMask, iDb) )
2d480 3b 0a 20 20 20 20 69 4d 6f 76 65 64 20 3d 20 30  ;.    iMoved = 0
2d490 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64  ;  /* Not needed
2d4a0 2e 20 20 4f 6e 6c 79 20 74 6f 20 73 69 6c 65 6e  .  Only to silen
2d4b0 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f  ce a warning. */
2d4c0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
2d4d0 33 42 74 72 65 65 44 72 6f 70 54 61 62 6c 65 28  3BtreeDropTable(
2d4e0 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74  db->aDb[iDb].pBt
2d4f0 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f 76  , pOp->p1, &iMov
2d500 65 64 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  ed);.    pOut->f
2d510 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
2d520 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
2d530 69 4d 6f 76 65 64 3b 0a 20 20 20 20 69 66 28 20  iMoved;.    if( 
2d540 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
2d550 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 69  due_to_error;.#i
2d560 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2d570 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 20  T_AUTOVACUUM.   
2d580 20 69 66 28 20 69 4d 6f 76 65 64 21 3d 30 20 29   if( iMoved!=0 )
2d590 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52  {.      sqlite3R
2d5a0 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 64 62 2c  ootPageMoved(db,
2d5b0 20 69 44 62 2c 20 69 4d 6f 76 65 64 2c 20 70 4f   iDb, iMoved, pO
2d5c0 70 2d 3e 70 31 29 3b 0a 20 20 20 20 20 20 2f 2a  p->p1);.      /*
2d5d0 20 41 6c 6c 20 4f 50 5f 44 65 73 74 72 6f 79 20   All OP_Destroy 
2d5e0 6f 70 65 72 61 74 69 6f 6e 73 20 6f 63 63 75 72  operations occur
2d5f0 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 62 74 72   on the same btr
2d600 65 65 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65  ee */.      asse
2d610 72 74 28 20 72 65 73 65 74 53 63 68 65 6d 61 4f  rt( resetSchemaO
2d620 6e 46 61 75 6c 74 3d 3d 30 20 7c 7c 20 72 65 73  nFault==0 || res
2d630 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d  etSchemaOnFault=
2d640 3d 69 44 62 2b 31 20 29 3b 0a 20 20 20 20 20 20  =iDb+1 );.      
2d650 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75  resetSchemaOnFau
2d660 6c 74 20 3d 20 69 44 62 2b 31 3b 0a 20 20 20 20  lt = iDb+1;.    
2d670 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62  }.#endif.  }.  b
2d680 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2d690 64 65 3a 20 43 6c 65 61 72 20 50 31 20 50 32 20  de: Clear P1 P2 
2d6a0 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20  P3.**.** Delete 
2d6b0 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20  all contents of 
2d6c0 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
2d6d0 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73  le or index whos
2d6e0 65 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 69  e root page.** i
2d6f0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
2d700 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79 20  ile is given by 
2d710 50 31 2e 20 20 42 75 74 2c 20 75 6e 6c 69 6b 65  P1.  But, unlike
2d720 20 44 65 73 74 72 6f 79 2c 20 64 6f 20 6e 6f 74   Destroy, do not
2d730 0a 2a 2a 20 72 65 6d 6f 76 65 20 74 68 65 20 74  .** remove the t
2d740 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 72  able or index fr
2d750 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
2d760 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  file..**.** The 
2d770 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61  table being clea
2d780 72 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e  r is in the main
2d790 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
2d7a0 66 20 50 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20  f P2==0.  If.** 
2d7b0 50 32 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74  P2==1 then the t
2d7c0 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72  able to be clear
2d7d0 20 69 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c   is in the auxil
2d7e0 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69  iary database fi
2d7f0 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73  le.** that is us
2d800 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c  ed to store tabl
2d810 65 73 20 63 72 65 61 74 65 20 75 73 69 6e 67 20  es create using 
2d820 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59  CREATE TEMPORARY
2d830 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66   TABLE..**.** If
2d840 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 69 73   the P3 value is
2d850 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
2d860 74 68 65 20 74 61 62 6c 65 20 72 65 66 65 72 72  the table referr
2d870 65 64 20 74 6f 20 6d 75 73 74 20 62 65 20 61 6e  ed to must be an
2d880 0a 2a 2a 20 69 6e 74 6b 65 79 20 74 61 62 6c 65  .** intkey table
2d890 20 28 61 6e 20 53 51 4c 20 74 61 62 6c 65 2c 20   (an SQL table, 
2d8a0 6e 6f 74 20 61 6e 20 69 6e 64 65 78 29 2e 20 49  not an index). I
2d8b0 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20  n this case the 
2d8c0 72 6f 77 20 63 68 61 6e 67 65 20 0a 2a 2a 20 63  row change .** c
2d8d0 6f 75 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e  ount is incremen
2d8e0 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65  ted by the numbe
2d8f0 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65  r of rows in the
2d900 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65   table being cle
2d910 61 72 65 64 2e 20 0a 2a 2a 20 49 66 20 50 33 20  ared. .** If P3 
2d920 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
2d930 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 76  zero, then the v
2d940 61 6c 75 65 20 73 74 6f 72 65 64 20 69 6e 20 72  alue stored in r
2d950 65 67 69 73 74 65 72 20 50 33 20 69 73 0a 2a 2a  egister P3 is.**
2d960 20 61 6c 73 6f 20 69 6e 63 72 65 6d 65 6e 74 65   also incremente
2d970 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20  d by the number 
2d980 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74  of rows in the t
2d990 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72  able being clear
2d9a0 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ed..**.** See al
2d9b0 73 6f 3a 20 44 65 73 74 72 6f 79 0a 2a 2f 0a 63  so: Destroy.*/.c
2d9c0 61 73 65 20 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a  ase OP_Clear: {.
2d9d0 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 0a 20    int nChange;. 
2d9e0 0a 20 20 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a  .  nChange = 0;.
2d9f0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
2da00 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 73  dOnly==0 );.  as
2da10 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
2da20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70  (p->btreeMask, p
2da30 4f 70 2d 3e 70 32 29 20 29 3b 0a 20 20 72 63 20  Op->p2) );.  rc 
2da40 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c  = sqlite3BtreeCl
2da50 65 61 72 54 61 62 6c 65 28 0a 20 20 20 20 20 20  earTable(.      
2da60 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d  db->aDb[pOp->p2]
2da70 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 28  .pBt, pOp->p1, (
2da80 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61 6e  pOp->p3 ? &nChan
2da90 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20 69  ge : 0).  );.  i
2daa0 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20  f( pOp->p3 ){.  
2dab0 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d 20    p->nChange += 
2dac0 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 69 66 28  nChange;.    if(
2dad0 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20   pOp->p3>0 ){.  
2dae0 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
2daf0 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70  sValid(&aMem[pOp
2db00 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p3]) );.      
2db10 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
2db20 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  (p, &aMem[pOp->p
2db30 33 5d 29 3b 0a 20 20 20 20 20 20 61 4d 65 6d 5b  3]);.      aMem[
2db40 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20  pOp->p3].u.i += 
2db50 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 7d 0a 20  nChange;.    }. 
2db60 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f   }.  if( rc ) go
2db70 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2db80 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a  error;.  break;.
2db90 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  }../* Opcode: Re
2dba0 73 65 74 53 6f 72 74 65 72 20 50 31 20 2a 20 2a  setSorter P1 * *
2dbb0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74   * *.**.** Delet
2dbc0 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 66  e all contents f
2dbd0 72 6f 6d 20 74 68 65 20 65 70 68 65 6d 65 72 61  rom the ephemera
2dbe0 6c 20 74 61 62 6c 65 20 6f 72 20 73 6f 72 74 65  l table or sorte
2dbf0 72 0a 2a 2a 20 74 68 61 74 20 69 73 20 6f 70 65  r.** that is ope
2dc00 6e 20 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e 0a  n on cursor P1..
2dc10 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
2dc20 65 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72  e only works for
2dc30 20 63 75 72 73 6f 72 73 20 75 73 65 64 20 66 6f   cursors used fo
2dc40 72 20 73 6f 72 74 69 6e 67 20 61 6e 64 0a 2a 2a  r sorting and.**
2dc50 20 6f 70 65 6e 65 64 20 77 69 74 68 20 4f 50 5f   opened with OP_
2dc60 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 72  OpenEphemeral or
2dc70 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e 2e 0a   OP_SorterOpen..
2dc80 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74  */.case OP_Reset
2dc90 53 6f 72 74 65 72 3a 20 7b 0a 20 20 56 64 62 65  Sorter: {.  Vdbe
2dca0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 0a 20 20  Cursor *pC;. .  
2dcb0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2dcc0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
2dcd0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
2dce0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
2dcf0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2dd00 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 69  pC!=0 );.  if( i
2dd10 73 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20  sSorter(pC) ){. 
2dd20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f     sqlite3VdbeSo
2dd30 72 74 65 72 52 65 73 65 74 28 64 62 2c 20 70 43  rterReset(db, pC
2dd40 2d 3e 75 63 2e 70 53 6f 72 74 65 72 29 3b 0a 20  ->uc.pSorter);. 
2dd50 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
2dd60 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
2dd70 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
2dd80 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
2dd90 43 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 29  C->isEphemeral )
2dda0 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
2ddb0 65 33 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c  e3BtreeClearTabl
2ddc0 65 4f 66 43 75 72 73 6f 72 28 70 43 2d 3e 75 63  eOfCursor(pC->uc
2ddd0 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 69  .pCursor);.    i
2dde0 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
2ddf0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2de00 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2de10 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61  ./* Opcode: Crea
2de20 74 65 54 61 62 6c 65 20 50 31 20 50 32 20 2a 20  teTable P1 P2 * 
2de30 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
2de40 20 72 5b 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d   r[P2]=root iDb=
2de50 50 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74  P1.**.** Allocat
2de60 65 20 61 20 6e 65 77 20 74 61 62 6c 65 20 69 6e  e a new table in
2de70 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
2de80 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30  se file if P1==0
2de90 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75   or in the.** au
2dea0 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
2deb0 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f   file if P1==1 o
2dec0 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64  r in an attached
2ded0 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20   database if.** 
2dee0 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65  P1>1.  Write the
2def0 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65   root page numbe
2df00 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62  r of the new tab
2df10 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73  le into.** regis
2df20 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65  ter P2.**.** The
2df30 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77   difference betw
2df40 65 65 6e 20 61 20 74 61 62 6c 65 20 61 6e 64 20  een a table and 
2df50 61 6e 20 69 6e 64 65 78 20 69 73 20 74 68 69 73  an index is this
2df60 3a 20 20 41 20 74 61 62 6c 65 20 6d 75 73 74 0a  :  A table must.
2df70 2a 2a 20 68 61 76 65 20 61 20 34 2d 62 79 74 65  ** have a 4-byte
2df80 20 69 6e 74 65 67 65 72 20 6b 65 79 20 61 6e 64   integer key and
2df90 20 63 61 6e 20 68 61 76 65 20 61 72 62 69 74 72   can have arbitr
2dfa0 61 72 79 20 64 61 74 61 2e 20 20 41 6e 20 69 6e  ary data.  An in
2dfb0 64 65 78 0a 2a 2a 20 68 61 73 20 61 6e 20 61 72  dex.** has an ar
2dfc0 62 69 74 72 61 72 79 20 6b 65 79 20 62 75 74 20  bitrary key but 
2dfd0 6e 6f 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 53  no data..**.** S
2dfe0 65 65 20 61 6c 73 6f 3a 20 43 72 65 61 74 65 49  ee also: CreateI
2dff0 6e 64 65 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ndex.*/./* Opcod
2e000 65 3a 20 43 72 65 61 74 65 49 6e 64 65 78 20 50  e: CreateIndex P
2e010 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
2e020 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f  nopsis: r[P2]=ro
2e030 6f 74 20 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20  ot iDb=P1.**.** 
2e040 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 69  Allocate a new i
2e050 6e 64 65 78 20 69 6e 20 74 68 65 20 6d 61 69 6e  ndex in the main
2e060 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
2e070 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68  f P1==0 or in th
2e080 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64  e.** auxiliary d
2e090 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
2e0a0 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61  P1==1 or in an a
2e0b0 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
2e0c0 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72   if.** P1>1.  Wr
2e0d0 69 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67  ite the root pag
2e0e0 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  e number of the 
2e0f0 6e 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a  new table into.*
2e100 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  * register P2..*
2e110 2a 0a 2a 2a 20 53 65 65 20 64 6f 63 75 6d 65 6e  *.** See documen
2e120 74 61 74 69 6f 6e 20 6f 6e 20 4f 50 5f 43 72 65  tation on OP_Cre
2e130 61 74 65 54 61 62 6c 65 20 66 6f 72 20 61 64 64  ateTable for add
2e140 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
2e150 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
2e160 43 72 65 61 74 65 49 6e 64 65 78 3a 20 20 20 20  CreateIndex:    
2e170 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
2e180 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74  */.case OP_Creat
2e190 65 54 61 62 6c 65 3a 20 7b 20 20 20 20 20 20 20  eTable: {       
2e1a0 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
2e1b0 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 69 6e 74 20  int pgno;.  int 
2e1c0 66 6c 61 67 73 3b 0a 20 20 44 62 20 2a 70 44 62  flags;.  Db *pDb
2e1d0 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  ;..  pOut = out2
2e1e0 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
2e1f0 70 29 3b 0a 20 20 70 67 6e 6f 20 3d 20 30 3b 0a  p);.  pgno = 0;.
2e200 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2e210 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
2e220 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
2e230 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
2e240 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f  p->btreeMask, pO
2e250 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65  p->p1) );.  asse
2e260 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
2e270 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64  =0 );.  pDb = &d
2e280 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b  b->aDb[pOp->p1];
2e290 0a 20 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e  .  assert( pDb->
2e2a0 70 42 74 21 3d 30 20 29 3b 0a 20 20 69 66 28 20  pBt!=0 );.  if( 
2e2b0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2e2c0 43 72 65 61 74 65 54 61 62 6c 65 20 29 7b 0a 20  CreateTable ){. 
2e2d0 20 20 20 2f 2a 20 66 6c 61 67 73 20 3d 20 42 54     /* flags = BT
2e2e0 52 45 45 5f 49 4e 54 4b 45 59 3b 20 2a 2f 0a 20  REE_INTKEY; */. 
2e2f0 20 20 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45     flags = BTREE
2e300 5f 49 4e 54 4b 45 59 3b 0a 20 20 7d 65 6c 73 65  _INTKEY;.  }else
2e310 7b 0a 20 20 20 20 66 6c 61 67 73 20 3d 20 42 54  {.    flags = BT
2e320 52 45 45 5f 42 4c 4f 42 4b 45 59 3b 0a 20 20 7d  REE_BLOBKEY;.  }
2e330 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
2e340 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28  treeCreateTable(
2e350 70 44 62 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c  pDb->pBt, &pgno,
2e360 20 66 6c 61 67 73 29 3b 0a 20 20 69 66 28 20 72   flags);.  if( r
2e370 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
2e380 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70  ue_to_error;.  p
2e390 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f 3b  Out->u.i = pgno;
2e3a0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2e3b0 4f 70 63 6f 64 65 3a 20 53 71 6c 45 78 65 63 20  Opcode: SqlExec 
2e3c0 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  * * * P4 *.**.**
2e3d0 20 52 75 6e 20 74 68 65 20 53 51 4c 20 73 74 61   Run the SQL sta
2e3e0 74 65 6d 65 6e 74 20 6f 72 20 73 74 61 74 65 6d  tement or statem
2e3f0 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 20 69  ents specified i
2e400 6e 20 74 68 65 20 50 34 20 73 74 72 69 6e 67 2e  n the P4 string.
2e410 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 71 6c 45  .*/.case OP_SqlE
2e420 78 65 63 3a 20 7b 0a 20 20 64 62 2d 3e 6e 53 71  xec: {.  db->nSq
2e430 6c 45 78 65 63 2b 2b 3b 0a 20 20 72 63 20 3d 20  lExec++;.  rc = 
2e440 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c  sqlite3_exec(db,
2e450 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 30 2c 20 30   pOp->p4.z, 0, 0
2e460 2c 20 30 29 3b 0a 20 20 64 62 2d 3e 6e 53 71 6c  , 0);.  db->nSql
2e470 45 78 65 63 2d 2d 3b 0a 20 20 69 66 28 20 72 63  Exec--;.  if( rc
2e480 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
2e490 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
2e4a0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2e4b0 65 3a 20 50 61 72 73 65 53 63 68 65 6d 61 20 50  e: ParseSchema P
2e4c0 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
2e4d0 20 52 65 61 64 20 61 6e 64 20 70 61 72 73 65 20   Read and parse 
2e4e0 61 6c 6c 20 65 6e 74 72 69 65 73 20 66 72 6f 6d  all entries from
2e4f0 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 41 53 54   the SQLITE_MAST
2e500 45 52 20 74 61 62 6c 65 20 6f 66 20 64 61 74 61  ER table of data
2e510 62 61 73 65 20 50 31 0a 2a 2a 20 74 68 61 74 20  base P1.** that 
2e520 6d 61 74 63 68 20 74 68 65 20 57 48 45 52 45 20  match the WHERE 
2e530 63 6c 61 75 73 65 20 50 34 2e 20 0a 2a 2a 0a 2a  clause P4. .**.*
2e540 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e  * This opcode in
2e550 76 6f 6b 65 73 20 74 68 65 20 70 61 72 73 65 72  vokes the parser
2e560 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77   to create a new
2e570 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
2e580 2c 0a 2a 2a 20 74 68 65 6e 20 72 75 6e 73 20 74  ,.** then runs t
2e590 68 65 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d  he new virtual m
2e5a0 61 63 68 69 6e 65 2e 20 20 49 74 20 69 73 20 74  achine.  It is t
2e5b0 68 75 73 20 61 20 72 65 2d 65 6e 74 72 61 6e 74  hus a re-entrant
2e5c0 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65   opcode..*/.case
2e5d0 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61 3a   OP_ParseSchema:
2e5e0 20 7b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20   {.  int iDb;.  
2e5f0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d 61 73  const char *zMas
2e600 74 65 72 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71  ter;.  char *zSq
2e610 6c 3b 0a 20 20 49 6e 69 74 44 61 74 61 20 69 6e  l;.  InitData in
2e620 69 74 44 61 74 61 3b 0a 0a 20 20 2f 2a 20 41 6e  itData;..  /* An
2e630 79 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  y prepared state
2e640 6d 65 6e 74 20 74 68 61 74 20 69 6e 76 6f 6b 65  ment that invoke
2e650 73 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69  s this opcode wi
2e660 6c 6c 20 68 6f 6c 64 20 6d 75 74 65 78 65 73 0a  ll hold mutexes.
2e670 20 20 2a 2a 20 6f 6e 20 65 76 65 72 79 20 62 74    ** on every bt
2e680 72 65 65 2e 20 20 54 68 69 73 20 69 73 20 61 20  ree.  This is a 
2e690 70 72 65 72 65 71 75 69 73 69 74 65 20 66 6f 72  prerequisite for
2e6a0 20 69 6e 76 6f 6b 69 6e 67 20 0a 20 20 2a 2a 20   invoking .  ** 
2e6b0 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
2e6c0 61 63 6b 28 29 2e 0a 20 20 2a 2f 0a 23 69 66 64  ack()..  */.#ifd
2e6d0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
2e6e0 20 20 66 6f 72 28 69 44 62 3d 30 3b 20 69 44 62    for(iDb=0; iDb
2e6f0 3c 64 62 2d 3e 6e 44 62 3b 20 69 44 62 2b 2b 29  <db->nDb; iDb++)
2e700 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 44  {.    assert( iD
2e710 62 3d 3d 31 20 7c 7c 20 73 71 6c 69 74 65 33 42  b==1 || sqlite3B
2e720 74 72 65 65 48 6f 6c 64 73 4d 75 74 65 78 28 64  treeHoldsMutex(d
2e730 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 29  b->aDb[iDb].pBt)
2e740 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a   );.  }.#endif..
2e750 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b    iDb = pOp->p1;
2e760 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d  .  assert( iDb>=
2e770 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62  0 && iDb<db->nDb
2e780 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
2e790 48 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20  HasProperty(db, 
2e7a0 69 44 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f  iDb, DB_SchemaLo
2e7b0 61 64 65 64 29 20 29 3b 0a 20 20 2f 2a 20 55 73  aded) );.  /* Us
2e7c0 65 64 20 74 6f 20 62 65 20 61 20 63 6f 6e 64 69  ed to be a condi
2e7d0 74 69 6f 6e 61 6c 20 2a 2f 20 7b 0a 20 20 20 20  tional */ {.    
2e7e0 7a 4d 61 73 74 65 72 20 3d 20 4d 41 53 54 45 52  zMaster = MASTER
2e7f0 5f 4e 41 4d 45 3b 0a 20 20 20 20 69 6e 69 74 44  _NAME;.    initD
2e800 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a 20 20 20  ata.db = db;.   
2e810 20 69 6e 69 74 44 61 74 61 2e 69 44 62 20 3d 20   initData.iDb = 
2e820 70 4f 70 2d 3e 70 31 3b 0a 20 20 20 20 69 6e 69  pOp->p1;.    ini
2e830 74 44 61 74 61 2e 70 7a 45 72 72 4d 73 67 20 3d  tData.pzErrMsg =
2e840 20 26 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20   &p->zErrMsg;.  
2e850 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33    zSql = sqlite3
2e860 4d 50 72 69 6e 74 66 28 64 62 2c 0a 20 20 20 20  MPrintf(db,.    
2e870 20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c     "SELECT name,
2e880 20 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c 20 46   rootpage, sql F
2e890 52 4f 4d 20 27 25 71 27 2e 25 73 20 57 48 45 52  ROM '%q'.%s WHER
2e8a0 45 20 25 73 20 4f 52 44 45 52 20 42 59 20 72 6f  E %s ORDER BY ro
2e8b0 77 69 64 22 2c 0a 20 20 20 20 20 20 20 64 62 2d  wid",.       db-
2e8c0 3e 61 44 62 5b 69 44 62 5d 2e 7a 44 62 53 4e 61  >aDb[iDb].zDbSNa
2e8d0 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f 70  me, zMaster, pOp
2e8e0 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 69 66 28  ->p4.z);.    if(
2e8f0 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20 20   zSql==0 ){.    
2e900 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f    rc = SQLITE_NO
2e910 4d 45 4d 5f 42 4b 50 54 3b 0a 20 20 20 20 7d 65  MEM_BKPT;.    }e
2e920 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72  lse{.      asser
2e930 74 28 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79  t( db->init.busy
2e940 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 64 62 2d  ==0 );.      db-
2e950 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 31 3b 0a  >init.busy = 1;.
2e960 20 20 20 20 20 20 69 6e 69 74 44 61 74 61 2e 72        initData.r
2e970 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
2e980 20 20 20 20 20 61 73 73 65 72 74 28 20 21 64 62       assert( !db
2e990 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
2e9a0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
2e9b0 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20 7a 53  ite3_exec(db, zS
2e9c0 71 6c 2c 20 73 71 6c 69 74 65 33 49 6e 69 74 43  ql, sqlite3InitC
2e9d0 61 6c 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44 61  allback, &initDa
2e9e0 74 61 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66  ta, 0);.      if
2e9f0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
2ea00 29 20 72 63 20 3d 20 69 6e 69 74 44 61 74 61 2e  ) rc = initData.
2ea10 72 63 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  rc;.      sqlite
2ea20 33 44 62 46 72 65 65 4e 4e 28 64 62 2c 20 7a 53  3DbFreeNN(db, zS
2ea30 71 6c 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69  ql);.      db->i
2ea40 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b 0a 20 20  nit.busy = 0;.  
2ea50 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63    }.  }.  if( rc
2ea60 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52   ){.    sqlite3R
2ea70 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66  esetAllSchemasOf
2ea80 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a  Connection(db);.
2ea90 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
2eaa0 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20  TE_NOMEM ){.    
2eab0 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
2eac0 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20 61 62     }.    goto ab
2ead0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2eae0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20 20  ;.  }.  break;  
2eaf0 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .}..#if !defined
2eb00 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41  (SQLITE_OMIT_ANA
2eb10 4c 59 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a  LYZE)./* Opcode:
2eb20 20 4c 6f 61 64 41 6e 61 6c 79 73 69 73 20 50 31   LoadAnalysis P1
2eb30 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52   * * * *.**.** R
2eb40 65 61 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73  ead the sqlite_s
2eb50 74 61 74 31 20 74 61 62 6c 65 20 66 6f 72 20 64  tat1 table for d
2eb60 61 74 61 62 61 73 65 20 50 31 20 61 6e 64 20 6c  atabase P1 and l
2eb70 6f 61 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a  oad the content.
2eb80 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65  ** of that table
2eb90 20 69 6e 74 6f 20 74 68 65 20 69 6e 74 65 72 6e   into the intern
2eba0 61 6c 20 69 6e 64 65 78 20 68 61 73 68 20 74 61  al index hash ta
2ebb0 62 6c 65 2e 20 20 54 68 69 73 20 77 69 6c 6c 20  ble.  This will 
2ebc0 63 61 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e 61  cause.** the ana
2ebd0 6c 79 73 69 73 20 74 6f 20 62 65 20 75 73 65 64  lysis to be used
2ebe0 20 77 68 65 6e 20 70 72 65 70 61 72 69 6e 67 20   when preparing 
2ebf0 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20 71  all subsequent q
2ec00 75 65 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65 20  ueries..*/.case 
2ec10 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73 3a  OP_LoadAnalysis:
2ec20 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
2ec30 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
2ec40 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
2ec50 72 63 20 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c  rc = sqlite3Anal
2ec60 79 73 69 73 4c 6f 61 64 28 64 62 2c 20 70 4f 70  ysisLoad(db, pOp
2ec70 2d 3e 70 31 29 3b 0a 20 20 69 66 28 20 72 63 20  ->p1);.  if( rc 
2ec80 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
2ec90 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65  _to_error;.  bre
2eca0 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64 69 66 20 2f  ak;  .}.#endif /
2ecb0 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  * !defined(SQLIT
2ecc0 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 20  E_OMIT_ANALYZE) 
2ecd0 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  */../* Opcode: D
2ece0 72 6f 70 54 61 62 6c 65 20 50 31 20 2a 20 2a 20  ropTable P1 * * 
2ecf0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76  P4 *.**.** Remov
2ed00 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28  e the internal (
2ed10 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20  in-memory) data 
2ed20 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20  structures that 
2ed30 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20  describe.** the 
2ed40 74 61 62 6c 65 20 6e 61 6d 65 64 20 50 34 20 69  table named P4 i
2ed50 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  n database P1.  
2ed60 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61  This is called a
2ed70 66 74 65 72 20 61 20 74 61 62 6c 65 0a 2a 2a 20  fter a table.** 
2ed80 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20  is dropped from 
2ed90 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65 20  disk (using the 
2eda0 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29 20  Destroy opcode) 
2edb0 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70  in order to keep
2edc0 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65 72 6e 61   .** the interna
2edd0 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  l representation
2ede0 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d   of the.** schem
2edf0 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74  a consistent wit
2ee00 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73  h what is on dis
2ee10 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72  k..*/.case OP_Dr
2ee20 6f 70 54 61 62 6c 65 3a 20 7b 0a 20 20 73 71 6c  opTable: {.  sql
2ee30 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
2ee40 65 74 65 54 61 62 6c 65 28 64 62 2c 20 70 4f 70  eteTable(db, pOp
2ee50 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ->p1, pOp->p4.z)
2ee60 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
2ee70 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 49 6e 64   Opcode: DropInd
2ee80 65 78 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  ex P1 * * P4 *.*
2ee90 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20  *.** Remove the 
2eea0 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d  internal (in-mem
2eeb0 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74  ory) data struct
2eec0 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69  ures that descri
2eed0 62 65 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20  be.** the index 
2eee0 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61  named P4 in data
2eef0 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69  base P1.  This i
2ef00 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61  s called after a
2ef10 6e 20 69 6e 64 65 78 0a 2a 2a 20 69 73 20 64 72  n index.** is dr
2ef20 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73 6b 20  opped from disk 
2ef30 28 75 73 69 6e 67 20 74 68 65 20 44 65 73 74 72  (using the Destr
2ef40 6f 79 20 6f 70 63 6f 64 65 29 0a 2a 2a 20 69 6e  oy opcode).** in
2ef50 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 74   order to keep t
2ef60 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72  he internal repr
2ef70 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
2ef80 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73  e.** schema cons
2ef90 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74  istent with what
2efa0 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a   is on disk..*/.
2efb0 63 61 73 65 20 4f 50 5f 44 72 6f 70 49 6e 64 65  case OP_DropInde
2efc0 78 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e  x: {.  sqlite3Un
2efd0 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64  linkAndDeleteInd
2efe0 65 78 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  ex(db, pOp->p1, 
2eff0 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72  pOp->p4.z);.  br
2f000 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2f010 65 3a 20 44 72 6f 70 54 72 69 67 67 65 72 20 50  e: DropTrigger P
2f020 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
2f030 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65   Remove the inte
2f040 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29  rnal (in-memory)
2f050 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73   data structures
2f060 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a   that describe.*
2f070 2a 20 74 68 65 20 74 72 69 67 67 65 72 20 6e 61  * the trigger na
2f080 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61  med P4 in databa
2f090 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20  se P1.  This is 
2f0a0 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74  called after a t
2f0b0 72 69 67 67 65 72 0a 2a 2a 20 69 73 20 64 72 6f  rigger.** is dro
2f0c0 70 70 65 64 20 66 72 6f 6d 20 64 69 73 6b 20 28  pped from disk (
2f0d0 75 73 69 6e 67 20 74 68 65 20 44 65 73 74 72 6f  using the Destro
2f0e0 79 20 6f 70 63 6f 64 65 29 20 69 6e 20 6f 72 64  y opcode) in ord
2f0f0 65 72 20 74 6f 20 6b 65 65 70 20 0a 2a 2a 20 74  er to keep .** t
2f100 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72  he internal repr
2f110 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
2f120 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73  e.** schema cons
2f130 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74  istent with what
2f140 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a   is on disk..*/.
2f150 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 72 69 67  case OP_DropTrig
2f160 67 65 72 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  ger: {.  sqlite3
2f170 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
2f180 72 69 67 67 65 72 28 64 62 2c 20 70 4f 70 2d 3e  rigger(db, pOp->
2f190 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  p1, pOp->p4.z);.
2f1a0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66    break;.}...#if
2f1b0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2f1c0 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
2f1d0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65  ./* Opcode: Inte
2f1e0 67 72 69 74 79 43 6b 20 50 31 20 50 32 20 50 33  grityCk P1 P2 P3
2f1f0 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20   P4 P5.**.** Do 
2f200 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66 20 74  an analysis of t
2f210 68 65 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65  he currently ope
2f220 6e 20 64 61 74 61 62 61 73 65 2e 20 20 53 74 6f  n database.  Sto
2f230 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65  re in.** registe
2f240 72 20 50 31 20 74 68 65 20 74 65 78 74 20 6f 66  r P1 the text of
2f250 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
2f260 65 20 64 65 73 63 72 69 62 69 6e 67 20 61 6e 79  e describing any
2f270 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66   problems..** If
2f280 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61 72 65   no problems are
2f290 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20 61 20   found, store a 
2f2a0 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73 74 65 72  NULL in register
2f2b0 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72   P1..**.** The r
2f2c0 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61  egister P3 conta
2f2d0 69 6e 73 20 6f 6e 65 20 6c 65 73 73 20 74 68 61  ins one less tha
2f2e0 6e 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75  n the maximum nu
2f2f0 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 77 65 64 20  mber of allowed 
2f300 65 72 72 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f  errors..** At mo
2f310 73 74 20 72 65 67 28 50 33 29 20 65 72 72 6f 72  st reg(P3) error
2f320 73 20 77 69 6c 6c 20 62 65 20 72 65 70 6f 72 74  s will be report
2f330 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20  ed..** In other 
2f340 77 6f 72 64 73 2c 20 74 68 65 20 61 6e 61 6c 79  words, the analy
2f350 73 69 73 20 73 74 6f 70 73 20 61 73 20 73 6f 6f  sis stops as soo
2f360 6e 20 61 73 20 72 65 67 28 50 31 29 20 65 72 72  n as reg(P1) err
2f370 6f 72 73 20 61 72 65 20 0a 2a 2a 20 73 65 65 6e  ors are .** seen
2f380 2e 20 20 52 65 67 28 50 31 29 20 69 73 20 75 70  .  Reg(P1) is up
2f390 64 61 74 65 64 20 77 69 74 68 20 74 68 65 20 6e  dated with the n
2f3a0 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20  umber of errors 
2f3b0 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a  remaining..**.**
2f3c0 20 54 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e   The root page n
2f3d0 75 6d 62 65 72 73 20 6f 66 20 61 6c 6c 20 74 61  umbers of all ta
2f3e0 62 6c 65 73 20 69 6e 20 74 68 65 20 64 61 74 61  bles in the data
2f3f0 62 61 73 65 20 61 72 65 20 69 6e 74 65 67 65 72  base are integer
2f400 73 0a 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 50  s.** stored in P
2f410 34 5f 49 4e 54 41 52 52 41 59 20 61 72 67 75 6d  4_INTARRAY argum
2f420 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  ent..**.** If P5
2f430 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
2f440 65 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20  e check is done 
2f450 6f 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79  on the auxiliary
2f460 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c   database.** fil
2f470 65 2c 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e 20  e, not the main 
2f480 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a  database file..*
2f490 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
2f4a0 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c   is used to impl
2f4b0 65 6d 65 6e 74 20 74 68 65 20 69 6e 74 65 67 72  ement the integr
2f4c0 69 74 79 5f 63 68 65 63 6b 20 70 72 61 67 6d 61  ity_check pragma
2f4d0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74  ..*/.case OP_Int
2f4e0 65 67 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69 6e  egrityCk: {.  in
2f4f0 74 20 6e 52 6f 6f 74 3b 20 20 20 20 20 20 2f 2a  t nRoot;      /*
2f500 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65   Number of table
2f510 73 20 74 6f 20 63 68 65 63 6b 2e 20 20 28 4e 75  s to check.  (Nu
2f520 6d 62 65 72 20 6f 66 20 72 6f 6f 74 20 70 61 67  mber of root pag
2f530 65 73 2e 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61  es.) */.  int *a
2f540 52 6f 6f 74 3b 20 20 20 20 20 2f 2a 20 41 72 72  Root;     /* Arr
2f550 61 79 20 6f 66 20 72 6f 6f 74 70 61 67 65 20 6e  ay of rootpage n
2f560 75 6d 62 65 72 73 20 66 6f 72 20 74 61 62 6c 65  umbers for table
2f570 73 20 74 6f 20 62 65 20 63 68 65 63 6b 65 64 20  s to be checked 
2f580 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20  */.  int nErr;  
2f590 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
2f5a0 66 20 65 72 72 6f 72 73 20 72 65 70 6f 72 74 65  f errors reporte
2f5b0 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20  d */.  char *z; 
2f5c0 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f         /* Text o
2f5d0 66 20 74 68 65 20 65 72 72 6f 72 20 72 65 70 6f  f the error repo
2f5e0 72 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45  rt */.  Mem *pnE
2f5f0 72 72 3b 20 20 20 20 20 2f 2a 20 52 65 67 69 73  rr;     /* Regis
2f600 74 65 72 20 6b 65 65 70 69 6e 67 20 74 72 61 63  ter keeping trac
2f610 6b 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61  k of errors rema
2f620 69 6e 69 6e 67 20 2a 2f 0a 0a 20 20 61 73 73 65  ining */..  asse
2f630 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
2f640 20 29 3b 0a 20 20 6e 52 6f 6f 74 20 3d 20 70 4f   );.  nRoot = pO
2f650 70 2d 3e 70 32 3b 0a 20 20 61 52 6f 6f 74 20 3d  p->p2;.  aRoot =
2f660 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 61   pOp->p4.ai;.  a
2f670 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30 20 29  ssert( nRoot>0 )
2f680 3b 0a 20 20 61 73 73 65 72 74 28 20 61 52 6f 6f  ;.  assert( aRoo
2f690 74 5b 6e 52 6f 6f 74 5d 3d 3d 30 20 29 3b 0a 20  t[nRoot]==0 );. 
2f6a0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
2f6b0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28  >0 && pOp->p3<=(
2f6c0 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
2f6d0 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 6e 45  Cursor) );.  pnE
2f6e0 72 72 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  rr = &aMem[pOp->
2f6f0 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28  p3];.  assert( (
2f700 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d  pnErr->flags & M
2f710 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20  EM_Int)!=0 );.  
2f720 61 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e  assert( (pnErr->
2f730 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72  flags & (MEM_Str
2f740 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29  |MEM_Blob))==0 )
2f750 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
2f760 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2f770 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 64 62 2d  ert( pOp->p5<db-
2f780 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
2f790 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
2f7a0 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e  btreeMask, pOp->
2f7b0 70 35 29 20 29 3b 0a 20 20 7a 20 3d 20 73 71 6c  p5) );.  z = sql
2f7c0 69 74 65 33 42 74 72 65 65 49 6e 74 65 67 72 69  ite3BtreeIntegri
2f7d0 74 79 43 68 65 63 6b 28 64 62 2d 3e 61 44 62 5b  tyCheck(db->aDb[
2f7e0 70 4f 70 2d 3e 70 35 5d 2e 70 42 74 2c 20 61 52  pOp->p5].pBt, aR
2f7f0 6f 6f 74 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20 20  oot, nRoot,.    
2f800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f810 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e               (in
2f820 74 29 70 6e 45 72 72 2d 3e 75 2e 69 2b 31 2c 20  t)pnErr->u.i+1, 
2f830 26 6e 45 72 72 29 3b 0a 20 20 73 71 6c 69 74 65  &nErr);.  sqlite
2f840 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
2f850 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 6e 45 72  pIn1);.  if( nEr
2f860 72 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65  r==0 ){.    asse
2f870 72 74 28 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65  rt( z==0 );.  }e
2f880 6c 73 65 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a  lse if( z==0 ){.
2f890 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
2f8a0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 6e  .  }else{.    pn
2f8b0 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72  Err->u.i -= nErr
2f8c0 2d 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  -1;.    sqlite3V
2f8d0 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 49 6e  dbeMemSetStr(pIn
2f8e0 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45  1, z, -1, SQLITE
2f8f0 5f 55 54 46 38 2c 20 73 71 6c 69 74 65 33 5f 66  _UTF8, sqlite3_f
2f900 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41  ree);.  }.  UPDA
2f910 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
2f920 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33  pIn1);.  sqlite3
2f930 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
2f940 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e  ng(pIn1, encodin
2f950 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  g);.  break;.}.#
2f960 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
2f970 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43  OMIT_INTEGRITY_C
2f980 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  HECK */../* Opco
2f990 64 65 3a 20 52 6f 77 53 65 74 41 64 64 20 50 31  de: RowSetAdd P1
2f9a0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
2f9b0 6f 70 73 69 73 3a 20 72 6f 77 73 65 74 28 50 31  opsis: rowset(P1
2f9c0 29 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 49 6e  )=r[P2].**.** In
2f9d0 73 65 72 74 20 74 68 65 20 69 6e 74 65 67 65 72  sert the integer
2f9e0 20 76 61 6c 75 65 20 68 65 6c 64 20 62 79 20 72   value held by r
2f9f0 65 67 69 73 74 65 72 20 50 32 20 69 6e 74 6f 20  egister P2 into 
2fa00 61 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 0a  a boolean index.
2fa10 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73  ** held in regis
2fa20 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e  ter P1..**.** An
2fa30 20 61 73 73 65 72 74 69 6f 6e 20 66 61 69 6c 73   assertion fails
2fa40 20 69 66 20 50 32 20 69 73 20 6e 6f 74 20 61 6e   if P2 is not an
2fa50 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73   integer..*/.cas
2fa60 65 20 4f 50 5f 52 6f 77 53 65 74 41 64 64 3a 20  e OP_RowSetAdd: 
2fa70 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20  {       /* in1, 
2fa80 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in2 */.  pIn1 = 
2fa90 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
2faa0 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
2fab0 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
2fac0 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20  t( (pIn2->flags 
2fad0 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
2fae0 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
2faf0 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
2fb00 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  )==0 ){.    sqli
2fb10 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77  te3VdbeMemSetRow
2fb20 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69  Set(pIn1);.    i
2fb30 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
2fb40 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  & MEM_RowSet)==0
2fb50 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
2fb60 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 52 6f 77    }.  sqlite3Row
2fb70 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e  SetInsert(pIn1->
2fb80 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 32 2d  u.pRowSet, pIn2-
2fb90 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  >u.i);.  break;.
2fba0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  }../* Opcode: Ro
2fbb0 77 53 65 74 52 65 61 64 20 50 31 20 50 32 20 50  wSetRead P1 P2 P
2fbc0 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
2fbd0 73 3a 20 72 5b 50 33 5d 3d 72 6f 77 73 65 74 28  s: r[P3]=rowset(
2fbe0 50 31 29 0a 2a 2a 0a 2a 2a 20 45 78 74 72 61 63  P1).**.** Extrac
2fbf0 74 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76  t the smallest v
2fc00 61 6c 75 65 20 66 72 6f 6d 20 62 6f 6f 6c 65 61  alue from boolea
2fc10 6e 20 69 6e 64 65 78 20 50 31 20 61 6e 64 20 70  n index P1 and p
2fc20 75 74 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e  ut that value in
2fc30 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  to.** register P
2fc40 33 2e 20 20 4f 72 2c 20 69 66 20 62 6f 6f 6c 65  3.  Or, if boole
2fc50 61 6e 20 69 6e 64 65 78 20 50 31 20 69 73 20 69  an index P1 is i
2fc60 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74 79 2c 20  nitially empty, 
2fc70 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e 63 68  leave P3.** unch
2fc80 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70 20 74  anged and jump t
2fc90 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32  o instruction P2
2fca0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
2fcb0 53 65 74 52 65 61 64 3a 20 7b 20 20 20 20 20 20  SetRead: {      
2fcc0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 6f   /* jump, in1, o
2fcd0 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 76 61 6c  ut3 */.  i64 val
2fce0 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  ;..  pIn1 = &aMe
2fcf0 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  m[pOp->p1];.  if
2fd00 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
2fd10 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20   MEM_RowSet)==0 
2fd20 0a 20 20 20 7c 7c 20 73 71 6c 69 74 65 33 52 6f  .   || sqlite3Ro
2fd30 77 53 65 74 4e 65 78 74 28 70 49 6e 31 2d 3e 75  wSetNext(pIn1->u
2fd40 2e 70 52 6f 77 53 65 74 2c 20 26 76 61 6c 29 3d  .pRowSet, &val)=
2fd50 3d 30 0a 20 20 29 7b 0a 20 20 20 20 2f 2a 20 54  =0.  ){.    /* T
2fd60 68 65 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78  he boolean index
2fd70 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 20 20 20   is empty */.   
2fd80 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2fd90 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20  etNull(pIn1);.  
2fda0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
2fdb0 6e 28 31 2c 32 29 3b 0a 20 20 20 20 67 6f 74 6f  n(1,2);.    goto
2fdc0 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f   jump_to_p2_and_
2fdd0 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72  check_for_interr
2fde0 75 70 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  upt;.  }else{.  
2fdf0 20 20 2f 2a 20 41 20 76 61 6c 75 65 20 77 61 73    /* A value was
2fe00 20 70 75 6c 6c 65 64 20 66 72 6f 6d 20 74 68 65   pulled from the
2fe10 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 56 64   index */.    Vd
2fe20 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c  beBranchTaken(0,
2fe30 32 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  2);.    sqlite3V
2fe40 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26  dbeMemSetInt64(&
2fe50 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76  aMem[pOp->p3], v
2fe60 61 6c 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20  al);.  }.  goto 
2fe70 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72  check_for_interr
2fe80 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  upt;.}../* Opcod
2fe90 65 3a 20 52 6f 77 53 65 74 54 65 73 74 20 50 31  e: RowSetTest P1
2fea0 20 50 32 20 50 33 20 50 34 0a 2a 2a 20 53 79 6e   P2 P3 P4.** Syn
2feb0 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 33 5d 20  opsis: if r[P3] 
2fec0 69 6e 20 72 6f 77 73 65 74 28 50 31 29 20 67 6f  in rowset(P1) go
2fed0 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69  to P2.**.** Regi
2fee0 73 74 65 72 20 50 33 20 69 73 20 61 73 73 75 6d  ster P3 is assum
2fef0 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 36 34 2d  ed to hold a 64-
2ff00 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75  bit integer valu
2ff10 65 2e 20 49 66 20 72 65 67 69 73 74 65 72 20 50  e. If register P
2ff20 31 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20  1.** contains a 
2ff30 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 61 6e  RowSet object an
2ff40 64 20 74 68 61 74 20 52 6f 77 53 65 74 20 6f 62  d that RowSet ob
2ff50 6a 65 63 74 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a  ject contains.**
2ff60 20 74 68 65 20 76 61 6c 75 65 20 68 65 6c 64 20   the value held 
2ff70 69 6e 20 50 33 2c 20 6a 75 6d 70 20 74 6f 20 72  in P3, jump to r
2ff80 65 67 69 73 74 65 72 20 50 32 2e 20 4f 74 68 65  egister P2. Othe
2ff90 72 77 69 73 65 2c 20 69 6e 73 65 72 74 20 74 68  rwise, insert th
2ffa0 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69 6e 20  e.** integer in 
2ffb0 50 33 20 69 6e 74 6f 20 74 68 65 20 52 6f 77 53  P3 into the RowS
2ffc0 65 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20  et and continue 
2ffd0 6f 6e 20 74 6f 20 74 68 65 0a 2a 2a 20 6e 65 78  on to the.** nex
2ffe0 74 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  t opcode..**.** 
2fff0 54 68 65 20 52 6f 77 53 65 74 20 6f 62 6a 65 63  The RowSet objec
30000 74 20 69 73 20 6f 70 74 69 6d 69 7a 65 64 20 66  t is optimized f
30010 6f 72 20 74 68 65 20 63 61 73 65 20 77 68 65 72  or the case wher
30020 65 20 73 75 63 63 65 73 73 69 76 65 20 73 65 74  e successive set
30030 73 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73  s.** of integers
30040 2c 20 77 68 65 72 65 20 65 61 63 68 20 73 65 74  , where each set
30050 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 75 70   contains no dup
30060 6c 69 63 61 74 65 73 2e 20 45 61 63 68 20 73 65  licates. Each se
30070 74 0a 2a 2a 20 6f 66 20 76 61 6c 75 65 73 20 69  t.** of values i
30080 73 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  s identified by 
30090 61 20 75 6e 69 71 75 65 20 50 34 20 76 61 6c 75  a unique P4 valu
300a0 65 2e 20 54 68 65 20 66 69 72 73 74 20 73 65 74  e. The first set
300b0 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65 20 50 34  .** must have P4
300c0 3d 3d 30 2c 20 74 68 65 20 66 69 6e 61 6c 20 73  ==0, the final s
300d0 65 74 20 50 34 3d 2d 31 2e 20 20 50 34 20 6d 75  et P4=-1.  P4 mu
300e0 73 74 20 62 65 20 65 69 74 68 65 72 20 2d 31 20  st be either -1 
300f0 6f 72 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67 61 74 69  or.** non-negati
30100 76 65 2e 20 20 46 6f 72 20 6e 6f 6e 2d 6e 65 67  ve.  For non-neg
30110 61 74 69 76 65 20 76 61 6c 75 65 73 20 6f 66 20  ative values of 
30120 50 34 20 6f 6e 6c 79 20 74 68 65 20 6c 6f 77 65  P4 only the lowe
30130 72 20 34 0a 2a 2a 20 62 69 74 73 20 61 72 65 20  r 4.** bits are 
30140 73 69 67 6e 69 66 69 63 61 6e 74 2e 0a 2a 2a 0a  significant..**.
30150 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 6f  ** This allows o
30160 70 74 69 6d 69 7a 61 74 69 6f 6e 73 3a 20 28 61  ptimizations: (a
30170 29 20 77 68 65 6e 20 50 34 3d 3d 30 20 74 68 65  ) when P4==0 the
30180 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f  re is no need to
30190 20 74 65 73 74 0a 2a 2a 20 74 68 65 20 72 6f 77   test.** the row
301a0 73 65 74 20 6f 62 6a 65 63 74 20 66 6f 72 20 50  set object for P
301b0 33 2c 20 61 73 20 69 74 20 69 73 20 67 75 61 72  3, as it is guar
301c0 61 6e 74 65 65 64 20 6e 6f 74 20 74 6f 20 63 6f  anteed not to co
301d0 6e 74 61 69 6e 20 69 74 2c 0a 2a 2a 20 28 62 29  ntain it,.** (b)
301e0 20 77 68 65 6e 20 50 34 3d 3d 2d 31 20 74 68 65   when P4==-1 the
301f0 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f  re is no need to
30200 20 69 6e 73 65 72 74 20 74 68 65 20 76 61 6c 75   insert the valu
30210 65 2c 20 61 73 20 69 74 20 77 69 6c 6c 0a 2a 2a  e, as it will.**
30220 20 6e 65 76 65 72 20 62 65 20 74 65 73 74 65 64   never be tested
30230 20 66 6f 72 2c 20 61 6e 64 20 28 63 29 20 77 68   for, and (c) wh
30240 65 6e 20 61 20 76 61 6c 75 65 20 74 68 61 74 20  en a value that 
30250 69 73 20 70 61 72 74 20 6f 66 20 73 65 74 20 58  is part of set X
30260 20 69 73 0a 2a 2a 20 69 6e 73 65 72 74 65 64 2c   is.** inserted,
30270 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65   there is no nee
30280 64 20 74 6f 20 73 65 61 72 63 68 20 74 6f 20 73  d to search to s
30290 65 65 20 69 66 20 74 68 65 20 73 61 6d 65 20 76  ee if the same v
302a0 61 6c 75 65 20 77 61 73 0a 2a 2a 20 70 72 65 76  alue was.** prev
302b0 69 6f 75 73 6c 79 20 69 6e 73 65 72 74 65 64 20  iously inserted 
302c0 61 73 20 70 61 72 74 20 6f 66 20 73 65 74 20 58  as part of set X
302d0 20 28 6f 6e 6c 79 20 69 66 20 69 74 20 77 61 73   (only if it was
302e0 20 70 72 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 69   previously.** i
302f0 6e 73 65 72 74 65 64 20 61 73 20 70 61 72 74 20  nserted as part 
30300 6f 66 20 73 6f 6d 65 20 6f 74 68 65 72 20 73 65  of some other se
30310 74 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  t)..*/.case OP_R
30320 6f 77 53 65 74 54 65 73 74 3a 20 7b 20 20 20 20  owSetTest: {    
30330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30340 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69   /* jump, in1, i
30350 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 74  n3 */.  int iSet
30360 3b 0a 20 20 69 6e 74 20 65 78 69 73 74 73 3b 0a  ;.  int exists;.
30370 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
30380 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33  pOp->p1];.  pIn3
30390 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
303a0 5d 3b 0a 20 20 69 53 65 74 20 3d 20 70 4f 70 2d  ];.  iSet = pOp-
303b0 3e 70 34 2e 69 3b 0a 20 20 61 73 73 65 72 74 28  >p4.i;.  assert(
303c0 20 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn3->flags&MEM
303d0 5f 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 66  _Int );..  /* If
303e0 20 74 68 65 72 65 20 69 73 20 61 6e 79 74 68 69   there is anythi
303f0 6e 67 20 6f 74 68 65 72 20 74 68 61 6e 20 61 20  ng other than a 
30400 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 69 6e  rowset object in
30410 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 31 2c   memory cell P1,
30420 0a 20 20 2a 2a 20 64 65 6c 65 74 65 20 69 74 20  .  ** delete it 
30430 6e 6f 77 20 61 6e 64 20 69 6e 69 74 69 61 6c 69  now and initiali
30440 7a 65 20 50 31 20 77 69 74 68 20 61 6e 20 65 6d  ze P1 with an em
30450 70 74 79 20 72 6f 77 73 65 74 0a 20 20 2a 2f 0a  pty rowset.  */.
30460 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
30470 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
30480 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ==0 ){.    sqlit
30490 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53  e3VdbeMemSetRowS
304a0 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66  et(pIn1);.    if
304b0 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
304c0 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20   MEM_RowSet)==0 
304d0 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
304e0 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f   }..  assert( pO
304f0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
30500 54 33 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28  T32 );.  assert(
30510 20 69 53 65 74 3d 3d 2d 31 20 7c 7c 20 69 53 65   iSet==-1 || iSe
30520 74 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 53  t>=0 );.  if( iS
30530 65 74 20 29 7b 0a 20 20 20 20 65 78 69 73 74 73  et ){.    exists
30540 20 3d 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74   = sqlite3RowSet
30550 54 65 73 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f  Test(pIn1->u.pRo
30560 77 53 65 74 2c 20 69 53 65 74 2c 20 70 49 6e 33  wSet, iSet, pIn3
30570 2d 3e 75 2e 69 29 3b 0a 20 20 20 20 56 64 62 65  ->u.i);.    Vdbe
30580 42 72 61 6e 63 68 54 61 6b 65 6e 28 65 78 69 73  BranchTaken(exis
30590 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66  ts!=0,2);.    if
305a0 28 20 65 78 69 73 74 73 20 29 20 67 6f 74 6f 20  ( exists ) goto 
305b0 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
305c0 20 20 69 66 28 20 69 53 65 74 3e 3d 30 20 29 7b    if( iSet>=0 ){
305d0 0a 20 20 20 20 73 71 6c 69 74 65 33 52 6f 77 53  .    sqlite3RowS
305e0 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75  etInsert(pIn1->u
305f0 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 33 2d 3e  .pRowSet, pIn3->
30600 75 2e 69 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  u.i);.  }.  brea
30610 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53  k;.}...#ifndef S
30620 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
30630 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  ER../* Opcode: P
30640 72 6f 67 72 61 6d 20 50 31 20 50 32 20 50 33 20  rogram P1 P2 P3 
30650 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63  P4 P5.**.** Exec
30660 75 74 65 20 74 68 65 20 74 72 69 67 67 65 72 20  ute the trigger 
30670 70 72 6f 67 72 61 6d 20 70 61 73 73 65 64 20 61  program passed a
30680 73 20 50 34 20 28 74 79 70 65 20 50 34 5f 53 55  s P4 (type P4_SU
30690 42 50 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a 0a 2a  BPROGRAM). .**.*
306a0 2a 20 50 31 20 63 6f 6e 74 61 69 6e 73 20 74 68  * P1 contains th
306b0 65 20 61 64 64 72 65 73 73 20 6f 66 20 74 68 65  e address of the
306c0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61   memory cell tha
306d0 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 66  t contains the f
306e0 69 72 73 74 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20  irst memory .** 
306f0 63 65 6c 6c 20 69 6e 20 61 6e 20 61 72 72 61 79  cell in an array
30700 20 6f 66 20 76 61 6c 75 65 73 20 75 73 65 64 20   of values used 
30710 61 73 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  as arguments to 
30720 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e  the sub-program.
30730 20 50 32 20 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73   P2 .** contains
30740 20 74 68 65 20 61 64 64 72 65 73 73 20 74 6f 20   the address to 
30750 6a 75 6d 70 20 74 6f 20 69 66 20 74 68 65 20 73  jump to if the s
30760 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 72 6f 77  ub-program throw
30770 73 20 61 6e 20 49 47 4e 4f 52 45 20 0a 2a 2a 20  s an IGNORE .** 
30780 65 78 63 65 70 74 69 6f 6e 20 75 73 69 6e 67 20  exception using 
30790 74 68 65 20 52 41 49 53 45 28 29 20 66 75 6e 63  the RAISE() func
307a0 74 69 6f 6e 2e 20 52 65 67 69 73 74 65 72 20 50  tion. Register P
307b0 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61  3 contains the a
307c0 64 64 72 65 73 73 20 0a 2a 2a 20 6f 66 20 61 20  ddress .** of a 
307d0 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74  memory cell in t
307e0 68 69 73 20 28 74 68 65 20 70 61 72 65 6e 74 29  his (the parent)
307f0 20 56 4d 20 74 68 61 74 20 69 73 20 75 73 65 64   VM that is used
30800 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 74 68 65   to allocate the
30810 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72 65 71 75   .** memory requ
30820 69 72 65 64 20 62 79 20 74 68 65 20 73 75 62 2d  ired by the sub-
30830 76 64 62 65 20 61 74 20 72 75 6e 74 69 6d 65 2e  vdbe at runtime.
30840 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
30850 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 56 4d  ointer to the VM
30860 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
30870 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e  trigger program.
30880 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
30890 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 72  non-zero, then r
308a0 65 63 75 72 73 69 76 65 20 70 72 6f 67 72 61 6d  ecursive program
308b0 20 69 6e 76 6f 63 61 74 69 6f 6e 20 69 73 20 65   invocation is e
308c0 6e 61 62 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  nabled..*/.case 
308d0 4f 50 5f 50 72 6f 67 72 61 6d 3a 20 7b 20 20 20  OP_Program: {   
308e0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
308f0 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20    int nMem;     
30900 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
30910 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 72 65  ber of memory re
30920 67 69 73 74 65 72 73 20 66 6f 72 20 73 75 62 2d  gisters for sub-
30930 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 69 6e 74  program */.  int
30940 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20 20   nByte;         
30950 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20 6f 66       /* Bytes of
30960 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65 20 72   runtime space r
30970 65 71 75 69 72 65 64 20 66 6f 72 20 73 75 62 2d  equired for sub-
30980 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d  program */.  Mem
30990 20 2a 70 52 74 3b 20 20 20 20 20 20 20 20 20 20   *pRt;          
309a0 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
309b0 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 72 75 6e   to allocate run
309c0 74 69 6d 65 20 73 70 61 63 65 20 2a 2f 0a 20 20  time space */.  
309d0 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20  Mem *pMem;      
309e0 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20          /* Used 
309f0 74 6f 20 69 74 65 72 61 74 65 20 74 68 72 6f 75  to iterate throu
30a00 67 68 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  gh memory cells 
30a10 2a 2f 0a 20 20 4d 65 6d 20 2a 70 45 6e 64 3b 20  */.  Mem *pEnd; 
30a20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
30a30 4c 61 73 74 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  Last memory cell
30a40 20 69 6e 20 6e 65 77 20 61 72 72 61 79 20 2a 2f   in new array */
30a50 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46  .  VdbeFrame *pF
30a60 72 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 65  rame;      /* Ne
30a70 77 20 76 64 62 65 20 66 72 61 6d 65 20 74 6f 20  w vdbe frame to 
30a80 65 78 65 63 75 74 65 20 69 6e 20 2a 2f 0a 20 20  execute in */.  
30a90 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f  SubProgram *pPro
30aa0 67 72 61 6d 3b 20 20 20 2f 2a 20 53 75 62 2d 70  gram;   /* Sub-p
30ab0 72 6f 67 72 61 6d 20 74 6f 20 65 78 65 63 75 74  rogram to execut
30ac0 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 74 3b 20  e */.  void *t; 
30ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
30ae0 2a 20 54 6f 6b 65 6e 20 69 64 65 6e 74 69 66 79  * Token identify
30af0 69 6e 67 20 74 72 69 67 67 65 72 20 2a 2f 0a 0a  ing trigger */..
30b00 20 20 70 50 72 6f 67 72 61 6d 20 3d 20 70 4f 70    pProgram = pOp
30b10 2d 3e 70 34 2e 70 50 72 6f 67 72 61 6d 3b 0a 20  ->p4.pProgram;. 
30b20 20 70 52 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70   pRt = &aMem[pOp
30b30 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p3];.  assert(
30b40 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3e 30   pProgram->nOp>0
30b50 20 29 3b 0a 20 20 0a 20 20 2f 2a 20 49 66 20 74   );.  .  /* If t
30b60 68 65 20 70 35 20 66 6c 61 67 20 69 73 20 63 6c  he p5 flag is cl
30b70 65 61 72 2c 20 74 68 65 6e 20 72 65 63 75 72 73  ear, then recurs
30b80 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f  ive invocation o
30b90 66 20 74 72 69 67 67 65 72 73 20 69 73 20 0a 20  f triggers is . 
30ba0 20 2a 2a 20 64 69 73 61 62 6c 65 64 20 66 6f 72   ** disabled for
30bb0 20 62 61 63 6b 77 61 72 64 73 20 63 6f 6d 70 61   backwards compa
30bc0 74 69 62 69 6c 69 74 79 20 28 70 35 20 69 73 20  tibility (p5 is 
30bd0 73 65 74 20 69 66 20 74 68 69 73 20 73 75 62 2d  set if this sub-
30be0 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20 69 73 20  program.  ** is 
30bf0 72 65 61 6c 6c 79 20 61 20 74 72 69 67 67 65 72  really a trigger
30c00 2c 20 6e 6f 74 20 61 20 66 6f 72 65 69 67 6e 20  , not a foreign 
30c10 6b 65 79 20 61 63 74 69 6f 6e 2c 20 61 6e 64 20  key action, and 
30c20 74 68 65 20 66 6c 61 67 20 73 65 74 0a 20 20 2a  the flag set.  *
30c30 2a 20 61 6e 64 20 63 6c 65 61 72 65 64 20 62 79  * and cleared by
30c40 20 74 68 65 20 22 50 52 41 47 4d 41 20 72 65 63   the "PRAGMA rec
30c50 75 72 73 69 76 65 5f 74 72 69 67 67 65 72 73 22  ursive_triggers"
30c60 20 63 6f 6d 6d 61 6e 64 20 69 73 20 63 6c 65 61   command is clea
30c70 72 29 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20 49  r)..  ** .  ** I
30c80 74 20 69 73 20 72 65 63 75 72 73 69 76 65 20 69  t is recursive i
30c90 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69  nvocation of tri
30ca0 67 67 65 72 73 2c 20 61 74 20 74 68 65 20 53 51  ggers, at the SQ
30cb0 4c 20 6c 65 76 65 6c 2c 20 74 68 61 74 20 69 73  L level, that is
30cc0 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 2e   .  ** disabled.
30cd0 20 49 6e 20 73 6f 6d 65 20 63 61 73 65 73 20 61   In some cases a
30ce0 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20   single trigger 
30cf0 6d 61 79 20 67 65 6e 65 72 61 74 65 20 6d 6f 72  may generate mor
30d00 65 20 74 68 61 6e 20 6f 6e 65 20 0a 20 20 2a 2a  e than one .  **
30d10 20 53 75 62 50 72 6f 67 72 61 6d 20 28 69 66 20   SubProgram (if 
30d20 74 68 65 20 74 72 69 67 67 65 72 20 6d 61 79 20  the trigger may 
30d30 62 65 20 65 78 65 63 75 74 65 64 20 77 69 74 68  be executed with
30d40 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 64   more than one d
30d50 69 66 66 65 72 65 6e 74 20 0a 20 20 2a 2a 20 4f  ifferent .  ** O
30d60 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72  N CONFLICT algor
30d70 69 74 68 6d 29 2e 20 53 75 62 50 72 6f 67 72 61  ithm). SubProgra
30d80 6d 20 73 74 72 75 63 74 75 72 65 73 20 61 73 73  m structures ass
30d90 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 0a 20  ociated with a. 
30da0 20 2a 2a 20 73 69 6e 67 6c 65 20 74 72 69 67 67   ** single trigg
30db0 65 72 20 61 6c 6c 20 68 61 76 65 20 74 68 65 20  er all have the 
30dc0 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 74  same value for t
30dd0 68 65 20 53 75 62 50 72 6f 67 72 61 6d 2e 74 6f  he SubProgram.to
30de0 6b 65 6e 20 0a 20 20 2a 2a 20 76 61 72 69 61 62  ken .  ** variab
30df0 6c 65 2e 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f  le.  */.  if( pO
30e00 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 74 20 3d  p->p5 ){.    t =
30e10 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e   pProgram->token
30e20 3b 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65  ;.    for(pFrame
30e30 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61  =p->pFrame; pFra
30e40 6d 65 20 26 26 20 70 46 72 61 6d 65 2d 3e 74 6f  me && pFrame->to
30e50 6b 65 6e 21 3d 74 3b 20 70 46 72 61 6d 65 3d 70  ken!=t; pFrame=p
30e60 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b  Frame->pParent);
30e70 0a 20 20 20 20 69 66 28 20 70 46 72 61 6d 65 20  .    if( pFrame 
30e80 29 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20  ) break;.  }..  
30e90 69 66 28 20 70 2d 3e 6e 46 72 61 6d 65 3e 3d 64  if( p->nFrame>=d
30ea0 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
30eb0 5f 4c 49 4d 49 54 5f 54 52 49 47 47 45 52 5f 44  _LIMIT_TRIGGER_D
30ec0 45 50 54 48 5d 20 29 7b 0a 20 20 20 20 72 63 20  EPTH] ){.    rc 
30ed0 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
30ee0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
30ef0 72 72 6f 72 28 70 2c 20 22 74 6f 6f 20 6d 61 6e  rror(p, "too man
30f00 79 20 6c 65 76 65 6c 73 20 6f 66 20 74 72 69 67  y levels of trig
30f10 67 65 72 20 72 65 63 75 72 73 69 6f 6e 22 29 3b  ger recursion");
30f20 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f  .    goto abort_
30f30 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
30f40 7d 0a 0a 20 20 2f 2a 20 52 65 67 69 73 74 65 72  }..  /* Register
30f50 20 70 52 74 20 69 73 20 75 73 65 64 20 74 6f 20   pRt is used to 
30f60 73 74 6f 72 65 20 74 68 65 20 6d 65 6d 6f 72 79  store the memory
30f70 20 72 65 71 75 69 72 65 64 20 74 6f 20 73 61 76   required to sav
30f80 65 20 74 68 65 20 73 74 61 74 65 0a 20 20 2a 2a  e the state.  **
30f90 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current 
30fa0 70 72 6f 67 72 61 6d 2c 20 61 6e 64 20 74 68 65  program, and the
30fb0 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64   memory required
30fc0 20 61 74 20 72 75 6e 74 69 6d 65 20 74 6f 20 65   at runtime to e
30fd0 78 65 63 75 74 65 0a 20 20 2a 2a 20 74 68 65 20  xecute.  ** the 
30fe0 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e  trigger program.
30ff0 20 49 66 20 74 68 69 73 20 74 72 69 67 67 65 72   If this trigger
31000 20 68 61 73 20 62 65 65 6e 20 66 69 72 65 64 20   has been fired 
31010 62 65 66 6f 72 65 2c 20 74 68 65 6e 20 70 52 74  before, then pRt
31020 20 0a 20 20 2a 2a 20 69 73 20 61 6c 72 65 61 64   .  ** is alread
31030 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4f 74 68  y allocated. Oth
31040 65 72 77 69 73 65 2c 20 69 74 20 6d 75 73 74 20  erwise, it must 
31050 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20  be initialized. 
31060 20 2a 2f 0a 20 20 69 66 28 20 28 70 52 74 2d 3e   */.  if( (pRt->
31070 66 6c 61 67 73 26 4d 45 4d 5f 46 72 61 6d 65 29  flags&MEM_Frame)
31080 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 53 75  ==0 ){.    /* Su
31090 62 50 72 6f 67 72 61 6d 2e 6e 4d 65 6d 20 69 73  bProgram.nMem is
310a0 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62   set to the numb
310b0 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c  er of memory cel
310c0 6c 73 20 75 73 65 64 20 62 79 20 74 68 65 20 0a  ls used by the .
310d0 20 20 20 20 2a 2a 20 70 72 6f 67 72 61 6d 20 73      ** program s
310e0 74 6f 72 65 64 20 69 6e 20 53 75 62 50 72 6f 67  tored in SubProg
310f0 72 61 6d 2e 61 4f 70 2e 20 41 73 20 77 65 6c 6c  ram.aOp. As well
31100 20 61 73 20 74 68 65 73 65 2c 20 6f 6e 65 20 6d   as these, one m
31110 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 63 65 6c  emory.    ** cel
31120 6c 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f  l is required fo
31130 72 20 65 61 63 68 20 63 75 72 73 6f 72 20 75 73  r each cursor us
31140 65 64 20 62 79 20 74 68 65 20 70 72 6f 67 72 61  ed by the progra
31150 6d 2e 20 53 65 74 20 6c 6f 63 61 6c 0a 20 20 20  m. Set local.   
31160 20 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 4d 65   ** variable nMe
31170 6d 20 28 61 6e 64 20 6c 61 74 65 72 2c 20 56 64  m (and later, Vd
31180 62 65 46 72 61 6d 65 2e 6e 43 68 69 6c 64 4d 65  beFrame.nChildMe
31190 6d 29 20 74 6f 20 74 68 69 73 20 76 61 6c 75 65  m) to this value
311a0 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6e 4d 65  ..    */.    nMe
311b0 6d 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d  m = pProgram->nM
311c0 65 6d 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  em + pProgram->n
311d0 43 73 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28  Csr;.    assert(
311e0 20 6e 4d 65 6d 3e 30 20 29 3b 0a 20 20 20 20 69   nMem>0 );.    i
311f0 66 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73  f( pProgram->nCs
31200 72 3d 3d 30 20 29 20 6e 4d 65 6d 2b 2b 3b 0a 20  r==0 ) nMem++;. 
31210 20 20 20 6e 42 79 74 65 20 3d 20 52 4f 55 4e 44     nByte = ROUND
31220 38 28 73 69 7a 65 6f 66 28 56 64 62 65 46 72 61  8(sizeof(VdbeFra
31230 6d 65 29 29 0a 20 20 20 20 20 20 20 20 20 20 20  me)).           
31240 20 20 20 2b 20 6e 4d 65 6d 20 2a 20 73 69 7a 65     + nMem * size
31250 6f 66 28 4d 65 6d 29 0a 20 20 20 20 20 20 20 20  of(Mem).        
31260 20 20 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d        + pProgram
31270 2d 3e 6e 43 73 72 20 2a 20 73 69 7a 65 6f 66 28  ->nCsr * sizeof(
31280 56 64 62 65 43 75 72 73 6f 72 2a 29 0a 20 20 20  VdbeCursor*).   
31290 20 20 20 20 20 20 20 20 20 20 20 2b 20 28 70 50             + (pP
312a0 72 6f 67 72 61 6d 2d 3e 6e 4f 70 20 2b 20 37 29  rogram->nOp + 7)
312b0 2f 38 3b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d  /8;.    pFrame =
312c0 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
312d0 5a 65 72 6f 28 64 62 2c 20 6e 42 79 74 65 29 3b  Zero(db, nByte);
312e0 0a 20 20 20 20 69 66 28 20 21 70 46 72 61 6d 65  .    if( !pFrame
312f0 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e   ){.      goto n
31300 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20  o_mem;.    }.   
31310 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
31320 65 6c 65 61 73 65 28 70 52 74 29 3b 0a 20 20 20  elease(pRt);.   
31330 20 70 52 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45   pRt->flags = ME
31340 4d 5f 46 72 61 6d 65 3b 0a 20 20 20 20 70 52 74  M_Frame;.    pRt
31350 2d 3e 75 2e 70 46 72 61 6d 65 20 3d 20 70 46 72  ->u.pFrame = pFr
31360 61 6d 65 3b 0a 0a 20 20 20 20 70 46 72 61 6d 65  ame;..    pFrame
31370 2d 3e 76 20 3d 20 70 3b 0a 20 20 20 20 70 46 72  ->v = p;.    pFr
31380 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d  ame->nChildMem =
31390 20 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d   nMem;.    pFram
313a0 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 3d 20 70  e->nChildCsr = p
313b0 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20  Program->nCsr;. 
313c0 20 20 20 70 46 72 61 6d 65 2d 3e 70 63 20 3d 20     pFrame->pc = 
313d0 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
313e0 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4d  ;.    pFrame->aM
313f0 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20  em = p->aMem;.  
31400 20 20 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d    pFrame->nMem =
31410 20 70 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70 46   p->nMem;.    pF
31420 72 61 6d 65 2d 3e 61 70 43 73 72 20 3d 20 70 2d  rame->apCsr = p-
31430 3e 61 70 43 73 72 3b 0a 20 20 20 20 70 46 72 61  >apCsr;.    pFra
31440 6d 65 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 70 2d  me->nCursor = p-
31450 3e 6e 43 75 72 73 6f 72 3b 0a 20 20 20 20 70 46  >nCursor;.    pF
31460 72 61 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61  rame->aOp = p->a
31470 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  Op;.    pFrame->
31480 6e 4f 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20  nOp = p->nOp;.  
31490 20 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20    pFrame->token 
314a0 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65  = pProgram->toke
314b0 6e 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  n;.#ifdef SQLITE
314c0 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41  _ENABLE_STMT_SCA
314d0 4e 53 54 41 54 55 53 0a 20 20 20 20 70 46 72 61  NSTATUS.    pFra
314e0 6d 65 2d 3e 61 6e 45 78 65 63 20 3d 20 70 2d 3e  me->anExec = p->
314f0 61 6e 45 78 65 63 3b 0a 23 65 6e 64 69 66 0a 0a  anExec;.#endif..
31500 20 20 20 20 70 45 6e 64 20 3d 20 26 56 64 62 65      pEnd = &Vdbe
31510 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29  FrameMem(pFrame)
31520 5b 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d  [pFrame->nChildM
31530 65 6d 5d 3b 0a 20 20 20 20 66 6f 72 28 70 4d 65  em];.    for(pMe
31540 6d 3d 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70  m=VdbeFrameMem(p
31550 46 72 61 6d 65 29 3b 20 70 4d 65 6d 21 3d 70 45  Frame); pMem!=pE
31560 6e 64 3b 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20  nd; pMem++){.   
31570 20 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d     pMem->flags =
31580 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a   MEM_Undefined;.
31590 20 20 20 20 20 20 70 4d 65 6d 2d 3e 64 62 20 3d        pMem->db =
315a0 20 64 62 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c   db;.    }.  }el
315b0 73 65 7b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d  se{.    pFrame =
315c0 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65 3b 0a   pRt->u.pFrame;.
315d0 20 20 20 20 61 73 73 65 72 74 28 20 70 50 72 6f      assert( pPro
315e0 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67  gram->nMem+pProg
315f0 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d  ram->nCsr==pFram
31600 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 0a 20 20  e->nChildMem .  
31610 20 20 20 20 20 20 7c 7c 20 28 70 50 72 6f 67 72        || (pProgr
31620 61 6d 2d 3e 6e 43 73 72 3d 3d 30 20 26 26 20 70  am->nCsr==0 && p
31630 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 31 3d  Program->nMem+1=
31640 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d  =pFrame->nChildM
31650 65 6d 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72  em) );.    asser
31660 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73  t( pProgram->nCs
31670 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c  r==pFrame->nChil
31680 64 43 73 72 20 29 3b 0a 20 20 20 20 61 73 73 65  dCsr );.    asse
31690 72 74 28 20 28 69 6e 74 29 28 70 4f 70 20 2d 20  rt( (int)(pOp - 
316a0 61 4f 70 29 3d 3d 70 46 72 61 6d 65 2d 3e 70 63  aOp)==pFrame->pc
316b0 20 29 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e 6e 46   );.  }..  p->nF
316c0 72 61 6d 65 2b 2b 3b 0a 20 20 70 46 72 61 6d 65  rame++;.  pFrame
316d0 2d 3e 70 50 61 72 65 6e 74 20 3d 20 70 2d 3e 70  ->pParent = p->p
316e0 46 72 61 6d 65 3b 0a 20 20 70 46 72 61 6d 65 2d  Frame;.  pFrame-
316f0 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 64 62 2d  >lastRowid = db-
31700 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 70 46  >lastRowid;.  pF
31710 72 61 6d 65 2d 3e 6e 43 68 61 6e 67 65 20 3d 20  rame->nChange = 
31720 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 70 46  p->nChange;.  pF
31730 72 61 6d 65 2d 3e 6e 44 62 43 68 61 6e 67 65 20  rame->nDbChange 
31740 3d 20 70 2d 3e 64 62 2d 3e 6e 43 68 61 6e 67 65  = p->db->nChange
31750 3b 0a 20 20 61 73 73 65 72 74 28 20 70 46 72 61  ;.  assert( pFra
31760 6d 65 2d 3e 70 41 75 78 44 61 74 61 3d 3d 30 20  me->pAuxData==0 
31770 29 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70 41 75  );.  pFrame->pAu
31780 78 44 61 74 61 20 3d 20 70 2d 3e 70 41 75 78 44  xData = p->pAuxD
31790 61 74 61 3b 0a 20 20 70 2d 3e 70 41 75 78 44 61  ata;.  p->pAuxDa
317a0 74 61 20 3d 20 30 3b 0a 20 20 70 2d 3e 6e 43 68  ta = 0;.  p->nCh
317b0 61 6e 67 65 20 3d 20 30 3b 0a 20 20 70 2d 3e 70  ange = 0;.  p->p
317c0 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a  Frame = pFrame;.
317d0 20 20 70 2d 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d    p->aMem = aMem
317e0 20 3d 20 56 64 62 65 46 72 61 6d 65 4d 65 6d 28   = VdbeFrameMem(
317f0 70 46 72 61 6d 65 29 3b 0a 20 20 70 2d 3e 6e 4d  pFrame);.  p->nM
31800 65 6d 20 3d 20 70 46 72 61 6d 65 2d 3e 6e 43 68  em = pFrame->nCh
31810 69 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75  ildMem;.  p->nCu
31820 72 73 6f 72 20 3d 20 28 75 31 36 29 70 46 72 61  rsor = (u16)pFra
31830 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 3b 0a 20  me->nChildCsr;. 
31840 20 70 2d 3e 61 70 43 73 72 20 3d 20 28 56 64 62   p->apCsr = (Vdb
31850 65 43 75 72 73 6f 72 20 2a 2a 29 26 61 4d 65 6d  eCursor **)&aMem
31860 5b 70 2d 3e 6e 4d 65 6d 5d 3b 0a 20 20 70 46 72  [p->nMem];.  pFr
31870 61 6d 65 2d 3e 61 4f 6e 63 65 20 3d 20 28 75 38  ame->aOnce = (u8
31880 2a 29 26 70 2d 3e 61 70 43 73 72 5b 70 50 72 6f  *)&p->apCsr[pPro
31890 67 72 61 6d 2d 3e 6e 43 73 72 5d 3b 0a 20 20 6d  gram->nCsr];.  m
318a0 65 6d 73 65 74 28 70 46 72 61 6d 65 2d 3e 61 4f  emset(pFrame->aO
318b0 6e 63 65 2c 20 30 2c 20 28 70 50 72 6f 67 72 61  nce, 0, (pProgra
318c0 6d 2d 3e 6e 4f 70 20 2b 20 37 29 2f 38 29 3b 0a  m->nOp + 7)/8);.
318d0 20 20 70 2d 3e 61 4f 70 20 3d 20 61 4f 70 20 3d    p->aOp = aOp =
318e0 20 70 50 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a   pProgram->aOp;.
318f0 20 20 70 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f 67    p->nOp = pProg
31900 72 61 6d 2d 3e 6e 4f 70 3b 0a 23 69 66 64 65 66  ram->nOp;.#ifdef
31910 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
31920 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 0a 20  TMT_SCANSTATUS. 
31930 20 70 2d 3e 61 6e 45 78 65 63 20 3d 20 30 3b 0a   p->anExec = 0;.
31940 23 65 6e 64 69 66 0a 20 20 70 4f 70 20 3d 20 26  #endif.  pOp = &
31950 61 4f 70 5b 2d 31 5d 3b 0a 0a 20 20 62 72 65 61  aOp[-1];..  brea
31960 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
31970 20 50 61 72 61 6d 20 50 31 20 50 32 20 2a 20 2a   Param P1 P2 * *
31980 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70   *.**.** This op
31990 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 65 76 65  code is only eve
319a0 72 20 70 72 65 73 65 6e 74 20 69 6e 20 73 75 62  r present in sub
319b0 2d 70 72 6f 67 72 61 6d 73 20 63 61 6c 6c 65 64  -programs called
319c0 20 76 69 61 20 74 68 65 20 0a 2a 2a 20 4f 50 5f   via the .** OP_
319d0 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74  Program instruct
319e0 69 6f 6e 2e 20 43 6f 70 79 20 61 20 76 61 6c 75  ion. Copy a valu
319f0 65 20 63 75 72 72 65 6e 74 6c 79 20 73 74 6f 72  e currently stor
31a00 65 64 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 0a  ed in a memory .
31a10 2a 2a 20 63 65 6c 6c 20 6f 66 20 74 68 65 20 63  ** cell of the c
31a20 61 6c 6c 69 6e 67 20 28 70 61 72 65 6e 74 29 20  alling (parent) 
31a30 66 72 61 6d 65 20 74 6f 20 63 65 6c 6c 20 50 32  frame to cell P2
31a40 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20   in the current 
31a50 66 72 61 6d 65 73 20 0a 2a 2a 20 61 64 64 72 65  frames .** addre
31a60 73 73 20 73 70 61 63 65 2e 20 54 68 69 73 20 69  ss space. This i
31a70 73 20 75 73 65 64 20 62 79 20 74 72 69 67 67 65  s used by trigge
31a80 72 20 70 72 6f 67 72 61 6d 73 20 74 6f 20 61 63  r programs to ac
31a90 63 65 73 73 20 74 68 65 20 6e 65 77 2e 2a 20 0a  cess the new.* .
31aa0 2a 2a 20 61 6e 64 20 6f 6c 64 2e 2a 20 76 61 6c  ** and old.* val
31ab0 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61  ues..**.** The a
31ac0 64 64 72 65 73 73 20 6f 66 20 74 68 65 20 63 65  ddress of the ce
31ad0 6c 6c 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74  ll in the parent
31ae0 20 66 72 61 6d 65 20 69 73 20 64 65 74 65 72 6d   frame is determ
31af0 69 6e 65 64 20 62 79 20 61 64 64 69 6e 67 0a 2a  ined by adding.*
31b00 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  * the value of t
31b10 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74  he P1 argument t
31b20 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  o the value of t
31b30 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74  he P1 argument t
31b40 6f 20 74 68 65 0a 2a 2a 20 63 61 6c 6c 69 6e 67  o the.** calling
31b50 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74   OP_Program inst
31b60 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
31b70 20 4f 50 5f 50 61 72 61 6d 3a 20 7b 20 20 20 20   OP_Param: {    
31b80 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
31b90 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70  /.  VdbeFrame *p
31ba0 46 72 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a 70 49  Frame;.  Mem *pI
31bb0 6e 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  n;.  pOut = out2
31bc0 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
31bd0 70 29 3b 0a 20 20 70 46 72 61 6d 65 20 3d 20 70  p);.  pFrame = p
31be0 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 49 6e 20  ->pFrame;.  pIn 
31bf0 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b  = &pFrame->aMem[
31c00 70 4f 70 2d 3e 70 31 20 2b 20 70 46 72 61 6d 65  pOp->p1 + pFrame
31c10 2d 3e 61 4f 70 5b 70 46 72 61 6d 65 2d 3e 70 63  ->aOp[pFrame->pc
31c20 5d 2e 70 31 5d 3b 20 20 20 0a 20 20 73 71 6c 69  ].p1];   .  sqli
31c30 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f  te3VdbeMemShallo
31c40 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 2c  wCopy(pOut, pIn,
31c50 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 62   MEM_Ephem);.  b
31c60 72 65 61 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20  reak;.}..#endif 
31c70 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /* #ifndef SQLIT
31c80 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 2a  E_OMIT_TRIGGER *
31c90 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
31ca0 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
31cb0 45 59 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b  EY./* Opcode: Fk
31cc0 43 6f 75 6e 74 65 72 20 50 31 20 50 32 20 2a 20  Counter P1 P2 * 
31cd0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
31ce0 20 66 6b 63 74 72 5b 50 31 5d 2b 3d 50 32 0a 2a   fkctr[P1]+=P2.*
31cf0 2a 0a 2a 2a 20 49 6e 63 72 65 6d 65 6e 74 20 61  *.** Increment a
31d00 20 22 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75   "constraint cou
31d10 6e 74 65 72 22 20 62 79 20 50 32 20 28 50 32 20  nter" by P2 (P2 
31d20 6d 61 79 20 62 65 20 6e 65 67 61 74 69 76 65 20  may be negative 
31d30 6f 72 20 70 6f 73 69 74 69 76 65 29 2e 0a 2a 2a  or positive)..**
31d40 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65   If P1 is non-ze
31d50 72 6f 2c 20 74 68 65 20 64 61 74 61 62 61 73 65  ro, the database
31d60 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e   constraint coun
31d70 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  ter is increment
31d80 65 64 20 0a 2a 2a 20 28 64 65 66 65 72 72 65 64  ed .** (deferred
31d90 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
31da0 73 74 72 61 69 6e 74 73 29 2e 20 4f 74 68 65 72  straints). Other
31db0 77 69 73 65 2c 20 69 66 20 50 31 20 69 73 20 7a  wise, if P1 is z
31dc0 65 72 6f 2c 20 74 68 65 20 0a 2a 2a 20 73 74 61  ero, the .** sta
31dd0 74 65 6d 65 6e 74 20 63 6f 75 6e 74 65 72 20 69  tement counter i
31de0 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 69  s incremented (i
31df0 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e  mmediate foreign
31e00 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
31e10 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b  )..*/.case OP_Fk
31e20 43 6f 75 6e 74 65 72 3a 20 7b 0a 20 20 69 66 28  Counter: {.  if(
31e30 20 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c   db->flags & SQL
31e40 49 54 45 5f 44 65 66 65 72 46 4b 73 20 29 7b 0a  ITE_DeferFKs ){.
31e50 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65      db->nDeferre
31e60 64 49 6d 6d 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d  dImmCons += pOp-
31e70 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  >p2;.  }else if(
31e80 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20   pOp->p1 ){.    
31e90 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
31ea0 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  s += pOp->p2;.  
31eb0 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 6e 46  }else{.    p->nF
31ec0 6b 43 6f 6e 73 74 72 61 69 6e 74 20 2b 3d 20 70  kConstraint += p
31ed0 4f 70 2d 3e 70 32 3b 0a 20 20 7d 0a 20 20 62 72  Op->p2;.  }.  br
31ee0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
31ef0 65 3a 20 46 6b 49 66 5a 65 72 6f 20 50 31 20 50  e: FkIfZero P1 P
31f00 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
31f10 73 69 73 3a 20 69 66 20 66 6b 63 74 72 5b 50 31  sis: if fkctr[P1
31f20 5d 3d 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  ]==0 goto P2.**.
31f30 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 74  ** This opcode t
31f40 65 73 74 73 20 69 66 20 61 20 66 6f 72 65 69 67  ests if a foreig
31f50 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
31f60 2d 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72  -counter is curr
31f70 65 6e 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49  ently zero..** I
31f80 66 20 73 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e  f so, jump to in
31f90 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74  struction P2. Ot
31fa0 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68  herwise, fall th
31fb0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
31fc0 74 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f  t .** instructio
31fd0 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69  n..**.** If P1 i
31fe0 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
31ff0 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
32000 65 6e 20 69 66 20 74 68 65 20 64 61 74 61 62 61  en if the databa
32010 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f  se constraint-co
32020 75 6e 74 65 72 0a 2a 2a 20 69 73 20 7a 65 72 6f  unter.** is zero
32030 20 28 74 68 65 20 6f 6e 65 20 74 68 61 74 20 63   (the one that c
32040 6f 75 6e 74 73 20 64 65 66 65 72 72 65 64 20 63  ounts deferred c
32050 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
32060 69 6f 6e 73 29 2e 20 49 66 20 50 31 20 69 73 0a  ions). If P1 is.
32070 2a 2a 20 7a 65 72 6f 2c 20 74 68 65 20 6a 75 6d  ** zero, the jum
32080 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68  p is taken if th
32090 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e 73  e statement cons
320a0 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69  traint-counter i
320b0 73 20 7a 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64  s zero.** (immed
320c0 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  iate foreign key
320d0 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
320e0 61 74 69 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65  ations)..*/.case
320f0 20 4f 50 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b 20   OP_FkIfZero: { 
32100 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
32110 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  */.  if( pOp->p1
32120 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e   ){.    VdbeBran
32130 63 68 54 61 6b 65 6e 28 64 62 2d 3e 6e 44 65 66  chTaken(db->nDef
32140 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20  erredCons==0 && 
32150 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
32160 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20 20 20  Cons==0, 2);.   
32170 20 69 66 28 20 64 62 2d 3e 6e 44 65 66 65 72 72   if( db->nDeferr
32180 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d  edCons==0 && db-
32190 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
321a0 73 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70  s==0 ) goto jump
321b0 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b  _to_p2;.  }else{
321c0 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
321d0 61 6b 65 6e 28 70 2d 3e 6e 46 6b 43 6f 6e 73 74  aken(p->nFkConst
321e0 72 61 69 6e 74 3d 3d 30 20 26 26 20 64 62 2d 3e  raint==0 && db->
321f0 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
32200 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69 66 28  ==0, 2);.    if(
32210 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e   p->nFkConstrain
32220 74 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66  t==0 && db->nDef
32230 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20  erredImmCons==0 
32240 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
32250 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
32260 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e  }.#endif /* #ifn
32270 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
32280 46 4f 52 45 49 47 4e 5f 4b 45 59 20 2a 2f 0a 0a  FOREIGN_KEY */..
32290 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
322a0 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
322b0 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 65 6d  T./* Opcode: Mem
322c0 4d 61 78 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Max P1 P2 * * *.
322d0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
322e0 31 5d 3d 6d 61 78 28 72 5b 50 31 5d 2c 72 5b 50  1]=max(r[P1],r[P
322f0 32 5d 29 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  2]).**.** P1 is 
32300 61 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 68  a register in th
32310 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20  e root frame of 
32320 74 68 69 73 20 56 4d 20 28 74 68 65 20 72 6f 6f  this VM (the roo
32330 74 20 66 72 61 6d 65 20 69 73 0a 2a 2a 20 64 69  t frame is.** di
32340 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 74 68 65  fferent from the
32350 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65 20 69   current frame i
32360 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  f this instructi
32370 6f 6e 20 69 73 20 62 65 69 6e 67 20 65 78 65 63  on is being exec
32380 75 74 65 64 0a 2a 2a 20 77 69 74 68 69 6e 20 61  uted.** within a
32390 20 73 75 62 2d 70 72 6f 67 72 61 6d 29 2e 20 53   sub-program). S
323a0 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  et the value of 
323b0 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 74  register P1 to t
323c0 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 0a 2a  he maximum of .*
323d0 2a 20 69 74 73 20 63 75 72 72 65 6e 74 20 76 61  * its current va
323e0 6c 75 65 20 61 6e 64 20 74 68 65 20 76 61 6c 75  lue and the valu
323f0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
32400 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ..**.** This ins
32410 74 72 75 63 74 69 6f 6e 20 74 68 72 6f 77 73 20  truction throws 
32420 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68 65 20  an error if the 
32430 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 73 20 6e  memory cell is n
32440 6f 74 20 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20  ot initially.** 
32450 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63  an integer..*/.c
32460 61 73 65 20 4f 50 5f 4d 65 6d 4d 61 78 3a 20 7b  ase OP_MemMax: {
32470 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a          /* in2 *
32480 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70  /.  VdbeFrame *p
32490 46 72 61 6d 65 3b 0a 20 20 69 66 28 20 70 2d 3e  Frame;.  if( p->
324a0 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 66 6f  pFrame ){.    fo
324b0 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61  r(pFrame=p->pFra
324c0 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72  me; pFrame->pPar
324d0 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61  ent; pFrame=pFra
324e0 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20  me->pParent);.  
324f0 20 20 70 49 6e 31 20 3d 20 26 70 46 72 61 6d 65    pIn1 = &pFrame
32500 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b  ->aMem[pOp->p1];
32510 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49  .  }else{.    pI
32520 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
32530 70 31 5d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  p1];.  }.  asser
32540 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49  t( memIsValid(pI
32550 6e 31 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  n1) );.  sqlite3
32560 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
32570 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20  y(pIn1);.  pIn2 
32580 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
32590 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
325a0 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
325b0 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  2);.  if( pIn1->
325c0 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69 29 7b 0a  u.i<pIn2->u.i){.
325d0 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20      pIn1->u.i = 
325e0 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20  pIn2->u.i;.  }. 
325f0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
32600 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
32610 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f  AUTOINCREMENT */
32620 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 50  ../* Opcode: IfP
32630 6f 73 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  os P1 P2 P3 * *.
32640 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
32650 72 5b 50 31 5d 3e 30 20 74 68 65 6e 20 72 5b 50  r[P1]>0 then r[P
32660 31 5d 2d 3d 50 33 2c 20 67 6f 74 6f 20 50 32 0a  1]-=P3, goto P2.
32670 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50  **.** Register P
32680 31 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 61  1 must contain a
32690 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 20 49 66  n integer..** If
326a0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65   the value of re
326b0 67 69 73 74 65 72 20 50 31 20 69 73 20 31 20 6f  gister P1 is 1 o
326c0 72 20 67 72 65 61 74 65 72 2c 20 73 75 62 74 72  r greater, subtr
326d0 61 63 74 20 50 33 20 66 72 6f 6d 20 74 68 65 0a  act P3 from the.
326e0 2a 2a 20 76 61 6c 75 65 20 69 6e 20 50 31 20 61  ** value in P1 a
326f0 6e 64 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  nd jump to P2..*
32700 2a 0a 2a 2a 20 49 66 20 74 68 65 20 69 6e 69 74  *.** If the init
32710 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 72 65 67  ial value of reg
32720 69 73 74 65 72 20 50 31 20 69 73 20 6c 65 73 73  ister P1 is less
32730 20 74 68 61 6e 20 31 2c 20 74 68 65 6e 20 74 68   than 1, then th
32740 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 75 6e  e.** value is un
32750 63 68 61 6e 67 65 64 20 61 6e 64 20 63 6f 6e 74  changed and cont
32760 72 6f 6c 20 70 61 73 73 65 73 20 74 68 72 6f 75  rol passes throu
32770 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
32780 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  nstruction..*/.c
32790 61 73 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20  ase OP_IfPos: { 
327a0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
327b0 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
327c0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
327d0 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
327e0 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b  flags&MEM_Int );
327f0 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
32800 65 6e 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 2c  en( pIn1->u.i>0,
32810 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d   2);.  if( pIn1-
32820 3e 75 2e 69 3e 30 20 29 7b 0a 20 20 20 20 70 49  >u.i>0 ){.    pI
32830 6e 31 2d 3e 75 2e 69 20 2d 3d 20 70 4f 70 2d 3e  n1->u.i -= pOp->
32840 70 33 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d  p3;.    goto jum
32850 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62  p_to_p2;.  }.  b
32860 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
32870 64 65 3a 20 4f 66 66 73 65 74 4c 69 6d 69 74 20  de: OffsetLimit 
32880 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
32890 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
328a0 31 5d 3e 30 20 74 68 65 6e 20 72 5b 50 32 5d 3d  1]>0 then r[P2]=
328b0 72 5b 50 31 5d 2b 6d 61 78 28 30 2c 72 5b 50 33  r[P1]+max(0,r[P3
328c0 5d 29 20 65 6c 73 65 20 72 5b 50 32 5d 3d 28 2d  ]) else r[P2]=(-
328d0 31 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  1).**.** This op
328e0 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 61 20  code performs a 
328f0 63 6f 6d 6d 6f 6e 6c 79 20 75 73 65 64 20 63 6f  commonly used co
32900 6d 70 75 74 61 74 69 6f 6e 20 61 73 73 6f 63 69  mputation associ
32910 61 74 65 64 20 77 69 74 68 0a 2a 2a 20 4c 49 4d  ated with.** LIM
32920 49 54 20 61 6e 64 20 4f 46 46 53 45 54 20 70 72  IT and OFFSET pr
32930 6f 63 65 73 73 2e 20 20 72 5b 50 31 5d 20 68 6f  ocess.  r[P1] ho
32940 6c 64 73 20 74 68 65 20 6c 69 6d 69 74 20 63 6f  lds the limit co
32950 75 6e 74 65 72 2e 20 20 72 5b 50 33 5d 0a 2a 2a  unter.  r[P3].**
32960 20 68 6f 6c 64 73 20 74 68 65 20 6f 66 66 73 65   holds the offse
32970 74 20 63 6f 75 6e 74 65 72 2e 20 20 54 68 65 20  t counter.  The 
32980 6f 70 63 6f 64 65 20 63 6f 6d 70 75 74 65 73 20  opcode computes 
32990 74 68 65 20 63 6f 6d 62 69 6e 65 64 20 76 61 6c  the combined val
329a0 75 65 0a 2a 2a 20 6f 66 20 74 68 65 20 4c 49 4d  ue.** of the LIM
329b0 49 54 20 61 6e 64 20 4f 46 46 53 45 54 20 61 6e  IT and OFFSET an
329c0 64 20 73 74 6f 72 65 73 20 74 68 61 74 20 76 61  d stores that va
329d0 6c 75 65 20 69 6e 20 72 5b 50 32 5d 2e 20 20 54  lue in r[P2].  T
329e0 68 65 20 72 5b 50 32 5d 0a 2a 2a 20 76 61 6c 75  he r[P2].** valu
329f0 65 20 63 6f 6d 70 75 74 65 64 20 69 73 20 74 68  e computed is th
32a00 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  e total number o
32a10 66 20 72 6f 77 73 20 74 68 61 74 20 77 69 6c 6c  f rows that will
32a20 20 6e 65 65 64 20 74 6f 20 62 65 0a 2a 2a 20 76   need to be.** v
32a30 69 73 69 74 65 64 20 69 6e 20 6f 72 64 65 72 20  isited in order 
32a40 74 6f 20 63 6f 6d 70 6c 65 74 65 20 74 68 65 20  to complete the 
32a50 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  query..**.** If 
32a60 72 5b 50 33 5d 20 69 73 20 7a 65 72 6f 20 6f 72  r[P3] is zero or
32a70 20 6e 65 67 61 74 69 76 65 2c 20 74 68 61 74 20   negative, that 
32a80 6d 65 61 6e 73 20 74 68 65 72 65 20 69 73 20 6e  means there is n
32a90 6f 20 4f 46 46 53 45 54 0a 2a 2a 20 61 6e 64 20  o OFFSET.** and 
32aa0 72 5b 50 32 5d 20 69 73 20 73 65 74 20 74 6f 20  r[P2] is set to 
32ab0 62 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  be the value of 
32ac0 74 68 65 20 4c 49 4d 49 54 2c 20 72 5b 50 31 5d  the LIMIT, r[P1]
32ad0 2e 0a 2a 2a 0a 2a 2a 20 69 66 20 72 5b 50 31 5d  ..**.** if r[P1]
32ae0 20 69 73 20 7a 65 72 6f 20 6f 72 20 6e 65 67 61   is zero or nega
32af0 74 69 76 65 2c 20 74 68 61 74 20 6d 65 61 6e 73  tive, that means
32b00 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d   there is no LIM
32b10 49 54 0a 2a 2a 20 61 6e 64 20 72 5b 50 32 5d 20  IT.** and r[P2] 
32b20 69 73 20 73 65 74 20 74 6f 20 2d 31 2e 20 0a 2a  is set to -1. .*
32b30 2a 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20  *.** Otherwise, 
32b40 72 5b 50 32 5d 20 69 73 20 73 65 74 20 74 6f 20  r[P2] is set to 
32b50 74 68 65 20 73 75 6d 20 6f 66 20 72 5b 50 31 5d  the sum of r[P1]
32b60 20 61 6e 64 20 72 5b 50 33 5d 2e 0a 2a 2f 0a 63   and r[P3]..*/.c
32b70 61 73 65 20 4f 50 5f 4f 66 66 73 65 74 4c 69 6d  ase OP_OffsetLim
32b80 69 74 3a 20 7b 20 20 20 20 2f 2a 20 69 6e 31 2c  it: {    /* in1,
32b90 20 6f 75 74 32 2c 20 69 6e 33 20 2a 2f 0a 20 20   out2, in3 */.  
32ba0 69 36 34 20 78 3b 0a 20 20 70 49 6e 31 20 3d 20  i64 x;.  pIn1 = 
32bb0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
32bc0 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
32bd0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 4f 75 74 20  Op->p3];.  pOut 
32be0 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
32bf0 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65  (p, pOp);.  asse
32c00 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  rt( pIn1->flags 
32c10 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61  & MEM_Int );.  a
32c20 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61  ssert( pIn3->fla
32c30 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a  gs & MEM_Int );.
32c40 20 20 78 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b    x = pIn1->u.i;
32c50 0a 20 20 69 66 28 20 78 3c 3d 30 20 7c 7c 20 73  .  if( x<=0 || s
32c60 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 26  qlite3AddInt64(&
32c70 78 2c 20 70 49 6e 33 2d 3e 75 2e 69 3e 30 3f 70  x, pIn3->u.i>0?p
32c80 49 6e 33 2d 3e 75 2e 69 3a 30 29 20 29 7b 0a 20  In3->u.i:0) ){. 
32c90 20 20 20 2f 2a 20 49 66 20 74 68 65 20 4c 49 4d     /* If the LIM
32ca0 49 54 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  IT is less than 
32cb0 6f 72 20 65 71 75 61 6c 20 74 6f 20 7a 65 72 6f  or equal to zero
32cc0 2c 20 6c 6f 6f 70 20 66 6f 72 65 76 65 72 2e 20  , loop forever. 
32cd0 20 54 68 69 73 0a 20 20 20 20 2a 2a 20 69 73 20   This.    ** is 
32ce0 64 6f 63 75 6d 65 6e 74 65 64 2e 20 20 42 75 74  documented.  But
32cf0 20 61 6c 73 6f 2c 20 69 66 20 74 68 65 20 4c 49   also, if the LI
32d00 4d 49 54 2b 4f 46 46 53 45 54 20 65 78 63 65 65  MIT+OFFSET excee
32d10 64 73 20 32 5e 36 33 20 74 68 65 6e 0a 20 20 20  ds 2^63 then.   
32d20 20 2a 2a 20 61 6c 73 6f 20 6c 6f 6f 70 20 66 6f   ** also loop fo
32d30 72 65 76 65 72 2e 20 20 54 68 69 73 20 69 73 20  rever.  This is 
32d40 75 6e 64 6f 63 75 6d 65 6e 74 65 64 2e 20 20 49  undocumented.  I
32d50 6e 20 66 61 63 74 2c 20 6f 6e 65 20 63 6f 75 6c  n fact, one coul
32d60 64 20 61 72 67 75 65 0a 20 20 20 20 2a 2a 20 74  d argue.    ** t
32d70 68 61 74 20 74 68 65 20 6c 6f 6f 70 20 73 68 6f  hat the loop sho
32d80 75 6c 64 20 74 65 72 6d 69 6e 61 74 65 2e 20 20  uld terminate.  
32d90 42 75 74 20 61 73 73 75 6d 69 6e 67 20 31 20 62  But assuming 1 b
32da0 69 6c 6c 69 6f 6e 20 69 74 65 72 61 74 69 6f 6e  illion iteration
32db0 73 0a 20 20 20 20 2a 2a 20 70 65 72 20 73 65 63  s.    ** per sec
32dc0 6f 6e 64 20 28 66 61 72 20 65 78 63 65 65 64 69  ond (far exceedi
32dd0 6e 67 20 74 68 65 20 63 61 70 61 62 69 6c 69 74  ng the capabilit
32de0 69 65 73 20 6f 66 20 61 6e 79 20 63 75 72 72 65  ies of any curre
32df0 6e 74 20 68 61 72 64 77 61 72 65 29 0a 20 20 20  nt hardware).   
32e00 20 2a 2a 20 69 74 20 77 6f 75 6c 64 20 74 61 6b   ** it would tak
32e10 65 20 6e 65 61 72 6c 79 20 33 30 30 20 79 65 61  e nearly 300 yea
32e20 72 73 20 74 6f 20 61 63 74 75 61 6c 6c 79 20 72  rs to actually r
32e30 65 61 63 68 20 74 68 65 20 6c 69 6d 69 74 2e 20  each the limit. 
32e40 20 53 6f 0a 20 20 20 20 2a 2a 20 6c 6f 6f 70 69   So.    ** loopi
32e50 6e 67 20 66 6f 72 65 76 65 72 20 69 73 20 61 20  ng forever is a 
32e60 72 65 61 73 6f 6e 61 62 6c 65 20 61 70 70 72 6f  reasonable appro
32e70 78 69 6d 61 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20  ximation. */.   
32e80 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 2d 31 3b   pOut->u.i = -1;
32e90 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f  .  }else{.    pO
32ea0 75 74 2d 3e 75 2e 69 20 3d 20 78 3b 0a 20 20 7d  ut->u.i = x;.  }
32eb0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
32ec0 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74 5a 65 72  Opcode: IfNotZer
32ed0 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  o P1 P2 * * *.**
32ee0 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b   Synopsis: if r[
32ef0 50 31 5d 21 3d 30 20 74 68 65 6e 20 72 5b 50 31  P1]!=0 then r[P1
32f00 5d 2d 2d 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  ]--, goto P2.**.
32f10 2a 2a 20 52 65 67 69 73 74 65 72 20 50 31 20 6d  ** Register P1 m
32f20 75 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69  ust contain an i
32f30 6e 74 65 67 65 72 2e 20 20 49 66 20 74 68 65 20  nteger.  If the 
32f40 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
32f50 74 65 72 20 50 31 20 69 73 0a 2a 2a 20 69 6e 69  ter P1 is.** ini
32f60 74 69 61 6c 6c 79 20 67 72 65 61 74 65 72 20 74  tially greater t
32f70 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 64  han zero, then d
32f80 65 63 72 65 6d 65 6e 74 20 74 68 65 20 76 61 6c  ecrement the val
32f90 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
32fa0 31 2e 0a 2a 2a 20 49 66 20 69 74 20 69 73 20 6e  1..** If it is n
32fb0 6f 6e 2d 7a 65 72 6f 20 28 6e 65 67 61 74 69 76  on-zero (negativ
32fc0 65 20 6f 72 20 70 6f 73 69 74 69 76 65 29 20 61  e or positive) a
32fd0 6e 64 20 74 68 65 6e 20 61 6c 73 6f 20 6a 75 6d  nd then also jum
32fe0 70 20 74 6f 20 50 32 2e 20 20 0a 2a 2a 20 49 66  p to P2.  .** If
32ff0 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
33000 69 6e 69 74 69 61 6c 6c 79 20 7a 65 72 6f 2c 20  initially zero, 
33010 6c 65 61 76 65 20 69 74 20 75 6e 63 68 61 6e 67  leave it unchang
33020 65 64 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f  ed and fall thro
33030 75 67 68 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ugh..*/.case OP_
33040 49 66 4e 6f 74 5a 65 72 6f 3a 20 7b 20 20 20 20  IfNotZero: {    
33050 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
33060 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
33070 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
33080 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
33090 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  gs&MEM_Int );.  
330a0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
330b0 70 49 6e 31 2d 3e 75 2e 69 3c 30 2c 20 32 29 3b  pIn1->u.i<0, 2);
330c0 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69  .  if( pIn1->u.i
330d0 20 29 7b 0a 20 20 20 20 20 69 66 28 20 70 49 6e   ){.     if( pIn
330e0 31 2d 3e 75 2e 69 3e 30 20 29 20 70 49 6e 31 2d  1->u.i>0 ) pIn1-
330f0 3e 75 2e 69 2d 2d 3b 0a 20 20 20 20 20 67 6f 74  >u.i--;.     got
33100 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
33110 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
33120 20 4f 70 63 6f 64 65 3a 20 44 65 63 72 4a 75 6d   Opcode: DecrJum
33130 70 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20  pZero P1 P2 * * 
33140 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
33150 66 20 28 2d 2d 72 5b 50 31 5d 29 3d 3d 30 20 67  f (--r[P1])==0 g
33160 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67  oto P2.**.** Reg
33170 69 73 74 65 72 20 50 31 20 6d 75 73 74 20 68 6f  ister P1 must ho
33180 6c 64 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  ld an integer.  
33190 44 65 63 72 65 6d 65 6e 74 20 74 68 65 20 76 61  Decrement the va
331a0 6c 75 65 20 69 6e 20 50 31 0a 2a 2a 20 61 6e 64  lue in P1.** and
331b0 20 6a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   jump to P2 if t
331c0 68 65 20 6e 65 77 20 76 61 6c 75 65 20 69 73 20  he new value is 
331d0 65 78 61 63 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2f  exactly zero..*/
331e0 0a 63 61 73 65 20 4f 50 5f 44 65 63 72 4a 75 6d  .case OP_DecrJum
331f0 70 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 2f 2a  pZero: {      /*
33200 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
33210 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
33220 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
33230 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn1->flags&MEM
33240 5f 49 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49  _Int );.  if( pI
33250 6e 31 2d 3e 75 2e 69 3e 53 4d 41 4c 4c 45 53 54  n1->u.i>SMALLEST
33260 5f 49 4e 54 36 34 20 29 20 70 49 6e 31 2d 3e 75  _INT64 ) pIn1->u
33270 2e 69 2d 2d 3b 0a 20 20 56 64 62 65 42 72 61 6e  .i--;.  VdbeBran
33280 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e  chTaken(pIn1->u.
33290 69 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20  i==0, 2);.  if( 
332a0 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 20 67  pIn1->u.i==0 ) g
332b0 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
332c0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20    break;.}.../* 
332d0 4f 70 63 6f 64 65 3a 20 41 67 67 53 74 65 70 30  Opcode: AggStep0
332e0 20 2a 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a   * P2 P3 P4 P5.*
332f0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75  * Synopsis: accu
33300 6d 3d 72 5b 50 33 5d 20 73 74 65 70 28 72 5b 50  m=r[P3] step(r[P
33310 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65  2@P5]).**.** Exe
33320 63 75 74 65 20 74 68 65 20 73 74 65 70 20 66 75  cute the step fu
33330 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67  nction for an ag
33340 67 72 65 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a  gregate.  The.**
33350 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35   function has P5
33360 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 20 50 34   arguments.   P4
33370 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
33380 20 74 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a 20   the FuncDef.** 
33390 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 73  structure that s
333a0 70 65 63 69 66 69 65 73 20 74 68 65 20 66 75 6e  pecifies the fun
333b0 63 74 69 6f 6e 2e 20 20 52 65 67 69 73 74 65 72  ction.  Register
333c0 20 50 33 20 69 73 20 74 68 65 0a 2a 2a 20 61 63   P3 is the.** ac
333d0 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a  cumulator..**.**
333e0 20 54 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74   The P5 argument
333f0 73 20 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d  s are taken from
33400 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64   register P2 and
33410 20 69 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f   its.** successo
33420 72 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  rs..*/./* Opcode
33430 3a 20 41 67 67 53 74 65 70 20 2a 20 50 32 20 50  : AggStep * P2 P
33440 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
33450 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d  sis: accum=r[P3]
33460 20 73 74 65 70 28 72 5b 50 32 40 50 35 5d 29 0a   step(r[P2@P5]).
33470 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68  **.** Execute th
33480 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20  e step function 
33490 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74 65  for an aggregate
334a0 2e 20 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69  .  The.** functi
334b0 6f 6e 20 68 61 73 20 50 35 20 61 72 67 75 6d 65  on has P5 argume
334c0 6e 74 73 2e 20 20 20 50 34 20 69 73 20 61 20 70  nts.   P4 is a p
334d0 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c  ointer to an sql
334e0 69 74 65 33 5f 63 6f 6e 74 65 78 74 0a 2a 2a 20  ite3_context.** 
334f0 6f 62 6a 65 63 74 20 74 68 61 74 20 69 73 20 75  object that is u
33500 73 65 64 20 74 6f 20 72 75 6e 20 74 68 65 20 66  sed to run the f
33510 75 6e 63 74 69 6f 6e 2e 20 20 52 65 67 69 73 74  unction.  Regist
33520 65 72 20 50 33 20 69 73 0a 2a 2a 20 61 73 20 74  er P3 is.** as t
33530 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a  he accumulator..
33540 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67  **.** The P5 arg
33550 75 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e  uments are taken
33560 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
33570 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63  2 and its.** suc
33580 63 65 73 73 6f 72 73 2e 0a 2a 2a 0a 2a 2a 20 54  cessors..**.** T
33590 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 69 6e  his opcode is in
335a0 69 74 69 61 6c 6c 79 20 63 6f 64 65 64 20 61 73  itially coded as
335b0 20 4f 50 5f 41 67 67 53 74 65 70 30 2e 20 20 4f   OP_AggStep0.  O
335c0 6e 20 66 69 72 73 74 20 65 76 61 6c 75 61 74 69  n first evaluati
335d0 6f 6e 2c 0a 2a 2a 20 74 68 65 20 46 75 6e 63 44  on,.** the FuncD
335e0 65 66 20 73 74 6f 72 65 64 20 69 6e 20 50 34 20  ef stored in P4 
335f0 69 73 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  is converted int
33600 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e  o an sqlite3_con
33610 74 65 78 74 20 61 6e 64 0a 2a 2a 20 74 68 65 20  text and.** the 
33620 6f 70 63 6f 64 65 20 69 73 20 63 68 61 6e 67 65  opcode is change
33630 64 2e 20 20 49 6e 20 74 68 69 73 20 77 61 79 2c  d.  In this way,
33640 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74   the initializat
33650 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 71  ion of the.** sq
33660 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 6e  lite3_context on
33670 6c 79 20 68 61 70 70 65 6e 73 20 6f 6e 63 65 2c  ly happens once,
33680 20 69 6e 73 74 65 61 64 20 6f 66 20 6f 6e 20 65   instead of on e
33690 61 63 68 20 63 61 6c 6c 20 74 6f 20 74 68 65 0a  ach call to the.
336a0 2a 2a 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e  ** step function
336b0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67  ..*/.case OP_Agg
336c0 53 74 65 70 30 3a 20 7b 0a 20 20 69 6e 74 20 6e  Step0: {.  int n
336d0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ;.  sqlite3_cont
336e0 65 78 74 20 2a 70 43 74 78 3b 0a 0a 20 20 61 73  ext *pCtx;..  as
336f0 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
33700 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20 29 3b  e==P4_FUNCDEF );
33710 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a  .  n = pOp->p5;.
33720 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
33730 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
33740 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
33750 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 61 73  nCursor) );.  as
33760 73 65 72 74 28 20 6e 3d 3d 30 20 7c 7c 20 28 70  sert( n==0 || (p
33770 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d  Op->p2>0 && pOp-
33780 3e 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  >p2+n<=(p->nMem+
33790 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b  1 - p->nCursor)+
337a0 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  1) );.  assert( 
337b0 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32 20  pOp->p3<pOp->p2 
337c0 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d  || pOp->p3>=pOp-
337d0 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 43 74 78 20  >p2+n );.  pCtx 
337e0 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  = sqlite3DbMallo
337f0 63 52 61 77 4e 4e 28 64 62 2c 20 73 69 7a 65 6f  cRawNN(db, sizeo
33800 66 28 2a 70 43 74 78 29 20 2b 20 28 6e 2d 31 29  f(*pCtx) + (n-1)
33810 2a 73 69 7a 65 6f 66 28 73 71 6c 69 74 65 33 5f  *sizeof(sqlite3_
33820 76 61 6c 75 65 2a 29 29 3b 0a 20 20 69 66 28 20  value*));.  if( 
33830 70 43 74 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  pCtx==0 ) goto n
33840 6f 5f 6d 65 6d 3b 0a 20 20 70 43 74 78 2d 3e 70  o_mem;.  pCtx->p
33850 4d 65 6d 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d  Mem = 0;.  pCtx-
33860 3e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34  >pFunc = pOp->p4
33870 2e 70 46 75 6e 63 3b 0a 20 20 70 43 74 78 2d 3e  .pFunc;.  pCtx->
33880 69 4f 70 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  iOp = (int)(pOp 
33890 2d 20 61 4f 70 29 3b 0a 20 20 70 43 74 78 2d 3e  - aOp);.  pCtx->
338a0 70 56 64 62 65 20 3d 20 70 3b 0a 20 20 70 43 74  pVdbe = p;.  pCt
338b0 78 2d 3e 61 72 67 63 20 3d 20 6e 3b 0a 20 20 70  x->argc = n;.  p
338c0 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f  Op->p4type = P4_
338d0 46 55 4e 43 43 54 58 3b 0a 20 20 70 4f 70 2d 3e  FUNCCTX;.  pOp->
338e0 70 34 2e 70 43 74 78 20 3d 20 70 43 74 78 3b 0a  p4.pCtx = pCtx;.
338f0 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20    pOp->opcode = 
33900 4f 50 5f 41 67 67 53 74 65 70 3b 0a 20 20 2f 2a  OP_AggStep;.  /*
33910 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e   Fall through in
33920 74 6f 20 4f 50 5f 41 67 67 53 74 65 70 20 2a 2f  to OP_AggStep */
33930 0a 7d 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74  .}.case OP_AggSt
33940 65 70 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20  ep: {.  int i;. 
33950 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
33960 20 2a 70 43 74 78 3b 0a 20 20 4d 65 6d 20 2a 70   *pCtx;.  Mem *p
33970 4d 65 6d 3b 0a 20 20 4d 65 6d 20 74 3b 0a 0a 20  Mem;.  Mem t;.. 
33980 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
33990 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 43 54 58  type==P4_FUNCCTX
339a0 20 29 3b 0a 20 20 70 43 74 78 20 3d 20 70 4f 70   );.  pCtx = pOp
339b0 2d 3e 70 34 2e 70 43 74 78 3b 0a 20 20 70 4d 65  ->p4.pCtx;.  pMe
339c0 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
339d0 33 5d 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69  3];..  /* If thi
339e0 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e  s function is in
339f0 73 69 64 65 20 6f 66 20 61 20 74 72 69 67 67 65  side of a trigge
33a00 72 2c 20 74 68 65 20 72 65 67 69 73 74 65 72 20  r, the register 
33a10 61 72 72 61 79 20 69 6e 20 61 4d 65 6d 5b 5d 0a  array in aMem[].
33a20 20 20 2a 2a 20 6d 69 67 68 74 20 63 68 61 6e 67    ** might chang
33a30 65 20 66 72 6f 6d 20 6f 6e 65 20 65 76 61 6c 75  e from one evalu
33a40 61 74 69 6f 6e 20 74 6f 20 74 68 65 20 6e 65 78  ation to the nex
33a50 74 2e 20 20 54 68 65 20 6e 65 78 74 20 62 6c 6f  t.  The next blo
33a60 63 6b 20 6f 66 20 63 6f 64 65 0a 20 20 2a 2a 20  ck of code.  ** 
33a70 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66  checks to see if
33a80 20 74 68 65 20 72 65 67 69 73 74 65 72 20 61 72   the register ar
33a90 72 61 79 20 68 61 73 20 63 68 61 6e 67 65 64 2c  ray has changed,
33aa0 20 61 6e 64 20 69 66 20 73 6f 20 69 74 0a 20 20   and if so it.  
33ab0 2a 2a 20 72 65 69 6e 69 74 69 61 6c 69 7a 65 73  ** reinitializes
33ac0 20 74 68 65 20 72 65 6c 61 76 61 6e 74 20 70 61   the relavant pa
33ad0 72 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74  rts of the sqlit
33ae0 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63  e3_context objec
33af0 74 20 2a 2f 0a 20 20 69 66 28 20 70 43 74 78 2d  t */.  if( pCtx-
33b00 3e 70 4d 65 6d 20 21 3d 20 70 4d 65 6d 20 29 7b  >pMem != pMem ){
33b10 0a 20 20 20 20 70 43 74 78 2d 3e 70 4d 65 6d 20  .    pCtx->pMem 
33b20 3d 20 70 4d 65 6d 3b 0a 20 20 20 20 66 6f 72 28  = pMem;.    for(
33b30 69 3d 70 43 74 78 2d 3e 61 72 67 63 2d 31 3b 20  i=pCtx->argc-1; 
33b40 69 3e 3d 30 3b 20 69 2d 2d 29 20 70 43 74 78 2d  i>=0; i--) pCtx-
33b50 3e 61 72 67 76 5b 69 5d 20 3d 20 26 61 4d 65 6d  >argv[i] = &aMem
33b60 5b 70 4f 70 2d 3e 70 32 2b 69 5d 3b 0a 20 20 7d  [pOp->p2+i];.  }
33b70 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
33b80 44 45 42 55 47 0a 20 20 66 6f 72 28 69 3d 30 3b  DEBUG.  for(i=0;
33b90 20 69 3c 70 43 74 78 2d 3e 61 72 67 63 3b 20 69   i<pCtx->argc; i
33ba0 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ++){.    assert(
33bb0 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 43 74 78   memIsValid(pCtx
33bc0 2d 3e 61 72 67 76 5b 69 5d 29 20 29 3b 0a 20 20  ->argv[i]) );.  
33bd0 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
33be0 28 70 4f 70 2d 3e 70 32 2b 69 2c 20 70 43 74 78  (pOp->p2+i, pCtx
33bf0 2d 3e 61 72 67 76 5b 69 5d 29 3b 0a 20 20 7d 0a  ->argv[i]);.  }.
33c00 23 65 6e 64 69 66 0a 0a 20 20 70 4d 65 6d 2d 3e  #endif..  pMem->
33c10 6e 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n++;.  sqlite3Vd
33c20 62 65 4d 65 6d 49 6e 69 74 28 26 74 2c 20 64 62  beMemInit(&t, db
33c30 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 70  , MEM_Null);.  p
33c40 43 74 78 2d 3e 70 4f 75 74 20 3d 20 26 74 3b 0a  Ctx->pOut = &t;.
33c50 20 20 70 43 74 78 2d 3e 66 45 72 72 6f 72 4f 72    pCtx->fErrorOr
33c60 41 75 78 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d  Aux = 0;.  pCtx-
33c70 3e 73 6b 69 70 46 6c 61 67 20 3d 20 30 3b 0a 20  >skipFlag = 0;. 
33c80 20 28 70 43 74 78 2d 3e 70 46 75 6e 63 2d 3e 78   (pCtx->pFunc->x
33c90 53 46 75 6e 63 29 28 70 43 74 78 2c 70 43 74 78  SFunc)(pCtx,pCtx
33ca0 2d 3e 61 72 67 63 2c 70 43 74 78 2d 3e 61 72 67  ->argc,pCtx->arg
33cb0 76 29 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 34  v); /* IMP: R-24
33cc0 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a 20 20 69  505-23230 */.  i
33cd0 66 28 20 70 43 74 78 2d 3e 66 45 72 72 6f 72 4f  f( pCtx->fErrorO
33ce0 72 41 75 78 20 29 7b 0a 20 20 20 20 69 66 28 20  rAux ){.    if( 
33cf0 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 20 29 7b  pCtx->isError ){
33d00 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
33d10 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c  beError(p, "%s",
33d20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
33d30 65 78 74 28 26 74 29 29 3b 0a 20 20 20 20 20 20  ext(&t));.      
33d40 72 63 20 3d 20 70 43 74 78 2d 3e 69 73 45 72 72  rc = pCtx->isErr
33d50 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  or;.    }.    sq
33d60 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
33d70 61 73 65 28 26 74 29 3b 0a 20 20 20 20 69 66 28  ase(&t);.    if(
33d80 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
33d90 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
33da0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
33db0 72 74 28 20 74 2e 66 6c 61 67 73 3d 3d 4d 45 4d  rt( t.flags==MEM
33dc0 5f 4e 75 6c 6c 20 29 3b 0a 20 20 7d 0a 20 20 69  _Null );.  }.  i
33dd0 66 28 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61  f( pCtx->skipFla
33de0 67 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  g ){.    assert(
33df0 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d   pOp[-1].opcode=
33e00 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20  =OP_CollSeq );. 
33e10 20 20 20 69 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70     i = pOp[-1].p
33e20 31 3b 0a 20 20 20 20 69 66 28 20 69 20 29 20 73  1;.    if( i ) s
33e30 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
33e40 49 6e 74 36 34 28 26 61 4d 65 6d 5b 69 5d 2c 20  Int64(&aMem[i], 
33e50 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  1);.  }.  break;
33e60 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
33e70 67 67 46 69 6e 61 6c 20 50 31 20 50 32 20 2a 20  ggFinal P1 P2 * 
33e80 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
33e90 3a 20 61 63 63 75 6d 3d 72 5b 50 31 5d 20 4e 3d  : accum=r[P1] N=
33ea0 50 32 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65  P2.**.** Execute
33eb0 20 74 68 65 20 66 69 6e 61 6c 69 7a 65 72 20 66   the finalizer f
33ec0 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61  unction for an a
33ed0 67 67 72 65 67 61 74 65 2e 20 20 50 31 20 69 73  ggregate.  P1 is
33ee0 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c  .** the memory l
33ef0 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20  ocation that is 
33f00 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 20  the accumulator 
33f10 66 6f 72 20 74 68 65 20 61 67 67 72 65 67 61 74  for the aggregat
33f20 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74  e..**.** P2 is t
33f30 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67  he number of arg
33f40 75 6d 65 6e 74 73 20 74 68 61 74 20 74 68 65 20  uments that the 
33f50 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 74 61  step function ta
33f60 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69 73  kes and.** P4 is
33f70 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
33f80 65 20 46 75 6e 63 44 65 66 20 66 6f 72 20 74 68  e FuncDef for th
33f90 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68  is function.  Th
33fa0 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  e P2.** argument
33fb0 20 69 73 20 6e 6f 74 20 75 73 65 64 20 62 79 20   is not used by 
33fc0 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 49 74  this opcode.  It
33fd0 20 69 73 20 6f 6e 6c 79 20 74 68 65 72 65 20 74   is only there t
33fe0 6f 20 64 69 73 61 6d 62 69 67 75 61 74 65 0a 2a  o disambiguate.*
33ff0 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61 74  * functions that
34000 20 63 61 6e 20 74 61 6b 65 20 76 61 72 79 69 6e   can take varyin
34010 67 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 72 67  g numbers of arg
34020 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a 20  uments.  The.** 
34030 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f  P4 argument is o
34040 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f 72 20 74  nly needed for t
34050 68 65 20 64 65 67 65 6e 65 72 61 74 65 20 63 61  he degenerate ca
34060 73 65 20 77 68 65 72 65 0a 2a 2a 20 74 68 65 20  se where.** the 
34070 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 77 61  step function wa
34080 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79  s not previously
34090 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65   called..*/.case
340a0 20 4f 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b 0a   OP_AggFinal: {.
340b0 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61    Mem *pMem;.  a
340c0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
340d0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d   && pOp->p1<=(p-
340e0 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
340f0 72 73 6f 72 29 20 29 3b 0a 20 20 70 4d 65 6d 20  rsor) );.  pMem 
34100 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
34110 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d 65  ;.  assert( (pMe
34120 6d 2d 3e 66 6c 61 67 73 20 26 20 7e 28 4d 45 4d  m->flags & ~(MEM
34130 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d  _Null|MEM_Agg))=
34140 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  =0 );.  rc = sql
34150 69 74 65 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c  ite3VdbeMemFinal
34160 69 7a 65 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70  ize(pMem, pOp->p
34170 34 2e 70 46 75 6e 63 29 3b 0a 20 20 69 66 28 20  4.pFunc);.  if( 
34180 72 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  rc ){.    sqlite
34190 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25  3VdbeError(p, "%
341a0 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  s", sqlite3_valu
341b0 65 5f 74 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20  e_text(pMem));. 
341c0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
341d0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a  e_to_error;.  }.
341e0 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
341f0 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d  ngeEncoding(pMem
34200 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55  , encoding);.  U
34210 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
34220 5a 45 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20  ZE(pMem);.  if( 
34230 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
34240 6f 42 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20  oBig(pMem) ){.  
34250 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
34260 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
34270 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
34280 4d 49 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64  MIT_WAL./* Opcod
34290 65 3a 20 43 68 65 63 6b 70 6f 69 6e 74 20 50 31  e: Checkpoint P1
342a0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
342b0 20 43 68 65 63 6b 70 6f 69 6e 74 20 64 61 74 61   Checkpoint data
342c0 62 61 73 65 20 50 31 2e 20 54 68 69 73 20 69 73  base P1. This is
342d0 20 61 20 6e 6f 2d 6f 70 20 69 66 20 50 31 20 69   a no-op if P1 i
342e0 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20  s not currently 
342f0 69 6e 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e 20  in.** WAL mode. 
34300 50 61 72 61 6d 65 74 65 72 20 50 32 20 69 73 20  Parameter P2 is 
34310 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 43 48  one of SQLITE_CH
34320 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45  ECKPOINT_PASSIVE
34330 2c 20 46 55 4c 4c 2c 0a 2a 2a 20 52 45 53 54 41  , FULL,.** RESTA
34340 52 54 2c 20 6f 72 20 54 52 55 4e 43 41 54 45 2e  RT, or TRUNCATE.
34350 20 20 57 72 69 74 65 20 31 20 6f 72 20 30 20 69    Write 1 or 0 i
34360 6e 74 6f 20 6d 65 6d 5b 50 33 5d 20 69 66 20 74  nto mem[P3] if t
34370 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 72 65  he checkpoint re
34380 74 75 72 6e 73 0a 2a 2a 20 53 51 4c 49 54 45 5f  turns.** SQLITE_
34390 42 55 53 59 20 6f 72 20 6e 6f 74 2c 20 72 65 73  BUSY or not, res
343a0 70 65 63 74 69 76 65 6c 79 2e 20 20 57 72 69 74  pectively.  Writ
343b0 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
343c0 70 61 67 65 73 20 69 6e 20 74 68 65 0a 2a 2a 20  pages in the.** 
343d0 57 41 4c 20 61 66 74 65 72 20 74 68 65 20 63 68  WAL after the ch
343e0 65 63 6b 70 6f 69 6e 74 20 69 6e 74 6f 20 6d 65  eckpoint into me
343f0 6d 5b 50 33 2b 31 5d 20 61 6e 64 20 74 68 65 20  m[P3+1] and the 
34400 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 0a  number of pages.
34410 2a 2a 20 69 6e 20 74 68 65 20 57 41 4c 20 74 68  ** in the WAL th
34420 61 74 20 68 61 76 65 20 62 65 65 6e 20 63 68 65  at have been che
34430 63 6b 70 6f 69 6e 74 65 64 20 61 66 74 65 72 20  ckpointed after 
34440 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 0a 2a  the checkpoint.*
34450 2a 20 63 6f 6d 70 6c 65 74 65 73 20 69 6e 74 6f  * completes into
34460 20 6d 65 6d 5b 50 33 2b 32 5d 2e 20 20 48 6f 77   mem[P3+2].  How
34470 65 76 65 72 20 6f 6e 20 61 6e 20 65 72 72 6f 72  ever on an error
34480 2c 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a  , mem[P3+1] and.
34490 2a 2a 20 6d 65 6d 5b 50 33 2b 32 5d 20 61 72 65  ** mem[P3+2] are
344a0 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20   initialized to 
344b0 2d 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  -1..*/.case OP_C
344c0 68 65 63 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20 69  heckpoint: {.  i
344d0 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20  nt i;           
344e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
344f0 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a  * Loop counter *
34500 2f 0a 20 20 69 6e 74 20 61 52 65 73 5b 33 5d 3b  /.  int aRes[3];
34510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34520 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 2a      /* Results *
34530 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20  /.  Mem *pMem;  
34540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34550 20 20 20 20 2f 2a 20 57 72 69 74 65 20 72 65 73      /* Write res
34560 75 6c 74 73 20 68 65 72 65 20 2a 2f 0a 0a 20 20  ults here */..  
34570 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
34580 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 52 65 73  nly==0 );.  aRes
34590 5b 30 5d 20 3d 20 30 3b 0a 20 20 61 52 65 73 5b  [0] = 0;.  aRes[
345a0 31 5d 20 3d 20 61 52 65 73 5b 32 5d 20 3d 20 2d  1] = aRes[2] = -
345b0 31 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  1;.  assert( pOp
345c0 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45  ->p2==SQLITE_CHE
345d0 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 0a  CKPOINT_PASSIVE.
345e0 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70         || pOp->p
345f0 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50  2==SQLITE_CHECKP
34600 4f 49 4e 54 5f 46 55 4c 4c 0a 20 20 20 20 20 20  OINT_FULL.      
34610 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c   || pOp->p2==SQL
34620 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52  ITE_CHECKPOINT_R
34630 45 53 54 41 52 54 0a 20 20 20 20 20 20 20 7c 7c  ESTART.       ||
34640 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45   pOp->p2==SQLITE
34650 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 54 52 55 4e  _CHECKPOINT_TRUN
34660 43 41 54 45 0a 20 20 29 3b 0a 20 20 72 63 20 3d  CATE.  );.  rc =
34670 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69   sqlite3Checkpoi
34680 6e 74 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  nt(db, pOp->p1, 
34690 70 4f 70 2d 3e 70 32 2c 20 26 61 52 65 73 5b 31  pOp->p2, &aRes[1
346a0 5d 2c 20 26 61 52 65 73 5b 32 5d 29 3b 0a 20 20  ], &aRes[2]);.  
346b0 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 69 66  if( rc ){.    if
346c0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc!=SQLITE_BUS
346d0 59 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  Y ) goto abort_d
346e0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
346f0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
34700 0a 20 20 20 20 61 52 65 73 5b 30 5d 20 3d 20 31  .    aRes[0] = 1
34710 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30 2c  ;.  }.  for(i=0,
34720 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f   pMem = &aMem[pO
34730 70 2d 3e 70 33 5d 3b 20 69 3c 33 3b 20 69 2b 2b  p->p3]; i<3; i++
34740 2c 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 73  , pMem++){.    s
34750 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
34760 49 6e 74 36 34 28 70 4d 65 6d 2c 20 28 69 36 34  Int64(pMem, (i64
34770 29 61 52 65 73 5b 69 5d 29 3b 0a 20 20 7d 20 20  )aRes[i]);.  }  
34780 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 20 20    .  break;.};  
34790 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
347a0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41   SQLITE_OMIT_PRA
347b0 47 4d 41 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a  GMA./* Opcode: J
347c0 6f 75 72 6e 61 6c 4d 6f 64 65 20 50 31 20 50 32  ournalMode P1 P2
347d0 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68   P3 * *.**.** Ch
347e0 61 6e 67 65 20 74 68 65 20 6a 6f 75 72 6e 61 6c  ange the journal
347f0 20 6d 6f 64 65 20 6f 66 20 64 61 74 61 62 61 73   mode of databas
34800 65 20 50 31 20 74 6f 20 50 33 2e 20 50 33 20 6d  e P1 to P3. P3 m
34810 75 73 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68  ust be one of th
34820 65 0a 2a 2a 20 50 41 47 45 52 5f 4a 4f 55 52 4e  e.** PAGER_JOURN
34830 41 4c 4d 4f 44 45 5f 58 58 58 20 76 61 6c 75 65  ALMODE_XXX value
34840 73 2e 20 49 66 20 63 68 61 6e 67 69 6e 67 20 62  s. If changing b
34850 65 74 77 65 65 6e 20 74 68 65 20 76 61 72 69 6f  etween the vario
34860 75 73 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6d  us rollback.** m
34870 6f 64 65 73 20 28 64 65 6c 65 74 65 2c 20 74 72  odes (delete, tr
34880 75 6e 63 61 74 65 2c 20 70 65 72 73 69 73 74 2c  uncate, persist,
34890 20 6f 66 66 20 61 6e 64 20 6d 65 6d 6f 72 79 29   off and memory)
348a0 2c 20 74 68 69 73 20 69 73 20 61 20 73 69 6d 70  , this is a simp
348b0 6c 65 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e  le.** operation.
348c0 20 4e 6f 20 49 4f 20 69 73 20 72 65 71 75 69 72   No IO is requir
348d0 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63 68 61  ed..**.** If cha
348e0 6e 67 69 6e 67 20 69 6e 74 6f 20 6f 72 20 6f 75  nging into or ou
348f0 74 20 6f 66 20 57 41 4c 20 6d 6f 64 65 20 74 68  t of WAL mode th
34900 65 20 70 72 6f 63 65 64 75 72 65 20 69 73 20 6d  e procedure is m
34910 6f 72 65 20 63 6f 6d 70 6c 69 63 61 74 65 64 2e  ore complicated.
34920 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 73  .**.** Write a s
34930 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67  tring containing
34940 20 74 68 65 20 66 69 6e 61 6c 20 6a 6f 75 72 6e   the final journ
34950 61 6c 2d 6d 6f 64 65 20 74 6f 20 72 65 67 69 73  al-mode to regis
34960 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
34970 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 3a 20  OP_JournalMode: 
34980 7b 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a  {    /* out2 */.
34990 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20    Btree *pBt;   
349a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
349b0 20 20 2f 2a 20 42 74 72 65 65 20 74 6f 20 63 68    /* Btree to ch
349c0 61 6e 67 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64  ange journal mod
349d0 65 20 6f 66 20 2a 2f 0a 20 20 50 61 67 65 72 20  e of */.  Pager 
349e0 2a 70 50 61 67 65 72 3b 20 20 20 20 20 20 20 20  *pPager;        
349f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67            /* Pag
34a00 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  er associated wi
34a10 74 68 20 70 42 74 20 2a 2f 0a 20 20 69 6e 74 20  th pBt */.  int 
34a20 65 4e 65 77 3b 20 20 20 20 20 20 20 20 20 20 20  eNew;           
34a30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
34a40 65 77 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20  ew journal mode 
34a50 2a 2f 0a 20 20 69 6e 74 20 65 4f 6c 64 3b 20 20  */.  int eOld;  
34a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34a70 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 6c 64 20       /* The old 
34a80 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a  journal mode */.
34a90 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
34aa0 4d 49 54 5f 57 41 4c 0a 20 20 63 6f 6e 73 74 20  MIT_WAL.  const 
34ab0 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b  char *zFilename;
34ac0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d            /* Nam
34ad0 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 66 69  e of database fi
34ae0 6c 65 20 66 6f 72 20 70 50 61 67 65 72 20 2a 2f  le for pPager */
34af0 0a 23 65 6e 64 69 66 0a 0a 20 20 70 4f 75 74 20  .#endif..  pOut 
34b00 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
34b10 28 70 2c 20 70 4f 70 29 3b 0a 20 20 65 4e 65 77  (p, pOp);.  eNew
34b20 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73   = pOp->p3;.  as
34b30 73 65 72 74 28 20 65 4e 65 77 3d 3d 50 41 47 45  sert( eNew==PAGE
34b40 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44 45  R_JOURNALMODE_DE
34b50 4c 45 54 45 20 0a 20 20 20 20 20 20 20 7c 7c 20  LETE .       || 
34b60 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
34b70 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54 45  NALMODE_TRUNCATE
34b80 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77   .       || eNew
34b90 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
34ba0 4f 44 45 5f 50 45 52 53 49 53 54 20 0a 20 20 20  ODE_PERSIST .   
34bb0 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
34bc0 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f  ER_JOURNALMODE_O
34bd0 46 46 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65  FF.       || eNe
34be0 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
34bf0 4d 4f 44 45 5f 4d 45 4d 4f 52 59 0a 20 20 20 20  MODE_MEMORY.    
34c00 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
34c10 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
34c20 4c 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77  L.       || eNew
34c30 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
34c40 4f 44 45 5f 51 55 45 52 59 0a 20 20 29 3b 0a 20  ODE_QUERY.  );. 
34c50 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
34c60 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
34c70 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
34c80 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
34c90 3d 30 20 29 3b 0a 0a 20 20 70 42 74 20 3d 20 64  =0 );..  pBt = d
34ca0 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
34cb0 70 42 74 3b 0a 20 20 70 50 61 67 65 72 20 3d 20  pBt;.  pPager = 
34cc0 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65  sqlite3BtreePage
34cd0 72 28 70 42 74 29 3b 0a 20 20 65 4f 6c 64 20 3d  r(pBt);.  eOld =
34ce0 20 73 71 6c 69 74 65 33 50 61 67 65 72 47 65 74   sqlite3PagerGet
34cf0 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67  JournalMode(pPag
34d00 65 72 29 3b 0a 20 20 69 66 28 20 65 4e 65 77 3d  er);.  if( eNew=
34d10 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
34d20 44 45 5f 51 55 45 52 59 20 29 20 65 4e 65 77 20  DE_QUERY ) eNew 
34d30 3d 20 65 4f 6c 64 3b 0a 20 20 69 66 28 20 21 73  = eOld;.  if( !s
34d40 71 6c 69 74 65 33 50 61 67 65 72 4f 6b 54 6f 43  qlite3PagerOkToC
34d50 68 61 6e 67 65 4a 6f 75 72 6e 61 6c 4d 6f 64 65  hangeJournalMode
34d60 28 70 50 61 67 65 72 29 20 29 20 65 4e 65 77 20  (pPager) ) eNew 
34d70 3d 20 65 4f 6c 64 3b 0a 0a 23 69 66 6e 64 65 66  = eOld;..#ifndef
34d80 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
34d90 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 73  .  zFilename = s
34da0 71 6c 69 74 65 33 50 61 67 65 72 46 69 6c 65 6e  qlite3PagerFilen
34db0 61 6d 65 28 70 50 61 67 65 72 2c 20 31 29 3b 0a  ame(pPager, 1);.
34dc0 0a 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c  .  /* Do not all
34dd0 6f 77 20 61 20 74 72 61 6e 73 69 74 69 6f 6e 20  ow a transition 
34de0 74 6f 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d  to journal_mode=
34df0 57 41 4c 20 66 6f 72 20 61 20 64 61 74 61 62 61  WAL for a databa
34e00 73 65 0a 20 20 2a 2a 20 69 6e 20 74 65 6d 70 6f  se.  ** in tempo
34e10 72 61 72 79 20 73 74 6f 72 61 67 65 20 6f 72 20  rary storage or 
34e20 69 66 20 74 68 65 20 56 46 53 20 64 6f 65 73 20  if the VFS does 
34e30 6e 6f 74 20 73 75 70 70 6f 72 74 20 73 68 61 72  not support shar
34e40 65 64 20 6d 65 6d 6f 72 79 20 0a 20 20 2a 2f 0a  ed memory .  */.
34e50 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41 47 45    if( eNew==PAGE
34e60 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
34e70 4c 0a 20 20 20 26 26 20 28 73 71 6c 69 74 65 33  L.   && (sqlite3
34e80 53 74 72 6c 65 6e 33 30 28 7a 46 69 6c 65 6e 61  Strlen30(zFilena
34e90 6d 65 29 3d 3d 30 20 20 20 20 20 20 20 20 20 20  me)==0          
34ea0 20 2f 2a 20 54 65 6d 70 20 66 69 6c 65 20 2a 2f   /* Temp file */
34eb0 0a 20 20 20 20 20 20 20 7c 7c 20 21 73 71 6c 69  .       || !sqli
34ec0 74 65 33 50 61 67 65 72 57 61 6c 53 75 70 70 6f  te3PagerWalSuppo
34ed0 72 74 65 64 28 70 50 61 67 65 72 29 29 20 20 20  rted(pPager))   
34ee0 2f 2a 20 4e 6f 20 73 68 61 72 65 64 2d 6d 65 6d  /* No shared-mem
34ef0 6f 72 79 20 73 75 70 70 6f 72 74 20 2a 2f 0a 20  ory support */. 
34f00 20 29 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20 65   ){.    eNew = e
34f10 4f 6c 64 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  Old;.  }..  if( 
34f20 28 65 4e 65 77 21 3d 65 4f 6c 64 29 0a 20 20 20  (eNew!=eOld).   
34f30 26 26 20 28 65 4f 6c 64 3d 3d 50 41 47 45 52 5f  && (eOld==PAGER_
34f40 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20  JOURNALMODE_WAL 
34f50 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  || eNew==PAGER_J
34f60 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 29 0a  OURNALMODE_WAL).
34f70 20 20 29 7b 0a 20 20 20 20 69 66 28 20 21 64 62    ){.    if( !db
34f80 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 7c 7c 20  ->autoCommit || 
34f90 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31 20  db->nVdbeRead>1 
34fa0 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
34fb0 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20  LITE_ERROR;.    
34fc0 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
34fd0 6f 72 28 70 2c 0a 20 20 20 20 20 20 20 20 20 20  or(p,.          
34fe0 22 63 61 6e 6e 6f 74 20 63 68 61 6e 67 65 20 25  "cannot change %
34ff0 73 20 77 61 6c 20 6d 6f 64 65 20 66 72 6f 6d 20  s wal mode from 
35000 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63  within a transac
35010 74 69 6f 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  tion",.         
35020 20 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f   (eNew==PAGER_JO
35030 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20  URNALMODE_WAL ? 
35040 22 69 6e 74 6f 22 20 3a 20 22 6f 75 74 20 6f 66  "into" : "out of
35050 22 29 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20  ").      );.    
35060 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
35070 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
35080 65 6c 73 65 7b 0a 20 0a 20 20 20 20 20 20 69 66  else{. .      if
35090 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f  ( eOld==PAGER_JO
350a0 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 29 7b  URNALMODE_WAL ){
350b0 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6c  .        /* If l
350c0 65 61 76 69 6e 67 20 57 41 4c 20 6d 6f 64 65 2c  eaving WAL mode,
350d0 20 63 6c 6f 73 65 20 74 68 65 20 6c 6f 67 20 66   close the log f
350e0 69 6c 65 2e 20 49 66 20 73 75 63 63 65 73 73 66  ile. If successf
350f0 75 6c 2c 20 74 68 65 20 63 61 6c 6c 0a 20 20 20  ul, the call.   
35100 20 20 20 20 20 2a 2a 20 74 6f 20 50 61 67 65 72       ** to Pager
35110 43 6c 6f 73 65 57 61 6c 28 29 20 63 68 65 63 6b  CloseWal() check
35120 70 6f 69 6e 74 73 20 61 6e 64 20 64 65 6c 65 74  points and delet
35130 65 73 20 74 68 65 20 77 72 69 74 65 2d 61 68 65  es the write-ahe
35140 61 64 2d 6c 6f 67 20 0a 20 20 20 20 20 20 20 20  ad-log .        
35150 2a 2a 20 66 69 6c 65 2e 20 41 6e 20 45 58 43 4c  ** file. An EXCL
35160 55 53 49 56 45 20 6c 6f 63 6b 20 6d 61 79 20 73  USIVE lock may s
35170 74 69 6c 6c 20 62 65 20 68 65 6c 64 20 6f 6e 20  till be held on 
35180 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
35190 65 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 66  e .        ** af
351a0 74 65 72 20 61 20 73 75 63 63 65 73 73 66 75 6c  ter a successful
351b0 20 72 65 74 75 72 6e 2e 20 0a 20 20 20 20 20 20   return. .      
351c0 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 63 20    */.        rc 
351d0 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 43 6c  = sqlite3PagerCl
351e0 6f 73 65 57 61 6c 28 70 50 61 67 65 72 2c 20 64  oseWal(pPager, d
351f0 62 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  b);.        if( 
35200 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
35210 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
35220 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61  e3PagerSetJourna
35230 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e  lMode(pPager, eN
35240 65 77 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ew);.        }. 
35250 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 65       }else if( e
35260 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  Old==PAGER_JOURN
35270 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 20 29 7b  ALMODE_MEMORY ){
35280 0a 20 20 20 20 20 20 20 20 2f 2a 20 43 61 6e 6e  .        /* Cann
35290 6f 74 20 74 72 61 6e 73 69 74 69 6f 6e 20 64 69  ot transition di
352a0 72 65 63 74 6c 79 20 66 72 6f 6d 20 4d 45 4d 4f  rectly from MEMO
352b0 52 59 20 74 6f 20 57 41 4c 2e 20 20 55 73 65 20  RY to WAL.  Use 
352c0 6d 6f 64 65 20 4f 46 46 0a 20 20 20 20 20 20 20  mode OFF.       
352d0 20 2a 2a 20 61 73 20 61 6e 20 69 6e 74 65 72 6d   ** as an interm
352e0 65 64 69 61 74 65 20 2a 2f 0a 20 20 20 20 20 20  ediate */.      
352f0 20 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65    sqlite3PagerSe
35300 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  tJournalMode(pPa
35310 67 65 72 2c 20 50 41 47 45 52 5f 4a 4f 55 52 4e  ger, PAGER_JOURN
35320 41 4c 4d 4f 44 45 5f 4f 46 46 29 3b 0a 20 20 20  ALMODE_OFF);.   
35330 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a     }.  .      /*
35340 20 4f 70 65 6e 20 61 20 74 72 61 6e 73 61 63 74   Open a transact
35350 69 6f 6e 20 6f 6e 20 74 68 65 20 64 61 74 61 62  ion on the datab
35360 61 73 65 20 66 69 6c 65 2e 20 52 65 67 61 72 64  ase file. Regard
35370 6c 65 73 73 20 6f 66 20 74 68 65 20 6a 6f 75 72  less of the jour
35380 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20 6d 6f 64  nal.      ** mod
35390 65 2c 20 74 68 69 73 20 74 72 61 6e 73 61 63 74  e, this transact
353a0 69 6f 6e 20 61 6c 77 61 79 73 20 75 73 65 73 20  ion always uses 
353b0 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e  a rollback journ
353c0 61 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  al..      */.   
353d0 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
353e0 65 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73  e3BtreeIsInTrans
353f0 28 70 42 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20  (pBt)==0 );.    
35400 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
35410 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72  _OK ){.        r
35420 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
35430 53 65 74 56 65 72 73 69 6f 6e 28 70 42 74 2c 20  SetVersion(pBt, 
35440 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55  (eNew==PAGER_JOU
35450 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 32  RNALMODE_WAL ? 2
35460 20 3a 20 31 29 29 3b 0a 20 20 20 20 20 20 7d 0a   : 1));.      }.
35470 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66      }.  }.#endif
35480 20 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c 49 54   /* ifndef SQLIT
35490 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a 0a 20  E_OMIT_WAL */.. 
354a0 20 69 66 28 20 72 63 20 29 20 65 4e 65 77 20 3d   if( rc ) eNew =
354b0 20 65 4f 6c 64 3b 0a 20 20 65 4e 65 77 20 3d 20   eOld;.  eNew = 
354c0 73 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a  sqlite3PagerSetJ
354d0 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65  ournalMode(pPage
354e0 72 2c 20 65 4e 65 77 29 3b 0a 0a 20 20 70 4f 75  r, eNew);..  pOu
354f0 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53  t->flags = MEM_S
35500 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  tr|MEM_Static|ME
35510 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e  M_Term;.  pOut->
35520 7a 20 3d 20 28 63 68 61 72 20 2a 29 73 71 6c 69  z = (char *)sqli
35530 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61  te3JournalModena
35540 6d 65 28 65 4e 65 77 29 3b 0a 20 20 70 4f 75 74  me(eNew);.  pOut
35550 2d 3e 6e 20 3d 20 73 71 6c 69 74 65 33 53 74 72  ->n = sqlite3Str
35560 6c 65 6e 33 30 28 70 4f 75 74 2d 3e 7a 29 3b 0a  len30(pOut->z);.
35570 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51    pOut->enc = SQ
35580 4c 49 54 45 5f 55 54 46 38 3b 0a 20 20 73 71 6c  LITE_UTF8;.  sql
35590 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
355a0 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63  coding(pOut, enc
355b0 6f 64 69 6e 67 29 3b 0a 20 20 69 66 28 20 72 63  oding);.  if( rc
355c0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
355d0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
355e0 65 61 6b 3b 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f  eak;.};.#endif /
355f0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  * SQLITE_OMIT_PR
35600 41 47 4d 41 20 2a 2f 0a 0a 23 69 66 20 21 64 65  AGMA */..#if !de
35610 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
35620 54 5f 56 41 43 55 55 4d 29 20 26 26 20 21 64 65  T_VACUUM) && !de
35630 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
35640 54 5f 41 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63  T_ATTACH)./* Opc
35650 6f 64 65 3a 20 56 61 63 75 75 6d 20 50 31 20 2a  ode: Vacuum P1 *
35660 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63   * * *.**.** Vac
35670 75 75 6d 20 74 68 65 20 65 6e 74 69 72 65 20 64  uum the entire d
35680 61 74 61 62 61 73 65 20 50 31 2e 20 20 50 31 20  atabase P1.  P1 
35690 69 73 20 30 20 66 6f 72 20 22 6d 61 69 6e 22 2c  is 0 for "main",
356a0 20 61 6e 64 20 32 20 6f 72 20 6d 6f 72 65 0a 2a   and 2 or more.*
356b0 2a 20 66 6f 72 20 61 6e 20 61 74 74 61 63 68 65  * for an attache
356c0 64 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65  d database.  The
356d0 20 22 74 65 6d 70 22 20 64 61 74 61 62 61 73 65   "temp" database
356e0 20 6d 61 79 20 6e 6f 74 20 62 65 20 76 61 63 75   may not be vacu
356f0 75 6d 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  umed..*/.case OP
35700 5f 56 61 63 75 75 6d 3a 20 7b 0a 20 20 61 73 73  _Vacuum: {.  ass
35710 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
35720 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  ==0 );.  rc = sq
35730 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28 26  lite3RunVacuum(&
35740 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
35750 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 69 66 28 20  pOp->p1);.  if( 
35760 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
35770 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
35780 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
35790 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
357a0 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41  LITE_OMIT_AUTOVA
357b0 43 55 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a  CUUM)./* Opcode:
357c0 20 49 6e 63 72 56 61 63 75 75 6d 20 50 31 20 50   IncrVacuum P1 P
357d0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65  2 * * *.**.** Pe
357e0 72 66 6f 72 6d 20 61 20 73 69 6e 67 6c 65 20 73  rform a single s
357f0 74 65 70 20 6f 66 20 74 68 65 20 69 6e 63 72 65  tep of the incre
35800 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 20 70 72  mental vacuum pr
35810 6f 63 65 64 75 72 65 20 6f 6e 0a 2a 2a 20 74 68  ocedure on.** th
35820 65 20 50 31 20 64 61 74 61 62 61 73 65 2e 20 49  e P1 database. I
35830 66 20 74 68 65 20 76 61 63 75 75 6d 20 68 61 73  f the vacuum has
35840 20 66 69 6e 69 73 68 65 64 2c 20 6a 75 6d 70 20   finished, jump 
35850 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a  to instruction.*
35860 2a 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c  * P2. Otherwise,
35870 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
35880 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
35890 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
358a0 50 5f 49 6e 63 72 56 61 63 75 75 6d 3a 20 7b 20  P_IncrVacuum: { 
358b0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
358c0 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a  /.  Btree *pBt;.
358d0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
358e0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
358f0 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
35900 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
35910 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70  (p->btreeMask, p
35920 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73  Op->p1) );.  ass
35930 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
35940 3d 3d 30 20 29 3b 0a 20 20 70 42 74 20 3d 20 64  ==0 );.  pBt = d
35950 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
35960 70 42 74 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  pBt;.  rc = sqli
35970 74 65 33 42 74 72 65 65 49 6e 63 72 56 61 63 75  te3BtreeIncrVacu
35980 75 6d 28 70 42 74 29 3b 0a 20 20 56 64 62 65 42  um(pBt);.  VdbeB
35990 72 61 6e 63 68 54 61 6b 65 6e 28 72 63 3d 3d 53  ranchTaken(rc==S
359a0 51 4c 49 54 45 5f 44 4f 4e 45 2c 32 29 3b 0a 20  QLITE_DONE,2);. 
359b0 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 69   if( rc ){.    i
359c0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 44 4f  f( rc!=SQLITE_DO
359d0 4e 45 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  NE ) goto abort_
359e0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
359f0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
35a00 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f  ;.    goto jump_
35a10 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  to_p2;.  }.  bre
35a20 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ak;.}.#endif../*
35a30 20 4f 70 63 6f 64 65 3a 20 45 78 70 69 72 65 20   Opcode: Expire 
35a40 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
35a50 20 43 61 75 73 65 20 70 72 65 63 6f 6d 70 69 6c   Cause precompil
35a60 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f  ed statements to
35a70 20 65 78 70 69 72 65 2e 20 20 57 68 65 6e 20 61   expire.  When a
35a80 6e 20 65 78 70 69 72 65 64 20 73 74 61 74 65 6d  n expired statem
35a90 65 6e 74 0a 2a 2a 20 69 73 20 65 78 65 63 75 74  ent.** is execut
35aa0 65 64 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33  ed using sqlite3
35ab0 5f 73 74 65 70 28 29 20 69 74 20 77 69 6c 6c 20  _step() it will 
35ac0 65 69 74 68 65 72 20 61 75 74 6f 6d 61 74 69 63  either automatic
35ad0 61 6c 6c 79 0a 2a 2a 20 72 65 70 72 65 70 61 72  ally.** reprepar
35ae0 65 20 69 74 73 65 6c 66 20 28 69 66 20 69 74 20  e itself (if it 
35af0 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 63  was originally c
35b00 72 65 61 74 65 64 20 75 73 69 6e 67 20 73 71 6c  reated using sql
35b10 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28  ite3_prepare_v2(
35b20 29 29 0a 2a 2a 20 6f 72 20 69 74 20 77 69 6c 6c  )).** or it will
35b30 20 66 61 69 6c 20 77 69 74 68 20 53 51 4c 49 54   fail with SQLIT
35b40 45 5f 53 43 48 45 4d 41 2e 0a 2a 2a 20 0a 2a 2a  E_SCHEMA..** .**
35b50 20 49 66 20 50 31 20 69 73 20 30 2c 20 74 68 65   If P1 is 0, the
35b60 6e 20 61 6c 6c 20 53 51 4c 20 73 74 61 74 65 6d  n all SQL statem
35b70 65 6e 74 73 20 62 65 63 6f 6d 65 20 65 78 70 69  ents become expi
35b80 72 65 64 2e 20 49 66 20 50 31 20 69 73 20 6e 6f  red. If P1 is no
35b90 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e 20  n-zero,.** then 
35ba0 6f 6e 6c 79 20 74 68 65 20 63 75 72 72 65 6e 74  only the current
35bb0 6c 79 20 65 78 65 63 75 74 69 6e 67 20 73 74 61  ly executing sta
35bc0 74 65 6d 65 6e 74 20 69 73 20 65 78 70 69 72 65  tement is expire
35bd0 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 78  d..*/.case OP_Ex
35be0 70 69 72 65 3a 20 7b 0a 20 20 69 66 28 20 21 70  pire: {.  if( !p
35bf0 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71  Op->p1 ){.    sq
35c00 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
35c10 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62  redStatements(db
35c20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
35c30 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a  p->expired = 1;.
35c40 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
35c50 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
35c60 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
35c70 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 61 62 6c  ./* Opcode: Tabl
35c80 65 4c 6f 63 6b 20 50 31 20 50 32 20 50 33 20 50  eLock P1 P2 P3 P
35c90 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
35ca0 20 69 44 62 3d 50 31 20 72 6f 6f 74 3d 50 32 20   iDb=P1 root=P2 
35cb0 77 72 69 74 65 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f  write=P3.**.** O
35cc0 62 74 61 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20  btain a lock on 
35cd0 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61 62  a particular tab
35ce0 6c 65 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63  le. This instruc
35cf0 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65  tion is only use
35d00 64 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 73 68  d when.** the sh
35d10 61 72 65 64 2d 63 61 63 68 65 20 66 65 61 74 75  ared-cache featu
35d20 72 65 20 69 73 20 65 6e 61 62 6c 65 64 2e 20 0a  re is enabled. .
35d30 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20  **.** P1 is the 
35d40 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74  index of the dat
35d50 61 62 61 73 65 20 69 6e 20 73 71 6c 69 74 65 33  abase in sqlite3
35d60 2e 61 44 62 5b 5d 20 6f 66 20 74 68 65 20 64 61  .aDb[] of the da
35d70 74 61 62 61 73 65 0a 2a 2a 20 6f 6e 20 77 68 69  tabase.** on whi
35d80 63 68 20 74 68 65 20 6c 6f 63 6b 20 69 73 20 61  ch the lock is a
35d90 63 71 75 69 72 65 64 2e 20 20 41 20 72 65 61 64  cquired.  A read
35da0 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65 64  lock is obtained
35db0 20 69 66 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a 20   if P3==0 or.** 
35dc0 61 20 77 72 69 74 65 20 6c 6f 63 6b 20 69 66 20  a write lock if 
35dd0 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20  P3==1..**.** P2 
35de0 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 72 6f 6f  contains the roo
35df0 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 74 61  t-page of the ta
35e00 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a  ble to lock..**.
35e10 2a 2a 20 50 34 20 63 6f 6e 74 61 69 6e 73 20 61  ** P4 contains a
35e20 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
35e30 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
35e40 65 20 62 65 69 6e 67 20 6c 6f 63 6b 65 64 2e 20  e being locked. 
35e50 54 68 69 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20  This is only.** 
35e60 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  used to generate
35e70 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
35e80 65 20 69 66 20 74 68 65 20 6c 6f 63 6b 20 63 61  e if the lock ca
35e90 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69 6e 65 64  nnot be obtained
35ea0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 61 62  ..*/.case OP_Tab
35eb0 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20 75 38 20 69  leLock: {.  u8 i
35ec0 73 57 72 69 74 65 4c 6f 63 6b 20 3d 20 28 75 38  sWriteLock = (u8
35ed0 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20  )pOp->p3;.  if( 
35ee0 69 73 57 72 69 74 65 4c 6f 63 6b 20 7c 7c 20 30  isWriteLock || 0
35ef0 3d 3d 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c  ==(db->flags&SQL
35f00 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74  ITE_ReadUncommit
35f10 74 65 64 29 20 29 7b 0a 20 20 20 20 69 6e 74 20  ted) ){.    int 
35f20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a 20  p1 = pOp->p1; . 
35f30 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 3d 30     assert( p1>=0
35f40 20 26 26 20 70 31 3c 64 62 2d 3e 6e 44 62 20 29   && p1<db->nDb )
35f50 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 44 62  ;.    assert( Db
35f60 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
35f70 65 4d 61 73 6b 2c 20 70 31 29 20 29 3b 0a 20 20  eMask, p1) );.  
35f80 20 20 61 73 73 65 72 74 28 20 69 73 57 72 69 74    assert( isWrit
35f90 65 4c 6f 63 6b 3d 3d 30 20 7c 7c 20 69 73 57 72  eLock==0 || isWr
35fa0 69 74 65 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20  iteLock==1 );.  
35fb0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
35fc0 72 65 65 4c 6f 63 6b 54 61 62 6c 65 28 64 62 2d  reeLockTable(db-
35fd0 3e 61 44 62 5b 70 31 5d 2e 70 42 74 2c 20 70 4f  >aDb[p1].pBt, pO
35fe0 70 2d 3e 70 32 2c 20 69 73 57 72 69 74 65 4c 6f  p->p2, isWriteLo
35ff0 63 6b 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20  ck);.    if( rc 
36000 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 72 63  ){.      if( (rc
36010 26 30 78 46 46 29 3d 3d 53 51 4c 49 54 45 5f 4c  &0xFF)==SQLITE_L
36020 4f 43 4b 45 44 20 29 7b 0a 20 20 20 20 20 20 20  OCKED ){.       
36030 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d   const char *z =
36040 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20   pOp->p4.z;.    
36050 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
36060 72 72 6f 72 28 70 2c 20 22 64 61 74 61 62 61 73  rror(p, "databas
36070 65 20 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65  e table is locke
36080 64 3a 20 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20  d: %s", z);.    
36090 20 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20 61    }.      goto a
360a0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
360b0 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  r;.    }.  }.  b
360c0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
360d0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  * SQLITE_OMIT_SH
360e0 41 52 45 44 5f 43 41 43 48 45 20 2a 2f 0a 0a 23  ARED_CACHE */..#
360f0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
36100 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
36110 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 42 65 67 69  /* Opcode: VBegi
36120 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a  n * * * P4 *.**.
36130 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20 70  ** P4 may be a p
36140 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c  ointer to an sql
36150 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74  ite3_vtab struct
36160 75 72 65 2e 20 49 66 20 73 6f 2c 20 63 61 6c 6c  ure. If so, call
36170 20 74 68 65 20 0a 2a 2a 20 78 42 65 67 69 6e 20   the .** xBegin 
36180 6d 65 74 68 6f 64 20 66 6f 72 20 74 68 61 74 20  method for that 
36190 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73  table..**.** Als
361a0 6f 2c 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  o, whether or no
361b0 74 20 50 34 20 69 73 20 73 65 74 2c 20 63 68 65  t P4 is set, che
361c0 63 6b 20 74 68 61 74 20 74 68 69 73 20 69 73 20  ck that this is 
361d0 6e 6f 74 20 62 65 69 6e 67 20 63 61 6c 6c 65 64  not being called
361e0 20 66 72 6f 6d 0a 2a 2a 20 77 69 74 68 69 6e 20   from.** within 
361f0 61 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20 61 20  a callback to a 
36200 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 78 53  virtual table xS
36210 79 6e 63 28 29 20 6d 65 74 68 6f 64 2e 20 49 66  ync() method. If
36220 20 69 74 20 69 73 2c 20 74 68 65 20 65 72 72 6f   it is, the erro
36230 72 0a 2a 2a 20 63 6f 64 65 20 77 69 6c 6c 20 62  r.** code will b
36240 65 20 73 65 74 20 74 6f 20 53 51 4c 49 54 45 5f  e set to SQLITE_
36250 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65 20  LOCKED..*/.case 
36260 4f 50 5f 56 42 65 67 69 6e 3a 20 7b 0a 20 20 56  OP_VBegin: {.  V
36270 54 61 62 6c 65 20 2a 70 56 54 61 62 3b 0a 20 20  Table *pVTab;.  
36280 70 56 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e  pVTab = pOp->p4.
36290 70 56 74 61 62 3b 0a 20 20 72 63 20 3d 20 73 71  pVtab;.  rc = sq
362a0 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 64  lite3VtabBegin(d
362b0 62 2c 20 70 56 54 61 62 29 3b 0a 20 20 69 66 28  b, pVTab);.  if(
362c0 20 70 56 54 61 62 20 29 20 73 71 6c 69 74 65 33   pVTab ) sqlite3
362d0 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
362e0 28 70 2c 20 70 56 54 61 62 2d 3e 70 56 74 61 62  (p, pVTab->pVtab
362f0 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
36300 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
36310 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a  error;.  break;.
36320 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
36330 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
36340 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
36350 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
36360 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
36370 6f 64 65 3a 20 56 43 72 65 61 74 65 20 50 31 20  ode: VCreate P1 
36380 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50  P2 * * *.**.** P
36390 32 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20  2 is a register 
363a0 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 6e  that holds the n
363b0 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c  ame of a virtual
363c0 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61   table in databa
363d0 73 65 20 0a 2a 2a 20 50 31 2e 20 43 61 6c 6c 20  se .** P1. Call 
363e0 74 68 65 20 78 43 72 65 61 74 65 20 6d 65 74 68  the xCreate meth
363f0 6f 64 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c  od for that tabl
36400 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43  e..*/.case OP_VC
36410 72 65 61 74 65 3a 20 7b 0a 20 20 4d 65 6d 20 73  reate: {.  Mem s
36420 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Mem;          /*
36430 20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68 65   For storing the
36440 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65   record being de
36450 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74  coded */.  const
36460 20 63 68 61 72 20 2a 7a 54 61 62 3b 20 20 2f 2a   char *zTab;  /*
36470 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 76 69 72   Name of the vir
36480 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a 20  tual table */.. 
36490 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30   memset(&sMem, 0
364a0 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b  , sizeof(sMem));
364b0 0a 20 20 73 4d 65 6d 2e 64 62 20 3d 20 64 62 3b  .  sMem.db = db;
364c0 0a 20 20 2f 2a 20 42 65 63 61 75 73 65 20 50 32  .  /* Because P2
364d0 20 69 73 20 61 6c 77 61 79 73 20 61 20 73 74 61   is always a sta
364e0 74 69 63 20 73 74 72 69 6e 67 2c 20 69 74 20 69  tic string, it i
364f0 73 20 69 6d 70 6f 73 73 69 62 6c 65 20 66 6f 72  s impossible for
36500 20 74 68 65 0a 20 20 2a 2a 20 73 71 6c 69 74 65   the.  ** sqlite
36510 33 56 64 62 65 4d 65 6d 43 6f 70 79 28 29 20 74  3VdbeMemCopy() t
36520 6f 20 66 61 69 6c 20 2a 2f 0a 20 20 61 73 73 65  o fail */.  asse
36530 72 74 28 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70  rt( (aMem[pOp->p
36540 32 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53  2].flags & MEM_S
36550 74 72 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  tr)!=0 );.  asse
36560 72 74 28 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70  rt( (aMem[pOp->p
36570 32 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53  2].flags & MEM_S
36580 74 61 74 69 63 29 21 3d 30 20 29 3b 0a 20 20 72  tatic)!=0 );.  r
36590 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
365a0 65 6d 43 6f 70 79 28 26 73 4d 65 6d 2c 20 26 61  emCopy(&sMem, &a
365b0 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20  Mem[pOp->p2]);. 
365c0 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
365d0 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 7a 54 61 62  ITE_OK );.  zTab
365e0 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29   = (const char*)
365f0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
36600 78 74 28 26 73 4d 65 6d 29 3b 0a 20 20 61 73 73  xt(&sMem);.  ass
36610 65 72 74 28 20 7a 54 61 62 20 7c 7c 20 64 62 2d  ert( zTab || db-
36620 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b  >mallocFailed );
36630 0a 20 20 69 66 28 20 7a 54 61 62 20 29 7b 0a 20  .  if( zTab ){. 
36640 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
36650 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 64 62  tabCallCreate(db
36660 2c 20 70 4f 70 2d 3e 70 31 2c 20 7a 54 61 62 2c  , pOp->p1, zTab,
36670 20 26 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20   &p->zErrMsg);. 
36680 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65   }.  sqlite3Vdbe
36690 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d  MemRelease(&sMem
366a0 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
366b0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
366c0 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a  error;.  break;.
366d0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
366e0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
366f0 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
36700 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
36710 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
36720 6f 64 65 3a 20 56 44 65 73 74 72 6f 79 20 50 31  ode: VDestroy P1
36730 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
36740 50 34 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  P4 is the name o
36750 66 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  f a virtual tabl
36760 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  e in database P1
36770 2e 20 20 43 61 6c 6c 20 74 68 65 20 78 44 65 73  .  Call the xDes
36780 74 72 6f 79 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f  troy method.** o
36790 66 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f  f that table..*/
367a0 0a 63 61 73 65 20 4f 50 5f 56 44 65 73 74 72 6f  .case OP_VDestro
367b0 79 3a 20 7b 0a 20 20 64 62 2d 3e 6e 56 44 65 73  y: {.  db->nVDes
367c0 74 72 6f 79 2b 2b 3b 0a 20 20 72 63 20 3d 20 73  troy++;.  rc = s
367d0 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65  qlite3VtabCallDe
367e0 73 74 72 6f 79 28 64 62 2c 20 70 4f 70 2d 3e 70  stroy(db, pOp->p
367f0 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  1, pOp->p4.z);. 
36800 20 64 62 2d 3e 6e 56 44 65 73 74 72 6f 79 2d 2d   db->nVDestroy--
36810 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
36820 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
36830 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
36840 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
36850 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
36860 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
36870 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
36880 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
36890 64 65 3a 20 56 4f 70 65 6e 20 50 31 20 2a 20 2a  de: VOpen P1 * *
368a0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69   P4 *.**.** P4 i
368b0 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
368c0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f   virtual table o
368d0 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65  bject, an sqlite
368e0 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
368f0 2e 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75 72  ..** P1 is a cur
36900 73 6f 72 20 6e 75 6d 62 65 72 2e 20 20 54 68 69  sor number.  Thi
36910 73 20 6f 70 63 6f 64 65 20 6f 70 65 6e 73 20 61  s opcode opens a
36920 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20 76   cursor to the v
36930 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20  irtual.** table 
36940 61 6e 64 20 73 74 6f 72 65 73 20 74 68 61 74 20  and stores that 
36950 63 75 72 73 6f 72 20 69 6e 20 50 31 2e 0a 2a 2f  cursor in P1..*/
36960 0a 63 61 73 65 20 4f 50 5f 56 4f 70 65 6e 3a 20  .case OP_VOpen: 
36970 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
36980 70 43 75 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f  pCur;.  sqlite3_
36990 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 43  vtab_cursor *pVC
369a0 75 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  ur;.  sqlite3_vt
369b0 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e  ab *pVtab;.  con
369c0 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
369d0 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61  e *pModule;..  a
369e0 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
369f0 64 65 72 20 29 3b 0a 20 20 70 43 75 72 20 3d 20  der );.  pCur = 
36a00 30 3b 0a 20 20 70 56 43 75 72 20 3d 20 30 3b 0a  0;.  pVCur = 0;.
36a10 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70    pVtab = pOp->p
36a20 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a  4.pVtab->pVtab;.
36a30 20 20 69 66 28 20 70 56 74 61 62 3d 3d 30 20 7c    if( pVtab==0 |
36a40 7c 20 4e 45 56 45 52 28 70 56 74 61 62 2d 3e 70  | NEVER(pVtab->p
36a50 4d 6f 64 75 6c 65 3d 3d 30 29 20 29 7b 0a 20 20  Module==0) ){.  
36a60 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f    rc = SQLITE_LO
36a70 43 4b 45 44 3b 0a 20 20 20 20 67 6f 74 6f 20 61  CKED;.    goto a
36a80 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
36a90 72 3b 0a 20 20 7d 0a 20 20 70 4d 6f 64 75 6c 65  r;.  }.  pModule
36aa0 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
36ab0 65 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c  e;.  rc = pModul
36ac0 65 2d 3e 78 4f 70 65 6e 28 70 56 74 61 62 2c 20  e->xOpen(pVtab, 
36ad0 26 70 56 43 75 72 29 3b 0a 20 20 73 71 6c 69 74  &pVCur);.  sqlit
36ae0 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
36af0 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20  sg(p, pVtab);.  
36b00 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
36b10 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
36b20 3b 0a 0a 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69  ;..  /* Initiali
36b30 7a 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f  ze sqlite3_vtab_
36b40 63 75 72 73 6f 72 20 62 61 73 65 20 63 6c 61 73  cursor base clas
36b50 73 20 2a 2f 0a 20 20 70 56 43 75 72 2d 3e 70 56  s */.  pVCur->pV
36b60 74 61 62 20 3d 20 70 56 74 61 62 3b 0a 0a 20 20  tab = pVtab;..  
36b70 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 76 64  /* Initialize vd
36b80 62 65 20 63 75 72 73 6f 72 20 6f 62 6a 65 63 74  be cursor object
36b90 20 2a 2f 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c   */.  pCur = all
36ba0 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70  ocateCursor(p, p
36bb0 4f 70 2d 3e 70 31 2c 20 30 2c 20 2d 31 2c 20 43  Op->p1, 0, -1, C
36bc0 55 52 54 59 50 45 5f 56 54 41 42 29 3b 0a 20 20  URTYPE_VTAB);.  
36bd0 69 66 28 20 70 43 75 72 20 29 7b 0a 20 20 20 20  if( pCur ){.    
36be0 70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 20 3d  pCur->uc.pVCur =
36bf0 20 70 56 43 75 72 3b 0a 20 20 20 20 70 56 74 61   pVCur;.    pVta
36c00 62 2d 3e 6e 52 65 66 2b 2b 3b 0a 20 20 7d 65 6c  b->nRef++;.  }el
36c10 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
36c20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
36c30 20 29 3b 0a 20 20 20 20 70 4d 6f 64 75 6c 65 2d   );.    pModule-
36c40 3e 78 43 6c 6f 73 65 28 70 56 43 75 72 29 3b 0a  >xClose(pVCur);.
36c50 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
36c60 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
36c70 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
36c80 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
36c90 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
36ca0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
36cb0 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
36cc0 65 3a 20 56 46 69 6c 74 65 72 20 50 31 20 50 32  e: VFilter P1 P2
36cd0 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
36ce0 70 73 69 73 3a 20 69 70 6c 61 6e 3d 72 5b 50 33  psis: iplan=r[P3
36cf0 5d 20 7a 70 6c 61 6e 3d 27 50 34 27 0a 2a 2a 0a  ] zplan='P4'.**.
36d00 2a 2a 20 50 31 20 69 73 20 61 20 63 75 72 73 6f  ** P1 is a curso
36d10 72 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 56  r opened using V
36d20 4f 70 65 6e 2e 20 20 50 32 20 69 73 20 61 6e 20  Open.  P2 is an 
36d30 61 64 64 72 65 73 73 20 74 6f 20 6a 75 6d 70 20  address to jump 
36d40 74 6f 20 69 66 0a 2a 2a 20 74 68 65 20 66 69 6c  to if.** the fil
36d50 74 65 72 65 64 20 72 65 73 75 6c 74 20 73 65 74  tered result set
36d60 20 69 73 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a   is empty..**.**
36d70 20 50 34 20 69 73 20 65 69 74 68 65 72 20 4e 55   P4 is either NU
36d80 4c 4c 20 6f 72 20 61 20 73 74 72 69 6e 67 20 74  LL or a string t
36d90 68 61 74 20 77 61 73 20 67 65 6e 65 72 61 74 65  hat was generate
36da0 64 20 62 79 20 74 68 65 20 78 42 65 73 74 49 6e  d by the xBestIn
36db0 64 65 78 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f 66  dex.** method of
36dc0 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 20 54 68   the module.  Th
36dd0 65 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e  e interpretation
36de0 20 6f 66 20 74 68 65 20 50 34 20 73 74 72 69 6e   of the P4 strin
36df0 67 20 69 73 20 6c 65 66 74 0a 2a 2a 20 74 6f 20  g is left.** to 
36e00 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65  the module imple
36e10 6d 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  mentation..**.**
36e20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76   This opcode inv
36e30 6f 6b 65 73 20 74 68 65 20 78 46 69 6c 74 65 72  okes the xFilter
36e40 20 6d 65 74 68 6f 64 20 6f 6e 20 74 68 65 20 76   method on the v
36e50 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 70 65  irtual table spe
36e60 63 69 66 69 65 64 0a 2a 2a 20 62 79 20 50 31 2e  cified.** by P1.
36e70 20 20 54 68 65 20 69 6e 74 65 67 65 72 20 71 75    The integer qu
36e80 65 72 79 20 70 6c 61 6e 20 70 61 72 61 6d 65 74  ery plan paramet
36e90 65 72 20 74 6f 20 78 46 69 6c 74 65 72 20 69 73  er to xFilter is
36ea0 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
36eb0 74 65 72 0a 2a 2a 20 50 33 2e 20 52 65 67 69 73  ter.** P3. Regis
36ec0 74 65 72 20 50 33 2b 31 20 73 74 6f 72 65 73 20  ter P3+1 stores 
36ed0 74 68 65 20 61 72 67 63 20 70 61 72 61 6d 65 74  the argc paramet
36ee0 65 72 20 74 6f 20 62 65 20 70 61 73 73 65 64 20  er to be passed 
36ef0 74 6f 20 74 68 65 0a 2a 2a 20 78 46 69 6c 74 65  to the.** xFilte
36f00 72 20 6d 65 74 68 6f 64 2e 20 52 65 67 69 73 74  r method. Regist
36f10 65 72 73 20 50 33 2b 32 2e 2e 50 33 2b 31 2b 61  ers P3+2..P3+1+a
36f20 72 67 63 20 61 72 65 20 74 68 65 20 61 72 67 63  rgc are the argc
36f30 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 70  .** additional p
36f40 61 72 61 6d 65 74 65 72 73 20 77 68 69 63 68 20  arameters which 
36f50 61 72 65 20 70 61 73 73 65 64 20 74 6f 0a 2a 2a  are passed to.**
36f60 20 78 46 69 6c 74 65 72 20 61 73 20 61 72 67 76   xFilter as argv
36f70 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b 32 20  . Register P3+2 
36f80 62 65 63 6f 6d 65 73 20 61 72 67 76 5b 30 5d 20  becomes argv[0] 
36f90 77 68 65 6e 20 70 61 73 73 65 64 20 74 6f 20 78  when passed to x
36fa0 46 69 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 20  Filter..**.** A 
36fb0 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20  jump is made to 
36fc0 50 32 20 69 66 20 74 68 65 20 72 65 73 75 6c 74  P2 if the result
36fd0 20 73 65 74 20 61 66 74 65 72 20 66 69 6c 74 65   set after filte
36fe0 72 69 6e 67 20 77 6f 75 6c 64 20 62 65 20 65 6d  ring would be em
36ff0 70 74 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  pty..*/.case OP_
37000 56 46 69 6c 74 65 72 3a 20 7b 20 20 20 2f 2a 20  VFilter: {   /* 
37010 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 41  jump */.  int nA
37020 72 67 3b 0a 20 20 69 6e 74 20 69 51 75 65 72 79  rg;.  int iQuery
37030 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  ;.  const sqlite
37040 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
37050 65 3b 0a 20 20 4d 65 6d 20 2a 70 51 75 65 72 79  e;.  Mem *pQuery
37060 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67 63 3b 0a  ;.  Mem *pArgc;.
37070 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63    sqlite3_vtab_c
37080 75 72 73 6f 72 20 2a 70 56 43 75 72 3b 0a 20 20  ursor *pVCur;.  
37090 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
370a0 74 61 62 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  tab;.  VdbeCurso
370b0 72 20 2a 70 43 75 72 3b 0a 20 20 69 6e 74 20 72  r *pCur;.  int r
370c0 65 73 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d  es;.  int i;.  M
370d0 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 0a 20 20 70  em **apArg;..  p
370e0 51 75 65 72 79 20 3d 20 26 61 4d 65 6d 5b 70 4f  Query = &aMem[pO
370f0 70 2d 3e 70 33 5d 3b 0a 20 20 70 41 72 67 63 20  p->p3];.  pArgc 
37100 3d 20 26 70 51 75 65 72 79 5b 31 5d 3b 0a 20 20  = &pQuery[1];.  
37110 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b  pCur = p->apCsr[
37120 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
37130 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
37140 51 75 65 72 79 29 20 29 3b 0a 20 20 52 45 47 49  Query) );.  REGI
37150 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
37160 70 33 2c 20 70 51 75 65 72 79 29 3b 0a 20 20 61  p3, pQuery);.  a
37170 73 73 65 72 74 28 20 70 43 75 72 2d 3e 65 43 75  ssert( pCur->eCu
37180 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 56  rType==CURTYPE_V
37190 54 41 42 20 29 3b 0a 20 20 70 56 43 75 72 20 3d  TAB );.  pVCur =
371a0 20 70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 3b   pCur->uc.pVCur;
371b0 0a 20 20 70 56 74 61 62 20 3d 20 70 56 43 75 72  .  pVtab = pVCur
371c0 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75  ->pVtab;.  pModu
371d0 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64  le = pVtab->pMod
371e0 75 6c 65 3b 0a 0a 20 20 2f 2a 20 47 72 61 62 20  ule;..  /* Grab 
371f0 74 68 65 20 69 6e 64 65 78 20 6e 75 6d 62 65 72  the index number
37200 20 61 6e 64 20 61 72 67 63 20 70 61 72 61 6d 65   and argc parame
37210 74 65 72 73 20 2a 2f 0a 20 20 61 73 73 65 72 74  ters */.  assert
37220 28 20 28 70 51 75 65 72 79 2d 3e 66 6c 61 67 73  ( (pQuery->flags
37230 26 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 26 26 20  &MEM_Int)!=0 && 
37240 70 41 72 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45  pArgc->flags==ME
37250 4d 5f 49 6e 74 20 29 3b 0a 20 20 6e 41 72 67 20  M_Int );.  nArg 
37260 3d 20 28 69 6e 74 29 70 41 72 67 63 2d 3e 75 2e  = (int)pArgc->u.
37270 69 3b 0a 20 20 69 51 75 65 72 79 20 3d 20 28 69  i;.  iQuery = (i
37280 6e 74 29 70 51 75 65 72 79 2d 3e 75 2e 69 3b 0a  nt)pQuery->u.i;.
37290 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
372a0 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20   xFilter method 
372b0 2a 2f 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20  */.  res = 0;.  
372c0 61 70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67  apArg = p->apArg
372d0 3b 0a 20 20 66 6f 72 28 69 20 3d 20 30 3b 20 69  ;.  for(i = 0; i
372e0 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
372f0 20 61 70 41 72 67 5b 69 5d 20 3d 20 26 70 41 72   apArg[i] = &pAr
37300 67 63 5b 69 2b 31 5d 3b 0a 20 20 7d 0a 20 20 72  gc[i+1];.  }.  r
37310 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 46 69  c = pModule->xFi
37320 6c 74 65 72 28 70 56 43 75 72 2c 20 69 51 75 65  lter(pVCur, iQue
37330 72 79 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 6e  ry, pOp->p4.z, n
37340 41 72 67 2c 20 61 70 41 72 67 29 3b 0a 20 20 73  Arg, apArg);.  s
37350 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74  qlite3VtabImport
37360 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29  Errmsg(p, pVtab)
37370 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
37380 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
37390 72 72 6f 72 3b 0a 20 20 72 65 73 20 3d 20 70 4d  rror;.  res = pM
373a0 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70 56 43 75  odule->xEof(pVCu
373b0 72 29 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c  r);.  pCur->null
373c0 52 6f 77 20 3d 20 30 3b 0a 20 20 56 64 62 65 42  Row = 0;.  VdbeB
373d0 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d  ranchTaken(res!=
373e0 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20  0,2);.  if( res 
373f0 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
37400 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  2;.  break;.}.#e
37410 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
37420 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
37430 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
37440 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
37450 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
37460 20 56 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50   VColumn P1 P2 P
37470 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
37480 73 3a 20 72 5b 50 33 5d 3d 76 63 6f 6c 75 6d 6e  s: r[P3]=vcolumn
37490 28 50 32 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65  (P2).**.** Store
374a0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
374b0 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f  e P2-th column o
374c0 66 0a 2a 2a 20 74 68 65 20 72 6f 77 20 6f 66 20  f.** the row of 
374d0 74 68 65 20 76 69 72 74 75 61 6c 2d 74 61 62 6c  the virtual-tabl
374e0 65 20 74 68 61 74 20 74 68 65 20 0a 2a 2a 20 50  e that the .** P
374f0 31 20 63 75 72 73 6f 72 20 69 73 20 70 6f 69 6e  1 cursor is poin
37500 74 69 6e 67 20 74 6f 20 69 6e 74 6f 20 72 65 67  ting to into reg
37510 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73  ister P3..*/.cas
37520 65 20 4f 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b 0a  e OP_VColumn: {.
37530 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
37540 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73  pVtab;.  const s
37550 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
37560 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70  Module;.  Mem *p
37570 44 65 73 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f  Dest;.  sqlite3_
37580 63 6f 6e 74 65 78 74 20 73 43 6f 6e 74 65 78 74  context sContext
37590 3b 0a 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  ;..  VdbeCursor 
375a0 2a 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72  *pCur = p->apCsr
375b0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
375c0 65 72 74 28 20 70 43 75 72 2d 3e 65 43 75 72 54  ert( pCur->eCurT
375d0 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 56 54 41  ype==CURTYPE_VTA
375e0 42 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  B );.  assert( p
375f0 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d  Op->p3>0 && pOp-
37600 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p3<=(p->nMem+1 
37610 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
37620 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d  .  pDest = &aMem
37630 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d  [pOp->p3];.  mem
37640 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
37650 20 70 44 65 73 74 29 3b 0a 20 20 69 66 28 20 70   pDest);.  if( p
37660 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a  Cur->nullRow ){.
37670 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
37680 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29  emSetNull(pDest)
37690 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
376a0 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d  .  pVtab = pCur-
376b0 3e 75 63 2e 70 56 43 75 72 2d 3e 70 56 74 61 62  >uc.pVCur->pVtab
376c0 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56  ;.  pModule = pV
376d0 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20  tab->pModule;.  
376e0 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d  assert( pModule-
376f0 3e 78 43 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d 65  >xColumn );.  me
37700 6d 73 65 74 28 26 73 43 6f 6e 74 65 78 74 2c 20  mset(&sContext, 
37710 30 2c 20 73 69 7a 65 6f 66 28 73 43 6f 6e 74 65  0, sizeof(sConte
37720 78 74 29 29 3b 0a 20 20 73 43 6f 6e 74 65 78 74  xt));.  sContext
37730 2e 70 4f 75 74 20 3d 20 70 44 65 73 74 3b 0a 20  .pOut = pDest;. 
37740 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
37750 70 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29  pDest, MEM_Null)
37760 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65  ;.  rc = pModule
37770 2d 3e 78 43 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e  ->xColumn(pCur->
37780 75 63 2e 70 56 43 75 72 2c 20 26 73 43 6f 6e 74  uc.pVCur, &sCont
37790 65 78 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20  ext, pOp->p2);. 
377a0 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
377b0 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61  rtErrmsg(p, pVta
377c0 62 29 3b 0a 20 20 69 66 28 20 73 43 6f 6e 74 65  b);.  if( sConte
377d0 78 74 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20  xt.isError ){.  
377e0 20 20 72 63 20 3d 20 73 43 6f 6e 74 65 78 74 2e    rc = sContext.
377f0 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 73  isError;.  }.  s
37800 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
37810 45 6e 63 6f 64 69 6e 67 28 70 44 65 73 74 2c 20  Encoding(pDest, 
37820 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 52 45 47  encoding);.  REG
37830 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
37840 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 55  >p3, pDest);.  U
37850 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
37860 5a 45 28 70 44 65 73 74 29 3b 0a 0a 20 20 69 66  ZE(pDest);..  if
37870 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
37880 54 6f 6f 42 69 67 28 70 44 65 73 74 29 20 29 7b  TooBig(pDest) ){
37890 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
378a0 67 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20  g;.  }.  if( rc 
378b0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
378c0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65  _to_error;.  bre
378d0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
378e0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
378f0 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
37900 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
37910 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
37920 20 4f 70 63 6f 64 65 3a 20 56 4e 65 78 74 20 50   Opcode: VNext P
37930 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
37940 20 41 64 76 61 6e 63 65 20 76 69 72 74 75 61 6c   Advance virtual
37950 20 74 61 62 6c 65 20 50 31 20 74 6f 20 74 68 65   table P1 to the
37960 20 6e 65 78 74 20 72 6f 77 20 69 6e 20 69 74 73   next row in its
37970 20 72 65 73 75 6c 74 20 73 65 74 20 61 6e 64 0a   result set and.
37980 2a 2a 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72  ** jump to instr
37990 75 63 74 69 6f 6e 20 50 32 2e 20 20 4f 72 2c 20  uction P2.  Or, 
379a0 69 66 20 74 68 65 20 76 69 72 74 75 61 6c 20 74  if the virtual t
379b0 61 62 6c 65 20 68 61 73 20 72 65 61 63 68 65 64  able has reached
379c0 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 69  .** the end of i
379d0 74 73 20 72 65 73 75 6c 74 20 73 65 74 2c 20 74  ts result set, t
379e0 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  hen fall through
379f0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
37a00 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
37a10 65 20 4f 50 5f 56 4e 65 78 74 3a 20 7b 20 20 20  e OP_VNext: {   
37a20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 73 71 6c  /* jump */.  sql
37a30 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
37a40 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  ;.  const sqlite
37a50 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
37a60 65 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  e;.  int res;.  
37a70 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72  VdbeCursor *pCur
37a80 3b 0a 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20  ;..  res = 0;.  
37a90 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b  pCur = p->apCsr[
37aa0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
37ab0 72 74 28 20 70 43 75 72 2d 3e 65 43 75 72 54 79  rt( pCur->eCurTy
37ac0 70 65 3d 3d 43 55 52 54 59 50 45 5f 56 54 41 42  pe==CURTYPE_VTAB
37ad0 20 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e   );.  if( pCur->
37ae0 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 62  nullRow ){.    b
37af0 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61  reak;.  }.  pVta
37b00 62 20 3d 20 70 43 75 72 2d 3e 75 63 2e 70 56 43  b = pCur->uc.pVC
37b10 75 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f  ur->pVtab;.  pMo
37b20 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d  dule = pVtab->pM
37b30 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28  odule;.  assert(
37b40 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 20   pModule->xNext 
37b50 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  );..  /* Invoke 
37b60 74 68 65 20 78 4e 65 78 74 28 29 20 6d 65 74 68  the xNext() meth
37b70 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65  od of the module
37b80 2e 20 54 68 65 72 65 20 69 73 20 6e 6f 20 77 61  . There is no wa
37b90 79 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 75  y for the.  ** u
37ba0 6e 64 65 72 6c 79 69 6e 67 20 69 6d 70 6c 65 6d  nderlying implem
37bb0 65 6e 74 61 74 69 6f 6e 20 74 6f 20 72 65 74 75  entation to retu
37bc0 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 66 20 6f  rn an error if o
37bd0 6e 65 20 6f 63 63 75 72 73 20 64 75 72 69 6e 67  ne occurs during
37be0 0a 20 20 2a 2a 20 78 4e 65 78 74 28 29 2e 20 49  .  ** xNext(). I
37bf0 6e 73 74 65 61 64 2c 20 69 66 20 61 6e 20 65 72  nstead, if an er
37c00 72 6f 72 20 6f 63 63 75 72 73 2c 20 74 72 75 65  ror occurs, true
37c10 20 69 73 20 72 65 74 75 72 6e 65 64 20 28 69 6e   is returned (in
37c20 64 69 63 61 74 69 6e 67 20 74 68 61 74 20 0a 20  dicating that . 
37c30 20 2a 2a 20 64 61 74 61 20 69 73 20 61 76 61 69   ** data is avai
37c40 6c 61 62 6c 65 29 20 61 6e 64 20 74 68 65 20 65  lable) and the e
37c50 72 72 6f 72 20 63 6f 64 65 20 72 65 74 75 72 6e  rror code return
37c60 65 64 20 77 68 65 6e 20 78 43 6f 6c 75 6d 6e 20  ed when xColumn 
37c70 6f 72 0a 20 20 2a 2a 20 73 6f 6d 65 20 6f 74 68  or.  ** some oth
37c80 65 72 20 6d 65 74 68 6f 64 20 69 73 20 6e 65 78  er method is nex
37c90 74 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 74 68 65  t invoked on the
37ca0 20 73 61 76 65 20 76 69 72 74 75 61 6c 20 74 61   save virtual ta
37cb0 62 6c 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f  ble cursor..  */
37cc0 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d  .  rc = pModule-
37cd0 3e 78 4e 65 78 74 28 70 43 75 72 2d 3e 75 63 2e  >xNext(pCur->uc.
37ce0 70 56 43 75 72 29 3b 0a 20 20 73 71 6c 69 74 65  pVCur);.  sqlite
37cf0 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
37d00 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69  g(p, pVtab);.  i
37d10 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
37d20 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
37d30 0a 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65  .  res = pModule
37d40 2d 3e 78 45 6f 66 28 70 43 75 72 2d 3e 75 63 2e  ->xEof(pCur->uc.
37d50 70 56 43 75 72 29 3b 0a 20 20 56 64 62 65 42 72  pVCur);.  VdbeBr
37d60 61 6e 63 68 54 61 6b 65 6e 28 21 72 65 73 2c 32  anchTaken(!res,2
37d70 29 3b 0a 20 20 69 66 28 20 21 72 65 73 20 29 7b  );.  if( !res ){
37d80 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65  .    /* If there
37d90 20 69 73 20 64 61 74 61 2c 20 6a 75 6d 70 20 74   is data, jump t
37da0 6f 20 50 32 20 2a 2f 0a 20 20 20 20 67 6f 74 6f  o P2 */.    goto
37db0 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f   jump_to_p2_and_
37dc0 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72  check_for_interr
37dd0 75 70 74 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20  upt;.  }.  goto 
37de0 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72  check_for_interr
37df0 75 70 74 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  upt;.}.#endif /*
37e00 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
37e10 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
37e20 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
37e30 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
37e40 2a 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e 61 6d  * Opcode: VRenam
37e50 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  e P1 * * P4 *.**
37e60 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
37e70 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c  ter to a virtual
37e80 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61   table object, a
37e90 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  n sqlite3_vtab s
37ea0 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69  tructure..** Thi
37eb0 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73  s opcode invokes
37ec0 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
37ed0 6e 67 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f  ng xRename metho
37ee0 64 2e 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20  d. The value.** 
37ef0 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
37f00 73 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20  s passed as the 
37f10 7a 4e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20 74  zName argument t
37f20 6f 20 74 68 65 20 78 52 65 6e 61 6d 65 20 6d 65  o the xRename me
37f30 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  thod..*/.case OP
37f40 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a 20 20 73 71  _VRename: {.  sq
37f50 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
37f60 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d 65 3b  b;.  Mem *pName;
37f70 0a 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d  ..  pVtab = pOp-
37f80 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62  >p4.pVtab->pVtab
37f90 3b 0a 20 20 70 4e 61 6d 65 20 3d 20 26 61 4d 65  ;.  pName = &aMe
37fa0 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
37fb0 73 65 72 74 28 20 70 56 74 61 62 2d 3e 70 4d 6f  sert( pVtab->pMo
37fc0 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 20 29 3b  dule->xRename );
37fd0 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73  .  assert( memIs
37fe0 56 61 6c 69 64 28 70 4e 61 6d 65 29 20 29 3b 0a  Valid(pName) );.
37ff0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
38000 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 52 45  dOnly==0 );.  RE
38010 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
38020 2d 3e 70 31 2c 20 70 4e 61 6d 65 29 3b 0a 20 20  ->p1, pName);.  
38030 61 73 73 65 72 74 28 20 70 4e 61 6d 65 2d 3e 66  assert( pName->f
38040 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 29  lags & MEM_Str )
38050 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4e  ;.  testcase( pN
38060 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45  ame->enc==SQLITE
38070 5f 55 54 46 38 20 29 3b 0a 20 20 74 65 73 74 63  _UTF8 );.  testc
38080 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d  ase( pName->enc=
38090 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20  =SQLITE_UTF16BE 
380a0 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
380b0 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54  Name->enc==SQLIT
380c0 45 5f 55 54 46 31 36 4c 45 20 29 3b 0a 20 20 72  E_UTF16LE );.  r
380d0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
380e0 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4e  hangeEncoding(pN
380f0 61 6d 65 2c 20 53 51 4c 49 54 45 5f 55 54 46 38  ame, SQLITE_UTF8
38100 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
38110 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
38120 65 72 72 6f 72 3b 0a 20 20 72 63 20 3d 20 70 56  error;.  rc = pV
38130 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52  tab->pModule->xR
38140 65 6e 61 6d 65 28 70 56 74 61 62 2c 20 70 4e 61  ename(pVtab, pNa
38150 6d 65 2d 3e 7a 29 3b 0a 20 20 73 71 6c 69 74 65  me->z);.  sqlite
38160 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
38170 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 70  g(p, pVtab);.  p
38180 2d 3e 65 78 70 69 72 65 64 20 3d 20 30 3b 0a 20  ->expired = 0;. 
38190 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
381a0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
381b0 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  r;.  break;.}.#e
381c0 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
381d0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
381e0 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
381f0 3a 20 56 55 70 64 61 74 65 20 50 31 20 50 32 20  : VUpdate P1 P2 
38200 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
38210 70 73 69 73 3a 20 64 61 74 61 3d 72 5b 50 33 40  psis: data=r[P3@
38220 50 32 5d 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  P2].**.** P4 is 
38230 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76  a pointer to a v
38240 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a  irtual table obj
38250 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f  ect, an sqlite3_
38260 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a  vtab structure..
38270 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
38280 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65  nvokes the corre
38290 73 70 6f 6e 64 69 6e 67 20 78 55 70 64 61 74 65  sponding xUpdate
382a0 20 6d 65 74 68 6f 64 2e 20 50 32 20 76 61 6c 75   method. P2 valu
382b0 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 69 67  es.** are contig
382c0 75 6f 75 73 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  uous memory cell
382d0 73 20 73 74 61 72 74 69 6e 67 20 61 74 20 50 33  s starting at P3
382e0 20 74 6f 20 70 61 73 73 20 74 6f 20 74 68 65 20   to pass to the 
382f0 78 55 70 64 61 74 65 20 0a 2a 2a 20 69 6e 76 6f  xUpdate .** invo
38300 63 61 74 69 6f 6e 2e 20 54 68 65 20 76 61 6c 75  cation. The valu
3