/ Hex Artifact Content
Login

Artifact 5f0fffa9bf49a90c05dc3d46d8217603fd0ee00e:


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 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76  he next global v
0c70: 61 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65  ariable is incre
0c80: 6d 65 6e 74 65 64 20 65 61 63 68 20 74 69 6d 65  mented each time
0c90: 20 74 68 65 20 4f 50 5f 46 6f 75 6e 64 20 6f 70   the OP_Found op
0ca0: 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65 63 75  code.** is execu
0cb0: 74 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65  ted. This is use
0cc0: 64 20 74 6f 20 74 65 73 74 20 77 68 65 74 68 65  d to test whethe
0cd0: 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 66 6f 72  r or not the for
0ce0: 65 69 67 6e 20 6b 65 79 0a 2a 2a 20 6f 70 65 72  eign key.** oper
0cf0: 61 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65  ation implemente
0d00: 64 20 75 73 69 6e 67 20 4f 50 5f 46 6b 49 73 5a  d using OP_FkIsZ
0d10: 65 72 6f 20 69 73 20 77 6f 72 6b 69 6e 67 2e 20  ero is working. 
0d20: 54 68 69 73 20 76 61 72 69 61 62 6c 65 0a 2a 2a  This variable.**
0d30: 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e   has no function
0d40: 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 20 68   other than to h
0d50: 65 6c 70 20 76 65 72 69 66 79 20 74 68 65 20 63  elp verify the c
0d60: 6f 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f 6e  orrect operation
0d70: 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 62 72 61   of the.** libra
0d80: 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ry..*/.#ifdef SQ
0d90: 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71  LITE_TEST.int sq
0da0: 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e  lite3_found_coun
0db0: 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f  t = 0;.#endif../
0dc0: 2a 0a 2a 2a 20 54 65 73 74 20 61 20 72 65 67 69  *.** Test a regi
0dd0: 73 74 65 72 20 74 6f 20 73 65 65 20 69 66 20 69  ster to see if i
0de0: 74 20 65 78 63 65 65 64 73 20 74 68 65 20 63 75  t exceeds the cu
0df0: 72 72 65 6e 74 20 6d 61 78 69 6d 75 6d 20 62 6c  rrent maximum bl
0e00: 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20 49 66 20 69  ob size..** If i
0e10: 74 20 64 6f 65 73 2c 20 72 65 63 6f 72 64 20 74  t does, record t
0e20: 68 65 20 6e 65 77 20 6d 61 78 69 6d 75 6d 20 62  he new maximum b
0e30: 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66  lob size..*/.#if
0e40: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
0e50: 54 45 53 54 29 20 26 26 20 21 64 65 66 69 6e 65  TEST) && !define
0e60: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  d(SQLITE_OMIT_BU
0e70: 49 4c 54 49 4e 5f 54 45 53 54 29 0a 23 20 64 65  ILTIN_TEST).# de
0e80: 66 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f  fine UPDATE_MAX_
0e90: 42 4c 4f 42 53 49 5a 45 28 50 29 20 20 75 70 64  BLOBSIZE(P)  upd
0ea0: 61 74 65 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50  ateMaxBlobsize(P
0eb0: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
0ec0: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
0ed0: 53 49 5a 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a  SIZE(P).#endif..
0ee0: 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65  /*.** Invoke the
0ef0: 20 56 44 42 45 20 63 6f 76 65 72 61 67 65 20 63   VDBE coverage c
0f00: 61 6c 6c 62 61 63 6b 2c 20 69 66 20 74 68 61 74  allback, if that
0f10: 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 64 65 66   callback is def
0f20: 69 6e 65 64 2e 20 20 54 68 69 73 0a 2a 2a 20 66  ined.  This.** f
0f30: 65 61 74 75 72 65 20 69 73 20 75 73 65 64 20 66  eature is used f
0f40: 6f 72 20 74 65 73 74 20 73 75 69 74 65 20 76 61  or test suite va
0f50: 6c 69 64 61 74 69 6f 6e 20 6f 6e 6c 79 20 61 6e  lidation only an
0f60: 64 20 64 6f 65 73 20 6e 6f 74 20 61 70 70 65 61  d does not appea
0f70: 72 20 61 6e 0a 2a 2a 20 70 72 6f 64 75 63 74 69  r an.** producti
0f80: 6f 6e 20 62 75 69 6c 64 73 2e 0a 2a 2a 0a 2a 2a  on builds..**.**
0f90: 20 4d 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72   M is an integer
0fa0: 2c 20 32 20 6f 72 20 33 2c 20 74 68 61 74 20 69  , 2 or 3, that i
0fb0: 6e 64 69 63 65 73 20 68 6f 77 20 6d 61 6e 79 20  ndices how many 
0fc0: 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 74  different ways t
0fd0: 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20 63 61 6e  he.** branch can
0fe0: 20 67 6f 2e 20 20 49 74 20 69 73 20 75 73 75 61   go.  It is usua
0ff0: 6c 6c 79 20 32 2e 20 20 22 49 22 20 69 73 20 74  lly 2.  "I" is t
1000: 68 65 20 64 69 72 65 63 74 69 6f 6e 20 74 68 65  he direction the
1010: 20 62 72 61 6e 63 68 0a 2a 2a 20 67 6f 65 73 2e   branch.** goes.
1020: 20 20 30 20 6d 65 61 6e 73 20 66 61 6c 6c 73 20    0 means falls 
1030: 74 68 72 6f 75 67 68 2e 20 20 31 20 6d 65 61 6e  through.  1 mean
1040: 73 20 62 72 61 6e 63 68 20 69 73 20 74 61 6b 65  s branch is take
1050: 6e 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 0a  n.  2 means the.
1060: 2a 2a 20 73 65 63 6f 6e 64 20 61 6c 74 65 72 6e  ** second altern
1070: 61 74 69 76 65 20 62 72 61 6e 63 68 20 69 73 20  ative branch is 
1080: 74 61 6b 65 6e 2e 0a 2a 2f 0a 23 69 66 20 21 64  taken..*/.#if !d
1090: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 56 44  efined(SQLITE_VD
10a0: 42 45 5f 43 4f 56 45 52 41 47 45 29 0a 23 20 64  BE_COVERAGE).# d
10b0: 65 66 69 6e 65 20 56 64 62 65 42 72 61 6e 63 68  efine VdbeBranch
10c0: 54 61 6b 65 6e 28 49 2c 4d 29 0a 23 65 6c 73 65  Taken(I,M).#else
10d0: 0a 23 20 64 65 66 69 6e 65 20 56 64 62 65 42 72  .# define VdbeBr
10e0: 61 6e 63 68 54 61 6b 65 6e 28 49 2c 4d 29 20 76  anchTaken(I,M) v
10f0: 64 62 65 54 61 6b 65 42 72 61 6e 63 68 28 70 4f  dbeTakeBranch(pO
1100: 70 2d 3e 69 53 72 63 4c 69 6e 65 2c 49 2c 4d 29  p->iSrcLine,I,M)
1110: 0a 20 20 73 74 61 74 69 63 20 76 6f 69 64 20 76  .  static void v
1120: 64 62 65 54 61 6b 65 42 72 61 6e 63 68 28 69 6e  dbeTakeBranch(in
1130: 74 20 69 53 72 63 4c 69 6e 65 2c 20 75 38 20 49  t iSrcLine, u8 I
1140: 2c 20 75 38 20 4d 29 7b 0a 20 20 20 20 69 66 28  , u8 M){.    if(
1150: 20 69 53 72 63 4c 69 6e 65 3c 3d 32 20 26 26 20   iSrcLine<=2 && 
1160: 41 4c 57 41 59 53 28 69 53 72 63 4c 69 6e 65 3e  ALWAYS(iSrcLine>
1170: 30 29 20 29 7b 0a 20 20 20 20 20 20 4d 20 3d 20  0) ){.      M = 
1180: 69 53 72 63 4c 69 6e 65 3b 0a 20 20 20 20 20 20  iSrcLine;.      
1190: 2f 2a 20 41 73 73 65 72 74 20 74 68 65 20 74 72  /* Assert the tr
11a0: 75 74 68 20 6f 66 20 56 64 62 65 43 6f 76 65 72  uth of VdbeCover
11b0: 61 67 65 41 6c 77 61 79 73 54 61 6b 65 6e 28 29  ageAlwaysTaken()
11c0: 20 61 6e 64 20 0a 20 20 20 20 20 20 2a 2a 20 56   and .      ** V
11d0: 64 62 65 43 6f 76 65 72 61 67 65 4e 65 76 65 72  dbeCoverageNever
11e0: 54 61 6b 65 6e 28 29 20 2a 2f 0a 20 20 20 20 20  Taken() */.     
11f0: 20 61 73 73 65 72 74 28 20 28 4d 20 26 20 49 29   assert( (M & I)
1200: 3d 3d 49 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==I );.    }else
1210: 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  {.      if( sqli
1220: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
1230: 78 56 64 62 65 42 72 61 6e 63 68 3d 3d 30 20 29  xVdbeBranch==0 )
1240: 20 72 65 74 75 72 6e 3b 20 20 2f 2a 4e 4f 5f 54   return;  /*NO_T
1250: 45 53 54 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69  EST*/.      sqli
1260: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
1270: 78 56 64 62 65 42 72 61 6e 63 68 28 73 71 6c 69  xVdbeBranch(sqli
1280: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
1290: 70 56 64 62 65 42 72 61 6e 63 68 41 72 67 2c 0a  pVdbeBranchArg,.
12a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c0: 20 20 20 20 20 20 69 53 72 63 4c 69 6e 65 2c 49        iSrcLine,I
12d0: 2c 4d 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23  ,M);.    }.  }.#
12e0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e  endif../*.** Con
12f0: 76 65 72 74 20 74 68 65 20 67 69 76 65 6e 20 72  vert the given r
1300: 65 67 69 73 74 65 72 20 69 6e 74 6f 20 61 20 73  egister into a s
1310: 74 72 69 6e 67 20 69 66 20 69 74 20 69 73 6e 27  tring if it isn'
1320: 74 20 6f 6e 65 0a 2a 2a 20 61 6c 72 65 61 64 79  t one.** already
1330: 2e 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72  . Return non-zer
1340: 6f 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20  o if a malloc() 
1350: 66 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  fails..*/.#defin
1360: 65 20 53 74 72 69 6e 67 69 66 79 28 50 2c 20 65  e Stringify(P, e
1370: 6e 63 29 20 5c 0a 20 20 20 69 66 28 28 28 50 29  nc) \.   if(((P)
1380: 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 53 74 72  ->flags&(MEM_Str
1390: 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 26  |MEM_Blob))==0 &
13a0: 26 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  & sqlite3VdbeMem
13b0: 53 74 72 69 6e 67 69 66 79 28 50 2c 65 6e 63 29  Stringify(P,enc)
13c0: 29 20 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f 20  ) \.     { goto 
13d0: 6e 6f 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a 2a  no_mem; }../*.**
13e0: 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74   An ephemeral st
13f0: 72 69 6e 67 20 76 61 6c 75 65 20 28 73 69 67 6e  ring value (sign
1400: 69 66 69 65 64 20 62 79 20 74 68 65 20 4d 45 4d  ified by the MEM
1410: 5f 45 70 68 65 6d 20 66 6c 61 67 29 20 63 6f 6e  _Ephem flag) con
1420: 74 61 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e 74  tains.** a point
1430: 65 72 20 74 6f 20 61 20 64 79 6e 61 6d 69 63 61  er to a dynamica
1440: 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 74  lly allocated st
1450: 72 69 6e 67 20 77 68 65 72 65 20 73 6f 6d 65 20  ring where some 
1460: 6f 74 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a 20  other entity.** 
1470: 69 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66  is responsible f
1480: 6f 72 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20  or deallocating 
1490: 74 68 61 74 20 73 74 72 69 6e 67 2e 20 20 42 65  that string.  Be
14a0: 63 61 75 73 65 20 74 68 65 20 72 65 67 69 73 74  cause the regist
14b0: 65 72 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 63  er.** does not c
14c0: 6f 6e 74 72 6f 6c 20 74 68 65 20 73 74 72 69 6e  ontrol the strin
14d0: 67 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20 64  g, it might be d
14e0: 65 6c 65 74 65 64 20 77 69 74 68 6f 75 74 20 74  eleted without t
14f0: 68 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6b  he register.** k
1500: 6e 6f 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a  nowing it..**.**
1510: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 63 6f   This routine co
1520: 6e 76 65 72 74 73 20 61 6e 20 65 70 68 65 6d 65  nverts an epheme
1530: 72 61 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f 20  ral string into 
1540: 61 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c  a dynamically al
1550: 6c 6f 63 61 74 65 64 0a 2a 2a 20 73 74 72 69 6e  located.** strin
1560: 67 20 74 68 61 74 20 74 68 65 20 72 65 67 69 73  g that the regis
1570: 74 65 72 20 69 74 73 65 6c 66 20 63 6f 6e 74 72  ter itself contr
1580: 6f 6c 73 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ols.  In other w
1590: 6f 72 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76  ords, it.** conv
15a0: 65 72 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68 65  erts an MEM_Ephe
15b0: 6d 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20  m string into a 
15c0: 73 74 72 69 6e 67 20 77 69 74 68 20 50 2e 7a 3d  string with P.z=
15d0: 3d 50 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a 23  =P.zMalloc..*/.#
15e0: 64 65 66 69 6e 65 20 44 65 65 70 68 65 6d 65 72  define Deephemer
15f0: 61 6c 69 7a 65 28 50 29 20 5c 0a 20 20 20 69 66  alize(P) \.   if
1600: 28 20 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45  ( ((P)->flags&ME
1610: 4d 5f 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20  M_Ephem)!=0 \.  
1620: 20 20 20 20 20 26 26 20 73 71 6c 69 74 65 33 56       && sqlite3V
1630: 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61  dbeMemMakeWritea
1640: 62 6c 65 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e  ble(P) ){ goto n
1650: 6f 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74 75  o_mem;}../* Retu
1660: 72 6e 20 74 72 75 65 20 69 66 20 74 68 65 20 63  rn true if the c
1670: 75 72 73 6f 72 20 77 61 73 20 6f 70 65 6e 65 64  ursor was opened
1680: 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f 70   using the OP_Op
1690: 65 6e 53 6f 72 74 65 72 20 6f 70 63 6f 64 65 2e  enSorter opcode.
16a0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 69 73 53 6f   */.#define isSo
16b0: 72 74 65 72 28 78 29 20 28 28 78 29 2d 3e 70 53  rter(x) ((x)->pS
16c0: 6f 72 74 65 72 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a  orter!=0)../*.**
16d0: 20 41 6c 6c 6f 63 61 74 65 20 56 64 62 65 43 75   Allocate VdbeCu
16e0: 72 73 6f 72 20 6e 75 6d 62 65 72 20 69 43 75 72  rsor number iCur
16f0: 2e 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69 6e  .  Return a poin
1700: 74 65 72 20 74 6f 20 69 74 2e 20 20 52 65 74 75  ter to it.  Retu
1710: 72 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77 65  rn NULL.** if we
1720: 20 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65 6d 6f   run out of memo
1730: 72 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 56 64  ry..*/.static Vd
1740: 62 65 43 75 72 73 6f 72 20 2a 61 6c 6c 6f 63 61  beCursor *alloca
1750: 74 65 43 75 72 73 6f 72 28 0a 20 20 56 64 62 65  teCursor(.  Vdbe
1760: 20 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20 20   *p,            
1770: 20 20 2f 2a 20 54 68 65 20 76 69 72 74 75 61 6c    /* The virtual
1780: 20 6d 61 63 68 69 6e 65 20 2a 2f 0a 20 20 69 6e   machine */.  in
1790: 74 20 69 43 75 72 2c 20 20 20 20 20 20 20 20 20  t iCur,         
17a0: 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20      /* Index of 
17b0: 74 68 65 20 6e 65 77 20 56 64 62 65 43 75 72 73  the new VdbeCurs
17c0: 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65  or */.  int nFie
17d0: 6c 64 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ld,           /*
17e0: 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64   Number of field
17f0: 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f  s in the table o
1800: 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74  r index */.  int
1810: 20 69 44 62 2c 20 20 20 20 20 20 20 20 20 20 20   iDb,           
1820: 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 74     /* Database t
1830: 68 65 20 63 75 72 73 6f 72 20 62 65 6c 6f 6e 67  he cursor belong
1840: 73 20 74 6f 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20  s to, or -1 */. 
1850: 20 69 6e 74 20 69 73 42 74 72 65 65 43 75 72 73   int isBtreeCurs
1860: 6f 72 20 20 20 20 20 2f 2a 20 54 72 75 65 20 66  or     /* True f
1870: 6f 72 20 42 2d 54 72 65 65 2e 20 20 46 61 6c 73  or B-Tree.  Fals
1880: 65 20 66 6f 72 20 70 73 65 75 64 6f 2d 74 61 62  e for pseudo-tab
1890: 6c 65 20 6f 72 20 76 74 61 62 20 2a 2f 0a 29 7b  le or vtab */.){
18a0: 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20 6d  .  /* Find the m
18b0: 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74 20  emory cell that 
18c0: 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74 6f 20  will be used to 
18d0: 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62 20 6f  store the blob o
18e0: 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20 72 65  f memory.  ** re
18f0: 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73 20  quired for this 
1900: 56 64 62 65 43 75 72 73 6f 72 20 73 74 72 75 63  VdbeCursor struc
1910: 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f 6e 76  ture. It is conv
1920: 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20 61 20  enient to use a 
1930: 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d 6f 72  .  ** vdbe memor
1940: 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61 67 65  y cell to manage
1950: 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f   the memory allo
1960: 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65 64 20  cation required 
1970: 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62 65 43  for a.  ** VdbeC
1980: 75 72 73 6f 72 20 73 74 72 75 63 74 75 72 65 20  ursor structure 
1990: 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  for the followin
19a0: 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a 2a 0a  g reasons:.  **.
19b0: 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74 69 6d    **   * Sometim
19c0: 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72  es cursor number
19d0: 73 20 61 72 65 20 75 73 65 64 20 66 6f 72 20 61  s are used for a
19e0: 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66 66 65   couple of diffe
19f0: 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20 70 75  rent.  **     pu
1a00: 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64 62 65  rposes in a vdbe
1a10: 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20 64 69   program. The di
1a20: 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d 69 67  fferent uses mig
1a30: 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a 2a 20  ht require.  ** 
1a40: 20 20 20 20 64 69 66 66 65 72 65 6e 74 20 73 69      different si
1a50: 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e  zed allocations.
1a60: 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 70 72   Memory cells pr
1a70: 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65 0a 20  ovide growable. 
1a80: 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61 74 69   **     allocati
1a90: 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20  ons..  **.  **  
1aa0: 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20 45 4e   * When using EN
1ab0: 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41  ABLE_MEMORY_MANA
1ac0: 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79 20 63  GEMENT, memory c
1ad0: 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61 6e 0a  ell buffers can.
1ae0: 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72 65 65    **     be free
1af0: 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74 68 65  d lazily via the
1b00: 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73 65   sqlite3_release
1b10: 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e 20 54  _memory() API. T
1b20: 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d 69 6e  his.  **     min
1b30: 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d 62 65  imizes the numbe
1b40: 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61 6c 6c  r of malloc call
1b50: 73 20 6d 61 64 65 20 62 79 20 74 68 65 20 73 79  s made by the sy
1b60: 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  stem..  **.  ** 
1b70: 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 66 6f 72  Memory cells for
1b80: 20 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c 6c   cursors are all
1b90: 6f 63 61 74 65 64 20 61 74 20 74 68 65 20 74 6f  ocated at the to
1ba0: 70 20 6f 66 20 74 68 65 20 61 64 64 72 65 73 73  p of the address
1bb0: 0a 20 20 2a 2a 20 73 70 61 63 65 2e 20 4d 65 6d  .  ** space. Mem
1bc0: 6f 72 79 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d 65  ory cell (p->nMe
1bd0: 6d 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  m) corresponds t
1be0: 6f 20 63 75 72 73 6f 72 20 30 2e 20 53 70 61 63  o cursor 0. Spac
1bf0: 65 20 66 6f 72 0a 20 20 2a 2a 20 63 75 72 73 6f  e for.  ** curso
1c00: 72 20 31 20 69 73 20 6d 61 6e 61 67 65 64 20 62  r 1 is managed b
1c10: 79 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 28 70  y memory cell (p
1c20: 2d 3e 6e 4d 65 6d 2d 31 29 2c 20 65 74 63 2e 0a  ->nMem-1), etc..
1c30: 20 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d    */.  Mem *pMem
1c40: 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e   = &p->aMem[p->n
1c50: 4d 65 6d 2d 69 43 75 72 5d 3b 0a 0a 20 20 69 6e  Mem-iCur];..  in
1c60: 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65 43  t nByte;.  VdbeC
1c70: 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b 0a  ursor *pCx = 0;.
1c80: 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20 20    nByte = .     
1c90: 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56   ROUND8(sizeof(V
1ca0: 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32 2a  dbeCursor)) + 2*
1cb0: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
1cc0: 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 69 73 42  ld + .      (isB
1cd0: 74 72 65 65 43 75 72 73 6f 72 3f 73 71 6c 69 74  treeCursor?sqlit
1ce0: 65 33 42 74 72 65 65 43 75 72 73 6f 72 53 69 7a  e3BtreeCursorSiz
1cf0: 65 28 29 3a 30 29 3b 0a 0a 20 20 61 73 73 65 72  e():0);..  asser
1d00: 74 28 20 69 43 75 72 3c 70 2d 3e 6e 43 75 72 73  t( iCur<p->nCurs
1d10: 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61  or );.  if( p->a
1d20: 70 43 73 72 5b 69 43 75 72 5d 20 29 7b 0a 20 20  pCsr[iCur] ){.  
1d30: 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65    sqlite3VdbeFre
1d40: 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70  eCursor(p, p->ap
1d50: 43 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20  Csr[iCur]);.    
1d60: 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d  p->apCsr[iCur] =
1d70: 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53 51   0;.  }.  if( SQ
1d80: 4c 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33  LITE_OK==sqlite3
1d90: 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4d 65 6d  VdbeMemGrow(pMem
1da0: 2c 20 6e 42 79 74 65 2c 20 30 29 20 29 7b 0a 20  , nByte, 0) ){. 
1db0: 20 20 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72     p->apCsr[iCur
1dc0: 5d 20 3d 20 70 43 78 20 3d 20 28 56 64 62 65 43  ] = pCx = (VdbeC
1dd0: 75 72 73 6f 72 2a 29 70 4d 65 6d 2d 3e 7a 3b 0a  ursor*)pMem->z;.
1de0: 20 20 20 20 6d 65 6d 73 65 74 28 70 43 78 2c 20      memset(pCx, 
1df0: 30 2c 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75  0, sizeof(VdbeCu
1e00: 72 73 6f 72 29 29 3b 0a 20 20 20 20 70 43 78 2d  rsor));.    pCx-
1e10: 3e 69 44 62 20 3d 20 69 44 62 3b 0a 20 20 20 20  >iDb = iDb;.    
1e20: 70 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e 46  pCx->nField = nF
1e30: 69 65 6c 64 3b 0a 20 20 20 20 69 66 28 20 69 73  ield;.    if( is
1e40: 42 74 72 65 65 43 75 72 73 6f 72 20 29 7b 0a 20  BtreeCursor ){. 
1e50: 20 20 20 20 20 70 43 78 2d 3e 70 43 75 72 73 6f       pCx->pCurso
1e60: 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29 0a  r = (BtCursor*).
1e70: 20 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d 2d            &pMem-
1e80: 3e 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66  >z[ROUND8(sizeof
1e90: 28 56 64 62 65 43 75 72 73 6f 72 29 29 2b 32 2a  (VdbeCursor))+2*
1ea0: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
1eb0: 6c 64 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ld];.      sqlit
1ec0: 65 33 42 74 72 65 65 43 75 72 73 6f 72 5a 65 72  e3BtreeCursorZer
1ed0: 6f 28 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b  o(pCx->pCursor);
1ee0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74  .    }.  }.  ret
1ef0: 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a  urn pCx;.}../*.*
1f00: 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74  * Try to convert
1f10: 20 61 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20   a value into a 
1f20: 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65 6e  numeric represen
1f30: 74 61 74 69 6f 6e 20 69 66 20 77 65 20 63 61 6e  tation if we can
1f40: 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74 68 6f 75  .** do so withou
1f50: 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d  t loss of inform
1f60: 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72  ation.  In other
1f70: 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20 73   words, if the s
1f80: 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c  tring.** looks l
1f90: 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 63 6f  ike a number, co
1fa0: 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20 61 20  nvert it into a 
1fb0: 6e 75 6d 62 65 72 2e 20 20 49 66 20 69 74 20 64  number.  If it d
1fc0: 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20  oes not.** look 
1fd0: 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 6c  like a number, l
1fe0: 65 61 76 65 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a  eave it alone..*
1ff0: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61 70  /.static void ap
2000: 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  plyNumericAffini
2010: 74 79 28 4d 65 6d 20 2a 70 52 65 63 29 7b 0a 20  ty(Mem *pRec){. 
2020: 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61 67   if( (pRec->flag
2030: 73 20 26 20 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45  s & (MEM_Real|ME
2040: 4d 5f 49 6e 74 29 29 3d 3d 30 20 29 7b 0a 20 20  M_Int))==0 ){.  
2050: 20 20 64 6f 75 62 6c 65 20 72 56 61 6c 75 65 3b    double rValue;
2060: 0a 20 20 20 20 69 36 34 20 69 56 61 6c 75 65 3b  .    i64 iValue;
2070: 0a 20 20 20 20 75 38 20 65 6e 63 20 3d 20 70 52  .    u8 enc = pR
2080: 65 63 2d 3e 65 6e 63 3b 0a 20 20 20 20 69 66 28  ec->enc;.    if(
2090: 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45   (pRec->flags&ME
20a0: 4d 5f 53 74 72 29 3d 3d 30 20 29 20 72 65 74 75  M_Str)==0 ) retu
20b0: 72 6e 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69  rn;.    if( sqli
20c0: 74 65 33 41 74 6f 46 28 70 52 65 63 2d 3e 7a 2c  te3AtoF(pRec->z,
20d0: 20 26 72 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e   &rValue, pRec->
20e0: 6e 2c 20 65 6e 63 29 3d 3d 30 20 29 20 72 65 74  n, enc)==0 ) ret
20f0: 75 72 6e 3b 0a 20 20 20 20 69 66 28 20 30 3d 3d  urn;.    if( 0==
2100: 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 70 52  sqlite3Atoi64(pR
2110: 65 63 2d 3e 7a 2c 20 26 69 56 61 6c 75 65 2c 20  ec->z, &iValue, 
2120: 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 20 29 7b  pRec->n, enc) ){
2130: 0a 20 20 20 20 20 20 70 52 65 63 2d 3e 75 2e 69  .      pRec->u.i
2140: 20 3d 20 69 56 61 6c 75 65 3b 0a 20 20 20 20 20   = iValue;.     
2150: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20   pRec->flags |= 
2160: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 7d 65 6c  MEM_Int;.    }el
2170: 73 65 7b 0a 20 20 20 20 20 20 70 52 65 63 2d 3e  se{.      pRec->
2180: 72 20 3d 20 72 56 61 6c 75 65 3b 0a 20 20 20 20  r = rValue;.    
2190: 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d    pRec->flags |=
21a0: 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 20 20 7d   MEM_Real;.    }
21b0: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72  .  }.}../*.** Pr
21c0: 6f 63 65 73 73 69 6e 67 20 69 73 20 64 65 74 65  ocessing is dete
21d0: 72 6d 69 6e 65 20 62 79 20 74 68 65 20 61 66 66  rmine by the aff
21e0: 69 6e 69 74 79 20 70 61 72 61 6d 65 74 65 72 3a  inity parameter:
21f0: 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46  .**.** SQLITE_AF
2200: 46 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a 20 53 51  F_INTEGER:.** SQ
2210: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 3a 0a 2a  LITE_AFF_REAL:.*
2220: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  * SQLITE_AFF_NUM
2230: 45 52 49 43 3a 0a 2a 2a 20 20 20 20 54 72 79 20  ERIC:.**    Try 
2240: 74 6f 20 63 6f 6e 76 65 72 74 20 70 52 65 63 20  to convert pRec 
2250: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65  to an integer re
2260: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 72 20  presentation or 
2270: 61 20 0a 2a 2a 20 20 20 20 66 6c 6f 61 74 69 6e  a .**    floatin
2280: 67 2d 70 6f 69 6e 74 20 72 65 70 72 65 73 65 6e  g-point represen
2290: 74 61 74 69 6f 6e 20 69 66 20 61 6e 20 69 6e 74  tation if an int
22a0: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
22b0: 69 6f 6e 0a 2a 2a 20 20 20 20 69 73 20 6e 6f 74  ion.**    is not
22c0: 20 70 6f 73 73 69 62 6c 65 2e 20 20 4e 6f 74 65   possible.  Note
22d0: 20 74 68 61 74 20 74 68 65 20 69 6e 74 65 67 65   that the intege
22e0: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
22f0: 20 69 73 0a 2a 2a 20 20 20 20 61 6c 77 61 79 73   is.**    always
2300: 20 70 72 65 66 65 72 72 65 64 2c 20 65 76 65 6e   preferred, even
2310: 20 69 66 20 74 68 65 20 61 66 66 69 6e 69 74 79   if the affinity
2320: 20 69 73 20 52 45 41 4c 2c 20 62 65 63 61 75 73   is REAL, becaus
2330: 65 0a 2a 2a 20 20 20 20 61 6e 20 69 6e 74 65 67  e.**    an integ
2340: 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  er representatio
2350: 6e 20 69 73 20 6d 6f 72 65 20 73 70 61 63 65 20  n is more space 
2360: 65 66 66 69 63 69 65 6e 74 20 6f 6e 20 64 69 73  efficient on dis
2370: 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f  k..**.** SQLITE_
2380: 41 46 46 5f 54 45 58 54 3a 0a 2a 2a 20 20 20 20  AFF_TEXT:.**    
2390: 43 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20  Convert pRec to 
23a0: 61 20 74 65 78 74 20 72 65 70 72 65 73 65 6e 74  a text represent
23b0: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c  ation..**.** SQL
23c0: 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 3a 0a 2a 2a  ITE_AFF_NONE:.**
23d0: 20 20 20 20 4e 6f 2d 6f 70 2e 20 20 70 52 65 63      No-op.  pRec
23e0: 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a   is unchanged..*
23f0: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61 70  /.static void ap
2400: 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20 4d  plyAffinity(.  M
2410: 65 6d 20 2a 70 52 65 63 2c 20 20 20 20 20 20 20  em *pRec,       
2420: 20 20 20 2f 2a 20 54 68 65 20 76 61 6c 75 65 20     /* The value 
2430: 74 6f 20 61 70 70 6c 79 20 61 66 66 69 6e 69 74  to apply affinit
2440: 79 20 74 6f 20 2a 2f 0a 20 20 63 68 61 72 20 61  y to */.  char a
2450: 66 66 69 6e 69 74 79 2c 20 20 20 20 20 20 2f 2a  ffinity,      /*
2460: 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74 6f   The affinity to
2470: 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20   be applied */. 
2480: 20 75 38 20 65 6e 63 20 20 20 20 20 20 20 20 20   u8 enc         
2490: 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73       /* Use this
24a0: 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a   text encoding *
24b0: 2f 0a 29 7b 0a 20 20 69 66 28 20 61 66 66 69 6e  /.){.  if( affin
24c0: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
24d0: 54 45 58 54 20 29 7b 0a 20 20 20 20 2f 2a 20 4f  TEXT ){.    /* O
24e0: 6e 6c 79 20 61 74 74 65 6d 70 74 20 74 68 65 20  nly attempt the 
24f0: 63 6f 6e 76 65 72 73 69 6f 6e 20 74 6f 20 54 45  conversion to TE
2500: 58 54 20 69 66 20 74 68 65 72 65 20 69 73 20 61  XT if there is a
2510: 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 72 65 61  n integer or rea
2520: 6c 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73 65  l.    ** represe
2530: 6e 74 61 74 69 6f 6e 20 28 62 6c 6f 62 20 61 6e  ntation (blob an
2540: 64 20 4e 55 4c 4c 20 64 6f 20 6e 6f 74 20 67 65  d NULL do not ge
2550: 74 20 63 6f 6e 76 65 72 74 65 64 29 20 62 75 74  t converted) but
2560: 20 6e 6f 20 73 74 72 69 6e 67 0a 20 20 20 20 2a   no string.    *
2570: 2a 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  * representation
2580: 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28  ..    */.    if(
2590: 20 30 3d 3d 28 70 52 65 63 2d 3e 66 6c 61 67 73   0==(pRec->flags
25a0: 26 4d 45 4d 5f 53 74 72 29 20 26 26 20 28 70 52  &MEM_Str) && (pR
25b0: 65 63 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 52  ec->flags&(MEM_R
25c0: 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29 20 29 7b  eal|MEM_Int)) ){
25d0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
25e0: 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70  beMemStringify(p
25f0: 52 65 63 2c 20 65 6e 63 29 3b 0a 20 20 20 20 7d  Rec, enc);.    }
2600: 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73  .    pRec->flags
2610: 20 26 3d 20 7e 28 4d 45 4d 5f 52 65 61 6c 7c 4d   &= ~(MEM_Real|M
2620: 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73 65  EM_Int);.  }else
2630: 20 69 66 28 20 61 66 66 69 6e 69 74 79 21 3d 53   if( affinity!=S
2640: 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 20 29  QLITE_AFF_NONE )
2650: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 61 66  {.    assert( af
2660: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2670: 46 46 5f 49 4e 54 45 47 45 52 20 7c 7c 20 61 66  FF_INTEGER || af
2680: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2690: 46 46 5f 52 45 41 4c 0a 20 20 20 20 20 20 20 20  FF_REAL.        
26a0: 20 20 20 20 20 7c 7c 20 61 66 66 69 6e 69 74 79       || affinity
26b0: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  ==SQLITE_AFF_NUM
26c0: 45 52 49 43 20 29 3b 0a 20 20 20 20 61 70 70 6c  ERIC );.    appl
26d0: 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
26e0: 28 70 52 65 63 29 3b 0a 20 20 20 20 69 66 28 20  (pRec);.    if( 
26f0: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pRec->flags & ME
2700: 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 20 20  M_Real ){.      
2710: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67  sqlite3VdbeInteg
2720: 65 72 41 66 66 69 6e 69 74 79 28 70 52 65 63 29  erAffinity(pRec)
2730: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f  ;.    }.  }.}../
2740: 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76  *.** Try to conv
2750: 65 72 74 20 74 68 65 20 74 79 70 65 20 6f 66 20  ert the type of 
2760: 61 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d  a function argum
2770: 65 6e 74 20 6f 72 20 61 20 72 65 73 75 6c 74 20  ent or a result 
2780: 63 6f 6c 75 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61  column.** into a
2790: 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65   numeric represe
27a0: 6e 74 61 74 69 6f 6e 2e 20 20 55 73 65 20 65 69  ntation.  Use ei
27b0: 74 68 65 72 20 49 4e 54 45 47 45 52 20 6f 72 20  ther INTEGER or 
27c0: 52 45 41 4c 20 77 68 69 63 68 65 76 65 72 0a 2a  REAL whichever.*
27d0: 2a 20 69 73 20 61 70 70 72 6f 70 72 69 61 74 65  * is appropriate
27e0: 2e 20 20 42 75 74 20 6f 6e 6c 79 20 64 6f 20 74  .  But only do t
27f0: 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 66  he conversion if
2800: 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20   it is possible 
2810: 77 69 74 68 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20  without.** loss 
2820: 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  of information a
2830: 6e 64 20 72 65 74 75 72 6e 20 74 68 65 20 72 65  nd return the re
2840: 76 69 73 65 64 20 74 79 70 65 20 6f 66 20 74 68  vised type of th
2850: 65 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69  e argument..*/.i
2860: 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt sqlite3_value
2870: 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65 28 73 71  _numeric_type(sq
2880: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
2890: 6c 29 7b 0a 20 20 69 6e 74 20 65 54 79 70 65 20  l){.  int eType 
28a0: 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  = sqlite3_value_
28b0: 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20 69 66  type(pVal);.  if
28c0: 28 20 65 54 79 70 65 3d 3d 53 51 4c 49 54 45 5f  ( eType==SQLITE_
28d0: 54 45 58 54 20 29 7b 0a 20 20 20 20 4d 65 6d 20  TEXT ){.    Mem 
28e0: 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70 56  *pMem = (Mem*)pV
28f0: 61 6c 3b 0a 20 20 20 20 61 70 70 6c 79 4e 75 6d  al;.    applyNum
2900: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 4d 65  ericAffinity(pMe
2910: 6d 29 3b 0a 20 20 20 20 65 54 79 70 65 20 3d 20  m);.    eType = 
2920: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79  sqlite3_value_ty
2930: 70 65 28 70 56 61 6c 29 3b 0a 20 20 7d 0a 20 20  pe(pVal);.  }.  
2940: 72 65 74 75 72 6e 20 65 54 79 70 65 3b 0a 7d 0a  return eType;.}.
2950: 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74 65 64 20  ./*.** Exported 
2960: 76 65 72 73 69 6f 6e 20 6f 66 20 61 70 70 6c 79  version of apply
2970: 41 66 66 69 6e 69 74 79 28 29 2e 20 54 68 69 73  Affinity(). This
2980: 20 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e 20 73 71   one works on sq
2990: 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 0a 2a  lite3_value*, .*
29a0: 2a 20 6e 6f 74 20 74 68 65 20 69 6e 74 65 72 6e  * not the intern
29b0: 61 6c 20 4d 65 6d 2a 20 74 79 70 65 2e 0a 2a 2f  al Mem* type..*/
29c0: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
29d0: 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28  ueApplyAffinity(
29e0: 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
29f0: 20 2a 70 56 61 6c 2c 20 0a 20 20 75 38 20 61 66   *pVal, .  u8 af
2a00: 66 69 6e 69 74 79 2c 20 0a 20 20 75 38 20 65 6e  finity, .  u8 en
2a10: 63 0a 29 7b 0a 20 20 61 70 70 6c 79 41 66 66 69  c.){.  applyAffi
2a20: 6e 69 74 79 28 28 4d 65 6d 20 2a 29 70 56 61 6c  nity((Mem *)pVal
2a30: 2c 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 29  , affinity, enc)
2a40: 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  ;.}..#ifdef SQLI
2a50: 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 57  TE_DEBUG./*.** W
2a60: 72 69 74 65 20 61 20 6e 69 63 65 20 73 74 72 69  rite a nice stri
2a70: 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  ng representatio
2a80: 6e 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74  n of the content
2a90: 73 20 6f 66 20 63 65 6c 6c 20 70 4d 65 6d 0a 2a  s of cell pMem.*
2aa0: 2a 20 69 6e 74 6f 20 62 75 66 66 65 72 20 7a 42  * into buffer zB
2ab0: 75 66 2c 20 6c 65 6e 67 74 68 20 6e 42 75 66 2e  uf, length nBuf.
2ac0: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
2ad0: 56 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69  VdbeMemPrettyPri
2ae0: 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 63 68  nt(Mem *pMem, ch
2af0: 61 72 20 2a 7a 42 75 66 29 7b 0a 20 20 63 68 61  ar *zBuf){.  cha
2b00: 72 20 2a 7a 43 73 72 20 3d 20 7a 42 75 66 3b 0a  r *zCsr = zBuf;.
2b10: 20 20 69 6e 74 20 66 20 3d 20 70 4d 65 6d 2d 3e    int f = pMem->
2b20: 66 6c 61 67 73 3b 0a 0a 20 20 73 74 61 74 69 63  flags;..  static
2b30: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e   const char *con
2b40: 73 74 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20  st encnames[] = 
2b50: 7b 22 28 58 29 22 2c 20 22 28 38 29 22 2c 20 22  {"(X)", "(8)", "
2b60: 28 31 36 4c 45 29 22 2c 20 22 28 31 36 42 45 29  (16LE)", "(16BE)
2b70: 22 7d 3b 0a 0a 20 20 69 66 28 20 66 26 4d 45 4d  "};..  if( f&MEM
2b80: 5f 42 6c 6f 62 20 29 7b 0a 20 20 20 20 69 6e 74  _Blob ){.    int
2b90: 20 69 3b 0a 20 20 20 20 63 68 61 72 20 63 3b 0a   i;.    char c;.
2ba0: 20 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f      if( f & MEM_
2bb0: 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 63 20 3d  Dyn ){.      c =
2bc0: 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65   'z';.      asse
2bd0: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74  rt( (f & (MEM_St
2be0: 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29  atic|MEM_Ephem))
2bf0: 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==0 );.    }else
2c00: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61   if( f & MEM_Sta
2c10: 74 69 63 20 29 7b 0a 20 20 20 20 20 20 63 20 3d  tic ){.      c =
2c20: 20 27 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65   't';.      asse
2c30: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79  rt( (f & (MEM_Dy
2c40: 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30  n|MEM_Ephem))==0
2c50: 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66   );.    }else if
2c60: 28 20 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20  ( f & MEM_Ephem 
2c70: 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 65 27  ){.      c = 'e'
2c80: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
2c90: 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63  (f & (MEM_Static
2ca0: 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b  |MEM_Dyn))==0 );
2cb0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
2cc0: 20 20 63 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d    c = 's';.    }
2cd0: 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ..    sqlite3_sn
2ce0: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
2cf0: 2c 20 22 25 63 22 2c 20 63 29 3b 0a 20 20 20 20  , "%c", c);.    
2d00: 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53  zCsr += sqlite3S
2d10: 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20  trlen30(zCsr);. 
2d20: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
2d30: 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22  ntf(100, zCsr, "
2d40: 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a  %d[", pMem->n);.
2d50: 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69      zCsr += sqli
2d60: 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72  te3Strlen30(zCsr
2d70: 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  );.    for(i=0; 
2d80: 69 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e  i<16 && i<pMem->
2d90: 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73  n; i++){.      s
2da0: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
2db0: 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 30 32 58  100, zCsr, "%02X
2dc0: 22 2c 20 28 28 69 6e 74 29 70 4d 65 6d 2d 3e 7a  ", ((int)pMem->z
2dd0: 5b 69 5d 20 26 20 30 78 46 46 29 29 3b 0a 20 20  [i] & 0xFF));.  
2de0: 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69      zCsr += sqli
2df0: 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72  te3Strlen30(zCsr
2e00: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f 72  );.    }.    for
2e10: 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20 69 3c  (i=0; i<16 && i<
2e20: 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20  pMem->n; i++){. 
2e30: 20 20 20 20 20 63 68 61 72 20 7a 20 3d 20 70 4d       char z = pM
2e40: 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20 20 20 20  em->z[i];.      
2e50: 69 66 28 20 7a 3c 33 32 20 7c 7c 20 7a 3e 31 32  if( z<32 || z>12
2e60: 36 20 29 20 2a 7a 43 73 72 2b 2b 20 3d 20 27 2e  6 ) *zCsr++ = '.
2e70: 27 3b 0a 20 20 20 20 20 20 65 6c 73 65 20 2a 7a  ';.      else *z
2e80: 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20 20 20 7d  Csr++ = z;.    }
2e90: 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ..    sqlite3_sn
2ea0: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
2eb0: 2c 20 22 5d 25 73 22 2c 20 65 6e 63 6e 61 6d 65  , "]%s", encname
2ec0: 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20  s[pMem->enc]);. 
2ed0: 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74     zCsr += sqlit
2ee0: 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29  e3Strlen30(zCsr)
2ef0: 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45  ;.    if( f & ME
2f00: 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20  M_Zero ){.      
2f10: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
2f20: 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b 25 64 7a  (100, zCsr,"+%dz
2f30: 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65 72 6f 29  ",pMem->u.nZero)
2f40: 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20  ;.      zCsr += 
2f50: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
2f60: 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20  zCsr);.    }.   
2f70: 20 2a 7a 43 73 72 20 3d 20 27 5c 30 27 3b 0a 20   *zCsr = '\0';. 
2f80: 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d   }else if( f & M
2f90: 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 69 6e  EM_Str ){.    in
2fa0: 74 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a 42 75 66  t j, k;.    zBuf
2fb0: 5b 30 5d 20 3d 20 27 20 27 3b 0a 20 20 20 20 69  [0] = ' ';.    i
2fc0: 66 28 20 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29  f( f & MEM_Dyn )
2fd0: 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20  {.      zBuf[1] 
2fe0: 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73  = 'z';.      ass
2ff0: 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53  ert( (f & (MEM_S
3000: 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29  tatic|MEM_Ephem)
3010: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
3020: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74  e if( f & MEM_St
3030: 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20 7a 42  atic ){.      zB
3040: 75 66 5b 31 5d 20 3d 20 27 74 27 3b 0a 20 20 20  uf[1] = 't';.   
3050: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3060: 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68  (MEM_Dyn|MEM_Eph
3070: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
3080: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3090: 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20  _Ephem ){.      
30a0: 7a 42 75 66 5b 31 5d 20 3d 20 27 65 27 3b 0a 20  zBuf[1] = 'e';. 
30b0: 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20       assert( (f 
30c0: 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  & (MEM_Static|ME
30d0: 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20 20  M_Dyn))==0 );.  
30e0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a    }else{.      z
30f0: 42 75 66 5b 31 5d 20 3d 20 27 73 27 3b 0a 20 20  Buf[1] = 's';.  
3100: 20 20 7d 0a 20 20 20 20 6b 20 3d 20 32 3b 0a 20    }.    k = 2;. 
3110: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
3120: 6e 74 66 28 31 30 30 2c 20 26 7a 42 75 66 5b 6b  ntf(100, &zBuf[k
3130: 5d 2c 20 22 25 64 22 2c 20 70 4d 65 6d 2d 3e 6e  ], "%d", pMem->n
3140: 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69  );.    k += sqli
3150: 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a 42 75  te3Strlen30(&zBu
3160: 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b  f[k]);.    zBuf[
3170: 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20 20 20 20  k++] = '[';.    
3180: 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35 20 26 26  for(j=0; j<15 &&
3190: 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a 2b 2b 29   j<pMem->n; j++)
31a0: 7b 0a 20 20 20 20 20 20 75 38 20 63 20 3d 20 70  {.      u8 c = p
31b0: 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20 20 20 20  Mem->z[j];.     
31c0: 20 69 66 28 20 63 3e 3d 30 78 32 30 20 26 26 20   if( c>=0x20 && 
31d0: 63 3c 30 78 37 66 20 29 7b 0a 20 20 20 20 20 20  c<0x7f ){.      
31e0: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 63 3b    zBuf[k++] = c;
31f0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
3200: 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20        zBuf[k++] 
3210: 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 7d 0a 20  = '.';.      }. 
3220: 20 20 20 7d 0a 20 20 20 20 7a 42 75 66 5b 6b 2b     }.    zBuf[k+
3230: 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20 20 20 73 71  +] = ']';.    sq
3240: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
3250: 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20 65 6e 63  00,&zBuf[k], enc
3260: 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d  names[pMem->enc]
3270: 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69  );.    k += sqli
3280: 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a 42 75  te3Strlen30(&zBu
3290: 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b  f[k]);.    zBuf[
32a0: 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d 0a 7d 0a  k++] = 0;.  }.}.
32b0: 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
32c0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a  QLITE_DEBUG./*.*
32d0: 2a 20 50 72 69 6e 74 20 74 68 65 20 76 61 6c 75  * Print the valu
32e0: 65 20 6f 66 20 61 20 72 65 67 69 73 74 65 72 20  e of a register 
32f0: 66 6f 72 20 74 72 61 63 69 6e 67 20 70 75 72 70  for tracing purp
3300: 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74 69 63 20  oses:.*/.static 
3310: 76 6f 69 64 20 6d 65 6d 54 72 61 63 65 50 72 69  void memTracePri
3320: 6e 74 28 4d 65 6d 20 2a 70 29 7b 0a 20 20 69 66  nt(Mem *p){.  if
3330: 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ( p->flags & MEM
3340: 5f 55 6e 64 65 66 69 6e 65 64 20 29 7b 0a 20 20  _Undefined ){.  
3350: 20 20 70 72 69 6e 74 66 28 22 20 75 6e 64 65 66    printf(" undef
3360: 69 6e 65 64 22 29 3b 0a 20 20 7d 65 6c 73 65 20  ined");.  }else 
3370: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
3380: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70  EM_Null ){.    p
3390: 72 69 6e 74 66 28 22 20 4e 55 4c 4c 22 29 3b 0a  rintf(" NULL");.
33a0: 20 20 7d 65 6c 73 65 20 69 66 28 20 28 70 2d 3e    }else if( (p->
33b0: 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74  flags & (MEM_Int
33c0: 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28 4d 45 4d  |MEM_Str))==(MEM
33d0: 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 20 29 7b  _Int|MEM_Str) ){
33e0: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 73 69  .    printf(" si
33f0: 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b  :%lld", p->u.i);
3400: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e  .  }else if( p->
3410: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
3420: 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20  ){.    printf(" 
3430: 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29  i:%lld", p->u.i)
3440: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
3450: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
3460: 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20 69 66 28  OINT.  }else if(
3470: 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f   p->flags & MEM_
3480: 52 65 61 6c 20 29 7b 0a 20 20 20 20 70 72 69 6e  Real ){.    prin
3490: 74 66 28 22 20 72 3a 25 67 22 2c 20 70 2d 3e 72  tf(" r:%g", p->r
34a0: 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73  );.#endif.  }els
34b0: 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26  e if( p->flags &
34c0: 20 4d 45 4d 5f 52 6f 77 53 65 74 20 29 7b 0a 20   MEM_RowSet ){. 
34d0: 20 20 20 70 72 69 6e 74 66 28 22 20 28 72 6f 77     printf(" (row
34e0: 73 65 74 29 22 29 3b 0a 20 20 7d 65 6c 73 65 7b  set)");.  }else{
34f0: 0a 20 20 20 20 63 68 61 72 20 7a 42 75 66 5b 32  .    char zBuf[2
3500: 30 30 5d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  00];.    sqlite3
3510: 56 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69  VdbeMemPrettyPri
3520: 6e 74 28 70 2c 20 7a 42 75 66 29 3b 0a 20 20 20  nt(p, zBuf);.   
3530: 20 70 72 69 6e 74 66 28 22 20 25 73 22 2c 20 7a   printf(" %s", z
3540: 42 75 66 29 3b 0a 20 20 7d 0a 7d 0a 73 74 61 74  Buf);.  }.}.stat
3550: 69 63 20 76 6f 69 64 20 72 65 67 69 73 74 65 72  ic void register
3560: 54 72 61 63 65 28 69 6e 74 20 69 52 65 67 2c 20  Trace(int iReg, 
3570: 4d 65 6d 20 2a 70 29 7b 0a 20 20 70 72 69 6e 74  Mem *p){.  print
3580: 66 28 22 52 45 47 5b 25 64 5d 20 3d 20 22 2c 20  f("REG[%d] = ", 
3590: 69 52 65 67 29 3b 0a 20 20 6d 65 6d 54 72 61 63  iReg);.  memTrac
35a0: 65 50 72 69 6e 74 28 70 29 3b 0a 20 20 70 72 69  ePrint(p);.  pri
35b0: 6e 74 66 28 22 5c 6e 22 29 3b 0a 7d 0a 23 65 6e  ntf("\n");.}.#en
35c0: 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
35d0: 54 45 5f 44 45 42 55 47 0a 23 20 20 64 65 66 69  TE_DEBUG.#  defi
35e0: 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  ne REGISTER_TRAC
35f0: 45 28 52 2c 4d 29 20 69 66 28 64 62 2d 3e 66 6c  E(R,M) if(db->fl
3600: 61 67 73 26 53 51 4c 49 54 45 5f 56 64 62 65 54  ags&SQLITE_VdbeT
3610: 72 61 63 65 29 72 65 67 69 73 74 65 72 54 72 61  race)registerTra
3620: 63 65 28 52 2c 4d 29 0a 23 65 6c 73 65 0a 23 20  ce(R,M).#else.# 
3630: 20 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52   define REGISTER
3640: 5f 54 52 41 43 45 28 52 2c 4d 29 0a 23 65 6e 64  _TRACE(R,M).#end
3650: 69 66 0a 0a 0a 23 69 66 64 65 66 20 56 44 42 45  if...#ifdef VDBE
3660: 5f 50 52 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a  _PROFILE../* .**
3670: 20 68 77 74 69 6d 65 2e 68 20 63 6f 6e 74 61 69   hwtime.h contai
3680: 6e 73 20 69 6e 6c 69 6e 65 20 61 73 73 65 6d 62  ns inline assemb
3690: 6c 65 72 20 63 6f 64 65 20 66 6f 72 20 69 6d 70  ler code for imp
36a0: 6c 65 6d 65 6e 74 69 6e 67 20 0a 2a 2a 20 68 69  lementing .** hi
36b0: 67 68 2d 70 65 72 66 6f 72 6d 61 6e 63 65 20 74  gh-performance t
36c0: 69 6d 69 6e 67 20 72 6f 75 74 69 6e 65 73 2e 0a  iming routines..
36d0: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 68 77 74  */.#include "hwt
36e0: 69 6d 65 2e 68 22 0a 0a 23 65 6e 64 69 66 0a 0a  ime.h"..#endif..
36f0: 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 2f  #ifndef NDEBUG./
3700: 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69  *.** This functi
3710: 6f 6e 20 69 73 20 6f 6e 6c 79 20 63 61 6c 6c 65  on is only calle
3720: 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e  d from within an
3730: 20 61 73 73 65 72 74 28 29 20 65 78 70 72 65 73   assert() expres
3740: 73 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63 68 65 63  sion. It.** chec
3750: 6b 73 20 74 68 61 74 20 74 68 65 20 73 71 6c 69  ks that the sqli
3760: 74 65 33 2e 6e 54 72 61 6e 73 61 63 74 69 6f 6e  te3.nTransaction
3770: 20 76 61 72 69 61 62 6c 65 20 69 73 20 63 6f 72   variable is cor
3780: 72 65 63 74 6c 79 20 73 65 74 20 74 6f 0a 2a 2a  rectly set to.**
3790: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e   the number of n
37a0: 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  on-transaction s
37b0: 61 76 65 70 6f 69 6e 74 73 20 63 75 72 72 65 6e  avepoints curren
37c0: 74 6c 79 20 69 6e 20 74 68 65 20 0a 2a 2a 20 6c  tly in the .** l
37d0: 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74  inked list start
37e0: 69 6e 67 20 61 74 20 73 71 6c 69 74 65 33 2e 70  ing at sqlite3.p
37f0: 53 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a  Savepoint..** .*
3800: 2a 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20  * Usage:.**.**  
3810: 20 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b     assert( check
3820: 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64  SavepointCount(d
3830: 62 29 20 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20  b) );.*/.static 
3840: 69 6e 74 20 63 68 65 63 6b 53 61 76 65 70 6f 69  int checkSavepoi
3850: 6e 74 43 6f 75 6e 74 28 73 71 6c 69 74 65 33 20  ntCount(sqlite3 
3860: 2a 64 62 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20  *db){.  int n = 
3870: 30 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  0;.  Savepoint *
3880: 70 3b 0a 20 20 66 6f 72 28 70 3d 64 62 2d 3e 70  p;.  for(p=db->p
3890: 53 61 76 65 70 6f 69 6e 74 3b 20 70 3b 20 70 3d  Savepoint; p; p=
38a0: 70 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20  p->pNext) n++;. 
38b0: 20 61 73 73 65 72 74 28 20 6e 3d 3d 28 64 62 2d   assert( n==(db-
38c0: 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62  >nSavepoint + db
38d0: 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
38e0: 61 76 65 70 6f 69 6e 74 29 20 29 3b 0a 20 20 72  avepoint) );.  r
38f0: 65 74 75 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69  eturn 1;.}.#endi
3900: 66 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75 74  f.../*.** Execut
3910: 65 20 61 73 20 6d 75 63 68 20 6f 66 20 61 20 56  e as much of a V
3920: 44 42 45 20 70 72 6f 67 72 61 6d 20 61 73 20 77  DBE program as w
3930: 65 20 63 61 6e 2e 0a 2a 2a 20 54 68 69 73 20 69  e can..** This i
3940: 73 20 74 68 65 20 63 6f 72 65 20 6f 66 20 73 71  s the core of sq
3950: 6c 69 74 65 33 5f 73 74 65 70 28 29 2e 20 20 0a  lite3_step().  .
3960: 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64  */.int sqlite3Vd
3970: 62 65 45 78 65 63 28 0a 20 20 56 64 62 65 20 2a  beExec(.  Vdbe *
3980: 70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p               
3990: 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45       /* The VDBE
39a0: 20 2a 2f 0a 29 7b 0a 20 20 69 6e 74 20 70 63 3d   */.){.  int pc=
39b0: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  0;              
39c0: 20 20 20 20 2f 2a 20 54 68 65 20 70 72 6f 67 72      /* The progr
39d0: 61 6d 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20  am counter */.  
39e0: 4f 70 20 2a 61 4f 70 20 3d 20 70 2d 3e 61 4f 70  Op *aOp = p->aOp
39f0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  ;          /* Co
3a00: 70 79 20 6f 66 20 70 2d 3e 61 4f 70 20 2a 2f 0a  py of p->aOp */.
3a10: 20 20 4f 70 20 2a 70 4f 70 3b 20 20 20 20 20 20    Op *pOp;      
3a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
3a30: 43 75 72 72 65 6e 74 20 6f 70 65 72 61 74 69 6f  Current operatio
3a40: 6e 20 2a 2f 0a 20 20 69 6e 74 20 72 63 20 3d 20  n */.  int rc = 
3a50: 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20 20  SQLITE_OK;      
3a60: 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65    /* Value to re
3a70: 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65  turn */.  sqlite
3a80: 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 20 20  3 *db = p->db;  
3a90: 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61       /* The data
3aa0: 62 61 73 65 20 2a 2f 0a 20 20 75 38 20 72 65 73  base */.  u8 res
3ab0: 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20  etSchemaOnFault 
3ac0: 3d 20 30 3b 20 2f 2a 20 52 65 73 65 74 20 73 63  = 0; /* Reset sc
3ad0: 68 65 6d 61 20 61 66 74 65 72 20 61 6e 20 65 72  hema after an er
3ae0: 72 6f 72 20 69 66 20 70 6f 73 69 74 69 76 65 20  ror if positive 
3af0: 2a 2f 0a 20 20 75 38 20 65 6e 63 6f 64 69 6e 67  */.  u8 encoding
3b00: 20 3d 20 45 4e 43 28 64 62 29 3b 20 20 20 20 20   = ENC(db);     
3b10: 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
3b20: 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e  encoding */.  in
3b30: 74 20 69 43 6f 6d 70 61 72 65 20 3d 20 30 3b 20  t iCompare = 0; 
3b40: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
3b50: 6c 74 20 6f 66 20 6c 61 73 74 20 4f 50 5f 43 6f  lt of last OP_Co
3b60: 6d 70 61 72 65 20 6f 70 65 72 61 74 69 6f 6e 20  mpare operation 
3b70: 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 56  */.  unsigned nV
3b80: 6d 53 74 65 70 20 3d 20 30 3b 20 20 20 20 20 20  mStep = 0;      
3b90: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76 69 72  /* Number of vir
3ba0: 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 73 74 65  tual machine ste
3bb0: 70 73 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ps */.#ifndef SQ
3bc0: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45  LITE_OMIT_PROGRE
3bd0: 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 75 6e  SS_CALLBACK.  un
3be0: 73 69 67 6e 65 64 20 6e 50 72 6f 67 72 65 73 73  signed nProgress
3bf0: 4c 69 6d 69 74 20 3d 20 30 3b 2f 2a 20 49 6e 76  Limit = 0;/* Inv
3c00: 6f 6b 65 20 78 50 72 6f 67 72 65 73 73 28 29 20  oke xProgress() 
3c10: 77 68 65 6e 20 6e 56 6d 53 74 65 70 20 72 65 61  when nVmStep rea
3c20: 63 68 65 73 20 74 68 69 73 20 2a 2f 0a 23 65 6e  ches this */.#en
3c30: 64 69 66 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 20  dif.  Mem *aMem 
3c40: 3d 20 70 2d 3e 61 4d 65 6d 3b 20 20 20 20 20 20  = p->aMem;      
3c50: 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61   /* Copy of p->a
3c60: 4d 65 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49  Mem */.  Mem *pI
3c70: 6e 31 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  n1 = 0;         
3c80: 20 20 20 20 2f 2a 20 31 73 74 20 69 6e 70 75 74      /* 1st input
3c90: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65   operand */.  Me
3ca0: 6d 20 2a 70 49 6e 32 20 3d 20 30 3b 20 20 20 20  m *pIn2 = 0;    
3cb0: 20 20 20 20 20 20 20 20 20 2f 2a 20 32 6e 64 20           /* 2nd 
3cc0: 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  input operand */
3cd0: 0a 20 20 4d 65 6d 20 2a 70 49 6e 33 20 3d 20 30  .  Mem *pIn3 = 0
3ce0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
3cf0: 20 33 72 64 20 69 6e 70 75 74 20 6f 70 65 72 61   3rd input opera
3d00: 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4f 75  nd */.  Mem *pOu
3d10: 74 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  t = 0;          
3d20: 20 20 20 2f 2a 20 4f 75 74 70 75 74 20 6f 70 65     /* Output ope
3d30: 72 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61  rand */.  int *a
3d40: 50 65 72 6d 75 74 65 20 3d 20 30 3b 20 20 20 20  Permute = 0;    
3d50: 20 20 20 20 20 2f 2a 20 50 65 72 6d 75 74 61 74       /* Permutat
3d60: 69 6f 6e 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66  ion of columns f
3d70: 6f 72 20 4f 50 5f 43 6f 6d 70 61 72 65 20 2a 2f  or OP_Compare */
3d80: 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77 69 64  .  i64 lastRowid
3d90: 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64   = db->lastRowid
3da0: 3b 20 20 2f 2a 20 53 61 76 65 64 20 76 61 6c 75  ;  /* Saved valu
3db0: 65 20 6f 66 20 74 68 65 20 6c 61 73 74 20 69 6e  e of the last in
3dc0: 73 65 72 74 20 52 4f 57 49 44 20 2a 2f 0a 23 69  sert ROWID */.#i
3dd0: 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c  fdef VDBE_PROFIL
3de0: 45 0a 20 20 75 36 34 20 73 74 61 72 74 3b 20 20  E.  u64 start;  
3df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3e00: 2a 20 43 50 55 20 63 6c 6f 63 6b 20 63 6f 75 6e  * CPU clock coun
3e10: 74 20 61 74 20 73 74 61 72 74 20 6f 66 20 6f 70  t at start of op
3e20: 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  code */.#endif. 
3e30: 20 2f 2a 2a 2a 20 49 4e 53 45 52 54 20 53 54 41   /*** INSERT STA
3e40: 43 4b 20 55 4e 49 4f 4e 20 48 45 52 45 20 2a 2a  CK UNION HERE **
3e50: 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  */..  assert( p-
3e60: 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47  >magic==VDBE_MAG
3e70: 49 43 5f 52 55 4e 20 29 3b 20 20 2f 2a 20 73 71  IC_RUN );  /* sq
3e80: 6c 69 74 65 33 5f 73 74 65 70 28 29 20 76 65 72  lite3_step() ver
3e90: 69 66 69 65 73 20 74 68 69 73 20 2a 2f 0a 20 20  ifies this */.  
3ea0: 73 71 6c 69 74 65 33 56 64 62 65 45 6e 74 65 72  sqlite3VdbeEnter
3eb0: 28 70 29 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63  (p);.  if( p->rc
3ec0: 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29  ==SQLITE_NOMEM )
3ed0: 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61  {.    /* This ha
3ee0: 70 70 65 6e 73 20 69 66 20 61 20 6d 61 6c 6c 6f  ppens if a mallo
3ef0: 63 28 29 20 69 6e 73 69 64 65 20 61 20 63 61 6c  c() inside a cal
3f00: 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 6f 6c  l to sqlite3_col
3f10: 75 6d 6e 5f 74 65 78 74 28 29 20 6f 72 0a 20 20  umn_text() or.  
3f20: 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c    ** sqlite3_col
3f30: 75 6d 6e 5f 74 65 78 74 31 36 28 29 20 66 61 69  umn_text16() fai
3f40: 6c 65 64 2e 20 20 2a 2f 0a 20 20 20 20 67 6f 74  led.  */.    got
3f50: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
3f60: 61 73 73 65 72 74 28 20 70 2d 3e 72 63 3d 3d 53  assert( p->rc==S
3f70: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70 2d 3e 72  QLITE_OK || p->r
3f80: 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  c==SQLITE_BUSY )
3f90: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  ;.  assert( p->b
3fa0: 49 73 52 65 61 64 65 72 20 7c 7c 20 70 2d 3e 72  IsReader || p->r
3fb0: 65 61 64 4f 6e 6c 79 21 3d 30 20 29 3b 0a 20 20  eadOnly!=0 );.  
3fc0: 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f  p->rc = SQLITE_O
3fd0: 4b 3b 0a 20 20 70 2d 3e 69 43 75 72 72 65 6e 74  K;.  p->iCurrent
3fe0: 54 69 6d 65 20 3d 20 30 3b 0a 20 20 61 73 73 65  Time = 0;.  asse
3ff0: 72 74 28 20 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d  rt( p->explain==
4000: 30 20 29 3b 0a 20 20 70 2d 3e 70 52 65 73 75 6c  0 );.  p->pResul
4010: 74 53 65 74 20 3d 20 30 3b 0a 20 20 64 62 2d 3e  tSet = 0;.  db->
4020: 62 75 73 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73  busyHandler.nBus
4030: 79 20 3d 20 30 3b 0a 20 20 69 66 28 20 64 62 2d  y = 0;.  if( db-
4040: 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65  >u1.isInterrupte
4050: 64 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  d ) goto abort_d
4060: 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b  ue_to_interrupt;
4070: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f  .  sqlite3VdbeIO
4080: 54 72 61 63 65 53 71 6c 28 70 29 3b 0a 23 69 66  TraceSql(p);.#if
4090: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
40a0: 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41  _PROGRESS_CALLBA
40b0: 43 4b 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72  CK.  if( db->xPr
40c0: 6f 67 72 65 73 73 20 29 7b 0a 20 20 20 20 61 73  ogress ){.    as
40d0: 73 65 72 74 28 20 30 20 3c 20 64 62 2d 3e 6e 50  sert( 0 < db->nP
40e0: 72 6f 67 72 65 73 73 4f 70 73 20 29 3b 0a 20 20  rogressOps );.  
40f0: 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74    nProgressLimit
4100: 20 3d 20 28 75 6e 73 69 67 6e 65 64 29 70 2d 3e   = (unsigned)p->
4110: 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f  aCounter[SQLITE_
4120: 53 54 4d 54 53 54 41 54 55 53 5f 56 4d 5f 53 54  STMTSTATUS_VM_ST
4130: 45 50 5d 3b 0a 20 20 20 20 69 66 28 20 6e 50 72  EP];.    if( nPr
4140: 6f 67 72 65 73 73 4c 69 6d 69 74 3d 3d 30 20 29  ogressLimit==0 )
4150: 7b 0a 20 20 20 20 20 20 6e 50 72 6f 67 72 65 73  {.      nProgres
4160: 73 4c 69 6d 69 74 20 3d 20 64 62 2d 3e 6e 50 72  sLimit = db->nPr
4170: 6f 67 72 65 73 73 4f 70 73 3b 0a 20 20 20 20 7d  ogressOps;.    }
4180: 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 50 72 6f  else{.      nPro
4190: 67 72 65 73 73 4c 69 6d 69 74 20 25 3d 20 28 75  gressLimit %= (u
41a0: 6e 73 69 67 6e 65 64 29 64 62 2d 3e 6e 50 72 6f  nsigned)db->nPro
41b0: 67 72 65 73 73 4f 70 73 3b 0a 20 20 20 20 7d 0a  gressOps;.    }.
41c0: 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66 64 65    }.#endif.#ifde
41d0: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
41e0: 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e   sqlite3BeginBen
41f0: 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 69  ignMalloc();.  i
4200: 66 28 20 70 2d 3e 70 63 3d 3d 30 0a 20 20 20 26  f( p->pc==0.   &
4210: 26 20 28 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20  & (p->db->flags 
4220: 26 20 28 53 51 4c 49 54 45 5f 56 64 62 65 4c 69  & (SQLITE_VdbeLi
4230: 73 74 69 6e 67 7c 53 51 4c 49 54 45 5f 56 64 62  sting|SQLITE_Vdb
4240: 65 45 51 50 7c 53 51 4c 49 54 45 5f 56 64 62 65  eEQP|SQLITE_Vdbe
4250: 54 72 61 63 65 29 29 21 3d 30 0a 20 20 29 7b 0a  Trace))!=0.  ){.
4260: 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 69      int i;.    i
4270: 6e 74 20 6f 6e 63 65 20 3d 20 31 3b 0a 20 20 20  nt once = 1;.   
4280: 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e   sqlite3VdbePrin
4290: 74 53 71 6c 28 70 29 3b 0a 20 20 20 20 69 66 28  tSql(p);.    if(
42a0: 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20   p->db->flags & 
42b0: 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69  SQLITE_VdbeListi
42c0: 6e 67 20 29 7b 0a 20 20 20 20 20 20 70 72 69 6e  ng ){.      prin
42d0: 74 66 28 22 56 44 42 45 20 50 72 6f 67 72 61 6d  tf("VDBE Program
42e0: 20 4c 69 73 74 69 6e 67 3a 5c 6e 22 29 3b 0a 20   Listing:\n");. 
42f0: 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
4300: 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20  p->nOp; i++){.  
4310: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
4320: 65 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c  ePrintOp(stdout,
4330: 20 69 2c 20 26 61 4f 70 5b 69 5d 29 3b 0a 20 20   i, &aOp[i]);.  
4340: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
4350: 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73  if( p->db->flags
4360: 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51   & SQLITE_VdbeEQ
4370: 50 20 29 7b 0a 20 20 20 20 20 20 66 6f 72 28 69  P ){.      for(i
4380: 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b  =0; i<p->nOp; i+
4390: 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  +){.        if( 
43a0: 61 4f 70 5b 69 5d 2e 6f 70 63 6f 64 65 3d 3d 4f  aOp[i].opcode==O
43b0: 50 5f 45 78 70 6c 61 69 6e 20 29 7b 0a 20 20 20  P_Explain ){.   
43c0: 20 20 20 20 20 20 20 69 66 28 20 6f 6e 63 65 20         if( once 
43d0: 29 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 51  ) printf("VDBE Q
43e0: 75 65 72 79 20 50 6c 61 6e 3a 5c 6e 22 29 3b 0a  uery Plan:\n");.
43f0: 20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74 66            printf
4400: 28 22 25 73 5c 6e 22 2c 20 61 4f 70 5b 69 5d 2e  ("%s\n", aOp[i].
4410: 70 34 2e 7a 29 3b 0a 20 20 20 20 20 20 20 20 20  p4.z);.         
4420: 20 6f 6e 63 65 20 3d 20 30 3b 0a 20 20 20 20 20   once = 0;.     
4430: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
4440: 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62   }.    if( p->db
4450: 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
4460: 5f 56 64 62 65 54 72 61 63 65 20 29 20 20 70 72  _VdbeTrace )  pr
4470: 69 6e 74 66 28 22 56 44 42 45 20 54 72 61 63 65  intf("VDBE Trace
4480: 3a 5c 6e 22 29 3b 0a 20 20 7d 0a 20 20 73 71 6c  :\n");.  }.  sql
4490: 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c  ite3EndBenignMal
44a0: 6c 6f 63 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20  loc();.#endif.  
44b0: 66 6f 72 28 70 63 3d 70 2d 3e 70 63 3b 20 72 63  for(pc=p->pc; rc
44c0: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 3b 20 70 63 2b  ==SQLITE_OK; pc+
44d0: 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  +){.    assert( 
44e0: 70 63 3e 3d 30 20 26 26 20 70 63 3c 70 2d 3e 6e  pc>=0 && pc<p->n
44f0: 4f 70 20 29 3b 0a 20 20 20 20 69 66 28 20 64 62  Op );.    if( db
4500: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
4510: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 23 69   goto no_mem;.#i
4520: 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c  fdef VDBE_PROFIL
4530: 45 0a 20 20 20 20 73 74 61 72 74 20 3d 20 73 71  E.    start = sq
4540: 6c 69 74 65 33 48 77 74 69 6d 65 28 29 3b 0a 23  lite3Hwtime();.#
4550: 65 6e 64 69 66 0a 20 20 20 20 6e 56 6d 53 74 65  endif.    nVmSte
4560: 70 2b 2b 3b 0a 20 20 20 20 70 4f 70 20 3d 20 26  p++;.    pOp = &
4570: 61 4f 70 5b 70 63 5d 3b 0a 0a 20 20 20 20 2f 2a  aOp[pc];..    /*
4580: 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20 74 72 61 63   Only allow trac
4590: 69 6e 67 20 69 66 20 53 51 4c 49 54 45 5f 44 45  ing if SQLITE_DE
45a0: 42 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a  BUG is defined..
45b0: 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51      */.#ifdef SQ
45c0: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69  LITE_DEBUG.    i
45d0: 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  f( db->flags & S
45e0: 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20  QLITE_VdbeTrace 
45f0: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
4600: 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f  VdbePrintOp(stdo
4610: 75 74 2c 20 70 63 2c 20 70 4f 70 29 3b 0a 20 20  ut, pc, pOp);.  
4620: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20    }.#endif.     
4630: 20 0a 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b 20   ..    /* Check 
4640: 74 6f 20 73 65 65 20 69 66 20 77 65 20 6e 65 65  to see if we nee
4650: 64 20 74 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e  d to simulate an
4660: 20 69 6e 74 65 72 72 75 70 74 2e 20 20 54 68 69   interrupt.  Thi
4670: 73 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73 0a 20  s only happens. 
4680: 20 20 20 2a 2a 20 69 66 20 77 65 20 68 61 76 65     ** if we have
4690: 20 61 20 73 70 65 63 69 61 6c 20 74 65 73 74 20   a special test 
46a0: 62 75 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a 23 69  build..    */.#i
46b0: 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
46c0: 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
46d0: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
46e0: 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  >0 ){.      sqli
46f0: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f  te3_interrupt_co
4700: 75 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 69 66 28  unt--;.      if(
4710: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
4720: 70 74 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b 0a 20  pt_count==0 ){. 
4730: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69         sqlite3_i
4740: 6e 74 65 72 72 75 70 74 28 64 62 29 3b 0a 20 20  nterrupt(db);.  
4750: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64      }.    }.#end
4760: 69 66 0a 0a 20 20 20 20 2f 2a 20 4f 6e 20 61 6e  if..    /* On an
4770: 79 20 6f 70 63 6f 64 65 20 77 69 74 68 20 74 68  y opcode with th
4780: 65 20 22 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  e "out2-prerelea
4790: 73 65 22 20 74 61 67 2c 20 66 72 65 65 20 61 6e  se" tag, free an
47a0: 79 0a 20 20 20 20 2a 2a 20 65 78 74 65 72 6e 61  y.    ** externa
47b0: 6c 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 6f 75  l allocations ou
47c0: 74 20 6f 66 20 6d 65 6d 5b 70 32 5d 20 61 6e 64  t of mem[p2] and
47d0: 20 73 65 74 20 6d 65 6d 5b 70 32 5d 20 74 6f 20   set mem[p2] to 
47e0: 62 65 0a 20 20 20 20 2a 2a 20 61 6e 20 75 6e 64  be.    ** an und
47f0: 65 66 69 6e 65 64 20 69 6e 74 65 67 65 72 2e 20  efined integer. 
4800: 20 4f 70 63 6f 64 65 73 20 77 69 6c 6c 20 65 69   Opcodes will ei
4810: 74 68 65 72 20 66 69 6c 6c 20 69 6e 20 74 68 65  ther fill in the
4820: 20 69 6e 74 65 67 65 72 0a 20 20 20 20 2a 2a 20   integer.    ** 
4830: 76 61 6c 75 65 20 6f 72 20 63 6f 6e 76 65 72 74  value or convert
4840: 20 6d 65 6d 5b 70 32 5d 20 74 6f 20 61 20 64 69   mem[p2] to a di
4850: 66 66 65 72 65 6e 74 20 74 79 70 65 2e 0a 20 20  fferent type..  
4860: 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28    */.    assert(
4870: 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 3d 3d 73   pOp->opflags==s
4880: 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70  qlite3OpcodeProp
4890: 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65  erty[pOp->opcode
48a0: 5d 20 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70  ] );.    if( pOp
48b0: 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c  ->opflags & OPFL
48c0: 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c 45 41 53  G_OUT2_PRERELEAS
48d0: 45 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  E ){.      asser
48e0: 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a  t( pOp->p2>0 );.
48f0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
4900: 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p2<=(p->nMem-
4910: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
4920: 20 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65       pOut = &aMe
4930: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20  m[pOp->p2];.    
4940: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
4950: 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20  ge(p, pOut);.   
4960: 20 20 20 56 64 62 65 4d 65 6d 52 65 6c 65 61 73     VdbeMemReleas
4970: 65 28 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 70  e(pOut);.      p
4980: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
4990: 5f 49 6e 74 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  _Int;.    }..   
49a0: 20 2f 2a 20 53 61 6e 69 74 79 20 63 68 65 63 6b   /* Sanity check
49b0: 69 6e 67 20 6f 6e 20 6f 74 68 65 72 20 6f 70 65  ing on other ope
49c0: 72 61 6e 64 73 20 2a 2f 0a 23 69 66 64 65 66 20  rands */.#ifdef 
49d0: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
49e0: 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61   if( (pOp->opfla
49f0: 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e 31 29 21  gs & OPFLG_IN1)!
4a00: 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  =0 ){.      asse
4a10: 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b  rt( pOp->p1>0 );
4a20: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
4a30: 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p1<=(p->nMem
4a40: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
4a50: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
4a60: 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
4a70: 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a 20 20 20 20  Op->p1]) );.    
4a80: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
4a90: 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76  3VdbeCheckMemInv
4aa0: 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f  ariants(&aMem[pO
4ab0: 70 2d 3e 70 31 5d 29 20 29 3b 0a 20 20 20 20 20  p->p1]) );.     
4ac0: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
4ad0: 70 4f 70 2d 3e 70 31 2c 20 26 61 4d 65 6d 5b 70  pOp->p1, &aMem[p
4ae0: 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 20 20 7d 0a  Op->p1]);.    }.
4af0: 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70      if( (pOp->op
4b00: 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e  flags & OPFLG_IN
4b10: 32 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61  2)!=0 ){.      a
4b20: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
4b30: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
4b40: 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e  ( pOp->p2<=(p->n
4b50: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
4b60: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
4b70: 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65   memIsValid(&aMe
4b80: 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a 20  m[pOp->p2]) );. 
4b90: 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
4ba0: 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d  ite3VdbeCheckMem
4bb0: 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d  Invariants(&aMem
4bc0: 5b 70 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20  [pOp->p2]) );.  
4bd0: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
4be0: 43 45 28 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65  CE(pOp->p2, &aMe
4bf0: 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20  m[pOp->p2]);.   
4c00: 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d   }.    if( (pOp-
4c10: 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47  >opflags & OPFLG
4c20: 5f 49 4e 33 29 21 3d 30 20 29 7b 0a 20 20 20 20  _IN3)!=0 ){.    
4c30: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
4c40: 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73  3>0 );.      ass
4c50: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  ert( pOp->p3<=(p
4c60: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
4c70: 72 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  r) );.      asse
4c80: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
4c90: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29  aMem[pOp->p3]) )
4ca0: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
4cb0: 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
4cc0: 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 26 61  MemInvariants(&a
4cd0: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b  Mem[pOp->p3]) );
4ce0: 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f  .      REGISTER_
4cf0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 26  TRACE(pOp->p3, &
4d00: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a  aMem[pOp->p3]);.
4d10: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70      }.    if( (p
4d20: 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50  Op->opflags & OP
4d30: 46 4c 47 5f 4f 55 54 32 29 21 3d 30 20 29 7b 0a  FLG_OUT2)!=0 ){.
4d40: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
4d50: 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20  p->p2>0 );.     
4d60: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
4d70: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
4d80: 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20  ursor) );.      
4d90: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
4da0: 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  (p, &aMem[pOp->p
4db0: 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  2]);.    }.    i
4dc0: 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73  f( (pOp->opflags
4dd0: 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33 29 21 3d   & OPFLG_OUT3)!=
4de0: 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
4df0: 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
4e00: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
4e10: 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p3<=(p->nMem-
4e20: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
4e30: 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43       memAboutToC
4e40: 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70  hange(p, &aMem[p
4e50: 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 7d 0a  Op->p3]);.    }.
4e60: 23 65 6e 64 69 66 0a 20 20 0a 20 20 20 20 73 77  #endif.  .    sw
4e70: 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  itch( pOp->opcod
4e80: 65 20 29 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a  e ){../*********
4e90: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
4ea0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
4eb0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
4ec0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
4ed0: 2a 2a 2a 2a 0a 2a 2a 20 57 68 61 74 20 66 6f 6c  ****.** What fol
4ee0: 6c 6f 77 73 20 69 73 20 61 20 6d 61 73 73 69 76  lows is a massiv
4ef0: 65 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65  e switch stateme
4f00: 6e 74 20 77 68 65 72 65 20 65 61 63 68 20 63 61  nt where each ca
4f10: 73 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 0a  se implements a.
4f20: 2a 2a 20 73 65 70 61 72 61 74 65 20 69 6e 73 74  ** separate inst
4f30: 72 75 63 74 69 6f 6e 20 69 6e 20 74 68 65 20 76  ruction in the v
4f40: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20  irtual machine. 
4f50: 20 49 66 20 77 65 20 66 6f 6c 6c 6f 77 20 74 68   If we follow th
4f60: 65 20 75 73 75 61 6c 0a 2a 2a 20 69 6e 64 65 6e  e usual.** inden
4f70: 74 61 74 69 6f 6e 20 63 6f 6e 76 65 6e 74 69 6f  tation conventio
4f80: 6e 73 2c 20 65 61 63 68 20 63 61 73 65 20 73 68  ns, each case sh
4f90: 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e 74 65 64  ould be indented
4fa0: 20 62 79 20 36 20 73 70 61 63 65 73 2e 20 20 42   by 6 spaces.  B
4fb0: 75 74 0a 2a 2a 20 74 68 61 74 20 69 73 20 61 20  ut.** that is a 
4fc0: 6c 6f 74 20 6f 66 20 77 61 73 74 65 64 20 73 70  lot of wasted sp
4fd0: 61 63 65 20 6f 6e 20 74 68 65 20 6c 65 66 74 20  ace on the left 
4fe0: 6d 61 72 67 69 6e 2e 20 20 53 6f 20 74 68 65 20  margin.  So the 
4ff0: 63 6f 64 65 20 77 69 74 68 69 6e 0a 2a 2a 20 74  code within.** t
5000: 68 65 20 73 77 69 74 63 68 20 73 74 61 74 65 6d  he switch statem
5010: 65 6e 74 20 77 69 6c 6c 20 62 72 65 61 6b 20 77  ent will break w
5020: 69 74 68 20 63 6f 6e 76 65 6e 74 69 6f 6e 20 61  ith convention a
5030: 6e 64 20 62 65 20 66 6c 75 73 68 2d 6c 65 66 74  nd be flush-left
5040: 2e 20 41 6e 6f 74 68 65 72 0a 2a 2a 20 62 69 67  . Another.** big
5050: 20 63 6f 6d 6d 65 6e 74 20 28 73 69 6d 69 6c 61   comment (simila
5060: 72 20 74 6f 20 74 68 69 73 20 6f 6e 65 29 20 77  r to this one) w
5070: 69 6c 6c 20 6d 61 72 6b 20 74 68 65 20 70 6f 69  ill mark the poi
5080: 6e 74 20 69 6e 20 74 68 65 20 63 6f 64 65 20 77  nt in the code w
5090: 68 65 72 65 0a 2a 2a 20 77 65 20 74 72 61 6e 73  here.** we trans
50a0: 69 74 69 6f 6e 20 62 61 63 6b 20 74 6f 20 6e 6f  ition back to no
50b0: 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e  rmal indentation
50c0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 72 6d  ..**.** The form
50d0: 61 74 74 69 6e 67 20 6f 66 20 65 61 63 68 20 63  atting of each c
50e0: 61 73 65 20 69 73 20 69 6d 70 6f 72 74 61 6e 74  ase is important
50f0: 2e 20 20 54 68 65 20 6d 61 6b 65 66 69 6c 65 20  .  The makefile 
5100: 66 6f 72 20 53 51 4c 69 74 65 0a 2a 2a 20 67 65  for SQLite.** ge
5110: 6e 65 72 61 74 65 73 20 74 77 6f 20 43 20 66 69  nerates two C fi
5120: 6c 65 73 20 22 6f 70 63 6f 64 65 73 2e 68 22 20  les "opcodes.h" 
5130: 61 6e 64 20 22 6f 70 63 6f 64 65 73 2e 63 22 20  and "opcodes.c" 
5140: 62 79 20 73 63 61 6e 6e 69 6e 67 20 74 68 69 73  by scanning this
5150: 0a 2a 2a 20 66 69 6c 65 20 6c 6f 6f 6b 69 6e 67  .** file looking
5160: 20 66 6f 72 20 6c 69 6e 65 73 20 74 68 61 74 20   for lines that 
5170: 62 65 67 69 6e 20 77 69 74 68 20 22 63 61 73 65  begin with "case
5180: 20 4f 50 5f 22 2e 20 20 54 68 65 20 6f 70 63 6f   OP_".  The opco
5190: 64 65 73 2e 68 20 66 69 6c 65 73 0a 2a 2a 20 77  des.h files.** w
51a0: 69 6c 6c 20 62 65 20 66 69 6c 6c 65 64 20 77 69  ill be filled wi
51b0: 74 68 20 23 64 65 66 69 6e 65 73 20 74 68 61 74  th #defines that
51c0: 20 67 69 76 65 20 75 6e 69 71 75 65 20 69 6e 74   give unique int
51d0: 65 67 65 72 20 76 61 6c 75 65 73 20 74 6f 20 65  eger values to e
51e0: 61 63 68 0a 2a 2a 20 6f 70 63 6f 64 65 20 61 6e  ach.** opcode an
51f0: 64 20 74 68 65 20 6f 70 63 6f 64 65 73 2e 63 20  d the opcodes.c 
5200: 66 69 6c 65 20 69 73 20 66 69 6c 6c 65 64 20 77  file is filled w
5210: 69 74 68 20 61 6e 20 61 72 72 61 79 20 6f 66 20  ith an array of 
5220: 73 74 72 69 6e 67 73 20 77 68 65 72 65 0a 2a 2a  strings where.**
5230: 20 65 61 63 68 20 73 74 72 69 6e 67 20 69 73 20   each string is 
5240: 74 68 65 20 73 79 6d 62 6f 6c 69 63 20 6e 61 6d  the symbolic nam
5250: 65 20 66 6f 72 20 74 68 65 20 63 6f 72 72 65 73  e for the corres
5260: 70 6f 6e 64 69 6e 67 20 6f 70 63 6f 64 65 2e 20  ponding opcode. 
5270: 20 49 66 20 74 68 65 0a 2a 2a 20 63 61 73 65 20   If the.** case 
5280: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 66 6f 6c  statement is fol
5290: 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6d 6d 65  lowed by a comme
52a0: 6e 74 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22  nt of the form "
52b0: 2f 23 20 73 61 6d 65 20 61 73 20 2e 2e 2e 20 23  /# same as ... #
52c0: 2f 22 0a 2a 2a 20 74 68 61 74 20 63 6f 6d 6d 65  /".** that comme
52d0: 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20 64 65  nt is used to de
52e0: 74 65 72 6d 69 6e 65 20 74 68 65 20 70 61 72 74  termine the part
52f0: 69 63 75 6c 61 72 20 76 61 6c 75 65 20 6f 66 20  icular value of 
5300: 74 68 65 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  the opcode..**.*
5310: 2a 20 4f 74 68 65 72 20 6b 65 79 77 6f 72 64 73  * Other keywords
5320: 20 69 6e 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20   in the comment 
5330: 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20 65 61 63  that follows eac
5340: 68 20 63 61 73 65 20 61 72 65 20 75 73 65 64 20  h case are used 
5350: 74 6f 0a 2a 2a 20 63 6f 6e 73 74 72 75 63 74 20  to.** construct 
5360: 74 68 65 20 4f 50 46 4c 47 5f 49 4e 49 54 49 41  the OPFLG_INITIA
5370: 4c 49 5a 45 52 20 76 61 6c 75 65 20 74 68 61 74  LIZER value that
5380: 20 69 6e 69 74 69 61 6c 69 7a 65 73 20 6f 70 63   initializes opc
5390: 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 2e 0a 2a  odeProperty[]..*
53a0: 2a 20 4b 65 79 77 6f 72 64 73 20 69 6e 63 6c 75  * Keywords inclu
53b0: 64 65 3a 20 69 6e 31 2c 20 69 6e 32 2c 20 69 6e  de: in1, in2, in
53c0: 33 2c 20 6f 75 74 32 5f 70 72 65 72 65 6c 65 61  3, out2_prerelea
53d0: 73 65 2c 20 6f 75 74 32 2c 20 6f 75 74 33 2e 20  se, out2, out3. 
53e0: 20 53 65 65 0a 2a 2a 20 74 68 65 20 6d 6b 6f 70   See.** the mkop
53f0: 63 6f 64 65 68 2e 61 77 6b 20 73 63 72 69 70 74  codeh.awk script
5400: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
5410: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a  information..**.
5420: 2a 2a 20 44 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  ** Documentation
5430: 20 61 62 6f 75 74 20 56 44 42 45 20 6f 70 63 6f   about VDBE opco
5440: 64 65 73 20 69 73 20 67 65 6e 65 72 61 74 65 64  des is generated
5450: 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74 68 69   by scanning thi
5460: 73 20 66 69 6c 65 0a 2a 2a 20 66 6f 72 20 6c 69  s file.** for li
5470: 6e 65 73 20 6f 66 20 74 68 61 74 20 63 6f 6e 74  nes of that cont
5480: 61 69 6e 20 22 4f 70 63 6f 64 65 3a 22 2e 20 20  ain "Opcode:".  
5490: 54 68 61 74 20 6c 69 6e 65 20 61 6e 64 20 61 6c  That line and al
54a0: 6c 20 73 75 62 73 65 71 75 65 6e 74 0a 2a 2a 20  l subsequent.** 
54b0: 63 6f 6d 6d 65 6e 74 20 6c 69 6e 65 73 20 61 72  comment lines ar
54c0: 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 67 65  e used in the ge
54d0: 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  neration of the 
54e0: 6f 70 63 6f 64 65 2e 68 74 6d 6c 20 64 6f 63 75  opcode.html docu
54f0: 6d 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 66 69 6c  mentation.** fil
5500: 65 2e 0a 2a 2a 0a 2a 2a 20 53 55 4d 4d 41 52 59  e..**.** SUMMARY
5510: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 46 6f 72 6d  :.**.**     Form
5520: 61 74 74 69 6e 67 20 69 73 20 69 6d 70 6f 72 74  atting is import
5530: 61 6e 74 20 74 6f 20 73 63 72 69 70 74 73 20 74  ant to scripts t
5540: 68 61 74 20 73 63 61 6e 20 74 68 69 73 20 66 69  hat scan this fi
5550: 6c 65 2e 0a 2a 2a 20 20 20 20 20 44 6f 20 6e 6f  le..**     Do no
5560: 74 20 64 65 76 69 61 74 65 20 66 72 6f 6d 20 74  t deviate from t
5570: 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 73 74  he formatting st
5580: 79 6c 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  yle currently in
5590: 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a   use..**.*******
55a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
55b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
55c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
55d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
55e0: 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  ******/../* Opco
55f0: 64 65 3a 20 20 47 6f 74 6f 20 2a 20 50 32 20 2a  de:  Goto * P2 *
5600: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6e 20 75 6e   * *.**.** An un
5610: 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 6a 75 6d 70  conditional jump
5620: 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e 0a   to address P2..
5630: 2a 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 73 74  ** The next inst
5640: 72 75 63 74 69 6f 6e 20 65 78 65 63 75 74 65 64  ruction executed
5650: 20 77 69 6c 6c 20 62 65 20 0a 2a 2a 20 74 68 65   will be .** the
5660: 20 6f 6e 65 20 61 74 20 69 6e 64 65 78 20 50 32   one at index P2
5670: 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e   from the beginn
5680: 69 6e 67 20 6f 66 0a 2a 2a 20 74 68 65 20 70 72  ing of.** the pr
5690: 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ogram..**.** The
56a0: 20 50 31 20 70 61 72 61 6d 65 74 65 72 20 69 73   P1 parameter is
56b0: 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 75 73   not actually us
56c0: 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  ed by this opcod
56d0: 65 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 74 0a  e.  However, it.
56e0: 2a 2a 20 69 73 20 73 6f 6d 65 74 69 6d 65 73 20  ** is sometimes 
56f0: 73 65 74 20 74 6f 20 31 20 69 6e 73 74 65 61 64  set to 1 instead
5700: 20 6f 66 20 30 20 61 73 20 61 20 68 69 6e 74 20   of 0 as a hint 
5710: 74 6f 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c  to the command-l
5720: 69 6e 65 20 73 68 65 6c 6c 0a 2a 2a 20 74 68 61  ine shell.** tha
5730: 74 20 74 68 69 73 20 47 6f 74 6f 20 69 73 20 74  t this Goto is t
5740: 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20 61 20 6c  he bottom of a l
5750: 6f 6f 70 20 61 6e 64 20 74 68 61 74 20 74 68 65  oop and that the
5760: 20 6c 69 6e 65 73 20 66 72 6f 6d 20 50 32 20 64   lines from P2 d
5770: 6f 77 6e 0a 2a 2a 20 74 6f 20 74 68 65 20 63 75  own.** to the cu
5780: 72 72 65 6e 74 20 6c 69 6e 65 20 73 68 6f 75 6c  rrent line shoul
5790: 64 20 62 65 20 69 6e 64 65 6e 74 65 64 20 66 6f  d be indented fo
57a0: 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74  r EXPLAIN output
57b0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 74  ..*/.case OP_Got
57c0: 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  o: {            
57d0: 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 70 63   /* jump */.  pc
57e0: 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
57f0: 0a 20 20 2f 2a 20 4f 70 63 6f 64 65 73 20 74 68  .  /* Opcodes th
5800: 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 74  at are used as t
5810: 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20 61 20 6c  he bottom of a l
5820: 6f 6f 70 20 28 4f 50 5f 4e 65 78 74 2c 20 4f 50  oop (OP_Next, OP
5830: 5f 50 72 65 76 2c 0a 20 20 2a 2a 20 4f 50 5f 56  _Prev,.  ** OP_V
5840: 4e 65 78 74 2c 20 4f 50 5f 52 6f 77 53 65 74 4e  Next, OP_RowSetN
5850: 65 78 74 2c 20 6f 72 20 4f 50 5f 53 6f 72 74 65  ext, or OP_Sorte
5860: 72 4e 65 78 74 29 20 61 6c 6c 20 6a 75 6d 70 20  rNext) all jump 
5870: 68 65 72 65 20 75 70 6f 6e 0a 20 20 2a 2a 20 63  here upon.  ** c
5880: 6f 6d 70 6c 65 74 69 6f 6e 2e 20 20 43 68 65 63  ompletion.  Chec
5890: 6b 20 74 6f 20 73 65 65 20 69 66 20 73 71 6c 69  k to see if sqli
58a0: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20  te3_interrupt() 
58b0: 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 0a  has been called.
58c0: 20 20 2a 2a 20 6f 72 20 69 66 20 74 68 65 20 70    ** or if the p
58d0: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
58e0: 20 6e 65 65 64 73 20 74 6f 20 62 65 20 69 6e 76   needs to be inv
58f0: 6f 6b 65 64 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a  oked. .  **.  **
5900: 20 54 68 69 73 20 63 6f 64 65 20 75 73 65 73 20   This code uses 
5910: 75 6e 73 74 72 75 63 74 75 72 65 64 20 22 67 6f  unstructured "go
5920: 74 6f 22 20 73 74 61 74 65 6d 65 6e 74 73 20 61  to" statements a
5930: 6e 64 20 64 6f 65 73 20 6e 6f 74 20 6c 6f 6f 6b  nd does not look
5940: 20 63 6c 65 61 6e 2e 0a 20 20 2a 2a 20 42 75 74   clean..  ** But
5950: 20 74 68 61 74 20 69 73 20 6e 6f 74 20 64 75 65   that is not due
5960: 20 74 6f 20 73 6c 6f 70 70 79 20 63 6f 64 69 6e   to sloppy codin
5970: 67 20 68 61 62 69 74 73 2e 20 54 68 65 20 63 6f  g habits. The co
5980: 64 65 20 69 73 20 77 72 69 74 74 65 6e 20 74 68  de is written th
5990: 69 73 0a 20 20 2a 2a 20 77 61 79 20 66 6f 72 20  is.  ** way for 
59a0: 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 74 6f 20  performance, to 
59b0: 61 76 6f 69 64 20 68 61 76 69 6e 67 20 74 6f 20  avoid having to 
59c0: 72 75 6e 20 74 68 65 20 69 6e 74 65 72 72 75 70  run the interrup
59d0: 74 20 61 6e 64 20 70 72 6f 67 72 65 73 73 0a 20  t and progress. 
59e0: 20 2a 2a 20 63 68 65 63 6b 73 20 6f 6e 20 65 76   ** checks on ev
59f0: 65 72 79 20 6f 70 63 6f 64 65 2e 20 20 54 68 69  ery opcode.  Thi
5a00: 73 20 68 65 6c 70 73 20 73 71 6c 69 74 65 33 5f  s helps sqlite3_
5a10: 73 74 65 70 28 29 20 74 6f 20 72 75 6e 20 61 62  step() to run ab
5a20: 6f 75 74 20 31 2e 35 25 0a 20 20 2a 2a 20 66 61  out 1.5%.  ** fa
5a30: 73 74 65 72 20 61 63 63 6f 72 64 69 6e 67 20 74  ster according t
5a40: 6f 20 22 76 61 6c 67 72 69 6e 64 20 2d 2d 74 6f  o "valgrind --to
5a50: 6f 6c 3d 63 61 63 68 65 67 72 69 6e 64 22 20 2a  ol=cachegrind" *
5a60: 2f 0a 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  /.check_for_inte
5a70: 72 72 75 70 74 3a 0a 20 20 69 66 28 20 64 62 2d  rrupt:.  if( db-
5a80: 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65  >u1.isInterrupte
5a90: 64 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  d ) goto abort_d
5aa0: 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b  ue_to_interrupt;
5ab0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
5ac0: 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41  OMIT_PROGRESS_CA
5ad0: 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20 43 61 6c 6c  LLBACK.  /* Call
5ae0: 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61   the progress ca
5af0: 6c 6c 62 61 63 6b 20 69 66 20 69 74 20 69 73 20  llback if it is 
5b00: 63 6f 6e 66 69 67 75 72 65 64 20 61 6e 64 20 74  configured and t
5b10: 68 65 20 72 65 71 75 69 72 65 64 20 6e 75 6d 62  he required numb
5b20: 65 72 0a 20 20 2a 2a 20 6f 66 20 56 44 42 45 20  er.  ** of VDBE 
5b30: 6f 70 73 20 68 61 76 65 20 62 65 65 6e 20 65 78  ops have been ex
5b40: 65 63 75 74 65 64 20 28 65 69 74 68 65 72 20 73  ecuted (either s
5b50: 69 6e 63 65 20 74 68 69 73 20 69 6e 76 6f 63 61  ince this invoca
5b60: 74 69 6f 6e 20 6f 66 0a 20 20 2a 2a 20 73 71 6c  tion of.  ** sql
5b70: 69 74 65 33 56 64 62 65 45 78 65 63 28 29 20 6f  ite3VdbeExec() o
5b80: 72 20 73 69 6e 63 65 20 6c 61 73 74 20 74 69 6d  r since last tim
5b90: 65 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63  e the progress c
5ba0: 61 6c 6c 62 61 63 6b 20 77 61 73 20 63 61 6c 6c  allback was call
5bb0: 65 64 29 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65  ed)..  ** If the
5bc0: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
5bd0: 63 6b 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a  ck returns non-z
5be0: 65 72 6f 2c 20 65 78 69 74 20 74 68 65 20 76 69  ero, exit the vi
5bf0: 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 77 69  rtual machine wi
5c00: 74 68 0a 20 20 2a 2a 20 61 20 72 65 74 75 72 6e  th.  ** a return
5c10: 20 63 6f 64 65 20 53 51 4c 49 54 45 5f 41 42 4f   code SQLITE_ABO
5c20: 52 54 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64  RT..  */.  if( d
5c30: 62 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d 30 20  b->xProgress!=0 
5c40: 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e 50 72 6f  && nVmStep>=nPro
5c50: 67 72 65 73 73 4c 69 6d 69 74 20 29 7b 0a 20 20  gressLimit ){.  
5c60: 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 50    assert( db->nP
5c70: 72 6f 67 72 65 73 73 4f 70 73 21 3d 30 20 29 3b  rogressOps!=0 );
5c80: 0a 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69  .    nProgressLi
5c90: 6d 69 74 20 3d 20 6e 56 6d 53 74 65 70 20 2b 20  mit = nVmStep + 
5ca0: 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73  db->nProgressOps
5cb0: 20 2d 20 28 6e 56 6d 53 74 65 70 25 64 62 2d 3e   - (nVmStep%db->
5cc0: 6e 50 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a 20  nProgressOps);. 
5cd0: 20 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67     if( db->xProg
5ce0: 72 65 73 73 28 64 62 2d 3e 70 50 72 6f 67 72 65  ress(db->pProgre
5cf0: 73 73 41 72 67 29 20 29 7b 0a 20 20 20 20 20 20  ssArg) ){.      
5d00: 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45  rc = SQLITE_INTE
5d10: 52 52 55 50 54 3b 0a 20 20 20 20 20 20 67 6f 74  RRUPT;.      got
5d20: 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c  o vdbe_error_hal
5d30: 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e  t;.    }.  }.#en
5d40: 64 69 66 0a 20 20 0a 20 20 62 72 65 61 6b 3b 0a  dif.  .  break;.
5d50: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47  }../* Opcode:  G
5d60: 6f 73 75 62 20 50 31 20 50 32 20 2a 20 2a 20 2a  osub P1 P2 * * *
5d70: 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65  .**.** Write the
5d80: 20 63 75 72 72 65 6e 74 20 61 64 64 72 65 73 73   current address
5d90: 20 6f 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   onto register P
5da0: 31 0a 2a 2a 20 61 6e 64 20 74 68 65 6e 20 6a 75  1.** and then ju
5db0: 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32  mp to address P2
5dc0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 73  ..*/.case OP_Gos
5dd0: 75 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ub: {           
5de0: 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73   /* jump */.  as
5df0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
5e00: 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e  && pOp->p1<=(p->
5e10: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
5e20: 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   );.  pIn1 = &aM
5e30: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
5e40: 73 73 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79  ssert( VdbeMemDy
5e50: 6e 61 6d 69 63 28 70 49 6e 31 29 3d 3d 30 20 29  namic(pIn1)==0 )
5e60: 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
5e70: 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20  ange(p, pIn1);. 
5e80: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d   pIn1->flags = M
5e90: 45 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e  EM_Int;.  pIn1->
5ea0: 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52 45 47 49  u.i = pc;.  REGI
5eb0: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
5ec0: 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 63 20  p1, pIn1);.  pc 
5ed0: 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
5ee0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
5ef0: 63 6f 64 65 3a 20 20 52 65 74 75 72 6e 20 50 31  code:  Return P1
5f00: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a   * * * *.**.** J
5f10: 75 6d 70 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ump to the next 
5f20: 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 66 74 65  instruction afte
5f30: 72 20 74 68 65 20 61 64 64 72 65 73 73 20 69 6e  r the address in
5f40: 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 41   register P1.  A
5f50: 66 74 65 72 0a 2a 2a 20 74 68 65 20 6a 75 6d 70  fter.** the jump
5f60: 2c 20 72 65 67 69 73 74 65 72 20 50 31 20 62 65  , register P1 be
5f70: 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65 64 2e  comes undefined.
5f80: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 74 75  .*/.case OP_Retu
5f90: 72 6e 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  rn: {           
5fa0: 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  /* in1 */.  pIn1
5fb0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
5fc0: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
5fd0: 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e  1->flags==MEM_In
5fe0: 74 20 29 3b 0a 20 20 70 63 20 3d 20 28 69 6e 74  t );.  pc = (int
5ff0: 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49  )pIn1->u.i;.  pI
6000: 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  n1->flags = MEM_
6010: 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65  Undefined;.  bre
6020: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
6030: 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 20  : InitCoroutine 
6040: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
6050: 2a 2a 20 53 65 74 20 75 70 20 72 65 67 69 73 74  ** Set up regist
6060: 65 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74  er P1 so that it
6070: 20 77 69 6c 6c 20 4f 50 5f 59 69 65 6c 64 20 74   will OP_Yield t
6080: 6f 20 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65  o the co-routine
6090: 0a 2a 2a 20 6c 6f 63 61 74 65 64 20 61 74 20 61  .** located at a
60a0: 64 64 72 65 73 73 20 50 33 2e 0a 2a 2a 0a 2a 2a  ddress P3..**.**
60b0: 20 49 66 20 50 32 21 3d 30 20 74 68 65 6e 20 74   If P2!=0 then t
60c0: 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65 20 69 6d  he co-routine im
60d0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 6d 6d  plementation imm
60e0: 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 73  ediately follows
60f0: 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f 64 65 2e  .** this opcode.
6100: 20 20 53 6f 20 6a 75 6d 70 20 6f 76 65 72 20 74    So jump over t
6110: 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65 20 69 6d  he co-routine im
6120: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 0a  plementation to.
6130: 2a 2a 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a  ** address P2..*
6140: 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 69 74 43 6f  /.case OP_InitCo
6150: 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20 20 20 2f  routine: {     /
6160: 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65  * jump */.  asse
6170: 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26  rt( pOp->p1>0 &&
6180: 20 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e    pOp->p1<=(p->n
6190: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
61a0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
61b0: 2d 3e 70 32 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p2>=0 && pOp->
61c0: 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 61  p2<p->nOp );.  a
61d0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d  ssert( pOp->p3>=
61e0: 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 70 2d 3e  0 && pOp->p3<p->
61f0: 6e 4f 70 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  nOp );.  pOut = 
6200: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
6210: 20 20 61 73 73 65 72 74 28 20 21 56 64 62 65 4d    assert( !VdbeM
6220: 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 20  emDynamic(pOut) 
6230: 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
6240: 20 70 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a 20 20   pOp->p3 - 1;.  
6250: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
6260: 4d 5f 49 6e 74 3b 0a 20 20 69 66 28 20 70 4f 70  M_Int;.  if( pOp
6270: 2d 3e 70 32 20 29 20 70 63 20 3d 20 70 4f 70 2d  ->p2 ) pc = pOp-
6280: 3e 70 32 20 2d 20 31 3b 0a 20 20 62 72 65 61 6b  >p2 - 1;.  break
6290: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
62a0: 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65 20 50 31   EndCoroutine P1
62b0: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54   * * * *.**.** T
62c0: 68 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61  he instruction a
62d0: 74 20 74 68 65 20 61 64 64 72 65 73 73 20 69 6e  t the address in
62e0: 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
62f0: 61 6e 20 4f 50 5f 59 69 65 6c 64 2e 0a 2a 2a 20  an OP_Yield..** 
6300: 4a 75 6d 70 20 74 6f 20 74 68 65 20 50 32 20 70  Jump to the P2 p
6310: 61 72 61 6d 65 74 65 72 20 6f 66 20 74 68 61 74  arameter of that
6320: 20 4f 50 5f 59 69 65 6c 64 2e 0a 2a 2a 20 41 66   OP_Yield..** Af
6330: 74 65 72 20 74 68 65 20 6a 75 6d 70 2c 20 72 65  ter the jump, re
6340: 67 69 73 74 65 72 20 50 31 20 62 65 63 6f 6d 65  gister P1 become
6350: 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a  s undefined..*/.
6360: 63 61 73 65 20 4f 50 5f 45 6e 64 43 6f 72 6f 75  case OP_EndCorou
6370: 74 69 6e 65 3a 20 7b 20 20 20 20 20 20 20 20 20  tine: {         
6380: 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 56 64    /* in1 */.  Vd
6390: 62 65 4f 70 20 2a 70 43 61 6c 6c 65 72 3b 0a 20  beOp *pCaller;. 
63a0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
63b0: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
63c0: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d  ( pIn1->flags==M
63d0: 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65  EM_Int );.  asse
63e0: 72 74 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 3d 30  rt( pIn1->u.i>=0
63f0: 20 26 26 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 2d   && pIn1->u.i<p-
6400: 3e 6e 4f 70 20 29 3b 0a 20 20 70 43 61 6c 6c 65  >nOp );.  pCalle
6410: 72 20 3d 20 26 61 4f 70 5b 70 49 6e 31 2d 3e 75  r = &aOp[pIn1->u
6420: 2e 69 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  .i];.  assert( p
6430: 43 61 6c 6c 65 72 2d 3e 6f 70 63 6f 64 65 3d 3d  Caller->opcode==
6440: 4f 50 5f 59 69 65 6c 64 20 29 3b 0a 20 20 61 73  OP_Yield );.  as
6450: 73 65 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e 70  sert( pCaller->p
6460: 32 3e 3d 30 20 26 26 20 70 43 61 6c 6c 65 72 2d  2>=0 && pCaller-
6470: 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20  >p2<p->nOp );.  
6480: 70 63 20 3d 20 70 43 61 6c 6c 65 72 2d 3e 70 32  pc = pCaller->p2
6490: 20 2d 20 31 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c   - 1;.  pIn1->fl
64a0: 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69  ags = MEM_Undefi
64b0: 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ned;.  break;.}.
64c0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 59 69 65  ./* Opcode:  Yie
64d0: 6c 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ld P1 P2 * * *.*
64e0: 2a 0a 2a 2a 20 53 77 61 70 20 74 68 65 20 70 72  *.** Swap the pr
64f0: 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 77 69  ogram counter wi
6500: 74 68 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  th the value in 
6510: 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a  register P1..**.
6520: 2a 2a 20 49 66 20 74 68 65 20 63 6f 2d 72 6f 75  ** If the co-rou
6530: 74 69 6e 65 20 65 6e 64 73 20 77 69 74 68 20 4f  tine ends with O
6540: 50 5f 59 69 65 6c 64 20 6f 72 20 4f 50 5f 52 65  P_Yield or OP_Re
6550: 74 75 72 6e 20 74 68 65 6e 20 63 6f 6e 74 69 6e  turn then contin
6560: 75 65 0a 2a 2a 20 74 6f 20 74 68 65 20 6e 65 78  ue.** to the nex
6570: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  t instruction.  
6580: 42 75 74 20 69 66 20 74 68 65 20 63 6f 2d 72 6f  But if the co-ro
6590: 75 74 69 6e 65 20 65 6e 64 73 20 77 69 74 68 0a  utine ends with.
65a0: 2a 2a 20 4f 50 5f 45 6e 64 43 6f 72 6f 75 74 69  ** OP_EndCorouti
65b0: 6e 65 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  ne, jump immedia
65c0: 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2f 0a 63  tely to P2..*/.c
65d0: 61 73 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 20  ase OP_Yield: { 
65e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
65f0: 31 2c 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74  1, jump */.  int
6600: 20 70 63 44 65 73 74 3b 0a 20 20 70 49 6e 31 20   pcDest;.  pIn1 
6610: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
6620: 3b 0a 20 20 61 73 73 65 72 74 28 20 56 64 62 65  ;.  assert( Vdbe
6630: 4d 65 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29  MemDynamic(pIn1)
6640: 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66  ==0 );.  pIn1->f
6650: 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
6660: 20 20 70 63 44 65 73 74 20 3d 20 28 69 6e 74 29    pcDest = (int)
6670: 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e  pIn1->u.i;.  pIn
6680: 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52  1->u.i = pc;.  R
6690: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
66a0: 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20  p->p1, pIn1);.  
66b0: 70 63 20 3d 20 70 63 44 65 73 74 3b 0a 20 20 62  pc = pcDest;.  b
66c0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
66d0: 64 65 3a 20 20 48 61 6c 74 49 66 4e 75 6c 6c 20  de:  HaltIfNull 
66e0: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
66f0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 66  ** Synopsis:  if
6700: 20 72 5b 50 33 5d 3d 6e 75 6c 6c 20 68 61 6c 74   r[P3]=null halt
6710: 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65  .**.** Check the
6720: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
6730: 65 72 20 50 33 2e 20 20 49 66 20 69 74 20 69 73  er P3.  If it is
6740: 20 4e 55 4c 4c 20 74 68 65 6e 20 48 61 6c 74 20   NULL then Halt 
6750: 75 73 69 6e 67 0a 2a 2a 20 70 61 72 61 6d 65 74  using.** paramet
6760: 65 72 20 50 31 2c 20 50 32 2c 20 61 6e 64 20 50  er P1, P2, and P
6770: 34 20 61 73 20 69 66 20 74 68 69 73 20 77 65 72  4 as if this wer
6780: 65 20 61 20 48 61 6c 74 20 69 6e 73 74 72 75 63  e a Halt instruc
6790: 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a  tion.  If the.**
67a0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
67b0: 65 72 20 50 33 20 69 73 20 6e 6f 74 20 4e 55 4c  er P3 is not NUL
67c0: 4c 2c 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75  L, then this rou
67d0: 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d 6f 70 2e  tine is a no-op.
67e0: 0a 2a 2a 20 54 68 65 20 50 35 20 70 61 72 61 6d  .** The P5 param
67f0: 65 74 65 72 20 73 68 6f 75 6c 64 20 62 65 20 31  eter should be 1
6800: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c  ..*/.case OP_Hal
6810: 74 49 66 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20  tIfNull: {      
6820: 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33  /* in3 */.  pIn3
6830: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
6840: 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 33 2d 3e  ];.  if( (pIn3->
6850: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
6860: 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20  )==0 ) break;.  
6870: 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
6880: 69 6e 74 6f 20 4f 50 5f 48 61 6c 74 20 2a 2f 0a  into OP_Halt */.
6890: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48  }../* Opcode:  H
68a0: 61 6c 74 20 50 31 20 50 32 20 2a 20 50 34 20 50  alt P1 P2 * P4 P
68b0: 35 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20 69 6d 6d  5.**.** Exit imm
68c0: 65 64 69 61 74 65 6c 79 2e 20 20 41 6c 6c 20 6f  ediately.  All o
68d0: 70 65 6e 20 63 75 72 73 6f 72 73 2c 20 65 74 63  pen cursors, etc
68e0: 20 61 72 65 20 63 6c 6f 73 65 64 0a 2a 2a 20 61   are closed.** a
68f0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2a  utomatically..**
6900: 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 72 65  .** P1 is the re
6910: 73 75 6c 74 20 63 6f 64 65 20 72 65 74 75 72 6e  sult code return
6920: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 65 78  ed by sqlite3_ex
6930: 65 63 28 29 2c 20 73 71 6c 69 74 65 33 5f 72 65  ec(), sqlite3_re
6940: 73 65 74 28 29 2c 0a 2a 2a 20 6f 72 20 73 71 6c  set(),.** or sql
6950: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29 2e  ite3_finalize().
6960: 20 20 46 6f 72 20 61 20 6e 6f 72 6d 61 6c 20 68    For a normal h
6970: 61 6c 74 2c 20 74 68 69 73 20 73 68 6f 75 6c 64  alt, this should
6980: 20 62 65 20 53 51 4c 49 54 45 5f 4f 4b 20 28 30   be SQLITE_OK (0
6990: 29 2e 0a 2a 2a 20 46 6f 72 20 65 72 72 6f 72 73  )..** For errors
69a0: 2c 20 69 74 20 63 61 6e 20 62 65 20 73 6f 6d 65  , it can be some
69b0: 20 6f 74 68 65 72 20 76 61 6c 75 65 2e 20 20 49   other value.  I
69c0: 66 20 50 31 21 3d 30 20 74 68 65 6e 20 50 32 20  f P1!=0 then P2 
69d0: 77 69 6c 6c 20 64 65 74 65 72 6d 69 6e 65 0a 2a  will determine.*
69e0: 2a 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  * whether or not
69f0: 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65   to rollback the
6a00: 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63   current transac
6a10: 74 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20 72 6f  tion.  Do not ro
6a20: 6c 6c 62 61 63 6b 0a 2a 2a 20 69 66 20 50 32 3d  llback.** if P2=
6a30: 3d 4f 45 5f 46 61 69 6c 2e 20 44 6f 20 74 68 65  =OE_Fail. Do the
6a40: 20 72 6f 6c 6c 62 61 63 6b 20 69 66 20 50 32 3d   rollback if P2=
6a50: 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20 20 49  =OE_Rollback.  I
6a60: 66 20 50 32 3d 3d 4f 45 5f 41 62 6f 72 74 2c 0a  f P2==OE_Abort,.
6a70: 2a 2a 20 74 68 65 6e 20 62 61 63 6b 20 6f 75 74  ** then back out
6a80: 20 61 6c 6c 20 63 68 61 6e 67 65 73 20 74 68 61   all changes tha
6a90: 74 20 68 61 76 65 20 6f 63 63 75 72 72 65 64 20  t have occurred 
6aa0: 64 75 72 69 6e 67 20 74 68 69 73 20 65 78 65 63  during this exec
6ab0: 75 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20  ution of the.** 
6ac0: 56 44 42 45 2c 20 62 75 74 20 64 6f 20 6e 6f 74  VDBE, but do not
6ad0: 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72   rollback the tr
6ae0: 61 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a  ansaction. .**.*
6af0: 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 6e  * If P4 is not n
6b00: 75 6c 6c 20 74 68 65 6e 20 69 74 20 69 73 20 61  ull then it is a
6b10: 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
6b20: 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 50 35  string..**.** P5
6b30: 20 69 73 20 61 20 76 61 6c 75 65 20 62 65 74 77   is a value betw
6b40: 65 65 6e 20 30 20 61 6e 64 20 34 2c 20 69 6e 63  een 0 and 4, inc
6b50: 6c 75 73 69 76 65 2c 20 74 68 61 74 20 6d 6f 64  lusive, that mod
6b60: 69 66 69 65 73 20 74 68 65 20 50 34 20 73 74 72  ifies the P4 str
6b70: 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 30 3a  ing..**.**    0:
6b80: 20 20 28 6e 6f 20 63 68 61 6e 67 65 29 0a 2a 2a    (no change).**
6b90: 20 20 20 20 31 3a 20 20 4e 4f 54 20 4e 55 4c 4c      1:  NOT NULL
6ba0: 20 63 6f 6e 74 72 61 69 6e 74 20 66 61 69 6c 65   contraint faile
6bb0: 64 3a 20 50 34 0a 2a 2a 20 20 20 20 32 3a 20 20  d: P4.**    2:  
6bc0: 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
6bd0: 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20  t failed: P4.** 
6be0: 20 20 20 33 3a 20 20 43 48 45 43 4b 20 63 6f 6e     3:  CHECK con
6bf0: 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20  straint failed: 
6c00: 50 34 0a 2a 2a 20 20 20 20 34 3a 20 20 46 4f 52  P4.**    4:  FOR
6c10: 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61  EIGN KEY constra
6c20: 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a  int failed: P4.*
6c30: 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f  *.** If P5 is no
6c40: 74 20 7a 65 72 6f 20 61 6e 64 20 50 34 20 69 73  t zero and P4 is
6c50: 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 65 76 65 72   NULL, then ever
6c60: 79 74 68 69 6e 67 20 61 66 74 65 72 20 74 68 65  ything after the
6c70: 20 22 3a 22 20 69 73 0a 2a 2a 20 6f 6d 69 74 74   ":" is.** omitt
6c80: 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20  ed..**.** There 
6c90: 69 73 20 61 6e 20 69 6d 70 6c 69 65 64 20 22 48  is an implied "H
6ca0: 61 6c 74 20 30 20 30 20 30 22 20 69 6e 73 74 72  alt 0 0 0" instr
6cb0: 75 63 74 69 6f 6e 20 69 6e 73 65 72 74 65 64 20  uction inserted 
6cc0: 61 74 20 74 68 65 20 76 65 72 79 20 65 6e 64 20  at the very end 
6cd0: 6f 66 0a 2a 2a 20 65 76 65 72 79 20 70 72 6f 67  of.** every prog
6ce0: 72 61 6d 2e 20 20 53 6f 20 61 20 6a 75 6d 70 20  ram.  So a jump 
6cf0: 70 61 73 74 20 74 68 65 20 6c 61 73 74 20 69 6e  past the last in
6d00: 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68 65  struction of the
6d10: 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 69 73 20 74   program.** is t
6d20: 68 65 20 73 61 6d 65 20 61 73 20 65 78 65 63 75  he same as execu
6d30: 74 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63 61  ting Halt..*/.ca
6d40: 73 65 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20 20  se OP_Halt: {.  
6d50: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70  const char *zTyp
6d60: 65 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  e;.  const char 
6d70: 2a 7a 4c 6f 67 46 6d 74 3b 0a 0a 20 20 69 66 28  *zLogFmt;..  if(
6d80: 20 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c 49 54 45   pOp->p1==SQLITE
6d90: 5f 4f 4b 20 26 26 20 70 2d 3e 70 46 72 61 6d 65  _OK && p->pFrame
6da0: 20 29 7b 0a 20 20 20 20 2f 2a 20 48 61 6c 74 20   ){.    /* Halt 
6db0: 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e  the sub-program.
6dc0: 20 52 65 74 75 72 6e 20 63 6f 6e 74 72 6f 6c 20   Return control 
6dd0: 74 6f 20 74 68 65 20 70 61 72 65 6e 74 20 66 72  to the parent fr
6de0: 61 6d 65 2e 20 2a 2f 0a 20 20 20 20 56 64 62 65  ame. */.    Vdbe
6df0: 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 20 3d 20  Frame *pFrame = 
6e00: 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 20 20 70  p->pFrame;.    p
6e10: 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d  ->pFrame = pFram
6e20: 65 2d 3e 70 50 61 72 65 6e 74 3b 0a 20 20 20 20  e->pParent;.    
6e30: 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20 20  p->nFrame--;.   
6e40: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
6e50: 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43  hanges(db, p->nC
6e60: 68 61 6e 67 65 29 3b 0a 20 20 20 20 70 63 20 3d  hange);.    pc =
6e70: 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 61 6d   sqlite3VdbeFram
6e80: 65 52 65 73 74 6f 72 65 28 70 46 72 61 6d 65 29  eRestore(pFrame)
6e90: 3b 0a 20 20 20 20 6c 61 73 74 52 6f 77 69 64 20  ;.    lastRowid 
6ea0: 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b  = db->lastRowid;
6eb0: 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  .    if( pOp->p2
6ec0: 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20  ==OE_Ignore ){. 
6ed0: 20 20 20 20 20 2f 2a 20 49 6e 73 74 72 75 63 74       /* Instruct
6ee0: 69 6f 6e 20 70 63 20 69 73 20 74 68 65 20 4f 50  ion pc is the OP
6ef0: 5f 50 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6e  _Program that in
6f00: 76 6f 6b 65 64 20 74 68 65 20 73 75 62 2d 70 72  voked the sub-pr
6f10: 6f 67 72 61 6d 20 0a 20 20 20 20 20 20 2a 2a 20  ogram .      ** 
6f20: 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20  currently being 
6f30: 68 61 6c 74 65 64 2e 20 49 66 20 74 68 65 20 70  halted. If the p
6f40: 32 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66  2 instruction of
6f50: 20 74 68 69 73 20 4f 50 5f 48 61 6c 74 0a 20 20   this OP_Halt.  
6f60: 20 20 20 20 2a 2a 20 69 6e 73 74 72 75 63 74 69      ** instructi
6f70: 6f 6e 20 69 73 20 73 65 74 20 74 6f 20 4f 45 5f  on is set to OE_
6f80: 49 67 6e 6f 72 65 2c 20 74 68 65 6e 20 74 68 65  Ignore, then the
6f90: 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 69 73 20   sub-program is 
6fa0: 74 68 72 6f 77 69 6e 67 0a 20 20 20 20 20 20 2a  throwing.      *
6fb0: 2a 20 61 6e 20 49 47 4e 4f 52 45 20 65 78 63 65  * an IGNORE exce
6fc0: 70 74 69 6f 6e 2e 20 49 6e 20 74 68 69 73 20 63  ption. In this c
6fd0: 61 73 65 20 6a 75 6d 70 20 74 6f 20 74 68 65 20  ase jump to the 
6fe0: 61 64 64 72 65 73 73 20 73 70 65 63 69 66 69 65  address specifie
6ff0: 64 0a 20 20 20 20 20 20 2a 2a 20 61 73 20 74 68  d.      ** as th
7000: 65 20 70 32 20 6f 66 20 74 68 65 20 63 61 6c 6c  e p2 of the call
7010: 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 2e 20  ing OP_Program. 
7020: 20 2a 2f 0a 20 20 20 20 20 20 70 63 20 3d 20 70   */.      pc = p
7030: 2d 3e 61 4f 70 5b 70 63 5d 2e 70 32 2d 31 3b 0a  ->aOp[pc].p2-1;.
7040: 20 20 20 20 7d 0a 20 20 20 20 61 4f 70 20 3d 20      }.    aOp = 
7050: 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 61 4d 65 6d  p->aOp;.    aMem
7060: 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20   = p->aMem;.    
7070: 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 2d 3e  break;.  }.  p->
7080: 72 63 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  rc = pOp->p1;.  
7090: 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d  p->errorAction =
70a0: 20 28 75 38 29 70 4f 70 2d 3e 70 32 3b 0a 20 20   (u8)pOp->p2;.  
70b0: 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 69 66  p->pc = pc;.  if
70c0: 28 20 70 2d 3e 72 63 20 29 7b 0a 20 20 20 20 69  ( p->rc ){.    i
70d0: 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20  f( pOp->p5 ){.  
70e0: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
70f0: 20 63 68 61 72 20 2a 20 63 6f 6e 73 74 20 61 7a   char * const az
7100: 54 79 70 65 5b 5d 20 3d 20 7b 20 22 4e 4f 54 20  Type[] = { "NOT 
7110: 4e 55 4c 4c 22 2c 20 22 55 4e 49 51 55 45 22 2c  NULL", "UNIQUE",
7120: 20 22 43 48 45 43 4b 22 2c 0a 20 20 20 20 20 20   "CHECK",.      
7130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7150: 20 20 20 20 20 20 20 22 46 4f 52 45 49 47 4e 20         "FOREIGN 
7160: 4b 45 59 22 20 7d 3b 0a 20 20 20 20 20 20 61 73  KEY" };.      as
7170: 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3e 3d 31  sert( pOp->p5>=1
7180: 20 26 26 20 70 4f 70 2d 3e 70 35 3c 3d 34 20 29   && pOp->p5<=4 )
7190: 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65  ;.      testcase
71a0: 28 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a  ( pOp->p5==1 );.
71b0: 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
71c0: 70 4f 70 2d 3e 70 35 3d 3d 32 20 29 3b 0a 20 20  pOp->p5==2 );.  
71d0: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f      testcase( pO
71e0: 70 2d 3e 70 35 3d 3d 33 20 29 3b 0a 20 20 20 20  p->p5==3 );.    
71f0: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
7200: 3e 70 35 3d 3d 34 20 29 3b 0a 20 20 20 20 20 20  >p5==4 );.      
7210: 7a 54 79 70 65 20 3d 20 61 7a 54 79 70 65 5b 70  zType = azType[p
7220: 4f 70 2d 3e 70 35 2d 31 5d 3b 0a 20 20 20 20 7d  Op->p5-1];.    }
7230: 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 54 79 70  else{.      zTyp
7240: 65 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20  e = 0;.    }.   
7250: 20 61 73 73 65 72 74 28 20 7a 54 79 70 65 21 3d   assert( zType!=
7260: 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d  0 || pOp->p4.z!=
7270: 30 20 29 3b 0a 20 20 20 20 7a 4c 6f 67 46 6d 74  0 );.    zLogFmt
7280: 20 3d 20 22 61 62 6f 72 74 20 61 74 20 25 64 20   = "abort at %d 
7290: 69 6e 20 5b 25 73 5d 3a 20 25 73 22 3b 0a 20 20  in [%s]: %s";.  
72a0: 20 20 69 66 28 20 7a 54 79 70 65 20 26 26 20 70    if( zType && p
72b0: 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20  Op->p4.z ){.    
72c0: 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
72d0: 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
72e0: 64 62 2c 20 22 25 73 20 63 6f 6e 73 74 72 61 69  db, "%s constrai
72f0: 6e 74 20 66 61 69 6c 65 64 3a 20 25 73 22 2c 20  nt failed: %s", 
7300: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7310: 20 20 20 20 20 20 20 20 7a 54 79 70 65 2c 20 70          zType, p
7320: 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d  Op->p4.z);.    }
7330: 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 34  else if( pOp->p4
7340: 2e 7a 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  .z ){.      sqli
7350: 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
7360: 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25  >zErrMsg, db, "%
7370: 73 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  s", pOp->p4.z);.
7380: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
7390: 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
73a0: 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
73b0: 62 2c 20 22 25 73 20 63 6f 6e 73 74 72 61 69 6e  b, "%s constrain
73c0: 74 20 66 61 69 6c 65 64 22 2c 20 7a 54 79 70 65  t failed", zType
73d0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  );.    }.    sql
73e0: 69 74 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31  ite3_log(pOp->p1
73f0: 2c 20 7a 4c 6f 67 46 6d 74 2c 20 70 63 2c 20 70  , zLogFmt, pc, p
7400: 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d  ->zSql, p->zErrM
7410: 73 67 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20  sg);.  }.  rc = 
7420: 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28  sqlite3VdbeHalt(
7430: 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63  p);.  assert( rc
7440: 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 7c 7c  ==SQLITE_BUSY ||
7450: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc==SQLITE_OK |
7460: 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52 52  | rc==SQLITE_ERR
7470: 4f 52 20 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  OR );.  if( rc==
7480: 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20  SQLITE_BUSY ){. 
7490: 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20     p->rc = rc = 
74a0: 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d  SQLITE_BUSY;.  }
74b0: 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
74c0: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
74d0: 7c 7c 20 28 70 2d 3e 72 63 26 30 78 66 66 29 3d  || (p->rc&0xff)=
74e0: 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49  =SQLITE_CONSTRAI
74f0: 4e 54 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  NT );.    assert
7500: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
7510: 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  || db->nDeferred
7520: 43 6f 6e 73 3e 30 20 7c 7c 20 64 62 2d 3e 6e 44  Cons>0 || db->nD
7530: 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3e 30  eferredImmCons>0
7540: 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 2d 3e   );.    rc = p->
7550: 72 63 20 3f 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc ? SQLITE_ERRO
7560: 52 20 3a 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b  R : SQLITE_DONE;
7570: 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65  .  }.  goto vdbe
7580: 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f  _return;.}../* O
7590: 70 63 6f 64 65 3a 20 49 6e 74 65 67 65 72 20 50  pcode: Integer P
75a0: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
75b0: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 31  nopsis: r[P2]=P1
75c0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62 69  .**.** The 32-bi
75d0: 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  t integer value 
75e0: 50 31 20 69 73 20 77 72 69 74 74 65 6e 20 69 6e  P1 is written in
75f0: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
7600: 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67  */.case OP_Integ
7610: 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a  er: {         /*
7620: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
7630: 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20   */.  pOut->u.i 
7640: 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65  = pOp->p1;.  bre
7650: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
7660: 3a 20 49 6e 74 36 34 20 2a 20 50 32 20 2a 20 50  : Int64 * P2 * P
7670: 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
7680: 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20   r[P2]=P4.**.** 
7690: 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
76a0: 74 6f 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65  to a 64-bit inte
76b0: 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72  ger value..** Wr
76c0: 69 74 65 20 74 68 61 74 20 76 61 6c 75 65 20 69  ite that value i
76d0: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
76e0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 36  .*/.case OP_Int6
76f0: 34 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  4: {           /
7700: 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
7710: 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  e */.  assert( p
7720: 4f 70 2d 3e 70 34 2e 70 49 36 34 21 3d 30 20 29  Op->p4.pI64!=0 )
7730: 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
7740: 2a 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20  *pOp->p4.pI64;. 
7750: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64   break;.}..#ifnd
7760: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
7770: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a  LOATING_POINT./*
7780: 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 20 2a 20   Opcode: Real * 
7790: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
77a0: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a  opsis: r[P2]=P4.
77b0: 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
77c0: 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69  inter to a 64-bi
77d0: 74 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74  t floating point
77e0: 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65   value..** Write
77f0: 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f   that value into
7800: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
7810: 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c 3a 20 7b  .case OP_Real: {
7820: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
7830: 61 6d 65 20 61 73 20 54 4b 5f 46 4c 4f 41 54 2c  ame as TK_FLOAT,
7840: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
7850: 20 2a 2f 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67   */.  pOut->flag
7860: 73 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20  s = MEM_Real;.  
7870: 61 73 73 65 72 74 28 20 21 73 71 6c 69 74 65 33  assert( !sqlite3
7880: 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e 70  IsNaN(*pOp->p4.p
7890: 52 65 61 6c 29 20 29 3b 0a 20 20 70 4f 75 74 2d  Real) );.  pOut-
78a0: 3e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 52  >r = *pOp->p4.pR
78b0: 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  eal;.  break;.}.
78c0: 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64  #endif../* Opcod
78d0: 65 3a 20 53 74 72 69 6e 67 38 20 2a 20 50 32 20  e: String8 * P2 
78e0: 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
78f0: 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27 0a 2a  is: r[P2]='P4'.*
7900: 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20 74  *.** P4 points t
7910: 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74  o a nul terminat
7920: 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67 2e  ed UTF-8 string.
7930: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
7940: 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a 20  transformed .** 
7950: 69 6e 74 6f 20 61 6e 20 4f 50 5f 53 74 72 69 6e  into an OP_Strin
7960: 67 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 65  g before it is e
7970: 78 65 63 75 74 65 64 20 66 6f 72 20 74 68 65 20  xecuted for the 
7980: 66 69 72 73 74 20 74 69 6d 65 2e 20 20 44 75 72  first time.  Dur
7990: 69 6e 67 0a 2a 2a 20 74 68 69 73 20 74 72 61 6e  ing.** this tran
79a0: 73 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20  sformation, the 
79b0: 6c 65 6e 67 74 68 20 6f 66 20 73 74 72 69 6e 67  length of string
79c0: 20 50 34 20 69 73 20 63 6f 6d 70 75 74 65 64 20   P4 is computed 
79d0: 61 6e 64 20 73 74 6f 72 65 64 0a 2a 2a 20 61 73  and stored.** as
79e0: 20 74 68 65 20 50 31 20 70 61 72 61 6d 65 74 65   the P1 paramete
79f0: 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74  r..*/.case OP_St
7a00: 72 69 6e 67 38 3a 20 7b 20 20 20 20 20 20 20 20  ring8: {        
7a10: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53   /* same as TK_S
7a20: 54 52 49 4e 47 2c 20 6f 75 74 32 2d 70 72 65 72  TRING, out2-prer
7a30: 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65  elease */.  asse
7a40: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30  rt( pOp->p4.z!=0
7a50: 20 29 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64   );.  pOp->opcod
7a60: 65 20 3d 20 4f 50 5f 53 74 72 69 6e 67 3b 0a 20  e = OP_String;. 
7a70: 20 70 4f 70 2d 3e 70 31 20 3d 20 73 71 6c 69 74   pOp->p1 = sqlit
7a80: 65 33 53 74 72 6c 65 6e 33 30 28 70 4f 70 2d 3e  e3Strlen30(pOp->
7a90: 70 34 2e 7a 29 3b 0a 0a 23 69 66 6e 64 65 66 20  p4.z);..#ifndef 
7aa0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
7ab0: 36 0a 20 20 69 66 28 20 65 6e 63 6f 64 69 6e 67  6.  if( encoding
7ac0: 21 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29 7b  !=SQLITE_UTF8 ){
7ad0: 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
7ae0: 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70  3VdbeMemSetStr(p
7af0: 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20  Out, pOp->p4.z, 
7b00: 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c  -1, SQLITE_UTF8,
7b10: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
7b20: 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  .    if( rc==SQL
7b30: 49 54 45 5f 54 4f 4f 42 49 47 20 29 20 67 6f 74  ITE_TOOBIG ) got
7b40: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 69  o too_big;.    i
7b50: 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 73 71  f( SQLITE_OK!=sq
7b60: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
7b70: 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e  ncoding(pOut, en
7b80: 63 6f 64 69 6e 67 29 20 29 20 67 6f 74 6f 20 6e  coding) ) goto n
7b90: 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73 73 65 72  o_mem;.    asser
7ba0: 74 28 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63  t( pOut->zMalloc
7bb0: 3d 3d 70 4f 75 74 2d 3e 7a 20 29 3b 0a 20 20 20  ==pOut->z );.   
7bc0: 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65 6d   assert( VdbeMem
7bd0: 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 3d 3d 30  Dynamic(pOut)==0
7be0: 20 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 7a 4d   );.    pOut->zM
7bf0: 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 70  alloc = 0;.    p
7c00: 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  Out->flags |= ME
7c10: 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20 20 69 66  M_Static;.    if
7c20: 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
7c30: 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20 20 20  4_DYNAMIC ){.   
7c40: 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
7c50: 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  (db, pOp->p4.z);
7c60: 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 70 2d 3e  .    }.    pOp->
7c70: 70 34 74 79 70 65 20 3d 20 50 34 5f 44 59 4e 41  p4type = P4_DYNA
7c80: 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34  MIC;.    pOp->p4
7c90: 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20 20  .z = pOut->z;.  
7ca0: 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f 75 74    pOp->p1 = pOut
7cb0: 2d 3e 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  ->n;.  }.#endif.
7cc0: 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e 64 62    if( pOp->p1>db
7cd0: 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
7ce0: 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
7cf0: 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
7d00: 67 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c  g;.  }.  /* Fall
7d10: 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
7d20: 6e 65 78 74 20 63 61 73 65 2c 20 4f 50 5f 53 74  next case, OP_St
7d30: 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20  ring */.}.  ./* 
7d40: 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 20 50  Opcode: String P
7d50: 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  1 P2 * P4 *.** S
7d60: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27  ynopsis: r[P2]='
7d70: 50 34 27 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a  P4' (len=P1).**.
7d80: 2a 2a 20 54 68 65 20 73 74 72 69 6e 67 20 76 61  ** The string va
7d90: 6c 75 65 20 50 34 20 6f 66 20 6c 65 6e 67 74 68  lue P4 of length
7da0: 20 50 31 20 28 62 79 74 65 73 29 20 69 73 20 73   P1 (bytes) is s
7db0: 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
7dc0: 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
7dd0: 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20 20 20 20  _String: {      
7de0: 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
7df0: 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65  elease */.  asse
7e00: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30  rt( pOp->p4.z!=0
7e10: 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67   );.  pOut->flag
7e20: 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f  s = MEM_Str|MEM_
7e30: 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b  Static|MEM_Term;
7e40: 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70  .  pOut->z = pOp
7e50: 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e  ->p4.z;.  pOut->
7e60: 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  n = pOp->p1;.  p
7e70: 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  Out->enc = encod
7e80: 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ing;.  UPDATE_MA
7e90: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
7ea0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
7eb0: 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 20 50 31   Opcode: Null P1
7ec0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
7ed0: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 32 2e 2e 50  nopsis:  r[P2..P
7ee0: 33 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 57 72  3]=NULL.**.** Wr
7ef0: 69 74 65 20 61 20 4e 55 4c 4c 20 69 6e 74 6f 20  ite a NULL into 
7f00: 72 65 67 69 73 74 65 72 73 20 50 32 2e 20 20 49  registers P2.  I
7f10: 66 20 50 33 20 67 72 65 61 74 65 72 20 74 68 61  f P3 greater tha
7f20: 6e 20 50 32 2c 20 74 68 65 6e 20 61 6c 73 6f 20  n P2, then also 
7f30: 77 72 69 74 65 0a 2a 2a 20 4e 55 4c 4c 20 69 6e  write.** NULL in
7f40: 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 20 61  to register P3 a
7f50: 6e 64 20 65 76 65 72 79 20 72 65 67 69 73 74 65  nd every registe
7f60: 72 20 69 6e 20 62 65 74 77 65 65 6e 20 50 32 20  r in between P2 
7f70: 61 6e 64 20 50 33 2e 20 20 49 66 20 50 33 0a 2a  and P3.  If P3.*
7f80: 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 50  * is less than P
7f90: 32 20 28 74 79 70 69 63 61 6c 6c 79 20 50 33 20  2 (typically P3 
7fa0: 69 73 20 7a 65 72 6f 29 20 74 68 65 6e 20 6f 6e  is zero) then on
7fb0: 6c 79 20 72 65 67 69 73 74 65 72 20 50 32 20 69  ly register P2 i
7fc0: 73 0a 2a 2a 20 73 65 74 20 74 6f 20 4e 55 4c 4c  s.** set to NULL
7fd0: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
7fe0: 31 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a  1 value is non-z
7ff0: 65 72 6f 2c 20 74 68 65 6e 20 61 6c 73 6f 20 73  ero, then also s
8000: 65 74 20 74 68 65 20 4d 45 4d 5f 43 6c 65 61 72  et the MEM_Clear
8010: 65 64 20 66 6c 61 67 20 73 6f 20 74 68 61 74 0a  ed flag so that.
8020: 2a 2a 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 77  ** NULL values w
8030: 69 6c 6c 20 6e 6f 74 20 63 6f 6d 70 61 72 65 20  ill not compare 
8040: 65 71 75 61 6c 20 65 76 65 6e 20 69 66 20 53 51  equal even if SQ
8050: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73  LITE_NULLEQ is s
8060: 65 74 20 6f 6e 0a 2a 2a 20 4f 50 5f 4e 65 20 6f  et on.** OP_Ne o
8070: 72 20 4f 50 5f 45 71 2e 0a 2a 2f 0a 63 61 73 65  r OP_Eq..*/.case
8080: 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20 20   OP_Null: {     
8090: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
80a0: 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e  erelease */.  in
80b0: 74 20 63 6e 74 3b 0a 20 20 75 31 36 20 6e 75 6c  t cnt;.  u16 nul
80c0: 6c 46 6c 61 67 3b 0a 20 20 63 6e 74 20 3d 20 70  lFlag;.  cnt = p
80d0: 4f 70 2d 3e 70 33 2d 70 4f 70 2d 3e 70 32 3b 0a  Op->p3-pOp->p2;.
80e0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
80f0: 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  3<=(p->nMem-p->n
8100: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75  Cursor) );.  pOu
8110: 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c 46  t->flags = nullF
8120: 6c 61 67 20 3d 20 70 4f 70 2d 3e 70 31 20 3f 20  lag = pOp->p1 ? 
8130: 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 43 6c  (MEM_Null|MEM_Cl
8140: 65 61 72 65 64 29 20 3a 20 4d 45 4d 5f 4e 75 6c  eared) : MEM_Nul
8150: 6c 3b 0a 20 20 77 68 69 6c 65 28 20 63 6e 74 3e  l;.  while( cnt>
8160: 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b  0 ){.    pOut++;
8170: 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  .    memAboutToC
8180: 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
8190: 20 20 20 20 56 64 62 65 4d 65 6d 52 65 6c 65 61      VdbeMemRelea
81a0: 73 65 28 70 4f 75 74 29 3b 0a 20 20 20 20 70 4f  se(pOut);.    pO
81b0: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c  ut->flags = null
81c0: 46 6c 61 67 3b 0a 20 20 20 20 63 6e 74 2d 2d 3b  Flag;.    cnt--;
81d0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
81e0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 66 74  ./* Opcode: Soft
81f0: 4e 75 6c 6c 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  Null P1 * * * *.
8200: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
8210: 50 31 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 53  P1]=NULL.**.** S
8220: 65 74 20 72 65 67 69 73 74 65 72 20 50 31 20 74  et register P1 t
8230: 6f 20 68 61 76 65 20 74 68 65 20 76 61 6c 75 65  o have the value
8240: 20 4e 55 4c 4c 20 61 73 20 73 65 65 6e 20 62 79   NULL as seen by
8250: 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f   the OP_MakeReco
8260: 72 64 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f  rd.** instructio
8270: 6e 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 66 72  n, but do not fr
8280: 65 65 20 61 6e 79 20 73 74 72 69 6e 67 20 6f 72  ee any string or
8290: 20 62 6c 6f 62 20 6d 65 6d 6f 72 79 20 61 73 73   blob memory ass
82a0: 6f 63 69 61 74 65 64 20 77 69 74 68 0a 2a 2a 20  ociated with.** 
82b0: 74 68 65 20 72 65 67 69 73 74 65 72 2c 20 73 6f  the register, so
82c0: 20 74 68 61 74 20 69 66 20 74 68 65 20 76 61 6c   that if the val
82d0: 75 65 20 77 61 73 20 61 20 73 74 72 69 6e 67 20  ue was a string 
82e0: 6f 72 20 62 6c 6f 62 20 74 68 61 74 20 77 61 73  or blob that was
82f0: 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20 63  .** previously c
8300: 6f 70 69 65 64 20 75 73 69 6e 67 20 4f 50 5f 53  opied using OP_S
8310: 43 6f 70 79 2c 20 74 68 65 20 63 6f 70 69 65 73  Copy, the copies
8320: 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75 65 20 74   will continue t
8330: 6f 20 62 65 20 76 61 6c 69 64 2e 0a 2a 2f 0a 63  o be valid..*/.c
8340: 61 73 65 20 4f 50 5f 53 6f 66 74 4e 75 6c 6c 3a  ase OP_SoftNull:
8350: 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
8360: 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p1>0 && pOp->p
8370: 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  1<=(p->nMem-p->n
8380: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75  Cursor) );.  pOu
8390: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
83a0: 31 5d 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  1];.  pOut->flag
83b0: 73 20 3d 20 28 70 4f 75 74 2d 3e 66 6c 61 67 73  s = (pOut->flags
83c0: 7c 4d 45 4d 5f 4e 75 6c 6c 29 26 7e 4d 45 4d 5f  |MEM_Null)&~MEM_
83d0: 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65  Undefined;.  bre
83e0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
83f0: 3a 20 42 6c 6f 62 20 50 31 20 50 32 20 2a 20 50  : Blob P1 P2 * P
8400: 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
8410: 20 72 5b 50 32 5d 3d 50 34 20 28 6c 65 6e 3d 50   r[P2]=P4 (len=P
8420: 31 29 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e  1).**.** P4 poin
8430: 74 73 20 74 6f 20 61 20 62 6c 6f 62 20 6f 66 20  ts to a blob of 
8440: 64 61 74 61 20 50 31 20 62 79 74 65 73 20 6c 6f  data P1 bytes lo
8450: 6e 67 2e 20 20 53 74 6f 72 65 20 74 68 69 73 0a  ng.  Store this.
8460: 2a 2a 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73  ** blob in regis
8470: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
8480: 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20  OP_Blob: {      
8490: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
84a0: 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
84b0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
84c0: 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d 41 58 5f  1 <= SQLITE_MAX_
84d0: 4c 45 4e 47 54 48 20 29 3b 0a 20 20 73 71 6c 69  LENGTH );.  sqli
84e0: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72  te3VdbeMemSetStr
84f0: 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a  (pOut, pOp->p4.z
8500: 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30 29  , pOp->p1, 0, 0)
8510: 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  ;.  pOut->enc = 
8520: 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41  encoding;.  UPDA
8530: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
8540: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
8550: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61  }../* Opcode: Va
8560: 72 69 61 62 6c 65 20 50 31 20 50 32 20 2a 20 50  riable P1 P2 * P
8570: 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
8580: 20 72 5b 50 32 5d 3d 70 61 72 61 6d 65 74 65 72   r[P2]=parameter
8590: 28 50 31 2c 50 34 29 0a 2a 2a 0a 2a 2a 20 54 72  (P1,P4).**.** Tr
85a0: 61 6e 73 66 65 72 20 74 68 65 20 76 61 6c 75 65  ansfer the value
85b0: 73 20 6f 66 20 62 6f 75 6e 64 20 70 61 72 61 6d  s of bound param
85c0: 65 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67  eter P1 into reg
85d0: 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 49  ister P2.**.** I
85e0: 66 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 20  f the parameter 
85f0: 69 73 20 6e 61 6d 65 64 2c 20 74 68 65 6e 20 69  is named, then i
8600: 74 73 20 6e 61 6d 65 20 61 70 70 65 61 72 73 20  ts name appears 
8610: 69 6e 20 50 34 2e 0a 2a 2a 20 54 68 65 20 50 34  in P4..** The P4
8620: 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20 62   value is used b
8630: 79 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70  y sqlite3_bind_p
8640: 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 29 2e  arameter_name().
8650: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 72 69  .*/.case OP_Vari
8660: 61 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20  able: {         
8670: 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
8680: 6c 65 61 73 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a  lease */.  Mem *
8690: 70 56 61 72 3b 20 20 20 20 20 20 20 2f 2a 20 56  pVar;       /* V
86a0: 61 6c 75 65 20 62 65 69 6e 67 20 74 72 61 6e 73  alue being trans
86b0: 66 65 72 72 65 64 20 2a 2f 0a 0a 20 20 61 73 73  ferred */..  ass
86c0: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26  ert( pOp->p1>0 &
86d0: 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 56  & pOp->p1<=p->nV
86e0: 61 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ar );.  assert( 
86f0: 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20 7c 7c 20  pOp->p4.z==0 || 
8700: 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 70 2d 3e 61 7a  pOp->p4.z==p->az
8710: 56 61 72 5b 70 4f 70 2d 3e 70 31 2d 31 5d 20 29  Var[pOp->p1-1] )
8720: 3b 0a 20 20 70 56 61 72 20 3d 20 26 70 2d 3e 61  ;.  pVar = &p->a
8730: 56 61 72 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d  Var[pOp->p1 - 1]
8740: 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  ;.  if( sqlite3V
8750: 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 56 61  dbeMemTooBig(pVa
8760: 72 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  r) ){.    goto t
8770: 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 73 71  oo_big;.  }.  sq
8780: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c  lite3VdbeMemShal
8790: 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 56  lowCopy(pOut, pV
87a0: 61 72 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b  ar, MEM_Static);
87b0: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
87c0: 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
87d0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
87e0: 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20 50 32 20  ode: Move P1 P2 
87f0: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
8800: 69 73 3a 20 20 72 5b 50 32 40 50 33 5d 3d 72 5b  is:  r[P2@P3]=r[
8810: 50 31 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 4d 6f 76  P1@P3].**.** Mov
8820: 65 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  e the values in 
8830: 72 65 67 69 73 74 65 72 20 50 31 2e 2e 50 31 2b  register P1..P1+
8840: 50 33 20 6f 76 65 72 20 69 6e 74 6f 0a 2a 2a 20  P3 over into.** 
8850: 72 65 67 69 73 74 65 72 73 20 50 32 2e 2e 50 32  registers P2..P2
8860: 2b 50 33 2e 20 20 52 65 67 69 73 74 65 72 73 20  +P3.  Registers 
8870: 50 31 2e 2e 50 31 2b 50 33 20 61 72 65 0a 2a 2a  P1..P1+P3 are.**
8880: 20 6c 65 66 74 20 68 6f 6c 64 69 6e 67 20 61 20   left holding a 
8890: 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 6e 20  NULL.  It is an 
88a0: 65 72 72 6f 72 20 66 6f 72 20 72 65 67 69 73 74  error for regist
88b0: 65 72 20 72 61 6e 67 65 73 0a 2a 2a 20 50 31 2e  er ranges.** P1.
88c0: 2e 50 31 2b 50 33 20 61 6e 64 20 50 32 2e 2e 50  .P1+P3 and P2..P
88d0: 32 2b 50 33 20 74 6f 20 6f 76 65 72 6c 61 70 2e  2+P3 to overlap.
88e0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f 76 65  .*/.case OP_Move
88f0: 3a 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4d 61 6c  : {.  char *zMal
8900: 6c 6f 63 3b 20 20 20 2f 2a 20 48 6f 6c 64 69 6e  loc;   /* Holdin
8910: 67 20 76 61 72 69 61 62 6c 65 20 66 6f 72 20 61  g variable for a
8920: 6c 6c 6f 63 61 74 65 64 20 6d 65 6d 6f 72 79 20  llocated memory 
8930: 2a 2f 0a 20 20 69 6e 74 20 6e 3b 20 20 20 20 20  */.  int n;     
8940: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
8950: 6f 66 20 72 65 67 69 73 74 65 72 73 20 6c 65 66  of registers lef
8960: 74 20 74 6f 20 63 6f 70 79 20 2a 2f 0a 20 20 69  t to copy */.  i
8970: 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20 20 20  nt p1;          
8980: 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 63  /* Register to c
8990: 6f 70 79 20 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e  opy from */.  in
89a0: 74 20 70 32 3b 20 20 20 20 20 20 20 20 20 20 2f  t p2;          /
89b0: 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f  * Register to co
89c0: 70 79 20 74 6f 20 2a 2f 0a 0a 20 20 6e 20 3d 20  py to */..  n = 
89d0: 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 31 20 3d 20  pOp->p3;.  p1 = 
89e0: 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20  pOp->p1;.  p2 = 
89f0: 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72  pOp->p2;.  asser
8a00: 74 28 20 6e 3e 3d 30 20 26 26 20 70 31 3e 30 20  t( n>=0 && p1>0 
8a10: 26 26 20 70 32 3e 30 20 29 3b 0a 20 20 61 73 73  && p2>0 );.  ass
8a20: 65 72 74 28 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c  ert( p1+n<=p2 ||
8a30: 20 70 32 2b 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20   p2+n<=p1 );..  
8a40: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 31 5d  pIn1 = &aMem[p1]
8a50: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
8a60: 5b 70 32 5d 3b 0a 20 20 64 6f 7b 0a 20 20 20 20  [p2];.  do{.    
8a70: 61 73 73 65 72 74 28 20 70 4f 75 74 3c 3d 26 61  assert( pOut<=&a
8a80: 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  Mem[(p->nMem-p->
8a90: 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20  nCursor)] );.   
8aa0: 20 61 73 73 65 72 74 28 20 70 49 6e 31 3c 3d 26   assert( pIn1<=&
8ab0: 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  aMem[(p->nMem-p-
8ac0: 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20  >nCursor)] );.  
8ad0: 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
8ae0: 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20  alid(pIn1) );.  
8af0: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
8b00: 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20  ge(p, pOut);.   
8b10: 20 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28   VdbeMemRelease(
8b20: 70 4f 75 74 29 3b 0a 20 20 20 20 7a 4d 61 6c 6c  pOut);.    zMall
8b30: 6f 63 20 3d 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c  oc = pOut->zMall
8b40: 6f 63 3b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70  oc;.    memcpy(p
8b50: 4f 75 74 2c 20 70 49 6e 31 2c 20 73 69 7a 65 6f  Out, pIn1, sizeo
8b60: 66 28 4d 65 6d 29 29 3b 0a 23 69 66 64 65 66 20  f(Mem));.#ifdef 
8b70: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
8b80: 20 69 66 28 20 70 4f 75 74 2d 3e 70 53 63 6f 70   if( pOut->pScop
8b90: 79 46 72 6f 6d 3e 3d 26 61 4d 65 6d 5b 70 31 5d  yFrom>=&aMem[p1]
8ba0: 20 26 26 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79   && pOut->pScopy
8bb0: 46 72 6f 6d 3c 26 61 4d 65 6d 5b 70 31 2b 70 4f  From<&aMem[p1+pO
8bc0: 70 2d 3e 70 33 5d 20 29 7b 0a 20 20 20 20 20 20  p->p3] ){.      
8bd0: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
8be0: 20 2b 3d 20 70 31 20 2d 20 70 4f 70 2d 3e 70 32   += p1 - pOp->p2
8bf0: 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
8c00: 20 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d     pIn1->flags =
8c10: 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a   MEM_Undefined;.
8c20: 20 20 20 20 70 49 6e 31 2d 3e 78 44 65 6c 20 3d      pIn1->xDel =
8c30: 20 30 3b 0a 20 20 20 20 70 49 6e 31 2d 3e 7a 4d   0;.    pIn1->zM
8c40: 61 6c 6c 6f 63 20 3d 20 7a 4d 61 6c 6c 6f 63 3b  alloc = zMalloc;
8c50: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
8c60: 41 43 45 28 70 32 2b 2b 2c 20 70 4f 75 74 29 3b  ACE(p2++, pOut);
8c70: 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 20  .    pIn1++;.   
8c80: 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d 77 68 69 6c   pOut++;.  }whil
8c90: 65 28 20 6e 2d 2d 20 29 3b 0a 20 20 62 72 65 61  e( n-- );.  brea
8ca0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
8cb0: 20 43 6f 70 79 20 50 31 20 50 32 20 50 33 20 2a   Copy P1 P2 P3 *
8cc0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
8cd0: 72 5b 50 32 40 50 33 2b 31 5d 3d 72 5b 50 31 40  r[P2@P3+1]=r[P1@
8ce0: 50 33 2b 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65  P3+1].**.** Make
8cf0: 20 61 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73   a copy of regis
8d00: 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33 20 69  ters P1..P1+P3 i
8d10: 6e 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 32  nto registers P2
8d20: 2e 2e 50 32 2b 50 33 2e 0a 2a 2a 0a 2a 2a 20 54  ..P2+P3..**.** T
8d30: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
8d40: 6d 61 6b 65 73 20 61 20 64 65 65 70 20 63 6f 70  makes a deep cop
8d50: 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20  y of the value. 
8d60: 20 41 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20   A duplicate.** 
8d70: 69 73 20 6d 61 64 65 20 6f 66 20 61 6e 79 20 73  is made of any s
8d80: 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 63 6f  tring or blob co
8d90: 6e 73 74 61 6e 74 2e 20 20 53 65 65 20 61 6c 73  nstant.  See als
8da0: 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63  o OP_SCopy..*/.c
8db0: 61 73 65 20 4f 50 5f 43 6f 70 79 3a 20 7b 0a 20  ase OP_Copy: {. 
8dc0: 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70   int n;..  n = p
8dd0: 4f 70 2d 3e 70 33 3b 0a 20 20 70 49 6e 31 20 3d  Op->p3;.  pIn1 =
8de0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
8df0: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
8e00: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
8e10: 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29  rt( pOut!=pIn1 )
8e20: 3b 0a 20 20 77 68 69 6c 65 28 20 31 20 29 7b 0a  ;.  while( 1 ){.
8e30: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
8e40: 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f  emShallowCopy(pO
8e50: 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70  ut, pIn1, MEM_Ep
8e60: 68 65 6d 29 3b 0a 20 20 20 20 44 65 65 70 68 65  hem);.    Deephe
8e70: 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a  meralize(pOut);.
8e80: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
8e90: 42 55 47 0a 20 20 20 20 70 4f 75 74 2d 3e 70 53  BUG.    pOut->pS
8ea0: 63 6f 70 79 46 72 6f 6d 20 3d 20 30 3b 0a 23 65  copyFrom = 0;.#e
8eb0: 6e 64 69 66 0a 20 20 20 20 52 45 47 49 53 54 45  ndif.    REGISTE
8ec0: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b  R_TRACE(pOp->p2+
8ed0: 70 4f 70 2d 3e 70 33 2d 6e 2c 20 70 4f 75 74 29  pOp->p3-n, pOut)
8ee0: 3b 0a 20 20 20 20 69 66 28 20 28 6e 2d 2d 29 3d  ;.    if( (n--)=
8ef0: 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20  =0 ) break;.    
8f00: 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 70 49 6e 31  pOut++;.    pIn1
8f10: 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ++;.  }.  break;
8f20: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
8f30: 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a  Copy P1 P2 * * *
8f40: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
8f50: 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  P2]=r[P1].**.** 
8f60: 4d 61 6b 65 20 61 20 73 68 61 6c 6c 6f 77 20 63  Make a shallow c
8f70: 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65 72 20  opy of register 
8f80: 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  P1 into register
8f90: 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
8fa0: 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65  instruction make
8fb0: 73 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79  s a shallow copy
8fc0: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20   of the value.  
8fd0: 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20  If the value.** 
8fe0: 69 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62  is a string or b
8ff0: 6c 6f 62 2c 20 74 68 65 6e 20 74 68 65 20 63 6f  lob, then the co
9000: 70 79 20 69 73 20 6f 6e 6c 79 20 61 20 70 6f 69  py is only a poi
9010: 6e 74 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6f  nter to the.** o
9020: 72 69 67 69 6e 61 6c 20 61 6e 64 20 68 65 6e 63  riginal and henc
9030: 65 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61  e if the origina
9040: 6c 20 63 68 61 6e 67 65 73 20 73 6f 20 77 69 6c  l changes so wil
9050: 6c 20 74 68 65 20 63 6f 70 79 2e 0a 2a 2a 20 57  l the copy..** W
9060: 6f 72 73 65 2c 20 69 66 20 74 68 65 20 6f 72 69  orse, if the ori
9070: 67 69 6e 61 6c 20 69 73 20 64 65 61 6c 6c 6f 63  ginal is dealloc
9080: 61 74 65 64 2c 20 74 68 65 20 63 6f 70 79 20 62  ated, the copy b
9090: 65 63 6f 6d 65 73 20 69 6e 76 61 6c 69 64 2e 0a  ecomes invalid..
90a0: 2a 2a 20 54 68 75 73 20 74 68 65 20 70 72 6f 67  ** Thus the prog
90b0: 72 61 6d 20 6d 75 73 74 20 67 75 61 72 61 6e 74  ram must guarant
90c0: 65 65 20 74 68 61 74 20 74 68 65 20 6f 72 69 67  ee that the orig
90d0: 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f 74 20 63 68  inal will not ch
90e0: 61 6e 67 65 0a 2a 2a 20 64 75 72 69 6e 67 20 74  ange.** during t
90f0: 68 65 20 6c 69 66 65 74 69 6d 65 20 6f 66 20 74  he lifetime of t
9100: 68 65 20 63 6f 70 79 2e 20 20 55 73 65 20 4f 50  he copy.  Use OP
9110: 5f 43 6f 70 79 20 74 6f 20 6d 61 6b 65 20 61 20  _Copy to make a 
9120: 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f 70 79  complete.** copy
9130: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 43 6f  ..*/.case OP_SCo
9140: 70 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  py: {           
9150: 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49   /* out2 */.  pI
9160: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
9170: 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p1];.  pOut = &a
9180: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
9190: 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49  assert( pOut!=pI
91a0: 6e 31 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  n1 );.  sqlite3V
91b0: 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
91c0: 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45  y(pOut, pIn1, ME
91d0: 4d 5f 45 70 68 65 6d 29 3b 0a 23 69 66 64 65 66  M_Ephem);.#ifdef
91e0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
91f0: 69 66 28 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79  if( pOut->pScopy
9200: 46 72 6f 6d 3d 3d 30 20 29 20 70 4f 75 74 2d 3e  From==0 ) pOut->
9210: 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20 70 49 6e  pScopyFrom = pIn
9220: 31 3b 0a 23 65 6e 64 69 66 0a 20 20 62 72 65 61  1;.#endif.  brea
9230: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
9240: 20 52 65 73 75 6c 74 52 6f 77 20 50 31 20 50 32   ResultRow P1 P2
9250: 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
9260: 69 73 3a 20 20 6f 75 74 70 75 74 3d 72 5b 50 31  is:  output=r[P1
9270: 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72  @P2].**.** The r
9280: 65 67 69 73 74 65 72 73 20 50 31 20 74 68 72 6f  egisters P1 thro
9290: 75 67 68 20 50 31 2b 50 32 2d 31 20 63 6f 6e 74  ugh P1+P2-1 cont
92a0: 61 69 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77  ain a single row
92b0: 20 6f 66 0a 2a 2a 20 72 65 73 75 6c 74 73 2e 20   of.** results. 
92c0: 54 68 69 73 20 6f 70 63 6f 64 65 20 63 61 75 73  This opcode caus
92d0: 65 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73  es the sqlite3_s
92e0: 74 65 70 28 29 20 63 61 6c 6c 20 74 6f 20 74 65  tep() call to te
92f0: 72 6d 69 6e 61 74 65 0a 2a 2a 20 77 69 74 68 20  rminate.** with 
9300: 61 6e 20 53 51 4c 49 54 45 5f 52 4f 57 20 72 65  an SQLITE_ROW re
9310: 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 69 74  turn code and it
9320: 20 73 65 74 73 20 75 70 20 74 68 65 20 73 71 6c   sets up the sql
9330: 69 74 65 33 5f 73 74 6d 74 0a 2a 2a 20 73 74 72  ite3_stmt.** str
9340: 75 63 74 75 72 65 20 74 6f 20 70 72 6f 76 69 64  ucture to provid
9350: 65 20 61 63 63 65 73 73 20 74 6f 20 74 68 65 20  e access to the 
9360: 72 28 50 31 29 2e 2e 72 28 50 31 2b 50 32 2d 31  r(P1)..r(P1+P2-1
9370: 29 20 76 61 6c 75 65 73 20 61 73 0a 2a 2a 20 74  ) values as.** t
9380: 68 65 20 72 65 73 75 6c 74 20 72 6f 77 2e 0a 2a  he result row..*
9390: 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 75 6c 74  /.case OP_Result
93a0: 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d  Row: {.  Mem *pM
93b0: 65 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 61  em;.  int i;.  a
93c0: 73 73 65 72 74 28 20 70 2d 3e 6e 52 65 73 43 6f  ssert( p->nResCo
93d0: 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29 3b  lumn==pOp->p2 );
93e0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
93f0: 70 31 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74  p1>0 );.  assert
9400: 28 20 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70  ( pOp->p1+pOp->p
9410: 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  2<=(p->nMem-p->n
9420: 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 0a 23 69  Cursor)+1 );..#i
9430: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
9440: 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42  T_PROGRESS_CALLB
9450: 41 43 4b 0a 20 20 2f 2a 20 52 75 6e 20 74 68 65  ACK.  /* Run the
9460: 20 70 72 6f 67 72 65 73 73 20 63 6f 75 6e 74 65   progress counte
9470: 72 20 6a 75 73 74 20 62 65 66 6f 72 65 20 72 65  r just before re
9480: 74 75 72 6e 69 6e 67 2e 0a 20 20 2a 2f 0a 20 20  turning..  */.  
9490: 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73  if( db->xProgres
94a0: 73 21 3d 30 0a 20 20 20 26 26 20 6e 56 6d 53 74  s!=0.   && nVmSt
94b0: 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69 6d  ep>=nProgressLim
94c0: 69 74 0a 20 20 20 26 26 20 64 62 2d 3e 78 50 72  it.   && db->xPr
94d0: 6f 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f 67  ogress(db->pProg
94e0: 72 65 73 73 41 72 67 29 21 3d 30 0a 20 20 29 7b  ressArg)!=0.  ){
94f0: 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
9500: 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 20 20  _INTERRUPT;.    
9510: 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f  goto vdbe_error_
9520: 68 61 6c 74 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  halt;.  }.#endif
9530: 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73 20 73  ..  /* If this s
9540: 74 61 74 65 6d 65 6e 74 20 68 61 73 20 76 69 6f  tatement has vio
9550: 6c 61 74 65 64 20 69 6d 6d 65 64 69 61 74 65 20  lated immediate 
9560: 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
9570: 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20 20 2a 2a  traints, do.  **
9580: 20 6e 6f 74 20 72 65 74 75 72 6e 20 74 68 65 20   not return the 
9590: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 6d  number of rows m
95a0: 6f 64 69 66 69 65 64 2e 20 41 6e 64 20 64 6f 20  odified. And do 
95b0: 6e 6f 74 20 52 45 4c 45 41 53 45 20 74 68 65 20  not RELEASE the 
95c0: 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a 2a 20 74  statement.  ** t
95d0: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 74 20 6e  ransaction. It n
95e0: 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65  eeds to be rolle
95f0: 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20 20 69 66  d back.  */.  if
9600: 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 28 72 63  ( SQLITE_OK!=(rc
9610: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68   = sqlite3VdbeCh
9620: 65 63 6b 46 6b 28 70 2c 20 30 29 29 20 29 7b 0a  eckFk(p, 0)) ){.
9630: 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
9640: 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f 75  flags&SQLITE_Cou
9650: 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20 20 61 73  ntRows );.    as
9660: 73 65 72 74 28 20 70 2d 3e 75 73 65 73 53 74 6d  sert( p->usesStm
9670: 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20 20 20 20  tJournal );.    
9680: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
9690: 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 43   If the SQLITE_C
96a0: 6f 75 6e 74 52 6f 77 73 20 66 6c 61 67 20 69 73  ountRows flag is
96b0: 20 73 65 74 20 69 6e 20 73 71 6c 69 74 65 33 2e   set in sqlite3.
96c0: 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e  flags mask, then
96d0: 20 0a 20 20 2a 2a 20 44 4d 4c 20 73 74 61 74 65   .  ** DML state
96e0: 6d 65 6e 74 73 20 69 6e 76 6f 6b 65 20 74 68 69  ments invoke thi
96f0: 73 20 6f 70 63 6f 64 65 20 74 6f 20 72 65 74 75  s opcode to retu
9700: 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  rn the number of
9710: 20 72 6f 77 73 20 0a 20 20 2a 2a 20 6d 6f 64 69   rows .  ** modi
9720: 66 69 65 64 20 74 6f 20 74 68 65 20 75 73 65 72  fied to the user
9730: 2e 20 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e  . This is the on
9740: 6c 79 20 77 61 79 20 74 68 61 74 20 61 20 56 4d  ly way that a VM
9750: 20 74 68 61 74 0a 20 20 2a 2a 20 6f 70 65 6e 73   that.  ** opens
9760: 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61   a statement tra
9770: 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 69 6e 76  nsaction may inv
9780: 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65 2e  oke this opcode.
9790: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 63 61  .  **.  ** In ca
97a0: 73 65 20 74 68 69 73 20 69 73 20 73 75 63 68 20  se this is such 
97b0: 61 20 73 74 61 74 65 6d 65 6e 74 2c 20 63 6c 6f  a statement, clo
97c0: 73 65 20 61 6e 79 20 73 74 61 74 65 6d 65 6e 74  se any statement
97d0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20 2a   transaction.  *
97e0: 2a 20 6f 70 65 6e 65 64 20 62 79 20 74 68 69 73  * opened by this
97f0: 20 56 4d 20 62 65 66 6f 72 65 20 72 65 74 75 72   VM before retur
9800: 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c 20 74 6f 20  ning control to 
9810: 74 68 65 20 75 73 65 72 2e 20 54 68 69 73 20 69  the user. This i
9820: 73 20 74 6f 0a 20 20 2a 2a 20 65 6e 73 75 72 65  s to.  ** ensure
9830: 20 74 68 61 74 20 73 74 61 74 65 6d 65 6e 74 2d   that statement-
9840: 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 72 65  transactions are
9850: 20 61 6c 77 61 79 73 20 6e 65 73 74 65 64 2c 20   always nested, 
9860: 6e 6f 74 20 6f 76 65 72 6c 61 70 70 69 6e 67 2e  not overlapping.
9870: 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 6f 70 65  .  ** If the ope
9880: 6e 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e  n statement-tran
9890: 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 63  saction is not c
98a0: 6c 6f 73 65 64 20 68 65 72 65 2c 20 74 68 65 6e  losed here, then
98b0: 20 74 68 65 20 75 73 65 72 0a 20 20 2a 2a 20 6d   the user.  ** m
98c0: 61 79 20 73 74 65 70 20 61 6e 6f 74 68 65 72 20  ay step another 
98d0: 56 4d 20 74 68 61 74 20 6f 70 65 6e 73 20 69 74  VM that opens it
98e0: 73 20 6f 77 6e 20 73 74 61 74 65 6d 65 6e 74 20  s own statement 
98f0: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 54 68 69  transaction. Thi
9900: 73 0a 20 20 2a 2a 20 6d 61 79 20 6c 65 61 64 20  s.  ** may lead 
9910: 74 6f 20 6f 76 65 72 6c 61 70 70 69 6e 67 20 73  to overlapping s
9920: 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
9930: 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  tions..  **.  **
9940: 20 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74   The statement t
9950: 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 65  ransaction is ne
9960: 76 65 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20  ver a top-level 
9970: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 48 65  transaction.  He
9980: 6e 63 65 0a 20 20 2a 2a 20 74 68 65 20 52 45 4c  nce.  ** the REL
9990: 45 41 53 45 20 63 61 6c 6c 20 62 65 6c 6f 77 20  EASE call below 
99a0: 63 61 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e 0a  can never fail..
99b0: 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70    */.  assert( p
99c0: 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20  ->iStatement==0 
99d0: 7c 7c 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c  || db->flags&SQL
99e0: 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b  ITE_CountRows );
99f0: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
9a00: 64 62 65 43 6c 6f 73 65 53 74 61 74 65 6d 65 6e  dbeCloseStatemen
9a10: 74 28 70 2c 20 53 41 56 45 50 4f 49 4e 54 5f 52  t(p, SAVEPOINT_R
9a20: 45 4c 45 41 53 45 29 3b 0a 20 20 69 66 28 20 4e  ELEASE);.  if( N
9a30: 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f  EVER(rc!=SQLITE_
9a40: 4f 4b 29 20 29 7b 0a 20 20 20 20 62 72 65 61 6b  OK) ){.    break
9a50: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 6e 76 61  ;.  }..  /* Inva
9a60: 6c 69 64 61 74 65 20 61 6c 6c 20 65 70 68 65 6d  lidate all ephem
9a70: 65 72 61 6c 20 63 75 72 73 6f 72 20 72 6f 77 20  eral cursor row 
9a80: 63 61 63 68 65 73 20 2a 2f 0a 20 20 70 2d 3e 63  caches */.  p->c
9a90: 61 63 68 65 43 74 72 20 3d 20 28 70 2d 3e 63 61  acheCtr = (p->ca
9aa0: 63 68 65 43 74 72 20 2b 20 32 29 7c 31 3b 0a 0a  cheCtr + 2)|1;..
9ab0: 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74    /* Make sure t
9ac0: 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68  he results of th
9ad0: 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 61 72  e current row ar
9ae0: 65 20 5c 30 30 30 20 74 65 72 6d 69 6e 61 74 65  e \000 terminate
9af0: 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61 76 65 20  d.  ** and have 
9b00: 61 6e 20 61 73 73 69 67 6e 65 64 20 74 79 70 65  an assigned type
9b10: 2e 20 20 54 68 65 20 72 65 73 75 6c 74 73 20 61  .  The results a
9b20: 72 65 20 64 65 2d 65 70 68 65 6d 65 72 61 6c 69  re de-ephemerali
9b30: 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61 20 73 69  zed as.  ** a si
9b40: 64 65 20 65 66 66 65 63 74 2e 0a 20 20 2a 2f 0a  de effect..  */.
9b50: 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70 52 65 73    pMem = p->pRes
9b60: 75 6c 74 53 65 74 20 3d 20 26 61 4d 65 6d 5b 70  ultSet = &aMem[p
9b70: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 69  Op->p1];.  for(i
9b80: 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32 3b 20 69  =0; i<pOp->p2; i
9b90: 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ++){.    assert(
9ba0: 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 70 4d 65   memIsValid(&pMe
9bb0: 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20 44 65 65  m[i]) );.    Dee
9bc0: 70 68 65 6d 65 72 61 6c 69 7a 65 28 26 70 4d 65  phemeralize(&pMe
9bd0: 6d 5b 69 5d 29 3b 0a 20 20 20 20 61 73 73 65 72  m[i]);.    asser
9be0: 74 28 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67  t( (pMem[i].flag
9bf0: 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d 29 3d 3d  s & MEM_Ephem)==
9c00: 30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c  0.            ||
9c10: 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20   (pMem[i].flags 
9c20: 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42  & (MEM_Str|MEM_B
9c30: 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  lob))==0 );.    
9c40: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75  sqlite3VdbeMemNu
9c50: 6c 54 65 72 6d 69 6e 61 74 65 28 26 70 4d 65 6d  lTerminate(&pMem
9c60: 5b 69 5d 29 3b 0a 20 20 20 20 52 45 47 49 53 54  [i]);.    REGIST
9c70: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
9c80: 2b 69 2c 20 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20  +i, &pMem[i]);. 
9c90: 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c   }.  if( db->mal
9ca0: 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f  locFailed ) goto
9cb0: 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20 2f 2a 20 52   no_mem;..  /* R
9cc0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 52 4f 57  eturn SQLITE_ROW
9cd0: 0a 20 20 2a 2f 0a 20 20 70 2d 3e 70 63 20 3d 20  .  */.  p->pc = 
9ce0: 70 63 20 2b 20 31 3b 0a 20 20 72 63 20 3d 20 53  pc + 1;.  rc = S
9cf0: 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20 67 6f 74  QLITE_ROW;.  got
9d00: 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d  o vdbe_return;.}
9d10: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6e  ../* Opcode: Con
9d20: 63 61 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  cat P1 P2 P3 * *
9d30: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
9d40: 50 33 5d 3d 72 5b 50 32 5d 2b 72 5b 50 31 5d 0a  P3]=r[P2]+r[P1].
9d50: 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 74 65  **.** Add the te
9d60: 78 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  xt in register P
9d70: 31 20 6f 6e 74 6f 20 74 68 65 20 65 6e 64 20 6f  1 onto the end o
9d80: 66 20 74 68 65 20 74 65 78 74 20 69 6e 0a 2a 2a  f the text in.**
9d90: 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64   register P2 and
9da0: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
9db0: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
9dc0: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 74  ..** If either t
9dd0: 68 65 20 50 31 20 6f 72 20 50 32 20 74 65 78 74  he P1 or P2 text
9de0: 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 73   are NULL then s
9df0: 74 6f 72 65 20 4e 55 4c 4c 20 69 6e 20 50 33 2e  tore NULL in P3.
9e00: 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20 3d 20 50 32  .**.**   P3 = P2
9e10: 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20   || P1.**.** It 
9e20: 69 73 20 69 6c 6c 65 67 61 6c 20 66 6f 72 20 50  is illegal for P
9e30: 31 20 61 6e 64 20 50 33 20 74 6f 20 62 65 20 74  1 and P3 to be t
9e40: 68 65 20 73 61 6d 65 20 72 65 67 69 73 74 65 72  he same register
9e50: 2e 20 53 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20  . Sometimes,.** 
9e60: 69 66 20 50 33 20 69 73 20 74 68 65 20 73 61 6d  if P3 is the sam
9e70: 65 20 72 65 67 69 73 74 65 72 20 61 73 20 50 32  e register as P2
9e80: 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  , the implementa
9e90: 74 69 6f 6e 20 69 73 20 61 62 6c 65 0a 2a 2a 20  tion is able.** 
9ea0: 74 6f 20 61 76 6f 69 64 20 61 20 6d 65 6d 63 70  to avoid a memcp
9eb0: 79 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  y()..*/.case OP_
9ec0: 43 6f 6e 63 61 74 3a 20 7b 20 20 20 20 20 20 20  Concat: {       
9ed0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
9ee0: 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e 31 2c 20 69  K_CONCAT, in1, i
9ef0: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36  n2, out3 */.  i6
9f00: 34 20 6e 42 79 74 65 3b 0a 0a 20 20 70 49 6e 31  4 nByte;..  pIn1
9f10: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
9f20: 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  ];.  pIn2 = &aMe
9f30: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f  m[pOp->p2];.  pO
9f40: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
9f50: 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p3];.  assert( p
9f60: 49 6e 31 21 3d 70 4f 75 74 20 29 3b 0a 20 20 69  In1!=pOut );.  i
9f70: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
9f80: 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26  | pIn2->flags) &
9f90: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
9fa0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
9fb0: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
9fc0: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69    break;.  }.  i
9fd0: 66 28 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49  f( ExpandBlob(pI
9fe0: 6e 31 29 20 7c 7c 20 45 78 70 61 6e 64 42 6c 6f  n1) || ExpandBlo
9ff0: 62 28 70 49 6e 32 29 20 29 20 67 6f 74 6f 20 6e  b(pIn2) ) goto n
a000: 6f 5f 6d 65 6d 3b 0a 20 20 53 74 72 69 6e 67 69  o_mem;.  Stringi
a010: 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e  fy(pIn1, encodin
a020: 67 29 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28  g);.  Stringify(
a030: 70 49 6e 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pIn2, encoding);
a040: 0a 20 20 6e 42 79 74 65 20 3d 20 70 49 6e 31 2d  .  nByte = pIn1-
a050: 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20  >n + pIn2->n;.  
a060: 69 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c  if( nByte>db->aL
a070: 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
a080: 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
a090: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
a0a0: 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33   }.  if( sqlite3
a0b0: 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74  VdbeMemGrow(pOut
a0c0: 2c 20 28 69 6e 74 29 6e 42 79 74 65 2b 32 2c 20  , (int)nByte+2, 
a0d0: 70 4f 75 74 3d 3d 70 49 6e 32 29 20 29 7b 0a 20  pOut==pIn2) ){. 
a0e0: 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
a0f0: 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70 65    }.  MemSetType
a100: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 53  Flag(pOut, MEM_S
a110: 74 72 29 3b 0a 20 20 69 66 28 20 70 4f 75 74 21  tr);.  if( pOut!
a120: 3d 70 49 6e 32 20 29 7b 0a 20 20 20 20 6d 65 6d  =pIn2 ){.    mem
a130: 63 70 79 28 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e  cpy(pOut->z, pIn
a140: 32 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a  2->z, pIn2->n);.
a150: 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70 4f    }.  memcpy(&pO
a160: 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20  ut->z[pIn2->n], 
a170: 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e  pIn1->z, pIn1->n
a180: 29 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79  );.  pOut->z[nBy
a190: 74 65 5d 3d 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a  te]=0;.  pOut->z
a1a0: 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a 20  [nByte+1] = 0;. 
a1b0: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20   pOut->flags |= 
a1c0: 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74  MEM_Term;.  pOut
a1d0: 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65  ->n = (int)nByte
a1e0: 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  ;.  pOut->enc = 
a1f0: 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41  encoding;.  UPDA
a200: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
a210: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
a220: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64  }../* Opcode: Ad
a230: 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
a240: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
a250: 33 5d 3d 72 5b 50 31 5d 2b 72 5b 50 32 5d 0a 2a  3]=r[P1]+r[P2].*
a260: 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 76 61 6c  *.** Add the val
a270: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
a280: 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69  1 to the value i
a290: 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  n register P2.**
a2a0: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
a2b0: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
a2c0: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
a2d0: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
a2e0: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
a2f0: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
a300: 64 65 3a 20 4d 75 6c 74 69 70 6c 79 20 50 31 20  de: Multiply P1 
a310: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
a320: 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b  opsis:  r[P3]=r[
a330: 50 31 5d 2a 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 0a  P1]*r[P2].**.**.
a340: 2a 2a 20 4d 75 6c 74 69 70 6c 79 20 74 68 65 20  ** Multiply the 
a350: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
a360: 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c 75  r P1 by the valu
a370: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
a380: 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68  .** and store th
a390: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
a3a0: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
a3b0: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
a3c0: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
a3d0: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
a3e0: 70 63 6f 64 65 3a 20 53 75 62 74 72 61 63 74 20  pcode: Subtract 
a3f0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
a400: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
a410: 3d 72 5b 50 32 5d 2d 72 5b 50 31 5d 0a 2a 2a 0a  =r[P2]-r[P1].**.
a420: 2a 2a 20 53 75 62 74 72 61 63 74 20 74 68 65 20  ** Subtract the 
a430: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
a440: 72 20 50 31 20 66 72 6f 6d 20 74 68 65 20 76 61  r P1 from the va
a450: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
a460: 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20  P2.** and store 
a470: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
a480: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
a490: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
a4a0: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
a4b0: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
a4c0: 20 4f 70 63 6f 64 65 3a 20 44 69 76 69 64 65 20   Opcode: Divide 
a4d0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
a4e0: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
a4f0: 3d 72 5b 50 32 5d 2f 72 5b 50 31 5d 0a 2a 2a 0a  =r[P2]/r[P1].**.
a500: 2a 2a 20 44 69 76 69 64 65 20 74 68 65 20 76 61  ** Divide the va
a510: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
a520: 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65 20  P1 by the value 
a530: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
a540: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
a550: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
a560: 65 72 20 50 33 20 28 50 33 3d 50 32 2f 50 31 29  er P3 (P3=P2/P1)
a570: 2e 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  . If the value i
a580: 6e 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  n .** register P
a590: 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20  1 is zero, then 
a5a0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
a5b0: 4c 4c 2e 20 49 66 20 65 69 74 68 65 72 20 69 6e  LL. If either in
a5c0: 70 75 74 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c  put is .** NULL,
a5d0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
a5e0: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
a5f0: 65 3a 20 52 65 6d 61 69 6e 64 65 72 20 50 31 20  e: Remainder P1 
a600: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
a610: 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b  opsis:  r[P3]=r[
a620: 50 32 5d 25 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  P2]%r[P1].**.** 
a630: 43 6f 6d 70 75 74 65 20 74 68 65 20 72 65 6d 61  Compute the rema
a640: 69 6e 64 65 72 20 61 66 74 65 72 20 69 6e 74 65  inder after inte
a650: 67 65 72 20 72 65 67 69 73 74 65 72 20 50 32 20  ger register P2 
a660: 69 73 20 64 69 76 69 64 65 64 20 62 79 20 0a 2a  is divided by .*
a670: 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  * register P1 an
a680: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
a690: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
a6a0: 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  3. .** If the va
a6b0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
a6c0: 50 31 20 69 73 20 7a 65 72 6f 20 74 68 65 20 72  P1 is zero the r
a6d0: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
a6e0: 2a 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72  * If either oper
a6f0: 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  and is NULL, the
a700: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
a710: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 3a  .*/.case OP_Add:
a720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a730: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
a740: 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c  _PLUS, in1, in2,
a750: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
a760: 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 20 20  _Subtract:      
a770: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
a780: 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31  as TK_MINUS, in1
a790: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
a7a0: 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a  ase OP_Multiply:
a7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
a7c0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 41 52   same as TK_STAR
a7d0: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
a7e0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76 69   */.case OP_Divi
a7f0: 64 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  de:             
a800: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
a810: 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e 32  _SLASH, in1, in2
a820: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
a830: 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20 20  P_Remainder: {  
a840: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
a850: 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c   as TK_REM, in1,
a860: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in2, out3 */.  
a870: 63 68 61 72 20 62 49 6e 74 69 6e 74 3b 20 20 20  char bIntint;   
a880: 2f 2a 20 53 74 61 72 74 65 64 20 6f 75 74 20 61  /* Started out a
a890: 73 20 74 77 6f 20 69 6e 74 65 67 65 72 20 6f 70  s two integer op
a8a0: 65 72 61 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20  erands */.  int 
a8b0: 66 6c 61 67 73 3b 20 20 20 20 20 20 2f 2a 20 43  flags;      /* C
a8c0: 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a 20 66 6c  ombined MEM_* fl
a8d0: 61 67 73 20 66 72 6f 6d 20 62 6f 74 68 20 69 6e  ags from both in
a8e0: 70 75 74 73 20 2a 2f 0a 20 20 69 36 34 20 69 41  puts */.  i64 iA
a8f0: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74  ;         /* Int
a900: 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20 6c 65  eger value of le
a910: 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ft operand */.  
a920: 69 36 34 20 69 42 3b 20 20 20 20 20 20 20 20 20  i64 iB;         
a930: 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65  /* Integer value
a940: 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e   of right operan
a950: 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 41  d */.  double rA
a960: 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76  ;      /* Real v
a970: 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f 70 65  alue of left ope
a980: 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65  rand */.  double
a990: 20 72 42 3b 20 20 20 20 20 20 2f 2a 20 52 65 61   rB;      /* Rea
a9a0: 6c 20 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74  l value of right
a9b0: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 0a 20 20 70   operand */..  p
a9c0: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
a9d0: 3e 70 31 5d 3b 0a 20 20 61 70 70 6c 79 4e 75 6d  >p1];.  applyNum
a9e0: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e  ericAffinity(pIn
a9f0: 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1);.  pIn2 = &aM
aa00: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
aa10: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
aa20: 69 74 79 28 70 49 6e 32 29 3b 0a 20 20 70 4f 75  ity(pIn2);.  pOu
aa30: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
aa40: 33 5d 3b 0a 20 20 66 6c 61 67 73 20 3d 20 70 49  3];.  flags = pI
aa50: 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32  n1->flags | pIn2
aa60: 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28  ->flags;.  if( (
aa70: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
aa80: 29 21 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  )!=0 ) goto arit
aa90: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
aaa0: 5f 6e 75 6c 6c 3b 0a 20 20 69 66 28 20 28 70 49  _null;.  if( (pI
aab0: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 70 49 6e 32  n1->flags & pIn2
aac0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
aad0: 74 29 3d 3d 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20  t)==MEM_Int ){. 
aae0: 20 20 20 69 41 20 3d 20 70 49 6e 31 2d 3e 75 2e     iA = pIn1->u.
aaf0: 69 3b 0a 20 20 20 20 69 42 20 3d 20 70 49 6e 32  i;.    iB = pIn2
ab00: 2d 3e 75 2e 69 3b 0a 20 20 20 20 62 49 6e 74 69  ->u.i;.    bInti
ab10: 6e 74 20 3d 20 31 3b 0a 20 20 20 20 73 77 69 74  nt = 1;.    swit
ab20: 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ch( pOp->opcode 
ab30: 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  ){.      case OP
ab40: 5f 41 64 64 3a 20 20 20 20 20 20 20 69 66 28 20  _Add:       if( 
ab50: 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28  sqlite3AddInt64(
ab60: 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66  &iB,iA) ) goto f
ab70: 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a  p_math;  break;.
ab80: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75        case OP_Su
ab90: 62 74 72 61 63 74 3a 20 20 69 66 28 20 73 71 6c  btract:  if( sql
aba0: 69 74 65 33 53 75 62 49 6e 74 36 34 28 26 69 42  ite3SubInt64(&iB
abb0: 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d  ,iA) ) goto fp_m
abc0: 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20  ath;  break;.   
abd0: 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69     case OP_Multi
abe0: 70 6c 79 3a 20 20 69 66 28 20 73 71 6c 69 74 65  ply:  if( sqlite
abf0: 33 4d 75 6c 49 6e 74 36 34 28 26 69 42 2c 69 41  3MulInt64(&iB,iA
ac00: 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68  ) ) goto fp_math
ac10: 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20  ;  break;.      
ac20: 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20  case OP_Divide: 
ac30: 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  {.        if( iA
ac40: 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68  ==0 ) goto arith
ac50: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
ac60: 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66  null;.        if
ac70: 28 20 69 41 3d 3d 2d 31 20 26 26 20 69 42 3d 3d  ( iA==-1 && iB==
ac80: 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29  SMALLEST_INT64 )
ac90: 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 0a 20   goto fp_math;. 
aca0: 20 20 20 20 20 20 20 69 42 20 2f 3d 20 69 41 3b         iB /= iA;
acb0: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
acc0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65        }.      de
acd0: 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20  fault: {.       
ace0: 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74   if( iA==0 ) got
acf0: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
ad00: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
ad10: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20       if( iA==-1 
ad20: 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20  ) iA = 1;.      
ad30: 20 20 69 42 20 25 3d 20 69 41 3b 0a 20 20 20 20    iB %= iA;.    
ad40: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
ad50: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75   }.    }.    pOu
ad60: 74 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a 20 20 20  t->u.i = iB;.   
ad70: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
ad80: 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
ad90: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 62 49 6e    }else{.    bIn
ada0: 74 69 6e 74 20 3d 20 30 3b 0a 66 70 5f 6d 61 74  tint = 0;.fp_mat
adb0: 68 3a 0a 20 20 20 20 72 41 20 3d 20 73 71 6c 69  h:.    rA = sqli
adc0: 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65  te3VdbeRealValue
add0: 28 70 49 6e 31 29 3b 0a 20 20 20 20 72 42 20 3d  (pIn1);.    rB =
ade0: 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c   sqlite3VdbeReal
adf0: 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 20  Value(pIn2);.   
ae00: 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70   switch( pOp->op
ae10: 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61  code ){.      ca
ae20: 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20  se OP_Add:      
ae30: 20 20 20 72 42 20 2b 3d 20 72 41 3b 20 20 20 20     rB += rA;    
ae40: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
ae50: 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74  case OP_Subtract
ae60: 3a 20 20 20 20 72 42 20 2d 3d 20 72 41 3b 20 20  :    rB -= rA;  
ae70: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
ae80: 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70    case OP_Multip
ae90: 6c 79 3a 20 20 20 20 72 42 20 2a 3d 20 72 41 3b  ly:    rB *= rA;
aea0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
aeb0: 20 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69      case OP_Divi
aec0: 64 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a  de: {.        /*
aed0: 20 28 64 6f 75 62 6c 65 29 30 20 49 6e 20 63 61   (double)0 In ca
aee0: 73 65 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d 49  se of SQLITE_OMI
aef0: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
af00: 2e 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69  ... */.        i
af10: 66 28 20 72 41 3d 3d 28 64 6f 75 62 6c 65 29 30  f( rA==(double)0
af20: 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74   ) goto arithmet
af30: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
af40: 6c 3b 0a 20 20 20 20 20 20 20 20 72 42 20 2f 3d  l;.        rB /=
af50: 20 72 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65   rA;.        bre
af60: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
af70: 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20    default: {.   
af80: 20 20 20 20 20 69 41 20 3d 20 28 69 36 34 29 72       iA = (i64)r
af90: 41 3b 0a 20 20 20 20 20 20 20 20 69 42 20 3d 20  A;.        iB = 
afa0: 28 69 36 34 29 72 42 3b 0a 20 20 20 20 20 20 20  (i64)rB;.       
afb0: 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74   if( iA==0 ) got
afc0: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
afd0: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
afe0: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20       if( iA==-1 
aff0: 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20  ) iA = 1;.      
b000: 20 20 72 42 20 3d 20 28 64 6f 75 62 6c 65 29 28    rB = (double)(
b010: 69 42 20 25 20 69 41 29 3b 0a 20 20 20 20 20 20  iB % iA);.      
b020: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
b030: 0a 20 20 20 20 7d 0a 23 69 66 64 65 66 20 53 51  .    }.#ifdef SQ
b040: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
b050: 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 70 4f 75  NG_POINT.    pOu
b060: 74 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a 20 20 20  t->u.i = rB;.   
b070: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
b080: 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
b090: 23 65 6c 73 65 0a 20 20 20 20 69 66 28 20 73 71  #else.    if( sq
b0a0: 6c 69 74 65 33 49 73 4e 61 4e 28 72 42 29 20 29  lite3IsNaN(rB) )
b0b0: 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 72 69  {.      goto ari
b0c0: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
b0d0: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20  s_null;.    }.  
b0e0: 20 20 70 4f 75 74 2d 3e 72 20 3d 20 72 42 3b 0a    pOut->r = rB;.
b0f0: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
b100: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 52 65 61  ag(pOut, MEM_Rea
b110: 6c 29 3b 0a 20 20 20 20 69 66 28 20 28 66 6c 61  l);.    if( (fla
b120: 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d  gs & MEM_Real)==
b130: 30 20 26 26 20 21 62 49 6e 74 69 6e 74 20 29 7b  0 && !bIntint ){
b140: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
b150: 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74  beIntegerAffinit
b160: 79 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 23  y(pOut);.    }.#
b170: 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61  endif.  }.  brea
b180: 6b 3b 0a 0a 61 72 69 74 68 6d 65 74 69 63 5f 72  k;..arithmetic_r
b190: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20  esult_is_null:. 
b1a0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
b1b0: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
b1c0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
b1d0: 6f 64 65 3a 20 43 6f 6c 6c 53 65 71 20 50 31 20  ode: CollSeq P1 
b1e0: 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20  * * P4.**.** P4 
b1f0: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
b200: 61 20 43 6f 6c 6c 53 65 71 20 73 74 72 75 63 74  a CollSeq struct
b210: 2e 20 49 66 20 74 68 65 20 6e 65 78 74 20 63 61  . If the next ca
b220: 6c 6c 20 74 6f 20 61 20 75 73 65 72 20 66 75 6e  ll to a user fun
b230: 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67 72  ction.** or aggr
b240: 65 67 61 74 65 20 63 61 6c 6c 73 20 73 71 6c 69  egate calls sqli
b250: 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65  te3GetFuncCollSe
b260: 71 28 29 2c 20 74 68 69 73 20 63 6f 6c 6c 61 74  q(), this collat
b270: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77 69 6c  ion sequence wil
b280: 6c 0a 2a 2a 20 62 65 20 72 65 74 75 72 6e 65 64  l.** be returned
b290: 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62  . This is used b
b2a0: 79 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 6d  y the built-in m
b2b0: 69 6e 28 29 2c 20 6d 61 78 28 29 20 61 6e 64 20  in(), max() and 
b2c0: 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20 66 75 6e 63  nullif().** func
b2d0: 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  tions..**.** If 
b2e0: 50 31 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P1 is not zero, 
b2f0: 74 68 65 6e 20 69 74 20 69 73 20 61 20 72 65 67  then it is a reg
b300: 69 73 74 65 72 20 74 68 61 74 20 61 20 73 75 62  ister that a sub
b310: 73 65 71 75 65 6e 74 20 6d 69 6e 28 29 20 6f 72  sequent min() or
b320: 0a 2a 2a 20 6d 61 78 28 29 20 61 67 67 72 65 67  .** max() aggreg
b330: 61 74 65 20 77 69 6c 6c 20 73 65 74 20 74 6f 20  ate will set to 
b340: 31 20 69 66 20 74 68 65 20 63 75 72 72 65 6e 74  1 if the current
b350: 20 72 6f 77 20 69 73 20 6e 6f 74 20 74 68 65 20   row is not the 
b360: 6d 69 6e 69 6d 75 6d 20 6f 72 0a 2a 2a 20 6d 61  minimum or.** ma
b370: 78 69 6d 75 6d 2e 20 20 54 68 65 20 50 31 20 72  ximum.  The P1 r
b380: 65 67 69 73 74 65 72 20 69 73 20 69 6e 69 74 69  egister is initi
b390: 61 6c 69 7a 65 64 20 74 6f 20 30 20 62 79 20 74  alized to 0 by t
b3a0: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  his instruction.
b3b0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72  .**.** The inter
b3c0: 66 61 63 65 20 75 73 65 64 20 62 79 20 74 68 65  face used by the
b3d0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
b3e0: 6f 66 20 74 68 65 20 61 66 6f 72 65 6d 65 6e 74  of the aforement
b3f0: 69 6f 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 0a  ioned functions.
b400: 2a 2a 20 74 6f 20 72 65 74 72 69 65 76 65 20 74  ** to retrieve t
b410: 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  he collation seq
b420: 75 65 6e 63 65 20 73 65 74 20 62 79 20 74 68 69  uence set by thi
b430: 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f 74 20  s opcode is not 
b440: 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 70 75 62  available.** pub
b450: 6c 69 63 6c 79 2c 20 6f 6e 6c 79 20 74 6f 20 75  licly, only to u
b460: 73 65 72 20 66 75 6e 63 74 69 6f 6e 73 20 64 65  ser functions de
b470: 66 69 6e 65 64 20 69 6e 20 66 75 6e 63 2e 63 2e  fined in func.c.
b480: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 6c  .*/.case OP_Coll
b490: 53 65 71 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  Seq: {.  assert(
b4a0: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
b4b0: 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 69 66  _COLLSEQ );.  if
b4c0: 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20  ( pOp->p1 ){.   
b4d0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
b4e0: 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f  etInt64(&aMem[pO
b4f0: 70 2d 3e 70 31 5d 2c 20 30 29 3b 0a 20 20 7d 0a  p->p1], 0);.  }.
b500: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
b510: 70 63 6f 64 65 3a 20 46 75 6e 63 74 69 6f 6e 20  pcode: Function 
b520: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
b530: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
b540: 5d 3d 66 75 6e 63 28 72 5b 50 32 40 50 35 5d 29  ]=func(r[P2@P5])
b550: 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61 20  .**.** Invoke a 
b560: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 28 50  user function (P
b570: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
b580: 6f 20 61 20 46 75 6e 63 74 69 6f 6e 20 73 74 72  o a Function str
b590: 75 63 74 75 72 65 20 74 68 61 74 0a 2a 2a 20 64  ucture that.** d
b5a0: 65 66 69 6e 65 73 20 74 68 65 20 66 75 6e 63 74  efines the funct
b5b0: 69 6f 6e 29 20 77 69 74 68 20 50 35 20 61 72 67  ion) with P5 arg
b5c0: 75 6d 65 6e 74 73 20 74 61 6b 65 6e 20 66 72 6f  uments taken fro
b5d0: 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  m register P2 an
b5e0: 64 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e  d.** successors.
b5f0: 20 20 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20    The result of 
b600: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  the function is 
b610: 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
b620: 65 72 20 50 33 2e 0a 2a 2a 20 52 65 67 69 73 74  er P3..** Regist
b630: 65 72 20 50 33 20 6d 75 73 74 20 6e 6f 74 20 62  er P3 must not b
b640: 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 75 6e  e one of the fun
b650: 63 74 69 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a  ction inputs..**
b660: 0a 2a 2a 20 50 31 20 69 73 20 61 20 33 32 2d 62  .** P1 is a 32-b
b670: 69 74 20 62 69 74 6d 61 73 6b 20 69 6e 64 69 63  it bitmask indic
b680: 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72  ating whether or
b690: 20 6e 6f 74 20 65 61 63 68 20 61 72 67 75 6d 65   not each argume
b6a0: 6e 74 20 74 6f 20 74 68 65 20 0a 2a 2a 20 66 75  nt to the .** fu
b6b0: 6e 63 74 69 6f 6e 20 77 61 73 20 64 65 74 65 72  nction was deter
b6c0: 6d 69 6e 65 64 20 74 6f 20 62 65 20 63 6f 6e 73  mined to be cons
b6d0: 74 61 6e 74 20 61 74 20 63 6f 6d 70 69 6c 65 20  tant at compile 
b6e0: 74 69 6d 65 2e 20 49 66 20 74 68 65 20 66 69 72  time. If the fir
b6f0: 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 77  st.** argument w
b700: 61 73 20 63 6f 6e 73 74 61 6e 74 20 74 68 65 6e  as constant then
b710: 20 62 69 74 20 30 20 6f 66 20 50 31 20 69 73 20   bit 0 of P1 is 
b720: 73 65 74 2e 20 54 68 69 73 20 69 73 20 75 73 65  set. This is use
b730: 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 0a 2a  d to determine.*
b740: 2a 20 77 68 65 74 68 65 72 20 6d 65 74 61 20 64  * whether meta d
b750: 61 74 61 20 61 73 73 6f 63 69 61 74 65 64 20 77  ata associated w
b760: 69 74 68 20 61 20 75 73 65 72 20 66 75 6e 63 74  ith a user funct
b770: 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20 75 73 69  ion argument usi
b780: 6e 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  ng the.** sqlite
b790: 33 5f 73 65 74 5f 61 75 78 64 61 74 61 28 29 20  3_set_auxdata() 
b7a0: 41 50 49 20 6d 61 79 20 62 65 20 73 61 66 65 6c  API may be safel
b7b0: 79 20 72 65 74 61 69 6e 65 64 20 75 6e 74 69 6c  y retained until
b7c0: 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 76   the next.** inv
b7d0: 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 69 73 20  ocation of this 
b7e0: 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65  opcode..**.** Se
b7f0: 65 20 61 6c 73 6f 3a 20 41 67 67 53 74 65 70 20  e also: AggStep 
b800: 61 6e 64 20 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a  and AggFinal.*/.
b810: 63 61 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e  case OP_Function
b820: 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d  : {.  int i;.  M
b830: 65 6d 20 2a 70 41 72 67 3b 0a 20 20 73 71 6c 69  em *pArg;.  sqli
b840: 74 65 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b  te3_context ctx;
b850: 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
b860: 20 2a 2a 61 70 56 61 6c 3b 0a 20 20 69 6e 74 20   **apVal;.  int 
b870: 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70  n;..  n = pOp->p
b880: 35 3b 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d 3e  5;.  apVal = p->
b890: 61 70 41 72 67 3b 0a 20 20 61 73 73 65 72 74 28  apArg;.  assert(
b8a0: 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29   apVal || n==0 )
b8b0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
b8c0: 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
b8d0: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
b8e0: 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74  ursor) );.  pOut
b8f0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
b900: 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
b910: 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
b920: 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 30 20  .  assert( n==0 
b930: 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26  || (pOp->p2>0 &&
b940: 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 28 70 2d 3e   pOp->p2+n<=(p->
b950: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
b960: 2b 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  +1) );.  assert(
b970: 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32   pOp->p3<pOp->p2
b980: 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70   || pOp->p3>=pOp
b990: 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 41 72 67  ->p2+n );.  pArg
b9a0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
b9b0: 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  ];.  for(i=0; i<
b9c0: 6e 3b 20 69 2b 2b 2c 20 70 41 72 67 2b 2b 29 7b  n; i++, pArg++){
b9d0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
b9e0: 49 73 56 61 6c 69 64 28 70 41 72 67 29 20 29 3b  IsValid(pArg) );
b9f0: 0a 20 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20  .    apVal[i] = 
ba00: 70 41 72 67 3b 0a 20 20 20 20 44 65 65 70 68 65  pArg;.    Deephe
ba10: 6d 65 72 61 6c 69 7a 65 28 70 41 72 67 29 3b 0a  meralize(pArg);.
ba20: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
ba30: 43 45 28 70 4f 70 2d 3e 70 32 2b 69 2c 20 70 41  CE(pOp->p2+i, pA
ba40: 72 67 29 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65  rg);.  }..  asse
ba50: 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
ba60: 3d 50 34 5f 46 55 4e 43 44 45 46 20 29 3b 0a 20  =P4_FUNCDEF );. 
ba70: 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70   ctx.pFunc = pOp
ba80: 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 63 74  ->p4.pFunc;.  ct
ba90: 78 2e 69 4f 70 20 3d 20 70 63 3b 0a 20 20 63 74  x.iOp = pc;.  ct
baa0: 78 2e 70 56 64 62 65 20 3d 20 70 3b 0a 0a 20 20  x.pVdbe = p;..  
bab0: 2f 2a 20 54 68 65 20 6f 75 74 70 75 74 20 63 65  /* The output ce
bac0: 6c 6c 20 6d 61 79 20 61 6c 72 65 61 64 79 20 68  ll may already h
bad0: 61 76 65 20 61 20 62 75 66 66 65 72 20 61 6c 6c  ave a buffer all
bae0: 6f 63 61 74 65 64 2e 20 4d 6f 76 65 0a 20 20 2a  ocated. Move.  *
baf0: 2a 20 74 68 65 20 70 6f 69 6e 74 65 72 20 74 6f  * the pointer to
bb00: 20 63 74 78 2e 73 20 73 6f 20 69 6e 20 63 61 73   ctx.s so in cas
bb10: 65 20 74 68 65 20 75 73 65 72 2d 66 75 6e 63 74  e the user-funct
bb20: 69 6f 6e 20 63 61 6e 20 75 73 65 0a 20 20 2a 2a  ion can use.  **
bb30: 20 74 68 65 20 61 6c 72 65 61 64 79 20 61 6c 6c   the already all
bb40: 6f 63 61 74 65 64 20 62 75 66 66 65 72 20 69 6e  ocated buffer in
bb50: 73 74 65 61 64 20 6f 66 20 61 6c 6c 6f 63 61 74  stead of allocat
bb60: 69 6e 67 20 61 20 6e 65 77 20 6f 6e 65 2e 0a 20  ing a new one.. 
bb70: 20 2a 2f 0a 20 20 6d 65 6d 63 70 79 28 26 63 74   */.  memcpy(&ct
bb80: 78 2e 73 2c 20 70 4f 75 74 2c 20 73 69 7a 65 6f  x.s, pOut, sizeo
bb90: 66 28 4d 65 6d 29 29 3b 0a 20 20 70 4f 75 74 2d  f(Mem));.  pOut-
bba0: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  >flags = MEM_Nul
bbb0: 6c 3b 0a 20 20 70 4f 75 74 2d 3e 78 44 65 6c 20  l;.  pOut->xDel 
bbc0: 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 4d 61  = 0;.  pOut->zMa
bbd0: 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 4d 65 6d 53  lloc = 0;.  MemS
bbe0: 65 74 54 79 70 65 46 6c 61 67 28 26 63 74 78 2e  etTypeFlag(&ctx.
bbf0: 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20  s, MEM_Null);.. 
bc00: 20 63 74 78 2e 66 45 72 72 6f 72 4f 72 41 75 78   ctx.fErrorOrAux
bc10: 20 3d 20 30 3b 0a 20 20 69 66 28 20 63 74 78 2e   = 0;.  if( ctx.
bc20: 70 46 75 6e 63 2d 3e 66 75 6e 63 46 6c 61 67 73  pFunc->funcFlags
bc30: 20 26 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e   & SQLITE_FUNC_N
bc40: 45 45 44 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61  EEDCOLL ){.    a
bc50: 73 73 65 72 74 28 20 70 4f 70 3e 61 4f 70 20 29  ssert( pOp>aOp )
bc60: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
bc70: 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34  p[-1].p4type==P4
bc80: 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20  _COLLSEQ );.    
bc90: 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e  assert( pOp[-1].
bca0: 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53  opcode==OP_CollS
bcb0: 65 71 20 29 3b 0a 20 20 20 20 63 74 78 2e 70 43  eq );.    ctx.pC
bcc0: 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34  oll = pOp[-1].p4
bcd0: 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 64 62  .pColl;.  }.  db
bce0: 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61  ->lastRowid = la
bcf0: 73 74 52 6f 77 69 64 3b 0a 20 20 28 2a 63 74 78  stRowid;.  (*ctx
bd00: 2e 70 46 75 6e 63 2d 3e 78 46 75 6e 63 29 28 26  .pFunc->xFunc)(&
bd10: 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29 3b 20  ctx, n, apVal); 
bd20: 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d  /* IMP: R-24505-
bd30: 32 33 32 33 30 20 2a 2f 0a 20 20 6c 61 73 74 52  23230 */.  lastR
bd40: 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52  owid = db->lastR
bd50: 6f 77 69 64 3b 0a 0a 20 20 69 66 28 20 64 62 2d  owid;..  if( db-
bd60: 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 7b  >mallocFailed ){
bd70: 0a 20 20 20 20 2f 2a 20 45 76 65 6e 20 74 68 6f  .    /* Even tho
bd80: 75 67 68 20 61 20 6d 61 6c 6c 6f 63 28 29 20 68  ugh a malloc() h
bd90: 61 73 20 66 61 69 6c 65 64 2c 20 74 68 65 20 69  as failed, the i
bda0: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
bdb0: 20 74 68 65 0a 20 20 20 20 2a 2a 20 75 73 65 72   the.    ** user
bdc0: 20 66 75 6e 63 74 69 6f 6e 20 6d 61 79 20 68 61   function may ha
bdd0: 76 65 20 63 61 6c 6c 65 64 20 61 6e 20 73 71 6c  ve called an sql
bde0: 69 74 65 33 5f 72 65 73 75 6c 74 5f 58 58 58 28  ite3_result_XXX(
bdf0: 29 20 66 75 6e 63 74 69 6f 6e 0a 20 20 20 20 2a  ) function.    *
be00: 2a 20 74 6f 20 72 65 74 75 72 6e 20 61 20 76 61  * to return a va
be10: 6c 75 65 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69  lue. The followi
be20: 6e 67 20 63 61 6c 6c 20 72 65 6c 65 61 73 65 73  ng call releases
be30: 20 61 6e 79 20 72 65 73 6f 75 72 63 65 73 0a 20   any resources. 
be40: 20 20 20 2a 2a 20 61 73 73 6f 63 69 61 74 65 64     ** associated
be50: 20 77 69 74 68 20 73 75 63 68 20 61 20 76 61 6c   with such a val
be60: 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73  ue..    */.    s
be70: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
be80: 65 61 73 65 28 26 63 74 78 2e 73 29 3b 0a 20 20  ease(&ctx.s);.  
be90: 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
bea0: 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20   }..  /* If the 
beb0: 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 65  function returne
bec0: 64 20 61 6e 20 65 72 72 6f 72 2c 20 74 68 72 6f  d an error, thro
bed0: 77 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 2a  w an exception *
bee0: 2f 0a 20 20 69 66 28 20 63 74 78 2e 66 45 72 72  /.  if( ctx.fErr
bef0: 6f 72 4f 72 41 75 78 20 29 7b 0a 20 20 20 20 69  orOrAux ){.    i
bf00: 66 28 20 63 74 78 2e 69 73 45 72 72 6f 72 20 29  f( ctx.isError )
bf10: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  {.      sqlite3S
bf20: 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
bf30: 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20  rMsg, db, "%s", 
bf40: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
bf50: 78 74 28 26 63 74 78 2e 73 29 29 3b 0a 20 20 20  xt(&ctx.s));.   
bf60: 20 20 20 72 63 20 3d 20 63 74 78 2e 69 73 45 72     rc = ctx.isEr
bf70: 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  ror;.    }.    s
bf80: 71 6c 69 74 65 33 56 64 62 65 44 65 6c 65 74 65  qlite3VdbeDelete
bf90: 41 75 78 44 61 74 61 28 70 2c 20 70 63 2c 20 70  AuxData(p, pc, p
bfa0: 4f 70 2d 3e 70 31 29 3b 0a 20 20 7d 0a 0a 20 20  Op->p1);.  }..  
bfb0: 2f 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73 75  /* Copy the resu
bfc0: 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  lt of the functi
bfd0: 6f 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  on into register
bfe0: 20 50 33 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33   P3 */.  sqlite3
bff0: 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
c000: 6e 67 28 26 63 74 78 2e 73 2c 20 65 6e 63 6f 64  ng(&ctx.s, encod
c010: 69 6e 67 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ing);.  assert( 
c020: 70 4f 75 74 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d  pOut->flags==MEM
c030: 5f 4e 75 6c 6c 20 29 3b 0a 20 20 6d 65 6d 63 70  _Null );.  memcp
c040: 79 28 70 4f 75 74 2c 20 26 63 74 78 2e 73 2c 20  y(pOut, &ctx.s, 
c050: 73 69 7a 65 6f 66 28 4d 65 6d 29 29 3b 0a 20 20  sizeof(Mem));.  
c060: 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
c070: 65 6d 54 6f 6f 42 69 67 28 70 4f 75 74 29 20 29  emTooBig(pOut) )
c080: 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
c090: 69 67 3b 0a 20 20 7d 0a 0a 23 69 66 20 30 0a 20  ig;.  }..#if 0. 
c0a0: 20 2f 2a 20 54 68 65 20 61 70 70 2d 64 65 66 69   /* The app-defi
c0b0: 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20 68 61 73  ned function has
c0c0: 20 64 6f 6e 65 20 73 6f 6d 65 74 68 69 6e 67 20   done something 
c0d0: 74 68 61 74 20 61 73 20 63 61 75 73 65 64 20 74  that as caused t
c0e0: 68 69 73 0a 20 20 2a 2a 20 73 74 61 74 65 6d 65  his.  ** stateme
c0f0: 6e 74 20 74 6f 20 65 78 70 69 72 65 2e 20 20 28  nt to expire.  (
c100: 50 65 72 68 61 70 73 20 74 68 65 20 66 75 6e 63  Perhaps the func
c110: 74 69 6f 6e 20 63 61 6c 6c 65 64 20 73 71 6c 69  tion called sqli
c120: 74 65 33 5f 65 78 65 63 28 29 0a 20 20 2a 2a 20  te3_exec().  ** 
c130: 77 69 74 68 20 61 20 43 52 45 41 54 45 20 54 41  with a CREATE TA
c140: 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 2e 29 0a  BLE statement.).
c150: 20 20 2a 2f 0a 20 20 69 66 28 20 70 2d 3e 65 78    */.  if( p->ex
c160: 70 69 72 65 64 20 29 20 72 63 20 3d 20 53 51 4c  pired ) rc = SQL
c170: 49 54 45 5f 41 42 4f 52 54 3b 0a 23 65 6e 64 69  ITE_ABORT;.#endi
c180: 66 0a 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  f..  REGISTER_TR
c190: 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75  ACE(pOp->p3, pOu
c1a0: 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  t);.  UPDATE_MAX
c1b0: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
c1c0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
c1d0: 4f 70 63 6f 64 65 3a 20 42 69 74 41 6e 64 20 50  Opcode: BitAnd P
c1e0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
c1f0: 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d  ynopsis:  r[P3]=
c200: 72 5b 50 31 5d 26 72 5b 50 32 5d 0a 2a 2a 0a 2a  r[P1]&r[P2].**.*
c210: 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77  * Take the bit-w
c220: 69 73 65 20 41 4e 44 20 6f 66 20 74 68 65 20 76  ise AND of the v
c230: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
c240: 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a  r P1 and P2 and.
c250: 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  ** store the res
c260: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
c270: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
c280: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
c290: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
c2a0: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
c2b0: 3a 20 42 69 74 4f 72 20 50 31 20 50 32 20 50 33  : BitOr P1 P2 P3
c2c0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
c2d0: 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 7c 72  :  r[P3]=r[P1]|r
c2e0: 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20  [P2].**.** Take 
c2f0: 74 68 65 20 62 69 74 2d 77 69 73 65 20 4f 52 20  the bit-wise OR 
c300: 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  of the values in
c310: 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64   register P1 and
c320: 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65   P2 and.** store
c330: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
c340: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
c350: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
c360: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
c370: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
c380: 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 4c  * Opcode: ShiftL
c390: 65 66 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  eft P1 P2 P3 * *
c3a0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
c3b0: 5b 50 33 5d 3d 72 5b 50 32 5d 3c 3c 72 5b 50 31  [P3]=r[P2]<<r[P1
c3c0: 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68  ].**.** Shift th
c3d0: 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  e integer value 
c3e0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74  in register P2 t
c3f0: 6f 20 74 68 65 20 6c 65 66 74 20 62 79 20 74 68  o the left by th
c400: 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62  e.** number of b
c410: 69 74 73 20 73 70 65 63 69 66 69 65 64 20 62 79  its specified by
c420: 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20   the integer in 
c430: 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20  register P1..** 
c440: 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  Store the result
c450: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
c460: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
c470: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
c480: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
c490: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
c4a0: 68 69 66 74 52 69 67 68 74 20 50 31 20 50 32 20  hiftRight P1 P2 
c4b0: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
c4c0: 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d  is:  r[P3]=r[P2]
c4d0: 3e 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68  >>r[P1].**.** Sh
c4e0: 69 66 74 20 74 68 65 20 69 6e 74 65 67 65 72 20  ift the integer 
c4f0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
c500: 72 20 50 32 20 74 6f 20 74 68 65 20 72 69 67 68  r P2 to the righ
c510: 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62  t by the.** numb
c520: 65 72 20 6f 66 20 62 69 74 73 20 73 70 65 63 69  er of bits speci
c530: 66 69 65 64 20 62 79 20 74 68 65 20 69 6e 74 65  fied by the inte
c540: 67 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20  ger in register 
c550: 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65  P1..** Store the
c560: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
c570: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
c580: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
c590: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
c5a0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
c5b0: 4f 50 5f 42 69 74 41 6e 64 3a 20 20 20 20 20 20  OP_BitAnd:      
c5c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
c5d0: 6d 65 20 61 73 20 54 4b 5f 42 49 54 41 4e 44 2c  me as TK_BITAND,
c5e0: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
c5f0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4f 72  */.case OP_BitOr
c600: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
c610: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
c620: 5f 42 49 54 4f 52 2c 20 69 6e 31 2c 20 69 6e 32  _BITOR, in1, in2
c630: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
c640: 50 5f 53 68 69 66 74 4c 65 66 74 3a 20 20 20 20  P_ShiftLeft:    
c650: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
c660: 65 20 61 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20  e as TK_LSHIFT, 
c670: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
c680: 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74 52  /.case OP_ShiftR
c690: 69 67 68 74 3a 20 7b 20 20 20 20 20 20 20 20 20  ight: {         
c6a0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
c6b0: 52 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32  RSHIFT, in1, in2
c6c0: 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20  , out3 */.  i64 
c6d0: 69 41 3b 0a 20 20 75 36 34 20 75 41 3b 0a 20 20  iA;.  u64 uA;.  
c6e0: 69 36 34 20 69 42 3b 0a 20 20 75 38 20 6f 70 3b  i64 iB;.  u8 op;
c6f0: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
c700: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e  [pOp->p1];.  pIn
c710: 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
c720: 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  2];.  pOut = &aM
c730: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
c740: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
c750: 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26  | pIn2->flags) &
c760: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
c770: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
c780: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
c790: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69    break;.  }.  i
c7a0: 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  A = sqlite3VdbeI
c7b0: 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20  ntValue(pIn2);. 
c7c0: 20 69 42 20 3d 20 73 71 6c 69 74 65 33 56 64 62   iB = sqlite3Vdb
c7d0: 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b  eIntValue(pIn1);
c7e0: 0a 20 20 6f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63  .  op = pOp->opc
c7f0: 6f 64 65 3b 0a 20 20 69 66 28 20 6f 70 3d 3d 4f  ode;.  if( op==O
c800: 50 5f 42 69 74 41 6e 64 20 29 7b 0a 20 20 20 20  P_BitAnd ){.    
c810: 69 41 20 26 3d 20 69 42 3b 0a 20 20 7d 65 6c 73  iA &= iB;.  }els
c820: 65 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74  e if( op==OP_Bit
c830: 4f 72 20 29 7b 0a 20 20 20 20 69 41 20 7c 3d 20  Or ){.    iA |= 
c840: 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  iB;.  }else if( 
c850: 69 42 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73  iB!=0 ){.    ass
c860: 65 72 74 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66  ert( op==OP_Shif
c870: 74 52 69 67 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50  tRight || op==OP
c880: 5f 53 68 69 66 74 4c 65 66 74 20 29 3b 0a 0a 20  _ShiftLeft );.. 
c890: 20 20 20 2f 2a 20 49 66 20 73 68 69 66 74 69 6e     /* If shiftin
c8a0: 67 20 62 79 20 61 20 6e 65 67 61 74 69 76 65 20  g by a negative 
c8b0: 61 6d 6f 75 6e 74 2c 20 73 68 69 66 74 20 69 6e  amount, shift in
c8c0: 20 74 68 65 20 6f 74 68 65 72 20 64 69 72 65 63   the other direc
c8d0: 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 66 28 20  tion */.    if( 
c8e0: 69 42 3c 30 20 29 7b 0a 20 20 20 20 20 20 61 73  iB<0 ){.      as
c8f0: 73 65 72 74 28 20 4f 50 5f 53 68 69 66 74 52 69  sert( OP_ShiftRi
c900: 67 68 74 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66  ght==OP_ShiftLef
c910: 74 2b 31 20 29 3b 0a 20 20 20 20 20 20 6f 70 20  t+1 );.      op 
c920: 3d 20 32 2a 4f 50 5f 53 68 69 66 74 4c 65 66 74  = 2*OP_ShiftLeft
c930: 20 2b 20 31 20 2d 20 6f 70 3b 0a 20 20 20 20 20   + 1 - op;.     
c940: 20 69 42 20 3d 20 69 42 3e 28 2d 36 34 29 20 3f   iB = iB>(-64) ?
c950: 20 2d 69 42 20 3a 20 36 34 3b 0a 20 20 20 20 7d   -iB : 64;.    }
c960: 0a 0a 20 20 20 20 69 66 28 20 69 42 3e 3d 36 34  ..    if( iB>=64
c970: 20 29 7b 0a 20 20 20 20 20 20 69 41 20 3d 20 28   ){.      iA = (
c980: 69 41 3e 3d 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f  iA>=0 || op==OP_
c990: 53 68 69 66 74 4c 65 66 74 29 20 3f 20 30 20 3a  ShiftLeft) ? 0 :
c9a0: 20 2d 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a   -1;.    }else{.
c9b0: 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26 75 41        memcpy(&uA
c9c0: 2c 20 26 69 41 2c 20 73 69 7a 65 6f 66 28 75 41  , &iA, sizeof(uA
c9d0: 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6f 70  ));.      if( op
c9e0: 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 29  ==OP_ShiftLeft )
c9f0: 7b 0a 20 20 20 20 20 20 20 20 75 41 20 3c 3c 3d  {.        uA <<=
ca00: 20 69 42 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65   iB;.      }else
ca10: 7b 0a 20 20 20 20 20 20 20 20 75 41 20 3e 3e 3d  {.        uA >>=
ca20: 20 69 42 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20   iB;.        /* 
ca30: 53 69 67 6e 2d 65 78 74 65 6e 64 20 6f 6e 20 61  Sign-extend on a
ca40: 20 72 69 67 68 74 20 73 68 69 66 74 20 6f 66 20   right shift of 
ca50: 61 20 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65  a negative numbe
ca60: 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28  r */.        if(
ca70: 20 69 41 3c 30 20 29 20 75 41 20 7c 3d 20 28 28   iA<0 ) uA |= ((
ca80: 28 28 75 36 34 29 30 78 66 66 66 66 66 66 66 66  ((u64)0xffffffff
ca90: 29 3c 3c 33 32 29 7c 30 78 66 66 66 66 66 66 66  )<<32)|0xfffffff
caa0: 66 29 20 3c 3c 20 28 36 34 2d 69 42 29 3b 0a 20  f) << (64-iB);. 
cab0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d       }.      mem
cac0: 63 70 79 28 26 69 41 2c 20 26 75 41 2c 20 73 69  cpy(&iA, &uA, si
cad0: 7a 65 6f 66 28 69 41 29 29 3b 0a 20 20 20 20 7d  zeof(iA));.    }
cae0: 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  .  }.  pOut->u.i
caf0: 20 3d 20 69 41 3b 0a 20 20 4d 65 6d 53 65 74 54   = iA;.  MemSetT
cb00: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
cb10: 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b  M_Int);.  break;
cb20: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
cb30: 64 64 49 6d 6d 20 20 50 31 20 50 32 20 2a 20 2a  ddImm  P1 P2 * *
cb40: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
cb50: 20 72 5b 50 31 5d 3d 72 5b 50 31 5d 2b 50 32 0a   r[P1]=r[P1]+P2.
cb60: 2a 2a 20 0a 2a 2a 20 41 64 64 20 74 68 65 20 63  ** .** Add the c
cb70: 6f 6e 73 74 61 6e 74 20 50 32 20 74 6f 20 74 68  onstant P2 to th
cb80: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
cb90: 74 65 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20 72  ter P1..** The r
cba0: 65 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20  esult is always 
cbb0: 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a  an integer..**.*
cbc0: 2a 20 54 6f 20 66 6f 72 63 65 20 61 6e 79 20 72  * To force any r
cbd0: 65 67 69 73 74 65 72 20 74 6f 20 62 65 20 61 6e  egister to be an
cbe0: 20 69 6e 74 65 67 65 72 2c 20 6a 75 73 74 20 61   integer, just a
cbf0: 64 64 20 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  dd 0..*/.case OP
cc00: 5f 41 64 64 49 6d 6d 3a 20 7b 20 20 20 20 20 20  _AddImm: {      
cc10: 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a        /* in1 */.
cc20: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
cc30: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p1];.  memAb
cc40: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
cc50: 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  In1);.  sqlite3V
cc60: 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
cc70: 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e  (pIn1);.  pIn1->
cc80: 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a  u.i += pOp->p2;.
cc90: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
cca0: 70 63 6f 64 65 3a 20 4d 75 73 74 42 65 49 6e 74  pcode: MustBeInt
ccb0: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
ccc0: 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61  .** Force the va
ccd0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
cce0: 50 31 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65  P1 to be an inte
ccf0: 67 65 72 2e 20 20 49 66 20 74 68 65 20 76 61 6c  ger.  If the val
cd00: 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 6e  ue.** in P1 is n
cd10: 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e  ot an integer an
cd20: 64 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76  d cannot be conv
cd30: 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e  erted into an in
cd40: 74 65 67 65 72 0a 2a 2a 20 77 69 74 68 6f 75 74  teger.** without
cd50: 20 64 61 74 61 20 6c 6f 73 73 2c 20 74 68 65 6e   data loss, then
cd60: 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
cd70: 79 20 74 6f 20 50 32 2c 20 6f 72 20 69 66 20 50  y to P2, or if P
cd80: 32 3d 3d 30 0a 2a 2a 20 72 61 69 73 65 20 61 6e  2==0.** raise an
cd90: 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48   SQLITE_MISMATCH
cda0: 20 65 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63   exception..*/.c
cdb0: 61 73 65 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74  ase OP_MustBeInt
cdc0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
cdd0: 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  * jump, in1 */. 
cde0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
cdf0: 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70  p->p1];.  if( (p
ce00: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
ce10: 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20  _Int)==0 ){.    
ce20: 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49  applyAffinity(pI
ce30: 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e  n1, SQLITE_AFF_N
ce40: 55 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67  UMERIC, encoding
ce50: 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  );.    VdbeBranc
ce60: 68 54 61 6b 65 6e 28 28 70 49 6e 31 2d 3e 66 6c  hTaken((pIn1->fl
ce70: 61 67 73 26 4d 45 4d 5f 49 6e 74 29 3d 3d 30 2c  ags&MEM_Int)==0,
ce80: 20 32 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49   2);.    if( (pI
ce90: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
cea0: 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  Int)==0 ){.     
ceb0: 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20   if( pOp->p2==0 
cec0: 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
ced0: 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3b  SQLITE_MISMATCH;
cee0: 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
cef0: 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
cf00: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
cf10: 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d         pc = pOp-
cf20: 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 20  >p2 - 1;.       
cf30: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
cf40: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 4d 65 6d 53      }.  }.  MemS
cf50: 65 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31 2c  etTypeFlag(pIn1,
cf60: 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65   MEM_Int);.  bre
cf70: 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53  ak;.}..#ifndef S
cf80: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
cf90: 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63  ING_POINT./* Opc
cfa0: 6f 64 65 3a 20 52 65 61 6c 41 66 66 69 6e 69 74  ode: RealAffinit
cfb0: 79 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  y P1 * * * *.**.
cfc0: 2a 2a 20 49 66 20 72 65 67 69 73 74 65 72 20 50  ** If register P
cfd0: 31 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67  1 holds an integ
cfe0: 65 72 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f  er convert it to
cff0: 20 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a   a real value..*
d000: 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
d010: 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 65 78   is used when ex
d020: 74 72 61 63 74 69 6e 67 20 69 6e 66 6f 72 6d 61  tracting informa
d030: 74 69 6f 6e 20 66 72 6f 6d 20 61 20 63 6f 6c 75  tion from a colu
d040: 6d 6e 20 74 68 61 74 0a 2a 2a 20 68 61 73 20 52  mn that.** has R
d050: 45 41 4c 20 61 66 66 69 6e 69 74 79 2e 20 20 53  EAL affinity.  S
d060: 75 63 68 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65  uch column value
d070: 73 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 73  s may still be s
d080: 74 6f 72 65 64 20 61 73 0a 2a 2a 20 69 6e 74 65  tored as.** inte
d090: 67 65 72 73 2c 20 66 6f 72 20 73 70 61 63 65 20  gers, for space 
d0a0: 65 66 66 69 63 69 65 6e 63 79 2c 20 62 75 74 20  efficiency, but 
d0b0: 61 66 74 65 72 20 65 78 74 72 61 63 74 69 6f 6e  after extraction
d0c0: 20 77 65 20 77 61 6e 74 20 74 68 65 6d 0a 2a 2a   we want them.**
d0d0: 20 74 6f 20 68 61 76 65 20 6f 6e 6c 79 20 61 20   to have only a 
d0e0: 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63  real value..*/.c
d0f0: 61 73 65 20 4f 50 5f 52 65 61 6c 41 66 66 69 6e  ase OP_RealAffin
d100: 69 74 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ity: {          
d110: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a          /* in1 *
d120: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
d130: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
d140: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
d150: 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73 71  EM_Int ){.    sq
d160: 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c  lite3VdbeMemReal
d170: 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20  ify(pIn1);.  }. 
d180: 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
d190: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
d1a0: 5f 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70  _OMIT_CAST./* Op
d1b0: 63 6f 64 65 3a 20 54 6f 54 65 78 74 20 50 31 20  code: ToText P1 
d1c0: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f  * * * *.**.** Fo
d1d0: 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  rce the value in
d1e0: 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20   register P1 to 
d1f0: 62 65 20 74 65 78 74 2e 0a 2a 2a 20 49 66 20 74  be text..** If t
d200: 68 65 20 76 61 6c 75 65 20 69 73 20 6e 75 6d 65  he value is nume
d210: 72 69 63 2c 20 63 6f 6e 76 65 72 74 20 69 74 20  ric, convert it 
d220: 74 6f 20 61 20 73 74 72 69 6e 67 20 75 73 69 6e  to a string usin
d230: 67 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c  g the.** equival
d240: 65 6e 74 20 6f 66 20 73 70 72 69 6e 74 66 28 29  ent of sprintf()
d250: 2e 20 20 42 6c 6f 62 20 76 61 6c 75 65 73 20 61  .  Blob values a
d260: 72 65 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64  re unchanged and
d270: 0a 2a 2a 20 61 72 65 20 61 66 74 65 72 77 61 72  .** are afterwar
d280: 64 73 20 73 69 6d 70 6c 79 20 69 6e 74 65 72 70  ds simply interp
d290: 72 65 74 65 64 20 61 73 20 74 65 78 74 2e 0a 2a  reted as text..*
d2a0: 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75  *.** A NULL valu
d2b0: 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64  e is not changed
d2c0: 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65   by this routine
d2d0: 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55  .  It remains NU
d2e0: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54  LL..*/.case OP_T
d2f0: 6f 54 65 78 74 3a 20 7b 20 20 20 20 20 20 20 20  oText: {        
d300: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
d310: 65 20 61 73 20 54 4b 5f 54 4f 5f 54 45 58 54 2c  e as TK_TO_TEXT,
d320: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
d330: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
d340: 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
d350: 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20  nge(p, pIn1);.  
d360: 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
d370: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62 72 65  & MEM_Null ) bre
d380: 61 6b 3b 0a 20 20 61 73 73 65 72 74 28 20 4d 45  ak;.  assert( ME
d390: 4d 5f 53 74 72 3d 3d 28 4d 45 4d 5f 42 6c 6f 62  M_Str==(MEM_Blob
d3a0: 3e 3e 33 29 20 29 3b 0a 20 20 70 49 6e 31 2d 3e  >>3) );.  pIn1->
d3b0: 66 6c 61 67 73 20 7c 3d 20 28 70 49 6e 31 2d 3e  flags |= (pIn1->
d3c0: 66 6c 61 67 73 26 4d 45 4d 5f 42 6c 6f 62 29 3e  flags&MEM_Blob)>
d3d0: 3e 33 3b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e  >3;.  applyAffin
d3e0: 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45  ity(pIn1, SQLITE
d3f0: 5f 41 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64  _AFF_TEXT, encod
d400: 69 6e 67 29 3b 0a 20 20 72 63 20 3d 20 45 78 70  ing);.  rc = Exp
d410: 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20  andBlob(pIn1);. 
d420: 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
d430: 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 7c  lags & MEM_Str |
d440: 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  | db->mallocFail
d450: 65 64 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c  ed );.  pIn1->fl
d460: 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 49 6e 74  ags &= ~(MEM_Int
d470: 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 42 6c  |MEM_Real|MEM_Bl
d480: 6f 62 7c 4d 45 4d 5f 5a 65 72 6f 29 3b 0a 20 20  ob|MEM_Zero);.  
d490: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
d4a0: 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65  IZE(pIn1);.  bre
d4b0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
d4c0: 3a 20 54 6f 42 6c 6f 62 20 50 31 20 2a 20 2a 20  : ToBlob P1 * * 
d4d0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20  * *.**.** Force 
d4e0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
d4f0: 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61  ister P1 to be a
d500: 20 42 4c 4f 42 2e 0a 2a 2a 20 49 66 20 74 68 65   BLOB..** If the
d510: 20 76 61 6c 75 65 20 69 73 20 6e 75 6d 65 72 69   value is numeri
d520: 63 2c 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f  c, convert it to
d530: 20 61 20 73 74 72 69 6e 67 20 66 69 72 73 74 2e   a string first.
d540: 0a 2a 2a 20 53 74 72 69 6e 67 73 20 61 72 65 20  .** Strings are 
d550: 73 69 6d 70 6c 79 20 72 65 69 6e 74 65 72 70 72  simply reinterpr
d560: 65 74 65 64 20 61 73 20 62 6c 6f 62 73 20 77 69  eted as blobs wi
d570: 74 68 20 6e 6f 20 63 68 61 6e 67 65 0a 2a 2a 20  th no change.** 
d580: 74 6f 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  to the underlyin
d590: 67 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 41 20  g data..**.** A 
d5a0: 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f  NULL value is no
d5b0: 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69  t changed by thi
d5c0: 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72  s routine.  It r
d5d0: 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  emains NULL..*/.
d5e0: 63 61 73 65 20 4f 50 5f 54 6f 42 6c 6f 62 3a 20  case OP_ToBlob: 
d5f0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
d600: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
d610: 5f 54 4f 5f 42 4c 4f 42 2c 20 69 6e 31 20 2a 2f  _TO_BLOB, in1 */
d620: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
d630: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
d640: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
d650: 4d 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b 0a  M_Null ) break;.
d660: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
d670: 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 3d 3d  gs & MEM_Blob)==
d680: 30 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 41 66  0 ){.    applyAf
d690: 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c  finity(pIn1, SQL
d6a0: 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 65 6e  ITE_AFF_TEXT, en
d6b0: 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 61 73 73  coding);.    ass
d6c0: 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
d6d0: 20 26 20 4d 45 4d 5f 53 74 72 20 7c 7c 20 64 62   & MEM_Str || db
d6e0: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
d6f0: 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
d700: 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 42  Flag(pIn1, MEM_B
d710: 6c 6f 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  lob);.  }else{. 
d720: 20 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26     pIn1->flags &
d730: 3d 20 7e 28 4d 45 4d 5f 54 79 70 65 4d 61 73 6b  = ~(MEM_TypeMask
d740: 26 7e 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 7d  &~MEM_Blob);.  }
d750: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
d760: 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20  OBSIZE(pIn1);.  
d770: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
d780: 6f 64 65 3a 20 54 6f 4e 75 6d 65 72 69 63 20 50  ode: ToNumeric P
d790: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
d7a0: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
d7b0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
d7c0: 6f 20 62 65 20 6e 75 6d 65 72 69 63 20 28 65 69  o be numeric (ei
d7d0: 74 68 65 72 20 61 6e 0a 2a 2a 20 69 6e 74 65 67  ther an.** integ
d7e0: 65 72 20 6f 72 20 61 20 66 6c 6f 61 74 69 6e 67  er or a floating
d7f0: 2d 70 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 29 0a  -point number.).
d800: 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
d810: 69 73 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c  is text or blob,
d820: 20 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   try to convert 
d830: 69 74 20 74 6f 20 61 6e 20 75 73 69 6e 67 20 74  it to an using t
d840: 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74  he.** equivalent
d850: 20 6f 66 20 61 74 6f 69 28 29 20 6f 72 20 61 74   of atoi() or at
d860: 6f 66 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30  of() and store 0
d870: 20 69 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76   if no such conv
d880: 65 72 73 69 6f 6e 20 0a 2a 2a 20 69 73 20 70 6f  ersion .** is po
d890: 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20  ssible..**.** A 
d8a0: 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f  NULL value is no
d8b0: 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69  t changed by thi
d8c0: 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72  s routine.  It r
d8d0: 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  emains NULL..*/.
d8e0: 63 61 73 65 20 4f 50 5f 54 6f 4e 75 6d 65 72 69  case OP_ToNumeri
d8f0: 63 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  c: {            
d900: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
d910: 20 54 4b 5f 54 4f 5f 4e 55 4d 45 52 49 43 2c 20   TK_TO_NUMERIC, 
d920: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
d930: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
d940: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
d950: 4e 75 6d 65 72 69 66 79 28 70 49 6e 31 29 3b 0a  Numerify(pIn1);.
d960: 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
d970: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
d980: 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  _CAST */../* Opc
d990: 6f 64 65 3a 20 54 6f 49 6e 74 20 50 31 20 2a 20  ode: ToInt P1 * 
d9a0: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63  * * *.**.** Forc
d9b0: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
d9c0: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65  egister P1 to be
d9d0: 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66   an integer.  If
d9e0: 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 69 73  .** The value is
d9f0: 20 63 75 72 72 65 6e 74 6c 79 20 61 20 72 65 61   currently a rea
da00: 6c 20 6e 75 6d 62 65 72 2c 20 64 72 6f 70 20 69  l number, drop i
da10: 74 73 20 66 72 61 63 74 69 6f 6e 61 6c 20 70 61  ts fractional pa
da20: 72 74 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  rt..** If the va
da30: 6c 75 65 20 69 73 20 74 65 78 74 20 6f 72 20 62  lue is text or b
da40: 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76  lob, try to conv
da50: 65 72 74 20 69 74 20 74 6f 20 61 6e 20 69 6e 74  ert it to an int
da60: 65 67 65 72 20 75 73 69 6e 67 20 74 68 65 0a 2a  eger using the.*
da70: 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20  * equivalent of 
da80: 61 74 6f 69 28 29 20 61 6e 64 20 73 74 6f 72 65  atoi() and store
da90: 20 30 20 69 66 20 6e 6f 20 73 75 63 68 20 63 6f   0 if no such co
daa0: 6e 76 65 72 73 69 6f 6e 20 69 73 20 70 6f 73 73  nversion is poss
dab0: 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55  ible..**.** A NU
dac0: 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20  LL value is not 
dad0: 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20  changed by this 
dae0: 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d  routine.  It rem
daf0: 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  ains NULL..*/.ca
db00: 73 65 20 4f 50 5f 54 6f 49 6e 74 3a 20 7b 20 20  se OP_ToInt: {  
db10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db20: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f  /* same as TK_TO
db30: 5f 49 4e 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  _INT, in1 */.  p
db40: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
db50: 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p1];.  if( (pIn
db60: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
db70: 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73  ull)==0 ){.    s
db80: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
db90: 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20  egerify(pIn1);. 
dba0: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23   }.  break;.}..#
dbb0: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
dbc0: 54 45 5f 4f 4d 49 54 5f 43 41 53 54 29 20 26 26  TE_OMIT_CAST) &&
dbd0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
dbe0: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
dbf0: 4f 49 4e 54 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a  OINT)./* Opcode:
dc00: 20 54 6f 52 65 61 6c 20 50 31 20 2a 20 2a 20 2a   ToReal P1 * * *
dc10: 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74   *.**.** Force t
dc20: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
dc30: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61 20  ster P1 to be a 
dc40: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e  floating point n
dc50: 75 6d 62 65 72 2e 0a 2a 2a 20 49 66 20 54 68 65  umber..** If The
dc60: 20 76 61 6c 75 65 20 69 73 20 63 75 72 72 65 6e   value is curren
dc70: 74 6c 79 20 61 6e 20 69 6e 74 65 67 65 72 2c 20  tly an integer, 
dc80: 63 6f 6e 76 65 72 74 20 69 74 2e 0a 2a 2a 20 49  convert it..** I
dc90: 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 74  f the value is t
dca0: 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79  ext or blob, try
dcb0: 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74   to convert it t
dcc0: 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 75 73 69  o an integer usi
dcd0: 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61  ng the.** equiva
dce0: 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28 29 20 61  lent of atoi() a
dcf0: 6e 64 20 73 74 6f 72 65 20 30 2e 30 20 69 66 20  nd store 0.0 if 
dd00: 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69  no such conversi
dd10: 6f 6e 20 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a  on is possible..
dd20: 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c  **.** A NULL val
dd30: 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65  ue is not change
dd40: 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e  d by this routin
dd50: 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e  e.  It remains N
dd60: 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
dd70: 54 6f 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20  ToReal: {       
dd80: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
dd90: 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 52 45 41 4c  me as TK_TO_REAL
dda0: 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
ddb0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
ddc0: 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
ddd0: 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20  ange(p, pIn1);. 
dde0: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
ddf0: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30  s & MEM_Null)==0
de00: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
de10: 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 49  dbeMemRealify(pI
de20: 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  n1);.  }.  break
de30: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64  ;.}.#endif /* !d
de40: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
de50: 49 54 5f 43 41 53 54 29 20 26 26 20 21 64 65 66  IT_CAST) && !def
de60: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
de70: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 29  _FLOATING_POINT)
de80: 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
de90: 4c 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Lt P1 P2 P3 P4 P
dea0: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  5.** Synopsis: i
deb0: 66 20 72 5b 50 31 5d 3c 72 5b 50 33 5d 20 67 6f  f r[P1]<r[P3] go
dec0: 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70  to P2.**.** Comp
ded0: 61 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 69  are the values i
dee0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  n register P1 an
def0: 64 20 50 33 2e 20 20 49 66 20 72 65 67 28 50 33  d P3.  If reg(P3
df00: 29 3c 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a  )<reg(P1) then.*
df10: 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73  * jump to addres
df20: 73 20 50 32 2e 20 20 0a 2a 2a 0a 2a 2a 20 49 66  s P2.  .**.** If
df30: 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50   the SQLITE_JUMP
df40: 49 46 4e 55 4c 4c 20 62 69 74 20 6f 66 20 50 35  IFNULL bit of P5
df50: 20 69 73 20 73 65 74 20 61 6e 64 20 65 69 74 68   is set and eith
df60: 65 72 20 72 65 67 28 50 31 29 20 6f 72 0a 2a 2a  er reg(P1) or.**
df70: 20 72 65 67 28 50 33 29 20 69 73 20 4e 55 4c 4c   reg(P3) is NULL
df80: 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a   then take the j
df90: 75 6d 70 2e 20 20 49 66 20 74 68 65 20 53 51 4c  ump.  If the SQL
dfa0: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 0a  ITE_JUMPIFNULL .
dfb0: 2a 2a 20 62 69 74 20 69 73 20 63 6c 65 61 72 20  ** bit is clear 
dfc0: 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
dfd0: 68 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72  h if either oper
dfe0: 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a  and is NULL..**.
dff0: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46  ** The SQLITE_AF
e000: 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f  F_MASK portion o
e010: 66 20 50 35 20 6d 75 73 74 20 62 65 20 61 6e 20  f P5 must be an 
e020: 61 66 66 69 6e 69 74 79 20 63 68 61 72 61 63 74  affinity charact
e030: 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41  er -.** SQLITE_A
e040: 46 46 5f 54 45 58 54 2c 20 53 51 4c 49 54 45 5f  FF_TEXT, SQLITE_
e050: 41 46 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64  AFF_INTEGER, and
e060: 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61 74   so forth. An at
e070: 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 0a 2a  tempt is made .*
e080: 2a 20 74 6f 20 63 6f 65 72 63 65 20 62 6f 74 68  * to coerce both
e090: 20 69 6e 70 75 74 73 20 61 63 63 6f 72 64 69 6e   inputs accordin
e0a0: 67 20 74 6f 20 74 68 69 73 20 61 66 66 69 6e 69  g to this affini
e0b0: 74 79 20 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a  ty before the.**
e0c0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d   comparison is m
e0d0: 61 64 65 2e 20 49 66 20 74 68 65 20 53 51 4c 49  ade. If the SQLI
e0e0: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20 30  TE_AFF_MASK is 0
e0f0: 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69  x00, then numeri
e100: 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 69 73  c.** affinity is
e110: 20 75 73 65 64 2e 20 4e 6f 74 65 20 74 68 61 74   used. Note that
e120: 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 63 6f   the affinity co
e130: 6e 76 65 72 73 69 6f 6e 73 20 61 72 65 20 73 74  nversions are st
e140: 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74  ored.** back int
e150: 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69  o the input regi
e160: 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e  sters P1 and P3.
e170: 20 20 53 6f 20 74 68 69 73 20 6f 70 63 6f 64 65    So this opcode
e180: 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65   can cause.** pe
e190: 72 73 69 73 74 65 6e 74 20 63 68 61 6e 67 65 73  rsistent changes
e1a0: 20 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 31   to registers P1
e1b0: 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f   and P3..**.** O
e1c0: 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65 72 73 69  nce any conversi
e1d0: 6f 6e 73 20 68 61 76 65 20 74 61 6b 65 6e 20 70  ons have taken p
e1e0: 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69 74 68 65  lace, and neithe
e1f0: 72 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c  r value is NULL,
e200: 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20   .** the values 
e210: 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 20 49 66  are compared. If
e220: 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65   both values are
e230: 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63   blobs then memc
e240: 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73 65 64 20  mp() is.** used 
e250: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
e260: 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20   results of the 
e270: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20  comparison.  If 
e280: 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61  both values.** a
e290: 72 65 20 74 65 78 74 2c 20 74 68 65 6e 20 74 68  re text, then th
e2a0: 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 63 6f  e appropriate co
e2b0: 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
e2c0: 20 73 70 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a   specified in.**
e2d0: 20 50 34 20 69 73 20 20 75 73 65 64 20 74 6f 20   P4 is  used to 
e2e0: 64 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  do the compariso
e2f0: 6e 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74  n.  If P4 is not
e300: 20 73 70 65 63 69 66 69 65 64 20 74 68 65 6e 0a   specified then.
e310: 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73 20 75  ** memcmp() is u
e320: 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 20 74  sed to compare t
e330: 65 78 74 20 73 74 72 69 6e 67 2e 20 20 49 66 20  ext string.  If 
e340: 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 0a  both values are.
e350: 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e  ** numeric, then
e360: 20 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61   a numeric compa
e370: 72 69 73 6f 6e 20 69 73 20 75 73 65 64 2e 20 49  rison is used. I
e380: 66 20 74 68 65 20 74 77 6f 20 76 61 6c 75 65 73  f the two values
e390: 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69 66 66 65  .** are of diffe
e3a0: 72 65 6e 74 20 74 79 70 65 73 2c 20 74 68 65 6e  rent types, then
e3b0: 20 6e 75 6d 62 65 72 73 20 61 72 65 20 63 6f 6e   numbers are con
e3c0: 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61  sidered less tha
e3d0: 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e 64  n.** strings and
e3e0: 20 73 74 72 69 6e 67 73 20 61 72 65 20 63 6f 6e   strings are con
e3f0: 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61  sidered less tha
e400: 6e 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49  n blobs..**.** I
e410: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f  f the SQLITE_STO
e420: 52 45 50 32 20 62 69 74 20 6f 66 20 50 35 20 69  REP2 bit of P5 i
e430: 73 20 73 65 74 2c 20 74 68 65 6e 20 64 6f 20 6e  s set, then do n
e440: 6f 74 20 6a 75 6d 70 2e 20 20 49 6e 73 74 65 61  ot jump.  Instea
e450: 64 2c 0a 2a 2a 20 73 74 6f 72 65 20 61 20 62 6f  d,.** store a bo
e460: 6f 6c 65 61 6e 20 72 65 73 75 6c 74 20 28 65 69  olean result (ei
e470: 74 68 65 72 20 30 2c 20 6f 72 20 31 2c 20 6f 72  ther 0, or 1, or
e480: 20 4e 55 4c 4c 29 20 69 6e 20 72 65 67 69 73 74   NULL) in regist
e490: 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P2..**.** If 
e4a0: 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45  the SQLITE_NULLE
e4b0: 51 20 62 69 74 20 69 73 20 73 65 74 20 69 6e 20  Q bit is set in 
e4c0: 50 35 2c 20 74 68 65 6e 20 4e 55 4c 4c 20 76 61  P5, then NULL va
e4d0: 6c 75 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65  lues are conside
e4e0: 72 65 64 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 20  red.** equal to 
e4f0: 6f 6e 65 20 61 6e 6f 74 68 65 72 2c 20 70 72 6f  one another, pro
e500: 76 69 64 65 64 20 74 68 61 74 20 74 68 65 79 20  vided that they 
e510: 64 6f 20 6e 6f 74 20 68 61 76 65 20 74 68 65 69  do not have thei
e520: 72 20 4d 45 4d 5f 43 6c 65 61 72 65 64 0a 2a 2a  r MEM_Cleared.**
e530: 20 62 69 74 20 73 65 74 2e 0a 2a 2f 0a 2f 2a 20   bit set..*/./* 
e540: 4f 70 63 6f 64 65 3a 20 4e 65 20 50 31 20 50 32  Opcode: Ne P1 P2
e550: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
e560: 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21  opsis: if r[P1]!
e570: 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a  =r[P3] goto P2.*
e580: 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
e590: 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74  just like the Lt
e5a0: 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74   opcode except t
e5b0: 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hat the jump is 
e5c0: 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20  taken if.** the 
e5d0: 6f 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69  operands in regi
e5e0: 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 20  sters P1 and P3 
e5f0: 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20  are not equal.  
e600: 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  See the Lt opcod
e610: 65 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f  e for.** additio
e620: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
e630: 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  .**.** If SQLITE
e640: 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69  _NULLEQ is set i
e650: 6e 20 50 35 20 74 68 65 6e 20 74 68 65 20 72 65  n P5 then the re
e660: 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73  sult of comparis
e670: 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 65 69 74  on is always eit
e680: 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66  her.** true or f
e690: 61 6c 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65  alse and is neve
e6a0: 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68  r NULL.  If both
e6b0: 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55   operands are NU
e6c0: 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  LL then the resu
e6d0: 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69  lt.** of compari
e6e0: 73 6f 6e 20 69 73 20 66 61 6c 73 65 2e 20 20 49  son is false.  I
e6f0: 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64  f either operand
e700: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68   is NULL then th
e710: 65 20 72 65 73 75 6c 74 20 69 73 20 74 72 75 65  e result is true
e720: 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20  ..** If neither 
e730: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
e740: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 68  the result is th
e750: 65 20 73 61 6d 65 20 61 73 20 69 74 20 77 6f 75  e same as it wou
e760: 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74 68 65 20  ld be if.** the 
e770: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c  SQLITE_NULLEQ fl
e780: 61 67 20 77 65 72 65 20 6f 6d 69 74 74 65 64 20  ag were omitted 
e790: 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f  from P5..*/./* O
e7a0: 70 63 6f 64 65 3a 20 45 71 20 50 31 20 50 32 20  pcode: Eq P1 P2 
e7b0: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
e7c0: 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3d 3d  psis: if r[P1]==
e7d0: 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a  r[P3] goto P2.**
e7e0: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
e7f0: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20  ust like the Lt 
e800: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
e810: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
e820: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f  aken if.** the o
e830: 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73  perands in regis
e840: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 20 61  ters P1 and P3 a
e850: 72 65 20 65 71 75 61 6c 2e 0a 2a 2a 20 53 65 65  re equal..** See
e860: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66   the Lt opcode f
e870: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
e880: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  formation..**.**
e890: 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45   If SQLITE_NULLE
e8a0: 51 20 69 73 20 73 65 74 20 69 6e 20 50 35 20 74  Q is set in P5 t
e8b0: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f  hen the result o
e8c0: 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  f comparison is 
e8d0: 61 6c 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a  always either.**
e8e0: 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61   true or false a
e8f0: 6e 64 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c  nd is never NULL
e900: 2e 20 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61  .  If both opera
e910: 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65  nds are NULL the
e920: 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20  n the result.** 
e930: 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  of comparison is
e940: 20 74 72 75 65 2e 20 20 49 66 20 65 69 74 68 65   true.  If eithe
e950: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
e960: 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  L then the resul
e970: 74 20 69 73 20 66 61 6c 73 65 2e 0a 2a 2a 20 49  t is false..** I
e980: 66 20 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e  f neither operan
e990: 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 20 72 65  d is NULL the re
e9a0: 73 75 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65  sult is the same
e9b0: 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20   as it would be 
e9c0: 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45  if.** the SQLITE
e9d0: 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72  _NULLEQ flag wer
e9e0: 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50  e omitted from P
e9f0: 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  5..*/./* Opcode:
ea00: 20 4c 65 20 50 31 20 50 32 20 50 33 20 50 34 20   Le P1 P2 P3 P4 
ea10: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
ea20: 69 66 20 72 5b 50 31 5d 3c 3d 72 5b 50 33 5d 20  if r[P1]<=r[P3] 
ea30: 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  goto P2.**.** Th
ea40: 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  is works just li
ea50: 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ke the Lt opcode
ea60: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
ea70: 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
ea80: 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74  f.** the content
ea90: 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20   of register P3 
eaa0: 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20  is less than or 
eab0: 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e  equal to the con
eac0: 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73  tent of.** regis
ead0: 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65  ter P1.  See the
eae0: 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61   Lt opcode for a
eaf0: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
eb00: 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  ation..*/./* Opc
eb10: 6f 64 65 3a 20 47 74 20 50 31 20 50 32 20 50 33  ode: Gt P1 P2 P3
eb20: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
eb30: 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 72 5b 50  is: if r[P1]>r[P
eb40: 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  3] goto P2.**.**
eb50: 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74   This works just
eb60: 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63   like the Lt opc
eb70: 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20  ode except that 
eb80: 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
eb90: 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74  n if.** the cont
eba0: 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
ebb0: 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68  P3 is greater th
ebc0: 61 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  an the content o
ebd0: 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31  f.** register P1
ebe0: 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70  .  See the Lt op
ebf0: 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f  code for additio
ec00: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
ec10: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47  .*/./* Opcode: G
ec20: 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
ec30: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
ec40: 20 72 5b 50 31 5d 3e 3d 72 5b 50 33 5d 20 67 6f   r[P1]>=r[P3] go
ec50: 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73  to P2.**.** This
ec60: 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
ec70: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65   the Lt opcode e
ec80: 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a  xcept that the j
ec90: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a  ump is taken if.
eca0: 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ** the content o
ecb0: 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  f register P3 is
ecc0: 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72   greater than or
ecd0: 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f   equal to the co
ece0: 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69  ntent of.** regi
ecf0: 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68  ster P1.  See th
ed00: 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20  e Lt opcode for 
ed10: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
ed20: 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  mation..*/.case 
ed30: 4f 50 5f 45 71 3a 20 20 20 20 20 20 20 20 20 20  OP_Eq:          
ed40: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
ed50: 54 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_EQ, jump, in1
ed60: 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
ed70: 5f 4e 65 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Ne:            
ed80: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
ed90: 5f 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _NE, jump, in1, 
eda0: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c  in3 */.case OP_L
edb0: 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t:              
edc0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c   /* same as TK_L
edd0: 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  T, jump, in1, in
ede0: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a  3 */.case OP_Le:
edf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ee00: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c  * same as TK_LE,
ee10: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
ee20: 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20 20  */.case OP_Gt:  
ee30: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ee40: 73 61 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a  same as TK_GT, j
ee50: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
ee60: 0a 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20  .case OP_Ge: {  
ee70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
ee80: 6d 65 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d  me as TK_GE, jum
ee90: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20  p, in1, in3 */. 
eea0: 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20   int res;       
eeb0: 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f       /* Result o
eec0: 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  f the comparison
eed0: 20 6f 66 20 70 49 6e 31 20 61 67 61 69 6e 73 74   of pIn1 against
eee0: 20 70 49 6e 33 20 2a 2f 0a 20 20 63 68 61 72 20   pIn3 */.  char 
eef0: 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 2f  affinity;      /
ef00: 2a 20 41 66 66 69 6e 69 74 79 20 74 6f 20 75 73  * Affinity to us
ef10: 65 20 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e  e for comparison
ef20: 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 31   */.  u16 flags1
ef30: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70  ;         /* Cop
ef40: 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c  y of initial val
ef50: 75 65 20 6f 66 20 70 49 6e 31 2d 3e 66 6c 61 67  ue of pIn1->flag
ef60: 73 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73  s */.  u16 flags
ef70: 33 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  3;         /* Co
ef80: 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61  py of initial va
ef90: 6c 75 65 20 6f 66 20 70 49 6e 33 2d 3e 66 6c 61  lue of pIn3->fla
efa0: 67 73 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20  gs */..  pIn1 = 
efb0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
efc0: 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
efd0: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73  Op->p3];.  flags
efe0: 31 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b  1 = pIn1->flags;
eff0: 0a 20 20 66 6c 61 67 73 33 20 3d 20 70 49 6e 33  .  flags3 = pIn3
f000: 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28  ->flags;.  if( (
f010: 66 6c 61 67 73 31 20 7c 20 66 6c 61 67 73 33 29  flags1 | flags3)
f020: 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20  &MEM_Null ){.   
f030: 20 2f 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68 20   /* One or both 
f040: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c  operands are NUL
f050: 4c 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70  L */.    if( pOp
f060: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55  ->p5 & SQLITE_NU
f070: 4c 4c 45 51 20 29 7b 0a 20 20 20 20 20 20 2f 2a  LLEQ ){.      /*
f080: 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45   If SQLITE_NULLE
f090: 51 20 69 73 20 73 65 74 20 28 77 68 69 63 68 20  Q is set (which 
f0a0: 77 69 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65 6e  will only happen
f0b0: 20 69 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72   if the operator
f0c0: 20 69 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50 5f   is.      ** OP_
f0d0: 45 71 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68 65  Eq or OP_Ne) the
f0e0: 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20  n take the jump 
f0f0: 6f 72 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67  or not depending
f100: 20 6f 6e 20 77 68 65 74 68 65 72 0a 20 20 20 20   on whether.    
f110: 20 20 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74 68    ** or not both
f120: 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 75   operands are nu
f130: 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  ll..      */.   
f140: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
f150: 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c  opcode==OP_Eq ||
f160: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
f170: 5f 4e 65 20 29 3b 0a 20 20 20 20 20 20 61 73 73  _Ne );.      ass
f180: 65 72 74 28 20 28 66 6c 61 67 73 31 20 26 20 4d  ert( (flags1 & M
f190: 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30 20 29  EM_Cleared)==0 )
f1a0: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
f1b0: 28 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54  (pOp->p5 & SQLIT
f1c0: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 29 3d 3d 30  E_JUMPIFNULL)==0
f1d0: 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 28 66   );.      if( (f
f1e0: 6c 61 67 73 31 26 4d 45 4d 5f 4e 75 6c 6c 29 21  lags1&MEM_Null)!
f1f0: 3d 30 0a 20 20 20 20 20 20 20 26 26 20 28 66 6c  =0.       && (fl
f200: 61 67 73 33 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d  ags3&MEM_Null)!=
f210: 30 0a 20 20 20 20 20 20 20 26 26 20 28 66 6c 61  0.       && (fla
f220: 67 73 33 26 4d 45 4d 5f 43 6c 65 61 72 65 64 29  gs3&MEM_Cleared)
f230: 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20 20 20  ==0.      ){.   
f240: 20 20 20 20 20 72 65 73 20 3d 20 30 3b 20 20 2f       res = 0;  /
f250: 2a 20 52 65 73 75 6c 74 73 20 61 72 65 20 65 71  * Results are eq
f260: 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c  ual */.      }el
f270: 73 65 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20  se{.        res 
f280: 3d 20 31 3b 20 20 2f 2a 20 52 65 73 75 6c 74 73  = 1;  /* Results
f290: 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 20 2a   are not equal *
f2a0: 2f 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  /.      }.    }e
f2b0: 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 53 51  lse{.      /* SQ
f2c0: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 63  LITE_NULLEQ is c
f2d0: 6c 65 61 72 20 61 6e 64 20 61 74 20 6c 65 61 73  lear and at leas
f2e0: 74 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20 69 73  t one operand is
f2f0: 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 2a 2a 20   NULL,.      ** 
f300: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
f310: 69 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a  is always NULL..
f320: 20 20 20 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d        ** The jum
f330: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68  p is taken if th
f340: 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  e SQLITE_JUMPIFN
f350: 55 4c 4c 20 62 69 74 20 69 73 20 73 65 74 2e 0a  ULL bit is set..
f360: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
f370: 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c  f( pOp->p5 & SQL
f380: 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20  ITE_STOREP2 ){. 
f390: 20 20 20 20 20 20 20 70 4f 75 74 20 3d 20 26 61         pOut = &a
f3a0: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
f3b0: 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65        MemSetType
f3c0: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e  Flag(pOut, MEM_N
f3d0: 75 6c 6c 29 3b 0a 20 20 20 20 20 20 20 20 52 45  ull);.        RE
f3e0: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
f3f0: 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 20  ->p2, pOut);.   
f400: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
f410: 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
f420: 6e 28 32 2c 33 29 3b 0a 20 20 20 20 20 20 20 20  n(2,3);.        
f430: 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  if( pOp->p5 & SQ
f440: 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20  LITE_JUMPIFNULL 
f450: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 63 20  ){.          pc 
f460: 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 20  = pOp->p2-1;.   
f470: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
f480: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
f490: 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  }.  }else{.    /
f4a0: 2a 20 4e 65 69 74 68 65 72 20 6f 70 65 72 61 6e  * Neither operan
f4b0: 64 20 69 73 20 4e 55 4c 4c 2e 20 20 44 6f 20 61  d is NULL.  Do a
f4c0: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 2a 2f 0a   comparison. */.
f4d0: 20 20 20 20 61 66 66 69 6e 69 74 79 20 3d 20 70      affinity = p
f4e0: 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
f4f0: 41 46 46 5f 4d 41 53 4b 3b 0a 20 20 20 20 69 66  AFF_MASK;.    if
f500: 28 20 61 66 66 69 6e 69 74 79 20 29 7b 0a 20 20  ( affinity ){.  
f510: 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74      applyAffinit
f520: 79 28 70 49 6e 31 2c 20 61 66 66 69 6e 69 74 79  y(pIn1, affinity
f530: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
f540: 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
f550: 28 70 49 6e 33 2c 20 61 66 66 69 6e 69 74 79 2c  (pIn3, affinity,
f560: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
f570: 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63    if( db->malloc
f580: 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f  Failed ) goto no
f590: 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  _mem;.    }..   
f5a0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
f5b0: 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51  type==P4_COLLSEQ
f5c0: 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c   || pOp->p4.pCol
f5d0: 6c 3d 3d 30 20 29 3b 0a 20 20 20 20 45 78 70 61  l==0 );.    Expa
f5e0: 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20  ndBlob(pIn1);.  
f5f0: 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e    ExpandBlob(pIn
f600: 33 29 3b 0a 20 20 20 20 72 65 73 20 3d 20 73 71  3);.    res = sq
f610: 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28  lite3MemCompare(
f620: 70 49 6e 33 2c 20 70 49 6e 31 2c 20 70 4f 70 2d  pIn3, pIn1, pOp-
f630: 3e 70 34 2e 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a  >p4.pColl);.  }.
f640: 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f    switch( pOp->o
f650: 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 63 61 73  pcode ){.    cas
f660: 65 20 4f 50 5f 45 71 3a 20 20 20 20 72 65 73 20  e OP_Eq:    res 
f670: 3d 20 72 65 73 3d 3d 30 3b 20 20 20 20 20 62 72  = res==0;     br
f680: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50  eak;.    case OP
f690: 5f 4e 65 3a 20 20 20 20 72 65 73 20 3d 20 72 65  _Ne:    res = re
f6a0: 73 21 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b  s!=0;     break;
f6b0: 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 74 3a  .    case OP_Lt:
f6c0: 20 20 20 20 72 65 73 20 3d 20 72 65 73 3c 30 3b      res = res<0;
f6d0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
f6e0: 20 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20   case OP_Le:    
f6f0: 72 65 73 20 3d 20 72 65 73 3c 3d 30 3b 20 20 20  res = res<=0;   
f700: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
f710: 65 20 4f 50 5f 47 74 3a 20 20 20 20 72 65 73 20  e OP_Gt:    res 
f720: 3d 20 72 65 73 3e 30 3b 20 20 20 20 20 20 62 72  = res>0;      br
f730: 65 61 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74  eak;.    default
f740: 3a 20 20 20 20 20 20 20 72 65 73 20 3d 20 72 65  :       res = re
f750: 73 3e 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b  s>=0;     break;
f760: 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d  .  }..  if( pOp-
f770: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f  >p5 & SQLITE_STO
f780: 52 45 50 32 20 29 7b 0a 20 20 20 20 70 4f 75 74  REP2 ){.    pOut
f790: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
f7a0: 5d 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54  ];.    memAboutT
f7b0: 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29  oChange(p, pOut)
f7c0: 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
f7d0: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49  Flag(pOut, MEM_I
f7e0: 6e 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  nt);.    pOut->u
f7f0: 2e 69 20 3d 20 72 65 73 3b 0a 20 20 20 20 52 45  .i = res;.    RE
f800: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
f810: 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 7d  ->p2, pOut);.  }
f820: 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72  else{.    VdbeBr
f830: 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30  anchTaken(res!=0
f840: 2c 20 28 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c  , (pOp->p5 & SQL
f850: 49 54 45 5f 4e 55 4c 4c 45 51 29 3f 32 3a 33 29  ITE_NULLEQ)?2:3)
f860: 3b 0a 20 20 20 20 69 66 28 20 72 65 73 20 29 7b  ;.    if( res ){
f870: 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  .      pc = pOp-
f880: 3e 70 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 7d  >p2-1;.    }.  }
f890: 0a 20 20 2f 2a 20 55 6e 64 6f 20 61 6e 79 20 63  .  /* Undo any c
f8a0: 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20 61  hanges made by a
f8b0: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29 20 74  pplyAffinity() t
f8c0: 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69  o the input regi
f8d0: 73 74 65 72 73 2e 20 2a 2f 0a 20 20 70 49 6e 31  sters. */.  pIn1
f8e0: 2d 3e 66 6c 61 67 73 20 3d 20 28 70 49 6e 31 2d  ->flags = (pIn1-
f8f0: 3e 66 6c 61 67 73 26 7e 4d 45 4d 5f 54 79 70 65  >flags&~MEM_Type
f900: 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67 73 31 26  Mask) | (flags1&
f910: 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20  MEM_TypeMask);. 
f920: 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 3d 20 28   pIn3->flags = (
f930: 70 49 6e 33 2d 3e 66 6c 61 67 73 26 7e 4d 45 4d  pIn3->flags&~MEM
f940: 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c  _TypeMask) | (fl
f950: 61 67 73 33 26 4d 45 4d 5f 54 79 70 65 4d 61 73  ags3&MEM_TypeMas
f960: 6b 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  k);.  break;.}..
f970: 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75  /* Opcode: Permu
f980: 74 61 74 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20  tation * * * P4 
f990: 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20  *.**.** Set the 
f9a0: 70 65 72 6d 75 74 61 74 69 6f 6e 20 75 73 65 64  permutation used
f9b0: 20 62 79 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61   by the OP_Compa
f9c0: 72 65 20 6f 70 65 72 61 74 6f 72 20 74 6f 20 62  re operator to b
f9d0: 65 20 74 68 65 20 61 72 72 61 79 0a 2a 2a 20 6f  e the array.** o
f9e0: 66 20 69 6e 74 65 67 65 72 73 20 69 6e 20 50 34  f integers in P4
f9f0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65 72 6d  ..**.** The perm
fa00: 75 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  utation is only 
fa10: 76 61 6c 69 64 20 75 6e 74 69 6c 20 74 68 65 20  valid until the 
fa20: 6e 65 78 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20  next OP_Compare 
fa30: 74 68 61 74 20 68 61 73 0a 2a 2a 20 74 68 65 20  that has.** the 
fa40: 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62  OPFLAG_PERMUTE b
fa50: 69 74 20 73 65 74 20 69 6e 20 50 35 2e 20 54 79  it set in P5. Ty
fa60: 70 69 63 61 6c 6c 79 20 74 68 65 20 4f 50 5f 50  pically the OP_P
fa70: 65 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f 75 6c  ermutation shoul
fa80: 64 20 0a 2a 2a 20 6f 63 63 75 72 20 69 6d 6d 65  d .** occur imme
fa90: 64 69 61 74 65 6c 79 20 70 72 69 6f 72 20 74 6f  diately prior to
faa0: 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 2e   the OP_Compare.
fab0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d  .*/.case OP_Perm
fac0: 75 74 61 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73  utation: {.  ass
fad0: 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
fae0: 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 29 3b  ==P4_INTARRAY );
faf0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
fb00: 70 34 2e 61 69 20 29 3b 0a 20 20 61 50 65 72 6d  p4.ai );.  aPerm
fb10: 75 74 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69  ute = pOp->p4.ai
fb20: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
fb30: 20 4f 70 63 6f 64 65 3a 20 43 6f 6d 70 61 72 65   Opcode: Compare
fb40: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
fb50: 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 77  **.** Compare tw
fb60: 6f 20 76 65 63 74 6f 72 73 20 6f 66 20 72 65 67  o vectors of reg
fb70: 69 73 74 65 72 73 20 69 6e 20 72 65 67 28 50 31  isters in reg(P1
fb80: 29 2e 2e 72 65 67 28 50 31 2b 50 33 2d 31 29 20  )..reg(P1+P3-1) 
fb90: 28 63 61 6c 6c 20 74 68 69 73 0a 2a 2a 20 76 65  (call this.** ve
fba0: 63 74 6f 72 20 22 41 22 29 20 61 6e 64 20 69 6e  ctor "A") and in
fbb0: 20 72 65 67 28 50 32 29 2e 2e 72 65 67 28 50 32   reg(P2)..reg(P2
fbc0: 2b 50 33 2d 31 29 20 28 22 42 22 29 2e 20 20 53  +P3-1) ("B").  S
fbd0: 61 76 65 20 74 68 65 20 72 65 73 75 6c 74 20 6f  ave the result o
fbe0: 66 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69  f.** the compari
fbf0: 73 6f 6e 20 66 6f 72 20 75 73 65 20 62 79 20 74  son for use by t
fc00: 68 65 20 6e 65 78 74 20 4f 50 5f 4a 75 6d 70 20  he next OP_Jump 
fc10: 69 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20  instruct..**.** 
fc20: 49 66 20 50 35 20 68 61 73 20 74 68 65 20 4f 50  If P5 has the OP
fc30: 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74  FLAG_PERMUTE bit
fc40: 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 6f   set, then the o
fc50: 72 64 65 72 20 6f 66 20 63 6f 6d 70 61 72 69 73  rder of comparis
fc60: 6f 6e 20 69 73 0a 2a 2a 20 64 65 74 65 72 6d 69  on is.** determi
fc70: 6e 65 64 20 62 79 20 74 68 65 20 6d 6f 73 74 20  ned by the most 
fc80: 72 65 63 65 6e 74 20 4f 50 5f 50 65 72 6d 75 74  recent OP_Permut
fc90: 61 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 20  ation operator. 
fca0: 20 49 66 20 74 68 65 0a 2a 2a 20 4f 50 46 4c 41   If the.** OPFLA
fcb0: 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20 69 73  G_PERMUTE bit is
fcc0: 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65 67   clear, then reg
fcd0: 69 73 74 65 72 20 61 72 65 20 63 6f 6d 70 61 72  ister are compar
fce0: 65 64 20 69 6e 20 73 65 71 75 65 6e 74 69 61 6c  ed in sequential
fcf0: 0a 2a 2a 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a  .** order..**.**
fd00: 20 50 34 20 69 73 20 61 20 4b 65 79 49 6e 66 6f   P4 is a KeyInfo
fd10: 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20   structure that 
fd20: 64 65 66 69 6e 65 73 20 63 6f 6c 6c 61 74 69 6e  defines collatin
fd30: 67 20 73 65 71 75 65 6e 63 65 73 20 61 6e 64 20  g sequences and 
fd40: 73 6f 72 74 0a 2a 2a 20 6f 72 64 65 72 73 20 66  sort.** orders f
fd50: 6f 72 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  or the compariso
fd60: 6e 2e 20 20 54 68 65 20 70 65 72 6d 75 74 61 74  n.  The permutat
fd70: 69 6f 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 72  ion applies to r
fd80: 65 67 69 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79  egisters.** only
fd90: 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 65  .  The KeyInfo e
fda0: 6c 65 6d 65 6e 74 73 20 61 72 65 20 75 73 65 64  lements are used
fdb0: 20 73 65 71 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a   sequentially..*
fdc0: 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 70 61 72 69  *.** The compari
fdd0: 73 6f 6e 20 69 73 20 61 20 73 6f 72 74 20 63 6f  son is a sort co
fde0: 6d 70 61 72 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c  mparison, so NUL
fdf0: 4c 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c  Ls compare equal
fe00: 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72 65 20 6c  ,.** NULLs are l
fe10: 65 73 73 20 74 68 61 6e 20 6e 75 6d 62 65 72 73  ess than numbers
fe20: 2c 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6c 65  , numbers are le
fe30: 73 73 20 74 68 61 6e 20 73 74 72 69 6e 67 73 2c  ss than strings,
fe40: 0a 2a 2a 20 61 6e 64 20 73 74 72 69 6e 67 73 20  .** and strings 
fe50: 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 62 6c  are less than bl
fe60: 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  obs..*/.case OP_
fe70: 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 69 6e 74  Compare: {.  int
fe80: 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69   n;.  int i;.  i
fe90: 6e 74 20 70 31 3b 0a 20 20 69 6e 74 20 70 32 3b  nt p1;.  int p2;
fea0: 0a 20 20 63 6f 6e 73 74 20 4b 65 79 49 6e 66 6f  .  const KeyInfo
feb0: 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e   *pKeyInfo;.  in
fec0: 74 20 69 64 78 3b 0a 20 20 43 6f 6c 6c 53 65 71  t idx;.  CollSeq
fed0: 20 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43   *pColl;    /* C
fee0: 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
fef0: 65 20 74 6f 20 75 73 65 20 6f 6e 20 74 68 69 73  e to use on this
ff00: 20 74 65 72 6d 20 2a 2f 0a 20 20 69 6e 74 20 62   term */.  int b
ff10: 52 65 76 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Rev;          /*
ff20: 20 54 72 75 65 20 66 6f 72 20 44 45 53 43 45 4e   True for DESCEN
ff30: 44 49 4e 47 20 73 6f 72 74 20 6f 72 64 65 72 20  DING sort order 
ff40: 2a 2f 0a 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e  */..  if( (pOp->
ff50: 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 45 52 4d  p5 & OPFLAG_PERM
ff60: 55 54 45 29 3d 3d 30 20 29 20 61 50 65 72 6d 75  UTE)==0 ) aPermu
ff70: 74 65 20 3d 20 30 3b 0a 20 20 6e 20 3d 20 70 4f  te = 0;.  n = pO
ff80: 70 2d 3e 70 33 3b 0a 20 20 70 4b 65 79 49 6e 66  p->p3;.  pKeyInf
ff90: 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79  o = pOp->p4.pKey
ffa0: 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20  Info;.  assert( 
ffb0: 6e 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  n>0 );.  assert(
ffc0: 20 70 4b 65 79 49 6e 66 6f 21 3d 30 20 29 3b 0a   pKeyInfo!=0 );.
ffd0: 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a    p1 = pOp->p1;.
ffe0: 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a    p2 = pOp->p2;.
fff0: 23 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  #if SQLITE_DEBUG
10000 0a 20 20 69 66 28 20 61 50 65 72 6d 75 74 65 20  .  if( aPermute 
10010 29 7b 0a 20 20 20 20 69 6e 74 20 6b 2c 20 6d 78  ){.    int k, mx
10020 20 3d 20 30 3b 0a 20 20 20 20 66 6f 72 28 6b 3d   = 0;.    for(k=
10030 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20 69 66 28  0; k<n; k++) if(
10040 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3e 6d 78 20   aPermute[k]>mx 
10050 29 20 6d 78 20 3d 20 61 50 65 72 6d 75 74 65 5b  ) mx = aPermute[
10060 6b 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  k];.    assert( 
10070 70 31 3e 30 20 26 26 20 70 31 2b 6d 78 3c 3d 28  p1>0 && p1+mx<=(
10080 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
10090 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20 61 73 73  or)+1 );.    ass
100a0 65 72 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b  ert( p2>0 && p2+
100b0 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  mx<=(p->nMem-p->
100c0 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20  nCursor)+1 );.  
100d0 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
100e0 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6e 3c  t( p1>0 && p1+n<
100f0 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
10100 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20 61  rsor)+1 );.    a
10110 73 73 65 72 74 28 20 70 32 3e 30 20 26 26 20 70  ssert( p2>0 && p
10120 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  2+n<=(p->nMem-p-
10130 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20  >nCursor)+1 );. 
10140 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   }.#endif /* SQL
10150 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20 66  ITE_DEBUG */.  f
10160 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b  or(i=0; i<n; i++
10170 29 7b 0a 20 20 20 20 69 64 78 20 3d 20 61 50 65  ){.    idx = aPe
10180 72 6d 75 74 65 20 3f 20 61 50 65 72 6d 75 74 65  rmute ? aPermute
10190 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20 61 73 73  [i] : i;.    ass
101a0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
101b0 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 20 29  &aMem[p1+idx]) )
101c0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
101d0 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
101e0 32 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20 20 52  2+idx]) );.    R
101f0 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 31  EGISTER_TRACE(p1
10200 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70 31 2b 69  +idx, &aMem[p1+i
10210 64 78 5d 29 3b 0a 20 20 20 20 52 45 47 49 53 54  dx]);.    REGIST
10220 45 52 5f 54 52 41 43 45 28 70 32 2b 69 64 78 2c  ER_TRACE(p2+idx,
10230 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 3b   &aMem[p2+idx]);
10240 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 3c 70  .    assert( i<p
10250 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 20  KeyInfo->nField 
10260 29 3b 0a 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70  );.    pColl = p
10270 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69  KeyInfo->aColl[i
10280 5d 3b 0a 20 20 20 20 62 52 65 76 20 3d 20 70 4b  ];.    bRev = pK
10290 65 79 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64  eyInfo->aSortOrd
102a0 65 72 5b 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70  er[i];.    iComp
102b0 61 72 65 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d  are = sqlite3Mem
102c0 43 6f 6d 70 61 72 65 28 26 61 4d 65 6d 5b 70 31  Compare(&aMem[p1
102d0 2b 69 64 78 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b  +idx], &aMem[p2+
102e0 69 64 78 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20  idx], pColl);.  
102f0 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65 20 29    if( iCompare )
10300 7b 0a 20 20 20 20 20 20 69 66 28 20 62 52 65 76  {.      if( bRev
10310 20 29 20 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69   ) iCompare = -i
10320 43 6f 6d 70 61 72 65 3b 0a 20 20 20 20 20 20 62  Compare;.      b
10330 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  reak;.    }.  }.
10340 20 20 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a    aPermute = 0;.
10350 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
10360 70 63 6f 64 65 3a 20 4a 75 6d 70 20 50 31 20 50  pcode: Jump P1 P
10370 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a  2 P3 * *.**.** J
10380 75 6d 70 20 74 6f 20 74 68 65 20 69 6e 73 74 72  ump to the instr
10390 75 63 74 69 6f 6e 20 61 74 20 61 64 64 72 65 73  uction at addres
103a0 73 20 50 31 2c 20 50 32 2c 20 6f 72 20 50 33 20  s P1, P2, or P3 
103b0 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65  depending on whe
103c0 74 68 65 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d  ther.** in the m
103d0 6f 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f  ost recent OP_Co
103e0 6d 70 61 72 65 20 69 6e 73 74 72 75 63 74 69 6f  mpare instructio
103f0 6e 20 74 68 65 20 50 31 20 76 65 63 74 6f 72 20  n the P1 vector 
10400 77 61 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a  was less than.**
10410 20 65 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72   equal to, or gr
10420 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 50  eater than the P
10430 32 20 76 65 63 74 6f 72 2c 20 72 65 73 70 65 63  2 vector, respec
10440 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20  tively..*/.case 
10450 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20  OP_Jump: {      
10460 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
10470 2f 0a 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65  /.  if( iCompare
10480 3c 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  <0 ){.    pc = p
10490 4f 70 2d 3e 70 31 20 2d 20 31 3b 20 20 56 64 62  Op->p1 - 1;  Vdb
104a0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c 33  eBranchTaken(0,3
104b0 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69  );.  }else if( i
104c0 43 6f 6d 70 61 72 65 3d 3d 30 20 29 7b 0a 20 20  Compare==0 ){.  
104d0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
104e0 20 31 3b 20 20 56 64 62 65 42 72 61 6e 63 68 54   1;  VdbeBranchT
104f0 61 6b 65 6e 28 31 2c 33 29 3b 0a 20 20 7d 65 6c  aken(1,3);.  }el
10500 73 65 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70  se{.    pc = pOp
10510 2d 3e 70 33 20 2d 20 31 3b 20 20 56 64 62 65 42  ->p3 - 1;  VdbeB
10520 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33 29 3b  ranchTaken(2,3);
10530 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
10540 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64 20  ./* Opcode: And 
10550 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
10560 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
10570 28 72 5b 50 31 5d 20 26 26 20 72 5b 50 32 5d 29  (r[P1] && r[P2])
10580 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20  .**.** Take the 
10590 6c 6f 67 69 63 61 6c 20 41 4e 44 20 6f 66 20 74  logical AND of t
105a0 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
105b0 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 32  isters P1 and P2
105c0 20 61 6e 64 0a 2a 2a 20 77 72 69 74 65 20 74 68   and.** write th
105d0 65 20 72 65 73 75 6c 74 20 69 6e 74 6f 20 72 65  e result into re
105e0 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a  gister P3..**.**
105f0 20 49 66 20 65 69 74 68 65 72 20 50 31 20 6f 72   If either P1 or
10600 20 50 32 20 69 73 20 30 20 28 66 61 6c 73 65 29   P2 is 0 (false)
10610 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
10620 20 69 73 20 30 20 65 76 65 6e 20 69 66 0a 2a 2a   is 0 even if.**
10630 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74   the other input
10640 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c   is NULL.  A NUL
10650 4c 20 61 6e 64 20 74 72 75 65 20 6f 72 20 74 77  L and true or tw
10660 6f 20 4e 55 4c 4c 73 20 67 69 76 65 0a 2a 2a 20  o NULLs give.** 
10670 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a  a NULL output..*
10680 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 72 20  /./* Opcode: Or 
10690 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
106a0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
106b0 28 72 5b 50 31 5d 20 7c 7c 20 72 5b 50 32 5d 29  (r[P1] || r[P2])
106c0 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20  .**.** Take the 
106d0 6c 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20 74 68  logical OR of th
106e0 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
106f0 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61  ster P1 and P2 a
10700 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20  nd.** store the 
10710 61 6e 73 77 65 72 20 69 6e 20 72 65 67 69 73 74  answer in regist
10720 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P3..**.** If 
10730 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20  either P1 or P2 
10740 69 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75 65  is nonzero (true
10750 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  ) then the resul
10760 74 20 69 73 20 31 20 28 74 72 75 65 29 0a 2a 2a  t is 1 (true).**
10770 20 65 76 65 6e 20 69 66 20 74 68 65 20 6f 74 68   even if the oth
10780 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
10790 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66 61  .  A NULL and fa
107a0 6c 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73  lse or two NULLs
107b0 0a 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c 20  .** give a NULL 
107c0 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20  output..*/.case 
107d0 4f 50 5f 41 6e 64 3a 20 20 20 20 20 20 20 20 20  OP_And:         
107e0 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
107f0 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32  TK_AND, in1, in2
10800 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
10810 50 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20 20 20  P_Or: {         
10820 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
10830 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  K_OR, in1, in2, 
10840 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76 31  out3 */.  int v1
10850 3b 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 70 65  ;    /* Left ope
10860 72 61 6e 64 3a 20 20 30 3d 3d 46 41 4c 53 45 2c  rand:  0==FALSE,
10870 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b   1==TRUE, 2==UNK
10880 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  NOWN or NULL */.
10890 20 20 69 6e 74 20 76 32 3b 20 20 20 20 2f 2a 20    int v2;    /* 
108a0 52 69 67 68 74 20 6f 70 65 72 61 6e 64 3a 20 30  Right operand: 0
108b0 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45  ==FALSE, 1==TRUE
108c0 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20  , 2==UNKNOWN or 
108d0 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 70 49 6e 31 20  NULL */..  pIn1 
108e0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
108f0 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c  ;.  if( pIn1->fl
10900 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
10910 7b 0a 20 20 20 20 76 31 20 3d 20 32 3b 0a 20 20  {.    v1 = 2;.  
10920 7d 65 6c 73 65 7b 0a 20 20 20 20 76 31 20 3d 20  }else{.    v1 = 
10930 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
10940 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 20 20  lue(pIn1)!=0;.  
10950 7d 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  }.  pIn2 = &aMem
10960 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28  [pOp->p2];.  if(
10970 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn2->flags & M
10980 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76  EM_Null ){.    v
10990 32 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a  2 = 2;.  }else{.
109a0 20 20 20 20 76 32 20 3d 20 73 71 6c 69 74 65 33      v2 = sqlite3
109b0 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
109c0 32 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 69 66 28  2)!=0;.  }.  if(
109d0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
109e0 5f 41 6e 64 20 29 7b 0a 20 20 20 20 73 74 61 74  _And ){.    stat
109f0 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  ic const unsigne
10a00 64 20 63 68 61 72 20 61 6e 64 5f 6c 6f 67 69 63  d char and_logic
10a10 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c 20 30 2c 20  [] = { 0, 0, 0, 
10a20 30 2c 20 31 2c 20 32 2c 20 30 2c 20 32 2c 20 32  0, 1, 2, 0, 2, 2
10a30 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 61 6e 64   };.    v1 = and
10a40 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b  _logic[v1*3+v2];
10a50 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 74  .  }else{.    st
10a60 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67  atic const unsig
10a70 6e 65 64 20 63 68 61 72 20 6f 72 5f 6c 6f 67 69  ned char or_logi
10a80 63 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c 20 32 2c  c[] = { 0, 1, 2,
10a90 20 31 2c 20 31 2c 20 31 2c 20 32 2c 20 31 2c 20   1, 1, 1, 2, 1, 
10aa0 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 6f 72  2 };.    v1 = or
10ab0 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b  _logic[v1*3+v2];
10ac0 0a 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26 61  .  }.  pOut = &a
10ad0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
10ae0 69 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20 20 20  if( v1==2 ){.   
10af0 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
10b00 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  pOut, MEM_Null);
10b10 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f  .  }else{.    pO
10b20 75 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a 20 20  ut->u.i = v1;.  
10b30 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
10b40 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
10b50 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
10b60 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 20  ./* Opcode: Not 
10b70 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
10b80 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 20  ynopsis: r[P2]= 
10b90 21 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74  !r[P1].**.** Int
10ba0 65 72 70 72 65 74 20 74 68 65 20 76 61 6c 75 65  erpret the value
10bb0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
10bc0 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c  as a boolean val
10bd0 75 65 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a  ue.  Store the.*
10be0 2a 20 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65  * boolean comple
10bf0 6d 65 6e 74 20 69 6e 20 72 65 67 69 73 74 65 72  ment in register
10c00 20 50 32 2e 20 20 49 66 20 74 68 65 20 76 61 6c   P2.  If the val
10c10 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
10c20 31 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74  1 is .** NULL, t
10c30 68 65 6e 20 61 20 4e 55 4c 4c 20 69 73 20 73 74  hen a NULL is st
10c40 6f 72 65 64 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63  ored in P2..*/.c
10c50 61 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20  ase OP_Not: {   
10c60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10c70 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 2c 20  same as TK_NOT, 
10c80 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70  in1, out2 */.  p
10c90 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
10ca0 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  >p1];.  pOut = &
10cb0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
10cc0 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73   if( pIn1->flags
10cd0 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
10ce0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
10cf0 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
10d00 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c    }else{.    sql
10d10 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
10d20 74 36 34 28 70 4f 75 74 2c 20 21 73 71 6c 69 74  t64(pOut, !sqlit
10d30 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
10d40 49 6e 31 29 29 3b 0a 20 20 7d 0a 20 20 62 72 65  In1));.  }.  bre
10d50 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
10d60 3a 20 42 69 74 4e 6f 74 20 50 31 20 50 32 20 2a  : BitNot P1 P2 *
10d70 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
10d80 3a 20 72 5b 50 31 5d 3d 20 7e 72 5b 50 31 5d 0a  : r[P1]= ~r[P1].
10d90 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20  **.** Interpret 
10da0 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
10db0 65 67 69 73 74 65 72 20 50 31 20 61 73 20 61 6e  egister P1 as an
10dc0 20 69 6e 74 65 67 65 72 2e 20 20 53 74 6f 72 65   integer.  Store
10dd0 20 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d 63 6f 6d   the.** ones-com
10de0 70 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 50  plement of the P
10df0 31 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67  1 value into reg
10e00 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 50 31  ister P2.  If P1
10e10 20 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e 55 4c 4c   holds.** a NULL
10e20 20 74 68 65 6e 20 73 74 6f 72 65 20 61 20 4e 55   then store a NU
10e30 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73  LL in P2..*/.cas
10e40 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b 20 20  e OP_BitNot: {  
10e50 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
10e60 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f 54 2c  me as TK_BITNOT,
10e70 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20   in1, out2 */.  
10e80 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
10e90 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p1];.  pOut = 
10ea0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
10eb0 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67    if( pIn1->flag
10ec0 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
10ed0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
10ee0 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
10ef0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71  .  }else{.    sq
10f00 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49  lite3VdbeMemSetI
10f10 6e 74 36 34 28 70 4f 75 74 2c 20 7e 73 71 6c 69  nt64(pOut, ~sqli
10f20 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
10f30 70 49 6e 31 29 29 3b 0a 20 20 7d 0a 20 20 62 72  pIn1));.  }.  br
10f40 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
10f50 65 3a 20 4f 6e 63 65 20 50 31 20 50 32 20 2a 20  e: Once P1 P2 * 
10f60 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20  * *.**.** Check 
10f70 69 66 20 4f 50 5f 4f 6e 63 65 20 66 6c 61 67 20  if OP_Once flag 
10f80 50 31 20 69 73 20 73 65 74 2e 20 49 66 20 73 6f  P1 is set. If so
10f90 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75  , jump to instru
10fa0 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77  ction P2. Otherw
10fb0 69 73 65 2c 0a 2a 2a 20 73 65 74 20 74 68 65 20  ise,.** set the 
10fc0 66 6c 61 67 20 61 6e 64 20 66 61 6c 6c 20 74 68  flag and fall th
10fd0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
10fe0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  t instruction.  
10ff0 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 0a  In other words,.
11000 2a 2a 20 74 68 69 73 20 6f 70 63 6f 64 65 20 63  ** this opcode c
11010 61 75 73 65 73 20 61 6c 6c 20 66 6f 6c 6c 6f 77  auses all follow
11020 69 6e 67 20 6f 70 63 6f 64 65 73 20 75 70 20 74  ing opcodes up t
11030 68 72 6f 75 67 68 20 50 32 20 28 62 75 74 20 6e  hrough P2 (but n
11040 6f 74 20 69 6e 63 6c 75 64 69 6e 67 0a 2a 2a 20  ot including.** 
11050 50 32 29 20 74 6f 20 72 75 6e 20 6a 75 73 74 20  P2) to run just 
11060 6f 6e 63 65 20 61 6e 64 20 74 6f 20 62 65 20 73  once and to be s
11070 6b 69 70 70 65 64 20 6f 6e 20 73 75 62 73 65 71  kipped on subseq
11080 75 65 6e 74 20 74 69 6d 65 73 20 74 68 72 6f 75  uent times throu
11090 67 68 20 74 68 65 20 6c 6f 6f 70 2e 0a 2a 2f 0a  gh the loop..*/.
110a0 63 61 73 65 20 4f 50 5f 4f 6e 63 65 3a 20 7b 20  case OP_Once: { 
110b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
110c0 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ump */.  assert(
110d0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 4f 6e 63   pOp->p1<p->nOnc
110e0 65 46 6c 61 67 20 29 3b 0a 20 20 56 64 62 65 42  eFlag );.  VdbeB
110f0 72 61 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 61 4f  ranchTaken(p->aO
11100 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d  nceFlag[pOp->p1]
11110 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70  !=0, 2);.  if( p
11120 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b 70 4f 70 2d  ->aOnceFlag[pOp-
11130 3e 70 31 5d 20 29 7b 0a 20 20 20 20 70 63 20 3d  >p1] ){.    pc =
11140 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 65   pOp->p2-1;.  }e
11150 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 61 4f 6e 63  lse{.    p->aOnc
11160 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 20 3d  eFlag[pOp->p1] =
11170 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
11180 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
11190 66 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  f P1 P2 P3 * *.*
111a0 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20  *.** Jump to P2 
111b0 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  if the value in 
111c0 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 74  register P1 is t
111d0 72 75 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a  rue.  The value.
111e0 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  ** is considered
111f0 20 74 72 75 65 20 69 66 20 69 74 20 69 73 20 6e   true if it is n
11200 75 6d 65 72 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a  umeric and non-z
11210 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c  ero.  If the val
11220 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e  ue.** in P1 is N
11230 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68  ULL then take th
11240 65 20 6a 75 6d 70 20 69 66 20 50 33 20 69 73 20  e jump if P3 is 
11250 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 2f 2a 20  non-zero..*/./* 
11260 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74 20 50 31  Opcode: IfNot P1
11270 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
11280 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
11290 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
112a0 73 74 65 72 20 50 31 20 69 73 20 46 61 6c 73 65  ster P1 is False
112b0 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20  .  The value.** 
112c0 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 66 61  is considered fa
112d0 6c 73 65 20 69 66 20 69 74 20 68 61 73 20 61 20  lse if it has a 
112e0 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 20 6f 66  numeric value of
112f0 20 7a 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76   zero.  If the v
11300 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73  alue.** in P1 is
11310 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20   NULL then take 
11320 74 68 65 20 6a 75 6d 70 20 69 66 20 50 33 20 69  the jump if P3 i
11330 73 20 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20  s zero..*/.case 
11340 4f 50 5f 49 66 3a 20 20 20 20 20 20 20 20 20 20  OP_If:          
11350 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
11360 69 6e 31 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  in1 */.case OP_I
11370 66 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20  fNot: {         
11380 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
11390 2a 2f 0a 20 20 69 6e 74 20 63 3b 0a 20 20 70 49  */.  int c;.  pI
113a0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
113b0 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  p1];.  if( pIn1-
113c0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
113d0 6c 20 29 7b 0a 20 20 20 20 63 20 3d 20 70 4f 70  l ){.    c = pOp
113e0 2d 3e 70 33 3b 0a 20 20 7d 65 6c 73 65 7b 0a 23  ->p3;.  }else{.#
113f0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
11400 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
11410 0a 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65 33  .    c = sqlite3
11420 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
11430 31 29 21 3d 30 3b 0a 23 65 6c 73 65 0a 20 20 20  1)!=0;.#else.   
11440 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65   c = sqlite3Vdbe
11450 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 21  RealValue(pIn1)!
11460 3d 30 2e 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20  =0.0;.#endif.   
11470 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
11480 3d 3d 4f 50 5f 49 66 4e 6f 74 20 29 20 63 20 3d  ==OP_IfNot ) c =
11490 20 21 63 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42   !c;.  }.  VdbeB
114a0 72 61 6e 63 68 54 61 6b 65 6e 28 63 21 3d 30 2c  ranchTaken(c!=0,
114b0 20 32 29 3b 0a 20 20 69 66 28 20 63 20 29 7b 0a   2);.  if( c ){.
114c0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
114d0 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  -1;.  }.  break;
114e0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
114f0 73 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20  sNull P1 P2 * * 
11500 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
11510 69 66 20 72 5b 50 31 5d 3d 3d 4e 55 4c 4c 20 67  if r[P1]==NULL g
11520 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d  oto P2.**.** Jum
11530 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76  p to P2 if the v
11540 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
11550 20 50 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a   P1 is NULL..*/.
11560 63 61 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20  case OP_IsNull: 
11570 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
11580 73 61 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55 4c  same as TK_ISNUL
11590 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  L, jump, in1 */.
115a0 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
115b0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56 64 62 65 42  Op->p1];.  VdbeB
115c0 72 61 6e 63 68 54 61 6b 65 6e 28 20 28 70 49 6e  ranchTaken( (pIn
115d0 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
115e0 75 6c 6c 29 21 3d 30 2c 20 32 29 3b 0a 20 20 69  ull)!=0, 2);.  i
115f0 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
11600 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29  & MEM_Null)!=0 )
11610 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
11620 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
11630 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
11640 65 3a 20 4e 6f 74 4e 75 6c 6c 20 50 31 20 50 32  e: NotNull P1 P2
11650 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
11660 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d 4e 55  is: if r[P1]!=NU
11670 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  LL goto P2.**.**
11680 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
11690 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
116a0 73 74 65 72 20 50 31 20 69 73 20 6e 6f 74 20 4e  ster P1 is not N
116b0 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f  ULL.  .*/.case O
116c0 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20 20  P_NotNull: {    
116d0 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
116e0 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a  as TK_NOTNULL, j
116f0 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
11700 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
11710 70 31 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  p1];.  VdbeBranc
11720 68 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66  hTaken( (pIn1->f
11730 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
11740 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28  ==0, 2);.  if( (
11750 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
11760 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20  M_Null)==0 ){.  
11770 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
11780 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
11790 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
117a0 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20 50  olumn P1 P2 P3 P
117b0 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
117c0 3a 20 20 72 5b 50 33 5d 3d 50 58 0a 2a 2a 0a 2a  :  r[P3]=PX.**.*
117d0 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20  * Interpret the 
117e0 64 61 74 61 20 74 68 61 74 20 63 75 72 73 6f 72  data that cursor
117f0 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 20 61 73   P1 points to as
11800 20 61 20 73 74 72 75 63 74 75 72 65 20 62 75 69   a structure bui
11810 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20  lt using.** the 
11820 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72  MakeRecord instr
11830 75 63 74 69 6f 6e 2e 20 20 28 53 65 65 20 74 68  uction.  (See th
11840 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70 63  e MakeRecord opc
11850 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
11860 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f  al.** informatio
11870 6e 20 61 62 6f 75 74 20 74 68 65 20 66 6f 72 6d  n about the form
11880 61 74 20 6f 66 20 74 68 65 20 64 61 74 61 2e 29  at of the data.)
11890 20 20 45 78 74 72 61 63 74 20 74 68 65 20 50 32    Extract the P2
118a0 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 66 72  -th column.** fr
118b0 6f 6d 20 74 68 69 73 20 72 65 63 6f 72 64 2e 20  om this record. 
118c0 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6c 65   If there are le
118d0 73 73 20 74 68 61 74 20 28 50 32 2b 31 29 20 0a  ss that (P2+1) .
118e0 2a 2a 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  ** values in the
118f0 20 72 65 63 6f 72 64 2c 20 65 78 74 72 61 63 74   record, extract
11900 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54   a NULL..**.** T
11910 68 65 20 76 61 6c 75 65 20 65 78 74 72 61 63 74  he value extract
11920 65 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ed is stored in 
11930 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a  register P3..**.
11940 2a 2a 20 49 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ** If the column
11950 20 63 6f 6e 74 61 69 6e 73 20 66 65 77 65 72 20   contains fewer 
11960 74 68 61 6e 20 50 32 20 66 69 65 6c 64 73 2c 20  than P2 fields, 
11970 74 68 65 6e 20 65 78 74 72 61 63 74 20 61 20 4e  then extract a N
11980 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20 69 66 20  ULL.  Or,.** if 
11990 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20  the P4 argument 
119a0 69 73 20 61 20 50 34 5f 4d 45 4d 20 75 73 65 20  is a P4_MEM use 
119b0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
119c0 20 50 34 20 61 72 67 75 6d 65 6e 74 20 61 73 0a   P4 argument as.
119d0 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 2e 0a 2a  ** the result..*
119e0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
119f0 41 47 5f 43 4c 45 41 52 43 41 43 48 45 20 62 69  AG_CLEARCACHE bi
11a00 74 20 69 73 20 73 65 74 20 6f 6e 20 50 35 20 61  t is set on P5 a
11a10 6e 64 20 50 31 20 69 73 20 61 20 70 73 65 75 64  nd P1 is a pseud
11a20 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72 2c 0a  o-table cursor,.
11a30 2a 2a 20 74 68 65 6e 20 74 68 65 20 63 61 63 68  ** then the cach
11a40 65 20 6f 66 20 74 68 65 20 63 75 72 73 6f 72 20  e of the cursor 
11a50 69 73 20 72 65 73 65 74 20 70 72 69 6f 72 20 74  is reset prior t
11a60 6f 20 65 78 74 72 61 63 74 69 6e 67 20 74 68 65  o extracting the
11a70 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 54 68 65 20   column..** The 
11a80 66 69 72 73 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20  first OP_Column 
11a90 61 67 61 69 6e 73 74 20 61 20 70 73 65 75 64 6f  against a pseudo
11aa0 2d 74 61 62 6c 65 20 61 66 74 65 72 20 74 68 65  -table after the
11ab0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f   value of the co
11ac0 6e 74 65 6e 74 0a 2a 2a 20 72 65 67 69 73 74 65  ntent.** registe
11ad0 72 20 68 61 73 20 63 68 61 6e 67 65 64 20 73 68  r has changed sh
11ae0 6f 75 6c 64 20 68 61 76 65 20 74 68 69 73 20 62  ould have this b
11af0 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 49 66  it set..**.** If
11b00 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47   the OPFLAG_LENG
11b10 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47  THARG and OPFLAG
11b20 5f 54 59 50 45 4f 46 41 52 47 20 62 69 74 73 20  _TYPEOFARG bits 
11b30 61 72 65 20 73 65 74 20 6f 6e 20 50 35 20 77 68  are set on P5 wh
11b40 65 6e 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74  en.** the result
11b50 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 20 74   is guaranteed t
11b60 6f 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 61  o only be used a
11b70 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 6f  s the argument o
11b80 66 20 61 20 6c 65 6e 67 74 68 28 29 0a 2a 2a 20  f a length().** 
11b90 6f 72 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63  or typeof() func
11ba0 74 69 6f 6e 2c 20 72 65 73 70 65 63 74 69 76 65  tion, respective
11bb0 6c 79 2e 20 20 54 68 65 20 6c 6f 61 64 69 6e 67  ly.  The loading
11bc0 20 6f 66 20 6c 61 72 67 65 20 62 6c 6f 62 73 20   of large blobs 
11bd0 63 61 6e 20 62 65 0a 2a 2a 20 73 6b 69 70 70 65  can be.** skippe
11be0 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 61  d for length() a
11bf0 6e 64 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 20 6c  nd all content l
11c00 6f 61 64 69 6e 67 20 63 61 6e 20 62 65 20 73 6b  oading can be sk
11c10 69 70 70 65 64 20 66 6f 72 20 74 79 70 65 6f 66  ipped for typeof
11c20 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  ()..*/.case OP_C
11c30 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 69 36 34 20 70  olumn: {.  i64 p
11c40 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 20 2f 2a  ayloadSize64; /*
11c50 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
11c60 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a   in the record *
11c70 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20  /.  int p2;     
11c80 20 20 20 20 20 20 20 2f 2a 20 63 6f 6c 75 6d 6e         /* column
11c90 20 6e 75 6d 62 65 72 20 74 6f 20 72 65 74 72 69   number to retri
11ca0 65 76 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  eve */.  VdbeCur
11cb0 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54  sor *pC;    /* T
11cc0 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 2a  he VDBE cursor *
11cd0 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  /.  BtCursor *pC
11ce0 72 73 72 3b 20 20 20 2f 2a 20 54 68 65 20 42 54  rsr;   /* The BT
11cf0 72 65 65 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20  ree cursor */.  
11d00 75 33 32 20 2a 61 54 79 70 65 3b 20 20 20 20 20  u32 *aType;     
11d10 20 20 20 2f 2a 20 61 54 79 70 65 5b 69 5d 20 68     /* aType[i] h
11d20 6f 6c 64 73 20 74 68 65 20 6e 75 6d 65 72 69 63  olds the numeric
11d30 20 74 79 70 65 20 6f 66 20 74 68 65 20 69 2d 74   type of the i-t
11d40 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 75 33  h column */.  u3
11d50 32 20 2a 61 4f 66 66 73 65 74 3b 20 20 20 20 20  2 *aOffset;     
11d60 20 2f 2a 20 61 4f 66 66 73 65 74 5b 69 5d 20 69   /* aOffset[i] i
11d70 73 20 6f 66 66 73 65 74 20 74 6f 20 73 74 61 72  s offset to star
11d80 74 20 6f 66 20 64 61 74 61 20 66 6f 72 20 69 2d  t of data for i-
11d90 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69  th column */.  i
11da0 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20  nt len;         
11db0 20 20 2f 2a 20 54 68 65 20 6c 65 6e 67 74 68 20    /* The length 
11dc0 6f 66 20 74 68 65 20 73 65 72 69 61 6c 69 7a 65  of the serialize
11dd0 64 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 63  d data for the c
11de0 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 69  olumn */.  int i
11df0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
11e00 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f   Loop counter */
11e10 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 20 20  .  Mem *pDest;  
11e20 20 20 20 20 20 20 2f 2a 20 57 68 65 72 65 20 74        /* Where t
11e30 6f 20 77 72 69 74 65 20 74 68 65 20 65 78 74 72  o write the extr
11e40 61 63 74 65 64 20 76 61 6c 75 65 20 2a 2f 0a 20  acted value */. 
11e50 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20   Mem sMem;      
11e60 20 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69      /* For stori
11e70 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20 62 65  ng the record be
11e80 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20  ing decoded */. 
11e90 20 63 6f 6e 73 74 20 75 38 20 2a 7a 44 61 74 61   const u8 *zData
11ea0 3b 20 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 74  ;   /* Part of t
11eb0 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20  he record being 
11ec0 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e  decoded */.  con
11ed0 73 74 20 75 38 20 2a 7a 48 64 72 3b 20 20 20 20  st u8 *zHdr;    
11ee0 2f 2a 20 4e 65 78 74 20 75 6e 70 61 72 73 65 64  /* Next unparsed
11ef0 20 62 79 74 65 20 6f 66 20 74 68 65 20 68 65 61   byte of the hea
11f00 64 65 72 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75  der */.  const u
11f10 38 20 2a 7a 45 6e 64 48 64 72 3b 20 2f 2a 20 50  8 *zEndHdr; /* P
11f20 6f 69 6e 74 65 72 20 74 6f 20 66 69 72 73 74 20  ointer to first 
11f30 62 79 74 65 20 61 66 74 65 72 20 74 68 65 20 68  byte after the h
11f40 65 61 64 65 72 20 2a 2f 0a 20 20 75 33 32 20 6f  eader */.  u32 o
11f50 66 66 73 65 74 3b 20 20 20 20 20 20 20 20 2f 2a  ffset;        /*
11f60 20 4f 66 66 73 65 74 20 69 6e 74 6f 20 74 68 65   Offset into the
11f70 20 64 61 74 61 20 2a 2f 0a 20 20 75 33 32 20 73   data */.  u32 s
11f80 7a 46 69 65 6c 64 3b 20 20 20 20 20 20 20 2f 2a  zField;       /*
11f90 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
11fa0 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   in the content 
11fb0 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a 20 20  of a field */.  
11fc0 75 33 32 20 61 76 61 69 6c 3b 20 20 20 20 20 20  u32 avail;      
11fd0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
11fe0 62 79 74 65 73 20 6f 66 20 61 76 61 69 6c 61 62  bytes of availab
11ff0 6c 65 20 64 61 74 61 20 2a 2f 0a 20 20 75 33 32  le data */.  u32
12000 20 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   t;             
12010 2f 2a 20 41 20 74 79 70 65 20 63 6f 64 65 20 66  /* A type code f
12020 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 20 68  rom the record h
12030 65 61 64 65 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a  eader */.  Mem *
12040 70 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  pReg;         /*
12050 20 50 73 65 75 64 6f 54 61 62 6c 65 20 69 6e 70   PseudoTable inp
12060 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 0a  ut register */..
12070 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a    p2 = pOp->p2;.
12080 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
12090 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
120a0 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
120b0 73 6f 72 29 20 29 3b 0a 20 20 70 44 65 73 74 20  sor) );.  pDest 
120c0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
120d0 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
120e0 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29 3b 0a  ange(p, pDest);.
120f0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
12100 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
12110 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
12120 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
12130 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
12140 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
12150 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e 46 69 65  ert( p2<pC->nFie
12160 6c 64 20 29 3b 0a 20 20 61 54 79 70 65 20 3d 20  ld );.  aType = 
12170 70 43 2d 3e 61 54 79 70 65 3b 0a 20 20 61 4f 66  pC->aType;.  aOf
12180 66 73 65 74 20 3d 20 61 54 79 70 65 20 2b 20 70  fset = aType + p
12190 43 2d 3e 6e 46 69 65 6c 64 3b 0a 23 69 66 6e 64  C->nField;.#ifnd
121a0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
121b0 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 61 73  IRTUALTABLE.  as
121c0 73 65 72 74 28 20 70 43 2d 3e 70 56 74 61 62 43  sert( pC->pVtabC
121d0 75 72 73 6f 72 3d 3d 30 20 29 3b 20 2f 2a 20 4f  ursor==0 ); /* O
121e0 50 5f 43 6f 6c 75 6d 6e 20 6e 65 76 65 72 20 63  P_Column never c
121f0 61 6c 6c 65 64 20 6f 6e 20 76 69 72 74 75 61 6c  alled on virtual
12200 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e 64 69 66   table */.#endif
12210 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70  .  pCrsr = pC->p
12220 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74  Cursor;.  assert
12230 28 20 70 43 72 73 72 21 3d 30 20 7c 7c 20 70 43  ( pCrsr!=0 || pC
12240 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67  ->pseudoTableReg
12250 3e 30 20 29 3b 20 2f 2a 20 70 43 72 73 72 20 4e  >0 ); /* pCrsr N
12260 55 4c 4c 20 6f 6e 20 50 73 65 75 64 6f 54 61 62  ULL on PseudoTab
12270 6c 65 73 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  les */.  assert(
12280 20 70 43 72 73 72 21 3d 30 20 7c 7c 20 70 43 2d   pCrsr!=0 || pC-
12290 3e 6e 75 6c 6c 52 6f 77 20 29 3b 20 20 20 20 20  >nullRow );     
122a0 20 20 20 20 20 2f 2a 20 70 43 2d 3e 6e 75 6c 6c       /* pC->null
122b0 52 6f 77 20 6f 6e 20 50 73 65 75 64 6f 54 61 62  Row on PseudoTab
122c0 6c 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20  les */..  /* If 
122d0 74 68 65 20 63 75 72 73 6f 72 20 63 61 63 68 65  the cursor cache
122e0 20 69 73 20 73 74 61 6c 65 2c 20 62 72 69 6e 67   is stale, bring
122f0 20 69 74 20 75 70 2d 74 6f 2d 64 61 74 65 20 2a   it up-to-date *
12300 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  /.  rc = sqlite3
12310 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
12320 28 70 43 29 3b 0a 20 20 69 66 28 20 72 63 20 29  (pC);.  if( rc )
12330 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
12340 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20  to_error;.  if( 
12350 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 21  pC->cacheStatus!
12360 3d 70 2d 3e 63 61 63 68 65 43 74 72 20 7c 7c 20  =p->cacheCtr || 
12370 28 70 4f 70 2d 3e 70 35 26 4f 50 46 4c 41 47 5f  (pOp->p5&OPFLAG_
12380 43 4c 45 41 52 43 41 43 48 45 29 21 3d 30 20 29  CLEARCACHE)!=0 )
12390 7b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 75  {.    if( pC->nu
123a0 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 69  llRow ){.      i
123b0 66 28 20 70 43 72 73 72 3d 3d 30 20 29 7b 0a 20  f( pCrsr==0 ){. 
123c0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
123d0 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  C->pseudoTableRe
123e0 67 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 70  g>0 );.        p
123f0 52 65 67 20 3d 20 26 61 4d 65 6d 5b 70 43 2d 3e  Reg = &aMem[pC->
12400 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 5d 3b  pseudoTableReg];
12410 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
12420 20 70 52 65 67 2d 3e 66 6c 61 67 73 20 26 20 4d   pReg->flags & M
12430 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 20  EM_Blob );.     
12440 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
12450 56 61 6c 69 64 28 70 52 65 67 29 20 29 3b 0a 20  Valid(pReg) );. 
12460 20 20 20 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f         pC->paylo
12470 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e 73 7a 52  adSize = pC->szR
12480 6f 77 20 3d 20 61 76 61 69 6c 20 3d 20 70 52 65  ow = avail = pRe
12490 67 2d 3e 6e 3b 0a 20 20 20 20 20 20 20 20 70 43  g->n;.        pC
124a0 2d 3e 61 52 6f 77 20 3d 20 28 75 38 2a 29 70 52  ->aRow = (u8*)pR
124b0 65 67 2d 3e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c  eg->z;.      }el
124c0 73 65 7b 0a 20 20 20 20 20 20 20 20 4d 65 6d 53  se{.        MemS
124d0 65 74 54 79 70 65 46 6c 61 67 28 70 44 65 73 74  etTypeFlag(pDest
124e0 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20  , MEM_Null);.   
124f0 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
12500 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d  umn_out;.      }
12510 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
12520 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 20    assert( pCrsr 
12530 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d  );.      if( pC-
12540 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20  >isTable==0 ){. 
12550 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73         assert( s
12560 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
12570 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20  rIsValid(pCrsr) 
12580 29 3b 0a 20 20 20 20 20 20 20 20 56 56 41 5f 4f  );.        VVA_O
12590 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65  NLY(rc =) sqlite
125a0 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43  3BtreeKeySize(pC
125b0 72 73 72 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a  rsr, &payloadSiz
125c0 65 36 34 29 3b 0a 20 20 20 20 20 20 20 20 61 73  e64);.        as
125d0 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
125e0 5f 4f 4b 20 29 3b 20 2f 2a 20 54 72 75 65 20 62  _OK ); /* True b
125f0 65 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72  ecause of Cursor
12600 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 61 62  Moveto() call ab
12610 6f 76 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 2f  ove */.        /
12620 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61  * sqlite3BtreePa
12630 72 73 65 43 65 6c 6c 50 74 72 28 29 20 75 73 65  rseCellPtr() use
12640 73 20 67 65 74 56 61 72 69 6e 74 33 32 28 29 20  s getVarint32() 
12650 74 6f 20 65 78 74 72 61 63 74 20 74 68 65 0a 20  to extract the. 
12660 20 20 20 20 20 20 20 2a 2a 20 70 61 79 6c 6f 61         ** payloa
12670 64 20 73 69 7a 65 2c 20 73 6f 20 69 74 20 69 73  d size, so it is
12680 20 69 6d 70 6f 73 73 69 62 6c 65 20 66 6f 72 20   impossible for 
12690 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 74 6f  payloadSize64 to
126a0 20 62 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 6c   be.        ** l
126b0 61 72 67 65 72 20 74 68 61 6e 20 33 32 20 62 69  arger than 32 bi
126c0 74 73 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61  ts. */.        a
126d0 73 73 65 72 74 28 20 28 70 61 79 6c 6f 61 64 53  ssert( (payloadS
126e0 69 7a 65 36 34 20 26 20 53 51 4c 49 54 45 5f 4d  ize64 & SQLITE_M
126f0 41 58 5f 55 33 32 29 3d 3d 28 75 36 34 29 70 61  AX_U32)==(u64)pa
12700 79 6c 6f 61 64 53 69 7a 65 36 34 20 29 3b 0a 20  yloadSize64 );. 
12710 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20         pC->aRow 
12720 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65  = sqlite3BtreeKe
12730 79 46 65 74 63 68 28 70 43 72 73 72 2c 20 26 61  yFetch(pCrsr, &a
12740 76 61 69 6c 29 3b 0a 20 20 20 20 20 20 20 20 70  vail);.        p
12750 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d  C->payloadSize =
12760 20 28 75 33 32 29 70 61 79 6c 6f 61 64 53 69 7a   (u32)payloadSiz
12770 65 36 34 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  e64;.      }else
12780 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
12790 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  ( sqlite3BtreeCu
127a0 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73  rsorIsValid(pCrs
127b0 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 56 56  r) );.        VV
127c0 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c  A_ONLY(rc =) sql
127d0 69 74 65 33 42 74 72 65 65 44 61 74 61 53 69 7a  ite3BtreeDataSiz
127e0 65 28 70 43 72 73 72 2c 20 26 70 43 2d 3e 70 61  e(pCrsr, &pC->pa
127f0 79 6c 6f 61 64 53 69 7a 65 29 3b 0a 20 20 20 20  yloadSize);.    
12800 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
12810 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f  SQLITE_OK );   /
12820 2a 20 44 61 74 61 53 69 7a 65 28 29 20 63 61 6e  * DataSize() can
12830 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20 20 20 20  not fail */.    
12840 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 73      pC->aRow = s
12850 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 46  qlite3BtreeDataF
12860 65 74 63 68 28 70 43 72 73 72 2c 20 26 61 76 61  etch(pCrsr, &ava
12870 69 6c 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  il);.      }.   
12880 20 20 20 61 73 73 65 72 74 28 20 61 76 61 69 6c     assert( avail
12890 3c 3d 36 35 35 33 36 20 29 3b 20 20 2f 2a 20 4d  <=65536 );  /* M
128a0 61 78 69 6d 75 6d 20 70 61 67 65 20 73 69 7a 65  aximum page size
128b0 20 69 73 20 36 34 4b 69 42 20 2a 2f 0a 20 20 20   is 64KiB */.   
128c0 20 20 20 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f     if( pC->paylo
128d0 61 64 53 69 7a 65 20 3c 3d 20 28 75 33 32 29 61  adSize <= (u32)a
128e0 76 61 69 6c 20 29 7b 0a 20 20 20 20 20 20 20 20  vail ){.        
128f0 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 70 43 2d 3e  pC->szRow = pC->
12900 70 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20  payloadSize;.   
12910 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
12920 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 61 76    pC->szRow = av
12930 61 69 6c 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ail;.      }.   
12940 20 20 20 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f     if( pC->paylo
12950 61 64 53 69 7a 65 20 3e 20 28 75 33 32 29 64 62  adSize > (u32)db
12960 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
12970 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
12980 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 74 6f  .        goto to
12990 6f 5f 62 69 67 3b 0a 20 20 20 20 20 20 7d 0a 20  o_big;.      }. 
129a0 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 63 61 63     }.    pC->cac
129b0 68 65 53 74 61 74 75 73 20 3d 20 70 2d 3e 63 61  heStatus = p->ca
129c0 63 68 65 43 74 72 3b 0a 20 20 20 20 70 43 2d 3e  cheCtr;.    pC->
129d0 69 48 64 72 4f 66 66 73 65 74 20 3d 20 67 65 74  iHdrOffset = get
129e0 56 61 72 69 6e 74 33 32 28 70 43 2d 3e 61 52 6f  Varint32(pC->aRo
129f0 77 2c 20 6f 66 66 73 65 74 29 3b 0a 20 20 20 20  w, offset);.    
12a00 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 3d  pC->nHdrParsed =
12a10 20 30 3b 0a 20 20 20 20 61 4f 66 66 73 65 74 5b   0;.    aOffset[
12a20 30 5d 20 3d 20 6f 66 66 73 65 74 3b 0a 20 20 20  0] = offset;.   
12a30 20 69 66 28 20 61 76 61 69 6c 3c 6f 66 66 73 65   if( avail<offse
12a40 74 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 70 43  t ){.      /* pC
12a50 2d 3e 61 52 6f 77 20 64 6f 65 73 20 6e 6f 74 20  ->aRow does not 
12a60 68 61 76 65 20 74 6f 20 68 6f 6c 64 20 74 68 65  have to hold the
12a70 20 65 6e 74 69 72 65 20 72 6f 77 2c 20 62 75 74   entire row, but
12a80 20 69 74 20 64 6f 65 73 20 61 74 20 6c 65 61 73   it does at leas
12a90 74 0a 20 20 20 20 20 20 2a 2a 20 6e 65 65 64 20  t.      ** need 
12aa0 74 6f 20 63 6f 76 65 72 20 74 68 65 20 68 65 61  to cover the hea
12ab0 64 65 72 20 6f 66 20 74 68 65 20 72 65 63 6f 72  der of the recor
12ac0 64 2e 20 20 49 66 20 70 43 2d 3e 61 52 6f 77 20  d.  If pC->aRow 
12ad0 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e  does not contain
12ae0 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 63 6f  .      ** the co
12af0 6d 70 6c 65 74 65 20 68 65 61 64 65 72 2c 20 74  mplete header, t
12b00 68 65 6e 20 73 65 74 20 69 74 20 74 6f 20 7a 65  hen set it to ze
12b10 72 6f 2c 20 66 6f 72 63 69 6e 67 20 74 68 65 20  ro, forcing the 
12b20 68 65 61 64 65 72 20 74 6f 20 62 65 0a 20 20 20  header to be.   
12b30 20 20 20 2a 2a 20 64 79 6e 61 6d 69 63 61 6c 6c     ** dynamicall
12b40 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 2a 2f 0a  y allocated. */.
12b50 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d        pC->aRow =
12b60 20 30 3b 0a 20 20 20 20 20 20 70 43 2d 3e 73 7a   0;.      pC->sz
12b70 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 0a  Row = 0;.    }..
12b80 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65      /* Make sure
12b90 20 61 20 63 6f 72 72 75 70 74 20 64 61 74 61 62   a corrupt datab
12ba0 61 73 65 20 68 61 73 20 6e 6f 74 20 67 69 76 65  ase has not give
12bb0 6e 20 75 73 20 61 6e 20 6f 76 65 72 73 69 7a 65  n us an oversize
12bc0 20 68 65 61 64 65 72 2e 0a 20 20 20 20 2a 2a 20   header..    ** 
12bd0 44 6f 20 74 68 69 73 20 6e 6f 77 20 74 6f 20 61  Do this now to a
12be0 76 6f 69 64 20 61 6e 20 6f 76 65 72 73 69 7a 65  void an oversize
12bf0 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
12c00 6f 6e 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  on..    **.    *
12c10 2a 20 54 79 70 65 20 65 6e 74 72 69 65 73 20 63  * Type entries c
12c20 61 6e 20 62 65 20 62 65 74 77 65 65 6e 20 31 20  an be between 1 
12c30 61 6e 64 20 35 20 62 79 74 65 73 20 65 61 63 68  and 5 bytes each
12c40 2e 20 20 42 75 74 20 34 20 61 6e 64 20 35 20 62  .  But 4 and 5 b
12c50 79 74 65 0a 20 20 20 20 2a 2a 20 74 79 70 65 73  yte.    ** types
12c60 20 75 73 65 20 73 6f 20 6d 75 63 68 20 64 61 74   use so much dat
12c70 61 20 73 70 61 63 65 20 74 68 61 74 20 74 68 65  a space that the
12c80 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 34  re can only be 4
12c90 30 39 36 20 61 6e 64 20 33 32 20 6f 66 0a 20 20  096 and 32 of.  
12ca0 20 20 2a 2a 20 74 68 65 6d 2c 20 72 65 73 70 65    ** them, respe
12cb0 63 74 69 76 65 6c 79 2e 20 20 53 6f 20 74 68 65  ctively.  So the
12cc0 20 6d 61 78 69 6d 75 6d 20 68 65 61 64 65 72 20   maximum header 
12cd0 6c 65 6e 67 74 68 20 72 65 73 75 6c 74 73 20 66  length results f
12ce0 72 6f 6d 20 61 0a 20 20 20 20 2a 2a 20 33 2d 62  rom a.    ** 3-b
12cf0 79 74 65 20 74 79 70 65 20 66 6f 72 20 65 61 63  yte type for eac
12d00 68 20 6f 66 20 74 68 65 20 6d 61 78 69 6d 75 6d  h of the maximum
12d10 20 6f 66 20 33 32 37 36 38 20 63 6f 6c 75 6d 6e   of 32768 column
12d20 73 20 70 6c 75 73 20 74 68 72 65 65 0a 20 20 20  s plus three.   
12d30 20 2a 2a 20 65 78 74 72 61 20 62 79 74 65 73 20   ** extra bytes 
12d40 66 6f 72 20 74 68 65 20 68 65 61 64 65 72 20 6c  for the header l
12d50 65 6e 67 74 68 20 69 74 73 65 6c 66 2e 20 20 33  ength itself.  3
12d60 32 37 36 38 2a 33 20 2b 20 33 20 3d 20 39 38 33  2768*3 + 3 = 983
12d70 30 37 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  07..    */.    i
12d80 66 28 20 6f 66 66 73 65 74 20 3e 20 39 38 33 30  f( offset > 9830
12d90 37 20 7c 7c 20 6f 66 66 73 65 74 20 3e 20 70 43  7 || offset > pC
12da0 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 29 7b  ->payloadSize ){
12db0 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
12dc0 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b  TE_CORRUPT_BKPT;
12dd0 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63  .      goto op_c
12de0 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20 20  olumn_error;.   
12df0 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b   }.  }..  /* Mak
12e00 65 20 73 75 72 65 20 61 74 20 6c 65 61 73 74 20  e sure at least 
12e10 74 68 65 20 66 69 72 73 74 20 70 32 2b 31 20 65  the first p2+1 e
12e20 6e 74 72 69 65 73 20 6f 66 20 74 68 65 20 68 65  ntries of the he
12e30 61 64 65 72 20 68 61 76 65 20 62 65 65 6e 0a 20  ader have been. 
12e40 20 2a 2a 20 70 61 72 73 65 64 20 61 6e 64 20 76   ** parsed and v
12e50 61 6c 69 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  alid information
12e60 20 69 73 20 69 6e 20 61 4f 66 66 73 65 74 5b 5d   is in aOffset[]
12e70 20 61 6e 64 20 61 54 79 70 65 5b 5d 2e 0a 20 20   and aType[]..  
12e80 2a 2f 0a 20 20 69 66 28 20 70 43 2d 3e 6e 48 64  */.  if( pC->nHd
12e90 72 50 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a 20  rParsed<=p2 ){. 
12ea0 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69     /* If there i
12eb0 73 20 6d 6f 72 65 20 68 65 61 64 65 72 20 61 76  s more header av
12ec0 61 69 6c 61 62 6c 65 20 66 6f 72 20 70 61 72 73  ailable for pars
12ed0 69 6e 67 20 69 6e 20 74 68 65 20 72 65 63 6f 72  ing in the recor
12ee0 64 2c 20 74 72 79 0a 20 20 20 20 2a 2a 20 74 6f  d, try.    ** to
12ef0 20 65 78 74 72 61 63 74 20 61 64 64 69 74 69 6f   extract additio
12f00 6e 61 6c 20 66 69 65 6c 64 73 20 75 70 20 74 68  nal fields up th
12f10 72 6f 75 67 68 20 74 68 65 20 70 32 2b 31 2d 74  rough the p2+1-t
12f20 68 20 66 69 65 6c 64 20 0a 20 20 20 20 2a 2f 0a  h field .    */.
12f30 20 20 20 20 69 66 28 20 70 43 2d 3e 69 48 64 72      if( pC->iHdr
12f40 4f 66 66 73 65 74 3c 61 4f 66 66 73 65 74 5b 30  Offset<aOffset[0
12f50 5d 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4d 61  ] ){.      /* Ma
12f60 6b 65 20 73 75 72 65 20 7a 44 61 74 61 20 70 6f  ke sure zData po
12f70 69 6e 74 73 20 74 6f 20 65 6e 6f 75 67 68 20 6f  ints to enough o
12f80 66 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  f the record to 
12f90 63 6f 76 65 72 20 74 68 65 20 68 65 61 64 65 72  cover the header
12fa0 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70  . */.      if( p
12fb0 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 7b 0a 20 20  C->aRow==0 ){.  
12fc0 20 20 20 20 20 20 6d 65 6d 73 65 74 28 26 73 4d        memset(&sM
12fd0 65 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d  em, 0, sizeof(sM
12fe0 65 6d 29 29 3b 0a 20 20 20 20 20 20 20 20 72 63  em));.        rc
12ff0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
13000 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73 72  mFromBtree(pCrsr
13010 2c 20 30 2c 20 61 4f 66 66 73 65 74 5b 30 5d 2c  , 0, aOffset[0],
13020 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
13030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13040 20 20 20 20 20 20 20 21 70 43 2d 3e 69 73 54 61         !pC->isTa
13050 62 6c 65 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20  ble, &sMem);.   
13060 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
13070 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
13080 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
13090 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  mn_error;.      
130a0 20 20 7d 0a 20 20 20 20 20 20 20 20 7a 44 61 74    }.        zDat
130b0 61 20 3d 20 28 75 38 2a 29 73 4d 65 6d 2e 7a 3b  a = (u8*)sMem.z;
130c0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
130d0 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 70 43        zData = pC
130e0 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 20 20 7d 0a  ->aRow;.      }.
130f0 20 20 0a 20 20 20 20 20 20 2f 2a 20 46 69 6c 6c    .      /* Fill
13100 20 69 6e 20 61 54 79 70 65 5b 69 5d 20 61 6e 64   in aType[i] and
13110 20 61 4f 66 66 73 65 74 5b 69 5d 20 76 61 6c 75   aOffset[i] valu
13120 65 73 20 74 68 72 6f 75 67 68 20 74 68 65 20 70  es through the p
13130 32 2d 74 68 20 66 69 65 6c 64 2e 20 2a 2f 0a 20  2-th field. */. 
13140 20 20 20 20 20 69 20 3d 20 70 43 2d 3e 6e 48 64       i = pC->nHd
13150 72 50 61 72 73 65 64 3b 0a 20 20 20 20 20 20 6f  rParsed;.      o
13160 66 66 73 65 74 20 3d 20 61 4f 66 66 73 65 74 5b  ffset = aOffset[
13170 69 5d 3b 0a 20 20 20 20 20 20 7a 48 64 72 20 3d  i];.      zHdr =
13180 20 7a 44 61 74 61 20 2b 20 70 43 2d 3e 69 48 64   zData + pC->iHd
13190 72 4f 66 66 73 65 74 3b 0a 20 20 20 20 20 20 7a  rOffset;.      z
131a0 45 6e 64 48 64 72 20 3d 20 7a 44 61 74 61 20 2b  EndHdr = zData +
131b0 20 61 4f 66 66 73 65 74 5b 30 5d 3b 0a 20 20 20   aOffset[0];.   
131c0 20 20 20 61 73 73 65 72 74 28 20 69 3c 3d 70 32     assert( i<=p2
131d0 20 26 26 20 7a 48 64 72 3c 7a 45 6e 64 48 64 72   && zHdr<zEndHdr
131e0 20 29 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20   );.      do{.  
131f0 20 20 20 20 20 20 69 66 28 20 7a 48 64 72 5b 30        if( zHdr[0
13200 5d 3c 30 78 38 30 20 29 7b 0a 20 20 20 20 20 20  ]<0x80 ){.      
13210 20 20 20 20 74 20 3d 20 7a 48 64 72 5b 30 5d 3b      t = zHdr[0];
13220 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64 72 2b  .          zHdr+
13230 2b 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  +;.        }else
13240 7b 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64 72  {.          zHdr
13250 20 2b 3d 20 73 71 6c 69 74 65 33 47 65 74 56 61   += sqlite3GetVa
13260 72 69 6e 74 33 32 28 7a 48 64 72 2c 20 26 74 29  rint32(zHdr, &t)
13270 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
13280 20 20 20 20 61 54 79 70 65 5b 69 5d 20 3d 20 74      aType[i] = t
13290 3b 0a 20 20 20 20 20 20 20 20 73 7a 46 69 65 6c  ;.        szFiel
132a0 64 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  d = sqlite3VdbeS
132b0 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29 3b  erialTypeLen(t);
132c0 0a 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 20  .        offset 
132d0 2b 3d 20 73 7a 46 69 65 6c 64 3b 0a 20 20 20 20  += szField;.    
132e0 20 20 20 20 69 66 28 20 6f 66 66 73 65 74 3c 73      if( offset<s
132f0 7a 46 69 65 6c 64 20 29 7b 20 20 2f 2a 20 54 72  zField ){  /* Tr
13300 75 65 20 69 66 20 6f 66 66 73 65 74 20 6f 76 65  ue if offset ove
13310 72 66 6c 6f 77 73 20 2a 2f 0a 20 20 20 20 20 20  rflows */.      
13320 20 20 20 20 7a 48 64 72 20 3d 20 26 7a 45 6e 64      zHdr = &zEnd
13330 48 64 72 5b 31 5d 3b 20 20 2f 2a 20 46 6f 72 63  Hdr[1];  /* Forc
13340 65 73 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50  es SQLITE_CORRUP
13350 54 20 72 65 74 75 72 6e 20 62 65 6c 6f 77 20 2a  T return below *
13360 2f 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  /.          brea
13370 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  k;.        }.   
13380 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20 20 20 20       i++;.      
13390 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20 6f    aOffset[i] = o
133a0 66 66 73 65 74 3b 0a 20 20 20 20 20 20 7d 77 68  ffset;.      }wh
133b0 69 6c 65 28 20 69 3c 3d 70 32 20 26 26 20 7a 48  ile( i<=p2 && zH
133c0 64 72 3c 7a 45 6e 64 48 64 72 20 29 3b 0a 20 20  dr<zEndHdr );.  
133d0 20 20 20 20 70 43 2d 3e 6e 48 64 72 50 61 72 73      pC->nHdrPars
133e0 65 64 20 3d 20 69 3b 0a 20 20 20 20 20 20 70 43  ed = i;.      pC
133f0 2d 3e 69 48 64 72 4f 66 66 73 65 74 20 3d 20 28  ->iHdrOffset = (
13400 75 33 32 29 28 7a 48 64 72 20 2d 20 7a 44 61 74  u32)(zHdr - zDat
13410 61 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 43  a);.      if( pC
13420 2d 3e 61 52 6f 77 3d 3d 30 20 29 7b 0a 20 20 20  ->aRow==0 ){.   
13430 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
13440 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d  MemRelease(&sMem
13450 29 3b 0a 20 20 20 20 20 20 20 20 73 4d 65 6d 2e  );.        sMem.
13460 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
13470 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20  ;.      }.  .   
13480 20 20 20 2f 2a 20 49 66 20 77 65 20 68 61 76 65     /* If we have
13490 20 72 65 61 64 20 6d 6f 72 65 20 68 65 61 64 65   read more heade
134a0 72 20 64 61 74 61 20 74 68 61 6e 20 77 61 73 20  r data than was 
134b0 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65  contained in the
134c0 20 68 65 61 64 65 72 2c 0a 20 20 20 20 20 20 2a   header,.      *
134d0 2a 20 6f 72 20 69 66 20 74 68 65 20 65 6e 64 20  * or if the end 
134e0 6f 66 20 74 68 65 20 6c 61 73 74 20 66 69 65 6c  of the last fiel
134f0 64 20 61 70 70 65 61 72 73 20 74 6f 20 62 65 20  d appears to be 
13500 70 61 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20  past the end of 
13510 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 72 65 63  the.      ** rec
13520 6f 72 64 2c 20 6f 72 20 69 66 20 74 68 65 20 65  ord, or if the e
13530 6e 64 20 6f 66 20 74 68 65 20 6c 61 73 74 20 66  nd of the last f
13540 69 65 6c 64 20 61 70 70 65 61 72 73 20 74 6f 20  ield appears to 
13550 62 65 20 62 65 66 6f 72 65 20 74 68 65 20 65 6e  be before the en
13560 64 0a 20 20 20 20 20 20 2a 2a 20 6f 66 20 74 68  d.      ** of th
13570 65 20 72 65 63 6f 72 64 20 28 77 68 65 6e 20 61  e record (when a
13580 6c 6c 20 66 69 65 6c 64 73 20 70 72 65 73 65 6e  ll fields presen
13590 74 29 2c 20 74 68 65 6e 20 77 65 20 6d 75 73 74  t), then we must
135a0 20 62 65 20 64 65 61 6c 69 6e 67 20 0a 20 20 20   be dealing .   
135b0 20 20 20 2a 2a 20 77 69 74 68 20 61 20 63 6f 72     ** with a cor
135c0 72 75 70 74 20 64 61 74 61 62 61 73 65 2e 0a 20  rupt database.. 
135d0 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66       */.      if
135e0 28 20 28 7a 48 64 72 20 3e 20 7a 45 6e 64 48 64  ( (zHdr > zEndHd
135f0 72 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 6f 66  r).       || (of
13600 66 73 65 74 20 3e 20 70 43 2d 3e 70 61 79 6c 6f  fset > pC->paylo
13610 61 64 53 69 7a 65 29 0a 20 20 20 20 20 20 20 7c  adSize).       |
13620 7c 20 28 7a 48 64 72 3d 3d 7a 45 6e 64 48 64 72  | (zHdr==zEndHdr
13630 20 26 26 20 6f 66 66 73 65 74 21 3d 70 43 2d 3e   && offset!=pC->
13640 70 61 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20 20  payloadSize).   
13650 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63     ){.        rc
13660 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50   = SQLITE_CORRUP
13670 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 20 20  T_BKPT;.        
13680 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65  goto op_column_e
13690 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
136a0 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 49 66 20 61    }..    /* If a
136b0 66 74 65 72 20 74 72 79 69 6e 67 20 74 6f 20 65  fter trying to e
136c0 78 74 72 61 20 6e 65 77 20 65 6e 74 72 69 65 73  xtra new entries
136d0 20 66 72 6f 6d 20 74 68 65 20 68 65 61 64 65 72   from the header
136e0 2c 20 6e 48 64 72 50 61 72 73 65 64 20 69 73 0a  , nHdrParsed is.
136f0 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20 6e 6f 74      ** still not
13700 20 75 70 20 74 6f 20 70 32 2c 20 74 68 61 74 20   up to p2, that 
13710 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 72  means that the r
13720 65 63 6f 72 64 20 68 61 73 20 66 65 77 65 72 20  ecord has fewer 
13730 74 68 61 6e 20 70 32 0a 20 20 20 20 2a 2a 20 63  than p2.    ** c
13740 6f 6c 75 6d 6e 73 2e 20 20 53 6f 20 74 68 65 20  olumns.  So the 
13750 72 65 73 75 6c 74 20 77 69 6c 6c 20 62 65 20 65  result will be e
13760 69 74 68 65 72 20 74 68 65 20 64 65 66 61 75 6c  ither the defaul
13770 74 20 76 61 6c 75 65 20 6f 72 20 61 20 4e 55 4c  t value or a NUL
13780 4c 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  L..    */.    if
13790 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64  ( pC->nHdrParsed
137a0 3c 3d 70 32 20 29 7b 0a 20 20 20 20 20 20 69 66  <=p2 ){.      if
137b0 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
137c0 34 5f 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 20  4_MEM ){.       
137d0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
137e0 68 61 6c 6c 6f 77 43 6f 70 79 28 70 44 65 73 74  hallowCopy(pDest
137f0 2c 20 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20  , pOp->p4.pMem, 
13800 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20  MEM_Static);.   
13810 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
13820 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
13830 28 70 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c  (pDest, MEM_Null
13840 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
13850 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
13860 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a  out;.    }.  }..
13870 20 20 2f 2a 20 45 78 74 72 61 63 74 20 74 68 65    /* Extract the
13880 20 63 6f 6e 74 65 6e 74 20 66 6f 72 20 74 68 65   content for the
13890 20 70 32 2b 31 2d 74 68 20 63 6f 6c 75 6d 6e 2e   p2+1-th column.
138a0 20 20 43 6f 6e 74 72 6f 6c 20 63 61 6e 20 6f 6e    Control can on
138b0 6c 79 0a 20 20 2a 2a 20 72 65 61 63 68 20 74 68  ly.  ** reach th
138c0 69 73 20 70 6f 69 6e 74 20 69 66 20 61 4f 66 66  is point if aOff
138d0 73 65 74 5b 70 32 5d 2c 20 61 4f 66 66 73 65 74  set[p2], aOffset
138e0 5b 70 32 2b 31 5d 2c 20 61 6e 64 20 61 54 79 70  [p2+1], and aTyp
138f0 65 5b 70 32 5d 20 61 72 65 0a 20 20 2a 2a 20 61  e[p2] are.  ** a
13900 6c 6c 20 76 61 6c 69 64 2e 0a 20 20 2a 2f 0a 20  ll valid..  */. 
13910 20 61 73 73 65 72 74 28 20 70 32 3c 70 43 2d 3e   assert( p2<pC->
13920 6e 48 64 72 50 61 72 73 65 64 20 29 3b 0a 20 20  nHdrParsed );.  
13930 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
13940 54 45 5f 4f 4b 20 29 3b 0a 20 20 61 73 73 65 72  TE_OK );.  asser
13950 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  t( sqlite3VdbeCh
13960 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73  eckMemInvariants
13970 28 70 44 65 73 74 29 20 29 3b 0a 20 20 69 66 28  (pDest) );.  if(
13980 20 70 43 2d 3e 73 7a 52 6f 77 3e 3d 61 4f 66 66   pC->szRow>=aOff
13990 73 65 74 5b 70 32 2b 31 5d 20 29 7b 0a 20 20 20  set[p2+1] ){.   
139a0 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65 20   /* This is the 
139b0 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 68 65 72  common case wher
139c0 65 20 74 68 65 20 64 65 73 69 72 65 64 20 63 6f  e the desired co
139d0 6e 74 65 6e 74 20 66 69 74 73 20 6f 6e 20 74 68  ntent fits on th
139e0 65 20 6f 72 69 67 69 6e 61 6c 0a 20 20 20 20 2a  e original.    *
139f0 2a 20 70 61 67 65 20 2d 20 77 68 65 72 65 20 74  * page - where t
13a00 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 20 6e 6f  he content is no
13a10 74 20 6f 6e 20 61 6e 20 6f 76 65 72 66 6c 6f 77  t on an overflow
13a20 20 70 61 67 65 20 2a 2f 0a 20 20 20 20 56 64 62   page */.    Vdb
13a30 65 4d 65 6d 52 65 6c 65 61 73 65 28 70 44 65 73  eMemRelease(pDes
13a40 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  t);.    sqlite3V
13a50 64 62 65 53 65 72 69 61 6c 47 65 74 28 70 43 2d  dbeSerialGet(pC-
13a60 3e 61 52 6f 77 2b 61 4f 66 66 73 65 74 5b 70 32  >aRow+aOffset[p2
13a70 5d 2c 20 61 54 79 70 65 5b 70 32 5d 2c 20 70 44  ], aType[p2], pD
13a80 65 73 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  est);.  }else{. 
13a90 20 20 20 2f 2a 20 54 68 69 73 20 62 72 61 6e 63     /* This branc
13aa0 68 20 68 61 70 70 65 6e 73 20 6f 6e 6c 79 20 77  h happens only w
13ab0 68 65 6e 20 63 6f 6e 74 65 6e 74 20 69 73 20 6f  hen content is o
13ac0 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 73  n overflow pages
13ad0 20 2a 2f 0a 20 20 20 20 74 20 3d 20 61 54 79 70   */.    t = aTyp
13ae0 65 5b 70 32 5d 3b 0a 20 20 20 20 69 66 28 20 28  e[p2];.    if( (
13af0 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c  (pOp->p5 & (OPFL
13b00 41 47 5f 4c 45 4e 47 54 48 41 52 47 7c 4f 50 46  AG_LENGTHARG|OPF
13b10 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29 29 21  LAG_TYPEOFARG))!
13b20 3d 30 0a 20 20 20 20 20 20 20 20 20 20 26 26 20  =0.          && 
13b30 28 28 74 3e 3d 31 32 20 26 26 20 28 74 26 31 29  ((t>=12 && (t&1)
13b40 3d 3d 30 29 20 7c 7c 20 28 70 4f 70 2d 3e 70 35  ==0) || (pOp->p5
13b50 20 26 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46   & OPFLAG_TYPEOF
13b60 41 52 47 29 21 3d 30 29 29 0a 20 20 20 20 20 7c  ARG)!=0)).     |
13b70 7c 20 28 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33  | (len = sqlite3
13b80 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65  VdbeSerialTypeLe
13b90 6e 28 74 29 29 3d 3d 30 0a 20 20 20 20 29 7b 0a  n(t))==0.    ){.
13ba0 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 6e 74        /* Content
13bb0 20 69 73 20 69 72 72 65 6c 65 76 61 6e 74 20 66   is irrelevant f
13bc0 6f 72 20 74 68 65 20 74 79 70 65 6f 66 28 29 20  or the typeof() 
13bd0 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 66 6f 72  function and for
13be0 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 6c 65  .      ** the le
13bf0 6e 67 74 68 28 58 29 20 66 75 6e 63 74 69 6f 6e  ngth(X) function
13c00 20 69 66 20 58 20 69 73 20 61 20 62 6c 6f 62 2e   if X is a blob.
13c10 20 20 53 6f 20 77 65 20 6d 69 67 68 74 20 61 73    So we might as
13c20 20 77 65 6c 6c 20 75 73 65 0a 20 20 20 20 20 20   well use.      
13c30 2a 2a 20 62 6f 67 75 73 20 63 6f 6e 74 65 6e 74  ** bogus content
13c40 20 72 61 74 68 65 72 20 74 68 61 6e 20 72 65 61   rather than rea
13c50 64 69 6e 67 20 63 6f 6e 74 65 6e 74 20 66 72 6f  ding content fro
13c60 6d 20 64 69 73 6b 2e 20 20 4e 55 4c 4c 20 77 6f  m disk.  NULL wo
13c70 72 6b 73 0a 20 20 20 20 20 20 2a 2a 20 66 6f 72  rks.      ** for
13c80 20 74 65 78 74 20 61 6e 64 20 62 6c 6f 62 20 61   text and blob a
13c90 6e 64 20 77 68 61 74 65 76 65 72 20 69 73 20 69  nd whatever is i
13ca0 6e 20 74 68 65 20 70 61 79 6c 6f 61 64 53 69 7a  n the payloadSiz
13cb0 65 36 34 20 76 61 72 69 61 62 6c 65 0a 20 20 20  e64 variable.   
13cc0 20 20 20 2a 2a 20 77 69 6c 6c 20 77 6f 72 6b 20     ** will work 
13cd0 66 6f 72 20 65 76 65 72 79 74 68 69 6e 67 20 65  for everything e
13ce0 6c 73 65 2e 20 20 43 6f 6e 74 65 6e 74 20 69 73  lse.  Content is
13cf0 20 61 6c 73 6f 20 69 72 72 65 6c 65 76 61 6e 74   also irrelevant
13d00 20 69 66 0a 20 20 20 20 20 20 2a 2a 20 74 68 65   if.      ** the
13d10 20 63 6f 6e 74 65 6e 74 20 6c 65 6e 67 74 68 20   content length 
13d20 69 73 20 30 2e 20 2a 2f 0a 20 20 20 20 20 20 7a  is 0. */.      z
13d30 44 61 74 61 20 3d 20 74 3c 3d 31 33 20 3f 20 28  Data = t<=13 ? (
13d40 75 38 2a 29 26 70 61 79 6c 6f 61 64 53 69 7a 65  u8*)&payloadSize
13d50 36 34 20 3a 20 30 3b 0a 20 20 20 20 20 20 73 4d  64 : 0;.      sM
13d60 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a  em.zMalloc = 0;.
13d70 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
13d80 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30   memset(&sMem, 0
13d90 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b  , sizeof(sMem));
13da0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
13db0 62 65 4d 65 6d 4d 6f 76 65 28 26 73 4d 65 6d 2c  beMemMove(&sMem,
13dc0 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 72   pDest);.      r
13dd0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
13de0 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73  emFromBtree(pCrs
13df0 72 2c 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20  r, aOffset[p2], 
13e00 6c 65 6e 2c 20 21 70 43 2d 3e 69 73 54 61 62 6c  len, !pC->isTabl
13e10 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e,.             
13e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e30 20 20 20 20 20 20 26 73 4d 65 6d 29 3b 0a 20 20        &sMem);.  
13e40 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
13e50 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
13e60 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
13e70 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20  error;.      }. 
13e80 20 20 20 20 20 7a 44 61 74 61 20 3d 20 28 75 38       zData = (u8
13e90 2a 29 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 7d 0a  *)sMem.z;.    }.
13ea0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
13eb0 65 72 69 61 6c 47 65 74 28 7a 44 61 74 61 2c 20  erialGet(zData, 
13ec0 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 2f  t, pDest);.    /
13ed0 2a 20 49 66 20 77 65 20 64 79 6e 61 6d 69 63 61  * If we dynamica
13ee0 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 70  lly allocated sp
13ef0 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  ace to hold the 
13f00 64 61 74 61 20 28 69 6e 20 74 68 65 0a 20 20 20  data (in the.   
13f10 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d   ** sqlite3VdbeM
13f20 65 6d 46 72 6f 6d 42 74 72 65 65 28 29 20 63 61  emFromBtree() ca
13f30 6c 6c 20 61 62 6f 76 65 29 20 74 68 65 6e 20 74  ll above) then t
13f40 72 61 6e 73 66 65 72 20 63 6f 6e 74 72 6f 6c 20  ransfer control 
13f50 6f 66 20 74 68 61 74 0a 20 20 20 20 2a 2a 20 64  of that.    ** d
13f60 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63  ynamically alloc
13f70 61 74 65 64 20 73 70 61 63 65 20 6f 76 65 72 20  ated space over 
13f80 74 6f 20 74 68 65 20 70 44 65 73 74 20 73 74 72  to the pDest str
13f90 75 63 74 75 72 65 2e 0a 20 20 20 20 2a 2a 20 54  ucture..    ** T
13fa0 68 69 73 20 70 72 65 76 65 6e 74 73 20 61 20 6d  his prevents a m
13fb0 65 6d 6f 72 79 20 63 6f 70 79 2e 20 2a 2f 0a 20  emory copy. */. 
13fc0 20 20 20 69 66 28 20 73 4d 65 6d 2e 7a 4d 61 6c     if( sMem.zMal
13fd0 6c 6f 63 20 29 7b 0a 20 20 20 20 20 20 61 73 73  loc ){.      ass
13fe0 65 72 74 28 20 73 4d 65 6d 2e 7a 3d 3d 73 4d 65  ert( sMem.z==sMe
13ff0 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 3b 0a 20 20 20  m.zMalloc );.   
14000 20 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d     assert( VdbeM
14010 65 6d 44 79 6e 61 6d 69 63 28 70 44 65 73 74 29  emDynamic(pDest)
14020 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73  ==0 );.      ass
14030 65 72 74 28 20 28 70 44 65 73 74 2d 3e 66 6c 61  ert( (pDest->fla
14040 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d  gs & (MEM_Blob|M
14050 45 4d 5f 53 74 72 29 29 3d 3d 30 20 7c 7c 20 70  EM_Str))==0 || p
14060 44 65 73 74 2d 3e 7a 3d 3d 73 4d 65 6d 2e 7a 20  Dest->z==sMem.z 
14070 29 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e  );.      pDest->
14080 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 45  flags &= ~(MEM_E
14090 70 68 65 6d 7c 4d 45 4d 5f 53 74 61 74 69 63 29  phem|MEM_Static)
140a0 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 66  ;.      pDest->f
140b0 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d  lags |= MEM_Term
140c0 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 7a  ;.      pDest->z
140d0 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20   = sMem.z;.     
140e0 20 70 44 65 73 74 2d 3e 7a 4d 61 6c 6c 6f 63 20   pDest->zMalloc 
140f0 3d 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 3b 0a  = sMem.zMalloc;.
14100 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 44 65 73      }.  }.  pDes
14110 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e  t->enc = encodin
14120 67 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75  g;..op_column_ou
14130 74 3a 0a 20 20 44 65 65 70 68 65 6d 65 72 61 6c  t:.  Deephemeral
14140 69 7a 65 28 70 44 65 73 74 29 3b 0a 6f 70 5f 63  ize(pDest);.op_c
14150 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3a 0a 20 20 55  olumn_error:.  U
14160 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
14170 5a 45 28 70 44 65 73 74 29 3b 0a 20 20 52 45 47  ZE(pDest);.  REG
14180 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
14190 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 62  >p3, pDest);.  b
141a0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
141b0 64 65 3a 20 41 66 66 69 6e 69 74 79 20 50 31 20  de: Affinity P1 
141c0 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
141d0 6f 70 73 69 73 3a 20 61 66 66 69 6e 69 74 79 28  opsis: affinity(
141e0 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20  r[P1@P2]).**.** 
141f0 41 70 70 6c 79 20 61 66 66 69 6e 69 74 69 65 73  Apply affinities
14200 20 74 6f 20 61 20 72 61 6e 67 65 20 6f 66 20 50   to a range of P
14210 32 20 72 65 67 69 73 74 65 72 73 20 73 74 61 72  2 registers star
14220 74 69 6e 67 20 77 69 74 68 20 50 31 2e 0a 2a 2a  ting with P1..**
14230 0a 2a 2a 20 50 34 20 69 73 20 61 20 73 74 72 69  .** P4 is a stri
14240 6e 67 20 74 68 61 74 20 69 73 20 50 32 20 63 68  ng that is P2 ch
14250 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 54  aracters long. T
14260 68 65 20 6e 74 68 20 63 68 61 72 61 63 74 65 72  he nth character
14270 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e   of the.** strin
14280 67 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20  g indicates the 
14290 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20  column affinity 
142a0 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75  that should be u
142b0 73 65 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a  sed for the nth.
142c0 2a 2a 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69  ** memory cell i
142d0 6e 20 74 68 65 20 72 61 6e 67 65 2e 0a 2a 2f 0a  n the range..*/.
142e0 63 61 73 65 20 4f 50 5f 41 66 66 69 6e 69 74 79  case OP_Affinity
142f0 3a 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  : {.  const char
14300 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 2f   *zAffinity;   /
14310 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74  * The affinity t
14320 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a  o be applied */.
14330 20 20 63 68 61 72 20 63 41 66 66 3b 20 20 20 20    char cAff;    
14340 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20             /* A 
14350 73 69 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72  single character
14360 20 6f 66 20 61 66 66 69 6e 69 74 79 20 2a 2f 0a   of affinity */.
14370 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70  .  zAffinity = p
14380 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65  Op->p4.z;.  asse
14390 72 74 28 20 7a 41 66 66 69 6e 69 74 79 21 3d 30  rt( zAffinity!=0
143a0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41   );.  assert( zA
143b0 66 66 69 6e 69 74 79 5b 70 4f 70 2d 3e 70 32 5d  ffinity[pOp->p2]
143c0 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20  ==0 );.  pIn1 = 
143d0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
143e0 20 20 77 68 69 6c 65 28 20 28 63 41 66 66 20 3d    while( (cAff =
143f0 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29 29   *(zAffinity++))
14400 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72  !=0 ){.    asser
14410 74 28 20 70 49 6e 31 20 3c 3d 20 26 70 2d 3e 61  t( pIn1 <= &p->a
14420 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  Mem[(p->nMem-p->
14430 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20  nCursor)] );.   
14440 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
14450 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 20  lid(pIn1) );.   
14460 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
14470 49 6e 31 2c 20 63 41 66 66 2c 20 65 6e 63 6f 64  In1, cAff, encod
14480 69 6e 67 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b  ing);.    pIn1++
14490 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
144a0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 6b  ../* Opcode: Mak
144b0 65 52 65 63 6f 72 64 20 50 31 20 50 32 20 50 33  eRecord P1 P2 P3
144c0 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
144d0 73 3a 20 72 5b 50 33 5d 3d 6d 6b 72 65 63 28 72  s: r[P3]=mkrec(r
144e0 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 43  [P1@P2]).**.** C
144f0 6f 6e 76 65 72 74 20 50 32 20 72 65 67 69 73 74  onvert P2 regist
14500 65 72 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ers beginning wi
14510 74 68 20 50 31 20 69 6e 74 6f 20 74 68 65 20 5b  th P1 into the [
14520 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 5d 0a 2a  record format].*
14530 2a 20 75 73 65 20 61 73 20 61 20 64 61 74 61 20  * use as a data 
14540 72 65 63 6f 72 64 20 69 6e 20 61 20 64 61 74 61  record in a data
14550 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 61 73  base table or as
14560 20 61 20 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e 20   a key.** in an 
14570 69 6e 64 65 78 2e 20 20 54 68 65 20 4f 50 5f 43  index.  The OP_C
14580 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e  olumn opcode can
14590 20 64 65 63 6f 64 65 20 74 68 65 20 72 65 63 6f   decode the reco
145a0 72 64 20 6c 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20  rd later..**.** 
145b0 50 34 20 6d 61 79 20 62 65 20 61 20 73 74 72 69  P4 may be a stri
145c0 6e 67 20 74 68 61 74 20 69 73 20 50 32 20 63 68  ng that is P2 ch
145d0 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20  aracters long.  
145e0 54 68 65 20 6e 74 68 20 63 68 61 72 61 63 74 65  The nth characte
145f0 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69  r of the.** stri
14600 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74 68 65  ng indicates the
14610 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79   column affinity
14620 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20   that should be 
14630 75 73 65 64 20 66 6f 72 20 74 68 65 20 6e 74 68  used for the nth
14640 0a 2a 2a 20 66 69 65 6c 64 20 6f 66 20 74 68 65  .** field of the
14650 20 69 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a   index key..**.*
14660 2a 20 54 68 65 20 6d 61 70 70 69 6e 67 20 66 72  * The mapping fr
14670 6f 6d 20 63 68 61 72 61 63 74 65 72 20 74 6f 20  om character to 
14680 61 66 66 69 6e 69 74 79 20 69 73 20 67 69 76 65  affinity is give
14690 6e 20 62 79 20 74 68 65 20 53 51 4c 49 54 45 5f  n by the SQLITE_
146a0 41 46 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64  AFF_.** macros d
146b0 65 66 69 6e 65 64 20 69 6e 20 73 71 6c 69 74 65  efined in sqlite
146c0 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  Int.h..**.** If 
146d0 50 34 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  P4 is NULL then 
146e0 61 6c 6c 20 69 6e 64 65 78 20 66 69 65 6c 64 73  all index fields
146f0 20 68 61 76 65 20 74 68 65 20 61 66 66 69 6e 69   have the affini
14700 74 79 20 4e 4f 4e 45 2e 0a 2a 2f 0a 63 61 73 65  ty NONE..*/.case
14710 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20   OP_MakeRecord: 
14720 7b 0a 20 20 75 38 20 2a 7a 4e 65 77 52 65 63 6f  {.  u8 *zNewReco
14730 72 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 20  rd;        /* A 
14740 62 75 66 66 65 72 20 74 6f 20 68 6f 6c 64 20 74  buffer to hold t
14750 68 65 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  he data for the 
14760 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  new record */.  
14770 4d 65 6d 20 2a 70 52 65 63 3b 20 20 20 20 20 20  Mem *pRec;      
14780 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65         /* The ne
14790 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 75 36  w record */.  u6
147a0 34 20 6e 44 61 74 61 3b 20 20 20 20 20 20 20 20  4 nData;        
147b0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
147c0 66 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 20  f bytes of data 
147d0 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  space */.  int n
147e0 48 64 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Hdr;            
147f0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
14800 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 20 73  ytes of header s
14810 70 61 63 65 20 2a 2f 0a 20 20 69 36 34 20 6e 42  pace */.  i64 nB
14820 79 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  yte;            
14830 20 2f 2a 20 44 61 74 61 20 73 70 61 63 65 20 72   /* Data space r
14840 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73  equired for this
14850 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
14860 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 20   nZero;         
14870 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
14880 20 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20 74   zero bytes at t
14890 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65  he end of the re
148a0 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  cord */.  int nV
148b0 61 72 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  arint;          
148c0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
148d0 74 65 73 20 69 6e 20 61 20 76 61 72 69 6e 74 20  tes in a varint 
148e0 2a 2f 0a 20 20 75 33 32 20 73 65 72 69 61 6c 5f  */.  u32 serial_
148f0 74 79 70 65 3b 20 20 20 20 20 20 20 2f 2a 20 54  type;       /* T
14900 79 70 65 20 66 69 65 6c 64 20 2a 2f 0a 20 20 4d  ype field */.  M
14910 65 6d 20 2a 70 44 61 74 61 30 3b 20 20 20 20 20  em *pData0;     
14920 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 66        /* First f
14930 69 65 6c 64 20 74 6f 20 62 65 20 63 6f 6d 62 69  ield to be combi
14940 6e 65 64 20 69 6e 74 6f 20 74 68 65 20 72 65 63  ned into the rec
14950 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c  ord */.  Mem *pL
14960 61 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ast;            
14970 2f 2a 20 4c 61 73 74 20 66 69 65 6c 64 20 6f 66  /* Last field of
14980 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
14990 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20   int nField;    
149a0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
149b0 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74  r of fields in t
149c0 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 63  he record */.  c
149d0 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20  har *zAffinity; 
149e0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66        /* The aff
149f0 69 6e 69 74 79 20 73 74 72 69 6e 67 20 66 6f 72  inity string for
14a00 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
14a10 20 69 6e 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74   int file_format
14a20 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 6c 65 20  ;       /* File 
14a30 66 6f 72 6d 61 74 20 74 6f 20 75 73 65 20 66 6f  format to use fo
14a40 72 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20  r encoding */.  
14a50 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20  int i;          
14a60 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20         /* Space 
14a70 75 73 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f  used in zNewReco
14a80 72 64 5b 5d 20 68 65 61 64 65 72 20 2a 2f 0a 20  rd[] header */. 
14a90 20 69 6e 74 20 6a 3b 20 20 20 20 20 20 20 20 20   int j;         
14aa0 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65          /* Space
14ab0 20 75 73 65 64 20 69 6e 20 7a 4e 65 77 52 65 63   used in zNewRec
14ac0 6f 72 64 5b 5d 20 63 6f 6e 74 65 6e 74 20 2a 2f  ord[] content */
14ad0 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20  .  int len;     
14ae0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e            /* Len
14af0 67 74 68 20 6f 66 20 61 20 66 69 65 6c 64 20 2a  gth of a field *
14b00 2f 0a 0a 20 20 2f 2a 20 41 73 73 75 6d 69 6e 67  /..  /* Assuming
14b10 20 74 68 65 20 72 65 63 6f 72 64 20 63 6f 6e 74   the record cont
14b20 61 69 6e 73 20 4e 20 66 69 65 6c 64 73 2c 20 74  ains N fields, t
14b30 68 65 20 72 65 63 6f 72 64 20 66 6f 72 6d 61 74  he record format
14b40 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65   looks.  ** like
14b50 20 74 68 69 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a   this:.  **.  **
14b60 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   ---------------
14b70 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14b80 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14b90 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14ba0 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c  ---------.  ** |
14bb0 20 68 64 72 2d 73 69 7a 65 20 7c 20 74 79 70 65   hdr-size | type
14bc0 20 30 20 7c 20 74 79 70 65 20 31 20 7c 20 2e 2e   0 | type 1 | ..
14bd0 2e 20 7c 20 74 79 70 65 20 4e 2d 31 20 7c 20 64  . | type N-1 | d
14be0 61 74 61 30 20 7c 20 2e 2e 2e 20 7c 20 64 61 74  ata0 | ... | dat
14bf0 61 20 4e 2d 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d  a N-1 | .  ** --
14c00 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14c10 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14c20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14c30 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14c40 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20 20 2a 2a  ------.  **.  **
14c50 20 44 61 74 61 28 30 29 20 69 73 20 74 61 6b 65   Data(0) is take
14c60 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20  n from register 
14c70 50 31 2e 20 20 44 61 74 61 28 31 29 20 63 6f 6d  P1.  Data(1) com
14c80 65 73 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72  es from register
14c90 20 50 31 2b 31 0a 20 20 2a 2a 20 61 6e 64 20 73   P1+1.  ** and s
14ca0 6f 20 66 72 6f 74 68 2e 0a 20 20 2a 2a 0a 20 20  o froth..  **.  
14cb0 2a 2a 20 45 61 63 68 20 74 79 70 65 20 66 69 65  ** Each type fie
14cc0 6c 64 20 69 73 20 61 20 76 61 72 69 6e 74 20 72  ld is a varint r
14cd0 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20  epresenting the 
14ce0 73 65 72 69 61 6c 20 74 79 70 65 20 6f 66 20 74  serial type of t
14cf0 68 65 20 0a 20 20 2a 2a 20 63 6f 72 72 65 73 70  he .  ** corresp
14d00 6f 6e 64 69 6e 67 20 64 61 74 61 20 65 6c 65 6d  onding data elem
14d10 65 6e 74 20 28 73 65 65 20 73 71 6c 69 74 65 33  ent (see sqlite3
14d20 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28 29  VdbeSerialType()
14d30 29 2e 20 54 68 65 0a 20 20 2a 2a 20 68 64 72 2d  ). The.  ** hdr-
14d40 73 69 7a 65 20 66 69 65 6c 64 20 69 73 20 61 6c  size field is al
14d50 73 6f 20 61 20 76 61 72 69 6e 74 20 77 68 69 63  so a varint whic
14d60 68 20 69 73 20 74 68 65 20 6f 66 66 73 65 74 20  h is the offset 
14d70 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
14d80 6e 67 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 72  ng.  ** of the r
14d90 65 63 6f 72 64 20 74 6f 20 64 61 74 61 30 2e 0a  ecord to data0..
14da0 20 20 2a 2f 0a 20 20 6e 44 61 74 61 20 3d 20 30    */.  nData = 0
14db0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
14dc0 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
14dd0 64 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20  data space */.  
14de0 6e 48 64 72 20 3d 20 30 3b 20 20 20 20 20 20 20  nHdr = 0;       
14df0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
14e00 62 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 20  bytes of header 
14e10 73 70 61 63 65 20 2a 2f 0a 20 20 6e 5a 65 72 6f  space */.  nZero
14e20 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
14e30 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20   Number of zero 
14e40 62 79 74 65 73 20 61 74 20 74 68 65 20 65 6e 64  bytes at the end
14e50 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a   of the record *
14e60 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70  /.  nField = pOp
14e70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66 69 6e 69 74  ->p1;.  zAffinit
14e80 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  y = pOp->p4.z;. 
14e90 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e   assert( nField>
14ea0 30 20 26 26 20 70 4f 70 2d 3e 70 32 3e 30 20 26  0 && pOp->p2>0 &
14eb0 26 20 70 4f 70 2d 3e 70 32 2b 6e 46 69 65 6c 64  & pOp->p2+nField
14ec0 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
14ed0 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 70 44  ursor)+1 );.  pD
14ee0 61 74 61 30 20 3d 20 26 61 4d 65 6d 5b 6e 46 69  ata0 = &aMem[nFi
14ef0 65 6c 64 5d 3b 0a 20 20 6e 46 69 65 6c 64 20 3d  eld];.  nField =
14f00 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 4c 61 73   pOp->p2;.  pLas
14f10 74 20 3d 20 26 70 44 61 74 61 30 5b 6e 46 69 65  t = &pData0[nFie
14f20 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c 65 5f 66 6f  ld-1];.  file_fo
14f30 72 6d 61 74 20 3d 20 70 2d 3e 6d 69 6e 57 72 69  rmat = p->minWri
14f40 74 65 46 69 6c 65 46 6f 72 6d 61 74 3b 0a 0a 20  teFileFormat;.. 
14f50 20 2f 2a 20 49 64 65 6e 74 69 66 79 20 74 68 65   /* Identify the
14f60 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72   output register
14f70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
14f80 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 31 20 7c 7c  p->p3<pOp->p1 ||
14f90 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70   pOp->p3>=pOp->p
14fa0 31 2b 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 70  1+pOp->p2 );.  p
14fb0 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
14fc0 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p3];.  memAbout
14fd0 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
14fe0 29 3b 0a 0a 20 20 2f 2a 20 41 70 70 6c 79 20 74  );..  /* Apply t
14ff0 68 65 20 72 65 71 75 65 73 74 65 64 20 61 66 66  he requested aff
15000 69 6e 69 74 79 20 74 6f 20 61 6c 6c 20 69 6e 70  inity to all inp
15010 75 74 73 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72  uts.  */.  asser
15020 74 28 20 70 44 61 74 61 30 3c 3d 70 4c 61 73 74  t( pData0<=pLast
15030 20 29 3b 0a 20 20 69 66 28 20 7a 41 66 66 69 6e   );.  if( zAffin
15040 69 74 79 20 29 7b 0a 20 20 20 20 70 52 65 63 20  ity ){.    pRec 
15050 3d 20 70 44 61 74 61 30 3b 0a 20 20 20 20 64 6f  = pData0;.    do
15060 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66 66  {.      applyAff
15070 69 6e 69 74 79 28 70 52 65 63 2b 2b 2c 20 2a 28  inity(pRec++, *(
15080 7a 41 66 66 69 6e 69 74 79 2b 2b 29 2c 20 65 6e  zAffinity++), en
15090 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 20 20 61  coding);.      a
150a0 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79  ssert( zAffinity
150b0 5b 30 5d 3d 3d 30 20 7c 7c 20 70 52 65 63 3c 3d  [0]==0 || pRec<=
150c0 70 4c 61 73 74 20 29 3b 0a 20 20 20 20 7d 77 68  pLast );.    }wh
150d0 69 6c 65 28 20 7a 41 66 66 69 6e 69 74 79 5b 30  ile( zAffinity[0
150e0 5d 20 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4c  ] );.  }..  /* L
150f0 6f 6f 70 20 74 68 72 6f 75 67 68 20 74 68 65 20  oop through the 
15100 65 6c 65 6d 65 6e 74 73 20 74 68 61 74 20 77 69  elements that wi
15110 6c 6c 20 6d 61 6b 65 20 75 70 20 74 68 65 20 72  ll make up the r
15120 65 63 6f 72 64 20 74 6f 20 66 69 67 75 72 65 0a  ecord to figure.
15130 20 20 2a 2a 20 6f 75 74 20 68 6f 77 20 6d 75 63    ** out how muc
15140 68 20 73 70 61 63 65 20 69 73 20 72 65 71 75 69  h space is requi
15150 72 65 64 20 66 6f 72 20 74 68 65 20 6e 65 77 20  red for the new 
15160 72 65 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20 70  record..  */.  p
15170 52 65 63 20 3d 20 70 4c 61 73 74 3b 0a 20 20 64  Rec = pLast;.  d
15180 6f 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  o{.    assert( m
15190 65 6d 49 73 56 61 6c 69 64 28 70 52 65 63 29 20  emIsValid(pRec) 
151a0 29 3b 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79  );.    serial_ty
151b0 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  pe = sqlite3Vdbe
151c0 53 65 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c  SerialType(pRec,
151d0 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20   file_format);. 
151e0 20 20 20 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33     len = sqlite3
151f0 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65  VdbeSerialTypeLe
15200 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a  n(serial_type);.
15210 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c      if( pRec->fl
15220 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29  ags & MEM_Zero )
15230 7b 0a 20 20 20 20 20 20 69 66 28 20 6e 44 61 74  {.      if( nDat
15240 61 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  a ){.        sql
15250 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e  ite3VdbeMemExpan
15260 64 42 6c 6f 62 28 70 52 65 63 29 3b 0a 20 20 20  dBlob(pRec);.   
15270 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
15280 20 20 6e 5a 65 72 6f 20 2b 3d 20 70 52 65 63 2d    nZero += pRec-
15290 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 20 20  >u.nZero;.      
152a0 20 20 6c 65 6e 20 2d 3d 20 70 52 65 63 2d 3e 75    len -= pRec->u
152b0 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 20 20 7d 0a  .nZero;.      }.
152c0 20 20 20 20 7d 0a 20 20 20 20 6e 44 61 74 61 20      }.    nData 
152d0 2b 3d 20 6c 65 6e 3b 0a 20 20 20 20 74 65 73 74  += len;.    test
152e0 63 61 73 65 28 20 73 65 72 69 61 6c 5f 74 79 70  case( serial_typ
152f0 65 3d 3d 31 32 37 20 29 3b 0a 20 20 20 20 74 65  e==127 );.    te
15300 73 74 63 61 73 65 28 20 73 65 72 69 61 6c 5f 74  stcase( serial_t
15310 79 70 65 3d 3d 31 32 38 20 29 3b 0a 20 20 20 20  ype==128 );.    
15320 6e 48 64 72 20 2b 3d 20 73 65 72 69 61 6c 5f 74  nHdr += serial_t
15330 79 70 65 3c 3d 31 32 37 20 3f 20 31 20 3a 20 73  ype<=127 ? 1 : s
15340 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28  qlite3VarintLen(
15350 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20  serial_type);.  
15360 7d 77 68 69 6c 65 28 20 28 2d 2d 70 52 65 63 29  }while( (--pRec)
15370 3e 3d 70 44 61 74 61 30 20 29 3b 0a 0a 20 20 2f  >=pData0 );..  /
15380 2a 20 41 64 64 20 74 68 65 20 69 6e 69 74 69 61  * Add the initia
15390 6c 20 68 65 61 64 65 72 20 76 61 72 69 6e 74 20  l header varint 
153a0 61 6e 64 20 74 6f 74 61 6c 20 74 68 65 20 73 69  and total the si
153b0 7a 65 20 2a 2f 0a 20 20 74 65 73 74 63 61 73 65  ze */.  testcase
153c0 28 20 6e 48 64 72 3d 3d 31 32 36 20 29 3b 0a 20  ( nHdr==126 );. 
153d0 20 74 65 73 74 63 61 73 65 28 20 6e 48 64 72 3d   testcase( nHdr=
153e0 3d 31 32 37 20 29 3b 0a 20 20 69 66 28 20 6e 48  =127 );.  if( nH
153f0 64 72 3c 3d 31 32 36 20 29 7b 0a 20 20 20 20 2f  dr<=126 ){.    /
15400 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73  * The common cas
15410 65 20 2a 2f 0a 20 20 20 20 6e 48 64 72 20 2b 3d  e */.    nHdr +=
15420 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   1;.  }else{.   
15430 20 2f 2a 20 52 61 72 65 20 63 61 73 65 20 6f 66   /* Rare case of
15440 20 61 20 72 65 61 6c 6c 79 20 6c 61 72 67 65 20   a really large 
15450 68 65 61 64 65 72 20 2a 2f 0a 20 20 20 20 6e 56  header */.    nV
15460 61 72 69 6e 74 20 3d 20 73 71 6c 69 74 65 33 56  arint = sqlite3V
15470 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 3b 0a  arintLen(nHdr);.
15480 20 20 20 20 6e 48 64 72 20 2b 3d 20 6e 56 61 72      nHdr += nVar
15490 69 6e 74 3b 0a 20 20 20 20 69 66 28 20 6e 56 61  int;.    if( nVa
154a0 72 69 6e 74 3c 73 71 6c 69 74 65 33 56 61 72 69  rint<sqlite3Vari
154b0 6e 74 4c 65 6e 28 6e 48 64 72 29 20 29 20 6e 48  ntLen(nHdr) ) nH
154c0 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79 74  dr++;.  }.  nByt
154d0 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61 3b 0a  e = nHdr+nData;.
154e0 20 20 69 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e    if( nByte>db->
154f0 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
15500 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
15510 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
15520 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20  .  }..  /* Make 
15530 73 75 72 65 20 74 68 65 20 6f 75 74 70 75 74 20  sure the output 
15540 72 65 67 69 73 74 65 72 20 68 61 73 20 61 20 62  register has a b
15550 75 66 66 65 72 20 6c 61 72 67 65 20 65 6e 6f 75  uffer large enou
15560 67 68 20 74 6f 20 73 74 6f 72 65 20 0a 20 20 2a  gh to store .  *
15570 2a 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64  * the new record
15580 2e 20 54 68 65 20 6f 75 74 70 75 74 20 72 65 67  . The output reg
15590 69 73 74 65 72 20 28 70 4f 70 2d 3e 70 33 29 20  ister (pOp->p3) 
155a0 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 74  is not allowed t
155b0 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e 65 20 6f 66  o.  ** be one of
155c0 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73   the input regis
155d0 74 65 72 73 20 28 62 65 63 61 75 73 65 20 74 68  ters (because th
155e0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c  e following call
155f0 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33   to.  ** sqlite3
15600 56 64 62 65 4d 65 6d 47 72 6f 77 28 29 20 63 6f  VdbeMemGrow() co
15610 75 6c 64 20 63 6c 6f 62 62 65 72 20 74 68 65 20  uld clobber the 
15620 76 61 6c 75 65 20 62 65 66 6f 72 65 20 69 74 20  value before it 
15630 69 73 20 75 73 65 64 29 2e 0a 20 20 2a 2f 0a 20  is used)..  */. 
15640 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
15650 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28 69  MemGrow(pOut, (i
15660 6e 74 29 6e 42 79 74 65 2c 20 30 29 20 29 7b 0a  nt)nByte, 0) ){.
15670 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
15680 0a 20 20 7d 0a 20 20 7a 4e 65 77 52 65 63 6f 72  .  }.  zNewRecor
15690 64 20 3d 20 28 75 38 20 2a 29 70 4f 75 74 2d 3e  d = (u8 *)pOut->
156a0 7a 3b 0a 0a 20 20 2f 2a 20 57 72 69 74 65 20 74  z;..  /* Write t
156b0 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  he record */.  i
156c0 20 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28 7a   = putVarint32(z
156d0 4e 65 77 52 65 63 6f 72 64 2c 20 6e 48 64 72 29  NewRecord, nHdr)
156e0 3b 0a 20 20 6a 20 3d 20 6e 48 64 72 3b 0a 20 20  ;.  j = nHdr;.  
156f0 61 73 73 65 72 74 28 20 70 44 61 74 61 30 3c 3d  assert( pData0<=
15700 70 4c 61 73 74 20 29 3b 0a 20 20 70 52 65 63 20  pLast );.  pRec 
15710 3d 20 70 44 61 74 61 30 3b 0a 20 20 64 6f 7b 0a  = pData0;.  do{.
15720 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20      serial_type 
15730 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  = sqlite3VdbeSer
15740 69 61 6c 54 79 70 65 28 70 52 65 63 2c 20 66 69  ialType(pRec, fi
15750 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20  le_format);.    
15760 69 20 2b 3d 20 70 75 74 56 61 72 69 6e 74 33 32  i += putVarint32
15770 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d 2c  (&zNewRecord[i],
15780 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 20 20   serial_type);  
15790 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 65 72            /* ser
157a0 69 61 6c 20 74 79 70 65 20 2a 2f 0a 20 20 20 20  ial type */.    
157b0 6a 20 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65  j += sqlite3Vdbe
157c0 53 65 72 69 61 6c 50 75 74 28 26 7a 4e 65 77 52  SerialPut(&zNewR
157d0 65 63 6f 72 64 5b 6a 5d 2c 20 70 52 65 63 2c 20  ecord[j], pRec, 
157e0 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 20 2f 2a  serial_type); /*
157f0 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 7d 77   content */.  }w
15800 68 69 6c 65 28 20 28 2b 2b 70 52 65 63 29 3c 3d  hile( (++pRec)<=
15810 70 4c 61 73 74 20 29 3b 0a 20 20 61 73 73 65 72  pLast );.  asser
15820 74 28 20 69 3d 3d 6e 48 64 72 20 29 3b 0a 20 20  t( i==nHdr );.  
15830 61 73 73 65 72 74 28 20 6a 3d 3d 6e 42 79 74 65  assert( j==nByte
15840 20 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70   );..  assert( p
15850 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d  Op->p3>0 && pOp-
15860 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p3<=(p->nMem-p-
15870 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70  >nCursor) );.  p
15880 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42  Out->n = (int)nB
15890 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  yte;.  pOut->fla
158a0 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 3b 0a 20  gs = MEM_Blob;. 
158b0 20 70 4f 75 74 2d 3e 78 44 65 6c 20 3d 20 30 3b   pOut->xDel = 0;
158c0 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20 29 7b 0a  .  if( nZero ){.
158d0 20 20 20 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72      pOut->u.nZer
158e0 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 70  o = nZero;.    p
158f0 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  Out->flags |= ME
15900 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20 70 4f  M_Zero;.  }.  pO
15910 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45  ut->enc = SQLITE
15920 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61  _UTF8;  /* In ca
15930 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65  se the blob is e
15940 76 65 72 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  ver converted to
15950 20 74 65 78 74 20 2a 2f 0a 20 20 52 45 47 49 53   text */.  REGIS
15960 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
15970 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41  3, pOut);.  UPDA
15980 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
15990 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
159a0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
159b0 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  unt P1 P2 * * *.
159c0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
159d0 32 5d 3d 63 6f 75 6e 74 28 29 0a 2a 2a 0a 2a 2a  2]=count().**.**
159e0 20 53 74 6f 72 65 20 74 68 65 20 6e 75 6d 62 65   Store the numbe
159f0 72 20 6f 66 20 65 6e 74 72 69 65 73 20 28 61 6e  r of entries (an
15a00 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 29 20   integer value) 
15a10 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  in the table or 
15a20 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65 64  index .** opened
15a30 20 62 79 20 63 75 72 73 6f 72 20 50 31 20 69 6e   by cursor P1 in
15a40 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2f 0a   register P2.*/.
15a50 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
15a60 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a 63  MIT_BTREECOUNT.c
15a70 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20  ase OP_Count: { 
15a80 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
15a90 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
15aa0 69 36 34 20 6e 45 6e 74 72 79 3b 0a 20 20 42 74  i64 nEntry;.  Bt
15ab0 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 0a  Cursor *pCrsr;..
15ac0 20 20 70 43 72 73 72 20 3d 20 70 2d 3e 61 70 43    pCrsr = p->apC
15ad0 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 70 43 75  sr[pOp->p1]->pCu
15ae0 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20  rsor;.  assert( 
15af0 70 43 72 73 72 20 29 3b 0a 20 20 6e 45 6e 74 72  pCrsr );.  nEntr
15b00 79 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e  y = 0;  /* Not n
15b10 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65  eeded.  Only use
15b20 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77  d to silence a w
15b30 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20  arning. */.  rc 
15b40 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6f  = sqlite3BtreeCo
15b50 75 6e 74 28 70 43 72 73 72 2c 20 26 6e 45 6e 74  unt(pCrsr, &nEnt
15b60 72 79 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  ry);.  pOut->u.i
15b70 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20 62 72 65   = nEntry;.  bre
15b80 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ak;.}.#endif../*
15b90 20 4f 70 63 6f 64 65 3a 20 53 61 76 65 70 6f 69   Opcode: Savepoi
15ba0 6e 74 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  nt P1 * * P4 *.*
15bb0 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65 6c 65 61  *.** Open, relea
15bc0 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63 6b 20 74  se or rollback t
15bd0 68 65 20 73 61 76 65 70 6f 69 6e 74 20 6e 61 6d  he savepoint nam
15be0 65 64 20 62 79 20 70 61 72 61 6d 65 74 65 72 20  ed by parameter 
15bf0 50 34 2c 20 64 65 70 65 6e 64 69 6e 67 0a 2a 2a  P4, depending.**
15c00 20 6f 6e 20 74 68 65 20 76 61 6c 75 65 20 6f 66   on the value of
15c10 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20 61 20 6e   P1. To open a n
15c20 65 77 20 73 61 76 65 70 6f 69 6e 74 2c 20 50 31  ew savepoint, P1
15c30 3d 3d 30 2e 20 54 6f 20 72 65 6c 65 61 73 65 20  ==0. To release 
15c40 28 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a 2a 20 65  (commit) an.** e
15c50 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e  xisting savepoin
15c60 74 2c 20 50 31 3d 3d 31 2c 20 6f 72 20 74 6f 20  t, P1==1, or to 
15c70 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 65 78 69 73  rollback an exis
15c80 74 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 20 50  ting savepoint P
15c90 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  1==2..*/.case OP
15ca0 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b 0a 20 20  _Savepoint: {.  
15cb0 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20 20  int p1;         
15cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15cd0 2f 2a 20 56 61 6c 75 65 20 6f 66 20 50 31 20 6f  /* Value of P1 o
15ce0 70 65 72 61 6e 64 20 2a 2f 0a 20 20 63 68 61 72  perand */.  char
15cf0 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
15d00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
15d10 61 6d 65 20 6f 66 20 73 61 76 65 70 6f 69 6e 74  ame of savepoint
15d20 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61 6d 65 3b   */.  int nName;
15d30 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e  .  Savepoint *pN
15d40 65 77 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20  ew;.  Savepoint 
15d50 2a 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 53  *pSavepoint;.  S
15d60 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d 70 3b 0a  avepoint *pTmp;.
15d70 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74    int iSavepoint
15d80 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 0a 20 20 70  ;.  int ii;..  p
15d90 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a  1 = pOp->p1;.  z
15da0 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  Name = pOp->p4.z
15db0 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72 74 20 74  ;..  /* Assert t
15dc0 68 61 74 20 74 68 65 20 70 31 20 70 61 72 61 6d  hat the p1 param
15dd0 65 74 65 72 20 69 73 20 76 61 6c 69 64 2e 20 41  eter is valid. A
15de0 6c 73 6f 20 74 68 61 74 20 69 66 20 74 68 65 72  lso that if ther
15df0 65 20 69 73 20 6e 6f 20 6f 70 65 6e 0a 20 20 2a  e is no open.  *
15e00 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74  * transaction, t
15e10 68 65 6e 20 74 68 65 72 65 20 63 61 6e 6e 6f 74  hen there cannot
15e20 20 62 65 20 61 6e 79 20 73 61 76 65 70 6f 69 6e   be any savepoin
15e30 74 73 2e 20 0a 20 20 2a 2f 0a 20 20 61 73 73 65  ts. .  */.  asse
15e40 72 74 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  rt( db->pSavepoi
15e50 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 75 74  nt==0 || db->aut
15e60 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20  oCommit==0 );.  
15e70 61 73 73 65 72 74 28 20 70 31 3d 3d 53 41 56 45  assert( p1==SAVE
15e80 50 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c 70 31 3d  POINT_BEGIN||p1=
15e90 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41  =SAVEPOINT_RELEA
15ea0 53 45 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e  SE||p1==SAVEPOIN
15eb0 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a 20 20  T_ROLLBACK );.  
15ec0 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76  assert( db->pSav
15ed0 65 70 6f 69 6e 74 20 7c 7c 20 64 62 2d 3e 69 73  epoint || db->is
15ee0 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
15ef0 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73  oint==0 );.  ass
15f00 65 72 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f  ert( checkSavepo
15f10 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a  intCount(db) );.
15f20 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
15f30 52 65 61 64 65 72 20 29 3b 0a 0a 20 20 69 66 28  Reader );..  if(
15f40 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42   p1==SAVEPOINT_B
15f50 45 47 49 4e 20 29 7b 0a 20 20 20 20 69 66 28 20  EGIN ){.    if( 
15f60 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30  db->nVdbeWrite>0
15f70 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 20 6e   ){.      /* A n
15f80 65 77 20 73 61 76 65 70 6f 69 6e 74 20 63 61 6e  ew savepoint can
15f90 6e 6f 74 20 62 65 20 63 72 65 61 74 65 64 20 69  not be created i
15fa0 66 20 74 68 65 72 65 20 61 72 65 20 61 63 74 69  f there are acti
15fb0 76 65 20 77 72 69 74 65 20 0a 20 20 20 20 20 20  ve write .      
15fc0 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 20 28 69  ** statements (i
15fd0 2e 65 2e 20 6f 70 65 6e 20 72 65 61 64 2f 77 72  .e. open read/wr
15fe0 69 74 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20  ite incremental 
15ff0 62 6c 6f 62 20 68 61 6e 64 6c 65 73 29 2e 0a 20  blob handles).. 
16000 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71       */.      sq
16010 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
16020 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
16030 22 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 73 61 76  "cannot open sav
16040 65 70 6f 69 6e 74 20 2d 20 22 0a 20 20 20 20 20  epoint - ".     
16050 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e     "SQL statemen
16060 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29  ts in progress")
16070 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  ;.      rc = SQL
16080 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65  ITE_BUSY;.    }e
16090 6c 73 65 7b 0a 20 20 20 20 20 20 6e 4e 61 6d 65  lse{.      nName
160a0 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e   = sqlite3Strlen
160b0 33 30 28 7a 4e 61 6d 65 29 3b 0a 0a 23 69 66 6e  30(zName);..#ifn
160c0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
160d0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 20  VIRTUALTABLE.   
160e0 20 20 20 2f 2a 20 54 68 69 73 20 63 61 6c 6c 20     /* This call 
160f0 69 73 20 4f 6b 20 65 76 65 6e 20 69 66 20 74 68  is Ok even if th
16100 69 73 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20  is savepoint is 
16110 61 63 74 75 61 6c 6c 79 20 61 20 74 72 61 6e 73  actually a trans
16120 61 63 74 69 6f 6e 0a 20 20 20 20 20 20 2a 2a 20  action.      ** 
16130 73 61 76 65 70 6f 69 6e 74 20 28 61 6e 64 20 74  savepoint (and t
16140 68 65 72 65 66 6f 72 65 20 73 68 6f 75 6c 64 20  herefore should 
16150 6e 6f 74 20 70 72 6f 6d 70 74 20 78 53 61 76 65  not prompt xSave
16160 70 6f 69 6e 74 28 29 29 20 63 61 6c 6c 62 61 63  point()) callbac
16170 6b 73 2e 0a 20 20 20 20 20 20 2a 2a 20 49 66 20  ks..      ** If 
16180 74 68 69 73 20 69 73 20 61 20 74 72 61 6e 73 61  this is a transa
16190 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 20  ction savepoint 
161a0 62 65 69 6e 67 20 6f 70 65 6e 65 64 2c 20 69 74  being opened, it
161b0 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 0a 20   is guaranteed. 
161c0 20 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68 65       ** that the
161d0 20 64 62 2d 3e 61 56 54 72 61 6e 73 5b 5d 20 61   db->aVTrans[] a
161e0 72 72 61 79 20 69 73 20 65 6d 70 74 79 2e 20 20  rray is empty.  
161f0 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
16200 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d   db->autoCommit=
16210 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 54 72 61 6e  =0 || db->nVTran
16220 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 72 63  s==0 );.      rc
16230 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53 61   = sqlite3VtabSa
16240 76 65 70 6f 69 6e 74 28 64 62 2c 20 53 41 56 45  vepoint(db, SAVE
16250 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 0a 20 20 20  POINT_BEGIN,.   
16260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16270 20 20 20 20 20 20 20 20 20 20 20 20 20 64 62 2d               db-
16280 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 64 62 2d 3e  >nStatement+db->
16290 6e 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20  nSavepoint);.   
162a0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
162b0 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
162c0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
162d0 23 65 6e 64 69 66 0a 0a 20 20 20 20 20 20 2f 2a  #endif..      /*
162e0 20 43 72 65 61 74 65 20 61 20 6e 65 77 20 73 61   Create a new sa
162f0 76 65 70 6f 69 6e 74 20 73 74 72 75 63 74 75 72  vepoint structur
16300 65 2e 20 2a 2f 0a 20 20 20 20 20 20 70 4e 65 77  e. */.      pNew
16310 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c   = sqlite3DbMall
16320 6f 63 52 61 77 28 64 62 2c 20 73 69 7a 65 6f 66  ocRaw(db, sizeof
16330 28 53 61 76 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d  (Savepoint)+nNam
16340 65 2b 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20  e+1);.      if( 
16350 70 4e 65 77 20 29 7b 0a 20 20 20 20 20 20 20 20  pNew ){.        
16360 70 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63  pNew->zName = (c
16370 68 61 72 20 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a  har *)&pNew[1];.
16380 20 20 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70          memcpy(p
16390 4e 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d  New->zName, zNam
163a0 65 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20  e, nName+1);.   
163b0 20 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20   .        /* If 
163c0 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e  there is no open
163d0 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68   transaction, th
163e0 65 6e 20 6d 61 72 6b 20 74 68 69 73 20 61 73 20  en mark this as 
163f0 61 20 73 70 65 63 69 61 6c 0a 20 20 20 20 20 20  a special.      
16400 20 20 2a 2a 20 22 74 72 61 6e 73 61 63 74 69 6f    ** "transactio
16410 6e 20 73 61 76 65 70 6f 69 6e 74 22 2e 20 2a 2f  n savepoint". */
16420 0a 20 20 20 20 20 20 20 20 69 66 28 20 64 62 2d  .        if( db-
16430 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20  >autoCommit ){. 
16440 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74           db->aut
16450 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20  oCommit = 0;.   
16460 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61         db->isTra
16470 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
16480 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d  t = 1;.        }
16490 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
164a0 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2b 2b  db->nSavepoint++
164b0 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
164c0 0a 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b  .        /* Link
164d0 20 74 68 65 20 6e 65 77 20 73 61 76 65 70 6f 69   the new savepoi
164e0 6e 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61  nt into the data
164f0 62 61 73 65 20 68 61 6e 64 6c 65 27 73 20 6c 69  base handle's li
16500 73 74 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 70  st. */.        p
16510 4e 65 77 2d 3e 70 4e 65 78 74 20 3d 20 64 62 2d  New->pNext = db-
16520 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20  >pSavepoint;.   
16530 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f       db->pSavepo
16540 69 6e 74 20 3d 20 70 4e 65 77 3b 0a 20 20 20 20  int = pNew;.    
16550 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72      pNew->nDefer
16560 72 65 64 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44  redCons = db->nD
16570 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20  eferredCons;.   
16580 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65       pNew->nDefe
16590 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 64 62  rredImmCons = db
165a0 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
165b0 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ns;.      }.    
165c0 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  }.  }else{.    i
165d0 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 0a  Savepoint = 0;..
165e0 20 20 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20      /* Find the 
165f0 6e 61 6d 65 64 20 73 61 76 65 70 6f 69 6e 74 2e  named savepoint.
16600 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   If there is no 
16610 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74 2c 20  such savepoint, 
16620 74 68 65 6e 20 61 6e 0a 20 20 20 20 2a 2a 20 61  then an.    ** a
16630 6e 20 65 72 72 6f 72 20 69 73 20 72 65 74 75 72  n error is retur
16640 6e 65 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e  ned to the user.
16650 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28 0a 20 20    */.    for(.  
16660 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d      pSavepoint =
16670 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b   db->pSavepoint;
16680 20 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69   .      pSavepoi
16690 6e 74 20 26 26 20 73 71 6c 69 74 65 33 53 74 72  nt && sqlite3Str
166a0 49 43 6d 70 28 70 53 61 76 65 70 6f 69 6e 74 2d  ICmp(pSavepoint-
166b0 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 29 3b 0a  >zName, zName);.
166c0 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74        pSavepoint
166d0 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70   = pSavepoint->p
166e0 4e 65 78 74 0a 20 20 20 20 29 7b 0a 20 20 20 20  Next.    ){.    
166f0 20 20 69 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a    iSavepoint++;.
16700 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 21 70      }.    if( !p
16710 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20  Savepoint ){.   
16720 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
16730 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
16740 20 64 62 2c 20 22 6e 6f 20 73 75 63 68 20 73 61   db, "no such sa
16750 76 65 70 6f 69 6e 74 3a 20 25 73 22 2c 20 7a 4e  vepoint: %s", zN
16760 61 6d 65 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  ame);.      rc =
16770 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
16780 20 20 20 7d 65 6c 73 65 20 69 66 28 20 64 62 2d     }else if( db-
16790 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20 26 26  >nVdbeWrite>0 &&
167a0 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52   p1==SAVEPOINT_R
167b0 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20  ELEASE ){.      
167c0 2f 2a 20 49 74 20 69 73 20 6e 6f 74 20 70 6f 73  /* It is not pos
167d0 73 69 62 6c 65 20 74 6f 20 72 65 6c 65 61 73 65  sible to release
167e0 20 28 63 6f 6d 6d 69 74 29 20 61 20 73 61 76 65   (commit) a save
167f0 70 6f 69 6e 74 20 69 66 20 74 68 65 72 65 20 61  point if there a
16800 72 65 20 0a 20 20 20 20 20 20 2a 2a 20 61 63 74  re .      ** act
16810 69 76 65 20 77 72 69 74 65 20 73 74 61 74 65 6d  ive write statem
16820 65 6e 74 73 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  ents..      */. 
16830 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53       sqlite3SetS
16840 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
16850 67 2c 20 64 62 2c 20 0a 20 20 20 20 20 20 20 20  g, db, .        
16860 22 63 61 6e 6e 6f 74 20 72 65 6c 65 61 73 65 20  "cannot release 
16870 73 61 76 65 70 6f 69 6e 74 20 2d 20 53 51 4c 20  savepoint - SQL 
16880 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72  statements in pr
16890 6f 67 72 65 73 73 22 0a 20 20 20 20 20 20 29 3b  ogress".      );
168a0 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
168b0 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c  TE_BUSY;.    }el
168c0 73 65 7b 0a 0a 20 20 20 20 20 20 2f 2a 20 44 65  se{..      /* De
168d0 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20  termine whether 
168e0 6f 72 20 6e 6f 74 20 74 68 69 73 20 69 73 20 61  or not this is a
168f0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76   transaction sav
16900 65 70 6f 69 6e 74 2e 20 49 66 20 73 6f 2c 0a 20  epoint. If so,. 
16910 20 20 20 20 20 2a 2a 20 61 6e 64 20 74 68 69 73       ** and this
16920 20 69 73 20 61 20 52 45 4c 45 41 53 45 20 63 6f   is a RELEASE co
16930 6d 6d 61 6e 64 2c 20 74 68 65 6e 20 74 68 65 20  mmand, then the 
16940 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74  current transact
16950 69 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 69 73  ion .      ** is
16960 20 63 6f 6d 6d 69 74 74 65 64 2e 20 0a 20 20 20   committed. .   
16970 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20     */.      int 
16980 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20  isTransaction = 
16990 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78  pSavepoint->pNex
169a0 74 3d 3d 30 20 26 26 20 64 62 2d 3e 69 73 54 72  t==0 && db->isTr
169b0 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
169c0 6e 74 3b 0a 20 20 20 20 20 20 69 66 28 20 69 73  nt;.      if( is
169d0 54 72 61 6e 73 61 63 74 69 6f 6e 20 26 26 20 70  Transaction && p
169e0 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  1==SAVEPOINT_REL
169f0 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20  EASE ){.        
16a00 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65  if( (rc = sqlite
16a10 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20  3VdbeCheckFk(p, 
16a20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29  1))!=SQLITE_OK )
16a30 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  {.          goto
16a40 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
16a50 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
16a60 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
16a70 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20   1;.        if( 
16a80 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28  sqlite3VdbeHalt(
16a90 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  p)==SQLITE_BUSY 
16aa0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e  ){.          p->
16ab0 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 20  pc = pc;.       
16ac0 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
16ad0 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20  t = 0;.         
16ae0 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51   p->rc = rc = SQ
16af0 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20  LITE_BUSY;.     
16b00 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
16b10 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d  eturn;.        }
16b20 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54  .        db->isT
16b30 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
16b40 69 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  int = 0;.       
16b50 20 72 63 20 3d 20 70 2d 3e 72 63 3b 0a 20 20 20   rc = p->rc;.   
16b60 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
16b70 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 64    iSavepoint = d
16b80 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2d 20  b->nSavepoint - 
16b90 69 53 61 76 65 70 6f 69 6e 74 20 2d 20 31 3b 0a  iSavepoint - 1;.
16ba0 20 20 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d          if( p1==
16bb0 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
16bc0 43 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  CK ){.          
16bd0 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d  for(ii=0; ii<db-
16be0 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20  >nDb; ii++){.   
16bf0 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
16c00 42 74 72 65 65 54 72 69 70 41 6c 6c 43 75 72 73  BtreeTripAllCurs
16c10 6f 72 73 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e  ors(db->aDb[ii].
16c20 70 42 74 2c 20 53 51 4c 49 54 45 5f 41 42 4f 52  pBt, SQLITE_ABOR
16c30 54 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  T);.          }.
16c40 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
16c50 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64    for(ii=0; ii<d
16c60 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20  b->nDb; ii++){. 
16c70 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71           rc = sq
16c80 6c 69 74 65 33 42 74 72 65 65 53 61 76 65 70 6f  lite3BtreeSavepo
16c90 69 6e 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e  int(db->aDb[ii].
16ca0 70 42 74 2c 20 70 31 2c 20 69 53 61 76 65 70 6f  pBt, p1, iSavepo
16cb0 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20  int);.          
16cc0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
16cd0 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  K ){.           
16ce0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
16cf0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
16d00 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
16d10 20 20 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d          if( p1==
16d20 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
16d30 43 4b 20 26 26 20 28 64 62 2d 3e 66 6c 61 67 73  CK && (db->flags
16d40 26 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68  &SQLITE_InternCh
16d50 61 6e 67 65 73 29 21 3d 30 20 29 7b 0a 20 20 20  anges)!=0 ){.   
16d60 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78         sqlite3Ex
16d70 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74  pirePreparedStat
16d80 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20  ements(db);.    
16d90 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73        sqlite3Res
16da0 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f  etAllSchemasOfCo
16db0 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20  nnection(db);.  
16dc0 20 20 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67          db->flag
16dd0 73 20 3d 20 28 64 62 2d 3e 66 6c 61 67 73 20 7c  s = (db->flags |
16de0 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68   SQLITE_InternCh
16df0 61 6e 67 65 73 29 3b 0a 20 20 20 20 20 20 20 20  anges);.        
16e00 7d 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20  }.      }.  .   
16e10 20 20 20 2f 2a 20 52 65 67 61 72 64 6c 65 73 73     /* Regardless
16e20 20 6f 66 20 77 68 65 74 68 65 72 20 74 68 69 73   of whether this
16e30 20 69 73 20 61 20 52 45 4c 45 41 53 45 20 6f 72   is a RELEASE or
16e40 20 52 4f 4c 4c 42 41 43 4b 2c 20 64 65 73 74 72   ROLLBACK, destr
16e50 6f 79 20 61 6c 6c 20 0a 20 20 20 20 20 20 2a 2a  oy all .      **
16e60 20 73 61 76 65 70 6f 69 6e 74 73 20 6e 65 73 74   savepoints nest
16e70 65 64 20 69 6e 73 69 64 65 20 6f 66 20 74 68 65  ed inside of the
16e80 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67   savepoint being
16e90 20 6f 70 65 72 61 74 65 64 20 6f 6e 2e 20 2a 2f   operated on. */
16ea0 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 64 62  .      while( db
16eb0 2d 3e 70 53 61 76 65 70 6f 69 6e 74 21 3d 70 53  ->pSavepoint!=pS
16ec0 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20  avepoint ){.    
16ed0 20 20 20 20 70 54 6d 70 20 3d 20 64 62 2d 3e 70      pTmp = db->p
16ee0 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20  Savepoint;.     
16ef0 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e     db->pSavepoin
16f00 74 20 3d 20 70 54 6d 70 2d 3e 70 4e 65 78 74 3b  t = pTmp->pNext;
16f10 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
16f20 44 62 46 72 65 65 28 64 62 2c 20 70 54 6d 70 29  DbFree(db, pTmp)
16f30 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53  ;.        db->nS
16f40 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20  avepoint--;.    
16f50 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66    }..      /* If
16f60 20 69 74 20 69 73 20 61 20 52 45 4c 45 41 53 45   it is a RELEASE
16f70 2c 20 74 68 65 6e 20 64 65 73 74 72 6f 79 20 74  , then destroy t
16f80 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69  he savepoint bei
16f90 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 0a  ng operated on .
16fa0 20 20 20 20 20 20 2a 2a 20 74 6f 6f 2e 20 49 66        ** too. If
16fb0 20 69 74 20 69 73 20 61 20 52 4f 4c 4c 42 41 43   it is a ROLLBAC
16fc0 4b 20 54 4f 2c 20 74 68 65 6e 20 73 65 74 20 74  K TO, then set t
16fd0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 65 66  he number of def
16fe0 65 72 72 65 64 20 0a 20 20 20 20 20 20 2a 2a 20  erred .      ** 
16ff0 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
17000 74 69 6f 6e 73 20 70 72 65 73 65 6e 74 20 69 6e  tions present in
17010 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 6f   the database to
17020 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65   the value store
17030 64 0a 20 20 20 20 20 20 2a 2a 20 77 68 65 6e 20  d.      ** when 
17040 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 77 61  the savepoint wa
17050 73 20 63 72 65 61 74 65 64 2e 20 20 2a 2f 0a 20  s created.  */. 
17060 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56       if( p1==SAV
17070 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29  EPOINT_RELEASE )
17080 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
17090 28 20 70 53 61 76 65 70 6f 69 6e 74 3d 3d 64 62  ( pSavepoint==db
170a0 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 29 3b 0a  ->pSavepoint );.
170b0 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76          db->pSav
170c0 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f  epoint = pSavepo
170d0 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20  int->pNext;.    
170e0 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
170f0 65 28 64 62 2c 20 70 53 61 76 65 70 6f 69 6e 74  e(db, pSavepoint
17100 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 21  );.        if( !
17110 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b  isTransaction ){
17120 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  .          db->n
17130 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20  Savepoint--;.   
17140 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c       }.      }el
17150 73 65 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  se{.        db->
17160 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20  nDeferredCons = 
17170 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66  pSavepoint->nDef
17180 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20  erredCons;.     
17190 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64     db->nDeferred
171a0 49 6d 6d 43 6f 6e 73 20 3d 20 70 53 61 76 65 70  ImmCons = pSavep
171b0 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 49  oint->nDeferredI
171c0 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a  mmCons;.      }.
171d0 0a 20 20 20 20 20 20 69 66 28 20 21 69 73 54 72  .      if( !isTr
171e0 61 6e 73 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20  ansaction ){.   
171f0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
17200 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64  3VtabSavepoint(d
17210 62 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e  b, p1, iSavepoin
17220 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  t);.        if( 
17230 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
17240 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
17250 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
17260 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 62 72  .    }.  }..  br
17270 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
17280 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74 20 50 31  e: AutoCommit P1
17290 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
172a0 53 65 74 20 74 68 65 20 64 61 74 61 62 61 73 65  Set the database
172b0 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61   auto-commit fla
172c0 67 20 74 6f 20 50 31 20 28 31 20 6f 72 20 30 29  g to P1 (1 or 0)
172d0 2e 20 49 66 20 50 32 20 69 73 20 74 72 75 65 2c  . If P2 is true,
172e0 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e   roll.** back an
172f0 79 20 63 75 72 72 65 6e 74 6c 79 20 61 63 74 69  y currently acti
17300 76 65 20 62 74 72 65 65 20 74 72 61 6e 73 61 63  ve btree transac
17310 74 69 6f 6e 73 2e 20 49 66 20 74 68 65 72 65 20  tions. If there 
17320 61 72 65 20 61 6e 79 20 61 63 74 69 76 65 0a 2a  are any active.*
17330 2a 20 56 4d 73 20 28 61 70 61 72 74 20 66 72 6f  * VMs (apart fro
17340 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20 74 68 65  m this one), the
17350 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20 66 61 69  n a ROLLBACK fai
17360 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54 20 66 61  ls.  A COMMIT fa
17370 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65 72 65 20  ils if.** there 
17380 61 72 65 20 61 63 74 69 76 65 20 77 72 69 74 69  are active writi
17390 6e 67 20 56 4d 73 20 6f 72 20 61 63 74 69 76 65  ng VMs or active
173a0 20 56 4d 73 20 74 68 61 74 20 75 73 65 20 73 68   VMs that use sh
173b0 61 72 65 64 20 63 61 63 68 65 2e 0a 2a 2a 0a 2a  ared cache..**.*
173c0 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
173d0 6f 6e 20 63 61 75 73 65 73 20 74 68 65 20 56 4d  on causes the VM
173e0 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73   to halt..*/.cas
173f0 65 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a  e OP_AutoCommit:
17400 20 7b 0a 20 20 69 6e 74 20 64 65 73 69 72 65 64   {.  int desired
17410 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 69 6e  AutoCommit;.  in
17420 74 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a 20 20 69  t iRollback;.  i
17430 6e 74 20 74 75 72 6e 4f 6e 41 43 3b 0a 0a 20 20  nt turnOnAC;..  
17440 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
17450 74 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69  t = pOp->p1;.  i
17460 52 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f 70 2d 3e  Rollback = pOp->
17470 70 32 3b 0a 20 20 74 75 72 6e 4f 6e 41 43 20 3d  p2;.  turnOnAC =
17480 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
17490 69 74 20 26 26 20 21 64 62 2d 3e 61 75 74 6f 43  it && !db->autoC
174a0 6f 6d 6d 69 74 3b 0a 20 20 61 73 73 65 72 74 28  ommit;.  assert(
174b0 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
174c0 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72 65 64  it==1 || desired
174d0 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b  AutoCommit==0 );
174e0 0a 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72  .  assert( desir
174f0 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20  edAutoCommit==1 
17500 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d 30 20  || iRollback==0 
17510 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  );.  assert( db-
17520 3e 6e 56 64 62 65 41 63 74 69 76 65 3e 30 20 29  >nVdbeActive>0 )
17530 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73 74 20 74  ;  /* At least t
17540 68 69 73 20 6f 6e 65 20 56 4d 20 69 73 20 61 63  his one VM is ac
17550 74 69 76 65 20 2a 2f 0a 20 20 61 73 73 65 72 74  tive */.  assert
17560 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
17570 3b 0a 0a 23 69 66 20 30 0a 20 20 69 66 28 20 74  ;..#if 0.  if( t
17580 75 72 6e 4f 6e 41 43 20 26 26 20 69 52 6f 6c 6c  urnOnAC && iRoll
17590 62 61 63 6b 20 26 26 20 64 62 2d 3e 6e 56 64 62  back && db->nVdb
175a0 65 41 63 74 69 76 65 3e 31 20 29 7b 0a 20 20 20  eActive>1 ){.   
175b0 20 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73 74   /* If this inst
175c0 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  ruction implemen
175d0 74 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20 61 6e  ts a ROLLBACK an
175e0 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65 0a  d other VMs are.
175f0 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20 72 75 6e      ** still run
17600 6e 69 6e 67 2c 20 61 6e 64 20 61 20 74 72 61 6e  ning, and a tran
17610 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76  saction is activ
17620 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72  e, return an err
17630 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 0a 20 20  or indicating.  
17640 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20 6f 74    ** that the ot
17650 68 65 72 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d  her VMs must com
17660 70 6c 65 74 65 20 66 69 72 73 74 2e 20 0a 20 20  plete first. .  
17670 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33    */.    sqlite3
17680 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
17690 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e  rrMsg, db, "cann
176a0 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e  ot rollback tran
176b0 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20  saction - ".    
176c0 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65      "SQL stateme
176d0 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22  nts in progress"
176e0 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  );.    rc = SQLI
176f0 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65  TE_BUSY;.  }else
17700 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 74 75  .#endif.  if( tu
17710 72 6e 4f 6e 41 43 20 26 26 20 21 69 52 6f 6c 6c  rnOnAC && !iRoll
17720 62 61 63 6b 20 26 26 20 64 62 2d 3e 6e 56 64 62  back && db->nVdb
17730 65 57 72 69 74 65 3e 30 20 29 7b 0a 20 20 20 20  eWrite>0 ){.    
17740 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73 74 72  /* If this instr
17750 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74  uction implement
17760 73 20 61 20 43 4f 4d 4d 49 54 20 61 6e 64 20 6f  s a COMMIT and o
17770 74 68 65 72 20 56 4d 73 20 61 72 65 20 77 72 69  ther VMs are wri
17780 74 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65 74 75  ting.    ** retu
17790 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e 64 69  rn an error indi
177a0 63 61 74 69 6e 67 20 74 68 61 74 20 74 68 65 20  cating that the 
177b0 6f 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20 63  other VMs must c
177c0 6f 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20 0a  omplete first. .
177d0 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74      */.    sqlit
177e0 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
177f0 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61  zErrMsg, db, "ca
17800 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 74 72 61 6e  nnot commit tran
17810 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20  saction - ".    
17820 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65      "SQL stateme
17830 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22  nts in progress"
17840 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  );.    rc = SQLI
17850 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65  TE_BUSY;.  }else
17860 20 69 66 28 20 64 65 73 69 72 65 64 41 75 74 6f   if( desiredAuto
17870 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61 75 74 6f  Commit!=db->auto
17880 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 69 66  Commit ){.    if
17890 28 20 69 52 6f 6c 6c 62 61 63 6b 20 29 7b 0a 20  ( iRollback ){. 
178a0 20 20 20 20 20 61 73 73 65 72 74 28 20 64 65 73       assert( des
178b0 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
178c0 31 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  1 );.      sqlit
178d0 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64 62  e3RollbackAll(db
178e0 2c 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52  , SQLITE_ABORT_R
178f0 4f 4c 4c 42 41 43 4b 29 3b 0a 20 20 20 20 20 20  OLLBACK);.      
17900 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
17910 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66   1;.    }else if
17920 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56  ( (rc = sqlite3V
17930 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 31 29  dbeCheckFk(p, 1)
17940 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  )!=SQLITE_OK ){.
17950 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
17960 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 65 6c 73  return;.    }els
17970 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74  e{.      db->aut
17980 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 64 65  oCommit = (u8)de
17990 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b  siredAutoCommit;
179a0 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
179b0 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53  e3VdbeHalt(p)==S
179c0 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
179d0 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63        p->pc = pc
179e0 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75  ;.        db->au
179f0 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 28  toCommit = (u8)(
17a00 31 2d 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  1-desiredAutoCom
17a10 6d 69 74 29 3b 0a 20 20 20 20 20 20 20 20 70 2d  mit);.        p-
17a20 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54  >rc = rc = SQLIT
17a30 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 20 20  E_BUSY;.        
17a40 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
17a50 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
17a60 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
17a70 6e 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 3b  nStatement==0 );
17a80 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6c 6f 73  .    sqlite3Clos
17a90 65 53 61 76 65 70 6f 69 6e 74 73 28 64 62 29 3b  eSavepoints(db);
17aa0 0a 20 20 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d  .    if( p->rc==
17ab0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
17ac0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 44     rc = SQLITE_D
17ad0 4f 4e 45 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ONE;.    }else{.
17ae0 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
17af0 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20  E_ERROR;.    }. 
17b00 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
17b10 75 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  urn;.  }else{.  
17b20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
17b30 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
17b40 64 62 2c 0a 20 20 20 20 20 20 20 20 28 21 64 65  db,.        (!de
17b50 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29  siredAutoCommit)
17b60 3f 22 63 61 6e 6e 6f 74 20 73 74 61 72 74 20 61  ?"cannot start a
17b70 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69 74   transaction wit
17b80 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  hin a transactio
17b90 6e 22 3a 28 0a 20 20 20 20 20 20 20 20 28 69 52  n":(.        (iR
17ba0 6f 6c 6c 62 61 63 6b 29 3f 22 63 61 6e 6e 6f 74  ollback)?"cannot
17bb0 20 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e 6f 20 74   rollback - no t
17bc0 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63  ransaction is ac
17bd0 74 69 76 65 22 3a 0a 20 20 20 20 20 20 20 20 20  tive":.         
17be0 20 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f            "canno
17bf0 74 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f 20 74 72  t commit - no tr
17c00 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74  ansaction is act
17c10 69 76 65 22 29 29 3b 0a 20 20 20 20 20 20 20 20  ive"));.        
17c20 20 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54   .    rc = SQLIT
17c30 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 62  E_ERROR;.  }.  b
17c40 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
17c50 64 65 3a 20 54 72 61 6e 73 61 63 74 69 6f 6e 20  de: Transaction 
17c60 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
17c70 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 20 74 72 61  *.** Begin a tra
17c80 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 64 61 74 61  nsaction on data
17c90 62 61 73 65 20 50 31 20 69 66 20 61 20 74 72 61  base P1 if a tra
17ca0 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20  nsaction is not 
17cb0 61 6c 72 65 61 64 79 0a 2a 2a 20 61 63 74 69 76  already.** activ
17cc0 65 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 6e  e..** If P2 is n
17cd0 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20  on-zero, then a 
17ce0 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f  write-transactio
17cf0 6e 20 69 73 20 73 74 61 72 74 65 64 2c 20 6f 72  n is started, or
17d00 20 69 66 20 61 20 0a 2a 2a 20 72 65 61 64 2d 74   if a .** read-t
17d10 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 6c  ransaction is al
17d20 72 65 61 64 79 20 61 63 74 69 76 65 2c 20 69 74  ready active, it
17d30 20 69 73 20 75 70 67 72 61 64 65 64 20 74 6f 20   is upgraded to 
17d40 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74  a write-transact
17d50 69 6f 6e 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73  ion..** If P2 is
17d60 20 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 72 65   zero, then a re
17d70 61 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  ad-transaction i
17d80 73 20 73 74 61 72 74 65 64 2e 0a 2a 2a 0a 2a 2a  s started..**.**
17d90 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78   P1 is the index
17da0 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
17db0 20 66 69 6c 65 20 6f 6e 20 77 68 69 63 68 20 74   file on which t
17dc0 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  he transaction i
17dd0 73 0a 2a 2a 20 73 74 61 72 74 65 64 2e 20 20 49  s.** started.  I
17de0 6e 64 65 78 20 30 20 69 73 20 74 68 65 20 6d 61  ndex 0 is the ma
17df0 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
17e00 20 61 6e 64 20 69 6e 64 65 78 20 31 20 69 73 20   and index 1 is 
17e10 74 68 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65 64  the.** file used
17e20 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 74   for temporary t
17e30 61 62 6c 65 73 2e 20 20 49 6e 64 69 63 65 73 20  ables.  Indices 
17e40 6f 66 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 65  of 2 or more are
17e50 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74 74   used for.** att
17e60 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e  ached databases.
17e70 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20 77 72 69 74  .**.** If a writ
17e80 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e-transaction is
17e90 20 73 74 61 72 74 65 64 20 61 6e 64 20 74 68 65   started and the
17ea0 20 56 64 62 65 2e 75 73 65 73 53 74 6d 74 4a 6f   Vdbe.usesStmtJo
17eb0 75 72 6e 61 6c 20 66 6c 61 67 20 69 73 0a 2a 2a  urnal flag is.**
17ec0 20 74 72 75 65 20 28 74 68 69 73 20 66 6c 61 67   true (this flag
17ed0 20 69 73 20 73 65 74 20 69 66 20 74 68 65 20 56   is set if the V
17ee0 64 62 65 20 6d 61 79 20 6d 6f 64 69 66 79 20 6d  dbe may modify m
17ef0 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 72 6f 77  ore than one row
17f00 20 61 6e 64 20 6d 61 79 0a 2a 2a 20 74 68 72 6f   and may.** thro
17f10 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70  w an ABORT excep
17f20 74 69 6f 6e 29 2c 20 61 20 73 74 61 74 65 6d 65  tion), a stateme
17f30 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d  nt transaction m
17f40 61 79 20 61 6c 73 6f 20 62 65 20 6f 70 65 6e 65  ay also be opene
17f50 64 2e 0a 2a 2a 20 4d 6f 72 65 20 73 70 65 63 69  d..** More speci
17f60 66 69 63 61 6c 6c 79 2c 20 61 20 73 74 61 74 65  fically, a state
17f70 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
17f80 20 69 73 20 6f 70 65 6e 65 64 20 69 66 66 20 74   is opened iff t
17f90 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63  he database.** c
17fa0 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 75 72  onnection is cur
17fb0 72 65 6e 74 6c 79 20 6e 6f 74 20 69 6e 20 61 75  rently not in au
17fc0 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65 2c 20 6f  tocommit mode, o
17fd0 72 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6f  r if there are o
17fe0 74 68 65 72 0a 2a 2a 20 61 63 74 69 76 65 20 73  ther.** active s
17ff0 74 61 74 65 6d 65 6e 74 73 2e 20 41 20 73 74 61  tatements. A sta
18000 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
18010 6f 6e 20 61 6c 6c 6f 77 73 20 74 68 65 20 63 68  on allows the ch
18020 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20 74 68  anges made by th
18030 69 73 0a 2a 2a 20 56 44 42 45 20 74 6f 20 62 65  is.** VDBE to be
18040 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61 66 74   rolled back aft
18050 65 72 20 61 6e 20 65 72 72 6f 72 20 77 69 74 68  er an error with
18060 6f 75 74 20 68 61 76 69 6e 67 20 74 6f 20 72 6f  out having to ro
18070 6c 6c 20 62 61 63 6b 20 74 68 65 0a 2a 2a 20 65  ll back the.** e
18080 6e 74 69 72 65 20 74 72 61 6e 73 61 63 74 69 6f  ntire transactio
18090 6e 2e 20 49 66 20 6e 6f 20 65 72 72 6f 72 20 69  n. If no error i
180a0 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2c 20 74  s encountered, t
180b0 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  he statement tra
180c0 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 77 69 6c 6c  nsaction.** will
180d0 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63   automatically c
180e0 6f 6d 6d 69 74 20 77 68 65 6e 20 74 68 65 20 56  ommit when the V
180f0 44 42 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a  DBE halts..**.**
18100 20 49 66 20 50 35 21 3d 30 20 74 68 65 6e 20 74   If P5!=0 then t
18110 68 69 73 20 6f 70 63 6f 64 65 20 61 6c 73 6f 20  his opcode also 
18120 63 68 65 63 6b 73 20 74 68 65 20 73 63 68 65 6d  checks the schem
18130 61 20 63 6f 6f 6b 69 65 20 61 67 61 69 6e 73 74  a cookie against
18140 20 50 33 0a 2a 2a 20 61 6e 64 20 74 68 65 20 73   P3.** and the s
18150 63 68 65 6d 61 20 67 65 6e 65 72 61 74 69 6f 6e  chema generation
18160 20 63 6f 75 6e 74 65 72 20 61 67 61 69 6e 73 74   counter against
18170 20 50 34 2e 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b   P4..** The cook
18180 69 65 20 63 68 61 6e 67 65 73 20 69 74 73 20 76  ie changes its v
18190 61 6c 75 65 20 77 68 65 6e 65 76 65 72 20 74 68  alue whenever th
181a0 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
181b0 61 20 63 68 61 6e 67 65 73 2e 0a 2a 2a 20 54 68  a changes..** Th
181c0 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20  is operation is 
181d0 75 73 65 64 20 74 6f 20 64 65 74 65 63 74 20 77  used to detect w
181e0 68 65 6e 20 74 68 61 74 20 74 68 65 20 63 6f 6f  hen that the coo
181f0 6b 69 65 20 68 61 73 20 63 68 61 6e 67 65 64 0a  kie has changed.
18200 2a 2a 20 61 6e 64 20 74 68 61 74 20 74 68 65 20  ** and that the 
18210 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20  current process 
18220 6e 65 65 64 73 20 74 6f 20 72 65 72 65 61 64 20  needs to reread 
18230 74 68 65 20 73 63 68 65 6d 61 2e 20 20 49 66 20  the schema.  If 
18240 74 68 65 20 73 63 68 65 6d 61 0a 2a 2a 20 63 6f  the schema.** co
18250 6f 6b 69 65 20 69 6e 20 50 33 20 64 69 66 66 65  okie in P3 diffe
18260 72 73 20 66 72 6f 6d 20 74 68 65 20 73 63 68 65  rs from the sche
18270 6d 61 20 63 6f 6f 6b 69 65 20 69 6e 20 74 68 65  ma cookie in the
18280 20 64 61 74 61 62 61 73 65 20 68 65 61 64 65 72   database header
18290 20 6f 72 0a 2a 2a 20 69 66 20 74 68 65 20 73 63   or.** if the sc
182a0 68 65 6d 61 20 67 65 6e 65 72 61 74 69 6f 6e 20  hema generation 
182b0 63 6f 75 6e 74 65 72 20 69 6e 20 50 34 20 64 69  counter in P4 di
182c0 66 66 65 72 73 20 66 72 6f 6d 20 74 68 65 20 63  ffers from the c
182d0 75 72 72 65 6e 74 0a 2a 2a 20 67 65 6e 65 72 61  urrent.** genera
182e0 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2c 20 74 68  tion counter, th
182f0 65 6e 20 61 6e 20 53 51 4c 49 54 45 5f 53 43 48  en an SQLITE_SCH
18300 45 4d 41 20 65 72 72 6f 72 20 69 73 20 72 61 69  EMA error is rai
18310 73 65 64 20 61 6e 64 20 65 78 65 63 75 74 69 6f  sed and executio
18320 6e 0a 2a 2a 20 68 61 6c 74 73 2e 20 20 54 68 65  n.** halts.  The
18330 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
18340 77 72 61 70 70 65 72 20 66 75 6e 63 74 69 6f 6e  wrapper function
18350 20 6d 69 67 68 74 20 74 68 65 6e 20 72 65 70 72   might then repr
18360 65 70 61 72 65 20 74 68 65 0a 2a 2a 20 73 74 61  epare the.** sta
18370 74 65 6d 65 6e 74 20 61 6e 64 20 72 65 72 75 6e  tement and rerun
18380 20 69 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67   it from the beg
18390 69 6e 6e 69 6e 67 2e 0a 2a 2f 0a 63 61 73 65 20  inning..*/.case 
183a0 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 3a 20  OP_Transaction: 
183b0 7b 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a  {.  Btree *pBt;.
183c0 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69    int iMeta;.  i
183d0 6e 74 20 69 47 65 6e 3b 0a 0a 20 20 61 73 73 65  nt iGen;..  asse
183e0 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
183f0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
18400 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 7c 7c 20  >readOnly==0 || 
18410 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20 20  pOp->p2==0 );.  
18420 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
18430 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
18440 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
18450 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  t( (p->btreeMask
18460 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29   & (((yDbMask)1)
18470 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30 20 29  <<pOp->p1))!=0 )
18480 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20  ;.  if( pOp->p2 
18490 26 26 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20  && (db->flags & 
184a0 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79  SQLITE_QueryOnly
184b0 29 21 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d  )!=0 ){.    rc =
184c0 20 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59   SQLITE_READONLY
184d0 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74  ;.    goto abort
184e0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
184f0 20 7d 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61   }.  pBt = db->a
18500 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
18510 0a 0a 20 20 69 66 28 20 70 42 74 20 29 7b 0a 20  ..  if( pBt ){. 
18520 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
18530 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70  treeBeginTrans(p
18540 42 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20  Bt, pOp->p2);.  
18550 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
18560 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 70  _BUSY ){.      p
18570 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20  ->pc = pc;.     
18580 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51   p->rc = rc = SQ
18590 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20  LITE_BUSY;.     
185a0 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
185b0 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  n;.    }.    if(
185c0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
185d0 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  {.      goto abo
185e0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
185f0 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20  .    }..    if( 
18600 70 4f 70 2d 3e 70 32 20 26 26 20 70 2d 3e 75 73  pOp->p2 && p->us
18610 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20  esStmtJournal . 
18620 20 20 20 20 26 26 20 28 64 62 2d 3e 61 75 74 6f      && (db->auto
18630 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d  Commit==0 || db-
18640 3e 6e 56 64 62 65 52 65 61 64 3e 31 29 20 0a 20  >nVdbeRead>1) . 
18650 20 20 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65     ){.      asse
18660 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
18670 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29 20 29  IsInTrans(pBt) )
18680 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 69  ;.      if( p->i
18690 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a  Statement==0 ){.
186a0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
186b0 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3e 3d  db->nStatement>=
186c0 30 20 26 26 20 64 62 2d 3e 6e 53 61 76 65 70 6f  0 && db->nSavepo
186d0 69 6e 74 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20  int>=0 );.      
186e0 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74    db->nStatement
186f0 2b 2b 3b 20 0a 20 20 20 20 20 20 20 20 70 2d 3e  ++; .        p->
18700 69 53 74 61 74 65 6d 65 6e 74 20 3d 20 64 62 2d  iStatement = db-
18710 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62  >nSavepoint + db
18720 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3b 0a 20 20  ->nStatement;.  
18730 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 72 63 20      }..      rc 
18740 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76  = sqlite3VtabSav
18750 65 70 6f 69 6e 74 28 64 62 2c 20 53 41 56 45 50  epoint(db, SAVEP
18760 4f 49 4e 54 5f 42 45 47 49 4e 2c 20 70 2d 3e 69  OINT_BEGIN, p->i
18770 53 74 61 74 65 6d 65 6e 74 2d 31 29 3b 0a 20 20  Statement-1);.  
18780 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
18790 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
187a0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
187b0 65 65 42 65 67 69 6e 53 74 6d 74 28 70 42 74 2c  eeBeginStmt(pBt,
187c0 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 29 3b   p->iStatement);
187d0 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
187e0 2f 2a 20 53 74 6f 72 65 20 74 68 65 20 63 75 72  /* Store the cur
187f0 72 65 6e 74 20 76 61 6c 75 65 20 6f 66 20 74 68  rent value of th
18800 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
18810 65 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73  es deferred cons
18820 74 72 61 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20  traint.      ** 
18830 63 6f 75 6e 74 65 72 2e 20 49 66 20 74 68 65 20  counter. If the 
18840 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
18850 63 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62  ction needs to b
18860 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a 20  e rolled back,. 
18870 20 20 20 20 20 2a 2a 20 74 68 65 20 76 61 6c 75       ** the valu
18880 65 20 6f 66 20 74 68 69 73 20 63 6f 75 6e 74 65  e of this counte
18890 72 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65  r needs to be re
188a0 73 74 6f 72 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a  stored too.  */.
188b0 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65        p->nStmtDe
188c0 66 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66  fCons = db->nDef
188d0 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20  erredCons;.     
188e0 20 70 2d 3e 6e 53 74 6d 74 44 65 66 49 6d 6d 43   p->nStmtDefImmC
188f0 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72  ons = db->nDefer
18900 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20  redImmCons;.    
18910 7d 0a 0a 20 20 20 20 2f 2a 20 47 61 74 68 65 72  }..    /* Gather
18920 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73   the schema vers
18930 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 63  ion number for c
18940 68 65 63 6b 69 6e 67 20 2a 2f 0a 20 20 20 20 73  hecking */.    s
18950 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d 65  qlite3BtreeGetMe
18960 74 61 28 70 42 74 2c 20 42 54 52 45 45 5f 53 43  ta(pBt, BTREE_SC
18970 48 45 4d 41 5f 56 45 52 53 49 4f 4e 2c 20 28 75  HEMA_VERSION, (u
18980 33 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20  32 *)&iMeta);.  
18990 20 20 69 47 65 6e 20 3d 20 64 62 2d 3e 61 44 62    iGen = db->aDb
189a0 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d  [pOp->p1].pSchem
189b0 61 2d 3e 69 47 65 6e 65 72 61 74 69 6f 6e 3b 0a  a->iGeneration;.
189c0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 47 65    }else{.    iGe
189d0 6e 20 3d 20 69 4d 65 74 61 20 3d 20 30 3b 0a 20  n = iMeta = 0;. 
189e0 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   }.  assert( pOp
189f0 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  ->p5==0 || pOp->
18a00 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
18a10 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   );.  if( pOp->p
18a20 35 20 26 26 20 28 69 4d 65 74 61 21 3d 70 4f 70  5 && (iMeta!=pOp
18a30 2d 3e 70 33 20 7c 7c 20 69 47 65 6e 21 3d 70 4f  ->p3 || iGen!=pO
18a40 70 2d 3e 70 34 2e 69 29 20 29 7b 0a 20 20 20 20  p->p4.i) ){.    
18a50 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
18a60 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
18a70 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20     p->zErrMsg = 
18a80 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28  sqlite3DbStrDup(
18a90 64 62 2c 20 22 64 61 74 61 62 61 73 65 20 73 63  db, "database sc
18aa0 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64  hema has changed
18ab0 22 29 3b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68  ");.    /* If th
18ac0 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20  e schema-cookie 
18ad0 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
18ae0 65 20 66 69 6c 65 20 6d 61 74 63 68 65 73 20 74  e file matches t
18af0 68 65 20 63 6f 6f 6b 69 65 20 0a 20 20 20 20 2a  he cookie .    *
18b00 2a 20 73 74 6f 72 65 64 20 77 69 74 68 20 74 68  * stored with th
18b10 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 72 65 70 72  e in-memory repr
18b20 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
18b30 65 20 73 63 68 65 6d 61 2c 20 64 6f 0a 20 20 20  e schema, do.   
18b40 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61 64 20 74   ** not reload t
18b50 68 65 20 73 63 68 65 6d 61 20 66 72 6f 6d 20 74  he schema from t
18b60 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
18b70 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
18b80 49 66 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65  If virtual-table
18b90 73 20 61 72 65 20 69 6e 20 75 73 65 2c 20 74 68  s are in use, th
18ba0 69 73 20 69 73 20 6e 6f 74 20 6a 75 73 74 20 61  is is not just a
18bb0 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a  n optimization..
18bc0 20 20 20 20 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d      ** Often, v-
18bd0 74 61 62 6c 65 73 20 73 74 6f 72 65 20 74 68 65  tables store the
18be0 69 72 20 64 61 74 61 20 69 6e 20 6f 74 68 65 72  ir data in other
18bf0 20 53 51 4c 69 74 65 20 74 61 62 6c 65 73 2c 20   SQLite tables, 
18c00 77 68 69 63 68 0a 20 20 20 20 2a 2a 20 61 72 65  which.    ** are
18c10 20 71 75 65 72 69 65 64 20 66 72 6f 6d 20 77 69   queried from wi
18c20 74 68 69 6e 20 78 4e 65 78 74 28 29 20 61 6e 64  thin xNext() and
18c30 20 6f 74 68 65 72 20 76 2d 74 61 62 6c 65 20 6d   other v-table m
18c40 65 74 68 6f 64 73 20 75 73 69 6e 67 0a 20 20 20  ethods using.   
18c50 20 2a 2a 20 70 72 65 70 61 72 65 64 20 71 75 65   ** prepared que
18c60 72 69 65 73 2e 20 49 66 20 73 75 63 68 20 61 20  ries. If such a 
18c70 71 75 65 72 79 20 69 73 20 6f 75 74 2d 6f 66 2d  query is out-of-
18c80 64 61 74 65 2c 20 77 65 20 64 6f 20 6e 6f 74 20  date, we do not 
18c90 77 61 6e 74 20 74 6f 0a 20 20 20 20 2a 2a 20 64  want to.    ** d
18ca0 69 73 63 61 72 64 20 74 68 65 20 64 61 74 61 62  iscard the datab
18cb0 61 73 65 20 73 63 68 65 6d 61 2c 20 61 73 20 74  ase schema, as t
18cc0 68 65 20 75 73 65 72 20 63 6f 64 65 20 69 6d 70  he user code imp
18cd0 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 0a 20 20  lementing the.  
18ce0 20 20 2a 2a 20 76 2d 74 61 62 6c 65 20 77 6f 75    ** v-table wou
18cf0 6c 64 20 68 61 76 65 20 74 6f 20 62 65 20 72 65  ld have to be re
18d00 61 64 79 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ady for the sqli
18d10 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
18d20 72 65 20 69 74 73 65 6c 66 0a 20 20 20 20 2a 2a  re itself.    **
18d30 20 74 6f 20 62 65 20 69 6e 76 61 6c 69 64 61 74   to be invalidat
18d40 65 64 20 77 68 65 6e 65 76 65 72 20 73 71 6c 69  ed whenever sqli
18d50 74 65 33 5f 73 74 65 70 28 29 20 69 73 20 63 61  te3_step() is ca
18d60 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  lled from within
18d70 20 0a 20 20 20 20 2a 2a 20 61 20 76 2d 74 61 62   .    ** a v-tab
18d80 6c 65 20 6d 65 74 68 6f 64 2e 0a 20 20 20 20 2a  le method..    *
18d90 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44  /.    if( db->aD
18da0 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65  b[pOp->p1].pSche
18db0 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69  ma->schema_cooki
18dc0 65 21 3d 69 4d 65 74 61 20 29 7b 0a 20 20 20 20  e!=iMeta ){.    
18dd0 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e    sqlite3ResetOn
18de0 65 53 63 68 65 6d 61 28 64 62 2c 20 70 4f 70 2d  eSchema(db, pOp-
18df0 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  >p1);.    }.    
18e00 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a  p->expired = 1;.
18e10 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
18e20 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20 20 62 72  SCHEMA;.  }.  br
18e30 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
18e40 65 3a 20 52 65 61 64 43 6f 6f 6b 69 65 20 50 31  e: ReadCookie P1
18e50 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
18e60 20 52 65 61 64 20 63 6f 6f 6b 69 65 20 6e 75 6d   Read cookie num
18e70 62 65 72 20 50 33 20 66 72 6f 6d 20 64 61 74 61  ber P3 from data
18e80 62 61 73 65 20 50 31 20 61 6e 64 20 77 72 69 74  base P1 and writ
18e90 65 20 69 74 20 69 6e 74 6f 20 72 65 67 69 73 74  e it into regist
18ea0 65 72 20 50 32 2e 0a 2a 2a 20 50 33 3d 3d 31 20  er P2..** P3==1 
18eb0 69 73 20 74 68 65 20 73 63 68 65 6d 61 20 76 65  is the schema ve
18ec0 72 73 69 6f 6e 2e 20 20 50 33 3d 3d 32 20 69 73  rsion.  P3==2 is
18ed0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 6f   the database fo
18ee0 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d 3d 33 20 69  rmat..** P3==3 i
18ef0 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65  s the recommende
18f00 64 20 70 61 67 65 72 20 63 61 63 68 65 20 73 69  d pager cache si
18f10 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ze, and so forth
18f20 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a 2a 20 74  .  P1==0 is.** t
18f30 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
18f40 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20   file and P1==1 
18f50 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
18f60 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f  file used to sto
18f70 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20  re.** temporary 
18f80 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  tables..**.** Th
18f90 65 72 65 20 6d 75 73 74 20 62 65 20 61 20 72 65  ere must be a re
18fa0 61 64 2d 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64  ad-lock on the d
18fb0 61 74 61 62 61 73 65 20 28 65 69 74 68 65 72 20  atabase (either 
18fc0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a  a transaction.**
18fd0 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65 64   must be started
18fe0 20 6f 72 20 74 68 65 72 65 20 6d 75 73 74 20 62   or there must b
18ff0 65 20 61 6e 20 6f 70 65 6e 20 63 75 72 73 6f 72  e an open cursor
19000 29 20 62 65 66 6f 72 65 0a 2a 2a 20 65 78 65 63  ) before.** exec
19010 75 74 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72  uting this instr
19020 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
19030 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 3a 20 7b  OP_ReadCookie: {
19040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
19050 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
19060 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 65 74 61  e */.  int iMeta
19070 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69  ;.  int iDb;.  i
19080 6e 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a 20 20 61  nt iCookie;..  a
19090 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
190a0 64 65 72 20 29 3b 0a 20 20 69 44 62 20 3d 20 70  der );.  iDb = p
190b0 4f 70 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b 69  Op->p1;.  iCooki
190c0 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61  e = pOp->p3;.  a
190d0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 53  ssert( pOp->p3<S
190e0 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45  QLITE_N_BTREE_ME
190f0 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  TA );.  assert( 
19100 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62  iDb>=0 && iDb<db
19110 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
19120 74 28 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e  t( db->aDb[iDb].
19130 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  pBt!=0 );.  asse
19140 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73  rt( (p->btreeMas
19150 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31  k & (((yDbMask)1
19160 29 3c 3c 69 44 62 29 29 21 3d 30 20 29 3b 0a 0a  )<<iDb))!=0 );..
19170 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65    sqlite3BtreeGe
19180 74 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b 69 44  tMeta(db->aDb[iD
19190 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b 69 65 2c  b].pBt, iCookie,
191a0 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b   (u32 *)&iMeta);
191b0 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69  .  pOut->u.i = i
191c0 4d 65 74 61 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Meta;.  break;.}
191d0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 74  ../* Opcode: Set
191e0 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20  Cookie P1 P2 P3 
191f0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  * *.**.** Write 
19200 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
19210 65 67 69 73 74 65 72 20 50 33 20 28 69 6e 74 65  egister P3 (inte
19220 72 70 72 65 74 65 64 20 61 73 20 61 6e 20 69 6e  rpreted as an in
19230 74 65 67 65 72 29 0a 2a 2a 20 69 6e 74 6f 20 63  teger).** into c
19240 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 32 20  ookie number P2 
19250 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  of database P1. 
19260 20 50 32 3d 3d 31 20 69 73 20 74 68 65 20 73 63   P2==1 is the sc
19270 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 0a  hema version.  .
19280 2a 2a 20 50 32 3d 3d 32 20 69 73 20 74 68 65 20  ** P2==2 is the 
19290 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e  database format.
192a0 20 50 32 3d 3d 33 20 69 73 20 74 68 65 20 72 65   P2==3 is the re
192b0 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20  commended pager 
192c0 63 61 63 68 65 20 0a 2a 2a 20 73 69 7a 65 2c 20  cache .** size, 
192d0 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50  and so forth.  P
192e0 31 3d 3d 30 20 69 73 20 74 68 65 20 6d 61 69 6e  1==0 is the main
192f0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
19300 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20  nd P1==1 is the 
19310 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c  .** database fil
19320 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  e used to store 
19330 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
19340 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e 73 61  ..**.** A transa
19350 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 73 74  ction must be st
19360 61 72 74 65 64 20 62 65 66 6f 72 65 20 65 78 65  arted before exe
19370 63 75 74 69 6e 67 20 74 68 69 73 20 6f 70 63 6f  cuting this opco
19380 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  de..*/.case OP_S
19390 65 74 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20  etCookie: {     
193a0 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 44 62    /* in3 */.  Db
193b0 20 2a 70 44 62 3b 0a 20 20 61 73 73 65 72 74 28   *pDb;.  assert(
193c0 20 70 4f 70 2d 3e 70 32 3c 53 51 4c 49 54 45 5f   pOp->p2<SQLITE_
193d0 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a  N_BTREE_META );.
193e0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
193f0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
19400 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
19410 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61  ert( (p->btreeMa
19420 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29  sk & (((yDbMask)
19430 31 29 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d 30  1)<<pOp->p1))!=0
19440 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
19450 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
19460 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62    pDb = &db->aDb
19470 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
19480 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30  ert( pDb->pBt!=0
19490 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71   );.  assert( sq
194a0 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78  lite3SchemaMutex
194b0 48 65 6c 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31  Held(db, pOp->p1
194c0 2c 20 30 29 20 29 3b 0a 20 20 70 49 6e 33 20 3d  , 0) );.  pIn3 =
194d0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
194e0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
194f0 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 33  mIntegerify(pIn3
19500 29 3b 0a 20 20 2f 2a 20 53 65 65 20 6e 6f 74 65  );.  /* See note
19510 20 61 62 6f 75 74 20 69 6e 64 65 78 20 73 68 69   about index shi
19520 66 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65 61 64  fting on OP_Read
19530 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63 20 3d  Cookie */.  rc =
19540 20 73 71 6c 69 74 65 33 42 74 72 65 65 55 70 64   sqlite3BtreeUpd
19550 61 74 65 4d 65 74 61 28 70 44 62 2d 3e 70 42 74  ateMeta(pDb->pBt
19560 2c 20 70 4f 70 2d 3e 70 32 2c 20 28 69 6e 74 29  , pOp->p2, (int)
19570 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 69 66  pIn3->u.i);.  if
19580 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45  ( pOp->p2==BTREE
19590 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 20  _SCHEMA_VERSION 
195a0 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65 6e 20 74  ){.    /* When t
195b0 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  he schema cookie
195c0 20 63 68 61 6e 67 65 73 2c 20 72 65 63 6f 72 64   changes, record
195d0 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b 69 65 20   the new cookie 
195e0 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a 20 20  internally */.  
195f0 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e    pDb->pSchema->
19600 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20  schema_cookie = 
19610 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a  (int)pIn3->u.i;.
19620 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d      db->flags |=
19630 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68   SQLITE_InternCh
19640 61 6e 67 65 73 3b 0a 20 20 7d 65 6c 73 65 20 69  anges;.  }else i
19650 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45  f( pOp->p2==BTRE
19660 45 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 29 7b  E_FILE_FORMAT ){
19670 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72 64 20 63  .    /* Record c
19680 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20 66 69  hanges in the fi
19690 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a 20 20 20  le format */.   
196a0 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66   pDb->pSchema->f
196b0 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 28 75 38  ile_format = (u8
196c0 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 7d 0a  )pIn3->u.i;.  }.
196d0 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 31    if( pOp->p1==1
196e0 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 76 61 6c   ){.    /* Inval
196f0 69 64 61 74 65 20 61 6c 6c 20 70 72 65 70 61 72  idate all prepar
19700 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77 68  ed statements wh
19710 65 6e 65 76 65 72 20 74 68 65 20 54 45 4d 50 20  enever the TEMP 
19720 64 61 74 61 62 61 73 65 0a 20 20 20 20 2a 2a 20  database.    ** 
19730 73 63 68 65 6d 61 20 69 73 20 63 68 61 6e 67 65  schema is change
19740 64 2e 20 20 54 69 63 6b 65 74 20 23 31 36 34 34  d.  Ticket #1644
19750 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 45   */.    sqlite3E
19760 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61  xpirePreparedSta
19770 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20  tements(db);.   
19780 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30 3b   p->expired = 0;
19790 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
197a0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
197b0 52 65 61 64 20 50 31 20 50 32 20 50 33 20 50 34  Read P1 P2 P3 P4
197c0 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
197d0 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a   root=P2 iDb=P3.
197e0 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61  **.** Open a rea
197f0 64 2d 6f 6e 6c 79 20 63 75 72 73 6f 72 20 66 6f  d-only cursor fo
19800 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  r the database t
19810 61 62 6c 65 20 77 68 6f 73 65 20 72 6f 6f 74 20  able whose root 
19820 70 61 67 65 20 69 73 0a 2a 2a 20 50 32 20 69 6e  page is.** P2 in
19830 20 61 20 64 61 74 61 62 61 73 65 20 66 69 6c 65   a database file
19840 2e 20 20 54 68 65 20 64 61 74 61 62 61 73 65 20  .  The database 
19850 66 69 6c 65 20 69 73 20 64 65 74 65 72 6d 69 6e  file is determin
19860 65 64 20 62 79 20 50 33 2e 20 0a 2a 2a 20 50 33  ed by P3. .** P3
19870 3d 3d 30 20 6d 65 61 6e 73 20 74 68 65 20 6d 61  ==0 means the ma
19880 69 6e 20 64 61 74 61 62 61 73 65 2c 20 50 33 3d  in database, P3=
19890 3d 31 20 6d 65 61 6e 73 20 74 68 65 20 64 61 74  =1 means the dat
198a0 61 62 61 73 65 20 75 73 65 64 20 66 6f 72 20 0a  abase used for .
198b0 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  ** temporary tab
198c0 6c 65 73 2c 20 61 6e 64 20 50 33 3e 31 20 6d 65  les, and P3>1 me
198d0 61 6e 73 20 75 73 65 64 20 74 68 65 20 63 6f 72  ans used the cor
198e0 72 65 73 70 6f 6e 64 69 6e 67 20 61 74 74 61 63  responding attac
198f0 68 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e  hed.** database.
19900 20 20 47 69 76 65 20 74 68 65 20 6e 65 77 20 63    Give the new c
19910 75 72 73 6f 72 20 61 6e 20 69 64 65 6e 74 69 66  ursor an identif
19920 69 65 72 20 6f 66 20 50 31 2e 20 20 54 68 65 20  ier of P1.  The 
19930 50 31 0a 2a 2a 20 76 61 6c 75 65 73 20 6e 65 65  P1.** values nee
19940 64 20 6e 6f 74 20 62 65 20 63 6f 6e 74 69 67 75  d not be contigu
19950 6f 75 73 20 62 75 74 20 61 6c 6c 20 50 31 20 76  ous but all P1 v
19960 61 6c 75 65 73 20 73 68 6f 75 6c 64 20 62 65 20  alues should be 
19970 73 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73 2e 0a  small integers..
19980 2a 2a 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f  ** It is an erro
19990 72 20 66 6f 72 20 50 31 20 74 6f 20 62 65 20 6e  r for P1 to be n
199a0 65 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49  egative..**.** I
199b0 66 20 50 35 21 3d 30 20 74 68 65 6e 20 75 73 65  f P5!=0 then use
199c0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
199d0 72 65 67 69 73 74 65 72 20 50 32 20 61 73 20 74  register P2 as t
199e0 68 65 20 72 6f 6f 74 20 70 61 67 65 2c 20 6e 6f  he root page, no
199f0 74 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f  t.** the value o
19a00 66 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a 2a 0a  f P2 itself..**.
19a10 2a 2a 20 54 68 65 72 65 20 77 69 6c 6c 20 62 65  ** There will be
19a20 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 6f 6e 20   a read lock on 
19a30 74 68 65 20 64 61 74 61 62 61 73 65 20 77 68 65  the database whe
19a40 6e 65 76 65 72 20 74 68 65 72 65 20 69 73 20 61  never there is a
19a50 6e 0a 2a 2a 20 6f 70 65 6e 20 63 75 72 73 6f 72  n.** open cursor
19a60 2e 20 20 49 66 20 74 68 65 20 64 61 74 61 62 61  .  If the databa
19a70 73 65 20 77 61 73 20 75 6e 6c 6f 63 6b 65 64 20  se was unlocked 
19a80 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20 69 6e  prior to this in
19a90 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 74 68 65  struction.** the
19aa0 6e 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 69 73  n a read lock is
19ab0 20 61 63 71 75 69 72 65 64 20 61 73 20 70 61 72   acquired as par
19ac0 74 20 6f 66 20 74 68 69 73 20 69 6e 73 74 72 75  t of this instru
19ad0 63 74 69 6f 6e 2e 20 20 41 20 72 65 61 64 0a 2a  ction.  A read.*
19ae0 2a 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20 6f 74  * lock allows ot
19af0 68 65 72 20 70 72 6f 63 65 73 73 65 73 20 74 6f  her processes to
19b00 20 72 65 61 64 20 74 68 65 20 64 61 74 61 62 61   read the databa
19b10 73 65 20 62 75 74 20 70 72 6f 68 69 62 69 74 73  se but prohibits
19b20 0a 2a 2a 20 61 6e 79 20 6f 74 68 65 72 20 70 72  .** any other pr
19b30 6f 63 65 73 73 20 66 72 6f 6d 20 6d 6f 64 69 66  ocess from modif
19b40 79 69 6e 67 20 74 68 65 20 64 61 74 61 62 61 73  ying the databas
19b50 65 2e 20 20 54 68 65 20 72 65 61 64 20 6c 6f 63  e.  The read loc
19b60 6b 20 69 73 0a 2a 2a 20 72 65 6c 65 61 73 65 64  k is.** released
19b70 20 77 68 65 6e 20 61 6c 6c 20 63 75 72 73 6f 72   when all cursor
19b80 73 20 61 72 65 20 63 6c 6f 73 65 64 2e 20 20 49  s are closed.  I
19b90 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  f this instructi
19ba0 6f 6e 20 61 74 74 65 6d 70 74 73 0a 2a 2a 20 74  on attempts.** t
19bb0 6f 20 67 65 74 20 61 20 72 65 61 64 20 6c 6f 63  o get a read loc
19bc0 6b 20 62 75 74 20 66 61 69 6c 73 2c 20 74 68 65  k but fails, the
19bd0 20 73 63 72 69 70 74 20 74 65 72 6d 69 6e 61 74   script terminat
19be0 65 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20 53 51  es with an.** SQ
19bf0 4c 49 54 45 5f 42 55 53 59 20 65 72 72 6f 72 20  LITE_BUSY error 
19c00 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  code..**.** The 
19c10 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20  P4 value may be 
19c20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65  either an intege
19c30 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20  r (P4_INT32) or 
19c40 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20  a pointer to.** 
19c50 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74  a KeyInfo struct
19c60 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29  ure (P4_KEYINFO)
19c70 2e 20 49 66 20 69 74 20 69 73 20 61 20 70 6f 69  . If it is a poi
19c80 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66  nter to a KeyInf
19c90 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c  o .** structure,
19ca0 20 74 68 65 6e 20 73 61 69 64 20 73 74 72 75 63   then said struc
19cb0 74 75 72 65 20 64 65 66 69 6e 65 73 20 74 68 65  ture defines the
19cc0 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c   content and col
19cd0 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65  lating .** seque
19ce0 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78  nce of the index
19cf0 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f   being opened. O
19d00 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 34 20  therwise, if P4 
19d10 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a  is an integer .*
19d20 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73  * value, it is s
19d30 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  et to the number
19d40 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
19d50 68 65 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  he table..**.** 
19d60 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e 57 72 69  See also OpenWri
19d70 74 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  te..*/./* Opcode
19d80 3a 20 4f 70 65 6e 57 72 69 74 65 20 50 31 20 50  : OpenWrite P1 P
19d90 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
19da0 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20  nopsis: root=P2 
19db0 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65  iDb=P3.**.** Ope
19dc0 6e 20 61 20 72 65 61 64 2f 77 72 69 74 65 20 63  n a read/write c
19dd0 75 72 73 6f 72 20 6e 61 6d 65 64 20 50 31 20 6f  ursor named P1 o
19de0 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  n the table or i
19df0 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 0a  ndex whose root.
19e00 2a 2a 20 70 61 67 65 20 69 73 20 50 32 2e 20 20  ** page is P2.  
19e10 4f 72 20 69 66 20 50 35 21 3d 30 20 75 73 65 20  Or if P5!=0 use 
19e20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
19e30 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 66 69  egister P2 to fi
19e40 6e 64 20 74 68 65 0a 2a 2a 20 72 6f 6f 74 20 70  nd the.** root p
19e50 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  age..**.** The P
19e60 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65  4 value may be e
19e70 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72  ither an integer
19e80 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61   (P4_INT32) or a
19e90 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61   pointer to.** a
19ea0 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75   KeyInfo structu
19eb0 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e  re (P4_KEYINFO).
19ec0 20 49 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e   If it is a poin
19ed0 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f  ter to a KeyInfo
19ee0 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c 20   .** structure, 
19ef0 74 68 65 6e 20 73 61 69 64 20 73 74 72 75 63 74  then said struct
19f00 75 72 65 20 64 65 66 69 6e 65 73 20 74 68 65 20  ure defines the 
19f10 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c  content and coll
19f20 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e  ating .** sequen
19f30 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20  ce of the index 
19f40 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74  being opened. Ot
19f50 68 65 72 77 69 73 65 2c 20 69 66 20 50 34 20 69  herwise, if P4 i
19f60 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a  s an integer .**
19f70 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73 65   value, it is se
19f80 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20  t to the number 
19f90 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
19fa0 65 20 74 61 62 6c 65 2c 20 6f 72 20 74 6f 20 74  e table, or to t
19fb0 68 65 0a 2a 2a 20 6c 61 72 67 65 73 74 20 69 6e  he.** largest in
19fc0 64 65 78 20 6f 66 20 61 6e 79 20 63 6f 6c 75 6d  dex of any colum
19fd0 6e 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  n of the table t
19fe0 68 61 74 20 69 73 20 61 63 74 75 61 6c 6c 79 20  hat is actually 
19ff0 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  used..**.** This
1a000 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 6f 72   instruction wor
1a010 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f 70 65  ks just like Ope
1a020 6e 52 65 61 64 20 65 78 63 65 70 74 20 74 68 61  nRead except tha
1a030 74 20 69 74 20 6f 70 65 6e 73 20 74 68 65 20 63  t it opens the c
1a040 75 72 73 6f 72 0a 2a 2a 20 69 6e 20 72 65 61 64  ursor.** in read
1a050 2f 77 72 69 74 65 20 6d 6f 64 65 2e 20 20 46 6f  /write mode.  Fo
1a060 72 20 61 20 67 69 76 65 6e 20 74 61 62 6c 65 2c  r a given table,
1a070 20 74 68 65 72 65 20 63 61 6e 20 62 65 20 6f 6e   there can be on
1a080 65 20 6f 72 20 6d 6f 72 65 20 72 65 61 64 2d 6f  e or more read-o
1a090 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f 72 73 20 6f  nly.** cursors o
1a0a0 72 20 61 20 73 69 6e 67 6c 65 20 72 65 61 64 2f  r a single read/
1a0b0 77 72 69 74 65 20 63 75 72 73 6f 72 20 62 75 74  write cursor but
1a0c0 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a 0a 2a 2a   not both..**.**
1a0d0 20 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e 52 65   See also OpenRe
1a0e0 61 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  ad..*/.case OP_O
1a0f0 70 65 6e 52 65 61 64 3a 0a 63 61 73 65 20 4f 50  penRead:.case OP
1a100 5f 4f 70 65 6e 57 72 69 74 65 3a 20 7b 0a 20 20  _OpenWrite: {.  
1a110 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20 4b 65  int nField;.  Ke
1a120 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b  yInfo *pKeyInfo;
1a130 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 69 6e 74  .  int p2;.  int
1a140 20 69 44 62 3b 0a 20 20 69 6e 74 20 77 72 46 6c   iDb;.  int wrFl
1a150 61 67 3b 0a 20 20 42 74 72 65 65 20 2a 70 58 3b  ag;.  Btree *pX;
1a160 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1a170 43 75 72 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a  Cur;.  Db *pDb;.
1a180 0a 20 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d  .  assert( (pOp-
1a190 3e 70 35 26 28 4f 50 46 4c 41 47 5f 50 32 49 53  >p5&(OPFLAG_P2IS
1a1a0 52 45 47 7c 4f 50 46 4c 41 47 5f 42 55 4c 4b 43  REG|OPFLAG_BULKC
1a1b0 53 52 29 29 3d 3d 70 4f 70 2d 3e 70 35 20 29 3b  SR))==pOp->p5 );
1a1c0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1a1d0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57  opcode==OP_OpenW
1a1e0 72 69 74 65 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d  rite || pOp->p5=
1a1f0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1a200 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
1a210 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
1a220 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 52 65  pcode==OP_OpenRe
1a230 61 64 20 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c  ad || p->readOnl
1a240 79 3d 3d 30 20 29 3b 0a 0a 20 20 69 66 28 20 70  y==0 );..  if( p
1a250 2d 3e 65 78 70 69 72 65 64 20 29 7b 0a 20 20 20  ->expired ){.   
1a260 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 41 42 4f   rc = SQLITE_ABO
1a270 52 54 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  RT;.    break;. 
1a280 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20 3d 20 30   }..  nField = 0
1a290 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 30  ;.  pKeyInfo = 0
1a2a0 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32  ;.  p2 = pOp->p2
1a2b0 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70  ;.  iDb = pOp->p
1a2c0 33 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62  3;.  assert( iDb
1a2d0 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e  >=0 && iDb<db->n
1a2e0 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
1a2f0 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20  (p->btreeMask & 
1a300 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 69  (((yDbMask)1)<<i
1a310 44 62 29 29 21 3d 30 20 29 3b 0a 20 20 70 44 62  Db))!=0 );.  pDb
1a320 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d   = &db->aDb[iDb]
1a330 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d 3e 70 42  ;.  pX = pDb->pB
1a340 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70 58 21  t;.  assert( pX!
1a350 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  =0 );.  if( pOp-
1a360 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e  >opcode==OP_Open
1a370 57 72 69 74 65 20 29 7b 0a 20 20 20 20 77 72 46  Write ){.    wrF
1a380 6c 61 67 20 3d 20 31 3b 0a 20 20 20 20 61 73 73  lag = 1;.    ass
1a390 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65  ert( sqlite3Sche
1a3a0 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20  maMutexHeld(db, 
1a3b0 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 69  iDb, 0) );.    i
1a3c0 66 28 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d  f( pDb->pSchema-
1a3d0 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3c 20 70  >file_format < p
1a3e0 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
1a3f0 72 6d 61 74 20 29 7b 0a 20 20 20 20 20 20 70 2d  rmat ){.      p-
1a400 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72  >minWriteFileFor
1a410 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53 63 68 65  mat = pDb->pSche
1a420 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3b  ma->file_format;
1a430 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
1a440 20 20 20 20 77 72 46 6c 61 67 20 3d 20 30 3b 0a      wrFlag = 0;.
1a450 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70    }.  if( pOp->p
1a460 35 20 26 20 4f 50 46 4c 41 47 5f 50 32 49 53 52  5 & OPFLAG_P2ISR
1a470 45 47 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  EG ){.    assert
1a480 28 20 70 32 3e 30 20 29 3b 0a 20 20 20 20 61 73  ( p2>0 );.    as
1a490 73 65 72 74 28 20 70 32 3c 3d 28 70 2d 3e 6e 4d  sert( p2<=(p->nM
1a4a0 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
1a4b0 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20 26 61 4d  ;.    pIn2 = &aM
1a4c0 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 61 73 73 65  em[p2];.    asse
1a4d0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
1a4e0 49 6e 32 29 20 29 3b 0a 20 20 20 20 61 73 73 65  In2) );.    asse
1a4f0 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73  rt( (pIn2->flags
1a500 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
1a510 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
1a520 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
1a530 49 6e 32 29 3b 0a 20 20 20 20 70 32 20 3d 20 28  In2);.    p2 = (
1a540 69 6e 74 29 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20  int)pIn2->u.i;. 
1a550 20 20 20 2f 2a 20 54 68 65 20 70 32 20 76 61 6c     /* The p2 val
1a560 75 65 20 61 6c 77 61 79 73 20 63 6f 6d 65 73 20  ue always comes 
1a570 66 72 6f 6d 20 61 20 70 72 69 6f 72 20 4f 50 5f  from a prior OP_
1a580 43 72 65 61 74 65 54 61 62 6c 65 20 6f 70 63 6f  CreateTable opco
1a590 64 65 20 61 6e 64 0a 20 20 20 20 2a 2a 20 74 68  de and.    ** th
1a5a0 61 74 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61  at opcode will a
1a5b0 6c 77 61 79 73 20 73 65 74 20 74 68 65 20 70 32  lways set the p2
1a5c0 20 76 61 6c 75 65 20 74 6f 20 32 20 6f 72 20 6d   value to 2 or m
1a5d0 6f 72 65 20 6f 72 20 65 6c 73 65 20 66 61 69 6c  ore or else fail
1a5e0 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74 68 65 72  ..    ** If ther
1a5f0 65 20 77 65 72 65 20 61 20 66 61 69 6c 75 72 65  e were a failure
1a600 2c 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73  , the prepared s
1a610 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68  tatement would h
1a620 61 76 65 20 68 61 6c 74 65 64 0a 20 20 20 20 2a  ave halted.    *
1a630 2a 20 62 65 66 6f 72 65 20 72 65 61 63 68 69 6e  * before reachin
1a640 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  g this instructi
1a650 6f 6e 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 4e  on. */.    if( N
1a660 45 56 45 52 28 70 32 3c 32 29 20 29 20 7b 0a 20  EVER(p2<2) ) {. 
1a670 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
1a680 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20  _CORRUPT_BKPT;. 
1a690 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
1a6a0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1a6b0 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f    }.  }.  if( pO
1a6c0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45  p->p4type==P4_KE
1a6d0 59 49 4e 46 4f 20 29 7b 0a 20 20 20 20 70 4b 65  YINFO ){.    pKe
1a6e0 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e  yInfo = pOp->p4.
1a6f0 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 61 73  pKeyInfo;.    as
1a700 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e  sert( pKeyInfo->
1a710 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a  enc==ENC(db) );.
1a720 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79      assert( pKey
1a730 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a  Info->db==db );.
1a740 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4b 65      nField = pKe
1a750 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2b 70 4b  yInfo->nField+pK
1a760 65 79 49 6e 66 6f 2d 3e 6e 58 46 69 65 6c 64 3b  eyInfo->nXField;
1a770 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70  .  }else if( pOp
1a780 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
1a790 33 32 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c 64  32 ){.    nField
1a7a0 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20   = pOp->p4.i;.  
1a7b0 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  }.  assert( pOp-
1a7c0 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65  >p1>=0 );.  asse
1a7d0 72 74 28 20 6e 46 69 65 6c 64 3e 3d 30 20 29 3b  rt( nField>=0 );
1a7e0 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 46 69  .  testcase( nFi
1a7f0 65 6c 64 3d 3d 30 20 29 3b 20 20 2f 2a 20 54 61  eld==0 );  /* Ta
1a800 62 6c 65 20 77 69 74 68 20 49 4e 54 45 47 45 52  ble with INTEGER
1a810 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 6e 64   PRIMARY KEY and
1a820 20 6e 6f 74 68 69 6e 67 20 65 6c 73 65 20 2a 2f   nothing else */
1a830 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61  .  pCur = alloca
1a840 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
1a850 3e 70 31 2c 20 6e 46 69 65 6c 64 2c 20 69 44 62  >p1, nField, iDb
1a860 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43 75 72  , 1);.  if( pCur
1a870 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
1a880 6d 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52  m;.  pCur->nullR
1a890 6f 77 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e  ow = 1;.  pCur->
1a8a0 69 73 4f 72 64 65 72 65 64 20 3d 20 31 3b 0a 20  isOrdered = 1;. 
1a8b0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1a8c0 65 65 43 75 72 73 6f 72 28 70 58 2c 20 70 32 2c  eeCursor(pX, p2,
1a8d0 20 77 72 46 6c 61 67 2c 20 70 4b 65 79 49 6e 66   wrFlag, pKeyInf
1a8e0 6f 2c 20 70 43 75 72 2d 3e 70 43 75 72 73 6f 72  o, pCur->pCursor
1a8f0 29 3b 0a 20 20 70 43 75 72 2d 3e 70 4b 65 79 49  );.  pCur->pKeyI
1a900 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a  nfo = pKeyInfo;.
1a910 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47    assert( OPFLAG
1a920 5f 42 55 4c 4b 43 53 52 3d 3d 42 54 52 45 45 5f  _BULKCSR==BTREE_
1a930 42 55 4c 4b 4c 4f 41 44 20 29 3b 0a 20 20 73 71  BULKLOAD );.  sq
1a940 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
1a950 48 69 6e 74 73 28 70 43 75 72 2d 3e 70 43 75 72  Hints(pCur->pCur
1a960 73 6f 72 2c 20 28 70 4f 70 2d 3e 70 35 20 26 20  sor, (pOp->p5 & 
1a970 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 29 29  OPFLAG_BULKCSR))
1a980 3b 0a 0a 20 20 2f 2a 20 53 69 6e 63 65 20 69 74  ;..  /* Since it
1a990 20 70 65 72 66 6f 72 6d 73 20 6e 6f 20 6d 65 6d   performs no mem
1a9a0 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6f  ory allocation o
1a9b0 72 20 49 4f 2c 20 74 68 65 20 6f 6e 6c 79 20 76  r IO, the only v
1a9c0 61 6c 75 65 20 74 68 61 74 0a 20 20 2a 2a 20 73  alue that.  ** s
1a9d0 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
1a9e0 72 28 29 20 6d 61 79 20 72 65 74 75 72 6e 20 69  r() may return i
1a9f0 73 20 53 51 4c 49 54 45 5f 4f 4b 2e 20 2a 2f 0a  s SQLITE_OK. */.
1aa00 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
1aa10 4c 49 54 45 5f 4f 4b 20 29 3b 0a 0a 20 20 2f 2a  LITE_OK );..  /*
1aa20 20 53 65 74 20 74 68 65 20 56 64 62 65 43 75 72   Set the VdbeCur
1aa30 73 6f 72 2e 69 73 54 61 62 6c 65 20 76 61 72 69  sor.isTable vari
1aa40 61 62 6c 65 2e 20 50 72 65 76 69 6f 75 73 20 76  able. Previous v
1aa50 65 72 73 69 6f 6e 73 20 6f 66 0a 20 20 2a 2a 20  ersions of.  ** 
1aa60 53 51 4c 69 74 65 20 75 73 65 64 20 74 6f 20 63  SQLite used to c
1aa70 68 65 63 6b 20 69 66 20 74 68 65 20 72 6f 6f 74  heck if the root
1aa80 2d 70 61 67 65 20 66 6c 61 67 73 20 77 65 72 65  -page flags were
1aa90 20 73 61 6e 65 20 61 74 20 74 68 69 73 20 70 6f   sane at this po
1aaa0 69 6e 74 0a 20 20 2a 2a 20 61 6e 64 20 72 65 70  int.  ** and rep
1aab0 6f 72 74 20 64 61 74 61 62 61 73 65 20 63 6f 72  ort database cor
1aac0 72 75 70 74 69 6f 6e 20 69 66 20 74 68 65 79 20  ruption if they 
1aad0 77 65 72 65 20 6e 6f 74 2c 20 62 75 74 20 74 68  were not, but th
1aae0 69 73 20 63 68 65 63 6b 20 68 61 73 0a 20 20 2a  is check has.  *
1aaf0 2a 20 73 69 6e 63 65 20 6d 6f 76 65 64 20 69 6e  * since moved in
1ab00 74 6f 20 74 68 65 20 62 74 72 65 65 20 6c 61 79  to the btree lay
1ab10 65 72 2e 20 20 2a 2f 20 20 0a 20 20 70 43 75 72  er.  */  .  pCur
1ab20 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f 70 2d  ->isTable = pOp-
1ab30 3e 70 34 74 79 70 65 21 3d 50 34 5f 4b 45 59 49  >p4type!=P4_KEYI
1ab40 4e 46 4f 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  NFO;.  break;.}.
1ab50 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
1ab60 45 70 68 65 6d 65 72 61 6c 20 50 31 20 50 32 20  Ephemeral P1 P2 
1ab70 2a 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  * P4 P5.** Synop
1ab80 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a  sis: nColumn=P2.
1ab90 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77  **.** Open a new
1aba0 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20   cursor P1 to a 
1abb0 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 2e  transient table.
1abc0 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 69  .** The cursor i
1abd0 73 20 61 6c 77 61 79 73 20 6f 70 65 6e 65 64 20  s always opened 
1abe0 72 65 61 64 2f 77 72 69 74 65 20 65 76 65 6e 20  read/write even 
1abf0 69 66 20 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20  if .** the main 
1ac00 64 61 74 61 62 61 73 65 20 69 73 20 72 65 61 64  database is read
1ac10 2d 6f 6e 6c 79 2e 20 20 54 68 65 20 65 70 68 65  -only.  The ephe
1ac20 6d 65 72 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 69  meral.** table i
1ac30 73 20 64 65 6c 65 74 65 64 20 61 75 74 6f 6d 61  s deleted automa
1ac40 74 69 63 61 6c 6c 79 20 77 68 65 6e 20 74 68 65  tically when the
1ac50 20 63 75 72 73 6f 72 20 69 73 20 63 6c 6f 73 65   cursor is close
1ac60 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74  d..**.** P2 is t
1ac70 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
1ac80 75 6d 6e 73 20 69 6e 20 74 68 65 20 65 70 68 65  umns in the ephe
1ac90 6d 65 72 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20  meral table..** 
1aca0 54 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74  The cursor point
1acb0 73 20 74 6f 20 61 20 42 54 72 65 65 20 74 61 62  s to a BTree tab
1acc0 6c 65 20 69 66 20 50 34 3d 3d 30 20 61 6e 64 20  le if P4==0 and 
1acd0 74 6f 20 61 20 42 54 72 65 65 20 69 6e 64 65 78  to a BTree index
1ace0 0a 2a 2a 20 69 66 20 50 34 20 69 73 20 6e 6f 74  .** if P4 is not
1acf0 20 30 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f   0.  If P4 is no
1ad00 74 20 4e 55 4c 4c 2c 20 69 74 20 70 6f 69 6e 74  t NULL, it point
1ad10 73 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 73  s to a KeyInfo s
1ad20 74 72 75 63 74 75 72 65 0a 2a 2a 20 74 68 61 74  tructure.** that
1ad30 20 64 65 66 69 6e 65 73 20 74 68 65 20 66 6f 72   defines the for
1ad40 6d 61 74 20 6f 66 20 6b 65 79 73 20 69 6e 20 74  mat of keys in t
1ad50 68 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20  he index..**.** 
1ad60 54 68 65 20 50 35 20 70 61 72 61 6d 65 74 65 72  The P5 parameter
1ad70 20 63 61 6e 20 62 65 20 61 20 6d 61 73 6b 20 6f   can be a mask o
1ad80 66 20 74 68 65 20 42 54 52 45 45 5f 2a 20 66 6c  f the BTREE_* fl
1ad90 61 67 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20 69  ags defined.** i
1ada0 6e 20 62 74 72 65 65 2e 68 2e 20 20 54 68 65 73  n btree.h.  Thes
1adb0 65 20 66 6c 61 67 73 20 63 6f 6e 74 72 6f 6c 20  e flags control 
1adc0 61 73 70 65 63 74 73 20 6f 66 20 74 68 65 20 6f  aspects of the o
1add0 70 65 72 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74  peration of.** t
1ade0 68 65 20 62 74 72 65 65 2e 20 20 54 68 65 20 42  he btree.  The B
1adf0 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41  TREE_OMIT_JOURNA
1ae00 4c 20 61 6e 64 20 42 54 52 45 45 5f 53 49 4e 47  L and BTREE_SING
1ae10 4c 45 20 66 6c 61 67 73 20 61 72 65 0a 2a 2a 20  LE flags are.** 
1ae20 61 64 64 65 64 20 61 75 74 6f 6d 61 74 69 63 61  added automatica
1ae30 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  lly..*/./* Opcod
1ae40 65 3a 20 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78  e: OpenAutoindex
1ae50 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
1ae60 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75   Synopsis: nColu
1ae70 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73  mn=P2.**.** This
1ae80 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 74 68   opcode works th
1ae90 65 20 73 61 6d 65 20 61 73 20 4f 50 5f 4f 70 65  e same as OP_Ope
1aea0 6e 45 70 68 65 6d 65 72 61 6c 2e 20 20 49 74 20  nEphemeral.  It 
1aeb0 68 61 73 20 61 0a 2a 2a 20 64 69 66 66 65 72 65  has a.** differe
1aec0 6e 74 20 6e 61 6d 65 20 74 6f 20 64 69 73 74 69  nt name to disti
1aed0 6e 67 75 69 73 68 20 69 74 73 20 75 73 65 2e 20  nguish its use. 
1aee0 20 54 61 62 6c 65 73 20 63 72 65 61 74 65 64 20   Tables created 
1aef0 75 73 69 6e 67 0a 2a 2a 20 62 79 20 74 68 69 73  using.** by this
1af00 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20   opcode will be 
1af10 75 73 65 64 20 66 6f 72 20 61 75 74 6f 6d 61 74  used for automat
1af20 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74  ically created t
1af30 72 61 6e 73 69 65 6e 74 0a 2a 2a 20 69 6e 64 69  ransient.** indi
1af40 63 65 73 20 69 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f  ces in joins..*/
1af50 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 41 75 74  .case OP_OpenAut
1af60 6f 69 6e 64 65 78 3a 20 0a 63 61 73 65 20 4f 50  oindex: .case OP
1af70 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 3a 20  _OpenEphemeral: 
1af80 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
1af90 70 43 78 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a  pCx;.  KeyInfo *
1afa0 70 4b 65 79 49 6e 66 6f 3b 0a 0a 20 20 73 74 61  pKeyInfo;..  sta
1afb0 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 76 66  tic const int vf
1afc0 73 46 6c 61 67 73 20 3d 20 0a 20 20 20 20 20 20  sFlags = .      
1afd0 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44  SQLITE_OPEN_READ
1afe0 57 52 49 54 45 20 7c 0a 20 20 20 20 20 20 53 51  WRITE |.      SQ
1aff0 4c 49 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45  LITE_OPEN_CREATE
1b000 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f   |.      SQLITE_
1b010 4f 50 45 4e 5f 45 58 43 4c 55 53 49 56 45 20 7c  OPEN_EXCLUSIVE |
1b020 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
1b030 45 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f 53 45  EN_DELETEONCLOSE
1b040 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f   |.      SQLITE_
1b050 4f 50 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f 44  OPEN_TRANSIENT_D
1b060 42 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  B;.  assert( pOp
1b070 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73  ->p1>=0 );.  ass
1b080 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20  ert( pOp->p2>=0 
1b090 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63  );.  pCx = alloc
1b0a0 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
1b0b0 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d  ->p1, pOp->p2, -
1b0c0 31 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43 78  1, 1);.  if( pCx
1b0d0 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
1b0e0 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f  m;.  pCx->nullRo
1b0f0 77 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73 71  w = 1;.  rc = sq
1b100 6c 69 74 65 33 42 74 72 65 65 4f 70 65 6e 28 64  lite3BtreeOpen(d
1b110 62 2d 3e 70 56 66 73 2c 20 30 2c 20 64 62 2c 20  b->pVfs, 0, db, 
1b120 26 70 43 78 2d 3e 70 42 74 2c 20 0a 20 20 20 20  &pCx->pBt, .    
1b130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b140 20 20 20 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a      BTREE_OMIT_J
1b150 4f 55 52 4e 41 4c 20 7c 20 42 54 52 45 45 5f 53  OURNAL | BTREE_S
1b160 49 4e 47 4c 45 20 7c 20 70 4f 70 2d 3e 70 35 2c  INGLE | pOp->p5,
1b170 20 76 66 73 46 6c 61 67 73 29 3b 0a 20 20 69 66   vfsFlags);.  if
1b180 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1b190 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
1b1a0 74 65 33 42 74 72 65 65 42 65 67 69 6e 54 72 61  te3BtreeBeginTra
1b1b0 6e 73 28 70 43 78 2d 3e 70 42 74 2c 20 31 29 3b  ns(pCx->pBt, 1);
1b1c0 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53  .  }.  if( rc==S
1b1d0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1b1e0 2f 2a 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e  /* If a transien
1b1f0 74 20 69 6e 64 65 78 20 69 73 20 72 65 71 75 69  t index is requi
1b200 72 65 64 2c 20 63 72 65 61 74 65 20 69 74 20 62  red, create it b
1b210 79 20 63 61 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a  y calling.    **
1b220 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65   sqlite3BtreeCre
1b230 61 74 65 54 61 62 6c 65 28 29 20 77 69 74 68 20  ateTable() with 
1b240 74 68 65 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45  the BTREE_BLOBKE
1b250 59 20 66 6c 61 67 20 62 65 66 6f 72 65 0a 20 20  Y flag before.  
1b260 20 20 2a 2a 20 6f 70 65 6e 69 6e 67 20 69 74 2e    ** opening it.
1b270 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20   If a transient 
1b280 74 61 62 6c 65 20 69 73 20 72 65 71 75 69 72 65  table is require
1b290 64 2c 20 6a 75 73 74 20 75 73 65 20 74 68 65 0a  d, just use the.
1b2a0 20 20 20 20 2a 2a 20 61 75 74 6f 6d 61 74 69 63      ** automatic
1b2b0 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74 61 62  ally created tab
1b2c0 6c 65 20 77 69 74 68 20 72 6f 6f 74 2d 70 61 67  le with root-pag
1b2d0 65 20 31 20 28 61 6e 20 42 4c 4f 42 5f 49 4e 54  e 1 (an BLOB_INT
1b2e0 4b 45 59 20 74 61 62 6c 65 29 2e 0a 20 20 20 20  KEY table)..    
1b2f0 2a 2f 0a 20 20 20 20 69 66 28 20 28 70 4b 65 79  */.    if( (pKey
1b300 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Info = pOp->p4.p
1b310 4b 65 79 49 6e 66 6f 29 21 3d 30 20 29 7b 0a 20  KeyInfo)!=0 ){. 
1b320 20 20 20 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20       int pgno;. 
1b330 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
1b340 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59  ->p4type==P4_KEY
1b350 49 4e 46 4f 20 29 3b 0a 20 20 20 20 20 20 72 63  INFO );.      rc
1b360 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
1b370 72 65 61 74 65 54 61 62 6c 65 28 70 43 78 2d 3e  reateTable(pCx->
1b380 70 42 74 2c 20 26 70 67 6e 6f 2c 20 42 54 52 45  pBt, &pgno, BTRE
1b390 45 5f 42 4c 4f 42 4b 45 59 20 7c 20 70 4f 70 2d  E_BLOBKEY | pOp-
1b3a0 3e 70 35 29 3b 20 0a 20 20 20 20 20 20 69 66 28  >p5); .      if(
1b3b0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
1b3c0 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
1b3d0 28 20 70 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52  ( pgno==MASTER_R
1b3e0 4f 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20 20 20  OOT+1 );.       
1b3f0 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66   assert( pKeyInf
1b400 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20  o->db==db );.   
1b410 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65       assert( pKe
1b420 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28  yInfo->enc==ENC(
1b430 64 62 29 20 29 3b 0a 20 20 20 20 20 20 20 20 70  db) );.        p
1b440 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70  Cx->pKeyInfo = p
1b450 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20 20  KeyInfo;.       
1b460 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1b470 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42  eeCursor(pCx->pB
1b480 74 2c 20 70 67 6e 6f 2c 20 31 2c 20 70 4b 65 79  t, pgno, 1, pKey
1b490 49 6e 66 6f 2c 20 70 43 78 2d 3e 70 43 75 72 73  Info, pCx->pCurs
1b4a0 6f 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  or);.      }.   
1b4b0 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20     pCx->isTable 
1b4c0 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  = 0;.    }else{.
1b4d0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1b4e0 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 43  e3BtreeCursor(pC
1b4f0 78 2d 3e 70 42 74 2c 20 4d 41 53 54 45 52 5f 52  x->pBt, MASTER_R
1b500 4f 4f 54 2c 20 31 2c 20 30 2c 20 70 43 78 2d 3e  OOT, 1, 0, pCx->
1b510 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20  pCursor);.      
1b520 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31  pCx->isTable = 1
1b530 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43  ;.    }.  }.  pC
1b540 78 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 28  x->isOrdered = (
1b550 70 4f 70 2d 3e 70 35 21 3d 42 54 52 45 45 5f 55  pOp->p5!=BTREE_U
1b560 4e 4f 52 44 45 52 45 44 29 3b 0a 20 20 62 72 65  NORDERED);.  bre
1b570 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1b580 3a 20 53 6f 72 74 65 72 4f 70 65 6e 20 50 31 20  : SorterOpen P1 
1b590 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  P2 * P4 *.**.** 
1b5a0 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b  This opcode work
1b5b0 73 20 6c 69 6b 65 20 4f 50 5f 4f 70 65 6e 45 70  s like OP_OpenEp
1b5c0 68 65 6d 65 72 61 6c 20 65 78 63 65 70 74 20 74  hemeral except t
1b5d0 68 61 74 20 69 74 20 6f 70 65 6e 73 0a 2a 2a 20  hat it opens.** 
1b5e0 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64 65  a transient inde
1b5f0 78 20 74 68 61 74 20 69 73 20 73 70 65 63 69 66  x that is specif
1b600 69 63 61 6c 6c 79 20 64 65 73 69 67 6e 65 64 20  ically designed 
1b610 74 6f 20 73 6f 72 74 20 6c 61 72 67 65 0a 2a 2a  to sort large.**
1b620 20 74 61 62 6c 65 73 20 75 73 69 6e 67 20 61 6e   tables using an
1b630 20 65 78 74 65 72 6e 61 6c 20 6d 65 72 67 65 2d   external merge-
1b640 73 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d 2e 0a  sort algorithm..
1b650 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
1b660 72 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43  rOpen: {.  VdbeC
1b670 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61  ursor *pCx;..  a
1b680 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1b690 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1b6a0 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70  Op->p2>=0 );.  p
1b6b0 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72  Cx = allocateCur
1b6c0 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20  sor(p, pOp->p1, 
1b6d0 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 31 29 3b  pOp->p2, -1, 1);
1b6e0 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20  .  if( pCx==0 ) 
1b6f0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
1b700 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70  Cx->pKeyInfo = p
1b710 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b  Op->p4.pKeyInfo;
1b720 0a 20 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e  .  assert( pCx->
1b730 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62  pKeyInfo->db==db
1b740 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1b750 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63  x->pKeyInfo->enc
1b760 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 72  ==ENC(db) );.  r
1b770 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  c = sqlite3VdbeS
1b780 6f 72 74 65 72 49 6e 69 74 28 64 62 2c 20 70 43  orterInit(db, pC
1b790 78 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  x);.  break;.}..
1b7a0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 50  /* Opcode: OpenP
1b7b0 73 65 75 64 6f 20 50 31 20 50 32 20 50 33 20 2a  seudo P1 P2 P3 *
1b7c0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
1b7d0 50 33 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 72 5b  P3 columns in r[
1b7e0 50 32 5d 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61  P2].**.** Open a
1b7f0 20 6e 65 77 20 63 75 72 73 6f 72 20 74 68 61 74   new cursor that
1b800 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 66 61 6b   points to a fak
1b810 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e  e table that con
1b820 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65 0a 2a  tains a single.*
1b830 2a 20 72 6f 77 20 6f 66 20 64 61 74 61 2e 20 20  * row of data.  
1b840 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74  The content of t
1b850 68 61 74 20 6f 6e 65 20 72 6f 77 20 69 73 20 74  hat one row is t
1b860 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 6d 65  he content of me
1b870 6d 6f 72 79 0a 2a 2a 20 72 65 67 69 73 74 65 72  mory.** register
1b880 20 50 32 2e 20 20 49 6e 20 6f 74 68 65 72 20 77   P2.  In other w
1b890 6f 72 64 73 2c 20 63 75 72 73 6f 72 20 50 31 20  ords, cursor P1 
1b8a0 62 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61 73  becomes an alias
1b8b0 20 66 6f 72 20 74 68 65 20 0a 2a 2a 20 4d 45 4d   for the .** MEM
1b8c0 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 20 63 6f  _Blob content co
1b8d0 6e 74 61 69 6e 65 64 20 69 6e 20 72 65 67 69 73  ntained in regis
1b8e0 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 20  ter P2..**.** A 
1b8f0 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 72 65  pseudo-table cre
1b900 61 74 65 64 20 62 79 20 74 68 69 73 20 6f 70 63  ated by this opc
1b910 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f 20 68  ode is used to h
1b920 6f 6c 64 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20  old a single.** 
1b930 72 6f 77 20 6f 75 74 70 75 74 20 66 72 6f 6d 20  row output from 
1b940 74 68 65 20 73 6f 72 74 65 72 20 73 6f 20 74 68  the sorter so th
1b950 61 74 20 74 68 65 20 72 6f 77 20 63 61 6e 20 62  at the row can b
1b960 65 20 64 65 63 6f 6d 70 6f 73 65 64 20 69 6e 74  e decomposed int
1b970 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c 20  o.** individual 
1b980 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20 74 68  columns using th
1b990 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f  e OP_Column opco
1b9a0 64 65 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75  de.  The OP_Colu
1b9b0 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20  mn opcode.** is 
1b9c0 74 68 65 20 6f 6e 6c 79 20 63 75 72 73 6f 72 20  the only cursor 
1b9d0 6f 70 63 6f 64 65 20 74 68 61 74 20 77 6f 72 6b  opcode that work
1b9e0 73 20 77 69 74 68 20 61 20 70 73 65 75 64 6f 2d  s with a pseudo-
1b9f0 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 33 20  table..**.** P3 
1ba00 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
1ba10 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72   fields in the r
1ba20 65 63 6f 72 64 73 20 74 68 61 74 20 77 69 6c 6c  ecords that will
1ba30 20 62 65 20 73 74 6f 72 65 64 20 62 79 0a 2a 2a   be stored by.**
1ba40 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62 6c   the pseudo-tabl
1ba50 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70  e..*/.case OP_Op
1ba60 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20 56 64  enPseudo: {.  Vd
1ba70 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a  beCursor *pCx;..
1ba80 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1ba90 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  1>=0 );.  assert
1baa0 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 29 3b 0a  ( pOp->p3>=0 );.
1bab0 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65    pCx = allocate
1bac0 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
1bad0 31 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c 20  1, pOp->p3, -1, 
1bae0 30 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30  0);.  if( pCx==0
1baf0 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
1bb00 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d    pCx->nullRow =
1bb10 20 31 3b 0a 20 20 70 43 78 2d 3e 70 73 65 75 64   1;.  pCx->pseud
1bb20 6f 54 61 62 6c 65 52 65 67 20 3d 20 70 4f 70 2d  oTableReg = pOp-
1bb30 3e 70 32 3b 0a 20 20 70 43 78 2d 3e 69 73 54 61  >p2;.  pCx->isTa
1bb40 62 6c 65 20 3d 20 31 3b 0a 20 20 61 73 73 65 72  ble = 1;.  asser
1bb50 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b  t( pOp->p5==0 );
1bb60 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1bb70 4f 70 63 6f 64 65 3a 20 43 6c 6f 73 65 20 50 31  Opcode: Close P1
1bb80 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43   * * * *.**.** C
1bb90 6c 6f 73 65 20 61 20 63 75 72 73 6f 72 20 70 72  lose a cursor pr
1bba0 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20  eviously opened 
1bbb0 61 73 20 50 31 2e 20 20 49 66 20 50 31 20 69 73  as P1.  If P1 is
1bbc0 20 6e 6f 74 0a 2a 2a 20 63 75 72 72 65 6e 74 6c   not.** currentl
1bbd0 79 20 6f 70 65 6e 2c 20 74 68 69 73 20 69 6e 73  y open, this ins
1bbe0 74 72 75 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f  truction is a no
1bbf0 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  -op..*/.case OP_
1bc00 43 6c 6f 73 65 3a 20 7b 0a 20 20 61 73 73 65 72  Close: {.  asser
1bc10 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
1bc20 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
1bc30 73 6f 72 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  sor );.  sqlite3
1bc40 56 64 62 65 46 72 65 65 43 75 72 73 6f 72 28 70  VdbeFreeCursor(p
1bc50 2c 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  , p->apCsr[pOp->
1bc60 70 31 5d 29 3b 0a 20 20 70 2d 3e 61 70 43 73 72  p1]);.  p->apCsr
1bc70 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b 0a 20  [pOp->p1] = 0;. 
1bc80 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1bc90 63 6f 64 65 3a 20 53 65 65 6b 47 65 20 50 31 20  code: SeekGe P1 
1bca0 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
1bcb0 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
1bcc0 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  @P4].**.** If cu
1bcd0 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
1bce0 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
1bcf0 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
1bd00 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
1bd10 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75  .** use the valu
1bd20 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
1bd30 20 61 73 20 74 68 65 20 6b 65 79 2e 20 20 49 66   as the key.  If
1bd40 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1bd50 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20  s .** to an SQL 
1bd60 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69  index, then P3 i
1bd70 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61  s the first in a
1bd80 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65  n array of P4 re
1bd90 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74  gisters .** that
1bda0 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20   are used as an 
1bdb0 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
1bdc0 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73  ey. .**.** Repos
1bdd0 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20  ition cursor P1 
1bde0 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e  so that  it poin
1bdf0 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65  ts to the smalle
1be00 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  st entry that .*
1be10 2a 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  * is greater tha
1be20 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
1be30 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20  e key value. If 
1be40 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63  there are no rec
1be50 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61 74 65 72  ords .** greater
1be60 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
1be70 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32  o the key and P2
1be80 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
1be90 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
1bea0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
1beb0 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
1bec0 44 69 73 74 69 6e 63 74 2c 20 53 65 65 6b 4c 74  Distinct, SeekLt
1bed0 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 4c 65  , SeekGt, SeekLe
1bee0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
1bef0 65 65 6b 47 74 20 50 31 20 50 32 20 50 33 20 50  eekGt P1 P2 P3 P
1bf00 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
1bf10 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
1bf20 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31  .** If cursor P1
1bf30 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51   refers to an SQ
1bf40 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20  L table (B-Tree 
1bf50 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65  that uses intege
1bf60 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65  r keys), .** use
1bf70 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
1bf80 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b  gister P3 as a k
1bf90 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31  ey. If cursor P1
1bfa0 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61   refers .** to a
1bfb0 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65  n SQL index, the
1bfc0 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  n P3 is the firs
1bfd0 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  t in an array of
1bfe0 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a   P4 registers .*
1bff0 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  * that are used 
1c000 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  as an unpacked i
1c010 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a  ndex key. .**.**
1c020 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73   Reposition curs
1c030 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69  or P1 so that  i
1c040 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
1c050 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74  smallest entry t
1c060 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74  hat .** is great
1c070 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20  er than the key 
1c080 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20  value. If there 
1c090 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 67  are no records g
1c0a0 72 65 61 74 65 72 20 74 68 61 6e 20 0a 2a 2a 20  reater than .** 
1c0b0 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69  the key and P2 i
1c0c0 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
1c0d0 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
1c0e0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
1c0f0 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 44 69  nd, NotFound, Di
1c100 73 74 69 6e 63 74 2c 20 53 65 65 6b 4c 74 2c 20  stinct, SeekLt, 
1c110 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a  SeekGe, SeekLe.*
1c120 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65  /./* Opcode: See
1c130 6b 4c 74 20 50 31 20 50 32 20 50 33 20 50 34 20  kLt P1 P2 P3 P4 
1c140 2a 20 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  * .** Synopsis: 
1c150 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
1c160 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  ** If cursor P1 
1c170 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c  refers to an SQL
1c180 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74   table (B-Tree t
1c190 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72  hat uses integer
1c1a0 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20   keys), .** use 
1c1b0 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
1c1c0 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65  ister P3 as a ke
1c1d0 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  y. If cursor P1 
1c1e0 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e  refers .** to an
1c1f0 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e   SQL index, then
1c200 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
1c210 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20   in an array of 
1c220 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a  P4 registers .**
1c230 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
1c240 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  s an unpacked in
1c250 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20  dex key. .**.** 
1c260 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f  Reposition curso
1c270 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74  r P1 so that  it
1c280 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c   points to the l
1c290 61 72 67 65 73 74 20 65 6e 74 72 79 20 74 68 61  argest entry tha
1c2a0 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68  t .** is less th
1c2b0 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  an the key value
1c2c0 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e  . If there are n
1c2d0 6f 20 72 65 63 6f 72 64 73 20 6c 65 73 73 20 74  o records less t
1c2e0 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20  han .** the key 
1c2f0 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65  and P2 is not ze
1c300 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  ro, then jump to
1c310 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61   P2..**.** See a
1c320 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
1c330 6f 75 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20  ound, Distinct, 
1c340 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20  SeekGt, SeekGe, 
1c350 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63  SeekLe.*/./* Opc
1c360 6f 64 65 3a 20 53 65 65 6b 4c 65 20 50 31 20 50  ode: SeekLe P1 P
1c370 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
1c380 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
1c390 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72  P4].**.** If cur
1c3a0 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f  sor P1 refers to
1c3b0 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42   an SQL table (B
1c3c0 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20  -Tree that uses 
1c3d0 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a  integer keys), .
1c3e0 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65  ** use the value
1c3f0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
1c400 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72  as a key. If cur
1c410 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a  sor P1 refers .*
1c420 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65  * to an SQL inde
1c430 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68  x, then P3 is th
1c440 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72  e first in an ar
1c450 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74  ray of P4 regist
1c460 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65  ers .** that are
1c470 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61   used as an unpa
1c480 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
1c490 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f  .**.** Repositio
1c4a0 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  n cursor P1 so t
1c4b0 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  hat it points to
1c4c0 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74   the largest ent
1c4d0 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c  ry that .** is l
1c4e0 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ess than or equa
1c4f0 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c  l to the key val
1c500 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65  ue. If there are
1c510 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20   no records .** 
1c520 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75  less than or equ
1c530 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e  al to the key an
1c540 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f  d P2 is not zero
1c550 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
1c560 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  2..**.** See als
1c570 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
1c580 6e 64 2c 20 44 69 73 74 69 6e 63 74 2c 20 53 65  nd, Distinct, Se
1c590 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65  ekGt, SeekGe, Se
1c5a0 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ekLt.*/.case OP_
1c5b0 53 65 65 6b 4c 54 3a 20 20 20 20 20 20 20 20 20  SeekLT:         
1c5c0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1c5d0 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 45 3a 20  case OP_SeekLE: 
1c5e0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
1c5f0 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
1c600 53 65 65 6b 47 45 3a 20 20 20 20 20 20 20 20 20  SeekGE:         
1c610 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1c620 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 54 3a 20  case OP_SeekGT: 
1c630 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c  {       /* jump,
1c640 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65   in3 */.  int re
1c650 73 3b 0a 20 20 69 6e 74 20 6f 63 3b 0a 20 20 56  s;.  int oc;.  V
1c660 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
1c670 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
1c680 72 3b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b  r;.  int nField;
1c690 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20 20  .  i64 iKey;    
1c6a0 20 20 2f 2a 20 54 68 65 20 72 6f 77 69 64 20 77    /* The rowid w
1c6b0 65 20 61 72 65 20 74 6f 20 73 65 65 6b 20 74 6f  e are to seek to
1c6c0 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70   */..  assert( p
1c6d0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1c6e0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1c6f0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1c700 2d 3e 70 32 21 3d 30 20 29 3b 0a 20 20 70 43 20  ->p2!=0 );.  pC 
1c710 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1c720 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
1c730 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
1c740 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  ( pC->pseudoTabl
1c750 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73  eReg==0 );.  ass
1c760 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45 20 3d  ert( OP_SeekLE =
1c770 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 31 20 29 3b  = OP_SeekLT+1 );
1c780 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65  .  assert( OP_Se
1c790 65 6b 47 45 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c  ekGE == OP_SeekL
1c7a0 54 2b 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28  T+2 );.  assert(
1c7b0 20 4f 50 5f 53 65 65 6b 47 54 20 3d 3d 20 4f 50   OP_SeekGT == OP
1c7c0 5f 53 65 65 6b 4c 54 2b 33 20 29 3b 0a 20 20 61  _SeekLT+3 );.  a
1c7d0 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72 64  ssert( pC->isOrd
1c7e0 65 72 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74  ered );.  assert
1c7f0 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
1c800 20 29 3b 0a 20 20 6f 63 20 3d 20 70 4f 70 2d 3e   );.  oc = pOp->
1c810 6f 70 63 6f 64 65 3b 0a 20 20 70 43 2d 3e 6e 75  opcode;.  pC->nu
1c820 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 69 66 28  llRow = 0;.  if(
1c830 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a   pC->isTable ){.
1c840 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 70 75 74      /* The input
1c850 20 76 61 6c 75 65 20 69 6e 20 50 33 20 6d 69 67   value in P3 mig
1c860 68 74 20 62 65 20 6f 66 20 61 6e 79 20 74 79 70  ht be of any typ
1c870 65 3a 20 69 6e 74 65 67 65 72 2c 20 72 65 61 6c  e: integer, real
1c880 2c 20 73 74 72 69 6e 67 2c 0a 20 20 20 20 2a 2a  , string,.    **
1c890 20 62 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c 2e 20   blob, or NULL. 
1c8a0 20 42 75 74 20 69 74 20 6e 65 65 64 73 20 74 6f   But it needs to
1c8b0 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 20 62   be an integer b
1c8c0 65 66 6f 72 65 20 77 65 20 63 61 6e 20 64 6f 0a  efore we can do.
1c8d0 20 20 20 20 2a 2a 20 74 68 65 20 73 65 65 6b 2c      ** the seek,
1c8e0 20 73 6f 20 63 6f 76 65 72 74 20 69 74 2e 20 2a   so covert it. *
1c8f0 2f 0a 20 20 20 20 70 49 6e 33 20 3d 20 26 61 4d  /.    pIn3 = &aM
1c900 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
1c910 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66   applyNumericAff
1c920 69 6e 69 74 79 28 70 49 6e 33 29 3b 0a 20 20 20  inity(pIn3);.   
1c930 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56   iKey = sqlite3V
1c940 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 33  dbeIntValue(pIn3
1c950 29 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64  );.    pC->rowid
1c960 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 0a 20 20  IsValid = 0;..  
1c970 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76    /* If the P3 v
1c980 61 6c 75 65 20 63 6f 75 6c 64 20 6e 6f 74 20 62  alue could not b
1c990 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  e converted into
1c9a0 20 61 6e 20 69 6e 74 65 67 65 72 20 77 69 74 68   an integer with
1c9b0 6f 75 74 0a 20 20 20 20 2a 2a 20 6c 6f 73 73 20  out.    ** loss 
1c9c0 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20  of information, 
1c9d0 74 68 65 6e 20 73 70 65 63 69 61 6c 20 70 72 6f  then special pro
1c9e0 63 65 73 73 69 6e 67 20 69 73 20 72 65 71 75 69  cessing is requi
1c9f0 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20 69 66  red... */.    if
1ca00 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
1ca10 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a   MEM_Int)==0 ){.
1ca20 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d        if( (pIn3-
1ca30 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61  >flags & MEM_Rea
1ca40 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  l)==0 ){.       
1ca50 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76 61   /* If the P3 va
1ca60 6c 75 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f  lue cannot be co
1ca70 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 79  nverted into any
1ca80 20 6b 69 6e 64 20 6f 66 20 61 20 6e 75 6d 62 65   kind of a numbe
1ca90 72 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68  r,.        ** th
1caa0 65 6e 20 74 68 65 20 73 65 65 6b 20 69 73 20 6e  en the seek is n
1cab0 6f 74 20 70 6f 73 73 69 62 6c 65 2c 20 73 6f 20  ot possible, so 
1cac0 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20  jump to P2 */.  
1cad0 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
1cae0 70 32 20 2d 20 31 3b 20 20 56 64 62 65 42 72 61  p2 - 1;  VdbeBra
1caf0 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a 20  nchTaken(1,2);. 
1cb00 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
1cb10 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20      }..      /* 
1cb20 49 66 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61  If the approxima
1cb30 74 69 6f 6e 20 69 4b 65 79 20 69 73 20 6c 61 72  tion iKey is lar
1cb40 67 65 72 20 74 68 61 6e 20 74 68 65 20 61 63 74  ger than the act
1cb50 75 61 6c 20 72 65 61 6c 20 73 65 61 72 63 68 0a  ual real search.
1cb60 20 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73        ** term, s
1cb70 75 62 73 74 69 74 75 74 65 20 3e 3d 20 66 6f 72  ubstitute >= for
1cb80 20 3e 20 61 6e 64 20 3c 20 66 6f 72 20 3c 3d 2e   > and < for <=.
1cb90 20 65 2e 67 2e 20 69 66 20 74 68 65 20 73 65 61   e.g. if the sea
1cba0 72 63 68 20 74 65 72 6d 0a 20 20 20 20 20 20 2a  rch term.      *
1cbb0 2a 20 69 73 20 34 2e 39 20 61 6e 64 20 74 68 65  * is 4.9 and the
1cbc0 20 69 6e 74 65 67 65 72 20 61 70 70 72 6f 78 69   integer approxi
1cbd0 6d 61 74 69 6f 6e 20 35 3a 0a 20 20 20 20 20 20  mation 5:.      
1cbe0 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20  **.      **     
1cbf0 20 20 20 28 78 20 3e 20 20 34 2e 39 29 20 20 20     (x >  4.9)   
1cc00 20 2d 3e 20 20 20 20 20 28 78 20 3e 3d 20 35 29   ->     (x >= 5)
1cc10 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20  .      **       
1cc20 20 28 78 20 3c 3d 20 34 2e 39 29 20 20 20 20 2d   (x <= 4.9)    -
1cc30 3e 20 20 20 20 20 28 78 20 3c 20 20 35 29 0a 20  >     (x <  5). 
1cc40 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66       */.      if
1cc50 28 20 70 49 6e 33 2d 3e 72 3c 28 64 6f 75 62 6c  ( pIn3->r<(doubl
1cc60 65 29 69 4b 65 79 20 29 7b 0a 20 20 20 20 20 20  e)iKey ){.      
1cc70 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
1cc80 6b 47 45 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 2d  kGE==(OP_SeekGT-
1cc90 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  1) );.        as
1cca0 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 54 3d  sert( OP_SeekLT=
1ccb0 3d 28 4f 50 5f 53 65 65 6b 4c 45 2d 31 29 20 29  =(OP_SeekLE-1) )
1ccc0 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
1ccd0 28 20 28 4f 50 5f 53 65 65 6b 4c 45 20 26 20 30  ( (OP_SeekLE & 0
1cce0 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b  x0001)==(OP_Seek
1ccf0 47 54 20 26 20 30 78 30 30 30 31 29 20 29 3b 0a  GT & 0x0001) );.
1cd00 20 20 20 20 20 20 20 20 69 66 28 20 28 6f 63 20          if( (oc 
1cd10 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53  & 0x0001)==(OP_S
1cd20 65 65 6b 47 54 20 26 20 30 78 30 30 30 31 29 20  eekGT & 0x0001) 
1cd30 29 20 6f 63 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a  ) oc--;.      }.
1cd40 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65  .      /* If the
1cd50 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69   approximation i
1cd60 4b 65 79 20 69 73 20 73 6d 61 6c 6c 65 72 20 74  Key is smaller t
1cd70 68 61 6e 20 74 68 65 20 61 63 74 75 61 6c 20 72  han the actual r
1cd80 65 61 6c 20 73 65 61 72 63 68 0a 20 20 20 20 20  eal search.     
1cd90 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73 74 69   ** term, substi
1cda0 74 75 74 65 20 3c 3d 20 66 6f 72 20 3c 20 61 6e  tute <= for < an
1cdb0 64 20 3e 20 66 6f 72 20 3e 3d 2e 20 20 2a 2f 0a  d > for >=.  */.
1cdc0 20 20 20 20 20 20 65 6c 73 65 20 69 66 28 20 70        else if( p
1cdd0 49 6e 33 2d 3e 72 3e 28 64 6f 75 62 6c 65 29 69  In3->r>(double)i
1cde0 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20 61  Key ){.        a
1cdf0 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45  ssert( OP_SeekLE
1ce00 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 2b 31 29 20  ==(OP_SeekLT+1) 
1ce10 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
1ce20 74 28 20 4f 50 5f 53 65 65 6b 47 54 3d 3d 28 4f  t( OP_SeekGT==(O
1ce30 50 5f 53 65 65 6b 47 45 2b 31 29 20 29 3b 0a 20  P_SeekGE+1) );. 
1ce40 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28         assert( (
1ce50 4f 50 5f 53 65 65 6b 4c 54 20 26 20 30 78 30 30  OP_SeekLT & 0x00
1ce60 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 20  01)==(OP_SeekGE 
1ce70 26 20 30 78 30 30 30 31 29 20 29 3b 0a 20 20 20  & 0x0001) );.   
1ce80 20 20 20 20 20 69 66 28 20 28 6f 63 20 26 20 30       if( (oc & 0
1ce90 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b  x0001)==(OP_Seek
1cea0 4c 54 20 26 20 30 78 30 30 30 31 29 20 29 20 6f  LT & 0x0001) ) o
1ceb0 63 2b 2b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  c++;.      }.   
1cec0 20 7d 20 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   } .    rc = sql
1ced0 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
1cee0 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72  npacked(pC->pCur
1cef0 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 69 4b 65  sor, 0, (u64)iKe
1cf00 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20  y, 0, &res);.   
1cf10 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1cf20 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  OK ){.      goto
1cf30 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1cf40 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  ror;.    }.    i
1cf50 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20  f( res==0 ){.   
1cf60 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61     pC->rowidIsVa
1cf70 6c 69 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 70  lid = 1;.      p
1cf80 43 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 69  C->lastRowid = i
1cf90 4b 65 79 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  Key;.    }.  }el
1cfa0 73 65 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d  se{.    nField =
1cfb0 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20   pOp->p4.i;.    
1cfc0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
1cfd0 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
1cfe0 0a 20 20 20 20 61 73 73 65 72 74 28 20 6e 46 69  .    assert( nFi
1cff0 65 6c 64 3e 30 20 29 3b 0a 20 20 20 20 72 2e 70  eld>0 );.    r.p
1d000 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b  KeyInfo = pC->pK
1d010 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46  eyInfo;.    r.nF
1d020 69 65 6c 64 20 3d 20 28 75 31 36 29 6e 46 69 65  ield = (u16)nFie
1d030 6c 64 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20  ld;..    /* The 
1d040 6e 65 78 74 20 6c 69 6e 65 20 6f 66 20 63 6f 64  next line of cod
1d050 65 20 63 6f 6d 70 75 74 65 73 20 61 73 20 66 6f  e computes as fo
1d060 6c 6c 6f 77 73 2c 20 6f 6e 6c 79 20 66 61 73 74  llows, only fast
1d070 65 72 3a 0a 20 20 20 20 2a 2a 20 20 20 69 66 28  er:.    **   if(
1d080 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 7c   oc==OP_SeekGT |
1d090 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20  | oc==OP_SeekLE 
1d0a0 29 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20 72 2e  ){.    **     r.
1d0b0 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b  default_rc = -1;
1d0c0 0a 20 20 20 20 2a 2a 20 20 20 7d 65 6c 73 65 7b  .    **   }else{
1d0d0 0a 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 64 65  .    **     r.de
1d0e0 66 61 75 6c 74 5f 72 63 20 3d 20 2b 31 3b 0a 20  fault_rc = +1;. 
1d0f0 20 20 20 2a 2a 20 20 20 7d 0a 20 20 20 20 2a 2f     **   }.    */
1d100 0a 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72  .    r.default_r
1d110 63 20 3d 20 28 28 31 20 26 20 28 6f 63 20 2d 20  c = ((1 & (oc - 
1d120 4f 50 5f 53 65 65 6b 4c 54 29 29 20 3f 20 2d 31  OP_SeekLT)) ? -1
1d130 20 3a 20 2b 31 29 3b 0a 20 20 20 20 61 73 73 65   : +1);.    asse
1d140 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47  rt( oc!=OP_SeekG
1d150 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72  T || r.default_r
1d160 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73 73  c==-1 );.    ass
1d170 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b  ert( oc!=OP_Seek
1d180 4c 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f  LE || r.default_
1d190 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73  rc==-1 );.    as
1d1a0 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65  sert( oc!=OP_See
1d1b0 6b 47 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74  kGE || r.default
1d1c0 5f 72 63 3d 3d 2b 31 20 29 3b 0a 20 20 20 20 61  _rc==+1 );.    a
1d1d0 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65  ssert( oc!=OP_Se
1d1e0 65 6b 4c 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c  ekLT || r.defaul
1d1f0 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 0a 20 20 20  t_rc==+1 );..   
1d200 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b   r.aMem = &aMem[
1d210 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66  pOp->p3];.#ifdef
1d220 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
1d230 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69    { int i; for(i
1d240 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20  =0; i<r.nField; 
1d250 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d  i++) assert( mem
1d260 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b  IsValid(&r.aMem[
1d270 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a  i]) ); }.#endif.
1d280 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 72      ExpandBlob(r
1d290 2e 61 4d 65 6d 29 3b 0a 20 20 20 20 72 63 20 3d  .aMem);.    rc =
1d2a0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
1d2b0 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e  etoUnpacked(pC->
1d2c0 70 43 75 72 73 6f 72 2c 20 26 72 2c 20 30 2c 20  pCursor, &r, 0, 
1d2d0 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66  0, &res);.    if
1d2e0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
1d2f0 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  ){.      goto ab
1d300 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1d310 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e  ;.    }.    pC->
1d320 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
1d330 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 64 65 66 65  ;.  }.  pC->defe
1d340 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
1d350 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
1d360 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
1d370 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
1d380 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73 65  EST.  sqlite3_se
1d390 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65  arch_count++;.#e
1d3a0 6e 64 69 66 0a 20 20 69 66 28 20 6f 63 3e 3d 4f  ndif.  if( oc>=O
1d3b0 50 5f 53 65 65 6b 47 45 20 29 7b 20 20 61 73 73  P_SeekGE ){  ass
1d3c0 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  ert( oc==OP_Seek
1d3d0 47 45 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65  GE || oc==OP_See
1d3e0 6b 47 54 20 29 3b 0a 20 20 20 20 69 66 28 20 72  kGT );.    if( r
1d3f0 65 73 3c 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20  es<0 || (res==0 
1d400 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54  && oc==OP_SeekGT
1d410 29 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d  ) ){.      res =
1d420 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   0;.      rc = s
1d430 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 28  qlite3BtreeNext(
1d440 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65  pC->pCursor, &re
1d450 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  s);.      if( rc
1d460 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f  !=SQLITE_OK ) go
1d470 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1d480 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 70 43 2d  error;.      pC-
1d490 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
1d4a0 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  0;.    }else{.  
1d4b0 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20      res = 0;.   
1d4c0 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
1d4d0 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53  assert( oc==OP_S
1d4e0 65 65 6b 4c 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f  eekLT || oc==OP_
1d4f0 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20 69 66  SeekLE );.    if
1d500 28 20 72 65 73 3e 30 20 7c 7c 20 28 72 65 73 3d  ( res>0 || (res=
1d510 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65  =0 && oc==OP_See
1d520 6b 4c 54 29 20 29 7b 0a 20 20 20 20 20 20 72 65  kLT) ){.      re
1d530 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20  s = 0;.      rc 
1d540 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72  = sqlite3BtreePr
1d550 65 76 69 6f 75 73 28 70 43 2d 3e 70 43 75 72 73  evious(pC->pCurs
1d560 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20  or, &res);.     
1d570 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1d580 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
1d590 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1d5a0 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56      pC->rowidIsV
1d5b0 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 7d 65  alid = 0;.    }e
1d5c0 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 72 65  lse{.      /* re
1d5d0 73 20 6d 69 67 68 74 20 62 65 20 6e 65 67 61 74  s might be negat
1d5e0 69 76 65 20 62 65 63 61 75 73 65 20 74 68 65 20  ive because the 
1d5f0 74 61 62 6c 65 20 69 73 20 65 6d 70 74 79 2e 20  table is empty. 
1d600 20 43 68 65 63 6b 20 74 6f 0a 20 20 20 20 20 20   Check to.      
1d610 2a 2a 20 73 65 65 20 69 66 20 74 68 69 73 20 69  ** see if this i
1d620 73 20 74 68 65 20 63 61 73 65 2e 0a 20 20 20 20  s the case..    
1d630 20 20 2a 2f 0a 20 20 20 20 20 20 72 65 73 20 3d    */.      res =
1d640 20 73 71 6c 69 74 65 33 42 74 72 65 65 45 6f 66   sqlite3BtreeEof
1d650 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20  (pC->pCursor);. 
1d660 20 20 20 7d 0a 20 20 7d 0a 20 20 61 73 73 65 72     }.  }.  asser
1d670 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a  t( pOp->p2>0 );.
1d680 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
1d690 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69  n(res!=0,2);.  i
1d6a0 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63  f( res ){.    pc
1d6b0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
1d6c0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
1d6d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 20  /* Opcode: Seek 
1d6e0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
1d6f0 79 6e 6f 70 73 69 73 3a 20 20 69 6e 74 6b 65 79  ynopsis:  intkey
1d700 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 50 31 20  =r[P2].**.** P1 
1d710 69 73 20 61 6e 20 6f 70 65 6e 20 74 61 62 6c 65  is an open table
1d720 20 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69   cursor and P2 i
1d730 73 20 61 20 72 6f 77 69 64 20 69 6e 74 65 67 65  s a rowid intege
1d740 72 2e 20 20 41 72 72 61 6e 67 65 0a 2a 2a 20 66  r.  Arrange.** f
1d750 6f 72 20 50 31 20 74 6f 20 6d 6f 76 65 20 73 6f  or P1 to move so
1d760 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20   that it points 
1d770 74 6f 20 74 68 65 20 72 6f 77 69 64 20 67 69 76  to the rowid giv
1d780 65 6e 20 62 79 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  en by P2..**.** 
1d790 54 68 69 73 20 69 73 20 61 63 74 75 61 6c 6c 79  This is actually
1d7a0 20 61 20 64 65 66 65 72 72 65 64 20 73 65 65 6b   a deferred seek
1d7b0 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63 74 75 61  .  Nothing actua
1d7c0 6c 6c 79 20 68 61 70 70 65 6e 73 20 75 6e 74 69  lly happens unti
1d7d0 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 20  l.** the cursor 
1d7e0 69 73 20 75 73 65 64 20 74 6f 20 72 65 61 64 20  is used to read 
1d7f0 61 20 72 65 63 6f 72 64 2e 20 20 54 68 61 74 20  a record.  That 
1d800 77 61 79 2c 20 69 66 20 6e 6f 20 72 65 61 64 73  way, if no reads
1d810 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75 6e  .** occur, no un
1d820 6e 65 63 65 73 73 61 72 79 20 49 2f 4f 20 68 61  necessary I/O ha
1d830 70 70 65 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ppens..*/.case O
1d840 50 5f 53 65 65 6b 3a 20 7b 20 20 20 20 2f 2a 20  P_Seek: {    /* 
1d850 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  in2 */.  VdbeCur
1d860 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65  sor *pC;..  asse
1d870 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1d880 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1d890 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
1d8a0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1d8b0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
1d8c0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1d8d0 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  C->pCursor!=0 );
1d8e0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
1d8f0 73 54 61 62 6c 65 20 29 3b 0a 20 20 70 43 2d 3e  sTable );.  pC->
1d900 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 70  nullRow = 0;.  p
1d910 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
1d920 3e 70 32 5d 3b 0a 20 20 70 43 2d 3e 6d 6f 76 65  >p2];.  pC->move
1d930 74 6f 54 61 72 67 65 74 20 3d 20 73 71 6c 69 74  toTarget = sqlit
1d940 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
1d950 49 6e 32 29 3b 0a 20 20 70 43 2d 3e 72 6f 77 69  In2);.  pC->rowi
1d960 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20  dIsValid = 0;.  
1d970 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
1d980 74 6f 20 3d 20 31 3b 0a 20 20 62 72 65 61 6b 3b  to = 1;.  break;
1d990 0a 7d 0a 20 20 0a 0a 2f 2a 20 4f 70 63 6f 64 65  .}.  ../* Opcode
1d9a0 3a 20 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33  : Found P1 P2 P3
1d9b0 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
1d9c0 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
1d9d0 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74  **.** If P4==0 t
1d9e0 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
1d9f0 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e  holds a blob con
1da00 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65  structed by Make
1da10 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50  Record.  If.** P
1da20 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  4>0 then registe
1da30 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  r P3 is the firs
1da40 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  t of P4 register
1da50 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75  s that form an u
1da60 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72  npacked.** recor
1da70 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20  d..**.** Cursor 
1da80 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65  P1 is on an inde
1da90 78 20 62 74 72 65 65 2e 20 20 49 66 20 74 68 65  x btree.  If the
1daa0 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69   record identifi
1dab0 65 64 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a  ed by P3 and P4.
1dac0 2a 2a 20 69 73 20 61 20 70 72 65 66 69 78 20 6f  ** is a prefix o
1dad0 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50  f any entry in P
1dae0 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69 73  1 then a jump is
1daf0 20 6d 61 64 65 20 74 6f 20 50 32 20 61 6e 64 0a   made to P2 and.
1db00 2a 2a 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f  ** P1 is left po
1db10 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6d 61  inting at the ma
1db20 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a  tching entry..**
1db30 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f  .** See also: No
1db40 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69  tFound, NoConfli
1db50 63 74 2c 20 4e 6f 74 45 78 69 73 74 73 2e 20 53  ct, NotExists. S
1db60 65 65 6b 47 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  eekGe.*/./* Opco
1db70 64 65 3a 20 4e 6f 74 46 6f 75 6e 64 20 50 31 20  de: NotFound P1 
1db80 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
1db90 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
1dba0 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  @P4].**.** If P4
1dbb0 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  ==0 then registe
1dbc0 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f  r P3 holds a blo
1dbd0 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  b constructed by
1dbe0 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66   MakeRecord.  If
1dbf0 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65  .** P4>0 then re
1dc00 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65  gister P3 is the
1dc10 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67   first of P4 reg
1dc20 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d  isters that form
1dc30 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20   an unpacked.** 
1dc40 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43  record..** .** C
1dc50 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61  ursor P1 is on a
1dc60 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20  n index btree.  
1dc70 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64  If the record id
1dc80 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61  entified by P3 a
1dc90 6e 64 20 50 34 0a 2a 2a 20 69 73 20 6e 6f 74 20  nd P4.** is not 
1dca0 74 68 65 20 70 72 65 66 69 78 20 6f 66 20 61 6e  the prefix of an
1dcb0 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68  y entry in P1 th
1dcc0 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64  en a jump is mad
1dcd0 65 20 74 6f 20 50 32 2e 20 20 49 66 20 50 31 20  e to P2.  If P1 
1dce0 0a 2a 2a 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e  .** does contain
1dcf0 20 61 6e 20 65 6e 74 72 79 20 77 68 6f 73 65 20   an entry whose 
1dd00 70 72 65 66 69 78 20 6d 61 74 63 68 65 73 20 74  prefix matches t
1dd10 68 65 20 50 33 2f 50 34 20 72 65 63 6f 72 64 20  he P3/P4 record 
1dd20 74 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20  then control.** 
1dd30 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 20 74 6f  falls through to
1dd40 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
1dd50 63 74 69 6f 6e 20 61 6e 64 20 50 31 20 69 73 20  ction and P1 is 
1dd60 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74  left pointing at
1dd70 20 74 68 65 0a 2a 2a 20 6d 61 74 63 68 69 6e 67   the.** matching
1dd80 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 53 65   entry..**.** Se
1dd90 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
1dda0 6f 74 45 78 69 73 74 73 2c 20 4e 6f 43 6f 6e 66  otExists, NoConf
1ddb0 6c 69 63 74 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  lict.*/./* Opcod
1ddc0 65 3a 20 4e 6f 43 6f 6e 66 6c 69 63 74 20 50 31  e: NoConflict P1
1ddd0 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
1dde0 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
1ddf0 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50  3@P4].**.** If P
1de00 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74  4==0 then regist
1de10 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c  er P3 holds a bl
1de20 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ob constructed b
1de30 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49  y MakeRecord.  I
1de40 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72  f.** P4>0 then r
1de50 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68  egister P3 is th
1de60 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65  e first of P4 re
1de70 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72  gisters that for
1de80 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a  m an unpacked.**
1de90 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20   record..** .** 
1dea0 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20  Cursor P1 is on 
1deb0 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20  an index btree. 
1dec0 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69   If the record i
1ded0 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20  dentified by P3 
1dee0 61 6e 64 20 50 34 0a 2a 2a 20 63 6f 6e 74 61 69  and P4.** contai
1def0 6e 73 20 61 6e 79 20 4e 55 4c 4c 20 76 61 6c 75  ns any NULL valu
1df00 65 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  e, jump immediat
1df10 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20 61  ely to P2.  If a
1df20 6c 6c 20 74 65 72 6d 73 20 6f 66 20 74 68 65 0a  ll terms of the.
1df30 2a 2a 20 72 65 63 6f 72 64 20 61 72 65 20 6e 6f  ** record are no
1df40 74 2d 4e 55 4c 4c 20 74 68 65 6e 20 61 20 63 68  t-NULL then a ch
1df50 65 63 6b 20 69 73 20 64 6f 6e 65 20 74 6f 20 64  eck is done to d
1df60 65 74 65 72 6d 69 6e 65 20 69 66 20 61 6e 79 20  etermine if any 
1df70 72 6f 77 20 69 6e 20 74 68 65 0a 2a 2a 20 50 31  row in the.** P1
1df80 20 69 6e 64 65 78 20 62 74 72 65 65 20 68 61 73   index btree has
1df90 20 61 20 6d 61 74 63 68 69 6e 67 20 6b 65 79 20   a matching key 
1dfa0 70 72 65 66 69 78 2e 20 20 49 66 20 74 68 65 72  prefix.  If ther
1dfb0 65 20 61 72 65 20 6e 6f 20 6d 61 74 63 68 65 73  e are no matches
1dfc0 2c 20 6a 75 6d 70 0a 2a 2a 20 69 6d 6d 65 64 69  , jump.** immedi
1dfd0 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66  ately to P2.  If
1dfe0 20 74 68 65 72 65 20 69 73 20 61 20 6d 61 74 63   there is a matc
1dff0 68 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  h, fall through 
1e000 61 6e 64 20 6c 65 61 76 65 20 74 68 65 20 50 31  and leave the P1
1e010 0a 2a 2a 20 63 75 72 73 6f 72 20 70 6f 69 6e 74  .** cursor point
1e020 69 6e 67 20 74 6f 20 74 68 65 20 6d 61 74 63 68  ing to the match
1e030 69 6e 67 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 54  ing row..**.** T
1e040 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 73 69  his opcode is si
1e050 6d 69 6c 61 72 20 74 6f 20 4f 50 5f 4e 6f 74 46  milar to OP_NotF
1e060 6f 75 6e 64 20 77 69 74 68 20 74 68 65 20 65 78  ound with the ex
1e070 63 65 70 74 69 6f 6e 73 20 74 68 61 74 20 74 68  ceptions that th
1e080 65 0a 2a 2a 20 62 72 61 6e 63 68 20 69 73 20 61  e.** branch is a
1e090 6c 77 61 79 73 20 74 61 6b 65 6e 20 69 66 20 61  lways taken if a
1e0a0 6e 79 20 70 61 72 74 20 6f 66 20 74 68 65 20 73  ny part of the s
1e0b0 65 61 72 63 68 20 6b 65 79 20 69 6e 70 75 74 20  earch key input 
1e0c0 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 53  is NULL..**.** S
1e0d0 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e  ee also: NotFoun
1e0e0 64 2c 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69  d, Found, NotExi
1e0f0 73 74 73 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  sts.*/.case OP_N
1e100 6f 43 6f 6e 66 6c 69 63 74 3a 20 20 20 20 20 2f  oConflict:     /
1e110 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
1e120 61 73 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a  ase OP_NotFound:
1e130 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1e140 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46  in3 */.case OP_F
1e150 6f 75 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f  ound: {        /
1e160 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20  * jump, in3 */. 
1e170 20 69 6e 74 20 61 6c 72 65 61 64 79 45 78 69 73   int alreadyExis
1e180 74 73 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 20 20  ts;.  int ii;.  
1e190 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1e1a0 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 63 68 61    int res;.  cha
1e1b0 72 20 2a 70 46 72 65 65 3b 0a 20 20 55 6e 70 61  r *pFree;.  Unpa
1e1c0 63 6b 65 64 52 65 63 6f 72 64 20 2a 70 49 64 78  ckedRecord *pIdx
1e1d0 4b 65 79 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52  Key;.  UnpackedR
1e1e0 65 63 6f 72 64 20 72 3b 0a 20 20 63 68 61 72 20  ecord r;.  char 
1e1f0 61 54 65 6d 70 52 65 63 5b 52 4f 55 4e 44 38 28  aTempRec[ROUND8(
1e200 73 69 7a 65 6f 66 28 55 6e 70 61 63 6b 65 64 52  sizeof(UnpackedR
1e210 65 63 6f 72 64 29 29 20 2b 20 73 69 7a 65 6f 66  ecord)) + sizeof
1e220 28 4d 65 6d 29 2a 34 20 2b 20 37 5d 3b 0a 0a 23  (Mem)*4 + 7];..#
1e230 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
1e240 54 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  T.  if( pOp->opc
1e250 6f 64 65 21 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69  ode!=OP_NoConfli
1e260 63 74 20 29 20 73 71 6c 69 74 65 33 5f 66 6f 75  ct ) sqlite3_fou
1e270 6e 64 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64  nd_count++;.#end
1e280 69 66 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  if..  assert( pO
1e290 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1e2a0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
1e2b0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1e2c0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
1e2d0 32 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  2 );.  pC = p->a
1e2e0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1e2f0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
1e300 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  ;.  pIn3 = &aMem
1e310 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73  [pOp->p3];.  ass
1e320 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72  ert( pC->pCursor
1e330 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
1e340 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20   pC->isTable==0 
1e350 29 3b 0a 20 20 70 46 72 65 65 20 3d 20 30 3b 20  );.  pFree = 0; 
1e360 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20   /* Not needed. 
1e370 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 75   Only used to su
1e380 70 70 72 65 73 73 20 61 20 63 6f 6d 70 69 6c 65  ppress a compile
1e390 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20  r warning. */.  
1e3a0 69 66 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20  if( pOp->p4.i>0 
1e3b0 29 7b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66  ){.    r.pKeyInf
1e3c0 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  o = pC->pKeyInfo
1e3d0 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d  ;.    r.nField =
1e3e0 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b   (u16)pOp->p4.i;
1e3f0 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 70 49  .    r.aMem = pI
1e400 6e 33 3b 0a 20 20 20 20 66 6f 72 28 69 69 3d 30  n3;.    for(ii=0
1e410 3b 20 69 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69  ; ii<r.nField; i
1e420 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73 73 65  i++){.      asse
1e430 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
1e440 72 2e 61 4d 65 6d 5b 69 69 5d 29 20 29 3b 0a 20  r.aMem[ii]) );. 
1e450 20 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28       ExpandBlob(
1e460 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a 23 69  &r.aMem[ii]);.#i
1e470 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
1e480 47 0a 20 20 20 20 20 20 69 66 28 20 69 69 20 29  G.      if( ii )
1e490 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
1e4a0 70 4f 70 2d 3e 70 33 2b 69 69 2c 20 26 72 2e 61  pOp->p3+ii, &r.a
1e4b0 4d 65 6d 5b 69 69 5d 29 3b 0a 23 65 6e 64 69 66  Mem[ii]);.#endif
1e4c0 0a 20 20 20 20 7d 0a 20 20 20 20 70 49 64 78 4b  .    }.    pIdxK
1e4d0 65 79 20 3d 20 26 72 3b 0a 20 20 7d 65 6c 73 65  ey = &r;.  }else
1e4e0 7b 0a 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20  {.    pIdxKey = 
1e4f0 73 71 6c 69 74 65 33 56 64 62 65 41 6c 6c 6f 63  sqlite3VdbeAlloc
1e500 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 28 0a  UnpackedRecord(.
1e510 20 20 20 20 20 20 20 20 70 43 2d 3e 70 4b 65 79          pC->pKey
1e520 49 6e 66 6f 2c 20 61 54 65 6d 70 52 65 63 2c 20  Info, aTempRec, 
1e530 73 69 7a 65 6f 66 28 61 54 65 6d 70 52 65 63 29  sizeof(aTempRec)
1e540 2c 20 26 70 46 72 65 65 0a 20 20 20 20 29 3b 20  , &pFree.    ); 
1e550 0a 20 20 20 20 69 66 28 20 70 49 64 78 4b 65 79  .    if( pIdxKey
1e560 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
1e570 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  m;.    assert( p
1e580 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
1e590 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 61 73 73  _Blob );.    ass
1e5a0 65 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67  ert( (pIn3->flag
1e5b0 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 29 3d 3d 30  s & MEM_Zero)==0
1e5c0 20 29 3b 20 20 2f 2a 20 7a 65 72 6f 62 6c 6f 62   );  /* zeroblob
1e5d0 73 20 61 6c 72 65 61 64 79 20 65 78 70 61 6e 64  s already expand
1e5e0 65 64 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65  ed */.    sqlite
1e5f0 33 56 64 62 65 52 65 63 6f 72 64 55 6e 70 61 63  3VdbeRecordUnpac
1e600 6b 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20  k(pC->pKeyInfo, 
1e610 70 49 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a  pIn3->n, pIn3->z
1e620 2c 20 70 49 64 78 4b 65 79 29 3b 0a 20 20 7d 0a  , pIdxKey);.  }.
1e630 20 20 70 49 64 78 4b 65 79 2d 3e 64 65 66 61 75    pIdxKey->defau
1e640 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 69 66 28  lt_rc = 0;.  if(
1e650 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
1e660 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 29 7b 0a 20  _NoConflict ){. 
1e670 20 20 20 2f 2a 20 46 6f 72 20 74 68 65 20 4f 50     /* For the OP
1e680 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 6f 70 63 6f  _NoConflict opco
1e690 64 65 2c 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  de, take the jum
1e6a0 70 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65 0a  p if any of the.
1e6b0 20 20 20 20 2a 2a 20 69 6e 70 75 74 20 66 69 65      ** input fie
1e6c0 6c 64 73 20 61 72 65 20 4e 55 4c 4c 2c 20 73 69  lds are NULL, si
1e6d0 6e 63 65 20 61 6e 79 20 6b 65 79 20 77 69 74 68  nce any key with
1e6e0 20 61 20 4e 55 4c 4c 20 77 69 6c 6c 20 6e 6f 74   a NULL will not
1e6f0 0a 20 20 20 20 2a 2a 20 63 6f 6e 66 6c 69 63 74  .    ** conflict
1e700 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69 69 3d 30   */.    for(ii=0
1e710 3b 20 69 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69  ; ii<r.nField; i
1e720 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20  i++){.      if( 
1e730 72 2e 61 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67 73  r.aMem[ii].flags
1e740 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
1e750 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d         pc = pOp-
1e760 3e 70 32 20 2d 20 31 3b 20 56 64 62 65 42 72 61  >p2 - 1; VdbeBra
1e770 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a 20  nchTaken(1,2);. 
1e780 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
1e790 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
1e7a0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1e7b0 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
1e7c0 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 70  d(pC->pCursor, p
1e7d0 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72  IdxKey, 0, 0, &r
1e7e0 65 73 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  es);.  if( pOp->
1e7f0 70 34 2e 69 3d 3d 30 20 29 7b 0a 20 20 20 20 73  p4.i==0 ){.    s
1e800 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
1e810 20 70 46 72 65 65 29 3b 0a 20 20 7d 0a 20 20 69   pFree);.  }.  i
1e820 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1e830 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20   ){.    break;. 
1e840 20 7d 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73   }.  pC->seekRes
1e850 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 61 6c 72  ult = res;.  alr
1e860 65 61 64 79 45 78 69 73 74 73 20 3d 20 28 72 65  eadyExists = (re
1e870 73 3d 3d 30 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c  s==0);.  pC->nul
1e880 6c 52 6f 77 20 3d 20 31 2d 61 6c 72 65 61 64 79  lRow = 1-already
1e890 45 78 69 73 74 73 3b 0a 20 20 70 43 2d 3e 64 65  Exists;.  pC->de
1e8a0 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
1e8b0 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
1e8c0 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
1e8d0 45 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  E;.  if( pOp->op
1e8e0 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29  code==OP_Found )
1e8f0 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  {.    VdbeBranch
1e900 54 61 6b 65 6e 28 61 6c 72 65 61 64 79 45 78 69  Taken(alreadyExi
1e910 73 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69  sts!=0,2);.    i
1e920 66 28 20 61 6c 72 65 61 64 79 45 78 69 73 74 73  f( alreadyExists
1e930 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20   ) pc = pOp->p2 
1e940 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  - 1;.  }else{.  
1e950 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
1e960 6e 28 61 6c 72 65 61 64 79 45 78 69 73 74 73 3d  n(alreadyExists=
1e970 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 21  =0,2);.    if( !
1e980 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 29 20  alreadyExists ) 
1e990 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1e9a0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
1e9b0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  ../* Opcode: Not
1e9c0 45 78 69 73 74 73 20 50 31 20 50 32 20 50 33 20  Exists P1 P2 P3 
1e9d0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
1e9e0 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a   intkey=r[P3].**
1e9f0 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e  .** P1 is the in
1ea00 64 65 78 20 6f 66 20 61 20 63 75 72 73 6f 72 20  dex of a cursor 
1ea10 6f 70 65 6e 20 6f 6e 20 61 6e 20 53 51 4c 20 74  open on an SQL t
1ea20 61 62 6c 65 20 62 74 72 65 65 20 28 77 69 74 68  able btree (with
1ea30 20 69 6e 74 65 67 65 72 0a 2a 2a 20 6b 65 79 73   integer.** keys
1ea40 29 2e 20 20 50 33 20 69 73 20 61 6e 20 69 6e 74  ).  P3 is an int
1ea50 65 67 65 72 20 72 6f 77 69 64 2e 20 20 49 66 20  eger rowid.  If 
1ea60 50 31 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74  P1 does not cont
1ea70 61 69 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74  ain a record wit
1ea80 68 0a 2a 2a 20 72 6f 77 69 64 20 50 33 20 74 68  h.** rowid P3 th
1ea90 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  en jump immediat
1eaa0 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20 50  ely to P2.  If P
1eab0 31 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61  1 does contain a
1eac0 20 72 65 63 6f 72 64 0a 2a 2a 20 77 69 74 68 20   record.** with 
1ead0 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20 6c 65  rowid P3 then le
1eae0 61 76 65 20 74 68 65 20 63 75 72 73 6f 72 20 70  ave the cursor p
1eaf0 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 61 74 20  ointing at that 
1eb00 72 65 63 6f 72 64 20 61 6e 64 20 66 61 6c 6c 0a  record and fall.
1eb10 2a 2a 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ** through to th
1eb20 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
1eb30 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50  on..**.** The OP
1eb40 5f 4e 6f 74 46 6f 75 6e 64 20 6f 70 63 6f 64 65  _NotFound opcode
1eb50 20 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73 61   performs the sa
1eb60 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e 20  me operation on 
1eb70 69 6e 64 65 78 20 62 74 72 65 65 73 0a 2a 2a 20  index btrees.** 
1eb80 28 77 69 74 68 20 61 72 62 69 74 72 61 72 79 20  (with arbitrary 
1eb90 6d 75 6c 74 69 2d 76 61 6c 75 65 20 6b 65 79 73  multi-value keys
1eba0 29 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  )..**.** See als
1ebb0 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
1ebc0 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 0a 2a  nd, NoConflict.*
1ebd0 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78 69  /.case OP_NotExi
1ebe0 73 74 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  sts: {        /*
1ebf0 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
1ec00 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1ec10 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
1ec20 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  r;.  int res;.  
1ec30 75 36 34 20 69 4b 65 79 3b 0a 0a 20 20 70 49 6e  u64 iKey;..  pIn
1ec40 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
1ec50 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  3];.  assert( pI
1ec60 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
1ec70 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Int );.  assert(
1ec80 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1ec90 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1eca0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
1ecb0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1ecc0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
1ecd0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1ece0 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73  isTable );.  ass
1ecf0 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54  ert( pC->pseudoT
1ed00 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20  ableReg==0 );.  
1ed10 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
1ed20 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70  sor;.  assert( p
1ed30 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 72 65 73  Crsr!=0 );.  res
1ed40 20 3d 20 30 3b 0a 20 20 69 4b 65 79 20 3d 20 70   = 0;.  iKey = p
1ed50 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 72 63 20 3d  In3->u.i;.  rc =
1ed60 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
1ed70 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73  etoUnpacked(pCrs
1ed80 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c 20 26  r, 0, iKey, 0, &
1ed90 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6c 61 73 74  res);.  pC->last
1eda0 52 6f 77 69 64 20 3d 20 70 49 6e 33 2d 3e 75 2e  Rowid = pIn3->u.
1edb0 69 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73  i;.  pC->rowidIs
1edc0 56 61 6c 69 64 20 3d 20 72 65 73 3d 3d 30 20 3f  Valid = res==0 ?
1edd0 31 3a 30 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  1:0;.  pC->nullR
1ede0 6f 77 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61  ow = 0;.  pC->ca
1edf0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
1ee00 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 64  E_STALE;.  pC->d
1ee10 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
1ee20 30 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  0;.  VdbeBranchT
1ee30 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a  aken(res!=0,2);.
1ee40 20 20 69 66 28 20 72 65 73 21 3d 30 20 29 7b 0a    if( res!=0 ){.
1ee50 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
1ee60 20 2d 20 31 3b 0a 20 20 20 20 61 73 73 65 72 74   - 1;.    assert
1ee70 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c  ( pC->rowidIsVal
1ee80 69 64 3d 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 70  id==0 );.  }.  p
1ee90 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  C->seekResult = 
1eea0 72 65 73 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  res;.  break;.}.
1eeb0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71 75  ./* Opcode: Sequ
1eec0 65 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a  ence P1 P2 * * *
1eed0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
1eee0 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20  P2]=rowid.**.** 
1eef0 46 69 6e 64 20 74 68 65 20 6e 65 78 74 20 61 76  Find the next av
1ef00 61 69 6c 61 62 6c 65 20 73 65 71 75 65 6e 63 65  ailable sequence
1ef10 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 75 72 73   number for curs
1ef20 6f 72 20 50 31 2e 0a 2a 2a 20 57 72 69 74 65 20  or P1..** Write 
1ef30 74 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d  the sequence num
1ef40 62 65 72 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ber into registe
1ef50 72 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73 65 71  r P2..** The seq
1ef60 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 6f 6e 20  uence number on 
1ef70 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 69 6e  the cursor is in
1ef80 63 72 65 6d 65 6e 74 65 64 20 61 66 74 65 72 20  cremented after 
1ef90 74 68 69 73 0a 2a 2a 20 69 6e 73 74 72 75 63 74  this.** instruct
1efa0 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f  ion.  .*/.case O
1efb0 50 5f 53 65 71 75 65 6e 63 65 3a 20 7b 20 20 20  P_Sequence: {   
1efc0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
1efd0 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
1efe0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1eff0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
1f000 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
1f010 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70  sert( p->apCsr[p
1f020 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a 20 20  Op->p1]!=0 );.  
1f030 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e 61  pOut->u.i = p->a
1f040 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 73  pCsr[pOp->p1]->s
1f050 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20 62 72 65  eqCount++;.  bre
1f060 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.}.../* Opcod
1f070 65 3a 20 4e 65 77 52 6f 77 69 64 20 50 31 20 50  e: NewRowid P1 P
1f080 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
1f090 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69  psis: r[P2]=rowi
1f0a0 64 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61 20 6e 65  d.**.** Get a ne
1f0b0 77 20 69 6e 74 65 67 65 72 20 72 65 63 6f 72 64  w integer record
1f0c0 20 6e 75 6d 62 65 72 20 28 61 2e 6b 2e 61 20 22   number (a.k.a "
1f0d0 72 6f 77 69 64 22 29 20 75 73 65 64 20 61 73 20  rowid") used as 
1f0e0 74 68 65 20 6b 65 79 20 74 6f 20 61 20 74 61 62  the key to a tab
1f0f0 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 65 63 6f 72  le..** The recor
1f100 64 20 6e 75 6d 62 65 72 20 69 73 20 6e 6f 74 20  d number is not 
1f110 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64 20  previously used 
1f120 61 73 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20  as a key in the 
1f130 64 61 74 61 62 61 73 65 0a 2a 2a 20 74 61 62 6c  database.** tabl
1f140 65 20 74 68 61 74 20 63 75 72 73 6f 72 20 50 31  e that cursor P1
1f150 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 54 68 65   points to.  The
1f160 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62   new record numb
1f170 65 72 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a  er is written.**
1f180 20 77 72 69 74 74 65 6e 20 74 6f 20 72 65 67 69   written to regi
1f190 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49  ster P2..**.** I
1f1a0 66 20 50 33 3e 30 20 74 68 65 6e 20 50 33 20 69  f P3>0 then P3 i
1f1b0 73 20 61 20 72 65 67 69 73 74 65 72 20 69 6e 20  s a register in 
1f1c0 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f  the root frame o
1f1d0 66 20 74 68 69 73 20 56 44 42 45 20 74 68 61 74  f this VDBE that
1f1e0 20 68 6f 6c 64 73 20 0a 2a 2a 20 74 68 65 20 6c   holds .** the l
1f1f0 61 72 67 65 73 74 20 70 72 65 76 69 6f 75 73 6c  argest previousl
1f200 79 20 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f  y generated reco
1f210 72 64 20 6e 75 6d 62 65 72 2e 20 4e 6f 20 6e 65  rd number. No ne
1f220 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 73  w record numbers
1f230 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f 77 65 64 20   are.** allowed 
1f240 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20  to be less than 
1f250 74 68 69 73 20 76 61 6c 75 65 2e 20 57 68 65 6e  this value. When
1f260 20 74 68 69 73 20 76 61 6c 75 65 20 72 65 61 63   this value reac
1f270 68 65 73 20 69 74 73 20 6d 61 78 69 6d 75 6d 2c  hes its maximum,
1f280 20 0a 2a 2a 20 61 6e 20 53 51 4c 49 54 45 5f 46   .** an SQLITE_F
1f290 55 4c 4c 20 65 72 72 6f 72 20 69 73 20 67 65 6e  ULL error is gen
1f2a0 65 72 61 74 65 64 2e 20 54 68 65 20 50 33 20 72  erated. The P3 r
1f2b0 65 67 69 73 74 65 72 20 69 73 20 75 70 64 61 74  egister is updat
1f2c0 65 64 20 77 69 74 68 20 74 68 65 20 27 0a 2a 2a  ed with the '.**
1f2d0 20 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72   generated recor
1f2e0 64 20 6e 75 6d 62 65 72 2e 20 54 68 69 73 20 50  d number. This P
1f2f0 33 20 6d 65 63 68 61 6e 69 73 6d 20 69 73 20 75  3 mechanism is u
1f300 73 65 64 20 74 6f 20 68 65 6c 70 20 69 6d 70 6c  sed to help impl
1f310 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 41 55 54  ement the.** AUT
1f320 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65 61 74 75  OINCREMENT featu
1f330 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  re..*/.case OP_N
1f340 65 77 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20  ewRowid: {      
1f350 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
1f360 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 36 34  release */.  i64
1f370 20 76 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   v;             
1f380 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72      /* The new r
1f390 6f 77 69 64 20 2a 2f 0a 20 20 56 64 62 65 43 75  owid */.  VdbeCu
1f3a0 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 20 20 20  rsor *pC;       
1f3b0 20 2f 2a 20 43 75 72 73 6f 72 20 6f 66 20 74 61   /* Cursor of ta
1f3c0 62 6c 65 20 74 6f 20 67 65 74 20 74 68 65 20 6e  ble to get the n
1f3d0 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 6e  ew rowid */.  in
1f3e0 74 20 72 65 73 3b 20 20 20 20 20 20 20 20 20 20  t res;          
1f3f0 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f       /* Result o
1f400 66 20 61 6e 20 73 71 6c 69 74 65 33 42 74 72 65  f an sqlite3Btre
1f410 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 69 6e 74  eLast() */.  int
1f420 20 63 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20   cnt;           
1f430 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 74      /* Counter t
1f440 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e 75 6d 62  o limit the numb
1f450 65 72 20 6f 66 20 73 65 61 72 63 68 65 73 20 2a  er of searches *
1f460 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20  /.  Mem *pMem;  
1f470 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
1f480 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 6c  gister holding l
1f490 61 72 67 65 73 74 20 72 6f 77 69 64 20 66 6f 72  argest rowid for
1f4a0 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a   AUTOINCREMENT *
1f4b0 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70  /.  VdbeFrame *p
1f4c0 46 72 61 6d 65 3b 20 20 20 20 20 2f 2a 20 52 6f  Frame;     /* Ro
1f4d0 6f 74 20 66 72 61 6d 65 20 6f 66 20 56 44 42 45  ot frame of VDBE
1f4e0 20 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a 20 20   */..  v = 0;.  
1f4f0 72 65 73 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  res = 0;.  asser
1f500 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
1f510 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
1f520 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
1f530 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
1f540 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
1f550 20 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28   );.  if( NEVER(
1f560 70 43 2d 3e 70 43 75 72 73 6f 72 3d 3d 30 29 20  pC->pCursor==0) 
1f570 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 7a 65  ){.    /* The ze
1f580 72 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  ro initializatio
1f590 6e 20 61 62 6f 76 65 20 69 73 20 61 6c 6c 20 74  n above is all t
1f5a0 68 61 74 20 69 73 20 6e 65 65 64 65 64 20 2a 2f  hat is needed */
1f5b0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
1f5c0 20 54 68 65 20 6e 65 78 74 20 72 6f 77 69 64 20   The next rowid 
1f5d0 6f 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  or record number
1f5e0 20 28 64 69 66 66 65 72 65 6e 74 20 74 65 72 6d   (different term
1f5f0 73 20 66 6f 72 20 74 68 65 20 73 61 6d 65 0a 20  s for the same. 
1f600 20 20 20 2a 2a 20 74 68 69 6e 67 29 20 69 73 20     ** thing) is 
1f610 6f 62 74 61 69 6e 65 64 20 69 6e 20 61 20 74 77  obtained in a tw
1f620 6f 2d 73 74 65 70 20 61 6c 67 6f 72 69 74 68 6d  o-step algorithm
1f630 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
1f640 46 69 72 73 74 20 77 65 20 61 74 74 65 6d 70 74  First we attempt
1f650 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 72   to find the lar
1f660 67 65 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f  gest existing ro
1f670 77 69 64 20 61 6e 64 20 61 64 64 20 6f 6e 65 0a  wid and add one.
1f680 20 20 20 20 2a 2a 20 74 6f 20 74 68 61 74 2e 20      ** to that. 
1f690 20 42 75 74 20 69 66 20 74 68 65 20 6c 61 72 67   But if the larg
1f6a0 65 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77  est existing row
1f6b0 69 64 20 69 73 20 61 6c 72 65 61 64 79 20 74 68  id is already th
1f6c0 65 20 6d 61 78 69 6d 75 6d 0a 20 20 20 20 2a 2a  e maximum.    **
1f6d0 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65   positive intege
1f6e0 72 2c 20 77 65 20 68 61 76 65 20 74 6f 20 66 61  r, we have to fa
1f6f0 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
1f700 65 20 73 65 63 6f 6e 64 0a 20 20 20 20 2a 2a 20  e second.    ** 
1f710 70 72 6f 62 61 62 69 6c 69 73 74 69 63 20 61 6c  probabilistic al
1f720 67 6f 72 69 74 68 6d 0a 20 20 20 20 2a 2a 0a 20  gorithm.    **. 
1f730 20 20 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64     ** The second
1f740 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 74 6f   algorithm is to
1f750 20 73 65 6c 65 63 74 20 61 20 72 6f 77 69 64 20   select a rowid 
1f760 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 73 65  at random and se
1f770 65 20 69 66 0a 20 20 20 20 2a 2a 20 69 74 20 61  e if.    ** it a
1f780 6c 72 65 61 64 79 20 65 78 69 73 74 73 20 69 6e  lready exists in
1f790 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20   the table.  If 
1f7a0 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  it does not exis
1f7b0 74 2c 20 77 65 20 68 61 76 65 0a 20 20 20 20 2a  t, we have.    *
1f7c0 2a 20 73 75 63 63 65 65 64 65 64 2e 20 20 49 66  * succeeded.  If
1f7d0 20 74 68 65 20 72 61 6e 64 6f 6d 20 72 6f 77 69   the random rowi
1f7e0 64 20 64 6f 65 73 20 65 78 69 73 74 2c 20 77 65  d does exist, we
1f7f0 20 73 65 6c 65 63 74 20 61 20 6e 65 77 20 6f 6e   select a new on
1f800 65 0a 20 20 20 20 2a 2a 20 61 6e 64 20 74 72 79  e.    ** and try
1f810 20 61 67 61 69 6e 2c 20 75 70 20 74 6f 20 31 30   again, up to 10
1f820 30 20 74 69 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a  0 times..    */.
1f830 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
1f840 69 73 54 61 62 6c 65 20 29 3b 0a 0a 23 69 66 64  isTable );..#ifd
1f850 65 66 20 53 51 4c 49 54 45 5f 33 32 42 49 54 5f  ef SQLITE_32BIT_
1f860 52 4f 57 49 44 0a 23 20 20 20 64 65 66 69 6e 65  ROWID.#   define
1f870 20 4d 41 58 5f 52 4f 57 49 44 20 30 78 37 66 66   MAX_ROWID 0x7ff
1f880 66 66 66 66 66 0a 23 65 6c 73 65 0a 20 20 20 20  fffff.#else.    
1f890 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70 69 6c 65 72  /* Some compiler
1f8a0 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74  s complain about
1f8b0 20 63 6f 6e 73 74 61 6e 74 73 20 6f 66 20 74 68   constants of th
1f8c0 65 20 66 6f 72 6d 20 30 78 37 66 66 66 66 66 66  e form 0x7ffffff
1f8d0 66 66 66 66 66 66 66 66 66 2e 0a 20 20 20 20 2a  fffffffff..    *
1f8e0 2a 20 4f 74 68 65 72 73 20 63 6f 6d 70 6c 61 69  * Others complai
1f8f0 6e 20 61 62 6f 75 74 20 30 78 37 66 66 66 66 66  n about 0x7fffff
1f900 66 66 66 66 66 66 66 66 66 66 66 4c 4c 2e 20 20  fffffffffffLL.  
1f910 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
1f920 63 72 6f 20 73 65 65 6d 73 0a 20 20 20 20 2a 2a  cro seems.    **
1f930 20 74 6f 20 70 72 6f 76 69 64 65 20 74 68 65 20   to provide the 
1f940 63 6f 6e 73 74 61 6e 74 20 77 68 69 6c 65 20 6d  constant while m
1f950 61 6b 69 6e 67 20 61 6c 6c 20 63 6f 6d 70 69 6c  aking all compil
1f960 65 72 73 20 68 61 70 70 79 2e 0a 20 20 20 20 2a  ers happy..    *
1f970 2f 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58  /.#   define MAX
1f980 5f 52 4f 57 49 44 20 20 28 69 36 34 29 28 20 28  _ROWID  (i64)( (
1f990 28 28 75 36 34 29 30 78 37 66 66 66 66 66 66 66  ((u64)0x7fffffff
1f9a0 29 3c 3c 33 32 29 20 7c 20 28 75 36 34 29 30 78  )<<32) | (u64)0x
1f9b0 66 66 66 66 66 66 66 66 20 29 0a 23 65 6e 64 69  ffffffff ).#endi
1f9c0 66 0a 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e  f..    if( !pC->
1f9d0 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29  useRandomRowid )
1f9e0 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  {.      rc = sql
1f9f0 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43  ite3BtreeLast(pC
1fa00 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29  ->pCursor, &res)
1fa10 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
1fa20 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1fa30 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
1fa40 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1fa50 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
1fa60 72 65 73 20 29 7b 0a 20 20 20 20 20 20 20 20 76  res ){.        v
1fa70 20 3d 20 31 3b 20 20 20 2f 2a 20 49 4d 50 3a 20   = 1;   /* IMP: 
1fa80 52 2d 36 31 39 31 34 2d 34 38 30 37 34 20 2a 2f  R-61914-48074 */
1fa90 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
1faa0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
1fab0 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
1fac0 49 73 56 61 6c 69 64 28 70 43 2d 3e 70 43 75 72  IsValid(pC->pCur
1fad0 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20  sor) );.        
1fae0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1faf0 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70 43 75  eKeySize(pC->pCu
1fb00 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 20  rsor, &v);.     
1fb10 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
1fb20 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a  QLITE_OK );   /*
1fb30 20 43 61 6e 6e 6f 74 20 66 61 69 6c 20 66 6f 6c   Cannot fail fol
1fb40 6c 6f 77 69 6e 67 20 42 74 72 65 65 4c 61 73 74  lowing BtreeLast
1fb50 28 29 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66  () */.        if
1fb60 28 20 76 3e 3d 4d 41 58 5f 52 4f 57 49 44 20 29  ( v>=MAX_ROWID )
1fb70 7b 0a 20 20 20 20 20 20 20 20 20 20 70 43 2d 3e  {.          pC->
1fb80 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 3d  useRandomRowid =
1fb90 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73   1;.        }els
1fba0 65 7b 0a 20 20 20 20 20 20 20 20 20 20 76 2b 2b  e{.          v++
1fbb0 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 39  ;   /* IMP: R-29
1fbc0 35 33 38 2d 33 34 39 38 37 20 2a 2f 0a 20 20 20  538-34987 */.   
1fbd0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
1fbe0 20 20 20 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51     }..#ifndef SQ
1fbf0 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
1fc00 43 52 45 4d 45 4e 54 0a 20 20 20 20 69 66 28 20  CREMENT.    if( 
1fc10 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 20  pOp->p3 ){.     
1fc20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20   /* Assert that 
1fc30 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65  P3 is a valid me
1fc40 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20  mory cell. */.  
1fc50 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
1fc60 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 69  >p3>0 );.      i
1fc70 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a  f( p->pFrame ){.
1fc80 20 20 20 20 20 20 20 20 66 6f 72 28 70 46 72 61          for(pFra
1fc90 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46  me=p->pFrame; pF
1fca0 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70  rame->pParent; p
1fcb0 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50  Frame=pFrame->pP
1fcc0 61 72 65 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  arent);.        
1fcd0 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50  /* Assert that P
1fce0 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d  3 is a valid mem
1fcf0 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20  ory cell. */.   
1fd00 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
1fd10 2d 3e 70 33 3c 3d 70 46 72 61 6d 65 2d 3e 6e 4d  ->p3<=pFrame->nM
1fd20 65 6d 20 29 3b 0a 20 20 20 20 20 20 20 20 70 4d  em );.        pM
1fd30 65 6d 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d  em = &pFrame->aM
1fd40 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
1fd50 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1fd60 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74    /* Assert that
1fd70 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d   P3 is a valid m
1fd80 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20  emory cell. */. 
1fd90 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
1fda0 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
1fdb0 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
1fdc0 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26          pMem = &
1fdd0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
1fde0 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54         memAboutT
1fdf0 6f 43 68 61 6e 67 65 28 70 2c 20 70 4d 65 6d 29  oChange(p, pMem)
1fe00 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
1fe10 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
1fe20 69 64 28 70 4d 65 6d 29 20 29 3b 0a 0a 20 20 20  id(pMem) );..   
1fe30 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
1fe40 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d 29  E(pOp->p3, pMem)
1fe50 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
1fe60 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
1fe70 28 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 61 73  (pMem);.      as
1fe80 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61  sert( (pMem->fla
1fe90 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
1fea0 20 29 3b 20 20 2f 2a 20 6d 65 6d 28 50 33 29 20   );  /* mem(P3) 
1feb0 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72  holds an integer
1fec0 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 4d   */.      if( pM
1fed0 65 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57  em->u.i==MAX_ROW
1fee0 49 44 20 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e  ID || pC->useRan
1fef0 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20  domRowid ){.    
1ff00 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
1ff10 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20  FULL;   /* IMP: 
1ff20 52 2d 31 32 32 37 35 2d 36 31 33 33 38 20 2a 2f  R-12275-61338 */
1ff30 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
1ff40 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1ff50 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
1ff60 69 66 28 20 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b  if( v<pMem->u.i+
1ff70 31 20 29 7b 0a 20 20 20 20 20 20 20 20 76 20 3d  1 ){.        v =
1ff80 20 70 4d 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a   pMem->u.i + 1;.
1ff90 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 4d        }.      pM
1ffa0 65 6d 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20  em->u.i = v;.   
1ffb0 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66   }.#endif.    if
1ffc0 28 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52  ( pC->useRandomR
1ffd0 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 2f 2a  owid ){.      /*
1ffe0 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d   IMPLEMENTATION-
1fff0 4f 46 3a 20 52 2d 30 37 36 37 37 2d 34 31 38 38  OF: R-07677-4188
20000 31 20 49 66 20 74 68 65 20 6c 61 72 67 65 73 74  1 If the largest
20010 20 52 4f 57 49 44 20 69 73 20 65 71 75 61 6c 20   ROWID is equal 
20020 74 6f 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20  to the.      ** 
20030 6c 61 72 67 65 73 74 20 70 6f 73 73 69 62 6c 65  largest possible
20040 20 69 6e 74 65 67 65 72 20 28 39 32 32 33 33 37   integer (922337
20050 32 30 33 36 38 35 34 37 37 35 38 30 37 29 20 74  2036854775807) t
20060 68 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  hen the database
20070 0a 20 20 20 20 20 20 2a 2a 20 65 6e 67 69 6e 65  .      ** engine
20080 20 73 74 61 72 74 73 20 70 69 63 6b 69 6e 67 20   starts picking 
20090 70 6f 73 69 74 69 76 65 20 63 61 6e 64 69 64 61  positive candida
200a0 74 65 20 52 4f 57 49 44 73 20 61 74 20 72 61 6e  te ROWIDs at ran
200b0 64 6f 6d 20 75 6e 74 69 6c 0a 20 20 20 20 20 20  dom until.      
200c0 2a 2a 20 69 74 20 66 69 6e 64 73 20 6f 6e 65 20  ** it finds one 
200d0 74 68 61 74 20 69 73 20 6e 6f 74 20 70 72 65 76  that is not prev
200e0 69 6f 75 73 6c 79 20 75 73 65 64 2e 20 2a 2f 0a  iously used. */.
200f0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
20100 70 2d 3e 70 33 3d 3d 30 20 29 3b 20 20 2f 2a 20  p->p3==0 );  /* 
20110 57 65 20 63 61 6e 6e 6f 74 20 62 65 20 69 6e 20  We cannot be in 
20120 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 6d 6f 64  random rowid mod
20130 65 20 69 66 20 74 68 69 73 20 69 73 0a 20 20 20  e if this is.   
20140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20150 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 6e 20            ** an 
20160 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61  AUTOINCREMENT ta
20170 62 6c 65 2e 20 2a 2f 0a 20 20 20 20 20 20 2f 2a  ble. */.      /*
20180 20 6f 6e 20 74 68 65 20 66 69 72 73 74 20 61 74   on the first at
20190 74 65 6d 70 74 2c 20 73 69 6d 70 6c 79 20 64 6f  tempt, simply do
201a0 20 6f 6e 65 20 6d 6f 72 65 20 74 68 61 6e 20 70   one more than p
201b0 72 65 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20 20  revious */.     
201c0 20 76 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a   v = lastRowid;.
201d0 20 20 20 20 20 20 76 20 26 3d 20 28 4d 41 58 5f        v &= (MAX_
201e0 52 4f 57 49 44 3e 3e 31 29 3b 20 2f 2a 20 65 6e  ROWID>>1); /* en
201f0 73 75 72 65 20 64 6f 65 73 6e 27 74 20 67 6f 20  sure doesn't go 
20200 6e 65 67 61 74 69 76 65 20 2a 2f 0a 20 20 20 20  negative */.    
20210 20 20 76 2b 2b 3b 20 2f 2a 20 65 6e 73 75 72 65    v++; /* ensure
20220 20 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 20   non-zero */.   
20230 20 20 20 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20     cnt = 0;.    
20240 20 20 77 68 69 6c 65 28 20 20 20 28 28 72 63 20    while(   ((rc 
20250 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
20260 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d  vetoUnpacked(pC-
20270 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36  >pCursor, 0, (u6
20280 34 29 76 2c 0a 20 20 20 20 20 20 20 20 20 20 20  4)v,.           
20290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
202a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
202b0 20 20 20 20 20 20 30 2c 20 26 72 65 73 29 29 3d        0, &res))=
202c0 3d 53 51 4c 49 54 45 5f 4f 4b 29 0a 20 20 20 20  =SQLITE_OK).    
202d0 20 20 20 20 20 20 20 20 26 26 20 28 72 65 73 3d          && (res=
202e0 3d 30 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  =0).            
202f0 26 26 20 28 2b 2b 63 6e 74 3c 31 30 30 29 29 7b  && (++cnt<100)){
20300 0a 20 20 20 20 20 20 20 20 2f 2a 20 63 6f 6c 6c  .        /* coll
20310 69 73 69 6f 6e 20 2d 20 74 72 79 20 61 6e 6f 74  ision - try anot
20320 68 65 72 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64  her random rowid
20330 20 2a 2f 0a 20 20 20 20 20 20 20 20 73 71 6c 69   */.        sqli
20340 74 65 33 5f 72 61 6e 64 6f 6d 6e 65 73 73 28 73  te3_randomness(s
20350 69 7a 65 6f 66 28 76 29 2c 20 26 76 29 3b 0a 20  izeof(v), &v);. 
20360 20 20 20 20 20 20 20 69 66 28 20 63 6e 74 3c 35         if( cnt<5
20370 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a   ){.          /*
20380 20 74 72 79 20 22 73 6d 61 6c 6c 22 20 72 61 6e   try "small" ran
20390 64 6f 6d 20 72 6f 77 69 64 73 20 66 6f 72 20 74  dom rowids for t
203a0 68 65 20 69 6e 69 74 69 61 6c 20 61 74 74 65 6d  he initial attem
203b0 70 74 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  pts */.         
203c0 20 76 20 26 3d 20 30 78 66 66 66 66 66 66 3b 0a   v &= 0xffffff;.
203d0 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
203e0 20 20 20 20 20 20 20 20 20 76 20 26 3d 20 28 4d           v &= (M
203f0 41 58 5f 52 4f 57 49 44 3e 3e 31 29 3b 20 2f 2a  AX_ROWID>>1); /*
20400 20 65 6e 73 75 72 65 20 64 6f 65 73 6e 27 74 20   ensure doesn't 
20410 67 6f 20 6e 65 67 61 74 69 76 65 20 2a 2f 0a 20  go negative */. 
20420 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
20430 20 76 2b 2b 3b 20 2f 2a 20 65 6e 73 75 72 65 20   v++; /* ensure 
20440 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 20 20  non-zero */.    
20450 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 72 63    }.      if( rc
20460 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72  ==SQLITE_OK && r
20470 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  es==0 ){.       
20480 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c   rc = SQLITE_FUL
20490 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 33  L;   /* IMP: R-3
204a0 38 32 31 39 2d 35 33 30 30 32 20 2a 2f 0a 20 20  8219-53002 */.  
204b0 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
204c0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
204d0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73       }.      ass
204e0 65 72 74 28 20 76 3e 30 20 29 3b 20 20 2f 2a 20  ert( v>0 );  /* 
204f0 45 56 3a 20 52 2d 34 30 38 31 32 2d 30 33 35 37  EV: R-40812-0357
20500 30 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20 70  0 */.    }.    p
20510 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
20520 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66  = 0;.    pC->def
20530 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
20540 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
20550 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
20560 4c 45 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  LE;.  }.  pOut->
20570 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b  u.i = v;.  break
20580 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
20590 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33 20  Insert P1 P2 P3 
205a0 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
205b0 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 20  s: intkey=r[P3] 
205c0 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  data=r[P2].**.**
205d0 20 57 72 69 74 65 20 61 6e 20 65 6e 74 72 79 20   Write an entry 
205e0 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20 6f  into the table o
205f0 66 20 63 75 72 73 6f 72 20 50 31 2e 20 20 41 20  f cursor P1.  A 
20600 6e 65 77 20 65 6e 74 72 79 20 69 73 0a 2a 2a 20  new entry is.** 
20610 63 72 65 61 74 65 64 20 69 66 20 69 74 20 64 6f  created if it do
20620 65 73 6e 27 74 20 61 6c 72 65 61 64 79 20 65 78  esn't already ex
20630 69 73 74 20 6f 72 20 74 68 65 20 64 61 74 61 20  ist or the data 
20640 66 6f 72 20 61 6e 20 65 78 69 73 74 69 6e 67 0a  for an existing.
20650 2a 2a 20 65 6e 74 72 79 20 69 73 20 6f 76 65 72  ** entry is over
20660 77 72 69 74 74 65 6e 2e 20 20 54 68 65 20 64 61  written.  The da
20670 74 61 20 69 73 20 74 68 65 20 76 61 6c 75 65 20  ta is the value 
20680 4d 45 4d 5f 42 6c 6f 62 20 73 74 6f 72 65 64 20  MEM_Blob stored 
20690 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e  in register.** n
206a0 75 6d 62 65 72 20 50 32 2e 20 54 68 65 20 6b 65  umber P2. The ke
206b0 79 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  y is stored in r
206c0 65 67 69 73 74 65 72 20 50 33 2e 20 54 68 65 20  egister P3. The 
206d0 6b 65 79 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61  key must.** be a
206e0 20 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20   MEM_Int..**.** 
206f0 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  If the OPFLAG_NC
20700 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 35  HANGE flag of P5
20710 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68   is set, then th
20720 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75  e row change cou
20730 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65  nt is.** increme
20740 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73 65 20  nted (otherwise 
20750 6e 6f 74 29 2e 20 20 49 66 20 74 68 65 20 4f 50  not).  If the OP
20760 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 66  FLAG_LASTROWID f
20770 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74  lag of P5 is set
20780 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f 77 69 64 20  ,.** then rowid 
20790 69 73 20 73 74 6f 72 65 64 20 66 6f 72 20 73 75  is stored for su
207a0 62 73 65 71 75 65 6e 74 20 72 65 74 75 72 6e 20  bsequent return 
207b0 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  by the.** sqlite
207c0 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f  3_last_insert_ro
207d0 77 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 28  wid() function (
207e0 6f 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20  otherwise it is 
207f0 75 6e 6d 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a  unmodified)..**.
20800 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
20810 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66  _USESEEKRESULT f
20820 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74  lag of P5 is set
20830 20 61 6e 64 20 69 66 20 74 68 65 20 72 65 73 75   and if the resu
20840 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 6c 61 73  lt of.** the las
20850 74 20 73 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e  t seek operation
20860 20 28 4f 50 5f 4e 6f 74 45 78 69 73 74 73 29 20   (OP_NotExists) 
20870 77 61 73 20 61 20 73 75 63 63 65 73 73 2c 20 74  was a success, t
20880 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 65 72  hen this.** oper
20890 61 74 69 6f 6e 20 77 69 6c 6c 20 6e 6f 74 20 61  ation will not a
208a0 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64 20 74  ttempt to find t
208b0 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 72  he appropriate r
208c0 6f 77 20 62 65 66 6f 72 65 20 64 6f 69 6e 67 0a  ow before doing.
208d0 2a 2a 20 74 68 65 20 69 6e 73 65 72 74 20 62 75  ** the insert bu
208e0 74 20 77 69 6c 6c 20 69 6e 73 74 65 61 64 20 6f  t will instead o
208f0 76 65 72 77 72 69 74 65 20 74 68 65 20 72 6f 77  verwrite the row
20900 20 74 68 61 74 20 74 68 65 20 63 75 72 73 6f 72   that the cursor
20910 20 69 73 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79   is.** currently
20920 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20 50   pointing to.  P
20930 72 65 73 75 6d 61 62 6c 79 2c 20 74 68 65 20 70  resumably, the p
20940 72 69 6f 72 20 4f 50 5f 4e 6f 74 45 78 69 73 74  rior OP_NotExist
20950 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 68 61 73 20  s opcode.** has 
20960 61 6c 72 65 61 64 79 20 70 6f 73 69 74 69 6f 6e  already position
20970 65 64 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f  ed the cursor co
20980 72 72 65 63 74 6c 79 2e 20 20 54 68 69 73 20 69  rrectly.  This i
20990 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f  s an optimizatio
209a0 6e 0a 2a 2a 20 74 68 61 74 20 62 6f 6f 73 74 73  n.** that boosts
209b0 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 62 79 20   performance by 
209c0 61 76 6f 69 64 69 6e 67 20 72 65 64 75 6e 64 61  avoiding redunda
209d0 6e 74 20 73 65 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20  nt seeks..**.** 
209e0 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 49 53  If the OPFLAG_IS
209f0 55 50 44 41 54 45 20 66 6c 61 67 20 69 73 20 73  UPDATE flag is s
20a00 65 74 2c 20 74 68 65 6e 20 74 68 69 73 20 6f 70  et, then this op
20a10 63 6f 64 65 20 69 73 20 70 61 72 74 20 6f 66 20  code is part of 
20a20 61 6e 0a 2a 2a 20 55 50 44 41 54 45 20 6f 70 65  an.** UPDATE ope
20a30 72 61 74 69 6f 6e 2e 20 20 4f 74 68 65 72 77 69  ration.  Otherwi
20a40 73 65 20 28 69 66 20 74 68 65 20 66 6c 61 67 20  se (if the flag 
20a50 69 73 20 63 6c 65 61 72 29 20 74 68 65 6e 20 74  is clear) then t
20a60 68 69 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73  his opcode.** is
20a70 20 70 61 72 74 20 6f 66 20 61 6e 20 49 4e 53 45   part of an INSE
20a80 52 54 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 54  RT operation.  T
20a90 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 69 73  he difference is
20aa0 20 6f 6e 6c 79 20 69 6d 70 6f 72 74 61 6e 74 20   only important 
20ab0 74 6f 0a 2a 2a 20 74 68 65 20 75 70 64 61 74 65  to.** the update
20ac0 20 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72   hook..**.** Par
20ad0 61 6d 65 74 65 72 20 50 34 20 6d 61 79 20 70 6f  ameter P4 may po
20ae0 69 6e 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20  int to a string 
20af0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
20b00 61 62 6c 65 2d 6e 61 6d 65 2c 20 6f 72 0a 2a 2a  able-name, or.**
20b10 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 20 49 66   may be NULL. If
20b20 20 69 74 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   it is not NULL,
20b30 20 74 68 65 6e 20 74 68 65 20 75 70 64 61 74 65   then the update
20b40 2d 68 6f 6f 6b 20 0a 2a 2a 20 28 73 71 6c 69 74  -hook .** (sqlit
20b50 65 33 2e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  e3.xUpdateCallba
20b60 63 6b 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 66  ck) is invoked f
20b70 6f 6c 6c 6f 77 69 6e 67 20 61 20 73 75 63 63 65  ollowing a succe
20b80 73 73 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a  ssful insert..**
20b90 0a 2a 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44  .** (WARNING/TOD
20ba0 4f 3a 20 49 66 20 50 31 20 69 73 20 61 20 70 73  O: If P1 is a ps
20bb0 65 75 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20  eudo-cursor and 
20bc0 50 32 20 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c  P2 is dynamicall
20bd0 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20  y.** allocated, 
20be0 74 68 65 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f  then ownership o
20bf0 66 20 50 32 20 69 73 20 74 72 61 6e 73 66 65 72  f P2 is transfer
20c00 72 65 64 20 74 6f 20 74 68 65 20 70 73 65 75 64  red to the pseud
20c10 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20  o-cursor.** and 
20c20 72 65 67 69 73 74 65 72 20 50 32 20 62 65 63 6f  register P2 beco
20c30 6d 65 73 20 65 70 68 65 6d 65 72 61 6c 2e 20 20  mes ephemeral.  
20c40 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  If the cursor is
20c50 20 63 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a   changed, the.**
20c60 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
20c70 65 72 20 50 32 20 77 69 6c 6c 20 74 68 65 6e 20  er P2 will then 
20c80 63 68 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75  change.  Make su
20c90 72 65 20 74 68 69 73 20 64 6f 65 73 20 6e 6f 74  re this does not
20ca0 0a 2a 2a 20 63 61 75 73 65 20 61 6e 79 20 70 72  .** cause any pr
20cb0 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54  oblems.).**.** T
20cc0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
20cd0 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61  only works on ta
20ce0 62 6c 65 73 2e 20 20 54 68 65 20 65 71 75 69 76  bles.  The equiv
20cf0 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  alent instructio
20d00 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65 73  n.** for indices
20d10 20 69 73 20 4f 50 5f 49 64 78 49 6e 73 65 72 74   is OP_IdxInsert
20d20 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
20d30 49 6e 73 65 72 74 49 6e 74 20 50 31 20 50 32 20  InsertInt P1 P2 
20d40 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
20d50 70 73 69 73 3a 20 20 69 6e 74 6b 65 79 3d 50 33  psis:  intkey=P3
20d60 20 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a   data=r[P2].**.*
20d70 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 65 78 61  * This works exa
20d80 63 74 6c 79 20 6c 69 6b 65 20 4f 50 5f 49 6e 73  ctly like OP_Ins
20d90 65 72 74 20 65 78 63 65 70 74 20 74 68 61 74 20  ert except that 
20da0 74 68 65 20 6b 65 79 20 69 73 20 74 68 65 0a 2a  the key is the.*
20db0 2a 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  * integer value 
20dc0 50 33 2c 20 6e 6f 74 20 74 68 65 20 76 61 6c 75  P3, not the valu
20dd0 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72  e of the integer
20de0 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
20df0 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20  ter P3..*/.case 
20e00 4f 50 5f 49 6e 73 65 72 74 3a 20 0a 63 61 73 65  OP_Insert: .case
20e10 20 4f 50 5f 49 6e 73 65 72 74 49 6e 74 3a 20 7b   OP_InsertInt: {
20e20 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 3b 20 20  .  Mem *pData;  
20e30 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c       /* MEM cell
20e40 20 68 6f 6c 64 69 6e 67 20 64 61 74 61 20 66 6f   holding data fo
20e50 72 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  r the record to 
20e60 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20  be inserted */. 
20e70 20 4d 65 6d 20 2a 70 4b 65 79 3b 20 20 20 20 20   Mem *pKey;     
20e80 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68     /* MEM cell h
20e90 6f 6c 64 69 6e 67 20 6b 65 79 20 20 66 6f 72 20  olding key  for 
20ea0 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
20eb0 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20 20  i64 iKey;       
20ec0 20 20 2f 2a 20 54 68 65 20 69 6e 74 65 67 65 72    /* The integer
20ed0 20 52 4f 57 49 44 20 6f 72 20 6b 65 79 20 66 6f   ROWID or key fo
20ee0 72 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  r the record to 
20ef0 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20  be inserted */. 
20f00 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
20f10 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 74 6f 20     /* Cursor to 
20f20 74 61 62 6c 65 20 69 6e 74 6f 20 77 68 69 63 68  table into which
20f30 20 69 6e 73 65 72 74 20 69 73 20 77 72 69 74 74   insert is writt
20f40 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65 72  en */.  int nZer
20f50 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  o;        /* Num
20f60 62 65 72 20 6f 66 20 7a 65 72 6f 2d 62 79 74 65  ber of zero-byte
20f70 73 20 74 6f 20 61 70 70 65 6e 64 20 2a 2f 0a 20  s to append */. 
20f80 20 69 6e 74 20 73 65 65 6b 52 65 73 75 6c 74 3b   int seekResult;
20f90 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20     /* Result of 
20fa0 70 72 69 6f 72 20 73 65 65 6b 20 6f 72 20 30 20  prior seek or 0 
20fb0 69 66 20 6e 6f 20 55 53 45 53 45 45 4b 52 45 53  if no USESEEKRES
20fc0 55 4c 54 20 66 6c 61 67 20 2a 2f 0a 20 20 63 6f  ULT flag */.  co
20fd0 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20  nst char *zDb;  
20fe0 2f 2a 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65  /* database name
20ff0 20 2d 20 75 73 65 64 20 62 79 20 74 68 65 20 75   - used by the u
21000 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20  pdate hook */.  
21010 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 62 6c  const char *zTbl
21020 3b 20 2f 2a 20 54 61 62 6c 65 20 6e 61 6d 65 20  ; /* Table name 
21030 2d 20 75 73 65 64 20 62 79 20 74 68 65 20 6f 70  - used by the op
21040 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 69  date hook */.  i
21050 6e 74 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  nt op;          
21060 20 2f 2a 20 4f 70 63 6f 64 65 20 66 6f 72 20 75   /* Opcode for u
21070 70 64 61 74 65 20 68 6f 6f 6b 3a 20 53 51 4c 49  pdate hook: SQLI
21080 54 45 5f 55 50 44 41 54 45 20 6f 72 20 53 51 4c  TE_UPDATE or SQL
21090 49 54 45 5f 49 4e 53 45 52 54 20 2a 2f 0a 0a 20  ITE_INSERT */.. 
210a0 20 70 44 61 74 61 20 3d 20 26 61 4d 65 6d 5b 70   pData = &aMem[p
210b0 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
210c0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
210d0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
210e0 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
210f0 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 44 61 74   memIsValid(pDat
21100 61 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  a) );.  pC = p->
21110 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
21120 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
21130 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
21140 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  >pCursor!=0 );. 
21150 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65   assert( pC->pse
21160 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29  udoTableReg==0 )
21170 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
21180 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 52 45 47  isTable );.  REG
21190 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
211a0 3e 70 32 2c 20 70 44 61 74 61 29 3b 0a 0a 20 20  >p2, pData);..  
211b0 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
211c0 3d 4f 50 5f 49 6e 73 65 72 74 20 29 7b 0a 20 20  =OP_Insert ){.  
211d0 20 20 70 4b 65 79 20 3d 20 26 61 4d 65 6d 5b 70    pKey = &aMem[p
211e0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73 73  Op->p3];.    ass
211f0 65 72 74 28 20 70 4b 65 79 2d 3e 66 6c 61 67 73  ert( pKey->flags
21200 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20   & MEM_Int );.  
21210 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
21220 61 6c 69 64 28 70 4b 65 79 29 20 29 3b 0a 20 20  alid(pKey) );.  
21230 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
21240 28 70 4f 70 2d 3e 70 33 2c 20 70 4b 65 79 29 3b  (pOp->p3, pKey);
21250 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 4b 65 79  .    iKey = pKey
21260 2d 3e 75 2e 69 3b 0a 20 20 7d 65 6c 73 65 7b 0a  ->u.i;.  }else{.
21270 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
21280 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65  >opcode==OP_Inse
21290 72 74 49 6e 74 20 29 3b 0a 20 20 20 20 69 4b 65  rtInt );.    iKe
212a0 79 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d  y = pOp->p3;.  }
212b0 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  ..  if( pOp->p5 
212c0 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  & OPFLAG_NCHANGE
212d0 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b   ) p->nChange++;
212e0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  .  if( pOp->p5 &
212f0 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49   OPFLAG_LASTROWI
21300 44 20 29 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  D ) db->lastRowi
21310 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 20 3d 20  d = lastRowid = 
21320 69 4b 65 79 3b 0a 20 20 69 66 28 20 70 44 61 74  iKey;.  if( pDat
21330 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  a->flags & MEM_N
21340 75 6c 6c 20 29 7b 0a 20 20 20 20 70 44 61 74 61  ull ){.    pData
21350 2d 3e 7a 20 3d 20 30 3b 0a 20 20 20 20 70 44 61  ->z = 0;.    pDa
21360 74 61 2d 3e 6e 20 3d 20 30 3b 0a 20 20 7d 65 6c  ta->n = 0;.  }el
21370 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
21380 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 28  pData->flags & (
21390 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72  MEM_Blob|MEM_Str
213a0 29 20 29 3b 0a 20 20 7d 0a 20 20 73 65 65 6b 52  ) );.  }.  seekR
213b0 65 73 75 6c 74 20 3d 20 28 28 70 4f 70 2d 3e 70  esult = ((pOp->p
213c0 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45  5 & OPFLAG_USESE
213d0 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e  EKRESULT) ? pC->
213e0 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 3b  seekResult : 0);
213f0 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c  .  if( pData->fl
21400 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29  ags & MEM_Zero )
21410 7b 0a 20 20 20 20 6e 5a 65 72 6f 20 3d 20 70 44  {.    nZero = pD
21420 61 74 61 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20  ata->u.nZero;.  
21430 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 5a 65 72 6f  }else{.    nZero
21440 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 72 63 20 3d   = 0;.  }.  rc =
21450 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73   sqlite3BtreeIns
21460 65 72 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ert(pC->pCursor,
21470 20 30 2c 20 69 4b 65 79 2c 0a 20 20 20 20 20 20   0, iKey,.      
21480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21490 20 20 20 20 70 44 61 74 61 2d 3e 7a 2c 20 70 44      pData->z, pD
214a0 61 74 61 2d 3e 6e 2c 20 6e 5a 65 72 6f 2c 0a 20  ata->n, nZero,. 
214b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
214c0 20 20 20 20 20 20 20 20 20 28 70 4f 70 2d 3e 70           (pOp->p
214d0 35 20 26 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e  5 & OPFLAG_APPEN
214e0 44 29 21 3d 30 2c 20 73 65 65 6b 52 65 73 75 6c  D)!=0, seekResul
214f0 74 0a 20 20 29 3b 0a 20 20 70 43 2d 3e 72 6f 77  t.  );.  pC->row
21500 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
21510 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
21520 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63  eto = 0;.  pC->c
21530 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
21540 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20  HE_STALE;..  /* 
21550 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74  Invoke the updat
21560 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72  e-hook if requir
21570 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d  ed. */.  if( rc=
21580 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62  =SQLITE_OK && db
21590 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
215a0 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29  k && pOp->p4.z )
215b0 7b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e  {.    zDb = db->
215c0 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61  aDb[pC->iDb].zNa
215d0 6d 65 3b 0a 20 20 20 20 7a 54 62 6c 20 3d 20 70  me;.    zTbl = p
215e0 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 6f 70  Op->p4.z;.    op
215f0 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f   = ((pOp->p5 & O
21600 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20  PFLAG_ISUPDATE) 
21610 3f 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20  ? SQLITE_UPDATE 
21620 3a 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 29  : SQLITE_INSERT)
21630 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
21640 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20  ->isTable );.   
21650 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c   db->xUpdateCall
21660 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65  back(db->pUpdate
21670 41 72 67 2c 20 6f 70 2c 20 7a 44 62 2c 20 7a 54  Arg, op, zDb, zT
21680 62 6c 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20 61  bl, iKey);.    a
21690 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d  ssert( pC->iDb>=
216a0 30 20 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  0 );.  }.  break
216b0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
216c0 44 65 6c 65 74 65 20 50 31 20 50 32 20 2a 20 50  Delete P1 P2 * P
216d0 34 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65  4 *.**.** Delete
216e0 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 20 77   the record at w
216f0 68 69 63 68 20 74 68 65 20 50 31 20 63 75 72 73  hich the P1 curs
21700 6f 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  or is currently 
21710 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20  pointing..**.** 
21720 54 68 65 20 63 75 72 73 6f 72 20 77 69 6c 6c 20  The cursor will 
21730 62 65 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67  be left pointing
21740 20 61 74 20 65 69 74 68 65 72 20 74 68 65 20 6e   at either the n
21750 65 78 74 20 6f 72 20 74 68 65 20 70 72 65 76 69  ext or the previ
21760 6f 75 73 0a 2a 2a 20 72 65 63 6f 72 64 20 69 6e  ous.** record in
21770 20 74 68 65 20 74 61 62 6c 65 2e 20 49 66 20 69   the table. If i
21780 74 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69  t is left pointi
21790 6e 67 20 61 74 20 74 68 65 20 6e 65 78 74 20 72  ng at the next r
217a0 65 63 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a 20 74  ecord, then.** t
217b0 68 65 20 6e 65 78 74 20 4e 65 78 74 20 69 6e 73  he next Next ins
217c0 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65  truction will be
217d0 20 61 20 6e 6f 2d 6f 70 2e 20 20 48 65 6e 63 65   a no-op.  Hence
217e0 20 69 74 20 69 73 20 4f 4b 20 74 6f 20 64 65 6c   it is OK to del
217f0 65 74 65 0a 2a 2a 20 61 20 72 65 63 6f 72 64 20  ete.** a record 
21800 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20 4e  from within an N
21810 65 78 74 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20  ext loop..**.** 
21820 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  If the OPFLAG_NC
21830 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 32  HANGE flag of P2
21840 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68   is set, then th
21850 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75  e row change cou
21860 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65  nt is.** increme
21870 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73 65 20  nted (otherwise 
21880 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d  not)..**.** P1 m
21890 75 73 74 20 6e 6f 74 20 62 65 20 70 73 65 75 64  ust not be pseud
218a0 6f 2d 74 61 62 6c 65 2e 20 20 49 74 20 68 61 73  o-table.  It has
218b0 20 74 6f 20 62 65 20 61 20 72 65 61 6c 20 74 61   to be a real ta
218c0 62 6c 65 20 77 69 74 68 0a 2a 2a 20 6d 75 6c 74  ble with.** mult
218d0 69 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a  iple rows..**.**
218e0 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55   If P4 is not NU
218f0 4c 4c 2c 20 74 68 65 6e 20 69 74 20 69 73 20 74  LL, then it is t
21900 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
21910 61 62 6c 65 20 74 68 61 74 20 50 31 20 69 73 0a  able that P1 is.
21920 2a 2a 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20  ** pointing to. 
21930 20 54 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b   The update hook
21940 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64   will be invoked
21950 2c 20 69 66 20 69 74 20 65 78 69 73 74 73 2e 0a  , if it exists..
21960 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  ** If P4 is not 
21970 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 50 31  NULL then the P1
21980 20 63 75 72 73 6f 72 20 6d 75 73 74 20 68 61 76   cursor must hav
21990 65 20 62 65 65 6e 20 70 6f 73 69 74 69 6f 6e 65  e been positione
219a0 64 0a 2a 2a 20 75 73 69 6e 67 20 4f 50 5f 4e 6f  d.** using OP_No
219b0 74 46 6f 75 6e 64 20 70 72 69 6f 72 20 74 6f 20  tFound prior to 
219c0 69 6e 76 6f 6b 69 6e 67 20 74 68 69 73 20 6f 70  invoking this op
219d0 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  code..*/.case OP
219e0 5f 44 65 6c 65 74 65 3a 20 7b 0a 20 20 69 36 34  _Delete: {.  i64
219f0 20 69 4b 65 79 3b 0a 20 20 56 64 62 65 43 75 72   iKey;.  VdbeCur
21a00 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65  sor *pC;..  asse
21a10 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
21a20 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
21a30 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
21a40 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
21a50 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
21a60 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
21a70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  C->pCursor!=0 );
21a80 20 20 2f 2a 20 4f 6e 6c 79 20 76 61 6c 69 64 20    /* Only valid 
21a90 66 6f 72 20 72 65 61 6c 20 74 61 62 6c 65 73 2c  for real tables,
21aa0 20 6e 6f 20 70 73 65 75 64 6f 74 61 62 6c 65 73   no pseudotables
21ab0 20 2a 2f 0a 20 20 69 4b 65 79 20 3d 20 70 43 2d   */.  iKey = pC-
21ac0 3e 6c 61 73 74 52 6f 77 69 64 3b 20 20 20 20 20  >lastRowid;     
21ad0 20 2f 2a 20 4f 6e 6c 79 20 75 73 65 64 20 66 6f   /* Only used fo
21ae0 72 20 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f  r the update hoo
21af0 6b 20 2a 2f 0a 0a 20 20 2f 2a 20 54 68 65 20 4f  k */..  /* The O
21b00 50 5f 44 65 6c 65 74 65 20 6f 70 63 6f 64 65 20  P_Delete opcode 
21b10 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 73 20 61  always follows a
21b20 6e 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f  n OP_NotExists o
21b30 72 20 4f 50 5f 4c 61 73 74 20 6f 72 0a 20 20 2a  r OP_Last or.  *
21b40 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 20 74  * OP_Column on t
21b50 68 65 20 73 61 6d 65 20 74 61 62 6c 65 20 77 69  he same table wi
21b60 74 68 6f 75 74 20 61 6e 79 20 69 6e 74 65 72 76  thout any interv
21b70 65 6e 69 6e 67 20 6f 70 65 72 61 74 69 6f 6e 73  ening operations
21b80 20 74 68 61 74 0a 20 20 2a 2a 20 6d 69 67 68 74   that.  ** might
21b90 20 6d 6f 76 65 20 6f 72 20 69 6e 76 61 6c 69 64   move or invalid
21ba0 61 74 65 20 74 68 65 20 63 75 72 73 6f 72 2e 20  ate the cursor. 
21bb0 20 48 65 6e 63 65 20 63 75 72 73 6f 72 20 70 43   Hence cursor pC
21bc0 20 69 73 20 61 6c 77 61 79 73 20 70 6f 69 6e 74   is always point
21bd0 69 6e 67 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20  ing.  ** to the 
21be0 72 6f 77 20 74 6f 20 62 65 20 64 65 6c 65 74 65  row to be delete
21bf0 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65  d and the sqlite
21c00 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74  3VdbeCursorMovet
21c10 6f 28 29 20 6f 70 65 72 61 74 69 6f 6e 0a 20 20  o() operation.  
21c20 2a 2a 20 62 65 6c 6f 77 20 69 73 20 61 6c 77 61  ** below is alwa
21c30 79 73 20 61 20 6e 6f 2d 6f 70 20 61 6e 64 20 63  ys a no-op and c
21c40 61 6e 6e 6f 74 20 66 61 69 6c 2e 20 20 57 65 20  annot fail.  We 
21c50 77 69 6c 6c 20 72 75 6e 20 69 74 20 61 6e 79 68  will run it anyh
21c60 6f 77 2c 20 74 68 6f 75 67 68 2c 0a 20 20 2a 2a  ow, though,.  **
21c70 20 74 6f 20 67 75 61 72 64 20 61 67 61 69 6e 73   to guard agains
21c80 74 20 66 75 74 75 72 65 20 63 68 61 6e 67 65 73  t future changes
21c90 20 74 6f 20 74 68 65 20 63 6f 64 65 20 67 65 6e   to the code gen
21ca0 65 72 61 74 6f 72 2e 0a 20 20 2a 2a 2f 0a 20 20  erator..  **/.  
21cb0 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
21cc0 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
21cd0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
21ce0 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
21cf0 70 43 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52  pC);.  if( NEVER
21d00 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20  (rc!=SQLITE_OK) 
21d10 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
21d20 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 72 63  _to_error;..  rc
21d30 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
21d40 65 6c 65 74 65 28 70 43 2d 3e 70 43 75 72 73 6f  elete(pC->pCurso
21d50 72 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53  r);.  pC->cacheS
21d60 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
21d70 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  ALE;..  /* Invok
21d80 65 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  e the update-hoo
21d90 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a  k if required. *
21da0 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  /.  if( rc==SQLI
21db0 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70  TE_OK && db->xUp
21dc0 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20  dateCallback && 
21dd0 70 4f 70 2d 3e 70 34 2e 7a 20 26 26 20 70 43 2d  pOp->p4.z && pC-
21de0 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20  >isTable ){.    
21df0 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  db->xUpdateCallb
21e00 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41  ack(db->pUpdateA
21e10 72 67 2c 20 53 51 4c 49 54 45 5f 44 45 4c 45 54  rg, SQLITE_DELET
21e20 45 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  E,.             
21e30 20 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61             db->a
21e40 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d  Db[pC->iDb].zNam
21e50 65 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 69 4b  e, pOp->p4.z, iK
21e60 65 79 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ey);.    assert(
21e70 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20   pC->iDb>=0 );. 
21e80 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32   }.  if( pOp->p2
21e90 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47   & OPFLAG_NCHANG
21ea0 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b  E ) p->nChange++
21eb0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 2f 2a 20  ;.  break;.}./* 
21ec0 4f 70 63 6f 64 65 3a 20 52 65 73 65 74 43 6f 75  Opcode: ResetCou
21ed0 6e 74 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  nt * * * * *.**.
21ee0 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20  ** The value of 
21ef0 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  the change count
21f00 65 72 20 69 73 20 63 6f 70 69 65 64 20 74 6f 20  er is copied to 
21f10 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
21f20 64 6c 65 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f  dle.** change co
21f30 75 6e 74 65 72 20 28 72 65 74 75 72 6e 65 64 20  unter (returned 
21f40 62 79 20 73 75 62 73 65 71 75 65 6e 74 20 63 61  by subsequent ca
21f50 6c 6c 73 20 74 6f 20 73 71 6c 69 74 65 33 5f 63  lls to sqlite3_c
21f60 68 61 6e 67 65 73 28 29 29 2e 0a 2a 2a 20 54 68  hanges())..** Th
21f70 65 6e 20 74 68 65 20 56 4d 73 20 69 6e 74 65 72  en the VMs inter
21f80 6e 61 6c 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  nal change count
21f90 65 72 20 72 65 73 65 74 73 20 74 6f 20 30 2e 0a  er resets to 0..
21fa0 2a 2a 20 54 68 69 73 20 69 73 20 75 73 65 64 20  ** This is used 
21fb0 62 79 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  by trigger progr
21fc0 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ams..*/.case OP_
21fd0 52 65 73 65 74 43 6f 75 6e 74 3a 20 7b 0a 20 20  ResetCount: {.  
21fe0 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68  sqlite3VdbeSetCh
21ff0 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68  anges(db, p->nCh
22000 61 6e 67 65 29 3b 0a 20 20 70 2d 3e 6e 43 68 61  ange);.  p->nCha
22010 6e 67 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b  nge = 0;.  break
22020 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
22030 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 20 50 31  SorterCompare P1
22040 20 50 32 20 50 33 20 50 34 0a 2a 2a 20 53 79 6e   P2 P3 P4.** Syn
22050 6f 70 73 69 73 3a 20 20 69 66 20 6b 65 79 28 50  opsis:  if key(P
22060 31 29 21 3d 72 74 72 69 6d 28 72 5b 50 33 5d 2c  1)!=rtrim(r[P3],
22070 50 34 29 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  P4) goto P2.**.*
22080 2a 20 50 31 20 69 73 20 61 20 73 6f 72 74 65 72  * P1 is a sorter
22090 20 63 75 72 73 6f 72 2e 20 54 68 69 73 20 69 6e   cursor. This in
220a0 73 74 72 75 63 74 69 6f 6e 20 63 6f 6d 70 61 72  struction compar
220b0 65 73 20 61 20 70 72 65 66 69 78 20 6f 66 20 74  es a prefix of t
220c0 68 65 0a 2a 2a 20 74 68 65 20 72 65 63 6f 72 64  he.** the record
220d0 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65   blob in registe
220e0 72 20 50 33 20 61 67 61 69 6e 73 74 20 61 20 70  r P3 against a p
220f0 72 65 66 69 78 20 6f 66 20 74 68 65 20 65 6e 74  refix of the ent
22100 72 79 20 74 68 61 74 20 0a 2a 2a 20 74 68 65 20  ry that .** the 
22110 73 6f 72 74 65 72 20 63 75 72 73 6f 72 20 63 75  sorter cursor cu
22120 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 73 20 74  rrently points t
22130 6f 2e 20 20 54 68 65 20 66 69 6e 61 6c 20 50 34  o.  The final P4
22140 20 66 69 65 6c 64 73 20 6f 66 20 62 6f 74 68 0a   fields of both.
22150 2a 2a 20 74 68 65 20 50 33 20 61 6e 64 20 73 6f  ** the P3 and so
22160 72 74 65 72 20 72 65 63 6f 72 64 20 61 72 65 20  rter record are 
22170 69 67 6e 6f 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49  ignored..**.** I
22180 66 20 65 69 74 68 65 72 20 50 33 20 6f 72 20 74  f either P3 or t
22190 68 65 20 73 6f 72 74 65 72 20 63 6f 6e 74 61 69  he sorter contai
221a0 6e 73 20 61 20 4e 55 4c 4c 20 69 6e 20 6f 6e 65  ns a NULL in one
221b0 20 6f 66 20 74 68 65 69 72 20 73 69 67 6e 69 66   of their signif
221c0 69 63 61 6e 74 0a 2a 2a 20 66 69 65 6c 64 73 20  icant.** fields 
221d0 28 6e 6f 74 20 63 6f 75 6e 74 69 6e 67 20 74 68  (not counting th
221e0 65 20 50 34 20 66 69 65 6c 64 73 20 61 74 20 74  e P4 fields at t
221f0 68 65 20 65 6e 64 20 77 68 69 63 68 20 61 72 65  he end which are
22200 20 69 67 6e 6f 72 65 64 29 20 74 68 65 6e 0a 2a   ignored) then.*
22210 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  * the comparison
22220 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 62   is assumed to b
22230 65 20 65 71 75 61 6c 2e 0a 2a 2a 0a 2a 2a 20 46  e equal..**.** F
22240 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 6e  all through to n
22250 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
22260 69 66 20 74 68 65 20 74 77 6f 20 72 65 63 6f 72  if the two recor
22270 64 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c  ds compare equal
22280 20 74 6f 0a 2a 2a 20 65 61 63 68 20 6f 74 68 65   to.** each othe
22290 72 2e 20 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  r.  Jump to P2 i
222a0 66 20 74 68 65 79 20 61 72 65 20 64 69 66 66 65  f they are diffe
222b0 72 65 6e 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  rent..*/.case OP
222c0 5f 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 3a 20  _SorterCompare: 
222d0 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
222e0 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  pC;.  int res;. 
222f0 20 69 6e 74 20 6e 49 67 6e 6f 72 65 3b 0a 0a 20   int nIgnore;.. 
22300 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
22310 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
22320 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  t( isSorter(pC) 
22330 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
22340 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
22350 33 32 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26  32 );.  pIn3 = &
22360 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
22370 20 6e 49 67 6e 6f 72 65 20 3d 20 70 4f 70 2d 3e   nIgnore = pOp->
22380 70 34 2e 69 3b 0a 20 20 72 63 20 3d 20 73 71 6c  p4.i;.  rc = sql
22390 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 43 6f  ite3VdbeSorterCo
223a0 6d 70 61 72 65 28 70 43 2c 20 70 49 6e 33 2c 20  mpare(pC, pIn3, 
223b0 6e 49 67 6e 6f 72 65 2c 20 26 72 65 73 29 3b 0a  nIgnore, &res);.
223c0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
223d0 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69  n(res!=0,2);.  i
223e0 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63  f( res ){.    pc
223f0 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20   = pOp->p2-1;.  
22400 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 0a 2f  }.  break;.};../
22410 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72  * Opcode: Sorter
22420 44 61 74 61 20 50 31 20 50 32 20 2a 20 2a 20 2a  Data P1 P2 * * *
22430 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
22440 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57  P2]=data.**.** W
22450 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74  rite into regist
22460 65 72 20 50 32 20 74 68 65 20 63 75 72 72 65 6e  er P2 the curren
22470 74 20 73 6f 72 74 65 72 20 64 61 74 61 20 66 6f  t sorter data fo
22480 72 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 20  r sorter cursor 
22490 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  P1..*/.case OP_S
224a0 6f 72 74 65 72 44 61 74 61 3a 20 7b 0a 20 20 56  orterData: {.  V
224b0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a  dbeCursor *pC;..
224c0 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
224d0 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 43 20 3d 20  Op->p2];.  pC = 
224e0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
224f0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  ];.  assert( isS
22500 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 72  orter(pC) );.  r
22510 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  c = sqlite3VdbeS
22520 6f 72 74 65 72 52 6f 77 6b 65 79 28 70 43 2c 20  orterRowkey(pC, 
22530 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
22540 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  }../* Opcode: Ro
22550 77 44 61 74 61 20 50 31 20 50 32 20 2a 20 2a 20  wData P1 P2 * * 
22560 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
22570 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20  [P2]=data.**.** 
22580 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73  Write into regis
22590 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c  ter P2 the compl
225a0 65 74 65 20 72 6f 77 20 64 61 74 61 20 66 6f 72  ete row data for
225b0 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54   cursor P1..** T
225c0 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72  here is no inter
225d0 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  pretation of the
225e0 20 64 61 74 61 2e 20 20 0a 2a 2a 20 49 74 20 69   data.  .** It i
225f0 73 20 6a 75 73 74 20 63 6f 70 69 65 64 20 6f 6e  s just copied on
22600 74 6f 20 74 68 65 20 50 32 20 72 65 67 69 73 74  to the P2 regist
22610 65 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a  er exactly as .*
22620 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e  * it is found in
22630 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
22640 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  le..**.** If the
22650 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20   P1 cursor must 
22660 62 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61  be pointing to a
22670 20 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20   valid row (not 
22680 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f  a NULL row).** o
22690 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20  f a real table, 
226a0 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  not a pseudo-tab
226b0 6c 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  le..*/./* Opcode
226c0 3a 20 52 6f 77 4b 65 79 20 50 31 20 50 32 20 2a  : RowKey P1 P2 *
226d0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
226e0 3a 20 72 5b 50 32 5d 3d 6b 65 79 0a 2a 2a 0a 2a  : r[P2]=key.**.*
226f0 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67  * Write into reg
22700 69 73 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d  ister P2 the com
22710 70 6c 65 74 65 20 72 6f 77 20 6b 65 79 20 66 6f  plete row key fo
22720 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20  r cursor P1..** 
22730 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65  There is no inte
22740 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68  rpretation of th
22750 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 54 68 65  e data.  .** The
22760 20 6b 65 79 20 69 73 20 63 6f 70 69 65 64 20 6f   key is copied o
22770 6e 74 6f 20 74 68 65 20 50 32 20 72 65 67 69 73  nto the P2 regis
22780 74 65 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a  ter exactly as .
22790 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69  ** it is found i
227a0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
227b0 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ile..**.** If th
227c0 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74  e P1 cursor must
227d0 20 62 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20   be pointing to 
227e0 61 20 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74  a valid row (not
227f0 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20   a NULL row).** 
22800 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c  of a real table,
22810 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61   not a pseudo-ta
22820 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ble..*/.case OP_
22830 52 6f 77 4b 65 79 3a 0a 63 61 73 65 20 4f 50 5f  RowKey:.case OP_
22840 52 6f 77 44 61 74 61 3a 20 7b 0a 20 20 56 64 62  RowData: {.  Vdb
22850 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
22860 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
22870 20 20 75 33 32 20 6e 3b 0a 20 20 69 36 34 20 6e    u32 n;.  i64 n
22880 36 34 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61  64;..  pOut = &a
22890 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
228a0 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
228b0 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a  (p, pOut);..  /*
228c0 20 4e 6f 74 65 20 74 68 61 74 20 52 6f 77 4b 65   Note that RowKe
228d0 79 20 61 6e 64 20 52 6f 77 44 61 74 61 20 61 72  y and RowData ar
228e0 65 20 72 65 61 6c 6c 79 20 65 78 61 63 74 6c 79  e really exactly
228f0 20 74 68 65 20 73 61 6d 65 20 69 6e 73 74 72 75   the same instru
22900 63 74 69 6f 6e 20 2a 2f 0a 20 20 61 73 73 65 72  ction */.  asser
22910 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
22920 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
22930 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
22940 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
22950 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72  .  assert( isSor
22960 74 65 72 28 70 43 29 3d 3d 30 20 29 3b 0a 20 20  ter(pC)==0 );.  
22970 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
22980 62 6c 65 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  ble || pOp->opco
22990 64 65 21 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29  de!=OP_RowData )
229a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
229b0 69 73 54 61 62 6c 65 3d 3d 30 20 7c 7c 20 70 4f  isTable==0 || pO
229c0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f  p->opcode==OP_Ro
229d0 77 44 61 74 61 20 29 3b 0a 20 20 61 73 73 65 72  wData );.  asser
229e0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
229f0 73 65 72 74 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f  sert( pC->nullRo
22a00 77 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  w==0 );.  assert
22a10 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  ( pC->pseudoTabl
22a20 65 52 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73  eReg==0 );.  ass
22a30 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72  ert( pC->pCursor
22a40 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  !=0 );.  pCrsr =
22a50 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
22a60 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
22a70 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69  treeCursorIsVali
22a80 64 28 70 43 72 73 72 29 20 29 3b 0a 0a 20 20 2f  d(pCrsr) );..  /
22a90 2a 20 54 68 65 20 4f 50 5f 52 6f 77 4b 65 79 20  * The OP_RowKey 
22aa0 61 6e 64 20 4f 50 5f 52 6f 77 44 61 74 61 20 6f  and OP_RowData o
22ab0 70 63 6f 64 65 73 20 61 6c 77 61 79 73 20 66 6f  pcodes always fo
22ac0 6c 6c 6f 77 20 4f 50 5f 4e 6f 74 45 78 69 73 74  llow OP_NotExist
22ad0 73 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 52 65 77  s or.  ** OP_Rew
22ae0 69 6e 64 2f 4f 70 5f 4e 65 78 74 20 77 69 74 68  ind/Op_Next with
22af0 20 6e 6f 20 69 6e 74 65 72 76 65 6e 69 6e 67 20   no intervening 
22b00 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 74 68 61  instructions tha
22b10 74 20 6d 69 67 68 74 20 69 6e 76 61 6c 69 64 61  t might invalida
22b20 74 65 0a 20 20 2a 2a 20 74 68 65 20 63 75 72 73  te.  ** the curs
22b30 6f 72 2e 20 20 48 65 6e 63 65 20 74 68 65 20 66  or.  Hence the f
22b40 6f 6c 6c 6f 77 69 6e 67 20 73 71 6c 69 74 65 33  ollowing sqlite3
22b50 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
22b60 28 29 20 63 61 6c 6c 20 69 73 20 61 6c 77 61 79  () call is alway
22b70 73 0a 20 20 2a 2a 20 61 20 6e 6f 2d 6f 70 20 61  s.  ** a no-op a
22b80 6e 64 20 63 61 6e 20 6e 65 76 65 72 20 66 61 69  nd can never fai
22b90 6c 2e 20 20 42 75 74 20 77 65 20 6c 65 61 76 65  l.  But we leave
22ba0 20 69 74 20 69 6e 20 70 6c 61 63 65 20 61 73 20   it in place as 
22bb0 61 20 73 61 66 65 74 79 2e 0a 20 20 2a 2f 0a 20  a safety..  */. 
22bc0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
22bd0 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
22be0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
22bf0 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
22c00 28 70 43 29 3b 0a 20 20 69 66 28 20 4e 45 56 45  (pC);.  if( NEVE
22c10 52 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29  R(rc!=SQLITE_OK)
22c20 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
22c30 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 69  e_to_error;..  i
22c40 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  f( pC->isTable==
22c50 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
22c60 20 21 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b   !pC->isTable );
22c70 0a 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63  .    VVA_ONLY(rc
22c80 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72 65 65   =) sqlite3Btree
22c90 4b 65 79 53 69 7a 65 28 70 43 72 73 72 2c 20 26  KeySize(pCrsr, &
22ca0 6e 36 34 29 3b 0a 20 20 20 20 61 73 73 65 72 74  n64);.    assert
22cb0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
22cc0 29 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 62 65  );    /* True be
22cd0 63 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d  cause of CursorM
22ce0 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f  oveto() call abo
22cf0 76 65 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e 36  ve */.    if( n6
22d00 34 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  4>db->aLimit[SQL
22d10 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
22d20 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  ] ){.      goto 
22d30 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20  too_big;.    }. 
22d40 20 20 20 6e 20 3d 20 28 75 33 32 29 6e 36 34 3b     n = (u32)n64;
22d50 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 56  .  }else{.    VV
22d60 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c  A_ONLY(rc =) sql
22d70 69 74 65 33 42 74 72 65 65 44 61 74 61 53 69 7a  ite3BtreeDataSiz
22d80 65 28 70 43 72 73 72 2c 20 26 6e 29 3b 0a 20 20  e(pCrsr, &n);.  
22d90 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
22da0 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a  LITE_OK );    /*
22db0 20 44 61 74 61 53 69 7a 65 28 29 20 63 61 6e 6e   DataSize() cann
22dc0 6f 74 20 66 61 69 6c 20 2a 2f 0a 20 20 20 20 69  ot fail */.    i
22dd0 66 28 20 6e 3e 28 75 33 32 29 64 62 2d 3e 61 4c  f( n>(u32)db->aL
22de0 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
22df0 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
22e00 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
22e10 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28  .    }.  }.  if(
22e20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47   sqlite3VdbeMemG
22e30 72 6f 77 28 70 4f 75 74 2c 20 6e 2c 20 30 29 20  row(pOut, n, 0) 
22e40 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  ){.    goto no_m
22e50 65 6d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  em;.  }.  pOut->
22e60 6e 20 3d 20 6e 3b 0a 20 20 4d 65 6d 53 65 74 54  n = n;.  MemSetT
22e70 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
22e80 4d 5f 42 6c 6f 62 29 3b 0a 20 20 69 66 28 20 70  M_Blob);.  if( p
22e90 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b  C->isTable==0 ){
22ea0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
22eb0 33 42 74 72 65 65 4b 65 79 28 70 43 72 73 72 2c  3BtreeKey(pCrsr,
22ec0 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b   0, n, pOut->z);
22ed0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63  .  }else{.    rc
22ee0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
22ef0 61 74 61 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c  ata(pCrsr, 0, n,
22f00 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 0a 20   pOut->z);.  }. 
22f10 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c   pOut->enc = SQL
22f20 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e  ITE_UTF8;  /* In
22f30 20 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20 69   case the blob i
22f40 73 20 65 76 65 72 20 63 61 73 74 20 74 6f 20 74  s ever cast to t
22f50 65 78 74 20 2a 2f 0a 20 20 55 50 44 41 54 45 5f  ext */.  UPDATE_
22f60 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
22f70 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  t);.  REGISTER_T
22f80 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f  RACE(pOp->p2, pO
22f90 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
22fa0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 69  ./* Opcode: Rowi
22fb0 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  d P1 P2 * * *.**
22fc0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
22fd0 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 53 74 6f  =rowid.**.** Sto
22fe0 72 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  re in register P
22ff0 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69  2 an integer whi
23000 63 68 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66  ch is the key of
23010 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79   the table entry
23020 20 74 68 61 74 0a 2a 2a 20 50 31 20 69 73 20 63   that.** P1 is c
23030 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74  urrently point t
23040 6f 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20  o..**.** P1 can 
23050 62 65 20 65 69 74 68 65 72 20 61 6e 20 6f 72 64  be either an ord
23060 69 6e 61 72 79 20 74 61 62 6c 65 20 6f 72 20 61  inary table or a
23070 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20   virtual table. 
23080 20 54 68 65 72 65 20 75 73 65 64 20 74 6f 0a 2a   There used to.*
23090 2a 20 62 65 20 61 20 73 65 70 61 72 61 74 65 20  * be a separate 
230a0 4f 50 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64 65  OP_VRowid opcode
230b0 20 66 6f 72 20 75 73 65 20 77 69 74 68 20 76 69   for use with vi
230c0 72 74 75 61 6c 20 74 61 62 6c 65 73 2c 20 62 75  rtual tables, bu
230d0 74 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70  t this.** one op
230e0 63 6f 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66  code now works f
230f0 6f 72 20 62 6f 74 68 20 74 61 62 6c 65 20 74 79  or both table ty
23100 70 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  pes..*/.case OP_
23110 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20  Rowid: {        
23120 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
23130 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
23140 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
23150 0a 20 20 69 36 34 20 76 3b 0a 20 20 73 71 6c 69  .  i64 v;.  sqli
23160 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
23170 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
23180 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
23190 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
231a0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
231b0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
231c0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
231d0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
231e0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
231f0 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75  assert( pC->pseu
23200 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 7c 7c  doTableReg==0 ||
23210 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a   pC->nullRow );.
23220 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f    if( pC->nullRo
23230 77 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  w ){.    pOut->f
23240 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
23250 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 65  .    break;.  }e
23260 6c 73 65 20 69 66 28 20 70 43 2d 3e 64 65 66 65  lse if( pC->defe
23270 72 72 65 64 4d 6f 76 65 74 6f 20 29 7b 0a 20 20  rredMoveto ){.  
23280 20 20 76 20 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f    v = pC->moveto
23290 54 61 72 67 65 74 3b 0a 23 69 66 6e 64 65 66 20  Target;.#ifndef 
232a0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
232b0 55 41 4c 54 41 42 4c 45 0a 20 20 7d 65 6c 73 65  UALTABLE.  }else
232c0 20 69 66 28 20 70 43 2d 3e 70 56 74 61 62 43 75   if( pC->pVtabCu
232d0 72 73 6f 72 20 29 7b 0a 20 20 20 20 70 56 74 61  rsor ){.    pVta
232e0 62 20 3d 20 70 43 2d 3e 70 56 74 61 62 43 75 72  b = pC->pVtabCur
232f0 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 20 20  sor->pVtab;.    
23300 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d  pModule = pVtab-
23310 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 61 73  >pModule;.    as
23320 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78  sert( pModule->x
23330 52 6f 77 69 64 20 29 3b 0a 20 20 20 20 72 63 20  Rowid );.    rc 
23340 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69  = pModule->xRowi
23350 64 28 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f  d(pC->pVtabCurso
23360 72 2c 20 26 76 29 3b 0a 20 20 20 20 73 71 6c 69  r, &v);.    sqli
23370 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
23380 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 23  msg(p, pVtab);.#
23390 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
233a0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
233b0 45 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  E */.  }else{.  
233c0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43    assert( pC->pC
233d0 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20  ursor!=0 );.    
233e0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
233f0 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29  CursorMoveto(pC)
23400 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67  ;.    if( rc ) g
23410 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
23420 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69 66 28 20  _error;.    if( 
23430 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
23440 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 70 43   ){.      v = pC
23450 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 20  ->lastRowid;.   
23460 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63   }else{.      rc
23470 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b   = sqlite3BtreeK
23480 65 79 53 69 7a 65 28 70 43 2d 3e 70 43 75 72 73  eySize(pC->pCurs
23490 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 61  or, &v);.      a
234a0 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
234b0 45 5f 4f 4b 20 29 3b 20 20 2f 2a 20 41 6c 77 61  E_OK );  /* Alwa
234c0 79 73 20 73 6f 20 62 65 63 61 75 73 65 20 6f 66  ys so because of
234d0 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20   CursorMoveto() 
234e0 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20 7d 0a 20  above */.    }. 
234f0 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d   }.  pOut->u.i =
23500 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   v;.  break;.}..
23510 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 52  /* Opcode: NullR
23520 6f 77 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  ow P1 * * * *.**
23530 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 63 75 72  .** Move the cur
23540 73 6f 72 20 50 31 20 74 6f 20 61 20 6e 75 6c 6c  sor P1 to a null
23550 20 72 6f 77 2e 20 20 41 6e 79 20 4f 50 5f 43 6f   row.  Any OP_Co
23560 6c 75 6d 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a  lumn operations.
23570 2a 2a 20 74 68 61 74 20 6f 63 63 75 72 20 77 68  ** that occur wh
23580 69 6c 65 20 74 68 65 20 63 75 72 73 6f 72 20 69  ile the cursor i
23590 73 20 6f 6e 20 74 68 65 20 6e 75 6c 6c 20 72 6f  s on the null ro
235a0 77 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a  w will always.**
235b0 20 77 72 69 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a   write a NULL..*
235c0 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f  /.case OP_NullRo
235d0 77 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  w: {.  VdbeCurso
235e0 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74  r *pC;..  assert
235f0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
23600 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
23610 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
23620 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
23630 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
23640 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  );.  pC->nullRow
23650 20 3d 20 31 3b 0a 20 20 70 43 2d 3e 72 6f 77 69   = 1;.  pC->rowi
23660 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20  dIsValid = 0;.  
23670 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
23680 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
23690 20 69 66 28 20 70 43 2d 3e 70 43 75 72 73 6f 72   if( pC->pCursor
236a0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 42   ){.    sqlite3B
236b0 74 72 65 65 43 6c 65 61 72 43 75 72 73 6f 72 28  treeClearCursor(
236c0 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20  pC->pCursor);.  
236d0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
236e0 20 4f 70 63 6f 64 65 3a 20 4c 61 73 74 20 50 31   Opcode: Last P1
236f0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
23700 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66 20  The next use of 
23710 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c  the Rowid or Col
23720 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69 6e 73 74  umn or Next inst
23730 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a  ruction for P1 .
23740 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f  ** will refer to
23750 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20   the last entry 
23760 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
23770 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a  table or index..
23780 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65 20  ** If the table 
23790 6f 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74  or index is empt
237a0 79 20 61 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e  y and P2>0, then
237b0 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
237c0 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50  y to P2..** If P
237d0 32 20 69 73 20 30 20 6f 72 20 69 66 20 74 68 65  2 is 0 or if the
237e0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
237f0 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61  is not empty, fa
23800 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f  ll through.** to
23810 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69   the following i
23820 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  nstruction..*/.c
23830 61 73 65 20 4f 50 5f 4c 61 73 74 3a 20 7b 20 20  ase OP_Last: {  
23840 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
23850 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
23860 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
23870 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  Crsr;.  int res;
23880 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
23890 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
238a0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
238b0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
238c0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
238d0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70  rt( pC!=0 );.  p
238e0 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
238f0 6f 72 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20  or;.  res = 0;. 
23900 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d   assert( pCrsr!=
23910 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  0 );.  rc = sqli
23920 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 72  te3BtreeLast(pCr
23930 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 70 43 2d  sr, &res);.  pC-
23940 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72  >nullRow = (u8)r
23950 65 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72  es;.  pC->deferr
23960 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
23970 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
23980 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
23990 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
239a0 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 4f 70  STALE;.  if( pOp
239b0 2d 3e 70 32 3e 30 20 29 7b 0a 20 20 20 20 56 64  ->p2>0 ){.    Vd
239c0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
239d0 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28  s!=0,2);.    if(
239e0 20 72 65 73 20 29 20 70 63 20 3d 20 70 4f 70 2d   res ) pc = pOp-
239f0 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62  >p2 - 1;.  }.  b
23a00 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63  reak;.}.../* Opc
23a10 6f 64 65 3a 20 53 6f 72 74 20 50 31 20 50 32 20  ode: Sort P1 P2 
23a20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73  * * *.**.** This
23a30 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 65 78 61   opcode does exa
23a40 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 74 68  ctly the same th
23a50 69 6e 67 20 61 73 20 4f 50 5f 52 65 77 69 6e 64  ing as OP_Rewind
23a60 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20   except that.** 
23a70 69 74 20 69 6e 63 72 65 6d 65 6e 74 73 20 61 6e  it increments an
23a80 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20 67 6c   undocumented gl
23a90 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 75 73  obal variable us
23aa0 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67 2e 0a  ed for testing..
23ab0 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67 20 69 73  **.** Sorting is
23ac0 20 61 63 63 6f 6d 70 6c 69 73 68 65 64 20 62 79   accomplished by
23ad0 20 77 72 69 74 69 6e 67 20 72 65 63 6f 72 64 73   writing records
23ae0 20 69 6e 74 6f 20 61 20 73 6f 72 74 69 6e 67 20   into a sorting 
23af0 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65 6e 20 72  index,.** then r
23b00 65 77 69 6e 64 69 6e 67 20 74 68 61 74 20 69 6e  ewinding that in
23b10 64 65 78 20 61 6e 64 20 70 6c 61 79 69 6e 67 20  dex and playing 
23b20 69 74 20 62 61 63 6b 20 66 72 6f 6d 20 62 65 67  it back from beg
23b30 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e 64  inning to.** end
23b40 2e 20 20 57 65 20 75 73 65 20 74 68 65 20 4f 50  .  We use the OP
23b50 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20 69 6e 73  _Sort opcode ins
23b60 74 65 61 64 20 6f 66 20 4f 50 5f 52 65 77 69 6e  tead of OP_Rewin
23b70 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a 2a 20 72  d to do the.** r
23b80 65 77 69 6e 64 69 6e 67 20 73 6f 20 74 68 61 74  ewinding so that
23b90 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69   the global vari
23ba0 61 62 6c 65 20 77 69 6c 6c 20 62 65 20 69 6e 63  able will be inc
23bb0 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a 2a 2a 20  remented and.** 
23bc0 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73  regression tests
23bd0 20 63 61 6e 20 64 65 74 65 72 6d 69 6e 65 20 77   can determine w
23be0 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
23bf0 65 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 0a 2a  e optimizer is.*
23c00 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f 70 74 69  * correctly opti
23c10 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f 72 74 73  mizing out sorts
23c20 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
23c30 74 65 72 53 6f 72 74 3a 20 20 20 20 2f 2a 20 6a  terSort:    /* j
23c40 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ump */.case OP_S
23c50 6f 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ort: {        /*
23c60 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20   jump */.#ifdef 
23c70 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71  SQLITE_TEST.  sq
23c80 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74  lite3_sort_count
23c90 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 65  ++;.  sqlite3_se
23ca0 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65  arch_count--;.#e
23cb0 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f 75 6e 74  ndif.  p->aCount
23cc0 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54  er[SQLITE_STMTST
23cd0 41 54 55 53 5f 53 4f 52 54 5d 2b 2b 3b 0a 20 20  ATUS_SORT]++;.  
23ce0 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
23cf0 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e 64 20 2a  into OP_Rewind *
23d00 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  /.}./* Opcode: R
23d10 65 77 69 6e 64 20 50 31 20 50 32 20 2a 20 2a 20  ewind P1 P2 * * 
23d20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74  *.**.** The next
23d30 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69   use of the Rowi
23d40 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e  d or Column or N
23d50 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
23d60 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20  for P1 .** will 
23d70 72 65 66 65 72 20 74 6f 20 74 68 65 20 66 69 72  refer to the fir
23d80 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20  st entry in the 
23d90 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
23da0 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74  r index..** If t
23db0 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
23dc0 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64 20 50  x is empty and P
23dd0 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69  2>0, then jump i
23de0 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
23df0 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 30 20  ..** If P2 is 0 
23e00 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c 65 20  or if the table 
23e10 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20  or index is not 
23e20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f  empty, fall thro
23e30 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f  ugh.** to the fo
23e40 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74  llowing instruct
23e50 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
23e60 52 65 77 69 6e 64 3a 20 7b 20 20 20 20 20 20 20  Rewind: {       
23e70 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64   /* jump */.  Vd
23e80 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
23e90 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
23ea0 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61  .  int res;..  a
23eb0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
23ec0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
23ed0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
23ee0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
23ef0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
23f00 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
23f10 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d  ( isSorter(pC)==
23f20 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50  (pOp->opcode==OP
23f30 5f 53 6f 72 74 65 72 53 6f 72 74 29 20 29 3b 0a  _SorterSort) );.
23f40 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 69 66 28    res = 1;.  if(
23f50 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 7b   isSorter(pC) ){
23f60 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
23f70 33 56 64 62 65 53 6f 72 74 65 72 52 65 77 69 6e  3VdbeSorterRewin
23f80 64 28 64 62 2c 20 70 43 2c 20 26 72 65 73 29 3b  d(db, pC, &res);
23f90 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 43  .  }else{.    pC
23fa0 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
23fb0 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  r;.    assert( p
23fc0 43 72 73 72 20 29 3b 0a 20 20 20 20 72 63 20 3d  Crsr );.    rc =
23fd0 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 69 72   sqlite3BtreeFir
23fe0 73 74 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b  st(pCrsr, &res);
23ff0 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65  .    pC->deferre
24000 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20  dMoveto = 0;.   
24010 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
24020 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
24030 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56      pC->rowidIsV
24040 61 6c 69 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  alid = 0;.  }.  
24050 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75  pC->nullRow = (u
24060 38 29 72 65 73 3b 0a 20 20 61 73 73 65 72 74 28  8)res;.  assert(
24070 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f   pOp->p2>0 && pO
24080 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a  p->p2<p->nOp );.
24090 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
240a0 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69  n(res!=0,2);.  i
240b0 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63  f( res ){.    pc
240c0 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a   = pOp->p2 - 1;.
240d0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
240e0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74 20  /* Opcode: Next 
240f0 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
24100 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 63 75 72  *.** Advance cur
24110 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69  sor P1 so that i
24120 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
24130 6e 65 78 74 20 6b 65 79 2f 64 61 74 61 20 70 61  next key/data pa
24140 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62  ir in its.** tab
24150 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66  le or index.  If
24160 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f   there are no mo
24170 72 65 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69  re key/value pai
24180 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  rs then fall thr
24190 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66  ough.** to the f
241a0 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63  ollowing instruc
241b0 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68  tion.  But if th
241c0 65 20 63 75 72 73 6f 72 20 61 64 76 61 6e 63 65  e cursor advance
241d0 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c   was successful,
241e0 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  .** jump immedia
241f0 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  tely to P2..**.*
24200 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20  * The P1 cursor 
24210 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20 72 65  must be for a re
24220 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20  al table, not a 
24230 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 50  pseudo-table.  P
24240 31 20 6d 75 73 74 20 68 61 76 65 0a 2a 2a 20 62  1 must have.** b
24250 65 65 6e 20 6f 70 65 6e 65 64 20 70 72 69 6f 72  een opened prior
24260 20 74 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20   to this opcode 
24270 6f 72 20 74 68 65 20 70 72 6f 67 72 61 6d 20 77  or the program w
24280 69 6c 6c 20 73 65 67 66 61 75 6c 74 2e 0a 2a 2a  ill segfault..**
24290 0a 2a 2a 20 54 68 65 20 50 33 20 76 61 6c 75 65  .** The P3 value
242a0 20 69 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68   is a hint to th
242b0 65 20 62 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e  e btree implemen
242c0 74 61 74 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31  tation. If P3==1
242d0 2c 20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20  , that.** means 
242e0 50 31 20 69 73 20 61 6e 20 53 51 4c 20 69 6e 64  P1 is an SQL ind
242f0 65 78 20 61 6e 64 20 74 68 61 74 20 74 68 69 73  ex and that this
24300 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 75   instruction cou
24310 6c 64 20 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20  ld have been.** 
24320 6f 6d 69 74 74 65 64 20 69 66 20 74 68 61 74 20  omitted if that 
24330 69 6e 64 65 78 20 68 61 64 20 62 65 65 6e 20 75  index had been u
24340 6e 69 71 75 65 2e 20 20 50 33 20 69 73 20 75 73  nique.  P3 is us
24350 75 61 6c 6c 79 20 30 2e 20 20 50 33 20 69 73 0a  ually 0.  P3 is.
24360 2a 2a 20 61 6c 77 61 79 73 20 65 69 74 68 65 72  ** always either
24370 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50   0 or 1..**.** P
24380 34 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20 74  4 is always of t
24390 79 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e 20  ype P4_ADVANCE. 
243a0 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69  The function poi
243b0 6e 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a  nter points to.*
243c0 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65  * sqlite3BtreeNe
243d0 78 74 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  xt()..**.** If P
243e0 35 20 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e  5 is positive an
243f0 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  d the jump is ta
24400 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20  ken, then event 
24410 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65  counter.** numbe
24420 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72  r P5-1 in the pr
24430 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
24440 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e   is incremented.
24450 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
24460 20 50 72 65 76 2c 20 4e 65 78 74 49 66 4f 70 65   Prev, NextIfOpe
24470 6e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  n.*/./* Opcode: 
24480 4e 65 78 74 49 66 4f 70 65 6e 20 50 31 20 50 32  NextIfOpen P1 P2
24490 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
244a0 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b  This opcode work
244b0 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f 50 5f 4e  s just like OP_N
244c0 65 78 74 20 65 78 63 65 70 74 20 74 68 61 74 20  ext except that 
244d0 69 66 20 63 75 72 73 6f 72 20 50 31 20 69 73 20  if cursor P1 is 
244e0 6e 6f 74 0a 2a 2a 20 6f 70 65 6e 20 69 74 20 62  not.** open it b
244f0 65 68 61 76 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a  ehaves a no-op..
24500 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72  */./* Opcode: Pr
24510 65 76 20 50 31 20 50 32 20 50 33 20 50 34 20 50  ev P1 P2 P3 P4 P
24520 35 0a 2a 2a 0a 2a 2a 20 42 61 63 6b 20 75 70 20  5.**.** Back up 
24530 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
24540 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74  t it points to t
24550 68 65 20 70 72 65 76 69 6f 75 73 20 6b 65 79 2f  he previous key/
24560 64 61 74 61 20 70 61 69 72 20 69 6e 20 69 74 73  data pair in its
24570 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  .** table or ind
24580 65 78 2e 20 20 49 66 20 74 68 65 72 65 20 69 73  ex.  If there is
24590 20 6e 6f 20 70 72 65 76 69 6f 75 73 20 6b 65 79   no previous key
245a0 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74 68 65  /value pairs the
245b0 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a  n fall through.*
245c0 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * to the followi
245d0 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  ng instruction. 
245e0 20 42 75 74 20 69 66 20 74 68 65 20 63 75 72 73   But if the curs
245f0 6f 72 20 62 61 63 6b 75 70 20 77 61 73 20 73 75  or backup was su
24600 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d  ccessful,.** jum
24610 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
24620 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50   P2..**.** The P
24630 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65  1 cursor must be
24640 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c   for a real tabl
24650 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d  e, not a pseudo-
24660 74 61 62 6c 65 2e 20 20 49 66 20 50 31 20 69 73  table.  If P1 is
24670 0a 2a 2a 20 6e 6f 74 20 6f 70 65 6e 20 74 68 65  .** not open the
24680 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 69  n the behavior i
24690 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a  s undefined..**.
246a0 2a 2a 20 54 68 65 20 50 33 20 76 61 6c 75 65 20  ** The P3 value 
246b0 69 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65  is a hint to the
246c0 20 62 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74   btree implement
246d0 61 74 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c  ation. If P3==1,
246e0 20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50   that.** means P
246f0 31 20 69 73 20 61 6e 20 53 51 4c 20 69 6e 64 65  1 is an SQL inde
24700 78 20 61 6e 64 20 74 68 61 74 20 74 68 69 73 20  x and that this 
24710 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c  instruction coul
24720 64 20 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f  d have been.** o
24730 6d 69 74 74 65 64 20 69 66 20 74 68 61 74 20 69  mitted if that i
24740 6e 64 65 78 20 68 61 64 20 62 65 65 6e 20 75 6e  ndex had been un
24750 69 71 75 65 2e 20 20 50 33 20 69 73 20 75 73 75  ique.  P3 is usu
24760 61 6c 6c 79 20 30 2e 20 20 50 33 20 69 73 0a 2a  ally 0.  P3 is.*
24770 2a 20 61 6c 77 61 79 73 20 65 69 74 68 65 72 20  * always either 
24780 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34  0 or 1..**.** P4
24790 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79   is always of ty
247a0 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54  pe P4_ADVANCE. T
247b0 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e  he function poin
247c0 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a  ter points to.**
247d0 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65   sqlite3BtreePre
247e0 76 69 6f 75 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49  vious()..**.** I
247f0 66 20 50 35 20 69 73 20 70 6f 73 69 74 69 76 65  f P5 is positive
24800 20 61 6e 64 20 74 68 65 20 6a 75 6d 70 20 69 73   and the jump is
24810 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65   taken, then eve
24820 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75  nt counter.** nu
24830 6d 62 65 72 20 50 35 2d 31 20 69 6e 20 74 68 65  mber P5-1 in the
24840 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
24850 65 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  ent is increment
24860 65 64 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ed..*/./* Opcode
24870 3a 20 50 72 65 76 49 66 4f 70 65 6e 20 50 31 20  : PrevIfOpen P1 
24880 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
24890 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f  * This opcode wo
248a0 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f 50  rks just like OP
248b0 5f 50 72 65 76 20 65 78 63 65 70 74 20 74 68 61  _Prev except tha
248c0 74 20 69 66 20 63 75 72 73 6f 72 20 50 31 20 69  t if cursor P1 i
248d0 73 20 6e 6f 74 0a 2a 2a 20 6f 70 65 6e 20 69 74  s not.** open it
248e0 20 62 65 68 61 76 65 73 20 61 20 6e 6f 2d 6f 70   behaves a no-op
248f0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
24900 74 65 72 4e 65 78 74 3a 20 7b 20 20 2f 2a 20 6a  terNext: {  /* j
24910 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ump */.  VdbeCur
24920 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72  sor *pC;.  int r
24930 65 73 3b 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61  es;..  pC = p->a
24940 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
24950 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65   assert( isSorte
24960 72 28 70 43 29 20 29 3b 0a 20 20 72 63 20 3d 20  r(pC) );.  rc = 
24970 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
24980 72 4e 65 78 74 28 64 62 2c 20 70 43 2c 20 26 72  rNext(db, pC, &r
24990 65 73 29 3b 0a 20 20 67 6f 74 6f 20 6e 65 78 74  es);.  goto next
249a0 5f 74 61 69 6c 3b 0a 63 61 73 65 20 4f 50 5f 50  _tail;.case OP_P
249b0 72 65 76 49 66 4f 70 65 6e 3a 20 20 20 20 2f 2a  revIfOpen:    /*
249c0 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50   jump */.case OP
249d0 5f 4e 65 78 74 49 66 4f 70 65 6e 3a 20 20 20 20  _NextIfOpen:    
249e0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28  /* jump */.  if(
249f0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
24a00 31 5d 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20  1]==0 ) break;. 
24a10 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
24a20 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 65 76   */.case OP_Prev
24a30 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
24a40 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65  mp */.case OP_Ne
24a50 78 74 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  xt:          /* 
24a60 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74  jump */.  assert
24a70 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
24a80 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
24a90 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
24aa0 70 4f 70 2d 3e 70 35 3c 41 72 72 61 79 53 69 7a  pOp->p5<ArraySiz
24ab0 65 28 70 2d 3e 61 43 6f 75 6e 74 65 72 29 20 29  e(p->aCounter) )
24ac0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
24ad0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 72 65  r[pOp->p1];.  re
24ae0 73 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61  s = pOp->p3;.  a
24af0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
24b00 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
24b10 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
24b20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
24b30 3e 70 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >pCursor );.  as
24b40 73 65 72 74 28 20 72 65 73 3d 3d 30 20 7c 7c 20  sert( res==0 || 
24b50 28 72 65 73 3d 3d 31 20 26 26 20 70 43 2d 3e 69  (res==1 && pC->i
24b60 73 54 61 62 6c 65 3d 3d 30 29 20 29 3b 0a 20 20  sTable==0) );.  
24b70 74 65 73 74 63 61 73 65 28 20 72 65 73 3d 3d 31  testcase( res==1
24b80 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
24b90 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65  p->opcode!=OP_Ne
24ba0 78 74 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41  xt || pOp->p4.xA
24bb0 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42  dvance==sqlite3B
24bc0 74 72 65 65 4e 65 78 74 20 29 3b 0a 20 20 61 73  treeNext );.  as
24bd0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
24be0 65 21 3d 4f 50 5f 50 72 65 76 20 7c 7c 20 70 4f  e!=OP_Prev || pO
24bf0 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d  p->p4.xAdvance==
24c00 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76  sqlite3BtreePrev
24c10 69 6f 75 73 20 29 3b 0a 20 20 61 73 73 65 72 74  ious );.  assert
24c20 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f  ( pOp->opcode!=O
24c30 50 5f 4e 65 78 74 49 66 4f 70 65 6e 20 7c 7c 20  P_NextIfOpen || 
24c40 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65  pOp->p4.xAdvance
24c50 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65  ==sqlite3BtreeNe
24c60 78 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  xt );.  assert( 
24c70 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
24c80 50 72 65 76 49 66 4f 70 65 6e 20 7c 7c 20 70 4f  PrevIfOpen || pO
24c90 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d  p->p4.xAdvance==
24ca0 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76  sqlite3BtreePrev
24cb0 69 6f 75 73 29 3b 0a 20 20 72 63 20 3d 20 70 4f  ious);.  rc = pO
24cc0 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 28 70  p->p4.xAdvance(p
24cd0 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65 73  C->pCursor, &res
24ce0 29 3b 0a 6e 65 78 74 5f 74 61 69 6c 3a 0a 20 20  );.next_tail:.  
24cf0 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
24d00 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
24d10 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
24d20 28 72 65 73 3d 3d 30 2c 32 29 3b 0a 20 20 69 66  (res==0,2);.  if
24d30 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20  ( res==0 ){.    
24d40 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b  pC->nullRow = 0;
24d50 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
24d60 32 20 2d 20 31 3b 0a 20 20 20 20 70 2d 3e 61 43  2 - 1;.    p->aC
24d70 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e 70 35 5d 2b  ounter[pOp->p5]+
24d80 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  +;.#ifdef SQLITE
24d90 5f 54 45 53 54 0a 20 20 20 20 73 71 6c 69 74 65  _TEST.    sqlite
24da0 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b  3_search_count++
24db0 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73 65  ;.#endif.  }else
24dc0 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  {.    pC->nullRo
24dd0 77 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 70 43 2d  w = 1;.  }.  pC-
24de0 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
24df0 30 3b 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f  0;.  goto check_
24e00 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d  for_interrupt;.}
24e10 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  ../* Opcode: Idx
24e20 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33 20  Insert P1 P2 P3 
24e30 2a 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  * P5.** Synopsis
24e40 3a 20 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a  : key=r[P2].**.*
24e50 2a 20 52 65 67 69 73 74 65 72 20 50 32 20 68 6f  * Register P2 ho
24e60 6c 64 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78  lds an SQL index
24e70 20 6b 65 79 20 6d 61 64 65 20 75 73 69 6e 67 20   key made using 
24e80 74 68 65 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f 72  the.** MakeRecor
24e90 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e 20  d instructions. 
24ea0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 72 69   This opcode wri
24eb0 74 65 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a 20  tes that key.** 
24ec0 69 6e 74 6f 20 74 68 65 20 69 6e 64 65 78 20 50  into the index P
24ed0 31 2e 20 20 44 61 74 61 20 66 6f 72 20 74 68 65  1.  Data for the
24ee0 20 65 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a 2a   entry is nil..*
24ef0 2a 0a 2a 2a 20 50 33 20 69 73 20 61 20 66 6c 61  *.** P3 is a fla
24f00 67 20 74 68 61 74 20 70 72 6f 76 69 64 65 73 20  g that provides 
24f10 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 2d  a hint to the b-
24f20 74 72 65 65 20 6c 61 79 65 72 20 74 68 61 74 20  tree layer that 
24f30 74 68 69 73 0a 2a 2a 20 69 6e 73 65 72 74 20 69  this.** insert i
24f40 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61  s likely to be a
24f50 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20  n append..**.** 
24f60 49 66 20 50 35 20 68 61 73 20 74 68 65 20 4f 50  If P5 has the OP
24f70 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 62 69 74  FLAG_NCHANGE bit
24f80 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 63   set, then the c
24f90 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73  hange counter is
24fa0 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20  .** incremented 
24fb0 62 79 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  by this instruct
24fc0 69 6f 6e 2e 20 20 49 66 20 74 68 65 20 4f 50 46  ion.  If the OPF
24fd0 4c 41 47 5f 4e 43 48 41 4e 47 45 20 62 69 74 20  LAG_NCHANGE bit 
24fe0 69 73 20 63 6c 65 61 72 2c 0a 2a 2a 20 74 68 65  is clear,.** the
24ff0 6e 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75  n the change cou
25000 6e 74 65 72 20 69 73 20 75 6e 63 68 61 6e 67 65  nter is unchange
25010 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68  d..**.** If P5 h
25020 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53  as the OPFLAG_US
25030 45 53 45 45 4b 52 45 53 55 4c 54 20 62 69 74 20  ESEEKRESULT bit 
25040 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 63 75  set, then the cu
25050 72 73 6f 72 20 6d 75 73 74 20 68 61 76 65 0a 2a  rsor must have.*
25060 2a 20 6a 75 73 74 20 64 6f 6e 65 20 61 20 73 65  * just done a se
25070 65 6b 20 74 6f 20 74 68 65 20 73 70 6f 74 20 77  ek to the spot w
25080 68 65 72 65 20 74 68 65 20 6e 65 77 20 65 6e 74  here the new ent
25090 72 79 20 69 73 20 74 6f 20 62 65 20 69 6e 73 65  ry is to be inse
250a0 72 74 65 64 2e 0a 2a 2a 20 54 68 69 73 20 66 6c  rted..** This fl
250b0 61 67 20 61 76 6f 69 64 73 20 64 6f 69 6e 67 20  ag avoids doing 
250c0 61 6e 20 65 78 74 72 61 20 73 65 65 6b 2e 0a 2a  an extra seek..*
250d0 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
250e0 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73  ction only works
250f0 20 66 6f 72 20 69 6e 64 69 63 65 73 2e 20 20 54   for indices.  T
25100 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e  he equivalent in
25110 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72  struction.** for
25120 20 74 61 62 6c 65 73 20 69 73 20 4f 50 5f 49 6e   tables is OP_In
25130 73 65 72 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  sert..*/.case OP
25140 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 3a 20 20  _SorterInsert:  
25150 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 63       /* in2 */.c
25160 61 73 65 20 4f 50 5f 49 64 78 49 6e 73 65 72 74  ase OP_IdxInsert
25170 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e  : {        /* in
25180 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  2 */.  VdbeCurso
25190 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
251a0 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
251b0 6e 4b 65 79 3b 0a 20 20 63 6f 6e 73 74 20 63 68  nKey;.  const ch
251c0 61 72 20 2a 7a 4b 65 79 3b 0a 0a 20 20 61 73 73  ar *zKey;..  ass
251d0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
251e0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
251f0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
25200 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
25210 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
25220 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
25230 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 28 70  isSorter(pC)==(p
25240 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53  Op->opcode==OP_S
25250 6f 72 74 65 72 49 6e 73 65 72 74 29 20 29 3b 0a  orterInsert) );.
25260 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
25270 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
25280 74 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26  t( pIn2->flags &
25290 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 70   MEM_Blob );.  p
252a0 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
252b0 6f 72 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  or;.  if( pOp->p
252c0 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  5 & OPFLAG_NCHAN
252d0 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b  GE ) p->nChange+
252e0 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72  +;.  assert( pCr
252f0 73 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  sr!=0 );.  asser
25300 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  t( pC->isTable==
25310 30 20 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61  0 );.  rc = Expa
25320 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b 0a 20 20  ndBlob(pIn2);.  
25330 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
25340 4b 20 29 7b 0a 20 20 20 20 69 66 28 20 69 73 53  K ){.    if( isS
25350 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20 20  orter(pC) ){.   
25360 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
25370 64 62 65 53 6f 72 74 65 72 57 72 69 74 65 28 64  dbeSorterWrite(d
25380 62 2c 20 70 43 2c 20 70 49 6e 32 29 3b 0a 20 20  b, pC, pIn2);.  
25390 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e    }else{.      n
253a0 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20  Key = pIn2->n;. 
253b0 20 20 20 20 20 7a 4b 65 79 20 3d 20 70 49 6e 32       zKey = pIn2
253c0 2d 3e 7a 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  ->z;.      rc = 
253d0 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65  sqlite3BtreeInse
253e0 72 74 28 70 43 72 73 72 2c 20 7a 4b 65 79 2c 20  rt(pCrsr, zKey, 
253f0 6e 4b 65 79 2c 20 22 22 2c 20 30 2c 20 30 2c 20  nKey, "", 0, 0, 
25400 70 4f 70 2d 3e 70 33 2c 20 0a 20 20 20 20 20 20  pOp->p3, .      
25410 20 20 20 20 28 28 70 4f 70 2d 3e 70 35 20 26 20      ((pOp->p5 & 
25420 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
25430 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b  SULT) ? pC->seek
25440 52 65 73 75 6c 74 20 3a 20 30 29 0a 20 20 20 20  Result : 0).    
25450 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 61        );.      a
25460 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
25470 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
25480 20 20 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53        pC->cacheS
25490 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
254a0 41 4c 45 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  ALE;.    }.  }. 
254b0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
254c0 63 6f 64 65 3a 20 49 64 78 44 65 6c 65 74 65 20  code: IdxDelete 
254d0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
254e0 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
254f0 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 54 68 65  P2@P3].**.** The
25500 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50 33 20 72   content of P3 r
25510 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69 6e  egisters startin
25520 67 20 61 74 20 72 65 67 69 73 74 65 72 20 50 32  g at register P2
25530 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70 61   form.** an unpa
25540 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
25550 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 6d 6f  This opcode remo
25560 76 65 73 20 74 68 61 74 20 65 6e 74 72 79 20 66  ves that entry f
25570 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69 6e 64 65  rom the .** inde
25580 78 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73  x opened by curs
25590 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f  or P1..*/.case O
255a0 50 5f 49 64 78 44 65 6c 65 74 65 3a 20 7b 0a 20  P_IdxDelete: {. 
255b0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
255c0 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
255d0 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  sr;.  int res;. 
255e0 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
255f0 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  r;..  assert( pO
25600 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 61 73 73  p->p3>0 );.  ass
25610 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26  ert( pOp->p2>0 &
25620 26 20 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70  & pOp->p2+pOp->p
25630 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  3<=(p->nMem-p->n
25640 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 61  Cursor)+1 );.  a
25650 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
25660 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
25670 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
25680 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
25690 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
256a0 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20  C!=0 );.  pCrsr 
256b0 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20  = pC->pCursor;. 
256c0 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d   assert( pCrsr!=
256d0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
256e0 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 72  Op->p5==0 );.  r
256f0 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e  .pKeyInfo = pC->
25700 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72 2e 6e 46  pKeyInfo;.  r.nF
25710 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d  ield = (u16)pOp-
25720 3e 70 33 3b 0a 20 20 72 2e 64 65 66 61 75 6c 74  >p3;.  r.default
25730 5f 72 63 20 3d 20 30 3b 0a 20 20 72 2e 61 4d 65  _rc = 0;.  r.aMe
25740 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
25750 32 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  2];.#ifdef SQLIT
25760 45 5f 44 45 42 55 47 0a 20 20 7b 20 69 6e 74 20  E_DEBUG.  { int 
25770 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e  i; for(i=0; i<r.
25780 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73  nField; i++) ass
25790 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
257a0 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d  &r.aMem[i]) ); }
257b0 0a 23 65 6e 64 69 66 0a 20 20 72 63 20 3d 20 73  .#endif.  rc = s
257c0 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
257d0 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c  oUnpacked(pCrsr,
257e0 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29   &r, 0, 0, &res)
257f0 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
25800 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20  TE_OK && res==0 
25810 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
25820 74 65 33 42 74 72 65 65 44 65 6c 65 74 65 28 70  te3BtreeDelete(p
25830 43 72 73 72 29 3b 0a 20 20 7d 0a 20 20 61 73 73  Crsr);.  }.  ass
25840 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
25850 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
25860 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
25870 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
25880 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
25890 63 6f 64 65 3a 20 49 64 78 52 6f 77 69 64 20 50  code: IdxRowid P
258a0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
258b0 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f  nopsis: r[P2]=ro
258c0 77 69 64 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  wid.**.** Write 
258d0 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
258e0 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63   an integer whic
258f0 68 20 69 73 20 74 68 65 20 6c 61 73 74 20 65 6e  h is the last en
25900 74 72 79 20 69 6e 20 74 68 65 20 72 65 63 6f 72  try in the recor
25910 64 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e 64 20  d at.** the end 
25920 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79  of the index key
25930 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 20 63   pointed to by c
25940 75 72 73 6f 72 20 50 31 2e 20 20 54 68 69 73 20  ursor P1.  This 
25950 69 6e 74 65 67 65 72 20 73 68 6f 75 6c 64 20 62  integer should b
25960 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64 20 6f  e.** the rowid o
25970 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72  f the table entr
25980 79 20 74 6f 20 77 68 69 63 68 20 74 68 69 73 20  y to which this 
25990 69 6e 64 65 78 20 65 6e 74 72 79 20 70 6f 69 6e  index entry poin
259a0 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ts..**.** See al
259b0 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b 65 52  so: Rowid, MakeR
259c0 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ecord..*/.case O
259d0 50 5f 49 64 78 52 6f 77 69 64 3a 20 7b 20 20 20  P_IdxRowid: {   
259e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
259f0 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
25a00 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
25a10 73 72 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  sr;.  VdbeCursor
25a20 20 2a 70 43 3b 0a 20 20 69 36 34 20 72 6f 77 69   *pC;.  i64 rowi
25a30 64 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  d;..  assert( pO
25a40 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
25a50 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
25a60 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
25a70 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
25a80 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
25a90 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75   pCrsr = pC->pCu
25aa0 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20  rsor;.  assert( 
25ab0 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 70 4f  pCrsr!=0 );.  pO
25ac0 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
25ad0 4e 75 6c 6c 3b 0a 20 20 72 63 20 3d 20 73 71 6c  Null;.  rc = sql
25ae0 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f  ite3VdbeCursorMo
25af0 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20  veto(pC);.  if( 
25b00 4e 45 56 45 52 28 72 63 29 20 29 20 67 6f 74 6f  NEVER(rc) ) goto
25b10 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
25b20 72 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ror;.  assert( p
25b30 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
25b40 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  o==0 );.  assert
25b50 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  ( pC->isTable==0
25b60 20 29 3b 0a 20 20 69 66 28 20 21 70 43 2d 3e 6e   );.  if( !pC->n
25b70 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 72 6f  ullRow ){.    ro
25b80 77 69 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74  wid = 0;  /* Not
25b90 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75   needed.  Only u
25ba0 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61  sed to silence a
25bb0 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20   warning. */.   
25bc0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
25bd0 65 49 64 78 52 6f 77 69 64 28 64 62 2c 20 70 43  eIdxRowid(db, pC
25be0 72 73 72 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20  rsr, &rowid);.  
25bf0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
25c00 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  _OK ){.      got
25c10 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
25c20 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20  rror;.    }.    
25c30 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f 77 69  pOut->u.i = rowi
25c40 64 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  d;.    pOut->fla
25c50 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
25c60 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
25c70 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 45 20 50   Opcode: IdxGE P
25c80 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
25c90 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
25ca0 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68  [P3@P4].**.** Th
25cb0 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61  e P4 register va
25cc0 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77  lues beginning w
25cd0 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75  ith P3 form an u
25ce0 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a  npacked index .*
25cf0 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73  * key that omits
25d00 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
25d10 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20  .  Compare this 
25d20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73  key value agains
25d30 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20  t the index .** 
25d40 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65  that P1 is curre
25d50 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f  ntly pointing to
25d60 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50  , ignoring the P
25d70 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f  RIMARY KEY or RO
25d80 57 49 44 20 0a 2a 2a 20 66 69 65 6c 64 73 20 61  WID .** fields a
25d90 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a  t the end..**.**
25da0 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78   If the P1 index
25db0 20 65 6e 74 72 79 20 69 73 20 67 72 65 61 74 65   entry is greate
25dc0 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
25dd0 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  to the key value
25de0 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  .** then jump to
25df0 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20   P2.  Otherwise 
25e00 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
25e10 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
25e20 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
25e30 64 65 3a 20 49 64 78 47 54 20 50 31 20 50 32 20  de: IdxGT P1 P2 
25e40 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
25e50 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
25e60 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  4].**.** The P4 
25e70 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20  register values 
25e80 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
25e90 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  3 form an unpack
25ea0 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79  ed index .** key
25eb0 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20   that omits the 
25ec0 50 52 49 4d 41 52 59 20 4b 45 59 2e 20 20 43 6f  PRIMARY KEY.  Co
25ed0 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76  mpare this key v
25ee0 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68 65  alue against the
25ef0 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20   index .** that 
25f00 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  P1 is currently 
25f10 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e  pointing to, ign
25f20 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52  oring the PRIMAR
25f30 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 20 0a  Y KEY or ROWID .
25f40 2a 2a 20 66 69 65 6c 64 73 20 61 74 20 74 68 65  ** fields at the
25f50 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74   end..**.** If t
25f60 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72  he P1 index entr
25f70 79 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  y is greater tha
25f80 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 0a  n the key value.
25f90 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  ** then jump to 
25fa0 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20 66  P2.  Otherwise f
25fb0 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
25fc0 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
25fd0 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ion..*/./* Opcod
25fe0 65 3a 20 49 64 78 4c 54 20 50 31 20 50 32 20 50  e: IdxLT P1 P2 P
25ff0 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
26000 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
26010 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72  ].**.** The P4 r
26020 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62  egister values b
26030 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33  eginning with P3
26040 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65   form an unpacke
26050 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20  d index .** key 
26060 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50  that omits the P
26070 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f  RIMARY KEY or RO
26080 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74 68  WID.  Compare th
26090 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61  is key value aga
260a0 69 6e 73 74 0a 2a 2a 20 74 68 65 20 69 6e 64 65  inst.** the inde
260b0 78 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72  x that P1 is cur
260c0 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20  rently pointing 
260d0 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65  to, ignoring the
260e0 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 0a   PRIMARY KEY or.
260f0 2a 2a 20 52 4f 57 49 44 20 6f 6e 20 74 68 65 20  ** ROWID on the 
26100 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20  P1 index..**.** 
26110 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78 20  If the P1 index 
26120 65 6e 74 72 79 20 69 73 20 6c 65 73 73 20 74 68  entry is less th
26130 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  an the key value
26140 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
26150 2e 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 20 66  ..** Otherwise f
26160 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
26170 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
26180 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ion..*/./* Opcod
26190 65 3a 20 49 64 78 4c 45 20 50 31 20 50 32 20 50  e: IdxLE P1 P2 P
261a0 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
261b0 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
261c0 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72  ].**.** The P4 r
261d0 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62  egister values b
261e0 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33  eginning with P3
261f0 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65   form an unpacke
26200 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20  d index .** key 
26210 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50  that omits the P
26220 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f  RIMARY KEY or RO
26230 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74 68  WID.  Compare th
26240 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61  is key value aga
26250 69 6e 73 74 0a 2a 2a 20 74 68 65 20 69 6e 64 65  inst.** the inde
26260 78 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72  x that P1 is cur
26270 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20  rently pointing 
26280 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65  to, ignoring the
26290 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 0a   PRIMARY KEY or.
262a0 2a 2a 20 52 4f 57 49 44 20 6f 6e 20 74 68 65 20  ** ROWID on the 
262b0 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20  P1 index..**.** 
262c0 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78 20  If the P1 index 
262d0 65 6e 74 72 79 20 69 73 20 6c 65 73 73 20 74 68  entry is less th
262e0 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
262f0 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65  he key value the
26300 6e 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e  n jump.** to P2.
26310 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20   Otherwise fall 
26320 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
26330 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
26340 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c  .*/.case OP_IdxL
26350 45 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  E:          /* j
26360 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ump */.case OP_I
26370 64 78 47 54 3a 20 20 20 20 20 20 20 20 20 20 2f  dxGT:          /
26380 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f  * jump */.case O
26390 50 5f 49 64 78 4c 54 3a 20 20 20 20 20 20 20 20  P_IdxLT:        
263a0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73    /* jump */.cas
263b0 65 20 4f 50 5f 49 64 78 47 45 3a 20 20 7b 20 20  e OP_IdxGE:  {  
263c0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
263d0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
263e0 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55  ;.  int res;.  U
263f0 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b  npackedRecord r;
26400 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
26410 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
26420 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
26430 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
26440 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
26450 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
26460 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72 64  ssert( pC->isOrd
26470 65 72 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74  ered );.  assert
26480 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30  ( pC->pCursor!=0
26490 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
264a0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
264b0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
264c0 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f  pOp->p5==0 || pO
264d0 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 61 73  p->p5==1 );.  as
264e0 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
264f0 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
26500 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
26510 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72 2e  ->pKeyInfo;.  r.
26520 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f  nField = (u16)pO
26530 70 2d 3e 70 34 2e 69 3b 0a 20 20 69 66 28 20 70  p->p4.i;.  if( p
26540 4f 70 2d 3e 6f 70 63 6f 64 65 3c 4f 50 5f 49 64  Op->opcode<OP_Id
26550 78 4c 54 20 29 7b 0a 20 20 20 20 61 73 73 65 72  xLT ){.    asser
26560 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
26570 4f 50 5f 49 64 78 4c 45 20 7c 7c 20 70 4f 70 2d  OP_IdxLE || pOp-
26580 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47  >opcode==OP_IdxG
26590 54 20 29 3b 0a 20 20 20 20 72 2e 64 65 66 61 75  T );.    r.defau
265a0 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20 7d 65  lt_rc = -1;.  }e
265b0 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
265c0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
265d0 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f  _IdxGE || pOp->o
265e0 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20  pcode==OP_IdxLT 
265f0 29 3b 0a 20 20 20 20 72 2e 64 65 66 61 75 6c 74  );.    r.default
26600 5f 72 63 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 72  _rc = 0;.  }.  r
26610 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f  .aMem = &aMem[pO
26620 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53  p->p3];.#ifdef S
26630 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 7b 20  QLITE_DEBUG.  { 
26640 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20  int i; for(i=0; 
26650 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29  i<r.nField; i++)
26660 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
26670 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20  lid(&r.aMem[i]) 
26680 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 72 65  ); }.#endif.  re
26690 73 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e  s = 0;  /* Not n
266a0 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65  eeded.  Only use
266b0 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77  d to silence a w
266c0 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20  arning. */.  rc 
266d0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78  = sqlite3VdbeIdx
266e0 4b 65 79 43 6f 6d 70 61 72 65 28 70 43 2c 20 26  KeyCompare(pC, &
266f0 72 2c 20 26 72 65 73 29 3b 0a 20 20 61 73 73 65  r, &res);.  asse
26700 72 74 28 20 28 4f 50 5f 49 64 78 4c 45 26 31 29  rt( (OP_IdxLE&1)
26710 3d 3d 28 4f 50 5f 49 64 78 4c 54 26 31 29 20 26  ==(OP_IdxLT&1) &
26720 26 20 28 4f 50 5f 49 64 78 47 45 26 31 29 3d 3d  & (OP_IdxGE&1)==
26730 28 4f 50 5f 49 64 78 47 54 26 31 29 20 29 3b 0a  (OP_IdxGT&1) );.
26740 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 63 6f    if( (pOp->opco
26750 64 65 26 31 29 3d 3d 28 4f 50 5f 49 64 78 4c 54  de&1)==(OP_IdxLT
26760 26 31 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72  &1) ){.    asser
26770 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
26780 4f 50 5f 49 64 78 4c 45 20 7c 7c 20 70 4f 70 2d  OP_IdxLE || pOp-
26790 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c  >opcode==OP_IdxL
267a0 54 20 29 3b 0a 20 20 20 20 72 65 73 20 3d 20 2d  T );.    res = -
267b0 72 65 73 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  res;.  }else{.  
267c0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
267d0 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20  pcode==OP_IdxGE 
267e0 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
267f0 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20  OP_IdxGT );.    
26800 72 65 73 2b 2b 3b 0a 20 20 7d 0a 20 20 56 64 62  res++;.  }.  Vdb
26810 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
26820 3e 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73  >0,2);.  if( res
26830 3e 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  >0 ){.    pc = p
26840 4f 70 2d 3e 70 32 20 2d 20 31 20 3b 0a 20 20 7d  Op->p2 - 1 ;.  }
26850 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
26860 4f 70 63 6f 64 65 3a 20 44 65 73 74 72 6f 79 20  Opcode: Destroy 
26870 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
26880 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20 65 6e 74  ** Delete an ent
26890 69 72 65 20 64 61 74 61 62 61 73 65 20 74 61 62  ire database tab
268a0 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73  le or index whos
268b0 65 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 74  e root page in t
268c0 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66  he database.** f
268d0 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79 20  ile is given by 
268e0 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61  P1..**.** The ta
268f0 62 6c 65 20 62 65 69 6e 67 20 64 65 73 74 72 6f  ble being destro
26900 79 65 64 20 69 73 20 69 6e 20 74 68 65 20 6d 61  yed is in the ma
26910 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
26920 20 69 66 20 50 33 3d 3d 30 2e 20 20 49 66 0a 2a   if P3==0.  If.*
26930 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20 74 68 65  * P3==1 then the
26940 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65   table to be cle
26950 61 72 20 69 73 20 69 6e 20 74 68 65 20 61 75 78  ar is in the aux
26960 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20  iliary database 
26970 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20  file.** that is 
26980 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61  used to store ta
26990 62 6c 65 73 20 63 72 65 61 74 65 20 75 73 69 6e  bles create usin
269a0 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41  g CREATE TEMPORA
269b0 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20  RY TABLE..**.** 
269c0 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73  If AUTOVACUUM is
269d0 20 65 6e 61 62 6c 65 64 20 74 68 65 6e 20 69 74   enabled then it
269e0 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74 68 61   is possible tha
269f0 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f 74 20 70  t another root p
26a00 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20 62 65 20  age.** might be 
26a10 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20 6e  moved into the n
26a20 65 77 6c 79 20 64 65 6c 65 74 65 64 20 72 6f 6f  ewly deleted roo
26a30 74 20 70 61 67 65 20 69 6e 20 6f 72 64 65 72 20  t page in order 
26a40 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20 72  to keep all.** r
26a50 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e 74 69 67  oot pages contig
26a60 75 6f 75 73 20 61 74 20 74 68 65 20 62 65 67 69  uous at the begi
26a70 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 64 61 74  nning of the dat
26a80 61 62 61 73 65 2e 20 20 54 68 65 20 66 6f 72 6d  abase.  The form
26a90 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 74  er.** value of t
26aa0 68 65 20 72 6f 6f 74 20 70 61 67 65 20 74 68 61  he root page tha
26ab0 74 20 6d 6f 76 65 64 20 2d 20 69 74 73 20 76 61  t moved - its va
26ac0 6c 75 65 20 62 65 66 6f 72 65 20 74 68 65 20 6d  lue before the m
26ad0 6f 76 65 20 6f 63 63 75 72 72 65 64 20 2d 0a 2a  ove occurred -.*
26ae0 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  * is stored in r
26af0 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20  egister P2.  If 
26b00 6e 6f 20 70 61 67 65 20 0a 2a 2a 20 6d 6f 76 65  no page .** move
26b10 6d 65 6e 74 20 77 61 73 20 72 65 71 75 69 72 65  ment was require
26b20 64 20 28 62 65 63 61 75 73 65 20 74 68 65 20 74  d (because the t
26b30 61 62 6c 65 20 62 65 69 6e 67 20 64 72 6f 70 70  able being dropp
26b40 65 64 20 77 61 73 20 61 6c 72 65 61 64 79 20 0a  ed was already .
26b50 2a 2a 20 74 68 65 20 6c 61 73 74 20 6f 6e 65 20  ** the last one 
26b60 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 29  in the database)
26b70 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73 20   then a zero is 
26b80 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
26b90 65 72 20 50 32 2e 0a 2a 2a 20 49 66 20 41 55 54  er P2..** If AUT
26ba0 4f 56 41 43 55 55 4d 20 69 73 20 64 69 73 61 62  OVACUUM is disab
26bb0 6c 65 64 20 74 68 65 6e 20 61 20 7a 65 72 6f 20  led then a zero 
26bc0 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
26bd0 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
26be0 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65 61 72 0a  See also: Clear.
26bf0 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 73 74 72  */.case OP_Destr
26c00 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20 6f 75 74  oy: {     /* out
26c10 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
26c20 20 20 69 6e 74 20 69 4d 6f 76 65 64 3b 0a 20 20    int iMoved;.  
26c30 69 6e 74 20 69 43 6e 74 3b 0a 20 20 56 64 62 65  int iCnt;.  Vdbe
26c40 20 2a 70 56 64 62 65 3b 0a 20 20 69 6e 74 20 69   *pVdbe;.  int i
26c50 44 62 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  Db;..  assert( p
26c60 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
26c70 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
26c80 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
26c90 45 0a 20 20 69 43 6e 74 20 3d 20 30 3b 0a 20 20  E.  iCnt = 0;.  
26ca0 66 6f 72 28 70 56 64 62 65 3d 64 62 2d 3e 70 56  for(pVdbe=db->pV
26cb0 64 62 65 3b 20 70 56 64 62 65 3b 20 70 56 64 62  dbe; pVdbe; pVdb
26cc0 65 20 3d 20 70 56 64 62 65 2d 3e 70 4e 65 78 74  e = pVdbe->pNext
26cd0 29 7b 0a 20 20 20 20 69 66 28 20 70 56 64 62 65  ){.    if( pVdbe
26ce0 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41  ->magic==VDBE_MA
26cf0 47 49 43 5f 52 55 4e 20 26 26 20 70 56 64 62 65  GIC_RUN && pVdbe
26d00 2d 3e 62 49 73 52 65 61 64 65 72 20 0a 20 20 20  ->bIsReader .   
26d10 20 20 26 26 20 70 56 64 62 65 2d 3e 69 6e 56 74    && pVdbe->inVt
26d20 61 62 4d 65 74 68 6f 64 3c 32 20 26 26 20 70 56  abMethod<2 && pV
26d30 64 62 65 2d 3e 70 63 3e 3d 30 20 0a 20 20 20 20  dbe->pc>=0 .    
26d40 29 7b 0a 20 20 20 20 20 20 69 43 6e 74 2b 2b 3b  ){.      iCnt++;
26d50 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6c 73 65  .    }.  }.#else
26d60 0a 20 20 69 43 6e 74 20 3d 20 64 62 2d 3e 6e 56  .  iCnt = db->nV
26d70 64 62 65 52 65 61 64 3b 0a 23 65 6e 64 69 66 0a  dbeRead;.#endif.
26d80 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
26d90 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28 20  MEM_Null;.  if( 
26da0 69 43 6e 74 3e 31 20 29 7b 0a 20 20 20 20 72 63  iCnt>1 ){.    rc
26db0 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44   = SQLITE_LOCKED
26dc0 3b 0a 20 20 20 20 70 2d 3e 65 72 72 6f 72 41 63  ;.    p->errorAc
26dd0 74 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72 74 3b  tion = OE_Abort;
26de0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 44  .  }else{.    iD
26df0 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20  b = pOp->p3;.   
26e00 20 61 73 73 65 72 74 28 20 69 43 6e 74 3d 3d 31   assert( iCnt==1
26e10 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
26e20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 20 26 20  (p->btreeMask & 
26e30 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c 69  (((yDbMask)1)<<i
26e40 44 62 29 29 21 3d 30 20 29 3b 0a 20 20 20 20 69  Db))!=0 );.    i
26e50 4d 6f 76 65 64 20 3d 20 30 3b 20 20 2f 2a 20 4e  Moved = 0;  /* N
26e60 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79  ot needed.  Only
26e70 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61   to silence a wa
26e80 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63  rning. */.    rc
26e90 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
26ea0 72 6f 70 54 61 62 6c 65 28 64 62 2d 3e 61 44 62  ropTable(db->aDb
26eb0 5b 69 44 62 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e  [iDb].pBt, pOp->
26ec0 70 31 2c 20 26 69 4d 6f 76 65 64 29 3b 0a 20 20  p1, &iMoved);.  
26ed0 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
26ee0 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75  MEM_Int;.    pOu
26ef0 74 2d 3e 75 2e 69 20 3d 20 69 4d 6f 76 65 64 3b  t->u.i = iMoved;
26f00 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
26f10 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a  OMIT_AUTOVACUUM.
26f20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
26f30 54 45 5f 4f 4b 20 26 26 20 69 4d 6f 76 65 64 21  TE_OK && iMoved!
26f40 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =0 ){.      sqli
26f50 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64  te3RootPageMoved
26f60 28 64 62 2c 20 69 44 62 2c 20 69 4d 6f 76 65 64  (db, iDb, iMoved
26f70 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20  , pOp->p1);.    
26f80 20 20 2f 2a 20 41 6c 6c 20 4f 50 5f 44 65 73 74    /* All OP_Dest
26f90 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f  roy operations o
26fa0 63 63 75 72 20 6f 6e 20 74 68 65 20 73 61 6d 65  ccur on the same
26fb0 20 62 74 72 65 65 20 2a 2f 0a 20 20 20 20 20 20   btree */.      
26fc0 61 73 73 65 72 74 28 20 72 65 73 65 74 53 63 68  assert( resetSch
26fd0 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 30 20 7c 7c  emaOnFault==0 ||
26fe0 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61   resetSchemaOnFa
26ff0 75 6c 74 3d 3d 69 44 62 2b 31 20 29 3b 0a 20 20  ult==iDb+1 );.  
27000 20 20 20 20 72 65 73 65 74 53 63 68 65 6d 61 4f      resetSchemaO
27010 6e 46 61 75 6c 74 20 3d 20 69 44 62 2b 31 3b 0a  nFault = iDb+1;.
27020 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d      }.#endif.  }
27030 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
27040 4f 70 63 6f 64 65 3a 20 43 6c 65 61 72 20 50 31  Opcode: Clear P1
27050 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c   P2 P3.**.** Del
27060 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73  ete all contents
27070 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
27080 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
27090 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 0a  whose root page.
270a0 2a 2a 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ** in the databa
270b0 73 65 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e  se file is given
270c0 20 62 79 20 50 31 2e 20 20 42 75 74 2c 20 75 6e   by P1.  But, un
270d0 6c 69 6b 65 20 44 65 73 74 72 6f 79 2c 20 64 6f  like Destroy, do
270e0 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65 20 74   not.** remove t
270f0 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
27100 78 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  x from the datab
27110 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  ase file..**.** 
27120 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  The table being 
27130 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20  clear is in the 
27140 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
27150 6c 65 20 69 66 20 50 32 3d 3d 30 2e 20 20 49 66  le if P2==0.  If
27160 0a 2a 2a 20 50 32 3d 3d 31 20 74 68 65 6e 20 74  .** P2==1 then t
27170 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63  he table to be c
27180 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61  lear is in the a
27190 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
271a0 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69  e file.** that i
271b0 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
271c0 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73  tables create us
271d0 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f  ing CREATE TEMPO
271e0 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a  RARY TABLE..**.*
271f0 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75  * If the P3 valu
27200 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  e is non-zero, t
27210 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 72 65  hen the table re
27220 66 65 72 72 65 64 20 74 6f 20 6d 75 73 74 20 62  ferred to must b
27230 65 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20 74  e an.** intkey t
27240 61 62 6c 65 20 28 61 6e 20 53 51 4c 20 74 61 62  able (an SQL tab
27250 6c 65 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78  le, not an index
27260 29 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  ). In this case 
27270 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 0a  the row change .
27280 2a 2a 20 63 6f 75 6e 74 20 69 73 20 69 6e 63 72  ** count is incr
27290 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e  emented by the n
272a0 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
272b0 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
272c0 20 63 6c 65 61 72 65 64 2e 20 0a 2a 2a 20 49 66   cleared. .** If
272d0 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74   P3 is greater t
272e0 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74  han zero, then t
272f0 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20  he value stored 
27300 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69  in register P3 i
27310 73 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63 72 65 6d  s.** also increm
27320 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d  ented by the num
27330 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
27340 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63  he table being c
27350 6c 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65  leared..**.** Se
27360 65 20 61 6c 73 6f 3a 20 44 65 73 74 72 6f 79 0a  e also: Destroy.
27370 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 65 61 72  */.case OP_Clear
27380 3a 20 7b 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67  : {.  int nChang
27390 65 3b 0a 20 0a 20 20 6e 43 68 61 6e 67 65 20 3d  e;. .  nChange =
273a0 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   0;.  assert( p-
273b0 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
273c0 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
273d0 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62  reeMask & (((yDb
273e0 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 32  Mask)1)<<pOp->p2
273f0 29 29 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20  ))!=0 );.  rc = 
27400 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61  sqlite3BtreeClea
27410 72 54 61 62 6c 65 28 0a 20 20 20 20 20 20 64 62  rTable(.      db
27420 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e 70  ->aDb[pOp->p2].p
27430 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 28 70 4f  Bt, pOp->p1, (pO
27440 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61 6e 67 65  p->p3 ? &nChange
27450 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20 69 66 28   : 0).  );.  if(
27460 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20   pOp->p3 ){.    
27470 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d 20 6e 43  p->nChange += nC
27480 68 61 6e 67 65 3b 0a 20 20 20 20 69 66 28 20 70  hange;.    if( p
27490 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20 20 20  Op->p3>0 ){.    
274a0 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
274b0 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  alid(&aMem[pOp->
274c0 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 6d 65  p3]) );.      me
274d0 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
274e0 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  , &aMem[pOp->p3]
274f0 29 3b 0a 20 20 20 20 20 20 61 4d 65 6d 5b 70 4f  );.      aMem[pO
27500 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43  p->p3].u.i += nC
27510 68 61 6e 67 65 3b 0a 20 20 20 20 7d 0a 20 20 7d  hange;.    }.  }
27520 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
27530 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65 54 61  Opcode: CreateTa
27540 62 6c 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ble P1 P2 * * *.
27550 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
27560 32 5d 3d 72 6f 6f 74 20 69 44 62 3d 50 31 0a 2a  2]=root iDb=P1.*
27570 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20  *.** Allocate a 
27580 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 74 68 65  new table in the
27590 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
275a0 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20  ile if P1==0 or 
275b0 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69  in the.** auxili
275c0 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  ary database fil
275d0 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e  e if P1==1 or in
275e0 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74   an attached dat
275f0 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31  abase if.** P1>1
27600 2e 20 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f  .  Write the roo
27610 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66  t page number of
27620 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69   the new table i
27630 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  nto.** register 
27640 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66  P2.**.** The dif
27650 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20  ference between 
27660 61 20 74 61 62 6c 65 20 61 6e 64 20 61 6e 20 69  a table and an i
27670 6e 64 65 78 20 69 73 20 74 68 69 73 3a 20 20 41  ndex is this:  A
27680 20 74 61 62 6c 65 20 6d 75 73 74 0a 2a 2a 20 68   table must.** h
27690 61 76 65 20 61 20 34 2d 62 79 74 65 20 69 6e 74  ave a 4-byte int
276a0 65 67 65 72 20 6b 65 79 20 61 6e 64 20 63 61 6e  eger key and can
276b0 20 68 61 76 65 20 61 72 62 69 74 72 61 72 79 20   have arbitrary 
276c0 64 61 74 61 2e 20 20 41 6e 20 69 6e 64 65 78 0a  data.  An index.
276d0 2a 2a 20 68 61 73 20 61 6e 20 61 72 62 69 74 72  ** has an arbitr
276e0 61 72 79 20 6b 65 79 20 62 75 74 20 6e 6f 20 64  ary key but no d
276f0 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ata..**.** See a
27700 6c 73 6f 3a 20 43 72 65 61 74 65 49 6e 64 65 78  lso: CreateIndex
27710 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .*/./* Opcode: C
27720 72 65 61 74 65 49 6e 64 65 78 20 50 31 20 50 32  reateIndex P1 P2
27730 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
27740 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74 20 69  is: r[P2]=root i
27750 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f  Db=P1.**.** Allo
27760 63 61 74 65 20 61 20 6e 65 77 20 69 6e 64 65 78  cate a new index
27770 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   in the main dat
27780 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31  abase file if P1
27790 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a  ==0 or in the.**
277a0 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
277b0 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d  ase file if P1==
277c0 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63  1 or in an attac
277d0 68 65 64 20 64 61 74 61 62 61 73 65 20 69 66 0a  hed database if.
277e0 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20  ** P1>1.  Write 
277f0 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75  the root page nu
27800 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20  mber of the new 
27810 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65  table into.** re
27820 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
27830 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69   See documentati
27840 6f 6e 20 6f 6e 20 4f 50 5f 43 72 65 61 74 65 54  on on OP_CreateT
27850 61 62 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f  able for additio
27860 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
27870 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61  .*/.case OP_Crea
27880 74 65 49 6e 64 65 78 3a 20 20 20 20 20 20 20 20  teIndex:        
27890 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
278a0 65 6c 65 61 73 65 20 2a 2f 0a 63 61 73 65 20 4f  elease */.case O
278b0 50 5f 43 72 65 61 74 65 54 61 62 6c 65 3a 20 7b  P_CreateTable: {
278c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
278d0 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
278e0 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 69 6e    int pgno;.  in
278f0 74 20 66 6c 61 67 73 3b 0a 20 20 44 62 20 2a 70  t flags;.  Db *p
27900 44 62 3b 0a 0a 20 20 70 67 6e 6f 20 3d 20 30 3b  Db;..  pgno = 0;
27910 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
27920 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
27930 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
27940 73 65 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d  sert( (p->btreeM
27950 61 73 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b  ask & (((yDbMask
27960 29 31 29 3c 3c 70 4f 70 2d 3e 70 31 29 29 21 3d  )1)<<pOp->p1))!=
27970 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
27980 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
27990 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44  .  pDb = &db->aD
279a0 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  b[pOp->p1];.  as
279b0 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21 3d  sert( pDb->pBt!=
279c0 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  0 );.  if( pOp->
279d0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 72 65 61 74  opcode==OP_Creat
279e0 65 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a  eTable ){.    /*
279f0 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 49   flags = BTREE_I
27a00 4e 54 4b 45 59 3b 20 2a 2f 0a 20 20 20 20 66 6c  NTKEY; */.    fl
27a10 61 67 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b  ags = BTREE_INTK
27a20 45 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  EY;.  }else{.   
27a30 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 42   flags = BTREE_B
27a40 4c 4f 42 4b 45 59 3b 0a 20 20 7d 0a 20 20 72 63  LOBKEY;.  }.  rc
27a50 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
27a60 72 65 61 74 65 54 61 62 6c 65 28 70 44 62 2d 3e  reateTable(pDb->
27a70 70 42 74 2c 20 26 70 67 6e 6f 2c 20 66 6c 61 67  pBt, &pgno, flag
27a80 73 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20  s);.  pOut->u.i 
27a90 3d 20 70 67 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b  = pgno;.  break;
27aa0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .}../* Opcode: P
27ab0 61 72 73 65 53 63 68 65 6d 61 20 50 31 20 2a 20  arseSchema P1 * 
27ac0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61  * P4 *.**.** Rea
27ad0 64 20 61 6e 64 20 70 61 72 73 65 20 61 6c 6c 20  d and parse all 
27ae0 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65  entries from the
27af0 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 74   SQLITE_MASTER t
27b00 61 62 6c 65 20 6f 66 20 64 61 74 61 62 61 73 65  able of database
27b10 20 50 31 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63   P1.** that matc
27b20 68 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  h the WHERE clau
27b30 73 65 20 50 34 2e 20 0a 2a 2a 0a 2a 2a 20 54 68  se P4. .**.** Th
27b40 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
27b50 73 20 74 68 65 20 70 61 72 73 65 72 20 74 6f 20  s the parser to 
27b60 63 72 65 61 74 65 20 61 20 6e 65 77 20 76 69 72  create a new vir
27b70 74 75 61 6c 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a  tual machine,.**
27b80 20 74 68 65 6e 20 72 75 6e 73 20 74 68 65 20 6e   then runs the n
27b90 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  ew virtual machi
27ba0 6e 65 2e 20 20 49 74 20 69 73 20 74 68 75 73 20  ne.  It is thus 
27bb0 61 20 72 65 2d 65 6e 74 72 61 6e 74 20 6f 70 63  a re-entrant opc
27bc0 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ode..*/.case OP_
27bd0 50 61 72 73 65 53 63 68 65 6d 61 3a 20 7b 0a 20  ParseSchema: {. 
27be0 20 69 6e 74 20 69 44 62 3b 0a 20 20 63 6f 6e 73   int iDb;.  cons
27bf0 74 20 63 68 61 72 20 2a 7a 4d 61 73 74 65 72 3b  t char *zMaster;
27c00 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20  .  char *zSql;. 
27c10 20 49 6e 69 74 44 61 74 61 20 69 6e 69 74 44 61   InitData initDa
27c20 74 61 3b 0a 0a 20 20 2f 2a 20 41 6e 79 20 70 72  ta;..  /* Any pr
27c30 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
27c40 20 74 68 61 74 20 69 6e 76 6f 6b 65 73 20 74 68   that invokes th
27c50 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 68  is opcode will h
27c60 6f 6c 64 20 6d 75 74 65 78 65 73 0a 20 20 2a 2a  old mutexes.  **
27c70 20 6f 6e 20 65 76 65 72 79 20 62 74 72 65 65 2e   on every btree.
27c80 20 20 54 68 69 73 20 69 73 20 61 20 70 72 65 72    This is a prer
27c90 65 71 75 69 73 69 74 65 20 66 6f 72 20 69 6e 76  equisite for inv
27ca0 6f 6b 69 6e 67 20 0a 20 20 2a 2a 20 73 71 6c 69  oking .  ** sqli
27cb0 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28  te3InitCallback(
27cc0 29 2e 0a 20 20 2a 2f 0a 23 69 66 64 65 66 20 53  )..  */.#ifdef S
27cd0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 66 6f  QLITE_DEBUG.  fo
27ce0 72 28 69 44 62 3d 30 3b 20 69 44 62 3c 64 62 2d  r(iDb=0; iDb<db-
27cf0 3e 6e 44 62 3b 20 69 44 62 2b 2b 29 7b 0a 20 20  >nDb; iDb++){.  
27d00 20 20 61 73 73 65 72 74 28 20 69 44 62 3d 3d 31    assert( iDb==1
27d10 20 7c 7c 20 73 71 6c 69 74 65 33 42 74 72 65 65   || sqlite3Btree
27d20 48 6f 6c 64 73 4d 75 74 65 78 28 64 62 2d 3e 61  HoldsMutex(db->a
27d30 44 62 5b 69 44 62 5d 2e 70 42 74 29 20 29 3b 0a  Db[iDb].pBt) );.
27d40 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 69 44    }.#endif..  iD
27d50 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61  b = pOp->p1;.  a
27d60 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26  ssert( iDb>=0 &&
27d70 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a   iDb<db->nDb );.
27d80 20 20 61 73 73 65 72 74 28 20 44 62 48 61 73 50    assert( DbHasP
27d90 72 6f 70 65 72 74 79 28 64 62 2c 20 69 44 62 2c  roperty(db, iDb,
27da0 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64   DB_SchemaLoaded
27db0 29 20 29 3b 0a 20 20 2f 2a 20 55 73 65 64 20 74  ) );.  /* Used t
27dc0 6f 20 62 65 20 61 20 63 6f 6e 64 69 74 69 6f 6e  o be a condition
27dd0 61 6c 20 2a 2f 20 7b 0a 20 20 20 20 7a 4d 61 73  al */ {.    zMas
27de0 74 65 72 20 3d 20 53 43 48 45 4d 41 5f 54 41 42  ter = SCHEMA_TAB
27df0 4c 45 28 69 44 62 29 3b 0a 20 20 20 20 69 6e 69  LE(iDb);.    ini
27e00 74 44 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a 20  tData.db = db;. 
27e10 20 20 20 69 6e 69 74 44 61 74 61 2e 69 44 62 20     initData.iDb 
27e20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 20 20 69  = pOp->p1;.    i
27e30 6e 69 74 44 61 74 61 2e 70 7a 45 72 72 4d 73 67  nitData.pzErrMsg
27e40 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a   = &p->zErrMsg;.
27e50 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74      zSql = sqlit
27e60 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a 20 20  e3MPrintf(db,.  
27e70 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d       "SELECT nam
27e80 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c  e, rootpage, sql
27e90 20 46 52 4f 4d 20 27 25 71 27 2e 25 73 20 57 48   FROM '%q'.%s WH
27ea0 45 52 45 20 25 73 20 4f 52 44 45 52 20 42 59 20  ERE %s ORDER BY 
27eb0 72 6f 77 69 64 22 2c 0a 20 20 20 20 20 20 20 64  rowid",.       d
27ec0 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d  b->aDb[iDb].zNam
27ed0 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f 70 2d  e, zMaster, pOp-
27ee0 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 69 66 28 20  >p4.z);.    if( 
27ef0 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20  zSql==0 ){.     
27f00 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d   rc = SQLITE_NOM
27f10 45 4d 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  EM;.    }else{. 
27f20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d       assert( db-
27f30 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20 29 3b  >init.busy==0 );
27f40 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e  .      db->init.
27f50 62 75 73 79 20 3d 20 31 3b 0a 20 20 20 20 20 20  busy = 1;.      
27f60 69 6e 69 74 44 61 74 61 2e 72 63 20 3d 20 53 51  initData.rc = SQ
27f70 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 61  LITE_OK;.      a
27f80 73 73 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c 6c  ssert( !db->mall
27f90 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20  ocFailed );.    
27fa0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65    rc = sqlite3_e
27fb0 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20 73 71  xec(db, zSql, sq
27fc0 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
27fd0 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c 20 30 29  k, &initData, 0)
27fe0 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d  ;.      if( rc==
27ff0 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72 63 20 3d  SQLITE_OK ) rc =
28000 20 69 6e 69 74 44 61 74 61 2e 72 63 3b 0a 20 20   initData.rc;.  
28010 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
28020 65 28 64 62 2c 20 7a 53 71 6c 29 3b 0a 20 20 20  e(db, zSql);.   
28030 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79     db->init.busy
28040 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a   = 0;.    }.  }.
28050 20 20 69 66 28 20 72 63 20 29 20 73 71 6c 69 74    if( rc ) sqlit
28060 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61  e3ResetAllSchema
28070 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62  sOfConnection(db
28080 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
28090 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20  ITE_NOMEM ){.   
280a0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
280b0 7d 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a  }.  break;  .}..
280c0 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
280d0 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45  ITE_OMIT_ANALYZE
280e0 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f 61  )./* Opcode: Loa
280f0 64 41 6e 61 6c 79 73 69 73 20 50 31 20 2a 20 2a  dAnalysis P1 * *
28100 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20   * *.**.** Read 
28110 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31  the sqlite_stat1
28120 20 74 61 62 6c 65 20 66 6f 72 20 64 61 74 61 62   table for datab
28130 61 73 65 20 50 31 20 61 6e 64 20 6c 6f 61 64 20  ase P1 and load 
28140 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f  the content.** o
28150 66 20 74 68 61 74 20 74 61 62 6c 65 20 69 6e 74  f that table int
28160 6f 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 69  o the internal i
28170 6e 64 65 78 20 68 61 73 68 20 74 61 62 6c 65 2e  ndex hash table.
28180 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73    This will caus
28190 65 0a 2a 2a 20 74 68 65 20 61 6e 61 6c 79 73 69  e.** the analysi
281a0 73 20 74 6f 20 62 65 20 75 73 65 64 20 77 68 65  s to be used whe
281b0 6e 20 70 72 65 70 61 72 69 6e 67 20 61 6c 6c 20  n preparing all 
281c0 73 75 62 73 65 71 75 65 6e 74 20 71 75 65 72 69  subsequent queri
281d0 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c  es..*/.case OP_L
281e0 6f 61 64 41 6e 61 6c 79 73 69 73 3a 20 7b 0a 20  oadAnalysis: {. 
281f0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
28200 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
28210 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 72 63 20 3d  b->nDb );.  rc =
28220 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73   sqlite3Analysis
28230 4c 6f 61 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31  Load(db, pOp->p1
28240 29 3b 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a  );.  break;  .}.
28250 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e  #endif /* !defin
28260 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
28270 4e 41 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f  NALYZE) */../* O
28280 70 63 6f 64 65 3a 20 44 72 6f 70 54 61 62 6c 65  pcode: DropTable
28290 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
282a0 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e  ** Remove the in
282b0 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72  ternal (in-memor
282c0 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72  y) data structur
282d0 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65  es that describe
282e0 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 6e 61  .** the table na
282f0 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61  med P4 in databa
28300 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20  se P1.  This is 
28310 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74  called after a t
28320 61 62 6c 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70  able.** is dropp
28330 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b  ed in order to k
28340 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  eep the internal
28350 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
28360 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61  of the.** schema
28370 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68   consistent with
28380 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b   what is on disk
28390 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f  ..*/.case OP_Dro
283a0 70 54 61 62 6c 65 3a 20 7b 0a 20 20 73 71 6c 69  pTable: {.  sqli
283b0 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
283c0 74 65 54 61 62 6c 65 28 64 62 2c 20 70 4f 70 2d  teTable(db, pOp-
283d0 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  >p1, pOp->p4.z);
283e0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
283f0 4f 70 63 6f 64 65 3a 20 44 72 6f 70 49 6e 64 65  Opcode: DropInde
28400 78 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  x P1 * * P4 *.**
28410 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69  .** Remove the i
28420 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f  nternal (in-memo
28430 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75  ry) data structu
28440 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62  res that describ
28450 65 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 6e  e.** the index n
28460 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62  amed P4 in datab
28470 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73  ase P1.  This is
28480 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 6e   called after an
28490 20 69 6e 64 65 78 0a 2a 2a 20 69 73 20 64 72 6f   index.** is dro
284a0 70 70 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f  pped in order to
284b0 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e   keep the intern
284c0 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  al representatio
284d0 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65  n of the.** sche
284e0 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69  ma consistent wi
284f0 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69  th what is on di
28500 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  sk..*/.case OP_D
28510 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73 71  ropIndex: {.  sq
28520 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
28530 6c 65 74 65 49 6e 64 65 78 28 64 62 2c 20 70 4f  leteIndex(db, pO
28540 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
28550 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
28560 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 72  * Opcode: DropTr
28570 69 67 67 65 72 20 50 31 20 2a 20 2a 20 50 34 20  igger P1 * * P4 
28580 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74  *.**.** Remove t
28590 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d  he internal (in-
285a0 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72  memory) data str
285b0 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73  uctures that des
285c0 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 72 69  cribe.** the tri
285d0 67 67 65 72 20 6e 61 6d 65 64 20 50 34 20 69 6e  gger named P4 in
285e0 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54   database P1.  T
285f0 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66  his is called af
28600 74 65 72 20 61 20 74 72 69 67 67 65 72 0a 2a 2a  ter a trigger.**
28610 20 69 73 20 64 72 6f 70 70 65 64 20 69 6e 20 6f   is dropped in o
28620 72 64 65 72 20 74 6f 20 6b 65 65 70 20 74 68 65  rder to keep the
28630 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73   internal repres
28640 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a  entation of the.
28650 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73  ** schema consis
28660 74 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69  tent with what i
28670 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61  s on disk..*/.ca
28680 73 65 20 4f 50 5f 44 72 6f 70 54 72 69 67 67 65  se OP_DropTrigge
28690 72 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e  r: {.  sqlite3Un
286a0 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69  linkAndDeleteTri
286b0 67 67 65 72 28 64 62 2c 20 70 4f 70 2d 3e 70 31  gger(db, pOp->p1
286c0 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
286d0 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64  break;.}...#ifnd
286e0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49  ef SQLITE_OMIT_I
286f0 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 2f  NTEGRITY_CHECK./
28700 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 72  * Opcode: Integr
28710 69 74 79 43 6b 20 50 31 20 50 32 20 50 33 20 2a  ityCk P1 P2 P3 *
28720 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20   P5.**.** Do an 
28730 61 6e 61 6c 79 73 69 73 20 6f 66 20 74 68 65 20  analysis of the 
28740 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 64  currently open d
28750 61 74 61 62 61 73 65 2e 20 20 53 74 6f 72 65 20  atabase.  Store 
28760 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  in.** register P
28770 31 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 6e  1 the text of an
28780 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 64   error message d
28790 65 73 63 72 69 62 69 6e 67 20 61 6e 79 20 70 72  escribing any pr
287a0 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f  oblems..** If no
287b0 20 70 72 6f 62 6c 65 6d 73 20 61 72 65 20 66 6f   problems are fo
287c0 75 6e 64 2c 20 73 74 6f 72 65 20 61 20 4e 55 4c  und, store a NUL
287d0 4c 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  L in register P1
287e0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69  ..**.** The regi
287f0 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73  ster P3 contains
28800 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d   the maximum num
28810 62 65 72 20 6f 66 20 61 6c 6c 6f 77 65 64 20 65  ber of allowed e
28820 72 72 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73  rrors..** At mos
28830 74 20 72 65 67 28 50 33 29 20 65 72 72 6f 72 73  t reg(P3) errors
28840 20 77 69 6c 6c 20 62 65 20 72 65 70 6f 72 74 65   will be reporte
28850 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77  d..** In other w
28860 6f 72 64 73 2c 20 74 68 65 20 61 6e 61 6c 79 73  ords, the analys
28870 69 73 20 73 74 6f 70 73 20 61 73 20 73 6f 6f 6e  is stops as soon
28880 20 61 73 20 72 65 67 28 50 31 29 20 65 72 72 6f   as reg(P1) erro
28890 72 73 20 61 72 65 20 0a 2a 2a 20 73 65 65 6e 2e  rs are .** seen.
288a0 20 20 52 65 67 28 50 31 29 20 69 73 20 75 70 64    Reg(P1) is upd
288b0 61 74 65 64 20 77 69 74 68 20 74 68 65 20 6e 75  ated with the nu
288c0 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72  mber of errors r
288d0 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20  emaining..**.** 
288e0 54 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75  The root page nu
288f0 6d 62 65 72 73 20 6f 66 20 61 6c 6c 20 74 61 62  mbers of all tab
28900 6c 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62  les in the datab
28910 61 73 65 20 61 72 65 20 69 6e 74 65 67 65 72 0a  ase are integer.
28920 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  ** stored in reg
28930 28 50 31 29 2c 20 72 65 67 28 50 31 2b 31 29 2c  (P1), reg(P1+1),
28940 20 72 65 67 28 50 31 2b 32 29 2c 20 2e 2e 2e 2e   reg(P1+2), ....
28950 20 20 54 68 65 72 65 20 61 72 65 20 50 32 20 74    There are P2 t
28960 61 62 6c 65 73 0a 2a 2a 20 74 6f 74 61 6c 2e 0a  ables.** total..
28970 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e  **.** If P5 is n
28980 6f 74 20 7a 65 72 6f 2c 20 74 68 65 20 63 68 65  ot zero, the che
28990 63 6b 20 69 73 20 64 6f 6e 65 20 6f 6e 20 74 68  ck is done on th
289a0 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  e auxiliary data
289b0 62 61 73 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f  base.** file, no
289c0 74 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  t the main datab
289d0 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  ase file..**.** 
289e0 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75  This opcode is u
289f0 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74  sed to implement
28a00 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 5f 63   the integrity_c
28a10 68 65 63 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a  heck pragma..*/.
28a20 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 72 69 74  case OP_Integrit
28a30 79 43 6b 3a 20 7b 0a 20 20 69 6e 74 20 6e 52 6f  yCk: {.  int nRo
28a40 6f 74 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ot;      /* Numb
28a50 65 72 20 6f 66 20 74 61 62 6c 65 73 20 74 6f 20  er of tables to 
28a60 63 68 65 63 6b 2e 20 20 28 4e 75 6d 62 65 72 20  check.  (Number 
28a70 6f 66 20 72 6f 6f 74 20 70 61 67 65 73 2e 29 20  of root pages.) 
28a80 2a 2f 0a 20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b  */.  int *aRoot;
28a90 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66       /* Array of
28aa0 20 72 6f 6f 74 70 61 67 65 20 6e 75 6d 62 65 72   rootpage number
28ab0 73 20 66 6f 72 20 74 61 62 6c 65 73 20 74 6f 20  s for tables to 
28ac0 62 65 20 63 68 65 63 6b 65 64 20 2a 2f 0a 20 20  be checked */.  
28ad0 69 6e 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20  int j;          
28ae0 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20  /* Loop counter 
28af0 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20  */.  int nErr;  
28b00 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
28b10 66 20 65 72 72 6f 72 73 20 72 65 70 6f 72 74 65  f errors reporte
28b20 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20  d */.  char *z; 
28b30 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f         /* Text o
28b40 66 20 74 68 65 20 65 72 72 6f 72 20 72 65 70 6f  f the error repo
28b50 72 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45  rt */.  Mem *pnE
28b60 72 72 3b 20 20 20 20 20 2f 2a 20 52 65 67 69 73  rr;     /* Regis
28b70 74 65 72 20 6b 65 65 70 69 6e 67 20 74 72 61 63  ter keeping trac
28b80 6b 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61  k of errors rema
28b90 69 6e 69 6e 67 20 2a 2f 0a 0a 20 20 61 73 73 65  ining */..  asse
28ba0 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
28bb0 20 29 3b 0a 20 20 6e 52 6f 6f 74 20 3d 20 70 4f   );.  nRoot = pO
28bc0 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28  p->p2;.  assert(
28bd0 20 6e 52 6f 6f 74 3e 30 20 29 3b 0a 20 20 61 52   nRoot>0 );.  aR
28be0 6f 6f 74 20 3d 20 73 71 6c 69 74 65 33 44 62 4d  oot = sqlite3DbM
28bf0 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73 69 7a  allocRaw(db, siz
28c00 65 6f 66 28 69 6e 74 29 2a 28 6e 52 6f 6f 74 2b  eof(int)*(nRoot+
28c10 31 29 20 29 3b 0a 20 20 69 66 28 20 61 52 6f 6f  1) );.  if( aRoo
28c20 74 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  t==0 ) goto no_m
28c30 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  em;.  assert( pO
28c40 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
28c50 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p3<=(p->nMem-p->
28c60 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 6e  nCursor) );.  pn
28c70 45 72 72 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Err = &aMem[pOp-
28c80 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p3];.  assert( 
28c90 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20  (pnErr->flags & 
28ca0 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20  MEM_Int)!=0 );. 
28cb0 20 61 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d   assert( (pnErr-
28cc0 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74  >flags & (MEM_St
28cd0 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20  r|MEM_Blob))==0 
28ce0 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  );.  pIn1 = &aMe
28cf0 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f  m[pOp->p1];.  fo
28d00 72 28 6a 3d 30 3b 20 6a 3c 6e 52 6f 6f 74 3b 20  r(j=0; j<nRoot; 
28d10 6a 2b 2b 29 7b 0a 20 20 20 20 61 52 6f 6f 74 5b  j++){.    aRoot[
28d20 6a 5d 20 3d 20 28 69 6e 74 29 73 71 6c 69 74 65  j] = (int)sqlite
28d30 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 26 70  3VdbeIntValue(&p
28d40 49 6e 31 5b 6a 5d 29 3b 0a 20 20 7d 0a 20 20 61  In1[j]);.  }.  a
28d50 52 6f 6f 74 5b 6a 5d 20 3d 20 30 3b 0a 20 20 61  Root[j] = 0;.  a
28d60 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 64  ssert( pOp->p5<d
28d70 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
28d80 72 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73  rt( (p->btreeMas
28d90 6b 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31  k & (((yDbMask)1
28da0 29 3c 3c 70 4f 70 2d 3e 70 35 29 29 21 3d 30 20  )<<pOp->p5))!=0 
28db0 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33  );.  z = sqlite3
28dc0 42 74 72 65 65 49 6e 74 65 67 72 69 74 79 43 68  BtreeIntegrityCh
28dd0 65 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  eck(db->aDb[pOp-
28de0 3e 70 35 5d 2e 70 42 74 2c 20 61 52 6f 6f 74 2c  >p5].pBt, aRoot,
28df0 20 6e 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20 20   nRoot,.        
28e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28e10 20 20 20 20 20 20 20 20 20 28 69 6e 74 29 70 6e           (int)pn
28e20 45 72 72 2d 3e 75 2e 69 2c 20 26 6e 45 72 72 29  Err->u.i, &nErr)
28e30 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65  ;.  sqlite3DbFre
28e40 65 28 64 62 2c 20 61 52 6f 6f 74 29 3b 0a 20 20  e(db, aRoot);.  
28e50 70 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45  pnErr->u.i -= nE
28e60 72 72 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  rr;.  sqlite3Vdb
28e70 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31  eMemSetNull(pIn1
28e80 29 3b 0a 20 20 69 66 28 20 6e 45 72 72 3d 3d 30  );.  if( nErr==0
28e90 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
28ea0 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65 20  z==0 );.  }else 
28eb0 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20  if( z==0 ){.    
28ec0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
28ed0 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65  else{.    sqlite
28ee0 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70  3VdbeMemSetStr(p
28ef0 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49  In1, z, -1, SQLI
28f00 54 45 5f 55 54 46 38 2c 20 73 71 6c 69 74 65 33  TE_UTF8, sqlite3
28f10 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55 50  _free);.  }.  UP
28f20 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
28f30 45 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74  E(pIn1);.  sqlit
28f40 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
28f50 64 69 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f 64  ding(pIn1, encod
28f60 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ing);.  break;.}
28f70 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
28f80 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59  E_OMIT_INTEGRITY
28f90 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70  _CHECK */../* Op
28fa0 63 6f 64 65 3a 20 52 6f 77 53 65 74 41 64 64 20  code: RowSetAdd 
28fb0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
28fc0 79 6e 6f 70 73 69 73 3a 20 20 72 6f 77 73 65 74  ynopsis:  rowset
28fd0 28 50 31 29 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  (P1)=r[P2].**.**
28fe0 20 49 6e 73 65 72 74 20 74 68 65 20 69 6e 74 65   Insert the inte
28ff0 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20 62  ger value held b
29000 79 20 72 65 67 69 73 74 65 72 20 50 32 20 69 6e  y register P2 in
29010 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 69 6e 64  to a boolean ind
29020 65 78 0a 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65  ex.** held in re
29030 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a  gister P1..**.**
29040 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61   An assertion fa
29050 69 6c 73 20 69 66 20 50 32 20 69 73 20 6e 6f 74  ils if P2 is not
29060 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a   an integer..*/.
29070 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 41 64  case OP_RowSetAd
29080 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e  d: {       /* in
29090 31 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31  1, in2 */.  pIn1
290a0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
290b0 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  ];.  pIn2 = &aMe
290c0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
290d0 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61  sert( (pIn2->fla
290e0 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
290f0 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d   );.  if( (pIn1-
29100 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
29110 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73  Set)==0 ){.    s
29120 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
29130 52 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20  RowSet(pIn1);.  
29140 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
29150 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
29160 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
29170 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  m;.  }.  sqlite3
29180 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e  RowSetInsert(pIn
29190 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49  1->u.pRowSet, pI
291a0 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61  n2->u.i);.  brea
291b0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
291c0 20 52 6f 77 53 65 74 52 65 61 64 20 50 31 20 50   RowSetRead P1 P
291d0 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
291e0 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 6f 77  psis:  r[P3]=row
291f0 73 65 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20 45 78  set(P1).**.** Ex
29200 74 72 61 63 74 20 74 68 65 20 73 6d 61 6c 6c 65  tract the smalle
29210 73 74 20 76 61 6c 75 65 20 66 72 6f 6d 20 62 6f  st value from bo
29220 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 61  olean index P1 a
29230 6e 64 20 70 75 74 20 74 68 61 74 20 76 61 6c 75  nd put that valu
29240 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74  e into.** regist
29250 65 72 20 50 33 2e 20 20 4f 72 2c 20 69 66 20 62  er P3.  Or, if b
29260 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20  oolean index P1 
29270 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70  is initially emp
29280 74 79 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20  ty, leave P3.** 
29290 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 6a 75  unchanged and ju
292a0 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f  mp to instructio
292b0 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P2..*/.case OP
292c0 5f 52 6f 77 53 65 74 52 65 61 64 3a 20 7b 20 20  _RowSetRead: {  
292d0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
292e0 31 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34  1, out3 */.  i64
292f0 20 76 61 6c 3b 0a 0a 20 20 70 49 6e 31 20 3d 20   val;..  pIn1 = 
29300 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
29310 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
29320 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
29330 3d 3d 30 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74  ==0 .   || sqlit
29340 65 33 52 6f 77 53 65 74 4e 65 78 74 28 70 49 6e  e3RowSetNext(pIn
29350 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 26 76  1->u.pRowSet, &v
29360 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20 20 20 20  al)==0.  ){.    
29370 2f 2a 20 54 68 65 20 62 6f 6f 6c 65 61 6e 20 69  /* The boolean i
29380 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 2a 2f  ndex is empty */
29390 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
293a0 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29  MemSetNull(pIn1)
293b0 3b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  ;.    pc = pOp->
293c0 70 32 20 2d 20 31 3b 0a 20 20 20 20 56 64 62 65  p2 - 1;.    Vdbe
293d0 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29  BranchTaken(1,2)
293e0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  ;.  }else{.    /
293f0 2a 20 41 20 76 61 6c 75 65 20 77 61 73 20 70 75  * A value was pu
29400 6c 6c 65 64 20 66 72 6f 6d 20 74 68 65 20 69 6e  lled from the in
29410 64 65 78 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74  dex */.    sqlit
29420 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
29430 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  4(&aMem[pOp->p3]
29440 2c 20 76 61 6c 29 3b 0a 20 20 20 20 56 64 62 65  , val);.    Vdbe
29450 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c 32 29  BranchTaken(0,2)
29460 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65  ;.  }.  goto che
29470 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74  ck_for_interrupt
29480 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
29490 52 6f 77 53 65 74 54 65 73 74 20 50 31 20 50 32  RowSetTest P1 P2
294a0 20 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73   P3 P4.** Synops
294b0 69 73 3a 20 69 66 20 72 5b 50 33 5d 20 69 6e 20  is: if r[P3] in 
294c0 72 6f 77 73 65 74 28 50 31 29 20 67 6f 74 6f 20  rowset(P1) goto 
294d0 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65  P2.**.** Registe
294e0 72 20 50 33 20 69 73 20 61 73 73 75 6d 65 64 20  r P3 is assumed 
294f0 74 6f 20 68 6f 6c 64 20 61 20 36 34 2d 62 69 74  to hold a 64-bit
29500 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20   integer value. 
29510 49 66 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a  If register P1.*
29520 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20 52 6f 77  * contains a Row
29530 53 65 74 20 6f 62 6a 65 63 74 20 61 6e 64 20 74  Set object and t
29540 68 61 74 20 52 6f 77 53 65 74 20 6f 62 6a 65 63  hat RowSet objec
29550 74 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74 68  t contains.** th
29560 65 20 76 61 6c 75 65 20 68 65 6c 64 20 69 6e 20  e value held in 
29570 50 33 2c 20 6a 75 6d 70 20 74 6f 20 72 65 67 69  P3, jump to regi
29580 73 74 65 72 20 50 32 2e 20 4f 74 68 65 72 77 69  ster P2. Otherwi
29590 73 65 2c 20 69 6e 73 65 72 74 20 74 68 65 0a 2a  se, insert the.*
295a0 2a 20 69 6e 74 65 67 65 72 20 69 6e 20 50 33 20  * integer in P3 
295b0 69 6e 74 6f 20 74 68 65 20 52 6f 77 53 65 74 20  into the RowSet 
295c0 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20 6f 6e 20  and continue on 
295d0 74 6f 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 6f  to the.** next o
295e0 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  pcode..**.** The
295f0 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 69   RowSet object i
29600 73 20 6f 70 74 69 6d 69 7a 65 64 20 66 6f 72 20  s optimized for 
29610 74 68 65 20 63 61 73 65 20 77 68 65 72 65 20 73  the case where s
29620 75 63 63 65 73 73 69 76 65 20 73 65 74 73 0a 2a  uccessive sets.*
29630 2a 20 6f 66 20 69 6e 74 65 67 65 72 73 2c 20 77  * of integers, w
29640 68 65 72 65 20 65 61 63 68 20 73 65 74 20 63 6f  here each set co
29650 6e 74 61 69 6e 73 20 6e 6f 20 64 75 70 6c 69 63  ntains no duplic
29660 61 74 65 73 2e 20 45 61 63 68 20 73 65 74 0a 2a  ates. Each set.*
29670 2a 20 6f 66 20 76 61 6c 75 65 73 20 69 73 20 69  * of values is i
29680 64 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 75  dentified by a u
29690 6e 69 71 75 65 20 50 34 20 76 61 6c 75 65 2e 20  nique P4 value. 
296a0 54 68 65 20 66 69 72 73 74 20 73 65 74 0a 2a 2a  The first set.**
296b0 20 6d 75 73 74 20 68 61 76 65 20 50 34 3d 3d 30   must have P4==0
296c0 2c 20 74 68 65 20 66 69 6e 61 6c 20 73 65 74 20  , the final set 
296d0 50 34 3d 2d 31 2e 20 20 50 34 20 6d 75 73 74 20  P4=-1.  P4 must 
296e0 62 65 20 65 69 74 68 65 72 20 2d 31 20 6f 72 0a  be either -1 or.
296f0 2a 2a 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 2e  ** non-negative.
29700 20 20 46 6f 72 20 6e 6f 6e 2d 6e 65 67 61 74 69    For non-negati
29710 76 65 20 76 61 6c 75 65 73 20 6f 66 20 50 34 20  ve values of P4 
29720 6f 6e 6c 79 20 74 68 65 20 6c 6f 77 65 72 20 34  only the lower 4
29730 0a 2a 2a 20 62 69 74 73 20 61 72 65 20 73 69 67  .** bits are sig
29740 6e 69 66 69 63 61 6e 74 2e 0a 2a 2a 0a 2a 2a 20  nificant..**.** 
29750 54 68 69 73 20 61 6c 6c 6f 77 73 20 6f 70 74 69  This allows opti
29760 6d 69 7a 61 74 69 6f 6e 73 3a 20 28 61 29 20 77  mizations: (a) w
29770 68 65 6e 20 50 34 3d 3d 30 20 74 68 65 72 65 20  hen P4==0 there 
29780 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 74 65  is no need to te
29790 73 74 0a 2a 2a 20 74 68 65 20 72 6f 77 73 65 74  st.** the rowset
297a0 20 6f 62 6a 65 63 74 20 66 6f 72 20 50 33 2c 20   object for P3, 
297b0 61 73 20 69 74 20 69 73 20 67 75 61 72 61 6e 74  as it is guarant
297c0 65 65 64 20 6e 6f 74 20 74 6f 20 63 6f 6e 74 61  eed not to conta
297d0 69 6e 20 69 74 2c 0a 2a 2a 20 28 62 29 20 77 68  in it,.** (b) wh
297e0 65 6e 20 50 34 3d 3d 2d 31 20 74 68 65 72 65 20  en P4==-1 there 
297f0 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 69 6e  is no need to in
29800 73 65 72 74 20 74 68 65 20 76 61 6c 75 65 2c 20  sert the value, 
29810 61 73 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65  as it will.** ne
29820 76 65 72 20 62 65 20 74 65 73 74 65 64 20 66 6f  ver be tested fo
29830 72 2c 20 61 6e 64 20 28 63 29 20 77 68 65 6e 20  r, and (c) when 
29840 61 20 76 61 6c 75 65 20 74 68 61 74 20 69 73 20  a value that is 
29850 70 61 72 74 20 6f 66 20 73 65 74 20 58 20 69 73  part of set X is
29860 0a 2a 2a 20 69 6e 73 65 72 74 65 64 2c 20 74 68  .** inserted, th
29870 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74  ere is no need t
29880 6f 20 73 65 61 72 63 68 20 74 6f 20 73 65 65 20  o search to see 
29890 69 66 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75  if the same valu
298a0 65 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75  e was.** previou
298b0 73 6c 79 20 69 6e 73 65 72 74 65 64 20 61 73 20  sly inserted as 
298c0 70 61 72 74 20 6f 66 20 73 65 74 20 58 20 28 6f  part of set X (o
298d0 6e 6c 79 20 69 66 20 69 74 20 77 61 73 20 70 72  nly if it was pr
298e0 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73 65  eviously.** inse
298f0 72 74 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  rted as part of 
29900 73 6f 6d 65 20 6f 74 68 65 72 20 73 65 74 29 2e  some other set).
29910 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53  .*/.case OP_RowS
29920 65 74 54 65 73 74 3a 20 7b 20 20 20 20 20 20 20  etTest: {       
29930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
29940 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
29950 2a 2f 0a 20 20 69 6e 74 20 69 53 65 74 3b 0a 20  */.  int iSet;. 
29960 20 69 6e 74 20 65 78 69 73 74 73 3b 0a 0a 20 20   int exists;..  
29970 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
29980 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20  ->p1];.  pIn3 = 
29990 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
299a0 20 20 69 53 65 74 20 3d 20 70 4f 70 2d 3e 70 34    iSet = pOp->p4
299b0 2e 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  .i;.  assert( pI
299c0 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n3->flags&MEM_In
299d0 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68  t );..  /* If th
299e0 65 72 65 20 69 73 20 61 6e 79 74 68 69 6e 67 20  ere is anything 
299f0 6f 74 68 65 72 20 74 68 61 6e 20 61 20 72 6f 77  other than a row
29a00 73 65 74 20 6f 62 6a 65 63 74 20 69 6e 20 6d 65  set object in me
29a10 6d 6f 72 79 20 63 65 6c 6c 20 50 31 2c 0a 20 20  mory cell P1,.  
29a20 2a 2a 20 64 65 6c 65 74 65 20 69 74 20 6e 6f 77  ** delete it now
29a30 20 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65 20   and initialize 
29a40 50 31 20 77 69 74 68 20 61 6e 20 65 6d 70 74 79  P1 with an empty
29a50 20 72 6f 77 73 65 74 0a 20 20 2a 2f 0a 20 20 69   rowset.  */.  i
29a60 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
29a70 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  & MEM_RowSet)==0
29a80 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
29a90 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28  dbeMemSetRowSet(
29aa0 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28 20 28  pIn1);.    if( (
29ab0 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
29ac0 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 20 67  M_RowSet)==0 ) g
29ad0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
29ae0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
29af0 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
29b00 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 53   );.  assert( iS
29b10 65 74 3d 3d 2d 31 20 7c 7c 20 69 53 65 74 3e 3d  et==-1 || iSet>=
29b20 30 20 29 3b 0a 20 20 69 66 28 20 69 53 65 74 20  0 );.  if( iSet 
29b30 29 7b 0a 20 20 20 20 65 78 69 73 74 73 20 3d 20  ){.    exists = 
29b40 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73  sqlite3RowSetTes
29b50 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65  t(pIn1->u.pRowSe
29b60 74 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  t, .            
29b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29b80 20 20 20 28 75 38 29 28 69 53 65 74 3e 3d 30 20     (u8)(iSet>=0 
29b90 3f 20 69 53 65 74 20 26 20 30 78 66 20 3a 20 30  ? iSet & 0xf : 0
29ba0 78 66 66 29 2c 0a 20 20 20 20 20 20 20 20 20 20  xff),.          
29bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29bc0 20 20 20 20 20 70 49 6e 33 2d 3e 75 2e 69 29 3b       pIn3->u.i);
29bd0 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
29be0 61 6b 65 6e 28 65 78 69 73 74 73 21 3d 30 2c 32  aken(exists!=0,2
29bf0 29 3b 0a 20 20 20 20 69 66 28 20 65 78 69 73 74  );.    if( exist
29c00 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20  s ){.      pc = 
29c10 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
29c20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
29c30 20 20 7d 0a 20 20 69 66 28 20 69 53 65 74 3e 3d    }.  if( iSet>=
29c40 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
29c50 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e  RowSetInsert(pIn
29c60 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49  1->u.pRowSet, pI
29c70 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20 20  n3->u.i);.  }.  
29c80 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64  break;.}...#ifnd
29c90 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
29ca0 52 49 47 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64  RIGGER../* Opcod
29cb0 65 3a 20 50 72 6f 67 72 61 6d 20 50 31 20 50 32  e: Program P1 P2
29cc0 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
29cd0 45 78 65 63 75 74 65 20 74 68 65 20 74 72 69 67  Execute the trig
29ce0 67 65 72 20 70 72 6f 67 72 61 6d 20 70 61 73 73  ger program pass
29cf0 65 64 20 61 73 20 50 34 20 28 74 79 70 65 20 50  ed as P4 (type P
29d00 34 5f 53 55 42 50 52 4f 47 52 41 4d 29 2e 20 0a  4_SUBPROGRAM). .
29d10 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69 6e  **.** P1 contain
29d20 73 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66  s the address of
29d30 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c   the memory cell
29d40 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74   that contains t
29d50 68 65 20 66 69 72 73 74 20 6d 65 6d 6f 72 79 20  he first memory 
29d60 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20 61  .** cell in an a
29d70 72 72 61 79 20 6f 66 20 76 61 6c 75 65 73 20 75  rray of values u
29d80 73 65 64 20 61 73 20 61 72 67 75 6d 65 6e 74 73  sed as arguments
29d90 20 74 6f 20 74 68 65 20 73 75 62 2d 70 72 6f 67   to the sub-prog
29da0 72 61 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e 74  ram. P2 .** cont
29db0 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73  ains the address
29dc0 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20 74   to jump to if t
29dd0 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74  he sub-program t
29de0 68 72 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45 20  hrows an IGNORE 
29df0 0a 2a 2a 20 65 78 63 65 70 74 69 6f 6e 20 75 73  .** exception us
29e00 69 6e 67 20 74 68 65 20 52 41 49 53 45 28 29 20  ing the RAISE() 
29e10 66 75 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73 74  function. Regist
29e20 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74  er P3 contains t
29e30 68 65 20 61 64 64 72 65 73 73 20 0a 2a 2a 20 6f  he address .** o
29e40 66 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  f a memory cell 
29e50 69 6e 20 74 68 69 73 20 28 74 68 65 20 70 61 72  in this (the par
29e60 65 6e 74 29 20 56 4d 20 74 68 61 74 20 69 73 20  ent) VM that is 
29e70 75 73 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65  used to allocate
29e80 20 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20   the .** memory 
29e90 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20  required by the 
29ea0 73 75 62 2d 76 64 62 65 20 61 74 20 72 75 6e 74  sub-vdbe at runt
29eb0 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  ime..**.** P4 is
29ec0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
29ed0 65 20 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67 20  e VM containing 
29ee0 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
29ef0 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  ram..**.** If P5
29f00 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
29f10 65 6e 20 72 65 63 75 72 73 69 76 65 20 70 72 6f  en recursive pro
29f20 67 72 61 6d 20 69 6e 76 6f 63 61 74 69 6f 6e 20  gram invocation 
29f30 69 73 20 65 6e 61 62 6c 65 64 2e 0a 2a 2f 0a 63  is enabled..*/.c
29f40 61 73 65 20 4f 50 5f 50 72 6f 67 72 61 6d 3a 20  ase OP_Program: 
29f50 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
29f60 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20   */.  int nMem; 
29f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
29f80 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72   Number of memor
29f90 79 20 72 65 67 69 73 74 65 72 73 20 66 6f 72 20  y registers for 
29fa0 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20  sub-program */. 
29fb0 20 69 6e 74 20 6e 42 79 74 65 3b 20 20 20 20 20   int nByte;     
29fc0 20 20 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65           /* Byte
29fd0 73 20 6f 66 20 72 75 6e 74 69 6d 65 20 73 70 61  s of runtime spa
29fe0 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  ce required for 
29ff0 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20  sub-program */. 
2a000 20 4d 65 6d 20 2a 70 52 74 3b 20 20 20 20 20 20   Mem *pRt;      
2a010 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
2a020 73 74 65 72 20 74 6f 20 61 6c 6c 6f 63 61 74 65  ster to allocate
2a030 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65 20 2a   runtime space *
2a040 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20  /.  Mem *pMem;  
2a050 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
2a060 73 65 64 20 74 6f 20 69 74 65 72 61 74 65 20 74  sed to iterate t
2a070 68 72 6f 75 67 68 20 6d 65 6d 6f 72 79 20 63 65  hrough memory ce
2a080 6c 6c 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 45  lls */.  Mem *pE
2a090 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nd;             
2a0a0 20 2f 2a 20 4c 61 73 74 20 6d 65 6d 6f 72 79 20   /* Last memory 
2a0b0 63 65 6c 6c 20 69 6e 20 6e 65 77 20 61 72 72 61  cell in new arra
2a0c0 79 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65  y */.  VdbeFrame
2a0d0 20 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 20 2f   *pFrame;      /
2a0e0 2a 20 4e 65 77 20 76 64 62 65 20 66 72 61 6d 65  * New vdbe frame
2a0f0 20 74 6f 20 65 78 65 63 75 74 65 20 69 6e 20 2a   to execute in *
2a100 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a  /.  SubProgram *
2a110 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 53  pProgram;   /* S
2a120 75 62 2d 70 72 6f 67 72 61 6d 20 74 6f 20 65 78  ub-program to ex
2a130 65 63 75 74 65 20 2a 2f 0a 20 20 76 6f 69 64 20  ecute */.  void 
2a140 2a 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  *t;             
2a150 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 69 64 65 6e     /* Token iden
2a160 74 69 66 79 69 6e 67 20 74 72 69 67 67 65 72 20  tifying trigger 
2a170 2a 2f 0a 0a 20 20 70 50 72 6f 67 72 61 6d 20 3d  */..  pProgram =
2a180 20 70 4f 70 2d 3e 70 34 2e 70 50 72 6f 67 72 61   pOp->p4.pProgra
2a190 6d 3b 0a 20 20 70 52 74 20 3d 20 26 61 4d 65 6d  m;.  pRt = &aMem
2a1a0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73  [pOp->p3];.  ass
2a1b0 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  ert( pProgram->n
2a1c0 4f 70 3e 30 20 29 3b 0a 20 20 0a 20 20 2f 2a 20  Op>0 );.  .  /* 
2a1d0 49 66 20 74 68 65 20 70 35 20 66 6c 61 67 20 69  If the p5 flag i
2a1e0 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65  s clear, then re
2a1f0 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69  cursive invocati
2a200 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73 20 69  on of triggers i
2a210 73 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64  s .  ** disabled
2a220 20 66 6f 72 20 62 61 63 6b 77 61 72 64 73 20 63   for backwards c
2a230 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 28 70 35  ompatibility (p5
2a240 20 69 73 20 73 65 74 20 69 66 20 74 68 69 73 20   is set if this 
2a250 73 75 62 2d 70 72 6f 67 72 61 6d 0a 20 20 2a 2a  sub-program.  **
2a260 20 69 73 20 72 65 61 6c 6c 79 20 61 20 74 72 69   is really a tri
2a270 67 67 65 72 2c 20 6e 6f 74 20 61 20 66 6f 72 65  gger, not a fore
2a280 69 67 6e 20 6b 65 79 20 61 63 74 69 6f 6e 2c 20  ign key action, 
2a290 61 6e 64 20 74 68 65 20 66 6c 61 67 20 73 65 74  and the flag set
2a2a0 0a 20 20 2a 2a 20 61 6e 64 20 63 6c 65 61 72 65  .  ** and cleare
2a2b0 64 20 62 79 20 74 68 65 20 22 50 52 41 47 4d 41  d by the "PRAGMA
2a2c0 20 72 65 63 75 72 73 69 76 65 5f 74 72 69 67 67   recursive_trigg
2a2d0 65 72 73 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20  ers" command is 
2a2e0 63 6c 65 61 72 29 2e 0a 20 20 2a 2a 20 0a 20 20  clear)..  ** .  
2a2f0 2a 2a 20 49 74 20 69 73 20 72 65 63 75 72 73 69  ** It is recursi
2a300 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66  ve invocation of
2a310 20 74 72 69 67 67 65 72 73 2c 20 61 74 20 74 68   triggers, at th
2a320 65 20 53 51 4c 20 6c 65 76 65 6c 2c 20 74 68 61  e SQL level, tha
2a330 74 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62  t is .  ** disab
2a340 6c 65 64 2e 20 49 6e 20 73 6f 6d 65 20 63 61 73  led. In some cas
2a350 65 73 20 61 20 73 69 6e 67 6c 65 20 74 72 69 67  es a single trig
2a360 67 65 72 20 6d 61 79 20 67 65 6e 65 72 61 74 65  ger may generate
2a370 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 0a   more than one .
2a380 20 20 2a 2a 20 53 75 62 50 72 6f 67 72 61 6d 20    ** SubProgram 
2a390 28 69 66 20 74 68 65 20 74 72 69 67 67 65 72 20  (if the trigger 
2a3a0 6d 61 79 20 62 65 20 65 78 65 63 75 74 65 64 20  may be executed 
2a3b0 77 69 74 68 20 6d 6f 72 65 20 74 68 61 6e 20 6f  with more than o
2a3c0 6e 65 20 64 69 66 66 65 72 65 6e 74 20 0a 20 20  ne different .  
2a3d0 2a 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61  ** ON CONFLICT a
2a3e0 6c 67 6f 72 69 74 68 6d 29 2e 20 53 75 62 50 72  lgorithm). SubPr
2a3f0 6f 67 72 61 6d 20 73 74 72 75 63 74 75 72 65 73  ogram structures
2a400 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
2a410 20 61 0a 20 20 2a 2a 20 73 69 6e 67 6c 65 20 74   a.  ** single t
2a420 72 69 67 67 65 72 20 61 6c 6c 20 68 61 76 65 20  rigger all have 
2a430 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66  the same value f
2a440 6f 72 20 74 68 65 20 53 75 62 50 72 6f 67 72 61  or the SubProgra
2a450 6d 2e 74 6f 6b 65 6e 20 0a 20 20 2a 2a 20 76 61  m.token .  ** va
2a460 72 69 61 62 6c 65 2e 20 20 2a 2f 0a 20 20 69 66  riable.  */.  if
2a470 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20  ( pOp->p5 ){.   
2a480 20 74 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74   t = pProgram->t
2a490 6f 6b 65 6e 3b 0a 20 20 20 20 66 6f 72 28 70 46  oken;.    for(pF
2a4a0 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20  rame=p->pFrame; 
2a4b0 70 46 72 61 6d 65 20 26 26 20 70 46 72 61 6d 65  pFrame && pFrame
2a4c0 2d 3e 74 6f 6b 65 6e 21 3d 74 3b 20 70 46 72 61  ->token!=t; pFra
2a4d0 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  me=pFrame->pPare
2a4e0 6e 74 29 3b 0a 20 20 20 20 69 66 28 20 70 46 72  nt);.    if( pFr
2a4f0 61 6d 65 20 29 20 62 72 65 61 6b 3b 0a 20 20 7d  ame ) break;.  }
2a500 0a 0a 20 20 69 66 28 20 70 2d 3e 6e 46 72 61 6d  ..  if( p->nFram
2a510 65 3e 3d 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  e>=db->aLimit[SQ
2a520 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47 47  LITE_LIMIT_TRIGG
2a530 45 52 5f 44 45 50 54 48 5d 20 29 7b 0a 20 20 20  ER_DEPTH] ){.   
2a540 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
2a550 4f 52 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 53  OR;.    sqlite3S
2a560 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
2a570 72 4d 73 67 2c 20 64 62 2c 20 22 74 6f 6f 20 6d  rMsg, db, "too m
2a580 61 6e 79 20 6c 65 76 65 6c 73 20 6f 66 20 74 72  any levels of tr
2a590 69 67 67 65 72 20 72 65 63 75 72 73 69 6f 6e 22  igger recursion"
2a5a0 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
2a5b0 7d 0a 0a 20 20 2f 2a 20 52 65 67 69 73 74 65 72  }..  /* Register
2a5c0 20 70 52 74 20 69 73 20 75 73 65 64 20 74 6f 20   pRt is used to 
2a5d0 73 74 6f 72 65 20 74 68 65 20 6d 65 6d 6f 72 79  store the memory
2a5e0 20 72 65 71 75 69 72 65 64 20 74 6f 20 73 61 76   required to sav
2a5f0 65 20 74 68 65 20 73 74 61 74 65 0a 20 20 2a 2a  e the state.  **
2a600 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current 
2a610 70 72 6f 67 72 61 6d 2c 20 61 6e 64 20 74 68 65  program, and the
2a620 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64   memory required
2a630 20 61 74 20 72 75 6e 74 69 6d 65 20 74 6f 20 65   at runtime to e
2a640 78 65 63 75 74 65 0a 20 20 2a 2a 20 74 68 65 20  xecute.  ** the 
2a650 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e  trigger program.
2a660 20 49 66 20 74 68 69 73 20 74 72 69 67 67 65 72   If this trigger
2a670 20 68 61 73 20 62 65 65 6e 20 66 69 72 65 64 20   has been fired 
2a680 62 65 66 6f 72 65 2c 20 74 68 65 6e 20 70 52 74  before, then pRt
2a690 20 0a 20 20 2a 2a 20 69 73 20 61 6c 72 65 61 64   .  ** is alread
2a6a0 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4f 74 68  y allocated. Oth
2a6b0 65 72 77 69 73 65 2c 20 69 74 20 6d 75 73 74 20  erwise, it must 
2a6c0 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20  be initialized. 
2a6d0 20 2a 2f 0a 20 20 69 66 28 20 28 70 52 74 2d 3e   */.  if( (pRt->
2a6e0 66 6c 61 67 73 26 4d 45 4d 5f 46 72 61 6d 65 29  flags&MEM_Frame)
2a6f0 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 53 75  ==0 ){.    /* Su
2a700 62 50 72 6f 67 72 61 6d 2e 6e 4d 65 6d 20 69 73  bProgram.nMem is
2a710 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62   set to the numb
2a720 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c  er of memory cel
2a730 6c 73 20 75 73 65 64 20 62 79 20 74 68 65 20 0a  ls used by the .
2a740 20 20 20 20 2a 2a 20 70 72 6f 67 72 61 6d 20 73      ** program s
2a750 74 6f 72 65 64 20 69 6e 20 53 75 62 50 72 6f 67  tored in SubProg
2a760 72 61 6d 2e 61 4f 70 2e 20 41 73 20 77 65 6c 6c  ram.aOp. As well
2a770 20 61 73 20 74 68 65 73 65 2c 20 6f 6e 65 20 6d   as these, one m
2a780 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 63 65 6c  emory.    ** cel
2a790 6c 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f  l is required fo
2a7a0 72 20 65 61 63 68 20 63 75 72 73 6f 72 20 75 73  r each cursor us
2a7b0 65 64 20 62 79 20 74 68 65 20 70 72 6f 67 72 61  ed by the progra
2a7c0 6d 2e 20 53 65 74 20 6c 6f 63 61 6c 0a 20 20 20  m. Set local.   
2a7d0 20 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 4d 65   ** variable nMe
2a7e0 6d 20 28 61 6e 64 20 6c 61 74 65 72 2c 20 56 64  m (and later, Vd
2a7f0 62 65 46 72 61 6d 65 2e 6e 43 68 69 6c 64 4d 65  beFrame.nChildMe
2a800 6d 29 20 74 6f 20 74 68 69 73 20 76 61 6c 75 65  m) to this value
2a810 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6e 4d 65  ..    */.    nMe
2a820 6d 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d  m = pProgram->nM
2a830 65 6d 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  em + pProgram->n
2a840 43 73 72 3b 0a 20 20 20 20 6e 42 79 74 65 20 3d  Csr;.    nByte =
2a850 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56   ROUND8(sizeof(V
2a860 64 62 65 46 72 61 6d 65 29 29 0a 20 20 20 20 20  dbeFrame)).     
2a870 20 20 20 20 20 20 20 20 20 2b 20 6e 4d 65 6d 20           + nMem 
2a880 2a 20 73 69 7a 65 6f 66 28 4d 65 6d 29 0a 20 20  * sizeof(Mem).  
2a890 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 70 50              + pP
2a8a0 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 20 2a 20 73  rogram->nCsr * s
2a8b0 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72  izeof(VdbeCursor
2a8c0 20 2a 29 0a 20 20 20 20 20 20 20 20 20 20 20 20   *).            
2a8d0 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f    + pProgram->nO
2a8e0 6e 63 65 20 2a 20 73 69 7a 65 6f 66 28 75 38 29  nce * sizeof(u8)
2a8f0 3b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20 73  ;.    pFrame = s
2a900 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65  qlite3DbMallocZe
2a910 72 6f 28 64 62 2c 20 6e 42 79 74 65 29 3b 0a 20  ro(db, nByte);. 
2a920 20 20 20 69 66 28 20 21 70 46 72 61 6d 65 20 29     if( !pFrame )
2a930 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f  {.      goto no_
2a940 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  mem;.    }.    s
2a950 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
2a960 65 61 73 65 28 70 52 74 29 3b 0a 20 20 20 20 70  ease(pRt);.    p
2a970 52 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  Rt->flags = MEM_
2a980 46 72 61 6d 65 3b 0a 20 20 20 20 70 52 74 2d 3e  Frame;.    pRt->
2a990 75 2e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d  u.pFrame = pFram
2a9a0 65 3b 0a 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  e;..    pFrame->
2a9b0 76 20 3d 20 70 3b 0a 20 20 20 20 70 46 72 61 6d  v = p;.    pFram
2a9c0 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d 20 6e  e->nChildMem = n
2a9d0 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  Mem;.    pFrame-
2a9e0 3e 6e 43 68 69 6c 64 43 73 72 20 3d 20 70 50 72  >nChildCsr = pPr
2a9f0 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20  ogram->nCsr;.   
2aa00 20 70 46 72 61 6d 65 2d 3e 70 63 20 3d 20 70 63   pFrame->pc = pc
2aa10 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4d  ;.    pFrame->aM
2aa20 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20  em = p->aMem;.  
2aa30 20 20 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d    pFrame->nMem =
2aa40 20 70 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70 46   p->nMem;.    pF
2aa50 72 61 6d 65 2d 3e 61 70 43 73 72 20 3d 20 70 2d  rame->apCsr = p-
2aa60 3e 61 70 43 73 72 3b 0a 20 20 20 20 70 46 72 61  >apCsr;.    pFra
2aa70 6d 65 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 70 2d  me->nCursor = p-
2aa80 3e 6e 43 75 72 73 6f 72 3b 0a 20 20 20 20 70 46  >nCursor;.    pF
2aa90 72 61 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61  rame->aOp = p->a
2aaa0 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  Op;.    pFrame->
2aab0 6e 4f 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20  nOp = p->nOp;.  
2aac0 20 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20    pFrame->token 
2aad0 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65  = pProgram->toke
2aae0 6e 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61  n;.    pFrame->a
2aaf0 4f 6e 63 65 46 6c 61 67 20 3d 20 70 2d 3e 61 4f  OnceFlag = p->aO
2ab00 6e 63 65 46 6c 61 67 3b 0a 20 20 20 20 70 46 72  nceFlag;.    pFr
2ab10 61 6d 65 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 3d  ame->nOnceFlag =
2ab20 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 3b 0a 0a   p->nOnceFlag;..
2ab30 20 20 20 20 70 45 6e 64 20 3d 20 26 56 64 62 65      pEnd = &Vdbe
2ab40 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29  FrameMem(pFrame)
2ab50 5b 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d  [pFrame->nChildM
2ab60 65 6d 5d 3b 0a 20 20 20 20 66 6f 72 28 70 4d 65  em];.    for(pMe
2ab70 6d 3d 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70  m=VdbeFrameMem(p
2ab80 46 72 61 6d 65 29 3b 20 70 4d 65 6d 21 3d 70 45  Frame); pMem!=pE
2ab90 6e 64 3b 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20  nd; pMem++){.   
2aba0 20 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d     pMem->flags =
2abb0 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a   MEM_Undefined;.
2abc0 20 20 20 20 20 20 70 4d 65 6d 2d 3e 64 62 20 3d        pMem->db =
2abd0 20 64 62 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c   db;.    }.  }el
2abe0 73 65 7b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d  se{.    pFrame =
2abf0 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65 3b 0a   pRt->u.pFrame;.
2ac00 20 20 20 20 61 73 73 65 72 74 28 20 70 50 72 6f      assert( pPro
2ac10 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67  gram->nMem+pProg
2ac20 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d  ram->nCsr==pFram
2ac30 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 29 3b 0a  e->nChildMem );.
2ac40 20 20 20 20 61 73 73 65 72 74 28 20 70 50 72 6f      assert( pPro
2ac50 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61  gram->nCsr==pFra
2ac60 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 29 3b  me->nChildCsr );
2ac70 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 63 3d  .    assert( pc=
2ac80 3d 70 46 72 61 6d 65 2d 3e 70 63 20 29 3b 0a 20  =pFrame->pc );. 
2ac90 20 7d 0a 0a 20 20 70 2d 3e 6e 46 72 61 6d 65 2b   }..  p->nFrame+
2aca0 2b 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70 50 61  +;.  pFrame->pPa
2acb0 72 65 6e 74 20 3d 20 70 2d 3e 70 46 72 61 6d 65  rent = p->pFrame
2acc0 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6c 61 73 74  ;.  pFrame->last
2acd0 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69  Rowid = lastRowi
2ace0 64 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68  d;.  pFrame->nCh
2acf0 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68 61 6e 67  ange = p->nChang
2ad00 65 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20  e;.  p->nChange 
2ad10 3d 20 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d 65  = 0;.  p->pFrame
2ad20 20 3d 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d 3e   = pFrame;.  p->
2ad30 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d 20 26 56  aMem = aMem = &V
2ad40 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61  dbeFrameMem(pFra
2ad50 6d 65 29 5b 2d 31 5d 3b 0a 20 20 70 2d 3e 6e 4d  me)[-1];.  p->nM
2ad60 65 6d 20 3d 20 70 46 72 61 6d 65 2d 3e 6e 43 68  em = pFrame->nCh
2ad70 69 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75  ildMem;.  p->nCu
2ad80 72 73 6f 72 20 3d 20 28 75 31 36 29 70 46 72 61  rsor = (u16)pFra
2ad90 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 3b 0a 20  me->nChildCsr;. 
2ada0 20 70 2d 3e 61 70 43 73 72 20 3d 20 28 56 64 62   p->apCsr = (Vdb
2adb0 65 43 75 72 73 6f 72 20 2a 2a 29 26 61 4d 65 6d  eCursor **)&aMem
2adc0 5b 70 2d 3e 6e 4d 65 6d 2b 31 5d 3b 0a 20 20 70  [p->nMem+1];.  p
2add0 2d 3e 61 4f 70 20 3d 20 61 4f 70 20 3d 20 70 50  ->aOp = aOp = pP
2ade0 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70  rogram->aOp;.  p
2adf0 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d  ->nOp = pProgram
2ae00 2d 3e 6e 4f 70 3b 0a 20 20 70 2d 3e 61 4f 6e 63  ->nOp;.  p->aOnc
2ae10 65 46 6c 61 67 20 3d 20 28 75 38 20 2a 29 26 70  eFlag = (u8 *)&p
2ae20 2d 3e 61 70 43 73 72 5b 70 2d 3e 6e 43 75 72 73  ->apCsr[p->nCurs
2ae30 6f 72 5d 3b 0a 20 20 70 2d 3e 6e 4f 6e 63 65 46  or];.  p->nOnceF
2ae40 6c 61 67 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  lag = pProgram->
2ae50 6e 4f 6e 63 65 3b 0a 20 20 70 63 20 3d 20 2d 31  nOnce;.  pc = -1
2ae60 3b 0a 20 20 6d 65 6d 73 65 74 28 70 2d 3e 61 4f  ;.  memset(p->aO
2ae70 6e 63 65 46 6c 61 67 2c 20 30 2c 20 70 2d 3e 6e  nceFlag, 0, p->n
2ae80 4f 6e 63 65 46 6c 61 67 29 3b 0a 0a 20 20 62 72  OnceFlag);..  br
2ae90 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2aea0 65 3a 20 50 61 72 61 6d 20 50 31 20 50 32 20 2a  e: Param P1 P2 *
2aeb0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   * *.**.** This 
2aec0 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 65  opcode is only e
2aed0 76 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20 73  ver present in s
2aee0 75 62 2d 70 72 6f 67 72 61 6d 73 20 63 61 6c 6c  ub-programs call
2aef0 65 64 20 76 69 61 20 74 68 65 20 0a 2a 2a 20 4f  ed via the .** O
2af00 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75  P_Program instru
2af10 63 74 69 6f 6e 2e 20 43 6f 70 79 20 61 20 76 61  ction. Copy a va
2af20 6c 75 65 20 63 75 72 72 65 6e 74 6c 79 20 73 74  lue currently st
2af30 6f 72 65 64 20 69 6e 20 61 20 6d 65 6d 6f 72 79  ored in a memory
2af40 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66 20 74 68 65   .** cell of the
2af50 20 63 61 6c 6c 69 6e 67 20 28 70 61 72 65 6e 74   calling (parent
2af60 29 20 66 72 61 6d 65 20 74 6f 20 63 65 6c 6c 20  ) frame to cell 
2af70 50 32 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e  P2 in the curren
2af80 74 20 66 72 61 6d 65 73 20 0a 2a 2a 20 61 64 64  t frames .** add
2af90 72 65 73 73 20 73 70 61 63 65 2e 20 54 68 69 73  ress space. This
2afa0 20 69 73 20 75 73 65 64 20 62 79 20 74 72 69 67   is used by trig
2afb0 67 65 72 20 70 72 6f 67 72 61 6d 73 20 74 6f 20  ger programs to 
2afc0 61 63 63 65 73 73 20 74 68 65 20 6e 65 77 2e 2a  access the new.*
2afd0 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64 2e 2a 20 76   .** and old.* v
2afe0 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  alues..**.** The
2aff0 20 61 64 64 72 65 73 73 20 6f 66 20 74 68 65 20   address of the 
2b000 63 65 6c 6c 20 69 6e 20 74 68 65 20 70 61 72 65  cell in the pare
2b010 6e 74 20 66 72 61 6d 65 20 69 73 20 64 65 74 65  nt frame is dete
2b020 72 6d 69 6e 65 64 20 62 79 20 61 64 64 69 6e 67  rmined by adding
2b030 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66  .** the value of
2b040 20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74   the P1 argument
2b050 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66   to the value of
2b060 20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74   the P1 argument
2b070 20 74 6f 20 74 68 65 0a 2a 2a 20 63 61 6c 6c 69   to the.** calli
2b080 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e  ng OP_Program in
2b090 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
2b0a0 73 65 20 4f 50 5f 50 61 72 61 6d 3a 20 7b 20 20  se OP_Param: {  
2b0b0 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
2b0c0 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
2b0d0 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61   VdbeFrame *pFra
2b0e0 6d 65 3b 0a 20 20 4d 65 6d 20 2a 70 49 6e 3b 0a  me;.  Mem *pIn;.
2b0f0 20 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46    pFrame = p->pF
2b100 72 61 6d 65 3b 0a 20 20 70 49 6e 20 3d 20 26 70  rame;.  pIn = &p
2b110 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d  Frame->aMem[pOp-
2b120 3e 70 31 20 2b 20 70 46 72 61 6d 65 2d 3e 61 4f  >p1 + pFrame->aO
2b130 70 5b 70 46 72 61 6d 65 2d 3e 70 63 5d 2e 70 31  p[pFrame->pc].p1
2b140 5d 3b 20 20 20 0a 20 20 73 71 6c 69 74 65 33 56  ];   .  sqlite3V
2b150 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
2b160 79 28 70 4f 75 74 2c 20 70 49 6e 2c 20 4d 45 4d  y(pOut, pIn, MEM
2b170 5f 45 70 68 65 6d 29 3b 0a 20 20 62 72 65 61 6b  _Ephem);.  break
2b180 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 23  ;.}..#endif /* #
2b190 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2b1a0 49 54 5f 54 52 49 47 47 45 52 20 2a 2f 0a 0a 23  IT_TRIGGER */..#
2b1b0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2b1c0 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 2f  IT_FOREIGN_KEY./
2b1d0 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 43 6f 75 6e  * Opcode: FkCoun
2b1e0 74 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ter P1 P2 * * *.
2b1f0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 66 6b 63  ** Synopsis: fkc
2b200 74 72 5b 50 31 5d 2b 3d 50 32 0a 2a 2a 0a 2a 2a  tr[P1]+=P2.**.**
2b210 20 49 6e 63 72 65 6d 65 6e 74 20 61 20 22 63 6f   Increment a "co
2b220 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72  nstraint counter
2b230 22 20 62 79 20 50 32 20 28 50 32 20 6d 61 79 20  " by P2 (P2 may 
2b240 62 65 20 6e 65 67 61 74 69 76 65 20 6f 72 20 70  be negative or p
2b250 6f 73 69 74 69 76 65 29 2e 0a 2a 2a 20 49 66 20  ositive)..** If 
2b260 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  P1 is non-zero, 
2b270 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
2b280 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 20  straint counter 
2b290 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 0a  is incremented .
2b2a0 2a 2a 20 28 64 65 66 65 72 72 65 64 20 66 6f 72  ** (deferred for
2b2b0 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
2b2c0 69 6e 74 73 29 2e 20 4f 74 68 65 72 77 69 73 65  ints). Otherwise
2b2d0 2c 20 69 66 20 50 31 20 69 73 20 7a 65 72 6f 2c  , if P1 is zero,
2b2e0 20 74 68 65 20 0a 2a 2a 20 73 74 61 74 65 6d 65   the .** stateme
2b2f0 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e  nt counter is in
2b300 63 72 65 6d 65 6e 74 65 64 20 28 69 6d 6d 65 64  cremented (immed
2b310 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  iate foreign key
2b320 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 0a 2a   constraints)..*
2b330 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 43 6f 75 6e  /.case OP_FkCoun
2b340 74 65 72 3a 20 7b 0a 20 20 69 66 28 20 64 62 2d  ter: {.  if( db-
2b350 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
2b360 44 65 66 65 72 46 4b 73 20 29 7b 0a 20 20 20 20  DeferFKs ){.    
2b370 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
2b380 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b  Cons += pOp->p2;
2b390 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70  .  }else if( pOp
2b3a0 2d 3e 70 31 20 29 7b 0a 20 20 20 20 64 62 2d 3e  ->p1 ){.    db->
2b3b0 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 2b 3d  nDeferredCons +=
2b3c0 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73   pOp->p2;.  }els
2b3d0 65 7b 0a 20 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e  e{.    p->nFkCon
2b3e0 73 74 72 61 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e  straint += pOp->
2b3f0 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
2b400 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46  .}../* Opcode: F
2b410 6b 49 66 5a 65 72 6f 20 50 31 20 50 32 20 2a 20  kIfZero P1 P2 * 
2b420 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
2b430 20 69 66 20 66 6b 63 74 72 5b 50 31 5d 3d 3d 30   if fkctr[P1]==0
2b440 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54   goto P2.**.** T
2b450 68 69 73 20 6f 70 63 6f 64 65 20 74 65 73 74 73  his opcode tests
2b460 20 69 66 20 61 20 66 6f 72 65 69 67 6e 20 6b 65   if a foreign ke
2b470 79 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75  y constraint-cou
2b480 6e 74 65 72 20 69 73 20 63 75 72 72 65 6e 74 6c  nter is currentl
2b490 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66 20 73 6f  y zero..** If so
2b4a0 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75  , jump to instru
2b4b0 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77  ction P2. Otherw
2b4c0 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  ise, fall throug
2b4d0 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 0a 2a  h to the next .*
2b4e0 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  * instruction..*
2b4f0 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f  *.** If P1 is no
2b500 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65  n-zero, then the
2b510 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
2b520 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  f the database c
2b530 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65  onstraint-counte
2b540 72 0a 2a 2a 20 69 73 20 7a 65 72 6f 20 28 74 68  r.** is zero (th
2b550 65 20 6f 6e 65 20 74 68 61 74 20 63 6f 75 6e 74  e one that count
2b560 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74  s deferred const
2b570 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73  raint violations
2b580 29 2e 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 7a  ). If P1 is.** z
2b590 65 72 6f 2c 20 74 68 65 20 6a 75 6d 70 20 69 73  ero, the jump is
2b5a0 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 73 74   taken if the st
2b5b0 61 74 65 6d 65 6e 74 20 63 6f 6e 73 74 72 61 69  atement constrai
2b5c0 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20 7a 65  nt-counter is ze
2b5d0 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69 61 74 65  ro.** (immediate
2b5e0 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
2b5f0 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
2b600 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ns)..*/.case OP_
2b610 46 6b 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20  FkIfZero: {     
2b620 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
2b630 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a   if( pOp->p1 ){.
2b640 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
2b650 6b 65 6e 28 64 62 2d 3e 6e 44 65 66 65 72 72 65  ken(db->nDeferre
2b660 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e  dCons==0 && db->
2b670 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
2b680 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69 66 28  ==0, 2);.    if(
2b690 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
2b6a0 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65  ns==0 && db->nDe
2b6b0 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30  ferredImmCons==0
2b6c0 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d   ) pc = pOp->p2-
2b6d0 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  1;.  }else{.    
2b6e0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
2b6f0 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74  p->nFkConstraint
2b700 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65  ==0 && db->nDefe
2b710 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20  rredImmCons==0, 
2b720 32 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 6e  2);.    if( p->n
2b730 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20  FkConstraint==0 
2b740 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  && db->nDeferred
2b750 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 70 63 20  ImmCons==0 ) pc 
2b760 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d  = pOp->p2-1;.  }
2b770 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2b780 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51  if /* #ifndef SQ
2b790 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
2b7a0 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e 64 65  N_KEY */..#ifnde
2b7b0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
2b7c0 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f  TOINCREMENT./* O
2b7d0 70 63 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50 31  pcode: MemMax P1
2b7e0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
2b7f0 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 6d 61 78  opsis: r[P1]=max
2b800 28 72 5b 50 31 5d 2c 72 5b 50 32 5d 29 0a 2a 2a  (r[P1],r[P2]).**
2b810 0a 2a 2a 20 50 31 20 69 73 20 61 20 72 65 67 69  .** P1 is a regi
2b820 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74  ster in the root
2b830 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56   frame of this V
2b840 4d 20 28 74 68 65 20 72 6f 6f 74 20 66 72 61 6d  M (the root fram
2b850 65 20 69 73 0a 2a 2a 20 64 69 66 66 65 72 65 6e  e is.** differen
2b860 74 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65  t from the curre
2b870 6e 74 20 66 72 61 6d 65 20 69 66 20 74 68 69 73  nt frame if this
2b880 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
2b890 62 65 69 6e 67 20 65 78 65 63 75 74 65 64 0a 2a  being executed.*
2b8a0 2a 20 77 69 74 68 69 6e 20 61 20 73 75 62 2d 70  * within a sub-p
2b8b0 72 6f 67 72 61 6d 29 2e 20 53 65 74 20 74 68 65  rogram). Set the
2b8c0 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
2b8d0 65 72 20 50 31 20 74 6f 20 74 68 65 20 6d 61 78  er P1 to the max
2b8e0 69 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69 74 73 20  imum of .** its 
2b8f0 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 61 6e  current value an
2b900 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  d the value in r
2b910 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
2b920 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
2b930 6f 6e 20 74 68 72 6f 77 73 20 61 6e 20 65 72 72  on throws an err
2b940 6f 72 20 69 66 20 74 68 65 20 6d 65 6d 6f 72 79  or if the memory
2b950 20 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69 6e 69   cell is not ini
2b960 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74  tially.** an int
2b970 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  eger..*/.case OP
2b980 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20 20 20  _MemMax: {      
2b990 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64    /* in2 */.  Vd
2b9a0 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b  beFrame *pFrame;
2b9b0 0a 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65  .  if( p->pFrame
2b9c0 20 29 7b 0a 20 20 20 20 66 6f 72 28 70 46 72 61   ){.    for(pFra
2b9d0 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46  me=p->pFrame; pF
2b9e0 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70  rame->pParent; p
2b9f0 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50  Frame=pFrame->pP
2ba00 61 72 65 6e 74 29 3b 0a 20 20 20 20 70 49 6e 31  arent);.    pIn1
2ba10 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d   = &pFrame->aMem
2ba20 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c  [pOp->p1];.  }el
2ba30 73 65 7b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26  se{.    pIn1 = &
2ba40 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2ba50 20 7d 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d   }.  assert( mem
2ba60 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b  IsValid(pIn1) );
2ba70 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
2ba80 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31  mIntegerify(pIn1
2ba90 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  );.  pIn2 = &aMe
2baa0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71  m[pOp->p2];.  sq
2bab0 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
2bac0 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20  gerify(pIn2);.  
2bad0 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 49  if( pIn1->u.i<pI
2bae0 6e 32 2d 3e 75 2e 69 29 7b 0a 20 20 20 20 70 49  n2->u.i){.    pI
2baf0 6e 31 2d 3e 75 2e 69 20 3d 20 70 49 6e 32 2d 3e  n1->u.i = pIn2->
2bb00 75 2e 69 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  u.i;.  }.  break
2bb10 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
2bb20 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
2bb30 43 52 45 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f  CREMENT */../* O
2bb40 70 63 6f 64 65 3a 20 49 66 50 6f 73 20 50 31 20  pcode: IfPos P1 
2bb50 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
2bb60 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 30  psis: if r[P1]>0
2bb70 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 49   goto P2.**.** I
2bb80 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72  f the value of r
2bb90 65 67 69 73 74 65 72 20 50 31 20 69 73 20 31 20  egister P1 is 1 
2bba0 6f 72 20 67 72 65 61 74 65 72 2c 20 6a 75 6d 70  or greater, jump
2bbb0 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 74   to P2..**.** It
2bbc0 20 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75   is illegal to u
2bbd0 73 65 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  se this instruct
2bbe0 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69 73 74 65  ion on a registe
2bbf0 72 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e  r that does.** n
2bc00 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  ot contain an in
2bc10 74 65 67 65 72 2e 20 20 41 6e 20 61 73 73 65 72  teger.  An asser
2bc20 74 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20  tion fault will 
2bc30 72 65 73 75 6c 74 20 69 66 20 79 6f 75 20 74 72  result if you tr
2bc40 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  y..*/.case OP_If
2bc50 50 6f 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  Pos: {        /*
2bc60 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
2bc70 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
2bc80 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2bc90 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn1->flags&MEM
2bca0 5f 49 6e 74 20 29 3b 0a 20 20 56 64 62 65 42 72  _Int );.  VdbeBr
2bcb0 61 6e 63 68 54 61 6b 65 6e 28 20 70 49 6e 31 2d  anchTaken( pIn1-
2bcc0 3e 75 2e 69 3e 30 2c 20 32 29 3b 0a 20 20 69 66  >u.i>0, 2);.  if
2bcd0 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20 29 7b  ( pIn1->u.i>0 ){
2bce0 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  .     pc = pOp->
2bcf0 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
2bd00 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2bd10 65 3a 20 49 66 4e 65 67 20 50 31 20 50 32 20 2a  e: IfNeg P1 P2 *
2bd20 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2bd30 3a 20 69 66 20 72 5b 50 31 5d 3c 30 20 67 6f 74  : if r[P1]<0 got
2bd40 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  o P2.**.** If th
2bd50 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73  e value of regis
2bd60 74 65 72 20 50 31 20 69 73 20 6c 65 73 73 20 74  ter P1 is less t
2bd70 68 61 6e 20 7a 65 72 6f 2c 20 6a 75 6d 70 20 74  han zero, jump t
2bd80 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 49 74 20  o P2. .**.** It 
2bd90 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f 20 75 73  is illegal to us
2bda0 65 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  e this instructi
2bdb0 6f 6e 20 6f 6e 20 61 20 72 65 67 69 73 74 65 72  on on a register
2bdc0 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f   that does.** no
2bdd0 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  t contain an int
2bde0 65 67 65 72 2e 20 20 41 6e 20 61 73 73 65 72 74  eger.  An assert
2bdf0 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c 6c 20 72  ion fault will r
2be00 65 73 75 6c 74 20 69 66 20 79 6f 75 20 74 72 79  esult if you try
2be10 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e  ..*/.case OP_IfN
2be20 65 67 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  eg: {        /* 
2be30 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  jump, in1 */.  p
2be40 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
2be50 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2be60 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
2be70 49 6e 74 20 29 3b 0a 20 20 56 64 62 65 42 72 61  Int );.  VdbeBra
2be80 6e 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75  nchTaken(pIn1->u
2be90 2e 69 3c 30 2c 20 32 29 3b 0a 20 20 69 66 28 20  .i<0, 2);.  if( 
2bea0 70 49 6e 31 2d 3e 75 2e 69 3c 30 20 29 7b 0a 20  pIn1->u.i<0 ){. 
2beb0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
2bec0 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
2bed0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2bee0 20 49 66 5a 65 72 6f 20 50 31 20 50 32 20 50 33   IfZero P1 P2 P3
2bef0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2bf00 3a 20 72 5b 50 31 5d 2b 3d 50 33 2c 20 69 66 20  : r[P1]+=P3, if 
2bf10 72 5b 50 31 5d 3d 3d 30 20 67 6f 74 6f 20 50 32  r[P1]==0 goto P2
2bf20 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73  .**.** The regis
2bf30 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74  ter P1 must cont
2bf40 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20  ain an integer. 
2bf50 20 41 64 64 20 6c 69 74 65 72 61 6c 20 50 33 20   Add literal P3 
2bf60 74 6f 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20  to the.** value 
2bf70 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  in register P1. 
2bf80 20 49 66 20 74 68 65 20 72 65 73 75 6c 74 20 69   If the result i
2bf90 73 20 65 78 61 63 74 6c 79 20 30 2c 20 6a 75 6d  s exactly 0, jum
2bfa0 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20  p to P2. .**.** 
2bfb0 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 74 6f  It is illegal to
2bfc0 20 75 73 65 20 74 68 69 73 20 69 6e 73 74 72 75   use this instru
2bfd0 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65 67 69 73  ction on a regis
2bfe0 74 65 72 20 74 68 61 74 20 64 6f 65 73 0a 2a 2a  ter that does.**
2bff0 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20   not contain an 
2c000 69 6e 74 65 67 65 72 2e 20 20 41 6e 20 61 73 73  integer.  An ass
2c010 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 77 69 6c  ertion fault wil
2c020 6c 20 72 65 73 75 6c 74 20 69 66 20 79 6f 75 20  l result if you 
2c030 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  try..*/.case OP_
2c040 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20  IfZero: {       
2c050 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
2c060 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
2c070 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2c080 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26  rt( pIn1->flags&
2c090 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 49 6e  MEM_Int );.  pIn
2c0a0 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70  1->u.i += pOp->p
2c0b0 33 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  3;.  VdbeBranchT
2c0c0 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3d 3d  aken(pIn1->u.i==
2c0d0 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e  0, 2);.  if( pIn
2c0e0 31 2d 3e 75 2e 69 3d 3d 30 20 29 7b 0a 20 20 20  1->u.i==0 ){.   
2c0f0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
2c100 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
2c110 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
2c120 67 67 53 74 65 70 20 2a 20 50 32 20 50 33 20 50  ggStep * P2 P3 P
2c130 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
2c140 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20 73 74  : accum=r[P3] st
2c150 65 70 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a  ep(r[P2@P5]).**.
2c160 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 73  ** Execute the s
2c170 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72  tep function for
2c180 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20   an aggregate.  
2c190 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20  The.** function 
2c1a0 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73  has P5 arguments
2c1b0 2e 20 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .   P4 is a poin
2c1c0 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44  ter to the FuncD
2c1d0 65 66 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20  ef.** structure 
2c1e0 74 68 61 74 20 73 70 65 63 69 66 69 65 73 20 74  that specifies t
2c1f0 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 55 73  he function.  Us
2c200 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33  e register.** P3
2c210 20 61 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61   as the accumula
2c220 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  tor..**.** The P
2c230 35 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20  5 arguments are 
2c240 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73  taken from regis
2c250 74 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a 2a  ter P2 and its.*
2c260 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2f  * successors..*/
2c270 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74 65 70  .case OP_AggStep
2c280 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69  : {.  int n;.  i
2c290 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 4d 65  nt i;.  Mem *pMe
2c2a0 6d 3b 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 0a  m;.  Mem *pRec;.
2c2b0 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
2c2c0 74 20 63 74 78 3b 0a 20 20 73 71 6c 69 74 65 33  t ctx;.  sqlite3
2c2d0 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c 3b 0a  _value **apVal;.
2c2e0 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a  .  n = pOp->p5;.
2c2f0 20 20 61 73 73 65 72 74 28 20 6e 3e 3d 30 20 29    assert( n>=0 )
2c300 3b 0a 20 20 70 52 65 63 20 3d 20 26 61 4d 65 6d  ;.  pRec = &aMem
2c310 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 70 56  [pOp->p2];.  apV
2c320 61 6c 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20  al = p->apArg;. 
2c330 20 61 73 73 65 72 74 28 20 61 70 56 61 6c 20 7c   assert( apVal |
2c340 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20 66 6f 72 28  | n==0 );.  for(
2c350 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70  i=0; i<n; i++, p
2c360 52 65 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65  Rec++){.    asse
2c370 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
2c380 52 65 63 29 20 29 3b 0a 20 20 20 20 61 70 56 61  Rec) );.    apVa
2c390 6c 5b 69 5d 20 3d 20 70 52 65 63 3b 0a 20 20 20  l[i] = pRec;.   
2c3a0 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
2c3b0 65 28 70 2c 20 70 52 65 63 29 3b 0a 20 20 7d 0a  e(p, pRec);.  }.
2c3c0 20 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f    ctx.pFunc = pO
2c3d0 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 61  p->p4.pFunc;.  a
2c3e0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
2c3f0 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d   && pOp->p3<=(p-
2c400 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
2c410 29 20 29 3b 0a 20 20 63 74 78 2e 70 4d 65 6d 20  ) );.  ctx.pMem 
2c420 3d 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70  = pMem = &aMem[p
2c430 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 4d 65 6d 2d  Op->p3];.  pMem-
2c440 3e 6e 2b 2b 3b 0a 20 20 63 74 78 2e 73 2e 66 6c  >n++;.  ctx.s.fl
2c450 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
2c460 20 20 63 74 78 2e 73 2e 7a 20 3d 20 30 3b 0a 20    ctx.s.z = 0;. 
2c470 20 63 74 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d   ctx.s.zMalloc =
2c480 20 30 3b 0a 20 20 63 74 78 2e 73 2e 78 44 65 6c   0;.  ctx.s.xDel
2c490 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 64 62   = 0;.  ctx.s.db
2c4a0 20 3d 20 64 62 3b 0a 20 20 63 74 78 2e 69 73 45   = db;.  ctx.isE
2c4b0 72 72 6f 72 20 3d 20 30 3b 0a 20 20 63 74 78 2e  rror = 0;.  ctx.
2c4c0 70 43 6f 6c 6c 20 3d 20 30 3b 0a 20 20 63 74 78  pColl = 0;.  ctx
2c4d0 2e 73 6b 69 70 46 6c 61 67 20 3d 20 30 3b 0a 20  .skipFlag = 0;. 
2c4e0 20 69 66 28 20 63 74 78 2e 70 46 75 6e 63 2d 3e   if( ctx.pFunc->
2c4f0 66 75 6e 63 46 6c 61 67 73 20 26 20 53 51 4c 49  funcFlags & SQLI
2c500 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
2c510 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
2c520 70 4f 70 3e 70 2d 3e 61 4f 70 20 29 3b 0a 20 20  pOp>p->aOp );.  
2c530 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31    assert( pOp[-1
2c540 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c  ].p4type==P4_COL
2c550 4c 53 45 51 20 29 3b 0a 20 20 20 20 61 73 73 65  LSEQ );.    asse
2c560 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f  rt( pOp[-1].opco
2c570 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29  de==OP_CollSeq )
2c580 3b 0a 20 20 20 20 63 74 78 2e 70 43 6f 6c 6c 20  ;.    ctx.pColl 
2c590 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f  = pOp[-1].p4.pCo
2c5a0 6c 6c 3b 0a 20 20 7d 0a 20 20 28 63 74 78 2e 70  ll;.  }.  (ctx.p
2c5b0 46 75 6e 63 2d 3e 78 53 74 65 70 29 28 26 63 74  Func->xStep)(&ct
2c5c0 78 2c 20 6e 2c 20 61 70 56 61 6c 29 3b 20 2f 2a  x, n, apVal); /*
2c5d0 20 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32 33   IMP: R-24505-23
2c5e0 32 33 30 20 2a 2f 0a 20 20 69 66 28 20 63 74 78  230 */.  if( ctx
2c5f0 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20  .isError ){.    
2c600 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
2c610 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
2c620 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f  , "%s", sqlite3_
2c630 76 61 6c 75 65 5f 74 65 78 74 28 26 63 74 78 2e  value_text(&ctx.
2c640 73 29 29 3b 0a 20 20 20 20 72 63 20 3d 20 63 74  s));.    rc = ct
2c650 78 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 20  x.isError;.  }. 
2c660 20 69 66 28 20 63 74 78 2e 73 6b 69 70 46 6c 61   if( ctx.skipFla
2c670 67 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  g ){.    assert(
2c680 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d   pOp[-1].opcode=
2c690 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20  =OP_CollSeq );. 
2c6a0 20 20 20 69 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70     i = pOp[-1].p
2c6b0 31 3b 0a 20 20 20 20 69 66 28 20 69 20 29 20 73  1;.    if( i ) s
2c6c0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
2c6d0 49 6e 74 36 34 28 26 61 4d 65 6d 5b 69 5d 2c 20  Int64(&aMem[i], 
2c6e0 31 29 3b 0a 20 20 7d 0a 0a 20 20 73 71 6c 69 74  1);.  }..  sqlit
2c6f0 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
2c700 28 26 63 74 78 2e 73 29 3b 0a 0a 20 20 62 72 65  (&ctx.s);..  bre
2c710 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2c720 3a 20 41 67 67 46 69 6e 61 6c 20 50 31 20 50 32  : AggFinal P1 P2
2c730 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
2c740 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 31 5d  sis: accum=r[P1]
2c750 20 4e 3d 50 32 0a 2a 2a 0a 2a 2a 20 45 78 65 63   N=P2.**.** Exec
2c760 75 74 65 20 74 68 65 20 66 69 6e 61 6c 69 7a 65  ute the finalize
2c770 72 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61  r function for a
2c780 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20 50 31  n aggregate.  P1
2c790 20 69 73 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f 72   is.** the memor
2c7a0 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20  y location that 
2c7b0 69 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74  is the accumulat
2c7c0 6f 72 20 66 6f 72 20 74 68 65 20 61 67 67 72 65  or for the aggre
2c7d0 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69  gate..**.** P2 i
2c7e0 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
2c7f0 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 74  arguments that t
2c800 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e  he step function
2c810 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34   takes and.** P4
2c820 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
2c830 20 74 68 65 20 46 75 6e 63 44 65 66 20 66 6f 72   the FuncDef for
2c840 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20   this function. 
2c850 20 54 68 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d   The P2.** argum
2c860 65 6e 74 20 69 73 20 6e 6f 74 20 75 73 65 64 20  ent is not used 
2c870 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20  by this opcode. 
2c880 20 49 74 20 69 73 20 6f 6e 6c 79 20 74 68 65 72   It is only ther
2c890 65 20 74 6f 20 64 69 73 61 6d 62 69 67 75 61 74  e to disambiguat
2c8a0 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74  e.** functions t
2c8b0 68 61 74 20 63 61 6e 20 74 61 6b 65 20 76 61 72  hat can take var
2c8c0 79 69 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66 20  ying numbers of 
2c8d0 61 72 67 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a  arguments.  The.
2c8e0 2a 2a 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69  ** P4 argument i
2c8f0 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f  s only needed fo
2c900 72 20 74 68 65 20 64 65 67 65 6e 65 72 61 74 65  r the degenerate
2c910 20 63 61 73 65 20 77 68 65 72 65 0a 2a 2a 20 74   case where.** t
2c920 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e  he step function
2c930 20 77 61 73 20 6e 6f 74 20 70 72 65 76 69 6f 75   was not previou
2c940 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63  sly called..*/.c
2c950 61 73 65 20 4f 50 5f 41 67 67 46 69 6e 61 6c 3a  ase OP_AggFinal:
2c960 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a   {.  Mem *pMem;.
2c970 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2c980 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d  1>0 && pOp->p1<=
2c990 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
2c9a0 73 6f 72 29 20 29 3b 0a 20 20 70 4d 65 6d 20 3d  sor) );.  pMem =
2c9b0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2c9c0 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d  .  assert( (pMem
2c9d0 2d 3e 66 6c 61 67 73 20 26 20 7e 28 4d 45 4d 5f  ->flags & ~(MEM_
2c9e0 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d  Null|MEM_Agg))==
2c9f0 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  0 );.  rc = sqli
2ca00 74 65 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c 69  te3VdbeMemFinali
2ca10 7a 65 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34  ze(pMem, pOp->p4
2ca20 2e 70 46 75 6e 63 29 3b 0a 20 20 69 66 28 20 72  .pFunc);.  if( r
2ca30 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  c ){.    sqlite3
2ca40 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
2ca50 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c  rrMsg, db, "%s",
2ca60 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
2ca70 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20 7d 0a  ext(pMem));.  }.
2ca80 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
2ca90 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d  ngeEncoding(pMem
2caa0 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55  , encoding);.  U
2cab0 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
2cac0 5a 45 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20  ZE(pMem);.  if( 
2cad0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
2cae0 6f 42 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20  oBig(pMem) ){.  
2caf0 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
2cb00 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
2cb10 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2cb20 4d 49 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64  MIT_WAL./* Opcod
2cb30 65 3a 20 43 68 65 63 6b 70 6f 69 6e 74 20 50 31  e: Checkpoint P1
2cb40 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
2cb50 20 43 68 65 63 6b 70 6f 69 6e 74 20 64 61 74 61   Checkpoint data
2cb60 62 61 73 65 20 50 31 2e 20 54 68 69 73 20 69 73  base P1. This is
2cb70 20 61 20 6e 6f 2d 6f 70 20 69 66 20 50 31 20 69   a no-op if P1 i
2cb80 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20  s not currently 
2cb90 69 6e 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e 20  in.** WAL mode. 
2cba0 50 61 72 61 6d 65 74 65 72 20 50 32 20 69 73 20  Parameter P2 is 
2cbb0 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 43 48  one of SQLITE_CH
2cbc0 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45  ECKPOINT_PASSIVE
2cbd0 2c 20 46 55 4c 4c 0a 2a 2a 20 6f 72 20 52 45 53  , FULL.** or RES
2cbe0 54 41 52 54 2e 20 20 57 72 69 74 65 20 31 20 6f  TART.  Write 1 o
2cbf0 72 20 30 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 5d  r 0 into mem[P3]
2cc00 20 69 66 20 74 68 65 20 63 68 65 63 6b 70 6f 69   if the checkpoi
2cc10 6e 74 20 72 65 74 75 72 6e 73 0a 2a 2a 20 53 51  nt returns.** SQ
2cc20 4c 49 54 45 5f 42 55 53 59 20 6f 72 20 6e 6f 74  LITE_BUSY or not
2cc30 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
2cc40 20 57 72 69 74 65 20 74 68 65 20 6e 75 6d 62 65   Write the numbe
2cc50 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68  r of pages in th
2cc60 65 0a 2a 2a 20 57 41 4c 20 61 66 74 65 72 20 74  e.** WAL after t
2cc70 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 69 6e  he checkpoint in
2cc80 74 6f 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64  to mem[P3+1] and
2cc90 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70   the number of p
2cca0 61 67 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 57  ages.** in the W
2ccb0 41 4c 20 74 68 61 74 20 68 61 76 65 20 62 65 65  AL that have bee
2ccc0 6e 20 63 68 65 63 6b 70 6f 69 6e 74 65 64 20 61  n checkpointed a
2ccd0 66 74 65 72 20 74 68 65 20 63 68 65 63 6b 70 6f  fter the checkpo
2cce0 69 6e 74 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 73  int.** completes
2ccf0 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 32 5d 2e   into mem[P3+2].
2cd00 20 20 48 6f 77 65 76 65 72 20 6f 6e 20 61 6e 20    However on an 
2cd10 65 72 72 6f 72 2c 20 6d 65 6d 5b 50 33 2b 31 5d  error, mem[P3+1]
2cd20 20 61 6e 64 0a 2a 2a 20 6d 65 6d 5b 50 33 2b 32   and.** mem[P3+2
2cd30 5d 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65  ] are initialize
2cd40 64 20 74 6f 20 2d 31 2e 0a 2a 2f 0a 63 61 73 65  d to -1..*/.case
2cd50 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e 74 3a 20   OP_Checkpoint: 
2cd60 7b 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  {.  int i;      
2cd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd80 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e      /* Loop coun
2cd90 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 61 52 65  ter */.  int aRe
2cda0 73 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20 20  s[3];           
2cdb0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
2cdc0 6c 74 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d  lts */.  Mem *pM
2cdd0 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
2cde0 20 20 20 20 20 20 20 20 20 2f 2a 20 57 72 69 74           /* Writ
2cdf0 65 20 72 65 73 75 6c 74 73 20 68 65 72 65 20 2a  e results here *
2ce00 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  /..  assert( p->
2ce10 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
2ce20 20 61 52 65 73 5b 30 5d 20 3d 20 30 3b 0a 20 20   aRes[0] = 0;.  
2ce30 61 52 65 73 5b 31 5d 20 3d 20 61 52 65 73 5b 32  aRes[1] = aRes[2
2ce40 5d 20 3d 20 2d 31 3b 0a 20 20 61 73 73 65 72 74  ] = -1;.  assert
2ce50 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  ( pOp->p2==SQLIT
2ce60 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53  E_CHECKPOINT_PAS
2ce70 53 49 56 45 0a 20 20 20 20 20 20 20 7c 7c 20 70  SIVE.       || p
2ce80 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43  Op->p2==SQLITE_C
2ce90 48 45 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c 0a 20  HECKPOINT_FULL. 
2cea0 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32        || pOp->p2
2ceb0 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f  ==SQLITE_CHECKPO
2cec0 49 4e 54 5f 52 45 53 54 41 52 54 0a 20 20 29 3b  INT_RESTART.  );
2ced0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 43  .  rc = sqlite3C
2cee0 68 65 63 6b 70 6f 69 6e 74 28 64 62 2c 20 70 4f  heckpoint(db, pO
2cef0 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20  p->p1, pOp->p2, 
2cf00 26 61 52 65 73 5b 31 5d 2c 20 26 61 52 65 73 5b  &aRes[1], &aRes[
2cf10 32 5d 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  2]);.  if( rc==S
2cf20 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
2cf30 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
2cf40 3b 0a 20 20 20 20 61 52 65 73 5b 30 5d 20 3d 20  ;.    aRes[0] = 
2cf50 31 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30  1;.  }.  for(i=0
2cf60 2c 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70  , pMem = &aMem[p
2cf70 4f 70 2d 3e 70 33 5d 3b 20 69 3c 33 3b 20 69 2b  Op->p3]; i<3; i+
2cf80 2b 2c 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20  +, pMem++){.    
2cf90 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
2cfa0 74 49 6e 74 36 34 28 70 4d 65 6d 2c 20 28 69 36  tInt64(pMem, (i6
2cfb0 34 29 61 52 65 73 5b 69 5d 29 3b 0a 20 20 7d 20  4)aRes[i]);.  } 
2cfc0 20 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 20     .  break;.}; 
2cfd0 20 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65   .#endif..#ifnde
2cfe0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
2cff0 41 47 4d 41 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  AGMA./* Opcode: 
2d000 4a 6f 75 72 6e 61 6c 4d 6f 64 65 20 50 31 20 50  JournalMode P1 P
2d010 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43  2 P3 * *.**.** C
2d020 68 61 6e 67 65 20 74 68 65 20 6a 6f 75 72 6e 61  hange the journa
2d030 6c 20 6d 6f 64 65 20 6f 66 20 64 61 74 61 62 61  l mode of databa
2d040 73 65 20 50 31 20 74 6f 20 50 33 2e 20 50 33 20  se P1 to P3. P3 
2d050 6d 75 73 74 20 62 65 20 6f 6e 65 20 6f 66 20 74  must be one of t
2d060 68 65 0a 2a 2a 20 50 41 47 45 52 5f 4a 4f 55 52  he.** PAGER_JOUR
2d070 4e 41 4c 4d 4f 44 45 5f 58 58 58 20 76 61 6c 75  NALMODE_XXX valu
2d080 65 73 2e 20 49 66 20 63 68 61 6e 67 69 6e 67 20  es. If changing 
2d090 62 65 74 77 65 65 6e 20 74 68 65 20 76 61 72 69  between the vari
2d0a0 6f 75 73 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20  ous rollback.** 
2d0b0 6d 6f 64 65 73 20 28 64 65 6c 65 74 65 2c 20 74  modes (delete, t
2d0c0 72 75 6e 63 61 74 65 2c 20 70 65 72 73 69 73 74  runcate, persist
2d0d0 2c 20 6f 66 66 20 61 6e 64 20 6d 65 6d 6f 72 79  , off and memory
2d0e0 29 2c 20 74 68 69 73 20 69 73 20 61 20 73 69 6d  ), this is a sim
2d0f0 70 6c 65 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e  ple.** operation
2d100 2e 20 4e 6f 20 49 4f 20 69 73 20 72 65 71 75 69  . No IO is requi
2d110 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63 68  red..**.** If ch
2d120 61 6e 67 69 6e 67 20 69 6e 74 6f 20 6f 72 20 6f  anging into or o
2d130 75 74 20 6f 66 20 57 41 4c 20 6d 6f 64 65 20 74  ut of WAL mode t
2d140 68 65 20 70 72 6f 63 65 64 75 72 65 20 69 73 20  he procedure is 
2d150 6d 6f 72 65 20 63 6f 6d 70 6c 69 63 61 74 65 64  more complicated
2d160 2e 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20  ..**.** Write a 
2d170 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e  string containin
2d180 67 20 74 68 65 20 66 69 6e 61 6c 20 6a 6f 75 72  g the final jour
2d190 6e 61 6c 2d 6d 6f 64 65 20 74 6f 20 72 65 67 69  nal-mode to regi
2d1a0 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
2d1b0 20 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 3a   OP_JournalMode:
2d1c0 20 7b 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72   {    /* out2-pr
2d1d0 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 42 74  erelease */.  Bt
2d1e0 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20  ree *pBt;       
2d1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2d200 20 42 74 72 65 65 20 74 6f 20 63 68 61 6e 67 65   Btree to change
2d210 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66   journal mode of
2d220 20 2a 2f 0a 20 20 50 61 67 65 72 20 2a 70 50 61   */.  Pager *pPa
2d230 67 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  ger;            
2d240 20 20 20 20 20 20 2f 2a 20 50 61 67 65 72 20 61        /* Pager a
2d250 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 70  ssociated with p
2d260 42 74 20 2a 2f 0a 20 20 69 6e 74 20 65 4e 65 77  Bt */.  int eNew
2d270 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2d280 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 6a          /* New j
2d290 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20  ournal mode */. 
2d2a0 20 69 6e 74 20 65 4f 6c 64 3b 20 20 20 20 20 20   int eOld;      
2d2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d2c0 20 2f 2a 20 54 68 65 20 6f 6c 64 20 6a 6f 75 72   /* The old jour
2d2d0 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 23 69 66 6e  nal mode */.#ifn
2d2e0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2d2f0 57 41 4c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  WAL.  const char
2d300 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b 20 20 20 20   *zFilename;    
2d310 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
2d320 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 66   database file f
2d330 6f 72 20 70 50 61 67 65 72 20 2a 2f 0a 23 65 6e  or pPager */.#en
2d340 64 69 66 0a 0a 20 20 65 4e 65 77 20 3d 20 70 4f  dif..  eNew = pO
2d350 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28  p->p3;.  assert(
2d360 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2d370 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c 45 54 45 20  RNALMODE_DELETE 
2d380 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
2d390 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2d3a0 44 45 5f 54 52 55 4e 43 41 54 45 20 0a 20 20 20  DE_TRUNCATE .   
2d3b0 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
2d3c0 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50  ER_JOURNALMODE_P
2d3d0 45 52 53 49 53 54 20 0a 20 20 20 20 20 20 20 7c  ERSIST .       |
2d3e0 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
2d3f0 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 0a 20 20  URNALMODE_OFF.  
2d400 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
2d410 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2d420 4d 45 4d 4f 52 59 0a 20 20 20 20 20 20 20 7c 7c  MEMORY.       ||
2d430 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2d440 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20  RNALMODE_WAL.   
2d450 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
2d460 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51  ER_JOURNALMODE_Q
2d470 55 45 52 59 0a 20 20 29 3b 0a 20 20 61 73 73 65  UERY.  );.  asse
2d480 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
2d490 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
2d4a0 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  b );.  assert( p
2d4b0 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
2d4c0 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44  ..  pBt = db->aD
2d4d0 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a  b[pOp->p1].pBt;.
2d4e0 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74    pPager = sqlit
2d4f0 65 33 42 74 72 65 65 50 61 67 65 72 28 70 42 74  e3BtreePager(pBt
2d500 29 3b 0a 20 20 65 4f 6c 64 20 3d 20 73 71 6c 69  );.  eOld = sqli
2d510 74 65 33 50 61 67 65 72 47 65 74 4a 6f 75 72 6e  te3PagerGetJourn
2d520 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 3b 0a  alMode(pPager);.
2d530 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41 47 45    if( eNew==PAGE
2d540 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55  R_JOURNALMODE_QU
2d550 45 52 59 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c  ERY ) eNew = eOl
2d560 64 3b 0a 20 20 69 66 28 20 21 73 71 6c 69 74 65  d;.  if( !sqlite
2d570 33 50 61 67 65 72 4f 6b 54 6f 43 68 61 6e 67 65  3PagerOkToChange
2d580 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67  JournalMode(pPag
2d590 65 72 29 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c  er) ) eNew = eOl
2d5a0 64 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  d;..#ifndef SQLI
2d5b0 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 7a 46  TE_OMIT_WAL.  zF
2d5c0 69 6c 65 6e 61 6d 65 20 3d 20 73 71 6c 69 74 65  ilename = sqlite
2d5d0 33 50 61 67 65 72 46 69 6c 65 6e 61 6d 65 28 70  3PagerFilename(p
2d5e0 50 61 67 65 72 2c 20 31 29 3b 0a 0a 20 20 2f 2a  Pager, 1);..  /*
2d5f0 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 61 20   Do not allow a 
2d600 74 72 61 6e 73 69 74 69 6f 6e 20 74 6f 20 6a 6f  transition to jo
2d610 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 20 66  urnal_mode=WAL f
2d620 6f 72 20 61 20 64 61 74 61 62 61 73 65 0a 20 20  or a database.  
2d630 2a 2a 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20  ** in temporary 
2d640 73 74 6f 72 61 67 65 20 6f 72 20 69 66 20 74 68  storage or if th
2d650 65 20 56 46 53 20 64 6f 65 73 20 6e 6f 74 20 73  e VFS does not s
2d660 75 70 70 6f 72 74 20 73 68 61 72 65 64 20 6d 65  upport shared me
2d670 6d 6f 72 79 20 0a 20 20 2a 2f 0a 20 20 69 66 28  mory .  */.  if(
2d680 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2d690 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20  RNALMODE_WAL.   
2d6a0 26 26 20 28 73 71 6c 69 74 65 33 53 74 72 6c 65  && (sqlite3Strle
2d6b0 6e 33 30 28 7a 46 69 6c 65 6e 61 6d 65 29 3d 3d  n30(zFilename)==
2d6c0 30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  0           /* T
2d6d0 65 6d 70 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20  emp file */.    
2d6e0 20 20 20 7c 7c 20 21 73 71 6c 69 74 65 33 50 61     || !sqlite3Pa
2d6f0 67 65 72 57 61 6c 53 75 70 70 6f 72 74 65 64 28  gerWalSupported(
2d700 70 50 61 67 65 72 29 29 20 20 20 2f 2a 20 4e 6f  pPager))   /* No
2d710 20 73 68 61 72 65 64 2d 6d 65 6d 6f 72 79 20 73   shared-memory s
2d720 75 70 70 6f 72 74 20 2a 2f 0a 20 20 29 7b 0a 20  upport */.  ){. 
2d730 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a     eNew = eOld;.
2d740 20 20 7d 0a 0a 20 20 69 66 28 20 28 65 4e 65 77    }..  if( (eNew
2d750 21 3d 65 4f 6c 64 29 0a 20 20 20 26 26 20 28 65  !=eOld).   && (e
2d760 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  Old==PAGER_JOURN
2d770 41 4c 4d 4f 44 45 5f 57 41 4c 20 7c 7c 20 65 4e  ALMODE_WAL || eN
2d780 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2d790 4c 4d 4f 44 45 5f 57 41 4c 29 0a 20 20 29 7b 0a  LMODE_WAL).  ){.
2d7a0 20 20 20 20 69 66 28 20 21 64 62 2d 3e 61 75 74      if( !db->aut
2d7b0 6f 43 6f 6d 6d 69 74 20 7c 7c 20 64 62 2d 3e 6e  oCommit || db->n
2d7c0 56 64 62 65 52 65 61 64 3e 31 20 29 7b 0a 20 20  VdbeRead>1 ){.  
2d7d0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
2d7e0 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 73 71 6c  ERROR;.      sql
2d7f0 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
2d800 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 0a  ->zErrMsg, db, .
2d810 20 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f            "canno
2d820 74 20 63 68 61 6e 67 65 20 25 73 20 77 61 6c 20  t change %s wal 
2d830 6d 6f 64 65 20 66 72 6f 6d 20 77 69 74 68 69 6e  mode from within
2d840 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 2c   a transaction",
2d850 0a 20 20 20 20 20 20 20 20 20 20 28 65 4e 65 77  .          (eNew
2d860 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2d870 4f 44 45 5f 57 41 4c 20 3f 20 22 69 6e 74 6f 22  ODE_WAL ? "into"
2d880 20 3a 20 22 6f 75 74 20 6f 66 22 29 0a 20 20 20   : "out of").   
2d890 20 20 20 29 3b 0a 20 20 20 20 20 20 62 72 65 61     );.      brea
2d8a0 6b 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 0a  k;.    }else{. .
2d8b0 20 20 20 20 20 20 69 66 28 20 65 4f 6c 64 3d 3d        if( eOld==
2d8c0 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2d8d0 45 5f 57 41 4c 20 29 7b 0a 20 20 20 20 20 20 20  E_WAL ){.       
2d8e0 20 2f 2a 20 49 66 20 6c 65 61 76 69 6e 67 20 57   /* If leaving W
2d8f0 41 4c 20 6d 6f 64 65 2c 20 63 6c 6f 73 65 20 74  AL mode, close t
2d900 68 65 20 6c 6f 67 20 66 69 6c 65 2e 20 49 66 20  he log file. If 
2d910 73 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65 20  successful, the 
2d920 63 61 6c 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20  call.        ** 
2d930 74 6f 20 50 61 67 65 72 43 6c 6f 73 65 57 61 6c  to PagerCloseWal
2d940 28 29 20 63 68 65 63 6b 70 6f 69 6e 74 73 20 61  () checkpoints a
2d950 6e 64 20 64 65 6c 65 74 65 73 20 74 68 65 20 77  nd deletes the w
2d960 72 69 74 65 2d 61 68 65 61 64 2d 6c 6f 67 20 0a  rite-ahead-log .
2d970 20 20 20 20 20 20 20 20 2a 2a 20 66 69 6c 65 2e          ** file.
2d980 20 41 6e 20 45 58 43 4c 55 53 49 56 45 20 6c 6f   An EXCLUSIVE lo
2d990 63 6b 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20  ck may still be 
2d9a0 68 65 6c 64 20 6f 6e 20 74 68 65 20 64 61 74 61  held on the data
2d9b0 62 61 73 65 20 66 69 6c 65 20 0a 20 20 20 20 20  base file .     
2d9c0 20 20 20 2a 2a 20 61 66 74 65 72 20 61 20 73 75     ** after a su
2d9d0 63 63 65 73 73 66 75 6c 20 72 65 74 75 72 6e 2e  ccessful return.
2d9e0 20 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20   .        */.   
2d9f0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
2da00 33 50 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 70  3PagerCloseWal(p
2da10 50 61 67 65 72 29 3b 0a 20 20 20 20 20 20 20 20  Pager);.        
2da20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
2da30 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  K ){.          s
2da40 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f  qlite3PagerSetJo
2da50 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72  urnalMode(pPager
2da60 2c 20 65 4e 65 77 29 3b 0a 20 20 20 20 20 20 20  , eNew);.       
2da70 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69   }.      }else i
2da80 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a  f( eOld==PAGER_J
2da90 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52  OURNALMODE_MEMOR
2daa0 59 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  Y ){.        /* 
2dab0 43 61 6e 6e 6f 74 20 74 72 61 6e 73 69 74 69 6f  Cannot transitio
2dac0 6e 20 64 69 72 65 63 74 6c 79 20 66 72 6f 6d 20  n directly from 
2dad0 4d 45 4d 4f 52 59 20 74 6f 20 57 41 4c 2e 20 20  MEMORY to WAL.  
2dae0 55 73 65 20 6d 6f 64 65 20 4f 46 46 0a 20 20 20  Use mode OFF.   
2daf0 20 20 20 20 20 2a 2a 20 61 73 20 61 6e 20 69 6e       ** as an in
2db00 74 65 72 6d 65 64 69 61 74 65 20 2a 2f 0a 20 20  termediate */.  
2db10 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 67        sqlite3Pag
2db20 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65  erSetJournalMode
2db30 28 70 50 61 67 65 72 2c 20 50 41 47 45 52 5f 4a  (pPager, PAGER_J
2db40 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 29 3b  OURNALMODE_OFF);
2db50 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20  .      }.  .    
2db60 20 20 2f 2a 20 4f 70 65 6e 20 61 20 74 72 61 6e    /* Open a tran
2db70 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 20 64  saction on the d
2db80 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 52 65  atabase file. Re
2db90 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20  gardless of the 
2dba0 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 20 20 2a 2a  journal.      **
2dbb0 20 6d 6f 64 65 2c 20 74 68 69 73 20 74 72 61 6e   mode, this tran
2dbc0 73 61 63 74 69 6f 6e 20 61 6c 77 61 79 73 20 75  saction always u
2dbd0 73 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a  ses a rollback j
2dbe0 6f 75 72 6e 61 6c 2e 0a 20 20 20 20 20 20 2a 2f  ournal..      */
2dbf0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73  .      assert( s
2dc00 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e 54  qlite3BtreeIsInT
2dc10 72 61 6e 73 28 70 42 74 29 3d 3d 30 20 29 3b 0a  rans(pBt)==0 );.
2dc20 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
2dc30 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
2dc40 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
2dc50 74 72 65 65 53 65 74 56 65 72 73 69 6f 6e 28 70  treeSetVersion(p
2dc60 42 74 2c 20 28 65 4e 65 77 3d 3d 50 41 47 45 52  Bt, (eNew==PAGER
2dc70 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
2dc80 20 3f 20 32 20 3a 20 31 29 29 3b 0a 20 20 20 20   ? 2 : 1));.    
2dc90 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65    }.    }.  }.#e
2dca0 6e 64 69 66 20 2f 2a 20 69 66 6e 64 65 66 20 53  ndif /* ifndef S
2dcb0 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a  QLITE_OMIT_WAL *
2dcc0 2f 0a 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20  /..  if( rc ){. 
2dcd0 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a     eNew = eOld;.
2dce0 20 20 7d 0a 20 20 65 4e 65 77 20 3d 20 73 71 6c    }.  eNew = sql
2dcf0 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72  ite3PagerSetJour
2dd00 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20  nalMode(pPager, 
2dd10 65 4e 65 77 29 3b 0a 0a 20 20 70 4f 75 74 20 3d  eNew);..  pOut =
2dd20 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
2dd30 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
2dd40 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61   MEM_Str|MEM_Sta
2dd50 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20  tic|MEM_Term;.  
2dd60 70 4f 75 74 2d 3e 7a 20 3d 20 28 63 68 61 72 20  pOut->z = (char 
2dd70 2a 29 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  *)sqlite3Journal
2dd80 4d 6f 64 65 6e 61 6d 65 28 65 4e 65 77 29 3b 0a  Modename(eNew);.
2dd90 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 73 71 6c 69    pOut->n = sqli
2dda0 74 65 33 53 74 72 6c 65 6e 33 30 28 70 4f 75 74  te3Strlen30(pOut
2ddb0 2d 3e 7a 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e  ->z);.  pOut->en
2ddc0 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b  c = SQLITE_UTF8;
2ddd0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  .  sqlite3VdbeCh
2dde0 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75  angeEncoding(pOu
2ddf0 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  t, encoding);.  
2de00 62 72 65 61 6b 3b 0a 7d 3b 0a 23 65 6e 64 69 66  break;.};.#endif
2de10 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2de20 50 52 41 47 4d 41 20 2a 2f 0a 0a 23 69 66 20 21  PRAGMA */..#if !
2de30 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2de40 4d 49 54 5f 56 41 43 55 55 4d 29 20 26 26 20 21  MIT_VACUUM) && !
2de50 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2de60 4d 49 54 5f 41 54 54 41 43 48 29 0a 2f 2a 20 4f  MIT_ATTACH)./* O
2de70 70 63 6f 64 65 3a 20 56 61 63 75 75 6d 20 2a 20  pcode: Vacuum * 
2de80 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61  * * * *.**.** Va
2de90 63 75 75 6d 20 74 68 65 20 65 6e 74 69 72 65 20  cuum the entire 
2dea0 64 61 74 61 62 61 73 65 2e 20 20 54 68 69 73 20  database.  This 
2deb0 6f 70 63 6f 64 65 20 77 69 6c 6c 20 63 61 75 73  opcode will caus
2dec0 65 20 6f 74 68 65 72 20 76 69 72 74 75 61 6c 0a  e other virtual.
2ded0 2a 2a 20 6d 61 63 68 69 6e 65 73 20 74 6f 20 62  ** machines to b
2dee0 65 20 63 72 65 61 74 65 64 20 61 6e 64 20 72 75  e created and ru
2def0 6e 2e 20 20 49 74 20 6d 61 79 20 6e 6f 74 20 62  n.  It may not b
2df00 65 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69  e called from wi
2df10 74 68 69 6e 0a 2a 2a 20 61 20 74 72 61 6e 73 61  thin.** a transa
2df20 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
2df30 50 5f 56 61 63 75 75 6d 3a 20 7b 0a 20 20 61 73  P_Vacuum: {.  as
2df40 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
2df50 79 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73  y==0 );.  rc = s
2df60 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28  qlite3RunVacuum(
2df70 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 29  &p->zErrMsg, db)
2df80 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
2df90 64 69 66 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  dif..#if !define
2dfa0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  d(SQLITE_OMIT_AU
2dfb0 54 4f 56 41 43 55 55 4d 29 0a 2f 2a 20 4f 70 63  TOVACUUM)./* Opc
2dfc0 6f 64 65 3a 20 49 6e 63 72 56 61 63 75 75 6d 20  ode: IncrVacuum 
2dfd0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
2dfe0 2a 20 50 65 72 66 6f 72 6d 20 61 20 73 69 6e 67  * Perform a sing
2dff0 6c 65 20 73 74 65 70 20 6f 66 20 74 68 65 20 69  le step of the i
2e000 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61 63 75 75  ncremental vacuu
2e010 6d 20 70 72 6f 63 65 64 75 72 65 20 6f 6e 0a 2a  m procedure on.*
2e020 2a 20 74 68 65 20 50 31 20 64 61 74 61 62 61 73  * the P1 databas
2e030 65 2e 20 49 66 20 74 68 65 20 76 61 63 75 75 6d  e. If the vacuum
2e040 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c 20 6a   has finished, j
2e050 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
2e060 6f 6e 0a 2a 2a 20 50 32 2e 20 4f 74 68 65 72 77  on.** P2. Otherw
2e070 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  ise, fall throug
2e080 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
2e090 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
2e0a0 73 65 20 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d  se OP_IncrVacuum
2e0b0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
2e0c0 6d 70 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70  mp */.  Btree *p
2e0d0 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  Bt;..  assert( p
2e0e0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
2e0f0 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
2e100 20 20 61 73 73 65 72 74 28 20 28 70 2d 3e 62 74    assert( (p->bt
2e110 72 65 65 4d 61 73 6b 20 26 20 28 28 28 79 44 62  reeMask & (((yDb
2e120 4d 61 73 6b 29 31 29 3c 3c 70 4f 70 2d 3e 70 31  Mask)1)<<pOp->p1
2e130 29 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ))!=0 );.  asser
2e140 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
2e150 30 20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d  0 );.  pBt = db-
2e160 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42  >aDb[pOp->p1].pB
2e170 74 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  t;.  rc = sqlite
2e180 33 42 74 72 65 65 49 6e 63 72 56 61 63 75 75 6d  3BtreeIncrVacuum
2e190 28 70 42 74 29 3b 0a 20 20 56 64 62 65 42 72 61  (pBt);.  VdbeBra
2e1a0 6e 63 68 54 61 6b 65 6e 28 72 63 3d 3d 53 51 4c  nchTaken(rc==SQL
2e1b0 49 54 45 5f 44 4f 4e 45 2c 32 29 3b 0a 20 20 69  ITE_DONE,2);.  i
2e1c0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f  f( rc==SQLITE_DO
2e1d0 4e 45 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  NE ){.    pc = p
2e1e0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20  Op->p2 - 1;.    
2e1f0 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
2e200 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
2e210 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65  endif../* Opcode
2e220 3a 20 45 78 70 69 72 65 20 50 31 20 2a 20 2a 20  : Expire P1 * * 
2e230 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65 20  * *.**.** Cause 
2e240 70 72 65 63 6f 6d 70 69 6c 65 64 20 73 74 61 74  precompiled stat
2e250 65 6d 65 6e 74 73 20 74 6f 20 62 65 63 6f 6d 65  ements to become
2e260 20 65 78 70 69 72 65 64 2e 20 41 6e 20 65 78 70   expired. An exp
2e270 69 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a  ired statement.*
2e280 2a 20 66 61 69 6c 73 20 77 69 74 68 20 61 6e 20  * fails with an 
2e290 65 72 72 6f 72 20 63 6f 64 65 20 6f 66 20 53 51  error code of SQ
2e2a0 4c 49 54 45 5f 53 43 48 45 4d 41 20 69 66 20 69  LITE_SCHEMA if i
2e2b0 74 20 69 73 20 65 76 65 72 20 65 78 65 63 75 74  t is ever execut
2e2c0 65 64 20 0a 2a 2a 20 28 76 69 61 20 73 71 6c 69  ed .** (via sqli
2e2d0 74 65 33 5f 73 74 65 70 28 29 29 2e 0a 2a 2a 20  te3_step())..** 
2e2e0 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 30 2c 20  .** If P1 is 0, 
2e2f0 74 68 65 6e 20 61 6c 6c 20 53 51 4c 20 73 74 61  then all SQL sta
2e300 74 65 6d 65 6e 74 73 20 62 65 63 6f 6d 65 20 65  tements become e
2e310 78 70 69 72 65 64 2e 20 49 66 20 50 31 20 69 73  xpired. If P1 is
2e320 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68   non-zero,.** th
2e330 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63 75 72 72  en only the curr
2e340 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20  ently executing 
2e350 73 74 61 74 65 6d 65 6e 74 20 69 73 20 61 66 66  statement is aff
2e360 65 63 74 65 64 2e 20 0a 2a 2f 0a 63 61 73 65 20  ected. .*/.case 
2e370 4f 50 5f 45 78 70 69 72 65 3a 20 7b 0a 20 20 69  OP_Expire: {.  i
2e380 66 28 20 21 70 4f 70 2d 3e 70 31 20 29 7b 0a 20  f( !pOp->p1 ){. 
2e390 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65     sqlite3Expire
2e3a0 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
2e3b0 74 73 28 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b  ts(db);.  }else{
2e3c0 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20  .    p->expired 
2e3d0 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  = 1;.  }.  break
2e3e0 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
2e3f0 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
2e400 43 41 43 48 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  CACHE./* Opcode:
2e410 20 54 61 62 6c 65 4c 6f 63 6b 20 50 31 20 50 32   TableLock P1 P2
2e420 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
2e430 70 73 69 73 3a 20 69 44 62 3d 50 31 20 72 6f 6f  psis: iDb=P1 roo
2e440 74 3d 50 32 20 77 72 69 74 65 3d 50 33 0a 2a 2a  t=P2 write=P3.**
2e450 0a 2a 2a 20 4f 62 74 61 69 6e 20 61 20 6c 6f 63  .** Obtain a loc
2e460 6b 20 6f 6e 20 61 20 70 61 72 74 69 63 75 6c 61  k on a particula
2e470 72 20 74 61 62 6c 65 2e 20 54 68 69 73 20 69 6e  r table. This in
2e480 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 6e 6c  struction is onl
2e490 79 20 75 73 65 64 20 77 68 65 6e 0a 2a 2a 20 74  y used when.** t
2e4a0 68 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  he shared-cache 
2e4b0 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c  feature is enabl
2e4c0 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  ed. .**.** P1 is
2e4d0 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68   the index of th
2e4e0 65 20 64 61 74 61 62 61 73 65 20 69 6e 20 73 71  e database in sq
2e4f0 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 74  lite3.aDb[] of t
2e500 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 6f  he database.** o
2e510 6e 20 77 68 69 63 68 20 74 68 65 20 6c 6f 63 6b  n which the lock
2e520 20 69 73 20 61 63 71 75 69 72 65 64 2e 20 20 41   is acquired.  A
2e530 20 72 65 61 64 6c 6f 63 6b 20 69 73 20 6f 62 74   readlock is obt
2e540 61 69 6e 65 64 20 69 66 20 50 33 3d 3d 30 20 6f  ained if P3==0 o
2e550 72 0a 2a 2a 20 61 20 77 72 69 74 65 20 6c 6f 63  r.** a write loc
2e560 6b 20 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a  k if P3==1..**.*
2e570 2a 20 50 32 20 63 6f 6e 74 61 69 6e 73 20 74 68  * P2 contains th
2e580 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74  e root-page of t
2e590 68 65 20 74 61 62 6c 65 20 74 6f 20 6c 6f 63 6b  he table to lock
2e5a0 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74 61  ..**.** P4 conta
2e5b0 69 6e 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  ins a pointer to
2e5c0 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
2e5d0 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6c 6f 63   table being loc
2e5e0 6b 65 64 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c  ked. This is onl
2e5f0 79 0a 2a 2a 20 75 73 65 64 20 74 6f 20 67 65 6e  y.** used to gen
2e600 65 72 61 74 65 20 61 6e 20 65 72 72 6f 72 20 6d  erate an error m
2e610 65 73 73 61 67 65 20 69 66 20 74 68 65 20 6c 6f  essage if the lo
2e620 63 6b 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74  ck cannot be obt
2e630 61 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ained..*/.case O
2e640 50 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20  P_TableLock: {. 
2e650 20 75 38 20 69 73 57 72 69 74 65 4c 6f 63 6b 20   u8 isWriteLock 
2e660 3d 20 28 75 38 29 70 4f 70 2d 3e 70 33 3b 0a 20  = (u8)pOp->p3;. 
2e670 20 69 66 28 20 69 73 57 72 69 74 65 4c 6f 63 6b   if( isWriteLock
2e680 20 7c 7c 20 30 3d 3d 28 64 62 2d 3e 66 6c 61 67   || 0==(db->flag
2e690 73 26 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63  s&SQLITE_ReadUnc
2e6a0 6f 6d 6d 69 74 74 65 64 29 20 29 7b 0a 20 20 20  ommitted) ){.   
2e6b0 20 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70   int p1 = pOp->p
2e6c0 31 3b 20 0a 20 20 20 20 61 73 73 65 72 74 28 20  1; .    assert( 
2e6d0 70 31 3e 3d 30 20 26 26 20 70 31 3c 64 62 2d 3e  p1>=0 && p1<db->
2e6e0 6e 44 62 20 29 3b 0a 20 20 20 20 61 73 73 65 72  nDb );.    asser
2e6f0 74 28 20 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  t( (p->btreeMask
2e700 20 26 20 28 28 28 79 44 62 4d 61 73 6b 29 31 29   & (((yDbMask)1)
2e710 3c 3c 70 31 29 29 21 3d 30 20 29 3b 0a 20 20 20  <<p1))!=0 );.   
2e720 20 61 73 73 65 72 74 28 20 69 73 57 72 69 74 65   assert( isWrite
2e730 4c 6f 63 6b 3d 3d 30 20 7c 7c 20 69 73 57 72 69  Lock==0 || isWri
2e740 74 65 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20 20  teLock==1 );.   
2e750 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2e760 65 65 4c 6f 63 6b 54 61 62 6c 65 28 64 62 2d 3e  eeLockTable(db->
2e770 61 44 62 5b 70 31 5d 2e 70 42 74 2c 20 70 4f 70  aDb[p1].pBt, pOp
2e780 2d 3e 70 32 2c 20 69 73 57 72 69 74 65 4c 6f 63  ->p2, isWriteLoc
2e790 6b 29 3b 0a 20 20 20 20 69 66 28 20 28 72 63 26  k);.    if( (rc&
2e7a0 30 78 46 46 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f  0xFF)==SQLITE_LO
2e7b0 43 4b 45 44 20 29 7b 0a 20 20 20 20 20 20 63 6f  CKED ){.      co
2e7c0 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20 70 4f  nst char *z = pO
2e7d0 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 20 20 73  p->p4.z;.      s
2e7e0 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
2e7f0 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
2e800 20 22 64 61 74 61 62 61 73 65 20 74 61 62 6c 65   "database table
2e810 20 69 73 20 6c 6f 63 6b 65 64 3a 20 25 73 22 2c   is locked: %s",
2e820 20 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20   z);.    }.  }. 
2e830 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2e840 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2e850 53 48 41 52 45 44 5f 43 41 43 48 45 20 2a 2f 0a  SHARED_CACHE */.
2e860 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2e870 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2e880 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 42 65  E./* Opcode: VBe
2e890 67 69 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a  gin * * * P4 *.*
2e8a0 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61  *.** P4 may be a
2e8b0 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 73   pointer to an s
2e8c0 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75  qlite3_vtab stru
2e8d0 63 74 75 72 65 2e 20 49 66 20 73 6f 2c 20 63 61  cture. If so, ca
2e8e0 6c 6c 20 74 68 65 20 0a 2a 2a 20 78 42 65 67 69  ll the .** xBegi
2e8f0 6e 20 6d 65 74 68 6f 64 20 66 6f 72 20 74 68 61  n method for tha
2e900 74 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41  t table..**.** A
2e910 6c 73 6f 2c 20 77 68 65 74 68 65 72 20 6f 72 20  lso, whether or 
2e920 6e 6f 74 20 50 34 20 69 73 20 73 65 74 2c 20 63  not P4 is set, c
2e930 68 65 63 6b 20 74 68 61 74 20 74 68 69 73 20 69  heck that this i
2e940 73 20 6e 6f 74 20 62 65 69 6e 67 20 63 61 6c 6c  s not being call
2e950 65 64 20 66 72 6f 6d 0a 2a 2a 20 77 69 74 68 69  ed from.** withi
2e960 6e 20 61 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20  n a callback to 
2e970 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
2e980 78 53 79 6e 63 28 29 20 6d 65 74 68 6f 64 2e 20  xSync() method. 
2e990 49 66 20 69 74 20 69 73 2c 20 74 68 65 20 65 72  If it is, the er
2e9a0 72 6f 72 0a 2a 2a 20 63 6f 64 65 20 77 69 6c 6c  ror.** code will
2e9b0 20 62 65 20 73 65 74 20 74 6f 20 53 51 4c 49 54   be set to SQLIT
2e9c0 45 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a 63 61 73  E_LOCKED..*/.cas
2e9d0 65 20 4f 50 5f 56 42 65 67 69 6e 3a 20 7b 0a 20  e OP_VBegin: {. 
2e9e0 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62 3b 0a   VTable *pVTab;.
2e9f0 20 20 70 56 54 61 62 20 3d 20 70 4f 70 2d 3e 70    pVTab = pOp->p
2ea00 34 2e 70 56 74 61 62 3b 0a 20 20 72 63 20 3d 20  4.pVtab;.  rc = 
2ea10 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e  sqlite3VtabBegin
2ea20 28 64 62 2c 20 70 56 54 61 62 29 3b 0a 20 20 69  (db, pVTab);.  i
2ea30 66 28 20 70 56 54 61 62 20 29 20 73 71 6c 69 74  f( pVTab ) sqlit
2ea40 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
2ea50 73 67 28 70 2c 20 70 56 54 61 62 2d 3e 70 56 74  sg(p, pVTab->pVt
2ea60 61 62 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ab);.  break;.}.
2ea70 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2ea80 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
2ea90 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
2eaa0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
2eab0 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
2eac0 65 3a 20 56 43 72 65 61 74 65 20 50 31 20 2a 20  e: VCreate P1 * 
2ead0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
2eae0 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  is the name of a
2eaf0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
2eb00 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 43  n database P1. C
2eb10 61 6c 6c 20 74 68 65 20 78 43 72 65 61 74 65 20  all the xCreate 
2eb20 6d 65 74 68 6f 64 0a 2a 2a 20 66 6f 72 20 74 68  method.** for th
2eb30 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73  at table..*/.cas
2eb40 65 20 4f 50 5f 56 43 72 65 61 74 65 3a 20 7b 0a  e OP_VCreate: {.
2eb50 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74    rc = sqlite3Vt
2eb60 61 62 43 61 6c 6c 43 72 65 61 74 65 28 64 62 2c  abCallCreate(db,
2eb70 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
2eb80 34 2e 7a 2c 20 26 70 2d 3e 7a 45 72 72 4d 73 67  4.z, &p->zErrMsg
2eb90 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  );.  break;.}.#e
2eba0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
2ebb0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
2ebc0 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
2ebd0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2ebe0 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
2ebf0 20 56 44 65 73 74 72 6f 79 20 50 31 20 2a 20 2a   VDestroy P1 * *
2ec00 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69   P4 *.**.** P4 i
2ec10 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20  s the name of a 
2ec20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e  virtual table in
2ec30 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 43   database P1.  C
2ec40 61 6c 6c 20 74 68 65 20 78 44 65 73 74 72 6f 79  all the xDestroy
2ec50 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66 20 74 68   method.** of th
2ec60 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73  at table..*/.cas
2ec70 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 3a 20 7b  e OP_VDestroy: {
2ec80 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68  .  p->inVtabMeth
2ec90 6f 64 20 3d 20 32 3b 0a 20 20 72 63 20 3d 20 73  od = 2;.  rc = s
2eca0 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65  qlite3VtabCallDe
2ecb0 73 74 72 6f 79 28 64 62 2c 20 70 4f 70 2d 3e 70  stroy(db, pOp->p
2ecc0 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  1, pOp->p4.z);. 
2ecd0 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64   p->inVtabMethod
2ece0 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = 0;.  break;.}
2ecf0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
2ed00 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2ed10 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
2ed20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
2ed30 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
2ed40 64 65 3a 20 56 4f 70 65 6e 20 50 31 20 2a 20 2a  de: VOpen P1 * *
2ed50 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69   P4 *.**.** P4 i
2ed60 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
2ed70 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f   virtual table o
2ed80 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65  bject, an sqlite
2ed90 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
2eda0 2e 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75 72  ..** P1 is a cur
2edb0 73 6f 72 20 6e 75 6d 62 65 72 2e 20 20 54 68 69  sor number.  Thi
2edc0 73 20 6f 70 63 6f 64 65 20 6f 70 65 6e 73 20 61  s opcode opens a
2edd0 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20 76   cursor to the v
2ede0 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20  irtual.** table 
2edf0 61 6e 64 20 73 74 6f 72 65 73 20 74 68 61 74 20  and stores that 
2ee00 63 75 72 73 6f 72 20 69 6e 20 50 31 2e 0a 2a 2f  cursor in P1..*/
2ee10 0a 63 61 73 65 20 4f 50 5f 56 4f 70 65 6e 3a 20  .case OP_VOpen: 
2ee20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
2ee30 70 43 75 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f  pCur;.  sqlite3_
2ee40 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74  vtab_cursor *pVt
2ee50 61 62 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69  abCursor;.  sqli
2ee60 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
2ee70 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  .  sqlite3_modul
2ee80 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61  e *pModule;..  a
2ee90 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
2eea0 64 65 72 20 29 3b 0a 20 20 70 43 75 72 20 3d 20  der );.  pCur = 
2eeb0 30 3b 0a 20 20 70 56 74 61 62 43 75 72 73 6f 72  0;.  pVtabCursor
2eec0 20 3d 20 30 3b 0a 20 20 70 56 74 61 62 20 3d 20   = 0;.  pVtab = 
2eed0 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70  pOp->p4.pVtab->p
2eee0 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20  Vtab;.  pModule 
2eef0 3d 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  = (sqlite3_modul
2ef00 65 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e *)pVtab->pModu
2ef10 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 70 56 74  le;.  assert(pVt
2ef20 61 62 20 26 26 20 70 4d 6f 64 75 6c 65 29 3b 0a  ab && pModule);.
2ef30 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e    rc = pModule->
2ef40 78 4f 70 65 6e 28 70 56 74 61 62 2c 20 26 70 56  xOpen(pVtab, &pV
2ef50 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 73 71  tabCursor);.  sq
2ef60 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
2ef70 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b  rrmsg(p, pVtab);
2ef80 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b  .  if( SQLITE_OK
2ef90 3d 3d 72 63 20 29 7b 0a 20 20 20 20 2f 2a 20 49  ==rc ){.    /* I
2efa0 6e 69 74 69 61 6c 69 7a 65 20 73 71 6c 69 74 65  nitialize sqlite
2efb0 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 62 61  3_vtab_cursor ba
2efc0 73 65 20 63 6c 61 73 73 20 2a 2f 0a 20 20 20 20  se class */.    
2efd0 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74  pVtabCursor->pVt
2efe0 61 62 20 3d 20 70 56 74 61 62 3b 0a 0a 20 20 20  ab = pVtab;..   
2eff0 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 76   /* Initialize v
2f000 64 62 65 20 63 75 72 73 6f 72 20 6f 62 6a 65 63  dbe cursor objec
2f010 74 20 2a 2f 0a 20 20 20 20 70 43 75 72 20 3d 20  t */.    pCur = 
2f020 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
2f030 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 2d 31  , pOp->p1, 0, -1
2f040 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20 70 43  , 0);.    if( pC
2f050 75 72 20 29 7b 0a 20 20 20 20 20 20 70 43 75 72  ur ){.      pCur
2f060 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20  ->pVtabCursor = 
2f070 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 20  pVtabCursor;.   
2f080 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62   }else{.      db
2f090 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d  ->mallocFailed =
2f0a0 20 31 3b 0a 20 20 20 20 20 20 70 4d 6f 64 75 6c   1;.      pModul
2f0b0 65 2d 3e 78 43 6c 6f 73 65 28 70 56 74 61 62 43  e->xClose(pVtabC
2f0c0 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20  ursor);.    }.  
2f0d0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
2f0e0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
2f0f0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
2f100 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
2f110 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
2f120 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
2f130 56 46 69 6c 74 65 72 20 50 31 20 50 32 20 50 33  VFilter P1 P2 P3
2f140 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
2f150 73 3a 20 69 50 6c 61 6e 3d 72 5b 50 33 5d 20 7a  s: iPlan=r[P3] z
2f160 50 6c 61 6e 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20  Plan='P4'.**.** 
2f170 50 31 20 69 73 20 61 20 63 75 72 73 6f 72 20 6f  P1 is a cursor o
2f180 70 65 6e 65 64 20 75 73 69 6e 67 20 56 4f 70 65  pened using VOpe
2f190 6e 2e 20 20 50 32 20 69 73 20 61 6e 20 61 64 64  n.  P2 is an add
2f1a0 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20  ress to jump to 
2f1b0 69 66 0a 2a 2a 20 74 68 65 20 66 69 6c 74 65 72  if.** the filter
2f1c0 65 64 20 72 65 73 75 6c 74 20 73 65 74 20 69 73  ed result set is
2f1d0 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34   empty..**.** P4
2f1e0 20 69 73 20 65 69 74 68 65 72 20 4e 55 4c 4c 20   is either NULL 
2f1f0 6f 72 20 61 20 73 74 72 69 6e 67 20 74 68 61 74  or a string that
2f200 20 77 61 73 20 67 65 6e 65 72 61 74 65 64 20 62   was generated b
2f210 79 20 74 68 65 20 78 42 65 73 74 49 6e 64 65 78  y the xBestIndex
2f220 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f 66 20 74 68  .** method of th
2f230 65 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20 69  e module.  The i
2f240 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66  nterpretation of
2f250 20 74 68 65 20 50 34 20 73 74 72 69 6e 67 20 69   the P4 string i
2f260 73 20 6c 65 66 74 0a 2a 2a 20 74 6f 20 74 68 65  s left.** to the
2f270 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e   module implemen
2f280 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  tation..**.** Th
2f290 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
2f2a0 73 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65  s the xFilter me
2f2b0 74 68 6f 64 20 6f 6e 20 74 68 65 20 76 69 72 74  thod on the virt
2f2c0 75 61 6c 20 74 61 62 6c 65 20 73 70 65 63 69 66  ual table specif
2f2d0 69 65 64 0a 2a 2a 20 62 79 20 50 31 2e 20 20 54  ied.** by P1.  T
2f2e0 68 65 20 69 6e 74 65 67 65 72 20 71 75 65 72 79  he integer query
2f2f0 20 70 6c 61 6e 20 70 61 72 61 6d 65 74 65 72 20   plan parameter 
2f300 74 6f 20 78 46 69 6c 74 65 72 20 69 73 20 73 74  to xFilter is st
2f310 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
2f320 0a 2a 2a 20 50 33 2e 20 52 65 67 69 73 74 65 72  .** P3. Register
2f330 20 50 33 2b 31 20 73 74 6f 72 65 73 20 74 68 65   P3+1 stores the
2f340 20 61 72 67 63 20 70 61 72 61 6d 65 74 65 72 20   argc parameter 
2f350 74 6f 20 62 65 20 70 61 73 73 65 64 20 74 6f 20  to be passed to 
2f360 74 68 65 0a 2a 2a 20 78 46 69 6c 74 65 72 20 6d  the.** xFilter m
2f370 65 74 68 6f 64 2e 20 52 65 67 69 73 74 65 72 73  ethod. Registers
2f380 20 50 33 2b 32 2e 2e 50 33 2b 31 2b 61 72 67 63   P3+2..P3+1+argc
2f390 20 61 72 65 20 74 68 65 20 61 72 67 63 0a 2a 2a   are the argc.**
2f3a0 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 61 72 61   additional para
2f3b0 6d 65 74 65 72 73 20 77 68 69 63 68 20 61 72 65  meters which are
2f3c0 20 70 61 73 73 65 64 20 74 6f 0a 2a 2a 20 78 46   passed to.** xF
2f3d0 69 6c 74 65 72 20 61 73 20 61 72 67 76 2e 20 52  ilter as argv. R
2f3e0 65 67 69 73 74 65 72 20 50 33 2b 32 20 62 65 63  egister P3+2 bec
2f3f0 6f 6d 65 73 20 61 72 67 76 5b 30 5d 20 77 68 65  omes argv[0] whe
2f400 6e 20 70 61 73 73 65 64 20 74 6f 20 78 46 69 6c  n passed to xFil
2f410 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d  ter..**.** A jum
2f420 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20  p is made to P2 
2f430 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  if the result se
2f440 74 20 61 66 74 65 72 20 66 69 6c 74 65 72 69 6e  t after filterin
2f450 67 20 77 6f 75 6c 64 20 62 65 20 65 6d 70 74 79  g would be empty
2f460 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 46 69  ..*/.case OP_VFi
2f470 6c 74 65 72 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d  lter: {   /* jum
2f480 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67 3b  p */.  int nArg;
2f490 0a 20 20 69 6e 74 20 69 51 75 65 72 79 3b 0a 20  .  int iQuery;. 
2f4a0 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
2f4b0 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
2f4c0 20 20 4d 65 6d 20 2a 70 51 75 65 72 79 3b 0a 20    Mem *pQuery;. 
2f4d0 20 4d 65 6d 20 2a 70 41 72 67 63 3b 0a 20 20 73   Mem *pArgc;.  s
2f4e0 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
2f4f0 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f 72 3b  or *pVtabCursor;
2f500 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
2f510 2a 70 56 74 61 62 3b 0a 20 20 56 64 62 65 43 75  *pVtab;.  VdbeCu
2f520 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 69 6e  rsor *pCur;.  in
2f530 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 69 3b 0a  t res;.  int i;.
2f540 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 0a    Mem **apArg;..
2f550 20 20 70 51 75 65 72 79 20 3d 20 26 61 4d 65 6d    pQuery = &aMem
2f560 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 41 72  [pOp->p3];.  pAr
2f570 67 63 20 3d 20 26 70 51 75 65 72 79 5b 31 5d 3b  gc = &pQuery[1];
2f580 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43  .  pCur = p->apC
2f590 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
2f5a0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
2f5b0 64 28 70 51 75 65 72 79 29 20 29 3b 0a 20 20 52  d(pQuery) );.  R
2f5c0 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
2f5d0 70 2d 3e 70 33 2c 20 70 51 75 65 72 79 29 3b 0a  p->p3, pQuery);.
2f5e0 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e    assert( pCur->
2f5f0 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20  pVtabCursor );. 
2f600 20 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20 70   pVtabCursor = p
2f610 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
2f620 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 56 74 61  ;.  pVtab = pVta
2f630 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a  bCursor->pVtab;.
2f640 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
2f650 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f  b->pModule;..  /
2f660 2a 20 47 72 61 62 20 74 68 65 20 69 6e 64 65 78  * Grab the index
2f670 20 6e 75 6d 62 65 72 20 61 6e 64 20 61 72 67 63   number and argc
2f680 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20   parameters */. 
2f690 20 61 73 73 65 72 74 28 20 28 70 51 75 65 72 79   assert( (pQuery
2f6a0 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29  ->flags&MEM_Int)
2f6b0 21 3d 30 20 26 26 20 70 41 72 67 63 2d 3e 66 6c  !=0 && pArgc->fl
2f6c0 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a  ags==MEM_Int );.
2f6d0 20 20 6e 41 72 67 20 3d 20 28 69 6e 74 29 70 41    nArg = (int)pA
2f6e0 72 67 63 2d 3e 75 2e 69 3b 0a 20 20 69 51 75 65  rgc->u.i;.  iQue
2f6f0 72 79 20 3d 20 28 69 6e 74 29 70 51 75 65 72 79  ry = (int)pQuery
2f700 2d 3e 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76  ->u.i;..  /* Inv
2f710 6f 6b 65 20 74 68 65 20 78 46 69 6c 74 65 72 20  oke the xFilter 
2f720 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 7b 0a 20 20  method */.  {.  
2f730 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 61    res = 0;.    a
2f740 70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b  pArg = p->apArg;
2f750 0a 20 20 20 20 66 6f 72 28 69 20 3d 20 30 3b 20  .    for(i = 0; 
2f760 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20  i<nArg; i++){.  
2f770 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 26      apArg[i] = &
2f780 70 41 72 67 63 5b 69 2b 31 5d 3b 0a 20 20 20 20  pArgc[i+1];.    
2f790 7d 0a 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61 62  }..    p->inVtab
2f7a0 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20 20 20  Method = 1;.    
2f7b0 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 46  rc = pModule->xF
2f7c0 69 6c 74 65 72 28 70 56 74 61 62 43 75 72 73 6f  ilter(pVtabCurso
2f7d0 72 2c 20 69 51 75 65 72 79 2c 20 70 4f 70 2d 3e  r, iQuery, pOp->
2f7e0 70 34 2e 7a 2c 20 6e 41 72 67 2c 20 61 70 41 72  p4.z, nArg, apAr
2f7f0 67 29 3b 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61  g);.    p->inVta
2f800 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 20  bMethod = 0;.   
2f810 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
2f820 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61  rtErrmsg(p, pVta
2f830 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  b);.    if( rc==
2f840 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
2f850 20 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65     res = pModule
2f860 2d 3e 78 45 6f 66 28 70 56 74 61 62 43 75 72 73  ->xEof(pVtabCurs
2f870 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 56  or);.    }.    V
2f880 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
2f890 65 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66  es!=0,2);.    if
2f8a0 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 70  ( res ){.      p
2f8b0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
2f8c0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 75  .    }.  }.  pCu
2f8d0 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a  r->nullRow = 0;.
2f8e0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2f8f0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
2f900 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
2f910 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
2f920 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
2f930 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
2f940 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20  Column P1 P2 P3 
2f950 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
2f960 20 72 5b 50 33 5d 3d 76 63 6f 6c 75 6d 6e 28 50   r[P3]=vcolumn(P
2f970 32 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74  2).**.** Store t
2f980 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
2f990 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a  P2-th column of.
2f9a0 2a 2a 20 74 68 65 20 72 6f 77 20 6f 66 20 74 68  ** the row of th
2f9b0 65 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 20  e virtual-table 
2f9c0 74 68 61 74 20 74 68 65 20 0a 2a 2a 20 50 31 20  that the .** P1 
2f9d0 63 75 72 73 6f 72 20 69 73 20 70 6f 69 6e 74 69  cursor is pointi
2f9e0 6e 67 20 74 6f 20 69 6e 74 6f 20 72 65 67 69 73  ng to into regis
2f9f0 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20  ter P3..*/.case 
2fa00 4f 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20  OP_VColumn: {.  
2fa10 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
2fa20 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c  tab;.  const sql
2fa30 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
2fa40 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 44 65  dule;.  Mem *pDe
2fa50 73 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  st;.  sqlite3_co
2fa60 6e 74 65 78 74 20 73 43 6f 6e 74 65 78 74 3b 0a  ntext sContext;.
2fa70 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
2fa80 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  Cur = p->apCsr[p
2fa90 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2faa0 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75  t( pCur->pVtabCu
2fab0 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
2fac0 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
2fad0 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
2fae0 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
2faf0 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b    pDest = &aMem[
2fb00 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41  pOp->p3];.  memA
2fb10 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
2fb20 70 44 65 73 74 29 3b 0a 20 20 69 66 28 20 70 43  pDest);.  if( pC
2fb30 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  ur->nullRow ){. 
2fb40 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2fb50 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b  mSetNull(pDest);
2fb60 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
2fb70 20 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e    pVtab = pCur->
2fb80 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74  pVtabCursor->pVt
2fb90 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20  ab;.  pModule = 
2fba0 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
2fbb0 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c    assert( pModul
2fbc0 65 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b 0a 20 20  e->xColumn );.  
2fbd0 6d 65 6d 73 65 74 28 26 73 43 6f 6e 74 65 78 74  memset(&sContext
2fbe0 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 43 6f 6e  , 0, sizeof(sCon
2fbf0 74 65 78 74 29 29 3b 0a 0a 20 20 2f 2a 20 54 68  text));..  /* Th
2fc00 65 20 6f 75 74 70 75 74 20 63 65 6c 6c 20 6d 61  e output cell ma
2fc10 79 20 61 6c 72 65 61 64 79 20 68 61 76 65 20 61  y already have a
2fc20 20 62 75 66 66 65 72 20 61 6c 6c 6f 63 61 74 65   buffer allocate
2fc30 64 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20 74 68 65  d. Move.  ** the
2fc40 20 63 75 72 72 65 6e 74 20 63 6f 6e 74 65 6e 74   current content
2fc50 73 20 74 6f 20 73 43 6f 6e 74 65 78 74 2e 73 20  s to sContext.s 
2fc60 73 6f 20 69 6e 20 63 61 73 65 20 74 68 65 20 75  so in case the u
2fc70 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 0a 20 20  ser-function .  
2fc80 2a 2a 20 63 61 6e 20 75 73 65 20 74 68 65 20 61  ** can use the a
2fc90 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64  lready allocated
2fca0 20 62 75 66 66 65 72 20 69 6e 73 74 65 61 64 20   buffer instead 
2fcb0 6f 66 20 61 6c 6c 6f 63 61 74 69 6e 67 20 61 20  of allocating a 
2fcc0 0a 20 20 2a 2a 20 6e 65 77 20 6f 6e 65 2e 0a 20  .  ** new one.. 
2fcd0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62   */.  sqlite3Vdb
2fce0 65 4d 65 6d 4d 6f 76 65 28 26 73 43 6f 6e 74 65  eMemMove(&sConte
2fcf0 78 74 2e 73 2c 20 70 44 65 73 74 29 3b 0a 20 20  xt.s, pDest);.  
2fd00 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 26  MemSetTypeFlag(&
2fd10 73 43 6f 6e 74 65 78 74 2e 73 2c 20 4d 45 4d 5f  sContext.s, MEM_
2fd20 4e 75 6c 6c 29 3b 0a 0a 20 20 72 63 20 3d 20 70  Null);..  rc = p
2fd30 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 28  Module->xColumn(
2fd40 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
2fd50 72 2c 20 26 73 43 6f 6e 74 65 78 74 2c 20 70 4f  r, &sContext, pO
2fd60 70 2d 3e 70 32 29 3b 0a 20 20 73 71 6c 69 74 65  p->p2);.  sqlite
2fd70 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
2fd80 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69  g(p, pVtab);.  i
2fd90 66 28 20 73 43 6f 6e 74 65 78 74 2e 69 73 45 72  f( sContext.isEr
2fda0 72 6f 72 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  ror ){.    rc = 
2fdb0 73 43 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f 72  sContext.isError
2fdc0 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70 79  ;.  }..  /* Copy
2fdd0 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
2fde0 68 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 74  he function to t
2fdf0 68 65 20 50 33 20 72 65 67 69 73 74 65 72 2e 20  he P3 register. 
2fe00 57 65 0a 20 20 2a 2a 20 64 6f 20 74 68 69 73 20  We.  ** do this 
2fe10 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68  regardless of wh
2fe20 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20  ether or not an 
2fe30 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20 74  error occurred t
2fe40 6f 20 65 6e 73 75 72 65 20 61 6e 79 0a 20 20 2a  o ensure any.  *
2fe50 2a 20 64 79 6e 61 6d 69 63 20 61 6c 6c 6f 63 61  * dynamic alloca
2fe60 74 69 6f 6e 20 69 6e 20 73 43 6f 6e 74 65 78 74  tion in sContext
2fe70 2e 73 20 28 61 20 4d 65 6d 20 73 74 72 75 63 74  .s (a Mem struct
2fe80 29 20 69 73 20 20 72 65 6c 65 61 73 65 64 2e 0a  ) is  released..
2fe90 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64    */.  sqlite3Vd
2fea0 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
2feb0 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 65 6e  (&sContext.s, en
2fec0 63 6f 64 69 6e 67 29 3b 0a 20 20 73 71 6c 69 74  coding);.  sqlit
2fed0 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 44  e3VdbeMemMove(pD
2fee0 65 73 74 2c 20 26 73 43 6f 6e 74 65 78 74 2e 73  est, &sContext.s
2fef0 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
2ff00 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65  ACE(pOp->p3, pDe
2ff10 73 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  st);.  UPDATE_MA
2ff20 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74  X_BLOBSIZE(pDest
2ff30 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65  );..  if( sqlite
2ff40 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70  3VdbeMemTooBig(p
2ff50 44 65 73 74 29 20 29 7b 0a 20 20 20 20 67 6f 74  Dest) ){.    got
2ff60 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
2ff70 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2ff80 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2ff90 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
2ffa0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2ffb0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
2ffc0 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4e 65  E./* Opcode: VNe
2ffd0 78 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  xt P1 P2 * * *.*
2ffe0 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 76 69 72  *.** Advance vir
2fff0 74 75 61 6c 20 74 61 62 6c 65 20 50 31 20 74 6f  tual table P1 to
30000 20 74 68 65 20 6e 65 78 74 20 72 6f 77 20 69 6e   the next row in
30010 20 69 74 73 20 72 65 73 75 6c 74 20 73 65 74 20   its result set 
30020 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 69  and.** jump to i
30030 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 20  nstruction P2.  
30040 4f 72 2c 20 69 66 20 74 68 65 20 76 69 72 74 75  Or, if the virtu
30050 61 6c 20 74 61 62 6c 65 20 68 61 73 20 72 65 61  al table has rea
30060 63 68 65 64 0a 2a 2a 20 74 68 65 20 65 6e 64 20  ched.** the end 
30070 6f 66 20 69 74 73 20 72 65 73 75 6c 74 20 73 65  of its result se
30080 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  t, then fall thr
30090 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
300a0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
300b0 0a 63 61 73 65 20 4f 50 5f 56 4e 65 78 74 3a 20  .case OP_VNext: 
300c0 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20  {   /* jump */. 
300d0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
300e0 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71  Vtab;.  const sq
300f0 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
30100 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 72 65 73  odule;.  int res
30110 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
30120 70 43 75 72 3b 0a 0a 20 20 72 65 73 20 3d 20 30  pCur;..  res = 0
30130 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70  ;.  pCur = p->ap
30140 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
30150 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56  assert( pCur->pV
30160 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 69  tabCursor );.  i
30170 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77  f( pCur->nullRow
30180 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20   ){.    break;. 
30190 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75   }.  pVtab = pCu
301a0 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e  r->pVtabCursor->
301b0 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65  pVtab;.  pModule
301c0 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
301d0 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f  e;.  assert( pMo
301e0 64 75 6c 65 2d 3e 78 4e 65 78 74 20 29 3b 0a 0a  dule->xNext );..
301f0 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
30200 78 4e 65 78 74 28 29 20 6d 65 74 68 6f 64 20 6f  xNext() method o
30210 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 54 68  f the module. Th
30220 65 72 65 20 69 73 20 6e 6f 20 77 61 79 20 66 6f  ere is no way fo
30230 72 20 74 68 65 0a 20 20 2a 2a 20 75 6e 64 65 72  r the.  ** under
30240 6c 79 69 6e 67 20 69 6d 70 6c 65 6d 65 6e 74 61  lying implementa
30250 74 69 6f 6e 20 74 6f 20 72 65 74 75 72 6e 20 61  tion to return a
30260 6e 20 65 72 72 6f 72 20 69 66 20 6f 6e 65 20 6f  n error if one o
30270 63 63 75 72 73 20 64 75 72 69 6e 67 0a 20 20 2a  ccurs during.  *
30280 2a 20 78 4e 65 78 74 28 29 2e 20 49 6e 73 74 65  * xNext(). Inste
30290 61 64 2c 20 69 66 20 61 6e 20 65 72 72 6f 72 20  ad, if an error 
302a0 6f 63 63 75 72 73 2c 20 74 72 75 65 20 69 73 20  occurs, true is 
302b0 72 65 74 75 72 6e 65 64 20 28 69 6e 64 69 63 61  returned (indica
302c0 74 69 6e 67 20 74 68 61 74 20 0a 20 20 2a 2a 20  ting that .  ** 
302d0 64 61 74 61 20 69 73 20 61 76 61 69 6c 61 62 6c  data is availabl
302e0 65 29 20 61 6e 64 20 74 68 65 20 65 72 72 6f 72  e) and the error
302f0 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64 20 77   code returned w
30300 68 65 6e 20 78 43 6f 6c 75 6d 6e 20 6f 72 0a 20  hen xColumn or. 
30310 20 2a 2a 20 73 6f 6d 65 20 6f 74 68 65 72 20 6d   ** some other m
30320 65 74 68 6f 64 20 69 73 20 6e 65 78 74 20 69 6e  ethod is next in
30330 76 6f 6b 65 64 20 6f 6e 20 74 68 65 20 73 61 76  voked on the sav
30340 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
30350 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 70  cursor..  */.  p
30360 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d  ->inVtabMethod =
30370 20 31 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75   1;.  rc = pModu
30380 6c 65 2d 3e 78 4e 65 78 74 28 70 43 75 72 2d 3e  le->xNext(pCur->
30390 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20  pVtabCursor);.  
303a0 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20  p->inVtabMethod 
303b0 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 56 74  = 0;.  sqlite3Vt
303c0 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
303d0 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20  , pVtab);.  if( 
303e0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
303f0 0a 20 20 20 20 72 65 73 20 3d 20 70 4d 6f 64 75  .    res = pModu
30400 6c 65 2d 3e 78 45 6f 66 28 70 43 75 72 2d 3e 70  le->xEof(pCur->p
30410 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 7d  VtabCursor);.  }
30420 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
30430 65 6e 28 21 72 65 73 2c 32 29 3b 0a 20 20 69 66  en(!res,2);.  if
30440 28 20 21 72 65 73 20 29 7b 0a 20 20 20 20 2f 2a  ( !res ){.    /*
30450 20 49 66 20 74 68 65 72 65 20 69 73 20 64 61 74   If there is dat
30460 61 2c 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f  a, jump to P2 */
30470 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
30480 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 67 6f 74  2 - 1;.  }.  got
30490 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  o check_for_inte
304a0 72 72 75 70 74 3b 0a 7d 0a 23 65 6e 64 69 66 20  rrupt;.}.#endif 
304b0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
304c0 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
304d0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
304e0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
304f0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e  ./* Opcode: VRen
30500 61 6d 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ame P1 * * P4 *.
30510 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
30520 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75  inter to a virtu
30530 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c  al table object,
30540 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62   an sqlite3_vtab
30550 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54   structure..** T
30560 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b  his opcode invok
30570 65 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  es the correspon
30580 64 69 6e 67 20 78 52 65 6e 61 6d 65 20 6d 65 74  ding xRename met
30590 68 6f 64 2e 20 54 68 65 20 76 61 6c 75 65 0a 2a  hod. The value.*
305a0 2a 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  * in register P1
305b0 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68   is passed as th
305c0 65 20 7a 4e 61 6d 65 20 61 72 67 75 6d 65 6e 74  e zName argument
305d0 20 74 6f 20 74 68 65 20 78 52 65 6e 61 6d 65 20   to the xRename 
305e0 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20  method..*/.case 
305f0 4f 50 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a 20 20  OP_VRename: {.  
30600 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
30610 74 61 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d  tab;.  Mem *pNam
30620 65 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20 70 4f  e;..  pVtab = pO
30630 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74  p->p4.pVtab->pVt
30640 61 62 3b 0a 20 20 70 4e 61 6d 65 20 3d 20 26 61  ab;.  pName = &a
30650 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
30660 61 73 73 65 72 74 28 20 70 56 74 61 62 2d 3e 70  assert( pVtab->p
30670 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 20  Module->xRename 
30680 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d  );.  assert( mem
30690 49 73 56 61 6c 69 64 28 70 4e 61 6d 65 29 20 29  IsValid(pName) )
306a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ;.  assert( p->r
306b0 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
306c0 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
306d0 4f 70 2d 3e 70 31 2c 20 70 4e 61 6d 65 29 3b 0a  Op->p1, pName);.
306e0 20 20 61 73 73 65 72 74 28 20 70 4e 61 6d 65 2d    assert( pName-
306f0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72  >flags & MEM_Str
30700 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
30710 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49  pName->enc==SQLI
30720 54 45 5f 55 54 46 38 20 29 3b 0a 20 20 74 65 73  TE_UTF8 );.  tes
30730 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e  tcase( pName->en
30740 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 42  c==SQLITE_UTF16B
30750 45 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  E );.  testcase(
30760 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c   pName->enc==SQL
30770 49 54 45 5f 55 54 46 31 36 4c 45 20 29 3b 0a 20  ITE_UTF16LE );. 
30780 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
30790 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
307a0 70 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 55 54  pName, SQLITE_UT
307b0 46 38 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  F8);.  if( rc==S
307c0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
307d0 72 63 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64  rc = pVtab->pMod
307e0 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 28 70 56 74  ule->xRename(pVt
307f0 61 62 2c 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a 20  ab, pName->z);. 
30800 20 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d     sqlite3VtabIm
30810 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56  portErrmsg(p, pV
30820 74 61 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70  tab);.    p->exp
30830 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  ired = 0;.  }.  
30840 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
30850 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
30860 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
30870 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 55 70  E./* Opcode: VUp
30880 64 61 74 65 20 50 31 20 50 32 20 50 33 20 50 34  date P1 P2 P3 P4
30890 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
308a0 20 64 61 74 61 3d 72 5b 50 33 40 50 32 5d 0a 2a   data=r[P3@P2].*
308b0 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
308c0 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61  nter to a virtua
308d0 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20  l table object, 
308e0 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  an sqlite3_vtab 
308f0 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68  structure..** Th
30900 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
30910 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  s the correspond
30920 69 6e 67 20 78 55 70 64 61 74 65 20 6d 65 74 68  ing xUpdate meth
30930 6f 64 2e 20 50 32 20 76 61 6c 75 65 73 0a 2a 2a  od. P2 values.**
30940 20 61 72 65 20 63 6f 6e 74 69 67 75 6f 75 73 20   are contiguous 
30950 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 73 74 61  memory cells sta
30960 72 74 69 6e 67 20 61 74 20 50 33 20 74 6f 20 70  rting at P3 to p
30970 61 73 73 20 74 6f 20 74 68 65 20 78 55 70 64 61  ass to the xUpda
30980 74 65 20 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f  te .** invocatio
30990 6e 2e 20 54 68 65 20 76 61 6c 75 65 20 69 6e 20  n. The value in 
309a0 72 65 67 69 73 74 65 72 20 28 50 33 2b 50 32 2d  register (P3+P2-
309b0 31 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  1) corresponds t
309c0 6f 20 74 68 65 20 0a 2a 2a 20 70 32 74 68 20 65  o the .** p2th e
309d0 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 61 72  lement of the ar
309e0 67 76 20 61 72 72 61 79 20 70 61 73 73 65 64 20  gv array passed 
309f0 74 6f 20 78 55 70 64 61 74 65 2e 0a 2a 2a 0a 2a  to xUpdate..**.*
30a00 2a 20 54 68 65 20 78 55 70 64 61 74 65 20 6d 65  * The xUpdate me
30a10 74 68 6f 64 20 77 69 6c 6c 20 64 6f 20 61 20 44  thod will do a D
30a20 45 4c 45 54 45 20 6f 72 20 61 6e 20 49 4e 53 45  ELETE or an INSE
30a30 52 54 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20 54  RT or both..** T
30a40 68 65 20 61 72 67 76 5b 30 5d 20 65 6c 65 6d 65  he argv[0] eleme
30a50 6e 74 20 28 77 68 69 63 68 20 63 6f 72 72 65 73  nt (which corres
30a60 70 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f 72 79 20  ponds to memory 
30a70 63 65 6c 6c 20 50 33 29 0a 2a 2a 20 69 73 20 74  cell P3).** is t
30a80 68 65 20 72 6f 77 69 64 20 6f 66 20 61 20 72 6f  he rowid of a ro
30a90 77 20 74 6f 20 64 65 6c 65 74 65 2e 20 20 49 66  w to delete.  If
30aa0 20 61 72 67 76 5b 30 5d 20 69 73 20 4e 55 4c 4c   argv[0] is NULL
30ab0 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65 6c   then no .** del
30ac0 65 74 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20 54  etion occurs.  T
30ad0 68 65 20 61 72 67 76 5b 31 5d 20 65 6c 65 6d 65  he argv[1] eleme
30ae0 6e 74 20 69 73 20 74 68 65 20 72 6f 77 69 64 20  nt is the rowid 
30af0 6f 66 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72  of the new .** r
30b00 6f 77 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65  ow.  This can be
30b10 20 4e 55 4c 4c 20 74 6f 20 68 61 76 65 20 74 68   NULL to have th
30b20 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
30b30 73 65 6c 65 63 74 20 74 68 65 20 6e 65 77 20 0a  select the new .
30b40 2a 2a 20 72 6f 77 69 64 20 66 6f 72 20 69 74 73  ** rowid for its
30b50 65 6c 66 2e 20 20 54 68 65 20 73 75 62 73 65 71  elf.  The subseq
30b60 75 65 6e 74 20 65 6c 65 6d 65 6e 74 73 20 69 6e  uent elements in
30b70 20 74 68 65 20 61 72 72 61 79 20 61 72 65 20 0a   the array are .
30b80 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66  ** the values of
30b90 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
30ba0 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49  new row..**.** I
30bb0 66 20 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f 20  f P2==1 then no 
30bc0 69 6e 73 65 72 74 20 69 73 20 70 65 72 66 6f 72  insert is perfor
30bd0 6d 65 64 2e 20 20 61 72 67 76 5b 30 5d 20 69 73  med.  argv[0] is
30be0 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a 2a   the rowid of.**
30bf0 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65   a row to delete
30c00 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  ..**.** P1 is a 
30c10 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49 66  boolean flag. If
30c20 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74 72   it is set to tr
30c30 75 65 20 61 6e 64 20 74 68 65 20 78 55 70 64 61  ue and the xUpda
30c40 74 65 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73 75  te call.** is su
30c50 63 63 65 73 73 66 75 6c 2c 20 74 68 65 6e 20 74  ccessful, then t
30c60 68 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65  he value returne
30c70 64 20 62 79 20 73 71 6c 69 74 65 33 5f 6c 61 73  d by sqlite3_las
30c80 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
30c90 20 0a 2a 2a 20 69 73 20 73 65 74 20 74 6f 20 74   .** is set to t
30ca0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
30cb0 72 6f 77 69 64 20 66 6f 72 20 74 68 65 20 72 6f  rowid for the ro
30cc0 77 20 6a 75 73 74 20 69 6e 73 65 72 74 65 64 2e  w just inserted.
30cd0 0a 2a 2a 0a 2a 2a 20 50 35 20 69 73 20 74 68 65  .**.** P5 is the
30ce0 20 65 72 72 6f 72 20 61 63 74 69 6f 6e 73 20 28   error actions (
30cf0 4f 45 5f 52 65 70 6c 61 63 65 2c 20 4f 45 5f 46  OE_Replace, OE_F
30d00 61 69 6c 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20  ail, OE_Ignore, 
30d10 65 74 63 29 20 74 6f 0a 2a 2a 20 61 70 70 6c 79  etc) to.** apply
30d20 20 69 6e 20 74 68 65 20 63 61 73 65 20 6f 66 20   in the case of 
30d30 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69  a constraint fai
30d40 6c 75 72 65 20 6f 6e 20 61 6e 20 69 6e 73 65 72  lure on an inser
30d50 74 20 6f 72 20 75 70 64 61 74 65 2e 0a 2a 2f 0a  t or update..*/.
30d60 63 61 73 65 20 4f 50 5f 56 55 70 64 61 74 65 3a  case OP_VUpdate:
30d70 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61   {.  sqlite3_vta
30d80 62 20 2a 70 56 74 61 62 3b 0a 20 20 73 71 6c 69  b *pVtab;.  sqli
30d90 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
30da0 75 6c 65 3b 0a 20 20 69 6e 74 20 6e 41 72 67 3b  ule;.  int nArg;
30db0 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69  .  int i;.  sqli
30dc0 74 65 5f 69 6e 74 36 34 20 72 6f 77 69 64 3b 0a  te_int64 rowid;.
30dd0 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 20    Mem **apArg;. 
30de0 20 4d 65 6d 20 2a 70 58 3b 0a 0a 20 20 61 73 73   Mem *pX;..  ass
30df0 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 31 20  ert( pOp->p2==1 
30e00 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70         || pOp->p
30e10 35 3d 3d 4f 45 5f 46 61 69 6c 20 20 20 7c 7c 20  5==OE_Fail   || 
30e20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 6f 6c 6c  pOp->p5==OE_Roll
30e30 62 61 63 6b 20 0a 20 20 20 20 20 20 20 7c 7c 20  back .       || 
30e40 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 41 62 6f 72  pOp->p5==OE_Abor
30e50 74 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45  t || pOp->p5==OE
30e60 5f 49 67 6e 6f 72 65 20 7c 7c 20 70 4f 70 2d 3e  _Ignore || pOp->
30e70 70 35 3d 3d 4f 45 5f 52 65 70 6c 61 63 65 0a 20  p5==OE_Replace. 
30e80 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
30e90 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
30ea0 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70    pVtab = pOp->p
30eb0 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a  4.pVtab->pVtab;.
30ec0 20 20 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c    pModule = (sql
30ed0 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56  ite3_module *)pV
30ee0 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20  tab->pModule;.  
30ef0 6e 41 72 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  nArg = pOp->p2;.
30f00 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
30f10 34 74 79 70 65 3d 3d 50 34 5f 56 54 41 42 20 29  4type==P4_VTAB )
30f20 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70  ;.  if( ALWAYS(p
30f30 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 29  Module->xUpdate)
30f40 20 29 7b 0a 20 20 20 20 75 38 20 76 74 61 62 4f   ){.    u8 vtabO
30f50 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 64 62 2d 3e  nConflict = db->
30f60 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a  vtabOnConflict;.
30f70 20 20 20 20 61 70 41 72 67 20 3d 20 70 2d 3e 61      apArg = p->a
30f80 70 41 72 67 3b 0a 20 20 20 20 70 58 20 3d 20 26  pArg;.    pX = &
30f90 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
30fa0 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41     for(i=0; i<nA
30fb0 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  rg; i++){.      
30fc0 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
30fd0 69 64 28 70 58 29 20 29 3b 0a 20 20 20 20 20 20  id(pX) );.      
30fe0 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
30ff0 28 70 2c 20 70 58 29 3b 0a 20 20 20 20 20 20 61  (p, pX);.      a
31000 70 41 72 67 5b 69 5d 20 3d 20 70 58 3b 0a 20 20  pArg[i] = pX;.  
31010 20 20 20 20 70 58 2b 2b 3b 0a 20 20 20 20 7d 0a      pX++;.    }.
31020 20 20 20 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f      db->vtabOnCo
31030 6e 66 6c 69 63 74 20 3d 20 70 4f 70 2d 3e 70 35  nflict = pOp->p5
31040 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75  ;.    rc = pModu
31050 6c 65 2d 3e 78 55 70 64 61 74 65 28 70 56 74 61  le->xUpdate(pVta
31060 62 2c 20 6e 41 72 67 2c 20 61 70 41 72 67 2c 20  b, nArg, apArg, 
31070 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 64 62 2d  &rowid);.    db-
31080 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20  >vtabOnConflict 
31090 3d 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74  = vtabOnConflict
310a0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74 61  ;.    sqlite3Vta
310b0 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c  bImportErrmsg(p,
310c0 20 70 56 74 61 62 29 3b 0a 20 20 20 20 69 66 28   pVtab);.    if(
310d0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
310e0 26 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20  & pOp->p1 ){.   
310f0 20 20 20 61 73 73 65 72 74 28 20 6e 41 72 67 3e     assert( nArg>
31100 31 20 26 26 20 61 70 41 72 67 5b 30 5d 20 26 26  1 && apArg[0] &&
31110 20 28 61 70 41 72 67 5b 30 5d 2d 3e 66 6c 61 67   (apArg[0]->flag
31120 73 26 4d 45 4d 5f 4e 75 6c 6c 29 20 29 3b 0a 20  s&MEM_Null) );. 
31130 20 20 20 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77       db->lastRow
31140 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 20 3d  id = lastRowid =
31150 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20   rowid;.    }.  
31160 20 20 69 66 28 20 28 72 63 26 30 78 66 66 29 3d    if( (rc&0xff)=
31170 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49  =SQLITE_CONSTRAI
31180 4e 54 20 26 26 20 70 4f 70 2d 3e 70 34 2e 70 56  NT && pOp->p4.pV
31190 74 61 62 2d 3e 62 43 6f 6e 73 74 72 61 69 6e 74  tab->bConstraint
311a0 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f   ){.      if( pO
311b0 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65  p->p5==OE_Ignore
311c0 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
311d0 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20   SQLITE_OK;.    
311e0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
311f0 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20   p->errorAction 
31200 3d 20 28 28 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f  = ((pOp->p5==OE_
31210 52 65 70 6c 61 63 65 29 20 3f 20 4f 45 5f 41 62  Replace) ? OE_Ab
31220 6f 72 74 20 3a 20 70 4f 70 2d 3e 70 35 29 3b 0a  ort : pOp->p5);.
31230 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
31240 65 7b 0a 20 20 20 20 20 20 70 2d 3e 6e 43 68 61  e{.      p->nCha
31250 6e 67 65 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d  nge++;.    }.  }
31260 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
31270 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
31280 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
31290 2f 0a 0a 23 69 66 6e 64 65 66 20 20 53 51 4c 49  /..#ifndef  SQLI
312a0 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52  TE_OMIT_PAGER_PR
312b0 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a  AGMAS./* Opcode:
312c0 20 50 61 67 65 63 6f 75 6e 74 20 50 31 20 50 32   Pagecount P1 P2
312d0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69   * * *.**.** Wri
312e0 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 6e  te the current n
312f0 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
31300 6e 20 64 61 74 61 62 61 73 65 20 50 31 20 74 6f  n database P1 to
31310 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 32 2e   memory cell P2.
31320 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 67 65  .*/.case OP_Page
31330 63 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20  count: {        
31340 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
31350 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74  elease */.  pOut
31360 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65 33 42  ->u.i = sqlite3B
31370 74 72 65 65 4c 61 73 74 50 61 67 65 28 64 62 2d  treeLastPage(db-
31380 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42  >aDb[pOp->p1].pB
31390 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  t);.  break;.}.#
313a0 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20  endif...#ifndef 
313b0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47   SQLITE_OMIT_PAG
313c0 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70  ER_PRAGMAS./* Op
313d0 63 6f 64 65 3a 20 4d 61 78 50 67 63 6e 74 20 50  code: MaxPgcnt P
313e0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
313f0 2a 20 54 72 79 20 74 6f 20 73 65 74 20 74 68 65  * Try to set the
31400 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f   maximum page co
31410 75 6e 74 20 66 6f 72 20 64 61 74 61 62 61 73 65  unt for database
31420 20 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65   P1 to the value
31430 20 69 6e 20 50 33 2e 0a 2a 2a 20 44 6f 20 6e 6f   in P3..** Do no
31440 74 20 6c 65 74 20 74 68 65 20 6d 61 78 69 6d 75  t let the maximu
31450 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 66 61 6c  m page count fal
31460 6c 20 62 65 6c 6f 77 20 74 68 65 20 63 75 72 72  l below the curr
31470 65 6e 74 20 70 61 67 65 20 63 6f 75 6e 74 20 61  ent page count a
31480 6e 64 0a 2a 2a 20 64 6f 20 6e 6f 74 20 63 68 61  nd.** do not cha
31490 6e 67 65 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  nge the maximum 
314a0 70 61 67 65 20 63 6f 75 6e 74 20 76 61 6c 75 65  page count value
314b0 20 69 66 20 50 33 3d 3d 30 2e 0a 2a 2a 0a 2a 2a   if P3==0..**.**
314c0 20 53 74 6f 72 65 20 74 68 65 20 6d 61 78 69 6d   Store the maxim
314d0 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 61 66  um page count af
314e0 74 65 72 20 74 68 65 20 63 68 61 6e 67 65 20 69  ter the change i
314f0 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
31500 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 78 50 67 63  /.case OP_MaxPgc
31510 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  nt: {           
31520 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
31530 61 73 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  ase */.  unsigne
31540 64 20 69 6e 74 20 6e 65 77 4d 61 78 3b 0a 20 20  d int newMax;.  
31550 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 70  Btree *pBt;..  p
31560 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70  Bt = db->aDb[pOp
31570 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 6e 65 77  ->p1].pBt;.  new
31580 4d 61 78 20 3d 20 30 3b 0a 20 20 69 66 28 20 70  Max = 0;.  if( p
31590 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 6e 65  Op->p3 ){.    ne
315a0 77 4d 61 78 20 3d 20 73 71 6c 69 74 65 33 42 74  wMax = sqlite3Bt
315b0 72 65 65 4c 61 73 74 50 61 67 65 28 70 42 74 29  reeLastPage(pBt)
315c0 3b 0a 20 20 20 20 69 66 28 20 6e 65 77 4d 61 78  ;.    if( newMax
315d0 20 3c 20 28 75 6e 73 69 67 6e 65 64 29 70 4f 70   < (unsigned)pOp
315e0 2d 3e 70 33 20 29 20 6e 65 77 4d 61 78 20 3d 20  ->p3 ) newMax = 
315f0 28 75 6e 73 69 67 6e 65 64 29 70 4f 70 2d 3e 70  (unsigned)pOp->p
31600 33 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75  3;.  }.  pOut->u
31610 2e 69 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  .i = sqlite3Btre
31620 65 4d 61 78 50 61 67 65 43 6f 75 6e 74 28 70 42  eMaxPageCount(pB
31630 74 2c 20 6e 65 77 4d 61 78 29 3b 0a 20 20 62 72  t, newMax);.  br
31640 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a  eak;.}.#endif...
31650 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 69 74 20  /* Opcode: Init 
31660 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  * P2 * P4 *.** S
31670 79 6e 6f 70 73 69 73 3a 20 20 53 74 61 72 74 20  ynopsis:  Start 
31680 61 74 20 50 32 0a 2a 2a 0a 2a 2a 20 50 72 6f 67  at P2.**.** Prog
31690 72 61 6d 73 20 63 6f 6e 74 61 69 6e 20 61 20 73  rams contain a s
316a0 69 6e 67 6c 65 20 69 6e 73 74 61 6e 63 65 20 6f  ingle instance o
316b0 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20 61 73  f this opcode as
316c0 20 74 68 65 20 76 65 72 79 20 66 69 72 73 74 0a   the very first.
316d0 2a 2a 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  ** opcode..**.**
316e0 20 49 66 20 74 72 61 63 69 6e 67 20 69 73 20 65   If tracing is e
316f0 6e 61 62 6c 65 64 20 28 62 79 20 74 68 65 20 73  nabled (by the s
31700 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29 29 20  qlite3_trace()) 
31710 69 6e 74 65 72 66 61 63 65 2c 20 74 68 65 6e 0a  interface, then.
31720 2a 2a 20 74 68 65 20 55 54 46 2d 38 20 73 74 72  ** the UTF-8 str
31730 69 6e 67 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e  ing contained in
31740 20 50 34 20 69 73 20 65 6d 69 74 74 65 64 20 6f   P4 is emitted o
31750 6e 20 74 68 65 20 74 72 61 63 65 20 63 61 6c 6c  n the trace call
31760 62 61 63 6b 2e 0a 2a 2a 20 4f 72 20 69 66 20 50  back..** Or if P
31770 34 20 69 73 20 62 6c 61 6e 6b 2c 20 75 73 65 20  4 is blank, use 
31780 74 68 65 20 73 74 72 69 6e 67 20 72 65 74 75 72  the string retur
31790 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 73  ned by sqlite3_s
317a0 71 6c 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  ql()..**.** If P
317b0 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 6a  2 is not zero, j
317c0 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
317d0 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  on P2..*/.case O
317e0 50 5f 49 6e 69 74 3a 20 7b 20 20 20 20 20 20 20  P_Init: {       
317f0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
31800 63 68 61 72 20 2a 7a 54 72 61 63 65 3b 0a 20 20  char *zTrace;.  
31810 63 68 61 72 20 2a 7a 3b 0a 0a 20 20 69 66 28 20  char *z;..  if( 
31820 70 4f 70 2d 3e 70 32 20 29 7b 0a 20 20 20 20 70  pOp->p2 ){.    p
31830 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
31840 0a 20 20 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c  .  }.#ifndef SQL
31850 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 20  ITE_OMIT_TRACE. 
31860 20 69 66 28 20 64 62 2d 3e 78 54 72 61 63 65 0a   if( db->xTrace.
31870 20 20 20 26 26 20 21 70 2d 3e 64 6f 69 6e 67 52     && !p->doingR
31880 65 72 75 6e 0a 20 20 20 26 26 20 28 7a 54 72 61  erun.   && (zTra
31890 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20  ce = (pOp->p4.z 
318a0 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d  ? pOp->p4.z : p-
318b0 3e 7a 53 71 6c 29 29 21 3d 30 0a 20 20 29 7b 0a  >zSql))!=0.  ){.
318c0 20 20 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 56      z = sqlite3V
318d0 64 62 65 45 78 70 61 6e 64 53 71 6c 28 70 2c 20  dbeExpandSql(p, 
318e0 7a 54 72 61 63 65 29 3b 0a 20 20 20 20 64 62 2d  zTrace);.    db-
318f0 3e 78 54 72 61 63 65 28 64 62 2d 3e 70 54 72 61  >xTrace(db->pTra
31900 63 65 41 72 67 2c 20 7a 29 3b 0a 20 20 20 20 73  ceArg, z);.    s
31910 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
31920 20 7a 29 3b 0a 20 20 7d 0a 23 69 66 64 65 66 20   z);.  }.#ifdef 
31930 53 51 4c 49 54 45 5f 55 53 45 5f 46 43 4e 54 4c  SQLITE_USE_FCNTL
31940 5f 54 52 41 43 45 0a 20 20 7a 54 72 61 63 65 20  _TRACE.  zTrace 
31950 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70  = (pOp->p4.z ? p
31960 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53  Op->p4.z : p->zS
31970 71 6c 29 3b 0a 20 20 69 66 28 20 7a 54 72 61 63  ql);.  if( zTrac
31980 65 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a  e ){.    int i;.
31990 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64      for(i=0; i<d
319a0 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20  b->nDb; i++){.  
319b0 20 20 20 20 69 66 28 20 4d 41 53 4b 42 49 54 28      if( MASKBIT(
319c0 69 29 20 26 20 70 2d 3e 62 74 72 65 65 4d 61 73  i) & p->btreeMas
319d0 6b 29 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65  k)==0 ) continue
319e0 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
319f0 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c  file_control(db,
31a00 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d   db->aDb[i].zNam
31a10 65 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f  e, SQLITE_FCNTL_
31a20 54 52 41 43 45 2c 20 7a 54 72 61 63 65 29 3b 0a  TRACE, zTrace);.
31a30 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66      }.  }.#endif
31a40 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53 45 5f 46   /* SQLITE_USE_F
31a50 43 4e 54 4c 5f 54 52 41 43 45 20 2a 2f 0a 23 69  CNTL_TRACE */.#i
31a60 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
31a70 47 0a 20 20 69 66 28 20 28 64 62 2d 3e 66 6c 61  G.  if( (db->fla
31a80 67 73 20 26 20 53 51 4c 49 54 45 5f 53 71 6c 54  gs & SQLITE_SqlT
31a90 72 61 63 65 29 21 3d 30 0a 20 20 20 26 26 20 28  race)!=0.   && (
31aa0 7a 54 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70  zTrace = (pOp->p
31ab0 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20  4.z ? pOp->p4.z 
31ac0 3a 20 70 2d 3e 7a 53 71 6c 29 29 21 3d 30 0a 20  : p->zSql))!=0. 
31ad0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44   ){.    sqlite3D
31ae0 65 62 75 67 50 72 69 6e 74 66 28 22 53 51 4c 2d  ebugPrintf("SQL-
31af0 74 72 61 63 65 3a 20 25 73 5c 6e 22 2c 20 7a 54  trace: %s\n", zT
31b00 72 61 63 65 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  race);.  }.#endi
31b10 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55  f /* SQLITE_DEBU
31b20 47 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 53  G */.#endif /* S
31b30 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45  QLITE_OMIT_TRACE
31b40 20 2a 2f 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   */.  break;.}..
31b50 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 6f 70  ./* Opcode: Noop
31b60 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a   * * * * *.**.**
31b70 20 44 6f 20 6e 6f 74 68 69 6e 67 2e 20 20 54 68   Do nothing.  Th
31b80 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
31b90 73 20 6f 66 74 65 6e 20 75 73 65 66 75 6c 20 61  s often useful a
31ba0 73 20 61 20 6a 75 6d 70 0a 2a 2a 20 64 65 73 74  s a jump.** dest
31bb0 69 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a 2a  ination..*/./*.*
31bc0 2a 20 54 68 65 20 6d 61 67 69 63 20 45 78 70 6c  * The magic Expl
31bd0 61 69 6e 20 6f 70 63 6f 64 65 20 61 72 65 20 6f  ain opcode are o
31be0 6e 6c 79 20 69 6e 73 65 72 74 65 64 20 77 68 65  nly inserted whe
31bf0 6e 20 65 78 70 6c 61 69 6e 3d 3d 32 20 28 77 68  n explain==2 (wh
31c00 69 63 68 0a 2a 2a 20 69 73 20 74 6f 20 73 61 79  ich.** is to say
31c10 20 77 68 65 6e 20 74 68 65 20 45 58 50 4c 41 49   when the EXPLAI
31c20 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 73 79 6e  N QUERY PLAN syn
31c30 74 61 78 20 69 73 20 75 73 65 64 2e 29 0a 2a 2a  tax is used.).**
31c40 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 63   This opcode rec
31c50 6f 72 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ords information
31c60 20 66 72 6f 6d 20 74 68 65 20 6f 70 74 69 6d 69   from the optimi
31c70 7a 65 72 2e 20 20 49 74 20 69 73 20 74 68 65 0a  zer.  It is the.
31c80 2a 2a 20 74 68 65 20 73 61 6d 65 20 61 73 20 61  ** the same as a
31c90 20 6e 6f 2d 6f 70 2e 20 20 54 68 69 73 20 6f 70   no-op.  This op
31ca0 63 6f 64 65 73 6e 65 76 65 72 20 61 70 70 65 61  codesnever appea
31cb0 72 73 20 69 6e 20 61 20 72 65 61 6c 20 56 4d 20  rs in a real VM 
31cc0 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 64 65 66 61  program..*/.defa
31cd0 75 6c 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ult: {          
31ce0 2f 2a 20 54 68 69 73 20 69 73 20 72 65 61 6c 6c  /* This is reall
31cf0 79 20 4f 50 5f 4e 6f 6f 70 20 61 6e 64 20 4f 50  y OP_Noop and OP
31d00 5f 45 78 70 6c 61 69 6e 20 2a 2f 0a 20 20 61 73  _Explain */.  as
31d10 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
31d20 65 3d 3d 4f 50 5f 4e 6f 6f 70 20 7c 7c 20 70 4f  e==OP_Noop || pO
31d30 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 78  p->opcode==OP_Ex
31d40 70 6c 61 69 6e 20 29 3b 0a 20 20 62 72 65 61 6b  plain );.  break
31d50 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ;.}../**********
31d60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31d70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31d80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31d90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31da0 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 61 73 65 73  ***.** The cases
31db0 20 6f 66 20 74 68 65 20 73 77 69 74 63 68 20 73   of the switch s
31dc0 74 61 74 65 6d 65 6e 74 20 61 62 6f 76 65 20 74  tatement above t
31dd0 68 69 73 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20  his line should 
31de0 61 6c 6c 20 62 65 20 69 6e 64 65 6e 74 65 64 0a  all be indented.
31df0 2a 2a 20 62 79 20 36 20 73 70 61 63 65 73 2e 20  ** by 6 spaces. 
31e00 20 42 75 74 20 74 68 65 20 6c 65 66 74 2d 6d 6f   But the left-mo
31e10 73 74 20 36 20 73 70 61 63 65 73 20 68 61 76 65  st 6 spaces have
31e20 20 62 65 65 6e 20 72 65 6d 6f 76 65 64 20 74 6f   been removed to
31e30 20 69 6d 70 72 6f 76 65 20 74 68 65 0a 2a 2a 20   improve the.** 
31e40 72 65 61 64 61 62 69 6c 69 74 79 2e 20 20 46 72  readability.  Fr
31e50 6f 6d 20 74 68 69 73 20 70 6f 69 6e 74 20 6f 6e  om this point on
31e60 20 64 6f 77 6e 2c 20 74 68 65 20 6e 6f 72 6d 61   down, the norma
31e70 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 72 75  l indentation ru
31e80 6c 65 73 20 61 72 65 0a 2a 2a 20 72 65 73 74 6f  les are.** resto
31e90 72 65 64 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  red..***********
31ea0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31eb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31ec0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31ed0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
31ee0 2a 2a 2f 0a 20 20 20 20 7d 0a 0a 23 69 66 64 65  **/.    }..#ifde
31ef0 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20  f VDBE_PROFILE. 
31f00 20 20 20 7b 0a 20 20 20 20 20 20 75 36 34 20 65     {.      u64 e
31f10 6c 61 70 73 65 64 20 3d 20 73 71 6c 69 74 65 33  lapsed = sqlite3
31f20 48 77 74 69 6d 65 28 29 20 2d 20 73 74 61 72 74  Hwtime() - start
31f30 3b 0a 20 20 20 20 20 20 70 4f 70 2d 3e 63 79 63  ;.      pOp->cyc
31f40 6c 65 73 20 2b 3d 20 65 6c 61 70 73 65 64 3b 0a  les += elapsed;.
31f50 20 20 20 20 20 20 70 4f 70 2d 3e 63 6e 74 2b 2b        pOp->cnt++
31f60 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  ;.    }.#endif..
31f70 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f      /* The follo
31f80 77 69 6e 67 20 63 6f 64 65 20 61 64 64 73 20 6e  wing code adds n
31f90 6f 74 68 69 6e 67 20 74 6f 20 74 68 65 20 61 63  othing to the ac
31fa0 74 75 61 6c 20 66 75 6e 63 74 69 6f 6e 61 6c 69  tual functionali
31fb0 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65  ty.    ** of the
31fc0 20 70 72 6f 67 72 61 6d 2e 20 20 49 74 20 69 73   program.  It is
31fd0 20 6f 6e 6c 79 20 68 65 72 65 20 66 6f 72 20 74   only here for t
31fe0 65 73 74 69 6e 67 20 61 6e 64 20 64 65 62 75 67  esting and debug
31ff0 67 69 6e 67 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20  ging..    ** On 
32000 74 68 65 20 6f 74 68 65 72 20 68 61 6e 64 2c 20  the other hand, 
32010 69 74 20 64 6f 65 73 20 62 75 72 6e 20 43 50 55  it does burn CPU
32020 20 63 79 63 6c 65 73 20 65 76 65 72 79 20 74 69   cycles every ti
32030 6d 65 20 74 68 72 6f 75 67 68 0a 20 20 20 20 2a  me through.    *
32040 2a 20 74 68 65 20 65 76 61 6c 75 61 74 6f 72 20  * the evaluator 
32050 6c 6f 6f 70 2e 20 20 53 6f 20 77 65 20 63 61 6e  loop.  So we can
32060 20 6c 65 61 76 65 20 69 74 20 6f 75 74 20 77 68   leave it out wh
32070 65 6e 20 4e 44 45 42 55 47 20 69 73 20 64 65 66  en NDEBUG is def
32080 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66  ined..    */.#if
32090 6e 64 65 66 20 4e 44 45 42 55 47 0a 20 20 20 20  ndef NDEBUG.    
320a0 61 73 73 65 72 74 28 20 70 63 3e 3d 2d 31 20 26  assert( pc>=-1 &
320b0 26 20 70 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 0a  & pc<p->nOp );..
320c0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
320d0 42 55 47 0a 20 20 20 20 69 66 28 20 64 62 2d 3e  BUG.    if( db->
320e0 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56  flags & SQLITE_V
320f0 64 62 65 54 72 61 63 65 20 29 7b 0a 20 20 20 20  dbeTrace ){.    
32100 20 20 69 66 28 20 72 63 21 3d 30 20 29 20 70 72    if( rc!=0 ) pr
32110 69 6e 74 66 28 22 72 63 3d 25 64 5c 6e 22 2c 72  intf("rc=%d\n",r
32120 63 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4f  c);.      if( pO
32130 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 28 4f 50  p->opflags & (OP
32140 46 4c 47 5f 4f 55 54 32 5f 50 52 45 52 45 4c 45  FLG_OUT2_PRERELE
32150 41 53 45 7c 4f 50 46 4c 47 5f 4f 55 54 32 29 20  ASE|OPFLG_OUT2) 
32160 29 7b 0a 20 20 20 20 20 20 20 20 72 65 67 69 73  ){.        regis
32170 74 65 72 54 72 61 63 65 28 70 4f 70 2d 3e 70 32  terTrace(pOp->p2
32180 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  , &aMem[pOp->p2]
32190 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
321a0 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67   if( pOp->opflag
321b0 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33 20 29  s & OPFLG_OUT3 )
321c0 7b 0a 20 20 20 20 20 20 20 20 72 65 67 69 73 74  {.        regist
321d0 65 72 54 72 61 63 65 28 70 4f 70 2d 3e 70 33 2c  erTrace(pOp->p3,
321e0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29   &aMem[pOp->p3])
321f0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
32200 23 65 6e 64 69 66 20 20 2f 2a 20 53 51 4c 49 54  #endif  /* SQLIT
32210 45 5f 44 45 42 55 47 20 2a 2f 0a 23 65 6e 64 69  E_DEBUG */.#endi
32220 66 20 20 2f 2a 20 4e 44 45 42 55 47 20 2a 2f 0a  f  /* NDEBUG */.
32230 20 20 7d 20 20 2f 2a 20 54 68 65 20 65 6e 64 20    }  /* The end 
32240 6f 66 20 74 68 65 20 66 6f 72 28 3b 3b 29 20 6c  of the for(;;) l
32250 6f 6f 70 20 74 68 65 20 6c 6f 6f 70 73 20 74 68  oop the loops th
32260 72 6f 75 67 68 20 6f 70 63 6f 64 65 73 20 2a 2f  rough opcodes */
32270 0a 0a 20 20 2f 2a 20 49 66 20 77 65 20 72 65 61  ..  /* If we rea
32280 63 68 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 69  ch this point, i
32290 74 20 6d 65 61 6e 73 20 74 68 61 74 20 65 78 65  t means that exe
322a0 63 75 74 69 6f 6e 20 69 73 20 66 69 6e 69 73 68  cution is finish
322b0 65 64 20 77 69 74 68 0a 20 20 2a 2a 20 61 6e 20  ed with.  ** an 
322c0 65 72 72 6f 72 20 6f 66 20 73 6f 6d 65 20 6b 69  error of some ki
322d0 6e 64 2e 0a 20 20 2a 2f 0a 76 64 62 65 5f 65 72  nd..  */.vdbe_er
322e0 72 6f 72 5f 68 61 6c 74 3a 0a 20 20 61 73 73 65  ror_halt:.  asse
322f0 72 74 28 20 72 63 20 29 3b 0a 20 20 70 2d 3e 72  rt( rc );.  p->r
32300 63 20 3d 20 72 63 3b 0a 20 20 74 65 73 74 63 61  c = rc;.  testca
32310 73 65 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61  se( sqlite3Globa
32320 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d 30 20  lConfig.xLog!=0 
32330 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67  );.  sqlite3_log
32340 28 72 63 2c 20 22 73 74 61 74 65 6d 65 6e 74 20  (rc, "statement 
32350 61 62 6f 72 74 73 20 61 74 20 25 64 3a 20 5b 25  aborts at %d: [%
32360 73 5d 20 25 73 22 2c 20 0a 20 20 20 20 20 20 20  s] %s", .       
32370 20 20 20 20 20 20 20 20 20 20 20 20 70 63 2c 20              pc, 
32380 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72 72  p->zSql, p->zErr
32390 4d 73 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  Msg);.  sqlite3V
323a0 64 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 69 66  dbeHalt(p);.  if
323b0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 49 4f 45  ( rc==SQLITE_IOE
323c0 52 52 5f 4e 4f 4d 45 4d 20 29 20 64 62 2d 3e 6d  RR_NOMEM ) db->m
323d0 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b  allocFailed = 1;
323e0 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45  .  rc = SQLITE_E
323f0 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 65 73 65  RROR;.  if( rese
32400 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3e 30  tSchemaOnFault>0
32410 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52   ){.    sqlite3R
32420 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 64 62  esetOneSchema(db
32430 2c 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46  , resetSchemaOnF
32440 61 75 6c 74 2d 31 29 3b 0a 20 20 7d 0a 0a 20 20  ault-1);.  }..  
32450 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 6f  /* This is the o
32460 6e 6c 79 20 77 61 79 20 6f 75 74 20 6f 66 20 74  nly way out of t
32470 68 69 73 20 70 72 6f 63 65 64 75 72 65 2e 20 20  his procedure.  
32480 57 65 20 68 61 76 65 20 74 6f 0a 20 20 2a 2a 20  We have to.  ** 
32490 72 65 6c 65 61 73 65 20 74 68 65 20 6d 75 74 65  release the mute
324a0 78 65 73 20 6f 6e 20 62 74 72 65 65 73 20 74 68  xes on btrees th
324b0 61 74 20 77 65 72 65 20 61 63 71 75 69 72 65 64  at were acquired
324c0 20 61 74 20 74 68 65 0a 20 20 2a 2a 20 74 6f 70   at the.  ** top
324d0 2e 20 2a 2f 0a 76 64 62 65 5f 72 65 74 75 72 6e  . */.vdbe_return
324e0 3a 0a 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  :.  db->lastRowi
324f0 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20  d = lastRowid;. 
32500 20 74 65 73 74 63 61 73 65 28 20 6e 56 6d 53 74   testcase( nVmSt
32510 65 70 3e 30 20 29 3b 0a 20 20 70 2d 3e 61 43 6f  ep>0 );.  p->aCo
32520 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d  unter[SQLITE_STM
32530 54 53 54 41 54 55 53 5f 56 4d 5f 53 54 45 50 5d  TSTATUS_VM_STEP]
32540 20 2b 3d 20 28 69 6e 74 29 6e 56 6d 53 74 65 70   += (int)nVmStep
32550 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c  ;.  sqlite3VdbeL
32560 65 61 76 65 28 70 29 3b 0a 20 20 72 65 74 75 72  eave(p);.  retur
32570 6e 20 72 63 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70  n rc;..  /* Jump
32580 20 74 6f 20 68 65 72 65 20 69 66 20 61 20 73 74   to here if a st
32590 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6c 61 72  ring or blob lar
325a0 67 65 72 20 74 68 61 6e 20 53 51 4c 49 54 45 5f  ger than SQLITE_
325b0 4d 41 58 5f 4c 45 4e 47 54 48 0a 20 20 2a 2a 20  MAX_LENGTH.  ** 
325c0 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e 0a  is encountered..
325d0 20 20 2a 2f 0a 74 6f 6f 5f 62 69 67 3a 0a 20 20    */.too_big:.  
325e0 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
325f0 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
32600 2c 20 22 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f  , "string or blo
32610 62 20 74 6f 6f 20 62 69 67 22 29 3b 0a 20 20 72  b too big");.  r
32620 63 20 3d 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49  c = SQLITE_TOOBI
32630 47 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65  G;.  goto vdbe_e
32640 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a  rror_halt;..  /*
32650 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66   Jump to here if
32660 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c   a malloc() fail
32670 73 2e 0a 20 20 2a 2f 0a 6e 6f 5f 6d 65 6d 3a 0a  s..  */.no_mem:.
32680 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c    db->mallocFail
32690 65 64 20 3d 20 31 3b 0a 20 20 73 71 6c 69 74 65  ed = 1;.  sqlite
326a0 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
326b0 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 6f 75 74  ErrMsg, db, "out
326c0 20 6f 66 20 6d 65 6d 6f 72 79 22 29 3b 0a 20 20   of memory");.  
326d0 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  rc = SQLITE_NOME
326e0 4d 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65  M;.  goto vdbe_e
326f0 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a  rror_halt;..  /*
32700 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 66 6f   Jump to here fo
32710 72 20 61 6e 79 20 6f 74 68 65 72 20 6b 69 6e 64  r any other kind
32720 20 6f 66 20 66 61 74 61 6c 20 65 72 72 6f 72 2e   of fatal error.
32730 20 20 54 68 65 20 22 72 63 22 20 76 61 72 69 61    The "rc" varia
32740 62 6c 65 0a 20 20 2a 2a 20 73 68 6f 75 6c 64 20  ble.  ** should 
32750 68 6f 6c 64 20 74 68 65 20 65 72 72 6f 72 20 6e  hold the error n
32760 75 6d 62 65 72 2e 0a 20 20 2a 2f 0a 61 62 6f 72  umber..  */.abor
32770 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3a 0a  t_due_to_error:.
32780 20 20 61 73 73 65 72 74 28 20 70 2d 3e 7a 45 72    assert( p->zEr
32790 72 4d 73 67 3d 3d 30 20 29 3b 0a 20 20 69 66 28  rMsg==0 );.  if(
327a0 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
327b0 64 20 29 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  d ) rc = SQLITE_
327c0 4e 4f 4d 45 4d 3b 0a 20 20 69 66 28 20 72 63 21  NOMEM;.  if( rc!
327d0 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f  =SQLITE_IOERR_NO
327e0 4d 45 4d 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  MEM ){.    sqlit
327f0 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
32800 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73  zErrMsg, db, "%s
32810 22 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74 72  ", sqlite3ErrStr
32820 28 72 63 29 29 3b 0a 20 20 7d 0a 20 20 67 6f 74  (rc));.  }.  got
32830 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c  o vdbe_error_hal
32840 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f  t;..  /* Jump to
32850 20 68 65 72 65 20 69 66 20 74 68 65 20 73 71 6c   here if the sql
32860 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29  ite3_interrupt()
32870 20 41 50 49 20 73 65 74 73 20 74 68 65 20 69 6e   API sets the in
32880 74 65 72 72 75 70 74 0a 20 20 2a 2a 20 66 6c 61  terrupt.  ** fla
32890 67 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75  g..  */.abort_du
328a0 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3a 0a  e_to_interrupt:.
328b0 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 75 31    assert( db->u1
328c0 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29  .isInterrupted )
328d0 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  ;.  rc = SQLITE_
328e0 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 70 2d 3e  INTERRUPT;.  p->
328f0 72 63 20 3d 20 72 63 3b 0a 20 20 73 71 6c 69 74  rc = rc;.  sqlit
32900 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
32910 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73  zErrMsg, db, "%s
32920 22 2c 20 73 71 6c 69 74 65 33 45 72 72 53 74 72  ", sqlite3ErrStr
32930 28 72 63 29 29 3b 0a 20 20 67 6f 74 6f 20 76 64  (rc));.  goto vd
32940 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 7d  be_error_halt;.}
32950 0a                                               .